<?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>216041</bug_id>
          
          <creation_ts>2020-09-01 10:03:38 -0700</creation_ts>
          <short_desc>Move NetworkProcessProxy ownership from WebProcessPool to WebsiteDataStore</short_desc>
          <delta_ts>2021-07-21 03:25:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=203547</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=217006</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=217142</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=228128</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>216822</dependson>
    
    <dependson>216927</dependson>
    
    <dependson>217063</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>beidson</cc>
    
    <cc>berto</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>mkwst</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1684515</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-01 10:03:38 -0700</bug_when>
    <thetext>Move NetworkProcessProxy ownership from WebProcessPool to WebsiteDataStore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684517</commentid>
    <comment_count>1</comment_count>
      <attachid>407690</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-01 10:04:54 -0700</bug_when>
    <thetext>Created attachment 407690
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684518</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-09-01 10:05:45 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684520</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-01 10:07:28 -0700</bug_when>
    <thetext>I&apos;m separating this approach&apos;s attempts so the EWS bubbles load faster and to keep the two approaches separate from each other so I can see my progress.
This first patch is just to see the EWS results.  It is not done yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685814</commentid>
    <comment_count>4</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-09-04 12:28:42 -0700</bug_when>
    <thetext>Seems like this breaks api tests on macOS.

https://ews-build.webkit.org/#/builders/3/builds/31500
https://ews-build.webkit.org/#/builders/3/builds/31493
https://ews-build.webkit.org/#/builders/3/builds/31485</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686604</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-08 10:04:12 -0700</bug_when>
    <thetext>&lt;rdar://problem/68514363&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688357</commentid>
    <comment_count>6</comment_count>
      <attachid>408733</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-14 12:15:43 -0700</bug_when>
    <thetext>Created attachment 408733
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688358</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-09-14 12:16:31 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See https://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688359</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-14 12:16:43 -0700</bug_when>
    <thetext>Not done yet.  Uploading WIP to get a checkpoint on which tests still need work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688822</commentid>
    <comment_count>9</comment_count>
      <attachid>408853</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-15 13:23:25 -0700</bug_when>
    <thetext>Created attachment 408853
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690118</commentid>
    <comment_count>10</comment_count>
      <attachid>409211</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-19 14:21:33 -0700</bug_when>
    <thetext>Created attachment 409211
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690122</commentid>
    <comment_count>11</comment_count>
      <attachid>409214</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-19 16:34:05 -0700</bug_when>
    <thetext>Created attachment 409214
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690439</commentid>
    <comment_count>12</comment_count>
      <attachid>409300</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-21 12:36:33 -0700</bug_when>
    <thetext>Created attachment 409300
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690531</commentid>
    <comment_count>13</comment_count>
      <attachid>409323</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-21 14:59:59 -0700</bug_when>
    <thetext>Created attachment 409323
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690540</commentid>
    <comment_count>14</comment_count>
      <attachid>409327</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-21 15:13:04 -0700</bug_when>
    <thetext>Created attachment 409327
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690611</commentid>
    <comment_count>15</comment_count>
      <attachid>409341</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-21 18:53:21 -0700</bug_when>
    <thetext>Created attachment 409341
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690612</commentid>
    <comment_count>16</comment_count>
      <attachid>409342</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-21 18:54:36 -0700</bug_when>
    <thetext>Created attachment 409342
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690615</commentid>
    <comment_count>17</comment_count>
      <attachid>409345</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-21 19:51:40 -0700</bug_when>
    <thetext>Created attachment 409345
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690629</commentid>
    <comment_count>18</comment_count>
      <attachid>409349</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-21 23:42:41 -0700</bug_when>
    <thetext>Created attachment 409349
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690635</commentid>
    <comment_count>19</comment_count>
      <attachid>409350</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-21 23:56:20 -0700</bug_when>
    <thetext>Created attachment 409350
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690645</commentid>
    <comment_count>20</comment_count>
      <attachid>409350</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-22 00:37:08 -0700</bug_when>
    <thetext>Comment on attachment 409350
Patch

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

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:195
&gt; +        if (m_sessionID.isEphemeral() || m_sessionID == PAL::SessionID::defaultSessionID())
&gt; +            m_networkProcess = NetworkProcessProxy::defaultNetworkProcess();

This is actually making the network process a singleton for the default session and the reason why tests are failing in GTK. I&apos;ll investigate more to see why they fail when reusing the same process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690647</commentid>
    <comment_count>21</comment_count>
      <attachid>409350</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-22 01:01:20 -0700</bug_when>
    <thetext>Comment on attachment 409350
Patch

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

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:195
&gt;&gt; +            m_networkProcess = NetworkProcessProxy::defaultNetworkProcess();
&gt; 
&gt; This is actually making the network process a singleton for the default session and the reason why tests are failing in GTK. I&apos;ll investigate more to see why they fail when reusing the same process.

Every test case uses a new web context (process pool) to ensure a clean env. What happens now is that the first test case creates a website data store for the default session id, when the next test starts a new websitedata store is created for the default session id again, and the previous one is destroyed, since destroy happens after the create, we end up removing the newly created one, since we use the session id. I don&apos;t think we can share the network process for GLib API, it&apos;s ok to move the ownership to the data manager, but the process should be created and destroyed with the data store. I think we could share a process for ephemeral sessions, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690727</commentid>
    <comment_count>22</comment_count>
      <attachid>409367</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-22 09:21:48 -0700</bug_when>
    <thetext>Created attachment 409367
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690773</commentid>
    <comment_count>23</comment_count>
      <attachid>409378</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-22 10:44:57 -0700</bug_when>
    <thetext>Created attachment 409378
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690776</commentid>
    <comment_count>24</comment_count>
      <attachid>409378</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-09-22 11:00:21 -0700</bug_when>
    <thetext>Comment on attachment 409378
Patch

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

&gt; Source/WebKit/ChangeLog:3
&gt; +        Move NetworkProcessProxy ownership from WebProcessPool to WebsiteDataStore

Could the changelog explain why we&apos;re doing this? Why this is better than the current state? It is non-obvious to me at least.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691035</commentid>
    <comment_count>25</comment_count>
      <attachid>409451</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-22 23:01:02 -0700</bug_when>
    <thetext>Created attachment 409451
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691045</commentid>
    <comment_count>26</comment_count>
      <attachid>409452</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-23 00:19:46 -0700</bug_when>
    <thetext>Created attachment 409452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691177</commentid>
    <comment_count>27</comment_count>
      <attachid>409484</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-23 10:58:38 -0700</bug_when>
    <thetext>Created attachment 409484
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691268</commentid>
    <comment_count>28</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-23 14:41:47 -0700</bug_when>
    <thetext>*** Bug 203547 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691488</commentid>
    <comment_count>29</comment_count>
      <attachid>409484</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-24 06:23:08 -0700</bug_when>
    <thetext>Comment on attachment 409484
Patch

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

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:183
&gt; -    if (m_sessionID != PAL::SessionID::defaultSessionID()) {
&gt; -        auto result = nonDefaultDataStores().add(m_sessionID, this);
&gt; -        ASSERT_UNUSED(result, result.isNewEntry);
&gt; +    auto result = allDataStores().add(m_sessionID, this);
&gt; +    ASSERT_UNUSED(result, result.isNewEntry);

This is a problem for GLib API too. In our API persistent data stores are always created with the default session ID, and are expected to be asociated with a web context (a process pool). So, you could have two default data stores each associated to a different context. Both are the default one, but the default for its network process. With this patch, creating a second data store will assert in debug. Note that we don&apos;t expose session IDs in our API on purpose. A possible solution would be to remove the concept of default session, and simply use a different session ID for each data store. After this patch the default session is not used that much, for soup we would just need to figure out how to implement the DNS resolver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691493</commentid>
    <comment_count>30</comment_count>
      <attachid>409568</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-24 06:51:27 -0700</bug_when>
    <thetext>Created attachment 409568
Rebased patch

This is the patch rebased on top of current trunk and patch attached to bug #216927.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691494</commentid>
    <comment_count>31</comment_count>
      <attachid>409569</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-24 06:52:37 -0700</bug_when>
    <thetext>Created attachment 409569
GLib API changes

This patch contains the changes I added on top of the rebased patch just to make it easier to see them</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691495</commentid>
    <comment_count>32</comment_count>
      <attachid>409569</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-24 06:54:19 -0700</bug_when>
    <thetext>Comment on attachment 409569
GLib API changes

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

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:163
&gt; +#if PLATFORM(GTK) || PLATFORM(WPE)
&gt; +    RELEASE_ASSERT_NOT_REACHED();
&gt; +#endif

I added this to catch code using the default data store with the GLib API. I think the inspector uses it and probably some other places, so a few tests might still fail. I&apos;ll check those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691496</commentid>
    <comment_count>33</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-24 06:56:54 -0700</bug_when>
    <thetext>Ah, there&apos;s also the initial accept cookie policy, but I think we no longer need that, I&apos;ll check that too, but I think bug #216927 is the only one blocking this from the GLib API now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691541</commentid>
    <comment_count>34</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-24 09:14:54 -0700</bug_when>
    <thetext>Wonderful!  Thanks, Carlos!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691581</commentid>
    <comment_count>35</comment_count>
      <attachid>409598</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-24 10:53:59 -0700</bug_when>
    <thetext>Created attachment 409598
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691587</commentid>
    <comment_count>36</comment_count>
      <attachid>409600</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-24 11:00:37 -0700</bug_when>
    <thetext>Created attachment 409600
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691594</commentid>
    <comment_count>37</comment_count>
      <attachid>409603</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-24 11:11:59 -0700</bug_when>
    <thetext>Created attachment 409603
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691598</commentid>
    <comment_count>38</comment_count>
      <attachid>409604</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-24 11:17:44 -0700</bug_when>
    <thetext>Created attachment 409604
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691615</commentid>
    <comment_count>39</comment_count>
      <attachid>409607</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-24 11:38:55 -0700</bug_when>
    <thetext>Created attachment 409607
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691703</commentid>
    <comment_count>40</comment_count>
      <attachid>409631</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-24 16:06:30 -0700</bug_when>
    <thetext>Created attachment 409631
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691912</commentid>
    <comment_count>41</comment_count>
      <attachid>409631</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-09-25 09:42:17 -0700</bug_when>
    <thetext>Comment on attachment 409631
Patch

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

Too big to critically analyze every single change.

Overall, seems fine.

Yay tests.

One specific review comment.

&gt; Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h:82
&gt; -    bool shouldEnableITPDatabase { false };
&gt; +    bool shouldEnableITPDatabase { true };

Why this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691990</commentid>
    <comment_count>42</comment_count>
      <attachid>409631</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-25 12:32:55 -0700</bug_when>
    <thetext>Comment on attachment 409631
Patch

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

&gt;&gt; Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h:82
&gt;&gt; +    bool shouldEnableITPDatabase { true };
&gt; 
&gt; Why this change?

This changed under me during my many rebases.  I don&apos;t think this did any change because it is always set from elsewhere, but I&apos;ll not make this change.
I&apos;ll also double check everything before landing to find any more there may be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692111</commentid>
    <comment_count>43</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-25 16:54:01 -0700</bug_when>
    <thetext>http://trac.webkit.org/r267608</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692157</commentid>
    <comment_count>44</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-25 23:36:13 -0700</bug_when>
    <thetext>This caused some API tests to fail on the bots.  Why they&apos;re so different than EWS, I may never know.

{
    &quot;Failed&quot;: [
        {
            &quot;output&quot;: &quot;\n/Volumes/Data/slave/catalina-release/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:1543\nValue of: isRegistered\n  Actual: false\nExpected: true\n\n&quot;, 
            &quot;name&quot;: &quot;TestWebKitAPI.ResourceLoadStatistics.MigrateDataFromMissingTopFrameUniqueRedirectSameSiteStrictTableSchema&quot;
        }, 
        {
            &quot;output&quot;: &quot;\n/Volumes/Data/slave/catalina-release/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:1582\nExpected equality of these values:\n  static_cast&lt;int&gt;([thirdPartyData count])\n    Which is: 0\n  1\n\n\n/Volumes/Data/slave/catalina-release/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:1586\nExpected equality of these values:\n  thirdParty.thirdPartyDomain\n    Which is: \&quot;\&quot;\n  @\&quot;webkit.org\&quot;\n    Which is: \&quot;webkit.org\&quot;\n\n\n/Volumes/Data/slave/catalina-release/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:1591\nExpected equality of these values:\n  firstParty.firstPartyDomain\n    Which is: \&quot;\&quot;\n  @\&quot;apple.com\&quot;\n    Which is: \&quot;apple.com\&quot;\n\n&quot;, 
            &quot;name&quot;: &quot;TestWebKitAPI.ResourceLoadStatistics.CanAccessDataSummaryWithNoProcessPool&quot;
        }, 
        {
            &quot;output&quot;: &quot;\n/Volumes/Data/slave/catalina-release/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:1453\nValue of: isRegistered\n  Actual: false\nExpected: true\n\n&quot;, 
            &quot;name&quot;: &quot;TestWebKitAPI.ResourceLoadStatistics.MigrateDataFromIncorrectCreateTableSchema&quot;
        }
    ], 
    &quot;Timedout&quot;: [
        {
            &quot;output&quot;: &quot;&quot;, 
            &quot;name&quot;: &quot;TestWebKitAPI.ResourceLoadStatistics.ShouldNotGrandfatherOnStartup&quot;
        }, 
        {
            &quot;output&quot;: &quot;&quot;, 
            &quot;name&quot;: &quot;TestWebKitAPI.ResourceLoadStatistics.GrandfatherCallback&quot;
        }, 
        {
            &quot;output&quot;: &quot;&quot;, 
            &quot;name&quot;: &quot;TestWebKitAPI.ResourceLoadStatistics.ChildProcessesNotLaunched&quot;
        }, 
        {
            &quot;output&quot;: &quot;&quot;, 
            &quot;name&quot;: &quot;TestWebKitAPI.ResourceLoadStatistics.GrandfatherCallbackDatabase&quot;
        }, 
        {
            &quot;output&quot;: &quot;&quot;, 
            &quot;name&quot;: &quot;TestWebKitAPI.Fullscreen.WKViewDelegate&quot;
        }
    ], 
    &quot;Skipped&quot;: [], 
    &quot;Crashed&quot;: []
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692158</commentid>
    <comment_count>45</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-25 23:39:44 -0700</bug_when>
    <thetext>Reverted r267608 for reason:

Caused API test failures

Committed r267618: &lt;https://trac.webkit.org/changeset/267618&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692161</commentid>
    <comment_count>46</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-26 00:26:13 -0700</bug_when>
    <thetext>Please, give me some time to check the layout test failures too before landing this again. See bug #217006</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692495</commentid>
    <comment_count>47</comment_count>
      <attachid>409631</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-28 00:56:16 -0700</bug_when>
    <thetext>Comment on attachment 409631
Patch

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

&gt; Tools/WebKitTestRunner/TestController.cpp:-3173
&gt; -    WKContextSetPrimaryWebsiteDataStore(context, defaultWebsiteDataStore());

This is the problem of layout tests for GTK and WPE. The WTR default data store is not set as web view data store either now, so when the web page is created the default data store s created and used for the page. I&apos;ll submit a rebased patch with the fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692873</commentid>
    <comment_count>48</comment_count>
      <attachid>409981</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-29 03:47:36 -0700</bug_when>
    <thetext>Created attachment 409981
Rebased patch

Patch rebased and updated to fix GTK and WPE layout tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693017</commentid>
    <comment_count>49</comment_count>
      <attachid>410019</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-29 11:02:24 -0700</bug_when>
    <thetext>Created attachment 410019
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693030</commentid>
    <comment_count>50</comment_count>
      <attachid>410023</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-29 11:17:25 -0700</bug_when>
    <thetext>Created attachment 410023
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693166</commentid>
    <comment_count>51</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-29 14:44:05 -0700</bug_when>
    <thetext>http://trac.webkit.org/r267763</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694949</commentid>
    <comment_count>52</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-10-05 16:46:44 -0700</bug_when>
    <thetext>This was rdar://problem/69175060</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719991</commentid>
    <comment_count>53</comment_count>
      <attachid>410023</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-01-15 13:51:34 -0800</bug_when>
    <thetext>Comment on attachment 410023
Patch

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

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:-350
&gt; -    addIndexedDatabaseSession(sessionID, parameters.defaultDataStoreParameters.indexedDatabaseDirectory, parameters.defaultDataStoreParameters.indexedDatabaseDirectoryExtensionHandle);

This is still needed.  See https://bugs.webkit.org/show_bug.cgi?id=220666</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407690</attachid>
            <date>2020-09-01 10:04:54 -0700</date>
            <delta_ts>2020-09-14 12:15:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200901100452.patch</filename>
            <type>text/plain</type>
            <size>282496</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2Mzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDc4ZDRhM2RmMTZiNGJhYmRk
YmQ5ZjZkNTgyOTdmNDE1ZGFhM2M0YmYuLjA1NmMyYWE0MDFjOWU2NjI0ZWY1MzgyNThiMTcxMGQ5
ZWM1ZGZkZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzM4IEBACisyMDIwLTA5LTAxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24p
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0
b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuY3BwOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBD
b29raWVTdG9yZTo6Y29va2llc0ZvclVSTCk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9y
ZTo6c2V0Q29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29v
a2llKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVzdHJveWVkKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6dW5y
ZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmNwcDoKKyAgICAgICAgKFdLQ29udGV4dEdldENvb2tpZU1hbmFn
ZXIpOgorICAgICAgICAoV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKToKKyAgICAg
ICAgKFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgIChXS0Nv
bnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdLQ29u
dGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdLQ29udGV4dFNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcpOiBEZWxldGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9zZXRDb29raWVBY2NlcHRQb2xpY3k6XSk6CisgICAgICAgICgtW1dLUHJvY2Vzc1Bv
b2wgX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6XSk6CisgICAgICAgICgtW1dL
UHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1By
b2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3Jl
IF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChf
V2ViS2l0Q29va2llTWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUp
OgorICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9hZGRfY29va2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29v
a2llcyk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAg
ICAod2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1
dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNz
L0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lm1tOgorICAgICAgICAoV2ViS2l0
OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbik6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6
OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVz
cyk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5k
UmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OkRvd25sb2FkUHJveHlNYXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5
TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAg
IChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0
YXJ0TG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5OjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OmF0dGVtcHRSZWxhdW5jaEFmdGVyQ3Jhc2hJZk5lY2Vzc2FyeSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tn
cm91bmRQcmlvcml0eSk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sU2hvdWxkVGFr
ZVVJQmFja2dyb3VuZEFzc2VydGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRo
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OndlYnNp
dGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vz
c2VzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJv
Y2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJv
Y2Vzc0Fzc2VydGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZl
bnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRl
Q29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVB
bGxDb29raWVzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0QWxsQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3Vw
cGxlbWVudE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRl
cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpjcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50
aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25V
UkxGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlj
a0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxT
Y2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6fldlYlByb2Nlc3NQb29sKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3
YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxp
emVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nl
c3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVT
ZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpy
ZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRTZXJ2
aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29u
dGVudFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJl
Z2lzdGVyVVJMU2NoZW1lQXNMb2NhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpyZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFu
ZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2Jh
bFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JXZWJTb2NrZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJD
YWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpz
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHlGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
Ojp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzeW5jTmV0d29ya1Byb2Nlc3NDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc0Fz
c2VydGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29y
a2VyUGFnZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRpZENv
bW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rp
dml0eUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
aGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5l
dHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVj
ZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpk
dW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbik6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVh
clByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c3VibWl0VGVsZW1ldHJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3Vt
bWFyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2ll
QmxvY2tpbmdVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hl
ZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0
aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0Vu
dHJpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bG9n
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFz
SGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fk
c1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9T
YW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVE
b21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNl
c3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFw
cEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbmFt
ZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
Ojpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0
d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1
bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3Rv
cmVGb3JTZXNzaW9uSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwZW5k
aW5nQ29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmFkZFBlbmRpbmdDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRh
U3RvcmVTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZv
cm1TZXROZXR3b3JrUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL2dsaWIvV2ViUHJv
Y2Vzc1Byb3h5R0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cGxh
dGZvcm1HZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJDb29r
aWVNYW5hZ2VyUHJveHlTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSk6CisgICAgICAgICogVUlQcm9jZXNz
L3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyk6CisKIDIwMjAtMDktMDEg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBG
aXggY3Jhc2ggZHVyaW5nIFdlYlBhZ2UgY29uc3RydWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAppbmRl
eCBmY2UyMzg5ODdhNzg1MGYxOGM5ZjMwNmM1MGU5OGNlOTg4ZDEyNWZkLi5lYjU4ZmM5NDVkMTky
NTU0NjFiODYwZjRhOGI4ZGM2MTI1ZjUzZjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCkBAIC0xNTEs
NyArMTUxLDcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LAogCiB2b2lkIFdlYkNvb2tpZU1hbmFn
ZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQ
Q29va2llQWNjZXB0UG9saWN5KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBjb21wbGV0
aW9uSGFuZGxlcihtX3Byb2Nlc3MuZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuY29va2llQWNjZXB0
UG9saWN5KCkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5zdG9yYWdlU2Vzc2lv
bihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKS0+Y29va2llQWNjZXB0UG9saWN5
KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggMzAwNTNkYTRkNzdhMzFhOWZmYTJi
NTJjYTMxZjNjYzc3YTkyOTE0My4uZDdjZjU4YzdmNzgxOTdhODVjYjU0NmE3MWI5MzI5MWMxOTBk
NzA4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAKQEAgLTM0NSwyOSArMzQ1LDE5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxp
emVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiAKICAg
ICBzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUocGFyYW1ldGVycy5lbmFibGVBZENsaWNr
QXR0cmlidXRpb25EZWJ1Z01vZGUpOwogCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBl
cm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25J
RDsKLSAgICBzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZSgqdGhp
cywgV1RGTW92ZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycykpKTsKLQotICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJt
YW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFn
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgYWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1h
bmFnZXIoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBl
ck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwotCisgICAgZm9yIChhdXRvJiBkYXRhU3RvcmVQYXJhbWV0ZXJzIDogcGFyYW1ldGVycy5kYXRh
U3RvcmVQYXJhbWV0ZXJzKSB7CisgICAgICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOworICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNo
ZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBhZGRTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2lu
U3RvcmFnZVF1b3RhLCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9y
YWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBkYXRh
U3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lv
bihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
LmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZElu
ZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2VuZGlmCi0KKyAgICAgICAgbV9zdG9yYWdlTWFu
YWdlclNldC0+YWRkKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VE
aXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKKyAgICAgICAgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNp
dGVEYXRhU3RvcmVTZXNzaW9uKCp0aGlzLCBXVEZNb3ZlKGRhdGFTdG9yZVBhcmFtZXRlcnMpKTsK
ICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgYm9vbCBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkID0gdHJ1ZTsKLSAgICBhZGRTZXJ2aWNlV29ya2VyU2Vz
c2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZFNlcnZpY2VXb3Jr
ZXJTZXNzaW9uKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKGRhdGFTdG9yZVBhcmFtZXRlcnMu
c2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIGRhdGFTdG9yZVBhcmFtZXRlcnMu
c2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5k
aWYKLQotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvKiBkZWZhdWx0U2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9u
KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotICAgIGF1dG8qIGRlZmF1bHRT
dG9yYWdlU2Vzc2lvbiA9IGRlZmF1bHRTZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsK
LSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIGRlZmF1bHRTdG9yYWdlU2Vzc2lv
bi0+c2V0Q29va2llKGNvb2tpZSk7CisgICAgfQogCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50
IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+aW5pdGlhbGl6
ZShwYXJhbWV0ZXJzKTsKQEAgLTQyNywxMiArNDE3LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
Y3JlYXRlTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoUHJvY2Vzc0lkZW50aWZpZXIgaWRl
bnQKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpCiB7Ci0g
ICAgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5jbGVhckNyZWRl
bnRpYWxzKCk7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+bmV0d29ya1Nl
c3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkpCi0gICAgICAgIG5ldHdv
cmtTZXNzaW9uLT5jbGVhckNyZWRlbnRpYWxzKCk7Ci0gICAgZWxzZQotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLQogICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbXSAoYXV0byYgbmV0
d29ya1Nlc3Npb24pIHsKICAgICAgICAgaWYgKGF1dG8gc3RvcmFnZVNlc3Npb24gPSBuZXR3b3Jr
U2Vzc2lvbi5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKSkKICAgICAgICAgICAgIHN0b3JhZ2VTZXNz
aW9uLT5jcmVkZW50aWFsU3RvcmFnZSgpLmNsZWFyQ3JlZGVudGlhbHMoKTsKQEAgLTUxMiw4ICs0
OTYsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vz
c2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5z
dXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNob3VsZFVz
ZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFzZSkKICNl
bmRpZgogewotICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSk7Ci0KICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmV0d29ya1N0b3JhZ2VTZXNz
aW9ucy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0Vu
dHJ5KQogICAgICAgICByZXR1cm47CkBAIC01MjgsNyArNTEwLDcgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29s
IHNob3VsZFUKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllciA9IG1ha2VT
dHJpbmcoaWRlbnRpZmllckJhc2UsICIuUHJpdmF0ZUJyb3dzaW5nLiIsIGNyZWF0ZUNhbm9uaWNh
bFVVSURTdHJpbmcoKSkuY3JlYXRlQ0ZTdHJpbmcoKTsKICAgICBpZiAoc2Vzc2lvbklELmlzRXBo
ZW1lcmFsKCkpCiAgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gYWRvcHRDRihjcmVhdGVQcml2YXRl
U3RvcmFnZVNlc3Npb24oY2ZJZGVudGlmaWVyLmdldCgpKSk7Ci0gICAgZWxzZQorICAgIGVsc2Ug
aWYgKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAg
ICAgICBzdG9yYWdlU2Vzc2lvbiA9IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3Jl
YXRlQ0ZTdG9yYWdlU2Vzc2lvbkZvcklkZW50aWZpZXIoY2ZJZGVudGlmaWVyLmdldCgpKTsKIAog
ICAgIGlmIChOZXR3b3JrU3RvcmFnZVNlc3Npb246OnByb2Nlc3NNYXlVc2VDb29raWVBUEkoKSkg
ewpAQCAtNTUxLDIxICs1MzMsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y29va2llQWNjZXB0
UG9saWN5Q2hhbmdlZChIVFRQQ29va2llQWNjZXB0UG9saWN5IG5ld1BvbGljeSkKIAogV2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBOZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24o
Y29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkgY29uc3QKIHsKLSAgICBpZiAoc2Vzc2lv
bklEID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgIHJldHVy
biAmZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CiAgICAgcmV0dXJuIG1fbmV0d29ya1N0b3JhZ2VT
ZXNzaW9ucy5nZXQoc2Vzc2lvbklEKTsKIH0KIAotV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBOZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbikKLSAgICAgICAgbV9kZWZhdWx0
TmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Np
b24oKTsKLSAgICByZXR1cm4gKm1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjsKLX0KLQog
dm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBG
dW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYpPiYgZnVuY3RvcikK
IHsKLSAgICBmdW5jdG9yKGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpKTsKICAgICBmb3IgKGF1dG8m
IHN0b3JhZ2VTZXNzaW9uIDogbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLnZhbHVlcygpKQogICAg
ICAgICBmdW5jdG9yKCpzdG9yYWdlU2Vzc2lvbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXggMmE0ZTlmNjJjYWY3ZjAxYjcxMjZiNTg5
YjU0NGI1ZDcyMzcwMzBkNC4uNTA4NGIxY2YyZjc0NjRjNGNlZmQxYzJlYmE3ZDA1OTAzMzk5MGY0
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApA
QCAtMTcwLDcgKzE3MCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZm9yRWFjaE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYpPiYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5ld1Rlc3RpbmdTZXNz
aW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJik7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9p
ZCBlbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgYm9vbCBzaG91bGRVc2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYpOwpAQCAtMzcxLDcgKzM3MCw2IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSBjb25zdDsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNz
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKIApAQCAtNTQ4LDcgKzU0
Niw2IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiBtX25ldHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPj4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zOwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbV9kZWZhdWx0TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOwogCiAgICAgUmVmUHRyPFN0b3JhZ2VNYW5hZ2VyU2V0PiBtX3N0b3JhZ2VNYW5h
Z2VyU2V0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCmluZGV4IDcwZDM3NmZh
OTY0NmQwZWZmNjE2MmI1OWUxNjVlZjFmNjBhOGJhYzEuLmNmNmY0YWI4YmZkNWEyNTA5YzkzMzI0
ODUwYmRjOTY2M2M0YzRlZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBA
IC01Niw3ICs1Niw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVu
Y29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgSVBDOjplbmNvZGUoZW5jb2Rl
ciwgbmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwogICAgIGVuY29kZXIgPDwgc3RvcmFnZUFjY2Vz
c0FQSUVuYWJsZWQ7CiAjZW5kaWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzOworICAgIGVuY29kZXIgPDwgZGF0YVN0b3JlUGFyYW1ldGVyczsKICNpZiBVU0UoU09V
UCkKICAgICBlbmNvZGVyIDw8IGNvb2tpZUFjY2VwdFBvbGljeTsKICAgICBlbmNvZGVyIDw8IGln
bm9yZVRMU0Vycm9yczsKQEAgLTY5LDkgKzY5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBl
bmNvZGVyIDw8IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbDsKICAgICBlbmNvZGVyIDw8IHVy
bFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKLSAgICBlbmNvZGVyIDw8IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPDwg
c2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA8PCBzaG91
bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5OwotI2VuZGlmCiAg
ICAgZW5jb2RlciA8PCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZTsKICAgICBlbmNvZGVyIDw8IGVu
YWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZTsKIH0KQEAgLTExOSwxMSArMTE2LDExIEBA
IGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29k
ZXImIGRlY29kZXIsIE5ldHdvcmtQcm9jCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgog
Ci0gICAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IGRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzOwotICAgIGRlY29kZXIgPj4gZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7
Ci0gICAgaWYgKCFkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycykKKyAgICBPcHRpb25hbDxWZWN0
b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+PiBkYXRhU3RvcmVQYXJhbWV0ZXJzOworICAg
IGRlY29kZXIgPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBpZiAoIWRhdGFTdG9yZVBhcmFt
ZXRlcnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMgPSBXVEZNb3ZlKCpkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyk7CisgICAg
cmVzdWx0LmRhdGFTdG9yZVBhcmFtZXRlcnMgPSBXVEZNb3ZlKCpkYXRhU3RvcmVQYXJhbWV0ZXJz
KTsKIAogI2lmIFVTRShTT1VQKQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNvb2tp
ZUFjY2VwdFBvbGljeSkpCkBAIC0xNDUsMjAgKzE0Miw2IEBAIGJvb2wgTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5ldHdvcmtQ
cm9jCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsU2NoZW1lc1JlZ2lzdGVyZWRB
c05vQWNjZXNzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0Vf
V09SS0VSKQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgT3B0
aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIXNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICByZXN1bHQuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSA9IFdURk1vdmUoKnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxk
RGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSNlbmRpZgotCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hv
dWxkRW5hYmxlSVRQRGF0YWJhc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuaAppbmRleCAxYjliM2RhZWQxY2NlYWI1ZDRmZmMzMDUwMjg5ZTE1
YmY4ODkxOGU1Li4wNGQ4NGI3ZDA4ZTFjZWM0NGRlOTQ2YmIwMmQyNmI3MmMxMmQwZDEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCkBAIC03Miw3ICs3Miw3IEBAIHN0cnVjdCBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgYm9vbCBzdG9yYWdlQWNjZXNzQVBJ
RW5hYmxlZDsKICNlbmRpZgogCi0gICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzPiBkYXRhU3RvcmVQYXJhbWV0ZXJzOwogICAgIAogI2lmIFVTRShTT1VQKQogICAgIFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5IHsgV2ViQ29yZTo6
SFRUUENvb2tpZUFjY2VwdFBvbGljeTo6QWx3YXlzQWNjZXB0IH07CkBAIC04NiwxMiArODYsNyBA
QCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFZlY3RvcjxT
dHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbDsKICAgICBWZWN0b3I8U3RyaW5nPiB1
cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCi0gICAgU3RyaW5nIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnk7Ci0gICAg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgYm9vbCBzaG91bGREaXNhYmxlU2VydmljZVdvcmtlclBy
b2Nlc3NUZXJtaW5hdGlvbkRlbGF5IHsgZmFsc2UgfTsKLSNlbmRpZgotICAgIGJvb2wgc2hvdWxk
RW5hYmxlSVRQRGF0YWJhc2UgeyBmYWxzZSB9OworICAgIGJvb2wgc2hvdWxkRW5hYmxlSVRQRGF0
YWJhc2UgeyB0cnVlIH07CiAgICAgYm9vbCBlbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01v
ZGUgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCmluZGV4IDlkNzNlYTEyZjE0OGE3
OGFiMzQ0NjljYWI4NjIxZDdjN2Q1ZDQ3NzguLjI0OWFlZDRiZTMzMmRjYzZjMWQyYWQ1ZjZkZTdh
ZWI4Y2Y4MzViYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29j
b2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KQEAgLTc4LDkgKzc4LDYgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYShjb25z
dCBOZXR3b3JrUHJvY2Vzc0MKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50
bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb250YWlu
ZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9DRk5ldHdvcmtTZXRBVFNDb250ZXh0KHBhcmFtZXRl
cnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwpAQCAtMTA3LDExICsxMDQsNiBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0
IE5ldHdvcmtQcm9jZXNzQwogICAgIFtOU1VSTENhY2hlIHNldFNoYXJlZFVSTENhY2hlOnVybENh
Y2hlLmdldCgpXTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNz
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3b3JrUHJvY2Vzczo6c291cmNlQXBwbGljYXRpb25BdWRp
dERhdGEoKSBjb25zdAogewogI2lmIFVTRShTT1VSQ0VfQVBQTElDQVRJT05fQVVESVRfREFUQSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJv
Y2Vzc0N1cmwuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQ
cm9jZXNzQ3VybC5jcHAKaW5kZXggZDk5ZjlkZDY0YmFkNmU0MmRjYzhlM2Y5YjhmMTY5Mjk5N2Y2
NzE5Mi4uNDk1MzgxMWIyMTY0ZTg5ODQ2ZjkyNzllNjIyOWQ1OTNlMjI1NmEzNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHAKQEAgLTM5LDExICszOSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3Jt
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpCiB7CiB9
CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQ
QUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IENlcnRpZmlj
YXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
bWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KaW5kZXggYzI3MzZlMDI2YTU1ZDNk
NDAyMGY4NGY0ZDY5M2QxNmI0NjUyZWQyMy4uMWUxODQ4OWY5NDYyMGYwMmE3ZDllOWU4NjllYzg2
NDkxYjdiYmQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMv
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KQEAgLTU1LDE1ICs1NSwxMSBAQCB2
b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lv
bihOZXR3b3JrUHJvY2VzcyYgbmV0dwogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1l
UGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7
CiAKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gdWlQcm9jZXNzQ29va2ll
U3RvcmFnZTsKLSAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJz
LnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSkKKyAgICBpZiAoIXNl
c3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3Jh
Z2VJZGVudGlmaWVyLmlzRW1wdHkoKSAmJiBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAg
ICAgICAgdWlQcm9jZXNzQ29va2llU3RvcmFnZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlp
bmdEYXRhKHBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIpOwogCiAg
ICAgbmV0d29ya1Byb2Nlc3MuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgbWFr
ZVN0cmluZyhiYXNlLCAnLicsIHNlc3Npb25JRC50b1VJbnQ2NCgpKSwgV1RGTW92ZSh1aVByb2Nl
c3NDb29raWVTdG9yYWdlKSk7CiAKLSAgICBhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Byb2Nlc3Mu
c3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6
IHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHNlc3Npb24tPnNldENvb2tpZShj
b29raWUpOwotCiAgICAgbmV0d29ya1Byb2Nlc3Muc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdv
cmtTZXNzaW9uOjpjcmVhdGUobmV0d29ya1Byb2Nlc3MsIFdURk1vdmUocGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKaW5kZXggNDFhZmRj
YzYxYWRjNTgzZGNmMTlmMmQ0MGFhMjg5MWY4YTAxMzI4Yi4uMDkzZDU5OTU5NmE2ODgzMGFmMDk5
M2ZhMzY4MzFlMGMzMjRiZmJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKQEAgLTE0MCwxMSArMTQwLDYg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3Mo
Y29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKICAgICBzZXRJZ25vcmVUTFNFcnJvcnMocGFyYW1l
dGVycy5pZ25vcmVUTFNFcnJvcnMpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0
U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQo
KSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGln
bm9yZVRMU0Vycm9ycykKIHsKICAgICBTb3VwTmV0d29ya1Nlc3Npb246OnNldFNob3VsZElnbm9y
ZVRMU0Vycm9ycyhpZ25vcmVUTFNFcnJvcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCmluZGV4IDZkMGMxMjlhNzQwNTEwZDM4
Njk3MzcwNWFkMDkyZWYxMzJjYzA3NWEuLjA0ODEwYjNlMTliZTk2Y2FkMWFkODJhNDRkY2VkYjI2
ZWY3ODI2MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycy5jcHAKQEAgLTQwLDEzICs0MCw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5j
b2RlciA8PCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgZW5jb2RlciA8PCB1aVByb2Nl
c3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGNvb2tpZVN0b3JhZ2VQ
YXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIGVuY29kZXIgPDwgcGVuZGluZ0Nvb2tpZXM7CiAKICNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeSA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZVRl
bXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTgzLDEyICs3OSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQ
Qzo6RGVjCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5jb29r
aWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmNvb2tpZVN0b3JhZ2VQYXRo
RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpDb29raWU+
PiBwZW5kaW5nQ29va2llczsKLSAgICBkZWNvZGVyID4+IHBlbmRpbmdDb29raWVzOwotICAgIGlm
ICghcGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFy
YW1ldGVycy5wZW5kaW5nQ29va2llcyA9IFdURk1vdmUoKnBlbmRpbmdDb29raWVzKTsKLQogI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIE9wdGlvbmFsPFN0cmluZz4gaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5OwogICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
OwpAQCAtMTAxLDE0ICs5MSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
PiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgaWYgKCFp
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBPcHRpb25hbDxTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGU+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBw
YXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
ID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCmluZGV4
IGYyN2RmNDg5ODA5ZjMxOTYwOGI2ODBjYjJhOGExYzE0YjcwMTg0MzkuLmUxYjIzMzcwMTk5ZmUz
NzAzMWU5ZGM1YzA1NzgxNTUwMjFlMzRkNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaApAQCAtNTEsMTUgKzUxLDExIEBAIHN0cnVj
dCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyB7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdWlQ
cm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlIGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIFZlY3RvcjxXZWJDb3Jl
OjpDb29raWU+IHBlbmRpbmdDb29raWVzOwogICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJh
bWV0ZXJzIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQogICAgIFN0cmluZyBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRp
ZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCmluZGV4IDljOGYwM2Ex
OGZhZjZlN2YxOWVmZWRmYjg3OTY5YTA5NzNmMDQ3MWIuLjEzZDU0MWQ2MWMwNTE1MmRiOTI2NDA5
YWZlMjNjZmU5M2UyNjVhOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElIVFRQQ29va2llU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElIVFRQQ29va2llU3RvcmUuY3BwCkBAIC00Niw4ICs0Niw2IEBAIG5hbWVzcGFjZSBBUEkg
ewogSFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQogICAgIDogbV9vd25pbmdEYXRhU3RvcmUod2Vic2l0ZURh
dGFTdG9yZSkKIHsKLSAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNv
b2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bv
b2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9y
ZSgpCkBAIC01NSw4ICs1Myw2IEBAIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgp
CiAgICAgQVNTRVJUKG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFtX29ic2Vy
dmVkQ29va2llTWFuYWdlclByb3h5KTsKICAgICBBU1NFUlQoIW1fY29va2llTWFuYWdlclByb3h5
T2JzZXJ2ZXIpOwotCi0gICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9u
cygpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZmlsdGVyQXBwQm91bmRDb29raWVzKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
ODEsMzMgKzc3LDE2IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENvb2tp
ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpCiAKIHZvaWQgSFRUUENvb2tp
ZVN0b3JlOjpjb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0g
bV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMo
KTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gYWxs
Q29va2llczsKLSAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQ
QUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICAgICAgYWxsQ29va2ll
cyA9IGdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKLSAgICAgICAg
YWxsQ29va2llcy5hcHBlbmRWZWN0b3IobV9vd25pbmdEYXRhU3RvcmUtPnBlbmRpbmdDb29raWVz
KCkpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCBhbGxDb29raWVzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGZpbHRl
ckFwcEJvdW5kQ29va2llcyhhbGxDb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2ll
TWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+
KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+
c2Vzc2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHBvb2wg
PSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFibGUg
eworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1By
b2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRBbGxDb29raWVz
KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsK
ICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNG
b3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9
IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25z
KCk7Ci0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9
KTsKLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmdldENvb2tpZXMo
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgewor
ICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nl
c3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRDb29raWVzKG1fb3du
aW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsKICAgICAg
ICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICB9KTsKIH0KQEAgLTExNSw3OCArOTQsMjkgQEAgdm9pZCBIVFRQQ29va2llU3Rv
cmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG8KIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgYXBwQm91bmRDb29raWVzKSBtdXRhYmxl
IHsKLSAgICAgICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZv
ckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgICAgIGlmICghcG9vbCkgewotICAgICAg
ICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBhcHBCb3VuZENvb2tpZXMpIHsKLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogcGVuZGluZ0Nvb2tpZXMgdXNlZCBmb3IgZGVmYXVsdFNlc3Npb24gYmVj
YXVzZSBzZXNzaW9uIGNvb2tpZXMgY2Fubm90IGJlIHByb3BhZ2F0ZWQgdG8gTmV0d29yayBQcm9j
ZXNzIHdpdGggdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuCi0gICAgICAgICAgICAg
ICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgICAgICAg
ICAgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5h
ZGRQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvKiBjb29raWVNYW5hZ2Vy
ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAg
ICAgICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lv
bklEKCksIGFwcEJvdW5kQ29va2llcywgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOworICAgICAgICBhdXRvJiBj
b29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2ll
TWFuYWdlcigpOworICAgICAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMobV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCBhcHBCb3VuZENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tp
ZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFT
dG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICgh
cG9vbCkgewotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBB
TDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAg
ICAgICAgICAgZGVsZXRlQ29va2llRnJvbURlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29r
aWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+cmVtb3Zl
UGVuZGluZ0Nvb2tpZShjb29raWUpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0
YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5z
dXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1h
bmFnZXItPmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tp
ZSwgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+
bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxl
dGVDb29raWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFs
bENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAoIW1f
b3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAg
ZGVsZXRlQ29va2llc0luRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3Vw
cGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5h
Z2VyLT5kZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSk7Cisg
ICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vz
cygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUFsbENvb2tpZXMo
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKICAgICAvLyBGSVhNRTogVGhlIENvbXBs
ZXRpb25IYW5kbGVyIHNob3VsZCBiZSBwYXNzZWQgdG8gV2ViQ29va2llTWFuYWdlclByb3h5Ojpk
ZWxldGVBbGxDb29raWVzLgogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0
byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VP
cGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBzZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUocG9saWN5KTsKLSAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNv
b2tpZU1hbmFnZXItPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
LSAgICB9KTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5l
dHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGlj
eSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiBjbGFzcyBBUElXZWJDb29raWVN
YW5hZ2VyUHJveHlPYnNlcnZlciA6IHB1YmxpYyBXZWJDb29raWVNYW5hZ2VyUHJveHk6Ok9ic2Vy
dmVyIHsKQEAgLTIyMiwyMSArMTUyLDcgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVy
T2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQogCiAgICAgbV9jb29raWVNYW5hZ2VyUHJveHlP
YnNlcnZlciA9IG1ha2VVbmlxdWU8QVBJV2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI+KCp0
aGlzKTsKIAotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xG
b3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAg
IEFTU0VSVCghbV9vYnNlcnZpbmdVSVByb2Nlc3NDb29raWVzKTsKLQotICAgICAgICAvLyBMaXN0
ZW4gZm9yIGNvb2tpZSBub3RpZmljYXRpb25zIGluIHRoZSBVSVByb2Nlc3MgaW4gdGhlIG1lYW50
aW1lLgotICAgICAgICBzdGFydE9ic2VydmluZ0NoYW5nZXNUb0RlZmF1bHRVSVByb2Nlc3NDb29r
aWVTdG9yZShbdGhpc10gKCkgewotICAgICAgICAgICAgY29va2llc0RpZENoYW5nZSgpOwotICAg
ICAgICB9KTsKLQotICAgICAgICBtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMgPSB0cnVlOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94
eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Cisg
ICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9ICZtX293bmluZ0RhdGFTdG9yZS0+bmV0
d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
ICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0KIApAQCAtMjcxLDQ2ICsxODcsMTAg
QEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNEaWRDaGFuZ2UoKQogdm9pZCBIVFRQQ29v
a2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQoKQogewogICAgIG1fb2JzZXJ2ZWRDb29r
aWVNYW5hZ2VyUHJveHktPnVucmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLSAgICBtX29ic2VydmVk
Q29va2llTWFuYWdlclByb3h5ID0gbnVsbHB0cjsKLQotICAgIGF1dG8qIHBvb2wgPSBtX293bmlu
Z0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0g
ICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFu
YWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0
b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCi12b2lkIEhUVFBD
b29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewot
ICAgIEFTU0VSVCghbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsKLQot
ICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IFdlYlByb2Nlc3NQ
b29sOjpyZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihbdGhpc10oV2ViUHJvY2Vz
c1Bvb2wmIG5ld1Byb2Nlc3NQb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUt
PmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKG5ld1Byb2Nlc3NQb29sKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAvLyBOb3cgdGhhdCBhbiBhc3NvY2lhdGVkIHByb2Nlc3MgcG9vbCBl
eGlzdHMsIHdlIG5lZWQgdG8gZmx1c2ggdGhlIFVJIHByb2Nlc3MgY29va2llIHN0b3JlCi0gICAg
ICAgIC8vIHRvIG1ha2Ugc3VyZSBhbnkgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIHdpdGhpbiB0aGUg
bmV3IHByb2Nlc3MgcG9vbC4KLSAgICAgICAgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3Rv
cmUoKTsKLSAgICAgICAgbmV3UHJvY2Vzc1Bvb2wuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQot
ICAgICAgICBpZiAobV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcikgewotICAgICAgICAgICAg
bV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG5ld1Byb2Nlc3NQb29sLnN1cHBsZW1lbnQ8
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgICAgICAgICBtX29ic2VydmVk
Q29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgICAgICB9Ci0g
ICAgICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB9
KTsKLX0KLQotdm9pZCBIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9v
bE5vdGlmaWNhdGlvbnMoKQotewotICAgIGlmIChtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5l
cklkZW50aWZpZXIpCi0gICAgICAgIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyUHJvY2Vzc1Bv
b2xDcmVhdGlvbkxpc3RlbmVyKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmll
cik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSAwOwot
fQotCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmZsdXNoRGVm
YXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCkgeyB9CiBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBI
VFRQQ29va2llU3RvcmU6OmdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMo
KSB7IHJldHVybiB7IH07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElIVFRQQ29va2llU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElI
VFRQQ29va2llU3RvcmUuaAppbmRleCAwMzgwNWU2NDk3MGIzY2U5ZTM2MTA1ZGU5ZjZlYTJhZDky
ZjEzZmEyLi42M2IxZjUwZjI2OTJiMTllNjA4ODU2ZTA4YTZhY2FjNmM5NmZhNDFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCkBAIC04
Miw5ICs4Miw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSFRUUENvb2tpZVN0b3JlKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZSYpOwogCi0gICAgdm9pZCByZWdpc3RlckZvck5ld1Byb2Nlc3NQ
b29sTm90aWZpY2F0aW9ucygpOwotICAgIHZvaWQgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29s
Tm90aWZpY2F0aW9ucygpOwotCiAgICAgdm9pZCBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVT
dG9yZSgpOwogICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBnZXRBbGxEZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0Q29va2ll
SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAppbmRleCA4ZmI4ZTA5
NmQ0NjZlMjM2MWNkYjUyMDNlZmM5YzU2OGM5ZTY5NTExLi4xYWU5NmQyZWQ3YzhlYjFmOWZiYzlm
YzQyMGI4ZjJhMGY1OWU0ZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dL
Q29udGV4dC5jcHAKQEAgLTQyNiw5ICs0MjYsMTAgQEAgdm9pZCBXS0NvbnRleHRQcmVjb25uZWN0
VG9TZXJ2ZXIoV0tDb250ZXh0UmVmLCBXS1VSTFJlZikKIHsKIH0KIAotV0tDb29raWVNYW5hZ2Vy
UmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCitX
S0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYp
CiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZikt
PnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkpOworICAgIC8vIEZJ
WE1FOiBEZXByZWNhdGUgdGhpcy4gUmVwbGFjZSBpdCB3aXRoIHNvbWV0aGluZyBvbiB0aGUgV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmIGlmIG5lZWRlZC4KKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgm
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPm5ldHdvcmtQcm9j
ZXNzKCkuY29va2llTWFuYWdlcigpKTsKIH0KIAogV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29u
dGV4dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmKQpAQCAtNTQzLDkgKzU0NCw4IEBA
IHZvaWQgV0tDb250ZXh0U2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQo
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYsCiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZikt
PnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKGVuYWJsZSk7CiB9CiAK
LXZvaWQgV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKFdLQ29udGV4dFJlZiBjb250
ZXh0KQordm9pZCBXS0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24oV0tDb250ZXh0UmVm
KQogewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT51c2VUZXN0aW5nTmV0d29ya1Nlc3Np
b24oKTsKIH0KIAogdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldl
YlNvY2tldFRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgYWxsb3dzKQpAQCAtNTUz
LDEzICs1NTMsNiBAQCB2b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9y
V2ViU29ja2V0VGVzdGluZyhXS0NvbnRleHRSZWYgY29udGV4dAogICAgIFdlYktpdDo6dG9JbXBs
KGNvbnRleHQpLT5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChhbGxvd3Mp
OwogfQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vydmlj
ZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgYWxsb3dzKQotewotI2lm
IEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+c2V0
QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5kaWYK
LX0KLQogdm9pZCBXS0NvbnRleHRDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLQ29udGV4dFJlZiBj
b250ZXh0KQogewogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT5jbGVhckNhY2hlZENyZWRl
bnRpYWxzKCk7CkBAIC02MTgsNyArNjExLDcgQEAgdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2
aWNlV29ya2VycyhXS0NvbnRleHRSZWYgY29udGV4dCkKIAogUHJvY2Vzc0lEIFdLQ29udGV4dEdl
dE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihXS0NvbnRleHRSZWYgY29udGV4dFJlZikKIHsKLSAg
ICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPm5ldHdvcmtQcm9jZXNzSWRlbnRp
ZmllcigpOworICAgIHJldHVybiAwOwogfQogCiB2b2lkIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBs
dWdpbihXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tTdHJpbmdSZWYgZG9tYWluUmVmLCBXS1N0
cmluZ1JlZiBuYW1lUmVmLCBXS0FycmF5UmVmIG1pbWVUeXBlc1JlZiwgV0tBcnJheVJlZiBleHRl
bnNpb25zUmVmKQpAQCAtNjY2LDEyICs2NTksMTEgQEAgdm9pZCBXS0NvbnRleHRDbGVhckxlZ2Fj
eVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZShXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgdm8K
ICAgICB9KTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBib29sIHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MpCit2b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MoV0tDb250ZXh0UmVmLCBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mp
CiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAgV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRQ
cmltYXJ5V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tXZWJzaXRl
RGF0YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3RvcmUpCit2b2lkIFdLQ29udGV4dFNldFByaW1hcnlX
ZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiwgV0tXZWJzaXRlRGF0YVN0b3JlUmVmKQogewot
ICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRQcmltYXJ5RGF0YVN0b3JlKCpXZWJL
aXQ6OnRvSW1wbCh3ZWJzaXRlRGF0YVN0b3JlKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKaW5kZXggMzljMGNhN2NjNmE2YjZiNTVj
ODAzYjgzY2RlNWIzOGJmYzE5Yzk4ZS4uODg0NzRkMzBhMGQwYmI4NGExOWI2MTBjMmMxNWI5YWMx
MmJkMDljZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250
ZXh0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4
dFByaXZhdGUuaApAQCAtODcsMTAgKzg3LDkgQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VGVy
bWluYXRlTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29u
dGV4dFRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29udGV4dFJlZik7CiAKIFdLX0VYUE9SVCB2
b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0VGVzdGlu
ZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dz
QW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJv
b2wpOwogCiAvLyBUZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGFueSBzZWNvbmRh
cnkgcHJvY2Vzc2VzIGFyZSBzdGFydGVkLgotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VXNlVGVz
dGluZ05ldHdvcmtTZXNzaW9uKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKK1dLX0VYUE9SVCB2b2lk
IFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYgY29udGV4dCkg
V0tfQ19BUElfREVQUkVDQVRFRDsKIAogLy8gVGVzdCBvbmx5LiBTaG91bGQgYmUgY2FsbGVkIGJl
Zm9yZSBydW5uaW5nIGEgdGVzdC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dENsZWFyQ2FjaGVk
Q3JlZGVudGlhbHMoV0tDb250ZXh0UmVmIGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQppbmRleCA2ODIwZjQ5MWU5NDc1
OTVlMDBkMGNiZDJkNTg4OTUyMDcwM2E1ODA4Li5mYThlMGE3ZjU0ZTRlMzE0MDZiYTcyMDMwMDZk
ZDQwY2EzMWFkNjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbC5tbQpAQCAtMjAxLDcgKzIwMSw4IEBAIHN0YXRpYyBXS1Byb2Nlc3NQ
b29sICpzaGFyZWRQcm9jZXNzUG9vbDsKIAogLSAodm9pZClfc2V0Q29va2llQWNjZXB0UG9saWN5
OihOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kpcG9saWN5CiB7Ci0gICAgX3Byb2Nlc3NQb29sLT5z
dXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIFdlYkNvcmU6
OnRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgLy8gRklY
TUU6IERlcHJlY2F0ZSB0aGlzIGFuZCByZXBsYWNlIGl0IHdpdGggU1BJIG9uIFdLV2Vic2l0ZURh
dGFTdG9yZS4KKyAgICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBv
bGljeShQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBXZWJDb3JlOjp0b0hUVFBD
b29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0pOwogfQogCiAtIChpZClfb2JqZWN0
Rm9yQnVuZGxlUGFyYW1ldGVyOihOU1N0cmluZyAqKXBhcmFtZXRlcgpAQCAtNDM3LDEyICs0Mzgs
MTIgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNv
bnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMKIAogLSAodm9pZClfc2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzczooQk9PTCl1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
CiB7Ci0gICAgX3Byb2Nlc3NQb29sLT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2Vzcyk7CiB9CiAKIC0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIKIHsKLSAgICByZXR1cm4gX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIo
KTsKKyAgICByZXR1cm4gMDsKIH0KIAogLSAocGlkX3QpX3ByZXdhcm1lZFByb2Nlc3NJZGVudGlm
aWVyCkBAIC01NzgsMTMgKzU3OSw2IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFz
aE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAgICAgX3By
b2Nlc3NQb29sLT5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOwogfQogCi0t
ICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wp
YWxsb3dzCi17Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIF9wcm9jZXNzUG9vbC0+
c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5k
aWYKLX0KLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAtIChpZCA8X1dLR2VvbG9jYXRpb25D
b3JlTG9jYXRpb25Qcm92aWRlcj4pX2NvcmVMb2NhdGlvblByb3ZpZGVyCiB7CkBAIC02MTcsMTEg
KzYxMSw2IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFy
eShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAgICAgfSk7CiB9CiAKLS0gKEJPT0wp
X25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0
bGVtZW50Ci17Ci0gICAgcmV0dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3RpbmcoZW50aXRsZW1lbnQpOwotfQotCiAtICh2b2lkKV9jbGVhclBlcm1h
bmVudENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNwYWNlOihOU1VSTFByb3RlY3Rpb25TcGFjZSAq
KXByb3RlY3Rpb25TcGFjZQogewogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJQZXJtYW5lbnRDcmVk
ZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZShXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UocHJvdGVj
dGlvblNwYWNlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oCmluZGV4IGQzOWRiMWRkYjA5YzA4Y2M3ODAxN2Q0
ZTFmNDVmYzhkMjU2ZjVjZGYuLjVhM2Y3YThmYjdlMzczZWI2ZGY2ZDIyZGMyOTYzYjM2OWQxOWM2
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nl
c3NQb29sUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sUHJpdmF0ZS5oCkBAIC0xMjIsOSArMTIyLDcgQEAKIC0gKHZvaWQpX3ByZWNv
bm5lY3RUb1NlcnZlcjooTlNVUkwgKilzZXJ2ZXJVUkwgV0tfQVBJX0RFUFJFQ0FURURfV0lUSF9S
RVBMQUNFTUVOVCgiV0tXZWJWaWV3Ll9wcmVjb25uZWN0VG9TZXJ2ZXIiLCBtYWNvcygxMC4xMy40
LCBXS19NQUNfVEJBKSwgaW9zKDExLjMsIFdLX0lPU19UQkEpKTsKIAogLy8gVGVzdCBvbmx5Lgot
LSAodm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09M
KWFsbG93cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykpOwogLSAo
dm9pZClfZ2V0QWN0aXZlUGFnZXNPcmlnaW5zSW5XZWJQcm9jZXNzRm9yVGVzdGluZzoocGlkX3Qp
cGlkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TQXJyYXk8TlNTdHJpbmcgKj4gKikpY29t
cGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIp
KTsKLS0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0
cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygx
Mi4yKSk7CiAtICh2b2lkKV9jbGVhclBlcm1hbmVudENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNw
YWNlOihOU1VSTFByb3RlY3Rpb25TcGFjZSAqKXByb3RlY3Rpb25TcGFjZSBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIC0gKHZvaWQpX2FsbG93QW55VExTQ2VydGlm
aWNhdGVGb3JXZWJTb2NrZXRUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCmluZGV4IDlkZWEzZTZmMzIwZjIw
MTUzOTFlMWUyMDhjODc2NmI2NGExYmI4ZjUuLjcyMTI4ZjZlMzA3MzA4MjFiNjdlNDllZTgxN2Fm
MjFjZmFhNThkOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQpAQCAtNjE3LDYgKzYxNywxMSBAQCBzdGF0aWMg
VmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5T
QXJyYXkgKmRhdGFSZWNvcgogICAgIH0pOwogfQogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hh
c0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAoreworICAgIHJl
dHVybiBfd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcoZW50aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVn
YXRlPilfZGVsZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdldCgpLmdldCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFT
dG9yZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhU3RvcmVQcml2YXRlLmgKaW5kZXggZmNjYzZiNTk3ZWYzNzdlN2MwNGQ5MmRiNjcwYmQ0
MTM1ZDg2MTFmNy4uN2NlZTk2YWM5MTFiZDc2ZDY2YzA4YmU4OTZmZDg5NDg0OWYxY2Q5ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFT
dG9yZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCkBAIC04Myw2ICs4Myw4IEBAIHR5cGVkZWYgTlNfT1BU
SU9OUyhOU1VJbnRlZ2VyLCBfV0tXZWJzaXRlRGF0YVN0b3JlRmV0Y2hPcHRpb25zKSB7CiAKIC0g
KHZvaWQpX3JlbmFtZU9yaWdpbjooTlNVUkwgKilvbGROYW1lIHRvOihOU1VSTCAqKW5ld05hbWUg
Zm9yRGF0YU9mVHlwZXM6KE5TU2V0PE5TU3RyaW5nICo+ICopZGF0YVR5cGVzIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcjsKIAorLSAoQk9PTClfbmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1l
bnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsK
KwogQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCB3ZWFrKSBpZCA8X1dLV2Vic2l0ZURh
dGFTdG9yZURlbGVnYXRlPiBfZGVsZWdhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSks
IGlvcygxMy4wKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIF9XS1dl
YnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpfY29uZmlndXJhdGlvbjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2Vy
LmNwcAppbmRleCAxZWU3M2ViYzBlYTAzNmY4NmIzZmU5NDQxNDkwNzJlNmFjNGRjNzY3Li5mYjk4
ZDA1OTBjOWFkMjgyMzVkNzExYjdjYWFjOWJjNTVjOWE2NDQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcApA
QCAtNjQsOCArNjQsNyBAQCBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKIAog
ICAgIH5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUoKQogICAgIHsKLSAgICAgICAgZm9yIChh
dXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29s
cyhkYXRhTWFuYWdlcikpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklE
KCksIG51bGxwdHIpOworICAgICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigp
LnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOwogICAgIH0K
IAogICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbmFnZXI7CkBAIC0xMzksMTEg
KzEzOCw5IEBAIFdlYktpdENvb2tpZU1hbmFnZXIqIHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUo
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuCiB7CiAgICAgV2ViS2l0Q29va2llTWFu
YWdlciogbWFuYWdlciA9IFdFQktJVF9DT09LSUVfTUFOQUdFUihnX29iamVjdF9uZXcoV0VCS0lU
X1RZUEVfQ09PS0lFX01BTkFHRVIsIG51bGxwdHIpKTsKICAgICBtYW5hZ2VyLT5wcml2LT5kYXRh
TWFuYWdlciA9IGRhdGFNYW5hZ2VyOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJr
aXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1h
bmFnZXIpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhtYW5hZ2VyLT5wcml2LT5zZXNz
aW9uSUQoKSwgW21hbmFnZXJdIHsKLSAgICAgICAgICAgIGdfc2lnbmFsX2VtaXQobWFuYWdlciwg
c2lnbmFsc1tDSEFOR0VEXSwgMCk7Ci0gICAgICAgIH0pOwotICAgIH0KKyAgICBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2lnbmFsX2VtaXQo
bWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1hbmFn
ZXI7CiB9CiAKQEAgLTE3Myw4ICsxNzAsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9z
ZXRfcGVyc2lzdGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsCiAgICAg
aWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3Ig
KGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bv
b2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1
cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3Rv
cmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQ
ZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c2luZ2xldG9uKCkuc2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJp
bmc6OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBl
KHN0b3JhZ2UpKTsKIH0KIAogLyoqCkBAIC0xOTIsOCArMTg4LDcgQEAgdm9pZCB3ZWJraXRfY29v
a2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3koV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdl
ciwgV2ViS2kKIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdF
UihtYW5hZ2VyKSk7CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkK
LSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5Pigp
LT5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB0
b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0pOworICAgIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5h
Z2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSks
IFtdKCkgeyB9KTsKIH0KIAogLyoqCkBAIC0yMjQsNyArMjE5LDcgQEAgdm9pZCB3ZWJraXRfY29v
a2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3koV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdl
ciwgR0NhbmMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb2Nlc3NQb29sc1swXS0+
c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0o
V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsKKyAgICBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRU
UENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQo
dGFzay5nZXQoKSwgdG9XZWJLaXRDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7
CiB9CkBAIC0yNjksMTEgKzI2NCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9j
b29raWUoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3Jl
dHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRH
UmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkp
OwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FM
aXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdl
IGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0g
ICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0
UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9v
bHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1h
bmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0
YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5n
bGV0b24oKS5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6
OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdf
dGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KQEAgLTMy
MCwxMSArMzExLDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMoV2Vi
S2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgY29uc3QgZ2NoYXIKICAgICBnX3JldHVybl9pZl9m
YWlsKHVyaSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19u
ZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8g
Q29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNl
IG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVt
IGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0
byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xz
KG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVzKG1hbmFnZXItPnByaXYt
PnNlc3Npb25JRCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0g
V1RGTW92ZSh0YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsK
KyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmdldENvb2tpZXMobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwg
W3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29v
a2llcykgewogICAgICAgICBHTGlzdCogY29va2llc0xpc3QgPSBudWxscHRyOwogICAgICAgICBm
b3IgKGF1dG8mIGNvb2tpZSA6IGNvb2tpZXMpCiAgICAgICAgICAgICBjb29raWVzTGlzdCA9IGdf
bGlzdF9wcmVwZW5kKGNvb2tpZXNMaXN0LCBjb29raWUudG9Tb3VwQ29va2llKCkpOwpAQCAtMzc4
LDExICszNjUsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llKFdl
YktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIFNvdXBDb29raQogICAgIGdfcmV0dXJuX2lmX2Zh
aWwoY29va2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNr
X25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAv
LyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJh
c2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRo
ZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBh
dXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9v
bHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3Vw
cGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmRlbGV0ZUNvb2tpZShtYW5hZ2VyLT5w
cml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RGTW92
ZSh0YXNrKV0oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5kZWxl
dGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29r
aWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jv
b2xlYW4odGFzay5nZXQoKSwgVFJVRSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDhkZTcy
MmQ0NWJiYmFkZDU0ZDIzOWYyZTI3MWRlMTZjOTQ5MGQ1ZGIuLjc1MmZjNGMyODVhZDQyNmRkNDMx
NjJjOWQwNWJjNTU3ZDQwMzliMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCkBAIC00MDMsNyArNDAzLDYgQEAgc3Rh
dGljIHZvaWQgd2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAg
ICAgICAgcHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9uZXcoImxvY2FsLXN0b3JhZ2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxT
dG9yYWdlRGlyZWN0b3J5LmRhdGEoKSwgbnVsbHB0cikpOwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bv
b2wgPSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKGNvbmZpZ3VyYXRpb24pOwotICAgIHByaXYtPnBy
b2Nlc3NQb29sLT5zZXRQcmltYXJ5RGF0YVN0b3JlKHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdl
dERhdGFTdG9yZShwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpKTsKICAgICBwcml2LT5w
cm9jZXNzUG9vbC0+c2V0VXNlck1lc3NhZ2VIYW5kbGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2Fn
ZSYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgLy8gU2luayB0aGUgZmxvYXRpbmcgcmVmLgogICAg
ICAgICBHUmVmUHRyPFdlYktpdFVzZXJNZXNzYWdlPiB1c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJN
ZXNzYWdlQ3JlYXRlKFdURk1vdmUobWVzc2FnZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0
b21hdGlvblNlc3Npb24uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKaW5kZXggZDg3YTRkZmVjNzk0ZjMxZGNiNjRlNWU5ZWY0
YmNlNGIxOGMxOTJhMi4uZmRmOWZkY2EwMTBmNGM1ZTE0ZTlkZGEyYjM0NGMyMzI2MzcwMGRhMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0
aW9uU2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKQEAgLTEzOTIsOCArMTM5Miw3IEBAIHZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29u
dGV4dEhhbmRsZSwKICAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJodHRwT25seSJf
cywgY29va2llLmh0dHBPbmx5KSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2h0dHBP
bmx5JyB3YXMgbm90IGZvdW5kLiIpOwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29r
aWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0
b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CisgICAgcGFnZS0+
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpLnNldENv
b2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBb
Y2FsbGJhY2tdKCkgewogICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9KTsK
IH0KQEAgLTE0MDksOCArMTQwOCw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRlbGV0
ZUFsbENvb2tpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpCiAKICAgICBT
dHJpbmcgaG9zdCA9IGFjdGl2ZVVSTC5ob3N0KCkudG9TdHJpbmcoKTsKIAotICAgIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8
V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tp
ZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhv
c3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoaG9zdCkgfSk7CisgICAgcGFnZS0+
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpLmRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgp
LCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoaG9zdCkgfSk7CiB9CiAK
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldFNlc3Npb25QZXJtaXNzaW9ucyhFcnJvclN0
cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OlNlc3Npb25QZXJtaXNzaW9uRGF0YT4+JiBvdXRfcGVybWlzc2lvbnMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oCmluZGV4IDQxYzBhMGZi
ZjUwNmVmYTE0MDhiY2VmOWFmOGE5MGI4NWExYWQwOGEuLjRmMzk4YjUzMGY2MDg1NzVjOTY3Yjgz
Yzc0ZmEyZjQzMjhmNmNlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1
eGlsaWFyeVByb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGls
aWFyeVByb2Nlc3NQcm94eS5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5BdXhpbGlhcnlQcm9jZXNzUHJveHkoKTsKIAogICAgIHZvaWQgY29ubmVjdCgpOwotICAgIHZv
aWQgdGVybWluYXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZSgpOwogCiAgICAgdmly
dHVhbCBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50LmgKaW5kZXggZGJlNDRmOTU5NDEwNTExMjE1MTI4ZDI5ZDIxNGVlZTA3
NGFhZjg0Yy4uMDdhOWIzZTJkOWYwY2NkM2MxMmQ0ZTM2OTI2NzMzNGIyMjQwYjIwZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgKQEAgLTQwLDEyICs0MCwxNSBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk7CiAK
Ky8vIEZJWE1FOiBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgaXMgdW5uZWVkZWQgbm93Lgor
Ly8gVGhpcyBpcyBqdXN0IGEgbGVmdG92ZXIgb24gQ29jb2EgcGxhdGZvcm1zIHdlIGFyZSB0cnlp
bmcgdG8gbW92ZSBhd2F5IGZyb20gYW5kIGRvZXMgbm90IG5lZWQgZWxlZ2FudCBBUEkgYWJzdHJh
Y3Rpb25zLgogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IGZpbmFsIDog
cHVibGljIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IHsKLXByaXZhdGU6CitwdWJs
aWM6CisgICAgc3RhdGljIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYgc2luZ2xl
dG9uKCk7CiAgICAgdm9pZCBzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHkmLCBMZWdhY3lDdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmKSBmaW5hbDsKICAgICB2b2lkIHN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCkgZmluYWw7CiAgICAgdm9pZCBp
bnZhbGlkYXRlKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5JikgZmluYWw7Ci0KK3By
aXZhdGU6CiAgICAgSGFzaE1hcDxMZWdhY3lDdXN0b21Qcm90b2NvbElELCBSZXRhaW5QdHI8V0tD
dXN0b21Qcm90b2NvbExvYWRlcj4+IG1fbG9hZGVyTWFwOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50Lm1tCmluZGV4IDE1MTIyOTA0NWYxM2U5Y2RkYmUwOTFlNjI3YmZhMWZl
MjA2ZGUyODkuLjE0ZDBiNmJkMWQ2ZTU1NTllYzdlNmIxYTJmYmE4MzFiYjM3YWI3YmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQubW0KQEAgLTEzOSw2ICsxMzksMTIgQEAKIG5h
bWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK0xlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudCYgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
OjpzaW5nbGV0b24oKQoreworICAgIE5ldmVyRGVzdHJveWVkPExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudD4gY2xpZW50OworICAgIHJldHVybiBjbGllbnQ7Cit9CisKIHZvaWQgTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OjpzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHkmIG1hbmFnZXIsIFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9j
b2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGNvcmVSZXF1ZXN0
KQogewogICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IGNvcmVSZXF1ZXN0Lm5zVVJMUmVxdWVz
dChIVFRQQm9keVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQppbmRl
eCA5ZjViZjBkYWZmZjJlNzQ4NDgzM2Q4ZmM0OWM5ZTlhODc3NDkyYzBkLi41ZGU2NDZkMzExMzVh
NWM5OTQ4MTYyNDBkYzI4Yzk4Zjc1OGUyODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KQEAgLTEzNCw4ICsxMzQsNyBA
QCBzdGF0aWMgdm9pZCByZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCkKIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKQogewotICAgIGlmICht
X25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZXRQcm9jZXNzU3Vw
cHJlc3Npb25FbmFibGVkKHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSk7CisgICAgLy8gRklY
TUU6IERvIHNvbWV0aGluZyBoZXJlLgogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFs
dWUoKSkKQEAgLTE2Niw4ICsxNjUsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUlu
aXRpYWxpemUoKQogICAgIGlmICghW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0
c10gYm9vbEZvcktleTpAIldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyIl0pCiAg
ICAgICAgIGluc3RhbGxNZW1vcnlQcmVzc3VyZUhhbmRsZXIoKTsKIAotICAgIHNldExlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudD4oKSk7Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZP
Uk0oTUFDQ0FUQUxZU1QpCiAgICAgaWYgKCFfTUdDYWNoZVZhbGlkKCkpIHsKICAgICAgICAgZGlz
cGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklP
UklUWV9ERUZBVUxULCAwKSwgXnsKQEAgLTQ4MCwyMiArNDc3LDYgQEAgdm9pZCBXZWJQcm9jZXNz
UG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmEKIAogICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0
cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CiAKLSAgICB7Ci0gICAgICAgIGJvb2wgaXNTYWZhcmkg
PSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc01pbmlCcm93c2VyID0gZmFsc2U7Ci0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlv
bjo6aXNNb2JpbGVTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6OklP
U0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAg
ICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCk7Ci0gICAg
ICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNNaW5pQnJvd3Nl
cigpOwotI2VuZGlmCi0gICAgICAgIGlmIChpc1NhZmFyaSB8fCBpc01pbmlCcm93c2VyKSB7Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5odHRwUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdG
b3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5odHRwc1Byb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5
OihOU1N0cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgfQot
ICAgIH0KLQogICAgIHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQgPSBhZG9wdENGKF9DRk5l
dHdvcmtDb3B5QVRTQ29udGV4dCgpKTsKIAogICAgIHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NN
ZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpXZWJLaXRTdXBwcmVz
c01lbW9yeVByZXNzdXJlSGFuZGxlckRlZmF1bHRzS2V5XTsKQEAgLTUwNiwxNyArNDg3LDExIEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhCiAgICAgcGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVT
dG9yYWdlSWRlbnRpZmllciA9IGlkZW50aWZ5aW5nRGF0YUZyb21Db29raWVTdG9yYWdlKFtbTlNI
VFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gX2Nvb2tpZVN0b3JhZ2Vd
KTsKICNlbmRpZgogCi0gICAgcGFyYW1ldGVycy5zdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCA9IHN0
b3JhZ2VBY2Nlc3NBUElFbmFibGVkKCk7Ci0KICAgICBOU051bWJlciAqZGF0YWJhc2VFbmFibGVk
VmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFi
bGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogICAgIGlmIChkYXRhYmFzZUVuYWJs
ZWRWYWx1ZSkKICAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IGRh
dGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIHBhcmFtZXRl
cnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVu
Y2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuZW5hYmxlQWRD
bGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5Ojph
ZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5n
ZXQoKV1dOwotCi0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQ
ZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQoKQpA
QCAtNTk1LDExICs1NzAsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzU3VwcHJlc3Np
b25FbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gIW1fdXNlck9ic2VydmFibGVQYWdlQ291bnRl
ci52YWx1ZSgpICYmICFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIu
dmFsdWUoKTsKIH0KIAotYm9vbCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKLXsKLSAgICByZXR1
cm4gV1RGOjpoYXNFbnRpdGxlbWVudChlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24o
KS0+eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKLX0KLQogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKIGZsb2F0IFdl
YlByb2Nlc3NQb29sOjpkaXNwbGF5QnJpZ2h0bmVzcygpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAKaW5kZXggYzVkZTRlN2Qw
ZjU5MTk0ZjQzYTAyM2IwODllMzcyYzU4Y2Y4ZWUwNi4uZjdjZmY4NTJmMGJhNmQwMTU1MTE2NWRk
OGE5ZjdkNTc2M2IwMDdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcApAQCAtNzUsOCArNzUsOCBAQCB2b2lkIERvd25sb2Fk
UHJveHk6OmNhbmNlbCgpCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDAp
OworICAgIGlmIChtX2RhdGFTdG9yZSkKKyAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93
bmxvYWRJRCksIDApOwogfQogCiB2b2lkIERvd25sb2FkUHJveHk6OmludmFsaWRhdGUoKQpAQCAt
MTAzLDE1ICsxMDMsMTMgQEAgV2ViUGFnZVByb3h5KiBEb3dubG9hZFByb3h5OjpvcmlnaW5hdGlu
Z1BhZ2UoKSBjb25zdAogI2lmIFBMQVRGT1JNKENPQ09BKQogdm9pZCBEb3dubG9hZFByb3h5Ojpw
dWJsaXNoUHJvZ3Jlc3MoY29uc3QgVVJMJiBVUkwpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29s
KQorICAgIGlmICghbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgYm9vbCBjcmVh
dGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwu
ZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5k
bGUpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVh
dGVkU2FuZGJveEV4dGVuc2lvbik7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElE
LCBVUkwsIGhhbmRsZSksIDApOwotICAgIH0KKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUg
aGFuZGxlOworICAgIGJvb2wgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNpb246
OlR5cGU6OlJlYWRXcml0ZSwgaGFuZGxlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5k
Ym94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbik7CisgICAgbV9kYXRhU3RvcmUt
Pm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxpc2hE
b3dubG9hZFByb2dyZXNzKG1fZG93bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKIH0KICNlbmRp
ZiAvLyBQTEFURk9STShDT0NPQSkKIApAQCAtMTMxLDExICsxMjksMTAgQEAgdm9pZCBEb3dubG9h
ZFByb3h5OjpkaWRTdGFydChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0
cmluZyYgc3VnZ2UKIAogdm9pZCBEb3dubG9hZFByb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBhdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSwgdWludDY0X3QgY2hhbGxlbmdlSUQpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29sKQor
ICAgIGlmICghbV9wcm9jZXNzUG9vbCB8fCAhbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8gYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlUHJveHk6OmNyZWF0ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwg
Y2hhbGxlbmdlSUQsIG1ha2VSZWYoKm1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtpbmdQcm9jZXNzQ29u
bmVjdGlvbigpKSwgbnVsbHB0cik7Ci0KKyAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
UHJveHkgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShhdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX2RhdGFTdG9yZS0+
bmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCkpLCBudWxscHRyKTsKICAgICBtX3Byb2Nlc3NQ
b29sLT5kb3dubG9hZENsaWVudCgpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgq
dGhpcywgYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5nZXQoKSk7CiB9CiAKQEAgLTE0Niwx
NSArMTQzLDEwIEBAIHZvaWQgRG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNl
UmVxdWVzdCYmIHByb3Bvc2VkUmVxdWVzdCwgY29uc3QgUmVzCiAKICAgICBtX3Byb2Nlc3NQb29s
LT5kb3dubG9hZENsaWVudCgpLndpbGxTZW5kUmVxdWVzdCgqdGhpcywgV1RGTW92ZShwcm9wb3Nl
ZFJlcXVlc3QpLCByZWRpcmVjdFJlc3BvbnNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXShSZXNvdXJjZVJlcXVlc3QmJiBuZXdSZXF1ZXN0KSB7CiAgICAgICAgIG1fcmVk
aXJlY3RDaGFpbi5hcHBlbmQobmV3UmVxdWVzdC51cmwoKSk7Ci0KLSAgICAgICAgaWYgKCFwcm90
ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sKQorICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1f
ZGF0YVN0b3JlKQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8qIG5ldHdvcmtQ
cm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpOwotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzUHJveHkpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3NQcm94eS0+c2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxv
YWRJRCwgbmV3UmVxdWVzdCksIDApOworICAgICAgICBhdXRvJiBuZXR3b3JrUHJvY2Vzc1Byb3h5
ID0gcHJvdGVjdGVkVGhpcy0+bV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAg
IG5ldHdvcmtQcm9jZXNzUHJveHkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRp
bnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVz
dCksIDApOwogICAgIH0pOwogfQogCkBAIC0xNzksMTYgKzE3MSwxNCBAQCB2b2lkIERvd25sb2Fk
UHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMoRG93bmxv
YWRJRCBkb3dubAogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGluYXRpb25X
aXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzYW5pdGl6
ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKSwgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxvYWRJRCA9IGRvd25sb2FkSURdIChBbGxvd092ZXJ3
cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CisgICAgbV9wcm9jZXNz
UG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxl
bmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5h
bWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBkb3dubG9hZElEXSAoQWxsb3dPdmVyd3JpdGUgYWxsb3dPdmVyd3JpdGUsIFN0cmluZyBk
ZXN0aW5hdGlvbikgewogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4
dGVuc2lvbkhhbmRsZTsKICAgICAgICAgaWYgKCFkZXN0aW5hdGlvbi5pc051bGwoKSkKICAgICAg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShkZXN0aW5hdGlvbiwgU2FuZGJv
eEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKIAot
ICAgICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgICAgIGlmICghbV9kYXRhU3RvcmUpCiAg
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
bV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5kaW5n
RG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVu
c2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDApOwor
ICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihkb3du
bG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVyd3Jp
dGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDApOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAK
aW5kZXggNzZhMDcxNTdiNTkxYWFjZTUwZjE1ZDE1MjVkYmNmYjhjNmE0YmJjOC4uZDc0YThmYTZj
NjRjODg2MzVmOWViNzVjYTczZTcwZmQ5NDZjYTAyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcApAQCAtNDQsNyAr
NDQsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIERvd25sb2FkUHJveHlNYXA6OkRvd25sb2Fk
UHJveHlNYXAoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJvY2VzcykKLSAgICA6IG1fcHJvY2Vzcyht
YWtlV2Vha1B0cihwcm9jZXNzKSkKKyAgICA6IG1fcHJvY2Vzcyhwcm9jZXNzKQogI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgICwgbV9zaG91bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJvY2Vzc0hhc0Vu
dGl0bGVtZW50KCJjb20uYXBwbGUubXVsdGl0YXNraW5nLnN5c3RlbWFwcGFzc2VydGlvbnMiKSkK
ICNlbmRpZgpAQCAtNzAsMTQgKzcwLDEyIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxhdGZv
cm1EZXN0cm95KCkKIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVudGVy
QmFja2dyb3VuZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91
bmQoKSwgMCk7CisgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpB
cHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFBy
b3h5TWFwOjphcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKQogewotICAgIGlmIChtX3By
b2Nlc3MpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Muc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3Vu
ZCgpLCAwKTsKIH0KIAogRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93
bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBw
cm9jZXNzUG9vbCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVl
c3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5h
dGluZ1BhZ2UpCkBAIC05MiwxMyArOTAsMTIgQEAgRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94
eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUKICAg
ICAgICAgbV9kb3dubG9hZFVJQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9u
PihnZXRDdXJyZW50UHJvY2Vzc0lEKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNz
ZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CiAKICAgICAgICAgQVNTRVJUKCFtX2Rv
d25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcHJv
Y2Vzcyk7Ci0gICAgICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1
ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCksICJXZWJL
aXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2lu
Zyk7CisgICAgICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQ
cm9jZXNzQXNzZXJ0aW9uPihtX3Byb2Nlc3MucHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktpdCBk
b3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsK
IAogICAgICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyB0b29r
ICdXZWJLaXQgZG93bmxvYWRzJyBhc3NlcnRpb25zIGZvciBVSVByb2Nlc3MgYW5kIE5ldHdvcmtQ
cm9jZXNzIik7CiAgICAgfQogCi0gICAgbV9wcm9jZXNzLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRQcm94
eS0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSwgZG93bmxvYWRQcm94eS5nZXQoKSk7CisgICAg
bV9wcm9jZXNzLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJ
RCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsKIAogICAgIHJldHVybiBkb3dubG9hZFByb3h5Owog
fQpAQCAtMTA5LDEyICsxMDYsOSBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmlu
aXNoZWQoRG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSkKIAogICAgIFJFTEVBU0VfTE9HKExv
YWRpbmcsICJSZW1vdmluZyBkb3dubG9hZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3du
bG9hZFByb3h5TWFwIiwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhlIERv
d25sb2FkUHJveHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9j
ZXNzIHBvb2wuCi0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9w
cm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsKLQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlu
cyhkb3dubG9hZElEKSk7CiAKLSAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElE
LmRvd25sb2FkSUQoKSk7CisgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRv
d25sb2FkSUQoKSk7CiAgICAgZG93bmxvYWRQcm94eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9kb3du
bG9hZHMucmVtb3ZlKGRvd25sb2FkSUQpOwogCkBAIC0xMzMsMTUgKzEyNywxMyBAQCB2b2lkIERv
d25sb2FkUHJveHlNYXA6OmludmFsaWRhdGUoKQogICAgIGZvciAoY29uc3QgYXV0byYgZG93bmxv
YWQgOiBtX2Rvd25sb2Fkcy52YWx1ZXMoKSkgewogICAgICAgICBkb3dubG9hZC0+cHJvY2Vzc0Rp
ZENsb3NlKCk7CiAgICAgICAgIGRvd25sb2FkLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1fcHJv
Y2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsK
KyAgICAgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxv
YWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRv
d25sb2FkSUQoKSk7CiAgICAgfQogCiAgICAgbV9kb3dubG9hZHMuY2xlYXIoKTsKICAgICBtX2Rv
d25sb2FkVUlBc3NlcnRpb24gPSBudWxscHRyOwogICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNz
ZXJ0aW9uID0gbnVsbHB0cjsKICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJ
UHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIGludmFsaWRhdGVkIC0gUmVsZWFzZWQgJ1dlYktpdCBk
b3dubG9hZHMnIGFzc2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsK
LQotICAgIG1fcHJvY2VzcyA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJv
eHlNYXAuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
TWFwLmgKaW5kZXggM2JlMjA3OWEwZjJjNGI1MzcwNjJjZTEzMDBlMWNkNWRhNDQ0ZmZiZS4uNGZh
MDAxYmQ3ZmFlMWNlZDAyNGQyYjkxZjIwMTcwZmY5OTQ1MjhiZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCkBAIC03MSw3
ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZSgpOwogICAgIHZvaWQg
cGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1f
cHJvY2VzczsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBtX3Byb2Nlc3M7CiAgICAgSGFzaE1h
cDxEb3dubG9hZElELCBSZWZQdHI8RG93bmxvYWRQcm94eT4+IG1fZG93bmxvYWRzOwogCiAgICAg
Ym9vbCBtX3Nob3VsZFRha2VBc3NlcnRpb24geyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9D
dXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCmluZGV4
IDhjMjNiYmU4YzA2YTE1OTljYjliOTE2YTBiMzJhZmIzNzc4M2YzMDUuLjIwNzRiNmM2M2EyMDJm
NmI3NjQ3YWM2YWM4ZDU5ZTlmZGI1OTA3ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVBy
b3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKQEAgLTQ0LDE3ICs0
NCwyOCBAQCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6fkxlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5KCkKIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQ
cm94eTo6c3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJ
RCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1fbmV0
d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Ojpz
aW5nbGV0b24oKS5zdGFydExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3Qp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY3VzdG9tUHJvdG9jb2xJRCk7CisgICAgVU5VU0VE
X1BBUkFNKHJlcXVlc3QpOworI2VuZGlmCiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJv
dG9jb2xJRCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9j
b2xJRCk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50OjpzaW5nbGV0b24oKS5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJ
RCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjdXN0b21Qcm90b2NvbElEKTsKKyNlbmRpZgog
fQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkK
IHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQoKS5pbnZhbGlkYXRlKCp0aGlzKTsKKyNpZiBQTEFURk9STShDT0NPQSkK
KyAgICBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbigpLmludmFs
aWRhdGUoKnRoaXMpOworI2VuZGlmCiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHk6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3QoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBj
dXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1By
b3h5LmNwcAppbmRleCBkMTI1MDIwYTU5NWQyOTg4OTY5M2I0MjMwYzEwMWQ4MzI0M2FlM2JlLi43
ZjkwMmQ4NTgzZTczMDU2NGU5MWY5NjM2MTc2NDMyMjJlZjczOTE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAK
QEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVz
c2FnZXMuaCIKICNlbmRpZgorI2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2Vy
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBA
IC00OCw2ICs0OSw3IEBACiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgi
CiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVk
Q29udGVudFJ1bGVMaXN0LmgiCisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAj
aW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAj
aW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCkBAIC02MCw2ICs2Miw3IEBACiAjaW5jbHVk
ZSAiV2Vic2l0ZURhdGFTdG9yZUNsaWVudC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3Jp
Z2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2luY2x1ZGUg
PHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRs
ZXIuaD4KIAogI2lmIEVOQUJMRShTRUNfSVRFTV9TSElNKQpAQCAtNzAsMjAgKzczLDEwNyBAQAog
I2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIK
KyNlbmRpZgorCiAjZGVmaW5lIE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNL
X0JBU0UoYXNzZXJ0aW9uLCBjb25uZWN0aW9uKCkpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLU5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9j
ZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5KHByb2Nlc3NQb29sLmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQot
ICAgICwgbV9wcm9jZXNzUG9vbChwcm9jZXNzUG9vbCkKK3N0YXRpYyBIYXNoU2V0PE5ldHdvcmtQ
cm9jZXNzUHJveHkqPiYgbmV0d29ya1Byb2Nlc3Nlc1NldCgpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0
PE5ldHdvcmtQcm9jZXNzUHJveHkqPj4gc2V0OworICAgIHJldHVybiBzZXQ7Cit9CisKK1ZlY3Rv
cjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdv
cmtQcm9jZXNzZXMoKQoreworICAgIFZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHBy
b2Nlc3NlczsKKyAgICBwcm9jZXNzZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXR3b3JrUHJv
Y2Vzc2VzU2V0KCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIG5ldHdvcmtQcm9jZXNzIDogbmV0
d29ya1Byb2Nlc3Nlc1NldCgpKQorICAgICAgICBwcm9jZXNzZXMudW5jaGVja2VkQXBwZW5kKCpu
ZXR3b3JrUHJvY2Vzcyk7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKworCit2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpCit7CisgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5
Ojp0ZXJtaW5hdGUoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphdHRlbXB0UmVs
YXVuY2hBZnRlckNyYXNoSWZOZWNlc3NhcnkoVmVjdG9yPHN0ZDo6cGFpcjxSZWY8V2ViUHJvY2Vz
c1Byb3h5PiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uRGVsYXllZFJlcGx5Pj4mJiBwZW5kaW5nUmVxdWVzdHMpCit7CisgICAgaWYgKHBlbmRp
bmdSZXF1ZXN0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBGSVhNRTogRG8g
c29tZXRoaW5nIGhlcmUuCit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0
aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9y
IGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgorICAgIC8vIFdlIHNo
b3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVj
ayBvbiBvdXIgQVBJcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjAwMjQ2LgorICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsKKyAgICAgICAgY2Fs
bE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzXSB7CisgICAgICAgICAgICBzZW5kQ3JlYXRpb25Q
YXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy51
cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOworICAgIHBh
cmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBv
bGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2No
ZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKKyAgICBw
YXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdh
Y3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkp
OworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRv
VmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3Rl
ckFzTm9BY2Nlc3MoKSk7CisgICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFs
U2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwoKTsKKyAgICBmb3IgKGF1dG8mIHNjaGVt
ZSA6IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMo
KSkKKyAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3Rv
Y29scy5hcHBlbmQoc2NoZW1lKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChT
dHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9y
YWdlRGlyZWN0b3J5KCk7ICFjb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNv
b2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7CisgICAgaWYgKFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJlY3Rvcnkg
PSBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOyAhY29udGFpbmVy
Q2FjaGVzRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwg
cGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAg
IGlmIChTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVu
dEJ1bmRsZURpcmVjdG9yeSgpOyAhcGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVjdG9y
eSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50QnVu
ZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyNlbmRpZgorICAgIFdlYlByb2Nlc3NQb29s
OjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKKyAgICBwYXJh
bWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMgPSBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJz
RnJvbUFsbFN0b3JlcygpOworICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyksIDApOworfQorCitzdGF0aWMgYm9vbCBh
bnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpCit7CisgICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkg
eworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0
eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xTaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNz
ZXJ0aW9uKCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6
OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkVGFr
ZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1By
b2Nlc3NQcm94eSgpCisgICAgOiBBdXhpbGlhcnlQcm9jZXNzUHJveHkoYW55UHJvY2Vzc1Bvb2xB
bHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RP
TV9QUk9UT0NPTF9NQU5BR0VSKQogICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgq
dGhpcykKICNlbmRpZgotICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNob3Vs
ZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBh
bnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1f
Y29va2llTWFuYWdlcihXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcykpCiB7CiAg
ICAgY29ubmVjdCgpOworICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsK
KyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuYWRkKHRoaXMpOwogfQogCiBOZXR3b3JrUHJvY2Vz
c1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgpCkBAIC05OCw2ICsxODgsNyBAQCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgpCiAKICAgICBpZiAobV9kb3dubG9h
ZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAtPmludmFsaWRhdGUoKTsKKyAg
ICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkucmVtb3ZlKHRoaXMpOwogfQogCiB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRp
b25zJiBsYXVuY2hPcHRpb25zKQpAQCAtMTA1LDE1ICsxOTYsMTIgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9u
cyYgbGF1bmMKICAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID0gUHJvY2Vzc0xhdW5jaGVy
OjpQcm9jZXNzVHlwZTo6TmV0d29yazsKICAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OmdldExh
dW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7CiAKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5zaG91
bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkgewotICAgICAg
ICBwcm9jZXNzUG9vbCgpLnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWls
Rm9yVGVzdGluZyhmYWxzZSk7Ci0gICAgICAgIGxhdW5jaE9wdGlvbnMuc2hvdWxkTWFrZVByb2Nl
c3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJv
Y2Vzc1Bvb2wtPnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGlu
ZygpKSB7CisgICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5leHROZXR3b3Jr
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKKyAgICAgICAgICAgIGxhdW5jaE9w
dGlvbnMuc2hvdWxkTWFrZVByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7CisgICAg
ICAgIH0KICAgICB9Ci0KLSNpZiBQTEFURk9STShQTEFZU1RBVElPTikKLSAgICBsYXVuY2hPcHRp
b25zLnByb2Nlc3NQYXRoID0gbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc1BhdGgoKTsKLSAg
ICBsYXVuY2hPcHRpb25zLnVzZXJJZCA9IG1fcHJvY2Vzc1Bvb2wudXNlcklkKCk7Ci0jZW5kaWYK
IH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMTY2LDEyICsyNTQsMTIgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkK
ICAgICB9CiB9CiAKLURvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZURv
d25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBX
ZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKK0Rvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3Jl
LCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVz
b3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94
eSogb3JpZ2luYXRpbmdQYWdlKQogewogICAgIGlmICghbV9kb3dubG9hZFByb3h5TWFwKQogICAg
ICAgICBtX2Rvd25sb2FkUHJveHlNYXAgPSBtYWtlVW5pcXVlPERvd25sb2FkUHJveHlNYXA+KCp0
aGlzKTsKIAotICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJv
eHkoZGF0YVN0b3JlLCBtX3Byb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5mbywg
b3JpZ2luYXRpbmdQYWdlKTsKKyAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVE
b3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJh
bWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9u
PiBmZXRjaE9wdGlvbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKFdlYnNpdGVEYXRhKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTIzNyw4ICszMjUsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpCiB7CiAgICAgY2xlYXJDYWxsYmFja1N0YXRl
cygpOwogCi0gICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0
IGFib3V0IHRoaXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1c2UgdXMgdG8g
YmUgZGVsZXRlZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhp
cyk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9j
ZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgq
dGhpcyk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y2xlYXJDYWxsYmFja1N0YXRl
cygpCkBAIC0yNTgsOSArMzQ2LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNl
aXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGUKICAgICBpZiAo
ZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAobV9wcm9jZXNzUG9vbC5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rl
cikpCi0gICAgICAgIHJldHVybjsKLQogICAgIGRpZFJlY2VpdmVOZXR3b3JrUHJvY2Vzc1Byb3h5
TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKIH0KIApAQCAtMjc0LDggKzM1OSw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgSVBDCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkQ2xv
c2UoSVBDOjpDb25uZWN0aW9uJikKIHsKLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0g
bWFrZVJlZihtX3Byb2Nlc3NQb29sKTsKLQogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAg
ICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+aW52YWxpZGF0ZSgpOwogI2lmIEVOQUJMRShMRUdB
Q1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCkBAIC0zMzQsMTEgKzQxNyw2IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6
U2Vzc2lvbklEIHNlc3NpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXRvcE9y
aWdpbiB8fCAhbV9wcm9jZXNzUG9vbC5pc1NlcnZpY2VXb3JrZXJQYWdlSUQocGFnZUlEKSkgewot
ICAgICAgICBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uoc2Vzc2lvbklELCBXVEZNb3Zl
KGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBXZWJQYWdlUHJveHk6OmZvck1vc3RWaXNpYmxlV2ViUGFnZUlmQW55KHNlc3Npb25JRCwgKnRv
cE9yaWdpbiwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRCwg
YXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KSwgbmVnb3RpYXRlZExlZ2FjeVRMU10oYXV0byogcGFnZSkgbXV0YWJsZSB7CiAgICAgICAgIGlm
ICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zOTUsMTEgKzQ3Myw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hl
ciogbGF1bmNoZXIsIElQQzo6Q29uCiAgICAgICAgIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKG1f
cHJvY2Vzc1Bvb2wucHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKQotICAgICAgICBzZXRQcm9j
ZXNzU3VwcHJlc3Npb25FbmFibGVkKHRydWUpOwotI2VuZGlmCiAgICAgCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBpZiAoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uID0gdGhpcy0+
Y29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCkpCkBAIC0xMjA2LDcgKzEyNzksOCBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3Rpbmco
UEFMOjpTZXNzaW9uSUQgc2VzcwogfQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXREb21h
aW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
PiYmIGRvbWFpbnMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS5zZXREb21haW5zV2l0aFVzZXJJbnRl
cmFjdGlvbihXVEZNb3ZlKGRvbWFpbnMpKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDog
V2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+
c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbj4geyBkb21haW5zIH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCiAKQEAgLTEyNzEsMTQgKzEzNDUsMTQgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRTeW5jQWxsQ29va2llcygpCiAgICAgfQogfQogCi12b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYgc3RvcmUpCit2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYgc3RvcmUp
CiB7CiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUtPnBhcmFtZXRlcnMoKSB9
LCAwKTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0b3JlLT5zZXNzaW9uSUQoKTsKKyAgICAgICAg
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9y
ZS5wYXJhbWV0ZXJzKCkgfSwgMCk7CisgICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS5zZXNzaW9u
SUQoKTsKICAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7CiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9y
ZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CisgICAgICAgIGNyZWF0ZVN5
bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eSgpKTsKICNlbmRpZgogICAgIH0KIH0KQEAgLTEyOTEsMTYgKzEzNjUsNyBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQog
CiBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3Jl
RnJvbVNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Np
b25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlm
ICghV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAg
ICAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0
b3JlKCk7Ci0gICAgICAgICAgICBpZiAod2Vic2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSA9PSBzZXNzaW9uSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdl
YnNpdGVEYXRhU3RvcmU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0
ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Np
b25JRCk7CisgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9y
U2Vzc2lvbklEKHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0
cmlldmVDYWNoZVN0b3JhZ2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAg
LTEzNDcsNyArMTQxMiw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVdl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJDb250ZW50CiAjaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJD
b250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJiByZWdp
c3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC5lc3Rh
Ymxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoKnRoaXMsIFdURk1v
dmUocmVnaXN0cmFibGVEb21haW4pLCBzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKKyAgICBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBSZWdpc3RyYWJsZURvbWFpbiB7cmVnaXN0cmFibGVE
b21haW59LCBzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3b3JrZXJDb250ZXh0Q29ubmVjdGlvbk5vTG9uZ2VyTmVl
ZGVkKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC0xNTEwLDE2ICsx
NTc1LDM0IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cHJlY29ubmVjdFRvKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgV2ViUGFnZVByb3h5SWRlCiAgICAgc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlByZWNvbm5lY3RUbyhzZXNzaW9uSUQsIHdlYlBhZ2VQcm94eUlELCB3ZWJQ
YWdlSUQsIHVybCwgdXNlckFnZW50LCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0
aW5nVG9BcHBCb3VuZERvbWFpbiksIDApOwogfQogCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9v
bEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bv
b2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHBy
b2Nlc3NQb29sLT5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQ
cm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byog
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAg
ICAgaWYgKHByb2Nlc3NQb29sLT5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKQogewotICAgIGlmIChw
cm9jZXNzUG9vbCgpLmhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQ
cm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVBy
b2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRGb3JlZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21X
ZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9
IHRocm90dGxlcigpLmZvcmVncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgZm9yZWdyb3Vu
ZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvRm9yZWdyb3VuZCgpLCAwKTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0JhY2tncm91bmRX
ZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQ
cm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRCYWNr
Z3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAg
ICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmJhY2tncm91bmRBY3Rp
dml0eSgiTmV0d29ya2luZyBmb3IgYmFja2dyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAg
IHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvQmFj
a2dyb3VuZCgpLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKaW5kZXggYTQwOTQwNDE2NTA4NWEyOGY2MjgwNTgyZjFm
NDA1MjRiNzk1ZDk0Mi4uYzY5YWU2MzEzYTNkZDBlMmFkNTU4Yjg3ZjM1ZWZjZmYzMzNjODYzZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmgKQEAgLTUyLDYgKzUyLDEwIEBAIG5hbWVzcGFjZSBJUEMgewogY2xhc3MgRm9y
bURhdGFSZWZlcmVuY2U7CiB9CiAKK25hbWVzcGFjZSBBUEkgeworY2xhc3MgQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50OworfQorCiBuYW1lc3BhY2UgUEFMIHsKIGNsYXNzIFNlc3Npb25JRDsK
IH0KQEAgLTczLDggKzc3LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERvd25sb2Fk
UHJveHk7CiBjbGFzcyBEb3dubG9hZFByb3h5TWFwOworY2xhc3MgV2ViQ29va2llTWFuYWdlclBy
b3h5OwogY2xhc3MgV2ViUGFnZVByb3h5OwotY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTsKIAogZW51bSBjbGFzcyBTaG91bGRHcmFuZGZh
dGhlclN0YXRpc3RpY3MgOiBib29sOwpAQCAtODcsNyArOTEsNyBAQCBzdHJ1Y3QgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7CiBzdHJ1Y3QgUmVzb3VyY2VMb2FkSW5mbzsKIHN0cnVj
dCBXZWJzaXRlRGF0YTsKIAotY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94eSBmaW5hbCA6IHB1Ymxp
YyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHByaXZhdGUgUHJvY2Vzc1Rocm90dGxlckNsaWVudCwg
cHVibGljIENhbk1ha2VXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKK2NsYXNzIE5ldHdv
cmtQcm9jZXNzUHJveHkgZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2
YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3Jr
UHJvY2Vzc1Byb3h5PiwgcHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya1Byb2Nlc3NQcm94eT4gewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHVzaW5nIFJlZ2lzdHJh
YmxlRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CkBAIC0xMDIsMTIgKzEwNiwx
NiBAQCBwdWJsaWM6CiAgICAgdXNpbmcgRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID0gV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW47CiAgICAgdXNpbmcgT3BlbmVyRG9tYWluID0gV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW47CiAKLSAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5
KFdlYlByb2Nlc3NQb29sJik7CisgICAgc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtQcm9jZXNzUHJveHkpOyB9CiAg
ICAgfk5ldHdvcmtQcm9jZXNzUHJveHkoKTsKIAorICAgIHN0YXRpYyBWZWN0b3I8UmVmPE5ldHdv
cmtQcm9jZXNzUHJveHk+PiBhbGxOZXR3b3JrUHJvY2Vzc2VzKCk7CisgICAgCisgICAgdm9pZCB0
ZXJtaW5hdGUoKSBmaW5hbDsKKwogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
KFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKIAotICAgIERvd25sb2FkUHJveHkmIGNy
ZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0
aW5nUGFnZSk7CisgICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRl
RGF0YVN0b3JlJiwgV2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2Up
OwogCiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4mJik7CiAgICAgdm9pZCBkZWxldGVXZWJz
aXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxU
aW1lIG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcik7CkBAIC0yMDUsMTMgKzIxMywxMSBAQCBwdWJsaWM6CiAgICAgUHJvY2Vzc1Rocm90
dGxlciYgdGhyb3R0bGVyKCkgZmluYWwgeyByZXR1cm4gbV90aHJvdHRsZXI7IH0KICAgICB2b2lk
IHVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKIAotICAgIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNz
UG9vbCgpIHsgcmV0dXJuIG1fcHJvY2Vzc1Bvb2w7IH0KLQogI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCiAgICAgdm9pZCBkaWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHkoV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmKTsKICNlbmRpZgogCi0gICAgdm9pZCBh
ZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmKTsKKyAgICB2b2lkIGFkZFNlc3Npb24o
V2Vic2l0ZURhdGFTdG9yZSYpOwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25J
RCk7CiAgICAgCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkBAIC0yMjcsNiArMjMzLDgg
QEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2Nv
bChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0
b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsKIAorICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFz
aGVkKCk7CisgICAgCiAgICAgdm9pZCByZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiAgICAgdm9pZCByZXNvdXJjZUxvYWREaWRTZW5kUmVx
dWVzdChXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBSZXNvdXJjZUxvYWRJbmZvJiYsIFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYmLCBPcHRpb25hbDxJUEM6OkZvcm1EYXRhUmVmZXJlbmNlPiYmKTsK
QEAgLTI0NCw3ICsyNTIsMTQgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlQnVuZGxlSWRlbnRp
Zmllcihjb25zdCBTdHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZv
aWQgY2xlYXJCdW5kbGVJZGVudGlmaWVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAK
KyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIoKSB7IHJldHVybiBtX2Nv
b2tpZU1hbmFnZXIuZ2V0KCk7IH0KKwogcHJpdmF0ZToKKyAgICBleHBsaWNpdCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5KCk7CisKKyAgICB2b2lkIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nl
c3MoKTsKKyAgICBzdGF0aWMgdm9pZCBhdHRlbXB0UmVsYXVuY2hBZnRlckNyYXNoSWZOZWNlc3Nh
cnkoVmVjdG9yPHN0ZDo6cGFpcjxSZWY8V2ViUHJvY2Vzc1Byb3h5PiwgTWVzc2FnZXM6OldlYlBy
b2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5Pj4mJik7
CisKICAgICAvLyBBdXhpbGlhcnlQcm9jZXNzUHJveHkKICAgICBBU0NJSUxpdGVyYWwgcHJvY2Vz
c05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiTmV0d29ya2luZyJfczsgfQogCkBAIC0yNTIs
NyArMjY3LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNv
bm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHByb2Nlc3NXaWxsU2h1dERvd24oSVBDOjpD
b25uZWN0aW9uJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgp
OwogICAgIHZvaWQgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCiAgICAgLy8gSVBDOjpDb25uZWN0
aW9uOjpDbGllbnQKQEAgLTMwOCw4ICszMjIsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwcm9j
ZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQsIFJlZjxBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZVByb3h5PiYmKTsKIAotICAgIFdlYlByb2Nlc3NQb29sJiBtX3Byb2Nlc3NQ
b29sOwotCiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdl
YnNpdGVEYXRhKT4+IG1fcGVuZGluZ0ZldGNoV2Vic2l0ZURhdGFDYWxsYmFja3M7CiAgICAgSGFz
aE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+PiBtX3BlbmRpbmdEZWxl
dGVXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2luc0Nh
bGxiYWNrczsKQEAgLTM0Nyw2ICszNTksOCBAQCBwcml2YXRlOgogICAgICAgICBXZWFrUHRyPE5l
dHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAgICAgfTsKICNlbmRpZgorCisg
ICAgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gbV9jb29raWVNYW5hZ2VyOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCmluZGV4IGI4ZGFlZGY3YmVi
YTFjZDgxZjZlNTI0NDk2MDMxMGYxMzMxMGMxMWUuLjgyYzEwZTQxZDU2MjVkYmFhZGY5MTNiOTQ4
MDQ0N2M3MGNjMTlkOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCkBAIC01MSw4ICs1MSwxMCBA
QCBib29sIE5ldHdvcmtQcm9jZXNzUHJveHk6OlhQQ0V2ZW50SGFuZGxlcjo6aGFuZGxlWFBDRXZl
bnQoeHBjX29iamVjdF90IGV2ZW50KSBjbwogICAgIGlmIChtZXNzYWdlTmFtZS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBMYXVuY2hT
ZXJ2aWNlc0RhdGFiYXNlWFBDQ29uc3RhbnRzOjp4cGNMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBD
RW5kcG9pbnRNZXNzYWdlTmFtZSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc1Bv
b2woKS5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhldmVudCk7Cisg
ICAgaWYgKG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6
OnhwY0xhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKSB7CisgICAg
ICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bv
b2xzKCkpCisgICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5k
cG9pbnRUb1dlYlByb2Nlc3MoZXZlbnQpOworICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAK
aW5kZXggNDAxODYwZDIwYzI3ODc2ZWM0MDgyNzU0YzVmMGIyZDZiMzc1YWYzNi4uZDgxNjBiMDBi
ZTQ2NGI2NDEyZTg4Njc3MDY5YjY5OWE4YmM4NmVmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAj
aW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElTZWN1cml0eU9yaWdpbi5oIgogI2lu
Y2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vz
c1Byb3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgiCiAjaW5jbHVkZSAiV2Vi
Q29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5
TWVzc2FnZXMuaCIKQEAgLTM5LDI0ICs0MCwxNiBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY29uc3QgY2hhciogV2ViQ29va2llTWFuYWdlclByb3h5
OjpzdXBwbGVtZW50TmFtZSgpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykKKyAgICA6IG1fbmV0
d29ya1Byb2Nlc3MobWFrZVdlYWtQdHIobmV0d29ya1Byb2Nlc3MpKQogewotICAgIHJldHVybiAi
V2ViQ29va2llTWFuYWdlclByb3h5IjsKLX0KLQotUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4g
V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29s
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94eShwcm9j
ZXNzUG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi0gICAgOiBXZWJDb250ZXh0U3VwcGxl
bWVudChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250ZXh0U3VwcGxlbWVudDo6cHJvY2Vzc1Bv
b2woKS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIG5ldHdvcmtQcm9jZXNzLmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksICp0aGlzKTsKIH0KIAogV2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29v
a2llTWFuYWdlclByb3h5KCkKIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CiAgICAgQVNTRVJUKG1fY29v
a2llT2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiB9CiAKQEAgLTY1LDEwMiArNTgsODQgQEAgdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmluaXRpYWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5h
Z2VyQ2xpZW50QmFzZSogY2wKICAgICBtX2NsaWVudC5pbml0aWFsaXplKGNsaWVudCk7CiB9CiAK
LS8vIFdlYkNvbnRleHRTdXBwbGVtZW50Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpw
cm9jZXNzUG9vbERlc3Ryb3llZCgpCi17Ci0gICAgVmVjdG9yPE9ic2VydmVyKj4gb2JzZXJ2ZXJz
OwotICAgIGZvciAoYXV0byYgb2JzZXJ2ZXJTZXQgOiBtX2Nvb2tpZU9ic2VydmVycy52YWx1ZXMo
KSkgewotICAgICAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJTZXQpCi0gICAgICAg
ICAgICBvYnNlcnZlcnMuYXBwZW5kKG9ic2VydmVyKTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8q
IG9ic2VydmVyIDogb2JzZXJ2ZXJzKQotICAgICAgICBvYnNlcnZlci0+bWFuYWdlckRlc3Ryb3ll
ZCgpOwotCi0gICAgQVNTRVJUKG1fY29va2llT2JzZXJ2ZXJzLmlzRW1wdHkoKSk7Ci19Ci0KLXZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5
KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShO
ZXR3b3JrUHJvY2Vzc1Byb3h5KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkKLXsKLSAgICBBUEk6Ok9iamVjdDo6cmVmKCk7Ci19
Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZXJlZldlYkNvbnRleHRTdXBwbGVtZW50
KCkKLXsKLSAgICBBUEk6Ok9iamVjdDo6ZGVyZWYoKTsKLX0KLQogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhvc3RuYW1lc1dpdGhDb29raWVzKHNl
c3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhvc3RuYW1lc1dpdGhDb29raWVzKHNlc3Npb25J
RCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJh
Y2tGdW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBob3N0bmFtZXMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSk7Cisg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vz
c2lvbklELCBob3N0bmFtZXMpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OmRlbGV0ZUFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nl
c3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhzZXNzaW9uSUQpKTsK
KyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhzZXNzaW9uSUQp
LCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29y
a1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpE
ZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1v
dmUoY2FsbGJhY2tGdW5jdGlvbildKCkgbXV0YWJsZSB7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llKHNlc3Npb25JRCwgY29va2llKSwgV1RG
TW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQogICAgICAgICBjYWxsYmFja0Z1bmN0
aW9uKCk7Ci0gICAgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVB
bGxDb29raWVzTW9kaWZpZWRTaW5jZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdhbGxUaW1l
IHRpbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewot
ICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKHNlc3Npb25J
RCwgdGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKHNl
c3Npb25JRCwgdGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAg
ICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxDb29r
aWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlv
bikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBjb29raWVzKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U2V0Q29va2llKHNlc3Npb25JRCwgY29va2llcyksIFdURk1vdmUoY2Fs
bGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwog
fQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBjb25zdCBVUkwmIHVy
bCwgY29uc3QgVVJMJiBtYWluRG9jdW1lbnRVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZXMoc2Vz
c2lvbklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVudFVSTCksIFdURk1vdmUoY2FsbGJhY2tG
dW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNl
dENvb2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVudFVSTCksIFdURk1v
dmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlv
bigpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENvb2tp
ZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nl
c3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRBbGxD
b29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmICht
X25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklE
KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFj
a0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29r
aWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAg
ICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShjYWxs
YmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikp
OworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5n
UHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6
OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCksIDAp
OwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RvcE9ic2VydmluZ0Nvb2tpZUNo
YW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSk7Cisg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNl
c3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2ll
T2JzZXJ2ZXJDYWxsYmFjayhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248
dm9pZCAoKT4mJiBjYWxsYmFjaykKQEAgLTIxMSwyMiArMTg2LDE4IEBAIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5Ojpjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkK
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQsIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSNpZiBQTEFURk9STShDT0NP
QSkKLSAgICBpZiAoIXByb2Nlc3NQb29sKCktPmlzVXNpbmdUZXN0aW5nTmV0d29ya1Nlc3Npb24o
KSkKLSAgICAgICAgcGVyc2lzdEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsKLSNlbmRp
ZgotI2lmIFVTRShTT1VQKQotICAgIHByb2Nlc3NQb29sKCktPnNldEluaXRpYWxIVFRQQ29va2ll
QWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJv
Y2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhU
VFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7
CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBl
bHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY2FsbGJhY2tGdW5j
dGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KCks
IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQor
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwgV1RGTW92ZShjYWxs
YmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKEhUVFBD
b29raWVBY2NlcHRQb2xpY3k6Ok5ldmVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCmluZGV4
IDBiZGZjMGQ0ZTQ3YzQzNmY1ODVjZjI5YzA5ZDUxYTI5YmM4MTFhOWQuLjZmNTFmMDNlNWMwY2E4
OTQxMjMzNDM3N2I1NTQzZDgyMmNjMmZlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCkBAIC01NiwxMSArNTYsOSBAQCB0eXBlZGVmIEdl
bmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJyYXlDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJp
Y0NhbGxiYWNrPFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k+IEhUVFBDb29raWVBY2Nl
cHRQb2xpY3lDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+Jj4gR2V0Q29va2llc0NhbGxiYWNrOwogCi1jbGFzcyBXZWJDb29raWVN
YW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpD
b29raWVNYW5hZ2VyPiwgcHVibGljIFdlYkNvbnRleHRTdXBwbGVtZW50LCBwcml2YXRlIElQQzo6
TWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBB
UEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNvb2tpZU1hbmFnZXI+LCBwcml2YXRl
IElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciog
c3VwcGxlbWVudE5hbWUoKTsKLQotICAgIHN0YXRpYyBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5
PiBjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4gY3JlYXRlKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKSB7IHJl
dHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94eShuZXR3b3JrUHJvY2Vzcykp
OyB9CiAgICAgdmlydHVhbCB+V2ViQ29va2llTWFuYWdlclByb3h5KCk7CiAKICAgICB2b2lkIGlu
aXRpYWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSopOwpAQCAtMTA0
LDE3ICsxMDIsMTAgQEAgcHVibGljOgogICAgIHVzaW5nIEFQSTo6T2JqZWN0OjpkZXJlZjsKIAog
cHJpdmF0ZToKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAg
ICBXZWJDb29raWVNYW5hZ2VyUHJveHkoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwogCiAgICAgdm9p
ZCBjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEKTsKIAotICAgIC8vIFdlYkNvbnRleHRT
dXBwbGVtZW50Ci0gICAgdm9pZCBwcm9jZXNzUG9vbERlc3Ryb3llZCgpIG92ZXJyaWRlOwotICAg
IHZvaWQgcHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZv
aWQgcHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2
b2lkIHJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXJlZldl
YkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0KICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNl
aXZlcgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpE
ZWNvZGVyJikgb3ZlcnJpZGU7CiAKQEAgLTEyNSw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9pZCAoKT4+IG1fbGVnYWN5Q29v
a2llT2JzZXJ2ZXJzOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIEhhc2hTZXQ8T2JzZXJ2
ZXIqPj4gbV9jb29raWVPYnNlcnZlcnM7CiAKKyAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJv
eHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAgICAgV2ViQ29va2llTWFuYWdlclByb3h5Q2xpZW50IG1f
Y2xpZW50OwogCiAjaWYgVVNFKFNPVVApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAppbmRleCBiZjYxMDk3MjZlY2Y3NDg0Yjc2Y2QzMGZiYTQ3NDg2NDhiYzdmNTAxLi5h
ZGNiYzM5NWViMDg5NjI2NGFhMGUxZDZhNmE0YTIxMzkwNDY0NDViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE3MTYsNyArMTcxNiw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGJvb2wgY29udHJvbGxlZCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29udHJvbGxl
ZEJ5QXV0b21hdGlvbihjb250cm9sbGVkKSk7Ci0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgp
LnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vz
c2lvbklzQ29udHJvbGxlZEJ5QXV0b21hdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCBtX2NvbnRyb2xsZWRCeUF1dG9tYXRpb24pKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCku
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vzc2lv
bklzQ29udHJvbGxlZEJ5QXV0b21hdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCBtX2NvbnRyb2xsZWRCeUF1dG9tYXRpb24pLCAwKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OmNyZWF0ZUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6
Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSkKQEAgLTMxNzAsMTEgKzMxNzAsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6aXNGb3JjZWRJbnRvQXBwQm91bmRNb2RlVGVzdGluZyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPgogdm9pZCBXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2Vy
RW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKCkKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
aWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCksIDApOwotICAgIH0KKyAgICB3ZWJz
aXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCAwKTsKICNlbmRpZgogfQog
CkBAIC0zMTgzLDEzICszMTc5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdv
cmtlckVudGl0bGVtZW50T3ZlcnJpZGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdl
OjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5w
cm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJv
Y2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2
aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJF
bnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQog
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAjZW5kaWYKQEAgLTQzODksNyArNDM3OSw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8oY29uc3QgVVJMJiB1cmwpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGF1dG8gc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPSBtX2NhblVzZUNyZWRl
bnRpYWxTdG9yYWdlID8gV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZSA6IFdl
YkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZTsKLSAgICBtX3Byb2Nlc3Mt
PnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5wcmVjb25uZWN0VG8oc2Vzc2lv
bklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlEKCksIHVybCwgdXNlckFnZW50KCksIHN0b3Jl
ZENyZWRlbnRpYWxzUG9saWN5LCBtX2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pOworICAg
IHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnByZWNvbm5lY3RUbyhzZXNzaW9u
SUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQoKSwgdXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIG1faXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbik7CiB9CiAK
IHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDYW5Vc2VDcmVkZW50aWFsU3RvcmFnZShib29sIGNhblVz
ZUNyZWRlbnRpYWxTdG9yYWdlKQpAQCAtNDcyMyw3ICs0NzEzLDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZShGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgRnJhbWVJ
bmZvRGF0YSYKICAgICBpZiAobmF2aWdhdGlvbiAmJiBmcmFtZS0+aXNNYWluRnJhbWUoKSkgewog
ICAgICAgICBpZiAoYXV0byYgYWRDbGlja0F0dHJpYnV0aW9uID0gbmF2aWdhdGlvbi0+YWRDbGlj
a0F0dHJpYnV0aW9uKCkpIHsKICAgICAgICAgICAgIGlmIChhZENsaWNrQXR0cmlidXRpb24tPmRl
c3RpbmF0aW9uKCkubWF0Y2hlcyhmcmFtZS0+dXJsKCkpKQotICAgICAgICAgICAgICAgIG1fcHJv
Y2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+
c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmlidXRpb24pKTsKKyAgICAgICAgICAgICAgICB3ZWJz
aXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U3RvcmVBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgKmFkQ2xpY2tBdHRyaWJ1dGlvbiksIDApOwogICAgICAgICB9CiAgICAgfQogCkBAIC01
MzM1LDcgKzUzMjUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNv
bnN0IFdlYkZyYW1lUHJveHkmIGZyYW1lLCBjb25zdCBVUkwmIHBhZwogICAgIGlmICh0YXJnZXRI
b3N0LmlzRW1wdHkoKSB8fCBtYWluRnJhbWVIb3N0LmlzRW1wdHkoKSB8fCB0YXJnZXRIb3N0ID09
IHNvdXJjZVVSTC5ob3N0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+cHJv
Y2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkxvZ0ZyYW1lTmF2aWdhdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBS
ZWdpc3RyYWJsZURvbWFpbiB7IHRhcmdldFVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHBhZ2VV
UkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBzb3VyY2VVUkwgfSwgaXNSZWRpcmVjdCwgZnJhbWUu
aXNNYWluRnJhbWUoKSwgTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2RpZEZpbmlzaERvY3VtZW50
TG9hZEZvck1haW5GcmFtZVRpbWVzdGFtcCwgd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIp
KTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6TG9nRnJhbWVOYXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+
c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxlRG9tYWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxl
RG9tYWluIHsgcGFnZVVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1Jl
ZGlyZWN0LCBmcmFtZS5pc01haW5GcmFtZSgpLCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlk
RmluaXNoRG9jdW1lbnRMb2FkRm9yTWFpbkZyYW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUlu
aXRpYXRlZEJ5VXNlciksIDApOwogfQogI2VuZGlmCiAKQEAgLTk5MjksNTggKzk5MTksMjcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnN5c3RlbVByZXZpZXdBY3Rpb25UcmlnZ2VyZWQoY29uc3QgV2Vi
Q29yZTo6U3lzdGVtUHJldmlld0luZm8KIAogdm9pZCBXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNr
QXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nl
c3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdv
cmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihlbXB0eVN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Np
b25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRl
RGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQg
V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9j
ZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAg
ICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1By
b2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVh
ckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRD
bGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJG
b3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0
d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNp
b25VUkxGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYg
KCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRl
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRp
b25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVz
dGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3Mo
KS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlj
a0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShT
UEVFQ0hfU1lOVEhFU0lTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
Y3BwCmluZGV4IGEzYmNkNGQyODg1NmE1ZjAzOTg2ZmY5OWE0Y2NmNWVmMjczOWE5MTkuLjRlNWZh
MzRkMDcyZmI5OGJhNjI2NzU1ZTEzOTcwYWQ0MjQ3OGM0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTE0Myw4ICsxNDMsMTAgQEAKICNlbmRpZgog
CiAjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4uKSBS
RUxFQVNFX0xPRyhjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMj
X19WQV9BUkdTX18pCisjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhj
aGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoi
IGZtdCwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0df
RVJST1IoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIlcCAt
IFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VC
UFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikgUkVM
RUFTRV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVs
LCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVm
aW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5uZWws
IGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxv
d2VkKCksIGNoYW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIsNiAr
MjM0LDExIEBAIHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNo
PiYgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90CiAgICAgcmV0dXJuIHNldDsKIH0KIAor
VmVjdG9yPFN0cmluZz4gV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9j
b2xIYW5kbGVycygpCit7CisgICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihnbG9iYWxVUkxTY2hlbWVz
V2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSk7Cit9CisKIFdlYlByb2Nlc3NQb29sOjpXZWJQ
cm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikK
ICAgICA6IG1fY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uLmNvcHkoKSkKICAgICAsIG1fZGVm
YXVsdFBhZ2VHcm91cChXZWJQYWdlR3JvdXA6OmNyZWF0ZSgpKQpAQCAtMjM5LDcgKzI0Niw2IEBA
IFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJh
dGlvbiYgY29uZmlndXJhdGlvbikKICAgICAsIG1fYXV0b21hdGlvbkNsaWVudChtYWtlVW5pcXVl
PEFQSTo6QXV0b21hdGlvbkNsaWVudD4oKSkKICAgICAsIG1fZG93bmxvYWRDbGllbnQobWFrZVVu
aXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PigpKQogICAgICwgbV9oaXN0b3J5Q2xpZW50KG1h
a2VVbmlxdWU8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4oKSkKLSAgICAsIG1fY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQ+KCkpCiAgICAgLCBtX3Zpc2l0ZWRMaW5rU3RvcmUoVmlzaXRlZExpbmtTdG9y
ZTo6Y3JlYXRlKCkpCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICwgbV9oaWdoUGVyZm9ybWFuY2VH
cmFwaGljc1VzYWdlU2FtcGxlcihtYWtlVW5pcXVlPEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNh
Z2VTYW1wbGVyPigqdGhpcykpCkBAIC0yNjcsOSArMjczLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6Oldl
YlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9u
KQogI2VuZGlmCiAgICAgfSk7CiAKLSAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSAmJiBXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAg
bV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0
YVN0b3JlKCk7Ci0KICAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IG1fY29uZmlndXJhdGlvbi0+YWx3
YXlzUmV2YWxpZGF0ZWRVUkxTY2hlbWVzKCkpCiAgICAgICAgIG1fc2NoZW1lc1RvUmVnaXN0ZXJB
c0Fsd2F5c1JldmFsaWRhdGVkLmFkZChzY2hlbWUpOwogCkBAIC0yODUsNyArMjg4LDYgQEAgV2Vi
UHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
JiBjb25maWd1cmF0aW9uKQogICAgIGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUHJv
Y2Vzc1Bvb2w6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9URTog
VGhlc2Ugc3ViLW9iamVjdHMgbXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VSZWNl
aXZlck1hcC4uCi0gICAgYWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAg
ICAgYWRkU3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRT
dXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUoTUVE
SUFfU0VTU0lPTikKQEAgLTM0Miw5ICszNDQsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nl
c3NQb29sKCkKICAgICBwcm9jZXNzUG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAot
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zaHV0
RG93blByb2Nlc3MoKTsKLQogI2lmIEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9jZXNz
ZXNVc2luZ0dhbWVwYWRzLmlzRW1wdHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNp
bmdsZXRvbigpLnByb2Nlc3NQb29sU3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAtNDAy
LDIxICs0MDEsMTIgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QXV0b21hdGlvbkNsaWVudChz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYKICAgICAgICAgbV9hdXRvbWF0
aW9uQ2xpZW50ID0gV1RGTW92ZShhdXRvbWF0aW9uQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVl
X3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJiBjdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQpCi17Ci0jaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdF
UikKLSAgICBpZiAoIWN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkKLSAgICAgICAgbV9jdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50PigpOwotICAgIGVsc2UKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQgPSBXVEZNb3ZlKGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk7Ci0jZW5kaWYK
LX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoYm9v
bCBlbmFibGVkKQogewogICAgIG1fc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQgPSBlbmFibGVkOwog
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoZW5hYmxlZCkpOwor
ICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KKyAgICAvLyBzZW5kVG9OZXR3b3JraW5n
UHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFN0b3JhZ2VBY2Nlc3NBUElFbmFi
bGVkKGVuYWJsZWQpKTsKICNlbmRpZgogfQogCkBAIC00MjksMTEgKzQxOSw2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihj
b25zdCBTdHJpbmcmIGN1CiAgICAgbV9jb25maWd1cmF0aW9uLT5zZXRDdXN0b21XZWJDb250ZW50
U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVu
dGlmaWVyKTsKIH0KIAotSVBDOjpDb25uZWN0aW9uKiBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2lu
Z1Byb2Nlc3NDb25uZWN0aW9uKCkKLXsKLSAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy0+Y29u
bmVjdGlvbigpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQodm9p
ZCogY29udGV4dCkKIHsKICAgICBzdGF0aWNfY2FzdDxXZWJQcm9jZXNzUG9vbCo+KGNvbnRleHQp
LT5sYW5ndWFnZUNoYW5nZWQoKTsKQEAgLTQ0Myw4ICs0MjgsNyBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpsYW5ndWFnZUNoYW5nZWQoKQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdl
czo6V2ViUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQoKSk7CiAjaWYgVVNF
KFNPVVApCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
Q2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJy
ZWRMYW5ndWFnZXMoKSksIDApOwogI2VuZGlmCiB9CiAKQEAgLTQ1Nyw3ICs0NDEsOCBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpmdWxsS2V5Ym9hcmRBY2Nlc3NNb2RlQ2hhbmdlZChib29sIGZ1bGxL
ZXlib2FyZEFjY2Vzc0VuYWJsZQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE1lbW9yeVByZXNz
dXJlRXZlbnQoYm9vbCBpc0NyaXRpY2FsKQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNz
YWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXND
cml0aWNhbCkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpBdXhpbGlh
cnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSk7Cisg
ICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0
d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNh
bCkpOwogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIFBsdWdpblByb2Nlc3NN
YW5hZ2VyOjpzaW5nbGV0b24oKS5zZW5kTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKTsK
ICNlbmRpZgpAQCAtNDgyLDI3NSArNDY3LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2NyZWVu
UHJvcGVydGllc1N0YXRlQ2hhbmdlZCgpCiAjZW5kaWYKIH0KIAotTmV0d29ya1Byb2Nlc3NQcm94
eSYgV2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUq
IHdpdGhXZWJzaXRlRGF0YVN0b3JlKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
Ci0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3Ig
YXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCi0gICAgLy8gV2Ugc2hv
dWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNr
IG9uIG91ciBBUElzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDAyNDYuCi0gICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgewotICAgICAgICBjYWxs
T25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KV0gewotICAgICAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgfSk7Ci0g
ICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykgewotICAgICAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdlYnNpdGVE
YXRhU3RvcmUpKTsKLSAgICAgICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRp
bmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNz
OwotICAgIH0KLQotICAgIGF1dG8gbmV0d29ya1Byb2Nlc3MgPSBtYWtlVW5pcXVlPE5ldHdvcmtQ
cm9jZXNzUHJveHk+KCp0aGlzKTsKLQotICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzIHBhcmFtZXRlcnM7Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBj
b3B5VG9WZWN0b3IobV93ZWJzaXRlRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLSAgICAg
ICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmll
ciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxpY2F0aW9u
QnVuZGxlSWRlbnRpZmllcigpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvblNlY29u
ZGFyeUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24oKS5zb3Vy
Y2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoKTsKLSNlbmRpZgotICAgIH0KLQotICAg
IHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24o
KS5jYWNoZU1vZGVsKCk7Ci0KLSAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IGdsb2JhbFVSTFNjaGVt
ZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQotICAgICAgICBwYXJhbWV0ZXJzLnVybFNj
aGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOwotCi0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9
IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb29r
aWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnks
IHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAg
ICBTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdv
cmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9y
eS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJl
YWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29u
dGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBwYXJl
bnRCdW5kbGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5
KCk7Ci0gICAgaWYgKCFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5k
Ym94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0g
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShlbXB0eVN0
cmluZygpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHBhcmFtZXRlcnMudXJsU2No
ZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5n
czo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKLSAgICBwYXJhbWV0
ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kg
PSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNU
b1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0gICAgcGFyYW1l
dGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xv
YmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKLSAg
ICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3Rv
cihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05v
QWNjZXNzKCkpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgLy8gKioqKioq
KioqCi0gICAgLy8gSU1QT1JUQU5UOiBEbyBub3QgY2hhbmdlIHRoZSBkaXJlY3Rvcnkgc3RydWN0
dXJlIGZvciBpbmRleGVkIGRhdGFiYXNlcyBvbiBkaXNrIHdpdGhvdXQgZmlyc3QgY29uc3VsdGlu
ZyBhIHJldmlld2VyIGZyb20gQXBwbGUgKDxyZGFyOi8vcHJvYmxlbS8xNzQ1NDcxMj4pCi0gICAg
Ly8gKioqKioqKioqCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnkg
PSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCk7
Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3Jl
RXhpc3RzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7Ci0g
ICAgCi0gICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jcmVhdGVTeW1MaW5rRm9yRmlsZVVw
Z3JhZGUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnkpOwotICAgIH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRlcnMuc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2
ZWRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJhbWV0
ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpCi0gICAgICAgIHBhcmFtZXRl
cnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9ICBXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0g
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBh
cmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSwgcGFyYW1ldGVycy5z
ZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRp
ZgotCi0gICAgYXV0byBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUg
PyBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkgOiBu
dWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpCi0gICAgICAgIGxv
Y2FsU3RvcmFnZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdExv
Y2FsU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbG9jYWxTdG9yYWdlRGlyZWN0b3J5Owot
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShs
b2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0
b3JlLT5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAoIWNh
Y2hlU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9y
eSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IFdURk1vdmUoY2FjaGVTdG9yYWdl
RGlyZWN0b3J5KTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3Jl
KQotICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0
YVN0b3JlLT5yZXNvbHZlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKLSAgICBl
bHNlIGlmIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMo
KSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9y
eTsKLSAgICAKLSAgICBpZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0
eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVE
aXJlY3RvcnkocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSwgcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBib29sIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3MgPSBmYWxzZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBmYWxzZTsKLSAgICBib29sIHNob3VsZEluY2x1ZGVM
b2NhbGhvc3QgPSB0cnVlOwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZSA9IGZhbHNlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0g
ICAgV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSB0aGlyZFBhcnR5Q29va2ll
QmxvY2tpbmdNb2RlID0gV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxs
OwotICAgIFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkIHNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudEVuYWJsZWQ6Ok5vOwotI2VuZGlmCi0gICAgV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGUgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBXZWJDb3Jl
OjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llczsKLSAgICBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0g
ICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gYXBwQm91bmREb21haW5zOwot
ICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIG1hbnVhbFByZXZhbGVudFJlc291cmNlOwot
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbV90Y2NQcmVmZXJlbmNlRW5hYmxlZCA9IGRvZXNB
cHBIYXZlSVRQRW5hYmxlZCgpOwotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSAmJiAhd2l0
aFdlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAg
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0g
ICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKG1fd2Vi
c2l0ZURhdGFTdG9yZSAmJiAhbV93ZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRs
eVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1By
ZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAg
IH0gZWxzZSBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpICYm
ICFXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPmlzSXRwU3RhdGVFeHBsaWNp
dGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNj
UHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotI2VuZGlmCi0KLSAgICBpZiAod2l0
aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgp
OwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJl
c291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSB3aXRoV2Vic2l0ZURhdGFTdG9y
ZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChl
bmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9z
dCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BhcmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAgIHNh
bWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnRFbmFibGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAgICAg
IHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25lQXBwbGljYXRpb25Eb21h
aW47Ci0gICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91bmREb21haW5zOwotICAg
ICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFsUHJldmFsZW50UmVzb3Vy
Y2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJP
cmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0aFdlYnNpdGVE
YXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgCi0g
ICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IHdpdGhXZWJzaXRlRGF0
YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIW5l
dHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29y
a0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJv
eEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgYXV0byYgaHN0c1N0
b3JhZ2VEaXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRIU1RTU3RvcmFn
ZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIWhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgp
KSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IGhzdHNTdG9yYWdl
RGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGhz
dHNTdG9yYWdlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3MgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAg
ICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IG1fd2Vic2l0
ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAg
ICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRv
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVy
cygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3VsZEluY2x1ZGVM
b2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAgICAgIGVuYWJsZVJl
c291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdNb2RlOwotI2lmIEVO
QUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0aGlyZFBhcnR5Q29v
a2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7Ci0gICAgICAg
ICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAg
ICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0
aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWlu
czsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVu
dFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUt
PnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNp
dGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLQotICAgICAg
ICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUt
PnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0Nh
Y2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVE
aXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBhdXRvJiBoc3RzU3RvcmFnZURp
cmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRIU1RTU3RvcmFnZURpcmVjdG9y
eSgpOwotICAgICAgICBpZiAoIWhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAg
ICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IGhzdHNTdG9yYWdlRGlyZWN0b3J5
OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGhzdHNTdG9yYWdl
RGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkp
Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgp
OwotICAgICAgICBhdXRvIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0Nh
Y2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgfQotCi0jaWYgSEFWRShDRk5FVFdPUktfQUxURVJOQVRJVkVfU0VSVklD
RSkKLSAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6aHR0cDNFbmFibGVkKCkpIHsKLSAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdEFsdGVybmF0aXZlU2VydmljZXNEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5h
bHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVy
bmF0aXZlU2VydmljZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cDNFbmFibGVkID0gdHJ1ZTsKLSAg
ICB9Ci0jZW5kaWYKLSAgICBib29sIGlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0ID0gZmFsc2U7Ci0g
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgPSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGFyYW1ldGVycyB7Ci0gICAgICAgIFdURk1vdmUocmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RpcmVjdG9yeSksCi0gICAgICAgIFdURk1vdmUocmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSksCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRp
c3RpY3MsCi0gICAgICAgIGlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0LAotICAgICAgICBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50LAotICAgICAgICBzaG91bGRJbmNs
dWRlTG9jYWxob3N0LAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdN
b2RlLAotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIHRoaXJk
UGFydHlDb29raWVCbG9ja2luZ01vZGUsCi0gICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnRFbmFibGVkLAotI2VuZGlmCi0gICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlLAotICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4sCi0gICAgICAgIGFwcEJv
dW5kRG9tYWlucywKLSAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UsCi0gICAgfTsKLQot
ICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgcGFyYW1ldGVycwotICAgIHBsYXRmb3Jt
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOwotCi0gICAgLy8gSW5pdGlhbGl6
ZSB0aGUgbmV0d29yayBwcm9jZXNzLgotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAw
KTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UU9TKG5ldHdvcmtQcm9jZXNzTGF0ZW5jeVFPUygpLCBu
ZXR3b3JrUHJvY2Vzc1Rocm91Z2hwdXRRT1MoKSksIDApOwotI2VuZGlmCi0KLSAgICBuZXR3b3Jr
UHJvY2Vzcy0+dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwotCi0gICAgaWYgKHdpdGhXZWJzaXRl
RGF0YVN0b3JlKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYo
KndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5j
bGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBuZXR3
b3JrIHByb2Nlc3Mga25vd3MgYWJvdXQgYWxsIHRoZSBzZXNzaW9ucyB0aGF0IGhhdmUgYmVlbiBy
ZWdpc3RlcmVkIGJlZm9yZSBpdCBzdGFydGVkLgotICAgIGZvciAoYXV0byYgc2Vzc2lvbklEIDog
bV9zZXNzaW9uVG9QYWdlSURzTWFwLmtleXMoKSkgewotICAgICAgICBpZiAoYXV0byogd2Vic2l0
ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9y
ZUZvclNlc3Npb25JRChzZXNzaW9uSUQpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFk
ZFNlc3Npb24oKndlYnNpdGVEYXRhU3RvcmUpOwotICAgIH0KLQotICAgIG1fbmV0d29ya1Byb2Nl
c3MgPSBXVEZNb3ZlKG5ldHdvcmtQcm9jZXNzKTsKLSAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nl
c3M7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3
b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1Byb3h5KQogewotICAgIEFTU0VSVChtX25l
dHdvcmtQcm9jZXNzKTsKLSAgICBBU1NFUlQoJm5ldHdvcmtQcm9jZXNzUHJveHkgPT0gbV9uZXR3
b3JrUHJvY2Vzcy5nZXQoKSk7Ci0KICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBs
ZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBzdXBwbGVtZW50LT5wcm9jZXNzRGlkQ2xvc2UoJm5l
dHdvcmtQcm9jZXNzUHJveHkpOwogCkBAIC03NTksOSArNDc3LDYgQEAgdm9pZCBXZWJQcm9jZXNz
UG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQ
cm9jZXNzUHIKICAgICBpZiAobV9hdXRvbWF0aW9uU2Vzc2lvbikKICAgICAgICAgbV9hdXRvbWF0
aW9uU2Vzc2lvbi0+dGVybWluYXRlKCk7CiAKLSAgICAvLyBMZWF2ZSB0aGUgcHJvY2VzcyBwcm94
eSBhcm91bmQgZHVyaW5nIGNsaWVudCBjYWxsLCBzbyB0aGF0IHRoZSBjbGllbnQgY291bGQgcXVl
cnkgdGhlIHByb2Nlc3MgaWRlbnRpZmllci4KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0
cjsKLQogICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKQEAgLTc3MiwyMCArNDg3
LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3NDcmFzaGVkKFdl
YlByb2Nlc3NQcm94eSYgcHJveHkpCiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6
Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1By
b3h5LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7
Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKHdlYlBy
b2Nlc3NQcm94eSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB3ZWJQcm9j
ZXNzUHJveHkgPSBtYWtlV2Vha1B0cih3ZWJQcm9jZXNzUHJveHkpLCByZXBseSA9IFdURk1vdmUo
cmVwbHkpXSAoYXV0byYgY29ubmVjdGlvbkluZm8pIG11dGFibGUgewotICAgICAgICBpZiAoVU5M
SUtFTFkoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVjdGlvbkluZm8u
aWRlbnRpZmllcigpKSAmJiB3ZWJQcm9jZXNzUHJveHkgJiYgd2Vha1RoaXMpKSB7Ci0gICAgICAg
ICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19FUlJPUihQcm9jZXNzLCAiZ2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uOiBGYWlsZWQgZmlyc3QgYXR0ZW1wdCwgcmV0cnlpbmciKTsKLSAg
ICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKndlYlByb2Nlc3NQcm94eSwgV1RG
TW92ZShyZXBseSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHJl
cGx5KGNvbm5lY3Rpb25JbmZvKTsKLSAgICB9KTsKLX0KLQogI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdwdVByb2Nlc3NDcmFzaGVkKFByb2Nlc3NJRCBpZGVu
dGlmaWVyKQogewpAQCAtODA5LDIzICs1MTAsMjYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIE0K
IH0KICNlbmRpZgogCitib29sIFdlYlByb2Nlc3NQb29sOjpzX3VzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MgPSBmYWxzZTsKKwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3Jr
UHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm94eSwgUmVnaXN0cmFibGVEb21haW4mJiBy
ZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChw
cm94eSwgJnByb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCi0gICAgYXV0byogd2Vi
c2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFT
dG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUg
PSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9u
SUQpOworICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAgd2Vic2l0ZURhdGFTdG9y
ZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKKyAgICBpZiAo
IXByb2Nlc3NQb29scygpLnNpemUoKSkKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJl
ZjxXZWJQcm9jZXNzUG9vbD4+IHNlcnZpY2VXb3JrZXJQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9v
bDo6Y3JlYXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjcmVhdGUoKS5nZXQoKSkp
OwogCi0gICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGlmICghbV93ZWJzaXRl
RGF0YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0gICAgICAgIHdlYnNpdGVE
YXRhU3RvcmUgPSBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7Ci0gICAgfQorICAgIC8vIEFyYml0
cmFyaWx5IGNob29zZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sIHRvIGhvc3QgdGhlIHNlcnZpY2Ug
d29ya2VyIHByb2Nlc3MuCisgICAgYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbHMoKVsw
XTsKKyAgICBBU1NFUlQocHJvY2Vzc1Bvb2wpOwogCiAgICAgV2ViUHJvY2Vzc1Byb3h5KiBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Byb3h5IHsgbnVsbHB0ciB9OwotICAgIGlmICghbV91c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IG1f
cHJvY2Vzc2VzKSB7Ci0gICAgICAgICAgICBpZiAocHJvY2VzcyA9PSBtX3ByZXdhcm1lZFByb2Nl
c3MgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94eSgpKQorCisgICAgaWYgKCFzX3VzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNz
IDogcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2VzKSB7CisgICAgICAgICAgICBpZiAocHJvY2VzcyA9
PSBwcm9jZXNzUG9vbC0+bV9wcmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9j
ZXNzUHJveHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICgm
cHJvY2Vzcy0+d2Vic2l0ZURhdGFTdG9yZSgpICE9IHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CkBAIC04MzMsMzUgKzUzNywzNSBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0
d29ya1BybwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBzZXJ2aWNl
V29ya2VyUHJvY2Vzc1Byb3h5ID0gcHJvY2Vzcy5nZXQoKTsKLSAgICAgICAgICAgIHNlcnZpY2VX
b3JrZXJQcm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VXb3JrZXJzKHVzZXJDb250ZW50Q29udHJv
bGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpKTsKKyAgICAgICAgICAgIHNlcnZpY2VX
b3JrZXJQcm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VXb3JrZXJzKHByb2Nlc3NQb29sLT51c2Vy
Q29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CiAKLSAgICAg
ICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQoU2VydmljZVdvcmtl
ciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVz
aW5nIGFuIGV4aXN0aW5nIHdlYiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lk
ZW50aWZpZXIoKSk7CisgICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9B
TExPV0VEX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5l
Y3Rpb25Ub05ldHdvcmtQcm9jZXNzIHJldXNpbmcgYW4gZXhpc3Rpbmcgd2ViIHByb2Nlc3MgKHBy
b2Nlc3M9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5
KSB7Ci0gICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5ID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVh
dGVGb3JTZXJ2aWNlV29ya2VycygqdGhpcywgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksICp3
ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgYXV0byBuZXdQcm9jZXNzUHJveHkgPSBXZWJQcm9j
ZXNzUHJveHk6OmNyZWF0ZUZvclNlcnZpY2VXb3JrZXJzKCpwcm9jZXNzUG9vbCwgV1RGTW92ZShy
ZWdpc3RyYWJsZURvbWFpbiksICp3ZWJzaXRlRGF0YVN0b3JlKTsKICAgICAgICAgc2VydmljZVdv
cmtlclByb2Nlc3NQcm94eSA9IG5ld1Byb2Nlc3NQcm94eS5wdHIoKTsKIAotICAgICAgICBXRUJQ
Uk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxp
c2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgY3JlYXRpbmcgYSBuZXcg
c2VydmljZSB3b3JrZXIgcHJvY2VzcyAocHJvY2VzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtl
clByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZp
ZXIoKSk7CisgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RB
VElDKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0
d29ya1Byb2Nlc3MgY3JlYXRpbmcgYSBuZXcgc2VydmljZSB3b3JrZXIgcHJvY2VzcyAocHJvY2Vz
PSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclBy
b2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAKLSAgICAgICAgaW5pdGlhbGl6ZU5l
d1dlYlByb2Nlc3MobmV3UHJvY2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICAgICAg
bV9wcm9jZXNzZXMuYXBwZW5kKFdURk1vdmUobmV3UHJvY2Vzc1Byb3h5KSk7CisgICAgICAgIHBy
b2Nlc3NQb29sLT5pbml0aWFsaXplTmV3V2ViUHJvY2VzcyhuZXdQcm9jZXNzUHJveHksIHdlYnNp
dGVEYXRhU3RvcmUpOworICAgICAgICBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMuYXBwZW5kKFdU
Rk1vdmUobmV3UHJvY2Vzc1Byb3h5KSk7CiAgICAgfQogCi0gICAgQVNTRVJUKCFtX3NlcnZpY2VX
b3JrZXJQcm9jZXNzZXMuY29udGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpKTsKLSAg
ICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5
KTsKKyAgICBBU1NFUlQoIXNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlucygqc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eSkpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5hZGQo
KnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpOwogCi0gICAgc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eS0+ZXN0YWJsaXNoU2VydmljZVdvcmtlckNvbnRleHQobV9zZXJ2aWNlV29ya2VyUHJlZmVy
ZW5jZXMgPyBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcy52YWx1ZSgpIDogbV9kZWZhdWx0UGFn
ZUdyb3VwLT5wcmVmZXJlbmNlcygpLnN0b3JlKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICBpZiAoIW1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkKLSAgICAgICAg
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChtX3Nl
cnZpY2VXb3JrZXJVc2VyQWdlbnQpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVz
dGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KHByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJQ
cmVmZXJlbmNlcyA/IHByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcy52YWx1
ZSgpIDogcHJvY2Vzc1Bvb2wtPm1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5zdG9y
ZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgaWYgKCFwcm9jZXNzUG9vbC0+
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50LmlzTnVsbCgpKQorICAgICAgICBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KHByb2Nlc3NQb29sLT5tX3Nl
cnZpY2VXb3JrZXJVc2VyQWdlbnQpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZW1vdmVG
cm9tU2VydmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiB7Ci0g
ICAgQVNTRVJUKG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb250YWlucyhwcm9jZXNzKSk7Ci0g
ICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLnJlbW92ZShwcm9jZXNzKTsKKyAgICBBU1NFUlQo
c2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5zKHByb2Nlc3MpKTsKKyAgICBzZXJ2aWNl
V29ya2VyUHJvY2Vzc2VzKCkucmVtb3ZlKHByb2Nlc3MpOwogfQogI2VuZGlmCiAKQEAgLTkzMCw3
ICs2MzQsNyBAQCBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBXZWJQcm9jZXNzUG9vbDo6dHJ5VGFr
ZVByZXdhcm1lZFByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZQogI2lmIFBMQVRGT1JNKEdUSykgfHwg
UExBVEZPUk0oV1BFKQogICAgIC8vIEluIHBsYXRmb3JtcyB1c2luZyBCdWJibGV3cmFwIGZvciBz
YW5kYm94aW5nLCBwcmV3YXJtZWQgcHJvY2VzcyBpcyBsYXVuY2hlZCB1c2luZyB0aGUgV2ViUHJv
Y2Vzc1Bvb2wgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlLAogICAgIC8vIHNvIHdlIGRvbid0IHVz
ZSBpdCBpbiBjYXNlIG9mIHVzaW5nIGEgZGlmZmVyZW50IFdlYnNpdGVEYXRhU3RvcmUuCi0gICAg
aWYgKG1fc2FuZGJveEVuYWJsZWQgJiYgbV93ZWJzaXRlRGF0YVN0b3JlICYmIG1fd2Vic2l0ZURh
dGFTdG9yZS5nZXQoKSAhPSAmd2Vic2l0ZURhdGFTdG9yZSkKKyAgICBpZiAobV9zYW5kYm94RW5h
YmxlZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIApAQCAtMTA0MCw4ICs3NDQs
NiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjppbml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9j
ZXNzUHJveHkmIHByb2Nlc3MsIFdlYnNpdGVEYQogICAgICAgICBwcm9jZXNzLmlzUmVzcG9uc2l2
ZShbaW5pdGlhbGl6YXRpb25BY3Rpdml0eSA9IFdURk1vdmUoaW5pdGlhbGl6YXRpb25BY3Rpdml0
eSldIChib29sKSB7IH0pOwogICAgIH0pOwogCi0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsK
LQogICAgIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKIAogICAgIHBh
cmFtZXRlcnMuaW5qZWN0ZWRCdW5kbGVQYXRoID0gbV9yZXNvbHZlZFBhdGhzLmluamVjdGVkQnVu
ZGxlUGF0aDsKQEAgLTEyMDYsOSArOTA4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vz
c0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCiAgICAgICAgIHBy
b2Nlc3MtPmNvbm5lY3Rpb24oKS0+aWdub3JlVGltZW91dHNGb3JUZXN0aW5nKCk7CiAKICAgICBt
X2Nvbm5lY3Rpb25DbGllbnQuZGlkQ3JlYXRlQ29ubmVjdGlvbih0aGlzLCBwcm9jZXNzLT53ZWJD
b25uZWN0aW9uKCkpOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgbV93
ZWJzaXRlRGF0YVN0b3JlLT5kaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwogfQogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3Mp
CkBAIC0xMzAzLDEwICsxMDAyLDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6
OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSToKICAgICBpZiAo
IXBhZ2VDb25maWd1cmF0aW9uLT53ZWJzaXRlRGF0YVN0b3JlKCkpIHsKICAgICAgICAgLy8gV2Ug
dHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBkZWZhdWx0IGRhdGEgc3RvcmUgYXMgbG9uZyBhcyBw
b3NzaWJsZS4KICAgICAgICAgLy8gQnV0IGlmIHRoZXJlIGlzIGFuIGF0dGVtcHQgdG8gY3JlYXRl
IGEgd2ViIHBhZ2Ugd2l0aG91dCBhbnkgc3BlY2lmaWVkIGRhdGEgc3RvcmUsIHRoZW4gd2UgaGF2
ZSB0byBjcmVhdGUgaXQuCi0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAg
ICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0KLSAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFdl
YnNpdGVEYXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsKKyAgICAgICAgcGFnZUNv
bmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCkpOwogICAgIH0KIAogICAgIFJlZlB0cjxXZWJQcm9j
ZXNzUHJveHk+IHByb2Nlc3M7CkBAIC0xMzM3LDcgKzEwMzMsNyBAQCBSZWY8V2ViUGFnZVByb3h5
PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBS
ZWY8QVBJOgogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBpZiAoIW1fc2VydmljZVdv
cmtlclByZWZlcmVuY2VzKSB7CiAgICAgICAgIG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzID0g
cGFnZS0+cHJlZmVyZW5jZXNTdG9yZSgpOwotICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgICAgICBmb3IgKGF1dG8m
IHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQogICAgICAg
ICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclByZWZlcmVuY2Vz
U3RvcmUoKm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKTsKICAgICB9CiAgICAgaWYgKHVzZXJD
b250ZW50Q29udHJvbGxlcikKQEAgLTEzNjQsNyArMTA2MCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQp
CiAgICAgaWYgKG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9PSB1c2VyQWdlbnQpCiAgICAgICAg
IHJldHVybjsKICAgICBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQgPSB1c2VyQWdlbnQ7Ci0gICAg
Zm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cykKKyAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclBy
b2Nlc3NlcygpKQogICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy5zZXRTZXJ2aWNlV29ya2Vy
VXNlckFnZW50KG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CiB9CiAjZW5kaWYKQEAgLTEzNzMs
MTUgKzEwNjksNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdlQmVnaW5Vc2luZ1dlYnNpdGVE
YXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSQogewogICAgIGF1dG8gcmVzdWx0
ID0gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmFkZChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIEhhc2hT
ZXQ8V2ViUGFnZVByb3h5SWRlbnRpZmllcj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChwYWdlSUQp
OwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Ci0KLSAgICBh
dXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKLSAgICBpZiAoc2Vzc2lvbklE
ICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgQVNTRVJU
KCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRhU3RvcmUucGFyYW1ldGVycygpLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsKLSAgICAgICAgaWYg
KG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNl
c3Npb24obWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIGRhdGFTdG9yZS5jbGVhclBl
bmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnBhZ2VFbmRVc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciBw
YWdlSUQsIFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKQEAgLTE0MDksNyArMTA5Niw2IEBA
IGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1BhZ2VzVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpk
b3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94eSogaW5pdGlh
dGluZ1BhZ2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWRGaWxlbmFtZSkKIHsKICAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0gY3JlYXRlRG93
bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGluaXRpYXRpbmdQYWdlLCB7IH0pOwotICAg
IFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKIAogICAg
IE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc0FwcEJvdW5kID0gTmF2aWdh
dGluZ1RvQXBwQm91bmREb21haW46Ok5vOwogICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewpAQCAt
MTQxNywyNiArMTEwMywyMyBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxv
YWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveAogICAgICAgICBpc0Fw
cEJvdW5kID0gaW5pdGlhdGluZ1BhZ2UtPmlzVG9wRnJhbWVOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpbigpOwogICAgIH0KIAotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFJl
c291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgLy8gUmVxdWVz
dCdzIGZpcnN0UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwgb2Yg
dGhlIGRvd25sb2FkIHJlcXVlc3QuCi0gICAgICAgIC8vIFdlIHNldCB0aGUgdmFsdWUgdG8gdG9w
IGxldmVsIGRvY3VtZW50J3MgVVJMLgotICAgICAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKLSAg
ICAgICAgICAgIFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGluaXRpYXRp
bmdQYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1
ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKLSAgICAgICAg
ICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1
YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgICAgIGlmICgh
dXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdl
bnQpKQotICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5p
dGlhdGluZ1BhZ2UtPnVzZXJBZ2VudCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKLSAgICAgICAg
ICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOwotICAgICAgICAgICAgaWYg
KCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJB
Z2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChX
ZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwotICAgICAgICB9Ci0gICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNz
KCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lv
bklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91
bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5
OworICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAvLyBS
ZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVS
TCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KKyAgICAvLyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRv
cCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KKyAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKKyAgICAg
ICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2Ut
PnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJz
dFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7CisgICAgICAgIHVwZGF0ZWRSZXF1
ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1Bh
Z2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNI
VFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1
cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2VyQWdlbnQo
KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZv
ckNvb2tpZXMoVVJMKCkpOworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGZh
bHNlKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRU
UEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRI
VFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7CiAgICAgfQor
ICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7CisgICAgZGF0YVN0b3JlLm5l
dHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25sb2FkUmVx
dWVzdChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1
cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsKIAogICAg
IHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTQ0NCwxNyArMTEyNywxMiBAQCBEb3dubG9h
ZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0
b3JlLCBXZWJQYWdlUHJveAogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURv
d25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0
aW5nUGFnZSwgY29uc3QgQVBJOjpEYXRhJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgp
CiB7CiAgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0
b3JlLCBSZXNvdXJjZVJlcXVlc3QoKSwgaW5pdGlhdGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwogCiAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgaWYgKCFwYXRo
LmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgs
IFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZSk7CiAKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBuZXR3b3JrUHJvY2Vz
cygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lv
bklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNl
KCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRv
d25sb2FkUHJveHk7Ci0gICAgfQotCisgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKGRhdGFTdG9yZS5zZXNz
aW9uSUQoKSwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVy
ZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSwgMCk7CiAgICAgcmV0dXJuIGRv
d25sb2FkUHJveHk7CiB9CiAKQEAgLTE1MjMsMTEgKzEyMDEsNiBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpyZWZyZXNoUGx1Z2lucygpCiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKIAotUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIoKQotewotICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+
cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7Ci19Ci0KIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6
cHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKQogewogICAgIHJldHVybiBtX3ByZXdhcm1lZFBy
b2Nlc3MgPyBtX3ByZXdhcm1lZFByb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCkgOiAwOwpAQCAt
MTU0MiwxNCArMTIxNSwxNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjphY3RpdmVQYWdlc09yaWdp
bnNJbldlYlByb2Nlc3NGb3JUZXN0aW5nKFByb2Nlc3NJRCBwaWQsIENvbQogICAgIGNvbXBsZXRp
b25IYW5kbGVyKHsgfSk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFNlcnZpY2VXb3Jr
ZXJUaW1lb3V0Rm9yVGVzdGluZyhTZWNvbmRzIHNlY29uZHMpCit2b2lkIFdlYlByb2Nlc3NQb29s
OjpzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoU2Vjb25kcykKIHsKLSAgICBzZW5k
U3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2
aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhzZWNvbmRzKSwgTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHko
KSk7CisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAgIC8vIHNlbmRTeW5jVG9O
ZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3Jr
ZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKHNlY29uZHMpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpKTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3Rp
bmcoKQogewotICAgIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSwgTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JU
ZXN0aW5nOjpSZXBseSgpKTsKKyAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCisgICAg
Ly8gc2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJl
cGx5KCkpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBbHdheXNVc2VzQ29tcGxleFRl
eHRDb2RlUGF0aChib29sIGFsd2F5c1VzZUNvbXBsZXhUZXh0KQpAQCAtMTU3NCwxNCArMTI0OSwx
NiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKGNvbnN0
IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0
b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxs
UHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJl
KHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpKTsKKyAgICAv
LyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCisgICAgLy8gc2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVy
bFNjaGVtZSkpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFz
QnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQog
ewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVt
ZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSk7CiAgICAgc2VuZFRv
QWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlw
YXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVB
c0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpKTsKKyAgICAvLyBGSVhN
RTogRG8gc29tZXRoaW5nIGhlcmUuCisgICAgLy8gc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVu
dFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgdXJs
U2NoZW1lKQpAQCAtMTU5NCwxNCArMTI3MSwxNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdp
c3RlclVSTFNjaGVtZUFzTG9jYWwoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVn
YWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1
cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6
UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtp
bmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xv
Y2FsKHVybFNjaGVtZSkpOworICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KKyAgICAv
LyBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lz
dGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQog
ewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVt
ZUFzTm9BY2Nlc3ModXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6
OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpKTsKLSAg
ICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lz
dGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpKTsKKyAgICAvLyBGSVhNRTogRG8gc29t
ZXRoaW5nIGhlcmUuCisgICAgLy8gc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7CiB9
CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0
ZWQoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNjIyLDEwICsxMzAxLDggQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3Rv
Y29sSGFuZGxlcnMoY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2xvYmFsVVJMU2NoZW1l
c1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkuYWRkKHVybFNjaGVtZSk7Ci0gICAgZm9yIChh
dXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9j
b2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0
d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3Jr
UHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUp
OwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNI
YXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAt
MTYzNCwxMCArMTMxMSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxV
UkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLnJl
bW92ZSh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lz
dGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAg
Zm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29y
a1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZv
ckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYgdXJs
U2NoZW1lKQpAQCAtMTY3MSwxNiArMTM0NiwxNCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRD
YWNoZU1vZGVsKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIAogICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSk7CiAKLSAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCksIDApOwor
ICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKENhY2hlTW9kZWwgY2FjaGVN
b2RlbCkKIHsKICAgICB1cGRhdGVCYWNrRm9yd2FyZENhY2hlQ2FwYWNpdHkoKTsKIAotICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVz
dGluZyhjYWNoZU1vZGVsKSwgeyB9LCB7IH0pOworICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcg
aGVyZS4KIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0
SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE2OTAsMTIgKzEzNjMsMTIgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91
YmxlIHRpbWVvdXRJbnRlcnZhbCkKIAogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNy
ZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlLCBjb25z
dCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8pCiB7Ci0gICAgcmV0dXJuIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGZyYW1lSW5m
bywgb3JpZ2luYXRpbmdQYWdlKTsKKyAgICByZXR1cm4gZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNz
KCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsICp0aGlzLCByZXF1ZXN0LCBmcmFtZUlu
Zm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNp
emVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQogewotICAgIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKKyAgICAvLyBG
SVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFkZE1l
c3NhZ2VSZWNlaXZlcihJUEM6OlJlY2VpdmVyTmFtZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6
Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQpAQCAtMTc2Niw0NyArMTQzOSwyMiBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAgICAgc2VuZFRvQWxs
UHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKIH0K
IAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKCkKLXsKLSAg
ICBBU1NFUlQobV9wcm9jZXNzZXMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fbmV0d29ya1By
b2Nlc3MpOwotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICghbV9wcm9jZXNzZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3Nob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiA9IHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0
d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UsIFUmJiByZXBseSkKLXsKLSAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIHN0
ZDo6Zm9yd2FyZDxVPihyZXBseSksIDApOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93cykKIHsKLSAgICBz
ZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChhbGxvd3MpLCBNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0OjpSZXBs
eSgpKTsKKyAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCisgICAgLy8gc2VuZFN5bmNU
b05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55
U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldDo6UmVwbHkoKSk7CiB9
CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogewotICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFscygpLCAwKTsKKyAg
ICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vy
cygpOwogCi0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vz
cyA9IG51bGxwdHI7CisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250ZW50UHJvY2Vzc2VzKCkKQEAgLTE4
MTgsNTUgKzE0NjYsNDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlQWxsV2ViQ29u
dGVudFByb2Nlc3NlcygpCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vz
c1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgogfQogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHlGb3JUZXN0aW5nKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5n
KCk7CisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgogfQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQogewotICAgIGlmIChtX25ldHdv
cmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJvY2Vzc0RpZFJlc3Vt
ZSgpOworICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMoKQogewogI2lmIEVOQUJMRShTRVJWSUNF
X1dPUktFUikKICAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICB3
aGlsZSAobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbXB1dGVTaXplKCkpCi0gICAgICAgIG1f
c2VydmljZVdvcmtlclByb2Nlc3Nlcy5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsK
KyAgICB3aGlsZSAoc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCkpCisgICAg
ICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtl
cnMoKTsKICNlbmRpZgogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzeW5jTmV0d29ya1Byb2Nl
c3NDb29raWVzKCkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bmNBbGxDb29raWVz
KCk7CisgICAgLy8gRklYTUU6IE1vdmUgdGhpcyB0byBXZWJzaXRlRGF0YVN0b3JlLgogfQogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBzZW5kU3luY1RvTmV0d29ya2luZ1By
b2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5jTG9jYWxTdG9yYWdlKCksIE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZTo6UmVwbHkoKSk7CisgICAgLy8g
RklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAgIC8vIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJv
Y2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3JhZ2UoKSwgTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5jTG9jYWxTdG9yYWdlOjpSZXBseSgpKTsKICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckxlZ2FjeVBy
aXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckxlZ2Fj
eVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZSgpLCAwKTsKKyAgICAvLyBGSVhNRTogRG8gc29t
ZXRoaW5nIGhlcmUuCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNl
cnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKLSAgICBl
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3Qo
Y2VydGlmaWNhdGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CisgICAgLy8gRklYTUU6
IERvIHNvbWV0aGluZyBoZXJlLgogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVBdXRv
bWF0aW9uQ2FwYWJpbGl0aWVzKCkgY29uc3QKQEAgLTIxNDMsMTUgKzE3ODUsMTkgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6cmVwb3J0V2ViQ29udGVudENQVVRpbWUoU2Vjb25kcyBjcHVUaW1lLCB1
aW50NjRfdCBhY3Rpdml0eVMKICNlbmRpZgogfQogCitXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJv
eHk+JiBXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3NlcygpCit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3Nl
czsKKyAgICByZXR1cm4gcHJvY2Vzc2VzOworfQorCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRh
dGVQcm9jZXNzQXNzZXJ0aW9ucygpCiB7Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRh
dGVQcm9jZXNzQXNzZXJ0aW9uKCk7CisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgog
I2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICAvLyBDaGVjayBvbiBuZXh0IHJ1biBsb29w
IHNpbmNlIHRoZSB3ZWIgcHJvY2VzcyBwcm94eSB0b2tlbnMgYXJlIHByb2JhYmx5IGJlaW5nIHVw
ZGF0ZWQuCi0gICAgY2FsbE9uTWFpblJ1bkxvb3AoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIodGhpcyldIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtl
clByb2Nlc3NlcykKKyAgICBjYWxsT25NYWluUnVuTG9vcChbXSB7CisgICAgICAgIGZvciAoYXV0
byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAg
ICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzc0Fz
c2VydGlvbigpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMTYxLDcgKzE4MDcsNyBAQCBib29sIFdl
YlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmll
ciBwYWdlSUQpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGluZWZmaWNpZW50LgotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcywgW3BhZ2VJRF0oYXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBX
VEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW3BhZ2VJRF0oYXV0byYgcHJvY2Vz
cykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyUGFnZVByb3h5KHBh
Z2VJRCk7CiAgICAgfSk7CiAjZW5kaWYKQEAgLTIzODUsMTAgKzIwMzEsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpjbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpCiAjaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpZENv
bW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiB0b0RvbWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0ZU5hdmlnYXRpb25EYXRhVHJhbnNm
ZXI6OkZsYWc+IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIg
d2ViUGFnZVByb3h5SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCkKIHsKLSAgICBpZiAoIW1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25JRCwgZnJvbURv
bWFpbiwgdG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQcm94eUlELCB3
ZWJQYWdlSUQpOworICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zKQpAQCAtMjQ0MSwyNyArMjA4NCwyOCBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVBdWRpYmxlTWVkaWFBc3NlcnRpb25zKCkKIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhi
b29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgaWYgKG1fdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKQorICAgIGlmIChzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0VCUFJP
Q0VTU1BPT0xfUkVMRUFTRV9MT0coU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3M6ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdFQlBST0NFU1NQT09MX1JFTEVB
U0VfTE9HX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiAKLSAgICBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwotICAgIHRlcm1pbmF0
ZVNlcnZpY2VXb3JrZXJzKCk7Ci0gICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBz
X3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6
YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNl
V29ya2VycygpOworICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KIH0KIAogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3Jr
ZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RG
OjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsKKyAg
ICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8mIHBy
b2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckZvcmVncm91
bmRBY3Rpdml0eUZvclRlc3RpbmcoKTsKICAgICB9KTsKIH0KIAogYm9vbCBXZWJQcm9jZXNzUG9v
bDo6aGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdAog
ewotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10oYXV0
byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMoKSwgW10oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2
aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5kZXggNjk2OTYzMmE2YmU0ZDI4
OWI1MzgzZjE0YTU0MGNlODNhNWQ2MWEzMi4uYTEzNGNiMjBjNDNjYjk2NDhkY2FjNzdmYjhlYjA5
YjEwNjkzZmI2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCkBA
IC04MSw3ICs4MSw2IEBAIE9CSkNfQ0xBU1MgV0tQcmVmZXJlbmNlT2JzZXJ2ZXI7CiAKIG5hbWVz
cGFjZSBBUEkgewogY2xhc3MgQXV0b21hdGlvbkNsaWVudDsKLWNsYXNzIEN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudDsKIGNsYXNzIERvd25sb2FkQ2xpZW50OwogY2xhc3MgSFRUUENvb2tpZVN0
b3JlOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGVDbGllbnQ7CkBAIC0xODAsNyArMTc5LDYgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0SGlzdG9yeUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdh
Y3lDb250ZXh0SGlzdG9yeUNsaWVudD4mJik7CiAgICAgdm9pZCBzZXREb3dubG9hZENsaWVudChV
bmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4mJik7CiAgICAgdm9pZCBzZXRBdXRvbWF0aW9u
Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JiYpOwotICAgIHZv
aWQgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxB
UEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJik7CiAKICAgICB2b2lkIHNldEN1c3Rv
bVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKICAgICBj
b25zdCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpIHsg
cmV0dXJuIG1fY29uZmlndXJhdGlvbi0+Y3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVu
dGlmaWVyKCk7IH0KQEAgLTE5MSwxNyArMTg5LDkgQEAgcHVibGljOgogICAgIC8vIG51bGwgY2hl
Y2tzIGluIFdlYlBhZ2VQcm94eS4KICAgICBXZWJQcm9jZXNzUHJveHkqIGR1bW15UHJvY2Vzc1By
b3h5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QgeyByZXR1cm4gbV9kdW1teVByb2Nl
c3NQcm94aWVzLmdldChzZXNzaW9uSUQpLmdldCgpOyB9CiAKLSAgICAvLyBXZWJQcm9jZXNzIG9y
IE5ldHdvcmtQcm9jZXNzIGFzIGFwcHJvcG9yaWF0ZSBmb3IgY3VycmVudCBwcm9jZXNzIG1vZGVs
LiBUaGUgY29ubmVjdGlvbiBtdXN0IGJlIG5vbi1udWxsLgotICAgIElQQzo6Q29ubmVjdGlvbiog
bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCk7Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNzYWdlKTsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oY29uc3QgVCYg
bWVzc2FnZSwgUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gU2VuZHMgdGhlIG1lc3NhZ2UgdG8g
V2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2VzcyBhcyBhcHByb3BvcmlhdGUgZm9yIGN1cnJlbnQg
cHJvY2VzcyBtb2RlbC4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiB2b2lkIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYm
IHJlcGx5KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdvcmtpbmdQ
cm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSk7Ci0KICAgICB2b2lkIHBy
b2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKICAgICBXZWJQcm9j
ZXNzQ2FjaGUmIHdlYlByb2Nlc3NDYWNoZSgpIHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0NhY2hlLmdl
dCgpOyB9CkBAIC0yMDksOSArMTk5LDYgQEAgcHVibGljOgogICAgIC8vIERpc2Nvbm5lY3QgdGhl
IHByb2Nlc3MgZnJvbSB0aGUgY29udGV4dC4KICAgICB2b2lkIGRpc2Nvbm5lY3RQcm9jZXNzKFdl
YlByb2Nlc3NQcm94eSopOwogCi0gICAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlKiB3ZWJzaXRl
RGF0YVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9Ci0g
ICAgdm9pZCBzZXRQcmltYXJ5RGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgZGF0
YVN0b3JlKSB7IG1fd2Vic2l0ZURhdGFTdG9yZSA9ICZkYXRhU3RvcmU7IH0KLQogICAgIFJlZjxX
ZWJQYWdlUHJveHk+IGNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYsIFJlZjxBUEk6OlBhZ2VDb25m
aWd1cmF0aW9uPiYmKTsKIAogICAgIHZvaWQgcGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3Jl
KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYnNpdGVEYXRhU3RvcmUmKTsKQEAgLTI2MiwxMCAr
MjQ5LDggQEAgcHVibGljOgogICAgIHZvaWQgYWRkU3VwcG9ydGVkUGx1Z2luKFN0cmluZyYmIG1h
dGNoaW5nRG9tYWluLCBTdHJpbmcmJiBuYW1lLCBIYXNoU2V0PFN0cmluZz4mJiBtaW1lVHlwZXMs
IEhhc2hTZXQ8U3RyaW5nPiBleHRlbnNpb25zKTsKICAgICB2b2lkIGNsZWFyU3VwcG9ydGVkUGx1
Z2lucygpOwogCi0gICAgUHJvY2Vzc0lEIG5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpOwogICAg
IFByb2Nlc3NJRCBwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcigpOwogICAgIHZvaWQgYWN0aXZl
UGFnZXNPcmlnaW5zSW5XZWJQcm9jZXNzRm9yVGVzdGluZyhQcm9jZXNzSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYpOwotICAgIGJvb2wgbmV0d29ya1Byb2Nl
c3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRT
ZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoU2Vjb25kcyk7CiAgICAgdm9pZCByZXNldFNl
cnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZygpOwogCkBAIC0zMDksOCArMjk0LDYgQEAgcHVi
bGljOgogICAgIEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlDbGllbnQo
KSB7IHJldHVybiAqbV9oaXN0b3J5Q2xpZW50OyB9CiAgICAgV2ViQ29udGV4dENsaWVudCYgY2xp
ZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KIAotICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50JiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVybiAq
bV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7IH0KLQogICAgIHN0cnVjdCBTdGF0aXN0aWNz
IHsKICAgICAgICAgdW5zaWduZWQgd2tWaWV3Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHdrUGFn
ZUNvdW50OwpAQCAtMzE4LDkgKzMwMSw2IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHN0YXRpYyBT
dGF0aXN0aWNzJiBzdGF0aXN0aWNzKCk7ICAgIAogCi0gICAgdm9pZCB1c2VUZXN0aW5nTmV0d29y
a1Nlc3Npb24oKTsKLSAgICBib29sIGlzVXNpbmdUZXN0aW5nTmV0d29ya1Nlc3Npb24oKSBjb25z
dCB7IHJldHVybiBtX3Nob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbjsgfQotCiAgICAgdm9p
ZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sKTsKIAogICAgIHZv
aWQgY2xlYXJDYWNoZWRDcmVkZW50aWFscygpOwpAQCAtMzk5LDE5ICszNzksMTMgQEAgcHVibGlj
OgogI2VuZGlmCiAKICAgICAvLyBOZXR3b3JrIFByb2Nlc3MgTWFuYWdlbWVudAotICAgIE5ldHdv
cmtQcm9jZXNzUHJveHkmIGVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdp
dGhXZWJzaXRlRGF0YVN0b3JlID0gbnVsbHB0cik7Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSog
bmV0d29ya1Byb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX25ldHdvcmtQcm9jZXNzLmdldCgpOyB9
CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwog
Ci0gICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5Jiwg
TWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVs
YXllZFJlcGx5JiYpOwotCiAgICAgYm9vbCBpc1NlcnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFnZVBy
b3h5SWRlbnRpZmllcikgY29uc3Q7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIHZv
aWQgZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdv
cmtQcm9jZXNzUHJveHkmLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYmLCBQQUw6OlNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICBzdGF0aWMgdm9pZCBlc3Rh
Ymxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nl
c3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vzc2lvbklELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgcmVtb3ZlRnJvbVNlcnZpY2VX
b3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5Jik7Ci0gICAgc2l6ZV90IHNlcnZpY2VXb3Jr
ZXJQcm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMu
Y29tcHV0ZVNpemUoKTsgfQotICAgIHZvaWQgc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JT
ZXJ2aWNlV29ya2VyKGJvb2wgYWxsb3dzKSB7IG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JT
ZXJ2aWNlV29ya2VyID0gYWxsb3dzOyB9Ci0gICAgYm9vbCBhbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvclNlcnZpY2VXb3JrZXIoKSBjb25zdCB7IHJldHVybiBtX2FsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yU2VydmljZVdvcmtlcjsgfQorICAgIHNpemVfdCBzZXJ2aWNlV29ya2VyUHJveGllc0Nv
dW50KCkgY29uc3QgeyByZXR1cm4gc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXpl
KCk7IH0KICAgICB2b2lkIHVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5n
JiB1c2VyQWdlbnQpOwogICAgIGNvbnN0IE9wdGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlcklk
ZW50aWZpZXI+JiB1c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtl
cnMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJDb250ZW50Q29udHJvbGxlcklERm9yU2VydmljZVdv
cmtlcjsgfQogICAgIGJvb2wgaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRl
c3RpbmcoKSBjb25zdDsKQEAgLTUzOCw4ICs1MTIsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgUGx1
Z0luQXV0b1N0YXJ0UHJvdmlkZXImIHBsdWdJbkF1dG9TdGFydFByb3ZpZGVyKCkgeyByZXR1cm4g
bV9wbHVnSW5BdXRvU3RhcnRQcm92aWRlcjsgfQogCi0gICAgdm9pZCBzZXRVc2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOwotICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzczsgfQorICAgIHN0YXRpYyB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MoYm9vbCk7CisgICAgc3RhdGljIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cygpIHsgcmV0dXJuIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQogCiAjaWYg
RU5BQkxFKENGUFJFRlNfRElSRUNUX01PREUpCiAgICAgdm9pZCBub3RpZnlQcmVmZXJlbmNlc0No
YW5nZWQoY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBPcHRp
b25hbDxTdHJpbmc+JiBlbmNvZGVkVmFsdWUpOwpAQCAtNTU2LDYgKzUzMCwxNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhPU09i
amVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSk7CiAjZW5kaWYKIAorICAgIHN0
YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVt
ZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBzdGF0
aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgbmV0
d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENh
Y2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGly
ZWN0b3J5KCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6
ZSgpOwogCkBAIC01NjksOCArNTU0LDYgQEAgcHJpdmF0ZToKICAgICBXZWJQcm9jZXNzUHJveHkm
IGNyZWF0ZU5ld1dlYlByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSosIFdlYlByb2Nlc3NQcm94eTo6
SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkOjpObyk7CiAgICAgdm9p
ZCBpbml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmLCBXZWJzaXRlRGF0YVN0
b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQ
cmV3YXJtZWQ6Ok5vKTsKIAotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLQogICAgIHZvaWQgaGFuZGxl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25z
dCBVc2VyRGF0YSYgbWVzc2FnZUJvZHkpOwogICAgIHZvaWQgaGFuZGxlU3luY2hyb25vdXNNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVz
ZXJEYXRhJiBtZXNzYWdlQm9keSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyRGF0YSYmKT4m
Jik7CiAKQEAgLTU5NCwxNCArNTc3LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdXNlc1Npbmds
ZVdlYlByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPnVzZXNTaW5nbGVX
ZWJQcm9jZXNzKCk7IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3RhdGljIFN0
cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBwYXJlbnRC
dW5kbGVEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJl
Y3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsK
LSAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwotI2VuZGlm
Ci0KICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHJlZ2lzdGVyTm90aWZpY2F0aW9uT2Jz
ZXJ2ZXJzKCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CkBA
IC02NDMsOSArNjE4LDggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBX
ZWFrUHRyPFdlYlByb2Nlc3NQcm94eT4+IG1fZHVtbXlQcm9jZXNzUHJveGllczsgLy8gTGlnaHR3
ZWlnaHQgV2ViUHJvY2Vzc1Byb3h5IG9iamVjdHMgd2l0aG91dCBiYWNraW5nIHByb2Nlc3MuCiAK
ICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1By
b3h5PiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXM7CisgICAgc3RhdGljIFdlYWtIYXNoU2V0PFdl
YlByb2Nlc3NQcm94eT4mIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKTsKICAgICBib29sIG1fd2Fp
dGluZ0ZvcldvcmtlckNvbnRleHRQcm9jZXNzQ29ubmVjdGlvbiB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlciB7IGZhbHNlIH07CiAg
ICAgU3RyaW5nIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudDsKICAgICBPcHRpb25hbDxXZWJQcmVm
ZXJlbmNlc1N0b3JlPiBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlczsKICAgICBPcHRpb25hbDxV
c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyPiBtX3VzZXJDb250ZW50Q29udHJvbGxlcklE
Rm9yU2VydmljZVdvcmtlcjsKQEAgLTY2MSw3ICs2MzUsNiBAQCBwcml2YXRlOgogICAgIHN0ZDo6
dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+IG1fYXV0b21hdGlvbkNsaWVudDsKICAg
ICBVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4gbV9kb3dubG9hZENsaWVudDsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4gbV9oaXN0b3J5
Q2xpZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiAKICAgICBSZWZQdHI8V2ViQXV0
b21hdGlvblNlc3Npb24+IG1fYXV0b21hdGlvblNlc3Npb247CiAKQEAgLTY5Myw4ICs2NjYsNiBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9tZW1vcnlTYW1wbGVyRW5hYmxlZCB7IGZhbHNlIH07CiAg
ICAgZG91YmxlIG1fbWVtb3J5U2FtcGxlckludGVydmFsIHsgMTQwMC4wIH07CiAKLSAgICBSZWZQ
dHI8V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmU7Ci0KICAgICB0
eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIFJlZlB0cjxXZWJDb250ZXh0U3VwcGxlbWVudD4s
IFB0ckhhc2g8Y29uc3QgY2hhcio+PiBXZWJDb250ZXh0U3VwcGxlbWVudE1hcDsKICAgICBXZWJD
b250ZXh0U3VwcGxlbWVudE1hcCBtX3N1cHBsZW1lbnRzOwogCkBAIC03MjksOCArNzAwLDYgQEAg
cHJpdmF0ZToKIAogICAgIGJvb2wgbV9wcm9jZXNzVGVybWluYXRpb25FbmFibGVkIHsgdHJ1ZSB9
OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1By
b2Nlc3M7Ci0KICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8RGljdGlvbmFyeUNhbGxiYWNr
Pj4gbV9kaWN0aW9uYXJ5Q2FsbGJhY2tzOwogCiAjaWYgVVNFKFNPVVApCkBAIC04MzYsNyArODA1
LDcgQEAgcHJpdmF0ZToKICNlbHNlCiAgICAgYm9vbCBtX2lzRGVsYXllZFdlYlByb2Nlc3NMYXVu
Y2hEaXNhYmxlZCB7IGZhbHNlIH07CiAjZW5kaWYKLSAgICBib29sIG1fdXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcyB7IGZhbHNlIH07CisgICAgc3RhdGljIGJvb2wgc191c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKICAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBtX2RvbWFpbnNX
aXRoVXNlckludGVyYWN0aW9uOwpAQCAtODQ3LDIwICs4MTYsNiBAQCBwcml2YXRlOgogI2VuZGlm
CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1By
b2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKQotewotICAgIGVuc3VyZU5l
dHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8
VD4obWVzc2FnZSksIDApOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1lc3NhZ2UpCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCA1YjNjNTRlNTg3ZmNj
NWI4OTM5NjhiNjE2OTFiZmI4OGNlY2YwNTc4Li5mZWQ3YjIyNjI5OGY2ODA4YmJlODNjMGZkZWVk
NWExYjI5YTI3MjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHAKQEAgLTczNSw3ICs3MzUsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6Z2V0UGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb24odWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuLCBNZQogCiB2b2lk
IFdlYlByb2Nlc3NQcm94eTo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5
JiYgcmVwbHkpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdv
cmtQcm9jZXNzKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJl
cGx5KSk7CiB9CiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0
YVN0b3JlQ29jb2EubW0KaW5kZXggZmIzYjIxZmQ5MzYyOGEzNGFlM2Q0ZGVjZmQ0ZTc5N2NmNjUz
MWY2NS4uMTE3NjQwNmE4ZTJkZjM0NzBlNGVkNmM0YTQxYjgzMTg1ZTg5OTE5ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFT
dG9yZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0Nv
Y29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW1wb3J0
ICJDb29raWVTdG9yYWdlVXRpbHNDRi5oIgogI2ltcG9ydCAiRGVmYXVsdFdlYkJyb3dzZXJDaGVj
a3MuaCIKKyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIlNhbmRib3hV
dGlsaXRpZXMuaCIKICNpbXBvcnQgIlN0b3JhZ2VNYW5hZ2VyLmgiCiAjaW1wb3J0ICJXZWJGcmFt
ZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKQEAgLTQ0LDYgKzQ1LDcgQEAKICNpbXBvcnQgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4KICNpbXBv
cnQgPHd0Zi9VUkwuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9FbnRpdGxlbWVudHMuaD4KICNpbXBv
cnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CkBAIC01NTksNCArNTYxLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWluaXRpYWxpemVB
cHBCb3VuZERvbWFpbnMoKQogICAgIGluaXRpYWxpemVBcHBCb3VuZERvbWFpbnMoRm9yY2VSZWlu
aXRpYWxpemF0aW9uOjpZZXMpOwogfQogCitib29sIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQ
cm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYgZW50aXRsZW1lbnQp
Cit7CisgICAgcmV0dXJuIFdURjo6aGFzRW50aXRsZW1lbnQobmV0d29ya1Byb2Nlc3MoKS5jb25u
ZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwgZW50aXRsZW1lbnQudXRmOCgpLmRhdGEoKSk7Cit9
CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEv
V2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggYjlmYjg5NTkxNDg0YWQ2MTYxZWRhODUzNjhjNjI2
ZDkwYWRiZmQ4Zi4uNWU4ZjhiNmVlNDFmZjc1NjBkYmNmNjM1MTQ3MGJlZGViMmNmOTA2NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJTaG91bGRHcmFuZGZh
dGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5j
bHVkZSAiV2ViQmFja0ZvcndhcmRDYWNoZS5oIgorI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQ
cm94eS5oIgogI2luY2x1ZGUgIldlYktpdDJJbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiV2ViUGFn
ZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0NhY2hlLmgiCkBAIC03NSw2ICs3NiwxMCBA
QAogI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgiCiAjZW5kaWYKIAorI2lm
IFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkRlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLmgiCisj
ZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBib29sIGFsbG93c1dlYnNpdGVE
YXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnM7CkBAIC04MywxMyArODgsMjMgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjphbGxvd1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMoKQogICAgIGFs
bG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMgPSB0cnVlOwogfQogCi1zdGF0aWMg
SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBub25EZWZhdWx0RGF0
YVN0b3JlcygpCitzdGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9y
ZSo+JiBhbGxEYXRhU3RvcmVzKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1VJVGhyZWFkKCkp
OwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJz
aXRlRGF0YVN0b3JlKj4+IG1hcDsKICAgICByZXR1cm4gbWFwOwogfQogCisvLyBGSVhNRTogUmVw
bGFjZSB0aGlzIHdpdGggdGhlIGNvcnJlY3Qgd2Vic2l0ZSBkYXRhIHN0b3Jlcy4KK1ZlY3RvcjxX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVyc0Zy
b21BbGxTdG9yZXMoKQoreworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4g
YWxsUGFyYW1ldGVyczsKKyAgICBhbGxQYXJhbWV0ZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
YWxsRGF0YVN0b3JlcygpLnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBzdG9yZSA6IGFsbERhdGFT
dG9yZXMoKS52YWx1ZXMoKSkKKyAgICAgICAgYWxsUGFyYW1ldGVycy51bmNoZWNrZWRBcHBlbmQo
c3RvcmUtPnBhcmFtZXRlcnMoKSk7CisgICAgcmV0dXJuIGFsbFBhcmFtZXRlcnM7Cit9CisKIFJl
ZjxXZWJzaXRlRGF0YVN0b3JlPiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGVOb25QZXJzaXN0ZW50
KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpObyksIFBBTDo6U2Vz
c2lvbklEOjpnZW5lcmF0ZUVwaGVtZXJhbFNlc3Npb25JRCgpKSk7CkBAIC0xMTUsMTAgKzEzMCwx
MSBAQCBXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJzaXRlRGF0YVN0
b3JlQ29uZmlndXJhdGlvbj4mJiBjb25maWd1cgogI2VuZGlmCiB7CiAgICAgV1RGOjpzZXRQcm9j
ZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1heWJlUmVnaXN0ZXJXaXRoU2Vz
c2lvbklETWFwKCk7CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAgICAgcGxhdGZv
cm1Jbml0aWFsaXplKCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuYWRkU2Vzc2lvbigqdGhpcyk7CiB9CiAKIFdlYnNpdGVEYXRhU3RvcmU6
On5XZWJzaXRlRGF0YVN0b3JlKCkKQEAgLTEyOCwxNyArMTQ0LDEyIEBAIFdlYnNpdGVEYXRhU3Rv
cmU6On5XZWJzaXRlRGF0YVN0b3JlKCkKIAogICAgIHBsYXRmb3JtRGVzdHJveSgpOwogCi0gICAg
aWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsK
LSAgICAgICAgQVNTRVJUKG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9
PSB0aGlzKTsKLSAgICAgICAgbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9u
SUQpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFs
bFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICBuZXR3b3Jr
UHJvY2Vzcy0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAgICAgIH0KLSAgICB9Cisg
ICAgQVNTRVJUKGFsbERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOworICAg
IGFsbERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOworICAgIG5ldHdvcmtQcm9jZXNz
KCkucmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQot
ICAgICAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b25JZkNyZWF0ZWQoKSkKLSAgICAgICAgICAgIGdwdVByb2Nlc3NQcm94eS0+cmVtb3ZlU2Vz
c2lvbihtX3Nlc3Npb25JRCk7CisgICAgaWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94eSA9IEdQVVBy
b2Nlc3NQcm94eTo6c2luZ2xldG9uSWZDcmVhdGVkKCkpCisgICAgICAgIGdwdVByb2Nlc3NQcm94
eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAjZW5kaWYKIH0KIApAQCAtMTY5LDE3ICsx
ODAsMzIgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkK
ICAgICByZXR1cm4gISFnbG9iYWxEZWZhdWx0RGF0YVN0b3JlKCk7CiB9CiAKLXZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKQordm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKQoreworICAgIGF1dG8gcmVzdWx0
ID0gYWxsRGF0YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7CisgICAgQVNTRVJUX1VO
VVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKK30KKworV2Vic2l0ZURhdGFTdG9yZSog
V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklEKQogewotICAgIGlmIChtX3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gbm9uRGVmYXVs
dERhdGFTdG9yZXMoKS5hZGQobV9zZXNzaW9uSUQsIHRoaXMpOwotICAgICAgICBBU1NFUlRfVU5V
U0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgIHJldHVybiBhbGxEYXRhU3RvcmVz
KCkuZ2V0KHNlc3Npb25JRCk7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHkmIFdlYnNpdGVEYXRh
U3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpIHsK
KyAgICAgICAgaWYgKG1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCisgICAgICAgICAgICBtX25l
dHdvcmtQcm9jZXNzID0gJmRlZmF1bHREYXRhU3RvcmUoKS0+bmV0d29ya1Byb2Nlc3MoKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNz
UHJveHk6OmNyZWF0ZSgpOwogICAgIH0KKworICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsK
IH0KIAotV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZh
dWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK05ldHdv
cmtQcm9jZXNzUHJveHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkgPyBub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0cjsK
KyAgICByZXR1cm4gY29uc3RfY2FzdDxXZWJzaXRlRGF0YVN0b3JlJj4oKnRoaXMpLm5ldHdvcmtQ
cm9jZXNzKCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJQcm9jZXNzKFdl
YlByb2Nlc3NQcm94eSYgcHJvY2VzcykKQEAgLTE5NSwxMiArMjIxLDYgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjp1bnJlZ2lzdGVyUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiAg
ICAgbV9wcm9jZXNzZXMucmVtb3ZlKHByb2Nlc3MpOwogfQogCi1XZWJQcm9jZXNzUG9vbCogV2Vi
c2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpCi17
Ci0gICAgYXV0byBwb29scyA9IHByb2Nlc3NQb29scygxKTsKLSAgICByZXR1cm4gcG9vbHMuaXNF
bXB0eSgpID8gbnVsbHB0ciA6IHBvb2xzLmJlZ2luKCktPmdldCgpOwotfQotCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAo
bV9oYXNSZXNvbHZlZERpcmVjdG9yaWVzKQpAQCAtNDQyLDE1ICs0NjIsMTQgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiBkYXRhVHlwZXMsIE8KICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1
dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJz
aXN0ZW50KCkpOwogICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0Fj
Y2Vzc1R5cGU6Ok5vbmUpIHsKICAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNj
ZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xz
KCkgOiBwcm9jZXNzUG9vbHMoKTsKKyAgICAgICAgLy8gRklYTUU6IEl0IG1pZ2h0IG5vdCBiZSBj
b3JyZWN0IHRvIGl0ZXJhdGUgdGhlIHBvb2xzIGhlcmUuCiAgICAgICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0Fj
Y2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxh
dW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAg
ICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOworICAgICAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CkBAIC00NTgsNyArNDc3LDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5mZXRjaFdlYnNpdGVEYXRhKG1fc2Vzc2lvbklE
LCBkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bv
b2xdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CisgICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cygpLmZldGNoV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRpb25z
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0oV2Vic2l0ZURhdGEgd2Vic2l0ZURh
dGEpIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdD
YWxsYmFjayhXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
fQpAQCAtNzI2LDE1ICs3NDUsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRh
KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICAgICBhdXRv
IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5
cGVGb3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CiAgICAgaWYgKG5l
dHdvcmtQcm9jZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkgewogICAg
ICAgICBhdXRvIHBvb2xzID0gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09IFByb2Nlc3NBY2Nl
c3NUeXBlOjpMYXVuY2ggPyBlbnN1cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nlc3NQb29scygpOwor
ICAgICAgICAvLyBGSVhNRTogSXQgbWlnaHQgbm90IGJlIGNvcnJlY3QgdG8gaXRlcmF0ZSBwb29s
cyBoZXJlLgogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKICAgICAg
ICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBj
YXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBp
ZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9j
ZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAgICAgICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcygp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nl
c3NUeXBlOjpOb25lOgpAQCAtNzQyLDcgKzc2MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1l
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVu
ZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KS0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5j
ZSwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKKyAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9k
aWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAg
ICAgICAgICAgfSk7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTg5
MywxNCArOTExLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURh
dGFUeXBlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSkgewogICAgICAgICBpZiAoIWRpZE5vdGlm
eU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSkgewotICAgICAgICAgICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwot
ICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25J
RCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxs
YmFjaygpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmRlbGV0ZVdlYnNpdGVEYXRh
KG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdD
YWxsYmFjaygpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYWxsYmFj
a0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwpAQCAtOTk0LDEyICsxMDA3LDEwIEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUp
IHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgot
ICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAg
cHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOworICAgICAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAg
IGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CkBAIC0xMDIxLDcgKzEwMzIsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4g
ZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFj
a0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhtX3Nlc3Np
b25JRCwgZGF0YVR5cGVzLCBvcmlnaW5zLCBjb29raWVIb3N0TmFtZXMsIEhTVFNDYWNoZUhvc3RO
YW1lcywgcmVnaXN0cmFibGVEb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9v
bF0geworICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YUZvck9y
aWdpbnMobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBI
U1RTQ2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRv
ciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJl
bW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTEx
ODUsOCArMTE5Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0Vu
dHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50LCBDb21wbGV0CiAKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4
U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50cnlDb3VudCwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQ
cnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTExOTUsOCArMTIwNSw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRh
cmdldENvdW50LCBDb21wbGV0aW9uCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rvd25U
byhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNEb3du
VG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNl
Y29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTIwNSw4ICsxMjE0LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFu
ZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjwKIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0
R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0
d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMTUsMjAgKzEyMjMsMTMgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92
YWwoU2Vjb25kcyBzZWNvbmRzLAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nl
c3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFS
ZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGltZUJl
dHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAgICAgCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgICAgICBwcm9jZXNzLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25J
RCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kdW1wUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xMjQwLDEyICsxMjQxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZh
bGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2kKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ByZXZhbGVudFJlc291cmNl
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjU3LDEyICsxMjUzLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc0dy
YW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNHcmFuZGZhdGhlcmVkKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTEyNzYsOCArMTI2Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJl
c291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjkxLDEwICsxMjgxLDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9k
ZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGkKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdN
b2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzVmVyeVByZXZhbGVu
dCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzA2LDEyICsxMjkzLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29t
cGxldGlvbkhhbmRsZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJv
Y2Vzcy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNW
ZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzMjUsMTAg
KzEzMDcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZQogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRWZXJ5
UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzM3LDggKzEzMTYsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0
YVJlY29yZHNSZW1vdmFsKGJvb2wgdgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9j
ZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCku
c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNz
aW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1
YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzUyLDIyICsxMzMwLDE0IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYg
c3ViRnJhbWVVUkwsIGNvCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3MtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJM
IH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNv
bnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
ICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29u
c3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM4MSwyMyArMTM1MSwx
NCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21h
aW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VV
UkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRl
cihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0
ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRv
cEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJs
UmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xNDExLDEwICsxMzcyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwKIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
UmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RU
byhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVS
TCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNv
bnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE0MjYsMTIgKzEzODQsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVz
b3VyY2VVUgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJj
ZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0s
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwmIHVybFJlZGly
ZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTQ0MywxMiArMTM5Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9w
RnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8g
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkws
IGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NjAsMjUgKzE0MDgsMTQgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZy
YW1lVVJMLCBjb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVV
UkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0
aW5nVG8oY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJMJiB1cmxSZWRpcmVj
dGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vz
cy0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFu
ZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0
aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJl
Y3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8g
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0OTAsNDYgKzE0MjcsMjcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclByZXZhbGVudFJl
c291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVz
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMobV9z
ZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nl
c3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25JRCwg
W10geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdWJtaXRUZWxlbWV0cnkobV9z
ZXNzaW9uSUQsIFtdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVD
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBTaG91bGRH
cmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9j
ZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCBtb2Rp
ZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVDbGVhcklu
TWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgc2hvdWxkR3Jh
bmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGly
ZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNTYxLDM1ICsxNDc5LDI0
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFT
dW1tYXJ5KENvbXBsZXRpb25IYW5kbGVyPHZvCiAKICAgICBSZWZQdHI8Q2FsbGJhY2tBZ2dyZWdh
dG9yPiBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBhZG9wdFJlZihuZXcgQ2FsbGJhY2tBZ2dyZWdhdG9y
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIHByb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAg
ICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKS5nZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3IsIHByb2Nlc3NQb29sXShWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5hZGRSZXN1bHQoV1RGTW92ZShkYXRhKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgfSk7Ci0gICAgfQorICAgIC8vIEZJWE1FOiBjYWxsIHNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YUltbWVkaWF0ZWx5IGhlcmUuCisgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRh
PiYmIGRhdGEpIHsKKyAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRSZXN1bHQoV1RGTW92
ZShkYXRhKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVD
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hv
dWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7
IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ29va2llQmxvY2tp
bmdVcGRhdGUobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ29va2llQmxvY2tpbmdV
cGRhdGUobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNz
aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE1
OTgsMjQgKzE1MDUsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZVN0YXRpc3Rp
Y3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmQKICAgICAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlU3RhdGlz
dGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2No
ZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lvbklELCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN0YXRp
c3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgcHJvY2Vzcy0+c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lv
bklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjI3LDIyICsxNTIzLDE0
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1cmwsIFNl
Y29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldExhc3RTZWVu
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBzZWNvbmRz
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kb21haW5JREV4aXN0c0luRGF0YWJhc2Uo
bV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmRv
bWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRp
c3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwxLCBj
b25zdCBVUkwmIHRvcEZyYW1lVXJsMiwgU2Vjb25kcyBsYXN0U2VlbiwgYm9vbCBoYWRVc2VySW50
ZXJhY3Rpb24sIFNlY29uZHMgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc0dyYW5k
ZmF0aGVyZWQsIGJvb2wgaXNQcmV2YWxlbnQsIGJvb2wgaXNWZXJ5UHJldmFsZW50LCB1bnNpZ25l
ZCBkYXRhUmVjb3Jkc1JlbW92ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE2NTQsMTAgKzE1NDIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiB0b3BG
cgogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPm1lcmdl
U3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDEgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4sIGhh
ZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhl
cmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0
b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIg
fSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
biwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVj
b3Jkc1JlbW92ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1
cmwsIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2NjksMTggKzE1NTQsMTQgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwm
IHVybCwgYm9vbCBoYWQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1Nj
aGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVs
ZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElz
UnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2ODgsOCArMTU2OSw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxlCiAgICAgdXNlRXhwbGljaXRJVFBTdGF0ZSgpOwogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9u
SUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1f
c2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJ
ZGVudGlmaWVyIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYm
IGRvbWFpbnMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcwMCw3ICsxNTgwLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJv
eHlJZGVudGlmaWVyIHBhZ2VJRCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdlYlBh
Z2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxs
U3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1f
c2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIApAQCAtMTcwOCw4
ICsxNTg4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVy
YWN0aW9uKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkgKIHsKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFRp
bWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTcyMywxMCArMTYwMiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlckludGVy
YWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkCiAgICAgCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmxvZ1VzZXJJbnRlcmFj
dGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5sb2dV
c2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTczOCwxMyArMTYxNCw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVS
TCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgICAgIHByb2Nlc3MtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRp
b25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0hhZFVzZXJJbnRlcmFj
dGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omlz
UmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25zdCBV
UkwmIHRvcFVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE3NTYsMTMgKzE2MjYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVs
YXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25zdAogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlbGF0aW9uc2hp
cE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3NzYsMTAgKzE2
NDAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclVzZXJJbnRlcmFj
dGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRH
cmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc5MywxMCArMTY1
NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwm
IHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MDUsMTAg
KzE2NjMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wg
dmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJgogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0YWJhc2UobV9z
ZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRD
cm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGZyb21V
UkwsIGNvbnN0IFVSTCYgdG9VUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE4MTcsNjIgKzE2NzIsMzggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwm
IGYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRDcm9zc1NpdGVMb2FkV2l0
aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9VUkwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0
Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJl
c2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklE
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGluY2x1ZGVIdHRw
T25seUNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVs
ZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVz
dGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5o
YXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5nKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0lzb2xhdGVk
U2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGREb3duZ3Jh
ZGVSZWZlcnJlckZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZERvd25ncmFkZVJl
ZmVycmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVz
dGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgIVBMQVRG
T1JNKENPQ09BKQpAQCAtMTkwMywxMCArMTczNCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2ll
CiAgICAgICAgICAgICB3ZWJQcm9jZXNzLnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUo
YmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0KIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1f
c2Vzc2lvbklELCBibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSht
X3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRF
bmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkxNCwxMCAr
MTc0Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlCiAgICAgYXV0byBmbGFnID0gZW5hYmxl
ZCA/IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZZXMgOiBXZWJD
b3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87CiAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxk
RW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxh
ZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURh
dGFSZW1vdmFsTW9kZUZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTI1LDIwICsxNzUwLDE0IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgYXV0
byBtb2RlID0gZW5hYmxlZCA/IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlOjpBbGxCdXRDb29raWVzIDogV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGU6Ok5vbmU7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0Rmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEZp
cnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgbW9k
ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0
aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRvU2FtZVNp
dGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RD
TkFNRURvbWFpbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmaXJzdFBhcnR5VVJMLCBjb25zdCBVUkwm
IGNuYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xOTUwLDggKzE3NjksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdAogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LnNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJz
dFBhcnR5VVJMLmhvc3QoKS50b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwg
Zmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVE
b21haW5Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NjMsOCArMTc4MSw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURv
bWFpbkZvclRlc3RpbmcoCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bv
b2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVz
dGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhp
cmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
I2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKQEAgLTE5NzMsOCAr
MTc5MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2
YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xP
QURfU1RBVElTVElDUykKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50
UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNv
dXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShzZWNvbmRzKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwpAQCAtMTk4NiwyMiArMTgwMiwxMiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2Fj
aGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoQ29tcGxldGlvbkhhbmRsZQogI2lmIEVO
QUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q2FjaGVNYXhBZ2VD
YXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDYWNoZU1heEFnZUNhcEZv
clByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRpZgogfQogCi1ib29sIFdl
YnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJiBw
cm9jZXNzUG9vbCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2xEYXRhU3RvcmUg
PSBwcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCkpCi0gICAgICAgIHJldHVybiBwcm9jZXNz
UG9vbERhdGFTdG9yZSA9PSB0aGlzOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogSGFzaFNldDxS
ZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6
ZV90IGxpbWl0KSBjb25zdAogewogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4g
cHJvY2Vzc1Bvb2xzOwpAQCAtMjAxNiw5ICsxODIyLDYgQEAgSGFzaFNldDxSZWZQdHI8V2ViUHJv
Y2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBj
b24KICAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBDaGVjayBp
ZiB3ZSdyZSBvbmUgb2YgdGhlIGxlZ2FjeSBkYXRhIHN0b3Jlcy4KICAgICAgICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICAgICAgaWYgKCFpc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbCgqcHJvY2Vzc1Bvb2wpKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCiAgICAgICAgICAgICBwcm9jZXNzUG9vbHMuYWRkKHBy
b2Nlc3NQb29sKTsKICAgICAgICAgICAgIGlmIChwcm9jZXNzUG9vbHMuc2l6ZSgpID09IGxpbWl0
KQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjEzNiwxNyArMTkzOSwxNSBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5h
YmxlZCkKICAgICAgICAgCiAgICAgICAgIHJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7
CiAgICAgICAgIAotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVk
KG1fc2Vzc2lvbklELCB0cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1f
c2Vzc2lvbklELCB0cnVlKSwgMCk7CisgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkKICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNz
ZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZCh0cnVlKSwgbV9zZXNzaW9uSUQpOwotICAgICAgICB9CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNz
aW9uSUQsIGZhbHNlKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQs
IGZhbHNlKSwgMCk7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQogICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihNZXNz
YWdlczo6V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZmFsc2Up
LCBtX3Nlc3Npb25JRCk7Ci0gICAgfQogCiAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZCA9IGZhbHNlOwogI2Vsc2UKQEAgLTIxNTgsOCArMTk1OSw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKEZ1bmN0
aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKGNhbGxiYWNr
KSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQo
dHJ1ZSkpOworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpLCAw
KTsKICAgICB9CiAgICAgCiAgICAgbV9zdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayk7CkBAIC0yMTc4LDggKzE5NzgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGVkLCBDb21wbGV0
aQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKG1fc2Vz
c2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShtX3Nlc3Npb25JRCwg
ZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BB
UkFNKGVuYWJsZWQpOwogICAgIFVOVVNFRF9QQVJBTShjb21wbGV0aW9uSGFuZGxlcik7CkBAIC0y
MTk0LDIwICsxOTkzLDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRXBoZW1lcmFsKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5pc1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgorICAg
IG5ldHdvcmtQcm9jZXNzKCkuaXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vz
c2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisjZWxzZQogICAgIGNvbXBsZXRp
b25IYW5kbGVyKGZhbHNlKTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShib29sIGVuYWJsZWQpCiB7Ci0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoZW5h
YmxlZCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01v
ZGUoZW5hYmxlZCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpA
QCAtMjIyOSwyOSArMjAyMyw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzSW5XZWJQcm9jZXNzZXMoQ29tcGxldGlvbkhhbmRsCiB9CiAjZW5kaWYK
IAotVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gV2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tp
ZXMoKSBjb25zdAotewotICAgIHJldHVybiBjb3B5VG9WZWN0b3IobV9wZW5kaW5nQ29va2llcyk7
Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJD
b3JlOjpDb29raWUmIGNvb2tpZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZUlmKFsm
Y29va2llXShhdXRvJiBwZW5kaW5nQ29va2llKSB7Ci0gICAgICAgIHJldHVybiBwZW5kaW5nQ29v
a2llLmlzS2V5RXF1YWwoY29va2llKTsKLSAgICB9KTsKLSAgICBtX3BlbmRpbmdDb29raWVzLmFk
ZChjb29raWUpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29r
aWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2ll
cy5yZW1vdmUoY29va2llKTsKLX0KLSAgICAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQ
ZW5kaW5nQ29va2llcygpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5jbGVhcigpOwotfQotCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYg
ZnVuY3Rpb24pCiB7CiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goV1RGTW92ZShmdW5jdGlvbikpOwpA
QCAtMjI3NSw4ICsyMDQ2LDYgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURh
dGFTdG9yZTo6cGFyYW1ldGVycygpCiAKICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2Fy
eSgpOwogCi0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBlbmRpbmdDb29raWVzKCk7
Ci0KICAgICBhdXRvIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX2NvbmZpZ3Vy
YXRpb24tPnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUhhbmRsZTsKICAg
ICBpZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAtMjM4
MSw3ICsyMTUwLDE0IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3Rv
cmU6OnBhcmFtZXRlcnMoKQogICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZWQgPSBtX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkOwogI2VuZGlmCiAgICAgcGxhdGZvcm1TZXROZXR3b3JrUGFyYW1l
dGVycyhwYXJhbWV0ZXJzKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2lu
Z1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24o
KTsKKyNlbmRpZgogCisjaWYgVVNFKFNPVVApCisgICAgbmV0d29ya1Byb2Nlc3MoKS5jb29raWVN
YW5hZ2VyKCkuZ2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklEKCksIHBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwg
cGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3Jh
Z2VUeXBlKTsKKyNlbmRpZgorICAgIAogICAgIHJldHVybiBwYXJhbWV0ZXJzOwogfQogCkBAIC0y
NDExLDEwICsyMTg3LDYgQEAgQVBJOjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6
OmNvb2tpZVN0b3JlKCkKICAgICByZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAKLXZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQotewotfQotCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0
b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIWlzUGVyc2lzdGVudCgpKSB7CkBAIC0yNDIyLDIz
ICsyMTk0LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWls
cyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VECiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpLmdldExv
Y2FsU3RvcmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgewotICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7Ci0gICAgICAgIH0pOwotICAgICAgICAv
LyBGSVhNRTogU3VwcG9ydCBmZXRjaGluZyBmcm9tIG11bHRpcGxlIHBvb2xzLgotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgQVNTRVJUKCFjb21wbGV0aW9uSGFuZGxlcik7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMpIHsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7CisgICAgfSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YShDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBwcm9jZXNzLT5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UXVvdGEobV9z
ZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0o
Q09DT0EpCkBAIC0yNDY0LDcgKzIyMjgsMTIgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpodHRw
M0VuYWJsZWQoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZgorCitib29sIFdlYnNp
dGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0
IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmIC8vICFQTEFURk9STShD
T0NPQSkKIAogI2lmICFVU0UoR0xJQikKIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQpAQCAtMjQ3NiwzNCArMjI0
NSwyMSBAQCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNo
U2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBC
b3VuZFNlc3Npb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNBcHBCb3Vu
ZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9u
SUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpjbGVhckFwcEJvdW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQs
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbmFtZU9yaWdp
bkluV2Vic2l0ZURhdGEoVVJMJiYgb2xkTmFtZSwgVVJMJiYgbmV3TmFtZSwgT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRo
aXMpOwotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbmFtZU9yaWdpbkluV2Vic2l0ZURh
dGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmFk
ZFNlc3Npb24oKnRoaXMpOworICAgIG5ldHdvcmtQcm9jZXNzKCkucmVuYW1lT3JpZ2luSW5XZWJz
aXRlRGF0YShtX3Nlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgZGF0YVR5cGVzLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0yNTI2LDcg
KzIyODIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNU
b0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZQogCiAgICAgcHJvcGFnYXRlQXBwQm91
bmREb21haW5zKGdsb2JhbERlZmF1bHREYXRhU3RvcmUoKS5nZXQoKSwgKmFwcEJvdW5kRG9tYWlu
cyk7CiAKLSAgICBmb3IgKGF1dG8qIHN0b3JlIDogbm9uRGVmYXVsdERhdGFTdG9yZXMoKS52YWx1
ZXMoKSkKKyAgICBmb3IgKGF1dG8qIHN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQog
ICAgICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoc3RvcmUsICphcHBCb3VuZERvbWFpbnMp
OwogfQogCkBAIC0yNTM0LDEwICsyMjkwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRB
cHBCb3VuZERvbWFpbnNGb3JJVFAoY29uc3QgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWIKIHsK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lv
bklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldEFwcEJvdW5kRG9tYWluc0ZvclJlc291cmNlTG9hZFN0YXRpc3RpY3Mo
bV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAjZW5k
aWYKIApAQCAtMjU0NSwxNiArMjI5OCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVwZGF0
ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IFN0cmluZyYgYnVuZAogewog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVu
dGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJv
Y2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlmaWVyKFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAppbmRleCAyZWNmNGQ5ZTI1YzM0NGY0YWJi
MTljMWQxNjMxMDU5Nzk2M2ZmMmM2Li5mZThhNTI4NWY0MTRmODEyNDhhN2ZjZmQ0OWNlYzZkZDRl
YmJmOGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC03NSw2ICs3NSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7CiBjbGFzcyBTZWNLZXlQcm94eVN0b3JlOwog
Y2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5
OwogY2xhc3MgU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBXZWJQYWdlUHJveHk7
CiBjbGFzcyBXZWJQcm9jZXNzUG9vbDsKQEAgLTEwOCw3ICsxMDksMTAgQEAgcHVibGljOgogICAg
IFdlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYmLCBQ
QUw6OlNlc3Npb25JRCk7CiAgICAgfldlYnNpdGVEYXRhU3RvcmUoKTsKIAotICAgIHN0YXRpYyBX
ZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQo
UEFMOjpTZXNzaW9uSUQpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNz
KCkgY29uc3Q7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MoKTsKKwor
ICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25J
RChQQUw6OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlzUGVyc2lzdGVudCgpIGNvbnN0IHsgcmV0
dXJuICFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9CiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTIyOSwxNSArMjMzLDgg
QEAgcHVibGljOgogCiAgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UmIGRldmljZUlkSGFzaFNh
bHRTdG9yYWdlKCkgeyByZXR1cm4gbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5nZXQoKTsgfQog
Ci0gICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlv
bnMoKTsKLSAgICBib29sIGlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJikg
Y29uc3Q7Ci0KICAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBwYXJhbWV0ZXJzKCk7Ci0K
LSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5kaW5nQ29va2llcygpIGNvbnN0OwotICAg
IHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lk
IHJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCBj
bGVhclBlbmRpbmdDb29raWVzKCk7CisgICAgc3RhdGljIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycz4gcGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKTsKIAogICAgIHZvaWQgZGlzcGF0
Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAKQEAgLTI2Miw4ICsyNTksNiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uKFdlYkNv
cmU6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24mJik7CiAjZW5kaWYKIAotICAg
IHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKLQogICAgIGNvbnN0IFdlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKCkgeyByZXR1cm4gbV9jb25maWd1cmF0
aW9uLmdldCgpOyB9CiAKICAgICBXZWJzaXRlRGF0YVN0b3JlQ2xpZW50JiBjbGllbnQoKSB7IHJl
dHVybiBtX2NsaWVudC5nZXQoKTsgfQpAQCAtMjczLDYgKzI2OCw4IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgcmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiwgVVJMJiYsIE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAgYm9v
bCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKTsK
KwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgV2ViRGV2aWNlT3JpZW50YXRp
b25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyJiBkZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFj
Y2Vzc0NvbnRyb2xsZXIoKSB7IHJldHVybiBtX2RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNj
ZXNzQ29udHJvbGxlcjsgfQogI2VuZGlmCkBAIC0zNDUsNyArMzQyLDcgQEAgcHJpdmF0ZToKICAg
ICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9y
YWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKTsKICAgICBzdGF0aWMgdm9pZCBy
ZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBj
b25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mKTsKIAotICAgIHZvaWQg
bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICB2b2lkIHJlZ2lzdGVyV2l0aFNl
c3Npb25JRE1hcCgpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgc3RhdGljIE9wdGlvbmFs
PEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+PiBhcHBCb3VuZERvbWFpbnNJZklu
aXRpYWxpemVkKCk7CkBAIC0zODMsOCArMzgwLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGVy
c2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCB7IHRydWUgfTsKICNlbmRpZgogCi0gICAg
SGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1fcGVuZGluZ0Nvb2tpZXM7Ci0gICAgCiAgICAgV2Vh
a0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3NlczsKIAogICAgIGJvb2wgbV9pc0l0
cFN0YXRlRXhwbGljaXRseVNldCB7IGZhbHNlIH07CkBAIC00MDUsNiArNDAwLDcgQEAgcHJpdmF0
ZToKICAgICBVbmlxdWVSZWY8V2Vic2l0ZURhdGFTdG9yZUNsaWVudD4gbV9jbGllbnQ7CiAKICAg
ICBSZWZQdHI8QVBJOjpIVFRQQ29va2llU3RvcmU+IG1fY29va2llU3RvcmU7CisgICAgUmVmUHRy
PE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAKICNpZiBIQVZFKEFQUF9T
U08pCiAgICAgVW5pcXVlUmVmPFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yPiBtX3NvQXV0aG9y
aXphdGlvbkNvb3JkaW5hdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcAppbmRl
eCAxMmY5Y2Q4MTliNmRjY2E4YWM1MDkyYTMwZGQ5M2M1M2I4ZWU5MzQyLi41YmEzOTAwZDJkYWZm
MDU2YWJkMGNkZjA1N2FlMzI4NTRlYmZlY2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVT
b3VwLmNwcApAQCAtMzksOCArMzksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3Jt
U2V0TmV0d29ya1BhcmFtZXRlcnMoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmCiAgICAgYXV0
byYgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnM7CiAgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50
aWFsU3RvcmFnZUVuYWJsZWQgPSBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQ7
CiAKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3Jh
Z2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9zZXNzaW9uSUQs
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworICAg
IFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5nZXRDb29raWVQZXJz
aXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tp
ZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlVHlwZSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVy
c2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChib29sIGVuYWJsZWQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcAppbmRl
eCAwYTg0YTc1OTBkOWE5ODViZmM5OTY4NGE0ODk1MTM3NGU1YjI5NDI5Li4yN2YyM2VhMDY1ZGM3
NWNlNGE4MjcwYzU3NmVhMmFhNTVhYjBkYzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAg
dm9pZCBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1
bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGwKICAgICAgICAgaWYgKCFkYXRhU3RvcmUpIHsKICAgICAg
ICAgICAgIC8vIFByZXdhcm1lZCBwcm9jZXNzZXMgZG9uJ3QgaGF2ZSBhIFdlYnNpdGVEYXRhU3Rv
cmUgeWV0LCBzbyB1c2UgdGhlIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSBmcm9tIHRoZSBXZWJQ
cm9jZXNzUG9vbC4KICAgICAgICAgICAgIC8vIFRoZSBwcm9jZXNzIHdvbid0IGJlIHVzZWQgaWYg
Y3VycmVudCBXZWJzaXRlRGF0YVN0b3JlIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBXZWJQcm9jZXNz
UG9vbCBwcmltYXJ5IG9uZS4KLSAgICAgICAgICAgIGRhdGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wt
PndlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICAgICAgICAgIGRhdGFTdG9yZSA9IFdlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKICAgICAgICAgfQogCiAgICAgICAgIEFT
U0VSVChkYXRhU3RvcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291
cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKaW5kZXggOWY3YmUzYzk0MWI2Y2Qw
YTFiOTRjYjEzNjA5OGYzYTA0MWNlZmY5OS4uMDg5MjhmY2QzMTZkODhmOWQ1MTUwMGVjNjg0YWQx
YjY0YWY4YTNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJD
b29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9z
b3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAKKyNp
bmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdl
ck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKIApAQCAtMzQsNyArMzUs
NyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRD
b29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0
cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUgc3RvcmFn
ZVR5cGUpCiB7CiAgICAgbV9jb29raWVQZXJzaXN0ZW50U3RvcmFnZU1hcC5zZXQoc2Vzc2lvbklE
LCBzdGQ6Om1ha2VfcGFpcihzdG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpKTsKLSAgICBwcm9jZXNz
UG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBzdG9yYWdlUGF0aCwgc3Rv
cmFnZVR5cGUpKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNz
aW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSksIDApOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3Jh
Z2VUeXBlJiBzdG9yYWdlVHlwZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAppbmRleCBiZmJiZjk2NjRlNDgzNTMwOTcw
OTcxMWRmZDZjMTM0MTU3MzJiZGFjLi4wNzkzZWQ1MTM5MTUyOGQ5YjRiOWZkYjBmNGFkM2M4OTYw
ZmRhNTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nl
c3NQb29sU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9j
ZXNzUG9vbFNvdXAuY3BwCkBAIC0zNywzMCArMzcsMjQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewotICAgIE5ldHdv
cmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMgPSBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVyczsKLSAgICBzdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2ll
UGVyc2lzdGVudFN0b3JhZ2UoZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgZGVm
YXVsdFNlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgZGVmYXVs
dFNlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7Ci0gICAgaWYg
KG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnBl
cnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBl
cnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoKTsKKyAgICAvLyBGSVhNRTogbV9pbml0
aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeSBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVE
YXRhU3RvcmUuCisgICAgLy8gRklYTUU6IG1faWdub3JlVExTRXJyb3JzIHNob3VsZCBiZSBtb3Zl
ZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZSBvciByZW1vdmVkLgorICAgIC8vIEZJWE1FOiBtX25l
dHdvcmtQcm94eVNldHRpbmdzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9y
ZS4KIAotICAgIHBhcmFtZXRlcnMuY29va2llQWNjZXB0UG9saWN5ID0gbV9pbml0aWFsSFRUUENv
b2tpZUFjY2VwdFBvbGljeTsKLSAgICBwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyA9IG1faWdu
b3JlVExTRXJyb3JzOwogICAgIHBhcmFtZXRlcnMubGFuZ3VhZ2VzID0gdXNlclByZWZlcnJlZExh
bmd1YWdlcygpOwotICAgIHBhcmFtZXRlcnMucHJveHlTZXR0aW5ncyA9IG1fbmV0d29ya1Byb3h5
U2V0dGluZ3M7CiAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IHRydWU7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9y
ZVRMU0Vycm9ycykKIHsKICAgICBtX2lnbm9yZVRMU0Vycm9ycyA9IGlnbm9yZVRMU0Vycm9yczsK
LSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRM
U0Vycm9ycyksIDApOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRJZ25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNF
cnJvcnMpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0TmV0d29ya1Byb3h5U2V0
dGluZ3MoY29uc3QgV2ViQ29yZTo6U291cE5ldHdvcmtQcm94eVNldHRpbmdzJiBzZXR0aW5ncykK
IHsKICAgICBtX25ldHdvcmtQcm94eVNldHRpbmdzID0gc2V0dGluZ3M7Ci0gICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRp
bmdzKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fbmV0d29ya1By
b3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDI4NTUxZmYzZjAxZDJlOTIxZDk4YzEyYjAxYjg2NWI5ZDRi
ZDZmM2EuLjllNTE2NmU3YThlZTNmZjkwZGM2YTkzZTExNGQ3NzU3ZWIxMmY5NzAgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBA
QAorMjAyMC0wOS0wMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgorCisgICAgICAgIE1vdmUgTmV0d29ya1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgZnJvbSBXZWJQ
cm9jZXNzUG9vbCB0byBXZWJzaXRlRGF0YVN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYwNDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdv
cmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW06CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0luZGV4ZWREQkZpbGVOYW1lLm1tOgorICAgICAgICAocnVuVGVzdCk6CisgICAgICAgIChURVNU
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9j
ZXNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFz
aWMubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBD
b29raWVTdG9yZS5tbToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3
ZWJWaWV3OnJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFt
ZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlE
ZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0pOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVV
SURlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0pOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dCk6CisKIDIwMjAtMDgtMzEgIEpv
bmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFt3ZWJraXRjb3Jl
cHldIFJlZ2lzdGVyIGFub3RoZXIgcGFja2FnZSBpbiB0aGUgV2ViS2l0IHJlcG9zaXRvcnkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNz
Q3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCmluZGV4
IDk3Mzg5ZjAxZmYyZWU5OWI3ODNiMGI1MjEwODA3NGYxYTgxYjY5ODEuLjE1Zjg2YWVkM2Q2MzAy
YzFiNTM3NWUxMjdkNjA0MTJmNjA0OTAyZmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24u
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3ND
cmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbQpAQCAtMTQ2LDggKzE0Niw4IEBAIFRFU1QoV2Vi
S2l0LCBOZXR3b3JrUHJvY2Vzc1JlbGF1bmNoT25MYXVuY2hGYWlsdXJlKQogCiAgICAgLy8gQ29u
c3R1Y3RpbmcgYSBXZWJWaWV3IHN0YXJ0cyBhIG5ldHdvcmsgcHJvY2VzcyBzbyB0ZXJtaW5hdGUg
dGhpcyBvbmUuIFRoZSBwYWdlIGxvYWQgYmVsb3cgd2lsbCB0aGVuIHJlcXVlc3QgYSBuZXR3b3Jr
IHByb2Nlc3MgYW5kIHdlCiAgICAgLy8gbWFrZSB0aGlzIG5ldyBuZXR3b3JrIHByb2Nlc3MgbGF1
bmNoIGNyYXNoIG9uIHN0YXJ0dXAuCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CiAgICAgW3Byb2Nlc3NQb29sIF9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNo
RmFpbEZvclRlc3RpbmddOworICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdOwogCiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tNb25pdG9yV2ViQ29udGVudENy
YXNoTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CiAgICAgW3dlYlZpZXcgc2V0TmF2
aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCmluZGV4
IDExZjg3ZjgwMzRkMmIxYjU1ZDcyMGRlYjc2NWEzMTY4MjEyMGQ3NzMuLmE5OGJmMzgyNWJiMWVk
NmQ3NTljMDhkNDUzM2FkY2I3ZmYzOTVmZDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbQpAQCAtNDks
NyArNDksNyBAQCBzdGF0aWMgUmV0YWluUHRyPFdLU2NyaXB0TWVzc2FnZT4gbGFzdFNjcmlwdE1l
c3NhZ2U7CiAKIEBlbmQKIAotc3RhdGljIHZvaWQgcnVuVGVzdCgpCitzdGF0aWMgdm9pZCBydW5U
ZXN0KGJvb2wgb2xkRmlsZVNob3VsZEV4aXN0ID0gdHJ1ZSkKIHsKICAgICBhdXRvIGhhbmRsZXIg
PSBhZG9wdE5TKFtbSW5kZXhlZERCRmlsZU5hbWVNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0p
OwogICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0
aW9uIGFsbG9jXSBpbml0XSk7CkBAIC04Nyw3ICs4Nyw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3Qo
KQogICAgIE5TVVJMICpvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25E
aXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OiBAImZpbGVfXzAiXTsKICAg
ICBOU1VSTCAqbmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCA9IFtuZXdWZXJzaW9uRGlyZWN0
b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDogQCJmaWxlX18wIl07CiAgICAgTlNV
UkwgKm9sZFZlcnNpb25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTCA9IFtvbGRWZXJzaW9uT3Jp
Z2luRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDp1bnVzZWREYXRhYmFz
ZU5hbWVdOwotICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0g
ZmlsZUV4aXN0c0F0UGF0aDpvbGRWZXJzaW9uVW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwucGF0
aF0pOworICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmls
ZUV4aXN0c0F0UGF0aDpvbGRWZXJzaW9uVW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwucGF0aF0g
PT0gb2xkRmlsZVNob3VsZEV4aXN0KTsKICAgICAKICAgICAvLyBGb3IgZGF0YWJhc2UgdGhhdCBp
cyBvcGVuZWQgYWZ0ZXIgdXBncmFkZSwgaXRzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW4gdjEuCiAg
ICAgTlNVUkwgKm9sZFZlcnNpb25FeGlzdGluZ0RhdGFiYXNlRGlyZWN0b3J5VVJMID0gW29sZFZl
cnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OiBleGlz
dGluZ0RhdGFiYXNlTmFtZV07CkBAIC0xNTQsNyArMTU0LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRl
RGlyZWN0b3JpZXMoU3RyaW5nIHRlc3ROYW1lKQogVEVTVChJbmRleGVkREIsIEluZGV4ZWREQkZp
bGVOYW1lKQogewogICAgIGNyZWF0ZURpcmVjdG9yaWVzKCJub25lIik7Ci0gICAgcnVuVGVzdCgp
OworICAgIHJ1blRlc3QoZmFsc2UpOwogfQogCiBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCRmls
ZU5hbWVWMCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTmV0d29ya1Byb2Nlc3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL05ldHdvcmtQcm9jZXNzLm1tCmluZGV4IGU2MGY4ODAyNWQwOTM3ODlmNjk1NjBkOWI5MmIy
ODJmMDcxMzBhOGQuLjBlMjFmOTA5NTAwMTRmNmM0OTBiMGViOGU0NjFlYzRiYTg1MGJiODEgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1By
b2Nlc3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3
b3JrUHJvY2Vzcy5tbQpAQCAtMjgsNyArMjgsNyBAQAogI2ltcG9ydCAiSFRUUFNlcnZlci5oIgog
I2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAiVXRpbGl0aWVzLmgiCi0jaW1wb3J0
IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNp
dGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KQEAgLTM3LDE0ICszNywx
NCBAQCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NFbnRpdGxlbWVudHMpCiB7CiAgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpbW1tXS1dlYlZpZXdDb25m
aWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV1dKTsKICAgICBbd2ViVmlldyBzeW5j
aHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJzaW1wbGUiXTsKLSAgICBXS1Byb2Nlc3NQb29s
ICpwb29sID0gW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2w7Ci0gICAgYm9vbCBo
YXNFbnRpdGxlbWVudCA9IFtwb29sIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVz
dGluZzpAImNvbS5hcHBsZS5yb290bGVzcy5zdG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94
Il07CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlICpzdG9yZSA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRp
b25dLndlYnNpdGVEYXRhU3RvcmU7CisgICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9IFtzdG9yZSBf
bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxl
c3Muc3RvcmFnZS5XZWJLaXROZXR3b3JraW5nU2FuZGJveCJdOwogI2lmIFBMQVRGT1JNKE1BQykg
JiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKICAgICBFWFBFQ1RfVFJVRShoYXNFbnRpdGxlbWVu
dCk7CiAjZWxzZQogICAgIEVYUEVDVF9GQUxTRShoYXNFbnRpdGxlbWVudCk7CiAjZW5kaWYKLSAg
ICBFWFBFQ1RfRkFMU0UoW3Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0
aW5nOkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7CisgICAgRVhQRUNUX0ZBTFNFKFtzdG9yZSBfbmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJd
KTsKIH0KIAogVEVTVChXZWJLaXQsIEhUVFBSZWZlcmVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLm1tCmluZGV4IDBlMTBjMzRlZWM4MmM2ZjY1OTJiYjdjNDI3NGQwZTQ1NWVhZjExZTguLjhj
MmJlMWJlOGI2Yjk2MDA3Y2EwNjk3NWU2OGQ4MjI3YzY3ZTU2MTAgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MubW0KQEAgLTE1NTgsMTAgKzE1NTgsOCBAQCBURVNUKFJlc291cmNlTG9hZFN0
YXRpc3RpY3MsIE1pZ3JhdGVEYXRhRnJvbU1pc3NpbmdUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0U2Ft
ZVNpdAogCiBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0RhdGFTdW1tYXJ5
V2l0aE5vUHJvY2Vzc1Bvb2wpCiB7CisgICAgTlNVUkwgKml0cFJvb3RVUkwgPSBbTlNVUkwgZmls
ZVVSTFdpdGhQYXRoOltOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0
aENvbXBvbmVudDpAIkNhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2xUZXN0Il0g
aXNEaXJlY3Rvcnk6WUVTXTsKICAgICBhdXRvIGRlZmF1bHRGaWxlTWFuYWdlciA9IFtOU0ZpbGVN
YW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKLSAgICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJh
dGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZp
Z3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07Ci0gICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tX
ZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNv
bmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKLSAgICBOU1VSTCAqaXRwUm9vdFVSTCA9IFtbZGF0
YVN0b3JlIF9jb25maWd1cmF0aW9uXSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeV07
CiAgICAgTlNVUkwgKmZpbGVVUkwgPSBbaXRwUm9vdFVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21w
b25lbnQ6QCJvYnNlcnZhdGlvbnMuZGIiXTsKICAgICBbZGVmYXVsdEZpbGVNYW5hZ2VyIHJlbW92
ZUl0ZW1BdFBhdGg6aXRwUm9vdFVSTC5wYXRoIGVycm9yOm5pbF07CiAgICAgRVhQRUNUX0ZBTFNF
KFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDppdHBSb290VVJMLnBhdGhdKTsK
QEAgLTE1NzIsNiArMTU3MCwxMCBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENhbkFj
Y2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2wpCiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1
bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOm5ld0ZpbGVVUkwucGF0aF0pOwogICAgIFtk
ZWZhdWx0RmlsZU1hbmFnZXIgY29weUl0ZW1BdFBhdGg6bmV3RmlsZVVSTC5wYXRoIHRvUGF0aDpm
aWxlVVJMLnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5h
Z2VyIGZpbGVFeGlzdHNBdFBhdGg6ZmlsZVVSTC5wYXRoXSk7CisKKyAgICBfV0tXZWJzaXRlRGF0
YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0
ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgZGF0YVN0b3Jl
Q29uZmlndXJhdGlvbi5fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IGl0cFJvb3RV
Ukw7CisgICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBf
aW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNl
XTsKICAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZRVNd
OwogCiAgICAgc3RhdGljIGJvb2wgZG9uZUZsYWcgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMu
bW0KaW5kZXggMzRhNGY1YzUzOGI5YjBlOWZjYjA1MDcyYjE3MDI4OGU5ZTRlOWY4Zi4uZjg1MzZl
MmQzOGU4MWMyYjhlNTBkMTYyNzU5N2Q5NWM3NzQ5OWYwNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMu
bW0KQEAgLTU1OCw3ICs1NTgsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBVc2VyQWdlbnRPdmVy
cmlkZSkKIAogICAgIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJh
dGlvbiBhbGxvY10gaW5pdF0pOwogCi0gICAgbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbU1dV
c2VyQWdlbnRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJN
ZXNzYWdlIGZyb20gd29ya2VyOiBCYXIgQ3VzdG9tIFVzZXJBZ2VudCJdKTsKKyAgICBtZXNzYWdl
SGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0
V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6IEZvbyBDdXN0b20gVXNl
ckFnZW50Il0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFk
ZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJzdyJdOwog
CiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdl
dCgpXSk7CkBAIC02MzMsOCArNjMzLDYgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgQ2FjaGVTdG9y
YWdlUmVzdG9yZUZyb21EaXNrKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7
CiAgICAgZG9uZSA9IGZhbHNlOwogCi0gICAgW1dLV2Vic2l0ZURhdGFTdG9yZSBfZGVsZXRlRGVm
YXVsdERhdGFTdG9yZUZvclRlc3RpbmddOwotCiAgICAgU2VydmljZVdvcmtlclRDUFNlcnZlciBz
ZXJ2ZXIoewogICAgICAgICB7ICJ0ZXh0L2h0bWwiLCBtYWluQ2FjaGVTdG9yYWdlQnl0ZXMgfQog
ICAgIH0sIHsKQEAgLTk4Miw2ICs5ODAsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNl
V29ya2VyUHJvY2Vzc0NyZWF0aW9uKQogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3Vy
YXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBh
bGxvY10gaW5pdF0pOwogICAgIHNldENvbmZpZ3VyYXRpb25JbmplY3RlZEJ1bmRsZVBhdGgoY29u
ZmlndXJhdGlvbi5nZXQoKSk7CisgICAgUmV0YWluUHRyPFdLUHJvY2Vzc1Bvb2w+IG9yaWdpbmFs
UHJvY2Vzc1Bvb2wgPSBjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sOwogCiAgICAgZG9u
ZSA9IGZhbHNlOwogCkBAIC0xMDM1LDcgKzEwMzQsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBT
ZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9uKQogICAgIGRvbmUgPSBmYWxzZTsKIAogICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IGxvYWRpbmcgdGhlIHNpbXBsZSBwYWdlIGRpZCBub3Qgc3RhcnQgdGhl
IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCi0gICAgRVhQRUNUX0VRKDB1LCB3ZWJWaWV3LmdldCgp
LmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwor
ICAgIEVYUEVDVF9FUSgxdSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29s
Ll9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKIAogICAgIHdlYlZpZXcgPSBhZG9wdE5TKFtb
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDAp
IGNvbmZpZ3VyYXRpb246bmV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIEVYUEVDVF9FUSgy
dSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl93ZWJQcm9jZXNzQ291
bnRJZ25vcmluZ1ByZXdhcm1lZCk7CkBAIC0xMDQzLDkgKzEwNDIsOCBAQCBURVNUKFNlcnZpY2VX
b3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9uKQogICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwogCi0gICAgLy8gTWFrZSBzdXJl
IHRoYXQgbG9hZGluZyB0aGlzIHBhZ2UgZGlkIHN0YXJ0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9j
ZXNzLgogICAgIEVYUEVDVF9FUSgxdSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nl
c3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKLQorICAgIEVYUEVDVF9FUSgxdSwg
b3JpZ2luYWxQcm9jZXNzUG9vbC5nZXQoKS5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CiAg
ICAgW1tjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVdIHJlbW92ZURhdGFPZlR5cGVzOltX
S1dlYnNpdGVEYXRhU3RvcmUgYWxsV2Vic2l0ZURhdGFUeXBlc10gbW9kaWZpZWRTaW5jZTpbTlNE
YXRlIGRpc3RhbnRQYXN0XSBjb21wbGV0aW9uSGFuZGxlcjpeKCkgewogICAgICAgICBkb25lID0g
dHJ1ZTsKICAgICB9XTsKQEAgLTE2MTgsMjEgKzE2MTYsMzUgQEAgc3RhdGljIHNpemVfdCBsYXVu
Y2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MsIGIKICAgICByZXR1cm4gd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29s
Ll93ZWJQcm9jZXNzQ291bnRJZ25vcmluZ1ByZXdhcm1lZDsKIH0KIAotVEVTVChTZXJ2aWNlV29y
a2VycywgT3V0T2ZBbmRJblByb2Nlc3NTZXJ2aWNlV29ya2VyKQorVEVTVChTZXJ2aWNlV29ya2Vy
cywgT3V0T2ZQcm9jZXNzU2VydmljZVdvcmtlcikKIHsKICAgICBib29sIHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOwogICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9
IHRydWU7CiAKICAgICBFWFBFQ1RfRVEoMXUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKCF1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykpOwor
fQorCitURVNUKFNlcnZpY2VXb3JrZXJzLCBJblByb2Nlc3NTZXJ2aWNlV29ya2VyKQoreworICAg
IGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CisgICAgYm9vbCBm
aXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKKwogICAgIEVYUEVDVF9FUSgydSwgbGF1bmNoU2Vy
dmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgIWZpcnN0
TG9hZEFib3V0QmxhbmspKTsKIH0KIAotVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0Qmxh
bmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaFNlcnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3Jr
ZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoT3V0T2ZQcm9jZXNzU2Vy
dmljZVdvcmtlcikKIHsKICAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mg
PSB0cnVlOwogICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CiAKICAgICBFWFBF
Q1RfRVEoMXUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKCF1c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzLCBmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RFU1QoU2VydmljZVdv
cmtlcnMsIExvYWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hJblByb2Nlc3NTZXJ2
aWNlV29ya2VyKQoreworICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9
IHRydWU7CisgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKKwogICAgIEVYUEVD
VF9FUSgydSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcywgZmlyc3RMb2FkQWJvdXRCbGFuaykpOwogfQogCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5t
bQppbmRleCBhMzVmMDUzNTBhYWI0YjQyZjM2YzQ2YWVjZGVlZWU2Y2U1NDRlZjg2Li4zMzc2MDky
YTE5NWI1MTJkYTY3YzQ5NmU0NTIxN2I5MTRmZTJhNTc5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0K
QEAgLTQ3OSw4ICs0NzksNiBAQCBzdGF0aWMgYm9vbCBmaW5pc2hlZDsKIH0KIEBlbmQKIAotLy8g
RklYTUU6IG9uIGlPUywgVUkgcHJvY2VzcyBzaG91bGQgYmUgdXNpbmcgdGhlIHNhbWUgY29va2ll
IGZpbGUgYXMgdGhlIG5ldHdvcmsgcHJvY2VzcyBmb3IgZGVmYXVsdCBzZXNzaW9uLgotI2lmIFBM
QVRGT1JNKE1BQykKIGVudW0gY2xhc3MgU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgeyBO
bywgWWVzIH07CiB2b2lkIHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNo
b3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5n
KQogewpAQCAtNTg5LDIwICs1ODcsNjYgQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91
dFByb2Nlc3NQb29sV2l0aFByZXdhcm1pbmcpCiAgICAgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRo
b3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmc6Olllcyk7CiB9CiAK
LSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KIEBpbnRlcmZhY2UgQ2hlY2tTZXNzaW9uQ29va2ll
VUlEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS1VJRGVsZWdhdGU+CistIChOU1N0cmluZyAqKWFsZXJ0
Q29va2llSFRNTDsKKy0gKE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2U7CiBAZW5kCiAKLUBpbXBs
ZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlCitAaW1wbGVtZW50YXRpb24g
Q2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBf
bWVzc2FnZTsKK30KKwogLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkph
dmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0
ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIEVYUEVDVF9TVFJFUSgiU2Vzc2lvbkNv
b2tpZU5hbWU9Q29va2llVmFsdWUiLCBtZXNzYWdlLlVURjhTdHJpbmcpOworICAgIF9tZXNzYWdl
ID0gbWVzc2FnZTsKICAgICBmaW5pc2hlZCA9IHRydWU7CiAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKIH0KKworLSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZQoreworICAgIHdoaWxlICghX21l
c3NhZ2UpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAg
cmV0dXJuIF9tZXNzYWdlLmF1dG9yZWxlYXNlKCk7Cit9CisKKy0gKE5TU3RyaW5nICopYWxlcnRD
b29raWVIVE1MCit7CisgICAgcmV0dXJuIEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50
LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBp
ICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsg
YWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOworfQorCiBAZW5kCiAKK1RFU1Qo
V2ViS2l0LCBXS0hUVFBDb29raWVTdG9yZU11bHRpcGxlVmlld3MpCit7CisgICAgVGVzdFdLV2Vi
VmlldyAqd2ViVmlldzEgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAg
W3dlYlZpZXcxIHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IG5ldHdvcmsgcHJv
Y2VzcyJdOworCisgICAgTlNIVFRQQ29va2llICpzZXNzaW9uQ29va2llID0gW05TSFRUUENvb2tp
ZSBjb29raWVXaXRoUHJvcGVydGllczpAeworICAgICAgICBOU0hUVFBDb29raWVQYXRoOiBAIi8i
LAorICAgICAgICBOU0hUVFBDb29raWVOYW1lOiBAIlNlc3Npb25Db29raWVOYW1lIiwKKyAgICAg
ICAgTlNIVFRQQ29va2llVmFsdWU6IEAiQ29va2llVmFsdWUiLAorICAgICAgICBOU0hUVFBDb29r
aWVEb21haW46IEAiMTI3LjAuMC4xIiwKKyAgICB9XTsKKworICAgIF9fYmxvY2sgYm9vbCBzZXRD
b29raWVEb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcxLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURh
dGFTdG9yZS5odHRwQ29va2llU3RvcmUgc2V0Q29va2llOnNlc3Npb25Db29raWUgY29tcGxldGlv
bkhhbmRsZXI6XnsKKyAgICAgICAgc2V0Q29va2llRG9uZSA9IHRydWU7CisgICAgfV07CisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZzZXRDb29raWVEb25lKTsKKworICAgIGF1dG8gZGVs
ZWdhdGUgPSBhZG9wdE5TKFtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIG5ld10pOworICAg
IFt3ZWJWaWV3MSBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3
MSBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VS
TCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RS
RVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZh
bHVlIik7CisKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtbVGVzdFdLV2ViVmlldyBu
ZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzIgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5n
ZXQoKV07CisgICAgW3dlYlZpZXcyIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tp
ZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1d
OworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lv
bkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKK30KKwogVEVTVChXS0hUVFBDb29raWVTdG9yZSwg
V2l0aG91dFByb2Nlc3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKIHsKICAgICBSZXRhaW5QdHI8V0tX
ZWJzaXRlRGF0YVN0b3JlPiBlcGhlbWVyYWxTdG9yZVdpdGhDb29raWVzID0gW1dLV2Vic2l0ZURh
dGFTdG9yZSBub25QZXJzaXN0ZW50RGF0YVN0b3JlXTsKQEAgLTYyNyw5ICs2NzEsOCBAQCBURVNU
KFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOwogICAgIGZpbmlzaGVkID0g
ZmFsc2U7CiAgICAgCi0gICAgTlNTdHJpbmcgKmFsZXJ0Q29va2llSFRNTCA9IEAiPHNjcmlwdD52
YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsg
aSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0o
KTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4i
OwotICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOmFsZXJ0Q29va2llSFRNTCBiYXNlVVJMOltO
U1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKLSAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzpb
ZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAi
aHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRG
b3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CiB9CiAKIHN0YXRp
YyBib29sIGFyZUNvb2tpZXNFcXVhbChOU0hUVFBDb29raWUgKmZpcnN0LCBOU0hUVFBDb29raWUg
KnNlY29uZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXgg
MjEzZWZlMWZhMTEwYWIyZmY0YTIyMTM4YmMxNzk1NGQ0YTA4YzQxNS4uZjllMDMzZDY3ZTUwNzZl
NDY3N2NkYjk2ZWNjMGIzYWE3OGE5ZDA0MSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5jcHAKQEAgLTEwNjcsOCArMTA2Nyw2IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6
OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMs
IFJlCiAKICAgICByZXNldFF1b3RhKCk7CiAKLSAgICBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xD
ZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKHBsYXRmb3JtQ29udGV4dCgpLCB0cnVl
KTsKLQogICAgIFdLQ29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCkpOwogCiAgICAgV0tDb250ZXh0U2V0
VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuY29udGV4dCgpLCBmYWxzZSk7CkBAIC0zMTc0LDkgKzMxNzIsOCBAQCBQbGF0Zm9ybVdlYlZp
ZXcqIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNyZWF0ZU90aGVyUGFnZShQbGF0Zm9ybVdlYlZp
ZXcqIHBhcmVudAogICAgIHJldHVybiBuZXcgUGxhdGZvcm1XZWJWaWV3KGNvbmZpZ3VyYXRpb24s
IG9wdGlvbnMpOwogfQogCi1XS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRq
dXN0Q29udGV4dChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJl
ZiBjb250ZXh0Q29uZmlndXJhdGlvbikKK1dLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1
cmF0aW9uUmVmKQogewotICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKGNv
bnRleHQsIGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCkpOwogICAgIHJldHVybiBjb250ZXh0Owog
fQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408733</attachid>
            <date>2020-09-14 12:15:43 -0700</date>
            <delta_ts>2020-09-15 13:23:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200914121542.patch</filename>
            <type>text/plain</type>
            <size>314948</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2OTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDE0YzhlMzNhMjFmZWRkOWYz
OWIwOTJiNDg4ODI5OGY0ZjU0NDk2MDYuLjlmMWQ5YjYzMzBjZThlZGE3MGNlN2ViM2ZlY2ZkYzBm
OTJhY2RkNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzM4IEBACisyMDIwLTA5LTE0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24p
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0
b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuY3BwOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBD
b29raWVTdG9yZTo6Y29va2llc0ZvclVSTCk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9y
ZTo6c2V0Q29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29v
a2llKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVzdHJveWVkKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6dW5y
ZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmNwcDoKKyAgICAgICAgKFdLQ29udGV4dEdldENvb2tpZU1hbmFn
ZXIpOgorICAgICAgICAoV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKToKKyAgICAg
ICAgKFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgIChXS0Nv
bnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdLQ29u
dGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdLQ29udGV4dFNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcpOiBEZWxldGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9zZXRDb29raWVBY2NlcHRQb2xpY3k6XSk6CisgICAgICAgICgtW1dLUHJvY2Vzc1Bv
b2wgX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6XSk6CisgICAgICAgICgtW1dL
UHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1By
b2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3Jl
IF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChf
V2ViS2l0Q29va2llTWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUp
OgorICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9hZGRfY29va2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29v
a2llcyk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAg
ICAod2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1
dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNz
L0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lm1tOgorICAgICAgICAoV2ViS2l0
OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbik6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6
OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVz
cyk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5k
UmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OkRvd25sb2FkUHJveHlNYXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5
TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAg
IChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0
YXJ0TG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5OjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OmF0dGVtcHRSZWxhdW5jaEFmdGVyQ3Jhc2hJZk5lY2Vzc2FyeSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tn
cm91bmRQcmlvcml0eSk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sU2hvdWxkVGFr
ZVVJQmFja2dyb3VuZEFzc2VydGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRo
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OndlYnNp
dGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vz
c2VzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJv
Y2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJv
Y2Vzc0Fzc2VydGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZl
bnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRl
Q29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVB
bGxDb29raWVzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0QWxsQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3Vw
cGxlbWVudE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRl
cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpjcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50
aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25V
UkxGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlj
a0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxT
Y2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6fldlYlByb2Nlc3NQb29sKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3
YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxp
emVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nl
c3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVT
ZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpy
ZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRTZXJ2
aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29u
dGVudFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJl
Z2lzdGVyVVJMU2NoZW1lQXNMb2NhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpyZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFu
ZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2Jh
bFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JXZWJTb2NrZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJD
YWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpz
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHlGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
Ojp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzeW5jTmV0d29ya1Byb2Nlc3NDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc0Fz
c2VydGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29y
a2VyUGFnZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRpZENv
bW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rp
dml0eUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
aGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5l
dHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVj
ZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpk
dW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbik6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVh
clByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c3VibWl0VGVsZW1ldHJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3Vt
bWFyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2ll
QmxvY2tpbmdVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hl
ZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0
aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0Vu
dHJpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bG9n
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFz
SGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fk
c1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9T
YW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVE
b21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNl
c3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFw
cEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbmFt
ZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
Ojpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0
d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1
bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3Rv
cmVGb3JTZXNzaW9uSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwZW5k
aW5nQ29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmFkZFBlbmRpbmdDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRh
U3RvcmVTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZv
cm1TZXROZXR3b3JrUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL2dsaWIvV2ViUHJv
Y2Vzc1Byb3h5R0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cGxh
dGZvcm1HZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJDb29r
aWVNYW5hZ2VyUHJveHlTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSk6CisgICAgICAgICogVUlQcm9jZXNz
L3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyk6CisKIDIwMjAtMDktMTEg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBN
b3ZlIF9zZXRDb29raWVBY2NlcHRQb2xpY3kgdG8gV0tIVFRQQ29va2llU3RvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5h
Z2VyLmNwcAppbmRleCBmY2UyMzg5ODdhNzg1MGYxOGM5ZjMwNmM1MGU5OGNlOTg4ZDEyNWZkLi5l
YjU4ZmM5NDVkMTkyNTU0NjFiODYwZjRhOGI4ZGM2MTI1ZjUzZjg4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIu
Y3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LAogCiB2b2lkIFdl
YkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBjb21wbGV0aW9uSGFuZGxlcihtX3Byb2Nlc3MuZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCku
Y29va2llQWNjZXB0UG9saWN5KCkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5z
dG9yYWdlU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKS0+Y29va2ll
QWNjZXB0UG9saWN5KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggOTBlYjYyYzZh
OTdjNTc4YWQ4MGNiYjBjZDAwZGU1ODMwOWQxMjRmNi4uYWJiYWUyM2MzNzE1NzI0ZWQ2MjU2MGVl
OTcxZTkwNjRmMzdlNTAyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTM0NSwyOSArMzQ1LDE5IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycyYmCiAKICAgICBzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUocGFyYW1ldGVycy5l
bmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUpOwogCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLmRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnNlc3Npb25JRDsKLSAgICBzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246
OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKLQotICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
LmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgYWRkU2Vzc2lvblN0
b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotCisgICAgZm9yIChhdXRvJiBkYXRhU3RvcmVQYXJhbWV0ZXJzIDogcGFy
YW1ldGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzKSB7CisgICAgICAgIGF1dG8gc2Vzc2lvbklEID0g
ZGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwor
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoZGF0YVN0b3JlUGFy
YW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBh
ZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRl
cnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFy
dHlPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgYWRkSW5kZXhlZERh
dGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Cisg
ICAgICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJh
bWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2VuZGlmCi0KKyAgICAgICAg
bV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5s
b2NhbFN0b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6
OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKCp0aGlzLCBXVEZNb3ZlKGRhdGFTdG9yZVBh
cmFtZXRlcnMpKTsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgYm9vbCBzZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkID0gdHJ1ZTsKLSAgICBhZGRTZXJ2
aWNlV29ya2VyU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRl
cnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFk
ZFNlcnZpY2VXb3JrZXJTZXNzaW9uKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2
aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKGRhdGFTdG9y
ZVBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIGRhdGFTdG9y
ZVBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CiAjZW5kaWYKLQotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQs
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0
b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvKiBkZWZhdWx0U2Vzc2lvbiA9IG5l
dHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotICAgIGF1
dG8qIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IGRlZmF1bHRTZXNzaW9uLT5uZXR3b3JrU3RvcmFn
ZVNlc3Npb24oKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIGRlZmF1bHRT
dG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7CisgICAgfQogCiAgICAgZm9yIChhdXRv
JiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVu
dC0+aW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKQEAgLTQyNywxMiArNDE3LDYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6Y3JlYXRlTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoUHJvY2Vzc0lk
ZW50aWZpZXIgaWRlbnQKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50
aWFscygpCiB7Ci0gICAgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2Uo
KS5jbGVhckNyZWRlbnRpYWxzKCk7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gdGhp
cy0+bmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkpCi0g
ICAgICAgIG5ldHdvcmtTZXNzaW9uLT5jbGVhckNyZWRlbnRpYWxzKCk7Ci0gICAgZWxzZQotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQogICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihb
XSAoYXV0byYgbmV0d29ya1Nlc3Npb24pIHsKICAgICAgICAgaWYgKGF1dG8gc3RvcmFnZVNlc3Np
b24gPSBuZXR3b3JrU2Vzc2lvbi5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKSkKICAgICAgICAgICAg
IHN0b3JhZ2VTZXNzaW9uLT5jcmVkZW50aWFsU3RvcmFnZSgpLmNsZWFyQ3JlZGVudGlhbHMoKTsK
QEAgLTUwOSw4ICs0OTMsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNv
bnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQogdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBi
b29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyQmFzZSkKICNlbmRpZgogewotICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9u
SUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0KICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmV0d29y
a1N0b3JhZ2VTZXNzaW9ucy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKICAgICBpZiAoIWFkZFJl
c3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm47CkBAIC01MjUsNyArNTA3LDcgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vz
c2lvbklELCBib29sIHNob3VsZFUKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRp
ZmllciA9IG1ha2VTdHJpbmcoaWRlbnRpZmllckJhc2UsICIuUHJpdmF0ZUJyb3dzaW5nLiIsIGNy
ZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSkuY3JlYXRlQ0ZTdHJpbmcoKTsKICAgICBpZiAoc2Vz
c2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gYWRvcHRDRihj
cmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oY2ZJZGVudGlmaWVyLmdldCgpKSk7Ci0gICAgZWxz
ZQorICAgIGVsc2UgaWYgKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKQogICAgICAgICBzdG9yYWdlU2Vzc2lvbiA9IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6Y3JlYXRlQ0ZTdG9yYWdlU2Vzc2lvbkZvcklkZW50aWZpZXIoY2ZJZGVudGlmaWVy
LmdldCgpKTsKIAogICAgIGlmIChOZXR3b3JrU3RvcmFnZVNlc3Npb246OnByb2Nlc3NNYXlVc2VD
b29raWVBUEkoKSkgewpAQCAtNTQ4LDIxICs1MzAsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
Y29va2llQWNjZXB0UG9saWN5Q2hhbmdlZChIVFRQQ29va2llQWNjZXB0UG9saWN5IG5ld1BvbGlj
eSkKIAogV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBOZXR3b3JrUHJvY2Vzczo6c3Rv
cmFnZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkgY29uc3QKIHsKLSAg
ICBpZiAoc2Vzc2lvbklEID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0g
ICAgICAgIHJldHVybiAmZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CiAgICAgcmV0dXJuIG1fbmV0
d29ya1N0b3JhZ2VTZXNzaW9ucy5nZXQoc2Vzc2lvbklEKTsKIH0KIAotV2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbikKLSAgICAg
ICAgbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gcGxhdGZvcm1DcmVhdGVEZWZhdWx0
U3RvcmFnZVNlc3Npb24oKTsKLSAgICByZXR1cm4gKm1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYp
PiYgZnVuY3RvcikKIHsKLSAgICBmdW5jdG9yKGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpKTsKICAg
ICBmb3IgKGF1dG8mIHN0b3JhZ2VTZXNzaW9uIDogbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLnZh
bHVlcygpKQogICAgICAgICBmdW5jdG9yKCpzdG9yYWdlU2Vzc2lvbik7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXggMjdmNjBjMWJkMTIx
ZDZkMzFjNGNkY2JiMjU3M2ZkZmM5ZGYwNjYyMC4uYzdkZDQ3YzdiYjhiYjhhNDk0Y2Y2MmRmNjM0
NGZiZTA5YjBiZDJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuaApAQCAtMTcwLDcgKzE3MCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZm9yRWFj
aE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYpPiYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
biogc3RvcmFnZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKSBjb25zdDsKLSAgICBXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5l
d1Rlc3RpbmdTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJik7CiAjaWYgUExBVEZPUk0oQ09D
T0EpCiAgICAgdm9pZCBlbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgYm9vbCBz
aG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwg
UmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYpOwpAQCAtMzc2LDcgKzM3NSw2IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gcGxhdGZvcm1DcmVh
dGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdDsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZU5l
dHdvcmtQcm9jZXNzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKIApA
QCAtNTQ2LDcgKzU0NCw2IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklE
LCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiBtX25ldHdvcmtTZXNzaW9uczsKICAg
ICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uPj4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zOwotICAgIG11dGFibGUg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbV9kZWZhdWx0
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwogCiAgICAgUmVmUHRyPFN0b3JhZ2VNYW5hZ2VyU2V0PiBt
X3N0b3JhZ2VNYW5hZ2VyU2V0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCmlu
ZGV4IDcwZDM3NmZhOTY0NmQwZWZmNjE2MmI1OWUxNjVlZjFmNjBhOGJhYzEuLmNmNmY0YWI4YmZk
NWEyNTA5YzkzMzI0ODUwYmRjOTY2M2M0YzRlZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuY3BwCkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgSVBDOjpl
bmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwogICAgIGVuY29kZXIgPDwg
c3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7CiAjZW5kaWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGVuY29kZXIgPDwgZGF0YVN0b3JlUGFyYW1ldGVyczsK
ICNpZiBVU0UoU09VUCkKICAgICBlbmNvZGVyIDw8IGNvb2tpZUFjY2VwdFBvbGljeTsKICAgICBl
bmNvZGVyIDw8IGlnbm9yZVRMU0Vycm9yczsKQEAgLTY5LDkgKzY5LDYgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKICAgICBlbmNvZGVyIDw8IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbDsKICAgICBl
bmNvZGVyIDw8IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKLSAgICBlbmNvZGVyIDw8IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnkgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSA8PCBzaG91bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5
OwotI2VuZGlmCiAgICAgZW5jb2RlciA8PCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZTsKICAgICBl
bmNvZGVyIDw8IGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZTsKIH0KQEAgLTExOSwx
MSArMTE2LDExIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29k
ZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5ldHdvcmtQcm9jCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICNlbmRpZgogCi0gICAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IGRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIGRlY29kZXIgPj4gZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnM7Ci0gICAgaWYgKCFkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycykKKyAgICBP
cHRpb25hbDxWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+PiBkYXRhU3RvcmVQYXJh
bWV0ZXJzOworICAgIGRlY29kZXIgPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBpZiAoIWRh
dGFTdG9yZVBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMgPSBXVEZNb3ZlKCpkZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycyk7CisgICAgcmVzdWx0LmRhdGFTdG9yZVBhcmFtZXRlcnMgPSBXVEZNb3ZlKCpkYXRhU3Rv
cmVQYXJhbWV0ZXJzKTsKIAogI2lmIFVTRShTT1VQKQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0LmNvb2tpZUFjY2VwdFBvbGljeSkpCkBAIC0xNDUsMjAgKzE0Miw2IEBAIGJvb2wgTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29k
ZXIsIE5ldHdvcmtQcm9jCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsU2NoZW1l
c1JlZ2lzdGVyZWRBc05vQWNjZXNzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0jaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCi0gICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBzZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAo
IXNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAppbmRleCAxYjliM2RhZWQxY2NlYWI1ZDRm
ZmMzMDUwMjg5ZTE1YmY4ODkxOGU1Li4wNGQ4NGI3ZDA4ZTFjZWM0NGRlOTQ2YmIwMmQyNmI3MmMx
MmQwZDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCkBAIC03Miw3ICs3Miw3IEBA
IHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgYm9vbCBzdG9y
YWdlQWNjZXNzQVBJRW5hYmxlZDsKICNlbmRpZgogCi0gICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMgZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgVmVjdG9yPFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzPiBkYXRhU3RvcmVQYXJhbWV0ZXJzOwogICAgIAogI2lmIFVTRShTT1VQ
KQogICAgIFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5
IHsgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeTo6QWx3YXlzQWNjZXB0IH07CkBAIC04
NiwxMiArODYsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewog
ICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbDsKICAgICBWZWN0
b3I8U3RyaW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCi0gICAgU3RyaW5nIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgYm9vbCBzaG91bGREaXNhYmxlU2Vy
dmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5IHsgZmFsc2UgfTsKLSNlbmRpZgotICAg
IGJvb2wgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgeyBmYWxzZSB9OworICAgIGJvb2wgc2hvdWxk
RW5hYmxlSVRQRGF0YWJhc2UgeyB0cnVlIH07CiAgICAgYm9vbCBlbmFibGVBZENsaWNrQXR0cmli
dXRpb25EZWJ1Z01vZGUgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCmluZGV4IDlk
NzNlYTEyZjE0OGE3OGFiMzQ0NjljYWI4NjIxZDdjN2Q1ZDQ3NzguLjI0OWFlZDRiZTMzMmRjYzZj
MWQyYWQ1ZjZkZTdhZWI4Y2Y4MzViYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KQEAgLTc4LDkgKzc4
LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3NDb2NvYShjb25zdCBOZXR3b3JrUHJvY2Vzc0MKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25z
dW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1l
dGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNhbmRi
b3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0g
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9DRk5ldHdvcmtTZXRBVFNDb250
ZXh0KHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwpAQCAtMTA3LDExICsxMDQs
NiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vz
c0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFtOU1VSTENhY2hlIHNldFNoYXJlZFVS
TENhY2hlOnVybENhY2hlLmdldCgpXTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVs
dFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCkpOwotfQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3b3JrUHJvY2Vzczo6c291cmNlQXBw
bGljYXRpb25BdWRpdERhdGEoKSBjb25zdAogewogI2lmIFVTRShTT1VSQ0VfQVBQTElDQVRJT05f
QVVESVRfREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3Vy
bC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
dXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKaW5kZXggZDk5ZjlkZDY0YmFkNmU0MmRjYzhlM2Y5
YjhmMTY5Mjk5N2Y2NzE5Mi4uNDk1MzgxMWIyMTY0ZTg5ODQ2ZjkyNzllNjIyOWQ1OTNlMjI1NmEz
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQ
cm9jZXNzQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHAKQEAgLTM5LDExICszOSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNz
Q3JlYXRpCiB7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLX0KLQogdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNv
bnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBjb25zdCBTdHJpbmcmIGhvc3Qp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KaW5kZXggYzI3
MzZlMDI2YTU1ZDNkNDAyMGY4NGY0ZDY5M2QxNmI0NjUyZWQyMy4uMWUxODQ4OWY5NDYyMGYwMmE3
ZDllOWU4NjllYzg2NDkxYjdiYmQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KQEAgLTU1LDE1
ICs1NSwxMSBAQCB2b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0
YVN0b3JlU2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYgbmV0dwogICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVu
c2lvbkhhbmRsZSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gdWlQ
cm9jZXNzQ29va2llU3RvcmFnZTsKLSAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYm
ICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSkK
KyAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vz
c0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSAmJiBwYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSkKICAgICAgICAgdWlQcm9jZXNzQ29va2llU3RvcmFnZSA9IGNvb2tpZVN0b3JhZ2VG
cm9tSWRlbnRpZnlpbmdEYXRhKHBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50
aWZpZXIpOwogCiAgICAgbmV0d29ya1Byb2Nlc3MuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSUQsIHBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3b3Jr
U2Vzc2lvbiwgbWFrZVN0cmluZyhiYXNlLCAnLicsIHNlc3Npb25JRC50b1VJbnQ2NCgpKSwgV1RG
TW92ZSh1aVByb2Nlc3NDb29raWVTdG9yYWdlKSk7CiAKLSAgICBhdXRvKiBzZXNzaW9uID0gbmV0
d29ya1Byb2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKTsKLSAgICBmb3IgKGNvbnN0IGF1
dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHNlc3Npb24t
PnNldENvb2tpZShjb29raWUpOwotCiAgICAgbmV0d29ya1Byb2Nlc3Muc2V0U2Vzc2lvbihzZXNz
aW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUobmV0d29ya1Byb2Nlc3MsIFdURk1vdmUocGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAK
aW5kZXggNDFhZmRjYzYxYWRjNTgzZGNmMTlmMmQ0MGFhMjg5MWY4YTAxMzI4Yi4uMDkzZDU5OTU5
NmE2ODgzMGFmMDk5M2ZhMzY4MzFlMGMzMjRiZmJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKQEAgLTE0
MCwxMSArMTQwLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKICAgICBzZXRJZ25vcmVUTFNF
cnJvcnMocGFyYW1ldGVycy5pZ25vcmVUTFNFcnJvcnMpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1D
cmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5p
cXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vy
cm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKICAgICBTb3VwTmV0d29ya1Nlc3Npb246OnNl
dFNob3VsZElnbm9yZVRMU0Vycm9ycyhpZ25vcmVUTFNFcnJvcnMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCmluZGV4IDZkMGMx
MjlhNzQwNTEwZDM4Njk3MzcwNWFkMDkyZWYxMzJjYzA3NWEuLjA0ODEwYjNlMTliZTk2Y2FkMWFk
ODJhNDRkY2VkYjI2ZWY3ODI2MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKQEAgLTQwLDEzICs0MCw5IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNv
bnN0CiAgICAgZW5jb2RlciA8PCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgZW5jb2Rl
ciA8PCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGNv
b2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIGVuY29kZXIgPDwgcGVuZGluZ0Nv
b2tpZXM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBlbmNvZGVyIDw8IGlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGU7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBlbmNvZGVyIDw8IGluZGV4
ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5k
aWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTgzLDEyICs3OSw2IEBAIE9wdGlv
bmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
czo6ZGVjb2RlKElQQzo6RGVjCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFy
YW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmNvb2tp
ZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJD
b3JlOjpDb29raWU+PiBwZW5kaW5nQ29va2llczsKLSAgICBkZWNvZGVyID4+IHBlbmRpbmdDb29r
aWVzOwotICAgIGlmICghcGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IFdURk1vdmUoKnBlbmRpbmdDb29r
aWVzKTsKLQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIE9wdGlvbmFsPFN0cmlu
Zz4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5OwpAQCAtMTAxLDE0ICs5MSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVj
CiAgICAgaWYgKCFpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBPcHRp
b25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlVGVt
cEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFpbmRleGVkRGF0YWJhc2VU
ZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLSAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycy5oCmluZGV4IGYyN2RmNDg5ODA5ZjMxOTYwOGI2ODBjYjJhOGExYzE0YjcwMTg0MzkuLmUx
YjIzMzcwMTk5ZmUzNzAzMWU5ZGM1YzA1NzgxNTUwMjFlMzRkNmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaApAQCAtNTEsMTUgKzUx
LDExIEBAIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyB7CiAKICAgICBWZWN0b3I8
dWludDhfdD4gdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlIGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIFZl
Y3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29raWVzOwogICAgIE5ldHdvcmtTZXNzaW9u
Q3JlYXRpb25QYXJhbWV0ZXJzIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKIAogI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQogICAgIFN0cmluZyBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7
CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCmlu
ZGV4IGE1NmRmNWE4YzJiMjU4MjMzZDlkNDhiZGZkOTIwZDY4YTY3ZjIxZjcuLmViMDc5ODcwNDZm
NWYyNWEyNjYyOWVhY2YwYzM3ZDEzYzkyODUwNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCkBAIC00Niw4ICs0Niw2IEBAIG5h
bWVzcGFjZSBBUEkgewogSFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQogICAgIDogbV9vd25pbmdEYXRhU3Rv
cmUod2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHJlZ2lzdGVyRm9y
TmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIEhUVFBDb29raWVTdG9yZTo6fkhU
VFBDb29raWVTdG9yZSgpCkBAIC01NSw4ICs1Myw2IEBAIEhUVFBDb29raWVTdG9yZTo6fkhUVFBD
b29raWVTdG9yZSgpCiAgICAgQVNTRVJUKG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiAgICAgQVNT
RVJUKCFtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5KTsKICAgICBBU1NFUlQoIW1fY29va2ll
TWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotCi0gICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29s
Tm90aWZpY2F0aW9ucygpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZmlsdGVyQXBwQm91
bmRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtODEsMzMgKzc3LDE2IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJB
cHBCb3VuZENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpCiAKIHZv
aWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBh
dXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFn
ZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4gYWxsQ29va2llczsKLSAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICAg
ICAgYWxsQ29va2llcyA9IGdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMo
KTsKLSAgICAgICAgYWxsQ29va2llcy5hcHBlbmRWZWN0b3IobV9vd25pbmdEYXRhU3RvcmUtPnBl
bmRpbmdDb29raWVzKCkpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBhbGxDb29raWVzXSAoKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2llcyhhbGxDb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
YXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVN
YW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0QWxsQ29va2llcyhtX293bmlu
Z0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIHBvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tp
ZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5n
ZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVz
KSBtdXRhYmxlIHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3Rv
cmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
YXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3Jh
Z2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm4gY29tcGxldGlv
bkhhbmRsZXIoeyB9KTsKLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmdldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMp
IG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+
bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRD
b29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRh
YmxlIHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTExNSw3OCArOTQsMjkgQEAgdm9pZCBI
VFRQQ29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG8KIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNv
b2tpZXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgYXBwQm91bmRDb29r
aWVzKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5w
cm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgICAgIGlmICghcG9v
bCkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBhcHBCb3VuZENvb2tpZXMpIHsK
LSAgICAgICAgICAgICAgICAvLyBGSVhNRTogcGVuZGluZ0Nvb2tpZXMgdXNlZCBmb3IgZGVmYXVs
dFNlc3Npb24gYmVjYXVzZSBzZXNzaW9uIGNvb2tpZXMgY2Fubm90IGJlIHByb3BhZ2F0ZWQgdG8g
TmV0d29yayBQcm9jZXNzIHdpdGggdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuCi0g
ICAgICAgICAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6
OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAg
ICAgICAgICAgICAgICAgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29v
a2llKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3duaW5n
RGF0YVN0b3JlLT5hZGRQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvKiBj
b29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eT4oKTsKLSAgICAgICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRh
YmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOworICAg
ICAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9j
ZXNzKCkuY29va2llTWFuYWdlcigpOworICAgICAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMo
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBhcHBCb3VuZENvb2tpZXMsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6
OmRlbGV0ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBt
X293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygp
OwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5z
ZXNzaW9uKQotICAgICAgICAgICAgZGVsZXRlQ29va2llRnJvbURlZmF1bHRVSVByb2Nlc3NDb29r
aWVTdG9yZShjb29raWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX293bmluZ0RhdGFT
dG9yZS0+cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb29raWUpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAg
ICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFn
ZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwot
ICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lv
bklEKCksIGNvb2tpZSwgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmlu
Z0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2ll
TWFuYWdlci5kZWxldGVDb29raWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29r
aWUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3Rv
cmU6OmRlbGV0ZUFsbENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vz
c1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAg
ICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQot
ICAgICAgICAgICAgZGVsZXRlQ29va2llc0luRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7
Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2Vy
ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAg
ICBjb29raWVNYW5hZ2VyLT5kZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5u
ZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0
ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKICAgICAvLyBGSVhN
RTogVGhlIENvbXBsZXRpb25IYW5kbGVyIHNob3VsZCBiZSBwYXNzZWQgdG8gV2ViQ29va2llTWFu
YWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzLgogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3Jl
OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xp
Y3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNv
b2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICgh
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAg
ICBzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUo
cG9saWN5KTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tp
ZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKLSAgICB9KTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdE
YXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1h
bmFnZXIuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lv
bklEKCksIHBvbGljeSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiBjbGFzcyBB
UElXZWJDb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA6IHB1YmxpYyBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6Ok9ic2VydmVyIHsKQEAgLTIyMiwyMSArMTUyLDcgQEAgdm9pZCBIVFRQQ29va2llU3Rv
cmU6OnJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQogCiAgICAgbV9jb29raWVN
YW5hZ2VyUHJveHlPYnNlcnZlciA9IG1ha2VVbmlxdWU8QVBJV2ViQ29va2llTWFuYWdlclByb3h5
T2JzZXJ2ZXI+KCp0aGlzKTsKIAotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+
cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29s
KSB7Ci0gICAgICAgIEFTU0VSVCghbV9vYnNlcnZpbmdVSVByb2Nlc3NDb29raWVzKTsKLQotICAg
ICAgICAvLyBMaXN0ZW4gZm9yIGNvb2tpZSBub3RpZmljYXRpb25zIGluIHRoZSBVSVByb2Nlc3Mg
aW4gdGhlIG1lYW50aW1lLgotICAgICAgICBzdGFydE9ic2VydmluZ0NoYW5nZXNUb0RlZmF1bHRV
SVByb2Nlc3NDb29raWVTdG9yZShbdGhpc10gKCkgewotICAgICAgICAgICAgY29va2llc0RpZENo
YW5nZSgpOwotICAgICAgICB9KTsKLQotICAgICAgICBtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tp
ZXMgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9vYnNlcnZlZENvb2tp
ZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9ICZtX293bmluZ0Rh
dGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CiAgICAgbV9vYnNlcnZl
ZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+
c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0KIApAQCAtMjcx
LDQ2ICsxODcsMTAgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNEaWRDaGFuZ2UoKQog
dm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQoKQogewogICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnVucmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0Rh
dGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLSAg
ICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbnVsbHB0cjsKLQotICAgIGF1dG8qIHBv
b2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0
aW9ucygpOwotCi0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX29ic2Vy
dmVkQ29va2llTWFuYWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1f
b3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBt
X29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQog
Ci12b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMoKQotewotICAgIEFTU0VSVCghbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVu
dGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9
IFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihbdGhp
c10oV2ViUHJvY2Vzc1Bvb2wmIG5ld1Byb2Nlc3NQb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25p
bmdEYXRhU3RvcmUtPmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKG5ld1Byb2Nlc3NQb29sKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBOb3cgdGhhdCBhbiBhc3NvY2lhdGVkIHBy
b2Nlc3MgcG9vbCBleGlzdHMsIHdlIG5lZWQgdG8gZmx1c2ggdGhlIFVJIHByb2Nlc3MgY29va2ll
IHN0b3JlCi0gICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBhbnkgY2hhbmdlcyBhcmUgcmVmbGVjdGVk
IHdpdGhpbiB0aGUgbmV3IHByb2Nlc3MgcG9vbC4KLSAgICAgICAgZmx1c2hEZWZhdWx0VUlQcm9j
ZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgbmV3UHJvY2Vzc1Bvb2wuZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLQotICAgICAgICBpZiAobV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcikgewot
ICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG5ld1Byb2Nlc3NQb29s
LnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgICAgICAg
ICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5n
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwot
ICAgICAgICB9Ci0gICAgICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlv
bnMoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0ZXJGb3JO
ZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIGlmIChtX3Byb2Nlc3NQb29sQ3Jl
YXRpb25MaXN0ZW5lcklkZW50aWZpZXIpCi0gICAgICAgIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lz
dGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3Rl
bmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50
aWZpZXIgPSAwOwotfQotCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogdm9pZCBIVFRQQ29va2llU3Rv
cmU6OmZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCkgeyB9CiBWZWN0b3I8V2ViQ29y
ZTo6Q29va2llPiBIVFRQQ29va2llU3RvcmU6OmdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVT
dG9yZUNvb2tpZXMoKSB7IHJldHVybiB7IH07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAppbmRleCAwMzgwNWU2NDk3MGIzY2U5ZTM2MTA1
ZGU5ZjZlYTJhZDkyZjEzZmEyLi42M2IxZjUwZjI2OTJiMTllNjA4ODU2ZTA4YTZhY2FjNmM5NmZh
NDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tp
ZVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVT
dG9yZS5oCkBAIC04Miw5ICs4Miw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSFRUUENvb2tp
ZVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYpOwogCi0gICAgdm9pZCByZWdpc3RlckZv
ck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotICAgIHZvaWQgdW5yZWdpc3RlckZvck5l
d1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotCiAgICAgdm9pZCBmbHVzaERlZmF1bHRVSVBy
b2Nlc3NDb29raWVTdG9yZSgpOwogICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBn
ZXRBbGxEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7CiAgICAgc3RhdGljIHZv
aWQgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29uc3QgV2ViQ29yZTo6
Q29va2llJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0Nv
bnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcApp
bmRleCBkZjMxM2ZmYjg2ZmMxZWY3ZTczMWE1NDRkNTdjYjc0Y2QzMGQ0YWNkLi41MjYwNWM0ZTIz
OWI5MzMxMmVjYWI0ZDliYjUxOWM4ZDk2ZTkwOTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKQEAgLTM5OCwxMSArMzk4LDYgQEAgYm9vbCBXS0NvbnRl
eHRHZXRVc2VzU2luZ2xlV2ViUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dFJlZikKICAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPmNvbmZpZ3VyYXRpb24oKS51c2VzU2lu
Z2xlV2ViUHJvY2VzcygpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFN0b3JhZ2VBY2Nlc3NBUElF
bmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBib29sIGVuYWJsZWQpCi17Ci0gICAgV2Vi
S2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGVuYWJs
ZWQpOwotfQotCiB2b2lkIFdLQ29udGV4dFNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxl
SWRlbnRpZmllcihXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tTdHJpbmdSZWYgbmFtZSkKIHsK
ICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZp
Y2VCdW5kbGVJZGVudGlmaWVyKFdlYktpdDo6dG9JbXBsKG5hbWUpLT5zdHJpbmcoKSk7CkBAIC00
MjYsMTEgKzQyMSw2IEBAIHZvaWQgV0tDb250ZXh0UHJlY29ubmVjdFRvU2VydmVyKFdLQ29udGV4
dFJlZiwgV0tVUkxSZWYpCiB7CiB9CiAKLVdLQ29va2llTWFuYWdlclJlZiBXS0NvbnRleHRHZXRD
b29raWVNYW5hZ2VyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQotewotICAgIHJldHVybiBXZWJL
aXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zdXBwbGVtZW50PFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5PigpKTsKLX0KLQogV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdL
Q29udGV4dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmKQogewogICAgIHJldHVybiBX
S1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKCk7CkBAIC01NDgsMTggKzUzOCw2
IEBAIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRU
ZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCkt
PnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyk7CiB9CiAKLXZv
aWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVz
dGluZyhXS0NvbnRleHRSZWYgY29udGV4dCwgYm9vbCBhbGxvd3MpCi17Ci0jaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT5zZXRBbGxvd3NBbnlT
U0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoYWxsb3dzKTsKLSNlbmRpZgotfQotCi12b2lk
IFdLQ29udGV4dENsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tDb250ZXh0UmVmIGNvbnRleHQpCi17
Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsK
LX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQbHVnSW5BdXRvU3RhcnRPcmlnaW5I
YXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdlYktpdDo6dG9B
UEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNo
ZXMoKS5sZWFrUmVmKCkpOwpAQCAtNjAxLDExICs1NzksNiBAQCB2b2lkIFdLQ29udGV4dFNldEZv
bnRBbGxvd0xpc3QoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLQXJyYXlSZWYgYXJyYXlSZWYp
CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldEZvbnRBbGxvd0xpc3QoV2ViS2l0
Ojp0b0ltcGwoYXJyYXlSZWYpKTsKIH0KIAotdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3Jr
UHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250
ZXh0KS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0KLQogdm9pZCBXS0NvbnRleHRUZXJt
aW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAgICBXZWJLaXQ6
OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKQEAgLTYxMyw3ICs1
ODYsNyBAQCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29udGV4dFJl
ZiBjb250ZXh0KQogCiBQcm9jZXNzSUQgV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewotICAgIHJldHVybiBXZWJLaXQ6OnRvSW1w
bChjb250ZXh0UmVmKS0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CisgICAgcmV0dXJuIDA7
CiB9CiAKIHZvaWQgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKFdLQ29udGV4dFJlZiBjb250
ZXh0UmVmLCBXS1N0cmluZ1JlZiBkb21haW5SZWYsIFdLU3RyaW5nUmVmIG5hbWVSZWYsIFdLQXJy
YXlSZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5UmVmIGV4dGVuc2lvbnNSZWYpCkBAIC02NjEsMTIg
KzYzNCwxMSBAQCB2b2lkIFdLQ29udGV4dENsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxT
dG9yYWdlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCB2bwogICAgIH0pOwogfQogCi12b2lkIFdL
Q29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoV0tDb250ZXh0UmVmIGNv
bnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKK3ZvaWQgV0tD
b250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJv
b2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKIHsKLSAgICBXZWJLaXQ6OnRvSW1w
bChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpz
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3Jl
KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgd2Vic2l0ZURh
dGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUoV0tDb250
ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29u
dGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktpdDo6dG9JbXBsKHdlYnNpdGVEYXRh
U3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dL
Q29udGV4dC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKaW5k
ZXggMDhmNTRmZjUwNTdmOGQwNGUyNmFkZmUyYzBlM2E0NzI2NDc5MzVlNy4uNmY2Y2Q0MTdmYTg2
NWU2ZWE4ZDQ1YWMxYmYzNjJkYTgxNWQ5ZTIzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2MiwxNSArMTYyLDEyIEBAIFdLX0VYUE9SVCB1bnNpZ25l
ZCBXS0NvbnRleHRHZXRNYXhpbXVtTnVtYmVyT2ZQcm9jZXNzZXMoV0tDb250ZXh0UmVmIGNvbnRl
eHQpIFdLCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRVc2VzU2luZ2xlV2ViUHJvY2VzcyhX
S0NvbnRleHRSZWYsIGJvb2wpOwogV0tfRVhQT1JUIGJvb2wgV0tDb250ZXh0R2V0VXNlc1Npbmds
ZVdlYlByb2Nlc3MoV0tDb250ZXh0UmVmKTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0
U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoV0tDb250ZXh0UmVmLCBib29sIGVuYWJsZWQpOwotCiBX
S19FWFBPUlQgdm9pZCBXS0NvbnRleHRTdGFydE1lbW9yeVNhbXBsZXIoV0tDb250ZXh0UmVmIGNv
bnRleHQsIFdLRG91YmxlUmVmIGludGVydmFsKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFN0
b3BNZW1vcnlTYW1wbGVyKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIAogV0tfRVhQT1JUIFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJl
ZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1FTlQoV0tXZWJzaXRl
RGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSk7CiAKIFdLX0VYUE9SVCBXS0FwcGxpY2F0aW9u
Q2FjaGVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKFdLQ29u
dGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1FTlQoV0tX
ZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSk7Ci1XS19FWFBPUlQgV0tDb29raWVN
YW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQp
IFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiBXS19FWFBPUlQgV0tHZW9sb2NhdGlvbk1hbmFnZXJSZWYg
V0tDb250ZXh0R2V0R2VvbG9jYXRpb25NYW5hZ2VyKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIFdL
X0VYUE9SVCBXS0ljb25EYXRhYmFzZVJlZiBXS0NvbnRleHRHZXRJY29uRGF0YWJhc2UoV0tDb250
ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiBX
S0NvbnRleHRHZXRLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyKFdLQ29udGV4dFJlZiBjb250ZXh0KSBX
S19DX0FQSV9ERVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1FTlQoV0tXZWJzaXRlRGF0YVN0b3JlR2V0
RGVmYXVsdERhdGFTdG9yZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S0NvbnRleHRQcml2YXRlLmgKaW5kZXggN2MyNzEwZjMzOWZjZTc3ZDNhNTJhOGE1NWU4YjFhZTZj
ZWI1NTdhNS4uYmE5NGJiMGJjZWE2MWI5NWQyZGZkYmI0OWU0MDczOTRhMDI4NmJkNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaApAQCAt
ODMsMTEgKzgzLDkgQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0V2FybUluaXRpYWxQcm9jZXNz
KFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIC8vIEF0IHNvbWUgcG9pbnQgaXQgc2hvdWxkIGJlIHJl
bW92ZWQuCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nlc3MoV0tD
b250ZXh0UmVmLCBib29sKTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlTmV0
d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFRlcm1p
bmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29udGV4dFJlZik7CiAKIFdLX0VYUE9SVCB2b2lkIFdLQ29u
dGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0VGVzdGluZyhXS0NvbnRl
eHRSZWYsIGJvb2wpOwotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2Vy
dGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCiAv
LyBUZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHJ1bm5pbmcgYSB0ZXN0LgogV0tf
RVhQT1JUIHZvaWQgV0tDb250ZXh0Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhXS0NvbnRleHRSZWYg
Y29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dl
YnNpdGVEYXRhU3RvcmVSZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmLmNwcAppbmRleCA2M2ZhMjg0YTZlYzdlYTJkZTBhODFkMjE3MDVl
MDlmMTg4OGU3Yjc4Li5jNGQwNmE0MTgxMTJjN2Q0NmE2NGZmM2I0ZjI0M2U2OTIyMWYwOTdmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3Rv
cmVSZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURh
dGFTdG9yZVJlZi5jcHAKQEAgLTY5LDYgKzY5LDI2IEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBX
S1dlYnNpdGVEYXRhU3RvcmVDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihXS1dlYnNpdGVEYXRhU3Rv
CiAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y3Jl
YXRlKCpXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKSwgc2Vzc2lvbklEKS5sZWFrUmVmKCkp
OwogfQogCit2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSkKK3sKKyAgICBXZWJLaXQ6OnRvSW1wbChkYXRh
U3RvcmUpLT5jbGVhckNhY2hlZENyZWRlbnRpYWxzKCk7Cit9CisKK3ZvaWQgV0tXZWJzaXRlRGF0
YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFT
dG9yZSkKK3sKKyAgICBXZWJLaXQ6OnRvSW1wbChkYXRhU3RvcmUpLT50ZXJtaW5hdGVOZXR3b3Jr
UHJvY2VzcygpOworfQorCitib29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFN0b3JhZ2VBY2Nlc3NB
UElFbmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpCit7CisgICAgcmV0dXJu
IFdlYktpdDo6dG9JbXBsKGRhdGFTdG9yZSktPnN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKCk7Cit9
CisKK3ZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSwgYm9vbCBlbmFibGVkKQoreworICAgIFdlYktp
dDo6dG9JbXBsKGRhdGFTdG9yZSktPnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGVuYWJsZWQp
OworfQorCiB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVJlbW92ZUlUUERhdGFGb3JEb21haW4oV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgV0tTdHJpbmdSZWYgaG9zdCwgdm9pZCog
Y29udGV4dCwgV0tXZWJzaXRlRGF0YVN0b3JlUmVtb3ZlSVRQRGF0YUZvckRvbWFpbkZ1bmN0aW9u
IGNhbGxiYWNrKQogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVS
ZWYuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJl
Zi5oCmluZGV4IGViODJmYWQ0NDY4ZjZmMzQ3YjBiZDhkNDYyNGZjNWFkNjVkNzk5OTcuLmQ0NzMz
MDk2MmM3NmQ5ZTM1ZDhiYTBiOWRlY2UxNzU1N2MwY2NhMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCkBAIC00Myw2
ICs0MywxMiBAQCBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLV2Vic2l0ZURhdGFT
dG9yZUNyZWF0ZVdpdGhDb25maWd1cmF0aW9uKFdLV2VicwogCiBXS19FWFBPUlQgV0tIVFRQQ29v
a2llU3RvcmVSZWYgV0tXZWJzaXRlRGF0YVN0b3JlR2V0SFRUUENvb2tpZVN0b3JlKFdLV2Vic2l0
ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogCitXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVE
YXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRh
U3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29y
a1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSk7CisKK1dLX0VYUE9SVCBi
b29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKFdLV2Vic2l0
ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0
b3JlU2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFT
dG9yZSwgYm9vbCBlbmFibGVkKTsKKwogV0tfRVhQT1JUIGJvb2wgV0tXZWJzaXRlRGF0YVN0b3Jl
R2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRh
dGFTdG9yZVJlZik7CiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVm
LCBib29sIGVuYWJsZSk7CiB0eXBlZGVmIHZvaWQgKCpXS1dlYnNpdGVEYXRhU3RvcmVTdGF0aXN0
aWNzRXBoZW1lcmFsRnVuY3Rpb24pKGJvb2wgaXNFcGhlbWVyYWwsIHZvaWQqIGZ1bmN0aW9uQ29u
dGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQ
cm9jZXNzUG9vbC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nl
c3NQb29sLm1tCmluZGV4IGFjNzI4MGQ1ZTEwNTRhMjFkNzA1NjgzNDMxMmY4MTk2NDAxYzgzZTIu
LjQxNzljMDQ1NzI0YWQ5Y2JiMmQ0YTM5ZTE4OTBkMTM5NWJmMjdjMTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCkBAIC00MDcs
MjggKzQwNyw2IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlv
bmFyeShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAgICAgX3Byb2Nlc3NQb29sLT5j
bGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIH0KIAotLSAodm9pZClfdGVybWluYXRlTmV0d29ya1By
b2Nlc3MKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci19
Ci0KLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseQotewot
ICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5
Rm9yVGVzdGluZygpOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9T
dXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgX3Byb2Nlc3NQ
b29sLT5zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhbY29tcGxl
dGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSB7Ci0gICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpX3NlbmROZXR3b3Jr
UHJvY2Vzc0RpZFJlc3VtZQotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNz
RGlkUmVzdW1lKCk7Ci19Ci0KIC0gKHZvaWQpX3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzCiB7CiAg
ICAgX3Byb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwpAQCAtNDM2LDEyICs0
MTQsMTIgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5
KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMKIAogLSAodm9pZClfc2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzczooQk9PTCl1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzCiB7Ci0gICAgX3Byb2Nlc3NQb29sLT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiB9CiAKIC0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50
aWZpZXIKIHsKLSAgICByZXR1cm4gX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIoKTsKKyAgICByZXR1cm4gMDsKIH0KIAogLSAocGlkX3QpX3ByZXdhcm1lZFByb2Nlc3NJZGVu
dGlmaWVyCkBAIC01NjIsMjggKzU0MCwxMSBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2ll
c0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAg
IF9wcm9jZXNzUG9vbC0+c2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxl
ZCk7CiB9CiAKLS0gKEJPT0wpX2lzU3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQKLXsKLSAgICByZXR1
cm4gX3Byb2Nlc3NQb29sLT5zdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCgpOwotfQotCi0tICh2b2lk
KV9zZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZDooQk9PTCllbmFibGVkCi17Ci0gICAgX3Byb2Nl
c3NQb29sLT5zZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZChlbmFibGVkKTsKLX0KLQogLSAodm9p
ZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kCiB7CiAgICAgX3By
b2Nlc3NQb29sLT5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOwogfQogCi0t
ICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wp
YWxsb3dzCi17Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIF9wcm9jZXNzUG9vbC0+
c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5k
aWYKLX0KLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAtIChpZCA8X1dLR2VvbG9jYXRpb25D
b3JlTG9jYXRpb25Qcm92aWRlcj4pX2NvcmVMb2NhdGlvblByb3ZpZGVyCiB7CkBAIC02MTYsMTEg
KzU3Nyw2IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFy
eShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAgICAgfSk7CiB9CiAKLS0gKEJPT0wp
X25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0
bGVtZW50Ci17Ci0gICAgcmV0dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3RpbmcoZW50aXRsZW1lbnQpOwotfQotCiAtICh2b2lkKV9jbGVhclBlcm1h
bmVudENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNwYWNlOihOU1VSTFByb3RlY3Rpb25TcGFjZSAq
KXByb3RlY3Rpb25TcGFjZQogewogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJQZXJtYW5lbnRDcmVk
ZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZShXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UocHJvdGVj
dGlvblNwYWNlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oCmluZGV4IDJiNTEzMDIyZTY1YzhmYTUyZGEwYTNl
ODNkZGZmNjI5YzllNTQ2YzUuLmFiNWM0NDI5ZDdkMjRjNDU3YWI0MzJlN2U1NWY1ZGU5NGRmMzY3
MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nl
c3NQb29sUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sUHJpdmF0ZS5oCkBAIC04NywxMCArODcsNiBAQAogLSAoX1dLRG93bmxvYWQg
KilfcmVzdW1lRG93bmxvYWRGcm9tRGF0YTooTlNEYXRhICopcmVzdW1lRGF0YSB3ZWJzaXRlRGF0
YVN0b3JlOihXS1dlYnNpdGVEYXRhU3RvcmUgKilkYXRhU3RvcmUgIHBhdGg6KE5TU3RyaW5nICop
cGF0aCBvcmlnaW5hdGluZ1dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAogLy8gVGVzdCBvbmx5
LiBTaG91bGQgYmUgY2FsbGVkIG9ubHkgd2hpbGUgbm8gd2ViIGNvbnRlbnQgcHJvY2Vzc2VzIGFy
ZSBydW5uaW5nLgotLSAodm9pZClfdGVybWluYXRlTmV0d29ya1Byb2Nlc3MgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7Ci0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nl
c3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Ci0tICh2b2lk
KV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7Ci0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAtICh2
b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29ya2VycyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0
KSwgaW9zKDEyLjApKTsKIAogLy8gVGVzdCBvbmx5LgpAQCAtMTIyLDE0ICsxMTgsMTEgQEAKIC0g
KHZvaWQpX3ByZWNvbm5lY3RUb1NlcnZlcjooTlNVUkwgKilzZXJ2ZXJVUkwgV0tfQVBJX0RFUFJF
Q0FURURfV0lUSF9SRVBMQUNFTUVOVCgiV0tXZWJWaWV3Ll9wcmVjb25uZWN0VG9TZXJ2ZXIiLCBt
YWNvcygxMC4xMy40LCBXS19NQUNfVEJBKSwgaW9zKDExLjMsIFdLX0lPU19UQkEpKTsKIAogLy8g
VGVzdCBvbmx5LgotLSAodm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNl
V29ya2VyOihCT09MKWFsbG93cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3Mo
MTEuMykpOwogLSAodm9pZClfZ2V0QWN0aXZlUGFnZXNPcmlnaW5zSW5XZWJQcm9jZXNzRm9yVGVz
dGluZzoocGlkX3QpcGlkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TQXJyYXk8TlNTdHJp
bmcgKj4gKikpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40
KSwgaW9zKDEyLjIpKTsKLS0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JU
ZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTQuNCksIGlvcygxMi4yKSk7CiAtICh2b2lkKV9jbGVhclBlcm1hbmVudENyZWRlbnRpYWxzRm9y
UHJvdGVjdGlvblNwYWNlOihOU1VSTFByb3RlY3Rpb25TcGFjZSAqKXByb3RlY3Rpb25TcGFjZSBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIC0gKHZvaWQpX2FsbG93
QW55VExTQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBnZXR0ZXI9X2lzQ29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQsIHNldHRlcj1fc2V0
Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQ6KSBCT09MIF9jb29raWVTdG9yYWdlUGFy
dGl0aW9uaW5nRW5hYmxlZCBXS19BUElfREVQUkVDQVRFRCgiUGFydGl0aW9uZWQgY29va2llcyBh
cmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCIsIG1hY29zKDEwLjEyLjMsIDEwLjE0LjQpLCBpb3MoMTAu
MywgMTIuMikpOwotQHByb3BlcnR5IChub25hdG9taWMsIGdldHRlcj1faXNTdG9yYWdlQWNjZXNz
QVBJRW5hYmxlZCwgc2V0dGVyPV9zZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZDopIEJPT0wgX3N0
b3JhZ2VBY2Nlc3NBUElFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlv
cygxMS4zKSk7CiAtICh2b2lkKV9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tn
cm91bmQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIC8vIFRl
c3Qgb25seS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYnNpdGVEYXRhU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJzaXRlRGF0YVN0b3JlLm1tCmluZGV4IGVmOTBlOGJmNDg1MTNkYTcyMjljZTlmZDIyZjA3
ZjUxZmU1MTQ4YWUuLmY1OTlkZjc5ZGExOGI1YjQyOTJjMzc1NjQxM2JmZTg5NDg2YTg5OGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRh
U3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0
ZURhdGFTdG9yZS5tbQpAQCAtNjE3LDYgKzYxNywxMSBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6
V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNv
cgogICAgIH0pOwogfQogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9y
VGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAoreworICAgIHJldHVybiBfd2Vic2l0ZURh
dGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoZW50aXRsZW1l
bnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVnYXRlPilfZGVsZWdhdGUK
IHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdldCgpLmdldCgpOwpAQCAtNjYzLDQgKzY2OCwyNyBA
QCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFS
ZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogI2VuZGlmCiB9CiAKKy0gKHZvaWQpX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnRlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzKCk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1
c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfd2Vic2l0ZURh
dGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2Nv
bXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworfQorCistICh2b2lkKV9zZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9y
ZS0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOwor
Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQoreworICAgIF93ZWJz
aXRlRGF0YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKK30KKwogQGVuZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURh
dGFTdG9yZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKaW5kZXggZmNjYzZiNTk3ZWYzNzdlN2MwNGQ5MmRiNjcw
YmQ0MTM1ZDg2MTFmNy4uNjgzZWE5Njc0YmU2NDkxYzkzM2NlZTMwODc0YmY1ZjQwNWFhZTJjZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURh
dGFTdG9yZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCkBAIC04Myw5ICs4MywxNiBAQCB0eXBlZGVmIE5T
X09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0ZURhdGFTdG9yZUZldGNoT3B0aW9ucykgewog
CiAtICh2b2lkKV9yZW5hbWVPcmlnaW46KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKiluZXdO
YW1lIGZvckRhdGFPZlR5cGVzOihOU1NldDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJPT0wp
X25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0
bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSk7CisKIEBwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYnNp
dGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2RlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTUpLCBpb3MoMTMuMCkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBf
V0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0gKHZv
aWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVw
YXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJv
Y2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOworCiBAZW5kCiAKIE5TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNw
cAppbmRleCAxZWU3M2ViYzBlYTAzNmY4NmIzZmU5NDQxNDkwNzJlNmFjNGRjNzY3Li5mYjk4ZDA1
OTBjOWFkMjgyMzVkNzExYjdjYWFjOWJjNTVjOWE2NDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcApAQCAt
NjQsOCArNjQsNyBAQCBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKIAogICAg
IH5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUoKQogICAgIHsKLSAgICAgICAgZm9yIChhdXRv
KiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhk
YXRhTWFuYWdlcikpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklEKCks
IG51bGxwdHIpOworICAgICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNl
dENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOwogICAgIH0KIAog
ICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbmFnZXI7CkBAIC0xMzksMTEgKzEz
OCw5IEBAIFdlYktpdENvb2tpZU1hbmFnZXIqIHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUoV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuCiB7CiAgICAgV2ViS2l0Q29va2llTWFuYWdl
ciogbWFuYWdlciA9IFdFQktJVF9DT09LSUVfTUFOQUdFUihnX29iamVjdF9uZXcoV0VCS0lUX1RZ
UEVfQ09PS0lFX01BTkFHRVIsIG51bGxwdHIpKTsKICAgICBtYW5hZ2VyLT5wcml2LT5kYXRhTWFu
YWdlciA9IGRhdGFNYW5hZ2VyOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRX
ZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFn
ZXIpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQ
cm94eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhtYW5hZ2VyLT5wcml2LT5zZXNzaW9u
SUQoKSwgW21hbmFnZXJdIHsKLSAgICAgICAgICAgIGdfc2lnbmFsX2VtaXQobWFuYWdlciwgc2ln
bmFsc1tDSEFOR0VEXSwgMCk7Ci0gICAgICAgIH0pOwotICAgIH0KKyAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnNpbmdsZXRvbigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+
cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2lnbmFsX2VtaXQobWFu
YWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1hbmFnZXI7
CiB9CiAKQEAgLTE3Myw4ICsxNzAsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRf
cGVyc2lzdGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsCiAgICAgaWYg
KHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xz
KG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFn
ZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJz
aXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
c2luZ2xldG9uKCkuc2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6
OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0
b3JhZ2UpKTsKIH0KIAogLyoqCkBAIC0xOTIsOCArMTg4LDcgQEAgdm9pZCB3ZWJraXRfY29va2ll
X21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3koV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwg
V2ViS2kKIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUiht
YW5hZ2VyKSk7CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5z
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB0b0hU
VFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0pOworICAgIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2Vy
LT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtd
KCkgeyB9KTsKIH0KIAogLyoqCkBAIC0yMjQsNyArMjE5LDcgQEAgdm9pZCB3ZWJraXRfY29va2ll
X21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3koV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwg
R0NhbmMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb2Nlc3NQb29sc1swXS0+c3Vw
cGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2Vi
Q29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsKKyAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnNpbmdsZXRvbigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+
cHJpdi0+c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENv
b2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFz
ay5nZXQoKSwgdG9XZWJLaXRDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7CiB9
CkBAIC0yNjksMTEgKzI2NCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29r
aWUoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3JldHVy
bl9pZl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVm
KGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwot
Ci0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRl
IGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFj
Y2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAg
Y29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJv
Y2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNb
MF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1hbmFn
ZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNr
ID0gV1RGTW92ZSh0YXNrKV0oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0
b24oKS5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNv
b2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFz
a19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KQEAgLTMyMCwx
MSArMzExLDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMoV2ViS2l0
Q29va2llTWFuYWdlciogbWFuYWdlciwgY29uc3QgZ2NoYXIKICAgICBnX3JldHVybl9pZl9mYWls
KHVyaSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXco
bWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29v
a2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9u
IGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZy
b20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYg
cHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1h
bmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1l
bnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNl
c3Npb25JRCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RG
TW92ZSh0YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKKyAg
ICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmdldENvb2tpZXMobWFuYWdlci0+
cHJpdi0+c2Vzc2lvbklEKCksIFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rh
c2sgPSBXVEZNb3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2ll
cykgewogICAgICAgICBHTGlzdCogY29va2llc0xpc3QgPSBudWxscHRyOwogICAgICAgICBmb3Ig
KGF1dG8mIGNvb2tpZSA6IGNvb2tpZXMpCiAgICAgICAgICAgICBjb29raWVzTGlzdCA9IGdfbGlz
dF9wcmVwZW5kKGNvb2tpZXNMaXN0LCBjb29raWUudG9Tb3VwQ29va2llKCkpOwpAQCAtMzc4LDEx
ICszNjUsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llKFdlYktp
dENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIFNvdXBDb29raQogICAgIGdfcmV0dXJuX2lmX2ZhaWwo
Y29va2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25l
dyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBD
b29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ug
b24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0g
ZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRv
JiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMo
bWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxl
bWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmRlbGV0ZUNvb2tpZShtYW5hZ2VyLT5wcml2
LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RGTW92ZSh0
YXNrKV0oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5kZWxldGVD
b29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUp
LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xl
YW4odGFzay5nZXQoKSwgVFJVRSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IGZiMTJiMjE3
Nzc0ZjM5N2U1NmM3ZWYzN2QwMzQ5Y2Q1YzIwYTU0MmMuLmEyMjFiZTdkMzY2ZjhmM2QzNzZmMDFk
OTliNmUyNzk3NmRmNTBkYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCkBAIC00MDMsNyArNDAzLDYgQEAgc3RhdGlj
IHZvaWQgd2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAg
ICAgcHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9uZXcoImxvY2FsLXN0b3JhZ2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9y
YWdlRGlyZWN0b3J5LmRhdGEoKSwgbnVsbHB0cikpOwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wg
PSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKGNvbmZpZ3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nl
c3NQb29sLT5zZXRQcmltYXJ5RGF0YVN0b3JlKHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERh
dGFTdG9yZShwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9j
ZXNzUG9vbC0+c2V0VXNlck1lc3NhZ2VIYW5kbGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYm
IG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpIHsKICAgICAgICAgLy8gU2luayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAg
ICBHUmVmUHRyPFdlYktpdFVzZXJNZXNzYWdlPiB1c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNz
YWdlQ3JlYXRlKFdURk1vdmUobWVzc2FnZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21h
dGlvblNlc3Npb24uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5jcHAKaW5kZXggNGFiNDdmZmY1OTExZWVjMzdlNTZiYzViYmIzMjll
YmFlYTdkMzg2NS4uMzAwNmY0ZmFlNmM0M2MyNmJmNDA4MjJiNmRlODY4ZWYyZTAyY2ZiYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9u
U2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5jcHAKQEAgLTEzOTIsOCArMTM5Miw4IEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uCiAKICAgICBjb29raWUuaHR0cE9ubHkgPSAqaHR0cE9ubHk7CiAKLSAgICBXZWJD
b29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVt
ZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29r
aWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2Nh
bGxiYWNrXSgpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIgPSBw
YWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7
CisgICAgY29va2llTWFuYWdlci5zZXRDb29raWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5z
ZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2NhbGxiYWNrXSgpIHsKICAgICAgICAgY2FsbGJhY2st
PnNlbmRTdWNjZXNzKCk7CiAgICAgfSk7CiB9CkBAIC0xNDA5LDggKzE0MDksOCBAQCBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpk
ZWxldGVBbGxDb29raWVzKAogCiAgICAgU3RyaW5nIGhvc3QgPSBhY3RpdmVVUkwuaG9zdCgpLnRv
U3RyaW5nKCk7CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBt
X3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBj
b29raWVNYW5hZ2VyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRh
U3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVl
ZGVkKGhvc3QpIH0pOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlciA9
IHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIo
KTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vi
c2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJl
Zml4SWZOZWVkZWQoaG9zdCkgfSk7CiAKICAgICByZXR1cm4geyB9OwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaAppbmRleCA0MWMwYTBmYmY1
MDZlZmExNDA4YmNlZjlhZjhhOTBiODVhMWFkMDhhLi40ZjM5OGI1MzBmNjA4NTc1Yzk2N2I4M2M3
NGZhMmY0MzI4ZjZjZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhp
bGlhcnlQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlh
cnlQcm9jZXNzUHJveHkuaApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+
QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KCk7CiAKICAgICB2b2lkIGNvbm5lY3QoKTsKLSAgICB2b2lk
IHRlcm1pbmF0ZSgpOworICAgIHZpcnR1YWwgdm9pZCB0ZXJtaW5hdGUoKTsKIAogICAgIHZpcnR1
YWwgUHJvY2Vzc1Rocm90dGxlciYgdGhyb3R0bGVyKCkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudC5oCmluZGV4IGRiZTQ0Zjk1OTQxMDUxMTIxNTEyOGQyOWQyMTRlZWUwNzRh
YWY4NGMuLjNjNDI4NzJlMTVlMDNmNWFlNjEzM2JjNWE5MmFjMmFjODE4M2RmNDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oCkBAIC00MCwxMiArNDAsMTUgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OwogCisv
LyBGSVhNRTogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IGlzIHVubmVlZGVkIG5vdy4KKy8v
IFRoaXMgaXMganVzdCBhIGxlZnRvdmVyIG9uIENvY29hIHBsYXRmb3JtcyB3ZSBhcmUgdHJ5aW5n
IHRvIG1vdmUgYXdheSBmcm9tIGFuZCBkb2VzIG5vdCBuZWVkIGFuIEFQSSBhYnN0cmFjdGlvbi4K
IGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCBmaW5hbCA6IHB1YmxpYyBB
UEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCB7Ci1wcml2YXRlOgorcHVibGljOgorICAg
IHN0YXRpYyBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQmIHNpbmdsZXRvbigpOwog
ICAgIHZvaWQgc3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Jiwg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jikg
ZmluYWw7CiAgICAgdm9pZCBzdG9wTG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQ
cm94eSYsIExlZ2FjeUN1c3RvbVByb3RvY29sSUQpIGZpbmFsOwogICAgIHZvaWQgaW52YWxpZGF0
ZShMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYpIGZpbmFsOwotCitwcml2YXRlOgog
ICAgIEhhc2hNYXA8TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgUmV0YWluUHRyPFdLQ3VzdG9tUHJv
dG9jb2xMb2FkZXI+PiBtX2xvYWRlck1hcDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudC5tbQppbmRleCAxNTEyMjkwNDVmMTNlOWNkZGJlMDkxZTYyN2JmYTFmZTIwNmRlMjg5
Li4xNGQwYjZiZDFkNmU1NTU5ZWM3ZTZiMWEyZmJhODMxYmIzN2FiN2JkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lm1tCkBAIC0xMzksNiArMTM5LDEyIEBACiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitMZWdhY3lDdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQmIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDo6c2luZ2xl
dG9uKCkKK3sKKyAgICBOZXZlckRlc3Ryb3llZDxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ+IGNsaWVudDsKKyAgICByZXR1cm4gY2xpZW50OworfQorCiB2b2lkIExlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudDo6c3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5JiBtYW5hZ2VyLCBXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3Vz
dG9tUHJvdG9jb2xJRCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBjb3JlUmVxdWVzdCkKIHsKICAg
ICBOU1VSTFJlcXVlc3QgKnJlcXVlc3QgPSBjb3JlUmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJv
ZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KaW5kZXggZTkzYzYy
MTU0YzhkZTE2ZDU3ZjY5ODdiMTM1MTZjYzFlNzc1ZDI3ZC4uMTM2NzBlMmQ4MGIwMTg0NzAzNWMx
OWRmODkyMTFmYzc1NTU2YzY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCkBAIC0xMzQsOCArMTM0LDkgQEAgc3RhdGlj
IHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpCiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCkKIHsKLSAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2V0UHJvY2Vzc1N1cHByZXNzaW9u
RW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpOworICAgIFdlYnNpdGVEYXRhU3Rv
cmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtlbmFibGVkID0gcHJvY2Vzc1N1cHByZXNzaW9u
RW5hYmxlZCgpXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFT
dG9yZS5uZXR3b3JrUHJvY2VzcygpLnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoZW5hYmxl
ZCk7CisgICAgfSk7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBpZiAo
IW1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpKQpAQCAt
MTY2LDggKzE2Nyw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZSgp
CiAgICAgaWYgKCFbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9y
S2V5OkAiV2ViS2l0U3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIiXSkKICAgICAgICAgaW5z
dGFsbE1lbW9yeVByZXNzdXJlSGFuZGxlcigpOwogCi0gICAgc2V0TGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50PigpKTsKLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRB
TFlTVCkKICAgICBpZiAoIV9NR0NhY2hlVmFsaWQoKSkgewogICAgICAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFV
TFQsIDApLCBeewpAQCAtNDkzLDIyICs0OTIsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0
Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYQog
CiAgICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJk
VXNlckRlZmF1bHRzXTsKIAotICAgIHsKLSAgICAgICAgYm9vbCBpc1NhZmFyaSA9IGZhbHNlOwot
ICAgICAgICBib29sIGlzTWluaUJyb3dzZXIgPSBmYWxzZTsKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgICAgICBpc1NhZmFyaSA9IFdlYkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01vYmls
ZVNhZmFyaSgpOwotICAgICAgICBpc01pbmlCcm93c2VyID0gV2ViQ29yZTo6SU9TQXBwbGljYXRp
b246OmlzTWluaUJyb3dzZXIoKTsKLSNlbGlmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgaXNTYWZh
cmkgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5p
QnJvd3NlciA9IFdlYkNvcmU6Ok1hY0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZW5k
aWYKLSAgICAgICAgaWYgKGlzU2FmYXJpIHx8IGlzTWluaUJyb3dzZXIpIHsKLSAgICAgICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLmh0dHBQcm94eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNT
dHJpbmcgKilXZWJLaXQySFRUUFByb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
Lmh0dHBzUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5n
ICopV2ViS2l0MkhUVFBTUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICB9Ci0gICAgfQotCiAg
ICAgcGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dCA9IGFkb3B0Q0YoX0NGTmV0d29ya0NvcHlB
VFNDb250ZXh0KCkpOwogCiAgICAgcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNz
dXJlSGFuZGxlciA9IFtkZWZhdWx0cyBib29sRm9yS2V5OldlYktpdFN1cHByZXNzTWVtb3J5UHJl
c3N1cmVIYW5kbGVyRGVmYXVsdHNLZXldOwpAQCAtNTE5LDE3ICs1MDIsMTEgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmEKICAgICBwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVu
dGlmaWVyID0gaWRlbnRpZnlpbmdEYXRhRnJvbUNvb2tpZVN0b3JhZ2UoW1tOU0hUVFBDb29raWVT
dG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBfY29va2llU3RvcmFnZV0pOwogI2VuZGlm
CiAKLSAgICBwYXJhbWV0ZXJzLnN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkID0gc3RvcmFnZUFjY2Vz
c0FQSUVuYWJsZWQoKTsKLQogICAgIE5TTnVtYmVyICpkYXRhYmFzZUVuYWJsZWRWYWx1ZSA9IFtk
ZWZhdWx0cyBvYmplY3RGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5h
bERlYnVnJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6aXNJVFBEYXRhYmFzZUVuYWJsZWRLZXkoKS5j
cmVhdGVDRlN0cmluZygpLmdldCgpXV07CiAgICAgaWYgKGRhdGFiYXNlRW5hYmxlZFZhbHVlKQog
ICAgICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gZGF0YWJhc2VFbmFi
bGVkVmFsdWUuYm9vbFZhbHVlOwotICAgIGVsc2UKLSAgICAgICAgcGFyYW1ldGVycy5zaG91bGRF
bmFibGVJVFBEYXRhYmFzZSA9IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5pc0lU
UERhdGFiYXNlRW5hYmxlZCgpOwogCiAgICAgcGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmli
dXRpb25EZWJ1Z01vZGUgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIkV4cGVyaW1lbnRhbCVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmFkQ2xpY2tBdHRy
aWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07Ci0K
LSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24g
PSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1JbnZhbGlkYXRlQ29udGV4dCgpCkBAIC02MDgsMTEg
KzU4NSw2IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQo
KSBjb25zdAogICAgIHJldHVybiAhbV91c2VyT2JzZXJ2YWJsZVBhZ2VDb3VudGVyLnZhbHVlKCkg
JiYgIW1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpOwog
fQogCi1ib29sIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9y
VGVzdGluZyhjb25zdCBTdHJpbmcmIGVudGl0bGVtZW50KQotewotICAgIHJldHVybiBXVEY6Omhh
c0VudGl0bGVtZW50KGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpLT54cGNDb25u
ZWN0aW9uKCksIGVudGl0bGVtZW50LnV0ZjgoKS5kYXRhKCkpOwotfQotCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogZmxvYXQgV2ViUHJvY2Vzc1Bv
b2w6OmRpc3BsYXlCcmlnaHRuZXNzKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAppbmRleCBjNWRlNGU3ZDBmNTkxOTRmNDNh
MDIzYjA4OWUzNzJjNThjZjhlZTA2Li5mN2NmZjg1MmYwYmE2ZDAxNTUxMTY1ZGQ4YTlmN2Q1NzYz
YjAwN2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkUHJveHkuY3BwCkBAIC03NSw4ICs3NSw4IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6Y2Fu
Y2VsKCkKICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CisgICAgaWYg
KG1fZGF0YVN0b3JlKQorICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwg
MCk7CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6aW52YWxpZGF0ZSgpCkBAIC0xMDMsMTUgKzEw
MywxMyBAQCBXZWJQYWdlUHJveHkqIERvd25sb2FkUHJveHk6Om9yaWdpbmF0aW5nUGFnZSgpIGNv
bnN0CiAjaWYgUExBVEZPUk0oQ09DT0EpCiB2b2lkIERvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9n
cmVzcyhjb25zdCBVUkwmIFVSTCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYg
KCFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOwotICAgICAgICBib29sIGNyZWF0ZWRTYW5kYm94
RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKFVSTC5maWxlU3lzdGVt
UGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIGhhbmRsZSk7Ci0gICAg
ICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94
RXh0ZW5zaW9uKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9ncmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFu
ZGxlKSwgMCk7Ci0gICAgfQorICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7Cisg
ICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZFdyaXRlLCBoYW5kbGUpOworICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNp
b24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsKKyAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2FkUHJv
Z3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwogfQogI2VuZGlmIC8vIFBMQVRG
T1JNKENPQ09BKQogCkBAIC0xMzEsMTEgKzEyOSwxMCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRp
ZFN0YXJ0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBzdWdn
ZQogCiB2b2lkIERvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCB1aW50
NjRfdCBjaGFsbGVuZ2VJRCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFt
X3Byb2Nlc3NQb29sIHx8ICFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQ
cm94eTo6Y3JlYXRlKFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBjaGFsbGVuZ2VJ
RCwgbWFrZVJlZigqbV9wcm9jZXNzUG9vbC0+bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkp
LCBudWxscHRyKTsKLQorICAgIGF1dG8gYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk6OmNyZWF0ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKSwgY2hhbGxlbmdlSUQsIG1ha2VSZWYoKm1fZGF0YVN0b3JlLT5uZXR3b3JrUHJv
Y2VzcygpLmNvbm5lY3Rpb24oKSksIG51bGxwdHIpOwogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25s
b2FkQ2xpZW50KCkuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCp0aGlzLCBhdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmdldCgpKTsKIH0KIApAQCAtMTQ2LDE1ICsxNDMsMTAg
QEAgdm9pZCBEb3dubG9hZFByb3h5Ojp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYg
cHJvcG9zZWRSZXF1ZXN0LCBjb25zdCBSZXMKIAogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2Fk
Q2xpZW50KCkud2lsbFNlbmRSZXF1ZXN0KCp0aGlzLCBXVEZNb3ZlKHByb3Bvc2VkUmVxdWVzdCks
IHJlZGlyZWN0UmVzcG9uc2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyld
KFJlc291cmNlUmVxdWVzdCYmIG5ld1JlcXVlc3QpIHsKICAgICAgICAgbV9yZWRpcmVjdENoYWlu
LmFwcGVuZChuZXdSZXF1ZXN0LnVybCgpKTsKLQotICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMt
Pm1fcHJvY2Vzc1Bvb2wpCisgICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9kYXRhU3RvcmUp
CiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYXV0byogbmV0d29ya1Byb2Nlc3NQcm94
eSA9IHByb3RlY3RlZFRoaXMtPm1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCk7Ci0gICAg
ICAgIGlmICghbmV0d29ya1Byb2Nlc3NQcm94eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
Q29udGludWVXaWxsU2VuZFJlcXVlc3QocHJvdGVjdGVkVGhpcy0+bV9kb3dubG9hZElELCBuZXdS
ZXF1ZXN0KSwgMCk7CisgICAgICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0
ZWRUaGlzLT5tX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgbmV0d29ya1By
b2Nlc3NQcm94eS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVXaWxsU2Vu
ZFJlcXVlc3QocHJvdGVjdGVkVGhpcy0+bV9kb3dubG9hZElELCBuZXdSZXF1ZXN0KSwgMCk7CiAg
ICAgfSk7CiB9CiAKQEAgLTE3OSwxNiArMTcxLDE0IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGVj
aWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyhEb3dubG9hZElEIGRvd25s
CiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9w
cm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0
ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVk
RmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBkb3dubG9hZElEID0gZG93bmxvYWRJRF0gKEFsbG93T3ZlcndyaXRlIGFsbG93
T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsKKyAgICBtX3Byb2Nlc3NQb29sLT5kb3du
bG9hZENsaWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKCp0aGlz
LCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0
ZWRGaWxlbmFtZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRvd25s
b2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9u
KSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlOwogICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGRlc3RpbmF0aW9uLCBTYW5kYm94RXh0ZW5zaW9u
OjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgICAgIGlm
ICghbV9wcm9jZXNzUG9vbCkKKyAgICAgICAgaWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERl
c3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxl
LCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CisgICAgICAgIG1f
ZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRl
c3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxv
d092ZXJ3cml0ZTo6WWVzKSwgMCk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAppbmRleCA3NmEw
NzE1N2I1OTFhYWNlNTBmMTVkMTUyNWRiY2ZiOGM2YTRiYmM4Li5kNzRhOGZhNmM2NGM4ODYzNWY5
ZWI3NWNhNzNlNzBmZDk0NmNhMDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCkBAIC00NCw3ICs0NCw3IEBACiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogRG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcChO
ZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQotICAgIDogbV9wcm9jZXNzKG1ha2VXZWFrUHRy
KHByb2Nlc3MpKQorICAgIDogbV9wcm9jZXNzKHByb2Nlc3MpCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgLCBtX3Nob3VsZFRha2VBc3NlcnRpb24oV1RGOjpwcm9jZXNzSGFzRW50aXRsZW1lbnQo
ImNvbS5hcHBsZS5tdWx0aXRhc2tpbmcuc3lzdGVtYXBwYXNzZXJ0aW9ucyIpKQogI2VuZGlmCkBA
IC03MCwxNCArNzAsMTIgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9ybURlc3Ryb3ko
KQogCiB2b2lkIERvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5k
KCkKIHsKLSAgICBpZiAobV9wcm9jZXNzKQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsK
KyAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9u
RGlkRW50ZXJCYWNrZ3JvdW5kKCksIDApOwogfQogCiB2b2lkIERvd25sb2FkUHJveHlNYXA6OmFw
cGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAg
ICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRp
b25XaWxsRW50ZXJGb3JlZ3JvdW5kKCksIDApOworICAgIG1fcHJvY2Vzcy5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCksIDApOwog
fQogCiBEb3dubG9hZFByb3h5JiBEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFByb3h5
KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29s
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3Qg
RnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkK
QEAgLTkyLDEzICs5MCwxMiBAQCBEb3dubG9hZFByb3h5JiBEb3dubG9hZFByb3h5TWFwOjpjcmVh
dGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZQogICAgICAgICBtX2Rv
d25sb2FkVUlBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KGdldEN1cnJl
bnRQcm9jZXNzSUQoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBl
OjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAogICAgICAgICBBU1NFUlQoIW1fZG93bmxvYWROZXR3
b3JraW5nQXNzZXJ0aW9uKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9wcm9jZXNzKTsKLSAg
ICAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NB
c3NlcnRpb24+KG1fcHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9h
ZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKKyAgICAg
ICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3Nl
cnRpb24+KG1fcHJvY2Vzcy5wcm9jZXNzSWRlbnRpZmllcigpLCAiV2ViS2l0IGRvd25sb2FkcyJf
cywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVuYm91bmRlZE5ldHdvcmtpbmcpOwogCiAgICAgICAg
IFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiVUlQcm9jZXNzIHRvb2sgJ1dlYktpdCBk
b3dubG9hZHMnIGFzc2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsK
ICAgICB9CiAKLSAgICBtX3Byb2Nlc3MtPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93
bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9h
ZElEKCkuZG93bmxvYWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsKKyAgICBtX3Byb2Nlc3Mu
YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCksIGRvd25s
b2FkUHJveHkuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CkBAIC0xMDks
MTIgKzEwNiw5IEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5pc2hlZChEb3du
bG9hZFByb3h5JiBkb3dubG9hZFByb3h5KQogCiAgICAgUkVMRUFTRV9MT0coTG9hZGluZywgIlJl
bW92aW5nIGRvd25sb2FkICUiIFBSSXU2NCAiIGZyb20gVUlQcm9jZXNzIERvd25sb2FkUHJveHlN
YXAiLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CiAKLSAgICAvLyBUaGUgRG93bmxvYWRQcm94
eSBtYXkgYmUgaG9sZGluZyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIHByb2Nlc3MgcG9vbC4K
LSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZlB0cihtX3Byb2Nlc3MtPnBy
b2Nlc3NQb29sKCkpOwotCiAgICAgQVNTRVJUKG1fZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2Fk
SUQpKTsKIAotICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpE
b3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJ
RCgpKTsKKyAgICBtX3Byb2Nlc3MucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3du
bG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgp
KTsKICAgICBkb3dubG9hZFByb3h5LmludmFsaWRhdGUoKTsKICAgICBtX2Rvd25sb2Fkcy5yZW1v
dmUoZG93bmxvYWRJRCk7CiAKQEAgLTEzMywxNSArMTI3LDEzIEBAIHZvaWQgRG93bmxvYWRQcm94
eU1hcDo6aW52YWxpZGF0ZSgpCiAgICAgZm9yIChjb25zdCBhdXRvJiBkb3dubG9hZCA6IG1fZG93
bmxvYWRzLnZhbHVlcygpKSB7CiAgICAgICAgIGRvd25sb2FkLT5wcm9jZXNzRGlkQ2xvc2UoKTsK
ICAgICAgICAgZG93bmxvYWQtPmludmFsaWRhdGUoKTsKLSAgICAgICAgbV9wcm9jZXNzLT5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgZG93bmxvYWQtPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgICAgICBt
X3Byb2Nlc3MucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgp
KTsKICAgICB9CiAKICAgICBtX2Rvd25sb2Fkcy5jbGVhcigpOwogICAgIG1fZG93bmxvYWRVSUFz
c2VydGlvbiA9IG51bGxwdHI7CiAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBu
dWxscHRyOwogICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiVUlQcm9jZXNzIERv
d25sb2FkUHJveHlNYXAgaW52YWxpZGF0ZWQgLSBSZWxlYXNlZCAnV2ViS2l0IGRvd25sb2Fkcycg
YXNzZXJ0aW9ucyBmb3IgVUlQcm9jZXNzIGFuZCBOZXR3b3JrUHJvY2VzcyIpOwotCi0gICAgbV9w
cm9jZXNzID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAppbmRl
eCAzYmUyMDc5YTBmMmM0YjUzNzA2MmNlMTMwMGUxY2Q1ZGE0NDRmZmJlLi40ZmEwMDFiZDdmYWUx
Y2VkMDI0ZDJiOTFmMjAxNzBmZjk5NDUyOGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKQEAgLTcxLDcgKzcxLDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtQ3JlYXRlKCk7CiAgICAgdm9pZCBwbGF0Zm9ybURl
c3Ryb3koKTsKIAotICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9wcm9jZXNzOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG1fcHJvY2VzczsKICAgICBIYXNoTWFwPERvd25sb2Fk
SUQsIFJlZlB0cjxEb3dubG9hZFByb3h5Pj4gbV9kb3dubG9hZHM7CiAKICAgICBib29sIG1fc2hv
dWxkVGFrZUFzc2VydGlvbiB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3Rv
Y29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKaW5kZXggOGMyM2JiZThj
MDZhMTU5OWNiOWI5MTZhMGIzMmFmYjM3NzgzZjMwNS4uMjA3NGI2YzYzYTIwMmY2Yjc2NDdhYzZh
YzhkNTllOWZkYjU5MDdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcApAQCAtNDQsMTcgKzQ0LDI4IEBAIExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp+TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHkoKQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdGFy
dExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vz
c1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RhcnRM
b2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbigp
LnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShjdXN0b21Qcm90b2NvbElEKTsKKyAgICBVTlVTRURfUEFSQU0ocmVx
dWVzdCk7CisjZW5kaWYKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94
eTo6c3RvcExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElEKQog
ewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKKyNp
ZiBQTEFURk9STShDT0NPQSkKKyAgICBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6
OnNpbmdsZXRvbigpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGN1c3RvbVByb3RvY29sSUQpOworI2VuZGlmCiB9CiAKIHZvaWQg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQogewotICAgIG1f
bmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCgpLmludmFsaWRhdGUoKnRoaXMpOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIExlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDo6c2luZ2xldG9uKCkuaW52YWxpZGF0ZSgqdGhp
cyk7CisjZW5kaWYKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6
d2FzUmVkaXJlY3RlZFRvUmVxdWVzdChMZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1c3RvbVByb3Rv
Y29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmlu
ZGV4IDFiYjllNjc4OTU3OTYxZDQ3ZTM4OTY0YTJmOTJkMTYyZjdkNzQ1MTAuLjdlYzY4ZTFlNWM4
Yzk1YWIwMzU5YThlYzlhYzc2Zjg1NjdjZDQyMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAtMzUsNiAr
MzUsNyBAQAogI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgog
I2VuZGlmCisjaW5jbHVkZSAiTGVnYWN5R2xvYmFsU2V0dGluZ3MuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NvbnRlbnRSdWxlTGlzdE1hbmFnZXJNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKQEAgLTQ4LDYgKzQ5
LDcgQEAKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRl
ICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50UnVs
ZUxpc3QuaCIKKyNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJX
ZWJQYWdlTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJX
ZWJQcm9jZXNzTWVzc2FnZXMuaCIKQEAgLTYwLDYgKzYyLDcgQEAKICNpbmNsdWRlICJXZWJzaXRl
RGF0YVN0b3JlQ2xpZW50LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1JlZ2lzdHJhYmxlRG9tYWluLmg+CisjaW5jbHVkZSA8d3RmL0NhbGxi
YWNrQWdncmVnYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogCiAj
aWYgRU5BQkxFKFNFQ19JVEVNX1NISU0pCkBAIC03MCwyMCArNzMsMTAwIEBACiAjaW5jbHVkZSA8
d3RmL3NwaS9kYXJ3aW4vWFBDU1BJLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQor
I2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oIgorI2VuZGlmCisK
ICNkZWZpbmUgTUVTU0FHRV9DSEVDSyhhc3NlcnRpb24pIE1FU1NBR0VfQ0hFQ0tfQkFTRShhc3Nl
cnRpb24sIGNvbm5lY3Rpb24oKSkKIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAotTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eShX
ZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCi0gICAgOiBBdXhpbGlhcnlQcm9jZXNzUHJveHko
cHJvY2Vzc1Bvb2wuYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCi0gICAgLCBtX3By
b2Nlc3NQb29sKHByb2Nlc3NQb29sKQorc3RhdGljIEhhc2hTZXQ8TmV0d29ya1Byb2Nlc3NQcm94
eSo+JiBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8TmV0d29ya1By
b2Nlc3NQcm94eSo+PiBzZXQ7CisgICAgcmV0dXJuIHNldDsKK30KKworVmVjdG9yPFJlZjxOZXR3
b3JrUHJvY2Vzc1Byb3h5Pj4gTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3Nl
cygpCit7CisgICAgVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzOwor
ICAgIHByb2Nlc3Nlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5ldHdvcmtQcm9jZXNzZXNTZXQo
KS5zaXplKCkpOworICAgIGZvciAoYXV0byogbmV0d29ya1Byb2Nlc3MgOiBuZXR3b3JrUHJvY2Vz
c2VzU2V0KCkpCisgICAgICAgIHByb2Nlc3Nlcy51bmNoZWNrZWRBcHBlbmQoKm5ldHdvcmtQcm9j
ZXNzKTsKKyAgICByZXR1cm4gcHJvY2Vzc2VzOworfQorCisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6dGVybWluYXRlKCkKK3sKKyAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OnRlcm1pbmF0
ZSgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRl
cnNUb05ld1Byb2Nlc3MoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5n
IFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KKyAgICAvLyBXZSBzaG91bGQgcmVtb3Zl
IHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQ
SXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0
Ni4KKyAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7CisgICAgICAgIGNhbGxPbk1haW5SdW5M
b29wQW5kV2FpdChbdGhpc10geworICAgICAgICAgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1Rv
TmV3UHJvY2VzcygpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBOZXR3b3JrUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1Jl
Z2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2lu
Z2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVy
bFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5
VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lz
dGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CisgICAgcGFyYW1ldGVycy51
cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0
dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKKyAgICBwYXJh
bWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdh
Y3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNz
KCkpOworICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpz
aW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7CisgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBXZWJQcm9j
ZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCisgICAgICAg
IHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5k
KHNjaGVtZSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoU3RyaW5nIGNvb2tp
ZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9y
eSgpOyAhY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdl
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOworICAgIGlmIChTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsgIWNvbnRhaW5lckNhY2hlc0RpcmVj
dG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZv
clJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMu
Y29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5n
IHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJl
Y3RvcnkoKTsgIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hF
eHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7CisjZW5kaWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1J
bml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CisgICAgcGFyYW1ldGVycy5kYXRh
U3RvcmVQYXJhbWV0ZXJzID0gV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVyc0Zyb21BbGxTdG9y
ZXMoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bv
b2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKQoreworICAgIGZvciAoYXV0byogcHJv
Y2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAg
aWYgKHByb2Nlc3NQb29sLT5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp
YyBib29sIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpCit7
CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNz
UG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNob3VsZFRha2VVSUJhY2tncm91
bmRBc3NlcnRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHko
KQorICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0
QmFja2dyb3VuZFByaW9yaXR5KCkpCiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xf
TUFOQUdFUikKICAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKnRoaXMpCiAjZW5k
aWYKLSAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBwcm9jZXNzUG9vbC5zaG91bGRUYWtlVUlCYWNr
Z3JvdW5kQXNzZXJ0aW9uKCkpCisgICAgLCBtX3Rocm90dGxlcigqdGhpcywgYW55UHJvY2Vzc1Bv
b2xTaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkpCisgICAgLCBtX2Nvb2tpZU1hbmFn
ZXIoV2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMpKQogewogICAgIGNvbm5lY3Qo
KTsKKyAgICBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgbmV0d29y
a1Byb2Nlc3Nlc1NldCgpLmFkZCh0aGlzKTsKIH0KIAogTmV0d29ya1Byb2Nlc3NQcm94eTo6fk5l
dHdvcmtQcm9jZXNzUHJveHkoKQpAQCAtOTgsNiArMTgxLDcgQEAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkoKQogCiAgICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCkK
ICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5pbnZhbGlkYXRlKCk7CisgICAgbmV0d29ya1By
b2Nlc3Nlc1NldCgpLnJlbW92ZSh0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1bmNo
T3B0aW9ucykKQEAgLTEwNSwxNSArMTg5LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
Z2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jCiAg
ICAgbGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSA9IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5
cGU6Ok5ldHdvcms7CiAgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25z
KGxhdW5jaE9wdGlvbnMpOwogCi0gICAgaWYgKHByb2Nlc3NQb29sKCkuc2hvdWxkTWFrZU5leHRO
ZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bv
b2woKS5zZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmco
ZmFsc2UpOwotICAgICAgICBsYXVuY2hPcHRpb25zLnNob3VsZE1ha2VQcm9jZXNzTGF1bmNoRmFp
bEZvclRlc3RpbmcgPSB0cnVlOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9j
ZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5z
aG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkgeworICAg
ICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVu
Y2hGYWlsRm9yVGVzdGluZyhmYWxzZSk7CisgICAgICAgICAgICBsYXVuY2hPcHRpb25zLnNob3Vs
ZE1ha2VQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB0cnVlOworICAgICAgICB9CiAgICAg
fQotCi0jaWYgUExBVEZPUk0oUExBWVNUQVRJT04pCi0gICAgbGF1bmNoT3B0aW9ucy5wcm9jZXNz
UGF0aCA9IG1fcHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3NQYXRoKCk7Ci0gICAgbGF1bmNoT3B0
aW9ucy51c2VySWQgPSBtX3Byb2Nlc3NQb29sLnVzZXJJZCgpOwotI2VuZGlmCiB9CiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6Y29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbikKQEAgLTE2NiwxMiArMjQ3LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCiAgICAgfQogfQog
Ci1Eb3dubG9hZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5
KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNv
dXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5
KiBvcmlnaW5hdGluZ1BhZ2UpCitEb3dubG9hZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpj
cmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUHJvY2Vz
c1Bvb2wmIHByb2Nlc3NQb29sLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVz
dCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0
aW5nUGFnZSkKIHsKICAgICBpZiAoIW1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3du
bG9hZFByb3h5TWFwID0gbWFrZVVuaXF1ZTxEb3dubG9hZFByb3h5TWFwPigqdGhpcyk7CiAKLSAg
ICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9y
ZSwgbV9wcm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5n
UGFnZSk7CisgICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94
eShkYXRhU3RvcmUsIHByb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5mbywgb3Jp
Z2luYXRpbmdQYWdlKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpmZXRjaFdlYnNp
dGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZT4gZGF0YVR5cGVzLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRp
b25zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChXZWJzaXRlRGF0YSk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0yMzcsOCArMzE4LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpuZXR3
b3JrUHJvY2Vzc0NyYXNoZWQoKQogewogICAgIGNsZWFyQ2FsbGJhY2tTdGF0ZXMoKTsKIAotICAg
IC8vIFRlbGwgdGhlIG5ldHdvcmsgcHJvY2VzcyBtYW5hZ2VyIHRvIGZvcmdldCBhYm91dCB0aGlz
IG5ldHdvcmsgcHJvY2VzcyBwcm94eS4gVGhpcyB3aWxsIGNhdXNlIHVzIHRvIGJlIGRlbGV0ZWQu
Ci0gICAgbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMpOworICAgIGZv
ciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkp
CisgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMpOwogfQog
CiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNsZWFyQ2FsbGJhY2tTdGF0ZXMoKQpAQCAtMjU4
LDkgKzMzOSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlCiAgICAgaWYgKGRpc3BhdGNoTWVz
c2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1f
cHJvY2Vzc1Bvb2wuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQotICAgICAg
ICByZXR1cm47Ci0KICAgICBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2UoY29u
bmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAKQEAgLTI3NCw4ICszNTIsNiBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIElQQwogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZENsb3NlKElQQzo6Q29u
bmVjdGlvbiYpCiB7Ci0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWYobV9w
cm9jZXNzUG9vbCk7Ci0KICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rv
d25sb2FkUHJveHlNYXAtPmludmFsaWRhdGUoKTsKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9Q
Uk9UT0NPTF9NQU5BR0VSKQpAQCAtMzM0LDExICs0MTAsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCBz
ZXNzaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF0b3BPcmlnaW4gfHwgIW1f
cHJvY2Vzc1Bvb2wuaXNTZXJ2aWNlV29ya2VyUGFnZUlEKHBhZ2VJRCkpIHsKLSAgICAgICAgcHJv
Y2Vzc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHNlc3Npb25JRCwgV1RGTW92ZShhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgV2ViUGFnZVBy
b3h5Ojpmb3JNb3N0VmlzaWJsZVdlYlBhZ2VJZkFueShzZXNzaW9uSUQsICp0b3BPcmlnaW4sIFt0
aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSUQsIGF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlID0gV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIG5lZ290aWF0
ZWRMZWdhY3lUTFNdKGF1dG8qIHBhZ2UpIG11dGFibGUgewogICAgICAgICBpZiAoIXdlYWtUaGlz
KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzk1LDExICs0NjYsNiBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqIGxhdW5jaGVy
LCBJUEM6OkNvbgogICAgICAgICBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChtX3Byb2Nlc3NQb29s
LnByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSkKLSAgICAgICAgc2V0UHJvY2Vzc1N1cHByZXNz
aW9uRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgogICAgIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgaWYgKHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiA9IHRoaXMtPmNvbm5lY3Rpb24o
KS0+eHBjQ29ubmVjdGlvbigpKQpAQCAtMTIwOCw3ICsxMjc0LDggQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKFBBTDo6U2Vzc2lv
bklEIHNlc3MKIH0KIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0RG9tYWluc1dpdGhVc2Vy
SW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5z
KQogewotICAgIHByb2Nlc3NQb29sKCkuc2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oV1RG
TW92ZShkb21haW5zKSk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnNldERvbWFpbnNX
aXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHsg
ZG9tYWlucyB9KTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQogCkBAIC0xMjczLDE2ICsxMzQwLDE2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
U3luY0FsbENvb2tpZXMoKQogICAgIH0KIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojph
ZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmIHN0b3JlKQordm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjphZGRTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmIHN0b3JlKQogewotICAgIG1f
c2Vzc2lvbklEcy5hZGQoc3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBtX3Nlc3Npb25JRHMuYWRk
KHN0b3JlLnNlc3Npb25JRCgpKTsKIAogICAgIGlmIChjYW5TZW5kTWVzc2FnZSgpKQotICAgICAg
ICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWRkV2Vic2l0ZURhdGFTdG9yZSB7IHN0
b3JlLT5wYXJhbWV0ZXJzKCkgfSwgMCk7Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS0+c2Vz
c2lvbklEKCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJz
aXRlRGF0YVN0b3JlIHsgc3RvcmUucGFyYW1ldGVycygpIH0sIDApOworICAgIGF1dG8gc2Vzc2lv
bklEID0gc3RvcmUuc2Vzc2lvbklEKCk7CiAgICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwo
KSkgewogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgICAgICBjcmVhdGVTeW1MaW5r
Rm9yRmlsZVVwZ3JhZGUoc3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCkp
OworICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUucmVzb2x2ZWRJbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC0xMzAyLDE2ICsx
MzY5LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCkKIAogV2Vic2l0ZURhdGFTdG9yZSogTmV0d29ya1Byb2Nlc3NQcm94
eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KQogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSkgewotICAgICAgICBpZiAoIVdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVF
eGlzdHMoKSkgewotICAgICAgICAgICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IG1fcHJvY2Vz
c1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpOwotICAgICAgICAgICAgaWYgKHdlYnNpdGVEYXRhU3Rv
cmUgJiYgd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gc2Vzc2lvbklEKQotICAgICAg
ICAgICAgICAgIHJldHVybiB3ZWJzaXRlRGF0YVN0b3JlOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLSAgICB9
Ci0gICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9y
ZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIHJldHVybiBXZWJzaXRlRGF0YVN0b3JlOjpl
eGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwogfQogCiB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnJldHJpZXZlQ2FjaGVTdG9yYWdlUGFyYW1ldGVycyhQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQpCkBAIC0xMzU4LDcgKzE0MTYsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29u
dGVudAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKFJlZ2lz
dHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IG1fcHJvY2Vzc1Bvb2wuZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQ
cm9jZXNzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgc2Vzc2lvbklELCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdv
cmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgUmVnaXN0cmFibGVE
b21haW4ge3JlZ2lzdHJhYmxlRG9tYWlufSwgc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6d29ya2VyQ29udGV4dENv
bm5lY3Rpb25Ob0xvbmdlck5lZWRlZChXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBpZGVudGlm
aWVyKQpAQCAtMTUyMSwxNiArMTU3OSwzNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnBy
ZWNvbm5lY3RUbyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYlBhZ2VQcm94eUlkZQogICAg
IHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vzc2lvbklELCB3
ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0KIAorc3RhdGlj
IGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygp
KSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlByb2Nlc3Nlcygp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
Kworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkK
K3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dyb3VuZFdlYlBy
b2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0
aW9uKCkKIHsKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2Vz
KCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkp
IHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdyb3VuZEFjdGl2
aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0
eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHkoIk5ldHdv
cmtpbmcgZm9yIGZvcmVncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91bmQoKSwg
MCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAocHJvY2Vzc1Bv
b2woKS5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bv
b2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhy
b3R0bGVyOjppc1ZhbGlkQmFja2dyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vz
c2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRs
ZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91bmQgdmlldyhz
KSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vz
c0RpZFRyYW5zaXRpb25Ub0JhY2tncm91bmQoKSwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IDJjMGUyYjY0
ZTY4YjgxZmU0MzAyZDc2ZjJhYWFmMjA1NmZjMWE4ZGIuLjVmZGJkMjkzY2Q0YmEzZWZiZDcxMmNj
MjcxODNhNjU5Y2NlZDgxYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC01Miw2ICs1MiwxMCBAQCBuYW1lc3Bh
Y2UgSVBDIHsKIGNsYXNzIEZvcm1EYXRhUmVmZXJlbmNlOwogfQogCituYW1lc3BhY2UgQVBJIHsK
K2NsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKK30KKwogbmFtZXNwYWNlIFBBTCB7
CiBjbGFzcyBTZXNzaW9uSUQ7CiB9CkBAIC03Myw4ICs3Nyw4IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBjbGFzcyBEb3dubG9hZFByb3h5OwogY2xhc3MgRG93bmxvYWRQcm94eU1hcDsKK2NsYXNz
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNzIFdlYlBy
b2Nlc3NQb29sOwogY2xhc3MgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk7CiAKIGVudW0g
Y2xhc3MgU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIDogYm9vbDsKQEAgLTg3LDcgKzkxLDcg
QEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFJlc291
cmNlTG9hZEluZm87CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CiAKLWNsYXNzIE5ldHdvcmtQcm9jZXNz
UHJveHkgZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nl
c3NUaHJvdHRsZXJDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1By
b3h5PiB7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFy
eVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2Fu
TWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4sIHB1YmxpYyBSZWZDb3VudGVkPE5ldHdv
cmtQcm9jZXNzUHJveHk+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
ICAgICB1c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
OwpAQCAtMTAyLDEyICsxMDYsMTYgQEAgcHVibGljOgogICAgIHVzaW5nIERvbWFpbkluTmVlZE9m
U3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVzaW5nIE9w
ZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhwbGljaXQg
TmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBSZWY8TmV0
d29ya1Byb2Nlc3NQcm94eT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3Jr
UHJvY2Vzc1Byb3h5KTsgfQogICAgIH5OZXR3b3JrUHJvY2Vzc1Byb3h5KCk7CiAKKyAgICBzdGF0
aWMgVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gYWxsTmV0d29ya1Byb2Nlc3Nlcygp
OworICAgIAorICAgIHZvaWQgdGVybWluYXRlKCkgZmluYWw7CisKICAgICB2b2lkIGdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vz
c1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkmJik7CiAKLSAg
ICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2Vi
UGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpOworICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURv
d25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIFdlYlByb2Nlc3NQb29sJiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQcm94
eSogb3JpZ2luYXRpbmdQYWdlKTsKIAogICAgIHZvaWQgZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNl
c3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0
YUZldGNoT3B0aW9uPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJzaXRlRGF0YSk+JiYpOwog
ICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMjA3LDEzICsyMTUsMTEgQEAgcHVibGlj
OgogICAgIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigpIGZpbmFsIHsgcmV0dXJuIG1fdGhy
b3R0bGVyOyB9CiAgICAgdm9pZCB1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7CiAKLSAgICBXZWJQ
cm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2woKSB7IHJldHVybiBtX3Byb2Nlc3NQb29sOyB9Ci0KICNp
ZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIHZvaWQgZGlkRGVzdHJveVdlYlVzZXJD
b250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Jik7CiAj
ZW5kaWYKIAotICAgIHZvaWQgYWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJik7Cisg
ICAgdm9pZCBhZGRTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmKTsKICAgICBib29sIGhhc1Nlc3Np
b24oUEFMOjpTZXNzaW9uSUQpIGNvbnN0OwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihQQUw6OlNl
c3Npb25JRCk7CiAgICAgCkBAIC0yMzAsNiArMjM2LDggQEAgcHVibGljOgogICAgIHZvaWQgcmVn
aXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsKICAgICB2
b2lkIHVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcm
KTsKIAorICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CisgICAgCiAgICAgdm9pZCBy
ZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwog
CiAgICAgdm9pZCByZXNvdXJjZUxvYWREaWRTZW5kUmVxdWVzdChXZWJQYWdlUHJveHlJZGVudGlm
aWVyLCBSZXNvdXJjZUxvYWRJbmZvJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBPcHRp
b25hbDxJUEM6OkZvcm1EYXRhUmVmZXJlbmNlPiYmKTsKQEAgLTI0OSw3ICsyNTcsMTMgQEAgcHVi
bGljOgogICAgIHZvaWQgdXBkYXRlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJCdW5kbGVJZGVudGlmaWVy
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHkmIGNvb2tpZU1hbmFnZXIoKSB7IHJldHVybiBtX2Nvb2tpZU1hbmFnZXIuZ2V0KCk7IH0KKwog
cHJpdmF0ZToKKyAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KCk7CisKKyAgICB2b2lk
IHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKwogICAgIC8vIEF1eGlsaWFy
eVByb2Nlc3NQcm94eQogICAgIEFTQ0lJTGl0ZXJhbCBwcm9jZXNzTmFtZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuICJOZXR3b3JraW5nIl9zOyB9CiAKQEAgLTI1Nyw3ICsyNzEsNiBAQCBwcml2YXRl
OgogICAgIHZvaWQgY29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRl
OwogICAgIHZvaWQgcHJvY2Vzc1dpbGxTaHV0RG93bihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlk
ZTsKIAotICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgdm9pZCBjbGVhckNh
bGxiYWNrU3RhdGVzKCk7CiAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudApAQCAtMzEz
LDggKzMyNiw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShQQUw6OlNlc3Npb25JRCwgUmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+
JiYpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBIYXNoTWFw
PENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPj4gbV9wZW5k
aW5nRmV0Y2hXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJh
Y2tzOwogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4g
bV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zQ2FsbGJhY2tzOwpAQCAtMzU0LDYg
KzM2NSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIEhhc2hTZXQ8UEFMOjpTZXNzaW9uSUQ+
IG1fc2Vzc2lvbklEczsKKyAgICBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBtX2Nvb2tpZU1h
bmFnZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0K
aW5kZXggYjhkYWVkZjdiZWJhMWNkODFmNmU1MjQ0OTYwMzEwZjEzMzEwYzExZS4uODJjMTBlNDFk
NTYyNWRiYWFkZjkxM2I5NDgwNDQ3YzcwY2MxOWQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0K
QEAgLTUxLDggKzUxLDEwIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5k
bGVyOjpoYW5kbGVYUENFdmVudCh4cGNfb2JqZWN0X3QgZXZlbnQpIGNvCiAgICAgaWYgKG1lc3Nh
Z2VOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1lc3Nh
Z2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6OnhwY0xhdW5jaFNl
cnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKQotICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQ
cm9jZXNzKGV2ZW50KTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRh
YmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVz
c2FnZU5hbWUpIHsKKyAgICAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kTmV0
d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhldmVudCk7CisgICAgfQogCiAgICAg
cmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJD
b29raWVNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2ll
TWFuYWdlclByb3h5LmNwcAppbmRleCBjYzUyNmFhZjNhYWZiMWMxNDZkYTRiMjQxOTQ1OWIxMDky
MDFiNjEwLi5kODE2MGIwMGJlNDY0YjY0MTJlODg2NzcwNjliNjk5YThiYzg2ZWZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQSVNlY3Vy
aXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJPcHRpb25hbENhbGxiYWNrSUQu
aCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJD
b29raWVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgpAQCAtMzksMjQgKzQwLDE2IEBACiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jb25zdCBjaGFyKiBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OnN1cHBsZW1lbnROYW1lKCkKK1dlYkNvb2tpZU1hbmFnZXJQcm94
eTo6V2ViQ29va2llTWFuYWdlclByb3h5KE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9j
ZXNzKQorICAgIDogbV9uZXR3b3JrUHJvY2VzcyhtYWtlV2Vha1B0cihuZXR3b3JrUHJvY2Vzcykp
CiB7Ci0gICAgcmV0dXJuICJXZWJDb29raWVNYW5hZ2VyUHJveHkiOwotfQotCi1SZWY8V2ViQ29v
a2llTWFuYWdlclByb3h5PiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQcm9jZXNz
UG9vbCogcHJvY2Vzc1Bvb2wpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2ll
TWFuYWdlclByb3h5KHByb2Nlc3NQb29sKSk7Ci19Ci0KLVdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
V2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKLSAgICA6
IFdlYkNvbnRleHRTdXBwbGVtZW50KHByb2Nlc3NQb29sKQotewotICAgIFdlYkNvbnRleHRTdXBw
bGVtZW50Ojpwcm9jZXNzUG9vbCgpLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CisgICAgbmV0
d29ya1Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogfQogCiBXZWJDb29raWVNYW5h
Z2VyUHJveHk6On5XZWJDb29raWVNYW5hZ2VyUHJveHkoKQogeworICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsK
ICAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKIH0KIApAQCAtNjUsMTAy
ICs1OCw4NCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6aW5pdGlhbGl6ZUNsaWVudChj
b25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKiBjbAogICAgIG1fY2xpZW50LmluaXRpYWxp
emUoY2xpZW50KTsKIH0KIAotLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLQotdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NQb29sRGVzdHJveWVkKCkKLXsKLSAgICBWZWN0b3I8T2Jz
ZXJ2ZXIqPiBvYnNlcnZlcnM7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlclNldCA6IG1fY29va2ll
T2JzZXJ2ZXJzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNl
cnZlclNldCkKLSAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQob2JzZXJ2ZXIpOwotICAgIH0K
LQotICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVy
LT5tYW5hZ2VyRGVzdHJveWVkKCk7Ci0KLSAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNF
bXB0eSgpKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9z
ZShXZWJQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
cHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6
T2JqZWN0OjpyZWYoKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2Vi
Q29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpkZXJlZigpOwotfQotCiB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+
JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNz
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7Cisg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0
aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxz
ZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBwcm9jZXNzUG9v
bCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklE
LCBob3N0bmFtZXMpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyksIDApOwogfQogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5j
aGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29r
aWVzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25l
dHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxD
b29raWVzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ29va2llJiBjb29r
aWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAg
IGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFtjYWxsYmFj
a0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKV0oKSBtdXRhYmxlIHsKKyAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lv
bklELCBjb29raWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCiAgICAg
ICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKLSAgICB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgV2FsbFRpbWUgdGltZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxi
YWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgp
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlm
aWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7Cisg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2ll
c01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2Vi
Q29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Y29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNz
aW9uSUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBjb29r
aWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxs
YmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29r
aWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tp
ZXMsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5l
dHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRv
Y3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAg
ICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpn
ZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8m
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsK
LSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0
aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxs
Q29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNl
CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OmdldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwm
IHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFj
a0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1
cmwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsg
fSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tp
ZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCkt
PnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkp
OworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5n
ZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9w
T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAg
cHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNz
YXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdl
cyhzZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2Vydmlu
Z0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5OjpzZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmIGNhbGxiYWNrKQpAQCAtMjExLDE4ICsxODYsMTgg
QEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklEKQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewot
I2lmIFVTRShTT1VQKQotICAgIHByb2Nlc3NQb29sKCktPnNldEluaXRpYWxIVFRQQ29va2llQWNj
ZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vz
cy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhUVFBD
b29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7Cisg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNl
CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY2FsbGJhY2tGdW5jdGlv
bikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KCksIFdU
Rk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwgV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKEhUVFBDb29r
aWVBY2NlcHRQb2xpY3k6Ok5ldmVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCmluZGV4IDBi
ZGZjMGQ0ZTQ3YzQzNmY1ODVjZjI5YzA5ZDUxYTI5YmM4MTFhOWQuLjZmNTFmMDNlNWMwY2E4OTQx
MjMzNDM3N2I1NTQzZDgyMmNjMmZlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCkBAIC01NiwxMSArNTYsOSBAQCB0eXBlZGVmIEdlbmVy
aWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJyYXlDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0Nh
bGxiYWNrPFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k+IEhUVFBDb29raWVBY2NlcHRQ
b2xpY3lDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpDb29raWU+Jj4gR2V0Q29va2llc0NhbGxiYWNrOwogCi1jbGFzcyBXZWJDb29raWVNYW5h
Z2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29r
aWVNYW5hZ2VyPiwgcHVibGljIFdlYkNvbnRleHRTdXBwbGVtZW50LCBwcml2YXRlIElQQzo6TWVz
c2FnZVJlY2VpdmVyIHsKK2NsYXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6
Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNvb2tpZU1hbmFnZXI+LCBwcml2YXRlIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciogc3Vw
cGxlbWVudE5hbWUoKTsKLQotICAgIHN0YXRpYyBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBj
cmVhdGUoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQ
cm94eT4gY3JlYXRlKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKSB7IHJldHVy
biBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94eShuZXR3b3JrUHJvY2VzcykpOyB9
CiAgICAgdmlydHVhbCB+V2ViQ29va2llTWFuYWdlclByb3h5KCk7CiAKICAgICB2b2lkIGluaXRp
YWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSopOwpAQCAtMTA0LDE3
ICsxMDIsMTAgQEAgcHVibGljOgogICAgIHVzaW5nIEFQSTo6T2JqZWN0OjpkZXJlZjsKIAogcHJp
dmF0ZToKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBX
ZWJDb29raWVNYW5hZ2VyUHJveHkoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwogCiAgICAgdm9pZCBj
b29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEKTsKIAotICAgIC8vIFdlYkNvbnRleHRTdXBw
bGVtZW50Ci0gICAgdm9pZCBwcm9jZXNzUG9vbERlc3Ryb3llZCgpIG92ZXJyaWRlOwotICAgIHZv
aWQgcHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZvaWQg
cHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lk
IHJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXJlZldlYkNv
bnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0KICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZl
cgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJikgb3ZlcnJpZGU7CiAKQEAgLTEyNSw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgIEhhc2hN
YXA8UEFMOjpTZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9pZCAoKT4+IG1fbGVnYWN5Q29va2ll
T2JzZXJ2ZXJzOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIEhhc2hTZXQ8T2JzZXJ2ZXIq
Pj4gbV9jb29raWVPYnNlcnZlcnM7CiAKKyAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+
IG1fbmV0d29ya1Byb2Nlc3M7CiAgICAgV2ViQ29va2llTWFuYWdlclByb3h5Q2xpZW50IG1fY2xp
ZW50OwogCiAjaWYgVVNFKFNPVVApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAppbmRleCAwOTEyZDgwMDQzZTI2NjY3OTIxYTExNGMwN2Y0MDc2YjQ0YjlkNjYyLi40YmRh
Mzc5M2NjNDhkMzZkYjVkNmJlZjBlNDJlY2MzNzQxOWM2YWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE3NDQsNyArMTc0NCw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpzZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGJvb2wgY29udHJvbGxlZCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29udHJvbGxlZEJ5
QXV0b21hdGlvbihjb250cm9sbGVkKSk7Ci0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vzc2lv
bklzQ29udHJvbGxlZEJ5QXV0b21hdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCBtX2NvbnRyb2xsZWRCeUF1dG9tYXRpb24pKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0
d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vzc2lvbklz
Q29udHJvbGxlZEJ5QXV0b21hdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBt
X2NvbnRyb2xsZWRCeUF1dG9tYXRpb24pLCAwKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNy
ZWF0ZUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Oklu
c3BlY3RvclRhcmdldFR5cGUgdHlwZSkKQEAgLTMyMDgsMTEgKzMyMDgsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6aXNGb3JjZWRJbnRvQXBwQm91bmRNb2RlVGVzdGluZyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPgogdm9pZCBXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50
aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKCkKIHsKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJ
TlMpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnQoKSwgMCk7Ci0gICAgfQorICAgIHdl
YnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCksIDApOwogI2VuZGlmCiB9
CiAKQEAgLTMyMjEsMTMgKzMyMTcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJTZXJ2aWNl
V29ya2VyRW50aXRsZW1lbnRPdmVycmlkZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKAogI2lmIEVO
QUJMRShBUFBfQk9VTkRfRE9NQUlOUykgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViUGFnZTo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJv
Y2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0
d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNs
ZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCku
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNl
V29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
I2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogI2VuZGlmCkBAIC00NDI3LDcgKzQ0MTcs
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cHJlY29ubmVjdFRvKGNvbnN0IFVSTCYgdXJsKQogICAg
ICAgICByZXR1cm47CiAKICAgICBhdXRvIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5ID0gbV9jYW5V
c2VDcmVkZW50aWFsU3RvcmFnZSA/IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpV
c2UgOiBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2U7Ci0gICAgbV9w
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkucHJlY29ubmVjdFRv
KHNlc3Npb25JRCgpLCBpZGVudGlmaWVyKCksIHdlYlBhZ2VJRCgpLCB1cmwsIHVzZXJBZ2VudCgp
LCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigp
KTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5wcmVjb25uZWN0VG8o
c2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlEKCksIHVybCwgdXNlckFnZW50KCks
IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKCkp
OwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9v
bCBjYW5Vc2VDcmVkZW50aWFsU3RvcmFnZSkKQEAgLTQ3MjMsNyArNDcxMyw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQs
IEZyYW1lSW5mb0RhdGEmCiAgICAgICAgICAgICBSZWdpc3RyYWJsZURvbWFpbiBjdXJyZW50RG9t
YWluIHsgY3VycmVudFJlcXVlc3QudXJsKCkgfTsKICAgICAgICAgICAgIFVSTCByZXF1ZXN0ZXJV
UkwgeyBVUkwoKSwgcmVxdWVzdGVyT3JpZ2luLnRvU3RyaW5nKCkgfTsKICAgICAgICAgICAgIGlm
ICghY3VycmVudERvbWFpbi5tYXRjaGVzKHJlcXVlc3RlclVSTCkpCi0gICAgICAgICAgICAgICAg
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRy
YW5zZmVyKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxlRG9tYWlu
IHsgcmVxdWVzdGVyVVJMIH0sIGN1cnJlbnREb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIs
IG1faWRlbnRpZmllciwgbV93ZWJQYWdlSUQpOworICAgICAgICAgICAgICAgIG1fd2Vic2l0ZURh
dGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFU
cmFuc2ZlcihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFp
biB7IHJlcXVlc3RlclVSTCB9LCBjdXJyZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVy
LCBtX2lkZW50aWZpZXIsIG1fd2ViUGFnZUlEKTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQpA
QCAtNDc2MSw3ICs0NzUxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JG
cmFtZShGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgRnJhbWVJbmZvRGF0YSYKICAgICBpZiAobmF2
aWdhdGlvbiAmJiBmcmFtZS0+aXNNYWluRnJhbWUoKSkgewogICAgICAgICBpZiAoYXV0byYgYWRD
bGlja0F0dHJpYnV0aW9uID0gbmF2aWdhdGlvbi0+YWRDbGlja0F0dHJpYnV0aW9uKCkpIHsKICAg
ICAgICAgICAgIGlmIChhZENsaWNrQXR0cmlidXRpb24tPmRlc3RpbmF0aW9uKCkubWF0Y2hlcyhm
cmFtZS0+dXJsKCkpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5z
ZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRD
bGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksICphZENsaWNr
QXR0cmlidXRpb24pKTsKKyAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29y
a1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3RvcmVBZENsaWNrQXR0
cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKmFkQ2xpY2tBdHRyaWJ1
dGlvbiksIDApOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MzcyLDcgKzUzNjIsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFdlYkZyYW1lUHJveHkmIGZy
YW1lLCBjb25zdCBVUkwmIHBhZwogICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8fCBtYWlu
RnJhbWVIb3N0LmlzRW1wdHkoKSB8fCB0YXJnZXRIb3N0ID09IHNvdXJjZVVSTC5ob3N0KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3
b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1lTmF2aWdhdGlv
bihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHRh
cmdldFVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0cmFibGVEb21h
aW4geyBzb3VyY2VVUkwgfSwgaXNSZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUoKSwgTW9ub3Rv
bmljVGltZTo6bm93KCkgLSBtX2RpZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5GcmFtZVRpbWVz
dGFtcCwgd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpKTsKKyAgICB3ZWJzaXRlRGF0YVN0
b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TG9n
RnJhbWVOYXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJh
YmxlRG9tYWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVSTCB9LCBS
ZWdpc3RyYWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5pc01haW5G
cmFtZSgpLCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9y
TWFpbkZyYW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlciksIDApOwog
fQogI2VuZGlmCiAKQEAgLTk5NzMsNTggKzk5NjMsMjcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN5
c3RlbVByZXZpZXdBY3Rpb25UcmlnZ2VyZWQoY29uc3QgV2ViQ29yZTo6U3lzdGVtUHJldmlld0lu
Zm8KIAogdm9pZCBXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24oQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVz
c2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihlbXB0eVN0cmluZygpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tB
dHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1By
b2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEdW1w
QWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjbGVhckFk
Q2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9j
ZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vz
cy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJBZENsaWNr
QXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbiht
X3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJp
ZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1f
cHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICgh
bmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vic2l0ZURh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRp
b25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdl
UHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9v
bCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2Fu
U2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0
aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRl
RGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVz
dGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJp
YnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJv
Y2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0
d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1h
cmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAg
ICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJl
ZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IDk3YWJhZDY5ZTJj
MjA0Mzk1Zjg5MGI3ZjgxM2E5ZDMyNTY4OTU2ZGMuLjM0NWM3MGVjOTc0MjQ5ZGNjMmY4MjRhZjhj
NTc0NzNkYjJmNTUyZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5jcHAKQEAgLTE0Myw4ICsxNDMsMTAgQEAKICNlbmRpZgogCiAjZGVmaW5lIFdFQlBST0NFU1NQ
T09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhjaGFubmVsLCAi
JXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5l
IFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhjaGFubmVsLCBmbXQsIC4uLikgUkVM
RUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwgIyNfX1ZBX0FSR1NfXykK
ICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoY2hhbm5lbCwgZm10LCAu
Li4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29sOjoiIGZt
dCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9M
T0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfSUYoc2Vzc2lvbklE
LmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9v
bDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JF
TEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xP
R19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIGNoYW5uZWwsICJXZWJQ
cm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIsNiArMjM0LDExIEBAIHN0YXRpYyBIYXNo
U2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgZ2xvYmFsVVJMU2NoZW1lc1dp
dGhDdXN0b21Qcm90CiAgICAgcmV0dXJuIHNldDsKIH0KIAorVmVjdG9yPFN0cmluZz4gV2ViUHJv
Y2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpCit7CisgICAg
cmV0dXJuIGNvcHlUb1ZlY3RvcihnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFu
ZGxlcnMoKSk7Cit9CisKIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nl
c3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICA6IG1fY29uZmlndXJhdGlv
bihjb25maWd1cmF0aW9uLmNvcHkoKSkKICAgICAsIG1fZGVmYXVsdFBhZ2VHcm91cChXZWJQYWdl
R3JvdXA6OmNyZWF0ZSgpKQpAQCAtMjM5LDcgKzI0Niw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQ
cm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikK
ICAgICAsIG1fYXV0b21hdGlvbkNsaWVudChtYWtlVW5pcXVlPEFQSTo6QXV0b21hdGlvbkNsaWVu
dD4oKSkKICAgICAsIG1fZG93bmxvYWRDbGllbnQobWFrZVVuaXF1ZVJlZjxBUEk6OkRvd25sb2Fk
Q2xpZW50PigpKQogICAgICwgbV9oaXN0b3J5Q2xpZW50KG1ha2VVbmlxdWU8QVBJOjpMZWdhY3lD
b250ZXh0SGlzdG9yeUNsaWVudD4oKSkKLSAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50KG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkpCiAgICAg
LCBtX3Zpc2l0ZWRMaW5rU3RvcmUoVmlzaXRlZExpbmtTdG9yZTo6Y3JlYXRlKCkpCiAjaWYgUExB
VEZPUk0oTUFDKQogICAgICwgbV9oaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlciht
YWtlVW5pcXVlPEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyPigqdGhpcykpCkBA
IC0yNjcsOSArMjczLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJv
Y2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogI2VuZGlmCiAgICAgfSk7CiAK
LSAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSAmJiBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0g
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCk7Ci0KICAgICBmb3Ig
KGF1dG8mIHNjaGVtZSA6IG1fY29uZmlndXJhdGlvbi0+YWx3YXlzUmV2YWxpZGF0ZWRVUkxTY2hl
bWVzKCkpCiAgICAgICAgIG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0Fsd2F5c1JldmFsaWRhdGVkLmFk
ZChzY2hlbWUpOwogCkBAIC0yODUsNyArMjg4LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nl
c3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogICAg
IGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9URTogVGhlc2Ugc3ViLW9iamVjdHMgbXVz
dCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VSZWNlaXZlck1hcC4uCi0gICAgYWRkU3Vw
cGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxXZWJH
ZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdlYk5vdGlmaWNh
dGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKQEAgLTM0Miw5
ICszNDQsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKCkKICAgICBwcm9jZXNz
UG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAotICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zaHV0RG93blByb2Nlc3MoKTsKLQogI2lm
IEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9jZXNzZXNVc2luZ0dhbWVwYWRzLmlzRW1w
dHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnByb2Nlc3NQb29s
U3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAtNDAyLDI0ICs0MDEsNiBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1
dG9tYXRpb25DbGllbnQ+JgogICAgICAgICBtX2F1dG9tYXRpb25DbGllbnQgPSBXVEZNb3ZlKGF1
dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRMZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkKLXsKLSNpZiBF
TkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQotICAgIGlmICghY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCA9IFdURk1vdmUoY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgbV9z
dG9yYWdlQWNjZXNzQVBJRW5hYmxlZCA9IGVuYWJsZWQ7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRT
dG9yYWdlQWNjZXNzQVBJRW5hYmxlZChlbmFibGVkKSk7Ci0jZW5kaWYKLX0KLQogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNv
bnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKQogewog
ICAgIC8vIEd1YXJkIGFnYWluc3QgQVBJIG1pc3VzZS4KQEAgLTQyOSwxMSArNDEwLDYgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlm
aWVyKGNvbnN0IFN0cmluZyYgY3UKICAgICBtX2NvbmZpZ3VyYXRpb24tPnNldEN1c3RvbVdlYkNv
bnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRs
ZUlkZW50aWZpZXIpOwogfQogCi1JUEM6OkNvbm5lY3Rpb24qIFdlYlByb2Nlc3NQb29sOjpuZXR3
b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKQotewotICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNz
LT5jb25uZWN0aW9uKCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdl
ZCh2b2lkKiBjb250ZXh0KQogewogICAgIHN0YXRpY19jYXN0PFdlYlByb2Nlc3NQb29sKj4oY29u
dGV4dCktPmxhbmd1YWdlQ2hhbmdlZCgpOwpAQCAtNDQzLDggKzQxOSw3IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCgpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCgpKTsKICNp
ZiBVU0UoU09VUCkKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5n
dWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDApOworICAgIFdlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclBy
ZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtNDU3LDcgKzQzMiw4IEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmZ1bGxLZXlib2FyZEFjY2Vzc01vZGVDaGFuZ2VkKGJvb2wg
ZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5
UHJlc3N1cmVFdmVudChib29sIGlzQ3JpdGljYWwpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2Vz
KE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVu
dChpc0NyaXRpY2FsKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OkF1
eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwp
KTsKKyAgICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojph
bGxOZXR3b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0Ny
aXRpY2FsKSk7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgUGx1Z2luUHJv
Y2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGlj
YWwpOwogI2VuZGlmCkBAIC00ODIsMjc1ICs0NTgsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
Y3JlZW5Qcm9wZXJ0aWVzU3RhdGVDaGFuZ2VkKCkKICNlbmRpZgogfQogCi1OZXR3b3JrUHJvY2Vz
c1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFT
dG9yZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKLSAgICAKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5k
IGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KLSAgICAvLyBX
ZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24g
Y2hlY2sgb24gb3VyIEFQSXMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMDI0Ni4KLSAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7Ci0gICAgICAg
IGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpXSB7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICB9
KTsKLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotICAgIH0KLQotICAgIGlmICht
X25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewot
ICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vi
c2l0ZURhdGFTdG9yZSkpOwotICAgICAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFy
UGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1By
b2Nlc3M7Ci0gICAgfQotCi0gICAgYXV0byBuZXR3b3JrUHJvY2VzcyA9IG1ha2VVbmlxdWU8TmV0
d29ya1Byb2Nlc3NQcm94eT4oKnRoaXMpOwotCi0gICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMgcGFyYW1ldGVyczsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAg
ICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2ll
cyA9IGNvcHlUb1ZlY3RvcihtX3dlYnNpdGVEYXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwot
ICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVu
dGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBwbGlj
YXRpb25CdW5kbGVJZGVudGlmaWVyKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9u
U2Vjb25kYXJ5SWRlbnRpZmllciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJhdGlvbigp
LnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcigpOwotI2VuZGlmCi0gICAgfQot
Ci0gICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLmNhY2hlTW9kZWwoKTsKLQotICAgIGZvciAoYXV0byYgc2NoZW1lIDogZ2xvYmFsVVJM
U2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMu
dXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7Ci0K
LSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0
b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBpZiAo
IWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVj
dG9yeSwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
LQotICAgIFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6
bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAgIGlmICghY29udGFpbmVyQ2FjaGVzRGly
ZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVy
cy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5n
IHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJl
Y3RvcnkoKTsKLSAgICBpZiAoIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3Rvcnks
IFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRs
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxlKGVt
cHR5U3RyaW5nKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgcGFyYW1ldGVycy51
cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOwotICAgIHBh
cmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBv
bGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2No
ZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKLSAgICBw
YXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdh
Y3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkp
OwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRv
VmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3Rl
ckFzTm9BY2Nlc3MoKSk7Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAvLyAq
KioqKioqKioKLSAgICAvLyBJTVBPUlRBTlQ6IERvIG5vdCBjaGFuZ2UgdGhlIGRpcmVjdG9yeSBz
dHJ1Y3R1cmUgZm9yIGluZGV4ZWQgZGF0YWJhc2VzIG9uIGRpc2sgd2l0aG91dCBmaXJzdCBjb25z
dWx0aW5nIGEgcmV2aWV3ZXIgZnJvbSBBcHBsZSAoPHJkYXI6Ly9wcm9ibGVtLzE3NDU0NzEyPikK
LSAgICAvLyAqKioqKioqKioKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1ldGVycygpLmluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eTsKLSAgICAKLSAgICBpZiAoIXBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkgewotICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmNyZWF0ZVN5bUxpbmtGb3JG
aWxlVXBncmFkZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeSk7Ci0gICAgfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5z
ZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5y
ZXNvbHZlZFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBh
cmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSkKLSAgICAgICAgcGFy
YW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gIFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnko
KTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rv
cnkocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
I2VuZGlmCi0KLSAgICBhdXRvIGxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFT
dG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRMb2NhbFN0b3JhZ2VEaXJlY3Rvcnko
KSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAoIWxvY2FsU3RvcmFnZURpcmVjdG9yeSkKLSAgICAg
ICAgbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0
byBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVE
YXRhU3RvcmUtPmNhY2hlU3RvcmFnZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlm
ICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkgewotICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY2FjaGVTdG9yYWdlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFn
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gV1RGTW92ZShjYWNoZVN0
b3JhZ2VEaXJlY3RvcnkpOwotICAgIH0KLQotICAgIFN0cmluZyByZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSByZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlmIChtX3dlYnNpdGVEYXRh
U3RvcmUpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX3dlYnNp
dGVEYXRhU3RvcmUtPnJlc29sdmVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwot
ICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4
aXN0cygpKQotICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGly
ZWN0b3J5OwotICAgIAotICAgIGlmICghcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeS5p
c0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LCByZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGJvb2wgZW5hYmxl
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IGZhbHNlOwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IGZhbHNlOwotICAgIGJvb2wgc2hvdWxkSW5j
bHVkZUxvY2FsaG9zdCA9IHRydWU7Ci0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKLSAgICBXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlIHRoaXJkUGFydHlD
b29raWVCbG9ja2luZ01vZGUgPSBXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2Rl
OjpBbGw7Ci0gICAgV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgc2Ft
ZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZDo6Tm87Ci0jZW5kaWYKLSAgICBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vi
c2l0ZURhdGFSZW1vdmFsTW9kZSBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IFdl
YkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzOwot
ICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFp
bjsKLSAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBhcHBCb3VuZERvbWFp
bnM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gbWFudWFsUHJldmFsZW50UmVzb3Vy
Y2U7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBtX3RjY1ByZWZlcmVuY2VFbmFibGVkID0g
ZG9lc0FwcEhhdmVJVFBFbmFibGVkKCk7Ci0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlICYm
ICF3aXRoV2Vic2l0ZURhdGFTdG9yZS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAg
ICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxl
ZDsKLSAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAo
bV93ZWJzaXRlRGF0YVN0b3JlICYmICFtX3dlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBs
aWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1f
dGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7
Ci0gICAgfSBlbHNlIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3Rz
KCkgJiYgIVdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+aXNJdHBTdGF0ZUV4
cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0g
bV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dERhdGFTdG9yZSgpLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0jZW5kaWYKLQotICAgIGlm
ICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IHdpdGhXZWJzaXRlRGF0
YVN0b3JlLT5oYXNTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAg
aWYgKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMo
KS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9j
YWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3Q7Ci0gICAgICAgICAgICBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJl
c291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZURlYnVnTW9kZTsKLSNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICAgICAgdGhpcmRQYXJ0eUNvb2tp
ZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOwotICAgICAgICAg
ICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOwotICAgICAg
ICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnN0YW5kYWxvbmVBcHBsaWNhdGlv
bkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5kRG9tYWlucyA9IG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5hcHBCb3VuZERvbWFpbnM7
Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5tYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUt
PnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vi
c2l0ZURhdGFTdG9yZS0+cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAg
ICAKLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gd2l0aFdlYnNp
dGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlm
ICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5u
ZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBT
YW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBhdXRvJiBo
c3RzU3RvcmFnZURpcmVjdG9yeSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEhTVFNT
dG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghaHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNO
dWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gaHN0c1N0
b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGUoaHN0c1N0b3JhZ2VEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0
ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQot
ICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5oYXNTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYK
LSAgICAgICAgaWYgKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAg
IGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wYXJh
bWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5j
bHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGFyYW1ldGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAgICAgICAgICAgZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0j
aWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgICAgIHRoaXJkUGFy
dHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAg
ICAgICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3Ry
aWN0RW5mb3JjZW1lbnRFbmFibGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vi
c2l0ZURhdGFSZW1vdmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsK
LSAgICAgICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25lQXBw
bGljYXRpb25Eb21haW47Ci0gICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91bmRE
b21haW5zOwotICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFsUHJl
dmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IG1f
d2Vic2l0ZURhdGFTdG9yZS0+cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotCi0g
ICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3
b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtD
YWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hF
eHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IGF1dG8mIGhzdHNTdG9y
YWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEhTVFNTdG9yYWdlRGly
ZWN0b3J5KCk7Ci0gICAgICAgIGlmICghaHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpIHsK
LSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gaHN0c1N0b3JhZ2VEaXJl
Y3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoaHN0c1N0
b3JhZ2VEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
aHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlz
dHMoKSkKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKCk7Ci0gICAgICAgIGF1dG8gbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3
b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hF
eHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLSAgICB9Ci0KLSNpZiBIQVZFKENGTkVUV09SS19BTFRFUk5BVElWRV9T
RVJWSUNFKQotICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpodHRwM0VuYWJsZWQoKSkgewotICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnkgPSBXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0QWx0ZXJuYXRpdmVTZXJ2aWNlc0RpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIXBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
YWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwM0VuYWJsZWQgPSB0cnVl
OwotICAgIH0KLSNlbmRpZgotICAgIGJvb2wgaXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQgPSBmYWxz
ZTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycyA9IFJlc291cmNl
TG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzIHsKLSAgICAgICAgV1RGTW92ZShyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5KSwKLSAgICAgICAgV1RGTW92ZShyZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKSwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcywKLSAgICAgICAgaXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQsCi0gICAgICAgIGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQsCi0gICAgICAgIHNob3Vs
ZEluY2x1ZGVMb2NhbGhvc3QsCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1Z01vZGUsCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAg
dGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSwKLSAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudEVuYWJsZWQsCi0jZW5kaWYKLSAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVt
b3ZhbE1vZGUsCi0gICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiwKLSAgICAgICAg
YXBwQm91bmREb21haW5zLAotICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSwKLSAgICB9
OwotCi0gICAgLy8gQWRkIGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBwYXJhbWV0ZXJzCi0gICAgcGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7Ci0KLSAgICAvLyBJbml0
aWFsaXplIHRoZSBuZXR3b3JrIHByb2Nlc3MuCi0gICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVy
cyksIDApOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRRT1MobmV0d29ya1Byb2Nlc3NMYXRlbmN5UU9T
KCksIG5ldHdvcmtQcm9jZXNzVGhyb3VnaHB1dFFPUygpKSwgMCk7Ci0jZW5kaWYKLQotICAgIG5l
dHdvcmtQcm9jZXNzLT51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7Ci0KLSAgICBpZiAod2l0aFdl
YnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFr
ZVJlZigqd2l0aFdlYnNpdGVEYXRhU3RvcmUpKTsKLSAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3Rv
cmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhl
IG5ldHdvcmsgcHJvY2VzcyBrbm93cyBhYm91dCBhbGwgdGhlIHNlc3Npb25zIHRoYXQgaGF2ZSBi
ZWVuIHJlZ2lzdGVyZWQgYmVmb3JlIGl0IHN0YXJ0ZWQuCi0gICAgZm9yIChhdXRvJiBzZXNzaW9u
SUQgOiBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAua2V5cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB3
ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0
YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+YWRkU2Vzc2lvbigqd2Vic2l0ZURhdGFTdG9yZSk7Ci0gICAgfQotCi0gICAgbV9uZXR3b3Jr
UHJvY2VzcyA9IFdURk1vdmUobmV0d29ya1Byb2Nlc3MpOwotICAgIHJldHVybiAqbV9uZXR3b3Jr
UHJvY2VzczsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVk
KE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzUHJveHkpCiB7Ci0gICAgQVNTRVJU
KG1fbmV0d29ya1Byb2Nlc3MpOwotICAgIEFTU0VSVCgmbmV0d29ya1Byb2Nlc3NQcm94eSA9PSBt
X25ldHdvcmtQcm9jZXNzLmdldCgpKTsKLQogICAgIGZvciAoYXV0byYgc3VwcGxlbWVudCA6IG1f
c3VwcGxlbWVudHMudmFsdWVzKCkpCiAgICAgICAgIHN1cHBsZW1lbnQtPnByb2Nlc3NEaWRDbG9z
ZSgmbmV0d29ya1Byb2Nlc3NQcm94eSk7CiAKQEAgLTc1OSw5ICs0NjgsNiBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0
d29ya1Byb2Nlc3NQcgogICAgIGlmIChtX2F1dG9tYXRpb25TZXNzaW9uKQogICAgICAgICBtX2F1
dG9tYXRpb25TZXNzaW9uLT50ZXJtaW5hdGUoKTsKIAotICAgIC8vIExlYXZlIHRoZSBwcm9jZXNz
IHByb3h5IGFyb3VuZCBkdXJpbmcgY2xpZW50IGNhbGwsIHNvIHRoYXQgdGhlIGNsaWVudCBjb3Vs
ZCBxdWVyeSB0aGUgcHJvY2VzcyBpZGVudGlmaWVyLgotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBu
dWxscHRyOwotCiAgICAgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIH0KIApAQCAtNzcyLDIw
ICs0NzgsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc0NyYXNo
ZWQoV2ViUHJvY2Vzc1Byb3h5JiBwcm94eSkKICNlbmRpZgogfQogCi12b2lkIFdlYlByb2Nlc3NQ
b29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9j
ZXNzUHJveHksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24o
d2ViUHJvY2Vzc1Byb3h5LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHdl
YlByb2Nlc3NQcm94eSA9IG1ha2VXZWFrUHRyKHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0gV1RG
TW92ZShyZXBseSldIChhdXRvJiBjb25uZWN0aW9uSW5mbykgbXV0YWJsZSB7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSghSVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9u
SW5mby5pZGVudGlmaWVyKCkpICYmIHdlYlByb2Nlc3NQcm94eSAmJiB3ZWFrVGhpcykpIHsKLSAg
ICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKFByb2Nlc3MsICJnZXRO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246IEZhaWxlZCBmaXJzdCBhdHRlbXB0LCByZXRyeWluZyIp
OwotICAgICAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqd2ViUHJvY2Vzc1Byb3h5
LCBXVEZNb3ZlKHJlcGx5KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgcmVwbHkoY29ubmVjdGlvbkluZm8pOwotICAgIH0pOwotfQotCiAjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z3B1UHJvY2Vzc0NyYXNoZWQoUHJvY2Vzc0lE
IGlkZW50aWZpZXIpCiB7CkBAIC04MDksMjMgKzUwMSwyNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpnZXRHUFVQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94
eSwgTQogfQogI2VuZGlmCiAKK2Jvb2wgV2ViUHJvY2Vzc1Bvb2w6OnNfdXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcyA9IGZhbHNlOworCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05l
dHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmIHByb3h5LCBSZWdpc3RyYWJsZURvbWFp
biYmIHJlZ2lzdHJhYmxlRG9tYWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBBU1NFUlRfVU5V
U0VEKHByb3h5LCAmcHJveHkgPT0gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKSk7CisgICAgYXV0byog
d2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9y
U2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKQorICAgICAg
ICB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgp
LnB0cigpOworICAgIGlmICghcHJvY2Vzc1Bvb2xzKCkuc2l6ZSgpKQorICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8UmVmPFdlYlByb2Nlc3NQb29sPj4gc2VydmljZVdvcmtlclByb2Nlc3NQ
b29sKFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246
OmNyZWF0ZSgpLmdldCgpKSk7CiAKLSAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0
ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Np
b25JRCk7Ci0KLSAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgaWYgKCFtX3dl
YnNpdGVEYXRhU3RvcmUpCi0gICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLSAgICAgICAgd2Vi
c2l0ZURhdGFTdG9yZSA9IG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsKLSAgICB9CisgICAgLy8g
QXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wgdG8gaG9zdCB0aGUgc2Vy
dmljZSB3b3JrZXIgcHJvY2Vzcy4KKyAgICBhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29s
cygpWzBdOworICAgIEFTU0VSVChwcm9jZXNzUG9vbCk7CiAKICAgICBXZWJQcm9jZXNzUHJveHkq
IHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgeyBudWxscHRyIH07Ci0gICAgaWYgKCFtX3VzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNz
IDogbV9wcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGlmIChwcm9jZXNzID09IG1fcHJld2FybWVk
UHJvY2VzcyB8fCBwcm9jZXNzLT5pc0R1bW15UHJvY2Vzc1Byb3h5KCkpCisKKyAgICBpZiAoIXNf
dXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgeworICAgICAgICBmb3IgKGF1dG8mIHBy
b2Nlc3MgOiBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMpIHsKKyAgICAgICAgICAgIGlmIChwcm9j
ZXNzID09IHByb2Nlc3NQb29sLT5tX3ByZXdhcm1lZFByb2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1t
eVByb2Nlc3NQcm94eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
aWYgKCZwcm9jZXNzLT53ZWJzaXRlRGF0YVN0b3JlKCkgIT0gd2Vic2l0ZURhdGFTdG9yZSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTgzMywzNSArNTI4LDM1IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vz
cyhOZXR3b3JrUHJvCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIHNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgPSBwcm9jZXNzLmdldCgpOwotICAgICAgICAgICAgc2Vy
dmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZW5hYmxlU2VydmljZVdvcmtlcnModXNlckNvbnRlbnRD
b250cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkpOworICAgICAgICAgICAgc2Vy
dmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZW5hYmxlU2VydmljZVdvcmtlcnMocHJvY2Vzc1Bvb2wt
PnVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpKTsKIAot
ICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNl
V29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
IHJldXNpbmcgYW4gZXhpc3Rpbmcgd2ViIHByb2Nlc3MgKHByb2Nlc3M9JXAsIFBJRD0lZCkiLCBz
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9j
ZXNzSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9H
X0lGX0FMTE9XRURfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0
Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgcmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2Vz
cyAocHJvY2Vzcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIXNlcnZpY2VXb3JrZXJQcm9jZXNz
UHJveHkpIHsKLSAgICAgICAgYXV0byBuZXdQcm9jZXNzUHJveHkgPSBXZWJQcm9jZXNzUHJveHk6
OmNyZWF0ZUZvclNlcnZpY2VXb3JrZXJzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWlu
KSwgKndlYnNpdGVEYXRhU3RvcmUpOworICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdl
YlByb2Nlc3NQcm94eTo6Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMoKnByb2Nlc3NQb29sLCBXVEZN
b3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgKndlYnNpdGVEYXRhU3RvcmUpOwogICAgICAgICBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Byb3h5ID0gbmV3UHJvY2Vzc1Byb3h5LnB0cigpOwogCi0gICAgICAg
IFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQoU2VydmljZVdvcmtlciwgImVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyBjcmVhdGluZyBh
IG5ldyBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzIChwcm9jZXM9JXAsIFBJRD0lZCkiLCBzZXJ2aWNl
V29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRl
bnRpZmllcigpKTsKKyAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RF9TVEFUSUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9u
VG9OZXR3b3JrUHJvY2VzcyBjcmVhdGluZyBhIG5ldyBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzIChw
cm9jZXM9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKIAotICAgICAgICBpbml0aWFs
aXplTmV3V2ViUHJvY2VzcyhuZXdQcm9jZXNzUHJveHksIHdlYnNpdGVEYXRhU3RvcmUpOwotICAg
ICAgICBtX3Byb2Nlc3Nlcy5hcHBlbmQoV1RGTW92ZShuZXdQcm9jZXNzUHJveHkpKTsKKyAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwg
d2Vic2l0ZURhdGFTdG9yZSk7CisgICAgICAgIHByb2Nlc3NQb29sLT5tX3Byb2Nlc3Nlcy5hcHBl
bmQoV1RGTW92ZShuZXdQcm9jZXNzUHJveHkpKTsKICAgICB9CiAKLSAgICBBU1NFUlQoIW1fc2Vy
dmljZVdvcmtlclByb2Nlc3Nlcy5jb250YWlucygqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkp
OwotICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5hZGQoKnNlcnZpY2VXb3JrZXJQcm9jZXNz
UHJveHkpOworICAgIEFTU0VSVCghc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5zKCpz
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3Nlcygp
LmFkZCgqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSk7CiAKLSAgICBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Byb3h5LT5lc3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4dChtX3NlcnZpY2VXb3JrZXJQ
cmVmZXJlbmNlcyA/IG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzLnZhbHVlKCkgOiBtX2RlZmF1
bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgIGlmICghbV9zZXJ2aWNlV29ya2VyVXNlckFnZW50LmlzTnVsbCgpKQotICAg
ICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50
KG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94
eS0+ZXN0YWJsaXNoU2VydmljZVdvcmtlckNvbnRleHQocHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdv
cmtlclByZWZlcmVuY2VzID8gcHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclByZWZlcmVuY2Vz
LnZhbHVlKCkgOiBwcm9jZXNzUG9vbC0+bV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygp
LnN0b3JlKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBpZiAoIXByb2Nlc3NQ
b29sLT5tX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxsKCkpCisgICAgICAgIHNlcnZpY2VX
b3JrZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQocHJvY2Vzc1Bvb2wt
Pm1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJl
bW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykK
IHsKLSAgICBBU1NFUlQobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKHByb2Nlc3Mp
KTsKLSAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMucmVtb3ZlKHByb2Nlc3MpOworICAgIEFT
U0VSVChzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29udGFpbnMocHJvY2VzcykpOworICAgIHNl
cnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5yZW1vdmUocHJvY2Vzcyk7CiB9CiAjZW5kaWYKIApAQCAt
OTMwLDcgKzYyNSw3IEBAIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29sOjp0
cnlUYWtlUHJld2FybWVkUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlCiAjaWYgUExBVEZPUk0oR1RL
KSB8fCBQTEFURk9STShXUEUpCiAgICAgLy8gSW4gcGxhdGZvcm1zIHVzaW5nIEJ1YmJsZXdyYXAg
Zm9yIHNhbmRib3hpbmcsIHByZXdhcm1lZCBwcm9jZXNzIGlzIGxhdW5jaGVkIHVzaW5nIHRoZSBX
ZWJQcm9jZXNzUG9vbCBwcmltYXJ5IFdlYnNpdGVEYXRhU3RvcmUsCiAgICAgLy8gc28gd2UgZG9u
J3QgdXNlIGl0IGluIGNhc2Ugb2YgdXNpbmcgYSBkaWZmZXJlbnQgV2Vic2l0ZURhdGFTdG9yZS4K
LSAgICBpZiAobV9zYW5kYm94RW5hYmxlZCAmJiBtX3dlYnNpdGVEYXRhU3RvcmUgJiYgbV93ZWJz
aXRlRGF0YVN0b3JlLmdldCgpICE9ICZ3ZWJzaXRlRGF0YVN0b3JlKQorICAgIGlmIChtX3NhbmRi
b3hFbmFibGVkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRpZgogCkBAIC0xMDQwLDgg
KzczNSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdl
YlByb2Nlc3NQcm94eSYgcHJvY2VzcywgV2Vic2l0ZURhCiAgICAgICAgIHByb2Nlc3MuaXNSZXNw
b25zaXZlKFtpbml0aWFsaXphdGlvbkFjdGl2aXR5ID0gV1RGTW92ZShpbml0aWFsaXphdGlvbkFj
dGl2aXR5KV0gKGJvb2wpIHsgfSk7CiAgICAgfSk7CiAKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotCiAgICAgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwogCiAg
ICAgcGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGggPSBtX3Jlc29sdmVkUGF0aHMuaW5qZWN0
ZWRCdW5kbGVQYXRoOwpAQCAtMTIwNiw5ICs4OTksNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpw
cm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKICAgICAg
ICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5pZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcoKTsKIAog
ICAgIG1fY29ubmVjdGlvbkNsaWVudC5kaWRDcmVhdGVDb25uZWN0aW9uKHRoaXMsIHByb2Nlc3Mt
PndlYkNvbm5lY3Rpb24oKSk7Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAg
ICBtX3dlYnNpdGVEYXRhU3RvcmUtPmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OmRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSogcHJv
Y2VzcykKQEAgLTEzMDMsMTAgKzk5Myw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQ
b29sOjpjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAgICAg
aWYgKCFwYWdlQ29uZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpKSB7CiAgICAgICAgIC8v
IFdlIHRyeSB0byBhdm9pZCBjcmVhdGluZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxvbmcg
YXMgcG9zc2libGUuCiAgICAgICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRvIGNy
ZWF0ZSBhIHdlYiBwYWdlIHdpdGhvdXQgYW55IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVuIHdl
IGhhdmUgdG8gY3JlYXRlIGl0LgotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAg
ICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotCi0gICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5z
ZXRXZWJzaXRlRGF0YVN0b3JlKG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAgIHBh
Z2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpKTsKICAgICB9CiAKICAgICBSZWZQdHI8V2Vi
UHJvY2Vzc1Byb3h5PiBwcm9jZXNzOwpAQCAtMTMzNyw3ICsxMDI0LDcgQEAgUmVmPFdlYlBhZ2VQ
cm94eT4gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVu
dCwgUmVmPEFQSToKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgaWYgKCFtX3NlcnZp
Y2VXb3JrZXJQcmVmZXJlbmNlcykgewogICAgICAgICBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNl
cyA9IHBhZ2UtPnByZWZlcmVuY2VzU3RvcmUoKTsKLSAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNl
V29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtlclByb2Nlc3NlcykKKyAgICAgICAgZm9yIChh
dXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAg
ICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzLnVwZGF0ZVNlcnZpY2VXb3JrZXJQcmVmZXJl
bmNlc1N0b3JlKCptX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyk7CiAgICAgfQogICAgIGlmICh1
c2VyQ29udGVudENvbnRyb2xsZXIpCkBAIC0xMzY0LDcgKzEwNTEsNyBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KGNvbnN0IFN0cmluZyYgdXNlckFn
ZW50KQogICAgIGlmIChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQgPT0gdXNlckFnZW50KQogICAg
ICAgICByZXR1cm47CiAgICAgbV9zZXJ2aWNlV29ya2VyVXNlckFnZW50ID0gdXNlckFnZW50Owot
ICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMpCisgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzZXMoKSkKICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3Muc2V0U2VydmljZVdv
cmtlclVzZXJBZ2VudChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOwogfQogI2VuZGlmCkBAIC0x
MzczLDE1ICsxMDYwLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJz
aXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUkKIHsKICAgICBhdXRvIHJl
c3VsdCA9IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5hZGQoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBI
YXNoU2V0PFdlYlBhZ2VQcm94eUlkZW50aWZpZXI+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQocGFn
ZUlEKTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwotCi0g
ICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7Ci0gICAgaWYgKHNlc3Np
b25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIEFT
U0VSVCghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgfHwgZGF0YVN0b3JlLnBhcmFtZXRlcnMoKS5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEID09IHNlc3Npb25JRCk7Ci0gICAgICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5h
ZGRTZXNzaW9uKG1ha2VSZWYoZGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICBkYXRhU3RvcmUuY2xl
YXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgfQogfQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjpwYWdlRW5kVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZp
ZXIgcGFnZUlELCBXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpCkBAIC0xNDA5LDcgKzEwODcs
NiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNQYWdlc1VzaW5nV2Vic2l0ZURhdGFTdG9yZShX
ZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9v
bDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveHkqIGlu
aXRpYXRpbmdQYWdlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmlu
ZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCiB7CiAgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0
ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCByZXF1ZXN0LCBpbml0aWF0aW5nUGFnZSwgeyB9KTsK
LSAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7CiAK
ICAgICBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4gaXNBcHBCb3VuZCA9IE5h
dmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpObzsKICAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsK
QEAgLTE0MTksMjYgKzEwOTYsMjMgQEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRv
d25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3gKICNlbmRpZgog
ICAgIH0KIAotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFJlc291cmNlUmVx
dWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgLy8gUmVxdWVzdCdzIGZpcnN0
UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwgb2YgdGhlIGRvd25s
b2FkIHJlcXVlc3QuCi0gICAgICAgIC8vIFdlIHNldCB0aGUgdmFsdWUgdG8gdG9wIGxldmVsIGRv
Y3VtZW50J3MgVVJMLgotICAgICAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKLSAgICAgICAgICAg
IFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGluaXRpYXRpbmdQYWdlLT5w
YWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZp
cnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKLSAgICAgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlh
dGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgICAgIGlmICghdXBkYXRlZFJl
cXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQotICAg
ICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlhdGluZ1Bh
Z2UtPnVzZXJBZ2VudEZvclVSTChyZXF1ZXN0LnVybCgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhVUkwoKSk7
Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKLSAgICAg
ICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJO
YW1lOjpVc2VyQWdlbnQpKQotICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBV
c2VyQWdlbnQoV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudCgpKTsKLSAgICAgICAgfQot
ICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1RvcFNpdGUoZmFsc2UpOwotICAgICAgICBuZXR3
b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RG93bmxvYWRSZXF1
ZXN0KHNlc3Npb25JRCwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0
LCBpc0FwcEJvdW5kLCBzdWdnZXN0ZWRGaWxlbmFtZSksIDApOwotICAgICAgICByZXR1cm4gZG93
bmxvYWRQcm94eTsKKyAgICBSZXNvdXJjZVJlcXVlc3QgdXBkYXRlZFJlcXVlc3QocmVxdWVzdCk7
CisgICAgLy8gUmVxdWVzdCdzIGZpcnN0UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBhcyBP
cmlnaW5hbCBVUkwgb2YgdGhlIGRvd25sb2FkIHJlcXVlc3QuCisgICAgLy8gV2Ugc2V0IHRoZSB2
YWx1ZSB0byB0b3AgbGV2ZWwgZG9jdW1lbnQncyBVUkwuCisgICAgaWYgKGluaXRpYXRpbmdQYWdl
KSB7CisgICAgICAgIFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGluaXRp
YXRpbmdQYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKKyAgICAgICAgdXBkYXRlZFJlcXVl
c3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwpOworICAgICAgICB1
cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGlu
aXRpYXRpbmdQYWdlVVJMLCByZXF1ZXN0LnVybCgpKSk7CisgICAgICAgIGlmICghdXBkYXRlZFJl
cXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQorICAg
ICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChpbml0aWF0aW5nUGFnZS0+
dXNlckFnZW50Rm9yVVJMKHJlcXVlc3QudXJsKCkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICB1
cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhVUkwoKSk7CisgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOworICAgICAgICBpZiAoIXVwZGF0ZWRS
ZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKKyAg
ICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoV2ViUGFnZVByb3h5Ojpz
dGFuZGFyZFVzZXJBZ2VudCgpKTsKICAgICB9CisgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNUb3BT
aXRlKGZhbHNlKTsKKyAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6RG93bmxvYWRSZXF1ZXN0KGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwg
ZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0LCBpc0FwcEJvdW5kLCBz
dWdnZXN0ZWRGaWxlbmFtZSksIDApOwogCiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CkBA
IC0xNDQ2LDE3ICsxMTIwLDEyIEBAIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpkb3du
bG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94CiBEb3dubG9hZFBy
b3h5JiBXZWJQcm9jZXNzUG9vbDo6cmVzdW1lRG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0
YVN0b3JlLCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBBUEk6OkRhdGEmIHJl
c3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBhdXRvJiBkb3dubG9hZFByb3h5
ID0gY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIFJlc291cmNlUmVxdWVzdCgpLCBpbml0
aWF0aW5nUGFnZSwgeyB9KTsKLSAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBkYXRhU3Rv
cmUuc2Vzc2lvbklEKCk7CiAKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4
dGVuc2lvbkhhbmRsZTsKICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQogICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIGlmIChuZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpSZXN1bWVEb3dubG9hZChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJ
RCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2FuZGJveEV4dGVuc2lvbkhh
bmRsZSksIDApOwotICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKLSAgICB9Ci0KKyAgICBk
YXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
UmVzdW1lRG93bmxvYWQoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBkb3dubG9hZFByb3h5LmRvd25s
b2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNp
b25IYW5kbGUpLCAwKTsKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KIApAQCAtMTUyNSwx
MSArMTE5NCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZnJlc2hQbHVnaW5zKCkKIAogI2Vu
ZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogCi1Qcm9jZXNzSUQgV2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpCi17Ci0gICAgcmV0dXJuIG1fbmV0d29y
a1Byb2Nlc3MgPyBtX25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpIDogMDsKLX0K
LQogUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcigp
CiB7CiAgICAgcmV0dXJuIG1fcHJld2FybWVkUHJvY2VzcyA/IG1fcHJld2FybWVkUHJvY2Vzcy0+
cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7CkBAIC0xNTQ0LDE0ICsxMjA4LDE2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OmFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3RpbmcoUHJv
Y2Vzc0lEIHBpZCwgQ29tCiAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIH0KIAotdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKFNlY29uZHMg
c2Vjb25kcykKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9y
VGVzdGluZyhTZWNvbmRzKQogewotICAgIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0
aW5nKHNlY29uZHMpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJG
ZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpKTsKKyAgICAvLyBGSVhNRTogRG8gc29tZXRo
aW5nIGhlcmUuCisgICAgLy8gc2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmcoc2Vj
b25kcyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGlt
ZW91dEZvclRlc3Rpbmc6OlJlcGx5KCkpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZXNl
dFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZygpCiB7Ci0gICAgc2VuZFN5bmNUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2Vy
RmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0
U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCkpOworICAgIC8vIEZJ
WE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KKyAgICAvLyBzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nl
c3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVv
dXRGb3JUZXN0aW5nKCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29y
a2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldEFsd2F5c1VzZXNDb21wbGV4VGV4dENvZGVQYXRoKGJvb2wgYWx3YXlzVXNlQ29t
cGxleFRleHQpCkBAIC0xNTc2LDE0ICsxMjQyLDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJl
Z2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAg
TGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1
cmUodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nl
c3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0
d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVt
ZUFzU2VjdXJlKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJz
aXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsK
KyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSwgMCk7CisgICAg
fSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3Np
bmdDb250ZW50U2VjdXJpdHlQb2xpY3koY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAg
TGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBh
c3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9j
ZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdD
b250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1By
b2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNz
aW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3Rv
cmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3Jl
JiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250
ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoY29u
c3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNTk2LDE0ICsxMjY2LDE4IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmIHVybFNjaGVt
ZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxT
Y2hlbWVBc0xvY2FsKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7Ci0gICAg
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3Rl
clVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9y
RWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFT
dG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSksIDAp
OworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFz
Tm9BY2Nlc3MoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0
dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUp
OwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJV
UkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9j
ZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNz
KHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0
b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAg
ZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3BsYXlJc29sYXRl
ZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MjQsMTAgKzEyOTgsOCBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9j
b2xIYW5kbGVycyhjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hlbWVz
V2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5hZGQodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2Nv
bCh1cmxTY2hlbWUpOwotICAgIH0KKyAgICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hh
dmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0x
NjM2LDEwICsxMzA4LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2JhbFVS
TFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb24KICAgICAgICAgcmV0dXJu
OwogCiAgICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkucmVt
b3ZlKHVybFNjaGVtZSk7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnVucmVnaXN0
ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwotICAgIH0KKyAgICBm
b3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3Jr
UHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1lRm9y
TGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQoY29uc3QgU3RyaW5nJiB1cmxT
Y2hlbWUpCkBAIC0xNjczLDE2ICsxMzQzLDE0IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENh
Y2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2Vz
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpKTsKIAotICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7Cisg
ICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoQ2FjaGVNb2RlbCBjYWNoZU1v
ZGVsKQogewogICAgIHVwZGF0ZUJhY2tGb3J3YXJkQ2FjaGVDYXBhY2l0eSgpOwogCi0gICAgaWYg
KG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0
aW5nKGNhY2hlTW9kZWwpLCB7IH0sIHsgfSk7CisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBo
ZXJlLgogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJ
bnRlcnZhbChkb3VibGUgdGltZW91dEludGVydmFsKQpAQCAtMTY5MiwxMiArMTM2MCwxMiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3Vi
bGUgdGltZW91dEludGVydmFsKQogCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3Jl
YXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UsIGNvbnN0
IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbykKIHsKLSAgICByZXR1cm4gZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcmVxdWVzdCwgZnJhbWVJbmZv
LCBvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVybiBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3Mo
KS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgKnRoaXMsIHJlcXVlc3QsIGZyYW1lSW5m
bywgb3JpZ2luYXRpbmdQYWdlKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCiB7Ci0gICAgZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOworICAgIC8vIEZJ
WE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6YWRkTWVz
c2FnZVJlY2VpdmVyKElQQzo6UmVjZWl2ZXJOYW1lIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6
TWVzc2FnZVJlY2VpdmVyJiBtZXNzYWdlUmVjZWl2ZXIpCkBAIC0xNzY4LDMzICsxNDM2LDEwIEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN0b3BNZW1vcnlTYW1wbGVyKCkKICAgICBzZW5kVG9BbGxQ
cm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlN0b3BNZW1vcnlTYW1wbGVyKCkpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBVJiYgcmVwbHkpCi17Ci0g
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3Nh
Z2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoc3RkOjpmb3J3YXJkPFQ+
KG1lc3NhZ2UpLCBzdGQ6OmZvcndhcmQ8VT4ocmVwbHkpLCAwKTsKLX0KLQogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYm9vbCBhbGxv
d3MpCiB7Ci0gICAgc2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwg
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldl
YlNvY2tldDo6UmVwbHkoKSk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2FjaGVk
Q3JlZGVudGlhbHMoKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25l
dHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRD
cmVkZW50aWFscygpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0
d29ya1Byb2Nlc3MoKQotewotICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7Ci0KLSAgICBp
ZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX25ldHdv
cmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsK
KyAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCisgICAgLy8gc2VuZFN5bmNUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2Vy
dGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldDo6UmVwbHkoKSk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQpAQCAt
MTgwNCw1NyArMTQ0OSwzNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJD
b250ZW50UHJvY2Vzc2VzKCkKICAgICAgICAgcHJvY2Vzcy0+dGVybWluYXRlKCk7CiB9CiAKLXZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JU
ZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsK
LSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcigpOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNT
dXNwZW5zaW9uSW1taW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0K
LXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseUZvclRlc3RpbmcoKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcoKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVz
dW1lKCkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
dGVybWluYXRlU2VydmljZVdvcmtlcnMoKQogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
ICAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICB3aGlsZSAobV9z
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbXB1dGVTaXplKCkpCi0gICAgICAgIG1fc2VydmljZVdv
cmtlclByb2Nlc3Nlcy5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKKyAgICB3aGls
ZSAoc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCkpCisgICAgICAgIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzZXMoKS5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKICNl
bmRpZgogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzeW5jTmV0d29ya1Byb2Nlc3NDb29raWVz
KCkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bmNBbGxDb29raWVzKCk7CisgICAg
Ly8gRklYTUU6IE1vdmUgdGhpcyB0byBXZWJzaXRlRGF0YVN0b3JlLgogfQogCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5jTG9jYWxTdG9yYWdlKCksIE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZTo6UmVwbHkoKSk7CisgICAgLy8gRklYTUU6IERv
IHNvbWV0aGluZyBoZXJlLgorICAgIC8vIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3JhZ2UoKSwgTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTeW5jTG9jYWxTdG9yYWdlOjpSZXBseSgpKTsKICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckxlZ2FjeVByaXZhdGVCcm93
c2luZ0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckxlZ2FjeVByaXZhdGVC
cm93c2luZ0xvY2FsU3RvcmFnZSgpLCAwKTsKKyAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhl
cmUuCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNlcnRpZmljYXRl
SW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKLSAgICBlbnN1cmVOZXR3
b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNh
dGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CisgICAgLy8gRklYTUU6IERvIHNvbWV0
aGluZyBoZXJlLgogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVBdXRvbWF0aW9uQ2Fw
YWJpbGl0aWVzKCkgY29uc3QKQEAgLTIxMzEsMTUgKzE3NTUsMTkgQEAgdm9pZCBXZWJQcm9jZXNz
UG9vbDo6cmVwb3J0V2ViQ29udGVudENQVVRpbWUoU2Vjb25kcyBjcHVUaW1lLCB1aW50NjRfdCBh
Y3Rpdml0eVMKICNlbmRpZgogfQogCitXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBXZWJQ
cm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3NlcygpCit7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICBy
ZXR1cm4gcHJvY2Vzc2VzOworfQorCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNz
QXNzZXJ0aW9ucygpCiB7Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVQcm9jZXNz
QXNzZXJ0aW9uKCk7CisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgogI2lmIEVOQUJM
RShTRVJWSUNFX1dPUktFUikKICAgICAvLyBDaGVjayBvbiBuZXh0IHJ1biBsb29wIHNpbmNlIHRo
ZSB3ZWIgcHJvY2VzcyBwcm94eSB0b2tlbnMgYXJlIHByb2JhYmx5IGJlaW5nIHVwZGF0ZWQuCi0g
ICAgY2FsbE9uTWFpblJ1bkxvb3AoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyld
IHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Zm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cykKKyAgICBjYWxsT25NYWluUnVuTG9vcChbXSB7CisgICAgICAgIGZvciAoYXV0byYgc2Vydmlj
ZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgICAgICBz
ZXJ2aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzc0Fzc2VydGlvbigp
OwogICAgIH0pOwogI2VuZGlmCkBAIC0yMTQ5LDcgKzE3NzcsNyBAQCBib29sIFdlYlByb2Nlc3NQ
b29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQp
IGNvbnN0CiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGluZWZmaWNpZW50LgotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclBy
b2Nlc3NlcywgW3BhZ2VJRF0oYXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9m
KHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW3BhZ2VJRF0oYXV0byYgcHJvY2VzcykgewogICAg
ICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyUGFnZVByb3h5KHBhZ2VJRCk7CiAg
ICAgfSk7CiAjZW5kaWYKQEAgLTIzNzEsMTQgKzE5OTksNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpjbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpCiB9CiAKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0
Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mIHRvRG9tYWluLCBPcHRpb25TZXQ8Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6
RmxhZz4gbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgV2ViUGFnZVByb3h5SWRlbnRpZmllciB3ZWJQ
YWdlUHJveHlJRCwgUGFnZUlkZW50aWZpZXIgd2ViUGFnZUlEKQotewotICAgIGlmICghbV9uZXR3
b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGlk
Q29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9tYWlu
LCB0b0RvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdlYlBh
Z2VJRCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpbnNXaXRoVXNlckludGVy
YWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsK
ICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldERvbWFpbnNX
aXRoVXNlckludGVyYWN0aW9uKGRvbWFpbnMpKTsKQEAgLTI0MjksMjcgKzIwNDksMjcgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlQXVkaWJsZU1lZGlhQXNzZXJ0aW9ucygpCiAKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogewotICAgIGlmIChtX3VzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykK
KyAgICBpZiAoc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID09IHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdFQlBST0NFU1NQ
T09MX1JFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcz0lZCkiLCB1c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xP
R19TVEFUSUMoU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3M6ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MpOwogCi0gICAgbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzID0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsKLSAgICB0ZXJtaW5hdGVTZXJ2
aWNlV29ya2VycygpOwotICAgIHRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgc191c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzczsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFBy
b2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+dGVybWluYXRlU2VydmljZVdvcmtl
cnMoKTsKIH0KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIGJvb2wgV2ViUHJvY2Vzc1Bv
b2w6Omhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1
dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzKCksIFtdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2Vy
dmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKTsKICAgICB9KTsKIH0KIAog
Ym9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZv
clRlc3RpbmcoKSBjb25zdAogewotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtl
clByb2Nlc3NlcywgW10oYXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNl
cnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW10oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1
cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygp
OwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Bvb2wuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5k
ZXggOTUyOTI3ZWM3OTY1MGU3MGRkYmMzZmIwNGUzOGFiMWI2ZDEyMzc1Ny4uYWIwMWI2YjcwNWY0
Y2ViZjBjZTU0N2JlNjUzZGI1ODc5NzI5NzM2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5oCkBAIC04MSw3ICs4MSw2IEBAIE9CSkNfQ0xBU1MgV0tQcmVmZXJlbmNl
T2JzZXJ2ZXI7CiAKIG5hbWVzcGFjZSBBUEkgewogY2xhc3MgQXV0b21hdGlvbkNsaWVudDsKLWNs
YXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKIGNsYXNzIERvd25sb2FkQ2xpZW50Owog
Y2xhc3MgSFRUUENvb2tpZVN0b3JlOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGVDbGllbnQ7CkBAIC0x
ODAsNyArMTc5LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGlzdG9yeUNsaWVudChzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4mJik7CiAgICAgdm9pZCBz
ZXREb3dubG9hZENsaWVudChVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4mJik7CiAgICAg
dm9pZCBzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25D
bGllbnQ+JiYpOwotICAgIHZvaWQgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJik7CiAK
ICAgICB2b2lkIHNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25z
dCBTdHJpbmcmKTsKICAgICBjb25zdCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVu
ZGxlSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi0+Y3VzdG9tV2ViQ29udGVu
dFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCk7IH0KQEAgLTE5MSwxNyArMTg5LDkgQEAgcHVibGlj
OgogICAgIC8vIG51bGwgY2hlY2tzIGluIFdlYlBhZ2VQcm94eS4KICAgICBXZWJQcm9jZXNzUHJv
eHkqIGR1bW15UHJvY2Vzc1Byb3h5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QgeyBy
ZXR1cm4gbV9kdW1teVByb2Nlc3NQcm94aWVzLmdldChzZXNzaW9uSUQpLmdldCgpOyB9CiAKLSAg
ICAvLyBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNzIGFzIGFwcHJvcG9yaWF0ZSBmb3IgY3Vy
cmVudCBwcm9jZXNzIG1vZGVsLiBUaGUgY29ubmVjdGlvbiBtdXN0IGJlIG5vbi1udWxsLgotICAg
IElQQzo6Q29ubmVjdGlvbiogbmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCk7Ci0KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNz
YWdlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlc0Zv
clNlc3Npb24oY29uc3QgVCYgbWVzc2FnZSwgUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gU2Vu
ZHMgdGhlIG1lc3NhZ2UgdG8gV2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2VzcyBhcyBhcHByb3Bv
cmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB2b2lkIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlKTsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiB2b2lkIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2Vz
cyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lk
IHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2Fn
ZSk7Ci0KICAgICB2b2lkIHByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5
Kik7CiAKICAgICBXZWJQcm9jZXNzQ2FjaGUmIHdlYlByb2Nlc3NDYWNoZSgpIHsgcmV0dXJuIG1f
d2ViUHJvY2Vzc0NhY2hlLmdldCgpOyB9CkBAIC0yMDksOSArMTk5LDYgQEAgcHVibGljOgogICAg
IC8vIERpc2Nvbm5lY3QgdGhlIHByb2Nlc3MgZnJvbSB0aGUgY29udGV4dC4KICAgICB2b2lkIGRp
c2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSopOwogCi0gICAgV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlKiB3ZWJzaXRlRGF0YVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJzaXRlRGF0
YVN0b3JlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRQcmltYXJ5RGF0YVN0b3JlKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7IG1fd2Vic2l0ZURhdGFTdG9yZSA9ICZkYXRhU3Rv
cmU7IH0KLQogICAgIFJlZjxXZWJQYWdlUHJveHk+IGNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYs
IFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsKIAogICAgIHZvaWQgcGFnZUJlZ2luVXNp
bmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYnNpdGVEYXRhU3Rv
cmUmKTsKQEAgLTI2MiwxMCArMjQ5LDggQEAgcHVibGljOgogICAgIHZvaWQgYWRkU3VwcG9ydGVk
UGx1Z2luKFN0cmluZyYmIG1hdGNoaW5nRG9tYWluLCBTdHJpbmcmJiBuYW1lLCBIYXNoU2V0PFN0
cmluZz4mJiBtaW1lVHlwZXMsIEhhc2hTZXQ8U3RyaW5nPiBleHRlbnNpb25zKTsKICAgICB2b2lk
IGNsZWFyU3VwcG9ydGVkUGx1Z2lucygpOwogCi0gICAgUHJvY2Vzc0lEIG5ldHdvcmtQcm9jZXNz
SWRlbnRpZmllcigpOwogICAgIFByb2Nlc3NJRCBwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcigp
OwogICAgIHZvaWQgYWN0aXZlUGFnZXNPcmlnaW5zSW5XZWJQcm9jZXNzRm9yVGVzdGluZyhQcm9j
ZXNzSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYpOwotICAg
IGJvb2wgbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5n
Jik7CiAgICAgdm9pZCBzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoU2Vjb25kcyk7
CiAgICAgdm9pZCByZXNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZygpOwogCkBAIC0z
MDksOCArMjk0LDYgQEAgcHVibGljOgogICAgIEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGll
bnQmIGhpc3RvcnlDbGllbnQoKSB7IHJldHVybiAqbV9oaXN0b3J5Q2xpZW50OyB9CiAgICAgV2Vi
Q29udGV4dENsaWVudCYgY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KIAotICAgIEFQSTo6
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQo
KSBjb25zdCB7IHJldHVybiAqbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7IH0KLQogICAg
IHN0cnVjdCBTdGF0aXN0aWNzIHsKICAgICAgICAgdW5zaWduZWQgd2tWaWV3Q291bnQ7CiAgICAg
ICAgIHVuc2lnbmVkIHdrUGFnZUNvdW50OwpAQCAtMzIwLDEyICszMDMsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJvb2wpOwog
Ci0gICAgdm9pZCBjbGVhckNhY2hlZENyZWRlbnRpYWxzKCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGVO
ZXR3b3JrUHJvY2VzcygpOwogICAgIHZvaWQgdGVybWluYXRlQWxsV2ViQ29udGVudFByb2Nlc3Nl
cygpOwotICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3Rp
bmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHNlbmROZXR3b3JrUHJv
Y2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLSAgICB2b2lkIHNlbmROZXR3
b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwogICAgIHZvaWQgdGVybWluYXRlU2VydmljZVdvcmtlcnMo
KTsKIAogICAgIHZvaWQgc3luY05ldHdvcmtQcm9jZXNzQ29va2llcygpOwpAQCAtMzk2LDE5ICsz
NzQsMTMgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICAvLyBOZXR3b3JrIFByb2Nlc3MgTWFuYWdl
bWVudAotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIGVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNp
dGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3JlID0gbnVsbHB0cik7Ci0gICAgTmV0d29y
a1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX25ldHdvcmtQ
cm9jZXNzLmdldCgpOyB9CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1By
b2Nlc3NQcm94eSYpOwogCi0gICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2Vi
UHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwotCiAgICAgYm9vbCBpc1NlcnZpY2VXb3JrZXJQ
YWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmllcikgY29uc3Q7CiAjaWYgRU5BQkxFKFNFUlZJQ0Vf
V09SS0VSKQotICAgIHZvaWQgZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdv
cmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICBz
dGF0aWMgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nl
c3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBB
TDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgcmVt
b3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5Jik7Ci0gICAgc2l6
ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NlcnZpY2VX
b3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKTsgfQotICAgIHZvaWQgc2V0QWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGJvb2wgYWxsb3dzKSB7IG1fYWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyID0gYWxsb3dzOyB9Ci0gICAgYm9vbCBhbGxvd3NB
bnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoKSBjb25zdCB7IHJldHVybiBtX2FsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjsgfQorICAgIHNpemVfdCBzZXJ2aWNl
V29ya2VyUHJveGllc0NvdW50KCkgY29uc3QgeyByZXR1cm4gc2VydmljZVdvcmtlclByb2Nlc3Nl
cygpLmNvbXB1dGVTaXplKCk7IH0KICAgICB2b2lkIHVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdl
bnQoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpOwogICAgIGNvbnN0IE9wdGlvbmFsPFVzZXJDb250
ZW50Q29udHJvbGxlcklkZW50aWZpZXI+JiB1c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVy
Rm9yU2VydmljZVdvcmtlcnMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJDb250ZW50Q29udHJvbGxl
cklERm9yU2VydmljZVdvcmtlcjsgfQogICAgIGJvb2wgaGFzU2VydmljZVdvcmtlckZvcmVncm91
bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdDsKQEAgLTQ4MCw4ICs0NTIsNiBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGNsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2Uo
V2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlJiYpOwogI2VuZGlmCi0gICAgYm9vbCBzdG9yYWdlQWNj
ZXNzQVBJRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7
IH0KLSAgICB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2wpOwogCiAgICAgc3Rh
dGljIHVpbnQ2NF90IHJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKEZ1bmN0aW9u
PHZvaWQoV2ViUHJvY2Vzc1Bvb2wmKT4mJik7CiAgICAgc3RhdGljIHZvaWQgdW5yZWdpc3RlclBy
b2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcih1aW50NjRfdCBpZGVudGlmaWVyKTsKQEAgLTUwOCw3
ICs0NzgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9y
VGVzdGluZygpOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICB2
b2lkIGRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklE
LCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4mIHRvRG9tYWluLCBPcHRpb25TZXQ8V2ViQ29yZTo6Q3Jv
c3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6RmxhZz4sIFdlYlBhZ2VQcm94eUlkZW50aWZp
ZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsKICAgICB2b2lkIHNldERvbWFpbnNXaXRoVXNl
ckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYpOwogICAg
IHZvaWQgc2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0aW5nKGNvbnN0IFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5RG9tYWluLCBjb25zdCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiYgdGhpcmRQYXJ0eURvbWFpbiwgYm9vbCBzaG91bGRTY2hlZHVsZU5vdGlm
aWNhdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIHNlbmRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CkBAIC01MzUsOCArNTA0LDggQEAgcHVibGljOgogICAgIAogICAgIFBsdWdJbkF1dG9T
dGFydFByb3ZpZGVyJiBwbHVnSW5BdXRvU3RhcnRQcm92aWRlcigpIHsgcmV0dXJuIG1fcGx1Z0lu
QXV0b1N0YXJ0UHJvdmlkZXI7IH0KIAotICAgIHZvaWQgc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2Vzcyhib29sKTsKLSAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MoKSBjb25zdCB7IHJldHVybiBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7IH0K
KyAgICBzdGF0aWMgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wp
OworICAgIHN0YXRpYyBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKSB7IHJl
dHVybiBzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7IH0KIAogI2lmIEVOQUJMRShD
RlBSRUZTX0RJUkVDVF9NT0RFKQogICAgIHZvaWQgbm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKGNv
bnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgT3B0aW9uYWw8U3Ry
aW5nPiYgZW5jb2RlZFZhbHVlKTsKQEAgLTU1Myw2ICs1MjIsMTcgQEAgcHVibGljOgogICAgIHZv
aWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8
eHBjX29iamVjdF90PiBlbmRwb2ludE1lc3NhZ2UpOwogI2VuZGlmCiAKKyAgICBzdGF0aWMgdm9p
ZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycyYpOworICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzV2l0aEN1
c3RvbVByb3RvY29sSGFuZGxlcnMoKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAg
c3RhdGljIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmlu
ZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdD
YWNoZXNEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJl
Y3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgp
OworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIApA
QCAtNTY2LDggKzU0Niw2IEBAIHByaXZhdGU6CiAgICAgV2ViUHJvY2Vzc1Byb3h5JiBjcmVhdGVO
ZXdXZWJQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9jZXNzUHJveHk6OklzUHJld2Fy
bWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8pOwogICAgIHZvaWQgaW5pdGlh
bGl6ZU5ld1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiwgV2Vic2l0ZURhdGFTdG9yZSosIFdl
YlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVk
OjpObyk7CiAKLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0KICAgICB2b2lkIGhhbmRsZU1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRh
dGEmIG1lc3NhZ2VCb2R5KTsKICAgICB2b2lkIGhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYg
bWVzc2FnZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlckRhdGEmJik+JiYpOwogCkBA
IC01OTEsMTQgKzU2OSw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIHVzZXNTaW5nbGVXZWJQcm9j
ZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT51c2VzU2luZ2xlV2ViUHJvY2Vz
cygpOyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyBTdHJpbmcgY29v
a2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgcGFyZW50QnVuZGxlRGly
ZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7
Ci0gICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgc3Rh
dGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsKLSNlbmRpZgotCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCByZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygp
OwogICAgIHZvaWQgdW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpOwpAQCAtNjQwLDkg
KzYxMCw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vha1B0cjxX
ZWJQcm9jZXNzUHJveHk+PiBtX2R1bW15UHJvY2Vzc1Byb3hpZXM7IC8vIExpZ2h0d2VpZ2h0IFdl
YlByb2Nlc3NQcm94eSBvYmplY3RzIHdpdGhvdXQgYmFja2luZyBwcm9jZXNzLgogCiAjaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4gbV9z
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzOworICAgIHN0YXRpYyBXZWFrSGFzaFNldDxXZWJQcm9jZXNz
UHJveHk+JiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCk7CiAgICAgYm9vbCBtX3dhaXRpbmdGb3JX
b3JrZXJDb250ZXh0UHJvY2Vzc0Nvbm5lY3Rpb24geyBmYWxzZSB9OwotICAgIGJvb2wgbV9hbGxv
d3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIgeyBmYWxzZSB9OwogICAgIFN0cmlu
ZyBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQ7CiAgICAgT3B0aW9uYWw8V2ViUHJlZmVyZW5jZXNT
dG9yZT4gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXM7CiAgICAgT3B0aW9uYWw8VXNlckNvbnRl
bnRDb250cm9sbGVySWRlbnRpZmllcj4gbV91c2VyQ29udGVudENvbnRyb2xsZXJJREZvclNlcnZp
Y2VXb3JrZXI7CkBAIC02NTgsNyArNjI3LDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiBtX2F1dG9tYXRpb25DbGllbnQ7CiAgICAgVW5pcXVl
UmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+IG1fZG93bmxvYWRDbGllbnQ7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+IG1faGlzdG9yeUNsaWVudDsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+IG1f
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogCiAgICAgUmVmUHRyPFdlYkF1dG9tYXRpb25T
ZXNzaW9uPiBtX2F1dG9tYXRpb25TZXNzaW9uOwogCkBAIC02OTAsOCArNjU4LDYgQEAgcHJpdmF0
ZToKICAgICBib29sIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQgeyBmYWxzZSB9OwogICAgIGRvdWJs
ZSBtX21lbW9yeVNhbXBsZXJJbnRlcnZhbCB7IDE0MDAuMCB9OwogCi0gICAgUmVmUHRyPFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRlRGF0YVN0b3JlOwotCiAgICAgdHlwZWRlZiBI
YXNoTWFwPGNvbnN0IGNoYXIqLCBSZWZQdHI8V2ViQ29udGV4dFN1cHBsZW1lbnQ+LCBQdHJIYXNo
PGNvbnN0IGNoYXIqPj4gV2ViQ29udGV4dFN1cHBsZW1lbnRNYXA7CiAgICAgV2ViQ29udGV4dFN1
cHBsZW1lbnRNYXAgbV9zdXBwbGVtZW50czsKIApAQCAtNzI0LDggKzY5MCw2IEBAIHByaXZhdGU6
CiAKICAgICBib29sIG1fcHJvY2Vzc1Rlcm1pbmF0aW9uRW5hYmxlZCB7IHRydWUgfTsKIAotICAg
IHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwot
CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPERpY3Rpb25hcnlDYWxsYmFjaz4+IG1fZGlj
dGlvbmFyeUNhbGxiYWNrczsKIAogI2lmIFVTRShTT1VQKQpAQCAtNzY3LDcgKzczMSw2IEBAIHBy
aXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgYm9vbCBtX2Nvb2tpZVN0b3JhZ2VQYXJ0
aXRpb25pbmdFbmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgbV9zdG9yYWdlQWNj
ZXNzQVBJRW5hYmxlZCB7IGZhbHNlIH07CiAKICAgICBzdHJ1Y3QgUGF0aHMgewogICAgICAgICBT
dHJpbmcgaW5qZWN0ZWRCdW5kbGVQYXRoOwpAQCAtODMxLDcgKzc5NCw3IEBAIHByaXZhdGU6CiAj
ZWxzZQogICAgIGJvb2wgbV9pc0RlbGF5ZWRXZWJQcm9jZXNzTGF1bmNoRGlzYWJsZWQgeyBmYWxz
ZSB9OwogI2VuZGlmCi0gICAgYm9vbCBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mg
eyBmYWxzZSB9OworICAgIHN0YXRpYyBib29sIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzczsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgSGFzaFNl
dDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gbV9kb21haW5zV2l0aFVzZXJJbnRlcmFjdGlv
bjsKQEAgLTg0MiwyMCArODA1LDYgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNz
KFQmJiBtZXNzYWdlKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1By
b2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQo
c3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJ
Zk5lY2Vzc2FyeShUJiYgbWVzc2FnZSkKLXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwot
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsK
LX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb0Fs
bFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNzYWdlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXggMDgzYTdlNzlhNmRlYmYwZjI5OGNhYzI5OTJlMjcy
MzBhYWI1YjFhZS4uZjdlMGMxZjc2NWYzYjQ1NzU2ZDBjODA0YTkwODY5YjBhOGI5MTlkYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC03MzcsNyAr
NzM3LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
KHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbiwgTWUKIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6
OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpH
ZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQogewotICAg
IG1fcHJvY2Vzc1Bvb2wtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92
ZShyZXBseSkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOwogfQogCiAjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmlu
ZGV4IGVlZTc4ZmJjOTg4NjQ5NDc2ZDEwOTViNDljZjEwNmMxODQ0NWQyNDUuLjhiNjg5NjM0OGM2
ZjJmZGZjZmRkZTE0ODg5NjAxNWYzNjMyZDY0N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0
b3JlQ29jb2EubW0KQEAgLTI4LDYgKzI4LDcgQEAKIAogI2ltcG9ydCAiQ29va2llU3RvcmFnZVV0
aWxzQ0YuaCIKICNpbXBvcnQgIkRlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLmgiCisjaW1wb3J0ICJO
ZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0ICJTYW5kYm94VXRpbGl0aWVzLmgiCiAjaW1w
b3J0ICJTdG9yYWdlTWFuYWdlci5oIgogI2ltcG9ydCAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclBy
b3h5LmgiCkBAIC00NCw2ICs0NSw3IEBACiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
ICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+Cisj
aW1wb3J0IDx3dGYvY29jb2EvRW50aXRsZW1lbnRzLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNTYzLDQgKzU2NSw5
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVpbml0aWFsaXplQXBwQm91bmREb21haW5zKCkK
IH0KICNlbmRpZgogCitib29sIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYgZW50aXRsZW1lbnQpCit7CisgICAgcmV0
dXJuIFdURjo6aGFzRW50aXRsZW1lbnQobmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCktPnhw
Y0Nvbm5lY3Rpb24oKSwgZW50aXRsZW1lbnQudXRmOCgpLmRhdGEoKSk7Cit9CisKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5jcHAKaW5kZXggMDI0MTliN2FjMGIzZjAwYmMyMzU1OTRmMTkzMTgwYzNjYTJkNGI4Zi4u
YzFiOGM2N2YzNGIxZjIzMTNjNzUxZjMzMDY0YjkzMTk4YjkyOGMzYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5j
cHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3Rp
Y3MuaCIKICNpbmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQmFj
a0ZvcndhcmRDYWNoZS5oIgorI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2lu
Y2x1ZGUgIldlYktpdDJJbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAj
aW5jbHVkZSAiV2ViUHJvY2Vzc0NhY2hlLmgiCkBAIC03NSw2ICs3NiwxMCBAQAogI2luY2x1ZGUg
IlNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENP
Q09BKQorI2luY2x1ZGUgIkRlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLmgiCisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBib29sIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0Zv
ckFsbE9yaWdpbnM7CkBAIC04MywxMyArODgsMjkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjph
bGxvd1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMoKQogICAgIGFsbG93c1dlYnNpdGVE
YXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMgPSB0cnVlOwogfQogCi1zdGF0aWMgSGFzaE1hcDxQQUw6
OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBub25EZWZhdWx0RGF0YVN0b3JlcygpCitz
dGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBhbGxEYXRh
U3RvcmVzKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3Jl
Kj4+IG1hcDsKICAgICByZXR1cm4gbWFwOwogfQogCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZv
ckVhY2hXZWJzaXRlRGF0YVN0b3JlKEZ1bmN0aW9uPHZvaWQoV2Vic2l0ZURhdGFTdG9yZSYpPiYm
IGZ1bmN0aW9uKQoreworICAgIGZvciAoYXV0byogZGF0YVN0b3JlIDogYWxsRGF0YVN0b3Jlcygp
LnZhbHVlcygpKQorICAgICAgICBmdW5jdGlvbigqZGF0YVN0b3JlKTsKK30KKworLy8gRklYTUU6
IFJlcGxhY2UgdGhpcyB3aXRoIHRoZSBjb3JyZWN0IHdlYnNpdGUgZGF0YSBzdG9yZXMuCitWZWN0
b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRl
cnNGcm9tQWxsU3RvcmVzKCkKK3sKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnM+IGFsbFBhcmFtZXRlcnM7CisgICAgYWxsUGFyYW1ldGVycy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGFsbERhdGFTdG9yZXMoKS5zaXplKCkpOworICAgIGZvciAoYXV0byogc3RvcmUgOiBhbGxE
YXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAgICAgIGFsbFBhcmFtZXRlcnMudW5jaGVja2VkQXBw
ZW5kKHN0b3JlLT5wYXJhbWV0ZXJzKCkpOworICAgIHJldHVybiBhbGxQYXJhbWV0ZXJzOworfQor
CiBSZWY8V2Vic2l0ZURhdGFTdG9yZT4gV2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlTm9uUGVyc2lz
dGVudCgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vic2l0ZURhdGFTdG9yZShXZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKElzUGVyc2lzdGVudDo6Tm8pLCBQQUw6
OlNlc3Npb25JRDo6Z2VuZXJhdGVFcGhlbWVyYWxTZXNzaW9uSUQoKSkpOwpAQCAtMTE1LDEwICsx
MzYsMTEgQEAgV2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURh
dGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYgY29uZmlndXIKICNlbmRpZgogewogICAgIFdURjo6c2V0
UHJvY2Vzc1ByaXZpbGVnZXMoYWxsUHJpdmlsZWdlcygpKTsKLSAgICBtYXliZVJlZ2lzdGVyV2l0
aFNlc3Npb25JRE1hcCgpOworICAgIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogICAgIHBs
YXRmb3JtSW5pdGlhbGl6ZSgpOwogCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLmFkZFNlc3Npb24oKnRoaXMpOwogfQogCiBXZWJzaXRlRGF0YVN0
b3JlOjp+V2Vic2l0ZURhdGFTdG9yZSgpCkBAIC0xMjgsMTcgKzE1MCwxMiBAQCBXZWJzaXRlRGF0
YVN0b3JlOjp+V2Vic2l0ZURhdGFTdG9yZSgpCiAKICAgICBwbGF0Zm9ybURlc3Ryb3koKTsKIAot
ICAgIGlmIChtX3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KSB7Ci0gICAgICAgIEFTU0VSVChub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25J
RCkgPT0gdGhpcyk7Ci0gICAgICAgIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vz
c2lvbklEKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29s
OjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwotICAgICAgICB9Ci0gICAg
fQorICAgIEFTU0VSVChhbGxEYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsK
KyAgICBhbGxEYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwogI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKLSAgICAgICAgaWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94eSA9IEdQVVByb2Nlc3NQcm94eTo6
c2luZ2xldG9uSWZDcmVhdGVkKCkpCi0gICAgICAgICAgICBncHVQcm9jZXNzUHJveHktPnJlbW92
ZVNlc3Npb24obV9zZXNzaW9uSUQpOworICAgIGlmIChhdXRvKiBncHVQcm9jZXNzUHJveHkgPSBH
UFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQorICAgICAgICBncHVQcm9jZXNz
UHJveHktPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwogI2VuZGlmCiB9CiAKQEAgLTE2OSwx
NyArMTg2LDMyIEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0
cygpCiAgICAgcmV0dXJuICEhZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpOwogfQogCi12b2lkIFdl
YnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKK3ZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKK3sKKyAgICBhdXRvIHJl
c3VsdCA9IGFsbERhdGFTdG9yZXMoKS5hZGQobV9zZXNzaW9uSUQsIHRoaXMpOworICAgIEFTU0VS
VF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK1dlYnNpdGVEYXRhU3Rv
cmUqIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBhdXRvIHJlc3VsdCA9IG5vbkRl
ZmF1bHREYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKLSAgICAgICAgQVNTRVJU
X1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICByZXR1cm4gYWxsRGF0YVN0
b3JlcygpLmdldChzZXNzaW9uSUQpOworfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJzaXRl
RGF0YVN0b3JlOjpuZXR3b3JrUHJvY2VzcygpCit7CisgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNz
KSB7CisgICAgICAgIGlmIChtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQorICAgICAgICAgICAg
bV9uZXR3b3JrUHJvY2VzcyA9ICZkZWZhdWx0RGF0YVN0b3JlKCktPm5ldHdvcmtQcm9jZXNzKCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpjcmVhdGUoKTsKICAgICB9CisKKyAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nl
c3M7CiB9CiAKLVdlYnNpdGVEYXRhU3RvcmUqIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9u
RGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCitO
ZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2VzcygpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpID8gbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklEKSA6IG51bGxw
dHI7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8V2Vic2l0ZURhdGFTdG9yZSY+KCp0aGlzKS5uZXR3
b3JrUHJvY2VzcygpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyUHJvY2Vz
cyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCkBAIC0xOTUsMTIgKzIyNyw2IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6dW5yZWdpc3RlclByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNz
KQogICAgIG1fcHJvY2Vzc2VzLnJlbW92ZShwcm9jZXNzKTsKIH0KIAotV2ViUHJvY2Vzc1Bvb2wq
IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMo
KQotewotICAgIGF1dG8gcG9vbHMgPSBwcm9jZXNzUG9vbHMoMSk7Ci0gICAgcmV0dXJuIHBvb2xz
LmlzRW1wdHkoKSA/IG51bGxwdHIgOiBwb29scy5iZWdpbigpLT5nZXQoKTsKLX0KLQogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpyZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpCiB7CiAgICAg
aWYgKG1faGFzUmVzb2x2ZWREaXJlY3RvcmllcykKQEAgLTQ0MiwxNSArNDY4LDE0IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkoT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4gZGF0YVR5cGVzLCBPCiAgICAgYXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBj
b21wdXRlTmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlRm9yRGF0YUZldGNoKGRhdGFUeXBlcywgIWlz
UGVyc2lzdGVudCgpKTsKICAgICBpZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nl
c3NBY2Nlc3NUeXBlOjpOb25lKSB7CiAgICAgICAgIGF1dG8gcG9vbHMgPSBuZXR3b3JrUHJvY2Vz
c0FjY2Vzc1R5cGUgPT0gUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaCA/IGVuc3VyZVByb2Nlc3NQ
b29scygpIDogcHJvY2Vzc1Bvb2xzKCk7CisgICAgICAgIC8vIEZJWE1FOiBJdCBtaWdodCBub3Qg
YmUgY29ycmVjdCB0byBpdGVyYXRlIHRoZSBwb29scyBoZXJlLgogICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nl
c3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5
SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAg
ICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAg
ICAgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgpAQCAtNDU4LDcgKzQ4
Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkoT3B0aW9uU2V0
PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBPCiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAg
ICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Np
b25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nl
c3NQb29sXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkgeworICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MoKS5mZXRjaFdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIGZldGNoT3B0
aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFdlYnNpdGVEYXRhIHdlYnNp
dGVEYXRhKSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5k
aW5nQ2FsbGJhY2soV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgIH0KQEAgLTcyNiwxNSArNzUxLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3Zl
RGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAgICAg
YXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlTmV0d29ya1Byb2Nlc3NBY2Nl
c3NUeXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwogICAgIGlm
IChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsK
ICAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQcm9jZXNz
QWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNzUG9vbHMo
KTsKKyAgICAgICAgLy8gRklYTUU6IEl0IG1pZ2h0IG5vdCBiZSBjb3JyZWN0IHRvIGl0ZXJhdGUg
cG9vbHMgaGVyZS4KICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7CiAg
ICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewogICAgICAgICAg
ICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAg
ICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2Ug
UHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7CisgICAgICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MoKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNz
QWNjZXNzVHlwZTo6Tm9uZToKQEAgLTc0Miw3ICs3NjYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxs
VGltZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFk
ZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVk
U2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CisgICAgICAgICAgICBu
ZXR3b3JrUHJvY2VzcygpLmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMs
IG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CiAgICAg
ICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsK
ICAgICAgICAgICAgIH0pOwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBA
IC04OTMsMTQgKzkxNyw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRp
b25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAjaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNp
dGVEYXRhVHlwZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcykpIHsKICAgICAgICAgaWYgKCFkaWRO
b3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEpIHsKLSAgICAgICAgICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2so
KTsKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNz
aW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewot
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5n
Q2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRl
RGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5k
aW5nQ2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAgICAgY2Fs
bGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKQEAgLTk5NCwxMiArMTAxMywx
MCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NU
eXBlKSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hl
ZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAgICAgICAgICAg
ICAgICBuZXR3b3JrUHJvY2VzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
ICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgpAQCAtMTAyMSw3ICsxMDM4LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+IGRhdGFUeXBlcywgY29uc3QgVmUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2Fs
bGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9z
ZXNzaW9uSUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVI
b3N0TmFtZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vz
c1Bvb2xdIHsKKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGFG
b3JPcmlnaW5zKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1l
cywgSFNUU0NhY2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3IsIHByb2Nlc3NQb29sXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9y
LT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBA
IC0xMTg1LDggKzEyMDIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3Rp
Y3NFbnRyaWVzKHNpemVfdCBtYXhpbXVtRW50cnlDb3VudCwgQ29tcGxldAogCiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNl
dE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50cnlDb3VudCwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtX3Nlc3Npb25JRCwgbWF4aW11bUVudHJ5Q291bnQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMTk1LDggKzEyMTEsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1
bmVUYXJnZXRDb3VudCwgQ29tcGxldGlvbgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAg
ICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNE
b3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVz
RG93blRvKG1fc2Vzc2lvbklELCBwcnVuZVRhcmdldENvdW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGlt
ZShTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTEyMDUsOCArMTIyMCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8CiAK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldEdyYW5kZmF0aGVyaW5nVGltZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGlt
ZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjE1LDIwICsxMjI5LDEzIEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKFNlY29uZHMgc2Vjb25kcywKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TWluaW11bVRp
bWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogICAgIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkdW1w
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmlu
ZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICAgICAgcHJvY2Vzcy0+ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNz
aW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZHVtcFJlc291cmNlTG9hZFN0
YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNQcmV2YWxlbnQpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTI0MCwxMiArMTI0Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNQcmV2YWxlbnRSZXNv
dXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1ByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVk
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNQcmV2YWxlbnQp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI1NywxMiArMTI1OSw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+
aXNHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzR3JhbmRmYXRoZXJlZCht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZh
bGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjc2LDggKzEyNzMsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxl
bnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI5MSwxMCArMTI4
Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1
Z01vZGUoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRl
YnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3Vy
Y2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ZlcnlQcmV2
YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTMwNiwxMiArMTI5OSw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAg
IHByb2Nlc3MtPmlzVmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LmlzVmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzI1
LDEwICsxMzEzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVz
b3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGUKICAgICAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0
VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3Np
ZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTMzNyw4ICsxMzIyLDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9y
ZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3Np
ZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKG1f
c2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJM
JiBzdWJGcmFtZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM1MiwyMiArMTMzNiwxNCBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBV
UkwmIHN1YkZyYW1lVVJMLCBjbwogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5zZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBVUkwmIHN1YkZyYW1lVVJM
LCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlu
KGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzODEsMjMgKzEz
NTcsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW4oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVUKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
RG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291
cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIoY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1Jl
Z2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2Up
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwm
IHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTQxMSwxMCArMTM3OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsCiAK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3Vy
Y2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJlc291cmNlVVJM
LCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDI2LDEyICsxMzkwLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1
YnJlc291cmNlVVIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVz
b3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJv
bSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QgVVJMJiB1cmxS
ZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE0NDMsMTIgKzE0MDIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdAogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3Rl
ZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1l
VVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDYwLDI1ICsxNDE0LDE0IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0
b3BGcmFtZVVSTCwgY29uCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZy
YW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20g
fSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRp
cmVjdGluZ1RvKGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIGNvbnN0IFVSTCYgdXJsUmVk
aXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHBy
b2Nlc3MtPmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNSZWRp
cmVjdGluZ1RvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJl
ZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3Rl
ZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDkwLDQ2ICsxNDMzLDI3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+Y2xlYXJQcmV2YWxl
bnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkuY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZh
bHVlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVz
KG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMo
bV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zdWJtaXRUZWxlbWV0cnkobV9zZXNzaW9u
SUQsIFtdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc3VibWl0VGVsZW1ldHJ5
KG1fc2Vzc2lvbklELCBbXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgU2hv
dWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIHNob3VsZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKICAgICAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwg
bW9kaWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ2xl
YXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UsIHNob3Vs
ZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTU2MSwzNSArMTQ4
NSwyNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2bwogCiAgICAgUmVmUHRyPENhbGxiYWNrQWdn
cmVnYXRvcj4gY2FsbGJhY2tBZ2dyZWdhdG9yID0gYWRvcHRSZWYobmV3IENhbGxiYWNrQWdncmVn
YXRvcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5z
ZW5kUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcykuZ2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbY2FsbGJhY2tB
Z2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYgZGF0YSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+YWRkUmVzdWx0KFdURk1vdmUoZGF0YSkpOwotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH0pOwotICAgIH0KKyAgICAvLyBGSVhNRTogY2FsbCBzZW5kUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFJbW1lZGlhdGVseSBoZXJlLgorICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXShWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5
RGF0YT4mJiBkYXRhKSB7CisgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVzdWx0KFdU
Rk1vdmUoZGF0YSkpOworICAgIH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNz
IHNob3VsZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDbGVhcklu
TWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgeyB9LCBzaG91bGRHcmFuZGZhdGhlciwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25J
RCwgeyB9LCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNvb2tpZUJs
b2NraW5nVXBkYXRlKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNvb2tpZUJsb2Nr
aW5nVXBkYXRlKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJv
Y2Vzc2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xNTk4LDI0ICsxNTExLDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0
aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKENvbXBsZXRpb25IYW5kCiAgICAgCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZVN0
YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
dGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgICAgIHByb2Nlc3MtPnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhtX3Nl
c3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuc3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lv
bklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTYyNywyMiArMTUy
OSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFVSTCYgdXJs
LCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldExhc3RTZWVuKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRMYXN0
U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgc2Vj
b25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UoaW50IGRvbWFpbklELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+ZG9tYWluSURFeGlzdHNJbkRhdGFi
YXNlKG1fc2Vzc2lvbklELCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5kb21haW5JREV4aXN0c0luRGF0YWJhc2UobV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VT
dGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHRvcEZyYW1lVXJs
MSwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDIsIFNlY29uZHMgbGFzdFNlZW4sIGJvb2wgaGFkVXNl
ckludGVyYWN0aW9uLCBTZWNvbmRzIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGJvb2wgaXNH
cmFuZGZhdGhlcmVkLCBib29sIGlzUHJldmFsZW50LCBib29sIGlzVmVyeVByZXZhbGVudCwgdW5z
aWduZWQgZGF0YVJlY29yZHNSZW1vdmVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xNjU0LDEwICsxNTQ4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYg
dG9wRnIKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5t
ZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwx
IH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVu
LCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRm
YXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVk
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5tZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdG9wRnJhbWVVcmwxIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVV
cmwyIH0sIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0
YVJlY29yZHNSZW1vdmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVS
TCYgdXJsLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFsbEJ1
dENvb2tpZURhdGFSZW1vdmFsLCBib29sIGlzUHJldmFsZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjY5LDE4ICsxNTYwLDE0IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3Qg
VVJMJiB1cmwsIGJvb2wgaGFkCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgcHJvY2Vzcy0+aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwg
aXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtwcm9j
ZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2No
ZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGlzUHJldmFsZW50LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXROb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChib29sIHZhbHVlLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjg4LDggKzE1NzUs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBsZQogICAgIHVzZUV4cGxpY2l0SVRQU3RhdGUoKTsK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1fc2Vz
c2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVz
dChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoV2ViUGFnZVBy
b3h5SWRlbnRpZmllciBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmlu
Zz4mJiBkb21haW5zKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MDAsNyArMTU4Niw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoV2ViUGFn
ZVByb3h5SWRlbnRpZmllciBwYWdlSUQsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB3
ZWJQYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLmdl
dEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmll
cyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAKQEAgLTE3
MDgsOCArMTU5NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJ
bnRlcmFjdGlvbihTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25ICiB7CiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5z
ZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE3MjMsMTAgKzE2MDgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJ
bnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZAogICAgIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5sb2dVc2VySW50
ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
bG9nVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MzgsMTMgKzE2
MjAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25z
dCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dgogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgICAgICBwcm9jZXNzLT5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21w
bGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNIYWRVc2VySW50
ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVybCwgY29u
c3QgVVJMJiB0b3BVcmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xNzU2LDEzICsxNjMyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpp
c1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVybCwgY29uc3QK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWxhdGlv
bnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5pc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB0b3BVcmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzc2LDEw
ICsxNjQ2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm8KICAgICAKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+Y2xlYXJVc2VySW50ZXJhY3Rpb24obV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJVc2VySW50
ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3OTMsMTAg
KzE2NjAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3Qg
VVJMJiB1cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBDbwogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0R3JhbmRmYXRoZXJlZChtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaXNHcmFuZGZhdGhl
cmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldEdyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODA1
LDEwICsxNjY5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZShi
b29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYKICAgICAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFVzZUlUUERhdGFiYXNl
KG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRVc2VJVFBEYXRhYmFzZShtX3Nlc3Npb25JRCwgdmFsdWUs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoY29uc3QgVVJMJiBm
cm9tVVJMLCBjb25zdCBVUkwmIHRvVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xODE3LDYyICsxNjc4LDM4IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoY29uc3Qg
VVJMJiBmCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5zZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9VUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Q3Jvc3NTaXRlTG9h
ZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRv
VVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5y
ZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25J
RCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5yZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBpbmNsdWRl
SHR0cE9ubHlDb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpbmNsdWRlSHR0cE9ubHlDb29raWVz
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZv
clRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+aGFzTG9jYWxTdG9yYWdlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuaGFzTG9jYWxTdG9yYWdlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyhj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNJc29s
YXRlZFNlc3Npb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5oYXNJc29sYXRlZFNlc3Npb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93
bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRTaG91bGREb3duZ3Jh
ZGVSZWZlcnJlckZvclRlc3RpbmcoZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlckZv
clRlc3RpbmcoZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogI2lmICFQ
TEFURk9STShDT0NPQSkKQEAgLTE5MDMsMTAgKzE3NDAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoV2ViQ29yZTo6VGhpcmRQYXJ0eUNv
b2tpZQogICAgICAgICAgICAgd2ViUHJvY2Vzcy5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdN
b2RlKGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICAgICB9CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9k
ZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hv
dWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhib29sIGVuYWJsZWQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5MTQs
MTAgKzE3NDgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZQogICAgIGF1dG8gZmxhZyA9IGVu
YWJsZWQgPyBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6WWVzIDog
V2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6Ok5vOwogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFNo
b3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IGZsYWcsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyht
X3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNp
dGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkyNSwyMCArMTc1NiwxNCBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IGF1dG8gbW9kZSA9IGVuYWJsZWQgPyBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZTo6QWxsQnV0Q29va2llcyA6IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlOjpOb25lOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgbW9kZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IG1vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9y
VGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGlu
ZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb1Nh
bWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlI
b3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eVVSTCwgY29uc3Qg
VVJMJiBjbmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTk1MCw4ICsxNzc1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3QKIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwg
Zmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9u
SUQsIGZpcnN0UGFydHlVUkwuaG9zdCgpLnRvU3RyaW5nKCksIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0eUNO
QU1FRG9tYWluRm9yVGVzdGluZyhjb25zdCBVUkwmIGNuYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTYzLDggKzE3ODcsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05B
TUVEb21haW5Gb3JUZXN0aW5nKAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nl
c3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZv
clRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVV
UkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KICNlbmRpZiAvLyBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCkBAIC0xOTcz
LDggKzE3OTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9y
UHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQwogI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZh
bGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50
UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Vjb25kcyk7CiAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKQEAgLTE5ODQsMjYgKzE4MDYsMTIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRD
YWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhTZWNvbmRzIHNlY29uZHMsIEMKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291
cmNlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAj
aWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDYWNoZU1h
eEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldENhY2hlTWF4QWdl
Q2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAjZW5kaWYKIH0KIAot
Ym9vbCBXZWJzaXRlRGF0YVN0b3JlOjppc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNz
UG9vbCYgcHJvY2Vzc1Bvb2wpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHByb2Nlc3NQb29sRGF0
YVN0b3JlID0gcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpKQotICAgICAgICByZXR1cm4g
cHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPT0gdGhpczsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3NQcm94eSA9IHByb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIHJldHVybiBu
ZXR3b3JrUHJvY2Vzc1Byb3h5LT5oYXNTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0ZURhdGFT
dG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uc3QKIHsKICAgICBIYXNoU2V0PFJl
ZlB0cjxXZWJQcm9jZXNzUG9vbD4+IHByb2Nlc3NQb29sczsKQEAgLTIwMTgsOSArMTgyNiw2IEBA
IEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vz
c1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uCiAgICAgaWYgKHByb2Nlc3NQb29scy5pc0VtcHR5KCkp
IHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgb25lIG9mIHRoZSBsZWdhY3kgZGF0YSBzdG9y
ZXMuCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxs
UHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmICghaXNBc3NvY2lhdGVkUHJvY2Vzc1Bv
b2woKnByb2Nlc3NQb29sKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQogICAgICAgICAg
ICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9jZXNzUG9vbCk7CiAgICAgICAgICAgICBpZiAocHJvY2Vz
c1Bvb2xzLnNpemUoKSA9PSBsaW1pdCkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIxMDks
NiArMTkxNCw0MyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZU1lZGlhS2V5cyhjb25z
dCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksCiAgICAgfQogfQogCit2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2wgZW5hYmxlZCkK
K3sKKyAgICBtX3N0b3JhZ2VBY2Nlc3NBUElFbmFibGVkID0gZW5hYmxlZDsKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZChlbmFibGVkKSwgMCk7CisjZW5kaWYKK30K
Kwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKCkKK3sKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckNh
Y2hlZENyZWRlbnRpYWxzKCksIDApOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnRlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOworICAgIG1f
bmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
bmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNlbmRQcmVwYXJlVG9TdXNwZW5kKElzU3VzcGVuc2lvbkltbWluZW50OjpObywgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3
b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKQoreworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7
Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1l
KCkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7Cit9CisK
IGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSBj
b25zdAogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMTM4LDE3
ICsxOTgwLDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgICAgICAKICAgICAgICAgcmVzb2x2ZURpcmVj
dG9yaWVzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRU
b05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpKTsKKyAgICAgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpLCAwKTsKKyAgICAgICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAgICAgICAgICAgcHJvY2Vzc1Bv
b2wtPnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHRydWUpLCBtX3Nlc3Npb25JRCk7Ci0gICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpKTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpLCAwKTsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9j
ZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZChmYWxzZSksIG1fc2Vzc2lvbklEKTsKLSAgICB9CiAKICAgICBtX3Jlc291
cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkID0gZmFsc2U7CiAjZWxzZQpAQCAtMjE2MCw4ICsyMDAw
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZChib29sIGVuYWJsZWQpCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NU
ZXN0aW5nQ2FsbGJhY2soRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjYWxsYmFjaykK
IHsKICAgICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtp
bmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dU
ZXN0aW5nRXZlbnQodHJ1ZSksIDApOwogICAgIH0KICAgICAKICAgICBtX3N0YXRpc3RpY3NUZXN0
aW5nQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKQEAgLTIxODAsOCArMjAxOSw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShi
b29sIGVuYWJsZWQsIENvbXBsZXRpCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWdNb2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CiAgICAgVU5VU0VEX1BBUkFNKGNvbXBs
ZXRpb25IYW5kbGVyKTsKQEAgLTIxOTYsMjAgKzIwMzQsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MtPmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotI2VuZGlmCisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
KyNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworI2VuZGlmCiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGJvb2wgZW5h
YmxlZCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEFkQ2xpY2tBdHRy
aWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMjMxLDI5ICsyMDY0LDYgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZFN0YXRpc3RpY3NJbldlYlByb2Nlc3NlcyhDb21wbGV0
aW9uSGFuZGwKIH0KICNlbmRpZgogCi1WZWN0b3I8V2ViQ29yZTo6Q29va2llPiBXZWJzaXRlRGF0
YVN0b3JlOjpwZW5kaW5nQ29va2llcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcHlUb1ZlY3Rv
cihtX3BlbmRpbmdDb29raWVzKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphZGRQZW5k
aW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1fcGVuZGlu
Z0Nvb2tpZXMucmVtb3ZlSWYoWyZjb29raWVdKGF1dG8mIHBlbmRpbmdDb29raWUpIHsKLSAgICAg
ICAgcmV0dXJuIHBlbmRpbmdDb29raWUuaXNLZXlFcXVhbChjb29raWUpOwotICAgIH0pOwotICAg
IG1fcGVuZGluZ0Nvb2tpZXMuYWRkKGNvb2tpZSk7Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSkKLXsK
LSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZShjb29raWUpOwotfQotICAgIAotdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdDb29raWVzKCkKLXsKLSAgICBtX3BlbmRpbmdDb29r
aWVzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGlzcGF0Y2hPblF1ZXVl
KEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKIHsKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChX
VEZNb3ZlKGZ1bmN0aW9uKSk7CkBAIC0yMjc3LDggKzIwODcsNiBAQCBXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKIAogICAgIHJlc29sdmVE
aXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7CiAKLSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVz
ID0gcGVuZGluZ0Nvb2tpZXMoKTsKLQogICAgIGF1dG8gcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eSgpOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5SGFuZGxlOwogICAgIGlmICghcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eS5pc0VtcHR5KCkpCkBAIC0yMzgzLDcgKzIxOTEsMTQgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAgICAgcGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5h
YmxlZCA9IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ7CiAjZW5kaWYKICAgICBwbGF0
Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOworI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFwcEhhc1JlcXVlc3Rl
ZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbiA9IGhhc1JlcXVlc3RlZENyb3NzV2Vic2l0
ZVRyYWNraW5nUGVybWlzc2lvbigpOworI2VuZGlmCiAKKyNpZiBVU0UoU09VUCkKKyAgICBuZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShz
ZXNzaW9uSUQoKSwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVy
c2lzdGVudFN0b3JhZ2VQYXRoLCBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5j
b29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworI2VuZGlmCisgICAgCiAgICAgcmV0dXJuIHBh
cmFtZXRlcnM7CiB9CiAKQEAgLTI0MTMsMTAgKzIyMjgsNiBAQCBBUEk6OkhUVFBDb29raWVTdG9y
ZSYgV2Vic2l0ZURhdGFTdG9yZTo6Y29va2llU3RvcmUoKQogICAgIHJldHVybiAqbV9jb29raWVT
dG9yZTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vz
cygpCi17Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWls
cyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdp
bkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghaXNQZXJzaXN0
ZW50KCkpIHsKQEAgLTI0MjQsMjMgKzIyMzUsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpn
ZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZUQK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBl
bnN1cmVQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3ModGhpcykuZ2V0TG9jYWxTdG9yYWdlRGV0YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBkZXRhaWxz
KSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGRldGFpbHMpKTsKLSAg
ICAgICAgfSk7Ci0gICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGZldGNoaW5nIGZyb20gbXVsdGlw
bGUgcG9vbHMuCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBBU1NFUlQoIWNvbXBsZXRpb25I
YW5kbGVyKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldExvY2FsU3RvcmFnZURldGFpbHMobV9z
ZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XShhdXRvJiYgZGV0YWlscykgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGRl
dGFpbHMpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3Rh
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnJlc2V0UXVvdGEobV9zZXNz
aW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkucmVzZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKQEAgLTI0NjYsNyArMjI2OSwxMiBAQCBib29sIFdl
YnNpdGVEYXRhU3RvcmU6Omh0dHAzRW5hYmxlZCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQot
I2VuZGlmCisKK2Jvb2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxl
bWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9Cisj
ZW5kaWYgLy8gIVBMQVRGT1JNKENPQ09BKQogCiAjaWYgIVVTRShHTElCKQogV1RGOjpTdHJpbmcg
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9y
eSgpCkBAIC0yNDc4LDM1ICsyMjg2LDE5IEBAIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEoVVJMJiYgb2xkTmFtZSwgVVJM
JiYgbmV3TmFtZSwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOwotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUs
IGRhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICAgICAgfQotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLmFkZFNlc3Npb24oKnRoaXMpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkucmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgb2xkTmFtZSwgbmV3
TmFtZSwgZGF0YVR5cGVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKICNpZiBF
TkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJv
dW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0FwcEJvdW5k
U2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZh
bHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0FwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25J
RCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmNsZWFyQXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jbGVhckFwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuY2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3J3YXJkQXBw
Qm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTI1MjgsNyArMjMyMCw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZChDb21wbGV0
aW9uSGFuZGxlCiAKICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoZ2xvYmFsRGVmYXVsdERh
dGFTdG9yZSgpLmdldCgpLCAqYXBwQm91bmREb21haW5zKTsKIAotICAgIGZvciAoYXV0byogc3Rv
cmUgOiBub25EZWZhdWx0RGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgIGZvciAoYXV0byogc3Rv
cmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkpCiAgICAgICAgIHByb3BhZ2F0ZUFwcEJvdW5k
RG9tYWlucyhzdG9yZSwgKmFwcEJvdW5kRG9tYWlucyk7CiB9CiAKQEAgLTI1MzYsMTAgKzIzMjgs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUChjb25z
dCBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYgogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEFwcEJvdW5kRG9tYWluc0Zv
clJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0QXBwQm91bmRE
b21haW5zRm9yUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgZG9tYWlucywgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRpZgogCkBAIC0yNTQ3LDE2ICsyMzM2LDE0
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29y
a1Byb2Nlc3MoY29uc3QgU3RyaW5nJiBidW5kCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnVwZGF0ZUJ1bmRsZUlkZW50
aWZpZXIoYnVuZGxlSWRlbnRpZmllciwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoYnVuZGxlSWRlbnRpZmllciwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpj
bGVhckJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlm
aWVyKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVh
ckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oCmluZGV4IDE0MDc2YWE5MjRlN2NlMmZmN2Y3M2VkYTM2ODNhODVjNGE2M2RhYWQuLjg2
ZWQ2N2FhMmU0Y2M1ODZkYjVmOTM4Y2JlMWQzMDYxNDJiZmI4MTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAg
LTc1LDYgKzc1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBBdXRoZW50aWNhdG9yTWFu
YWdlcjsKIGNsYXNzIFNlY0tleVByb3h5U3RvcmU7CiBjbGFzcyBEZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZTsKK2NsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHk7CiBjbGFzcyBTT0F1dGhvcml6YXRpb25D
b29yZGluYXRvcjsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIGNsYXNzIFdlYlByb2Nlc3NQb29sOwpA
QCAtMTA4LDcgKzEwOSwxMiBAQCBwdWJsaWM6CiAgICAgV2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vi
c2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB+V2Vi
c2l0ZURhdGFTdG9yZSgpOwogCi0gICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5n
Tm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CisgICAgc3Rh
dGljIHZvaWQgZm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0
YVN0b3JlJik+JiYpOworICAgIAorICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9j
ZXNzKCkgY29uc3Q7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MoKTsK
KworICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Np
b25JRChQQUw6OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlzUGVyc2lzdGVudCgpIGNvbnN0IHsg
cmV0dXJuICFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9CiAgICAgUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTExOCw2ICsxMjQs
MTIgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94
eT4mIHByb2Nlc3NlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc2VzOyB9CiAKKyAgICB2b2lk
IGNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKKyAgICB2b2lkIHRlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzKCk7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVz
dGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2VuZE5ldHdvcmtQ
cm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworICAgIHZvaWQgc2VuZE5l
dHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7CisKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZChib29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoKSBj
b25zdDsKQEAgLTE0Miw2ICsxNTQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRMb2NhbFN0b3Jh
Z2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tl
cjo6T3JpZ2luRGV0YWlscz4mJik+JiYpOwogICAgIHZvaWQgc2V0Q2FjaGVNb2RlbFN5bmNocm9u
b3VzbHlGb3JUZXN0aW5nKENhY2hlTW9kZWwpOwogCisgICAgYm9vbCBzdG9yYWdlQWNjZXNzQVBJ
RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7IH0KKyAg
ICB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2wpOworCiAjaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICB2b2lkIGZldGNoRGF0YUZvclJlZ2lzdHJhYmxl
RG9tYWlucyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRh
RmV0Y2hPcHRpb24+LCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+Jiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+JiYsIEhhc2hT
ZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYpPiYmKTsKICAgICB2b2lkIGNsZWFyUHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
QEAgLTIyOSwxNSArMjQ0LDggQEAgcHVibGljOgogCiAgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4gbV9kZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sRm9yQ29v
a2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlzQXNzb2NpYXRlZFByb2Nlc3NQb29s
KFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cyBwYXJhbWV0ZXJzKCk7Ci0KLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5kaW5nQ29v
a2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpD
b29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29v
a2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVzKCk7CisgICAgc3RhdGljIFZlY3Rv
cjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKTsK
IAogICAgIHZvaWQgZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAKQEAgLTI2
Miw4ICsyNzAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNb2NrV2ViQXV0aGVudGljYXRpb25D
b25maWd1cmF0aW9uKFdlYkNvcmU6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24m
Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKLQogICAg
IGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKCkgeyBy
ZXR1cm4gbV9jb25maWd1cmF0aW9uLmdldCgpOyB9CiAKICAgICBXZWJzaXRlRGF0YVN0b3JlQ2xp
ZW50JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQpAQCAtMjczLDYgKzI3OSw4
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiwg
VVJMJiYsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOwogCisgICAgYm9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGlu
Zyhjb25zdCBTdHJpbmcmKTsKKwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAg
V2ViRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyJiBkZXZpY2VPcmll
bnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXIoKSB7IHJldHVybiBtX2RldmljZU9yaWVu
dGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcjsgfQogI2VuZGlmCkBAIC0zNDksNyArMzU3
LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3Ry
aW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKTsK
ICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNT
dG9yYWdlRGlyZWN0b3J5LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YT4mKTsKIAotICAgIHZvaWQgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICB2
b2lkIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9E
T01BSU5TKQogICAgIHN0YXRpYyBPcHRpb25hbDxIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluPj4gYXBwQm91bmREb21haW5zSWZJbml0aWFsaXplZCgpOwpAQCAtMzg3LDEyICszOTUs
MTEgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5h
YmxlZCB7IHRydWUgfTsKICNlbmRpZgogCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1f
cGVuZGluZ0Nvb2tpZXM7Ci0gICAgCiAgICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBt
X3Byb2Nlc3NlczsKIAogICAgIGJvb2wgbV9pc0l0cFN0YXRlRXhwbGljaXRseVNldCB7IGZhbHNl
IH07CiAgICAgYm9vbCBtX2lzSW5BcHBCcm93c2VyUHJpdmFjeVRlc3RNb2RlRW5hYmxlZCB7IGZh
bHNlIH07CisgICAgYm9vbCBtX3N0b3JhZ2VBY2Nlc3NBUElFbmFibGVkIHsgZmFsc2UgfTsKIAog
I2lmIEhBVkUoU0VDX0tFWV9QUk9YWSkKICAgICBWZWN0b3I8UmVmPFNlY0tleVByb3h5U3RvcmU+
PiBtX3NlY0tleVByb3h5U3RvcmVzOwpAQCAtNDA5LDYgKzQxNiw3IEBAIHByaXZhdGU6CiAgICAg
VW5pcXVlUmVmPFdlYnNpdGVEYXRhU3RvcmVDbGllbnQ+IG1fY2xpZW50OwogCiAgICAgUmVmUHRy
PEFQSTo6SFRUUENvb2tpZVN0b3JlPiBtX2Nvb2tpZVN0b3JlOworICAgIFJlZlB0cjxOZXR3b3Jr
UHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwogCiAjaWYgSEFWRShBUFBfU1NPKQogICAg
IFVuaXF1ZVJlZjxTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcj4gbV9zb0F1dGhvcml6YXRpb25D
b29yZGluYXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKaW5kZXggMTJmOWNk
ODE5YjZkY2NhOGFjNTA5MmEzMGRkOTNjNTNiOGVlOTM0Mi4uNWJhMzkwMGQyZGFmZjA1NmFiZDBj
ZGYwNTdhZTMyODU0ZWJmZWNmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAK
QEAgLTM5LDggKzM5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdv
cmtQYXJhbWV0ZXJzKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJgogICAgIGF1dG8mIG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
OwogICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3Jh
Z2VFbmFibGVkID0gbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkOwogCi0gICAg
aWYgKGF1dG8qIHByb2Nlc3NQb29sID0gcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0
aW9ucygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKKyAgICBXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZ2V0Q29va2llUGVyc2lzdGVudFN0
b3JhZ2UobV9zZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0
ZW50U3RvcmFnZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50
U3RvcmFnZVR5cGUpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBlcnNpc3RlbnRD
cmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoYm9vbCBlbmFibGVkKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKaW5kZXggMGE4NGE3
NTkwZDlhOTg1YmZjOTk2ODRhNDg5NTEzNzRlNWIyOTQyOS4uMjdmMjNlYTA2NWRjNzVjZTRhODI3
MGM1NzZlYTJhYTU1YWIwZGM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpM
YXVuY2hPcHRpb25zJiBsCiAgICAgICAgIGlmICghZGF0YVN0b3JlKSB7CiAgICAgICAgICAgICAv
LyBQcmV3YXJtZWQgcHJvY2Vzc2VzIGRvbid0IGhhdmUgYSBXZWJzaXRlRGF0YVN0b3JlIHlldCwg
c28gdXNlIHRoZSBwcmltYXJ5IFdlYnNpdGVEYXRhU3RvcmUgZnJvbSB0aGUgV2ViUHJvY2Vzc1Bv
b2wuCiAgICAgICAgICAgICAvLyBUaGUgcHJvY2VzcyB3b24ndCBiZSB1c2VkIGlmIGN1cnJlbnQg
V2Vic2l0ZURhdGFTdG9yZSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgV2ViUHJvY2Vzc1Bvb2wgcHJp
bWFyeSBvbmUuCi0gICAgICAgICAgICBkYXRhU3RvcmUgPSBtX3Byb2Nlc3NQb29sLT53ZWJzaXRl
RGF0YVN0b3JlKCk7CisgICAgICAgICAgICBkYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoZGF0
YVN0b3JlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29v
a2llTWFuYWdlclByb3h5U291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dl
YkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCmluZGV4IDlmN2JlM2M5NDFiNmNkMGExYjk0Y2Ix
MzYwOThmM2EwNDFjZWZmOTkuLjA4OTI4ZmNkMzE2ZDg4ZjlkNTE1MDBlYzY4NGFkMWI2NGFmOGEz
ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFu
YWdlclByb3h5U291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJD
b29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogCisjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJNZXNzYWdl
cy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAKQEAgLTM0LDcgKzM1LDcgQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVy
c2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN0
b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKQog
ewogICAgIG1fY29va2llUGVyc2lzdGVudFN0b3JhZ2VNYXAuc2V0KHNlc3Npb25JRCwgc3RkOjpt
YWtlX3BhaXIoc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSk7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBl
KSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBz
dG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSYg
c3RvcmFnZVR5cGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9z
b3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3Vw
L1dlYlByb2Nlc3NQb29sU291cC5jcHAKaW5kZXggYmZiYmY5NjY0ZTQ4MzUzMDk3MDk3MTFkZmQ2
YzEzNDE1NzMyYmRhYy4uMDc5M2VkNTEzOTE1MjhkOWI0YjlmZGIwZjRhZDNjODk2MGZkYTUyNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNv
dXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xT
b3VwLmNwcApAQCAtMzcsMzAgKzM3LDI0IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKLSAgICBOZXR3b3JrU2Vzc2lv
bkNyZWF0aW9uUGFyYW1ldGVycyYgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0g
ICAgc3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlKGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIGRlZmF1bHRTZXNz
aW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIGRlZmF1bHRTZXNzaW9u
UGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOwotICAgIGlmIChtX3dlYnNp
dGVEYXRhU3RvcmUpCi0gICAgICAgIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50
Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJzaXN0ZW50
Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKCk7CisgICAgLy8gRklYTUU6IG1faW5pdGlhbEhUVFBD
b29raWVBY2NlcHRQb2xpY3kgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3Jl
LgorICAgIC8vIEZJWE1FOiBtX2lnbm9yZVRMU0Vycm9ycyBzaG91bGQgYmUgbW92ZWQgdG8gdGhl
IFdlYnNpdGVEYXRhU3RvcmUgb3IgcmVtb3ZlZC4KKyAgICAvLyBGSVhNRTogbV9uZXR3b3JrUHJv
eHlTZXR0aW5ncyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCiAKLSAg
ICBwYXJhbWV0ZXJzLmNvb2tpZUFjY2VwdFBvbGljeSA9IG1faW5pdGlhbEhUVFBDb29raWVBY2Nl
cHRQb2xpY3k7Ci0gICAgcGFyYW1ldGVycy5pZ25vcmVUTFNFcnJvcnMgPSBtX2lnbm9yZVRMU0Vy
cm9yczsKICAgICBwYXJhbWV0ZXJzLmxhbmd1YWdlcyA9IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMo
KTsKLSAgICBwYXJhbWV0ZXJzLnByb3h5U2V0dGluZ3MgPSBtX25ldHdvcmtQcm94eVNldHRpbmdz
OwogICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSB0cnVlOwogfQogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJv
cnMpCiB7CiAgICAgbV9pZ25vcmVUTFNFcnJvcnMgPSBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgaWYg
KG5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRJZ25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMp
LCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0SWdub3JlVExTRXJyb3JzKG1faWdub3JlVExTRXJyb3JzKSwg
MCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKGNv
bnN0IFdlYkNvcmU6OlNvdXBOZXR3b3JrUHJveHlTZXR0aW5ncyYgc2V0dGluZ3MpCiB7CiAgICAg
bV9uZXR3b3JrUHJveHlTZXR0aW5ncyA9IHNldHRpbmdzOwotICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9uZXR3b3JrUHJveHlTZXR0aW5ncyksIDAp
OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRp
bmdzKSwgMCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCBhNjMzNDlhNjI0Yzk2MGQ3ODg2YjhmNmM0ODM5ZjYyYjJhOGE0NDA3Li5m
OTZhODMyMTBjMTVjMTYxNTYzNmQ2OTBiNzJiMTExYmJmMjk4ZmY2IDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMjAt
MDktMTQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAg
ICAgICBNb3ZlIE5ldHdvcmtQcm9jZXNzUHJveHkgb3duZXJzaGlwIGZyb20gV2ViUHJvY2Vzc1Bv
b2wgdG8gV2Vic2l0ZURhdGFTdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE2MDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vz
c0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJGaWxlTmFtZS5tbToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAoVEVTVCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbToK
KyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3Rv
cmUubW06CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2ViVmlldzpy
dW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxl
dGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUg
d2FpdEZvck1lc3NhZ2VdKToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0
ZSBhbGVydENvb2tpZUhUTUxdKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxl
cjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQpOgorCiAyMDIwLTA5LTExICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW92ZSBfc2V0Q29v
a2llQWNjZXB0UG9saWN5IHRvIFdLSFRUUENvb2tpZVN0b3JlCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdD
b25uZWN0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1By
b2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbQppbmRleCA5NzM4OWYwMWZmMmVlOTli
NzgzYjBiNTIxMDgwNzRmMWE4MWI2OTgxLi4zM2Y0NTRjNWNkNTliNDhhNzY5OGFhYjU2ZTYxMWNm
NmYwOWM5ZjRmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nv
bm5lY3Rpb24ubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NH
cm91cFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTE0Niw4ICsxNDcsOCBAQCBURVNUKFdlYktpdCwg
TmV0d29ya1Byb2Nlc3NSZWxhdW5jaE9uTGF1bmNoRmFpbHVyZSkKIAogICAgIC8vIENvbnN0dWN0
aW5nIGEgV2ViVmlldyBzdGFydHMgYSBuZXR3b3JrIHByb2Nlc3Mgc28gdGVybWluYXRlIHRoaXMg
b25lLiBUaGUgcGFnZSBsb2FkIGJlbG93IHdpbGwgdGhlbiByZXF1ZXN0IGEgbmV0d29yayBwcm9j
ZXNzIGFuZCB3ZQogICAgIC8vIG1ha2UgdGhpcyBuZXcgbmV0d29yayBwcm9jZXNzIGxhdW5jaCBj
cmFzaCBvbiBzdGFydHVwLgotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdOwogICAgIFtwcm9jZXNzUG9vbCBfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxG
b3JUZXN0aW5nXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhb
W01vbml0b3JXZWJDb250ZW50Q3Jhc2hOYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsK
ICAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3Bv
aW50V0FMLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVj
a3BvaW50V0FMLm1tCmluZGV4IDVjZDdhYmRhMDFkMTk3NDdkY2VkNDVhYmVlOTllY2IxYzE0ZDYx
NjAuLmQ3N2E2ZmQ5ODc5ZTQzZjcwMTFkZGFmOTJjM2E3OTdmM2ZjMTM3MzQgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9p
bnRXQUwubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29s
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+Cisj
aW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlv
bi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC04Niw3ICs4Nyw3
IEBAIFRFU1QoSW5kZXhlZERCLCBDaGVja3BvaW50c1dBTEF1dG9tYXRpY2FsbHkpCiAgICAgUmV0
YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtb
V0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlv
biB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIu
Z2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5w
cm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAg
IFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246
Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQppbmRleCBjOGFmMWQy
NDNjNGZlYjU4YWM5ODRkYWYxNGQ4MTUzMWE3Y2MzYzczLi5iYmYxYTE1MjE1ZGMxZmQyOGRmZGRi
OWUzNDFiNjRmOWMwMDhmNGM0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KQEAgLTMwLDYgKzMwLDcg
QEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
V2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRl
RGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8
V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19X
S1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBEZWxl
dGVSZWNvdmVyeSkKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7
CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVz
c2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5jb25zaXN0ZW50IGRhdGFiYXNlIGZp
bGVzIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5k
bGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJEZWxldGVSZWNvdmVyeSIgd2l0aEV4
dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2Vz
Il07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lE
QkluZGV4VXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KaW5kZXggOTVjY2EwY2UyODE2ZmYxYTZhNDU1YWQw
YmQyYzhhNGFhNGYyN2ZlZC4uODhhNTNmNjFkOWQ5ODI2NTdiOTY1ZWY4YTZjZWJhNzkxZWZmMTc1
NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJ
bmRleFVwZ3JhZGVUb1YyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8
V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29u
dGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmln
dXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJv
Y2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hl
ZXQuaD4KQEAgLTU4LDcgKzU5LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4VXBncmFkZVRvVjIp
CiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29u
ZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVy
OmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKIAogICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0aGUg
ZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5k
bGVdIFVSTEZvclJlc291cmNlOkAiSW5kZXhVcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRl
MyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZv
VXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lE
Qk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCmluZGV4IGZmYTVhNzg3OGE0NzMyYjhlYzI0
NWM5MDUzZmQxN2VlNTk1NmZhM2QuLjQwM2UwZmZhODIxMjM0NTFjNDY2ZmVlY2MzMjRmOWM2ZTc2
MWQ0M2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQpAQCAt
MzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktp
dC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+
CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0
IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJbmRl
eGVkREIsIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyKQogICAgIFJldGFpblB0cjxXS1dl
YlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRl
bnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6
QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJz
aXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IGRh
dGFiYXNlIGZpbGVzIHdpdGggb2xkIE9iamVjdFN0b3JlSW5mbyBzY2hlbWEgdG8gdGhlIGRhdGFi
YXNlIGRpcmVjdG9yeS4KICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
VVJMRm9yUmVzb3VyY2U6QCJJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlIiB3aXRoRXh0ZW5zaW9u
OkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERC
RGF0YWJhc2VQcm9jZXNzS2lsbC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQppbmRleCA2ODc0NTI5ZWJiZjM3
ODUxOGQ5M2UwYTA4MjFmNjMwMTJjZmE2ZDVmLi43MzA3N2VjZGZkMzY1YjUyOTA1M2Q0N2NiYTJh
MTRlZDA1MWVkNmVhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1t
CkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8
V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJL
aXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTkyLDcgKzkzLDcgQEAgVEVTVChJbmRleGVkREIs
IERhdGFiYXNlUHJvY2Vzc0tpbGwpCiAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
cmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICAgICAgaWYgKCFraWxsZWREQlByb2Nlc3MgJiYg
b3BlblJlcXVlc3RVcGdyYWRlTmVlZGVkKSB7CiAgICAgICAgICAgICBraWxsZWREQlByb2Nlc3Mg
PSB0cnVlOwotICAgICAgICAgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICAgICAgfQog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JbmRleGVkREJGaWxlTmFtZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0KaW5kZXggMTFmODdmODAzNGQyYjFiNTVkNzIwZGVi
NzY1YTMxNjgyMTIwZDc3My4uYTk4YmYzODI1YmIxZWQ2ZDc1OWMwOGQ0NTMzYWRjYjdmZjM5NWZk
NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eGVkREJGaWxlTmFtZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBSZXRhaW5Q
dHI8V0tTY3JpcHRNZXNzYWdlPiBsYXN0U2NyaXB0TWVzc2FnZTsKIAogQGVuZAogCi1zdGF0aWMg
dm9pZCBydW5UZXN0KCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoYm9vbCBvbGRGaWxlU2hvdWxkRXhp
c3QgPSB0cnVlKQogewogICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1tJbmRleGVkREJGaWxl
TmFtZU1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7CiAgICAgYXV0byBjb25maWd1cmF0aW9u
ID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKQEAgLTg3
LDcgKzg3LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdCgpCiAgICAgTlNVUkwgKm9sZFZlcnNpb25P
cmlnaW5EaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGlu
Z1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJdOwogICAgIE5TVVJMICpuZXdWZXJzaW9uT3JpZ2lu
RGlyZWN0b3J5VVJMID0gW25ld1ZlcnNpb25EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQYXRo
Q29tcG9uZW50OiBAImZpbGVfXzAiXTsKICAgICBOU1VSTCAqb2xkVmVyc2lvblVudXNlZERhdGFi
YXNlRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgVVJMQnlBcHBl
bmRpbmdQYXRoQ29tcG9uZW50OnVudXNlZERhdGFiYXNlTmFtZV07Ci0gICAgRVhQRUNUX1RSVUUo
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOm9sZFZlcnNp
b25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTC5wYXRoXSk7CisgICAgRVhQRUNUX1RSVUUoW1tO
U0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOm9sZFZlcnNpb25V
bnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTC5wYXRoXSA9PSBvbGRGaWxlU2hvdWxkRXhpc3QpOwog
ICAgIAogICAgIC8vIEZvciBkYXRhYmFzZSB0aGF0IGlzIG9wZW5lZCBhZnRlciB1cGdyYWRlLCBp
dHMgZmlsZSBzaG91bGQgb25seSBiZSBpbiB2MS4KICAgICBOU1VSTCAqb2xkVmVyc2lvbkV4aXN0
aW5nRGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCBV
UkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IGV4aXN0aW5nRGF0YWJhc2VOYW1lXTsKQEAgLTE1
NCw3ICsxNTQsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVEaXJlY3RvcmllcyhTdHJpbmcgdGVzdE5h
bWUpCiBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCRmlsZU5hbWUpCiB7CiAgICAgY3JlYXRlRGly
ZWN0b3JpZXMoIm5vbmUiKTsKLSAgICBydW5UZXN0KCk7CisgICAgcnVuVGVzdChmYWxzZSk7CiB9
CiAKIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJGaWxlTmFtZVYwKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3Mu
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRp
UHJvY2Vzcy5tbQppbmRleCA3ZjYyNjQ1ZDk5NjBlZGU5NjBjMDAxYzI3MmI2NTAzOTM5MDExNjMy
Li42ZjY3ZGMyN2VkYzNkMjc0NWIxNzBlNDgyYmNkOTBlODQ5NGNiOTVhIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vz
cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
Qk11bHRpUHJvY2Vzcy5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5o
PgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9f
V0tVc2VyU3R5bGVTaGVldC5oPgogI2ltcG9ydCA8d3RmL0RlcXVlLmg+CkBAIC02OSw3ICs3MCw3
IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJNdWx0aVByb2Nlc3MpCiAgICAgUmV0YWluUHRy
PFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2Vy
Q29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkg
bmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFJldGFp
blB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQppbmRleCBiMzJjZTRh
NWY3Mzg2M2FlZGRjYjkxOTBiNWI0MzcwZTM3NDQzYjVlLi5kNjIyMDMyMmU0NzhkMWRhYzc4ZjA2
OTY3YzNiNjQzYmZkNjJmOWJmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KQEAgLTc4LDcg
Kzc4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlBlcnNpc3RlbmNlKQogICAgIHdlYlZp
ZXcgPSBuaWw7CiAKICAgICAvLyBUZXJtaW5hdGUgdGhlIG5ldHdvcmsgcHJvY2VzcwotICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gTWFrZSBhIG5ldyB3ZWIgdmlldyB0byBmaW5pc2ggdGhl
IHRlc3QKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRp
b24uZ2V0KCldKTsKQEAgLTI2OCw3ICsyNjgsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERC
VGhpcmRQYXJ0eUZyYW1lSGFzQWNjZXNzKQogCiAgICAgd2ViVmlldyA9IG5pbDsKICAgICBzZWNv
bmRXZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0
ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gVGhpcmQtcGFy
dHkgSURCIHN0b3JhZ2UgaXMgc3RvcmVkIGluIHRoZSBtZW1vcnkgb2YgbmV0d29yayBwcm9jZXNz
LgogICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZp
Z3VyYXRpb24uZ2V0KCldKTsKQEAgLTM4NSw3ICszODUsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5k
ZXhlZERCVGhpcmRQYXJ0eVdvcmtlckhhc0FjY2VzcykKIAogICAgIHdlYlZpZXcgPSBuaWw7CiAg
ICAgc2Vjb25kV2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8g
dGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0
KCldKTsKICAgICBsb2FkVGVzdFBhZ2VJbldlYlZpZXcodGhpcmRXZWJWaWV3LmdldCgpLCBAImRh
dGFiYXNlIGlzIGNyZWF0ZWQiKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0KaW5kZXggNTM2
NTQxZTNiMGU1Y2RhM2EzYjU1MWMxZTgxZTk2M2Y1OTJhZWIyZi4uZTdiOTkyMjhjZTg3NmU0NDdl
NjQ3ODJlZjlkODdmMjVhZGM5YjlmYSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0KQEAg
LTk1LDcgKzk1LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlRlbXBGaWxlU2l6ZSkKIAog
ICAgIC8vIFRlcm1pbmF0ZSBuZXR3b3JrIHByb2Nlc3MgdG8ga2VlcCBXQUwgb24gZGlzay4KICAg
ICB3ZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0
ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgRVhQRUNUX1RSVUUo
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOndhbEZpbGVQ
YXRoLmdldCgpLnBhdGhdKTsKICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBmaWxlQXR0cmli
dXRlcyA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gYXR0cmlidXRlc09mSXRlbUF0
UGF0aDp3YWxGaWxlUGF0aC5nZXQoKS5wYXRoIGVycm9yOm5pbF07CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNl
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQ
ZXJzaXN0ZW5jZS5tbQppbmRleCA0MTMzZWU3YjNkYWU0M2VjMjA0OWNmZmMwNjNjMGU0MjljMTdj
NWVmLi41Zjc5MTkwOTQzYzc3MWU5ZDllNDQyYTBkYTI2NmZmOWEwM2JhMmYyIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNp
c3RlbmNlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9j
YWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktp
dC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dl
YlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2VicGFnZVBy
ZWZlcmVuY2VzUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQ
cm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVT
aGVldC5oPgpAQCAtMTA5LDcgKzExMCw3IEBAIFRFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQ
cm9jZXNzQ3Jhc2hlcykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2Ny
aXB0TWVzc2FnZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAic2Vzc2lvbjpzdG9yYWdlIiwgW2xh
c3RTY3JpcHRNZXNzYWdlIGJvZHldKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nl
c3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0
KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgcmVj
ZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwpAQCAtMTYyLDcgKzE2Myw3IEBAIFRFU1QoV0tXZWJW
aWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzU3VzcGVuZHMpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAgIEVYUEVDVF9XS19TVFJFUShAInZh
bHVlIiwgW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHldKTsKIAotICAgIFtwcm9jZXNzUG9vbC5nZXQo
KSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHldOwogCiAgICAgcmVhZHlUb0NvbnRpbnVlID0gZmFsc2U7CiAgICAgW3dl
YlZpZXcxIGV2YWx1YXRlSmF2YVNjcmlwdDpAIndpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgn
a2V5JywgJ25ld1ZhbHVlJykiIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQsIE5TRXJyb3IgKikgewpA
QCAtMTc3LDcgKzE3OCw3IEBAIFRFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzU3Vz
cGVuZHMpCiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWFkeVRvQ29u
dGludWUpOwogICAgIAotICAgIFtwcm9jZXNzUG9vbC5nZXQoKSBfc2VuZE5ldHdvcmtQcm9jZXNz
RGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9z
ZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdl
ID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1l
c3NhZ2UpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9OZXR3b3JrUHJvY2Vzcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTmV0d29ya1Byb2Nlc3MubW0KaW5kZXggZTYwZjg4MDI1ZDA5Mzc4OWY2OTU2MGQ5YjkyYjI4
MmYwNzEzMGE4ZC4uMGUyMWY5MDk1MDAxNGY2YzQ5MGIwZWI4ZTQ2MWVjNGJhODUwYmI4MSAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJv
Y2Vzcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdv
cmtQcm9jZXNzLm1tCkBAIC0yOCw3ICsyOCw3IEBACiAjaW1wb3J0ICJIVFRQU2VydmVyLmgiCiAj
aW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVdGlsaXRpZXMuaCIKLSNpbXBvcnQg
PFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgpAQCAtMzcsMTQgKzM3LDE0
IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc0VudGl0bGVtZW50cykKIHsKICAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOltbW1dLV2ViVmlld0NvbmZp
Z3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXV0pOwogICAgIFt3ZWJWaWV3IHN5bmNo
cm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBsZSJdOwotICAgIFdLUHJvY2Vzc1Bvb2wg
KnBvb2wgPSBbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbDsKLSAgICBib29sIGhh
c0VudGl0bGVtZW50ID0gW3Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0
aW5nOkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0TmV0d29ya2luZ1NhbmRib3gi
XTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmUgKnN0b3JlID0gW3dlYlZpZXcgY29uZmlndXJhdGlv
bl0ud2Vic2l0ZURhdGFTdG9yZTsKKyAgICBib29sIGhhc0VudGl0bGVtZW50ID0gW3N0b3JlIF9u
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAImNvbS5hcHBsZS5yb290bGVz
cy5zdG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94Il07CiAjaWYgUExBVEZPUk0oTUFDKSAm
JiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogICAgIEVYUEVDVF9UUlVFKGhhc0VudGl0bGVtZW50
KTsKICNlbHNlCiAgICAgRVhQRUNUX0ZBTFNFKGhhc0VudGl0bGVtZW50KTsKICNlbmRpZgotICAg
IEVYUEVDVF9GQUxTRShbcG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rp
bmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJdKTsKKyAgICBFWFBFQ1RfRkFMU0UoW3N0b3JlIF9uZXR3
b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVyZSBjYXNlIl0p
OwogfQogCiBURVNUKFdlYktpdCwgSFRUUFJlZmVyZXIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0
ZW50RGF0YVN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9O
ZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQppbmRleCA2MDk4ZThk
YWQyNTJlNTllYzQ5MTI1MGI0MjE2ZDNjZDA5MzZlOGY3Li4yZjhhMmUzM2ZlODcwM2JhYjJkOGUw
NTEwODMyYmVjZDlkNDg5MzRiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nl
c3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGlj
IHZvaWQgY2hlY2tSZWNvdmVyeUFmdGVyQ3Jhc2goV0tXZWJzaXRlRGF0YVN0b3JlICpkYXRhU3Rv
cmUpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFs
c2U7CiAKLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURh
dGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1
ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6c2ltcGxlMl1dOwogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5t
bQppbmRleCAxZjk2NjFjYWYwNjhmMGJlMzAwYTE0NTc0NTUwZGRhMjgyN2NjNTkxLi4yNGQxYjk2
M2ExMGJjZjQwY2NkYzM0NzA2ZmFiOWExM2FiYmYyY2I0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5h
dmlnYXRpb24ubW0KQEAgLTUzODUsNyArNTM4NSw3IEBAIFRFU1QoUHJvY2Vzc1N3YXAsIFVzZVBy
ZXdhcm1lZFByb2Nlc3NBZnRlclRlcm1pbmF0aW5nTmV0d29ya1Byb2Nlc3MpCiAKICAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFtwcm9jZXNzUG9vbCBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHdl
YlZpZXcyID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOndlYlZpZXdDb25maWd1cmF0aW9uLmdl
dCgpXSk7CiAgICAgW3dlYlZpZXcyIHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQo
KV07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KaW5kZXggMGUxMGMzNGVlYzgyYzZmNjU5
MmJiN2M0Mjc0ZDBlNDU1ZWFmMTFlOC4uYTNhYmEyMzFhOTNiM2Q1ZjAwYTE5M2M0N2MyNzY3ODY0
YjM1MDU1YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQpAQCAtNzE5LDcgKzcxOSw3
IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTmV0d29ya1Byb2Nlc3NSZXN0YXJ0KQog
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246
Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkBAIC03NTIsNyArNzUyLDcgQEAgVEVTVChSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLCBOZXR3b3JrUHJvY2Vzc1Jlc3RhcnQpCiAKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnBy
b2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAg
YXV0byB3ZWJWaWV3MyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdl
dCgpXSk7CiAKQEAgLTE1NTgsMTAgKzE1NTgsOCBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MsIE1pZ3JhdGVEYXRhRnJvbU1pc3NpbmdUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0U2FtZVNpdAog
CiBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5v
UHJvY2Vzc1Bvb2wpCiB7CisgICAgTlNVUkwgKml0cFJvb3RVUkwgPSBbTlNVUkwgZmlsZVVSTFdp
dGhQYXRoOltOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDpAIkNhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2xUZXN0Il0gaXNEaXJl
Y3Rvcnk6WUVTXTsKICAgICBhdXRvIGRlZmF1bHRGaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2Vy
IGRlZmF1bHRNYW5hZ2VyXTsKLSAgICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAq
ZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRp
b24gbmV3XSBhdXRvcmVsZWFzZV07Ci0gICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRl
RGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3Vy
YXRpb25dIGF1dG9yZWxlYXNlXTsKLSAgICBOU1VSTCAqaXRwUm9vdFVSTCA9IFtbZGF0YVN0b3Jl
IF9jb25maWd1cmF0aW9uXSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeV07CiAgICAg
TlNVUkwgKmZpbGVVUkwgPSBbaXRwUm9vdFVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6
QCJvYnNlcnZhdGlvbnMuZGIiXTsKICAgICBbZGVmYXVsdEZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1B
dFBhdGg6aXRwUm9vdFVSTC5wYXRoIGVycm9yOm5pbF07CiAgICAgRVhQRUNUX0ZBTFNFKFtkZWZh
dWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDppdHBSb290VVJMLnBhdGhdKTsKQEAgLTE1
NzIsNiArMTU3MCwxMCBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0Rh
dGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2wpCiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1bHRGaWxl
TWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOm5ld0ZpbGVVUkwucGF0aF0pOwogICAgIFtkZWZhdWx0
RmlsZU1hbmFnZXIgY29weUl0ZW1BdFBhdGg6bmV3RmlsZVVSTC5wYXRoIHRvUGF0aDpmaWxlVVJM
LnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZp
bGVFeGlzdHNBdFBhdGg6ZmlsZVVSTC5wYXRoXSk7CisKKyAgICBfV0tXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFT
dG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgZGF0YVN0b3JlQ29uZmln
dXJhdGlvbi5fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IGl0cFJvb3RVUkw7Cisg
ICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdp
dGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKICAg
ICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZRVNdOwogCiAg
ICAgc3RhdGljIGJvb2wgZG9uZUZsYWcgPSBmYWxzZTsKQEAgLTE2MzMsMTIgKzE2MzUsMTIgQEAg
VEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBTdG9yZVN1c3BlbnNpb24pCiAgICAgW3dlYlZp
ZXcyIF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKIAogICAgIGRvbmVGbGFnID0g
ZmFsc2U7Ci0gICAgW3NoYXJlZFByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJl
VG9TdXNwZW5kOl57CisgICAgW2RhdGFTdG9yZTEgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVU
b1N1c3BlbmQ6XnsKICAgICAgICAgZG9uZUZsYWcgPSB0cnVlOwogICAgIH1dOwogICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcpOwogCi0gICAgW3NoYXJlZFByb2Nlc3NQb29s
IF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtkYXRhU3RvcmUxIF9zZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogfQogCiBAaW50ZXJmYWNlIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTY2hlbWVIYW5kbGVyIDogTlNPYmplY3QgPFdLVVJMU2NoZW1lSGFuZGxlcj4KZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtl
ckJhc2ljLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNl
V29ya2VyQmFzaWMubW0KaW5kZXggMzRhNGY1YzUzOGI5YjBlOWZjYjA1MDcyYjE3MDI4OGU5ZTRl
OWY4Zi4uZjg1MzZlMmQzOGU4MWMyYjhlNTBkMTYyNzU5N2Q5NWM3NzQ5OWYwNSAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFz
aWMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNl
V29ya2VyQmFzaWMubW0KQEAgLTU1OCw3ICs1NTgsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBV
c2VyQWdlbnRPdmVycmlkZSkKIAogICAgIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogCi0gICAgbWVzc2FnZUhhbmRsZXIgPSBh
ZG9wdE5TKFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhFeHBlY3Rl
ZE1lc3NhZ2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBCYXIgQ3VzdG9tIFVzZXJBZ2VudCJdKTsK
KyAgICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5kbGVy
IGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6IEZv
byBDdXN0b20gVXNlckFnZW50Il0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENv
bnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgpIG5h
bWU6QCJzdyJdOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uLmdldCgpXSk7CkBAIC02MzMsOCArNjMzLDYgQEAgVEVTVChTZXJ2aWNlV29ya2Vy
cywgQ2FjaGVTdG9yYWdlUmVzdG9yZUZyb21EaXNrKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwogCi0gICAgW1dLV2Vic2l0ZURhdGFTdG9y
ZSBfZGVsZXRlRGVmYXVsdERhdGFTdG9yZUZvclRlc3RpbmddOwotCiAgICAgU2VydmljZVdvcmtl
clRDUFNlcnZlciBzZXJ2ZXIoewogICAgICAgICB7ICJ0ZXh0L2h0bWwiLCBtYWluQ2FjaGVTdG9y
YWdlQnl0ZXMgfQogICAgIH0sIHsKQEAgLTk4Miw2ICs5ODAsNyBAQCBURVNUKFNlcnZpY2VXb3Jr
ZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9uKQogCiAgICAgUmV0YWluUHRyPFdLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIHNldENvbmZpZ3VyYXRpb25JbmplY3RlZEJ1
bmRsZVBhdGgoY29uZmlndXJhdGlvbi5nZXQoKSk7CisgICAgUmV0YWluUHRyPFdLUHJvY2Vzc1Bv
b2w+IG9yaWdpbmFsUHJvY2Vzc1Bvb2wgPSBjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29s
OwogCiAgICAgZG9uZSA9IGZhbHNlOwogCkBAIC0xMDM1LDcgKzEwMzQsNyBAQCBURVNUKFNlcnZp
Y2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9uKQogICAgIGRvbmUgPSBmYWxz
ZTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGxvYWRpbmcgdGhlIHNpbXBsZSBwYWdlIGRpZCBu
b3Qgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCi0gICAgRVhQRUNUX0VRKDB1LCB3
ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9u
LnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKIAogICAgIHdlYlZpZXcg
PSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwg
MCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246bmV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAg
IEVYUEVDVF9FUSgydSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl93
ZWJQcm9jZXNzQ291bnRJZ25vcmluZ1ByZXdhcm1lZCk7CkBAIC0xMDQzLDkgKzEwNDIsOCBAQCBU
RVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9uKQogICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwogCi0gICAg
Ly8gTWFrZSBzdXJlIHRoYXQgbG9hZGluZyB0aGlzIHBhZ2UgZGlkIHN0YXJ0IHRoZSBzZXJ2aWNl
IHdvcmtlciBwcm9jZXNzLgogICAgIEVYUEVDVF9FUSgxdSwgd2ViVmlldy5nZXQoKS5jb25maWd1
cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKLQorICAgIEVY
UEVDVF9FUSgxdSwgb3JpZ2luYWxQcm9jZXNzUG9vbC5nZXQoKS5fc2VydmljZVdvcmtlclByb2Nl
c3NDb3VudCk7CiAgICAgW1tjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVdIHJlbW92ZURh
dGFPZlR5cGVzOltXS1dlYnNpdGVEYXRhU3RvcmUgYWxsV2Vic2l0ZURhdGFUeXBlc10gbW9kaWZp
ZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQYXN0XSBjb21wbGV0aW9uSGFuZGxlcjpeKCkgewogICAg
ICAgICBkb25lID0gdHJ1ZTsKICAgICB9XTsKQEAgLTE2MTgsMjEgKzE2MTYsMzUgQEAgc3RhdGlj
IHNpemVfdCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sIHVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MsIGIKICAgICByZXR1cm4gd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9u
LnByb2Nlc3NQb29sLl93ZWJQcm9jZXNzQ291bnRJZ25vcmluZ1ByZXdhcm1lZDsKIH0KIAotVEVT
VChTZXJ2aWNlV29ya2VycywgT3V0T2ZBbmRJblByb2Nlc3NTZXJ2aWNlV29ya2VyKQorVEVTVChT
ZXJ2aWNlV29ya2VycywgT3V0T2ZQcm9jZXNzU2VydmljZVdvcmtlcikKIHsKICAgICBib29sIHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOwogICAgIGJvb2wgZmlyc3RMb2Fk
QWJvdXRCbGFuayA9IHRydWU7CiAKICAgICBFWFBFQ1RfRVEoMXUsIGxhdW5jaFNlcnZpY2VXb3Jr
ZXJQcm9jZXNzKCF1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJv
dXRCbGFuaykpOworfQorCitURVNUKFNlcnZpY2VXb3JrZXJzLCBJblByb2Nlc3NTZXJ2aWNlV29y
a2VyKQoreworICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7
CisgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKKwogICAgIEVYUEVDVF9FUSgy
dSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcywgIWZpcnN0TG9hZEFib3V0QmxhbmspKTsKIH0KIAotVEVTVChTZXJ2aWNlV29ya2Vycywg
TG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaFNlcnZpY2VXb3JrZXIpCitURVNU
KFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoT3V0
T2ZQcm9jZXNzU2VydmljZVdvcmtlcikKIHsKICAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MgPSB0cnVlOwogICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7
CiAKICAgICBFWFBFQ1RfRVEoMXUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKCF1c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RF
U1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hJ
blByb2Nlc3NTZXJ2aWNlV29ya2VyKQoreworICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcyA9IHRydWU7CisgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsK
KwogICAgIEVYUEVDVF9FUSgydSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgZmlyc3RMb2FkQWJvdXRCbGFuaykpOwogfQogCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tp
ZVN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBD
b29raWVTdG9yZS5tbQppbmRleCBhMzVmMDUzNTBhYWI0YjQyZjM2YzQ2YWVjZGVlZWU2Y2U1NDRl
Zjg2Li4zMzc2MDkyYTE5NWI1MTJkYTY3YzQ5NmU0NTIxN2I5MTRmZTJhNTc5IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3Jl
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29v
a2llU3RvcmUubW0KQEAgLTQ3OSw4ICs0NzksNiBAQCBzdGF0aWMgYm9vbCBmaW5pc2hlZDsKIH0K
IEBlbmQKIAotLy8gRklYTUU6IG9uIGlPUywgVUkgcHJvY2VzcyBzaG91bGQgYmUgdXNpbmcgdGhl
IHNhbWUgY29va2llIGZpbGUgYXMgdGhlIG5ldHdvcmsgcHJvY2VzcyBmb3IgZGVmYXVsdCBzZXNz
aW9uLgotI2lmIFBMQVRGT1JNKE1BQykKIGVudW0gY2xhc3MgU2hvdWxkRW5hYmxlUHJvY2Vzc1By
ZXdhcm1pbmcgeyBObywgWWVzIH07CiB2b2lkIHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFBy
b2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEVuYWJsZVByb2Nl
c3NQcmV3YXJtaW5nKQogewpAQCAtNTg5LDIwICs1ODcsNjYgQEAgVEVTVChXS0hUVFBDb29raWVT
dG9yZSwgV2l0aG91dFByb2Nlc3NQb29sV2l0aFByZXdhcm1pbmcpCiAgICAgcnVuV0tIVFRQQ29v
a2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmc6
Olllcyk7CiB9CiAKLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KIEBpbnRlcmZhY2UgQ2hlY2tT
ZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS1VJRGVsZWdhdGU+CistIChOU1N0
cmluZyAqKWFsZXJ0Q29va2llSFRNTDsKKy0gKE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2U7CiBA
ZW5kCiAKLUBpbXBsZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlCitAaW1w
bGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB7CisgICAgUmV0YWluUHRy
PE5TU3RyaW5nPiBfbWVzc2FnZTsKK30KKwogLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3
ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVz
c2FnZSBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5k
bGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIEVYUEVDVF9TVFJF
USgiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiLCBtZXNzYWdlLlVURjhTdHJpbmcpOwor
ICAgIF9tZXNzYWdlID0gbWVzc2FnZTsKICAgICBmaW5pc2hlZCA9IHRydWU7CiAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKIH0KKworLSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZQoreworICAg
IHdoaWxlICghX21lc3NhZ2UpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5M
b29wKCk7CisgICAgcmV0dXJuIF9tZXNzYWdlLmF1dG9yZWxlYXNlKCk7Cit9CisKKy0gKE5TU3Ry
aW5nICopYWxlcnRDb29raWVIVE1MCit7CisgICAgcmV0dXJuIEAiPHNjcmlwdD52YXIgY29va2ll
cyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tp
ZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29r
aWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOworfQorCiBA
ZW5kCiAKK1RFU1QoV2ViS2l0LCBXS0hUVFBDb29raWVTdG9yZU11bHRpcGxlVmlld3MpCit7Cisg
ICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzEgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVs
ZWFzZV07CisgICAgW3dlYlZpZXcxIHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0
IG5ldHdvcmsgcHJvY2VzcyJdOworCisgICAgTlNIVFRQQ29va2llICpzZXNzaW9uQ29va2llID0g
W05TSFRUUENvb2tpZSBjb29raWVXaXRoUHJvcGVydGllczpAeworICAgICAgICBOU0hUVFBDb29r
aWVQYXRoOiBAIi8iLAorICAgICAgICBOU0hUVFBDb29raWVOYW1lOiBAIlNlc3Npb25Db29raWVO
YW1lIiwKKyAgICAgICAgTlNIVFRQQ29va2llVmFsdWU6IEAiQ29va2llVmFsdWUiLAorICAgICAg
ICBOU0hUVFBDb29raWVEb21haW46IEAiMTI3LjAuMC4xIiwKKyAgICB9XTsKKworICAgIF9fYmxv
Y2sgYm9vbCBzZXRDb29raWVEb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcxLmNvbmZpZ3VyYXRp
b24ud2Vic2l0ZURhdGFTdG9yZS5odHRwQ29va2llU3RvcmUgc2V0Q29va2llOnNlc3Npb25Db29r
aWUgY29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAgc2V0Q29va2llRG9uZSA9IHRydWU7Cisg
ICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZzZXRDb29raWVEb25lKTsKKwor
ICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRl
IG5ld10pOworICAgIFt3ZWJWaWV3MSBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKwor
ICAgIFt3ZWJWaWV3MSBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBi
YXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBF
WFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVO
YW1lPUNvb2tpZVZhbHVlIik7CisKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtbVGVz
dFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzIgc2V0VUlEZWxlZ2F0
ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcyIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0
ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8v
MTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3Nh
Z2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKK30KKwogVEVTVChXS0hUVFBD
b29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKIHsKICAgICBS
ZXRhaW5QdHI8V0tXZWJzaXRlRGF0YVN0b3JlPiBlcGhlbWVyYWxTdG9yZVdpdGhDb29raWVzID0g
W1dLV2Vic2l0ZURhdGFTdG9yZSBub25QZXJzaXN0ZW50RGF0YVN0b3JlXTsKQEAgLTYyNyw5ICs2
NzEsOCBAQCBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVy
YWxTZXNzaW9uKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOwogICAg
IGZpbmlzaGVkID0gZmFsc2U7CiAgICAgCi0gICAgTlNTdHJpbmcgKmFsZXJ0Q29va2llSFRNTCA9
IEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3Ig
KGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29r
aWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcp
KTs8L3NjcmlwdD4iOwotICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOmFsZXJ0Q29va2llSFRN
TCBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKLSAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKKyAgICBbd2ViVmlldyBsb2Fk
SFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxX
aXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2Rl
bGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7
CiB9CiAKIHN0YXRpYyBib29sIGFyZUNvb2tpZXNFcXVhbChOU0hUVFBDb29raWUgKmZpcnN0LCBO
U0hUVFBDb29raWUgKnNlY29uZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KaW5k
ZXggYWM3ZGU0MTUxMmM0NTEzOGVjNWU0YzA5ZTUxMTVkMTZjZDIzYjIyZS4uYWMxNjUzNWRmZDkz
OTk5ZDJlYzUwZGNmZDcxYzNhNTZkMTEzZWM3YSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXIt
bGVha3MubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VSTFNjaGVtZVRh
c2tQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJL
aXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5o
PgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgpAQCAt
MTUyLDcgKzE1Myw3IEBAIFRFU1QoVVJMU2NoZW1lSGFuZGxlciwgTGVha3MzKQogCiAgICAgcnVu
VW50aWxUYXNrc0luRmxpZ2h0KDIpOwogCi0gICAgW3dlYlZpZXcxLmdldCgpLmNvbmZpZ3VyYXRp
b24ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlldzEu
Z2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CiAKICAgICBydW5VbnRpbFRhc2tzSW5GbGlnaHQoMCk7CiB9CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0
b21QYXRocy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0
ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCmluZGV4IDdlN2E0MjEzYzgwNDM3NzgxYjBkNjU3ZTQ1
OWFiZjcxN2U1NzkxNzIuLjM2OTFjNjdmOWE3ZTI2ZTllZmFjYzNiNWM4ZjA1OTE0ZjFmZmQ1ZjUg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0
ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCkBAIC0yMzksNyArMjM5
LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzKFNob3VsZEVu
YWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEUKICAgICAvLyBOb3csIHdpdGggYnJhbmQgbmV3
IFdLV2Vic2l0ZURhdGFTdG9yZXMgcG9pbnRpbmcgYXQgdGhlIHNhbWUgY3VzdG9tIGNvb2tpZSBz
dG9yYWdlIGxvY2F0aW9uLAogICAgIC8vIGluIG5ld2x5IGZpcmVkIHVwIE5ldHdvcmtQcm9jZXNz
ZXMsIHZlcmlmeSB0aGF0IHRoZSBmZXRjaCBhbmQgZGVsZXRlIEFQSXMgd29yayBhcyBleHBlY3Rl
ZC4KIAotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtk
YXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBhdXRvIG5ld0N1c3RvbURh
dGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENv
bmZpZ3VyYXRpb246d2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAg
IFtuZXdDdXN0b21EYXRhU3RvcmUgZmV0Y2hEYXRhUmVjb3Jkc09mVHlwZXM6W05TU2V0IHNldFdp
dGhPYmplY3RzOldLV2Vic2l0ZURhdGFUeXBlQ29va2llcywgbmlsXSBjb21wbGV0aW9uSGFuZGxl
cjpeKE5TQXJyYXk8V0tXZWJzaXRlRGF0YVJlY29yZCAqPiAqIHJlY29yZHMpIHsKQEAgLTI1MCw3
ICsyNTAsNyBAQCBzdGF0aWMgdm9pZCBydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMoU2hv
dWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxkRQogICAgIHJlY2VpdmVkU2NyaXB0TWVz
c2FnZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3Jp
cHRNZXNzYWdlKTsKIAotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OworICAgIFtkYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBuZXdDdXN0
b21EYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdp
dGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpXSk7CiAK
ICAgICBbbmV3Q3VzdG9tRGF0YVN0b3JlIHJlbW92ZURhdGFPZlR5cGVzOltOU1NldCBzZXRXaXRo
T2JqZWN0czpXS1dlYnNpdGVEYXRhVHlwZUNvb2tpZXMsIG5pbF0gbW9kaWZpZWRTaW5jZTpbTlNE
YXRlIGRpc3RhbnRQYXN0XSBjb21wbGV0aW9uSGFuZGxlcjpeIHsKQEAgLTUyNiw3ICs1MjYsNyBA
QCBURVNUKFdlYktpdCwgRG9Mb2FkV2l0aE5vbkRlZmF1bHREYXRhU3RvcmVBZnRlclRlcm1pbmF0
aW5nTmV0d29ya1Byb2Nlc3MpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9v
cCgxKTsKIAotICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICByZXF1ZXN0
ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVS
TEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9y
eTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0
OnJlcXVlc3RdOwpAQCAtODQ0LDcgKzg0NCw3IEBAIFRFU1QoV2ViS2l0LCBNZWRpYUNhY2hlKQog
ICAgIEVYUEVDVF9GQUxTRShlcnJvcik7CiAKICAgICBkb25lID0gdHJ1ZTsKLSAgICBbW3dlYlZp
ZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
KyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFBhdGg6cGF0
aCBlcnJvcjomZXJyb3JdOwogICAgIEVYUEVDVF9GQUxTRShlcnJvcik7CmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IGU4NTgzYjhjMTJhNDU5Nzg5ZDQwOTRh
ODk2OTdlMGY3NjBiMGMxMDIuLjgwOGM2NDNhYTM4MGFkNzIxNDQ4ODJjODY3MDc4ZmRkNmI5Yzcx
ZjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3Bw
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC0xMDUw
LDEyICsxMDUwLDEyIEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3Rl
bnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAKICAgICBXS0NvbnRleHRT
ZXRDYWNoZU1vZGVsKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCksIGtXS0Nh
Y2hlTW9kZWxEb2N1bWVudEJyb3dzZXIpOwogCi0gICAgV0tDb250ZXh0Q2xlYXJDYWNoZWRDcmVk
ZW50aWFscyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpKTsKKyAgICBXS1dl
YnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKHdlYnNpdGVEYXRhU3RvcmUoKSk7
CiAKICAgICBXS0NvbnRleHRSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5n
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCkpOwogCiAgICAgV0tXZWJzaXRl
RGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQod2Vic2l0ZURhdGFTdG9y
ZSgpLCB0cnVlKTsKLSAgICBXS0NvbnRleHRTZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZChwbGF0
Zm9ybUNvbnRleHQoKSwgdHJ1ZSk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlU2V0U3RvcmFnZUFj
Y2Vzc0FQSUVuYWJsZWQod2Vic2l0ZURhdGFTdG9yZSgpLCB0cnVlKTsKICAgICBXS1dlYnNpdGVE
YXRhU3RvcmVDbGVhckFsbERldmljZU9yaWVudGF0aW9uUGVybWlzc2lvbnMod2Vic2l0ZURhdGFT
dG9yZSgpKTsKIAogICAgIGNsZWFySW5kZXhlZERhdGFiYXNlcygpOwpAQCAtMTA2Niw4ICsxMDY2
LDYgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhj
b25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKIAogICAgIHJlc2V0UXVvdGEoKTsKIAotICAg
IFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3Rp
bmcocGxhdGZvcm1Db250ZXh0KCksIHRydWUpOwotCiAgICAgV0tDb250ZXh0Q2xlYXJDdXJyZW50
TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRl
eHQoKSk7CiAKICAgICBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCksIGZhbHNlKTsKQEAgLTMxNDIs
NyArMzE0MCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldElnbm9yZXNWaWV3cG9ydFNjYWxl
TGltaXRzKGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pCiAKIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKLSAgICBXS0NvbnRleHRUZXJtaW5hdGVO
ZXR3b3JrUHJvY2VzcyhwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3Jl
VGVybWluYXRlTmV0d29ya1Byb2Nlc3Mod2Vic2l0ZURhdGFTdG9yZSgpKTsKIH0KIAogdm9pZCBU
ZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdvcmtlcnMoKQpAQCAtMzE3Myw5ICszMTcx
LDggQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVPdGhl
clBhZ2UoUGxhdGZvcm1XZWJWaWV3KiBwYXJlbnQKICAgICByZXR1cm4gbmV3IFBsYXRmb3JtV2Vi
Vmlldyhjb25maWd1cmF0aW9uLCBvcHRpb25zKTsKIH0KIAotV0tDb250ZXh0UmVmIFRlc3RDb250
cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLQ29u
dGV4dENvbmZpZ3VyYXRpb25SZWYgY29udGV4dENvbmZpZ3VyYXRpb24pCitXS0NvbnRleHRSZWYg
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0NvbnRleHRSZWYgY29udGV4
dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZikKIHsKLSAgICBXS0NvbnRleHRTZXRQcmltYXJ5
V2Vic2l0ZURhdGFTdG9yZShjb250ZXh0LCBkZWZhdWx0V2Vic2l0ZURhdGFTdG9yZSgpKTsKICAg
ICByZXR1cm4gY29udGV4dDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408853</attachid>
            <date>2020-09-15 13:23:25 -0700</date>
            <delta_ts>2020-09-19 14:21:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200915132324.patch</filename>
            <type>text/plain</type>
            <size>309415</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MDkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGJlMGIwMzAxYzg4MWE5ZDlj
YjUzYmJhYmU0MTg0Zjc4Mjg4M2EzZjcuLjMyMDYyYzMzZmFlZmI5NzI1ZTdiMGZlYjYxMzY5NmUz
ZmExOGQ4NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzM4IEBACisyMDIwLTA5LTE1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24p
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0
b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuY3BwOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBD
b29raWVTdG9yZTo6Y29va2llc0ZvclVSTCk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9y
ZTo6c2V0Q29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29v
a2llKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVzdHJveWVkKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6dW5y
ZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmNwcDoKKyAgICAgICAgKFdLQ29udGV4dEdldENvb2tpZU1hbmFn
ZXIpOgorICAgICAgICAoV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKToKKyAgICAg
ICAgKFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgIChXS0Nv
bnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdLQ29u
dGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdLQ29udGV4dFNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcpOiBEZWxldGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9zZXRDb29raWVBY2NlcHRQb2xpY3k6XSk6CisgICAgICAgICgtW1dLUHJvY2Vzc1Bv
b2wgX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6XSk6CisgICAgICAgICgtW1dL
UHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1By
b2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3Jl
IF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChf
V2ViS2l0Q29va2llTWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUp
OgorICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9hZGRfY29va2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29v
a2llcyk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAg
ICAod2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1
dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNz
L0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lm1tOgorICAgICAgICAoV2ViS2l0
OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbik6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6
OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVz
cyk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5k
UmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OkRvd25sb2FkUHJveHlNYXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5
TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAg
IChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0
YXJ0TG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5OjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OmF0dGVtcHRSZWxhdW5jaEFmdGVyQ3Jhc2hJZk5lY2Vzc2FyeSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tn
cm91bmRQcmlvcml0eSk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sU2hvdWxkVGFr
ZVVJQmFja2dyb3VuZEFzc2VydGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRo
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OndlYnNp
dGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vz
c2VzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJv
Y2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJv
Y2Vzc0Fzc2VydGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZl
bnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRl
Q29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVB
bGxDb29raWVzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0QWxsQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3Vw
cGxlbWVudE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRl
cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpjcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50
aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25V
UkxGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlj
a0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxT
Y2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6fldlYlByb2Nlc3NQb29sKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3
YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxp
emVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nl
c3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVT
ZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpy
ZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRTZXJ2
aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29u
dGVudFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJl
Z2lzdGVyVVJMU2NoZW1lQXNMb2NhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpyZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFu
ZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2Jh
bFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JXZWJTb2NrZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJD
YWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpz
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHlGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
Ojp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzeW5jTmV0d29ya1Byb2Nlc3NDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc0Fz
c2VydGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29y
a2VyUGFnZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRpZENv
bW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rp
dml0eUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
aGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5l
dHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVj
ZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpk
dW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbik6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVh
clByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c3VibWl0VGVsZW1ldHJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3Vt
bWFyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2ll
QmxvY2tpbmdVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hl
ZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0
aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0Vu
dHJpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bG9n
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFz
SGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fk
c1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9T
YW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVE
b21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNl
c3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFw
cEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbmFt
ZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
Ojpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0
d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1
bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3Rv
cmVGb3JTZXNzaW9uSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwZW5k
aW5nQ29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmFkZFBlbmRpbmdDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRh
U3RvcmVTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZv
cm1TZXROZXR3b3JrUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL2dsaWIvV2ViUHJv
Y2Vzc1Byb3h5R0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cGxh
dGZvcm1HZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJDb29r
aWVNYW5hZ2VyUHJveHlTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSk6CisgICAgICAgICogVUlQcm9jZXNz
L3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyk6CisKIDIwMjAtMDktMTUg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBN
b3ZlIFdLQ29udGV4dENsZWFyQ2FjaGVkQ3JlZGVudGlhbHMgU1BJIHRvIFdLV2Vic2l0ZURhdGFT
dG9yZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAppbmRleCBmY2UyMzg5
ODdhNzg1MGYxOGM5ZjMwNmM1MGU5OGNlOTg4ZDEyNWZkLi5lYjU4ZmM5NDVkMTkyNTU0NjFiODYw
ZjRhOGI4ZGM2MTI1ZjUzZjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCkBAIC0xNTEsNyArMTUxLDcg
QEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBD
b29raWVBY2NlcHRQb2xpY3kgcG9saWN5LAogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhU
VFBDb29raWVBY2NlcHRQb2xpY3koQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNj
ZXB0UG9saWN5KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBjb21wbGV0aW9uSGFuZGxl
cihtX3Byb2Nlc3MuZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuY29va2llQWNjZXB0UG9saWN5KCkp
OworICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKS0+Y29va2llQWNjZXB0UG9saWN5KCkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggMzBmMDVhNmVmMjUyZTkxNGNjODYwNjRjNTNmMzVm
YTY5ZmQ4ZjllMS4uZGYzZDI3MjU2YmY3Nzg3Y2U3Mjg2NWQ4ZTY3YmU2ZDY1NjJiN2RlYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAg
LTM0NywyOSArMzQ3LDE5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3Jr
UHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiAKICAgICBzZXRBZENs
aWNrQXR0cmlidXRpb25EZWJ1Z01vZGUocGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRp
b25EZWJ1Z01vZGUpOwogCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5
KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRDsKLSAgICBz
ZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZSgqdGhpcywgV1RGTW92
ZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycykpKTsKLQotICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgYWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vz
c2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0
b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGly
ZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCisgICAg
Zm9yIChhdXRvJiBkYXRhU3RvcmVQYXJhbWV0ZXJzIDogcGFyYW1ldGVycy5kYXRhU3RvcmVQYXJh
bWV0ZXJzKSB7CisgICAgICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOworICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkoZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3Rh
TWFuYWdlcihzZXNzaW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1
b3RhLCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEs
IGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJh
bWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0gICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9u
SUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZEluZGV4ZWREYXRh
YmFzZVNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwogI2VuZGlmCi0KKyAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+
YWRkKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3Rvcnks
IGRhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKKyAgICAgICAgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3Rv
cmVTZXNzaW9uKCp0aGlzLCBXVEZNb3ZlKGRhdGFTdG9yZVBhcmFtZXRlcnMpKTsKICNpZiBFTkFC
TEUoU0VSVklDRV9XT1JLRVIpCi0gICAgYm9vbCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0
aW9uRGVsYXlFbmFibGVkID0gdHJ1ZTsKLSAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihQQUw6
OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1p
bmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9u
KHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1p
bmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKGRhdGFTdG9yZVBhcmFtZXRlcnMuc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIGRhdGFTdG9yZVBhcmFtZXRlcnMuc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKLQotICAg
IG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0KLSAgICBhdXRvKiBkZWZhdWx0U2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotICAgIGF1dG8qIGRlZmF1bHRTdG9yYWdlU2Vz
c2lvbiA9IGRlZmF1bHRTZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMucGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbi0+c2V0Q29v
a2llKGNvb2tpZSk7CisgICAgfQogCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9zdXBw
bGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+aW5pdGlhbGl6ZShwYXJhbWV0
ZXJzKTsKQEAgLTUwNSw4ICs0OTUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNz
aW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQogdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lv
bklELCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBp
ZGVudGlmaWVyQmFzZSkKICNlbmRpZgogewotICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0KICAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
bmV0d29ya1N0b3JhZ2VTZXNzaW9ucy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKICAgICBpZiAo
IWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm47CkBAIC01MjEsNyArNTA5LDcg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25J
RCYgc2Vzc2lvbklELCBib29sIHNob3VsZFUKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNm
SWRlbnRpZmllciA9IG1ha2VTdHJpbmcoaWRlbnRpZmllckJhc2UsICIuUHJpdmF0ZUJyb3dzaW5n
LiIsIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSkuY3JlYXRlQ0ZTdHJpbmcoKTsKICAgICBp
ZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gYWRv
cHRDRihjcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oY2ZJZGVudGlmaWVyLmdldCgpKSk7Ci0g
ICAgZWxzZQorICAgIGVsc2UgaWYgKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpKQogICAgICAgICBzdG9yYWdlU2Vzc2lvbiA9IFdlYkNvcmU6Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6Y3JlYXRlQ0ZTdG9yYWdlU2Vzc2lvbkZvcklkZW50aWZpZXIoY2ZJZGVu
dGlmaWVyLmdldCgpKTsKIAogICAgIGlmIChOZXR3b3JrU3RvcmFnZVNlc3Npb246OnByb2Nlc3NN
YXlVc2VDb29raWVBUEkoKSkgewpAQCAtNTQ0LDIxICs1MzIsMTEgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6Y29va2llQWNjZXB0UG9saWN5Q2hhbmdlZChIVFRQQ29va2llQWNjZXB0UG9saWN5IG5l
d1BvbGljeSkKIAogV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBOZXR3b3JrUHJvY2Vz
czo6c3RvcmFnZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkgY29uc3QK
IHsKLSAgICBpZiAoc2Vzc2lvbklEID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCkpCi0gICAgICAgIHJldHVybiAmZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CiAgICAgcmV0dXJu
IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy5nZXQoc2Vzc2lvbklEKTsKIH0KIAotV2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VTZXNz
aW9uKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbikK
LSAgICAgICAgbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gcGxhdGZvcm1DcmVhdGVE
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKLSAgICByZXR1cm4gKm1fZGVmYXVsdE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYpPiYgZnVuY3RvcikKIHsKLSAgICBmdW5jdG9yKGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigp
KTsKICAgICBmb3IgKGF1dG8mIHN0b3JhZ2VTZXNzaW9uIDogbV9uZXR3b3JrU3RvcmFnZVNlc3Np
b25zLnZhbHVlcygpKQogICAgICAgICBmdW5jdG9yKCpzdG9yYWdlU2Vzc2lvbik7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXggOTFiYzUw
MzU0NDVkMTc3Y2RmYjdkOTc4MGRkNDJlZmVlY2RhNTdjMC4uNmY0M2ZiMTRjMmVkZDZhNGUwYjM5
ZjcwMTFiNGY3OTAzZWU0YjUxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaApAQCAtMTcwLDcgKzE3MCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYpPiYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiogc3RvcmFnZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKSBjb25zdDsKLSAg
ICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigp
IGNvbnN0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b24+IG5ld1Rlc3RpbmdTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJik7CiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgdm9pZCBlbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwg
Ym9vbCBzaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRp
ZmllciwgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYpOwpAQCAtMzc2LDcgKzM3
NSw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5l
dHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gcGxhdGZv
cm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdDsKIAogICAgIHZvaWQgZGlkUmVj
ZWl2ZU5ldHdvcmtQcm9jZXNzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KTsKIApAQCAtNTQ1LDcgKzU0Myw2IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFBBTDo6U2Vz
c2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiBtX25ldHdvcmtTZXNzaW9u
czsKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zOwotICAgIG11
dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbV9k
ZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwogCiAgICAgUmVmUHRyPFN0b3JhZ2VNYW5hZ2Vy
U2V0PiBtX3N0b3JhZ2VNYW5hZ2VyU2V0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
Y3BwCmluZGV4IDk5MDFjNWNiNzNjNzRmZTNkYTRlYmY1N2JhODUxMjg2ZmRhMTA0YmYuLjAyZGRi
OTIzNGU5OTljM2U2Y2RjZGNmMGI4NzhiODcyNTgzNjMyOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAg
ZW5jb2RlciA8PCB1aVByb2Nlc3NTREtWZXJzaW9uOwogICAgIElQQzo6ZW5jb2RlKGVuY29kZXIs
IG5ldHdvcmtBVFNDb250ZXh0LmdldCgpKTsKICNlbmRpZgotICAgIGVuY29kZXIgPDwgZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZW5jb2RlciA8PCBkYXRhU3RvcmVQYXJhbWV0ZXJz
OwogI2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIgPDwgY29va2llQWNjZXB0UG9saWN5OwogICAg
IGVuY29kZXIgPDwgaWdub3JlVExTRXJyb3JzOwpAQCAtNjgsOSArNjgsNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAg
IGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQotICAgIGVuY29kZXIgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlIDw8IHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVs
YXk7Ci0jZW5kaWYKICAgICBlbmNvZGVyIDw8IHNob3VsZEVuYWJsZUlUUERhdGFiYXNlOwogICAg
IGVuY29kZXIgPDwgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlOwogfQpAQCAtMTE2
LDExICsxMTMsMTEgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVj
b2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Byb2MKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogI2VuZGlmCiAKLSAgICBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4g
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAgZGVjb2RlciA+PiBkZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVyczsKLSAgICBpZiAoIWRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKQorICAg
IE9wdGlvbmFsPFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4+IGRhdGFTdG9yZVBh
cmFtZXRlcnM7CisgICAgZGVjb2RlciA+PiBkYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGlmICgh
ZGF0YVN0b3JlUGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzKTsKKyAgICByZXN1bHQuZGF0YVN0b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRhdGFT
dG9yZVBhcmFtZXRlcnMpOwogCiAjaWYgVVNFKFNPVVApCiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuY29va2llQWNjZXB0UG9saWN5KSkKQEAgLTE0MiwyMCArMTM5LDYgQEAgYm9vbCBO
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVj
b2RlciwgTmV0d29ya1Byb2MKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC51cmxTY2hl
bWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3MpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICBPcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IHNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+PiBz
ZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlm
ICghc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqc2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC5zaG91bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCmluZGV4IDExY2E1YTE5OWZjZmZlODgz
ZmZmMGEyZmY3OWRmZTQyMTBkOWRhZDEuLjY3NDlkYTBjNGE2M2MyMDIxMDc3ODM1ODQ4NDZjOTBk
MDEwYTAzNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKQEAgLTcxLDcgKzcxLDcg
QEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBuZXR3b3JrQVRTQ29udGV4dDsKICNlbmRpZgogCi0gICAgV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMgZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgVmVjdG9y
PFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkYXRhU3RvcmVQYXJhbWV0ZXJzOwogICAgIAog
I2lmIFVTRShTT1VQKQogICAgIFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2ll
QWNjZXB0UG9saWN5IHsgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeTo6QWx3YXlzQWNj
ZXB0IH07CkBAIC04NSwxMiArODUsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMgewogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2Nh
bDsKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAK
LSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgU3RyaW5nIHNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgYm9vbCBzaG91
bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5IHsgZmFsc2UgfTsK
LSNlbmRpZgotICAgIGJvb2wgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgeyBmYWxzZSB9OworICAg
IGJvb2wgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgeyB0cnVlIH07CiAgICAgYm9vbCBlbmFibGVB
ZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1t
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29h
Lm1tCmluZGV4IGNlNWMxY2U5YjJjNzBkZDUzNzJhOTljNzQyNmIyNTQ5MjZkMDBlZGIuLjVmYTUz
M2UxNjY3NmQ3OTYyMzA4NDUyNWFmMzQzY2QxYmY0YTYxYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0K
QEAgLTc4LDkgKzc4LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXpl
TmV0d29ya1Byb2Nlc3NDb2NvYShjb25zdCBOZXR3b3JrUHJvY2Vzc0MKICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkocGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLnBh
cmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9DRk5ldHdv
cmtTZXRBVFNDb250ZXh0KHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwpAQCAt
MTA1LDExICsxMDIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVO
ZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFtOU1VSTENhY2hl
IHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdldCgpXTsKIH0KIAotc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3Jt
Q3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVu
aXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkpOwotfQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3b3JrUHJvY2Vz
czo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdAogewogI2lmIFVTRShTT1VSQ0Vf
QVBQTElDQVRJT05fQVVESVRfREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKaW5kZXggZDk5ZjlkZDY0YmFk
NmU0MmRjYzhlM2Y5YjhmMTY5Mjk5N2Y2NzE5Mi4uNDk1MzgxMWIyMTY0ZTg5ODQ2ZjkyNzllNjIy
OWQ1OTNlMjI1NmEzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
dXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKQEAgLTM5LDExICszOSw2IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5l
dHdvcmtQcm9jZXNzQ3JlYXRpCiB7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNh
dGVGb3JIb3N0KGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBjb25zdCBT
dHJpbmcmIGhvc3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQu
bW0KaW5kZXggYzI3MzZlMDI2YTU1ZDNkNDAyMGY4NGY0ZDY5M2QxNmI0NjUyZWQyMy4uMWUxODQ4
OWY5NDYyMGYwMmE3ZDllOWU4NjllYzg2NDkxYjdiYmQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQu
bW0KQEAgLTU1LDE1ICs1NSwxMSBAQCB2b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1
cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYgbmV0dwogICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9y
YWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gdWlQcm9jZXNzQ29va2llU3RvcmFnZTsKLSAgICBpZiAoIXNlc3Npb25JRC5pc0Vw
aGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVy
LmlzRW1wdHkoKSkKKyAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0
ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSAmJiBwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAgICAgICAgdWlQcm9jZXNzQ29va2llU3RvcmFnZSA9IGNv
b2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlpbmdEYXRhKHBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2ll
U3RvcmFnZUlkZW50aWZpZXIpOwogCiAgICAgbmV0d29ya1Byb2Nlc3MuZW5zdXJlU2Vzc2lvbihz
ZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZFVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbiwgbWFrZVN0cmluZyhiYXNlLCAnLicsIHNlc3Npb25JRC50b1VJ
bnQ2NCgpKSwgV1RGTW92ZSh1aVByb2Nlc3NDb29raWVTdG9yYWdlKSk7CiAKLSAgICBhdXRvKiBz
ZXNzaW9uID0gbmV0d29ya1Byb2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKTsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMpCi0gICAg
ICAgIHNlc3Npb24tPnNldENvb2tpZShjb29raWUpOwotCiAgICAgbmV0d29ya1Byb2Nlc3Muc2V0
U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUobmV0d29ya1Byb2Nlc3Ms
IFdURk1vdmUocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vz
c1NvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9j
ZXNzU291cC5jcHAKaW5kZXggNDFhZmRjYzYxYWRjNTgzZGNmMTlmMmQ0MGFhMjg5MWY4YTAxMzI4
Yi4uMDkzZDU5OTU5NmE2ODgzMGFmMDk5M2ZhMzY4MzFlMGMzMjRiZmJlOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291
cC5jcHAKQEAgLTE0MCwxMSArMTQwLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1J
bml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKICAgICBz
ZXRJZ25vcmVUTFNFcnJvcnMocGFyYW1ldGVycy5pZ25vcmVUTFNFcnJvcnMpOwogfQogCi1zdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vz
czo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJl
dHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNl
dElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKICAgICBTb3VwTmV0d29y
a1Nlc3Npb246OnNldFNob3VsZElnbm9yZVRMU0Vycm9ycyhpZ25vcmVUTFNFcnJvcnMpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMu
Y3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3Bw
CmluZGV4IDZkMGMxMjlhNzQwNTEwZDM4Njk3MzcwNWFkMDkyZWYxMzJjYzA3NWEuLjA0ODEwYjNl
MTliZTk2Y2FkMWFkODJhNDRkY2VkYjI2ZWY3ODI2MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKQEAgLTQwLDEzICs0MCw5
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7
CiAgICAgZW5jb2RlciA8PCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBl
bmNvZGVyIDw8IGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIGVuY29kZXIg
PDwgcGVuZGluZ0Nvb2tpZXM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBl
bmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA8PCBpbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBlbmNv
ZGVyIDw8IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwot
I2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTgzLDEyICs3
OSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSA9IFdU
Rk1vdmUoKmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIE9wdGlvbmFs
PFZlY3RvcjxXZWJDb3JlOjpDb29raWU+PiBwZW5kaW5nQ29va2llczsKLSAgICBkZWNvZGVyID4+
IHBlbmRpbmdDb29raWVzOwotICAgIGlmICghcGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IFdURk1vdmUo
KnBlbmRpbmdDb29raWVzKTsKLQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIE9w
dGlvbmFsPFN0cmluZz4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIGRlY29kZXIgPj4g
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwpAQCAtMTAxLDE0ICs5MSw2IEBAIE9wdGlvbmFsPFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVj
b2RlKElQQzo6RGVjCiAgICAgaWYgKCFpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBPcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGluZGV4ZWREYXRhYmFz
ZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gaW5kZXhl
ZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFpbmRl
eGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9i
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlVGVtcEJs
b2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycy5oCmluZGV4IGYyN2RmNDg5ODA5ZjMxOTYwOGI2ODBjYjJhOGExYzE0
YjcwMTg0MzkuLmUxYjIzMzcwMTk5ZmUzNzAzMWU5ZGM1YzA1NzgxNTUwMjFlMzRkNmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgK
KysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaApA
QCAtNTEsMTUgKzUxLDExIEBAIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyB7CiAK
ICAgICBWZWN0b3I8dWludDhfdD4gdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFu
ZGxlOwotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29raWVzOwogICAgIE5l
dHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsK
IAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIFN0cmluZyBpbmRleGVkRGF0YWJh
c2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENv
b2tpZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2ll
U3RvcmUuY3BwCmluZGV4IGJjMDc4NjZmYmMzOTY4ZTc2Y2FhOWEzNTY4MTBjNmEyZmIwOWRjZmQu
LmZmOTU1ODkyYmRhMGI4M2MyM2E5NmEwODM5ZWYzYmQwZDk0NjljMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCkBAIC00Niw4
ICs0Niw2IEBAIG5hbWVzcGFjZSBBUEkgewogSFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3Rv
cmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQogICAgIDogbV9v
d25pbmdEYXRhU3RvcmUod2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBpZiAoIW1fb3duaW5nRGF0
YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAg
IHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIEhUVFBDb29r
aWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCkBAIC01NSw4ICs1Myw2IEBAIEhUVFBDb29raWVT
dG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCiAgICAgQVNTRVJUKG1fb2JzZXJ2ZXJzLmlzRW1wdHko
KSk7CiAgICAgQVNTRVJUKCFtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5KTsKICAgICBBU1NF
UlQoIW1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotCi0gICAgdW5yZWdpc3RlckZvck5l
d1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
ZmlsdGVyQXBwQm91bmRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29r
aWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtODEsMzMgKzc3LDE2IEBAIHZvaWQgSFRUUENvb2tpZVN0
b3JlOjpmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4m
IGNvb2tpCiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9y
Q29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4gYWxsQ29va2llczsKLSAgICAgICAgaWYgKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KQotICAgICAgICAgICAgYWxsQ29va2llcyA9IGdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVT
dG9yZUNvb2tpZXMoKTsKLSAgICAgICAgYWxsQ29va2llcy5hcHBlbmRWZWN0b3IobV9vd25pbmdE
YXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBhbGxDb29raWVzXSAoKSBtdXRh
YmxlIHsKLSAgICAgICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2llcyhhbGxDb29raWVzLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0QWxsQ29v
a2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIHBvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNv
b2tpZT4mIGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293
bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29v
a2llTWFuYWdlci5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwg
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29r
aWU+JiBjb29raWVzKSBtdXRhYmxlIHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNv
b2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBI
VFRQQ29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZv
ckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1
cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNv
b2tpZU1hbmFnZXItPmdldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1
cmwsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2ll
PiYmIGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmlu
Z0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2ll
TWFuYWdlci5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsLCBb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJiBj
b29raWVzKSBtdXRhYmxlIHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTExNSw3OCArOTQs
MjkgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG8KIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRD
b29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91
bmRDb29raWVzKGNvb2tpZXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYg
YXBwQm91bmRDb29raWVzKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byogcG9vbCA9IG1fb3duaW5n
RGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAg
ICAgIGlmICghcG9vbCkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBhcHBCb3Vu
ZENvb2tpZXMpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogcGVuZGluZ0Nvb2tpZXMgdXNl
ZCBmb3IgZGVmYXVsdFNlc3Npb24gYmVjYXVzZSBzZXNzaW9uIGNvb2tpZXMgY2Fubm90IGJlIHBy
b3BhZ2F0ZWQgdG8gTmV0d29yayBQcm9jZXNzIHdpdGggdWlQcm9jZXNzQ29va2llU3RvcmFnZUlk
ZW50aWZpZXIuCi0gICAgICAgICAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vz
c2lvbikKLSAgICAgICAgICAgICAgICAgICAgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29v
a2llU3RvcmUoY29va2llKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIG1fb3duaW5nRGF0YVN0b3JlLT5hZGRQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgW3Bvb2wgPSBX
VEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAg
ICAgIH0pOworICAgICAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUt
Pm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgICAgICBjb29raWVNYW5hZ2Vy
LnNldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBhcHBCb3VuZENvb2tp
ZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQ
Q29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1
dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdl
T3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAobV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkg
JiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAgICAgZGVsZXRlQ29va2llRnJvbURlZmF1bHRV
SVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
X293bmluZ0RhdGFTdG9yZS0+cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb29raWUpOwotCi0gICAgICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8q
IGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFn
ZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7
CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29raWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCBjb29raWUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBI
VFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFT
dG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICgh
cG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0Vw
aGVtZXJhbCgpKQotICAgICAgICAgICAgZGVsZXRlQ29va2llc0luRGVmYXVsdFVJUHJvY2Vzc0Nv
b2tpZVN0b3JlKCk7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBj
b29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5n
RGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVN
YW5hZ2VyLmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsK
ICAgICAvLyBGSVhNRTogVGhlIENvbXBsZXRpb25IYW5kbGVyIHNob3VsZCBiZSBwYXNzZWQgdG8g
V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzLgogICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRU
UENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0g
ICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkp
Ci0gICAgICAgICAgICBzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5SW5EZWZhdWx0VUlQcm9jZXNz
Q29va2llU3RvcmUocG9saWN5KTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2ll
TWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBwb2xpY3ksIFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2Vy
ID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwor
ICAgIGNvb2tpZU1hbmFnZXIuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIyNywyMSArMTU3LDcgQEAgdm9pZCBI
VFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQogCiAg
ICAgbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA9IG1ha2VVbmlxdWU8QVBJV2ViQ29va2ll
TWFuYWdlclByb3h5T2JzZXJ2ZXI+KCp0aGlzKTsKIAotICAgIGF1dG8qIHBvb2wgPSBtX293bmlu
Z0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0g
ICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIEFTU0VSVCghbV9vYnNlcnZpbmdVSVByb2Nlc3NDb29r
aWVzKTsKLQotICAgICAgICAvLyBMaXN0ZW4gZm9yIGNvb2tpZSBub3RpZmljYXRpb25zIGluIHRo
ZSBVSVByb2Nlc3MgaW4gdGhlIG1lYW50aW1lLgotICAgICAgICBzdGFydE9ic2VydmluZ0NoYW5n
ZXNUb0RlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShbdGhpc10gKCkgewotICAgICAgICAgICAg
Y29va2llc0RpZENoYW5nZSgpOwotICAgICAgICB9KTsKLQotICAgICAgICBtX29ic2VydmluZ1VJ
UHJvY2Vzc0Nvb2tpZXMgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9v
YnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9
ICZtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CiAg
ICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmlu
Z0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsK
IH0KIApAQCAtMjc2LDQ2ICsxOTIsMTAgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNE
aWRDaGFuZ2UoKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQo
KQogewogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnVucmVnaXN0ZXJPYnNlcnZl
cihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9i
c2VydmVyKTsKLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbnVsbHB0cjsKLQot
ICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVT
dG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdl
clByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFn
ZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVy
KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2Jz
ZXJ2ZXIpOwogfQogCi12b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNz
UG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIEFTU0VSVCghbV9wcm9jZXNzUG9vbENyZWF0aW9u
TGlzdGVuZXJJZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVy
SWRlbnRpZmllciA9IFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25M
aXN0ZW5lcihbdGhpc10oV2ViUHJvY2Vzc1Bvb2wmIG5ld1Byb2Nlc3NQb29sKSB7Ci0gICAgICAg
IGlmICghbV9vd25pbmdEYXRhU3RvcmUtPmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKG5ld1Byb2Nl
c3NQb29sKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBOb3cgdGhhdCBhbiBh
c3NvY2lhdGVkIHByb2Nlc3MgcG9vbCBleGlzdHMsIHdlIG5lZWQgdG8gZmx1c2ggdGhlIFVJIHBy
b2Nlc3MgY29va2llIHN0b3JlCi0gICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBhbnkgY2hhbmdlcyBh
cmUgcmVmbGVjdGVkIHdpdGhpbiB0aGUgbmV3IHByb2Nlc3MgcG9vbC4KLSAgICAgICAgZmx1c2hE
ZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgbmV3UHJvY2Vzc1Bvb2wuZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLQotICAgICAgICBpZiAobV9jb29raWVNYW5hZ2VyUHJveHlP
YnNlcnZlcikgewotICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG5l
d1Byb2Nlc3NQb29sLnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
Ci0gICAgICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2Vy
dmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5
T2JzZXJ2ZXIpOwotICAgICAgICB9Ci0gICAgICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9v
bE5vdGlmaWNhdGlvbnMoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBIVFRQQ29va2llU3RvcmU6OnVu
cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIGlmIChtX3By
b2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpCi0gICAgICAgIFdlYlByb2Nlc3NQ
b29sOjp1bnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKG1fcHJvY2Vzc1Bvb2xD
cmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25M
aXN0ZW5lcklkZW50aWZpZXIgPSAwOwotfQotCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogdm9pZCBI
VFRQQ29va2llU3RvcmU6OmZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCkgeyB9CiBW
ZWN0b3I8V2ViQ29yZTo6Q29va2llPiBIVFRQQ29va2llU3RvcmU6OmdldEFsbERlZmF1bHRVSVBy
b2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKSB7IHJldHVybiB7IH07IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAppbmRleCBkNjIwYWRkYTRl
N2Y4OTQ1NjYxOGEzZTIyZTFiZmQ0MzU3Nzc1YjE5Li5hMDVmNDE0MzBkYjJiMjNkNDE3ODQwNzlh
NGZiODZjNzQ2MGE3NTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
QVBJSFRUUENvb2tpZVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5oCkBAIC04Myw5ICs4Myw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgSFRUUENvb2tpZVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYpOwogCi0gICAgdm9p
ZCByZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotICAgIHZvaWQgdW5y
ZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotCiAgICAgdm9pZCBmbHVz
aERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpOwogICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29y
ZTo6Q29va2llPiBnZXRBbGxEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7CiAg
ICAgc3RhdGljIHZvaWQgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29u
c3QgV2ViQ29yZTo6Q29va2llJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS0NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tD
b250ZXh0LmNwcAppbmRleCBkMTJjYWJjNzQyYTczOTUyZTcwYzFkY2Q2ZjBhMmU1MGY3YTYxNTMx
Li4xOWY5YzlmOTBiODljOGFjODNjOTFiZmVjY2YxNjdjYjI2ZDYwYzI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKQEAgLTQyMSwxMSArNDIxLDYgQEAg
dm9pZCBXS0NvbnRleHRQcmVjb25uZWN0VG9TZXJ2ZXIoV0tDb250ZXh0UmVmLCBXS1VSTFJlZikK
IHsKIH0KIAotV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0
Ojp0b0ltcGwoY29udGV4dFJlZiktPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCkpOwotfQotCiBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0
ZURhdGFTdG9yZShXS0NvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdLV2Vic2l0ZURhdGFTdG9y
ZUdldERlZmF1bHREYXRhU3RvcmUoKTsKQEAgLTUzOCwxMyArNTMzLDYgQEAgdm9pZCBXS0NvbnRl
eHRTZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChXS0NvbnRleHRSZWYg
Y29udGV4dFJlZiwKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0SmF2YVNjcmlw
dEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoZW5hYmxlKTsKIH0KIAotdm9pZCBXS0NvbnRl
eHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKFdLQ29u
dGV4dFJlZiBjb250ZXh0LCBib29sIGFsbG93cykKLXsKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCi0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnNldEFsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlmCi19Ci0KIFdLRGljdGlvbmFyeVJl
ZiBXS0NvbnRleHRDb3B5UGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzKFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmKQogewogICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6OnRvSW1wbChj
b250ZXh0UmVmKS0+cGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzKCkubGVha1JlZigpKTsKQEAg
LTU4NiwxMSArNTc0LDYgQEAgdm9pZCBXS0NvbnRleHRTZXRGb250QWxsb3dMaXN0KFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmLCBXS0FycmF5UmVmIGFycmF5UmVmKQogICAgIFdlYktpdDo6dG9JbXBs
KGNvbnRleHRSZWYpLT5zZXRGb250QWxsb3dMaXN0KFdlYktpdDo6dG9JbXBsKGFycmF5UmVmKSk7
CiB9CiAKLXZvaWQgV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVm
IGNvbnRleHQpCi17Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzKCk7Ci19Ci0KIHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMo
V0tDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRl
cm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CkBAIC01OTgsNyArNTgxLDcgQEAgdm9pZCBXS0NvbnRl
eHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYgY29udGV4dCkKIAogUHJvY2Vz
c0lEIFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihXS0NvbnRleHRSZWYgY29u
dGV4dFJlZikKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPm5ldHdv
cmtQcm9jZXNzSWRlbnRpZmllcigpOworICAgIHJldHVybiAwOwogfQogCiB2b2lkIFdLQ29udGV4
dEFkZFN1cHBvcnRlZFBsdWdpbihXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tTdHJpbmdSZWYg
ZG9tYWluUmVmLCBXS1N0cmluZ1JlZiBuYW1lUmVmLCBXS0FycmF5UmVmIG1pbWVUeXBlc1JlZiwg
V0tBcnJheVJlZiBleHRlbnNpb25zUmVmKQpAQCAtNjQ2LDEyICs2MjksMTEgQEAgdm9pZCBXS0Nv
bnRleHRDbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZShXS0NvbnRleHRSZWYg
Y29udGV4dFJlZiwgdm8KICAgICB9KTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRVc2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBib29sIHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCit2b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MoV0tDb250ZXh0UmVmLCBib29sIHVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2Vzcyk7CisgICAgV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIH0KIAotdm9p
ZCBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYgY29udGV4
dFJlZiwgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3RvcmUpCit2b2lkIFdLQ29u
dGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiwgV0tXZWJzaXRlRGF0
YVN0b3JlUmVmKQogewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRQcmltYXJ5
RGF0YVN0b3JlKCpXZWJLaXQ6OnRvSW1wbCh3ZWJzaXRlRGF0YVN0b3JlKSk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKaW5kZXggMmZm
NTNlOGM4Njc1NTQ4ZDRhNWMxYWUyNzRjZDdhMDc2YjY3MzNiYi4uMzk2NWEyNGMzY2E5ZGI4OGQ1
NWEzZjJkMWIzOTIyMzNiMTM2MzlhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaApAQCAtODYsOCArODYsNiBAQCBXS19FWFBPUlQgdm9p
ZCBXS0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmLCBib29sKTsKIFdL
X0VYUE9SVCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLQ29udGV4dFJl
Zik7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0Nv
bnRleHRSZWYpOwogCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKFdLQ29udGV4dFJlZiwgYm9vbCk7Ci0KIHR5
cGVkZWYgdm9pZCAoKldLQ29udGV4dEludmFsaWRNZXNzYWdlRnVuY3Rpb24pKFdLU3RyaW5nUmVm
IG1lc3NhZ2VOYW1lKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEludmFsaWRNZXNzYWdl
RnVuY3Rpb24oV0tDb250ZXh0SW52YWxpZE1lc3NhZ2VGdW5jdGlvbiBpbnZhbGlkTWVzc2FnZUZ1
bmN0aW9uKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCmluZGV4IDQ2YzI2OTJlNTM1ODI4MDhhYjc0OTE1
MDJmYjM5ZjgzNzZlYjBiODIuLjFjM2E1Y2IzZDE4MzFlNzcwMDI3ZjU4MTUyZDViOTZmY2IxZGRl
ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURh
dGFTdG9yZVJlZi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmNwcApAQCAtNjksNiArNjksMTEgQEAgV0tXZWJzaXRlRGF0YVN0b3Jl
UmVmIFdLV2Vic2l0ZURhdGFTdG9yZUNyZWF0ZVdpdGhDb25maWd1cmF0aW9uKFdLV2Vic2l0ZURh
dGFTdG8KICAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpjcmVhdGUoKldlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLCBzZXNzaW9uSUQpLmxlYWtS
ZWYoKSk7CiB9CiAKK3ZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nl
c3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSkKK3sKKyAgICBXZWJLaXQ6OnRvSW1w
bChkYXRhU3RvcmUpLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworfQorCiB2b2lkIFdLV2Vi
c2l0ZURhdGFTdG9yZVJlbW92ZUlUUERhdGFGb3JEb21haW4oV0tXZWJzaXRlRGF0YVN0b3JlUmVm
IGRhdGFTdG9yZVJlZiwgV0tTdHJpbmdSZWYgaG9zdCwgdm9pZCogY29udGV4dCwgV0tXZWJzaXRl
RGF0YVN0b3JlUmVtb3ZlSVRQRGF0YUZvckRvbWFpbkZ1bmN0aW9uIGNhbGxiYWNrKQogewogI2lm
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCmluZGV4IGEyNTk2ZGJk
MTU0MGZiNzRhZmNiYzU2NWJiYzU5ZTI4NmU2OWRkNmIuLmJiOThhYzU4MWRhNWZmOGQ5ZDZlMmE2
OTlhMjQxZDU4YzM1MDI5NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCkBAIC00Nyw2ICs0Nyw5IEBAIFdLX0VYUE9S
VCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2Vi
U29ja2V0VGVzdGluZyhXCiAKIFdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZUNsZWFy
Q2FjaGVkQ3JlZGVudGlhbHMoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZik7CiAK
K1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMo
V0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSk7CitXS19FWFBPUlQgdm9pZCBXS1dlYnNp
dGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYg
ZGF0YVN0b3JlKTsKKwogV0tfRVhQT1JUIGJvb2wgV0tXZWJzaXRlRGF0YVN0b3JlR2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJl
Zik7CiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZChXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBib29sIGVu
YWJsZSk7CiB0eXBlZGVmIHZvaWQgKCpXS1dlYnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNzRXBoZW1l
cmFsRnVuY3Rpb24pKGJvb2wgaXNFcGhlbWVyYWwsIHZvaWQqIGZ1bmN0aW9uQ29udGV4dCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9v
bC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1t
CmluZGV4IDgwZGQ1MmEyNGU4YWVhMGMwZjUxN2IxY2IwZWQ1Nzc2ZWQ2NGIxY2MuLmJmZjA2Nzky
M2RlNmUwZGM0MmEyNDkxZWQwZmZmMGMyOTY5ODM2YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCkBAIC00MDcsMjggKzQwNyw2
IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25z
dCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAgICAgX3Byb2Nlc3NQb29sLT5jbGVhclN1cHBv
cnRlZFBsdWdpbnMoKTsKIH0KIAotLSAodm9pZClfdGVybWluYXRlTmV0d29ya1Byb2Nlc3MKLXsK
LSAgICBfcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0KLS0gKHZv
aWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseQotewotICAgIF9wcm9j
ZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGlu
ZygpOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2
b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5k
TmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhbY29tcGxldGlvbkhhbmRs
ZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSB7Ci0gICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0Rp
ZFJlc3VtZQotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1l
KCk7Ci19Ci0KIC0gKHZvaWQpX3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzCiB7CiAgICAgX3Byb2Nl
c3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwpAQCAtNDM2LDEyICs0MTQsMTIgQEAg
c3RhdGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhh
c2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMKIAogLSAodm9pZClfc2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzczooQk9PTCl1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzCiB7Ci0g
ICAgX3Byb2Nlc3NQb29sLT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2Vzcyk7CiB9CiAKIC0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIKIHsK
LSAgICByZXR1cm4gX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKKyAg
ICByZXR1cm4gMDsKIH0KIAogLSAocGlkX3QpX3ByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyCkBA
IC01NjYsMTMgKzU0NCw2IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRv
RGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAgICAgX3Byb2Nlc3NQ
b29sLT5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOwogfQogCi0tICh2b2lk
KV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dz
Ci17Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIF9wcm9jZXNzUG9vbC0+c2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0K
LQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAtIChpZCA8X1dLR2VvbG9jYXRpb25Db3JlTG9j
YXRpb25Qcm92aWRlcj4pX2NvcmVMb2NhdGlvblByb3ZpZGVyCiB7CkBAIC02MDUsMTEgKzU3Niw2
IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25z
dCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAgICAgfSk7CiB9CiAKLS0gKEJPT0wpX25ldHdv
cmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50
Ci17Ci0gICAgcmV0dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVu
dEZvclRlc3RpbmcoZW50aXRsZW1lbnQpOwotfQotCiAtICh2b2lkKV9jbGVhclBlcm1hbmVudENy
ZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNwYWNlOihOU1VSTFByb3RlY3Rpb25TcGFjZSAqKXByb3Rl
Y3Rpb25TcGFjZQogewogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJQZXJtYW5lbnRDcmVkZW50aWFs
c0ZvclByb3RlY3Rpb25TcGFjZShXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UocHJvdGVjdGlvblNw
YWNlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQ
cm9jZXNzUG9vbFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sUHJpdmF0ZS5oCmluZGV4IDJhMGY1ZTZkZWU2ODc0YWEwODNmNDgwY2UyODVk
NTI2YTIzOGY0Y2YuLmYyZTg5OTUwZGZhZTFkOTNlMjllMjFhYzQ4MjVkNDIyZGFmNWU5OTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29s
UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nl
c3NQb29sUHJpdmF0ZS5oCkBAIC04NywxMCArODcsNiBAQAogLSAoX1dLRG93bmxvYWQgKilfcmVz
dW1lRG93bmxvYWRGcm9tRGF0YTooTlNEYXRhICopcmVzdW1lRGF0YSB3ZWJzaXRlRGF0YVN0b3Jl
OihXS1dlYnNpdGVEYXRhU3RvcmUgKilkYXRhU3RvcmUgIHBhdGg6KE5TU3RyaW5nICopcGF0aCBv
cmlnaW5hdGluZ1dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAogLy8gVGVzdCBvbmx5LiBTaG91
bGQgYmUgY2FsbGVkIG9ubHkgd2hpbGUgbm8gd2ViIGNvbnRlbnQgcHJvY2Vzc2VzIGFyZSBydW5u
aW5nLgotLSAodm9pZClfdGVybWluYXRlTmV0d29ya1Byb2Nlc3MgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xNSksIGlvcygxMy4wKSk7Ci0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVw
YXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Ci0tICh2b2lkKV9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xNSksIGlvcygxMy4wKSk7Ci0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1
bWUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAtICh2b2lkKV90
ZXJtaW5hdGVTZXJ2aWNlV29ya2VycyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSwgaW9z
KDEyLjApKTsKIAogLy8gVGVzdCBvbmx5LgpAQCAtMTIyLDkgKzExOCw3IEBACiAtICh2b2lkKV9w
cmVjb25uZWN0VG9TZXJ2ZXI6KE5TVVJMICopc2VydmVyVVJMIFdLX0FQSV9ERVBSRUNBVEVEX1dJ
VEhfUkVQTEFDRU1FTlQoIldLV2ViVmlldy5fcHJlY29ubmVjdFRvU2VydmVyIiwgbWFjb3MoMTAu
MTMuNCwgV0tfTUFDX1RCQSksIGlvcygxMS4zLCBXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25s
eS4KLS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjoo
Qk9PTClhbGxvd3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMpKTsK
IC0gKHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3Rpbmc6KHBp
ZF90KXBpZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PE5TU3RyaW5nICo+ICop
KWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygx
Mi4yKSk7Ci0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzoo
TlNTdHJpbmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBp
b3MoMTIuMikpOwogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclByb3RlY3Rp
b25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBnZXR0ZXI9X2lzQ29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQsIHNldHRlcj1fc2V0
Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQ6KSBCT09MIF9jb29raWVTdG9yYWdlUGFy
dGl0aW9uaW5nRW5hYmxlZCBXS19BUElfREVQUkVDQVRFRCgiUGFydGl0aW9uZWQgY29va2llcyBh
cmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCIsIG1hY29zKDEwLjEyLjMsIDEwLjE0LjQpLCBpb3MoMTAu
MywgMTIuMikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2Vic2l0ZURhdGFTdG9yZS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KaW5kZXggZWY5MGU4YmY0ODUxM2RhNzIyOWNlOWZkMjJm
MDdmNTFmZTUxNDhhZS4uZjU5OWRmNzlkYTE4YjViNDI5MmMzNzU2NDEzYmZlODk0ODZhODk4YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURh
dGFTdG9yZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJz
aXRlRGF0YVN0b3JlLm1tCkBAIC02MTcsNiArNjE3LDExIEBAIHN0YXRpYyBWZWN0b3I8V2ViS2l0
OjpXZWJzaXRlRGF0YVJlY29yZD4gdG9XZWJzaXRlRGF0YVJlY29yZHMoTlNBcnJheSAqZGF0YVJl
Y29yCiAgICAgfSk7CiB9CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRG
b3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50Cit7CisgICAgcmV0dXJuIF93ZWJzaXRl
RGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhlbnRpdGxl
bWVudCk7Cit9CisKIC0gKGlkIDxfV0tXZWJzaXRlRGF0YVN0b3JlRGVsZWdhdGU+KV9kZWxlZ2F0
ZQogewogICAgIHJldHVybiBfZGVsZWdhdGUuZ2V0KCkuZ2V0KCk7CkBAIC02NjMsNCArNjY4LDI3
IEBAIHN0YXRpYyBWZWN0b3I8V2ViS2l0OjpXZWJzaXRlRGF0YVJlY29yZD4gdG9XZWJzaXRlRGF0
YVJlY29yZHMoTlNBcnJheSAqZGF0YVJlY29yCiAjZW5kaWYKIH0KIAorLSAodm9pZClfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3MKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+dGVybWluYXRlTmV0
d29ya1Byb2Nlc3MoKTsKK30KKworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRv
U3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIF93ZWJzaXRl
RGF0YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhb
Y29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSB7Cisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpX3NlbmRO
ZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseQoreworICAgIF93ZWJzaXRlRGF0YVN0
b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7
CisKK30KKworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lCit7CisgICAgX3dl
YnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOworfQorCiBAZW5k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRl
RGF0YVN0b3JlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAppbmRleCBmY2NjNmI1OTdlZjM3N2U3YzA0ZDkyZGI2
NzBiZDQxMzVkODYxMWY3Li42ODNlYTk2NzRiZTY0OTFjOTMzY2VlMzA4NzRiZjVmNDA1YWFlMmNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRl
RGF0YVN0b3JlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKQEAgLTgzLDkgKzgzLDE2IEBAIHR5cGVkZWYg
TlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tXZWJzaXRlRGF0YVN0b3JlRmV0Y2hPcHRpb25zKSB7
CiAKIC0gKHZvaWQpX3JlbmFtZU9yaWdpbjooTlNVUkwgKilvbGROYW1lIHRvOihOU1VSTCAqKW5l
d05hbWUgZm9yRGF0YU9mVHlwZXM6KE5TU2V0PE5TU3RyaW5nICo+ICopZGF0YVR5cGVzIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcjsKIAorLSAoQk9P
TClfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50
aXRsZW1lbnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKTsKKwogQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCB3ZWFrKSBpZCA8X1dLV2Vi
c2l0ZURhdGFTdG9yZURlbGVnYXRlPiBfZGVsZWdhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygx
MC4xNSksIGlvcygxMy4wKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkp
IF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpfY29uZmlndXJhdGlvbjsKIAorLSAo
dm9pZClfdGVybWluYXRlTmV0d29ya1Byb2Nlc3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19N
QUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1By
ZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3Nl
bmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7CisKIEBlbmQKIAogTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIu
Y3BwCmluZGV4IDFlZTczZWJjMGVhMDM2Zjg2YjNmZTk0NDE0OTA3MmU2YWM0ZGM3NjcuLmZiOThk
MDU5MGM5YWQyODIzNWQ3MTFiN2NhYWM5YmM1NWM5YTY0NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCkBA
IC02NCw4ICs2NCw3IEBAIHN0cnVjdCBfV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUgewogCiAg
ICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSgpCiAgICAgewotICAgICAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xz
KGRhdGFNYW5hZ2VyKSkKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQo
KSwgbnVsbHB0cik7CisgICAgICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCku
c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CiAgICAgfQog
CiAgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuYWdlcjsKQEAgLTEzOSwxMSAr
MTM4LDkgQEAgV2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0Q29va2llTWFuYWdlckNyZWF0ZShX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW4KIHsKICAgICBXZWJLaXRDb29raWVNYW5h
Z2VyKiBtYW5hZ2VyID0gV0VCS0lUX0NPT0tJRV9NQU5BR0VSKGdfb2JqZWN0X25ldyhXRUJLSVRf
VFlQRV9DT09LSUVfTUFOQUdFUiwgbnVsbHB0cikpOwogICAgIG1hbmFnZXItPnByaXYtPmRhdGFN
YW5hZ2VyID0gZGF0YU1hbmFnZXI7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFu
YWdlcikpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdl
clByb3h5PigpLT5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Np
b25JRCgpLCBbbWFuYWdlcl0gewotICAgICAgICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBz
aWduYWxzW0NIQU5HRURdLCAwKTsKLSAgICAgICAgfSk7Ci0gICAgfQorICAgIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhtYW5hZ2Vy
LT5wcml2LT5zZXNzaW9uSUQoKSwgW21hbmFnZXJdIHsKKyAgICAgICAgZ19zaWduYWxfZW1pdCht
YW5hZ2VyLCBzaWduYWxzW0NIQU5HRURdLCAwKTsKKyAgICB9KTsKICAgICByZXR1cm4gbWFuYWdl
cjsKIH0KIApAQCAtMTczLDggKzE3MCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3Nl
dF9wZXJzaXN0ZW50X3N0b3JhZ2UoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwKICAgICBp
ZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAo
YXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9v
bHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3Vw
cGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlKHNlc3Npb25JRCwgU3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZSksIHRvU291cENvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlVHlwZShzdG9yYWdlKSk7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5
OjpzaW5nbGV0b24oKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmlu
Zzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUo
c3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE5Miw4ICsxODgsNyBAQCB2b2lkIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2Vy
LCBXZWJLaQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VS
KG1hbmFnZXIpKTsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkt
PnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRv
SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFn
ZXItPnByaXYtPnNlc3Npb25JRCgpLCB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwg
W10oKSB7IH0pOwogfQogCiAvKioKQEAgLTIyNCw3ICsyMTksNyBAQCB2b2lkIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2Vy
LCBHQ2FuYwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5z
dXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBv
bGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShX
ZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgeworICAgIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2Vy
LT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2ludCh0
YXNrLmdldCgpLCB0b1dlYktpdENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKICAgICB9KTsK
IH0KQEAgLTI2OSwxMSArMjY0LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nv
b2tpZShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBTb3VwQ29va2llKgogICAgIGdfcmV0
dXJuX2lmX2ZhaWwoY29va2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdS
ZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7
Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxp
dGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2Ug
YWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAg
ICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQ
cm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29s
c1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZXMobWFu
YWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tpZSkgfSwgW3Rh
c2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmds
ZXRvbigpLnNldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6
Q29va2llKGNvb2tpZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190
YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIw
LDExICszMTEsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJL
aXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2Zh
aWwodXJpKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25l
dyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBD
b29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ug
b24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0g
ZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRv
JiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMo
bWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxl
bWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBX
VEZNb3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgewor
ICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZ2V0Q29va2llcyhtYW5hZ2Vy
LT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpLCBb
dGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29r
aWVzKSB7CiAgICAgICAgIEdMaXN0KiBjb29raWVzTGlzdCA9IG51bGxwdHI7CiAgICAgICAgIGZv
ciAoYXV0byYgY29va2llIDogY29va2llcykKICAgICAgICAgICAgIGNvb2tpZXNMaXN0ID0gZ19s
aXN0X3ByZXBlbmQoY29va2llc0xpc3QsIGNvb2tpZS50b1NvdXBDb29raWUoKSk7CkBAIC0zNzgs
MTEgKzM2NSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUoV2Vi
S2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpCiAgICAgZ19yZXR1cm5faWZfZmFp
bChjb29raWUpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tf
bmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8v
IENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFz
ZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhl
bSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1
dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29s
cyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBw
bGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+ZGVsZXRlQ29va2llKG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCBXZWJDb3JlOjpDb29raWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3Zl
KHRhc2spXSgpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmRlbGV0
ZUNvb2tpZShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tp
ZSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9v
bGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKaW5kZXggZmIxMmIy
MTc3NzRmMzk3ZTU2YzdlZjM3ZDAzNDljZDVjMjBhNTQyYy4uYTIyMWJlN2QzNjZmOGYzZDM3NmYw
MWQ5OWI2ZTI3OTc2ZGY1MGRiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKQEAgLTQwMyw3ICs0MDMsNiBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogICAg
ICAgICBwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIgPSBhZG9wdEdSZWYod2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX25ldygibG9jYWwtc3RvcmFnZS1kaXJlY3RvcnkiLCBwcml2LT5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnkuZGF0YSgpLCBudWxscHRyKSk7CiAKICAgICBwcml2LT5wcm9jZXNzUG9v
bCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlvbik7Ci0gICAgcHJpdi0+cHJv
Y2Vzc1Bvb2wtPnNldFByaW1hcnlEYXRhU3RvcmUod2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0
RGF0YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkpOwogICAgIHByaXYtPnBy
b2Nlc3NQb29sLT5zZXRVc2VyTWVzc2FnZUhhbmRsZXIoW3dlYkNvbnRleHRdKFVzZXJNZXNzYWdl
JiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyTWVzc2FnZSYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikgewogICAgICAgICAvLyBTaW5rIHRoZSBmbG9hdGluZyByZWYuCiAgICAg
ICAgIEdSZWZQdHI8V2ViS2l0VXNlck1lc3NhZ2U+IHVzZXJNZXNzYWdlID0gd2Via2l0VXNlck1l
c3NhZ2VDcmVhdGUoV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRv
bWF0aW9uU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dl
YkF1dG9tYXRpb25TZXNzaW9uLmNwcAppbmRleCA0YWI0N2ZmZjU5MTFlZWMzN2U1NmJjNWJiYjMy
OWViYWVhN2QzODY1Li4zMDA2ZjRmYWU2YzQzYzI2YmY0MDgyMmI2ZGU4NjhlZjJlMDJjZmJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRp
b25TZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dl
YkF1dG9tYXRpb25TZXNzaW9uLmNwcApAQCAtMTM5Miw4ICsxMzkyLDggQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb24KIAogICAgIGNvb2tpZS5odHRwT25seSA9ICpodHRwT25seTsKIAotICAgIFdl
YkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldENv
b2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBb
Y2FsbGJhY2tdKCkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlciA9
IHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIo
KTsKKyAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgp
LnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBbY2FsbGJhY2tdKCkgewogICAgICAgICBjYWxsYmFj
ay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9KTsKIH0KQEAgLTE0MDksOCArMTQwOSw4IEBAIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246
OmRlbGV0ZUFsbENvb2tpZXMoCiAKICAgICBTdHJpbmcgaG9zdCA9IGFjdGl2ZVVSTC5ob3N0KCku
dG9TdHJpbmcoKTsKIAotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9
IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAg
IGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURh
dGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZO
ZWVkZWQoaG9zdCkgfSk7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2Vy
ID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdl
cigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhwYWdlLT53
ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQ
cmVmaXhJZk5lZWRlZChob3N0KSB9KTsKIAogICAgIHJldHVybiB7IH07CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oCmluZGV4IDQxYzBhMGZi
ZjUwNmVmYTE0MDhiY2VmOWFmOGE5MGI4NWExYWQwOGEuLjRmMzk4YjUzMGY2MDg1NzVjOTY3Yjgz
Yzc0ZmEyZjQzMjhmNmNlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1
eGlsaWFyeVByb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGls
aWFyeVByb2Nlc3NQcm94eS5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5BdXhpbGlhcnlQcm9jZXNzUHJveHkoKTsKIAogICAgIHZvaWQgY29ubmVjdCgpOwotICAgIHZv
aWQgdGVybWluYXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZSgpOwogCiAgICAgdmly
dHVhbCBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50LmgKaW5kZXggZGJlNDRmOTU5NDEwNTExMjE1MTI4ZDI5ZDIxNGVlZTA3
NGFhZjg0Yy4uM2M0Mjg3MmUxNWUwM2Y1YWU2MTMzYmM1YTkyYWMyYWM4MTgzZGY0MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgKQEAgLTQwLDEyICs0MCwxNSBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk7CiAK
Ky8vIEZJWE1FOiBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgaXMgdW5uZWVkZWQgbm93Lgor
Ly8gVGhpcyBpcyBqdXN0IGEgbGVmdG92ZXIgb24gQ29jb2EgcGxhdGZvcm1zIHdlIGFyZSB0cnlp
bmcgdG8gbW92ZSBhd2F5IGZyb20gYW5kIGRvZXMgbm90IG5lZWQgYW4gQVBJIGFic3RyYWN0aW9u
LgogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IGZpbmFsIDogcHVibGlj
IEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IHsKLXByaXZhdGU6CitwdWJsaWM6Cisg
ICAgc3RhdGljIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYgc2luZ2xldG9uKCk7
CiAgICAgdm9pZCBzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkm
LCBMZWdhY3lDdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
KSBmaW5hbDsKICAgICB2b2lkIHN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCkgZmluYWw7CiAgICAgdm9pZCBpbnZhbGlk
YXRlKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5JikgZmluYWw7Ci0KK3ByaXZhdGU6
CiAgICAgSGFzaE1hcDxMZWdhY3lDdXN0b21Qcm90b2NvbElELCBSZXRhaW5QdHI8V0tDdXN0b21Q
cm90b2NvbExvYWRlcj4+IG1fbG9hZGVyTWFwOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50Lm1tCmluZGV4IDE1MTIyOTA0NWYxM2U5Y2RkYmUwOTFlNjI3YmZhMWZlMjA2ZGUy
ODkuLjE0ZDBiNmJkMWQ2ZTU1NTllYzdlNmIxYTJmYmE4MzFiYjM3YWI3YmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQubW0KQEAgLTEzOSw2ICsxMzksMTIgQEAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK0xlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCYgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OjpzaW5n
bGV0b24oKQoreworICAgIE5ldmVyRGVzdHJveWVkPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudD4gY2xpZW50OworICAgIHJldHVybiBjbGllbnQ7Cit9CisKIHZvaWQgTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OjpzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHkmIG1hbmFnZXIsIFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBj
dXN0b21Qcm90b2NvbElELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGNvcmVSZXF1ZXN0KQogewog
ICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IGNvcmVSZXF1ZXN0Lm5zVVJMUmVxdWVzdChIVFRQ
Qm9keVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQppbmRleCA3NmQ3
YTY0MDQxYTI5MWQ1ZjI5NzM1MTc2ZTMxZWE3MGY1ZWQ1NTZjLi4xMzY3MGUyZDgwYjAxODQ3MDM1
YzE5ZGY4OTIxMWZjNzU1NTZjNjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KQEAgLTEzNCw4ICsxMzQsOSBAQCBzdGF0
aWMgdm9pZCByZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCkKIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKQogewotICAgIGlmIChtX25ldHdv
cmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZXRQcm9jZXNzU3VwcHJlc3Np
b25FbmFibGVkKHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSk7CisgICAgV2Vic2l0ZURhdGFT
dG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW2VuYWJsZWQgPSBwcm9jZXNzU3VwcHJlc3Np
b25FbmFibGVkKCldIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0
YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChlbmFi
bGVkKTsKKyAgICB9KTsKIAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIGlm
ICghbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCkpCkBA
IC0xNjYsOCArMTY3LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXpl
KCkKICAgICBpZiAoIVtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xG
b3JLZXk6QCJXZWJLaXRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciJdKQogICAgICAgICBp
bnN0YWxsTWVtb3J5UHJlc3N1cmVIYW5kbGVyKCk7CiAKLSAgICBzZXRMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZTxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ+KCkpOwotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NB
VEFMWVNUKQogICAgIGlmICghX01HQ2FjaGVWYWxpZCgpKSB7CiAgICAgICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVG
QVVMVCwgMCksIF57CkBAIC00OTMsMjIgKzQ5Miw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBs
YXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
CiAKICAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRh
cmRVc2VyRGVmYXVsdHNdOwogCi0gICAgewotICAgICAgICBib29sIGlzU2FmYXJpID0gZmFsc2U7
Ci0gICAgICAgIGJvb2wgaXNNaW5pQnJvd3NlciA9IGZhbHNlOwotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTW9i
aWxlU2FmYXJpKCk7Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpJT1NBcHBsaWNh
dGlvbjo6aXNNaW5pQnJvd3NlcigpOwotI2VsaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBpc1Nh
ZmFyaSA9IFdlYkNvcmU6Ok1hY0FwcGxpY2F0aW9uOjppc1NhZmFyaSgpOwotICAgICAgICBpc01p
bmlCcm93c2VyID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzTWluaUJyb3dzZXIoKTsKLSNl
bmRpZgotICAgICAgICBpZiAoaXNTYWZhcmkgfHwgaXNNaW5pQnJvd3NlcikgewotICAgICAgICAg
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMuaHR0cFByb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihO
U1N0cmluZyAqKVdlYktpdDJIVFRQUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuaHR0cHNQcm94eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJp
bmcgKilXZWJLaXQySFRUUFNQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
ICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0ID0gYWRvcHRDRihfQ0ZOZXR3b3JrQ29w
eUFUU0NvbnRleHQoKSk7CiAKICAgICBwYXJhbWV0ZXJzLnNob3VsZFN1cHByZXNzTWVtb3J5UHJl
c3N1cmVIYW5kbGVyID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0U3VwcHJlc3NNZW1vcnlQ
cmVzc3VyZUhhbmRsZXJEZWZhdWx0c0tleV07CkBAIC01MjIsMTIgKzUwNSw4IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhCiAgICAgTlNOdW1iZXIgKmRhdGFiYXNlRW5hYmxlZFZhbHVlID0gW2Rl
ZmF1bHRzIG9iamVjdEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkludGVybmFs
RGVidWclQCIsIFdlYlByZWZlcmVuY2VzS2V5Ojppc0lUUERhdGFiYXNlRW5hYmxlZEtleSgpLmNy
ZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKICAgICBpZiAoZGF0YWJhc2VFbmFibGVkVmFsdWUpCiAg
ICAgICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBkYXRhYmFzZUVuYWJs
ZWRWYWx1ZS5ib29sVmFsdWU7Ci0gICAgZWxzZQotICAgICAgICBwYXJhbWV0ZXJzLnNob3VsZEVu
YWJsZUlUUERhdGFiYXNlID0gbV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLmlzSVRQ
RGF0YWJhc2VFbmFibGVkKCk7CiAKICAgICBwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1
dGlvbkRlYnVnTW9kZSA9IFtkZWZhdWx0cyBib29sRm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAiRXhwZXJpbWVudGFsJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6YWRDbGlja0F0dHJp
YnV0aW9uRGVidWdNb2RlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKLQot
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmFwcEhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbiA9
IGhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbigpOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUludmFsaWRhdGVDb250ZXh0KCkKQEAgLTYwNiwxMSAr
NTg1LDYgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgp
IGNvbnN0CiAgICAgcmV0dXJuICFtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIudmFsdWUoKSAm
JiAhbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCk7CiB9
CiAKLWJvb2wgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JU
ZXN0aW5nKGNvbnN0IFN0cmluZyYgZW50aXRsZW1lbnQpCi17Ci0gICAgcmV0dXJuIFdURjo6aGFz
RW50aXRsZW1lbnQoZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCktPnhwY0Nvbm5l
Y3Rpb24oKSwgZW50aXRsZW1lbnQudXRmOCgpLmRhdGEoKSk7Ci19Ci0KICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiBmbG9hdCBXZWJQcm9jZXNzUG9v
bDo6ZGlzcGxheUJyaWdodG5lc3MoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCmluZGV4IGM1ZGU0ZTdkMGY1OTE5NGY0M2Ew
MjNiMDg5ZTM3MmM1OGNmOGVlMDYuLmY3Y2ZmODUyZjBiYTZkMDE1NTExNjVkZDhhOWY3ZDU3NjNi
MDA3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRQcm94eS5jcHAKQEAgLTc1LDggKzc1LDggQEAgdm9pZCBEb3dubG9hZFByb3h5OjpjYW5j
ZWwoKQogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2FkSUQpLCAwKTsKKyAgICBpZiAo
bV9kYXRhU3RvcmUpCisgICAgICAgIG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2FkSUQpLCAw
KTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5OjppbnZhbGlkYXRlKCkKQEAgLTEwMywxNSArMTAz
LDEzIEBAIFdlYlBhZ2VQcm94eSogRG93bmxvYWRQcm94eTo6b3JpZ2luYXRpbmdQYWdlKCkgY29u
c3QKICNpZiBQTEFURk9STShDT0NPQSkKIHZvaWQgRG93bmxvYWRQcm94eTo6cHVibGlzaFByb2dy
ZXNzKGNvbnN0IFVSTCYgVVJMKQogewotICAgIGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICBpZiAo
IW1fZGF0YVN0b3JlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7Ci0gICAgICAgIGJvb2wgY3JlYXRlZFNhbmRib3hF
eHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1Q
YXRoKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgaGFuZGxlKTsKLSAgICAg
ICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiwgY3JlYXRlZFNhbmRib3hF
eHRlbnNpb24pOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKG1fZG93bmxvYWRJRCwgVVJMLCBoYW5k
bGUpLCAwKTsKLSAgICB9CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZTsKKyAg
ICBib29sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlKFVSTC5maWxlU3lzdGVtUGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFk
V3JpdGUsIGhhbmRsZSk7CisgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkU2FuZGJveEV4dGVuc2lv
biwgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24pOworICAgIG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9n
cmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFuZGxlKSwgMCk7CiB9CiAjZW5kaWYgLy8gUExBVEZP
Uk0oQ09DT0EpCiAKQEAgLTEzMSwxMSArMTI5LDEwIEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlk
U3RhcnQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dl
CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIHVpbnQ2
NF90IGNoYWxsZW5nZUlEKQogewotICAgIGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICBpZiAoIW1f
cHJvY2Vzc1Bvb2wgfHwgIW1fZGF0YVN0b3JlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRv
IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVBy
b3h5OjpjcmVhdGUoV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlE
LCBtYWtlUmVmKCptX3Byb2Nlc3NQb29sLT5uZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKSks
IG51bGxwdHIpOwotCisgICAgYXV0byBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eTo6Y3JlYXRlKFdURk1vdmUoYXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpLCBjaGFsbGVuZ2VJRCwgbWFrZVJlZigqbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9j
ZXNzKCkuY29ubmVjdGlvbigpKSwgbnVsbHB0cik7CiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxv
YWRDbGllbnQoKS5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKnRoaXMsIGF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuZ2V0KCkpOwogfQogCkBAIC0xNDYsMTUgKzE0MywxMCBA
QCB2b2lkIERvd25sb2FkUHJveHk6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiBw
cm9wb3NlZFJlcXVlc3QsIGNvbnN0IFJlcwogCiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRD
bGllbnQoKS53aWxsU2VuZFJlcXVlc3QoKnRoaXMsIFdURk1vdmUocHJvcG9zZWRSZXF1ZXN0KSwg
cmVkaXJlY3RSZXNwb25zZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0o
UmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVxdWVzdCkgewogICAgICAgICBtX3JlZGlyZWN0Q2hhaW4u
YXBwZW5kKG5ld1JlcXVlc3QudXJsKCkpOwotCi0gICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+
bV9wcm9jZXNzUG9vbCkKKyAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX2RhdGFTdG9yZSkK
ICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBhdXRvKiBuZXR3b3JrUHJvY2Vzc1Byb3h5
ID0gcHJvdGVjdGVkVGhpcy0+bV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKTsKLSAgICAg
ICAgaWYgKCFuZXR3b3JrUHJvY2Vzc1Byb3h5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIG5ldHdvcmtQcm9jZXNzUHJveHktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpD
b250aW51ZVdpbGxTZW5kUmVxdWVzdChwcm90ZWN0ZWRUaGlzLT5tX2Rvd25sb2FkSUQsIG5ld1Jl
cXVlc3QpLCAwKTsKKyAgICAgICAgYXV0byYgbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb3RlY3Rl
ZFRoaXMtPm1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpOworICAgICAgICBuZXR3b3JrUHJv
Y2Vzc1Byb3h5LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZVdpbGxTZW5k
UmVxdWVzdChwcm90ZWN0ZWRUaGlzLT5tX2Rvd25sb2FkSUQsIG5ld1JlcXVlc3QpLCAwKTsKICAg
ICB9KTsKIH0KIApAQCAtMTc5LDE2ICsxNzEsMTQgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkZWNp
ZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZUFzeW5jKERvd25sb2FkSUQgZG93bmwK
ICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX3By
b2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3Rl
ZEZpbGVuYW1lKCp0aGlzLCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRG
aWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGRvd25sb2FkSUQgPSBkb3dubG9hZElEXSAoQWxsb3dPdmVyd3JpdGUgYWxsb3dP
dmVyd3JpdGUsIFN0cmluZyBkZXN0aW5hdGlvbikgeworICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25s
b2FkQ2xpZW50KCkuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMs
IFJlc291cmNlUmVzcG9uc2VCYXNlOjpzYW5pdGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3Rl
ZEZpbGVuYW1lKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxv
YWRJRF0gKEFsbG93T3ZlcndyaXRlIGFsbG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24p
IHsKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5k
bGU7CiAgICAgICAgIGlmICghZGVzdGluYXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoZGVzdGluYXRpb24sIFNhbmRib3hFeHRlbnNpb246
OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICAgICAgaWYg
KCFtX3Byb2Nlc3NQb29sKQorICAgICAgICBpZiAoIW1fZGF0YVN0b3JlKQogICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVz
dGluYXRpb24oZG93bmxvYWRJRCwgZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUs
IGFsbG93T3ZlcndyaXRlID09IEFsbG93T3ZlcndyaXRlOjpZZXMpLCAwKTsKKyAgICAgICAgbV9k
YXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oZG93bmxvYWRJRCwgZGVz
dGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGFsbG93T3ZlcndyaXRlID09IEFsbG93
T3ZlcndyaXRlOjpZZXMpLCAwKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCmluZGV4IDc2YTA3
MTU3YjU5MWFhY2U1MGYxNWQxNTI1ZGJjZmI4YzZhNGJiYzguLmQ3NGE4ZmE2YzY0Yzg4NjM1Zjll
Yjc1Y2E3M2U3MGZkOTQ2Y2EwMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBEb3dubG9hZFByb3h5TWFwOjpEb3dubG9hZFByb3h5TWFwKE5l
dHdvcmtQcm9jZXNzUHJveHkmIHByb2Nlc3MpCi0gICAgOiBtX3Byb2Nlc3MobWFrZVdlYWtQdHIo
cHJvY2VzcykpCisgICAgOiBtX3Byb2Nlc3MocHJvY2VzcykKICNpZiBQTEFURk9STShDT0NPQSkK
ICAgICAsIG1fc2hvdWxkVGFrZUFzc2VydGlvbihXVEY6OnByb2Nlc3NIYXNFbnRpdGxlbWVudCgi
Y29tLmFwcGxlLm11bHRpdGFza2luZy5zeXN0ZW1hcHBhc3NlcnRpb25zIikpCiAjZW5kaWYKQEAg
LTcwLDE0ICs3MCwxMiBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OnBsYXRmb3JtRGVzdHJveSgp
CiAKIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQo
KQogewotICAgIGlmIChtX3Byb2Nlc3MpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCksIDApOwor
ICAgIG1fcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25E
aWRFbnRlckJhY2tncm91bmQoKSwgMCk7CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6YXBw
bGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkKIHsKLSAgICBpZiAobV9wcm9jZXNzKQotICAg
ICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlv
bldpbGxFbnRlckZvcmVncm91bmQoKSwgMCk7CisgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKSwgMCk7CiB9
CiAKIERvd25sb2FkUHJveHkmIERvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHko
V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2ws
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBG
cmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQpA
QCAtOTIsMTMgKzkwLDEyIEBAIERvd25sb2FkUHJveHkmIERvd25sb2FkUHJveHlNYXA6OmNyZWF0
ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlCiAgICAgICAgIG1fZG93
bmxvYWRVSUFzc2VydGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fzc2VydGlvbj4oZ2V0Q3VycmVu
dFByb2Nlc3NJRCgpLCAiV2ViS2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6
OlVuYm91bmRlZE5ldHdvcmtpbmcpOwogCiAgICAgICAgIEFTU0VSVCghbV9kb3dubG9hZE5ldHdv
cmtpbmdBc3NlcnRpb24pOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3Byb2Nlc3MpOwotICAg
ICAgICBtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fz
c2VydGlvbj4obV9wcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpLCAiV2ViS2l0IGRvd25sb2Fk
cyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVuYm91bmRlZE5ldHdvcmtpbmcpOworICAgICAg
ICBtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fzc2Vy
dGlvbj4obV9wcm9jZXNzLnByb2Nlc3NJZGVudGlmaWVyKCksICJXZWJLaXQgZG93bmxvYWRzIl9z
LCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CiAKICAgICAgICAg
UkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICJVSVByb2Nlc3MgdG9vayAnV2ViS2l0IGRv
d25sb2FkcycgYXNzZXJ0aW9ucyBmb3IgVUlQcm9jZXNzIGFuZCBOZXR3b3JrUHJvY2VzcyIpOwog
ICAgIH0KIAotICAgIG1fcHJvY2Vzcy0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3du
bG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkUHJveHktPmRvd25sb2Fk
SUQoKS5kb3dubG9hZElEKCksIGRvd25sb2FkUHJveHkuZ2V0KCkpOworICAgIG1fcHJvY2Vzcy5h
ZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSwgZG93bmxv
YWRQcm94eS5nZXQoKSk7CiAKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KQEAgLTEwOSwx
MiArMTA2LDkgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKERvd25s
b2FkUHJveHkmIGRvd25sb2FkUHJveHkpCiAKICAgICBSRUxFQVNFX0xPRyhMb2FkaW5nLCAiUmVt
b3ZpbmcgZG93bmxvYWQgJSIgUFJJdTY0ICIgZnJvbSBVSVByb2Nlc3MgRG93bmxvYWRQcm94eU1h
cCIsIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKIAotICAgIC8vIFRoZSBEb3dubG9hZFByb3h5
IG1heSBiZSBob2xkaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgcHJvY2VzcyBwb29sLgot
ICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmUHRyKG1fcHJvY2Vzcy0+cHJv
Y2Vzc1Bvb2woKSk7Ci0KICAgICBBU1NFUlQobV9kb3dubG9hZHMuY29udGFpbnMoZG93bmxvYWRJ
RCkpOwogCi0gICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRv
d25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRJRC5kb3dubG9hZElE
KCkpOworICAgIG1fcHJvY2Vzcy5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25s
b2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkp
OwogICAgIGRvd25sb2FkUHJveHkuaW52YWxpZGF0ZSgpOwogICAgIG1fZG93bmxvYWRzLnJlbW92
ZShkb3dubG9hZElEKTsKIApAQCAtMTMzLDE1ICsxMjcsMTMgQEAgdm9pZCBEb3dubG9hZFByb3h5
TWFwOjppbnZhbGlkYXRlKCkKICAgICBmb3IgKGNvbnN0IGF1dG8mIGRvd25sb2FkIDogbV9kb3du
bG9hZHMudmFsdWVzKCkpIHsKICAgICAgICAgZG93bmxvYWQtPnByb2Nlc3NEaWRDbG9zZSgpOwog
ICAgICAgICBkb3dubG9hZC0+aW52YWxpZGF0ZSgpOwotICAgICAgICBtX3Byb2Nlc3MtPnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7CisgICAgICAgIG1f
cHJvY2Vzcy5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWQtPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkp
OwogICAgIH0KIAogICAgIG1fZG93bmxvYWRzLmNsZWFyKCk7CiAgICAgbV9kb3dubG9hZFVJQXNz
ZXJ0aW9uID0gbnVsbHB0cjsKICAgICBtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbiA9IG51
bGxwdHI7CiAgICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICJVSVByb2Nlc3MgRG93
bmxvYWRQcm94eU1hcCBpbnZhbGlkYXRlZCAtIFJlbGVhc2VkICdXZWJLaXQgZG93bmxvYWRzJyBh
c3NlcnRpb25zIGZvciBVSVByb2Nlc3MgYW5kIE5ldHdvcmtQcm9jZXNzIik7Ci0KLSAgICBtX3By
b2Nlc3MgPSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCmluZGV4
IDNiZTIwNzlhMGYyYzRiNTM3MDYyY2UxMzAwZTFjZDVkYTQ0NGZmYmUuLjRmYTAwMWJkN2ZhZTFj
ZWQwMjRkMmI5MWYyMDE3MGZmOTk0NTI4YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaApAQCAtNzEsNyArNzEsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1DcmVhdGUoKTsKICAgICB2b2lkIHBsYXRmb3JtRGVz
dHJveSgpOwogCi0gICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3M7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbV9wcm9jZXNzOwogICAgIEhhc2hNYXA8RG93bmxvYWRJ
RCwgUmVmUHRyPERvd25sb2FkUHJveHk+PiBtX2Rvd25sb2FkczsKIAogICAgIGJvb2wgbV9zaG91
bGRUYWtlQXNzZXJ0aW9uIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9j
b2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAppbmRleCA4YzIzYmJlOGMw
NmExNTk5Y2I5YjkxNmEwYjMyYWZiMzc3ODNmMzA1Li4yMDc0YjZjNjNhMjAyZjZiNzY0N2FjNmFj
OGQ1OWU5ZmRiNTkwN2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCkBAIC00NCwxNyArNDQsMjggQEAgTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6On5MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eSgpCiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0
TG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNz
UHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdGFydExv
YWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3QpOworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDo6c2luZ2xldG9uKCku
c3RhcnRMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGN1c3RvbVByb3RvY29sSUQpOworICAgIFVOVVNFRF9QQVJBTShyZXF1
ZXN0KTsKKyNlbmRpZgogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5
OjpzdG9wTG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1c3RvbVByb3RvY29sSUQpCiB7
Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50KCkuc3RvcExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOworI2lm
IFBMQVRGT1JNKENPQ09BKQorICAgIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDo6
c2luZ2xldG9uKCkuc3RvcExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oY3VzdG9tUHJvdG9jb2xJRCk7CisjZW5kaWYKIH0KIAogdm9pZCBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgbV9u
ZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50KCkuaW52YWxpZGF0ZSgqdGhpcyk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OjpzaW5nbGV0b24oKS5pbnZhbGlkYXRlKCp0aGlz
KTsKKyNlbmRpZgogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3
YXNSZWRpcmVjdGVkVG9SZXF1ZXN0KExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9j
b2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5k
ZXggYzFmNDcwOGI4MWNmYTUzYWIxMjJjMjk0NDY3NWU3ODI1MTY3MTIxZi4uNDVkOTY2YzNlNGIw
YTQwZmQ2Nzg5ODRmOThiOThmMjU3OTFmMWM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAj
ZW5kaWYKKyNpbmNsdWRlICJMZWdhY3lHbG9iYWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlck1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mby5oIgpAQCAtNDgsNiArNDks
NyBAQAogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUg
IlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRSdWxl
TGlzdC5oIgorI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldl
YlBhZ2VNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldl
YlByb2Nlc3NNZXNzYWdlcy5oIgpAQCAtNjAsNiArNjIsNyBAQAogI2luY2x1ZGUgIldlYnNpdGVE
YXRhU3RvcmVDbGllbnQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJh
Y2tBZ2dyZWdhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKICNp
ZiBFTkFCTEUoU0VDX0lURU1fU0hJTSkKQEAgLTcwLDIwICs3MywxMDAgQEAKICNpbmNsdWRlIDx3
dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisj
aW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwog
I2RlZmluZSBNRVNTQUdFX0NIRUNLKGFzc2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2Vy
dGlvbiwgY29ubmVjdGlvbigpKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdl
YlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShw
cm9jZXNzUG9vbC5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJv
Y2Vzc1Bvb2wocHJvY2Vzc1Bvb2wpCitzdGF0aWMgSGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5
Kj4mIG5ldHdvcmtQcm9jZXNzZXNTZXQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxOZXR3b3JrUHJv
Y2Vzc1Byb3h5Kj4+IHNldDsKKyAgICByZXR1cm4gc2V0OworfQorCitWZWN0b3I8UmVmPE5ldHdv
cmtQcm9jZXNzUHJveHk+PiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2Vz
KCkKK3sKKyAgICBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXM7Cisg
ICAgcHJvY2Vzc2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobmV0d29ya1Byb2Nlc3Nlc1NldCgp
LnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA6IG5ldHdvcmtQcm9jZXNz
ZXNTZXQoKSkKKyAgICAgICAgcHJvY2Vzc2VzLnVuY2hlY2tlZEFwcGVuZCgqbmV0d29ya1Byb2Nl
c3MpOworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9CisKKwordm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5Ojp0ZXJtaW5hdGUoKQoreworICAgIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6dGVybWluYXRl
KCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVy
c1RvTmV3UHJvY2VzcygpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcg
V2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgorICAgIC8vIFdlIHNob3VsZCByZW1vdmUg
dGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJ
cy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2
LgorICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsKKyAgICAgICAgY2FsbE9uTWFpblJ1bkxv
b3BBbmRXYWl0KFt0aGlzXSB7CisgICAgICAgICAgICBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9O
ZXdQcm9jZXNzKCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVn
aXN0ZXJlZEFzU2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5n
bGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOworICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlU
b1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0
ZXJBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVy
bFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0
aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOworICAgIHBhcmFt
ZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2Fj
eUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3Mo
KSk7CisgICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNp
bmdsZXRvbigpLmNhY2hlTW9kZWwoKTsKKyAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IFdlYlByb2Nl
c3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKKyAgICAgICAg
cGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQo
c2NoZW1lKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChTdHJpbmcgY29va2ll
U3RvcmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5
KCk7ICFjb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VE
aXJlY3RvcnksIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7CisgICAgaWYgKFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNz
UG9vbDo6bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOyAhY29udGFpbmVyQ2FjaGVzRGlyZWN0
b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9y
UmVhZFdyaXRlRGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5j
b250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcg
cGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRsZURpcmVj
dG9yeSgpOyAhcGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4
dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyNlbmRpZgorICAgIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUlu
aXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKKyAgICBwYXJhbWV0ZXJzLmRhdGFT
dG9yZVBhcmFtZXRlcnMgPSBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzRnJvbUFsbFN0b3Jl
cygpOworICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MocGFyYW1ldGVycyksIDApOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9v
bEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpCit7CisgICAgZm9yIChhdXRvKiBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBp
ZiAocHJvY2Vzc1Bvb2wtPmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGlj
IGJvb2wgYW55UHJvY2Vzc1Bvb2xTaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkKK3sK
KyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQ
b29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkVGFrZVVJQmFja2dyb3Vu
ZEFzc2VydGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eSgp
CisgICAgOiBBdXhpbGlhcnlQcm9jZXNzUHJveHkoYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRC
YWNrZ3JvdW5kUHJpb3JpdHkoKSkKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9N
QU5BR0VSKQogICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgqdGhpcykKICNlbmRp
ZgotICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNob3VsZFRha2VVSUJhY2tn
cm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBhbnlQcm9jZXNzUG9v
bFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fY29va2llTWFuYWdl
cihXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcykpCiB7CiAgICAgY29ubmVjdCgp
OworICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICBuZXR3b3Jr
UHJvY2Vzc2VzU2V0KCkuYWRkKHRoaXMpOwogfQogCiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0
d29ya1Byb2Nlc3NQcm94eSgpCkBAIC05OCw2ICsxODEsNyBAQCBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgpCiAKICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQog
ICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAtPmludmFsaWRhdGUoKTsKKyAgICBuZXR3b3JrUHJv
Y2Vzc2VzU2V0KCkucmVtb3ZlKHRoaXMpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuY2hP
cHRpb25zKQpAQCAtMTA1LDE1ICsxODksMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpn
ZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1bmMKICAg
ICBsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID0gUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlw
ZTo6TmV0d29yazsKICAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMo
bGF1bmNoT3B0aW9ucyk7CiAKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5zaG91bGRNYWtlTmV4dE5l
dHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkgewotICAgICAgICBwcm9jZXNzUG9v
bCgpLnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhm
YWxzZSk7Ci0gICAgICAgIGxhdW5jaE9wdGlvbnMuc2hvdWxkTWFrZVByb2Nlc3NMYXVuY2hGYWls
Rm9yVGVzdGluZyA9IHRydWU7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nl
c3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNo
b3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpKSB7CisgICAg
ICAgICAgICBwcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5j
aEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKKyAgICAgICAgICAgIGxhdW5jaE9wdGlvbnMuc2hvdWxk
TWFrZVByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7CisgICAgICAgIH0KICAgICB9
Ci0KLSNpZiBQTEFURk9STShQTEFZU1RBVElPTikKLSAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NQ
YXRoID0gbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc1BhdGgoKTsKLSAgICBsYXVuY2hPcHRp
b25zLnVzZXJJZCA9IG1fcHJvY2Vzc1Bvb2wudXNlcklkKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uKQpAQCAtMTY2LDEyICsyNDcsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKICAgICB9CiB9CiAK
LURvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHko
V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291
cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkq
IG9yaWdpbmF0aW5nUGFnZSkKK0Rvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNy
ZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQcm9jZXNz
UG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0
LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRp
bmdQYWdlKQogewogICAgIGlmICghbV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25s
b2FkUHJveHlNYXAgPSBtYWtlVW5pcXVlPERvd25sb2FkUHJveHlNYXA+KCp0aGlzKTsKIAotICAg
IHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3Jl
LCBtX3Byb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQ
YWdlKTsKKyAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9hZFByb3h5
KGRhdGFTdG9yZSwgcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBvcmln
aW5hdGluZ1BhZ2UpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZldGNoV2Vic2l0
ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiBkYXRhVHlwZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlv
bnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKFdlYnNpdGVEYXRhKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTIzNyw4ICszMTgsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdv
cmtQcm9jZXNzQ3Jhc2hlZCgpCiB7CiAgICAgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCi0gICAg
Ly8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRoaXMg
bmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1c2UgdXMgdG8gYmUgZGVsZXRlZC4K
LSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CisgICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkK
KyAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y2xlYXJDYWxsYmFja1N0YXRlcygpCkBAIC0yNTgs
OSArMzM5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGUKICAgICBpZiAoZGlzcGF0Y2hNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9w
cm9jZXNzUG9vbC5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCi0gICAgICAg
IHJldHVybjsKLQogICAgIGRpZFJlY2VpdmVOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZShjb25u
ZWN0aW9uLCBkZWNvZGVyKTsKIH0KIApAQCAtMjc0LDggKzM1Miw2IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgSVBDCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkQ2xvc2UoSVBDOjpDb25u
ZWN0aW9uJikKIHsKLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZihtX3By
b2Nlc3NQb29sKTsKLQogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93
bmxvYWRQcm94eU1hcC0+aW52YWxpZGF0ZSgpOwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BS
T1RPQ09MX01BTkFHRVIpCkBAIC0zMzEsMTEgKzQwNyw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklEIHNl
c3NpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXRvcE9yaWdpbiB8fCAhbV9w
cm9jZXNzUG9vbC5pc1NlcnZpY2VXb3JrZXJQYWdlSUQocGFnZUlEKSkgewotICAgICAgICBwcm9j
ZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uoc2Vzc2lvbklELCBXVEZNb3ZlKGF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBXZWJQYWdlUHJv
eHk6OmZvck1vc3RWaXNpYmxlV2ViUGFnZUlmQW55KHNlc3Npb25JRCwgKnRvcE9yaWdpbiwgW3Ro
aXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRCwgYXV0aGVudGljYXRp
b25DaGFsbGVuZ2UgPSBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgbmVnb3RpYXRl
ZExlZ2FjeVRMU10oYXV0byogcGFnZSkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMp
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zOTIsMTEgKzQ2Myw2IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hlciogbGF1bmNoZXIs
IElQQzo6Q29uCiAgICAgICAgIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wu
cHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKQotICAgICAgICBzZXRQcm9jZXNzU3VwcHJlc3Np
b25FbmFibGVkKHRydWUpOwotI2VuZGlmCiAgICAgCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ICAgICBpZiAoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uID0gdGhpcy0+Y29ubmVjdGlvbigp
LT54cGNDb25uZWN0aW9uKCkpCkBAIC0xMjA1LDcgKzEyNzEsOCBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcoUEFMOjpTZXNzaW9u
SUQgc2VzcwogfQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJ
bnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMp
CiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihXVEZN
b3ZlKGRvbWFpbnMpKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bv
b2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2V0RG9tYWluc1dp
dGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4geyBk
b21haW5zIH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
CiAKQEAgLTEyNTIsMTYgKzEzMTksMTYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpmbHVz
aENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgQ29tcGxldGkKICAgICBz
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpGbHVzaENvb2tpZXMo
c2Vzc2lvbklEKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCi12b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYgc3RvcmUp
Cit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYg
c3RvcmUpCiB7Ci0gICAgbV9zZXNzaW9uSURzLmFkZChzdG9yZS0+c2Vzc2lvbklEKCkpOworICAg
IG1fc2Vzc2lvbklEcy5hZGQoc3RvcmUuc2Vzc2lvbklEKCkpOwogCiAgICAgaWYgKGNhblNlbmRN
ZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJz
aXRlRGF0YVN0b3JlIHsgc3RvcmUtPnBhcmFtZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRvIHNlc3Np
b25JRCA9IHN0b3JlLT5zZXNzaW9uSUQoKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCk7
CisgICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAoIXNlc3Np
b25JRC5pc0VwaGVtZXJhbCgpKSB7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAg
ICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnkoKSk7CisgICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShz
dG9yZS5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgogICAgIH0K
IH0KQEAgLTEyODEsMTYgKzEzNDgsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92
ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiBXZWJzaXRlRGF0YVN0b3JlKiBO
ZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJzaXRlRGF0
YVN0b3JlID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAgICAgICBp
ZiAod2Vic2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBz
ZXNzaW9uSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9y
ZSgpLnB0cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdO
b25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFdl
YnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7
CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3JhZ2VQYXJh
bWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEzMzcsNyArMTM5NSw3IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5KFdlYlVzZXJDb250ZW50CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0
d29ya1Byb2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC5lc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29u
bmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4p
LCBzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBXZWJQcm9jZXNz
UG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0
aGlzLCBSZWdpc3RyYWJsZURvbWFpbiB7cmVnaXN0cmFibGVEb21haW59LCBzZXNzaW9uSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojp3b3JrZXJDb250ZXh0Q29ubmVjdGlvbk5vTG9uZ2VyTmVlZGVkKFdlYkNvcmU6OlByb2Nlc3NJ
ZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC0xNTAwLDE2ICsxNTU4LDM0IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6cHJlY29ubmVjdFRvKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2Vi
UGFnZVByb3h5SWRlCiAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWNvbm5l
Y3RUbyhzZXNzaW9uSUQsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQsIHVybCwgdXNlckFnZW50
LCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiks
IDApOwogfQogCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9j
ZXNzZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6
YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNGb3JlZ3Jv
dW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91
bmRXZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9j
ZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5o
YXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnVw
ZGF0ZVByb2Nlc3NBc3NlcnRpb24oKQogewotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0ZvcmVn
cm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91
bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFs
aWRGb3JlZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAg
ICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmZvcmVncm91
bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgZm9yZWdyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAg
ICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlv
blRvRm9yZWdyb3VuZCgpLCAwKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAg
IGlmIChhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAg
ICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRCYWNrZ3JvdW5kQWN0aXZpdHkobV9hY3Rp
dml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlBy
b2Nlc3NlcyA9IHRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3Ig
YmFja2dyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvQmFja2dyb3VuZCgpLCAwKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmgKaW5kZXggYTBiNGMxZDg5MzhlMjA1ZWMzNjFkZTVjMTA4MjVkMTgyNzc2NTNiNC4uYTliODQx
MjkxOGZiYzE5ZjU2YWE5ZjUwNjM3ZDdlODYwYTExMWU5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTUyLDYg
KzUyLDEwIEBAIG5hbWVzcGFjZSBJUEMgewogY2xhc3MgRm9ybURhdGFSZWZlcmVuY2U7CiB9CiAK
K25hbWVzcGFjZSBBUEkgeworY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OworfQor
CiBuYW1lc3BhY2UgUEFMIHsKIGNsYXNzIFNlc3Npb25JRDsKIH0KQEAgLTczLDggKzc3LDggQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERvd25sb2FkUHJveHk7CiBjbGFzcyBEb3dubG9h
ZFByb3h5TWFwOworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5OwogY2xhc3MgV2ViUGFnZVBy
b3h5OwotY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eTsKIAogZW51bSBjbGFzcyBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MgOiBib29s
OwpAQCAtODcsNyArOTEsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM7CiBzdHJ1Y3QgUmVzb3VyY2VMb2FkSW5mbzsKIHN0cnVjdCBXZWJzaXRlRGF0YTsKIAotY2xh
c3MgTmV0d29ya1Byb2Nlc3NQcm94eSBmaW5hbCA6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJv
eHksIHByaXZhdGUgUHJvY2Vzc1Rocm90dGxlckNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRy
PE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKK2NsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkgZmluYWwg
OiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJD
bGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiwgcHVibGlj
IFJlZkNvdW50ZWQ8TmV0d29ya1Byb2Nlc3NQcm94eT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIHVzaW5nIFJlZ2lzdHJhYmxlRG9tYWluID0gV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW47CkBAIC0xMDIsMTIgKzEwNiwxNiBAQCBwdWJsaWM6CiAgICAgdXNp
bmcgRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW47CiAgICAgdXNpbmcgT3BlbmVyRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47
CiAKLSAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJik7Cisg
ICAgc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBjcmVhdGUoKSB7IHJldHVybiBhZG9w
dFJlZigqbmV3IE5ldHdvcmtQcm9jZXNzUHJveHkpOyB9CiAgICAgfk5ldHdvcmtQcm9jZXNzUHJv
eHkoKTsKIAorICAgIHN0YXRpYyBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBhbGxO
ZXR3b3JrUHJvY2Vzc2VzKCk7CisgICAgCisgICAgdm9pZCB0ZXJtaW5hdGUoKSBmaW5hbDsKKwog
ICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1l
c3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5
ZWRSZXBseSYmKTsKIAotICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vi
c2l0ZURhdGFTdG9yZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZy
YW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSk7CisgICAgRG93bmxv
YWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgV2ViUHJvY2Vz
c1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBGcmFtZUluZm9E
YXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpOwogCiAgICAgdm9pZCBmZXRjaFdl
YnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0
aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdl
YnNpdGVEYXRhKT4mJik7CiAgICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25J
RCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CkBAIC0yMDYsMTMg
KzIxNCwxMSBAQCBwdWJsaWM6CiAgICAgUHJvY2Vzc1Rocm90dGxlciYgdGhyb3R0bGVyKCkgZmlu
YWwgeyByZXR1cm4gbV90aHJvdHRsZXI7IH0KICAgICB2b2lkIHVwZGF0ZVByb2Nlc3NBc3NlcnRp
b24oKTsKIAotICAgIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCgpIHsgcmV0dXJuIG1fcHJv
Y2Vzc1Bvb2w7IH0KLQogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgdm9pZCBk
aWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkoV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHkmKTsKICNlbmRpZgogCi0gICAgdm9pZCBhZGRTZXNzaW9uKFJlZjxXZWJzaXRl
RGF0YVN0b3JlPiYmKTsKKyAgICB2b2lkIGFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYpOwog
ICAgIGJvb2wgaGFzU2Vzc2lvbihQQUw6OlNlc3Npb25JRCkgY29uc3Q7CiAgICAgdm9pZCByZW1v
dmVTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKICAgICAKQEAgLTIyOSw2ICsyMzUsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKGNvbnN0
IFN0cmluZyYpOwogICAgIHZvaWQgdW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3Rv
Y29sKGNvbnN0IFN0cmluZyYpOwogCisgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsK
KyAgICAKICAgICB2b2lkIHJlc2V0UXVvdGEoUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJik7CiAKICAgICB2b2lkIHJlc291cmNlTG9hZERpZFNlbmRSZXF1ZXN0KFdl
YlBhZ2VQcm94eUlkZW50aWZpZXIsIFJlc291cmNlTG9hZEluZm8mJiwgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiYsIE9wdGlvbmFsPElQQzo6Rm9ybURhdGFSZWZlcmVuY2U+JiYpOwpAQCAtMjQ4
LDcgKzI1NiwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVCdW5kbGVJZGVudGlmaWVyKGNv
bnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBjbGVh
ckJ1bmRsZUlkZW50aWZpZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAgIFdl
YkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlcigpIHsgcmV0dXJuIG1fY29va2llTWFu
YWdlci5nZXQoKTsgfQorCiBwcml2YXRlOgorICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9jZXNzUHJv
eHkoKTsKKworICAgIHZvaWQgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOwor
CiAgICAgLy8gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5CiAgICAgQVNDSUlMaXRlcmFsIHByb2Nlc3NO
YW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIk5ldHdvcmtpbmciX3M7IH0KIApAQCAtMjU2LDcg
KzI3MCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25u
ZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwcm9jZXNzV2lsbFNodXREb3duKElQQzo6Q29u
bmVjdGlvbiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsK
ICAgICB2b2lkIGNsZWFyQ2FsbGJhY2tTdGF0ZXMoKTsKIAogICAgIC8vIElQQzo6Q29ubmVjdGlv
bjo6Q2xpZW50CkBAIC0zMTIsOCArMzI1LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHJvY2Vz
c0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklELCBSZWY8QXV0aGVudGljYXRp
b25DaGFsbGVuZ2VQcm94eT4mJik7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgbV9wcm9jZXNzUG9v
bDsKLQogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJz
aXRlRGF0YSk+PiBtX3BlbmRpbmdGZXRjaFdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hN
YXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRl
V2Vic2l0ZURhdGFDYWxsYmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnNDYWxs
YmFja3M7CkBAIC0zNTAsNiArMzYxLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgSGFzaFNl
dDxQQUw6OlNlc3Npb25JRD4gbV9zZXNzaW9uSURzOworICAgIFJlZjxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+IG1fY29va2llTWFuYWdlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1By
b3h5Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHlDb2NvYS5tbQppbmRleCBiOGRhZWRmN2JlYmExY2Q4MWY2ZTUyNDQ5NjAzMTBmMTMz
MTBjMTFlLi44MmMxMGU0MWQ1NjI1ZGJhYWRmOTEzYjk0ODA0NDdjNzBjYzE5ZDllIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlD
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHlDb2NvYS5tbQpAQCAtNTEsOCArNTEsMTAgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpYUENFdmVudEhhbmRsZXI6OmhhbmRsZVhQQ0V2ZW50KHhwY19vYmplY3RfdCBldmVudCkg
Y28KICAgICBpZiAobWVzc2FnZU5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0NvbnN0
YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVzc2FnZU5hbWUpCi0g
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZE5ldHdvcmtQcm9jZXNz
WFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoZXZlbnQpOworICAgIGlmIChtZXNzYWdlTmFtZSA9PSBM
YXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDQ29uc3RhbnRzOjp4cGNMYXVuY2hTZXJ2aWNlc0RhdGFi
YXNlWFBDRW5kcG9pbnRNZXNzYWdlTmFtZSkgeworICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQ
b29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICAgICAgcHJv
Y2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2ZW50
KTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCmluZGV4IGNjNTI2YWFmM2FhZmIxYzE0
NmRhNGIyNDE5NDU5YjEwOTIwMWI2MTAuLmQ4MTYwYjAwYmU0NjRiNjQxMmU4ODY3NzA2OWI2OTlh
OGJjODZlZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFu
YWdlclByb3h5LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAj
aW5jbHVkZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01l
c3NhZ2VzLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIk9w
dGlvbmFsQ2FsbGJhY2tJRC5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCkBAIC0zOSwyNCAr
NDAsMTYgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
LWNvbnN0IGNoYXIqIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUoKQorV2Vi
Q29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkoTmV0d29ya1Byb2Nlc3NQ
cm94eSYgbmV0d29ya1Byb2Nlc3MpCisgICAgOiBtX25ldHdvcmtQcm9jZXNzKG1ha2VXZWFrUHRy
KG5ldHdvcmtQcm9jZXNzKSkKIHsKLSAgICByZXR1cm4gIldlYkNvb2tpZU1hbmFnZXJQcm94eSI7
Ci19Ci0KLVJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
Y3JlYXRlKFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKLXsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBXZWJDb29raWVNYW5hZ2VyUHJveHkocHJvY2Vzc1Bvb2wpKTsKLX0KLQotV2ViQ29v
a2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqIHBy
b2Nlc3NQb29sKQotICAgIDogV2ViQ29udGV4dFN1cHBsZW1lbnQocHJvY2Vzc1Bvb2wpCi17Ci0g
ICAgV2ViQ29udGV4dFN1cHBsZW1lbnQ6OnByb2Nlc3NQb29sKCktPmFkZE1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
ICp0aGlzKTsKKyAgICBuZXR3b3JrUHJvY2Vzcy5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiB9
CiAKIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6fldlYkNvb2tpZU1hbmFnZXJQcm94eSgpCiB7Cisg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCkpOwogICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVycy5pc0VtcHR5KCkp
OwogfQogCkBAIC02NSwxMDIgKzU4LDg0IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpp
bml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNsaWVudEJhc2UqIGNsCiAgICAg
bV9jbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOwogfQogCi0vLyBXZWJDb250ZXh0U3VwcGxlbWVu
dAotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKQot
ewotICAgIFZlY3RvcjxPYnNlcnZlcio+IG9ic2VydmVyczsKLSAgICBmb3IgKGF1dG8mIG9ic2Vy
dmVyU2V0IDogbV9jb29raWVPYnNlcnZlcnMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRv
KiBvYnNlcnZlciA6IG9ic2VydmVyU2V0KQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChv
YnNlcnZlcik7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVycykK
LSAgICAgICAgb2JzZXJ2ZXItPm1hbmFnZXJEZXN0cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX2Nv
b2tpZU9ic2VydmVycy5pc0VtcHR5KCkpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6cHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopCi17
Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVu
dCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OnJlZigpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6
OmRlcmVmKCk7Ci19Ci0KIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNX
aXRoQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVmVjdG9yPFN0cmluZz4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0g
ICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVu
Y3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAog
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQog
ewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJ
Zk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcykpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNz
KQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSwgMCk7
CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3Jr
aW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFn
ZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbklEKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNr
RnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llKHNlc3Npb25JRCwg
Y29va2llKSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pXSgp
IG11dGFibGUgeworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRl
bGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikp
OworICAgIGVsc2UKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwotICAgIH0pOwogfQogCiB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1By
b2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxl
dGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24o
KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2llcywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5l
dHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6U2V0Q29va2llKHNlc3Npb25JRCwgY29va2llcyksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlv
bikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tp
ZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBl
bHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0
b3I8Q29va2llPiYgY29va2llcywgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgbWFpbkRvY3Vt
ZW50VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsK
LSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBt
YWluRG9jdW1lbnRVUkwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29v
a2llcywgdXJsLCBtYWluRG9jdW1lbnRVUkwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsK
KyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rp
b24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVO
ZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZN
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAg
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpHZXRBbGxDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5j
dGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwogfQogCiB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29r
aWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9j
ZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0Q29v
a2llcyhzZXNzaW9uSUQsIHVybCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklE
LCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNh
bGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0
YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0g
ICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVj
ZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNo
YW5nZXMoc2Vzc2lvbklEKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0YXJ0T2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1Jl
bGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNl
cnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNz
KQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+JiYgY2FsbGJhY2spCkBA
IC0yMTEsMTggKzE4NiwxOCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y29va2llc0Rp
ZENoYW5nZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAKIHZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBIVFRQQ29v
a2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxi
YWNrRnVuY3Rpb24pCiB7Ci0jaWYgVVNFKFNPVVApCi0gICAgcHJvY2Vzc1Bvb2woKS0+c2V0SW5p
dGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsKLSNlbmRpZgotCi0gICAgYXV0byYg
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwot
ICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFdURk1vdmUoY2FsbGJhY2tGdW5j
dGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQogCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNl
c3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSgp
LCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNr
RnVuY3Rpb24oSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6TmV2ZXIpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tp
ZU1hbmFnZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdl
clByb3h5LmgKaW5kZXggMGJkZmMwZDRlNDdjNDM2ZjU4NWNmMjljMDlkNTFhMjliYzgxMWE5ZC4u
NmY1MWYwM2U1YzBjYTg5NDEyMzM0Mzc3YjU1NDNkODIyY2MyZmVjMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKQEAgLTU2LDExICs1Niw5
IEBAIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6QXJyYXkqPiBBcnJheUNhbGxiYWNrOwog
dHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeT4g
SFRUUENvb2tpZUFjY2VwdFBvbGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7CiAKLWNs
YXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpP
YmplY3Q6OlR5cGU6OkNvb2tpZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1lbnQs
IHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFuYWdlclBy
b3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFu
YWdlcj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRpYyBSZWY8
V2ViQ29va2llTWFuYWdlclByb3h5PiBjcmVhdGUoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29y
a1Byb2Nlc3MpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KG5l
dHdvcmtQcm9jZXNzKSk7IH0KICAgICB2aXJ0dWFsIH5XZWJDb29raWVNYW5hZ2VyUHJveHkoKTsK
IAogICAgIHZvaWQgaW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRC
YXNlKik7CkBAIC0xMDQsMTcgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQVBJOjpPYmpl
Y3Q6OmRlcmVmOwogCiBwcml2YXRlOgotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9j
ZXNzUG9vbCopOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5
Jik7CiAKICAgICB2b2lkIGNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQpOwogCi0gICAg
Ly8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLSAgICB2b2lkIHByb2Nlc3NQb29sRGVzdHJveWVkKCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5Kikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopIG92
ZXJyaWRlOwotICAgIHZvaWQgcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLQogICAgIC8vIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKIApAQCAtMTI1LDYgKzExNiw3IEBAIHBy
aXZhdGU6CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgp
Pj4gbV9sZWdhY3lDb29raWVPYnNlcnZlcnM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwg
SGFzaFNldDxPYnNlcnZlcio+PiBtX2Nvb2tpZU9ic2VydmVyczsKIAorICAgIFdlYWtQdHI8TmV0
d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICBXZWJDb29raWVNYW5hZ2Vy
UHJveHlDbGllbnQgbV9jbGllbnQ7CiAKICNpZiBVU0UoU09VUCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGYxYTllYzM0ODQxNzg3ZTRhODc1MWFjNmY2NzZh
ZDFhOWJmZjFiYzcuLjViNjJiMTQyYzlmZjNmYjhkZjc2OWE1N2YwMmY1ZmEyNzAzYzdiN2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTc0NCw3ICsxNzQ0
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oYm9vbCBj
b250cm9sbGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGNvbnRyb2xsZWQpKTsKLSAgICBtX3Byb2Nlc3Mt
PnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbikpOworICAgIHdlYnNp
dGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRTZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbiksIDApOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0
SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQpAQCAtMzIwOCwxMSArMzIw
OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojppc0ZvcmNlZEludG9BcHBCb3VuZE1vZGVUZXN0aW5n
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+CiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlzYWJs
ZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MoKQogewogI2lmIEVOQUJM
RShBUFBfQk9VTkRfRE9NQUlOUykgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCAw
KTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnQo
KSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtMzIyMSwxMyArMzIxNyw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAhUExBVEZPUk0oTUFD
Q0FUQUxZU1QpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92
ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCku
bmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAjZW5kaWYK
QEAgLTQ0MjcsNyArNDQxNyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8oY29u
c3QgVVJMJiB1cmwpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3kgPSBtX2NhblVzZUNyZWRlbnRpYWxTdG9yYWdlID8gV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3k6OlVzZSA6IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpE
b05vdFVzZTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5wcmVjb25uZWN0VG8oc2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlEKCks
IHVybCwgdXNlckFnZW50KCksIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRpbmdU
b0FwcEJvdW5kRG9tYWluKCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vz
cygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQoKSwg
dXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1Rv
QXBwQm91bmREb21haW4oKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDYW5Vc2VDcmVk
ZW50aWFsU3RvcmFnZShib29sIGNhblVzZUNyZWRlbnRpYWxTdG9yYWdlKQpAQCAtNDcyMyw3ICs0
NzEzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZShGcmFtZUlk
ZW50aWZpZXIgZnJhbWVJRCwgRnJhbWVJbmZvRGF0YSYKICAgICAgICAgICAgIFJlZ2lzdHJhYmxl
RG9tYWluIGN1cnJlbnREb21haW4geyBjdXJyZW50UmVxdWVzdC51cmwoKSB9OwogICAgICAgICAg
ICAgVVJMIHJlcXVlc3RlclVSTCB7IFVSTCgpLCByZXF1ZXN0ZXJPcmlnaW4udG9TdHJpbmcoKSB9
OwogICAgICAgICAgICAgaWYgKCFjdXJyZW50RG9tYWluLm1hdGNoZXMocmVxdWVzdGVyVVJMKSkK
LSAgICAgICAgICAgICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZGlkQ29tbWl0Q3Jvc3NT
aXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwg
UmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwgY3VycmVudERvbWFpbiwgbmF2aWdh
dGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgICAg
ICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmRpZENvbW1pdENyb3Nz
U2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IFJlZ2lzdHJhYmxlRG9tYWluIHsgcmVxdWVzdGVyVVJMIH0sIGN1cnJlbnREb21haW4sIG5hdmln
YXRpb25EYXRhVHJhbnNmZXIsIG1faWRlbnRpZmllciwgbV93ZWJQYWdlSUQpOwogICAgICAgICB9
CiAjZW5kaWYKICAgICB9CkBAIC00NzYxLDcgKzQ3NTEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlkQ29tbWl0TG9hZEZvckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUluZm9E
YXRhJgogICAgIGlmIChuYXZpZ2F0aW9uICYmIGZyYW1lLT5pc01haW5GcmFtZSgpKSB7CiAgICAg
ICAgIGlmIChhdXRvJiBhZENsaWNrQXR0cmlidXRpb24gPSBuYXZpZ2F0aW9uLT5hZENsaWNrQXR0
cmlidXRpb24oKSkgewogICAgICAgICAgICAgaWYgKGFkQ2xpY2tBdHRyaWJ1dGlvbi0+ZGVzdGlu
YXRpb24oKS5tYXRjaGVzKGZyYW1lLT51cmwoKSkpCi0gICAgICAgICAgICAgICAgbV9wcm9jZXNz
LT5wcm9jZXNzUG9vbCgpLnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U3RvcmVBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgKmFkQ2xpY2tBdHRyaWJ1dGlvbikpOworICAgICAgICAgICAgICAgIHdlYnNpdGVE
YXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTdG9yZUFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCAqYWRDbGlja0F0dHJpYnV0aW9uKSwgMCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUzNzIs
NyArNTM2Miw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3Qg
V2ViRnJhbWVQcm94eSYgZnJhbWUsIGNvbnN0IFVSTCYgcGFnCiAgICAgaWYgKHRhcmdldEhvc3Qu
aXNFbXB0eSgpIHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3QgPT0gc291
cmNlVVJMLmhvc3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5wcm9jZXNz
UG9vbCgpLnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
TG9nRnJhbWVOYXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lz
dHJhYmxlRG9tYWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVSTCB9
LCBSZWdpc3RyYWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5pc01h
aW5GcmFtZSgpLCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRMb2Fk
Rm9yTWFpbkZyYW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlcikpOwor
ICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVEb21h
aW4geyBwYWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVkaXJl
Y3QsIGZyYW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRGaW5p
c2hEb2N1bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5pdGlh
dGVkQnlVc2VyKSwgMCk7CiB9CiAjZW5kaWYKIApAQCAtOTk5Nyw1OCArOTk4NywyNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6c3lzdGVtUHJldmlld0FjdGlvblRyaWdnZXJlZChjb25zdCBXZWJDb3Jl
OjpTeXN0ZW1QcmV2aWV3SW5mbwogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZHVtcEFkQ2xpY2tBdHRy
aWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+
cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1By
b2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KGVtcHR5U3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklE
KCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRh
U3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQ
YWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBp
ZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0gZWxzZQotICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vz
cygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQWRD
bGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBZENsaWNr
QXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkp
IHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRl
c3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFsdWUpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3Jr
UHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVS
TEZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3By
b2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5l
dHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNv
bnZlcnNpb25VUkxGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVy
bCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6TWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5n
KG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENsaWNrQXR0
cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxFKFNQRUVD
SF9TWU5USEVTSVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAK
aW5kZXggOGRmMWZhMzY0ZjMwYzM5YThkYTU2ODczZDZkYTZhZTM2M2I5ZWViMi4uYTNiMDExM2Qy
ODFjMjZmYTgxYTllOWFmMzIxNGJlYmJjZTY5MTA4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtMTQzLDggKzE0MywxMCBAQAogI2VuZGlmCiAKICNk
ZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0coY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVB
U0VfTE9HKGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZB
X0FSR1NfXykKKyNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfU1RBVElDKGNoYW5u
ZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhjaGFubmVsLCAiV2ViUHJvY2Vzc1Bvb2w6OiIgZm10
LCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19FUlJP
UihjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfRVJST1IoY2hhbm5lbCwgIiVwIC0gV2Vi
UHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBXRUJQUk9D
RVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNF
X0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIGNoYW5uZWwsICIl
cCAtIFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUg
V0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoY2hhbm5lbCwgZm10
LCAuLi4pIFJFTEVBU0VfTE9HX0lGKHNlc3Npb25JRC5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQo
KSwgY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwgIyNfX1ZBX0FSR1NfXykKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTIzMiw2ICsyMzQs
MTEgQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBn
bG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3QKICAgICByZXR1cm4gc2V0OwogfQogCitWZWN0
b3I8U3RyaW5nPiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhh
bmRsZXJzKCkKK3sKKyAgICByZXR1cm4gY29weVRvVmVjdG9yKGdsb2JhbFVSTFNjaGVtZXNXaXRo
Q3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKTsKK30KKwogV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nl
c3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogICAg
IDogbV9jb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24uY29weSgpKQogICAgICwgbV9kZWZhdWx0
UGFnZUdyb3VwKFdlYlBhZ2VHcm91cDo6Y3JlYXRlKCkpCkBAIC0yMzksNyArMjQ2LDYgQEAgV2Vi
UHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
JiBjb25maWd1cmF0aW9uKQogICAgICwgbV9hdXRvbWF0aW9uQ2xpZW50KG1ha2VVbmlxdWU8QVBJ
OjpBdXRvbWF0aW9uQ2xpZW50PigpKQogICAgICwgbV9kb3dubG9hZENsaWVudChtYWtlVW5pcXVl
UmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+KCkpCiAgICAgLCBtX2hpc3RvcnlDbGllbnQobWFrZVVu
aXF1ZTxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PigpKQotICAgICwgbV9jdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudD4oKSkKICAgICAsIG1fdmlzaXRlZExpbmtTdG9yZShWaXNpdGVkTGlua1N0b3JlOjpj
cmVhdGUoKSkKICNpZiBQTEFURk9STShNQUMpCiAgICAgLCBtX2hpZ2hQZXJmb3JtYW5jZUdyYXBo
aWNzVXNhZ2VTYW1wbGVyKG1ha2VVbmlxdWU8SGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNh
bXBsZXI+KCp0aGlzKSkKQEAgLTI2Nyw5ICsyNzMsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJv
Y2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAj
ZW5kaWYKICAgICB9KTsKIAotICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlICYmIFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBtX3dl
YnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3Rv
cmUoKTsKLQogICAgIGZvciAoYXV0byYgc2NoZW1lIDogbV9jb25maWd1cmF0aW9uLT5hbHdheXNS
ZXZhbGlkYXRlZFVSTFNjaGVtZXMoKSkKICAgICAgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFzQWx3
YXlzUmV2YWxpZGF0ZWQuYWRkKHNjaGVtZSk7CiAKQEAgLTI4NSw3ICsyODgsNiBAQCBXZWJQcm9j
ZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNv
bmZpZ3VyYXRpb24pCiAgICAgYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
UG9vbDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiAKICAgICAvLyBOT1RFOiBUaGVz
ZSBzdWItb2JqZWN0cyBtdXN0IGJlIGluaXRpYWxpemVkIGFmdGVyIG1fbWVzc2FnZVJlY2VpdmVy
TWFwLi4KLSAgICBhZGRTdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKICAgICBh
ZGRTdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1cHBs
ZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5PigpOwogI2lmIEVOQUJMRShNRURJQV9T
RVNTSU9OKQpAQCAtMzQyLDkgKzM0NCw2IEBAIFdlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bv
b2woKQogICAgIHByb2Nlc3NQb29sQ291bnRlci5kZWNyZW1lbnQoKTsKICNlbmRpZgogCi0gICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNodXREb3du
UHJvY2VzcygpOwotCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAgICAgaWYgKCFtX3Byb2Nlc3Nlc1Vz
aW5nR2FtZXBhZHMuaXNFbXB0eSgpKQogICAgICAgICBVSUdhbWVwYWRQcm92aWRlcjo6c2luZ2xl
dG9uKCkucHJvY2Vzc1Bvb2xTdG9wcGVkVXNpbmdHYW1lcGFkcygqdGhpcyk7CkBAIC00MDIsMTYg
KzQwMSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEF1dG9tYXRpb25DbGllbnQoc3RkOjp1
bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4mCiAgICAgICAgIG1fYXV0b21hdGlvbkNs
aWVudCA9IFdURk1vdmUoYXV0b21hdGlvbkNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8
QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYgY3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50KQotewotI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCi0g
ICAgaWYgKCFjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi0gICAgICAgIG1fY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50ID0gbWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudD4oKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50ID0gV1RGTW92ZShjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOwotI2VuZGlmCi19Ci0K
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRl
bnRpZmllcihjb25zdCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRp
ZmllcikKIHsKICAgICAvLyBHdWFyZCBhZ2FpbnN0IEFQSSBtaXN1c2UuCkBAIC00MjEsMTEgKzQx
MCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVu
ZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGN1CiAgICAgbV9jb25maWd1cmF0aW9uLT5zZXRD
dXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY3VzdG9tV2ViQ29udGVudFNl
cnZpY2VCdW5kbGVJZGVudGlmaWVyKTsKIH0KIAotSVBDOjpDb25uZWN0aW9uKiBXZWJQcm9jZXNz
UG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkKLXsKLSAgICByZXR1cm4gbV9uZXR3
b3JrUHJvY2Vzcy0+Y29ubmVjdGlvbigpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5n
dWFnZUNoYW5nZWQodm9pZCogY29udGV4dCkKIHsKICAgICBzdGF0aWNfY2FzdDxXZWJQcm9jZXNz
UG9vbCo+KGNvbnRleHQpLT5sYW5ndWFnZUNoYW5nZWQoKTsKQEAgLTQzNSw4ICs0MTksNyBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQoKQogewogICAgIHNlbmRUb0FsbFBy
b2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5n
ZWQoKSk7CiAjaWYgVVNFKFNPVVApCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJl
ZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKKyAg
ICBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPm5ldHdvcmtQcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFu
Z2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDApOwogI2VuZGlmCiB9CiAKQEAgLTQ0OSw3
ICs0MzIsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpmdWxsS2V5Ym9hcmRBY2Nlc3NNb2RlQ2hh
bmdlZChib29sIGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2VuZE1lbW9yeVByZXNzdXJlRXZlbnQoYm9vbCBpc0NyaXRpY2FsKQogewogICAgIHNlbmRUb0Fs
bFByb2Nlc3NlcyhNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVBy
ZXNzdXJlRXZlbnQoaXNDcml0aWNhbCkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1l
c3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChp
c0NyaXRpY2FsKSk7CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nl
c3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJl
RXZlbnQoaXNDcml0aWNhbCkpOwogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAg
IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5zZW5kTWVtb3J5UHJlc3N1cmVFdmVu
dChpc0NyaXRpY2FsKTsKICNlbmRpZgpAQCAtNDc0LDI3NSArNDU4LDggQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2NyZWVuUHJvcGVydGllc1N0YXRlQ2hhbmdlZCgpCiAjZW5kaWYKIH0KIAotTmV0
d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKFdl
YnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3JlKQotewotICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7Ci0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkg
d29ya2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMu
Ci0gICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcg
dmlvbGF0aW9uIGNoZWNrIG9uIG91ciBBUElzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYuCi0gICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkg
ewotICAgICAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsK
LSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0K
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICBpZiAod2l0aFdlYnNpdGVEYXRh
U3RvcmUpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJl
Zigqd2l0aFdlYnNpdGVEYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0
b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICpt
X25ldHdvcmtQcm9jZXNzOwotICAgIH0KLQotICAgIGF1dG8gbmV0d29ya1Byb2Nlc3MgPSBtYWtl
VW5pcXVlPE5ldHdvcmtQcm9jZXNzUHJveHk+KCp0aGlzKTsKLQotICAgIE5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0
b3JlKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVu
ZGluZ0Nvb2tpZXMgPSBjb3B5VG9WZWN0b3IobV93ZWJzaXRlRGF0YVN0b3JlLT5wZW5kaW5nQ29v
a2llcygpKTsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVz
KCk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9u
QnVuZGxlSWRlbnRpZmllciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJhdGlvbigpLnNv
dXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpOwotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VB
cHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZp
Z3VyYXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoKTsKLSNlbmRp
ZgotICAgIH0KLQotICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRp
bmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7Ci0KLSAgICBmb3IgKGF1dG8mIHNjaGVtZSA6
IGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQotICAgICAgICBw
YXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChz
Y2hlbWUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBTdHJpbmcgY29va2llU3Rv
cmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7
Ci0gICAgaWYgKCFjb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0
b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0KLSAgICBTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJv
Y2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvbnRhaW5l
ckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3Rvcnks
IHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQot
ICAgIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50
QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0
eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxl
RGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5w
YXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9y
YXJ5RmlsZShlbXB0eVN0cmluZygpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUs
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVt
cEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHBh
cmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdh
Y3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgp
KTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50
U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3ko
KSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9W
ZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVy
QXNMb2NhbCgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2Vz
cyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1l
c1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0gICAgLy8gKioqKioqKioqCi0gICAgLy8gSU1QT1JUQU5UOiBEbyBub3QgY2hhbmdlIHRoZSBk
aXJlY3Rvcnkgc3RydWN0dXJlIGZvciBpbmRleGVkIGRhdGFiYXNlcyBvbiBkaXNrIHdpdGhvdXQg
Zmlyc3QgY29uc3VsdGluZyBhIHJldmlld2VyIGZyb20gQXBwbGUgKDxyZGFyOi8vcHJvYmxlbS8x
NzQ1NDcxMj4pCi0gICAgLy8gKioqKioqKioqCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkK
LSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5pbmRleGVkRGF0YWJh
c2VEaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jcmVhdGVT
eW1MaW5rRm9yRmlsZVVwZ3JhZGUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwotICAgIH0KLSNlbmRpZgotCi0jaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHBh
cmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IG1fd2Vic2l0ZURh
dGFTdG9yZS0+cmVzb2x2ZWRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0g
ICAgaWYgKCFwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpCi0g
ICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9ICBX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5KCk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdy
aXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLSNlbmRpZgotCi0gICAgYXV0byBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dl
YnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTG9jYWxTdG9yYWdl
RGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkpCi0gICAgICAgIGxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdExvY2FsU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbG9jYWxTdG9y
YWdlRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShsb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
LQotICAgIGF1dG8gY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8g
bV93ZWJzaXRlRGF0YVN0b3JlLT5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmco
KTsKLSAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNhY2hl
U3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5j
YWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IFdURk1v
dmUoY2FjaGVTdG9yYWdlRGlyZWN0b3J5KTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgcmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAobV93
ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJl
Y3RvcnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
YXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0
ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJh
bWV0ZXJzLmRpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NE
aXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSwg
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBi
b29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBmYWxzZTsKLSAgICBib29sIGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBmYWxzZTsKLSAgICBib29s
IHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSB0cnVlOwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IGZhbHNlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCi0gICAgV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSB0
aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJs
b2NraW5nTW9kZTo6QWxsOwotICAgIFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRF
bmFibGVkIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gV2ViQ29yZTo6U2FtZVNp
dGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6Ok5vOwotI2VuZGlmCi0gICAgV2ViQ29yZTo6Rmly
c3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGUgPSBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0
Q29va2llczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBzdGFuZGFsb25lQXBwbGlj
YXRpb25Eb21haW47Ci0gICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gYXBw
Qm91bmREb21haW5zOwotICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIG1hbnVhbFByZXZh
bGVudFJlc291cmNlOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbV90Y2NQcmVmZXJlbmNl
RW5hYmxlZCA9IGRvZXNBcHBIYXZlSVRQRW5hYmxlZCgpOwotICAgIGlmICh3aXRoV2Vic2l0ZURh
dGFTdG9yZSAmJiAhd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0
KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVy
ZW5jZUVuYWJsZWQ7Ci0gICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9
IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSAmJiAhbV93ZWJzaXRlRGF0YVN0b3JlLT5pc0l0
cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRp
c3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBtX3dlYnNpdGVEYXRhU3Rv
cmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZUV4aXN0cygpICYmICFXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPmlz
SXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIFdlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotI2VuZGlm
Ci0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0g
ICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSB3aXRo
V2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygpOwotI2VuZGlm
Ci0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgICAg
ICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5w
YXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxk
SW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGFyYW1ldGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAgICAgICAgICAg
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7
Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgICAgIHRoaXJk
UGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsK
LSAgICAgICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZTsKLSAgICAgICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25l
QXBwbGljYXRpb25Eb21haW47Ci0gICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91
bmREb21haW5zOwotICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFs
UHJldmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRl
RGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3Rh
ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEo
KTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9
IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwot
ICAgICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAg
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5Owot
ICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURp
cmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3Jr
Q2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29u
c3QgYXV0byYgaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVz
b2x2ZWRIU1RTU3RvcmFnZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIWhzdHNTdG9yYWdlRGly
ZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9y
eSA9IGhzdHNTdG9yYWdlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlKGhzdHNTdG9yYWdlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBl
OjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAg
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc291
cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdF
dmVudCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygp
OwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0g
ICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAg
IHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAg
ICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVi
dWdNb2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAg
ICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2lu
Z01vZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5z
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmly
c3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVt
b3ZhbE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3Rh
bmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
LmFwcEJvdW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
Lm1hbnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dl
YnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdl
UXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVv
dGEoKTsKLQotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBtX3dl
YnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAg
IGlmICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5
LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBhdXRv
JiBoc3RzU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRIU1RT
U3RvcmFnZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIWhzdHNTdG9yYWdlRGlyZWN0b3J5Lmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IGhzdHNT
dG9yYWdlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlKGhzdHNTdG9yYWdlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3Jp
dGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0
YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZCgpOwotICAgICAgICBhdXRvIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IFdl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5
LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgfQotCi0jaWYgSEFWRShDRk5FVFdPUktfQUxU
RVJOQVRJVkVfU0VSVklDRSkKLSAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6aHR0cDNFbmFibGVk
KCkpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5ID0gV2Vic2l0
ZURhdGFTdG9yZTo6ZGVmYXVsdEFsdGVybmF0aXZlU2VydmljZXNEaXJlY3RvcnkoKTsKLSAgICAg
ICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVT
ZXJ2aWNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cDNFbmFi
bGVkID0gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLSAgICBib29sIGlzSXRwU3RhdGVFeHBsaWNpdGx5
U2V0ID0gZmFsc2U7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMg
PSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycyB7Ci0gICAgICAgIFdURk1vdmUocmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSksCi0gICAgICAgIFdURk1vdmUocmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSksCi0gICAgICAgIGVuYWJsZVJl
c291cmNlTG9hZFN0YXRpc3RpY3MsCi0gICAgICAgIGlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0LAot
ICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50LAotICAg
ICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0LAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGVidWdNb2RlLAotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
Ci0gICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUsCi0gICAgICAgIHNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkLAotI2VuZGlmCi0gICAgICAgIGZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlLAotICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4s
Ci0gICAgICAgIGFwcEJvdW5kRG9tYWlucywKLSAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3Vy
Y2UsCi0gICAgfTsKLQotICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgcGFyYW1ldGVy
cwotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOwotCi0g
ICAgLy8gSW5pdGlhbGl6ZSB0aGUgbmV0d29yayBwcm9jZXNzLgotICAgIG5ldHdvcmtQcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
KHBhcmFtZXRlcnMpLCAwKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UU9TKG5ldHdvcmtQcm9jZXNz
TGF0ZW5jeVFPUygpLCBuZXR3b3JrUHJvY2Vzc1Rocm91Z2hwdXRRT1MoKSksIDApOwotI2VuZGlm
Ci0KLSAgICBuZXR3b3JrUHJvY2Vzcy0+dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwotCi0gICAg
aWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRT
ZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgIHdpdGhXZWJz
aXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgfQotCi0gICAgLy8gTWFr
ZSBzdXJlIHRoZSBuZXR3b3JrIHByb2Nlc3Mga25vd3MgYWJvdXQgYWxsIHRoZSBzZXNzaW9ucyB0
aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSBpdCBzdGFydGVkLgotICAgIGZvciAoYXV0
byYgc2Vzc2lvbklEIDogbV9zZXNzaW9uVG9QYWdlSURzTWFwLmtleXMoKSkgewotICAgICAgICBp
ZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9u
RGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpKQotICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKndlYnNpdGVEYXRhU3RvcmUpOwotICAgIH0KLQotICAg
IG1fbmV0d29ya1Byb2Nlc3MgPSBXVEZNb3ZlKG5ldHdvcmtQcm9jZXNzKTsKLSAgICByZXR1cm4g
Km1fbmV0d29ya1Byb2Nlc3M7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1Byb3h5KQogewot
ICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsKLSAgICBBU1NFUlQoJm5ldHdvcmtQcm9jZXNz
UHJveHkgPT0gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKSk7Ci0KICAgICBmb3IgKGF1dG8mIHN1cHBs
ZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBzdXBwbGVtZW50LT5wcm9j
ZXNzRGlkQ2xvc2UoJm5ldHdvcmtQcm9jZXNzUHJveHkpOwogCkBAIC03NTEsOSArNDY4LDYgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNz
UHJveHkmIG5ldHdvcmtQcm9jZXNzUHIKICAgICBpZiAobV9hdXRvbWF0aW9uU2Vzc2lvbikKICAg
ICAgICAgbV9hdXRvbWF0aW9uU2Vzc2lvbi0+dGVybWluYXRlKCk7CiAKLSAgICAvLyBMZWF2ZSB0
aGUgcHJvY2VzcyBwcm94eSBhcm91bmQgZHVyaW5nIGNsaWVudCBjYWxsLCBzbyB0aGF0IHRoZSBj
bGllbnQgY291bGQgcXVlcnkgdGhlIHByb2Nlc3MgaWRlbnRpZmllci4KLSAgICBtX25ldHdvcmtQ
cm9jZXNzID0gbnVsbHB0cjsKLQogICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAK
QEAgLTc2NCwyMCArNDc4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclBy
b2Nlc3NDcmFzaGVkKFdlYlByb2Nlc3NQcm94eSYgcHJveHkpCiAjZW5kaWYKIH0KIAotdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94
eSYgd2ViUHJvY2Vzc1Byb3h5LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQotewotICAgIGVuc3VyZU5l
dHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKHdlYlByb2Nlc3NQcm94eSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpLCB3ZWJQcm9jZXNzUHJveHkgPSBtYWtlV2Vha1B0cih3ZWJQcm9jZXNzUHJveHkpLCBy
ZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYXV0byYgY29ubmVjdGlvbkluZm8pIG11dGFibGUgewot
ICAgICAgICBpZiAoVU5MSUtFTFkoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmllcklzVmFsaWQo
Y29ubmVjdGlvbkluZm8uaWRlbnRpZmllcigpKSAmJiB3ZWJQcm9jZXNzUHJveHkgJiYgd2Vha1Ro
aXMpKSB7Ci0gICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19FUlJPUihQcm9j
ZXNzLCAiZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOiBGYWlsZWQgZmlyc3QgYXR0ZW1wdCwg
cmV0cnlpbmciKTsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKndlYlBy
b2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIHJlcGx5KGNvbm5lY3Rpb25JbmZvKTsKLSAgICB9KTsKLX0KLQogI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdwdVByb2Nlc3NDcmFzaGVk
KFByb2Nlc3NJRCBpZGVudGlmaWVyKQogewpAQCAtODAxLDIzICs1MDEsMjYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6Z2V0R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQ
cm9jZXNzUHJveHksIE0KIH0KICNlbmRpZgogCitib29sIFdlYlByb2Nlc3NQb29sOjpzX3VzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSBmYWxzZTsKKwogI2lmIEVOQUJMRShTRVJWSUNF
X1dPUktFUikKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25u
ZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm94eSwgUmVnaXN0
cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
QVNTRVJUX1VOVVNFRChwcm94eSwgJnByb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwot
Ci0gICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5n
Tm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIGF1dG8qIHdl
YnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNl
c3Npb25JRChzZXNzaW9uSUQpOworICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAg
d2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5w
dHIoKTsKKyAgICBpZiAoIXByb2Nlc3NQb29scygpLnNpemUoKSkKKyAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFJlZjxXZWJQcm9jZXNzUG9vbD4+IHNlcnZpY2VXb3JrZXJQcm9jZXNzUG9v
bChXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpj
cmVhdGUoKS5nZXQoKSkpOwogCi0gICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAg
IGlmICghbV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3Jl
ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0g
ICAgICAgIHdlYnNpdGVEYXRhU3RvcmUgPSBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7Ci0gICAg
fQorICAgIC8vIEFyYml0cmFyaWx5IGNob29zZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sIHRvIGhv
c3QgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCisgICAgYXV0byogcHJvY2Vzc1Bvb2wgPSBw
cm9jZXNzUG9vbHMoKVswXTsKKyAgICBBU1NFUlQocHJvY2Vzc1Bvb2wpOwogCiAgICAgV2ViUHJv
Y2Vzc1Byb3h5KiBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5IHsgbnVsbHB0ciB9OwotICAgIGlm
ICghbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7Ci0gICAgICAgIGZvciAoYXV0
byYgcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7Ci0gICAgICAgICAgICBpZiAocHJvY2VzcyA9PSBt
X3ByZXdhcm1lZFByb2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94eSgpKQorCisg
ICAgaWYgKCFzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBwcm9jZXNzIDogcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2VzKSB7CisgICAgICAgICAg
ICBpZiAocHJvY2VzcyA9PSBwcm9jZXNzUG9vbC0+bV9wcmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nl
c3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIGlmICgmcHJvY2Vzcy0+d2Vic2l0ZURhdGFTdG9yZSgpICE9IHdlYnNpdGVEYXRh
U3RvcmUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC04MjUsMzUgKzUyOCwzNSBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0
d29ya1Byb2Nlc3MoTmV0d29ya1BybwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5ID0gcHJvY2Vzcy5nZXQoKTsKLSAgICAg
ICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VXb3JrZXJzKHVz
ZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpKTsKKyAgICAg
ICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VXb3JrZXJzKHBy
b2Nlc3NQb29sLT51c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtl
cnMoKSk7CiAKLSAgICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9X
RUQoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3
b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdlYiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQ
SUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9S
RUxFQVNFX0xPR19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29y
a2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIHJldXNpbmcgYW4gZXhpc3Rpbmcg
d2ViIHByb2Nlc3MgKHByb2Nlc3M9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1By
b3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5KSB7Ci0gICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5ID0gV2ViUHJv
Y2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2VycygqdGhpcywgV1RGTW92ZShyZWdpc3Ry
YWJsZURvbWFpbiksICp3ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgYXV0byBuZXdQcm9jZXNz
UHJveHkgPSBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZUZvclNlcnZpY2VXb3JrZXJzKCpwcm9jZXNz
UG9vbCwgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksICp3ZWJzaXRlRGF0YVN0b3JlKTsKICAg
ICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9IG5ld1Byb2Nlc3NQcm94eS5wdHIoKTsK
IAotICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFNlcnZpY2VX
b3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3Mg
Y3JlYXRpbmcgYSBuZXcgc2VydmljZSB3b3JrZXIgcHJvY2VzcyAocHJvY2VzPSVwLCBQSUQ9JWQp
Iiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+
cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9H
X0lGX0FMTE9XRURfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0
Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgY3JlYXRpbmcgYSBuZXcgc2VydmljZSB3b3JrZXIg
cHJvY2VzcyAocHJvY2VzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwg
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAKLSAgICAg
ICAgaW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJvY2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0
b3JlKTsKLSAgICAgICAgbV9wcm9jZXNzZXMuYXBwZW5kKFdURk1vdmUobmV3UHJvY2Vzc1Byb3h5
KSk7CisgICAgICAgIHByb2Nlc3NQb29sLT5pbml0aWFsaXplTmV3V2ViUHJvY2VzcyhuZXdQcm9j
ZXNzUHJveHksIHdlYnNpdGVEYXRhU3RvcmUpOworICAgICAgICBwcm9jZXNzUG9vbC0+bV9wcm9j
ZXNzZXMuYXBwZW5kKFdURk1vdmUobmV3UHJvY2Vzc1Byb3h5KSk7CiAgICAgfQogCi0gICAgQVNT
RVJUKCFtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHkpKTsKLSAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYWRkKCpzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5KTsKKyAgICBBU1NFUlQoIXNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5j
b250YWlucygqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkpOworICAgIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzZXMoKS5hZGQoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpOwogCi0gICAgc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eS0+ZXN0YWJsaXNoU2VydmljZVdvcmtlckNvbnRleHQobV9zZXJ2
aWNlV29ya2VyUHJlZmVyZW5jZXMgPyBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcy52YWx1ZSgp
IDogbV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLnN0b3JlKCksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICBpZiAoIW1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051
bGwoKSkKLSAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtl
clVzZXJBZ2VudChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOworICAgIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KHByb2Nlc3NQb29sLT5t
X3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA/IHByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJQ
cmVmZXJlbmNlcy52YWx1ZSgpIDogcHJvY2Vzc1Bvb2wtPm1fZGVmYXVsdFBhZ2VHcm91cC0+cHJl
ZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgaWYg
KCFwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50LmlzTnVsbCgpKQorICAgICAg
ICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KHBy
b2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOwogfQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjpyZW1vdmVGcm9tU2VydmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkm
IHByb2Nlc3MpCiB7Ci0gICAgQVNTRVJUKG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb250YWlu
cyhwcm9jZXNzKSk7Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLnJlbW92ZShwcm9jZXNz
KTsKKyAgICBBU1NFUlQoc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5zKHByb2Nlc3Mp
KTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkucmVtb3ZlKHByb2Nlc3MpOwogfQogI2Vu
ZGlmCiAKQEAgLTkyMiw3ICs2MjUsNyBAQCBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBXZWJQcm9j
ZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZQogI2lmIFBM
QVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQogICAgIC8vIEluIHBsYXRmb3JtcyB1c2luZyBC
dWJibGV3cmFwIGZvciBzYW5kYm94aW5nLCBwcmV3YXJtZWQgcHJvY2VzcyBpcyBsYXVuY2hlZCB1
c2luZyB0aGUgV2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlLAogICAgIC8v
IHNvIHdlIGRvbid0IHVzZSBpdCBpbiBjYXNlIG9mIHVzaW5nIGEgZGlmZmVyZW50IFdlYnNpdGVE
YXRhU3RvcmUuCi0gICAgaWYgKG1fc2FuZGJveEVuYWJsZWQgJiYgbV93ZWJzaXRlRGF0YVN0b3Jl
ICYmIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSAhPSAmd2Vic2l0ZURhdGFTdG9yZSkKKyAgICBp
ZiAobV9zYW5kYm94RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIApA
QCAtMTAzMiw4ICs3MzUsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjppbml0aWFsaXplTmV3V2Vi
UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIFdlYnNpdGVEYQogICAgICAgICBwcm9j
ZXNzLmlzUmVzcG9uc2l2ZShbaW5pdGlhbGl6YXRpb25BY3Rpdml0eSA9IFdURk1vdmUoaW5pdGlh
bGl6YXRpb25BY3Rpdml0eSldIChib29sKSB7IH0pOwogICAgIH0pOwogCi0gICAgZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKTsKLQogICAgIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1l
dGVyczsKIAogICAgIHBhcmFtZXRlcnMuaW5qZWN0ZWRCdW5kbGVQYXRoID0gbV9yZXNvbHZlZFBh
dGhzLmluamVjdGVkQnVuZGxlUGF0aDsKQEAgLTExOTgsOSArODk5LDYgQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkqIHByb2Nl
c3MpCiAgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+aWdub3JlVGltZW91dHNGb3JUZXN0
aW5nKCk7CiAKICAgICBtX2Nvbm5lY3Rpb25DbGllbnQuZGlkQ3JlYXRlQ29ubmVjdGlvbih0aGlz
LCBwcm9jZXNzLT53ZWJDb25uZWN0aW9uKCkpOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9y
ZSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5kaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcygp
OwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNz
UHJveHkqIHByb2Nlc3MpCkBAIC0xMjk1LDEwICs5OTMsNyBAQCBSZWY8V2ViUGFnZVByb3h5PiBX
ZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBSZWY8
QVBJOgogICAgIGlmICghcGFnZUNvbmZpZ3VyYXRpb24tPndlYnNpdGVEYXRhU3RvcmUoKSkgewog
ICAgICAgICAvLyBXZSB0cnkgdG8gYXZvaWQgY3JlYXRpbmcgdGhlIGRlZmF1bHQgZGF0YSBzdG9y
ZSBhcyBsb25nIGFzIHBvc3NpYmxlLgogICAgICAgICAvLyBCdXQgaWYgdGhlcmUgaXMgYW4gYXR0
ZW1wdCB0byBjcmVhdGUgYSB3ZWIgcGFnZSB3aXRob3V0IGFueSBzcGVjaWZpZWQgZGF0YSBzdG9y
ZSwgdGhlbiB3ZSBoYXZlIHRvIGNyZWF0ZSBpdC4KLSAgICAgICAgaWYgKCFtX3dlYnNpdGVEYXRh
U3RvcmUpCi0gICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLQotICAgICAgICBwYWdlQ29uZmln
dXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZShtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCkpOwor
ICAgICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZShXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKSk7CiAgICAgfQogCiAgICAg
UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzczsKQEAgLTEzMjksNyArMTAyNCw3IEBAIFJl
ZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQm
IHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIGlm
ICghbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMpIHsKICAgICAgICAgbV9zZXJ2aWNlV29ya2Vy
UHJlZmVyZW5jZXMgPSBwYWdlLT5wcmVmZXJlbmNlc1N0b3JlKCk7Ci0gICAgICAgIGZvciAoYXV0
byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMpCisgICAg
ICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzKCkpCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVTZXJ2aWNlV29y
a2VyUHJlZmVyZW5jZXNTdG9yZSgqbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMpOwogICAgIH0K
ICAgICBpZiAodXNlckNvbnRlbnRDb250cm9sbGVyKQpAQCAtMTM1Niw3ICsxMDUxLDcgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25zdCBTdHJp
bmcmIHVzZXJBZ2VudCkKICAgICBpZiAobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50ID09IHVzZXJB
Z2VudCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9IHVz
ZXJBZ2VudDsKLSAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNl
V29ya2VyUHJvY2Vzc2VzKQorICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBz
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzLnNl
dFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KICNl
bmRpZgpAQCAtMTM2NSwxNSArMTA2MCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdp
blVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJCiB7CiAg
ICAgYXV0byByZXN1bHQgPSBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAuYWRkKGRhdGFTdG9yZS5zZXNz
aW9uSUQoKSwgSGFzaFNldDxXZWJQYWdlUHJveHlJZGVudGlmaWVyPigpKS5pdGVyYXRvci0+dmFs
dWUuYWRkKHBhZ2VJRCk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0Vu
dHJ5KTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwotICAg
IGlmIChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewot
ICAgICAgICBBU1NFUlQoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IGRhdGFTdG9yZS5wYXJh
bWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCA9PSBzZXNzaW9uSUQp
OwotICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKGRhdGFTdG9yZSkpOwotICAgICAgICAgICAgZGF0
YVN0b3JlLmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgIH0KIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUVuZFVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJv
eHlJZGVudGlmaWVyIHBhZ2VJRCwgV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKQpAQCAtMTQw
MSw3ICsxMDg3LDYgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzUGFnZXNVc2luZ1dlYnNpdGVE
YXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKQogRG93bmxvYWRQcm94eSYgV2Vi
UHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFn
ZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQogewogICAgIGF1dG8mIGRvd25sb2FkUHJv
eHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcmVxdWVzdCwgaW5pdGlhdGluZ1Bh
Z2UsIHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Np
b25JRCgpOwogCiAgICAgT3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+IGlzQXBw
Qm91bmQgPSBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbjo6Tm87CiAgICAgaWYgKGluaXRpYXRp
bmdQYWdlKSB7CkBAIC0xNDExLDI2ICsxMDk2LDIzIEBAIERvd25sb2FkUHJveHkmIFdlYlByb2Nl
c3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94
CiAjZW5kaWYKICAgICB9CiAKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBS
ZXNvdXJjZVJlcXVlc3QgdXBkYXRlZFJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAgIC8vIFJlcXVl
c3QncyBmaXJzdFBhcnR5Rm9yQ29va2llcyB3aWxsIGJlIHVzZWQgYXMgT3JpZ2luYWwgVVJMIG9m
IHRoZSBkb3dubG9hZCByZXF1ZXN0LgotICAgICAgICAvLyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRv
cCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KLSAgICAgICAgaWYgKGluaXRpYXRpbmdQYWdlKSB7Ci0g
ICAgICAgICAgICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwgPSBVUkwgeyBVUkwgeyB9LCBpbml0aWF0
aW5nUGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07Ci0gICAgICAgICAgICB1cGRhdGVkUmVx
dWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7Ci0gICAgICAg
ICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGFyZVJlZ2lzdHJhYmxlRG9tYWluc0Vx
dWFsKGluaXRpYXRpbmdQYWdlVVJMLCByZXF1ZXN0LnVybCgpKSk7Ci0gICAgICAgICAgICBpZiAo
IXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFn
ZW50KSkKLSAgICAgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGlu
aXRpYXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tp
ZXMoVVJMKCkpOwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxz
ZSk7Ci0gICAgICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChI
VFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKLSAgICAgICAgICAgICAgICB1cGRhdGVkUmVxdWVz
dC5zZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZhbHNlKTsKLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRv
d25sb2FkUmVxdWVzdChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1cGRh
dGVkUmVxdWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsKLSAgICAgICAg
cmV0dXJuIGRvd25sb2FkUHJveHk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0
KHJlcXVlc3QpOworICAgIC8vIFJlcXVlc3QncyBmaXJzdFBhcnR5Rm9yQ29va2llcyB3aWxsIGJl
IHVzZWQgYXMgT3JpZ2luYWwgVVJMIG9mIHRoZSBkb3dubG9hZCByZXF1ZXN0LgorICAgIC8vIFdl
IHNldCB0aGUgdmFsdWUgdG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJMLgorICAgIGlmIChpbml0
aWF0aW5nUGFnZSkgeworICAgICAgICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwgPSBVUkwgeyBVUkwg
eyB9LCBpbml0aWF0aW5nUGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07CisgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsK
KyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3RyYWJsZURvbWFp
bnNFcXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOworICAgICAgICBpZiAo
IXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFn
ZW50KSkKKyAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlh
dGluZ1BhZ2UtPnVzZXJBZ2VudEZvclVSTChyZXF1ZXN0LnVybCgpKSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoVVJMKCkpOwor
ICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKKyAgICAgICAgaWYg
KCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJB
Z2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KFdlYlBh
Z2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7CiAgICAgfQorICAgIHVwZGF0ZWRSZXF1ZXN0
LnNldElzVG9wU2l0ZShmYWxzZSk7CisgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25sb2FkUmVxdWVzdChkYXRhU3RvcmUuc2Vz
c2lvbklEKCksIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1cGRhdGVkUmVxdWVzdCwgaXNB
cHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsKIAogICAgIHJldHVybiBkb3dubG9hZFBy
b3h5OwogfQpAQCAtMTQzOCwxNyArMTEyMCwxMiBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNz
UG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveAog
RG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKFdlYnNpdGVEYXRh
U3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgQVBJ
OjpEYXRhJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgYXV0byYgZG93
bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBSZXNvdXJjZVJlcXVl
c3QoKSwgaW5pdGlhdGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
ID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwogCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
IHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAgICAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNpb246
OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAobmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5
LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hF
eHRlbnNpb25IYW5kbGUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7Ci0gICAg
fQotCisgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgZG93bmxvYWRQ
cm94eS5kb3dubG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlKSwgMCk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CiAK
QEAgLTE1MTcsMTEgKzExOTQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWZyZXNoUGx1Z2lu
cygpCiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAotUHJvY2Vzc0lE
IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQotewotICAgIHJldHVy
biBtX25ldHdvcmtQcm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIo
KSA6IDA7Ci19Ci0KIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6cHJld2FybWVkUHJvY2Vzc0lk
ZW50aWZpZXIoKQogewogICAgIHJldHVybiBtX3ByZXdhcm1lZFByb2Nlc3MgPyBtX3ByZXdhcm1l
ZFByb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCkgOiAwOwpAQCAtMTUzNiwxNCArMTIwOCwxNiBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjphY3RpdmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JU
ZXN0aW5nKFByb2Nlc3NJRCBwaWQsIENvbQogICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiB9
CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGlu
ZyhTZWNvbmRzIHNlY29uZHMpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRTZXJ2aWNlV29ya2Vy
VGltZW91dEZvclRlc3RpbmcoU2Vjb25kcykKIHsKLSAgICBzZW5kU3luY1RvTmV0d29ya2luZ1By
b2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1l
b3V0Rm9yVGVzdGluZyhzZWNvbmRzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2
aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSk7CisgICAgLy8gRklYTUU6
IERvIHNvbWV0aGluZyBoZXJlLgorICAgIC8vIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JU
ZXN0aW5nKHNlY29uZHMpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3Jr
ZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoKQogewotICAgIHNlbmRT
eW5jVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2Vy
dmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpKTsK
KyAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCisgICAgLy8gc2VuZFN5bmNUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2Vy
RmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0
U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCkpOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXRBbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aChib29sIGFs
d2F5c1VzZUNvbXBsZXhUZXh0KQpAQCAtMTU2OCwxNCArMTI0MiwxOCBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1l
KQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNj
aGVtZUFzU2VjdXJlKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSkpOwotICAg
IHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0
ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpm
b3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0
YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSks
IDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVt
ZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1l
KQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNj
aGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSk7CiAgICAgc2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFz
QnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hl
bWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpKTsKKyAgICBXZWJz
aXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0
ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlw
YXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSksIDApOworICAgIH0pOwogfQog
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJM
U2NoZW1lKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTU4OCwxNCArMTI2NiwxOCBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwoY29uc3QgU3RyaW5n
JiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJl
Z2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVt
ZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRh
U3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0
b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxT
Y2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJV
UkxTY2hlbWVBc05vQWNjZXNzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2Fj
eUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3Mo
dXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6
OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3
b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1l
QXNOb0FjY2Vzcyh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vi
c2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7
CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSwgMCk7Cisg
ICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNw
bGF5SXNvbGF0ZWQoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNjE2LDEwICsxMjk4LDgg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1
c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2xvYmFs
VVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkuYWRkKHVybFNjaGVtZSk7Ci0g
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3Vz
dG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9j
ZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1
cmxTY2hlbWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJM
U2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgdXJsU2No
ZW1lKQpAQCAtMTYyOCwxMCArMTMwOCw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0
ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycygpLnJlbW92ZSh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBh
bGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT51bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAg
ICB9CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6
YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3Rl
clNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0
cmluZyYgdXJsU2NoZW1lKQpAQCAtMTY2NSwxNiArMTM0MywxNCBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXRDYWNoZU1vZGVsKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIAogICAgIHNlbmRUb0Fs
bFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVs
KSk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2Rl
bCksIDApOworICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KIH0KIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKENhY2hlTW9k
ZWwgY2FjaGVNb2RlbCkKIHsKICAgICB1cGRhdGVCYWNrRm9yd2FyZENhY2hlQ2FwYWNpdHkoKTsK
IAotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91
c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCB7IH0pOworICAgIC8vIEZJWE1FOiBEbyBz
b21ldGhpbmcgaGVyZS4KIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVl
c3RUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE2ODQsMTIgKzEz
NjAsMTIgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50
ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKIAogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vz
c1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQ
YWdlLCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8pCiB7Ci0gICAgcmV0dXJuIGVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3Qs
IGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKKyAgICByZXR1cm4gZGF0YVN0b3JlLm5ldHdv
cmtQcm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsICp0aGlzLCByZXF1ZXN0
LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQogewotICAgIGVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsK
KyAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmFkZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlJlY2VpdmVyTmFtZSBtZXNzYWdlUmVjZWl2ZXJO
YW1lLCBJUEM6Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQpAQCAtMTc2MCwzMCAr
MTQzNiw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN0b3BNZW1vcnlTYW1wbGVyKCkKICAgICBz
ZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlN0b3BNZW1vcnlTYW1wbGVy
KCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBVJiYgcmVw
bHkpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2Fu
U2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoc3RkOjpm
b3J3YXJkPFQ+KG1lc3NhZ2UpLCBzdGQ6OmZvcndhcmQ8VT4ocmVwbHkpLCAwKTsKLX0KLQotdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyhjb25zdCBQQUw6OlNlc3Np
b25JRCYgc2Vzc2lvbklEKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNo
ZWRDcmVkZW50aWFscyhzZXNzaW9uSUQpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6
dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQotewotICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
KCk7Ci0KLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBtX25ldHdvcmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNz
ID0gbnVsbHB0cjsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlQWxsV2ViQ29u
dGVudFByb2Nlc3NlcygpCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+PiBw
cm9jZXNzZXMgPSBtX3Byb2Nlc3NlczsKQEAgLTE3OTEsNTcgKzE0NDMsMzQgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6dGVybWluYXRlQWxsV2ViQ29udGVudFByb2Nlc3NlcygpCiAgICAgICAgIHBy
b2Nlc3MtPnRlcm1pbmF0ZSgpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29y
a1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQot
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoKTsKLQotICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnNlbmRQcmVwYXJlVG9TdXNwZW5kKElzU3VzcGVuc2lvbkltbWluZW50OjpObywgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCkKLXsKLSAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NX
aWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpCi17Ci0gICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7
Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCkKIHsK
ICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyk7Ci0gICAgd2hpbGUgKG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb21wdXRl
U2l6ZSgpKQotICAgICAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYmVnaW4oKS0+ZGlzYWJs
ZVNlcnZpY2VXb3JrZXJzKCk7CisgICAgd2hpbGUgKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5j
b21wdXRlU2l6ZSgpKQorICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuYmVnaW4oKS0+
ZGlzYWJsZVNlcnZpY2VXb3JrZXJzKCk7CiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9v
bDo6Zmx1c2hDb29raWVzKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBlbnN1cmVOZXR3
b3JrUHJvY2VzcygpLmZsdXNoQ29va2llcyhzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3luY0xvY2FsU3RvcmFnZShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgc2VuZFN5
bmNUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xvY2Fs
U3RvcmFnZSgpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3JhZ2U6OlJl
cGx5KCkpOworICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KKyAgICAvLyBzZW5kU3lu
Y1RvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5jTG9jYWxT
dG9yYWdlKCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZTo6UmVw
bHkoKSk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6Q2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UoKSwgMCk7CisgICAg
Ly8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAgIC8vIGlmIChtX25ldHdvcmtQcm9jZXNz
KQorICAgIC8vICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpDbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZSgpLCAwKTsKICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphbGxvd1NwZWNp
ZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJbmZvKiBjZXJ0
aWZpY2F0ZSwgY29uc3QgU3RyaW5nJiBob3N0KQogewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlm
aWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKKyAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUu
CisgICAgLy8gbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlm
aWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRl
QXV0b21hdGlvbkNhcGFiaWxpdGllcygpIGNvbnN0CkBAIC0yMTE4LDE1ICsxNzQ3LDE5IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnJlcG9ydFdlYkNvbnRlbnRDUFVUaW1lKFNlY29uZHMgY3B1VGlt
ZSwgdWludDY0X3QgYWN0aXZpdHlTCiAjZW5kaWYKIH0KIAorV2Vha0hhc2hTZXQ8V2ViUHJvY2Vz
c1Byb3h5PiYgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKQoreworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+PiBwcm9j
ZXNzZXM7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKwogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbnMoKQogewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOworICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVy
ZS4KICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gQ2hlY2sgb24gbmV4dCBydW4g
bG9vcCBzaW5jZSB0aGUgd2ViIHByb2Nlc3MgcHJveHkgdG9rZW5zIGFyZSBwcm9iYWJseSBiZWlu
ZyB1cGRhdGVkLgotICAgIGNhbGxPbk1haW5SdW5Mb29wKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKHRoaXMpXSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VX
b3JrZXJQcm9jZXNzZXMpCisgICAgY2FsbE9uTWFpblJ1bkxvb3AoW10geworICAgICAgICBmb3Ig
KGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQog
ICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclByb2Nl
c3NBc3NlcnRpb24oKTsKICAgICB9KTsKICNlbmRpZgpAQCAtMjEzNiw3ICsxNzY5LDcgQEAgYm9v
bCBXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29ya2VyUGFnZUlEKFdlYlBhZ2VQcm94eUlkZW50
aWZpZXIgcGFnZUlEKSBjb25zdAogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICAv
LyBGSVhNRTogVGhpcyBpcyBpbmVmZmljaWVudC4KLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3Nl
cnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtwYWdlSURdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1
cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtwYWdlSURdKGF1dG8mIHBy
b2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlclBhZ2VQcm94
eShwYWdlSUQpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMzU4LDE0ICsxOTkxLDYgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKQogfQog
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0ZU5hdmlnYXRpb25E
YXRhVHJhbnNmZXI6OkZsYWc+IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIFdlYlBhZ2VQcm94eUlk
ZW50aWZpZXIgd2ViUGFnZVByb3h5SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCkKLXsKLSAg
ICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmV0d29y
a1Byb2Nlc3MtPmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25J
RCwgZnJvbURvbWFpbiwgdG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQ
cm94eUlELCB3ZWJQYWdlSUQpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5z
V2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYm
IGRvbWFpbnMpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpTZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihkb21haW5zKSk7CkBAIC0yNDE2LDI3ICsy
MDQxLDI3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1ZGlibGVNZWRpYUFzc2VydGlv
bnMoKQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKIHsKLSAgICBpZiAo
bV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID09IHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MpCisgICAgaWYgKHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9
PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9
JWQpIiwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAgV0VCUFJPQ0VTU1BP
T0xfUkVMRUFTRV9MT0dfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcz0lZCkiLCB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIAotICAgIG1fdXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7Ci0gICAg
dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKLSAgICB0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcygp
OworICAgIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3M7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nl
c3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0
ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiBib29s
IFdlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVz
dGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJv
Y2Vzc2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBw
cm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCk7CiAg
ICAgfSk7CiB9CiAKIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJCYWNrZ3Jv
dW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjphbnlPZiht
X3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4g
V1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8mIHByb2Nlc3MpIHsK
ICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0
eUZvclRlc3RpbmcoKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5oCmluZGV4IDY3MzE1YmQ4ZjM3ZmM4ZDBkYmMwYjkxMjdhNjhmYzFiOGVjZjUxZjQu
LjNlNjVmYTQ2YTYxY2I5MDM0MDJhZDdhODJkZTYwOWY3NTRjNDhmZDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApAQCAtODEsNyArODEsNiBAQCBPQkpDX0NMQVNT
IFdLUHJlZmVyZW5jZU9ic2VydmVyOwogCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEF1dG9tYXRp
b25DbGllbnQ7Ci1jbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiBjbGFzcyBEb3du
bG9hZENsaWVudDsKIGNsYXNzIEhUVFBDb29raWVTdG9yZTsKIGNsYXNzIEluamVjdGVkQnVuZGxl
Q2xpZW50OwpAQCAtMTgwLDcgKzE3OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhpc3RvcnlD
bGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+JiYp
OwogICAgIHZvaWQgc2V0RG93bmxvYWRDbGllbnQoVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGll
bnQ+JiYpOwogICAgIHZvaWQgc2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJ
OjpBdXRvbWF0aW9uQ2xpZW50PiYmKTsKLSAgICB2b2lkIHNldExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ+JiYpOwogCiAgICAgdm9pZCBzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlk
ZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250
ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPmN1
c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpOyB9CkBAIC0xOTEsMTcgKzE4
OSw5IEBAIHB1YmxpYzoKICAgICAvLyBudWxsIGNoZWNrcyBpbiBXZWJQYWdlUHJveHkuCiAgICAg
V2ViUHJvY2Vzc1Byb3h5KiBkdW1teVByb2Nlc3NQcm94eShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpIGNvbnN0IHsgcmV0dXJuIG1fZHVtbXlQcm9jZXNzUHJveGllcy5nZXQoc2Vzc2lvbklEKS5n
ZXQoKTsgfQogCi0gICAgLy8gV2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2VzcyBhcyBhcHByb3Bv
cmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4gVGhlIGNvbm5lY3Rpb24gbXVzdCBiZSBu
b24tbnVsbC4KLSAgICBJUEM6OkNvbm5lY3Rpb24qIG5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlv
bigpOwotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9BbGxQcm9jZXNzZXMo
Y29uc3QgVCYgbWVzc2FnZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9B
bGxQcm9jZXNzZXNGb3JTZXNzaW9uKGNvbnN0IFQmIG1lc3NhZ2UsIFBBTDo6U2Vzc2lvbklEKTsK
IAotICAgIC8vIFNlbmRzIHRoZSBtZXNzYWdlIHRvIFdlYlByb2Nlc3Mgb3IgTmV0d29ya1Byb2Nl
c3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9kZWwuCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSk7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gdm9pZCBzZW5kU3luY1RvTmV0
d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UsIFUmJiByZXBseSk7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3Nh
cnkoVCYmIG1lc3NhZ2UpOwotCiAgICAgdm9pZCBwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdl
YlByb2Nlc3NQcm94eSopOwogCiAgICAgV2ViUHJvY2Vzc0NhY2hlJiB3ZWJQcm9jZXNzQ2FjaGUo
KSB7IHJldHVybiBtX3dlYlByb2Nlc3NDYWNoZS5nZXQoKTsgfQpAQCAtMjA5LDkgKzE5OSw2IEBA
IHB1YmxpYzoKICAgICAvLyBEaXNjb25uZWN0IHRoZSBwcm9jZXNzIGZyb20gdGhlIGNvbnRleHQu
CiAgICAgdm9pZCBkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqKTsKIAotICAgIFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZSogd2Vic2l0ZURhdGFTdG9yZSgpIGNvbnN0IHsgcmV0dXJu
IG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0UHJpbWFyeURhdGFTdG9y
ZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeyBtX3dlYnNpdGVEYXRhU3Rv
cmUgPSAmZGF0YVN0b3JlOyB9Ci0KICAgICBSZWY8V2ViUGFnZVByb3h5PiBjcmVhdGVXZWJQYWdl
KFBhZ2VDbGllbnQmLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJik7CiAKICAgICB2b2lk
IHBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBX
ZWJzaXRlRGF0YVN0b3JlJik7CkBAIC0yNjIsMTAgKzI0OSw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGFkZFN1cHBvcnRlZFBsdWdpbihTdHJpbmcmJiBtYXRjaGluZ0RvbWFpbiwgU3RyaW5nJiYgbmFt
ZSwgSGFzaFNldDxTdHJpbmc+JiYgbWltZVR5cGVzLCBIYXNoU2V0PFN0cmluZz4gZXh0ZW5zaW9u
cyk7CiAgICAgdm9pZCBjbGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIAotICAgIFByb2Nlc3NJRCBu
ZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKICAgICBQcm9jZXNzSUQgcHJld2FybWVkUHJvY2Vz
c0lkZW50aWZpZXIoKTsKICAgICB2b2lkIGFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0Zv
clRlc3RpbmcoUHJvY2Vzc0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+
JiYpPiYmKTsKLSAgICBib29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5n
KGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0
aW5nKFNlY29uZHMpOwogICAgIHZvaWQgcmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3Rp
bmcoKTsKIApAQCAtMzA5LDggKzI5NCw2IEBAIHB1YmxpYzoKICAgICBBUEk6OkxlZ2FjeUNvbnRl
eHRIaXN0b3J5Q2xpZW50JiBoaXN0b3J5Q2xpZW50KCkgeyByZXR1cm4gKm1faGlzdG9yeUNsaWVu
dDsgfQogICAgIFdlYkNvbnRleHRDbGllbnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9
CiAKLSAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gKm1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50OyB9Ci0KICAgICBzdHJ1Y3QgU3RhdGlzdGljcyB7CiAgICAgICAgIHVuc2lnbmVkIHdrVmll
d0NvdW50OwogICAgICAgICB1bnNpZ25lZCB3a1BhZ2VDb3VudDsKQEAgLTMyNiw3ICszMDksNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKICAgICB2
b2lkIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiAKLSAgICB2b2lkIGZsdXNoQ29va2llcyhj
b25zdCBQQUw6OlNlc3Npb25JRCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAg
dm9pZCBzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFj
ayk7CiAgICAgdm9pZCBjbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spOwogCkBAIC0zOTQsMTkgKzM3NiwxMyBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50Ci0g
ICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFT
dG9yZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUgPSBudWxscHRyKTsKLSAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5KiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3Mu
Z2V0KCk7IH0KICAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1By
b3h5Jik7CiAKLSAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNz
UHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb25EZWxheWVkUmVwbHkmJik7Ci0KICAgICBib29sIGlzU2VydmljZVdvcmtlclBhZ2VJRChX
ZWJQYWdlUHJveHlJZGVudGlmaWVyKSBjb25zdDsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
Ci0gICAgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nl
c3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBB
TDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHN0YXRpYyB2
b2lkIGVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3
b3JrUHJvY2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNz
aW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCByZW1vdmVGcm9t
U2VydmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkmKTsKLSAgICBzaXplX3Qgc2Vy
dmljZVdvcmtlclByb3hpZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VydmljZVdvcmtlclBy
b2Nlc3Nlcy5jb21wdXRlU2l6ZSgpOyB9Ci0gICAgdm9pZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZUZvclNlcnZpY2VXb3JrZXIoYm9vbCBhbGxvd3MpIHsgbV9hbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZUZvclNlcnZpY2VXb3JrZXIgPSBhbGxvd3M7IH0KLSAgICBib29sIGFsbG93c0FueVNTTENl
cnRpZmljYXRlRm9yU2VydmljZVdvcmtlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOyB9CisgICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQ
cm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29t
cHV0ZVNpemUoKTsgfQogICAgIHZvaWQgdXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25z
dCBTdHJpbmcmIHVzZXJBZ2VudCk7CiAgICAgY29uc3QgT3B0aW9uYWw8VXNlckNvbnRlbnRDb250
cm9sbGVySWRlbnRpZmllcj4mIHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2
aWNlV29ya2VycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JT
ZXJ2aWNlV29ya2VyOyB9CiAgICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2
aXR5Rm9yVGVzdGluZygpIGNvbnN0OwpAQCAtNTA0LDcgKzQ4MCw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCk7CiAKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIHZvaWQgZGlkQ29tbWl0Q3Jvc3NTaXRlTG9h
ZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYg
dG9Eb21haW4sIE9wdGlvblNldDxXZWJDb3JlOjpDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5z
ZmVyOjpGbGFnPiwgV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZp
ZXIpOwogICAgIHZvaWQgc2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJik7CiAgICAgdm9pZCBzZWVkUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0ZvclRlc3RpbmcoY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIGZpcnN0
UGFydHlEb21haW4sIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiB0aGlyZFBhcnR5
RG9tYWluLCBib29sIHNob3VsZFNjaGVkdWxlTm90aWZpY2F0aW9uLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOwogICAgIHZvaWQgc2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1t
ZWRpYXRlbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKQEAgLTUzMSw4ICs1MDYsOCBA
QCBwdWJsaWM6CiAgICAgCiAgICAgUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXImIHBsdWdJbkF1dG9T
dGFydFByb3ZpZGVyKCkgeyByZXR1cm4gbV9wbHVnSW5BdXRvU3RhcnRQcm92aWRlcjsgfQogCi0g
ICAgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOwotICAgIGJv
b2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQorICAgIHN0YXRpYyB2b2lkIHNldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCk7CisgICAgc3RhdGljIGJvb2wgdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIHsgcmV0dXJuIHNfdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzczsgfQogCiAjaWYgRU5BQkxFKENGUFJFRlNfRElSRUNUX01PREUpCiAgICAg
dm9pZCBub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQoY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBPcHRpb25hbDxTdHJpbmc+JiBlbmNvZGVkVmFsdWUpOwpAQCAt
NTQ5LDYgKzUyNCwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENF
bmRwb2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVz
c2FnZSk7CiAjZW5kaWYKIAorICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGlj
IFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOwor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3Jh
Z2VEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgp
OworICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0
YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJp
bmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAg
ICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCkBAIC01NjIsOCArNTQ4LDYgQEAgcHJpdmF0
ZToKICAgICBXZWJQcm9jZXNzUHJveHkmIGNyZWF0ZU5ld1dlYlByb2Nlc3MoV2Vic2l0ZURhdGFT
dG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6Oklz
UHJld2FybWVkOjpObyk7CiAgICAgdm9pZCBpbml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9j
ZXNzUHJveHkmLCBXZWJzaXRlRGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1l
ZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKIAotICAgIHZvaWQgcGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmKTsKLQogICAgIHZvaWQgaGFuZGxlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHkpOwogICAgIHZv
aWQgaGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChVc2VyRGF0YSYmKT4mJik7CiAKQEAgLTU4NywxNCArNTcxLDYgQEAgcHJpdmF0
ZToKIAogICAgIGJvb2wgdXNlc1NpbmdsZVdlYlByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2Nv
bmZpZ3VyYXRpb24tPnVzZXNTaW5nbGVXZWJQcm9jZXNzKCk7IH0KIAotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgc3RhdGljIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0g
ICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3Ry
aW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHdlYkNv
bnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBv
cmFyeURpcmVjdG9yeSgpOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lk
IHJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyTm90
aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CkBAIC02MzYsOSArNjEyLDggQEAgcHJpdmF0ZToKICAgICBI
YXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWFrUHRyPFdlYlByb2Nlc3NQcm94eT4+IG1fZHVtbXlQ
cm9jZXNzUHJveGllczsgLy8gTGlnaHR3ZWlnaHQgV2ViUHJvY2Vzc1Byb3h5IG9iamVjdHMgd2l0
aG91dCBiYWNraW5nIHByb2Nlc3MuCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAg
V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXM7Cisg
ICAgc3RhdGljIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoKTsKICAgICBib29sIG1fd2FpdGluZ0ZvcldvcmtlckNvbnRleHRQcm9jZXNzQ29ubmVj
dGlvbiB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vy
dmljZVdvcmtlciB7IGZhbHNlIH07CiAgICAgU3RyaW5nIG1fc2VydmljZVdvcmtlclVzZXJBZ2Vu
dDsKICAgICBPcHRpb25hbDxXZWJQcmVmZXJlbmNlc1N0b3JlPiBtX3NlcnZpY2VXb3JrZXJQcmVm
ZXJlbmNlczsKICAgICBPcHRpb25hbDxVc2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyPiBt
X3VzZXJDb250ZW50Q29udHJvbGxlcklERm9yU2VydmljZVdvcmtlcjsKQEAgLTY1NCw3ICs2Mjks
NiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+
IG1fYXV0b21hdGlvbkNsaWVudDsKICAgICBVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4g
bV9kb3dubG9hZENsaWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0
SGlzdG9yeUNsaWVudD4gbV9oaXN0b3J5Q2xpZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6
OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQ7CiAKICAgICBSZWZQdHI8V2ViQXV0b21hdGlvblNlc3Npb24+IG1fYXV0b21hdGlvblNlc3Np
b247CiAKQEAgLTY4Niw4ICs2NjAsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9tZW1vcnlTYW1w
bGVyRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgZG91YmxlIG1fbWVtb3J5U2FtcGxlckludGVydmFs
IHsgMTQwMC4wIH07CiAKLSAgICBSZWZQdHI8V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlPiBtX3dl
YnNpdGVEYXRhU3RvcmU7Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIFJlZlB0
cjxXZWJDb250ZXh0U3VwcGxlbWVudD4sIFB0ckhhc2g8Y29uc3QgY2hhcio+PiBXZWJDb250ZXh0
U3VwcGxlbWVudE1hcDsKICAgICBXZWJDb250ZXh0U3VwcGxlbWVudE1hcCBtX3N1cHBsZW1lbnRz
OwogCkBAIC03MjAsOCArNjkyLDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9wcm9jZXNzVGVy
bWluYXRpb25FbmFibGVkIHsgdHJ1ZSB9OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQ
cm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7Ci0KICAgICBIYXNoTWFwPHVpbnQ2NF90LCBS
ZWZQdHI8RGljdGlvbmFyeUNhbGxiYWNrPj4gbV9kaWN0aW9uYXJ5Q2FsbGJhY2tzOwogCiAjaWYg
VVNFKFNPVVApCkBAIC04MjYsNyArNzk2LDcgQEAgcHJpdmF0ZToKICNlbHNlCiAgICAgYm9vbCBt
X2lzRGVsYXllZFdlYlByb2Nlc3NMYXVuY2hEaXNhYmxlZCB7IGZhbHNlIH07CiAjZW5kaWYKLSAg
ICBib29sIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyB7IGZhbHNlIH07CisgICAg
c3RhdGljIGJvb2wgc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwogCiAjaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluPiBtX2RvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uOwpAQCAtODM3LDIwICs4
MDcsNiBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpCi17
Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1l
c3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4o
bWVzc2FnZSksIDApOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBt
ZXNzYWdlKQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotfQotCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0
IFQmIG1lc3NhZ2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcAppbmRleCAwODNhN2U3OWE2ZGViZjBmMjk4Y2FjMjk5MmUyNzIzMGFhYjViMWFlLi5mN2Uw
YzFmNzY1ZjNiNDU3NTZkMGM4MDRhOTA4NjliMGE4YjkxOWRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTczNyw3ICs3MzcsNyBAQCB2b2lkIFdl
YlByb2Nlc3NQcm94eTo6Z2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24odWludDY0X3QgcGx1Z2lu
UHJvY2Vzc1Rva2VuLCBNZQogCiB2b2lkIFdlYlByb2Nlc3NQcm94eTo6Z2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC0+
Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CisgICAg
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CiB9CiAKICNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2Nv
YS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KaW5kZXggZWVlNzhmYmM5ODg2
NDk0NzZkMTA5NWI0OWNmMTA2YzE4NDQ1ZDI0NS4uOGI2ODk2MzQ4YzZmMmZkZmNmZGRlMTQ4ODk2
MDE1ZjM2MzJkNjQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW1wb3J0ICJDb29raWVTdG9yYWdlVXRpbHNDRi5oIgogI2ltcG9y
dCAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzUHJv
eHkuaCIKICNpbXBvcnQgIlNhbmRib3hVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlN0b3JhZ2VNYW5h
Z2VyLmgiCiAjaW1wb3J0ICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKQEAgLTQ0LDYg
KzQ1LDcgQEAKICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1By
b2Nlc3NQcml2aWxlZ2UuaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4KKyNpbXBvcnQgPHd0Zi9jb2Nv
YS9FbnRpdGxlbWVudHMuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC01NjMsNCArNTY1LDkgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZWluaXRpYWxpemVBcHBCb3VuZERvbWFpbnMoKQogfQogI2VuZGlmCiAKK2Jv
b2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rp
bmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKK3sKKyAgICByZXR1cm4gV1RGOjpoYXNFbnRp
dGxlbWVudChuZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBl
bnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCA0
ZjgwNTQyYTEyN2U2NDI5OWIxNTRhMWY1NmUyZDhmOTgwNDRjMWRjLi4xMTNmOWUzNDVmMmQ5OGFl
ZTViY2EyOGIzZDI1MzY3YzExNzkxMTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMzcsNiArMzcs
NyBAQAogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUg
IlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNsdWRlICJXZWJCYWNrRm9yd2FyZENhY2hlLmgi
CisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0Mklu
aXRpYWxpemUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9j
ZXNzQ2FjaGUuaCIKQEAgLTc1LDYgKzc2LDEwIEBACiAjaW5jbHVkZSAiU09BdXRob3JpemF0aW9u
Q29vcmRpbmF0b3IuaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAi
RGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogc3RhdGljIGJvb2wgYWxsb3dzV2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2luczsKQEAg
LTgzLDEzICs4OCwyOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFsbG93V2Vic2l0ZURhdGFS
ZWNvcmRzRm9yQWxsT3JpZ2lucygpCiAgICAgYWxsb3dzV2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxs
T3JpZ2lucyA9IHRydWU7CiB9CiAKLXN0YXRpYyBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJz
aXRlRGF0YVN0b3JlKj4mIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkKK3N0YXRpYyBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4mIGFsbERhdGFTdG9yZXMoKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPj4gbWFwOwogICAgIHJl
dHVybiBtYXA7CiB9CiAKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRh
U3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0YVN0b3JlJik+JiYgZnVuY3Rpb24pCit7Cisg
ICAgZm9yIChhdXRvKiBkYXRhU3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAg
ICAgIGZ1bmN0aW9uKCpkYXRhU3RvcmUpOworfQorCisvLyBGSVhNRTogUmVwbGFjZSB0aGlzIHdp
dGggdGhlIGNvcnJlY3Qgd2Vic2l0ZSBkYXRhIHN0b3Jlcy4KK1ZlY3RvcjxXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMo
KQoreworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gYWxsUGFyYW1ldGVy
czsKKyAgICBhbGxQYXJhbWV0ZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYWxsRGF0YVN0b3Jl
cygpLnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBzdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1
ZXMoKSkKKyAgICAgICAgYWxsUGFyYW1ldGVycy51bmNoZWNrZWRBcHBlbmQoc3RvcmUtPnBhcmFt
ZXRlcnMoKSk7CisgICAgcmV0dXJuIGFsbFBhcmFtZXRlcnM7Cit9CisKIFJlZjxXZWJzaXRlRGF0
YVN0b3JlPiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGVOb25QZXJzaXN0ZW50KCkKIHsKICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVDb25m
aWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpObyksIFBBTDo6U2Vzc2lvbklEOjpnZW5l
cmF0ZUVwaGVtZXJhbFNlc3Npb25JRCgpKSk7CkBAIC0xMTUsMTAgKzEzNiwxMSBAQCBXZWJzaXRl
RGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJh
dGlvbj4mJiBjb25maWd1cgogI2VuZGlmCiB7CiAgICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdl
cyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7
CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXpl
KCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIG5ldHdvcmtQcm9jZXNz
KCkuYWRkU2Vzc2lvbigqdGhpcyk7CiB9CiAKIFdlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0
YVN0b3JlKCkKQEAgLTEyOCwxNyArMTUwLDEyIEBAIFdlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRl
RGF0YVN0b3JlKCkKIAogICAgIHBsYXRmb3JtRGVzdHJveSgpOwogCi0gICAgaWYgKG1fc2Vzc2lv
bklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgQVNT
RVJUKG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsKLSAg
ICAgICAgbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOwotICAgICAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVt
b3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgQVNTRVJUKGFs
bERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOworICAgIGFsbERhdGFTdG9y
ZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOworICAgIG5ldHdvcmtQcm9jZXNzKCkucmVtb3ZlU2Vz
c2lvbihtX3Nlc3Npb25JRCk7CiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQotICAgICAgICBpZiAo
YXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0
ZWQoKSkKLSAgICAgICAgICAgIGdwdVByb2Nlc3NQcm94eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Np
b25JRCk7CisgICAgaWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94eSA9IEdQVVByb2Nlc3NQcm94eTo6
c2luZ2xldG9uSWZDcmVhdGVkKCkpCisgICAgICAgIGdwdVByb2Nlc3NQcm94eS0+cmVtb3ZlU2Vz
c2lvbihtX3Nlc3Npb25JRCk7CiAjZW5kaWYKIH0KIApAQCAtMTY5LDE3ICsxODYsMzIgQEAgYm9v
bCBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkKICAgICByZXR1cm4g
ISFnbG9iYWxEZWZhdWx0RGF0YVN0b3JlKCk7CiB9CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKQordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKQoreworICAgIGF1dG8gcmVzdWx0ID0gYWxsRGF0YVN0
b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQs
IHJlc3VsdC5pc05ld0VudHJ5KTsKK30KKworV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFT
dG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklEKQogewotICAgIGlmIChtX3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKSB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gbm9uRGVmYXVsdERhdGFTdG9yZXMo
KS5hZGQobV9zZXNzaW9uSUQsIHRoaXMpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwg
cmVzdWx0LmlzTmV3RW50cnkpOworICAgIHJldHVybiBhbGxEYXRhU3RvcmVzKCkuZ2V0KHNlc3Np
b25JRCk7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdv
cmtQcm9jZXNzKCkKK3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpIHsKKyAgICAgICAgaWYg
KG1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCisgICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNz
ID0gJmRlZmF1bHREYXRhU3RvcmUoKS0+bmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0
ZSgpOwogICAgIH0KKworICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKIH0KIAotV2Vic2l0
ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3Jl
Rm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK05ldHdvcmtQcm9jZXNzUHJv
eHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgPyBub25E
ZWZhdWx0RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4g
Y29uc3RfY2FzdDxXZWJzaXRlRGF0YVN0b3JlJj4oKnRoaXMpLm5ldHdvcmtQcm9jZXNzKCk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94
eSYgcHJvY2VzcykKQEAgLTE5NSwxMiArMjI3LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1
bnJlZ2lzdGVyUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiAgICAgbV9wcm9jZXNz
ZXMucmVtb3ZlKHByb2Nlc3MpOwogfQogCi1XZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURhdGFTdG9y
ZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpCi17Ci0gICAgYXV0byBw
b29scyA9IHByb2Nlc3NQb29scygxKTsKLSAgICByZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8gbnVs
bHB0ciA6IHBvb2xzLmJlZ2luKCktPmdldCgpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9oYXNSZXNvbHZl
ZERpcmVjdG9yaWVzKQpAQCAtNDQyLDE1ICs0NjgsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMs
IE8KICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJv
Y2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwog
ICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5v
bmUpIHsKICAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQ
cm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNz
UG9vbHMoKTsKKyAgICAgICAgLy8gRklYTUU6IEl0IG1pZ2h0IG5vdCBiZSBjb3JyZWN0IHRvIGl0
ZXJhdGUgdGhlIHBvb2xzIGhlcmUuCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
b29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsK
ICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAg
ICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
ICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOworICAgICAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNh
c2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CkBAIC00NTgsNyArNDgzLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiBkYXRhVHlwZXMsIE8KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpLT5mZXRjaFdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMs
IGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFdlYnNpdGVE
YXRhIHdlYnNpdGVEYXRhKSB7CisgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmZldGNoV2Vi
c2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0oV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsKICAgICAg
ICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjayhXVEZN
b3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNzI2LDE1
ICs3NTEsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICAgICBhdXRvIG5ldHdvcmtQcm9j
ZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVt
b3ZhbChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CiAgICAgaWYgKG5ldHdvcmtQcm9jZXNz
QWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkgewogICAgICAgICBhdXRvIHBv
b2xzID0gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09IFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVu
Y2ggPyBlbnN1cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nlc3NQb29scygpOworICAgICAgICAvLyBG
SVhNRTogSXQgbWlnaHQgbm90IGJlIGNvcnJlY3QgdG8gaXRlcmF0ZSBwb29scyBoZXJlLgogICAg
ICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRj
aCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NB
Y2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlw
ZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2Vzcyh0aGlzKTsKKyAgICAgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25l
OgpAQCAtNzQyLDcgKzc2Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNr
KCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vi
c2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNr
QWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCku
ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwg
W2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAgICAgICAgICAgICBjYWxs
YmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAgICAgICAgICAgfSk7
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTg5MywxNCArOTE3LDkg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0
YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKSkgewogICAgICAgICBpZiAoIWRpZE5vdGlmeU5ldHdvcmtQcm9j
ZXNzVG9EZWxldGVXZWJzaXRlRGF0YSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgICAgICAg
ICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAg
ICAgICAgICBwcm9jZXNzLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVz
LCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwotICAg
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklE
LCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAgICAg
ICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwor
ICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3It
PmFkZFBlbmRpbmdDYWxsYmFjaygpOwpAQCAtOTk0LDEyICsxMDEzLDEwIEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlw
ZXMsIGNvbnN0IFZlCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewog
ICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAg
ICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAg
ICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNl
IFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOworICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vz
c0FjY2Vzc1R5cGU6Ok5vbmU6CkBAIC0xMDIxLDcgKzEwMzgsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBj
b25zdCBWZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3It
PmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5
cGVzLCBvcmlnaW5zLCBjb29raWVIb3N0TmFtZXMsIEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0
cmFibGVEb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNz
aW9uSUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0
TmFtZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bv
b2xdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdD
YWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTExODUsOCArMTIwMiw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90
IG1heGltdW1FbnRyeUNvdW50LCBDb21wbGV0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0Vu
dHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE1heFN0YXRpc3Rp
Y3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50cnlDb3VudCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNE
b3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTExOTUsOCArMTIxMSw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBD
b21wbGV0aW9uCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rvd25UbyhtX3Nlc3Npb25J
RCwgcHJ1bmVUYXJnZXRDb3VudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNEb3duVG8obV9zZXNzaW9u
SUQsIHBydW5lVGFyZ2V0Q291bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25k
cywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTIw
NSw4ICsxMjIwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1Rp
bWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjwKIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFu
ZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJp
bmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNv
cmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMTUsMjAgKzEyMjksMTMgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBz
ZWNvbmRzLAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3Zh
bChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVj
b3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAgICAgCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBw
cm9jZXNzLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Np
b25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjQw
LDEyICsxMjQ3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNl
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2kKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xMjU3LDEyICsxMjU5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dy
YW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm8KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc0dyYW5kZmF0aGVyZWQo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTEyNzYsOCArMTI3Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvCiAgICAgCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNlKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJl
c291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjkxLDEwICsxMjg3LDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBVUkwm
IHVybCwgQ29tcGxldGkKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIHByb2Nlc3MtPnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQ
cmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzVmVyeVByZXZhbGVudCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xMzA2LDEyICsxMjk5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNWZXJ5
UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNWZXJ5UHJldmFsZW50
UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzMjUsMTAgKzEzMTMsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwm
IHVybCwgQ29tcGxldGlvbkhhbmRsZQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRWZXJ5UHJldmFsZW50UmVz
b3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9y
ZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzM3LDggKzEzMjIsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1v
dmFsKGJvb2wgdgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9y
ZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBj
b25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xMzUyLDIyICsxMzM2LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkws
IGNvCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVS
TCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvbnN0IFVSTCYgdG9w
RnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNz
LT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0
ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1l
VVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJy
ZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM4MSwyMyArMTM1NywxNCBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBV
UkwmIHN1YnJlc291cmNlVQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBVUkwm
IHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3VicmVz
b3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJy
ZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRv
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDEx
LDEwICsxMzc4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwKIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJl
c291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRv
IH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJs
UmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE0MjYsMTIgKzEzOTAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUgogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RU
byhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ0MywxMiAr
MTQwMiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNl
dFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8o
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYg
dXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTE0NjAsMjUgKzE0MTQsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb24K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3Qg
VVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3Rl
cmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
UmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0OTAsNDYgKzE0MzMsMjcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcjwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5j
bGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBwcm9jZXNzLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMobV9zZXNzaW9uSUQsIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Npb25JRCwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN1
Ym1pdFRlbGVtZXRyeSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIHByb2Nlc3MtPnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25JRCwgW10geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdWJtaXRUZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBTaG91bGRHcmFuZGZhdGhlclN0
YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAg
IAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVs
ZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBz
aG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVy
c2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpn
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4m
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNTYxLDM1ICsxNDg1LDI0IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KENvbXBs
ZXRpb25IYW5kbGVyPHZvCiAKICAgICBSZWZQdHI8Q2FsbGJhY2tBZ2dyZWdhdG9yPiBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBhZG9wdFJlZihuZXcgQ2FsbGJhY2tBZ2dyZWdhdG9yKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJl
UHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIHByb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKS5nZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nl
c3NQb29sXShWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5
RGF0YT4mJiBkYXRhKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRS
ZXN1bHQoV1RGTW92ZShkYXRhKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAg
fQorICAgIC8vIEZJWE1FOiBjYWxsIHNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVk
aWF0ZWx5IGhlcmUuCisgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKFZlY3RvcjxX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmIGRhdGEpIHsK
KyAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRSZXN1bHQoV1RGTW92ZShkYXRhKSk7Cisg
ICAgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRo
ZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hl
ZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdy
YW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUobV9z
ZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUobV9zZXNz
aW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE1OTgsMjQgKzE1MTEs
MTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVj
b3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmQKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFS
ZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVTdGF0aXN0
aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFz
ZUhhc0FsbFRhYmxlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJv
Y2Vzcy0+c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lvbklELCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vl
bihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjI3LDIyICsxNTI5LDE0IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1cmwsIFNlY29uZHMgc2Vjb25k
cywgQ29tcGxldGlvbkhhCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldExhc3RTZWVuKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBzZWNvbmRzLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRvbWFpbklERXhp
c3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgICAgICBwcm9jZXNzLT5kb21haW5JREV4aXN0c0luRGF0YWJhc2UobV9zZXNzaW9uSUQs
IGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmRvbWFpbklERXhpc3Rz
SW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3Rp
bmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwxLCBjb25zdCBVUkwmIHRv
cEZyYW1lVXJsMiwgU2Vjb25kcyBsYXN0U2VlbiwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIFNl
Y29uZHMgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIGJv
b2wgaXNQcmV2YWxlbnQsIGJvb2wgaXNWZXJ5UHJldmFsZW50LCB1bnNpZ25lZCBkYXRhUmVjb3Jk
c1JlbW92ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTE2NTQsMTAgKzE1NDgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlz
dGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiB0b3BGcgogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPm1lcmdlU3RhdGlzdGljRm9y
VGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFj
dGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZh
bGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLm1l
cmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDEg
fSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4s
IGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZh
dGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaGFk
VXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWwsIGJvb2wgaXNQcmV2YWxlbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE2NjksMTggKzE1NjAsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBo
YWQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5pbnNl
cnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaW5zZXJ0RXhw
aXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRGb3JBbGxCdXRD
b29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2ODgsOCArMTU3NSw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QoYm9vbCB2
YWx1ZSwgQ29tcGxlCiAgICAgdXNlRXhwbGljaXRJVFBTdGF0ZSgpOwogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0
SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9uSUQsIHZhbHVlLCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1fc2Vzc2lvbklELCB2
YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBh
Z2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnMpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcwMCw3ICsxNTg2LDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJZGVudGlmaWVy
IHBhZ2VJRCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdlYlBhZ2UtPnByb2Nlc3Mo
KS5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxsU3RvcmFnZUFjY2Vz
c0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1fc2Vzc2lvbklELCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIApAQCAtMTcwOCw4ICsxNTk0LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29u
ZHMgc2Vjb25kcywgQ29tcGxldGlvbkgKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFRpbWVUb0xpdmVVc2Vy
SW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKG1f
c2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcyMywxMCAr
MTYwOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkCiAgICAgCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmxvZ1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5sb2dVc2VySW50ZXJhY3Rp
b24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFk
VXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTczOCwxMyArMTYyMCw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21w
bGV0aW9uSGFuZGxlcjx2CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHBy
b2Nlc3MtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZh
bHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlw
T25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25zdCBVUkwmIHRvcFVybCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3
NTYsMTMgKzE2MzIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlwT25s
eUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25zdAogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFi
YXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJVcmwg
fSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwgfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAg
IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVsYXRp
b25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcFVybCB9
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3NzYsMTAgKzE2NDYsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVk
KGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc5MywxMCArMTY2MCw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgYm9vbCBp
c0dyYW5kZmF0aGVyZWQsIENvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBwcm9jZXNzLT5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRo
ZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaXNH
cmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MDUsMTAgKzE2NjksNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZh
bHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2Fk
V2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGZyb21VUkwsIGNvbnN0IFVS
TCYgdG9VUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTE4MTcsNjIgKzE2NzgsMzggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1Np
dGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGYKICAgICAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldENyb3Nz
U2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB0b1VSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0
aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBm
cm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9VUkwgfSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENyb3Nz
U2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q3Jvc3NTaXRlTG9h
ZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0Q3Jvc3NTaXRl
TG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tp
ZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlQ29va2llc0Zv
clRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVzdGluZyhjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNMb2NhbFN0b3Jh
Z2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAog
ewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0lz
b2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlckZv
clRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVz
dGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldFNob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhlbmFibGVk
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpA
QCAtMTkwMywxMCArMTc0MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VGhpcmRQYXJ0
eUNvb2tpZUJsb2NraW5nTW9kZShXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llCiAgICAgICAgICAg
ICB3ZWJQcm9jZXNzLnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoYmxvY2tpbmdNb2Rl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lvbklELCBi
bG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShtX3Nlc3Npb25JRCwg
YmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkxNCwxMCArMTc0OCw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxl
U2FtZVNpdGVTdHJpY3RFbmZvcmNlCiAgICAgYXV0byBmbGFnID0gZW5hYmxlZCA/IFdlYkNvcmU6
OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZZXMgOiBXZWJDb3JlOjpTYW1lU2l0
ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRW5ibGVTYW1lU2l0
ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRF
bmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFn
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZUZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xOTI1LDIwICsxNzU2LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92
YWxNb2RlCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgYXV0byBtb2RlID0gZW5h
YmxlZCA/IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRD
b29raWVzIDogV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6Ok5vbmU7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgbW9kZSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVS
TCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRvU2FtZVNpdGVTdHJpY3RDb29r
aWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZv
clRlc3RpbmcoY29uc3QgVVJMJiBmaXJzdFBhcnR5VVJMLCBjb25zdCBVUkwmIGNuYW1lVVJMLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTUwLDgg
KzE3NzUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdAogCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFy
dHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJzdFBhcnR5VVJMLmhv
c3QoKS50b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0s
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRGaXJz
dFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmlyc3RQYXJ0eVVS
TC5ob3N0KCkudG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVS
TCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0
aW5nKGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTE5NjMsOCArMTc4Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3Rp
bmcoCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNOQU1F
RG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogI2VuZGlmIC8vIEVO
QUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKQEAgLTE5NzMsOCArMTc5Niw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJj
ZXMoU2Vjb25kcyBzZWNvbmRzLCBDCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVO
ZXR3b3JrUHJvY2VzcygpLnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1f
c2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNz
aW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIFVO
VVNFRF9QQVJBTShzZWNvbmRzKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMTk4NCwy
NiArMTgwNiwxMiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9y
UHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQwogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpyZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFs
ZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICNlbHNl
CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRpZgogfQogCi1ib29sIFdlYnNpdGVEYXRh
U3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9v
bCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPSBwcm9jZXNz
UG9vbC53ZWJzaXRlRGF0YVN0b3JlKCkpCi0gICAgICAgIHJldHVybiBwcm9jZXNzUG9vbERhdGFT
dG9yZSA9PSB0aGlzOwotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvY2Vz
c1Bvb2wubmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuIG5ldHdvcmtQcm9jZXNzUHJv
eHktPmhhc1Nlc3Npb24obV9zZXNzaW9uSUQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogSGFz
aFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9v
bHMoc2l6ZV90IGxpbWl0KSBjb25zdAogewogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQ
b29sPj4gcHJvY2Vzc1Bvb2xzOwpAQCAtMjAxOCw5ICsxODI2LDYgQEAgSGFzaFNldDxSZWZQdHI8
V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGxp
bWl0KSBjb24KICAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBD
aGVjayBpZiB3ZSdyZSBvbmUgb2YgdGhlIGxlZ2FjeSBkYXRhIHN0b3Jlcy4KICAgICAgICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICAgICAgaWYgKCFpc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbCgqcHJvY2Vzc1Bvb2wp
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCiAgICAgICAgICAgICBwcm9jZXNzUG9vbHMu
YWRkKHByb2Nlc3NQb29sKTsKICAgICAgICAgICAgIGlmIChwcm9jZXNzUG9vbHMuc2l6ZSgpID09
IGxpbWl0KQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjEwOSw2ICsxOTE0LDMwIEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFL
ZXlzU3RvcmFnZURpcmVjdG9yeSwKICAgICB9CiB9CiAKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQoreworICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Cisg
ICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5lbnQ6Ok5vLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2Vu
ZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpCit7CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcoKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NEaWRS
ZXN1bWUoKQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsK
K30KKwogYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIx
MzgsMTcgKzE5NjcsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgICAgIAogICAgICAgICByZXNvbHZl
RGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwogICAgICAgICAKLSAgICAgICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgdHJ1ZSkpOworICAgICAgICBu
ZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgdHJ1ZSksIDApOworICAgICAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgICAgICBwcm9j
ZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihNZXNzYWdlczo6V2ViUHJvY2Vz
czo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQodHJ1ZSksIG1fc2Vzc2lvbklEKTsK
LSAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9O
ZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSkpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSksIDApOworICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb0Fs
bFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkKGZhbHNlKSwgbV9zZXNzaW9uSUQpOwotICAgIH0KIAogICAgIG1f
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgPSBmYWxzZTsKICNlbHNlCkBAIC0yMTYwLDgg
KzE5ODcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3RhdGlz
dGljc1Rlc3RpbmdDYWxsYmFjayhGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNhbGxi
YWNrKQogewogICAgIGlmIChjYWxsYmFjaykgewotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0
d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpKTsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSwgMCk7CiAgICAgfQogICAgIAogICAgIG1fc3RhdGlzdGlj
c1Rlc3RpbmdDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwpAQCAtMjE4MCw4ICsyMDA2LDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdN
b2RlKGJvb2wgZW5hYmxlZCwgQ29tcGxldGkKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RlYnVnTW9kZShtX3Nlc3Npb25JRCwgZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKICAgICBVTlVTRURfUEFSQU0o
Y29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMjE5NiwyMCArMjAyMSwxNSBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vzc2lvbklE
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9Ci0jZW5kaWYKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOworI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisjZW5kaWYKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoYm9v
bCBlbmFibGVkKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0QWRDbGlj
a0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0
QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOwogfQogCiAjaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIyMzEsNDggKzIwNTEsMTkgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZFN0YXRpc3RpY3NJbldlYlByb2Nlc3NlcyhD
b21wbGV0aW9uSGFuZGwKIH0KICNlbmRpZgogCi1WZWN0b3I8V2ViQ29yZTo6Q29va2llPiBXZWJz
aXRlRGF0YVN0b3JlOjpwZW5kaW5nQ29va2llcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcHlU
b1ZlY3RvcihtX3BlbmRpbmdDb29raWVzKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjph
ZGRQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1f
cGVuZGluZ0Nvb2tpZXMucmVtb3ZlSWYoWyZjb29raWVdKGF1dG8mIHBlbmRpbmdDb29raWUpIHsK
LSAgICAgICAgcmV0dXJuIHBlbmRpbmdDb29raWUuaXNLZXlFcXVhbChjb29raWUpOwotICAgIH0p
OwotICAgIG1fcGVuZGluZ0Nvb2tpZXMuYWRkKGNvb2tpZSk7Ci19Ci0KLXZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tp
ZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZShjb29raWUpOwotfQotICAgIAotdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdDb29raWVzKCkKLXsKLSAgICBtX3BlbmRp
bmdDb29raWVzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zmx1c2hDb29r
aWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8gcHJvY2Vzc1Bvb2wgOiBX
ZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5m
bHVzaENvb2tpZXMoc2Vzc2lvbklEKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5mbHVzaENvb2tpZXMoc2Vzc2lvbklEKCksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBbGxvd3NBbnlT
U0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93cykKIHsKLSAgICBmb3IgKGF1dG8g
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChhbGxvd3Mp
LCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9y
V2ViU29ja2V0OjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5k
U3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRl
Rm9yV2ViU29ja2V0KGFsbG93cyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dz
QW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQ6OlJlcGx5KCksIDApOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogewotICAgIGZvciAoYXV0
byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKCkpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2Fj
aGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKCkpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpkaXNwYXRjaE9uUXVldWUoRnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKQpAQCAtMjI5
OCw4ICsyMDg5LDYgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9y
ZTo6cGFyYW1ldGVycygpCiAKICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwog
Ci0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBlbmRpbmdDb29raWVzKCk7Ci0KICAg
ICBhdXRvIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24t
PnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUhhbmRsZTsKICAgICBpZiAo
IXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAtMjQwNCw3ICsy
MTkzLDE0IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBh
cmFtZXRlcnMoKQogICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZWQgPSBtX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkOwogI2VuZGlmCiAgICAgcGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyhw
YXJhbWV0ZXJzKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1p
c3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKKyNl
bmRpZgogCisjaWYgVVNFKFNPVVApCisgICAgbmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2Vy
KCkuZ2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklEKCksIHBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBl
KTsKKyNlbmRpZgorICAgIAogICAgIHJldHVybiBwYXJhbWV0ZXJzOwogfQogCkBAIC0yNDM0LDEw
ICsyMjMwLDYgQEAgQVBJOjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6OmNvb2tp
ZVN0b3JlKCkKICAgICByZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAKLXZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQotewotfQotCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBpZiAoIWlzUGVyc2lzdGVudCgpKSB7CkBAIC0yNDQ1LDIzICsyMjM3
LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5j
dGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VECiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpLmdldExvY2FsU3Rv
cmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgewotICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7Ci0gICAgICAgIH0pOwotICAgICAgICAvLyBGSVhN
RTogU3VwcG9ydCBmZXRjaGluZyBmcm9tIG11bHRpcGxlIHBvb2xzLgotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgQVNTRVJUKCFjb21wbGV0aW9uSGFuZGxlcik7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMpIHsKKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7CisgICAgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UXVvdGEobV9zZXNzaW9u
SUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0Ep
CkBAIC0yNDg3LDcgKzIyNzEsMTIgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpodHRwM0VuYWJs
ZWQoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZgorCitib29sIFdlYnNpdGVEYXRh
U3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmlu
ZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkK
IAogI2lmICFVU0UoR0xJQikKIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
ZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQpAQCAtMjQ5OSwzNSArMjI4OCwxOSBA
QCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNT
dG9yYWdlRGlyZWN0b3J5KCkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW5hbWVPcmlnaW5J
bldlYnNpdGVEYXRhKFVSTCYmIG9sZE5hbWUsIFVSTCYmIG5ld05hbWUsIE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp0aGlz
KTsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRh
KG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5hZGRT
ZXNzaW9uKCp0aGlzKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlbmFtZU9yaWdpbkluV2Vic2l0
ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKQog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24oQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vzc2lvbihD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y2xl
YXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyQXBwQm91bmRT
ZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFs
aXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0y
NTQ5LDcgKzIzMjIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERv
bWFpbnNUb0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZQogCiAgICAgcHJvcGFnYXRl
QXBwQm91bmREb21haW5zKGdsb2JhbERlZmF1bHREYXRhU3RvcmUoKS5nZXQoKSwgKmFwcEJvdW5k
RG9tYWlucyk7CiAKLSAgICBmb3IgKGF1dG8qIHN0b3JlIDogbm9uRGVmYXVsdERhdGFTdG9yZXMo
KS52YWx1ZXMoKSkKKyAgICBmb3IgKGF1dG8qIHN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVl
cygpKQogICAgICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoc3RvcmUsICphcHBCb3VuZERv
bWFpbnMpOwogfQogCkBAIC0yNTU3LDEwICsyMzMwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRBcHBCb3VuZERvbWFpbnNGb3JJVFAoY29uc3QgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3Ry
YWIKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1f
c2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNldEFwcEJvdW5kRG9tYWluc0ZvclJlc291cmNlTG9hZFN0YXRp
c3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAjZW5kaWYKIApAQCAtMjU2OCwxNiArMjMzOCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IFN0cmluZyYgYnVu
ZAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5k
bGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3
b3JrUHJvY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlmaWVyKFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAppbmRleCA0ZTM3MmFkZjYyOTZi
NDI4ZjEwZWNjMjkyZWE3ZGQzNTM1MzQ3YWI5Li45MTY1YzllZjI5MzIxY2E3YTVlMDM1YjA5ZmNm
MzdhMTc2NWY1NWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC03NSw2ICs3NSw3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7CiBjbGFzcyBTZWNLZXlQcm94eVN0
b3JlOwogY2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CitjbGFzcyBOZXR3b3JrUHJvY2Vz
c1Byb3h5OwogY2xhc3MgU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBXZWJQYWdl
UHJveHk7CiBjbGFzcyBXZWJQcm9jZXNzUG9vbDsKQEAgLTEwOCw3ICsxMDksMTIgQEAgcHVibGlj
OgogICAgIFdlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9u
PiYmLCBQQUw6OlNlc3Npb25JRCk7CiAgICAgfldlYnNpdGVEYXRhU3RvcmUoKTsKIAotICAgIHN0
YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNz
aW9uSUQoUEFMOjpTZXNzaW9uSUQpOworICAgIHN0YXRpYyB2b2lkIGZvckVhY2hXZWJzaXRlRGF0
YVN0b3JlKEZ1bmN0aW9uPHZvaWQoV2Vic2l0ZURhdGFTdG9yZSYpPiYmKTsKKyAgICAKKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0OworICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKCk7CisKKyAgICBzdGF0aWMgV2Vic2l0ZURhdGFT
dG9yZSogZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOwogCiAg
ICAgYm9vbCBpc1BlcnNpc3RlbnQoKSBjb25zdCB7IHJldHVybiAhbV9zZXNzaW9uSUQuaXNFcGhl
bWVyYWwoKTsgfQogICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2Vzc2lvbklEOyB9CkBAIC0xMTgsNiArMTI0LDExIEBAIHB1YmxpYzoKICAgICAKICAgICBj
b25zdCBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBwcm9jZXNzZXMoKSBjb25zdCB7IHJl
dHVybiBtX3Byb2Nlc3NlczsgfQogCisgICAgdm9pZCB0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcygp
OworICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3Rpbmco
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKKyAgICB2b2lkIHNlbmROZXR3b3Jr
UHJvY2Vzc0RpZFJlc3VtZSgpOworCiAgICAgYm9vbCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
Ym9vbCk7CiAgICAgYm9vbCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKCkgY29uc3Q7
CkBAIC0yMjksMTcgKzI0MCwxMSBAQCBwdWJsaWM6CiAKICAgICBEZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZSYgZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKSB7IHJldHVybiBtX2RldmljZUlkSGFzaFNh
bHRTdG9yYWdlLmdldCgpOyB9CiAKLSAgICBXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2xGb3JD
b29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGJvb2wgaXNBc3NvY2lhdGVkUHJvY2Vzc1Bv
b2woV2ViUHJvY2Vzc1Bvb2wmKSBjb25zdDsKLQogICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzIHBhcmFtZXRlcnMoKTsKIAotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdD
b29raWVzKCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6
OkNvb2tpZSYpOwotICAgIHZvaWQgcmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpD
b29raWUmKTsKLSAgICB2b2lkIGNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKICAgICB2b2lkIGZsdXNo
Q29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJDYWNo
ZWRDcmVkZW50aWFscygpOworICAgIHN0YXRpYyBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM+IHBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKCk7CiAKICAgICB2b2lkIHNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJvb2wpOwogCkBAIC0yNjYsOCArMjcxLDYgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbihX
ZWJDb3JlOjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uJiYpOwogI2VuZGlmCiAK
LSAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci0KICAgICBjb25zdCBXZWJzaXRl
RGF0YVN0b3JlQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbigpIHsgcmV0dXJuIG1fY29uZmln
dXJhdGlvbi5nZXQoKTsgfQogCiAgICAgV2Vic2l0ZURhdGFTdG9yZUNsaWVudCYgY2xpZW50KCkg
eyByZXR1cm4gbV9jbGllbnQuZ2V0KCk7IH0KQEAgLTI3Nyw2ICsyODAsOCBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEoVVJMJiYsIFVSTCYmLCBPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAg
IGJvb2wgbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5n
Jik7CisKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogICAgIFdlYkRldmljZU9yaWVu
dGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlciYgZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rp
b25BY2Nlc3NDb250cm9sbGVyKCkgeyByZXR1cm4gbV9kZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlv
bkFjY2Vzc0NvbnRyb2xsZXI7IH0KICNlbmRpZgpAQCAtMzUzLDcgKzM1OCw3IEBAIHByaXZhdGU6
CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlz
U3RvcmFnZURpcmVjdG9yeSwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSk7CiAgICAgc3RhdGljIHZv
aWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9y
eSwgY29uc3QgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAKLSAgICB2
b2lkIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgdm9pZCByZWdpc3Rlcldp
dGhTZXNzaW9uSURNYXAoKTsKIAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykKICAgICBz
dGF0aWMgT3B0aW9uYWw8SGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4+IGFwcEJv
dW5kRG9tYWluc0lmSW5pdGlhbGl6ZWQoKTsKQEAgLTM5MSw4ICszOTYsNiBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkIHsgdHJ1ZSB9Owog
I2VuZGlmCiAKLSAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb2tpZT4gbV9wZW5kaW5nQ29va2llczsK
LSAgICAKICAgICBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+IG1fcHJvY2Vzc2VzOwogCiAg
ICAgYm9vbCBtX2lzSXRwU3RhdGVFeHBsaWNpdGx5U2V0IHsgZmFsc2UgfTsKQEAgLTQxMyw2ICs0
MTYsNyBAQCBwcml2YXRlOgogICAgIFVuaXF1ZVJlZjxXZWJzaXRlRGF0YVN0b3JlQ2xpZW50PiBt
X2NsaWVudDsKIAogICAgIFJlZlB0cjxBUEk6OkhUVFBDb29raWVTdG9yZT4gbV9jb29raWVTdG9y
ZTsKKyAgICBSZWZQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKIAog
I2lmIEhBVkUoQVBQX1NTTykKICAgICBVbmlxdWVSZWY8U09BdXRob3JpemF0aW9uQ29vcmRpbmF0
b3I+IG1fc29BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9y
ZVNvdXAuY3BwCmluZGV4IDEyZjljZDgxOWI2ZGNjYThhYzUwOTJhMzBkZDkzYzUzYjhlZTkzNDIu
LjViYTM5MDBkMmRhZmYwNTZhYmQwY2RmMDU3YWUzMjg1NGViZmVjZjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNv
dXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vi
c2l0ZURhdGFTdG9yZVNvdXAuY3BwCkBAIC0zOSw4ICszOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyhXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycyYKICAgICBhdXRvJiBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucGVy
c2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fcGVyc2lzdGVudENyZWRlbnRpYWxT
dG9yYWdlRW5hYmxlZDsKIAotICAgIGlmIChhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29s
Rm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFn
ZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRT
dG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlVHlwZSk7CisgICAgV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigp
LmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1By
b3h5R0xpYi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94
eUdMaWIuY3BwCmluZGV4IDBhODRhNzU5MGQ5YTk4NWJmYzk5Njg0YTQ4OTUxMzc0ZTViMjk0Mjku
LjI3ZjIzZWEwNjVkYzc1Y2U0YTgyNzBjNTc2ZWEyYWE1NWFiMGRjOGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcApAQCAt
NDQsNyArNDQsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRp
b25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbAogICAgICAgICBpZiAoIWRhdGFT
dG9yZSkgewogICAgICAgICAgICAgLy8gUHJld2FybWVkIHByb2Nlc3NlcyBkb24ndCBoYXZlIGEg
V2Vic2l0ZURhdGFTdG9yZSB5ZXQsIHNvIHVzZSB0aGUgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3Jl
IGZyb20gdGhlIFdlYlByb2Nlc3NQb29sLgogICAgICAgICAgICAgLy8gVGhlIHByb2Nlc3Mgd29u
J3QgYmUgdXNlZCBpZiBjdXJyZW50IFdlYnNpdGVEYXRhU3RvcmUgaXMgZGlmZmVyZW50IHRoYW4g
dGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgb25lLgotICAgICAgICAgICAgZGF0YVN0b3JlID0g
bV9wcm9jZXNzUG9vbC0+d2Vic2l0ZURhdGFTdG9yZSgpOworICAgICAgICAgICAgZGF0YVN0b3Jl
ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwogICAgICAgICB9
CiAKICAgICAgICAgQVNTRVJUKGRhdGFTdG9yZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAppbmRleCA5
ZjdiZTNjOTQxYjZjZDBhMWI5NGNiMTM2MDk4ZjNhMDQxY2VmZjk5Li4wODkyOGZjZDMxNmQ4OGY5
ZDUxNTAwZWM2ODRhZDFiNjRhZjhhM2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKQEAgLTI2LDYg
KzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2Vy
UHJveHkuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJX
ZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgog
CkBAIC0zNCw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKICAgICBtX2Nvb2tpZVBlcnNpc3RlbnRTdG9yYWdlTWFw
LnNldChzZXNzaW9uSUQsIHN0ZDo6bWFrZV9wYWlyKHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkp
OwotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0
b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSwgMCk7CiB9CiAK
IHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQ
ZXJzaXN0ZW50U3RvcmFnZVR5cGUmIHN0b3JhZ2VUeXBlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCmluZGV4IGJmYmJm
OTY2NGU0ODM1MzA5NzA5NzExZGZkNmMxMzQxNTczMmJkYWMuLjA3OTNlZDUxMzkxNTI4ZDliNGI5
ZmRiMGY0YWQzYzg5NjBmZGE1MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKQEAgLTM3LDMwICszNywyNCBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMp
CiB7Ci0gICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmIGRlZmF1bHRTZXNzaW9u
UGFyYW1ldGVycyA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgIHN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5
PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMu
c2Vzc2lvbklELCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3Jh
Z2VQYXRoLCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VU
eXBlKTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBkZWZhdWx0U2Vzc2lv
blBhcmFtZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fd2Vic2l0
ZURhdGFTdG9yZS0+cGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpOworICAgIC8v
IEZJWE1FOiBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5IHNob3VsZCBiZSBtb3ZlZCB0
byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KKyAgICAvLyBGSVhNRTogbV9pZ25vcmVUTFNFcnJvcnMg
c2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlIG9yIHJlbW92ZWQuCisgICAg
Ly8gRklYTUU6IG1fbmV0d29ya1Byb3h5U2V0dGluZ3Mgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBX
ZWJzaXRlRGF0YVN0b3JlLgogCi0gICAgcGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kgPSBt
X2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5OwotICAgIHBhcmFtZXRlcnMuaWdub3JlVExT
RXJyb3JzID0gbV9pZ25vcmVUTFNFcnJvcnM7CiAgICAgcGFyYW1ldGVycy5sYW5ndWFnZXMgPSB1
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCk7Ci0gICAgcGFyYW1ldGVycy5wcm94eVNldHRpbmdzID0g
bV9uZXR3b3JrUHJveHlTZXR0aW5nczsKICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERh
dGFiYXNlID0gdHJ1ZTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJy
b3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIG1faWdub3JlVExTRXJyb3JzID0gaWdu
b3JlVExTRXJyb3JzOwotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKQotICAgICAgICBuZXR3b3Jr
UHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0SWdub3JlVExTRXJy
b3JzKG1faWdub3JlVExTRXJyb3JzKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldElnbm9yZVRMU0Vycm9y
cyhtX2lnbm9yZVRMU0Vycm9ycyksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRO
ZXR3b3JrUHJveHlTZXR0aW5ncyhjb25zdCBXZWJDb3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGlu
Z3MmIHNldHRpbmdzKQogewogICAgIG1fbmV0d29ya1Byb3h5U2V0dGluZ3MgPSBzZXR0aW5nczsK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fbmV0
d29ya1Byb3h5U2V0dGluZ3MpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGlu
Z3MobV9uZXR3b3JrUHJveHlTZXR0aW5ncyksIDApOwogfQogCiB9CmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzc1ZTUyYjRmMmNkNWZkYmM1OTJl
ODkwZDhiMDA4MTNlNjM4YWQzZC4uN2YyYzBlZDQ3MzNlMDcwNGZhZjc0NzA3ODliYmIwYTQ2MzIz
MGM0ZSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI5IEBACisyMDIwLTA5LTE1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVu
c2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3b3JrUHJvY2Vzc1Byb3h5IG93bmVy
c2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVEYXRhU3RvcmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjA0MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW06CisgICAgICAgIChydW5UZXN0KToK
KyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTmV0d29ya1Byb2Nlc3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW06CisgICAg
ICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Nl
cnZpY2VXb3JrZXJCYXNpYy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29r
aWVVSURlbGVnYXRlIHdlYlZpZXc6cnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTpp
bml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtDaGVja1Nl
c3Npb25Db29raWVVSURlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSk6CisgICAgICAgICgtW0NoZWNr
U2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSk6CisgICAgICAgIChURVNU
KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KToKKwog
MjAyMC0wOS0xNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIE1vdmUgV0tDb250ZXh0Q2xlYXJDYWNoZWRDcmVkZW50aWFscyBTUEkgdG8gV0tX
ZWJzaXRlRGF0YVN0b3JlQ2xlYXJDYWNoZWRDcmVkZW50aWFscwpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5n
Q29ubmVjdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KaW5kZXggOTczODlmMDFmZjJlZTk5
Yjc4M2IwYjUyMTA4MDc0ZjFhODFiNjk4MS4uMzNmNDU0YzVjZDU5YjQ4YTc2OThhYWI1NmU2MTFj
ZjZmMDljOWY0ZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQv
TmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdD
b25uZWN0aW9uLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNz
R3JvdXBQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgogCkBAIC0xNDYsOCArMTQ3LDggQEAgVEVTVChXZWJLaXQs
IE5ldHdvcmtQcm9jZXNzUmVsYXVuY2hPbkxhdW5jaEZhaWx1cmUpCiAKICAgICAvLyBDb25zdHVj
dGluZyBhIFdlYlZpZXcgc3RhcnRzIGEgbmV0d29yayBwcm9jZXNzIHNvIHRlcm1pbmF0ZSB0aGlz
IG9uZS4gVGhlIHBhZ2UgbG9hZCBiZWxvdyB3aWxsIHRoZW4gcmVxdWVzdCBhIG5ldHdvcmsgcHJv
Y2VzcyBhbmQgd2UKICAgICAvLyBtYWtlIHRoaXMgbmV3IG5ldHdvcmsgcHJvY2VzcyBsYXVuY2gg
Y3Jhc2ggb24gc3RhcnR1cC4KLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKICAgICBbcHJvY2Vzc1Bvb2wgX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWls
Rm9yVGVzdGluZ107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMo
W1tNb25pdG9yV2ViQ29udGVudENyYXNoTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7
CiAgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2tw
b2ludFdBTC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hl
Y2twb2ludFdBTC5tbQppbmRleCA1Y2Q3YWJkYTAxZDE5NzQ3ZGNlZDQ1YWJlZTk5ZWNiMWMxNGQ2
MTYwLi5kNzdhNmZkOTg3OWU0M2Y3MDExZGRhZjkyYzNhNzk3ZjNmYzEzNzM0IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwu
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3Bv
aW50V0FMLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9v
bFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtODYsNyArODcs
NyBAQCBURVNUKEluZGV4ZWREQiwgQ2hlY2twb2ludHNXQUxBdXRvbWF0aWNhbGx5KQogICAgIFJl
dGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhb
W1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRp
b24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVy
LmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCku
cHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAg
ICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9u
OmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KaW5kZXggYzhhZjFk
MjQzYzRmZWI1OGFjOTg0ZGFmMTRkODE1MzFhN2NjM2M3My4uYmJmMWExNTIxNWRjMWZkMjhkZmRk
YjllMzQxYjY0ZjljMDA4ZjRjNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCkBAIC0zMCw2ICszMCw3
IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
S1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQg
PFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9f
V0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtNTcsNyArNTgsNyBAQCBURVNUKEluZGV4ZWREQiwgRGVs
ZXRlUmVjb3ZlcnkpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZp
Z3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0p
OwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1l
c3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBm
aWxlcyB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVu
ZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiSURCRGVsZXRlUmVjb3ZlcnkiIHdpdGhF
eHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNl
cyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJJbmRleFVwZ3JhZGVUb1YyLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tCmluZGV4IDk1Y2NhMGNlMjgxNmZmMWE2YTQ1NWFk
MGJkMmM4YTRhYTRmMjdmZWQuLjg4YTUzZjYxZDlkOTgyNjU3Yjk2NWVmOGE2Y2ViYTc5MWVmZjE3
NTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURC
SW5kZXhVcGdyYWRlVG9WMi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQg
PFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNv
bnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZp
Z3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1By
b2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNo
ZWV0Lmg+CkBAIC01OCw3ICs1OSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleFVwZ3JhZGVUb1Yy
KQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0g
YWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2Nv
bmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxl
cjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRp
b24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29u
ZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CiAKICAgICAvLyBDb3B5IHRoZSBpbmNvbnNpc3RlbnQgZGF0YWJhc2UgZmlsZXMgdG8gdGhl
IGRhdGFiYXNlIGRpcmVjdG9yeQogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVu
ZGxlXSBVUkxGb3JSZXNvdXJjZTpAIkluZGV4VXBncmFkZSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0
ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5m
b1VwZ3JhZGVUb1YyLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQppbmRleCBmZmE1YTc4NzhhNDczMmI4ZWMy
NDVjOTA1M2ZkMTdlZTU5NTZmYTNkLi40MDNlMGZmYTgyMTIzNDUxYzQ2NmZlZWNjMzI0ZjljNmU3
NjFkNDNkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KQEAg
LTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJL
aXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5o
PgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9y
dCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5k
ZXhlZERCLCBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMikKICAgICBSZXRhaW5QdHI8V0tX
ZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdD
b25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250
ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1l
OkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29s
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSBk
YXRhYmFzZSBmaWxlcyB3aXRoIG9sZCBPYmplY3RTdG9yZUluZm8gc2NoZW1hIHRvIHRoZSBkYXRh
YmFzZSBkaXJlY3RvcnkuCiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVd
IFVSTEZvclJlc291cmNlOkAiSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZSIgd2l0aEV4dGVuc2lv
bjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KaW5kZXggNjg3NDUyOWViYmYz
Nzg1MThkOTNlMGEwODIxZjYzMDEyY2ZhNmQ1Zi4uNzMwNzdlY2RmZDM2NWI1MjkwNTNkNDdjYmEy
YTE0ZWQwNTFlZDZlYSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5t
bQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2Vi
S2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC05Miw3ICs5Myw3IEBAIFRFU1QoSW5kZXhlZERC
LCBEYXRhYmFzZVByb2Nlc3NLaWxsKQogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgICAgIGlmICgha2lsbGVkREJQcm9jZXNzICYm
IG9wZW5SZXF1ZXN0VXBncmFkZU5lZWRlZCkgewogICAgICAgICAgICAga2lsbGVkREJQcm9jZXNz
ID0gdHJ1ZTsKLSAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgICAgICAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgICAgIH0K
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSW5kZXhlZERCRmlsZU5hbWUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCmluZGV4IDExZjg3ZjgwMzRkMmIxYjU1ZDcyMGRl
Yjc2NWEzMTY4MjEyMGQ3NzMuLmE5OGJmMzgyNWJiMWVkNmQ3NTljMDhkNDUzM2FkY2I3ZmYzOTVm
ZDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5k
ZXhlZERCRmlsZU5hbWUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbQpAQCAtNDksNyArNDksNyBAQCBzdGF0aWMgUmV0YWlu
UHRyPFdLU2NyaXB0TWVzc2FnZT4gbGFzdFNjcmlwdE1lc3NhZ2U7CiAKIEBlbmQKIAotc3RhdGlj
IHZvaWQgcnVuVGVzdCgpCitzdGF0aWMgdm9pZCBydW5UZXN0KGJvb2wgb2xkRmlsZVNob3VsZEV4
aXN0ID0gdHJ1ZSkKIHsKICAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbSW5kZXhlZERCRmls
ZU5hbWVNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOwogICAgIGF1dG8gY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CkBAIC04
Nyw3ICs4Nyw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoKQogICAgIE5TVVJMICpvbGRWZXJzaW9u
T3JpZ2luRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRp
bmdQYXRoQ29tcG9uZW50OiBAImZpbGVfXzAiXTsKICAgICBOU1VSTCAqbmV3VmVyc2lvbk9yaWdp
bkRpcmVjdG9yeVVSTCA9IFtuZXdWZXJzaW9uRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0
aENvbXBvbmVudDogQCJmaWxlX18wIl07CiAgICAgTlNVUkwgKm9sZFZlcnNpb25VbnVzZWREYXRh
YmFzZURpcmVjdG9yeVVSTCA9IFtvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMIFVSTEJ5QXBw
ZW5kaW5nUGF0aENvbXBvbmVudDp1bnVzZWREYXRhYmFzZU5hbWVdOwotICAgIEVYUEVDVF9UUlVF
KFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpvbGRWZXJz
aW9uVW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwucGF0aF0pOworICAgIEVYUEVDVF9UUlVFKFtb
TlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpvbGRWZXJzaW9u
VW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwucGF0aF0gPT0gb2xkRmlsZVNob3VsZEV4aXN0KTsK
ICAgICAKICAgICAvLyBGb3IgZGF0YWJhc2UgdGhhdCBpcyBvcGVuZWQgYWZ0ZXIgdXBncmFkZSwg
aXRzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW4gdjEuCiAgICAgTlNVUkwgKm9sZFZlcnNpb25FeGlz
dGluZ0RhdGFiYXNlRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwg
VVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OiBleGlzdGluZ0RhdGFiYXNlTmFtZV07CkBAIC0x
NTQsNyArMTU0LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlRGlyZWN0b3JpZXMoU3RyaW5nIHRlc3RO
YW1lKQogVEVTVChJbmRleGVkREIsIEluZGV4ZWREQkZpbGVOYW1lKQogewogICAgIGNyZWF0ZURp
cmVjdG9yaWVzKCJub25lIik7Ci0gICAgcnVuVGVzdCgpOworICAgIHJ1blRlc3QoZmFsc2UpOwog
fQogCiBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCRmlsZU5hbWVWMCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNz
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0
aVByb2Nlc3MubW0KaW5kZXggN2Y2MjY0NWQ5OTYwZWRlOTYwYzAwMWMyNzJiNjUwMzkzOTAxMTYz
Mi4uNmY2N2RjMjdlZGMzZDI3NDViMTcwZTQ4MmJjZDkwZTg0OTRjYjk1YSAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nl
c3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJNdWx0aVByb2Nlc3MubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Vz
ZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdD
b25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQv
X1dLVXNlclN0eWxlU2hlZXQuaD4KICNpbXBvcnQgPHd0Zi9EZXF1ZS5oPgpAQCAtNjksNyArNzAs
NyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCTXVsdGlQcm9jZXNzKQogICAgIFJldGFpblB0
cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNl
ckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgp
IG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vz
c1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBSZXRh
aW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZp
Z3VyYXRpb24uZ2V0KCldKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KaW5kZXggYjMyY2U0
YTVmNzM4NjNhZWRkY2I5MTkwYjViNDM3MGUzNzQ0M2I1ZS4uZDYyMjAzMjJlNDc4ZDFkYWM3OGYw
Njk2N2MzYjY0M2JmZDYyZjliZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCkBAIC03OCw3
ICs3OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJQZXJzaXN0ZW5jZSkKICAgICB3ZWJW
aWV3ID0gbmlsOwogCiAgICAgLy8gVGVybWluYXRlIHRoZSBuZXR3b3JrIHByb2Nlc3MKLSAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIE1ha2UgYSBuZXcgd2ViIHZpZXcgdG8gZmluaXNoIHRo
ZSB0ZXN0CiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0
aW9uLmdldCgpXSk7CkBAIC0yNjgsNyArMjY4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWRE
QlRoaXJkUGFydHlGcmFtZUhhc0FjY2VzcykKIAogICAgIHdlYlZpZXcgPSBuaWw7CiAgICAgc2Vj
b25kV2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNp
dGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIFRoaXJkLXBh
cnR5IElEQiBzdG9yYWdlIGlzIHN0b3JlZCBpbiB0aGUgbWVtb3J5IG9mIG5ldHdvcmsgcHJvY2Vz
cy4KICAgICBhdXRvIHRoaXJkV2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uLmdldCgpXSk7CkBAIC0zODUsNyArMzg1LDcgQEAgVEVTVChJbmRleGVkREIsIElu
ZGV4ZWREQlRoaXJkUGFydHlXb3JrZXJIYXNBY2Nlc3MpCiAKICAgICB3ZWJWaWV3ID0gbmlsOwog
ICAgIHNlY29uZFdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vz
c1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRv
IHRoaXJkV2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdl
dCgpXSk7CiAgICAgbG9hZFRlc3RQYWdlSW5XZWJWaWV3KHRoaXJkV2ViVmlldy5nZXQoKSwgQCJk
YXRhYmFzZSBpcyBjcmVhdGVkIik7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCmluZGV4IDUz
NjU0MWUzYjBlNWNkYTNhM2I1NTFjMWU4MWU5NjNmNTkyYWViMmYuLmU3Yjk5MjI4Y2U4NzZlNDQ3
ZTY0NzgyZWY5ZDg3ZjI1YWRjOWI5ZmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCkBA
IC05NSw3ICs5NSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUZW1wRmlsZVNpemUpCiAK
ICAgICAvLyBUZXJtaW5hdGUgbmV0d29yayBwcm9jZXNzIHRvIGtlZXAgV0FMIG9uIGRpc2suCiAg
ICAgd2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNp
dGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIEVYUEVDVF9UUlVF
KFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDp3YWxGaWxl
UGF0aC5nZXQoKS5wYXRoXSk7CiAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gZmlsZUF0dHJp
YnV0ZXMgPSBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGF0dHJpYnV0ZXNPZkl0ZW1B
dFBhdGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aCBlcnJvcjpuaWxdOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5j
ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdl
UGVyc2lzdGVuY2UubW0KaW5kZXggNDEzM2VlN2IzZGFlNDNlYzIwNDljZmZjMDYzYzBlNDI5YzE3
YzVlZi4uNWY3OTE5MDk0M2M3NzFlOWQ5ZTQ0MmEwZGEyNjZmZjlhMDNiYTJmMiAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJz
aXN0ZW5jZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xv
Y2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJL
aXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYnBhZ2VQ
cmVmZXJlbmNlc1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxl
U2hlZXQuaD4KQEAgLTEwOSw3ICsxMTAsNyBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdl
UHJvY2Vzc0NyYXNoZXMpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNj
cmlwdE1lc3NhZ2UpOwogICAgIEVYUEVDVF9XS19TVFJFUShAInNlc3Npb246c3RvcmFnZSIsIFts
YXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJl
Y2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKQEAgLTE2Miw3ICsxNjMsNyBAQCBURVNUKFdLV2Vi
VmlldywgTG9jYWxTdG9yYWdlUHJvY2Vzc1N1c3BlbmRzKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJ2
YWx1ZSIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wuZ2V0
KCkgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1
c3BlbmRJbW1pbmVudGx5XTsKIAogICAgIHJlYWR5VG9Db250aW51ZSA9IGZhbHNlOwogICAgIFt3
ZWJWaWV3MSBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0o
J2tleScsICduZXdWYWx1ZScpIiBjb21wbGV0aW9uSGFuZGxlcjpeKGlkLCBOU0Vycm9yICopIHsK
QEAgLTE3Nyw3ICsxNzgsNyBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlUHJvY2Vzc1N1
c3BlbmRzKQogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0Nv
bnRpbnVlKTsKICAgICAKLSAgICBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX3NlbmROZXR3b3JrUHJvY2Vz
c0RpZFJlc3VtZV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2Fn
ZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRN
ZXNzYWdlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTmV0d29ya1Byb2Nlc3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL05ldHdvcmtQcm9jZXNzLm1tCmluZGV4IGU2MGY4ODAyNWQwOTM3ODlmNjk1NjBkOWI5MmIy
ODJmMDcxMzBhOGQuLjBlMjFmOTA5NTAwMTRmNmM0OTBiMGViOGU0NjFlYzRiYTg1MGJiODEgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1By
b2Nlc3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3
b3JrUHJvY2Vzcy5tbQpAQCAtMjgsNyArMjgsNyBAQAogI2ltcG9ydCAiSFRUUFNlcnZlci5oIgog
I2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAiVXRpbGl0aWVzLmgiCi0jaW1wb3J0
IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNp
dGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KQEAgLTM3LDE0ICszNywx
NCBAQCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NFbnRpdGxlbWVudHMpCiB7CiAgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpbW1tXS1dlYlZpZXdDb25m
aWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV1dKTsKICAgICBbd2ViVmlldyBzeW5j
aHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJzaW1wbGUiXTsKLSAgICBXS1Byb2Nlc3NQb29s
ICpwb29sID0gW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2w7Ci0gICAgYm9vbCBo
YXNFbnRpdGxlbWVudCA9IFtwb29sIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVz
dGluZzpAImNvbS5hcHBsZS5yb290bGVzcy5zdG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94
Il07CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlICpzdG9yZSA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRp
b25dLndlYnNpdGVEYXRhU3RvcmU7CisgICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9IFtzdG9yZSBf
bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxl
c3Muc3RvcmFnZS5XZWJLaXROZXR3b3JraW5nU2FuZGJveCJdOwogI2lmIFBMQVRGT1JNKE1BQykg
JiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKICAgICBFWFBFQ1RfVFJVRShoYXNFbnRpdGxlbWVu
dCk7CiAjZWxzZQogICAgIEVYUEVDVF9GQUxTRShoYXNFbnRpdGxlbWVudCk7CiAjZW5kaWYKLSAg
ICBFWFBFQ1RfRkFMU0UoW3Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0
aW5nOkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7CisgICAgRVhQRUNUX0ZBTFNFKFtzdG9yZSBfbmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJd
KTsKIH0KIAogVEVTVChXZWJLaXQsIEhUVFBSZWZlcmVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lz
dGVudERhdGFTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
TmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KaW5kZXggNjA5OGU4
ZGFkMjUyZTU5ZWM0OTEyNTBiNDIxNmQzY2QwOTM2ZThmNy4uMmY4YTJlMzNmZTg3MDNiYWIyZDhl
MDUxMDgzMmJlY2Q5ZDQ4OTM0YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9j
ZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRp
YyB2b2lkIGNoZWNrUmVjb3ZlcnlBZnRlckNyYXNoKFdLV2Vic2l0ZURhdGFTdG9yZSAqZGF0YVN0
b3JlKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZh
bHNlOwogCi0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVE
YXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBbd2ViVmlldyBsb2FkUmVx
dWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnNpbXBsZTJdXTsKICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24u
bW0KaW5kZXggOTVkYzlkOThkZjEzYjA3MDVlMDgxN2QwNTg3MjY1MTIwYzE4OGQyMy4uZGYzMjBk
NjRkYWRiZGQxZWUyODNmODY1YzE0NDIzZjNhYzU1NjRiZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25O
YXZpZ2F0aW9uLm1tCkBAIC01Mzg1LDcgKzUzODUsNyBAQCBURVNUKFByb2Nlc3NTd2FwLCBVc2VQ
cmV3YXJtZWRQcm9jZXNzQWZ0ZXJUZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNzKQogCiAgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCku
d2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3
ZWJWaWV3MiA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjp3ZWJWaWV3Q29uZmlndXJhdGlvbi5n
ZXQoKV0pOwogICAgIFt3ZWJWaWV3MiBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0
KCldOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCmluZGV4IDBlMTBjMzRlZWM4MmM2ZjY1
OTJiYjdjNDI3NGQwZTQ1NWVhZjExZTguLmEzYWJhMjMxYTkzYjNkNWYwMGExOTNjNDdjMjc2Nzg2
NGIzNTA1NWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KQEAgLTcxOSw3ICs3MTks
NyBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jZXNzUmVzdGFydCkK
IAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXcyID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9u
OmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAtNzUyLDcgKzc1Miw3IEBAIFRFU1QoUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcywgTmV0d29ya1Byb2Nlc3NSZXN0YXJ0KQogCiAgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5w
cm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAg
IGF1dG8gd2ViVmlldzMgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5n
ZXQoKV0pOwogCkBAIC0xNTU4LDEwICsxNTU4LDggQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLCBNaWdyYXRlRGF0YUZyb21NaXNzaW5nVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFNhbWVTaXQK
IAogVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhO
b1Byb2Nlc3NQb29sKQogeworICAgIE5TVVJMICppdHBSb290VVJMID0gW05TVVJMIGZpbGVVUkxX
aXRoUGF0aDpbTlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21w
b25lbnQ6QCJDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sVGVzdCJdIGlzRGly
ZWN0b3J5OllFU107CiAgICAgYXV0byBkZWZhdWx0RmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdl
ciBkZWZhdWx0TWFuYWdlcl07Ci0gICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24g
KmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uIG5ld10gYXV0b3JlbGVhc2VdOwotICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtbW1dLV2Vic2l0
ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1
cmF0aW9uXSBhdXRvcmVsZWFzZV07Ci0gICAgTlNVUkwgKml0cFJvb3RVUkwgPSBbW2RhdGFTdG9y
ZSBfY29uZmlndXJhdGlvbl0gX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnldOwogICAg
IE5TVVJMICpmaWxlVVJMID0gW2l0cFJvb3RVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50
OkAib2JzZXJ2YXRpb25zLmRiIl07CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciByZW1vdmVJdGVt
QXRQYXRoOml0cFJvb3RVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVDVF9GQUxTRShbZGVm
YXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6aXRwUm9vdFVSTC5wYXRoXSk7CkBAIC0x
NTcyLDYgKzE1NzAsMTAgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBDYW5BY2Nlc3NE
YXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sKQogICAgIEVYUEVDVF9UUlVFKFtkZWZhdWx0Rmls
ZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpuZXdGaWxlVVJMLnBhdGhdKTsKICAgICBbZGVmYXVs
dEZpbGVNYW5hZ2VyIGNvcHlJdGVtQXRQYXRoOm5ld0ZpbGVVUkwucGF0aCB0b1BhdGg6ZmlsZVVS
TC5wYXRoIGVycm9yOm5pbF07CiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1bHRGaWxlTWFuYWdlciBm
aWxlRXhpc3RzQXRQYXRoOmZpbGVVUkwucGF0aF0pOworCisgICAgX1dLV2Vic2l0ZURhdGFTdG9y
ZUNvbmZpZ3VyYXRpb24gKmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19XS1dlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGRhdGFTdG9yZUNvbmZp
Z3VyYXRpb24uX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBpdHBSb290VVJMOwor
ICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRX
aXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CiAg
ICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKIAog
ICAgIHN0YXRpYyBib29sIGRvbmVGbGFnID0gZmFsc2U7CkBAIC0xNjMzLDEyICsxNjM1LDEyIEBA
IFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgU3RvcmVTdXNwZW5zaW9uKQogICAgIFt3ZWJW
aWV3MiBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CiAKICAgICBkb25lRmxhZyA9
IGZhbHNlOwotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFy
ZVRvU3VzcGVuZDpeeworICAgIFtkYXRhU3RvcmUxIF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJl
VG9TdXNwZW5kOl57CiAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKICAgICB9XTsKICAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKIAotICAgIFtzaGFyZWRQcm9jZXNzUG9v
bCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbZGF0YVN0b3JlMSBfc2VuZE5l
dHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIH0KIAogQGludGVyZmFjZSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU2NoZW1lSGFuZGxlciA6IE5TT2JqZWN0IDxXS1VSTFNjaGVtZUhhbmRsZXI+CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3Jr
ZXJCYXNpYy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2Vydmlj
ZVdvcmtlckJhc2ljLm1tCmluZGV4IDM0YTRmNWM1MzhiOWIwZTlmY2IwNTA3MmIxNzAyODhlOWU0
ZTlmOGYuLjJmOGUzNGRiYTZkYTQ3MjM1NjU1ZmYwZGIyYWRjYTFiZjhjNTY3MjAgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJh
c2ljLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2Vydmlj
ZVdvcmtlckJhc2ljLm1tCkBAIC01NTgsNyArNTU4LDcgQEAgVEVTVChTZXJ2aWNlV29ya2Vycywg
VXNlckFnZW50T3ZlcnJpZGUpCiAKICAgICBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKIAotICAgIG1lc3NhZ2VIYW5kbGVyID0g
YWRvcHROUyhbW1NXVXNlckFnZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0
ZWRNZXNzYWdlOkAiTWVzc2FnZSBmcm9tIHdvcmtlcjogQmFyIEN1c3RvbSBVc2VyQWdlbnQiXSk7
CisgICAgbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxl
ciBhbGxvY10gaW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBG
b28gQ3VzdG9tIFVzZXJBZ2VudCJdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRD
b250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBu
YW1lOkAic3ciXTsKIAogICAgIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29u
ZmlndXJhdGlvbi5nZXQoKV0pOwpAQCAtNjMzLDggKzYzMyw2IEBAIFRFU1QoU2VydmljZVdvcmtl
cnMsIENhY2hlU3RvcmFnZVJlc3RvcmVGcm9tRGlzaykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtXS1dlYnNpdGVEYXRhU3Rv
cmUgX2RlbGV0ZURlZmF1bHREYXRhU3RvcmVGb3JUZXN0aW5nXTsKLQogICAgIFNlcnZpY2VXb3Jr
ZXJUQ1BTZXJ2ZXIgc2VydmVyKHsKICAgICAgICAgeyAidGV4dC9odG1sIiwgbWFpbkNhY2hlU3Rv
cmFnZUJ5dGVzIH0KICAgICB9LCB7CkBAIC05ODIsNiArOTgwLDcgQEAgVEVTVChTZXJ2aWNlV29y
a2VycywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKIAogICAgIFJldGFpblB0cjxXS1dl
YlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBzZXRDb25maWd1cmF0aW9uSW5qZWN0ZWRC
dW5kbGVQYXRoKGNvbmZpZ3VyYXRpb24uZ2V0KCkpOworICAgIFJldGFpblB0cjxXS1Byb2Nlc3NQ
b29sPiBvcmlnaW5hbFByb2Nlc3NQb29sID0gY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9v
bDsKIAogICAgIGRvbmUgPSBmYWxzZTsKIApAQCAtMTAzNSw3ICsxMDM0LDcgQEAgVEVTVChTZXJ2
aWNlV29ya2VycywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKICAgICBkb25lID0gZmFs
c2U7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5nIHRoZSBzaW1wbGUgcGFnZSBkaWQg
bm90IHN0YXJ0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgotICAgIEVYUEVDVF9FUSgwdSwg
d2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJv
Y2Vzc0NvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlv
bi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CiAKICAgICB3ZWJWaWV3
ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOm5ld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAg
ICBFWFBFQ1RfRVEoMnUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5f
d2ViUHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3YXJtZWQpOwpAQCAtMTA0Myw5ICsxMDQyLDggQEAg
VEVTVChTZXJ2aWNlV29ya2VycywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKICAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IGxvYWRpbmcgdGhpcyBwYWdlIGRpZCBzdGFydCB0aGUgc2Vydmlj
ZSB3b3JrZXIgcHJvY2Vzcy4KICAgICBFWFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmln
dXJhdGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7Ci0KKyAgICBF
WFBFQ1RfRVEoMXUsIG9yaWdpbmFsUHJvY2Vzc1Bvb2wuZ2V0KCkuX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzQ291bnQpOwogICAgIFtbY29uZmlndXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSByZW1vdmVE
YXRhT2ZUeXBlczpbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbFdlYnNpdGVEYXRhVHlwZXNdIG1vZGlm
aWVkU2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XigpIHsKICAg
ICAgICAgZG9uZSA9IHRydWU7CiAgICAgfV07CkBAIC0xNjE4LDIxICsxNjE2LDM1IEBAIHN0YXRp
YyBzaXplX3QgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCB1c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzLCBiCiAgICAgcmV0dXJuIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlv
bi5wcm9jZXNzUG9vbC5fd2ViUHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3YXJtZWQ7CiB9CiAKLVRF
U1QoU2VydmljZVdvcmtlcnMsIE91dE9mQW5kSW5Qcm9jZXNzU2VydmljZVdvcmtlcikKK1RFU1Qo
U2VydmljZVdvcmtlcnMsIE91dE9mUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCiB7CiAgICAgYm9vbCB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TG9h
ZEFib3V0QmxhbmsgPSB0cnVlOwogCiAgICAgRVhQRUNUX0VRKDF1LCBsYXVuY2hTZXJ2aWNlV29y
a2VyUHJvY2VzcyghdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgIWZpcnN0TG9hZEFi
b3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2VycywgSW5Qcm9jZXNzU2VydmljZVdv
cmtlcikKK3sKKyAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVl
OworICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CisKICAgICBFWFBFQ1RfRVEo
MnUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7CiB9CiAKLVRFU1QoU2VydmljZVdvcmtlcnMs
IExvYWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hTZXJ2aWNlV29ya2VyKQorVEVT
VChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaE91
dE9mUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCiB7CiAgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVl
OwogCiAgICAgRVhQRUNUX0VRKDF1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2VzcyghdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgZmlyc3RMb2FkQWJvdXRCbGFuaykpOworfQorCitU
RVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdo
SW5Qcm9jZXNzU2VydmljZVdvcmtlcikKK3sKKyAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MgPSB0cnVlOworICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7
CisKICAgICBFWFBFQ1RfRVEoMnUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGZpcnN0TG9hZEFib3V0QmxhbmspKTsKIH0KIApAQCAt
MTk0NCwxMSArMTk1NiwxMSBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTdXNwZW5kTmV0d29ya1By
b2Nlc3MpCiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IGZpbGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0aF0pOwogCi0gICAgWyB3ZWJWaWV3LmdldCgp
LmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5k
SW1taW5lbnRseV07CisgICAgW3dlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0
YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwogCiAgICAg
RVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQ
YXRoOnN3REJQYXRoLnBhdGhdKTsKIAotICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9u
LnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFt3ZWJWaWV3
LmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNz
RGlkUmVzdW1lXTsKIAogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnNlcnZlci5yZXF1ZXN0KCld
OwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5t
bQppbmRleCBhMzVmMDUzNTBhYWI0YjQyZjM2YzQ2YWVjZGVlZWU2Y2U1NDRlZjg2Li4zMzc2MDky
YTE5NWI1MTJkYTY3YzQ5NmU0NTIxN2I5MTRmZTJhNTc5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0K
QEAgLTQ3OSw4ICs0NzksNiBAQCBzdGF0aWMgYm9vbCBmaW5pc2hlZDsKIH0KIEBlbmQKIAotLy8g
RklYTUU6IG9uIGlPUywgVUkgcHJvY2VzcyBzaG91bGQgYmUgdXNpbmcgdGhlIHNhbWUgY29va2ll
IGZpbGUgYXMgdGhlIG5ldHdvcmsgcHJvY2VzcyBmb3IgZGVmYXVsdCBzZXNzaW9uLgotI2lmIFBM
QVRGT1JNKE1BQykKIGVudW0gY2xhc3MgU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgeyBO
bywgWWVzIH07CiB2b2lkIHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNo
b3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5n
KQogewpAQCAtNTg5LDIwICs1ODcsNjYgQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91
dFByb2Nlc3NQb29sV2l0aFByZXdhcm1pbmcpCiAgICAgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRo
b3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmc6Olllcyk7CiB9CiAK
LSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KIEBpbnRlcmZhY2UgQ2hlY2tTZXNzaW9uQ29va2ll
VUlEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS1VJRGVsZWdhdGU+CistIChOU1N0cmluZyAqKWFsZXJ0
Q29va2llSFRNTDsKKy0gKE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2U7CiBAZW5kCiAKLUBpbXBs
ZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlCitAaW1wbGVtZW50YXRpb24g
Q2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBf
bWVzc2FnZTsKK30KKwogLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkph
dmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0
ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIEVYUEVDVF9TVFJFUSgiU2Vzc2lvbkNv
b2tpZU5hbWU9Q29va2llVmFsdWUiLCBtZXNzYWdlLlVURjhTdHJpbmcpOworICAgIF9tZXNzYWdl
ID0gbWVzc2FnZTsKICAgICBmaW5pc2hlZCA9IHRydWU7CiAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKIH0KKworLSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZQoreworICAgIHdoaWxlICghX21l
c3NhZ2UpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAg
cmV0dXJuIF9tZXNzYWdlLmF1dG9yZWxlYXNlKCk7Cit9CisKKy0gKE5TU3RyaW5nICopYWxlcnRD
b29raWVIVE1MCit7CisgICAgcmV0dXJuIEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50
LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBp
ICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsg
YWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOworfQorCiBAZW5kCiAKK1RFU1Qo
V2ViS2l0LCBXS0hUVFBDb29raWVTdG9yZU11bHRpcGxlVmlld3MpCit7CisgICAgVGVzdFdLV2Vi
VmlldyAqd2ViVmlldzEgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAg
W3dlYlZpZXcxIHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IG5ldHdvcmsgcHJv
Y2VzcyJdOworCisgICAgTlNIVFRQQ29va2llICpzZXNzaW9uQ29va2llID0gW05TSFRUUENvb2tp
ZSBjb29raWVXaXRoUHJvcGVydGllczpAeworICAgICAgICBOU0hUVFBDb29raWVQYXRoOiBAIi8i
LAorICAgICAgICBOU0hUVFBDb29raWVOYW1lOiBAIlNlc3Npb25Db29raWVOYW1lIiwKKyAgICAg
ICAgTlNIVFRQQ29va2llVmFsdWU6IEAiQ29va2llVmFsdWUiLAorICAgICAgICBOU0hUVFBDb29r
aWVEb21haW46IEAiMTI3LjAuMC4xIiwKKyAgICB9XTsKKworICAgIF9fYmxvY2sgYm9vbCBzZXRD
b29raWVEb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcxLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURh
dGFTdG9yZS5odHRwQ29va2llU3RvcmUgc2V0Q29va2llOnNlc3Npb25Db29raWUgY29tcGxldGlv
bkhhbmRsZXI6XnsKKyAgICAgICAgc2V0Q29va2llRG9uZSA9IHRydWU7CisgICAgfV07CisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZzZXRDb29raWVEb25lKTsKKworICAgIGF1dG8gZGVs
ZWdhdGUgPSBhZG9wdE5TKFtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIG5ld10pOworICAg
IFt3ZWJWaWV3MSBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3
MSBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VS
TCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RS
RVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZh
bHVlIik7CisKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtbVGVzdFdLV2ViVmlldyBu
ZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzIgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5n
ZXQoKV07CisgICAgW3dlYlZpZXcyIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tp
ZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1d
OworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lv
bkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKK30KKwogVEVTVChXS0hUVFBDb29raWVTdG9yZSwg
V2l0aG91dFByb2Nlc3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKIHsKICAgICBSZXRhaW5QdHI8V0tX
ZWJzaXRlRGF0YVN0b3JlPiBlcGhlbWVyYWxTdG9yZVdpdGhDb29raWVzID0gW1dLV2Vic2l0ZURh
dGFTdG9yZSBub25QZXJzaXN0ZW50RGF0YVN0b3JlXTsKQEAgLTYyNyw5ICs2NzEsOCBAQCBURVNU
KFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOwogICAgIGZpbmlzaGVkID0g
ZmFsc2U7CiAgICAgCi0gICAgTlNTdHJpbmcgKmFsZXJ0Q29va2llSFRNTCA9IEAiPHNjcmlwdD52
YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsg
aSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0o
KTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4i
OwotICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOmFsZXJ0Q29va2llSFRNTCBiYXNlVVJMOltO
U1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKLSAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzpb
ZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAi
aHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRG
b3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CiB9CiAKIHN0YXRp
YyBib29sIGFyZUNvb2tpZXNFcXVhbChOU0hUVFBDb29raWUgKmZpcnN0LCBOU0hUVFBDb29raWUg
KnNlY29uZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KaW5kZXggYWM3ZGU0MTUx
MmM0NTEzOGVjNWU0YzA5ZTUxMTVkMTZjZDIzYjIyZS4uYWMxNjUzNWRmZDkzOTk5ZDJlYzUwZGNm
ZDcxYzNhNTZkMTEzZWM3YSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KQEAg
LTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VSTFNjaGVtZVRhc2tQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRl
RGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgpAQCAtMTUyLDcgKzE1Myw3
IEBAIFRFU1QoVVJMU2NoZW1lSGFuZGxlciwgTGVha3MzKQogCiAgICAgcnVuVW50aWxUYXNrc0lu
RmxpZ2h0KDIpOwogCi0gICAgW3dlYlZpZXcxLmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlldzEuZ2V0KCkuY29uZmln
dXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAg
ICBydW5VbnRpbFRhc2tzSW5GbGlnaHQoMCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1
c3RvbVBhdGhzLm1tCmluZGV4IDkyY2YzYTYxOThhNWI5ZDE0NTQ0OTA1ZGI5ZTk0OGYxMWM3MjU2
ZGUuLmJmOGJkZTgzMWEyODU5YmNmMzQxMzgwNjE4OGI1OTFmY2FhOWQzYWIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1
c3RvbVBhdGhzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RhdGlj
IHZvaWQgcnVuV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQ
cmV3YXJtaW5nIHNob3VsZEUKICAgICAvLyBOb3csIHdpdGggYnJhbmQgbmV3IFdLV2Vic2l0ZURh
dGFTdG9yZXMgcG9pbnRpbmcgYXQgdGhlIHNhbWUgY3VzdG9tIGNvb2tpZSBzdG9yYWdlIGxvY2F0
aW9uLAogICAgIC8vIGluIG5ld2x5IGZpcmVkIHVwIE5ldHdvcmtQcm9jZXNzZXMsIHZlcmlmeSB0
aGF0IHRoZSBmZXRjaCBhbmQgZGVsZXRlIEFQSXMgd29yayBhcyBleHBlY3RlZC4KIAotICAgIFtw
cm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtkYXRhU3RvcmUgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBhdXRvIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFk
b3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246
d2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21E
YXRhU3RvcmUgZmV0Y2hEYXRhUmVjb3Jkc09mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldL
V2Vic2l0ZURhdGFUeXBlQ29va2llcywgbmlsXSBjb21wbGV0aW9uSGFuZGxlcjpeKE5TQXJyYXk8
V0tXZWJzaXRlRGF0YVJlY29yZCAqPiAqIHJlY29yZHMpIHsKQEAgLTI1NSw3ICsyNTUsNyBAQCBz
dGF0aWMgdm9pZCBydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMoU2hvdWxkRW5hYmxlUHJv
Y2Vzc1ByZXdhcm1pbmcgc2hvdWxkRQogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNl
OwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsK
IAotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtkYXRh
U3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBuZXdDdXN0b21EYXRhU3RvcmUg
PSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0
aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpXSk7CiAKICAgICBbbmV3Q3Vz
dG9tRGF0YVN0b3JlIHJlbW92ZURhdGFPZlR5cGVzOltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dl
YnNpdGVEYXRhVHlwZUNvb2tpZXMsIG5pbF0gbW9kaWZpZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQ
YXN0XSBjb21wbGV0aW9uSGFuZGxlcjpeIHsKQEAgLTUzOSw3ICs1MzksNyBAQCBURVNUKFdlYktp
dCwgRG9Mb2FkV2l0aE5vbkRlZmF1bHREYXRhU3RvcmVBZnRlclRlcm1pbmF0aW5nTmV0d29ya1By
b2Nlc3MpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAg
IFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0
b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICByZXF1ZXN0ID0gW05TVVJMUmVx
dWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNl
OkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJL
aXRBUEkucmVzb3VyY2VzIl1dOwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwpA
QCAtODU3LDcgKzg1Nyw3IEBAIFRFU1QoV2ViS2l0LCBNZWRpYUNhY2hlKQogICAgIEVYUEVDVF9G
QUxTRShlcnJvcik7CiAKICAgICBkb25lID0gdHJ1ZTsKLSAgICBbW3dlYlZpZXcgY29uZmlndXJh
dGlvbl0ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbW3dlYlZp
ZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdOwogCiAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFBhdGg6cGF0aCBlcnJvcjomZXJy
b3JdOwogICAgIEVYUEVDVF9GQUxTRShlcnJvcik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwCmluZGV4IDFlN2UyMWFkNzQzZTdiMDEwZjdkYmE3MDVmMjNkMGRiNTU4
ZGI0MGMuLmZmMGZhM2FjODY1YTFkYWRhNjFmNDA1ODQ3ZDNkMjBjNDAxMjBkNGUgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC0xMDY0LDggKzEwNjQsNiBA
QCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0
IFRlc3RPcHRpb25zJiBvcHRpb25zLCBSZQogCiAgICAgcmVzZXRRdW90YSgpOwogCi0gICAgV0tD
b250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhw
bGF0Zm9ybUNvbnRleHQoKSwgdHJ1ZSk7Ci0KICAgICBXS0NvbnRleHRDbGVhckN1cnJlbnRNb2Rp
ZmllclN0YXRlRm9yVGVzdGluZyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgp
KTsKIAogICAgIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgZmFsc2UpOwpAQCAtMzEzOSw3ICsz
MTM3LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1p
dHMoYm9vbCBpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWkKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6
dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQogewotICAgIFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVUZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzcyh3ZWJzaXRlRGF0YVN0b3JlKCkpOwogfQogCiB2b2lkIFRlc3RD
b250cm9sbGVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpCkBAIC0zMTcwLDkgKzMxNjgsOCBA
QCBQbGF0Zm9ybVdlYlZpZXcqIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNyZWF0ZU90aGVyUGFn
ZShQbGF0Zm9ybVdlYlZpZXcqIHBhcmVudAogICAgIHJldHVybiBuZXcgUGxhdGZvcm1XZWJWaWV3
KGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpOwogfQogCi1XS0NvbnRleHRSZWYgVGVzdENvbnRyb2xs
ZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0
Q29uZmlndXJhdGlvblJlZiBjb250ZXh0Q29uZmlndXJhdGlvbikKK1dLQ29udGV4dFJlZiBUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBX
S0NvbnRleHRDb25maWd1cmF0aW9uUmVmKQogewotICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJz
aXRlRGF0YVN0b3JlKGNvbnRleHQsIGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCkpOwogICAgIHJl
dHVybiBjb250ZXh0OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409211</attachid>
            <date>2020-09-19 14:21:33 -0700</date>
            <delta_ts>2020-09-19 16:34:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200919142127.patch</filename>
            <type>text/plain</type>
            <size>314185</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk4NjU0NzAxOTc2YTE3OGEz
NTQ1ZDM5ZDA2NmE3NDBmYzA0Y2VlNTQuLjE0YzU2MDA0YjNjMWFhOTg4MWM5YjRjZTRiNGM3NzFl
MWIzMjk5NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzM4IEBACisyMDIwLTA5LTE5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24p
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0
b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuY3BwOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBD
b29raWVTdG9yZTo6Y29va2llc0ZvclVSTCk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9y
ZTo6c2V0Q29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29v
a2llKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVzdHJveWVkKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6dW5y
ZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmNwcDoKKyAgICAgICAgKFdLQ29udGV4dEdldENvb2tpZU1hbmFn
ZXIpOgorICAgICAgICAoV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKToKKyAgICAg
ICAgKFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgIChXS0Nv
bnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdLQ29u
dGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdLQ29udGV4dFNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcpOiBEZWxldGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9zZXRDb29raWVBY2NlcHRQb2xpY3k6XSk6CisgICAgICAgICgtW1dLUHJvY2Vzc1Bv
b2wgX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6XSk6CisgICAgICAgICgtW1dL
UHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1By
b2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3Jl
IF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChf
V2ViS2l0Q29va2llTWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUp
OgorICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9hZGRfY29va2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29v
a2llcyk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAg
ICAod2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1
dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNz
L0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lm1tOgorICAgICAgICAoV2ViS2l0
OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbik6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6
OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVz
cyk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5k
UmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OkRvd25sb2FkUHJveHlNYXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5
TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAg
IChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0
YXJ0TG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5OjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OmF0dGVtcHRSZWxhdW5jaEFmdGVyQ3Jhc2hJZk5lY2Vzc2FyeSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tn
cm91bmRQcmlvcml0eSk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sU2hvdWxkVGFr
ZVVJQmFja2dyb3VuZEFzc2VydGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRo
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OndlYnNp
dGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vz
c2VzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJv
Y2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJv
Y2Vzc0Fzc2VydGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZl
bnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRl
Q29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVB
bGxDb29raWVzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0QWxsQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3Vw
cGxlbWVudE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRl
cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpjcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50
aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25V
UkxGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlj
a0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxT
Y2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6fldlYlByb2Nlc3NQb29sKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3
YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxp
emVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nl
c3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVT
ZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpy
ZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRTZXJ2
aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29u
dGVudFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJl
Z2lzdGVyVVJMU2NoZW1lQXNMb2NhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpyZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFu
ZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2Jh
bFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JXZWJTb2NrZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJD
YWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpz
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHlGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
Ojp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzeW5jTmV0d29ya1Byb2Nlc3NDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc0Fz
c2VydGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29y
a2VyUGFnZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRpZENv
bW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rp
dml0eUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
aGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5l
dHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVj
ZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpk
dW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbik6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVh
clByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c3VibWl0VGVsZW1ldHJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3Vt
bWFyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2ll
QmxvY2tpbmdVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hl
ZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0
aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0Vu
dHJpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bG9n
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFz
SGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fk
c1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9T
YW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVE
b21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNl
c3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFw
cEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbmFt
ZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
Ojpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0
d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1
bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3Rv
cmVGb3JTZXNzaW9uSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwZW5k
aW5nQ29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmFkZFBlbmRpbmdDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRh
U3RvcmVTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZv
cm1TZXROZXR3b3JrUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL2dsaWIvV2ViUHJv
Y2Vzc1Byb3h5R0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cGxh
dGZvcm1HZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJDb29r
aWVNYW5hZ2VyUHJveHlTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSk6CisgICAgICAgICogVUlQcm9jZXNz
L3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyk6CisKIDIwMjAtMDktMTYg
IFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW90ZVNhbXBs
ZUJ1ZmZlckRpc3BsYXlMYXllciBzaG91bGQgcHJvY2VzcyBpdHMgSVBDIG1lc3NhZ2VzIGZyb20g
YSBiYWNrZ3JvdW5kIHRocmVhZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCmluZGV4IGZjZTIzODk4N2E3ODUw
ZjE4YzlmMzA2YzUwZTk4Y2U5ODhkMTI1ZmQuLmViNThmYzk0NWQxOTI1NTQ2MWI4NjBmNGE4Yjhk
YzYxMjVmNTNmODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29v
a2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lk
IFdlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFj
Y2VwdFBvbGljeSBwb2xpY3ksCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJv
Y2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7CisgICAg
Y29tcGxldGlvbkhhbmRsZXIobV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkpLT5jb29raWVBY2NlcHRQb2xpY3koKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmNwcAppbmRleCBiZThkOTY2NjJiZTZkY2Q4NWZhM2MzMjkyOWFlMGYwYjVkMTgy
MzQzLi43ZjQ3NzcxMzJkNTI0NzU4MTgyOTgxYWFmMGMxOGI3MmI3YmEzOTZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ3LDI5
ICszNDcsMTkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
KE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRy
aWJ1dGlvbkRlYnVnTW9kZShwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVn
TW9kZSk7CiAKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Np
b24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
KSkpOwotCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKLSAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQs
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1
b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlP
cmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1
dG8mIGRhdGFTdG9yZVBhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMp
IHsKKyAgICAgICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNv
bnN1bWVQZXJtYW5lbnRseShkYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vy
KHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRh
dGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0
b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMu
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vz
c2lvbihzZXNzaW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CiAjZW5kaWYKLQorICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vz
c2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0
b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAg
ICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Np
b24oKnRoaXMsIFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKLSAgICBib29sIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxh
eUVuYWJsZWQgPSB0cnVlOwotICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25E
ZWxheUVuYWJsZWQsIFdURk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5KSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lv
bklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25E
ZWxheUVuYWJsZWQsIFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uRGlyZWN0b3J5KSwgZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9y
YWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQot
ICAgIGF1dG8qIGRlZmF1bHRTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0gICAgYXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0g
ZGVmYXVsdFNlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3Qg
YXV0byYgY29va2llIDogcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5k
aW5nQ29va2llcykKLSAgICAgICAgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29v
a2llKTsKKyAgICB9CiAKICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRz
LnZhbHVlcygpKQogICAgICAgICBzdXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpA
QCAtNTA1LDggKzQ5NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29u
c3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJv
b2wgc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZp
ZXJCYXNlKQogI2VuZGlmCiB7Ci0gICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3Jr
U3RvcmFnZVNlc3Npb25zLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVz
dWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybjsKQEAgLTUyMSw3ICs1MDksNyBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNz
aW9uSUQsIGJvb2wgc2hvdWxkVQogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlm
aWVyID0gbWFrZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3Jl
YXRlQ2Fub25pY2FsVVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNz
aW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNy
ZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNl
CisgICAgZWxzZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkpCiAgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpjcmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIu
Z2V0KCkpOwogCiAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNv
b2tpZUFQSSgpKSB7CkBAIC01NDQsMjEgKzUzMiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpj
b29raWVBY2NlcHRQb2xpY3lDaGFuZ2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9saWN5
KQogCiBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9y
YWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAg
IGlmIChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAg
ICAgICAgcmV0dXJuICZkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3
b3JrU3RvcmFnZVNlc3Npb25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBj
b25zdAotewotICAgIGlmICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAg
ICBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpOwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNz
aW9uOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNz
aW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+
JiBmdW5jdG9yKQogewotICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAg
IGZvciAoYXV0byYgc3RvcmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFs
dWVzKCkpCiAgICAgICAgIGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCBhYTczMzc3YjczMmY2
MTBiODY3OTA1NmMzN2RmMjhhZWVhMDdhZjgzLi5kYzg2ZjM5Njk3ZmM1MDNlYTRkYmQxYjA2YzMy
Mjk3NWIxZTY5ZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5oCkBAIC0xNzAsNyArMTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNo
TmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
KiBzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3
VGVzdGluZ1Nlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NP
QSkKICAgICB2b2lkIGVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNo
b3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBS
ZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJik7CkBAIC0zNzUsNyArMzc0LDYgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1By
b2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0
d29ya1Byb2Nlc3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBA
IC01NDQsNyArNTQyLDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQs
IHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAg
IEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHRO
ZXR3b3JrU3RvcmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1f
c3RvcmFnZU1hbmFnZXJTZXQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5k
ZXggOTkwMWM1Y2I3M2M3NGZlM2RhNGViZjU3YmE4NTEyODZmZGExMDRiZi4uMDJkZGI5MjM0ZTk5
OWMzZTZjZGNkY2YwYjg3OGI4NzI1ODM2MzI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVy
IDw8IHVpUHJvY2Vzc1NES1ZlcnNpb247CiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29y
a0FUU0NvbnRleHQuZ2V0KCkpOwogI2VuZGlmCi0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVyczsKKyAgICBlbmNvZGVyIDw8IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYg
VVNFKFNPVVApCiAgICAgZW5jb2RlciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5jb2Rl
ciA8PCBpZ25vcmVUTFNFcnJvcnM7CkBAIC02OCw5ICs2OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0
CiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2Rl
ciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCi0gICAgZW5jb2RlciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5IDw8IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUg
PDwgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNl
bmRpZgogICAgIGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2Rl
ciA8PCBlbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTYsMTEgKzEx
MywxMSBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBD
OjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAj
ZW5kaWYKIAotICAgIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzOwotICAgIGlmICghZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9u
YWw8VmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVy
czsKKyAgICBkZWNvZGVyID4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3Rv
cmVQYXJhbWV0ZXJzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMp
OworICAgIHJlc3VsdC5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFy
YW1ldGVycyk7CiAKICNpZiBVU0UoU09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5jb29raWVBY2NlcHRQb2xpY3kpKQpAQCAtMTQyLDIwICsxMzksNiBAQCBib29sIE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBO
ZXR3b3JrUHJvYwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdp
c3RlcmVkQXNOb0FjY2VzcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29y
a2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIE9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LnNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0LnNob3VsZEVuYWJsZUlUUERhdGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggMTFjYTVhMTk5ZmNmZmU4ODNmZmYwYTJm
Zjc5ZGZlNDIxMGQ5ZGFkMS4uNjc0OWRhMGM0YTYzYzIwMjEwNzc4MzU4NDg0NmM5MGQwMTBhMDM0
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtNzEsNyArNzEsNyBAQCBzdHJ1
Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFJldGFpblB0cjxDRkRh
dGFSZWY+IG5ldHdvcmtBVFNDb250ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycyBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBWZWN0b3I8V2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAgICAgCiAjaWYgVVNF
KFNPVVApCiAgICAgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQ
b2xpY3kgeyBXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsK
QEAgLTg1LDEyICs4NSw3IEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyB7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAg
IFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBib29sIHNob3VsZERpc2Fi
bGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkgeyBmYWxzZSB9OwotI2VuZGlm
Ci0gICAgYm9vbCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZSB7IGZhbHNlIH07CisgICAgYm9vbCBz
aG91bGRFbmFibGVJVFBEYXRhYmFzZSB7IHRydWUgfTsKICAgICBib29sIGVuYWJsZUFkQ2xpY2tB
dHRyaWJ1dGlvbkRlYnVnTW9kZSB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5k
ZXggZGE2MzU5MTI0MjIzZGI5NzAzMGQxZWE3N2JjMDBjZWU1MWZiMDE3ZC4uNTAxMGY5YTg2OTAz
OTBkZmZlOWEzNDRlOTkwNWIyNGU2Njg1YzdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpAQCAtNzgs
OSArNzgsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVu
ZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFU
U0NvbnRleHQocGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMDUsMTEg
KzEwMiw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzQ29jb2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUgc2V0U2hh
cmVkVVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVE
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSk7Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNzOjpzb3Vy
Y2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9BUFBMSUNB
VElPTl9BVURJVF9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQyZGNj
OGUzZjliOGYxNjkyOTk3ZjY3MTkyLi40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5M2Uy
MjU2YTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0
d29ya1Byb2Nlc3NDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1
cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1By
b2Nlc3NDcmVhdGkKIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQot
CiB2b2lkIE5ldHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhv
c3QoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYg
aG9zdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRl
eCBjMjczNmUwMjZhNTVkM2Q0MDIwZjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0NjIw
ZjAyYTdkOWU5ZTg2OWVjODY0OTFiN2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAt
NTUsMTUgKzU1LDExIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNp
dGVEYXRhU3RvcmVTZXNzaW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRo
RXh0ZW5zaW9uSGFuZGxlKTsKIAogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFs
KCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0
eSgpKQorICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQ
cm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpKQogICAgICAgICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3Rv
cmFnZUZyb21JZGVudGlmeWluZ0RhdGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdl
SWRlbnRpZmllcik7CiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25J
RCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05l
dHdvcmtTZXNzaW9uLCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkp
LCBXVEZNb3ZlKHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24g
PSBuZXR3b3JrUHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29u
c3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vz
c2lvbi0+c2V0Q29va2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9u
KHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92
ZShwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3Vw
LmNwcAppbmRleCA0MWFmZGNjNjFhZGM1ODNkY2YxOWYyZDQwYWEyODkxZjhhMDEzMjhiLi4wOTNk
NTk5NTk2YTY4ODMwYWYwOTkzZmEzNjgzMWUwYzMyNGJmYmU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApA
QCAtMTQwLDExICsxNDAsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNldElnbm9y
ZVRMU0Vycm9ycyhwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyk7CiB9CiAKLXN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0
Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1h
a2VVbmlxdWU8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3Jl
VExTRXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIFNvdXBOZXR3b3JrU2Vzc2lv
bjo6c2V0U2hvdWxkSWdub3JlVExTRXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXgg
NmQwYzEyOWE3NDA1MTBkMzg2OTczNzA1YWQwOTJlZjEzMmNjMDc1YS4uMDQ4MTBiM2UxOWJlOTZj
YWQxYWQ4MmE0NGRjZWRiMjZlZjc4MjYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcApAQCAtNDAsMTMgKzQwLDkgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKICAgICBlbmNvZGVyIDw8IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBl
bmNvZGVyIDw8IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyOwogICAgIGVuY29kZXIg
PDwgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgZW5jb2RlciA8PCBwZW5k
aW5nQ29va2llczsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGVuY29kZXIg
PDwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGVuY29kZXIgPDwg
aW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtODMsMTIgKzc5LDYgQEAg
T3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgq
Y29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgT3B0aW9uYWw8VmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4+IHBlbmRpbmdDb29raWVzOwotICAgIGRlY29kZXIgPj4gcGVuZGlu
Z0Nvb2tpZXM7Ci0gICAgaWYgKCFwZW5kaW5nQ29va2llcykKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gV1RGTW92ZSgqcGVuZGlu
Z0Nvb2tpZXMpOwotCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgT3B0aW9uYWw8
U3RyaW5nPiBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgZGVjb2RlciA+PiBpbmRleGVk
RGF0YWJhc2VEaXJlY3Rvcnk7CkBAIC0xMDEsMTQgKzkxLDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBD
OjpEZWMKICAgICBpZiAoIWluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IE9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gaW5kZXhlZERhdGFiYXNlVGVtcEJs
b2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJh
c2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIWluZGV4ZWREYXRh
YmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJ
Q0VfV09SS0VSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmgKaW5kZXggZjI3ZGY0ODk4MDlmMzE5NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQz
OS4uZTFiMjMzNzAxOTlmZTM3MDMxZTlkYzVjMDU3ODE1NTAyMWUzNGQ2ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCkBAIC01MSwx
NSArNTEsMTEgQEAgc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKIAogICAgIFZl
Y3Rvcjx1aW50OF90PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0g
ICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXM7CiAgICAgTmV0d29ya1Nl
c3Npb25DcmVhdGlvblBhcmFtZXRlcnMgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogCiAjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgU3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5j
cHAKaW5kZXggYmMwNzg2NmZiYzM5NjhlNzZjYWE5YTM1NjgxMGM2YTJmYjA5ZGNmZC4uZmY5NTU4
OTJiZGEwYjgzYzIzYTk2YTA4MzllZjNiZDBkOTQ2OWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKQEAgLTQ2LDggKzQ2LDYg
QEAgbmFtZXNwYWNlIEFQSSB7CiBIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0Rh
dGFTdG9yZSh3ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUt
PnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3Jl
Ojp+SFRUUENvb2tpZVN0b3JlKCkKQEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+
SFRUUENvb2tpZVN0b3JlKCkKICAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAg
ICBBU1NFUlQoIW1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9j
b29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vz
c1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJB
cHBCb3VuZENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC04MSwzMyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZp
bHRlckFwcEJvdW5kQ29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2kK
IAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChj
b25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVT
dG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiBhbGxDb29raWVzOwotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAg
ICAgICAgICBhbGxDb29raWVzID0gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29v
a2llcygpOwotICAgICAgICBhbGxDb29raWVzLmFwcGVuZFZlY3RvcihtX293bmluZ0RhdGFTdG9y
ZS0+cGVuZGluZ0Nvb2tpZXMoKSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGFsbENvb2tpZXNdICgpIG11dGFibGUgewot
ICAgICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGFsbENvb2tpZXMsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1f
b3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKSwgcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYg
Y29va2llcykgbXV0YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0
YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5h
Z2VyLmdldEFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNv
b2tpZXMpIG11dGFibGUgewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29r
aWVTdG9yZTo6Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybiBjb21w
bGV0aW9uSGFuZGxlcih7IH0pOwotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1
cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFu
YWdlci0+Z2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwgW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYgY29v
a2llcykgbXV0YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0
b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2Vy
LmdldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMp
IG11dGFibGUgewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtMTE1LDc4ICs5NCwyOSBAQCB2
b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChWZWN0bwogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldENvb2tpZXMo
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBmaWx0ZXJBcHBCb3VuZENvb2tp
ZXMoY29va2llcywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiBhcHBCb3Vu
ZENvb2tpZXMpIG11dGFibGUgewotICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3Rv
cmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYg
KCFwb29sKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2ll
cykgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBk
ZWZhdWx0U2Vzc2lvbiBiZWNhdXNlIHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRl
ZCB0byBOZXR3b3JrIFByb2Nlc3Mgd2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmll
ci4KLSAgICAgICAgICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09
IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQot
ICAgICAgICAgICAgICAgICAgICBzZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9y
ZShjb29raWUpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9v
d25pbmdEYXRhU3RvcmUtPmFkZFBlbmRpbmdDb29raWUoY29va2llKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1
dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5PigpOwotICAgICAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5n
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUo
cG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgp
IG11dGFibGUgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7
CisgICAgICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29y
a1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29v
a2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVT
dG9yZTo6ZGVsZXRlQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9v
bCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRp
b25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+
c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29v
a2llLnNlc3Npb24pCi0gICAgICAgICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vz
c0Nvb2tpZVN0b3JlKGNvb2tpZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5n
RGF0YVN0b3JlLT5yZW1vdmVQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2ll
TWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+
KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgY29va2llLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1f
b3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBj
b29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IGNvb2tpZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29r
aWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5w
cm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7
Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFs
KCkpCi0gICAgICAgICAgICBkZWxldGVDb29raWVzSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3Rv
cmUoKTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1h
bmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Pigp
OwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpKTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3Rv
cmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIu
ZGVsZXRlQWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8v
IEZJWE1FOiBUaGUgQ29tcGxldGlvbkhhbmRsZXIgc2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRp
c3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2ll
U3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2Vw
dFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29s
Rm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAg
aWYgKCFtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAg
ICAgICAgIHNldEhUVFBDb29raWVBY2NlcHRQb2xpY3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVT
dG9yZShwb2xpY3kpOwotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byog
Y29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293
bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29v
a2llTWFuYWdlci5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgcG9saWN5LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgSFRUUENvb2tpZVN0b3JlOjpmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjI3LDIxICsxNTcsNyBAQCB2b2lkIEhUVFBDb29r
aWVTdG9yZTo6cmVnaXN0ZXJPYnNlcnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCiAKICAgICBtX2Nv
b2tpZU1hbmFnZXJQcm94eU9ic2VydmVyID0gbWFrZVVuaXF1ZTxBUElXZWJDb29raWVNYW5hZ2Vy
UHJveHlPYnNlcnZlcj4oKnRoaXMpOwogCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0
b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAo
IXBvb2wpIHsKLSAgICAgICAgQVNTRVJUKCFtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMpOwot
Ci0gICAgICAgIC8vIExpc3RlbiBmb3IgY29va2llIG5vdGlmaWNhdGlvbnMgaW4gdGhlIFVJUHJv
Y2VzcyBpbiB0aGUgbWVhbnRpbWUuCi0gICAgICAgIHN0YXJ0T2JzZXJ2aW5nQ2hhbmdlc1RvRGVm
YXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICBjb29raWVz
RGlkQ2hhbmdlKCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIG1fb2JzZXJ2aW5nVUlQcm9jZXNz
Q29va2llcyA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVk
Q29va2llTWFuYWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3du
aW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29i
c2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCkBA
IC0yNzYsNDYgKzE5MiwxMCBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0RpZENoYW5n
ZSgpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCgpCiB7CiAg
ICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+dW5yZWdpc3Rlck9ic2VydmVyKG1fb3du
aW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIp
OwotICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBudWxscHRyOwotCi0gICAgYXV0
byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VP
cGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkg
PSAmbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwog
ICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7
CiB9CiAKLXZvaWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucygpCi17Ci0gICAgQVNTRVJUKCFtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5l
cklkZW50aWZpZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlm
aWVyID0gV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVy
KFt0aGlzXShXZWJQcm9jZXNzUG9vbCYgbmV3UHJvY2Vzc1Bvb2wpIHsKLSAgICAgICAgaWYgKCFt
X293bmluZ0RhdGFTdG9yZS0+aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wobmV3UHJvY2Vzc1Bvb2wp
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIE5vdyB0aGF0IGFuIGFzc29jaWF0
ZWQgcHJvY2VzcyBwb29sIGV4aXN0cywgd2UgbmVlZCB0byBmbHVzaCB0aGUgVUkgcHJvY2VzcyBj
b29raWUgc3RvcmUKLSAgICAgICAgLy8gdG8gbWFrZSBzdXJlIGFueSBjaGFuZ2VzIGFyZSByZWZs
ZWN0ZWQgd2l0aGluIHRoZSBuZXcgcHJvY2VzcyBwb29sLgotICAgICAgICBmbHVzaERlZmF1bHRV
SVByb2Nlc3NDb29raWVTdG9yZSgpOwotICAgICAgICBuZXdQcm9jZXNzUG9vbC5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpOwotCi0gICAgICAgIGlmIChtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVy
KSB7Ci0gICAgICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbmV3UHJvY2Vz
c1Bvb2wuc3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAg
ICAgICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9v
d25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZl
cik7Ci0gICAgICAgIH0KLSAgICAgICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZp
Y2F0aW9ucygpOwotICAgIH0pOwotfQotCi12b2lkIEhUVFBDb29raWVTdG9yZTo6dW5yZWdpc3Rl
ckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAgaWYgKG1fcHJvY2Vzc1Bv
b2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcikKLSAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OnVu
cmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIobV9wcm9jZXNzUG9vbENyZWF0aW9u
TGlzdGVuZXJJZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVy
SWRlbnRpZmllciA9IDA7Ci19Ci0KICNpZiAhUExBVEZPUk0oQ09DT0EpCiB2b2lkIEhUVFBDb29r
aWVTdG9yZTo6Zmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKSB7IH0KIFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+IEhUVFBDb29raWVTdG9yZTo6Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nv
b2tpZVN0b3JlQ29va2llcygpIHsgcmV0dXJuIHsgfTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCmluZGV4IGQ2MjBhZGRhNGU3Zjg5NDU2
NjE4YTNlMjJlMWJmZDQzNTc3NzViMTkuLmEwNWY0MTQzMGRiMmIyM2Q0MTc4NDA3OWE0ZmI4NmM3
NDYwYTc1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQ
Q29va2llU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENv
b2tpZVN0b3JlLmgKQEAgLTgzLDkgKzgzLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQ
Q29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lz
dGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVy
Rm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0KICAgICB2b2lkIGZsdXNoRGVmYXVs
dFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7CiAgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpDb29r
aWU+IGdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKICAgICBzdGF0
aWMgdm9pZCBzZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb25zdCBXZWJD
b3JlOjpDb29raWUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQu
Y3BwCmluZGV4IDU4YzU0NTNmNDg5ODdmNWUxYWZhZmVmMzRjNDMzMzVmMWI0Y2M5OTAuLjY1Zjhi
NTNmNWIzZDMwNWNmMjgwYmE1ZDMwYWFlMzdiMzlhY2Y0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcApAQCAtNDExLDExICs0MTEsNiBAQCB2b2lkIFdL
Q29udGV4dFByZWNvbm5lY3RUb1NlcnZlcihXS0NvbnRleHRSZWYsIFdLVVJMUmVmKQogewogfQog
Ci1XS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRS
ZWYgY29udGV4dFJlZikKLXsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1w
bChjb250ZXh0UmVmKS0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KSk7Ci19Ci0KIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0
b3JlKFdLQ29udGV4dFJlZikKIHsKICAgICByZXR1cm4gV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVm
YXVsdERhdGFTdG9yZSgpOwpAQCAtNTI3LDEzICs1MjIsNiBAQCB2b2lkIFdLQ29udGV4dFNldEph
dmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmLAogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFn
ZUNvbGxlY3RvclRpbWVyRW5hYmxlZChlbmFibGUpOwogfQogCi12b2lkIFdLQ29udGV4dFNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVm
IGNvbnRleHQsIGJvb2wgYWxsb3dzKQotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAg
ICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JT
ZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29u
dGV4dENvcHlQbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRS
ZWYpCiB7CiAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRS
ZWYpLT5wbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoKS5sZWFrUmVmKCkpOwpAQCAtNTc1LDEx
ICs1NjMsNiBAQCB2b2lkIFdLQ29udGV4dFNldEZvbnRBbGxvd0xpc3QoV0tDb250ZXh0UmVmIGNv
bnRleHRSZWYsIFdLQXJyYXlSZWYgYXJyYXlSZWYpCiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4
dFJlZiktPnNldEZvbnRBbGxvd0xpc3QoV2ViS2l0Ojp0b0ltcGwoYXJyYXlSZWYpKTsKIH0KIAot
dm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4
dCkKLXsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlTmV0d29ya1Byb2Nl
c3MoKTsKLX0KLQogdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRl
eHRSZWYgY29udGV4dCkKIHsKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRl
U2VydmljZVdvcmtlcnMoKTsKQEAgLTU4Nyw3ICs1NzAsNyBAQCB2b2lkIFdLQ29udGV4dFRlcm1p
bmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29udGV4dFJlZiBjb250ZXh0KQogCiBQcm9jZXNzSUQgV0tD
b250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVm
KQogewotICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+bmV0d29ya1Byb2Nl
c3NJZGVudGlmaWVyKCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgV0tDb250ZXh0QWRkU3Vw
cG9ydGVkUGx1Z2luKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBkb21haW5S
ZWYsIFdLU3RyaW5nUmVmIG5hbWVSZWYsIFdLQXJyYXlSZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5
UmVmIGV4dGVuc2lvbnNSZWYpCkBAIC02MTksMTIgKzYwMiwxMSBAQCB2b2lkIFdLQ29udGV4dENs
ZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0UmVm
KQogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5jbGVhckN1cnJlbnRNb2RpZmllclN0
YXRlRm9yVGVzdGluZygpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcykKK3ZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzcykKIHsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsK
KyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29u
dGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBX
S1dlYnNpdGVEYXRhU3RvcmVSZWYgd2Vic2l0ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0
UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVS
ZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3Rv
cmUoKldlYktpdDo6dG9JbXBsKHdlYnNpdGVEYXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKaW5kZXggMWQ4ZmFiOGExNDg2YWFkYjQ5NDE0NGI5
OGYxMGU5MzYzOGQwYzVlNi4uMmFiNmVmODZmNTMwZTc3Zjc0Y2JkNWRmNTg2MmFjNGQzMGI3OTg3
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2OCw3
ICsxNjgsNiBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihXS0Nv
bnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29u
dGV4dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RF
UFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0
YVN0b3JlKTsKIAogV0tfRVhQT1JUIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250
ZXh0R2V0QXBwbGljYXRpb25DYWNoZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0Nf
QVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZh
dWx0RGF0YVN0b3JlKTsKLVdLX0VYUE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0
Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsK
IFdLX0VYUE9SVCBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlv
bk1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNl
UmVmIFdLQ29udGV4dEdldEljb25EYXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19F
WFBPUlQgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3Rv
cmFnZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lU
SF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAppbmRl
eCBhMDI1MDExZjcwY2M2NTlmNWZhYTA4YTdkNmNiYjNmZjU2ZWU2YTM4Li5kODM5Y2FjYjI4YmE1
NjVkYzk1YTgzOTNiZmNjYWI5MzhkYWRjYzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCkBAIC04MywxMSArODMsOCBAQCBXS19FWFBP
UlQgdm9pZCBXS0NvbnRleHRXYXJtSW5pdGlhbFByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQp
OwogLy8gQXQgc29tZSBwb2ludCBpdCBzaG91bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lk
IFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1X
S19FWFBPUlQgdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRS
ZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tD
b250ZXh0UmVmKTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2Vy
dGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0
eXBlZGVmIHZvaWQgKCpXS0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1Jl
ZiBtZXNzYWdlTmFtZSk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2Fn
ZUZ1bmN0aW9uKFdLQ29udGV4dEludmFsaWRNZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VG
dW5jdGlvbik7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcAppbmRleCA5ZGRhNTkxYzk1MTg5YWIwYzI1YWM1
NTQ2NmMwYTJiZmMzOTI3ZWJjLi5iNzhhOTFlMzNlZGY5ZTI5NGJiNGQ4ZDRjMGRkZjU3Y2U1MDE2
YjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVE
YXRhU3RvcmVSZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vi
c2l0ZURhdGFTdG9yZVJlZi5jcHAKQEAgLTY5LDYgKzY5LDExIEBAIFdLV2Vic2l0ZURhdGFTdG9y
ZVJlZiBXS1dlYnNpdGVEYXRhU3RvcmVDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihXS1dlYnNpdGVE
YXRhU3RvCiAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6Y3JlYXRlKCpXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKSwgc2Vzc2lvbklEKS5sZWFr
UmVmKCkpOwogfQogCit2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpCit7CisgICAgV2ViS2l0Ojp0b0lt
cGwoZGF0YVN0b3JlKS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKK30KKwogdm9pZCBXS1dl
YnNpdGVEYXRhU3RvcmVSZW1vdmVJVFBEYXRhRm9yRG9tYWluKFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiBkYXRhU3RvcmVSZWYsIFdLU3RyaW5nUmVmIGhvc3QsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0
ZURhdGFTdG9yZVJlbW92ZUlUUERhdGFGb3JEb21haW5GdW5jdGlvbiBjYWxsYmFjaykKIHsKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAppbmRleCBlNzdkMDlj
MTA3ZDFkYTA3ODNkMDljMDdlMjgwM2QwODcxMjVlNDhiLi5jM2ZhMWJmM2Y5MjQ4YzJmZTQ5YmUx
MjQzOTY0NDExZjgzMWQyYTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaApAQCAtNTAsNiArNTAsOSBAQCBXS19FWFBP
UlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldl
YlNvY2tldFRlc3RpbmcoVwogCiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVh
ckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwog
CitXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxz
KFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJz
aXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVm
IGRhdGFTdG9yZSk7CisKIFdLX0VYUE9SVCBib29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVS
ZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBl
bmFibGUpOwogdHlwZWRlZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0VwaGVt
ZXJhbEZ1bmN0aW9uKShib29sIGlzRXBoZW1lcmFsLCB2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bv
b2wubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5t
bQppbmRleCBmZjMwOTQ5ODZjMjQzZDA0NzRmMjUyZDM5MWU2Y2NiNzRmMWZlZDViLi5hODAyYjk3
YzdiNDE2Zjk2YmJhNTRmZWJlN2ExZGRkNDM4M2QwYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQpAQCAtNDA2LDI4ICs0MDYs
NiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29u
c3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJTdXBw
b3J0ZWRQbHVnaW5zKCk7CiB9CiAKLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCi17
Ci0gICAgX3Byb2Nlc3NQb29sLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCi0tICh2
b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKLXsKLSAgICBfcHJv
Y2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcoKTsKLX0KLQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoo
dm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIF9wcm9jZXNzUG9vbC0+c2Vu
ZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5k
bGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwotICAgIH0pOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWUKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3Vt
ZSgpOwotfQotCiAtICh2b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29ya2VycwogewogICAgIF9wcm9j
ZXNzUG9vbC0+dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKQEAgLTQzNSwxMiArNDEzLDEyIEBA
IHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBI
YXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAKIC0gKHZvaWQpX3NldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3M6KEJPT0wpdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcwogewot
ICAgIF9wcm9jZXNzUG9vbC0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MpOwogfQogCiAtIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCiB7
Ci0gICAgcmV0dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7Cisg
ICAgcmV0dXJuIDA7CiB9CiAKIC0gKHBpZF90KV9wcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcgpA
QCAtNTYwLDE4ICs1MzgsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBU
b0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNz
UG9vbC0+c2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAK
LS0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAotewot
ICAgIF9wcm9jZXNzUG9vbC0+c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsK
LX0KLQotLSAodm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2Vy
OihCT09MKWFsbG93cwotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBfcHJvY2Vz
c1Bvb2wtPnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3Mp
OwotI2VuZGlmCi19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogLSAoaWQgPF9XS0dlb2xv
Y2F0aW9uQ29yZUxvY2F0aW9uUHJvdmlkZXI+KV9jb3JlTG9jYXRpb25Qcm92aWRlcgogewpAQCAt
NjA0LDExICs1NzAsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0Rp
Y3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIH0pOwogfQogCi0t
IChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcg
KillbnRpdGxlbWVudAotewotICAgIHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
SGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGVudGl0bGVtZW50KTsKLX0KLQogLSAodm9pZClfY2xl
YXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9u
U3BhY2UgKilwcm90ZWN0aW9uU3BhY2UKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyUGVybWFu
ZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2UoV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNl
KHByb3RlY3Rpb25TcGFjZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAppbmRleCA2NzY5MDE1ZTA4NTU4OTk0
Y2Q4YTIxOWExN2E5YzY4YWRlM2I1MzgzLi5iZjQ4Y2ExYzUyYzIyMTk3MzY4Yjg4MjkwNTA3MjIz
ZjBmMjA2Y2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tQcm9jZXNzUG9vbFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaApAQCAtODcsMTAgKzg3LDYgQEAKIC0gKF9XS0Rv
d25sb2FkICopX3Jlc3VtZURvd25sb2FkRnJvbURhdGE6KE5TRGF0YSAqKXJlc3VtZURhdGEgd2Vi
c2l0ZURhdGFTdG9yZTooV0tXZWJzaXRlRGF0YVN0b3JlICopZGF0YVN0b3JlICBwYXRoOihOU1N0
cmluZyAqKXBhdGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC8vIFRl
c3Qgb25seS4gU2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoaWxlIG5vIHdlYiBjb250ZW50IHByb2Nl
c3NlcyBhcmUgcnVubmluZy4KLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdv
cmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxl
ciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwot
LSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkp
OwogLSAodm9pZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xNCksIGlvcygxMi4wKSk7CiAKIC8vIFRlc3Qgb25seS4KQEAgLTEyMiwxMyArMTE4LDEw
IEBACiAtICh2b2lkKV9wcmVjb25uZWN0VG9TZXJ2ZXI6KE5TVVJMICopc2VydmVyVVJMIFdLX0FQ
SV9ERVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1FTlQoIldLV2ViVmlldy5fcHJlY29ubmVjdFRvU2Vy
dmVyIiwgbWFjb3MoMTAuMTMuNCwgV0tfTUFDX1RCQSksIGlvcygxMS4zLCBXS19JT1NfVEJBKSk7
CiAKIC8vIFRlc3Qgb25seS4KLS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9y
U2VydmljZVdvcmtlcjooQk9PTClhbGxvd3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40
KSwgaW9zKDExLjMpKTsKIC0gKHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vz
c0ZvclRlc3Rpbmc6KHBpZF90KXBpZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5
PE5TU3RyaW5nICo+ICopKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTQuNCksIGlvcygxMi4yKSk7Ci0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVt
ZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50
aWFsc0ZvclByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9u
U3BhY2UgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9X2lzQ29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJs
ZWQsIHNldHRlcj1fc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQ6KSBCT09MIF9j
b29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZCBXS19BUElfREVQUkVDQVRFRCgiUGFydGl0
aW9uZWQgY29va2llcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCIsIG1hY29zKDEwLjEyLjMsIDEw
LjE0LjQpLCBpb3MoMTAuMywgMTIuMikpOwotLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dy
b3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3Mo
MTMuMCkpOwogCiAvLyBUZXN0IG9ubHkuCiAtICh2b2lkKV9zZWVkUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0ZvclRlc3RpbmdXaXRoRmlyc3RQYXJ0eTooTlNVUkwgKilmaXJzdFBhcnR5VVJMIHRoaXJk
UGFydHk6KE5TVVJMICopdGhpcmRQYXJ0eVVSTCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbjoo
Qk9PTClzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZChe
KSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciAgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCmluZGV4IDI5OGQ5Y2VjOWU4NGQ4
YTUxMjIwNjVjYzk5MjMzZWY0ZjBiOTUzODkuLmFlOWM0NTA3NzkwODZjYzFlMzExNGNlMTNmMmQy
MTg4ZTc4N2YxNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQpAQCAtNjE3LDYgKzYxNywxMSBAQCBzdGF0aWMg
VmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5T
QXJyYXkgKmRhdGFSZWNvcgogICAgIH0pOwogfQogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hh
c0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAoreworICAgIHJl
dHVybiBfd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcoZW50aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVn
YXRlPilfZGVsZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdldCgpLmdldCgpOwpAQCAt
NjY4LDQgKzY3MywzMiBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+
IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogI2VuZGlmCiB9CiAKKy0g
KHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUt
PnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJv
Y2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sK
KyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVu
ZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25I
YW5kbGVyKV0geworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworfQorCist
ICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKK3sKKyAgICBf
d2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5
Rm9yVGVzdGluZygpOworCit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3Vt
ZQoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUo
KTsKK30KKworLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3Jv
dW5kCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQ
cml2YXRlLmgKaW5kZXggOTkzMjAxMDQ2YjU1MWMzZjI4ZGYyZGMwYTAzNDZkN2JjNzlhYzVmNC4u
NDIxNWRiNzQ3YmEzMjJmYWViOGE0N2UxNjc1YTY1ODM4MTQ3MjYyYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0
b3JlUHJpdmF0ZS5oCkBAIC04NSw5ICs4NSwxNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50
ZWdlciwgX1dLV2Vic2l0ZURhdGFTdG9yZUZldGNoT3B0aW9ucykgewogCiAtICh2b2lkKV9yZW5h
bWVPcmlnaW46KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKiluZXdOYW1lIGZvckRhdGFPZlR5
cGVzOihOU1NldDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNz
SGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9wZXJ0
eSAobnVsbGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxl
Z2F0ZT4gX2RlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkp
OwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0YVN0
b3JlQ29uZmlndXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19J
T1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2
b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NX
aWxsU3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBX
S19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAo
dm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBlbmQKIAog
TlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDFlZTczZWJjMGVhMDM2
Zjg2YjNmZTk0NDE0OTA3MmU2YWM0ZGM3NjcuLjc3MDE0OTk4MzZlZTQ0ZjlhY2YwZTI3MGQ3MGM5
NWQxNmJlNjc4ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlci5oIgogCisjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIlNvdXBDb29raWVQZXJzaXN0ZW50
U3RvcmFnZVR5cGUuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNs
dWRlICJXZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIgpAQCAtNTYsNiArNTcsMTIgQEAgZW51
bSB7CiB9OwogCiBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKKyAgICBXZWJD
b29raWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGRhdGFNYW5hZ2VyKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldERhdGFTdG9yZShkYXRhTWFuYWdlcikubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5h
Z2VyKCk7CisgICAgfQorCiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChkYXRhTWFuYWdlcik7CkBAIC02NCw4ICs3MSw3IEBAIHN0cnVj
dCBfV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29raWVNYW5h
Z2VyUHJpdmF0ZSgpCiAgICAgewotICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Vi
a2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkKLSAgICAg
ICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+
c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CisgICAgICAg
IGNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBu
dWxscHRyKTsKICAgICB9CiAKICAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW5h
Z2VyOwpAQCAtMTM5LDExICsxNDUsOSBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRDb29r
aWVNYW5hZ2VyQ3JlYXRlKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbgogewogICAg
IFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFu
YWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHBy
b2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFn
ZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFu
YWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25h
bF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9
CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2Fs
bGJhY2sobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdf
c2lnbmFsX2VtaXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAg
cmV0dXJuIG1hbmFnZXI7CiB9CiAKQEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1h
bmFnZXIsCiAgICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
R2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQ
ZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0
b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIG1hbmFnZXIt
PnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9u
SUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3Rv
cmFnZVR5cGUoc3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE5Miw4ICsxOTUsNyBAQCB2b2lkIHdl
YmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2Vy
KiBtYW5hZ2VyLCBXZWJLaQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJ
RV9NQU5BR0VSKG1hbmFnZXIpKTsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJr
aXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1h
bmFnZXIpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCktPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lv
bklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAg
bWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
bWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xp
Y3kpLCBbXSgpIHsgfSk7CiB9CiAKIC8qKgpAQCAtMjI0LDcgKzIyNiw3IEBAIHZvaWQgd2Via2l0
X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1h
bmFnZXIsIEdDYW5jCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwcm9jZXNzUG9vbHNb
MF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFz
ayldKFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CisgICAgbWFuYWdl
ci0+cHJpdi0+Y29va2llTWFuYWdlcigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRU
UENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQo
dGFzay5nZXQoKSwgdG9XZWJLaXRDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7
CiB9CkBAIC0yNjksMTEgKzI3MSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9j
b29raWUoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3Jl
dHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRH
UmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkp
OwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FM
aXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdl
IGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0g
ICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0
UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9v
bHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1h
bmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0
YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdl
cigpLnNldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29v
a2llKGNvb2tpZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNr
X3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIwLDEx
ICszMTgsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRD
b29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dXJpKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyht
YW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29r
aWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24g
ZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJv
bSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBw
cm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFu
YWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vz
c2lvbklEKCksIFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZN
b3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAg
IG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYt
PnNlc3Npb25JRCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0g
V1RGTW92ZSh0YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsK
ICAgICAgICAgR0xpc3QqIGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRv
JiBjb29raWUgOiBjb29raWVzKQogICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJl
cGVuZChjb29raWVzTGlzdCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzcy
LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZShXZWJLaXRDb29r
aWVNYW5hZ2VyKiBtYW5hZ2VyLCBTb3VwQ29va2kKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tp
ZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFu
YWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2ll
cyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRp
c2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20s
IHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJv
Y2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFn
ZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8
V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vz
c2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayld
KCkgeworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5kZWxldGVDb29raWUobWFu
YWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9
IFdURk1vdmUodGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5n
ZXQoKSwgVFJVRSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDg5YmU1NmFkNzFkNzE1Njkx
MmEyNjkxNTMwNTdkZjUyN2NkZDQ0NjAuLmI3ZWQ4ODJiM2FlNWRlNWRhNzU4Mjc5OGQxYjY0MmMx
YWRiYTI5NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdFdlYkNvbnRleHQuY3BwCkBAIC00MDQsNyArNDA0LDYgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgcHJpdi0+
d2Vic2l0ZURhdGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9uZXcoImxvY2FsLXN0b3JhZ2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0
b3J5LmRhdGEoKSwgbnVsbHB0cikpOwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9j
ZXNzUG9vbDo6Y3JlYXRlKGNvbmZpZ3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5z
ZXRQcmltYXJ5RGF0YVN0b3JlKHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShw
cml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+
c2V0VXNlck1lc3NhZ2VIYW5kbGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2Us
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpIHsKICAgICAgICAgLy8gU2luayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRy
PFdlYktpdFVzZXJNZXNzYWdlPiB1c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRl
KFdURk1vdmUobWVzc2FnZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Np
b24uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9u
U2Vzc2lvbi5jcHAKaW5kZXggNGFiNDdmZmY1OTExZWVjMzdlNTZiYzViYmIzMjllYmFlYTdkMzg2
NS4uMzAwNmY0ZmFlNmM0M2MyNmJmNDA4MjJiNmRlODY4ZWYyZTAyY2ZiYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9u
U2Vzc2lvbi5jcHAKQEAgLTEzOTIsOCArMTM5Miw4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OmFkZFNpbmdsZUNvb2tpZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
CiAKICAgICBjb29raWUuaHR0cE9ubHkgPSAqaHR0cE9ubHk7CiAKLSAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKHBhZ2Ut
PndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2NhbGxiYWNrXSgp
IHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJz
aXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29v
a2llTWFuYWdlci5zZXRDb29raWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQo
KSwgeyBjb29raWUgfSwgW2NhbGxiYWNrXSgpIHsKICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNj
ZXNzKCk7CiAgICAgfSk7CiB9CkBAIC0xNDA5LDggKzE0MDksOCBAQCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxD
b29raWVzKAogCiAgICAgU3RyaW5nIGhvc3QgPSBhY3RpdmVVUkwuaG9zdCgpLnRvU3RyaW5nKCk7
CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQ
b29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5h
Z2VyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5z
ZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3Qp
IH0pOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlciA9IHBhZ2UtPndl
YnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBj
b29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFT
dG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVk
ZWQoaG9zdCkgfSk7CiAKICAgICByZXR1cm4geyB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaAppbmRleCA0MWMwYTBmYmY1MDZlZmExNDA4
YmNlZjlhZjhhOTBiODVhMWFkMDhhLi40ZjM5OGI1MzBmNjA4NTc1Yzk2N2I4M2M3NGZhMmY0MzI4
ZjZjZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9j
ZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNz
UHJveHkuaApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+QXV4aWxpYXJ5
UHJvY2Vzc1Byb3h5KCk7CiAKICAgICB2b2lkIGNvbm5lY3QoKTsKLSAgICB2b2lkIHRlcm1pbmF0
ZSgpOworICAgIHZpcnR1YWwgdm9pZCB0ZXJtaW5hdGUoKTsKIAogICAgIHZpcnR1YWwgUHJvY2Vz
c1Rocm90dGxlciYgdGhyb3R0bGVyKCkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudC5oCmluZGV4IGRiZTQ0Zjk1OTQxMDUxMTIxNTEyOGQyOWQyMTRlZWUwNzRhYWY4NGMuLjNj
NDI4NzJlMTVlMDNmNWFlNjEzM2JjNWE5MmFjMmFjODE4M2RmNDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudC5oCkBAIC00MCwxMiArNDAsMTUgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiAKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OwogCisvLyBGSVhNRTog
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IGlzIHVubmVlZGVkIG5vdy4KKy8vIFRoaXMgaXMg
anVzdCBhIGxlZnRvdmVyIG9uIENvY29hIHBsYXRmb3JtcyB3ZSBhcmUgdHJ5aW5nIHRvIG1vdmUg
YXdheSBmcm9tIGFuZCBkb2VzIG5vdCBuZWVkIGFuIEFQSSBhYnN0cmFjdGlvbi4KIGNsYXNzIExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCBmaW5hbCA6IHB1YmxpYyBBUEk6OkN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudCB7Ci1wcml2YXRlOgorcHVibGljOgorICAgIHN0YXRpYyBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQmIHNpbmdsZXRvbigpOwogICAgIHZvaWQg
c3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5JiwgTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JikgZmluYWw7CiAg
ICAgdm9pZCBzdG9wTG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYsIExl
Z2FjeUN1c3RvbVByb3RvY29sSUQpIGZpbmFsOwogICAgIHZvaWQgaW52YWxpZGF0ZShMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYpIGZpbmFsOwotCitwcml2YXRlOgogICAgIEhhc2hN
YXA8TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgUmV0YWluUHRyPFdLQ3VzdG9tUHJvdG9jb2xMb2Fk
ZXI+PiBtX2xvYWRlck1hcDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5t
bQppbmRleCAxNTEyMjkwNDVmMTNlOWNkZGJlMDkxZTYyN2JmYTFmZTIwNmRlMjg5Li4xNGQwYjZi
ZDFkNmU1NTU5ZWM3ZTZiMWEyZmJhODMxYmIzN2FiN2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50Lm1tCkBAIC0xMzksNiArMTM5LDEyIEBACiBuYW1lc3BhY2UgV2ViS2l0IHsK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQmIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDo6c2luZ2xldG9uKCkKK3sK
KyAgICBOZXZlckRlc3Ryb3llZDxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+IGNs
aWVudDsKKyAgICByZXR1cm4gY2xpZW50OworfQorCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudDo6c3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclBy
b3h5JiBtYW5hZ2VyLCBXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9j
b2xJRCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBjb3JlUmVxdWVzdCkKIHsKICAgICBOU1VSTFJl
cXVlc3QgKnJlcXVlc3QgPSBjb3JlUmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQ
b2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KaW5kZXggNzZkN2E2NDA0MWEyOTFk
NWYyOTczNTE3NmUzMWVhNzBmNWVkNTU2Yy4uMTM2NzBlMmQ4MGIwMTg0NzAzNWMxOWRmODkyMTFm
Yzc1NTU2YzY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
UHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJQcm9jZXNzUG9vbENvY29hLm1tCkBAIC0xMzQsOCArMTM0LDkgQEAgc3RhdGljIHZvaWQgcmVn
aXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0
ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
LSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChw
cm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVh
Y2hXZWJzaXRlRGF0YVN0b3JlKFtlbmFibGVkID0gcHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgp
XSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3
b3JrUHJvY2VzcygpLnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoZW5hYmxlZCk7CisgICAg
fSk7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBpZiAoIW1fcHJvY2Vz
c1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpKQpAQCAtMTY2LDggKzE2
Nyw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiAgICAgaWYg
KCFbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiV2Vi
S2l0U3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIiXSkKICAgICAgICAgaW5zdGFsbE1lbW9y
eVByZXNzdXJlSGFuZGxlcigpOwogCi0gICAgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50KG1ha2VVbmlxdWU8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKTsK
LQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAg
ICBpZiAoIV9NR0NhY2hlVmFsaWQoKSkgewogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBe
ewpAQCAtNDkzLDIyICs0OTIsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYQogCiAgICAgTlNV
c2VyRGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1
bHRzXTsKIAotICAgIHsKLSAgICAgICAgYm9vbCBpc1NhZmFyaSA9IGZhbHNlOwotICAgICAgICBi
b29sIGlzTWluaUJyb3dzZXIgPSBmYWxzZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
ICAgICBpc1NhZmFyaSA9IFdlYkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01vYmlsZVNhZmFyaSgp
OwotICAgICAgICBpc01pbmlCcm93c2VyID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTWlu
aUJyb3dzZXIoKTsKLSNlbGlmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJD
b3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9
IFdlYkNvcmU6Ok1hY0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZW5kaWYKLSAgICAg
ICAgaWYgKGlzU2FmYXJpIHx8IGlzTWluaUJyb3dzZXIpIHsKLSAgICAgICAgICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0
dHBQcm94eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcgKilX
ZWJLaXQySFRUUFByb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBzUHJv
eHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0
MkhUVFBTUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcGFyYW1l
dGVycy5uZXR3b3JrQVRTQ29udGV4dCA9IGFkb3B0Q0YoX0NGTmV0d29ya0NvcHlBVFNDb250ZXh0
KCkpOwogCiAgICAgcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxl
ciA9IFtkZWZhdWx0cyBib29sRm9yS2V5OldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5k
bGVyRGVmYXVsdHNLZXldOwpAQCAtNTIyLDEyICs1MDUsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYQogICAgIE5TTnVtYmVyICpkYXRhYmFzZUVuYWJsZWRWYWx1ZSA9IFtkZWZhdWx0cyBvYmpl
Y3RGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5hbERlYnVnJUAiLCBX
ZWJQcmVmZXJlbmNlc0tleTo6aXNJVFBEYXRhYmFzZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmlu
ZygpLmdldCgpXV07CiAgICAgaWYgKGRhdGFiYXNlRW5hYmxlZFZhbHVlKQogICAgICAgICBwYXJh
bWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gZGF0YWJhc2VFbmFibGVkVmFsdWUuYm9v
bFZhbHVlOwotICAgIGVsc2UKLSAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRh
YmFzZSA9IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5pc0lUUERhdGFiYXNlRW5h
YmxlZCgpOwogCiAgICAgcGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01v
ZGUgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4
cGVyaW1lbnRhbCVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVn
TW9kZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07Ci0KLSAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5h
cHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0
ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6cGxhdGZvcm1JbnZhbGlkYXRlQ29udGV4dCgpCkBAIC02MDYsMTEgKzU4NSw2IEBAIGJv
b2wgV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSBjb25zdAogICAg
IHJldHVybiAhbV91c2VyT2JzZXJ2YWJsZVBhZ2VDb3VudGVyLnZhbHVlKCkgJiYgIW1fcHJvY2Vz
c1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpOwogfQogCi1ib29sIFdl
YlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25z
dCBTdHJpbmcmIGVudGl0bGVtZW50KQotewotICAgIHJldHVybiBXVEY6Omhhc0VudGl0bGVtZW50
KGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVu
dGl0bGVtZW50LnV0ZjgoKS5kYXRhKCkpOwotfQotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkg
JiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogZmxvYXQgV2ViUHJvY2Vzc1Bvb2w6OmRpc3BsYXlC
cmlnaHRuZXNzKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fk
cy9Eb3dubG9hZFByb3h5LmNwcAppbmRleCBjNWRlNGU3ZDBmNTkxOTRmNDNhMDIzYjA4OWUzNzJj
NThjZjhlZTA2Li5mN2NmZjg1MmYwYmE2ZDAxNTUxMTY1ZGQ4YTlmN2Q1NzYzYjAwN2QzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHku
Y3BwCkBAIC03NSw4ICs3NSw4IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6Y2FuY2VsKCkKICAgICBp
ZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChOZXR3b3JrUHJv
Y2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CisgICAgaWYgKG1fZGF0YVN0b3Jl
KQorICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CiB9CiAKIHZv
aWQgRG93bmxvYWRQcm94eTo6aW52YWxpZGF0ZSgpCkBAIC0xMDMsMTUgKzEwMywxMyBAQCBXZWJQ
YWdlUHJveHkqIERvd25sb2FkUHJveHk6Om9yaWdpbmF0aW5nUGFnZSgpIGNvbnN0CiAjaWYgUExB
VEZPUk0oQ09DT0EpCiB2b2lkIERvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVzcyhjb25zdCBV
UkwmIFVSTCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFtX2RhdGFTdG9y
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9w
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUgaGFuZGxlOwotICAgICAgICBib29sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uID0g
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKFVSTC5maWxlU3lzdGVtUGF0aCgpLCBTYW5k
Ym94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIGhhbmRsZSk7Ci0gICAgICAgIEFTU0VSVF9V
TlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsK
LSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQ
dWJsaXNoRG93bmxvYWRQcm9ncmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFuZGxlKSwgMCk7Ci0g
ICAgfQorICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7CisgICAgYm9vbCBjcmVh
dGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwu
ZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5k
bGUpOworICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRT
YW5kYm94RXh0ZW5zaW9uKTsKKyAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3du
bG9hZElELCBVUkwsIGhhbmRsZSksIDApOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQog
CkBAIC0xMzEsMTEgKzEyOSwxMCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRpZFN0YXJ0KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBzdWdnZQogCiB2b2lkIERv
d25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCB1aW50NjRfdCBjaGFsbGVu
Z2VJRCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFtX3Byb2Nlc3NQb29s
IHx8ICFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eTo6Y3JlYXRl
KFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBjaGFsbGVuZ2VJRCwgbWFrZVJlZigq
bV9wcm9jZXNzUG9vbC0+bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkpLCBudWxscHRyKTsK
LQorICAgIGF1dG8gYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlUHJveHk6OmNyZWF0ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwg
Y2hhbGxlbmdlSUQsIG1ha2VSZWYoKm1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvbm5l
Y3Rpb24oKSksIG51bGxwdHIpOwogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCku
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCp0aGlzLCBhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZVByb3h5LmdldCgpKTsKIH0KIApAQCAtMTQ2LDE1ICsxNDMsMTAgQEAgdm9pZCBEb3du
bG9hZFByb3h5Ojp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYgcHJvcG9zZWRSZXF1
ZXN0LCBjb25zdCBSZXMKIAogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkud2ls
bFNlbmRSZXF1ZXN0KCp0aGlzLCBXVEZNb3ZlKHByb3Bvc2VkUmVxdWVzdCksIHJlZGlyZWN0UmVz
cG9uc2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKFJlc291cmNlUmVx
dWVzdCYmIG5ld1JlcXVlc3QpIHsKICAgICAgICAgbV9yZWRpcmVjdENoYWluLmFwcGVuZChuZXdS
ZXF1ZXN0LnVybCgpKTsKLQotICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fcHJvY2Vzc1Bv
b2wpCisgICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9kYXRhU3RvcmUpCiAgICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgYXV0byogbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb3RlY3Rl
ZFRoaXMtPm1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgIGlmICghbmV0
d29ya1Byb2Nlc3NQcm94eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBuZXR3b3Jr
UHJvY2Vzc1Byb3h5LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVXaWxs
U2VuZFJlcXVlc3QocHJvdGVjdGVkVGhpcy0+bV9kb3dubG9hZElELCBuZXdSZXF1ZXN0KSwgMCk7
CisgICAgICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRUaGlzLT5tX2Rh
dGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3NQcm94eS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVXaWxsU2VuZFJlcXVlc3QocHJv
dGVjdGVkVGhpcy0+bV9kb3dubG9hZElELCBuZXdSZXF1ZXN0KSwgMCk7CiAgICAgfSk7CiB9CiAK
QEAgLTE3OSwxNiArMTcxLDE0IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyhEb3dubG9hZElEIGRvd25sCiAgICAgaWYgKCFt
X3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9wcm9jZXNzUG9vbC0+
ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgq
dGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5hbWUoc3Vn
Z2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBk
b3dubG9hZElEID0gZG93bmxvYWRJRF0gKEFsbG93T3ZlcndyaXRlIGFsbG93T3ZlcndyaXRlLCBT
dHJpbmcgZGVzdGluYXRpb24pIHsKKyAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgp
LmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKCp0aGlzLCBSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSks
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRvd25sb2FkSURdIChBbGxv
d092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CiAgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAgICAg
ICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlKGRlc3RpbmF0aW9uLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFk
V3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgICAgIGlmICghbV9wcm9jZXNz
UG9vbCkKKyAgICAgICAgaWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRv
d25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3
cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CisgICAgICAgIG1fZGF0YVN0b3JlLT5u
ZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURl
Y2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBz
YW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6
WWVzKSwgMCk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAppbmRleCA3NmEwNzE1N2I1OTFhYWNl
NTBmMTVkMTUyNWRiY2ZiOGM2YTRiYmM4Li5kNzRhOGZhNmM2NGM4ODYzNWY5ZWI3NWNhNzNlNzBm
ZDk0NmNhMDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWRQcm94eU1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCkBAIC00NCw3ICs0NCw3IEBACiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogRG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcChOZXR3b3JrUHJvY2Vz
c1Byb3h5JiBwcm9jZXNzKQotICAgIDogbV9wcm9jZXNzKG1ha2VXZWFrUHRyKHByb2Nlc3MpKQor
ICAgIDogbV9wcm9jZXNzKHByb2Nlc3MpCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLCBtX3No
b3VsZFRha2VBc3NlcnRpb24oV1RGOjpwcm9jZXNzSGFzRW50aXRsZW1lbnQoImNvbS5hcHBsZS5t
dWx0aXRhc2tpbmcuc3lzdGVtYXBwYXNzZXJ0aW9ucyIpKQogI2VuZGlmCkBAIC03MCwxNCArNzAs
MTIgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9ybURlc3Ryb3koKQogCiB2b2lkIERv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCkKIHsKLSAgICBp
ZiAobV9wcm9jZXNzKQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpBcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nl
c3Muc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uRGlkRW50ZXJCYWNr
Z3JvdW5kKCksIDApOwogfQogCiB2b2lkIERvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uV2ls
bEVudGVyRm9yZWdyb3VuZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25XaWxsRW50ZXJG
b3JlZ3JvdW5kKCksIDApOworICAgIG1fcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6QXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCksIDApOwogfQogCiBEb3dubG9h
ZFByb3h5JiBEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRh
U3RvcmUmIGRhdGFTdG9yZSwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0
YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKQEAgLTkyLDEzICs5
MCwxMiBAQCBEb3dubG9hZFByb3h5JiBEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFBy
b3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZQogICAgICAgICBtX2Rvd25sb2FkVUlBc3Nl
cnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KGdldEN1cnJlbnRQcm9jZXNzSUQo
KSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWRO
ZXR3b3JraW5nKTsKIAogICAgICAgICBBU1NFUlQoIW1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0
aW9uKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9wcm9jZXNzKTsKLSAgICAgICAgbV9kb3du
bG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1f
cHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nl
c3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKKyAgICAgICAgbV9kb3dubG9h
ZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJv
Y2Vzcy5wcm9jZXNzSWRlbnRpZmllcigpLCAiV2ViS2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fz
c2VydGlvblR5cGU6OlVuYm91bmRlZE5ldHdvcmtpbmcpOwogCiAgICAgICAgIFJFTEVBU0VfTE9H
KFByb2Nlc3NTdXNwZW5zaW9uLCAiVUlQcm9jZXNzIHRvb2sgJ1dlYktpdCBkb3dubG9hZHMnIGFz
c2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKICAgICB9CiAKLSAg
ICBtX3Byb2Nlc3MtPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxv
YWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsKKyAgICBtX3Byb2Nlc3MuYWRkTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRv
d25sb2FkUHJveHktPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCksIGRvd25sb2FkUHJveHkuZ2V0
KCkpOwogCiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CkBAIC0xMDksMTIgKzEwNiw5IEBA
IHZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5pc2hlZChEb3dubG9hZFByb3h5JiBk
b3dubG9hZFByb3h5KQogCiAgICAgUkVMRUFTRV9MT0coTG9hZGluZywgIlJlbW92aW5nIGRvd25s
b2FkICUiIFBSSXU2NCAiIGZyb20gVUlQcm9jZXNzIERvd25sb2FkUHJveHlNYXAiLCBkb3dubG9h
ZElELmRvd25sb2FkSUQoKSk7CiAKLSAgICAvLyBUaGUgRG93bmxvYWRQcm94eSBtYXkgYmUgaG9s
ZGluZyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIHByb2Nlc3MgcG9vbC4KLSAgICBhdXRvIHBy
b3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZlB0cihtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkp
OwotCiAgICAgQVNTRVJUKG1fZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsKIAotICAg
IG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKKyAgICBt
X3Byb2Nlc3MucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKICAgICBkb3du
bG9hZFByb3h5LmludmFsaWRhdGUoKTsKICAgICBtX2Rvd25sb2Fkcy5yZW1vdmUoZG93bmxvYWRJ
RCk7CiAKQEAgLTEzMywxNSArMTI3LDEzIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6aW52YWxp
ZGF0ZSgpCiAgICAgZm9yIChjb25zdCBhdXRvJiBkb3dubG9hZCA6IG1fZG93bmxvYWRzLnZhbHVl
cygpKSB7CiAgICAgICAgIGRvd25sb2FkLT5wcm9jZXNzRGlkQ2xvc2UoKTsKICAgICAgICAgZG93
bmxvYWQtPmludmFsaWRhdGUoKTsKLSAgICAgICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93
bmxvYWQtPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgICAgICBtX3Byb2Nlc3MucmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIGRvd25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKICAgICB9CiAK
ICAgICBtX2Rvd25sb2Fkcy5jbGVhcigpOwogICAgIG1fZG93bmxvYWRVSUFzc2VydGlvbiA9IG51
bGxwdHI7CiAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBudWxscHRyOwogICAg
IFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiVUlQcm9jZXNzIERvd25sb2FkUHJveHlN
YXAgaW52YWxpZGF0ZWQgLSBSZWxlYXNlZCAnV2ViS2l0IGRvd25sb2FkcycgYXNzZXJ0aW9ucyBm
b3IgVUlQcm9jZXNzIGFuZCBOZXR3b3JrUHJvY2VzcyIpOwotCi0gICAgbV9wcm9jZXNzID0gbnVs
bHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAppbmRleCAzYmUyMDc5YTBm
MmM0YjUzNzA2MmNlMTMwMGUxY2Q1ZGE0NDRmZmJlLi40ZmEwMDFiZDdmYWUxY2VkMDI0ZDJiOTFm
MjAxNzBmZjk5NDUyOGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHBsYXRmb3JtQ3JlYXRlKCk7CiAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKIAot
ICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9wcm9jZXNzOworICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHkmIG1fcHJvY2VzczsKICAgICBIYXNoTWFwPERvd25sb2FkSUQsIFJlZlB0cjxE
b3dubG9hZFByb3h5Pj4gbV9kb3dubG9hZHM7CiAKICAgICBib29sIG1fc2hvdWxkVGFrZUFzc2Vy
dGlvbiB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKaW5kZXggOGMyM2JiZThjMDZhMTU5OWNiOWI5
MTZhMGIzMmFmYjM3NzgzZjMwNS4uMjA3NGI2YzYzYTIwMmY2Yjc2NDdhYzZhYzhkNTllOWZkYjU5
MDdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Q
cm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5LmNwcApAQCAtNDQsMTcgKzQ0LDI4IEBAIExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5Ojp+TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKQog
CiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdGFydExvYWRpbmcoTGVn
YWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nl
c3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RhcnRMb2FkaW5nKCp0aGlz
LCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbigpLnN0YXJ0TG9hZGlu
ZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShjdXN0b21Qcm90b2NvbElEKTsKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7CisjZW5k
aWYKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RvcExvYWRp
bmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElEKQogewotICAgIG1fbmV0
d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbigp
LnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGN1c3RvbVByb3RvY29sSUQpOworI2VuZGlmCiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQogewotICAgIG1fbmV0d29ya1Byb2Nl
c3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLmludmFs
aWRhdGUoKnRoaXMpOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIExlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudDo6c2luZ2xldG9uKCkuaW52YWxpZGF0ZSgqdGhpcyk7CisjZW5kaWYK
IH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6d2FzUmVkaXJlY3Rl
ZFRvUmVxdWVzdChMZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1c3RvbVByb3RvY29sSUQsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmluZGV4IGMxZjQ3MDhi
ODFjZmE1M2FiMTIyYzI5NDQ2NzVlNzgyNTE2NzEyMWYuLjQ1ZDk2NmMzZTRiMGE0MGZkNjc4OTg0
Zjk4Yjk4ZjI1NzkxZjFjOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2lu
Y2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAi
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2VuZGlmCisjaW5j
bHVkZSAiTGVnYWN5R2xvYmFsU2V0dGluZ3MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiTmV0d29ya0NvbnRlbnRSdWxlTGlzdE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKQEAgLTQ4LDYgKzQ5LDcgQEAKICNpbmNs
dWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJTdG9yYWdlQWNj
ZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QuaCIKKyNp
bmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJQYWdlTWVzc2Fn
ZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzTWVz
c2FnZXMuaCIKQEAgLTYwLDYgKzYyLDcgQEAKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlQ2xp
ZW50LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1JlZ2lzdHJhYmxlRG9tYWluLmg+CisjaW5jbHVkZSA8d3RmL0NhbGxiYWNrQWdncmVnYXRv
ci5oPgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogCiAjaWYgRU5BQkxFKFNF
Q19JVEVNX1NISU0pCkBAIC03MCwyMCArNzMsMTAwIEBACiAjaW5jbHVkZSA8d3RmL3NwaS9kYXJ3
aW4vWFBDU1BJLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkxl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oIgorI2VuZGlmCisKICNkZWZpbmUgTUVT
U0FHRV9DSEVDSyhhc3NlcnRpb24pIE1FU1NBR0VfQ0hFQ0tfQkFTRShhc3NlcnRpb24sIGNvbm5l
Y3Rpb24oKSkKIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAotTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9v
bCYgcHJvY2Vzc1Bvb2wpCi0gICAgOiBBdXhpbGlhcnlQcm9jZXNzUHJveHkocHJvY2Vzc1Bvb2wu
YWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCi0gICAgLCBtX3Byb2Nlc3NQb29sKHBy
b2Nlc3NQb29sKQorc3RhdGljIEhhc2hTZXQ8TmV0d29ya1Byb2Nlc3NQcm94eSo+JiBuZXR3b3Jr
UHJvY2Vzc2VzU2V0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8TmV0d29ya1Byb2Nlc3NQcm94eSo+
PiBzZXQ7CisgICAgcmV0dXJuIHNldDsKK30KKworVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1By
b3h5Pj4gTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpCit7CisgICAg
VmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzOworICAgIHByb2Nlc3Nl
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5zaXplKCkpOwor
ICAgIGZvciAoYXV0byogbmV0d29ya1Byb2Nlc3MgOiBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkpCisg
ICAgICAgIHByb2Nlc3Nlcy51bmNoZWNrZWRBcHBlbmQoKm5ldHdvcmtQcm9jZXNzKTsKKyAgICBy
ZXR1cm4gcHJvY2Vzc2VzOworfQorCisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWlu
YXRlKCkKK3sKKyAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpOworfQorCit2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nl
c3MoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAvLyBGSVhNRTog
VGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkg
b24gbm9uLW1haW4gdGhyZWFkcy4KKyAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3
ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCisgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KKyAgICBpZiAo
IVJ1bkxvb3A6OmlzTWFpbigpKSB7CisgICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChb
dGhpc10geworICAgICAgICAgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcygp
OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycyBwYXJhbWV0ZXJzOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1Nl
Y3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2No
ZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdp
c3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVn
YWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3Np
bmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVn
aXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNj
aGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0
aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOworICAgIHBh
cmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5j
YWNoZU1vZGVsKCk7CisgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBXZWJQcm9jZXNzUG9vbDo6dXJs
U2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCisgICAgICAgIHBhcmFtZXRlcnMu
dXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7Cisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJl
Y3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOyAhY29va2ll
U3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBw
YXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlm
IChTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdv
cmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsgIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5
KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURp
cmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2Fj
aGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIHBhcmVudEJ1bmRs
ZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsgIXBh
cmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5
cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CisjZW5kaWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CisgICAgcGFyYW1ldGVycy5kYXRhU3RvcmVQYXJhbWV0
ZXJzID0gV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBh
cmFtZXRlcnMpLCAwKTsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5z
QXRCYWNrZ3JvdW5kUHJpb3JpdHkoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBX
ZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQ
b29sLT5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGFueVBy
b2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpCit7CisgICAgZm9yIChh
dXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewor
ICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24o
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK05ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoKQorICAgIDogQXV4
aWxpYXJ5UHJvY2Vzc1Byb3h5KGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFBy
aW9yaXR5KCkpCiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKICAg
ICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKnRoaXMpCiAjZW5kaWYKLSAgICAsIG1f
dGhyb3R0bGVyKCp0aGlzLCBwcm9jZXNzUG9vbC5zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0
aW9uKCkpCisgICAgLCBtX3Rocm90dGxlcigqdGhpcywgYW55UHJvY2Vzc1Bvb2xTaG91bGRUYWtl
VUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkpCisgICAgLCBtX2Nvb2tpZU1hbmFnZXIoV2ViQ29va2ll
TWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMpKQogewogICAgIGNvbm5lY3QoKTsKKyAgICBzZW5k
Q3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgbmV0d29ya1Byb2Nlc3Nlc1Nl
dCgpLmFkZCh0aGlzKTsKIH0KIAogTmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNz
UHJveHkoKQpAQCAtOTgsNiArMTgxLDcgQEAgTmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQ
cm9jZXNzUHJveHkoKQogCiAgICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9k
b3dubG9hZFByb3h5TWFwLT5pbnZhbGlkYXRlKCk7CisgICAgbmV0d29ya1Byb2Nlc3Nlc1NldCgp
LnJlbW92ZSh0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hP
cHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1bmNoT3B0aW9ucykKQEAg
LTEwNSwxNSArMTg5LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0
aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jCiAgICAgbGF1bmNoT3B0
aW9ucy5wcm9jZXNzVHlwZSA9IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6Ok5ldHdvcms7
CiAgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKGxhdW5jaE9wdGlv
bnMpOwogCi0gICAgaWYgKHByb2Nlc3NQb29sKCkuc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vz
c0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2woKS5zZXRTaG91
bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoZmFsc2UpOwotICAg
ICAgICBsYXVuY2hPcHRpb25zLnNob3VsZE1ha2VQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmcg
PSB0cnVlOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxs
UHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5zaG91bGRNYWtlTmV4
dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkgeworICAgICAgICAgICAgcHJv
Y2Vzc1Bvb2wtPnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZyhmYWxzZSk7CisgICAgICAgICAgICBsYXVuY2hPcHRpb25zLnNob3VsZE1ha2VQcm9jZXNz
TGF1bmNoRmFpbEZvclRlc3RpbmcgPSB0cnVlOworICAgICAgICB9CiAgICAgfQotCi0jaWYgUExB
VEZPUk0oUExBWVNUQVRJT04pCi0gICAgbGF1bmNoT3B0aW9ucy5wcm9jZXNzUGF0aCA9IG1fcHJv
Y2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3NQYXRoKCk7Ci0gICAgbGF1bmNoT3B0aW9ucy51c2VySWQg
PSBtX3Byb2Nlc3NQb29sLnVzZXJJZCgpOwotI2VuZGlmCiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6Y29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbikK
QEAgLTE2NiwxMiArMjQ3LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCiAgICAgfQogfQogCi1Eb3dubG9hZFBy
b3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRh
U3RvcmUmIGRhdGFTdG9yZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3Qs
IGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGlu
Z1BhZ2UpCitEb3dubG9hZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nl
c3NQb29sLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJh
bWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKIHsK
ICAgICBpZiAoIW1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFw
ID0gbWFrZVVuaXF1ZTxEb3dubG9hZFByb3h5TWFwPigqdGhpcyk7CiAKLSAgICByZXR1cm4gbV9k
b3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgbV9wcm9jZXNz
UG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CisgICAg
cmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUs
IHByb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdl
KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpmZXRjaFdlYnNpdGVEYXRhKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVz
LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkIChXZWJzaXRlRGF0YSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0y
MzcsOCArMzE4LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpuZXR3b3JrUHJvY2Vzc0Ny
YXNoZWQoKQogewogICAgIGNsZWFyQ2FsbGJhY2tTdGF0ZXMoKTsKIAotICAgIC8vIFRlbGwgdGhl
IG5ldHdvcmsgcHJvY2VzcyBtYW5hZ2VyIHRvIGZvcmdldCBhYm91dCB0aGlzIG5ldHdvcmsgcHJv
Y2VzcyBwcm94eS4gVGhpcyB3aWxsIGNhdXNlIHVzIHRvIGJlIGRlbGV0ZWQuCi0gICAgbV9wcm9j
ZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMpOworICAgIGZvciAoYXV0byogcHJv
Y2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMpOwogfQogCiB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmNsZWFyQ2FsbGJhY2tTdGF0ZXMoKQpAQCAtMjU4LDkgKzMzOSw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlCiAgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wu
ZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQotICAgICAgICByZXR1cm47Ci0K
ICAgICBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVj
b2Rlcik7CiB9CiAKQEAgLTI3NCw4ICszNTIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQwog
CiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiB7
Ci0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWYobV9wcm9jZXNzUG9vbCk7
Ci0KICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlN
YXAtPmludmFsaWRhdGUoKTsKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5B
R0VSKQpAQCAtMzMxLDExICs0MDcsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCBzZXNzaQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF0b3BPcmlnaW4gfHwgIW1fcHJvY2Vzc1Bvb2wu
aXNTZXJ2aWNlV29ya2VyUGFnZUlEKHBhZ2VJRCkpIHsKLSAgICAgICAgcHJvY2Vzc0F1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKHNlc3Npb25JRCwgV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgV2ViUGFnZVByb3h5Ojpmb3JNb3N0
VmlzaWJsZVdlYlBhZ2VJZkFueShzZXNzaW9uSUQsICp0b3BPcmlnaW4sIFt0aGlzLCB3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSUQsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
ID0gV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIG5lZ290aWF0ZWRMZWdhY3lUTFNd
KGF1dG8qIHBhZ2UpIG11dGFibGUgewogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMzkyLDExICs0NjMsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmRpZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqIGxhdW5jaGVyLCBJUEM6OkNvbgog
ICAgICAgICBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChtX3Byb2Nlc3NQb29sLnByb2Nlc3NTdXBw
cmVzc2lvbkVuYWJsZWQoKSkKLSAgICAgICAgc2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCh0
cnVlKTsKLSNlbmRpZgogICAgIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKHhw
Y19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiA9IHRoaXMtPmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVj
dGlvbigpKQpAQCAtMTIwNSw3ICsxMjcxLDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
ZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3MKIH0K
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24o
SGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zKQogewotICAgIHBy
b2Nlc3NQb29sKCkuc2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oV1RGTW92ZShkb21haW5z
KSk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9j
ZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnNldERvbWFpbnNXaXRoVXNlckludGVy
YWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHsgZG9tYWlucyB9KTsK
IH0KICNlbmRpZiAvLyBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCkBAIC0xMjUy
LDE2ICsxMzE5LDE2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Zmx1c2hDb29raWVzKGNv
bnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIENvbXBsZXRpCiAgICAgc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Rmx1c2hDb29raWVzKHNlc3Npb25JRCks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjphZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmIHN0b3JlKQordm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjphZGRTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmIHN0b3JlKQogewot
ICAgIG1fc2Vzc2lvbklEcy5hZGQoc3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBtX3Nlc3Npb25J
RHMuYWRkKHN0b3JlLnNlc3Npb25JRCgpKTsKIAogICAgIGlmIChjYW5TZW5kTWVzc2FnZSgpKQot
ICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWRkV2Vic2l0ZURhdGFTdG9y
ZSB7IHN0b3JlLT5wYXJhbWV0ZXJzKCkgfSwgMCk7Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBzdG9y
ZS0+c2Vzc2lvbklEKCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpB
ZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUucGFyYW1ldGVycygpIH0sIDApOworICAgIGF1dG8g
c2Vzc2lvbklEID0gc3RvcmUuc2Vzc2lvbklEKCk7CiAgICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhl
bWVyYWwoKSkgewogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgICAgICBjcmVhdGVT
eW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5KCkpOworICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUucmVzb2x2
ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC0xMjgx
LDE2ICsxMzQ4LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIAogV2Vic2l0ZURhdGFTdG9yZSogTmV0d29ya1Byb2Nl
c3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSkgewotICAgICAgICBpZiAoIVdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmVFeGlzdHMoKSkgewotICAgICAgICAgICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IG1f
cHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpOwotICAgICAgICAgICAgaWYgKHdlYnNpdGVE
YXRhU3RvcmUgJiYgd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gc2Vzc2lvbklEKQot
ICAgICAgICAgICAgICAgIHJldHVybiB3ZWJzaXRlRGF0YVN0b3JlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERh
dGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIHJldHVybiBXZWJzaXRlRGF0YVN0
b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwogfQogCiB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnJldHJpZXZlQ2FjaGVTdG9yYWdlUGFyYW1ldGVycyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQpCkBAIC0xMzM3LDcgKzEzOTUsNyBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJV
c2VyQ29udGVudAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
KFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIG1fcHJvY2Vzc1Bvb2wuZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05l
dHdvcmtQcm9jZXNzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgc2Vzc2lvbklE
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFi
bGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgUmVnaXN0
cmFibGVEb21haW4ge3JlZ2lzdHJhYmxlRG9tYWlufSwgc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6d29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ob0xvbmdlck5lZWRlZChXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBp
ZGVudGlmaWVyKQpAQCAtMTUwMCwxNiArMTU1OCwzNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnByZWNvbm5lY3RUbyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYlBhZ2VQcm94eUlk
ZQogICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vzc2lv
bklELCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0KIAor
c3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sK
KyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQ
b29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlByb2Nl
c3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vz
c2VzKCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFs
bFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dyb3Vu
ZFdlYlByb2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNz
QXNzZXJ0aW9uKCkKIHsKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2ViUHJv
Y2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vz
c2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdyb3Vu
ZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9h
Y3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHko
Ik5ldHdvcmtpbmcgZm9yIGZvcmVncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91
bmQoKSwgMCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAocHJv
Y2Vzc1Bvb2woKS5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJv
Y2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9j
ZXNzVGhyb3R0bGVyOjppc1ZhbGlkQmFja2dyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2Vi
UHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0
aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91bmQg
dmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0JhY2tncm91bmQoKSwgMCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IGEw
YjRjMWQ4OTM4ZTIwNWVjMzYxZGU1YzEwODI1ZDE4Mjc3NjUzYjQuLmE5Yjg0MTI5MThmYmMxOWY1
NmFhOWY1MDYzN2Q3ZTg2MGExMTFlOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC01Miw2ICs1MiwxMCBAQCBu
YW1lc3BhY2UgSVBDIHsKIGNsYXNzIEZvcm1EYXRhUmVmZXJlbmNlOwogfQogCituYW1lc3BhY2Ug
QVBJIHsKK2NsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKK30KKwogbmFtZXNwYWNl
IFBBTCB7CiBjbGFzcyBTZXNzaW9uSUQ7CiB9CkBAIC03Myw4ICs3Nyw4IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBjbGFzcyBEb3dubG9hZFByb3h5OwogY2xhc3MgRG93bmxvYWRQcm94eU1hcDsK
K2NsYXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNz
IFdlYlByb2Nlc3NQb29sOwogY2xhc3MgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk7CiAK
IGVudW0gY2xhc3MgU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIDogYm9vbDsKQEAgLTg3LDcg
KzkxLDcgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0
IFJlc291cmNlTG9hZEluZm87CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CiAKLWNsYXNzIE5ldHdvcmtQ
cm9jZXNzUHJveHkgZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRl
IFByb2Nlc3NUaHJvdHRsZXJDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJv
Y2Vzc1Byb3h5PiB7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1
eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4sIHB1YmxpYyBSZWZDb3VudGVk
PE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKICAgICB1c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluOwpAQCAtMTAyLDEyICsxMDYsMTYgQEAgcHVibGljOgogICAgIHVzaW5nIERvbWFpbklu
TmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVz
aW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhw
bGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBS
ZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBO
ZXR3b3JrUHJvY2Vzc1Byb3h5KTsgfQogICAgIH5OZXR3b3JrUHJvY2Vzc1Byb3h5KCk7CiAKKyAg
ICBzdGF0aWMgVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gYWxsTmV0d29ya1Byb2Nl
c3NlcygpOworICAgIAorICAgIHZvaWQgdGVybWluYXRlKCkgZmluYWw7CisKICAgICB2b2lkIGdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBNZXNzYWdlczo6V2Vi
UHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkmJik7
CiAKLSAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3Rv
cmUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBGcmFtZUluZm9EYXRh
JiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpOworICAgIERvd25sb2FkUHJveHkmIGNy
ZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIFdlYlByb2Nlc3NQb29sJiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBh
Z2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsKIAogICAgIHZvaWQgZmV0Y2hXZWJzaXRlRGF0YShQ
QUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJz
aXRlRGF0YUZldGNoT3B0aW9uPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJzaXRlRGF0YSk+
JiYpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMjA2LDEzICsyMTQsMTEgQEAg
cHVibGljOgogICAgIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigpIGZpbmFsIHsgcmV0dXJu
IG1fdGhyb3R0bGVyOyB9CiAgICAgdm9pZCB1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7CiAKLSAg
ICBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2woKSB7IHJldHVybiBtX3Byb2Nlc3NQb29sOyB9
Ci0KICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIHZvaWQgZGlkRGVzdHJveVdl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgYWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4m
Jik7CisgICAgdm9pZCBhZGRTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmKTsKICAgICBib29sIGhh
c1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQpIGNvbnN0OwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihQ
QUw6OlNlc3Npb25JRCk7CiAgICAgCkBAIC0yMjksNiArMjM1LDggQEAgcHVibGljOgogICAgIHZv
aWQgcmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsK
ICAgICB2b2lkIHVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBT
dHJpbmcmKTsKIAorICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CisgICAgCiAgICAg
dm9pZCByZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwogCiAgICAgdm9pZCByZXNvdXJjZUxvYWREaWRTZW5kUmVxdWVzdChXZWJQYWdlUHJveHlJ
ZGVudGlmaWVyLCBSZXNvdXJjZUxvYWRJbmZvJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYm
LCBPcHRpb25hbDxJUEM6OkZvcm1EYXRhUmVmZXJlbmNlPiYmKTsKQEAgLTI0OCw3ICsyNTYsMTMg
QEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcm
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJCdW5kbGVJZGVu
dGlmaWVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHkmIGNvb2tpZU1hbmFnZXIoKSB7IHJldHVybiBtX2Nvb2tpZU1hbmFnZXIuZ2V0KCk7
IH0KKwogcHJpdmF0ZToKKyAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KCk7CisKKyAg
ICB2b2lkIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKwogICAgIC8vIEF1
eGlsaWFyeVByb2Nlc3NQcm94eQogICAgIEFTQ0lJTGl0ZXJhbCBwcm9jZXNzTmFtZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuICJOZXR3b3JraW5nIl9zOyB9CiAKQEAgLTI1Niw3ICsyNzAsNiBAQCBw
cml2YXRlOgogICAgIHZvaWQgY29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYpIG92
ZXJyaWRlOwogICAgIHZvaWQgcHJvY2Vzc1dpbGxTaHV0RG93bihJUEM6OkNvbm5lY3Rpb24mKSBv
dmVycmlkZTsKIAotICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgdm9pZCBj
bGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudApA
QCAtMzEyLDggKzMyNSw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCwgUmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
UHJveHk+JiYpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBI
YXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPj4g
bV9wZW5kaW5nRmV0Y2hXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNr
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRh
Q2FsbGJhY2tzOwogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zQ2FsbGJhY2tzOwpAQCAt
MzUwLDYgKzM2MSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIEhhc2hTZXQ8UEFMOjpTZXNz
aW9uSUQ+IG1fc2Vzc2lvbklEczsKKyAgICBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBtX2Nv
b2tpZU1hbmFnZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29j
b2EubW0KaW5kZXggYjhkYWVkZjdiZWJhMWNkODFmNmU1MjQ0OTYwMzEwZjEzMzEwYzExZS4uODJj
MTBlNDFkNTYyNWRiYWFkZjkxM2I5NDgwNDQ3YzcwY2MxOWQ5ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29j
b2EubW0KQEAgLTUxLDggKzUxLDEwIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZl
bnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCh4cGNfb2JqZWN0X3QgZXZlbnQpIGNvCiAgICAgaWYg
KG1lc3NhZ2VOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYg
KG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6OnhwY0xh
dW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKQotICAgICAgICBtX25l
dHdvcmtQcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50
VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2Vydmlj
ZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBv
aW50TWVzc2FnZU5hbWUpIHsKKyAgICAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlBy
b2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgICAgIHByb2Nlc3NQb29sLT5z
ZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhldmVudCk7CisgICAgfQog
CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5LmNwcAppbmRleCBjYzUyNmFhZjNhYWZiMWMxNDZkYTRiMjQxOTQ1
OWIxMDkyMDFiNjEwLi5kODE2MGIwMGJlNDY0YjY0MTJlODg2NzcwNjliNjk5YThiYzg2ZWZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5j
cHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQ
SVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgor
I2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJPcHRpb25hbENhbGxi
YWNrSUQuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRl
ICJXZWJDb29raWVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgpAQCAtMzksMjQgKzQwLDE2IEBACiBu
YW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jb25zdCBjaGFy
KiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN1cHBsZW1lbnROYW1lKCkKK1dlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdv
cmtQcm9jZXNzKQorICAgIDogbV9uZXR3b3JrUHJvY2VzcyhtYWtlV2Vha1B0cihuZXR3b3JrUHJv
Y2VzcykpCiB7Ci0gICAgcmV0dXJuICJXZWJDb29raWVNYW5hZ2VyUHJveHkiOwotfQotCi1SZWY8
V2ViQ29va2llTWFuYWdlclByb3h5PiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQ
cm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vi
Q29va2llTWFuYWdlclByb3h5KHByb2Nlc3NQb29sKSk7Ci19Ci0KLVdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkK
LSAgICA6IFdlYkNvbnRleHRTdXBwbGVtZW50KHByb2Nlc3NQb29sKQotewotICAgIFdlYkNvbnRl
eHRTdXBwbGVtZW50Ojpwcm9jZXNzUG9vbCgpLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogfQogCiBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5hZ2VyUHJveHkoKQogeworICAgIGlmIChtX25l
dHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpKTsKICAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKIH0KIApAQCAt
NjUsMTAyICs1OCw4NCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6aW5pdGlhbGl6ZUNs
aWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKiBjbAogICAgIG1fY2xpZW50Lmlu
aXRpYWxpemUoY2xpZW50KTsKIH0KIAotLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLQotdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NQb29sRGVzdHJveWVkKCkKLXsKLSAgICBWZWN0
b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnM7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlclNldCA6IG1f
Y29va2llT2JzZXJ2ZXJzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byogb2JzZXJ2ZXIg
OiBvYnNlcnZlclNldCkKLSAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQob2JzZXJ2ZXIpOwot
ICAgIH0KLQotICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlcnMpCi0gICAgICAgIG9i
c2VydmVyLT5tYW5hZ2VyRGVzdHJveWVkKCk7Ci0KLSAgICBBU1NFUlQobV9jb29raWVPYnNlcnZl
cnMuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NE
aWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6cHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAg
IEFQSTo6T2JqZWN0OjpyZWYoKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRl
cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpkZXJlZigpOwot
fQotCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxT
dHJpbmc+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQ
cm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7Cisg
ICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBwcm9j
ZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3Nhcnko
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vz
c2lvbklELCBob3N0bmFtZXMpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyksIDApOwogfQogCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NS
ZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVB
bGxDb29raWVzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxl
dGVBbGxDb29raWVzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ29va2ll
JiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQog
ewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFtj
YWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKV0oKSBtdXRhYmxlIHsK
KyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUo
c2Vzc2lvbklELCBjb29raWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNl
CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKLSAgICB9KTsKIH0KIAogdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgV2FsbFRpbWUgdGltZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2ll
c01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxs
Q29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1
bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vz
cy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tp
ZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklE
LCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAg
ICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4m
IGNvb2tpZXMsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYg
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwot
ICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50
VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwg
bWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQor
ICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpnZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAg
IGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAg
ICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25z
dCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBj
YWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lv
bklELCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RG
TW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0
aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2Vydmlu
Z0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQ
b29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Np
b25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tp
ZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5
OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7
Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lm
TmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2ll
Q2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpzZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmIGNhbGxiYWNrKQpAQCAtMjExLDE4ICsx
ODYsMTggQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNvb2tpZXNEaWRDaGFuZ2UoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0
SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgSFRUUENvb2tpZUFjY2VwdFBv
bGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9u
KQogewotI2lmIFVTRShTT1VQKQotICAgIHByb2Nlc3NQb29sKCktPnNldEluaXRpYWxIVFRQQ29v
a2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAgIGF1dG8mIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3Jr
UHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAg
ICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY2FsbGJhY2tG
dW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVu
c3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNz
KQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwgV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKEhU
VFBDb29raWVBY2NlcHRQb2xpY3k6Ok5ldmVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJv
eHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCmlu
ZGV4IDBiZGZjMGQ0ZTQ3YzQzNmY1ODVjZjI5YzA5ZDUxYTI5YmM4MTFhOWQuLjZmNTFmMDNlNWMw
Y2E4OTQxMjMzNDM3N2I1NTQzZDgyMmNjMmZlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCkBAIC01NiwxMSArNTYsOSBAQCB0eXBlZGVm
IEdlbmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJyYXlDYWxsYmFjazsKIHR5cGVkZWYgR2Vu
ZXJpY0NhbGxiYWNrPFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k+IEhUVFBDb29raWVB
Y2NlcHRQb2xpY3lDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+Jj4gR2V0Q29va2llc0NhbGxiYWNrOwogCi1jbGFzcyBXZWJDb29r
aWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBl
OjpDb29raWVNYW5hZ2VyPiwgcHVibGljIFdlYkNvbnRleHRTdXBwbGVtZW50LCBwcml2YXRlIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eSA6IHB1Ymxp
YyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNvb2tpZU1hbmFnZXI+LCBwcml2
YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hh
ciogc3VwcGxlbWVudE5hbWUoKTsKLQotICAgIHN0YXRpYyBSZWY8V2ViQ29va2llTWFuYWdlclBy
b3h5PiBjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4gY3JlYXRlKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKSB7
IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94eShuZXR3b3JrUHJvY2Vz
cykpOyB9CiAgICAgdmlydHVhbCB+V2ViQ29va2llTWFuYWdlclByb3h5KCk7CiAKICAgICB2b2lk
IGluaXRpYWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSopOwpAQCAt
MTA0LDE3ICsxMDIsMTAgQEAgcHVibGljOgogICAgIHVzaW5nIEFQSTo6T2JqZWN0OjpkZXJlZjsK
IAogcHJpdmF0ZToKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqKTsK
KyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwogCiAgICAg
dm9pZCBjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEKTsKIAotICAgIC8vIFdlYkNvbnRl
eHRTdXBwbGVtZW50Ci0gICAgdm9pZCBwcm9jZXNzUG9vbERlc3Ryb3llZCgpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAg
IHZvaWQgcHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXJl
ZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0KICAgICAvLyBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlcgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAKQEAgLTEyNSw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAg
IEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9pZCAoKT4+IG1fbGVnYWN5
Q29va2llT2JzZXJ2ZXJzOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIEhhc2hTZXQ8T2Jz
ZXJ2ZXIqPj4gbV9jb29raWVPYnNlcnZlcnM7CiAKKyAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNz
UHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAgICAgV2ViQ29va2llTWFuYWdlclByb3h5Q2xpZW50
IG1fY2xpZW50OwogCiAjaWYgVVNFKFNPVVApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAppbmRleCBmMWE5ZWMzNDg0MTc4N2U0YTg3NTFhYzZmNjc2YWQxYTliZmYxYmM3
Li41YjYyYjE0MmM5ZmYzZmI4ZGY3NjlhNTdmMDJmNWZhMjcwM2M3YjdmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE3NDQsNyArMTc0NCw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpzZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGJvb2wgY29udHJvbGxlZCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29udHJv
bGxlZEJ5QXV0b21hdGlvbihjb250cm9sbGVkKSk7Ci0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9v
bCgpLnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
U2Vzc2lvbklzQ29udHJvbGxlZEJ5QXV0b21hdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCBtX2NvbnRyb2xsZWRCeUF1dG9tYXRpb24pKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3Jl
KCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vz
c2lvbklzQ29udHJvbGxlZEJ5QXV0b21hdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCBtX2NvbnRyb2xsZWRCeUF1dG9tYXRpb24pLCAwKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OmNyZWF0ZUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0
b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSkKQEAgLTMyMDgsMTEgKzMyMDgsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6aXNGb3JjZWRJbnRvQXBwQm91bmRNb2RlVGVzdGluZyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPgogdm9pZCBXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29y
a2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKCkKIHsKICNpZiBFTkFCTEUoQVBQX0JPVU5E
X0RPTUFJTlMpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKLSAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnQoKSwgMCk7Ci0gICAgfQor
ICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCksIDApOwogI2Vu
ZGlmCiB9CiAKQEAgLTMyMjEsMTMgKzMyMTcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJT
ZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKAog
I2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViUGFnZTo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlm
ICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9j
ZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJT
ZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogI2VuZGlmCkBAIC00NDI3LDcg
KzQ0MTcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cHJlY29ubmVjdFRvKGNvbnN0IFVSTCYgdXJs
KQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5ID0g
bV9jYW5Vc2VDcmVkZW50aWFsU3RvcmFnZSA/IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5OjpVc2UgOiBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2U7Ci0g
ICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkucHJlY29u
bmVjdFRvKHNlc3Npb25JRCgpLCBpZGVudGlmaWVyKCksIHdlYlBhZ2VJRCgpLCB1cmwsIHVzZXJB
Z2VudCgpLCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpbigpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5wcmVjb25u
ZWN0VG8oc2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlEKCksIHVybCwgdXNlckFn
ZW50KCksIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9t
YWluKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q2FuVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UoYm9vbCBjYW5Vc2VDcmVkZW50aWFsU3RvcmFnZSkKQEAgLTQ3MjMsNyArNDcxMyw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUoRnJhbWVJZGVudGlmaWVyIGZy
YW1lSUQsIEZyYW1lSW5mb0RhdGEmCiAgICAgICAgICAgICBSZWdpc3RyYWJsZURvbWFpbiBjdXJy
ZW50RG9tYWluIHsgY3VycmVudFJlcXVlc3QudXJsKCkgfTsKICAgICAgICAgICAgIFVSTCByZXF1
ZXN0ZXJVUkwgeyBVUkwoKSwgcmVxdWVzdGVyT3JpZ2luLnRvU3RyaW5nKCkgfTsKICAgICAgICAg
ICAgIGlmICghY3VycmVudERvbWFpbi5tYXRjaGVzKHJlcXVlc3RlclVSTCkpCi0gICAgICAgICAg
ICAgICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRo
RGF0YVRyYW5zZmVyKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxl
RG9tYWluIHsgcmVxdWVzdGVyVVJMIH0sIGN1cnJlbnREb21haW4sIG5hdmlnYXRpb25EYXRhVHJh
bnNmZXIsIG1faWRlbnRpZmllciwgbV93ZWJQYWdlSUQpOworICAgICAgICAgICAgICAgIG1fd2Vi
c2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0
aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJs
ZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9LCBjdXJyZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRy
YW5zZmVyLCBtX2lkZW50aWZpZXIsIG1fd2ViUGFnZUlEKTsKICAgICAgICAgfQogI2VuZGlmCiAg
ICAgfQpAQCAtNDc2MSw3ICs0NzUxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExv
YWRGb3JGcmFtZShGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgRnJhbWVJbmZvRGF0YSYKICAgICBp
ZiAobmF2aWdhdGlvbiAmJiBmcmFtZS0+aXNNYWluRnJhbWUoKSkgewogICAgICAgICBpZiAoYXV0
byYgYWRDbGlja0F0dHJpYnV0aW9uID0gbmF2aWdhdGlvbi0+YWRDbGlja0F0dHJpYnV0aW9uKCkp
IHsKICAgICAgICAgICAgIGlmIChhZENsaWNrQXR0cmlidXRpb24tPmRlc3RpbmF0aW9uKCkubWF0
Y2hlcyhmcmFtZS0+dXJsKCkpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bv
b2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN0
b3JlQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksICph
ZENsaWNrQXR0cmlidXRpb24pKTsKKyAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlKCku
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3RvcmVBZENs
aWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKmFkQ2xpY2tB
dHRyaWJ1dGlvbiksIDApOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MzcyLDcgKzUzNjIsNyBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFdlYkZyYW1lUHJv
eHkmIGZyYW1lLCBjb25zdCBVUkwmIHBhZwogICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8
fCBtYWluRnJhbWVIb3N0LmlzRW1wdHkoKSB8fCB0YXJnZXRIb3N0ID09IHNvdXJjZVVSTC5ob3N0
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5k
VG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1lTmF2
aWdhdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFp
biB7IHRhcmdldFVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0cmFi
bGVEb21haW4geyBzb3VyY2VVUkwgfSwgaXNSZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUoKSwg
TW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2RpZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5GcmFt
ZVRpbWVzdGFtcCwgd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpKTsKKyAgICB3ZWJzaXRl
RGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6TG9nRnJhbWVOYXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJl
Z2lzdHJhYmxlRG9tYWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVS
TCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5p
c01haW5GcmFtZSgpLCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRM
b2FkRm9yTWFpbkZyYW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlciks
IDApOwogfQogI2VuZGlmCiAKQEAgLTk5OTcsNTggKzk5ODcsMjcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OnN5c3RlbVByZXZpZXdBY3Rpb25UcmlnZ2VyZWQoY29uc3QgV2ViQ29yZTo6U3lzdGVtUHJl
dmlld0luZm8KIAogdm9pZCBXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24oQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29s
KCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5T
ZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihlbXB0eVN0cmlu
ZygpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFk
Q2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0
d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkp
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpj
bGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNz
LT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3Jr
UHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJB
ZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1
dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9u
T3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
cyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
IGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vi
c2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5z
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0
cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5n
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9j
ZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vz
cy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0
dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3
ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJM
Rm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjptYXJrQWRDbGlj
a0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlm
ICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
IH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0Fz
RXhwaXJlZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IGQ5MzFl
NDUyN2U2MzM0OGRjOTIxYWQ4OWNjZDA5MjFmNDYzMGMzOGIuLmE5OTQ5YjA4OTg0ZjA2MDkwZWY5
MDkwOGE0MGI3YjZkNmZhYzVhYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5jcHAKQEAgLTE0Myw4ICsxNDMsMTAgQEAKICNlbmRpZgogCiAjZGVmaW5lIFdFQlBS
T0NFU1NQT09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhjaGFu
bmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisj
ZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhjaGFubmVsLCBmbXQsIC4u
LikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwgIyNfX1ZBX0FS
R1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoY2hhbm5lbCwg
Zm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29s
OjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVM
RUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfSUYoc2Vz
c2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAiJXAgLSBXZWJQcm9j
ZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIFdFQlBST0NFU1NQ
T09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxF
QVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIGNoYW5uZWws
ICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIsNiArMjM0LDExIEBAIHN0YXRp
YyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgZ2xvYmFsVVJMU2No
ZW1lc1dpdGhDdXN0b21Qcm90CiAgICAgcmV0dXJuIHNldDsKIH0KIAorVmVjdG9yPFN0cmluZz4g
V2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpCit7
CisgICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3Rv
Y29sSGFuZGxlcnMoKSk7Cit9CisKIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6
OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICA6IG1fY29uZmln
dXJhdGlvbihjb25maWd1cmF0aW9uLmNvcHkoKSkKICAgICAsIG1fZGVmYXVsdFBhZ2VHcm91cChX
ZWJQYWdlR3JvdXA6OmNyZWF0ZSgpKQpAQCAtMjM5LDcgKzI0Niw2IEBAIFdlYlByb2Nlc3NQb29s
OjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJh
dGlvbikKICAgICAsIG1fYXV0b21hdGlvbkNsaWVudChtYWtlVW5pcXVlPEFQSTo6QXV0b21hdGlv
bkNsaWVudD4oKSkKICAgICAsIG1fZG93bmxvYWRDbGllbnQobWFrZVVuaXF1ZVJlZjxBUEk6OkRv
d25sb2FkQ2xpZW50PigpKQogICAgICwgbV9oaXN0b3J5Q2xpZW50KG1ha2VVbmlxdWU8QVBJOjpM
ZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4oKSkKLSAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkp
CiAgICAgLCBtX3Zpc2l0ZWRMaW5rU3RvcmUoVmlzaXRlZExpbmtTdG9yZTo6Y3JlYXRlKCkpCiAj
aWYgUExBVEZPUk0oTUFDKQogICAgICwgbV9oaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2Ft
cGxlcihtYWtlVW5pcXVlPEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyPigqdGhp
cykpCkBAIC0yNjcsOSArMjczLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQ
STo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogI2VuZGlmCiAgICAg
fSk7CiAKLSAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSAmJiBXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0
b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCk7Ci0KICAg
ICBmb3IgKGF1dG8mIHNjaGVtZSA6IG1fY29uZmlndXJhdGlvbi0+YWx3YXlzUmV2YWxpZGF0ZWRV
UkxTY2hlbWVzKCkpCiAgICAgICAgIG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0Fsd2F5c1JldmFsaWRh
dGVkLmFkZChzY2hlbWUpOwogCkBAIC0yODUsNyArMjg4LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6Oldl
YlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9u
KQogICAgIGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9URTogVGhlc2Ugc3ViLW9iamVj
dHMgbXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VSZWNlaXZlck1hcC4uCi0gICAg
YWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVu
dDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdlYk5v
dGlmaWNhdGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKQEAg
LTM0Miw5ICszNDQsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKCkKICAgICBw
cm9jZXNzUG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAotICAgIGlmIChtX25ldHdv
cmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zaHV0RG93blByb2Nlc3MoKTsK
LQogI2lmIEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9jZXNzZXNVc2luZ0dhbWVwYWRz
LmlzRW1wdHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnByb2Nl
c3NQb29sU3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAtNDAyLDE2ICs0MDEsNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxB
UEk6OkF1dG9tYXRpb25DbGllbnQ+JgogICAgICAgICBtX2F1dG9tYXRpb25DbGllbnQgPSBXVEZN
b3ZlKGF1dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkKLXsK
LSNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQotICAgIGlmICghY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCk7
Ci0gICAgZWxzZQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCA9IFdURk1v
dmUoY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsKLSNlbmRpZgotfQotCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY29u
c3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIpCiB7CiAg
ICAgLy8gR3VhcmQgYWdhaW5zdCBBUEkgbWlzdXNlLgpAQCAtNDIxLDExICs0MTAsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZp
ZXIoY29uc3QgU3RyaW5nJiBjdQogICAgIG1fY29uZmlndXJhdGlvbi0+c2V0Q3VzdG9tV2ViQ29u
dGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxl
SWRlbnRpZmllcik7CiB9CiAKLUlQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vzc1Bvb2w6Om5ldHdv
cmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3Mt
PmNvbm5lY3Rpb24oKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2Vk
KHZvaWQqIGNvbnRleHQpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViUHJvY2Vzc1Bvb2wqPihjb250
ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7CkBAIC00MzUsOCArNDE5LDcgQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVz
c2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKCkpOwogI2lm
IFVTRShTT1VQKQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1
YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CisgICAgV2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2VyUHJl
ZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKICNlbmRpZgogfQogCkBAIC00NDksNyArNDMyLDggQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6ZnVsbEtleWJvYXJkQWNjZXNzTW9kZUNoYW5nZWQoYm9vbCBm
dWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGUKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRNZW1vcnlQ
cmVzc3VyZUV2ZW50KGJvb2wgaXNDcml0aWNhbCkKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMo
TWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2ZW50
KGlzQ3JpdGljYWwpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6QXV4
aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCkp
OworICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFs
bE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3Jp
dGljYWwpKTsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBQbHVnaW5Qcm9j
ZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuc2VuZE1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNh
bCk7CiAjZW5kaWYKQEAgLTQ3NCwyNzUgKzQ1OCw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNj
cmVlblByb3BlcnRpZXNTdGF0ZUNoYW5nZWQoKQogI2VuZGlmCiB9CiAKLU5ldHdvcmtQcm9jZXNz
UHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0
b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQg
Zm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgotICAgIC8vIFdl
IHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xhdGlvbiBj
aGVjayBvbiBvdXIgQVBJcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsKLSAgICAgICAg
Y2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyldIHsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgIH0p
OwotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0g
ICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJz
aXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQ
ZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJv
Y2VzczsKLSAgICB9Ci0KLSAgICBhdXRvIG5ldHdvcmtQcm9jZXNzID0gbWFrZVVuaXF1ZTxOZXR3
b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7Ci0KLSAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycyBwYXJhbWV0ZXJzOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVz
ID0gY29weVRvVmVjdG9yKG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMoKSk7Ci0g
ICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotI2lmIFBM
QVRGT1JNKENPQ09BKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50
aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24oKS5zb3VyY2VBcHBsaWNh
dGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25T
ZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0aW9uKCku
c291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKCk7Ci0jZW5kaWYKLSAgICB9Ci0K
LSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xl
dG9uKCkuY2FjaGVNb2RlbCgpOwotCi0gICAgZm9yIChhdXRvJiBzY2hlbWUgOiBnbG9iYWxVUkxT
Y2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAgICAgcGFyYW1ldGVycy51
cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKLQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIGlmICgh
Y29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0
b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
Ci0gICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpu
ZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb250YWluZXJDYWNoZXNEaXJl
Y3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBTdHJpbmcg
cGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRsZURpcmVj
dG9yeSgpOwotICAgIGlmICghcGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVjdG9yeSwg
U2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50QnVuZGxl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoZW1w
dHlTdHJpbmcoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAgICBwYXJhbWV0ZXJzLnVy
bFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0
dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmUoKSk7Ci0gICAgcGFy
YW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9s
aWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hl
bWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KCkpOwotICAgIHBh
cmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVjdG9yKExlZ2Fj
eUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTG9jYWwoKSk7
Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3MgPSBjb3B5VG9W
ZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVy
QXNOb0FjY2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIC8vICoq
KioqKioqKgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNoYW5nZSB0aGUgZGlyZWN0b3J5IHN0
cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlzayB3aXRob3V0IGZpcnN0IGNvbnN1
bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjovL3Byb2JsZW0vMTc0NTQ3MTI+KQot
ICAgIC8vICoqKioqKioqKgotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
OwotICAgIAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5p
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y3JlYXRlU3ltTGlua0ZvckZp
bGVVcGdyYWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLnNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJl
c29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAgIGlmICghcGFy
YW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KQotICAgICAgICBwYXJh
bWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSAgV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgp
OwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnksIHBhcmFtZXRl
cnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0j
ZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0
b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExvY2FsU3RvcmFnZURpcmVjdG9yeSgp
IDogbnVsbFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQotICAgICAg
ICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1
bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2FsU3RvcmFnZURpcmVjdG9y
eTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rv
cnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRv
IGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURh
dGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0gICAgaWYg
KCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjYWNoZVN0b3JhZ2VEaXJl
Y3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBXVEZNb3ZlKGNhY2hlU3Rv
cmFnZURpcmVjdG9yeSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKG1fd2Vic2l0ZURhdGFT
dG9yZSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IG1fd2Vic2l0
ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7Ci0g
ICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhp
c3RzKCkpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1ldGVycygpLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5kaXJl
Y3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5Lmlz
RW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdy
aXRlRGlyZWN0b3J5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnksIHJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYm9vbCBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAgYm9vbCBzaG91bGRJbmNs
dWRlTG9jYWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQotICAgIFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgdGhpcmRQYXJ0eUNv
b2tpZUJsb2NraW5nTW9kZSA9IFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU6
OkFsbDsKLSAgICBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCBzYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRFbmFibGVkOjpObzsKLSNlbmRpZgotICAgIFdlYkNvcmU6OkZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gV2Vi
Q29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tpZXM7Ci0g
ICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWlu
OwotICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IGFwcEJvdW5kRG9tYWlu
czsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBtYW51YWxQcmV2YWxlbnRSZXNvdXJj
ZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQgPSBk
b2VzQXBwSGF2ZUlUUEVuYWJsZWQoKTsKLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUgJiYg
IXdpdGhXZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAg
ICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVk
OwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlIGlmICht
X3dlYnNpdGVEYXRhU3RvcmUgJiYgIW1fd2Vic2l0ZURhdGFTdG9yZS0+aXNJdHBTdGF0ZUV4cGxp
Y2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90
Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5zZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsK
LSAgICB9IGVsc2UgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMo
KSAmJiAhV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5pc0l0cFN0YXRlRXhw
bGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBt
X3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGF0YVN0b3JlKCktPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZQotICAgICAgICBlbmFibGVSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSNlbmRpZgotCi0gICAgaWYg
KHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRp
c3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gd2l0aFdlYnNpdGVEYXRh
U3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNlbmRpZgotICAgICAgICBp
ZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICAgICAgYXV0byBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygp
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2Nh
bGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAgICAgIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdNb2RlOwotI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0aGlyZFBhcnR5Q29va2ll
QmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7Ci0gICAgICAgICAg
ICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAgICAg
ICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0aW9u
RG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWluczsK
LSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVudFJl
c291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+
cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhXZWJz
aXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAg
IAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSB3aXRoV2Vic2l0
ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYg
KCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5l
dHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNh
bmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IGF1dG8mIGhz
dHNTdG9yYWdlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSFNUU1N0
b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURpcmVjdG9yeS5pc051
bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBoc3RzU3Rv
cmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRl
LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0g
ICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBtX3dl
YnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNlbmRpZgot
ICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICAgICAg
YXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBhcmFt
ZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91bGRJbmNs
dWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3Q7Ci0gICAgICAgICAgICBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZURlYnVnTW9kZTsKLSNp
ZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICAgICAgdGhpcmRQYXJ0
eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOwotICAg
ICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOwot
ICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnN0YW5kYWxvbmVBcHBs
aWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5kRG9tYWlucyA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5hcHBCb3VuZERv
bWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5tYW51YWxQcmV2
YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0KLSAg
ICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIW5ldHdv
cmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0Nh
Y2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4
dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgYXV0byYgaHN0c1N0b3Jh
Z2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSFNUU1N0b3JhZ2VEaXJl
Y3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkgewot
ICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBoc3RzU3RvcmFnZURpcmVj
dG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShoc3RzU3Rv
cmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5o
c3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0
cygpKQotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IFdlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdv
cmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4
dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lmIEhBVkUoQ0ZORVRXT1JLX0FMVEVSTkFUSVZFX1NF
UlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6Omh0dHAzRW5hYmxlZCgpKSB7Ci0gICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2VzRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5h
bHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHAzRW5hYmxlZCA9IHRydWU7
Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBpc0l0cFN0YXRlRXhwbGljaXRseVNldCA9IGZhbHNl
OwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzID0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewotICAgICAgICBXVEZNb3ZlKHJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAgICBXVEZNb3ZlKHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpLAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0YXRlRXhwbGljaXRseVNldCwKLSAgICAgICAgZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCwKLSAgICAgICAgc2hvdWxk
SW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICB0
aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlLAotICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50RW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluLAotICAgICAgICBh
cHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlLAotICAgIH07
Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmljIHBhcmFtZXRlcnMKLSAgICBwbGF0
Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKLQotICAgIC8vIEluaXRp
YWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJz
KSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3b3JrUHJvY2Vzc0xhdGVuY3lRT1Mo
KSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAwKTsKLSNlbmRpZgotCi0gICAgbmV0
d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKLQotICAgIGlmICh3aXRoV2Vi
c2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtl
UmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9y
ZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUg
bmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUgc2Vzc2lvbnMgdGhhdCBoYXZlIGJl
ZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAgICBmb3IgKGF1dG8mIHNlc3Npb25J
RCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHdl
YnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRh
U3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICB9Ci0KLSAgICBtX25ldHdvcmtQ
cm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0gICAgcmV0dXJuICptX25ldHdvcmtQ
cm9jZXNzOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQo
TmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSkKIHsKLSAgICBBU1NFUlQo
bV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJvY2Vzc1Byb3h5ID09IG1f
bmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9z
dXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+cHJvY2Vzc0RpZENsb3Nl
KCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzUxLDkgKzQ2OCw2IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3
b3JrUHJvY2Vzc1ByCiAgICAgaWYgKG1fYXV0b21hdGlvblNlc3Npb24pCiAgICAgICAgIG1fYXV0
b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAgLy8gTGVhdmUgdGhlIHByb2Nlc3Mg
cHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28gdGhhdCB0aGUgY2xpZW50IGNvdWxk
IHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51
bGxwdHI7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQogCkBAIC03NjQsMjAg
KzQ3OCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9jZXNzQ3Jhc2hl
ZChXZWJQcm9jZXNzUHJveHkmIHByb3h5KQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nl
c3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbih3
ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgd2Vi
UHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwgcmVwbHkgPSBXVEZN
b3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsKLSAgICAgICAgaWYg
KFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc1ZhbGlkKGNvbm5lY3Rpb25J
bmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5ICYmIHdlYWtUaGlzKSkgewotICAg
ICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoUHJvY2VzcywgImdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0IGF0dGVtcHQsIHJldHJ5aW5nIik7
Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3ZWJQcm9jZXNzUHJveHks
IFdURk1vdmUocmVwbHkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICByZXBseShjb25uZWN0aW9uSW5mbyk7Ci0gICAgfSk7Ci19Ci0KICNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpncHVQcm9jZXNzQ3Jhc2hlZChQcm9jZXNzSUQg
aWRlbnRpZmllcikKIHsKQEAgLTgwMSwyMyArNTAxLDI2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OmdldEdQVVByb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1Byb3h5
LCBNCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJQcm9jZXNzUG9vbDo6c191c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzID0gZmFsc2U7CisKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0
d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJveHksIFJlZ2lzdHJhYmxlRG9tYWlu
JiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIEFTU0VSVF9VTlVT
RUQocHJveHksICZwcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsKKyAgICBhdXRvKiB3
ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JT
ZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpCisgICAgICAg
IHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCku
cHRyKCk7CisgICAgaWYgKCFwcm9jZXNzUG9vbHMoKS5zaXplKCkpCisgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxSZWY8V2ViUHJvY2Vzc1Bvb2w+PiBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Bv
b2woV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6
Y3JlYXRlKCkuZ2V0KCkpKTsKIAotICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRl
RGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lv
bklEKTsKLQotICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBpZiAoIW1fd2Vi
c2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgICAgICB3ZWJz
aXRlRGF0YVN0b3JlID0gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOwotICAgIH0KKyAgICAvLyBB
cmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCB0byBob3N0IHRoZSBzZXJ2
aWNlIHdvcmtlciBwcm9jZXNzLgorICAgIGF1dG8qIHByb2Nlc3NQb29sID0gcHJvY2Vzc1Bvb2xz
KClbMF07CisgICAgQVNTRVJUKHByb2Nlc3NQb29sKTsKIAogICAgIFdlYlByb2Nlc3NQcm94eSog
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eSB7IG51bGxwdHIgfTsKLSAgICBpZiAoIW1fdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgewotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3Mg
OiBtX3Byb2Nlc3NlcykgewotICAgICAgICAgICAgaWYgKHByb2Nlc3MgPT0gbV9wcmV3YXJtZWRQ
cm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkKKworICAgIGlmICghc191
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7CisgICAgICAgIGZvciAoYXV0byYgcHJv
Y2VzcyA6IHByb2Nlc3NQb29sLT5tX3Byb2Nlc3NlcykgeworICAgICAgICAgICAgaWYgKHByb2Nl
c3MgPT0gcHJvY2Vzc1Bvb2wtPm1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9jZXNzLT5pc0R1bW15
UHJvY2Vzc1Byb3h5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBp
ZiAoJnByb2Nlc3MtPndlYnNpdGVEYXRhU3RvcmUoKSAhPSB3ZWJzaXRlRGF0YVN0b3JlKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODI1LDM1ICs1MjgsMzUgQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
KE5ldHdvcmtQcm8KICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgc2Vy
dmljZVdvcmtlclByb2Nlc3NQcm94eSA9IHByb2Nlc3MuZ2V0KCk7Ci0gICAgICAgICAgICBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyh1c2VyQ29udGVudENv
bnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CisgICAgICAgICAgICBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyhwcm9jZXNzUG9vbC0+
dXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkpOwogCi0g
ICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFNlcnZpY2VX
b3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3Mg
cmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0lcCwgUElEPSVkKSIsIHNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nl
c3NJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0df
SUZfQUxMT1dFRF9TVEFUSUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRD
b25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdlYiBwcm9jZXNz
IChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eSkgewotICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6
Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4p
LCAqd2Vic2l0ZURhdGFTdG9yZSk7CisgICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5ID0gV2Vi
UHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2VycygqcHJvY2Vzc1Bvb2wsIFdURk1v
dmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CiAgICAgICAgIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzUHJveHkgPSBuZXdQcm9jZXNzUHJveHkucHRyKCk7CiAKLSAgICAgICAg
V0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNlV29ya2VyLCAiZXN0
YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEg
bmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VX
b3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVu
dGlmaWVyKCkpOworICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VE
X1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25U
b05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHBy
b2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCi0gICAgICAgIGluaXRpYWxp
emVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFTdG9yZSk7Ci0gICAg
ICAgIG1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOworICAgICAg
ICBwcm9jZXNzUG9vbC0+aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJvY2Vzc1Byb3h5LCB3
ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2VzLmFwcGVu
ZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOwogICAgIH0KIAotICAgIEFTU0VSVCghbV9zZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSk7
Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmFkZCgqc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eSk7CisgICAgQVNTRVJUKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29udGFpbnMoKnNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpKTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCku
YWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKIAotICAgIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KG1fc2VydmljZVdvcmtlclBy
ZWZlcmVuY2VzID8gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IG1fZGVmYXVs
dFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxsKCkpCi0gICAg
ICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQo
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5
LT5lc3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4dChwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29y
a2VyUHJlZmVyZW5jZXMgPyBwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMu
dmFsdWUoKSA6IHByb2Nlc3NQb29sLT5tX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCku
c3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmICghcHJvY2Vzc1Bv
b2wtPm1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgc2VydmljZVdv
cmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChwcm9jZXNzUG9vbC0+
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVt
b3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQog
ewotICAgIEFTU0VSVChtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFpbnMocHJvY2Vzcykp
OwotICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CisgICAgQVNT
RVJUKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlucyhwcm9jZXNzKSk7CisgICAgc2Vy
dmljZVdvcmtlclByb2Nlc3NlcygpLnJlbW92ZShwcm9jZXNzKTsKIH0KICNlbmRpZgogCkBAIC05
MjIsNyArNjI1LDcgQEAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OnRy
eVRha2VQcmV3YXJtZWRQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUKICNpZiBQTEFURk9STShHVEsp
IHx8IFBMQVRGT1JNKFdQRSkKICAgICAvLyBJbiBwbGF0Zm9ybXMgdXNpbmcgQnViYmxld3JhcCBm
b3Igc2FuZGJveGluZywgcHJld2FybWVkIHByb2Nlc3MgaXMgbGF1bmNoZWQgdXNpbmcgdGhlIFdl
YlByb2Nlc3NQb29sIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSwKICAgICAvLyBzbyB3ZSBkb24n
dCB1c2UgaXQgaW4gY2FzZSBvZiB1c2luZyBhIGRpZmZlcmVudCBXZWJzaXRlRGF0YVN0b3JlLgot
ICAgIGlmIChtX3NhbmRib3hFbmFibGVkICYmIG1fd2Vic2l0ZURhdGFTdG9yZSAmJiBtX3dlYnNp
dGVEYXRhU3RvcmUuZ2V0KCkgIT0gJndlYnNpdGVEYXRhU3RvcmUpCisgICAgaWYgKG1fc2FuZGJv
eEVuYWJsZWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogI2VuZGlmCiAKQEAgLTEwMzIsOCAr
NzM1LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MoV2Vi
UHJvY2Vzc1Byb3h5JiBwcm9jZXNzLCBXZWJzaXRlRGEKICAgICAgICAgcHJvY2Vzcy5pc1Jlc3Bv
bnNpdmUoW2luaXRpYWxpemF0aW9uQWN0aXZpdHkgPSBXVEZNb3ZlKGluaXRpYWxpemF0aW9uQWN0
aXZpdHkpXSAoYm9vbCkgeyB9KTsKICAgICB9KTsKIAotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7Ci0KICAgICBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CiAKICAg
ICBwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aCA9IG1fcmVzb2x2ZWRQYXRocy5pbmplY3Rl
ZEJ1bmRsZVBhdGg7CkBAIC0xMTk4LDkgKzg5OSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBy
b2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQogICAgICAg
ICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPmlnbm9yZVRpbWVvdXRzRm9yVGVzdGluZygpOwogCiAg
ICAgbV9jb25uZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5lY3Rpb24odGhpcywgcHJvY2Vzcy0+
d2ViQ29ubmVjdGlvbigpKTsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAg
IG1fd2Vic2l0ZURhdGFTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5KiBwcm9j
ZXNzKQpAQCAtMTI5NSwxMCArOTkzLDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJvY2Vzc1Bv
b2w6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSToKICAgICBp
ZiAoIXBhZ2VDb25maWd1cmF0aW9uLT53ZWJzaXRlRGF0YVN0b3JlKCkpIHsKICAgICAgICAgLy8g
V2UgdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBkZWZhdWx0IGRhdGEgc3RvcmUgYXMgbG9uZyBh
cyBwb3NzaWJsZS4KICAgICAgICAgLy8gQnV0IGlmIHRoZXJlIGlzIGFuIGF0dGVtcHQgdG8gY3Jl
YXRlIGEgd2ViIHBhZ2Ugd2l0aG91dCBhbnkgc3BlY2lmaWVkIGRhdGEgc3RvcmUsIHRoZW4gd2Ug
aGF2ZSB0byBjcmVhdGUgaXQuCi0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlKQotICAg
ICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0KLSAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNl
dFdlYnNpdGVEYXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsKKyAgICAgICAgcGFn
ZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCkpOwogICAgIH0KIAogICAgIFJlZlB0cjxXZWJQ
cm9jZXNzUHJveHk+IHByb2Nlc3M7CkBAIC0xMzI5LDcgKzEwMjQsNyBAQCBSZWY8V2ViUGFnZVBy
b3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50
LCBSZWY8QVBJOgogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBpZiAoIW1fc2Vydmlj
ZVdvcmtlclByZWZlcmVuY2VzKSB7CiAgICAgICAgIG1fc2VydmljZVdvcmtlclByZWZlcmVuY2Vz
ID0gcGFnZS0+cHJlZmVyZW5jZXNTdG9yZSgpOwotICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VX
b3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgICAgICBmb3IgKGF1
dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQogICAg
ICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclByZWZlcmVu
Y2VzU3RvcmUoKm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKTsKICAgICB9CiAgICAgaWYgKHVz
ZXJDb250ZW50Q29udHJvbGxlcikKQEAgLTEzNTYsNyArMTA1MSw3IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiB1c2VyQWdl
bnQpCiAgICAgaWYgKG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9PSB1c2VyQWdlbnQpCiAgICAg
ICAgIHJldHVybjsKICAgICBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQgPSB1c2VyQWdlbnQ7Ci0g
ICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtlclByb2Nl
c3NlcykKKyAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtl
clByb2Nlc3NlcygpKQogICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy5zZXRTZXJ2aWNlV29y
a2VyVXNlckFnZW50KG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CiB9CiAjZW5kaWYKQEAgLTEz
NjUsMTUgKzEwNjAsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdlQmVnaW5Vc2luZ1dlYnNp
dGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSQogewogICAgIGF1dG8gcmVz
dWx0ID0gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmFkZChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIEhh
c2hTZXQ8V2ViUGFnZVByb3h5SWRlbnRpZmllcj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChwYWdl
SUQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Ci0KLSAg
ICBhdXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKLSAgICBpZiAoc2Vzc2lv
bklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgQVNT
RVJUKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRhU3RvcmUucGFyYW1ldGVycygpLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsKLSAgICAgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFk
ZFNlc3Npb24obWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIGRhdGFTdG9yZS5jbGVh
clBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnBhZ2VFbmRVc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmll
ciBwYWdlSUQsIFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKQEAgLTE0MDEsNyArMTA4Nyw2
IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1BhZ2VzVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdl
YnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29s
Ojpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94eSogaW5p
dGlhdGluZ1BhZ2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5n
JiBzdWdnZXN0ZWRGaWxlbmFtZSkKIHsKICAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0gY3JlYXRl
RG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGluaXRpYXRpbmdQYWdlLCB7IH0pOwot
ICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKIAog
ICAgIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc0FwcEJvdW5kID0gTmF2
aWdhdGluZ1RvQXBwQm91bmREb21haW46Ok5vOwogICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewpA
QCAtMTQxMSwyNiArMTA5NiwyMyBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93
bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveAogI2VuZGlmCiAg
ICAgfQogCi0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgUmVzb3VyY2VSZXF1
ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQ
YXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxv
YWQgcmVxdWVzdC4KLSAgICAgICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3AgbGV2ZWwgZG9j
dW1lbnQncyBVUkwuCi0gICAgICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewotICAgICAgICAgICAg
VVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBh
Z2VMb2FkU3RhdGUoKS51cmwoKSB9OwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmly
c3RQYXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwpOwotICAgICAgICAgICAgdXBkYXRl
ZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVhbChpbml0aWF0
aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVx
dWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAg
ICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChpbml0aWF0aW5nUGFn
ZS0+dXNlckFnZW50Rm9yVVJMKHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsK
LSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOwotICAgICAg
ICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVz
ZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwotICAgICAgICB9Ci0g
ICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAgICAgIG5ldHdv
cmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVl
c3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3Qs
IGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3du
bG9hZFByb3h5OworICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsK
KyAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9y
aWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KKyAgICAvLyBXZSBzZXQgdGhlIHZh
bHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KKyAgICBpZiAoaW5pdGlhdGluZ1BhZ2Up
IHsKKyAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlh
dGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OworICAgICAgICB1cGRhdGVkUmVxdWVz
dC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7CisgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5p
dGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVx
dWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAg
ICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdlLT51
c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKKyAgICAgICAgdXBk
YXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7CisgICAgICAgIGlmICghdXBkYXRlZFJl
cXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQorICAg
ICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0
YW5kYXJkVXNlckFnZW50KCkpOwogICAgIH0KKyAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1RvcFNp
dGUoZmFsc2UpOworICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3QoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBk
b3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1
Z2dlc3RlZEZpbGVuYW1lKSwgMCk7CiAKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KQEAg
LTE0MzgsMTcgKzExMjAsMTIgQEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25s
b2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3gKIERvd25sb2FkUHJv
eHkmIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRh
U3RvcmUsIFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IEFQSTo6RGF0YSYgcmVz
dW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIGF1dG8mIGRvd25sb2FkUHJveHkg
PSBjcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgUmVzb3VyY2VSZXF1ZXN0KCksIGluaXRp
YXRpbmdQYWdlLCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGRhdGFTdG9y
ZS5zZXNzaW9uSUQoKTsKIAogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlOwogICAgIGlmICghcGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFk
V3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgaWYgKG5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93bmxvYWRQcm94eS5kb3dubG9hZElE
KCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5OwotICAgIH0KLQorICAgIGRh
dGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpS
ZXN1bWVEb3dubG9hZChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIGRvd25sb2FkUHJveHkuZG93bmxv
YWRJRCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2FuZGJveEV4dGVuc2lv
bkhhbmRsZSksIDApOwogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQogCkBAIC0xNTE3LDEx
ICsxMTk0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVmcmVzaFBsdWdpbnMoKQogCiAjZW5k
aWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAKLVByb2Nlc3NJRCBXZWJQcm9jZXNz
UG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCkKLXsKLSAgICByZXR1cm4gbV9uZXR3b3Jr
UHJvY2VzcyA/IG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCkgOiAwOwotfQot
CiBQcm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6OnByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyKCkK
IHsKICAgICByZXR1cm4gbV9wcmV3YXJtZWRQcm9jZXNzID8gbV9wcmV3YXJtZWRQcm9jZXNzLT5w
cm9jZXNzSWRlbnRpZmllcigpIDogMDsKQEAgLTE1NTgsMTQgKzEyMzAsMTggQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZShjb25zdCBTdHJpbmcmIHVybFNj
aGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJV
UkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNz
YWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpKTsK
LSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJl
Z2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9y
ZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUm
IGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hl
bWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxT
Y2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeShjb25zdCBTdHJpbmcmIHVybFNj
aGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJV
UkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpOwogICAg
IHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hl
bWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpKTsKLSAgICBzZW5k
VG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJM
U2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSk7CisgICAg
V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdl
YnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVB
c0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsK
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZv
clVSTFNjaGVtZShjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE1NzgsMTQgKzEyNTQsMTgg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKGNvbnN0IFN0
cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24o
KS5yZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9j
ZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxT
Y2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRl
RGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURh
dGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwo
dXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lz
dGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBM
ZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNj
ZXNzKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNj
aGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFj
aFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9y
ZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSksIDAp
OworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFz
RGlzcGxheUlzb2xhdGVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTYwNiwxMCArMTI4
Niw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZp
bmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAgIGds
b2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLmFkZCh1cmxTY2hlbWUp
OwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdpc3RlclNjaGVtZUZvckxlZ2Fj
eUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAoYXV0byBuZXR3b3Jr
UHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9j
b2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2Jh
bFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25zdCBTdHJpbmcmIHVy
bFNjaGVtZSkKQEAgLTE2MTgsMTAgKzEyOTYsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJl
Z2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbgog
ICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMoKS5yZW1vdmUodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7
Ci0gICAgfQorICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnVucmVn
aXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25lZChjb25z
dCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2NTUsMTYgKzEzMzEsMTggQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAKICAgICBzZW5k
VG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVN
b2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hl
TW9kZWwpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9y
ZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBk
YXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhDYWNoZU1vZGVs
IGNhY2hlTW9kZWwpCiB7CiAgICAgdXBkYXRlQmFja0ZvcndhcmRDYWNoZUNhcGFjaXR5KCk7CiAK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNs
eUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsKKyAgICBXZWJzaXRlRGF0YVN0b3Jl
Ojpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUm
IGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kU3lu
YyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9y
VGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJ
bnRlcnZhbCkKQEAgLTE2NzQsMTIgKzEzNTIsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRE
ZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dEludGVydmFsKQogCiBE
b3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRl
RGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2Vi
UGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5m
bykKIHsKLSAgICByZXR1cm4gZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFBy
b3h5KGRhdGFTdG9yZSwgcmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwotfQot
Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFj
a2dyb3VuZCkKLXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQoYmFja2dyb3VuZCk7CisgICAgcmV0dXJuIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2Vz
cygpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCAqdGhpcywgcmVxdWVzdCwgZnJhbWVJ
bmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNz
YWdlUmVjZWl2ZXIoSVBDOjpSZWNlaXZlck5hbWUgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXImIG1lc3NhZ2VSZWNlaXZlcikKQEAgLTE3NTAsMzAgKzE0MjMsNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAgICAgc2VuZFRvQWxsUHJv
Y2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
bmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KQotewotICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdl
KCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKHN0ZDo6Zm9yd2FyZDxUPiht
ZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Np
b25JRCkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMoc2Vzc2lvbklEKSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzKCkKLXsKLSAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwotCi0gICAg
aWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9uZXR3
b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7
Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNz
ZXMoKQogewogICAgIFZlY3RvcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzID0g
bV9wcm9jZXNzZXM7CkBAIC0xNzgxLDQwICsxNDMwLDE1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQogICAgICAgICBwcm9jZXNzLT50ZXJt
aW5hdGUoKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzUHJl
cGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQotewotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJl
cGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25JbW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpCi17Ci0gICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5Rm9yVGVzdGluZygpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQotCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpCiB7CiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQogICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
OwotICAgIHdoaWxlIChtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKSkKLSAg
ICAgICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmJlZ2luKCktPmRpc2FibGVTZXJ2aWNlV29y
a2VycygpOworICAgIHdoaWxlIChzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNpemUo
KSkKKyAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmJlZ2luKCktPmRpc2FibGVTZXJ2
aWNlV29ya2VycygpOwogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmZsdXNoQ29v
a2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KS5mbHVzaENvb2tpZXMoc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19
Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1dG9tYXRpb25DYXBhYmlsaXRpZXMoKSBj
b25zdAogewogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpAQCAtMjA4OSwxNSArMTcxMywy
MSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZXBvcnRXZWJDb250ZW50Q1BVVGltZShTZWNvbmRz
IGNwdVRpbWUsIHVpbnQ2NF90IGFjdGl2aXR5UwogI2VuZGlmCiB9CiAKK1dlYWtIYXNoU2V0PFdl
YlByb2Nlc3NQcm94eT4mIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkK
K3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5
Pj4gcHJvY2Vzc2VzOworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9CisKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb25zKCkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpm
b3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7
CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRp
b24oKTsKKyAgICB9KTsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gQ2hlY2sg
b24gbmV4dCBydW4gbG9vcCBzaW5jZSB0aGUgd2ViIHByb2Nlc3MgcHJveHkgdG9rZW5zIGFyZSBw
cm9iYWJseSBiZWluZyB1cGRhdGVkLgotICAgIGNhbGxPbk1haW5SdW5Mb29wKFt0aGlzLCB3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3Mg
OiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMpCisgICAgY2FsbE9uTWFpblJ1bkxvb3AoW10gewor
ICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclBy
b2Nlc3NlcygpKQogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3NBc3NlcnRpb24oKTsKICAgICB9KTsKICNlbmRpZgpAQCAtMjEwNyw3ICsx
NzM3LDcgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29ya2VyUGFnZUlEKFdlYlBh
Z2VQcm94eUlkZW50aWZpZXIgcGFnZUlEKSBjb25zdAogewogI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmVmZmljaWVudC4KLSAgICByZXR1cm4gV1RG
OjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtwYWdlSURdKGF1dG8mIHByb2Nlc3Mp
IHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtwYWdl
SURdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdv
cmtlclBhZ2VQcm94eShwYWdlSUQpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMzI5LDE0ICsxOTU5
LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRl
c3RpbmcoKQogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLXZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21h
aW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0
ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6OkZsYWc+IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIFdl
YlBhZ2VQcm94eUlkZW50aWZpZXIgd2ViUGFnZVByb3h5SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBh
Z2VJRCkKLXsKLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5z
ZmVyKHNlc3Npb25JRCwgZnJvbURvbWFpbiwgdG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNm
ZXIsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpTZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihkb21haW5zKSk7CkBA
IC0yMzg3LDI3ICsyMDA5LDI3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1ZGlibGVN
ZWRpYUFzc2VydGlvbnMoKQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykK
IHsKLSAgICBpZiAobV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID09IHVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MpCisgICAgaWYgKHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAi
c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAg
V0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2Vzcz0lZCkiLCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIAotICAgIG1fdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3M7Ci0gICAgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKLSAgICB0ZXJtaW5hdGVOZXR3
b3JrUHJvY2VzcygpOworICAgIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bv
b2wtPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCiBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFj
dGl2aXR5Rm9yVGVzdGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6
YW55T2Yoc2VydmljZVdvcmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAg
ICAgIHJldHVybiBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JU
ZXN0aW5nKCk7CiAgICAgfSk7CiB9CiAKIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VX
b3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
V1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsK
KyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8m
IHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckJhY2tn
cm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4IGQxZjFmZTk2MTUwNmExZTVmMTMyNWZhOTlhNTYw
OGI5NTBiNmFiNzEuLmViYmNhYTRlY2IxZDczNzE3YjFhMzU0ODJhNzJmYTljZjRkZTFlNGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApAQCAtODEsNyArODEsNiBA
QCBPQkpDX0NMQVNTIFdLUHJlZmVyZW5jZU9ic2VydmVyOwogCiBuYW1lc3BhY2UgQVBJIHsKIGNs
YXNzIEF1dG9tYXRpb25DbGllbnQ7Ci1jbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7
CiBjbGFzcyBEb3dubG9hZENsaWVudDsKIGNsYXNzIEhUVFBDb29raWVTdG9yZTsKIGNsYXNzIElu
amVjdGVkQnVuZGxlQ2xpZW50OwpAQCAtMTgwLDcgKzE3OSw2IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3Rv
cnlDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0RG93bmxvYWRDbGllbnQoVW5pcXVlUmVmPEFQSTo6
RG93bmxvYWRDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYmKTsKLSAgICB2b2lkIHNldExlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQ+JiYpOwogCiAgICAgdm9pZCBzZXRDdXN0b21XZWJDb250ZW50U2Vy
dmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBj
dXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX2NvbmZp
Z3VyYXRpb24tPmN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpOyB9CkBA
IC0xOTEsMTcgKzE4OSw5IEBAIHB1YmxpYzoKICAgICAvLyBudWxsIGNoZWNrcyBpbiBXZWJQYWdl
UHJveHkuCiAgICAgV2ViUHJvY2Vzc1Byb3h5KiBkdW1teVByb2Nlc3NQcm94eShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQpIGNvbnN0IHsgcmV0dXJuIG1fZHVtbXlQcm9jZXNzUHJveGllcy5nZXQo
c2Vzc2lvbklEKS5nZXQoKTsgfQogCi0gICAgLy8gV2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2Vz
cyBhcyBhcHByb3BvcmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4gVGhlIGNvbm5lY3Rp
b24gbXVzdCBiZSBub24tbnVsbC4KLSAgICBJUEM6OkNvbm5lY3Rpb24qIG5ldHdvcmtpbmdQcm9j
ZXNzQ29ubmVjdGlvbigpOwotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9B
bGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
dm9pZCBzZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKGNvbnN0IFQmIG1lc3NhZ2UsIFBBTDo6
U2Vzc2lvbklEKTsKIAotICAgIC8vIFNlbmRzIHRoZSBtZXNzYWdlIHRvIFdlYlByb2Nlc3Mgb3Ig
TmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9kZWwu
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhU
JiYgbWVzc2FnZSk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gdm9pZCBz
ZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UsIFUmJiByZXBseSk7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNo
aW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpOwotCiAgICAgdm9pZCBwcm9jZXNzRGlkRmluaXNo
TGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSopOwogCiAgICAgV2ViUHJvY2Vzc0NhY2hlJiB3ZWJQ
cm9jZXNzQ2FjaGUoKSB7IHJldHVybiBtX3dlYlByb2Nlc3NDYWNoZS5nZXQoKTsgfQpAQCAtMjA5
LDkgKzE5OSw2IEBAIHB1YmxpYzoKICAgICAvLyBEaXNjb25uZWN0IHRoZSBwcm9jZXNzIGZyb20g
dGhlIGNvbnRleHQuCiAgICAgdm9pZCBkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkq
KTsKIAotICAgIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSogd2Vic2l0ZURhdGFTdG9yZSgpIGNv
bnN0IHsgcmV0dXJuIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0UHJp
bWFyeURhdGFTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeyBtX3dl
YnNpdGVEYXRhU3RvcmUgPSAmZGF0YVN0b3JlOyB9Ci0KICAgICBSZWY8V2ViUGFnZVByb3h5PiBj
cmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJik7
CiAKICAgICB2b2lkIHBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJ
ZGVudGlmaWVyLCBXZWJzaXRlRGF0YVN0b3JlJik7CkBAIC0yNjIsMTAgKzI0OSw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGFkZFN1cHBvcnRlZFBsdWdpbihTdHJpbmcmJiBtYXRjaGluZ0RvbWFpbiwg
U3RyaW5nJiYgbmFtZSwgSGFzaFNldDxTdHJpbmc+JiYgbWltZVR5cGVzLCBIYXNoU2V0PFN0cmlu
Zz4gZXh0ZW5zaW9ucyk7CiAgICAgdm9pZCBjbGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIAotICAg
IFByb2Nlc3NJRCBuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKICAgICBQcm9jZXNzSUQgcHJl
d2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKTsKICAgICB2b2lkIGFjdGl2ZVBhZ2VzT3JpZ2luc0lu
V2ViUHJvY2Vzc0ZvclRlc3RpbmcoUHJvY2Vzc0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxTdHJpbmc+JiYpPiYmKTsKLSAgICBib29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1l
bnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpOwogCiAgICAgV2ViUGFnZUdyb3VwJiBkZWZhdWx0
UGFnZUdyb3VwKCkgeyByZXR1cm4gbV9kZWZhdWx0UGFnZUdyb3VwLmdldCgpOyB9CiAKQEAgLTMw
Nyw4ICsyOTIsNiBAQCBwdWJsaWM6CiAgICAgQVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVu
dCYgaGlzdG9yeUNsaWVudCgpIHsgcmV0dXJuICptX2hpc3RvcnlDbGllbnQ7IH0KICAgICBXZWJD
b250ZXh0Q2xpZW50JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCi0gICAgQVBJOjpD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgp
IGNvbnN0IHsgcmV0dXJuICptX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsgfQotCiAgICAg
c3RydWN0IFN0YXRpc3RpY3MgewogICAgICAgICB1bnNpZ25lZCB3a1ZpZXdDb3VudDsKICAgICAg
ICAgdW5zaWduZWQgd2tQYWdlQ291bnQ7CkBAIC0zMjQsOCArMzA3LDYgQEAgcHVibGljOgogICAg
IHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7CiAgICAgdm9pZCB0ZXJtaW5hdGVT
ZXJ2aWNlV29ya2VycygpOwogCi0gICAgdm9pZCBmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNz
aW9uSUQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCiAgICAgdm9pZCBzZXRTaG91
bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhib29sIHZhbHVlKSB7IG1f
c2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQog
ICAgIGJvb2wgc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSBj
b25zdCB7IHJldHVybiBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nOyB9CiAgICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFp
bEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9CkBAIC0zODgsMTkgKzM2OSwxMyBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogICAgIC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50Ci0gICAgTmV0
d29ya1Byb2Nlc3NQcm94eSYgZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSog
d2l0aFdlYnNpdGVEYXRhU3RvcmUgPSBudWxscHRyKTsKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
KiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCk7
IH0KICAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7
CiAKLSAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkm
LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25E
ZWxheWVkUmVwbHkmJik7Ci0KICAgICBib29sIGlzU2VydmljZVdvcmtlclBhZ2VJRChXZWJQYWdl
UHJveHlJZGVudGlmaWVyKSBjb25zdDsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAg
dm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0
d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vz
c2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHN0YXRpYyB2b2lkIGVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNzaW9uSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCByZW1vdmVGcm9tU2Vydmlj
ZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkmKTsKLSAgICBzaXplX3Qgc2VydmljZVdv
cmtlclByb3hpZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cy5jb21wdXRlU2l6ZSgpOyB9Ci0gICAgdm9pZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZv
clNlcnZpY2VXb3JrZXIoYm9vbCBhbGxvd3MpIHsgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZv
clNlcnZpY2VXb3JrZXIgPSBhbGxvd3M7IH0KLSAgICBib29sIGFsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yU2VydmljZVdvcmtlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzQW55U1NMQ2VydGlm
aWNhdGVGb3JTZXJ2aWNlV29ya2VyOyB9CisgICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVz
Q291bnQoKSBjb25zdCB7IHJldHVybiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNp
emUoKTsgfQogICAgIHZvaWQgdXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25zdCBTdHJp
bmcmIHVzZXJBZ2VudCk7CiAgICAgY29uc3QgT3B0aW9uYWw8VXNlckNvbnRlbnRDb250cm9sbGVy
SWRlbnRpZmllcj4mIHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29y
a2VycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNl
V29ya2VyOyB9CiAgICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9y
VGVzdGluZygpIGNvbnN0OwpAQCAtNDU5LDggKzQzNCw2IEBAIHB1YmxpYzoKICAgICBib29sIGFs
d2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx3YXlzUnVu
c0F0QmFja2dyb3VuZFByaW9yaXR5OyB9CiAgICAgYm9vbCBzaG91bGRUYWtlVUlCYWNrZ3JvdW5k
QXNzZXJ0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0
aW9uOyB9CiAKLSAgICB2b2lkIHN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3Jv
dW5kKTsKLSAgICAKICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICB2b2lkIGdhbWVwYWRDb25uZWN0
ZWQoY29uc3QgVUlHYW1lcGFkJiwgV2ViQ29yZTo6RXZlbnRNYWtlc0dhbWVwYWRzVmlzaWJsZSk7
CiAgICAgdm9pZCBnYW1lcGFkRGlzY29ubmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYpOwpAQCAtNDk4
LDcgKzQ3MSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVG
b3JUZXN0aW5nKCk7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAg
IHZvaWQgZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9u
SUQsIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21haW4sIE9wdGlvblNldDxXZWJDb3JlOjpD
cm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiwgV2ViUGFnZVByb3h5SWRlbnRp
ZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIpOwogICAgIHZvaWQgc2V0RG9tYWluc1dpdGhV
c2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJik7CiAg
ICAgdm9pZCBzZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRlc3RpbmcoY29uc3QgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4mIGZpcnN0UGFydHlEb21haW4sIGNvbnN0IFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluJiB0aGlyZFBhcnR5RG9tYWluLCBib29sIHNob3VsZFNjaGVkdWxlTm90
aWZpY2F0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgc2VuZFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKQEAgLTUyNSw4ICs0OTcsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgUGx1Z0luQXV0
b1N0YXJ0UHJvdmlkZXImIHBsdWdJbkF1dG9TdGFydFByb3ZpZGVyKCkgeyByZXR1cm4gbV9wbHVn
SW5BdXRvU3RhcnRQcm92aWRlcjsgfQogCi0gICAgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzKGJvb2wpOwotICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzczsg
fQorICAgIHN0YXRpYyB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9v
bCk7CisgICAgc3RhdGljIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIHsg
cmV0dXJuIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQogCiAjaWYgRU5BQkxF
KENGUFJFRlNfRElSRUNUX01PREUpCiAgICAgdm9pZCBub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQo
Y29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBPcHRpb25hbDxT
dHJpbmc+JiBlbmNvZGVkVmFsdWUpOwpAQCAtNTQzLDYgKzUxNSwxNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0
cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSk7CiAjZW5kaWYKIAorICAgIHN0YXRpYyB2
b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNXaXRo
Q3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAg
ICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3Ry
aW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2lu
Z0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0Rp
cmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5
KCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwog
CkBAIC01NTYsOCArNTM5LDYgQEAgcHJpdmF0ZToKICAgICBXZWJQcm9jZXNzUHJveHkmIGNyZWF0
ZU5ld1dlYlByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3
YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkOjpObyk7CiAgICAgdm9pZCBpbml0
aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmLCBXZWJzaXRlRGF0YVN0b3JlKiwg
V2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJt
ZWQ6Ok5vKTsKIAotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLQogICAgIHZvaWQgaGFuZGxlTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2Vy
RGF0YSYgbWVzc2FnZUJvZHkpOwogICAgIHZvaWQgaGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRh
JiBtZXNzYWdlQm9keSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyRGF0YSYmKT4mJik7CiAK
QEAgLTU4MSwxNCArNTYyLDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdXNlc1NpbmdsZVdlYlBy
b2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPnVzZXNTaW5nbGVXZWJQcm9j
ZXNzKCk7IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3RhdGljIFN0cmluZyBj
b29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVE
aXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3Rvcnko
KTsKLSAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBz
dGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwotI2VuZGlmCi0KICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJz
KCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CkBAIC02MzAs
OSArNjAzLDggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWFrUHRy
PFdlYlByb2Nlc3NQcm94eT4+IG1fZHVtbXlQcm9jZXNzUHJveGllczsgLy8gTGlnaHR3ZWlnaHQg
V2ViUHJvY2Vzc1Byb3h5IG9iamVjdHMgd2l0aG91dCBiYWNraW5nIHByb2Nlc3MuCiAKICNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBt
X3NlcnZpY2VXb3JrZXJQcm9jZXNzZXM7CisgICAgc3RhdGljIFdlYWtIYXNoU2V0PFdlYlByb2Nl
c3NQcm94eT4mIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKTsKICAgICBib29sIG1fd2FpdGluZ0Zv
cldvcmtlckNvbnRleHRQcm9jZXNzQ29ubmVjdGlvbiB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2Fs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlciB7IGZhbHNlIH07CiAgICAgU3Ry
aW5nIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudDsKICAgICBPcHRpb25hbDxXZWJQcmVmZXJlbmNl
c1N0b3JlPiBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlczsKICAgICBPcHRpb25hbDxVc2VyQ29u
dGVudENvbnRyb2xsZXJJZGVudGlmaWVyPiBtX3VzZXJDb250ZW50Q29udHJvbGxlcklERm9yU2Vy
dmljZVdvcmtlcjsKQEAgLTY0OCw3ICs2MjAsNiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVl
X3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+IG1fYXV0b21hdGlvbkNsaWVudDsKICAgICBVbmlx
dWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4gbV9kb3dubG9hZENsaWVudDsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4gbV9oaXN0b3J5Q2xpZW50
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4g
bV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiAKICAgICBSZWZQdHI8V2ViQXV0b21hdGlv
blNlc3Npb24+IG1fYXV0b21hdGlvblNlc3Npb247CiAKQEAgLTY4MCw4ICs2NTEsNiBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9tZW1vcnlTYW1wbGVyRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgZG91
YmxlIG1fbWVtb3J5U2FtcGxlckludGVydmFsIHsgMTQwMC4wIH07CiAKLSAgICBSZWZQdHI8V2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmU7Ci0KICAgICB0eXBlZGVm
IEhhc2hNYXA8Y29uc3QgY2hhciosIFJlZlB0cjxXZWJDb250ZXh0U3VwcGxlbWVudD4sIFB0ckhh
c2g8Y29uc3QgY2hhcio+PiBXZWJDb250ZXh0U3VwcGxlbWVudE1hcDsKICAgICBXZWJDb250ZXh0
U3VwcGxlbWVudE1hcCBtX3N1cHBsZW1lbnRzOwogCkBAIC03MTQsOCArNjgzLDYgQEAgcHJpdmF0
ZToKIAogICAgIGJvb2wgbV9wcm9jZXNzVGVybWluYXRpb25FbmFibGVkIHsgdHJ1ZSB9OwogCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7
Ci0KICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8RGljdGlvbmFyeUNhbGxiYWNrPj4gbV9k
aWN0aW9uYXJ5Q2FsbGJhY2tzOwogCiAjaWYgVVNFKFNPVVApCkBAIC04MjAsNyArNzg3LDcgQEAg
cHJpdmF0ZToKICNlbHNlCiAgICAgYm9vbCBtX2lzRGVsYXllZFdlYlByb2Nlc3NMYXVuY2hEaXNh
YmxlZCB7IGZhbHNlIH07CiAjZW5kaWYKLSAgICBib29sIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcyB7IGZhbHNlIH07CisgICAgc3RhdGljIGJvb2wgc191c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykK
ICAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBtX2RvbWFpbnNXaXRoVXNl
ckludGVyYWN0aW9uOwpAQCAtODMxLDIwICs3OTgsNiBAQCBwcml2YXRlOgogI2VuZGlmCiB9Owog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYg
bV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NS
ZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKQotewotICAgIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVz
c2FnZSksIDApOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1lc3NhZ2UpCiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCAwODNhN2U3OWE2ZGViZjBmMjk4
Y2FjMjk5MmUyNzIzMGFhYjViMWFlLi5mN2UwYzFmNzY1ZjNiNDU3NTZkMGM4MDRhOTA4NjliMGE4
YjkxOWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAK
QEAgLTczNyw3ICs3MzcsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6Z2V0UGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb24odWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuLCBNZQogCiB2b2lkIFdlYlBy
b2Nlc3NQcm94eTo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVw
bHkpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp0
aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9j
ZXNzKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7
CiB9CiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3Jl
Q29jb2EubW0KaW5kZXggZWVlNzhmYmM5ODg2NDk0NzZkMTA5NWI0OWNmMTA2YzE4NDQ1ZDI0NS4u
OGI2ODk2MzQ4YzZmMmZkZmNmZGRlMTQ4ODk2MDE1ZjM2MzJkNjQ3ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dl
YnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW1wb3J0ICJDb29r
aWVTdG9yYWdlVXRpbHNDRi5oIgogI2ltcG9ydCAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIK
KyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIlNhbmRib3hVdGlsaXRp
ZXMuaCIKICNpbXBvcnQgIlN0b3JhZ2VNYW5hZ2VyLmgiCiAjaW1wb3J0ICJXZWJGcmFtZVBvbGlj
eUxpc3RlbmVyUHJveHkuaCIKQEAgLTQ0LDYgKzQ1LDcgQEAKICNpbXBvcnQgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4KICNpbXBvcnQgPHd0
Zi9VUkwuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9FbnRpdGxlbWVudHMuaD4KICNpbXBvcnQgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC01
NjMsNCArNTY1LDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWluaXRpYWxpemVBcHBCb3Vu
ZERvbWFpbnMoKQogfQogI2VuZGlmCiAKK2Jvb2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1By
b2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkK
K3sKKyAgICByZXR1cm4gV1RGOjpoYXNFbnRpdGxlbWVudChuZXR3b3JrUHJvY2VzcygpLmNvbm5l
Y3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKK30K
KwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCAwODMwY2E3NWE3ZmMzOGU2NDViNzc1YjM5YjMzNzVk
NGMyMDUwMzdkLi5jYWE5ZGM0OGU5YjVhYjk2NmU4MTNkYjYyMzViZGYxZDhiYjExYTE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0
b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVN0b3JlLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0
aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNs
dWRlICJXZWJCYWNrRm9yd2FyZENhY2hlLmgiCisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclBy
b3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0MkluaXRpYWxpemUuaCIKICNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzQ2FjaGUuaCIKQEAgLTc1LDYgKzc2LDEwIEBA
CiAjaW5jbHVkZSAiU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IuaCIKICNlbmRpZgogCisjaWYg
UExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIGJvb2wgYWxsb3dzV2Vic2l0ZURh
dGFSZWNvcmRzRm9yQWxsT3JpZ2luczsKQEAgLTgzLDEzICs4OCwyOSBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmFsbG93V2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2lucygpCiAgICAgYWxs
b3dzV2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2lucyA9IHRydWU7CiB9CiAKLXN0YXRpYyBI
YXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4mIG5vbkRlZmF1bHREYXRh
U3RvcmVzKCkKK3N0YXRpYyBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3Jl
Kj4mIGFsbERhdGFTdG9yZXMoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVUlUaHJlYWQoKSk7
CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNp
dGVEYXRhU3RvcmUqPj4gbWFwOwogICAgIHJldHVybiBtYXA7CiB9CiAKK3ZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0
YVN0b3JlJik+JiYgZnVuY3Rpb24pCit7CisgICAgZm9yIChhdXRvKiBkYXRhU3RvcmUgOiBhbGxE
YXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAgICAgIGZ1bmN0aW9uKCpkYXRhU3RvcmUpOworfQor
CisvLyBGSVhNRTogUmVwbGFjZSB0aGlzIHdpdGggdGhlIGNvcnJlY3Qgd2Vic2l0ZSBkYXRhIHN0
b3Jlcy4KK1ZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFTdG9y
ZTo6cGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKQoreworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycz4gYWxsUGFyYW1ldGVyczsKKyAgICBhbGxQYXJhbWV0ZXJzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoYWxsRGF0YVN0b3JlcygpLnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBz
dG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICAgICAgYWxsUGFyYW1ldGVycy51
bmNoZWNrZWRBcHBlbmQoc3RvcmUtPnBhcmFtZXRlcnMoKSk7CisgICAgcmV0dXJuIGFsbFBhcmFt
ZXRlcnM7Cit9CisKIFJlZjxXZWJzaXRlRGF0YVN0b3JlPiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVh
dGVOb25QZXJzaXN0ZW50KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJzaXRlRGF0
YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50
OjpObyksIFBBTDo6U2Vzc2lvbklEOjpnZW5lcmF0ZUVwaGVtZXJhbFNlc3Npb25JRCgpKSk7CkBA
IC0xMTUsMTAgKzEzNiwxMSBAQCBXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKFJl
ZjxXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbj4mJiBjb25maWd1cgogI2VuZGlmCiB7CiAg
ICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1heWJl
UmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuYWRkU2Vzc2lvbigqdGhpcyk7CiB9CiAKIFdl
YnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKCkKQEAgLTEyOCwxNyArMTUwLDEyIEBA
IFdlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKCkKIAogICAgIHBsYXRmb3JtRGVz
dHJveSgpOwogCi0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgQVNTRVJUKG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0
KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsKLSAgICAgICAgbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5y
ZW1vdmUobV9zZXNzaW9uSUQpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgQVNTRVJUKGFsbERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQp
ID09IHRoaXMpOworICAgIGFsbERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkucmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQotICAgICAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkKLSAgICAgICAgICAgIGdwdVByb2Nlc3NQ
cm94eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgaWYgKGF1dG8qIGdwdVByb2Nl
c3NQcm94eSA9IEdQVVByb2Nlc3NQcm94eTo6c2luZ2xldG9uSWZDcmVhdGVkKCkpCisgICAgICAg
IGdwdVByb2Nlc3NQcm94eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAjZW5kaWYKIH0K
IApAQCAtMTY5LDE3ICsxODYsMzIgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0
YVN0b3JlRXhpc3RzKCkKICAgICByZXR1cm4gISFnbG9iYWxEZWZhdWx0RGF0YVN0b3JlKCk7CiB9
CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAo
KQordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKQorewor
ICAgIGF1dG8gcmVzdWx0ID0gYWxsRGF0YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7
CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKK30KKworV2Vi
c2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNz
aW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIGlmIChtX3Nlc3Npb25JRCAh
PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGF1dG8gcmVz
dWx0ID0gbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5hZGQobV9zZXNzaW9uSUQsIHRoaXMpOwotICAg
ICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgIHJldHVy
biBhbGxEYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCk7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJv
eHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBpZiAoIW1fbmV0
d29ya1Byb2Nlc3MpIHsKKyAgICAgICAgaWYgKG1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCisg
ICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzID0gJmRlZmF1bHREYXRhU3RvcmUoKS0+bmV0d29y
a1Byb2Nlc3MoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZSgpOwogICAgIH0KKworICAgIHJldHVybiAqbV9u
ZXR3b3JrUHJvY2VzczsKIH0KIAotV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6
ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCkKK05ldHdvcmtQcm9jZXNzUHJveHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQ
cm9jZXNzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkgPyBub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChzZXNzaW9u
SUQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxXZWJzaXRlRGF0YVN0b3JlJj4o
KnRoaXMpLm5ldHdvcmtQcm9jZXNzKCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVn
aXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKQEAgLTE5NSwxMiArMjI3LDYg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1bnJlZ2lzdGVyUHJvY2VzcyhXZWJQcm9jZXNzUHJv
eHkmIHByb2Nlc3MpCiAgICAgbV9wcm9jZXNzZXMucmVtb3ZlKHByb2Nlc3MpOwogfQogCi1XZWJQ
cm9jZXNzUG9vbCogV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdl
T3BlcmF0aW9ucygpCi17Ci0gICAgYXV0byBwb29scyA9IHByb2Nlc3NQb29scygxKTsKLSAgICBy
ZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8gbnVsbHB0ciA6IHBvb2xzLmJlZ2luKCktPmdldCgpOwot
fQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5
KCkKIHsKICAgICBpZiAobV9oYXNSZXNvbHZlZERpcmVjdG9yaWVzKQpAQCAtNDQyLDE1ICs0Njgs
MTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNj
ZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0
YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwogICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5
cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsKICAgICAgICAgYXV0byBwb29scyA9IG5l
dHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5z
dXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNzUG9vbHMoKTsKKyAgICAgICAgLy8gRklYTUU6IEl0
IG1pZ2h0IG5vdCBiZSBjb3JyZWN0IHRvIGl0ZXJhdGUgdGhlIHBvb2xzIGhlcmUuCiAgICAgICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChu
ZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vz
c1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpM
YXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KHRoaXMpOworICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CkBA
IC00NTgsNyArNDgzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBs
eShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsK
LSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5mZXRjaFdlYnNpdGVE
YXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVn
YXRvciwgcHJvY2Vzc1Bvb2xdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CisgICAgICAgICAg
ICBuZXR3b3JrUHJvY2VzcygpLmZldGNoV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBl
cywgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0oV2Vic2l0
ZURhdGEgd2Vic2l0ZURhdGEpIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3It
PnJlbW92ZVBlbmRpbmdDYWxsYmFjayhXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfQpAQCAtNzI2LDE1ICs3NTEsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2Fs
bFRpbWUKICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3Jr
UHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQo
KSk7CiAgICAgaWYgKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNjZXNzVHlw
ZTo6Tm9uZSkgewogICAgICAgICBhdXRvIHBvb2xzID0gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBl
ID09IFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2ggPyBlbnN1cmVQcm9jZXNzUG9vbHMoKSA6IHBy
b2Nlc3NQb29scygpOworICAgICAgICAvLyBGSVhNRTogSXQgbWlnaHQgbm90IGJlIGNvcnJlY3Qg
dG8gaXRlcmF0ZSBwb29scyBoZXJlLgogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7
CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAg
ICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAgICAgICAgICAgICAgICBu
ZXR3b3JrUHJvY2VzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBj
YXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgpAQCAtNzQyLDcgKzc2Niw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRh
VHlwZXMsIFdhbGxUaW1lCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNhbGxiYWNrQWdn
cmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBl
cywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKKyAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQs
IGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bv
b2xdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdD
YWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKQEAgLTg5MywxNCArOTE3LDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1v
dmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIGlmIChkYXRhVHlwZXMuY29u
dGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSkgewogICAgICAg
ICBpZiAoIWRpZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSkgewotICAg
ICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRp
bmdDYWxsYmFjaygpOwotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLT5kZWxldGVXZWJzaXRl
RGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJl
bW92ZVBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmRl
bGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3It
PnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwpAQCAtOTk0
LDEyICsxMDEzLDEwIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJv
Y2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9u
bHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0g
ICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOwor
ICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CkBAIC0xMDIxLDcg
KzEwMzgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAg
ICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhRm9y
T3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBvcmlnaW5zLCBjb29raWVIb3N0TmFtZXMs
IEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0cmFibGVEb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yLCBwcm9jZXNzUG9vbF0geworICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVX
ZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29v
a2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2Nh
bGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFj
a0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0KQEAgLTExODAsMTggKzExOTcsMTIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3QgVmUK
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3Rp
bmcoU2Vjb25kcyBzZWNvbmRzKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQ
cm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2
aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhzZWNvbmRzKSwgTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHko
KSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhzZWNv
bmRzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1l
b3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoKQogewotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKCksIE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9y
VGVzdGluZzo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5
bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVv
dXRGb3JUZXN0aW5nKCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29y
a2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7CiB9CiAKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMTIwMSw4ICsxMjEyLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5
Q291bnQsIENvbXBsZXQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtX3Nlc3Np
b25JRCwgbWF4aW11bUVudHJ5Q291bnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9z
ZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3Qg
cHJ1bmVUYXJnZXRDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTIxMSw4ICsxMjIxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQ
cnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBsZXRpb24KICAg
ICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1fc2Vzc2lvbklELCBwcnVuZVRhcmdl
dENvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJn
ZXRDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjIxLDggKzEyMzAsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNl
Y29uZHMsIENvbXBsZXRpb25IYW5kbGVyPAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyaW5nVGlt
ZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9zZXNz
aW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNl
Y29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTIzMSwyMCArMTIzOSwxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsCiAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklE
LCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCht
X3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICAgICAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmR1bXBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
IGlzUHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyNTYsMTIgKzEyNTcsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
ICAgIHByb2Nlc3MtPmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
aXNQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sIGlzUHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEy
NzMsMTIgKzEyNjksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChibwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzR3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI5Miw4
ICsxMjgzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm8KICAgICAKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
c2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1
Z01vZGUoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTEzMDcsMTAgKzEyOTcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291
cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wgaXNWZXJ5UHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTEzMjIsMTIgKzEzMDksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzVmVyeVByZXZh
bGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ZlcnlQcmV2YWxlbnRSZXNv
dXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM0MSwxMCArMTMyMyw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0
VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNS
ZW1vdmFsKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTEzNTMsOCArMTMzMiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2CiAg
ICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpLnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNS
ZW1vdmFsKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvbnN0IFVSTCYgdG9w
RnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTEzNjgsMjIgKzEzNDYsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY28KIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVV
UkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1l
VW5kZXIoY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJl
ZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJM
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1l
VVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBj
b25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xMzk3LDIzICsxMzY3LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3VicmVzb3Vy
Y2VVCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBz
dWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJM
IH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VV
UkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVn
aXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJM
JiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0MjcsMTAgKzEzODgsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhj
b25zdCBVUkwmIHN1YnJlc291cmNlVVJMLAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8obV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZy
b20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJv
bSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ0
MiwxMiArMTQwMCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxS
ZWRpcmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYg
dG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDU5LDEyICsxNDEyLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJM
JiB0b3BGcmFtZVVSTCwgY29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlx
dWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRv
cEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRv
IH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRp
cmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVk
RnJvbSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTQ3NiwyNSArMTQyNCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbgogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3Rl
ZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBVUkwmIHVybFJlZGly
ZWN0ZWRGcm9tLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0
aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJl
Y3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8g
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTUwNiw0NiArMTQ0MywyNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNs
ZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0K
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIHByb2Nlc3MtPmNsZWFyUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyUHJldmFsZW50
UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
Ci0KLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnJl
c2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVz
ZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3VibWl0VGVsZW1ldHJ5
KCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25JRCwgW10geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50
KFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyBzaG91
bGRHcmFuZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9y
eUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UsIHNob3VsZEdyYW5kZmF0
aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vz
c2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE1NzcsMzUgKzE0OTUsMjQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkoQ29tcGxldGlvbkhhbmRsZXI8
dm8KIAogICAgIFJlZlB0cjxDYWxsYmFja0FnZ3JlZ2F0b3I+IGNhbGxiYWNrQWdncmVnYXRvciA9
IGFkb3B0UmVmKG5ldyBDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
SW1tZWRpYXRlbHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVu
c3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3Vt
bWFyeShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFZlY3Rv
cjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmIGRhdGEp
IHsKLSAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFJlc3VsdChXVEZNb3Zl
KGRhdGEpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9CisgICAgLy8gRklY
TUU6IGNhbGwgc2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkgaGVyZS4K
KyAgICBuZXR3b3JrUHJvY2VzcygpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFy
eShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0oVmVjdG9yPFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYgZGF0YSkgeworICAgICAgICBjYWxs
YmFja0FnZ3JlZ2F0b3ItPmFkZFJlc3VsdChXVEZNb3ZlKGRhdGEpKTsKKyAgICB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50
KFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyBzaG91bGRHcmFuZGZhdGhlciwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAgICAgCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9u
SUQsIHsgfSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ2xlYXJJbk1l
bW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIHsgfSwgc2hvdWxkR3JhbmRmYXRoZXIsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
Y2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgcHJvY2Vzcy0+c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShtX3Nlc3Npb25JRCwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShtX3Nlc3Npb25JRCwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVs
ZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTYxNCwyNCArMTUyMSwxMyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2lu
ZyhDb21wbGV0aW9uSGFuZAogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNz
aW5nKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVj
b3Jkc1Byb2Nlc3NpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVz
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5zdGF0aXN0
aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnN0YXRpc3RpY3NE
YXRhYmFzZUhhc0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFVSTCYg
dXJsLCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE2NDMsMjIgKzE1MzksMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9u
SGEKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRM
YXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
c2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNl
KGludCBkb21haW5JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHBy
b2Nlc3MtPmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKG1f
c2Vzc2lvbklELCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwm
IHVybCwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDEsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwyLCBT
ZWNvbmRzIGxhc3RTZWVuLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgU2Vjb25kcyBtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgYm9vbCBpc1ByZXZhbGVu
dCwgYm9vbCBpc1ZlcnlQcmV2YWxlbnQsIHVuc2lnbmVkIGRhdGFSZWNvcmRzUmVtb3ZlZCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY3MCwxMCAr
MTU1OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5n
KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHRvcEZyCiAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQ
cmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkubWVyZ2VTdGF0aXN0aWNG
b3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlckludGVy
YWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJl
dmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVk
U3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBoYWRVc2VySW50ZXJhY3Rp
b24sIGJvb2wgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgYm9vbCBpc1By
ZXZhbGVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTY4NSwxOCArMTU3MCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGly
ZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGhhZAogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmluc2VydEV4cGlyZWRTdGF0
aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0
YVJlbW92YWwsIGlzUHJldmFsZW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pbnNlcnRFeHBpcmVkU3RhdGlzdGlj
Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1v
dmFsLCBpc1ByZXZhbGVudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
KGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCht
X3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJl
U2Nhbm5lZChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTcwNCw4ICsxNTg1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChib29sIHZhbHVlLCBDb21wbGUK
ICAgICB1c2VFeHBsaWNpdElUUFN0YXRlKCk7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAg
ICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5u
aW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0
b3JhZ2VBY2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucyk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xNzE2LDcgKzE1OTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFs
bFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgd2ViUGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29s
KCkuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhtX3Nl
c3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIG5ldHdvcmtQcm9jZXNz
KCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogCkBAIC0xNzI0LDggKzE2MDQsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyBzZWNvbmRzLCBD
b21wbGV0aW9uSAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bv
b2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiht
X3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNl
Y29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzM5LDEwICsxNjE4LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgcHJvY2Vzcy0+bG9nVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmxvZ1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rp
b24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xNzU0LDEzICsxNjMwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aGFzSGFk
VXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuaGFzSGFkVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFz
ZU9uY2UoY29uc3QgVVJMJiBzdWJVcmwsIGNvbnN0IFVSTCYgdG9wVXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc3MiwxMyArMTY0Miw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9u
Y2UoY29uc3QgVVJMJiBzdWJVcmwsIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgICAgIHByb2Nlc3MtPmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhh
bmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWxhdGlvbnNoaXBPbmx5SW5E
YXRhYmFzZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3Vi
VXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJ
bnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTc5MiwxMCArMTY1Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1
cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xODA5LDEwICsxNjcwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJl
ZCwgQ28KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3MtPnNldEdyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgyMSwxMCArMTY3OSw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBwcm9jZXNzLT5zZXRVc2VJVFBEYXRhYmFzZShtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VXNlSVRQ
RGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29y
YXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZnJvbVVSTCwgY29uc3QgVVJMJiB0b1VSTCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgzMyw2MiAr
MTY4OCwzOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlu
a0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZgogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0Q3Jvc3NTaXRlTG9hZFdpdGhM
aW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvVVJMIH0s
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5n
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRo
TGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVj
b3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5r
RGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGVsZXRlQ29va2llc0ZvclRlc3Rpbmco
Y29uc3QgVVJMJiB1cmwsIGJvb2wgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5kZWxldGVDb29r
aWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVDb29raWVzRm9yVGVzdGluZyhtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5jbHVkZUh0dHBP
bmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0xvY2FsU3RvcmFnZShtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0xvY2FsU3Rv
cmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhh
c0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzSXNvbGF0ZWRTZXNzaW9u
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhib29s
IGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0xOTE5LDEwICsx
NzUwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlKFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWUKICAgICAgICAgICAgIHdlYlByb2Nlc3Mu
c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShibG9ja2luZ01vZGUsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNl
dFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lvbklELCBibG9ja2luZ01vZGUs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudEZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTMwLDEwICsxNzU4LDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmlj
dEVuZm9yY2UKICAgICBhdXRvIGZsYWcgPSBlbmFibGVkID8gV2ViQ29yZTo6U2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudEVuYWJsZWQ6OlllcyA6IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3Jj
ZW1lbnRFbmFibGVkOjpObzsKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3Jj
ZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZEVuYmxlU2FtZVNpdGVT
dHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZsYWcsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhi
b29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE5NDEsMjAgKzE3NjYsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBhdXRvIG1vZGUgPSBlbmFibGVkID8gV2ViQ29y
ZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tpZXMgOiBXZWJD
b3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6Tm9uZTsKIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZv
clRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUb1Nh
bWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5n
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhjb25z
dCBVUkwmIGZpcnN0UGFydHlVUkwsIGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NjYsOCArMTc4NSw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlI
b3N0Q05BTUVEb21haW5Gb3JUZXN0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURv
bWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZpcnN0UGFydHlVUkwuaG9zdCgpLnRvU3RyaW5n
KCksIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFydHlIb3N0Q05B
TUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJzdFBhcnR5VVJMLmhvc3QoKS50b1N0
cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcoY29uc3QgVVJM
JiBjbmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTk3OSwxOCArMTc5NywxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKAogCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpLnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRl
c3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN5bmNMb2NhbFN0
b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5jTG9jYWxT
dG9yYWdlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3lu
Y0xvY2FsU3RvcmFnZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMo
U2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xOTk4LDggKzE4MTEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENh
Y2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQwogI2lm
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1h
eEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENhY2hlTWF4QWdl
Q2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Vjb25kcyk7CiAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTIwMDksMjYgKzE4MjEsMTIgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhTZWNvbmRz
IHNlY29uZHMsIEMKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNhcEZv
clByZXZhbGVudFJlc291cmNlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5y
ZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
CiAjZW5kaWYKIH0KIAotYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjppc0Fzc29jaWF0ZWRQcm9jZXNz
UG9vbChXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8q
IHByb2Nlc3NQb29sRGF0YVN0b3JlID0gcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpKQot
ICAgICAgICByZXR1cm4gcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPT0gdGhpczsKLSAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgIHJldHVybiBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5oYXNTZXNzaW9uKG1fc2Vzc2lvbklE
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29s
Pj4gV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uc3QKIHsK
ICAgICBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IHByb2Nlc3NQb29sczsKQEAgLTIw
NDMsOSArMTg0MSw2IEBAIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0ZURh
dGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uCiAgICAgaWYgKHByb2Nlc3NQ
b29scy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgb25lIG9mIHRoZSBs
ZWdhY3kgZGF0YSBzdG9yZXMuCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQ
cm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmICghaXNBc3Nv
Y2lhdGVkUHJvY2Vzc1Bvb2woKnByb2Nlc3NQb29sKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQogICAgICAgICAgICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9jZXNzUG9vbCk7CiAgICAgICAg
ICAgICBpZiAocHJvY2Vzc1Bvb2xzLnNpemUoKSA9PSBsaW1pdCkKICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTIwODQsOCArMTg3OSw3IEBAIHN0YXRpYyBTdHJpbmcgY29tcHV0ZU1lZGlhS2V5
RmlsZShjb25zdCBTdHJpbmcmIG1lZGlhS2V5RGlyZWN0b3J5KQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDZXJ0
aWZpY2F0ZUluZm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7Ci0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZp
Y2F0ZUluZm8oKSwgaG9zdCksIDApOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChj
ZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKIH0KIAogVmVjdG9yPFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gV2Vic2l0ZURhdGFTdG9yZTo6bWVkaWFLZXlPcmln
aW5zKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSkKQEAgLTIxNDAsNiAr
MTkzNCwzMCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZU1lZGlhS2V5cyhjb25zdCBT
dHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksCiAgICAgfQogfQogCit2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBpZiAoIW1fbmV0
d29ya1Byb2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRl
cm1pbmF0ZSgpOworICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOworfQorCit2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0
aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcmVwYXJlVG9TdXNwZW5kKElzU3VzcGVuc2lvbkltbWlu
ZW50OjpObywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcoKQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHlGb3JUZXN0aW5nKCk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdv
cmtQcm9jZXNzRGlkUmVzdW1lKCkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcm9jZXNz
RGlkUmVzdW1lKCk7Cit9CisKIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoKSBjb25zdAogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJ
U1RJQ1MpCkBAIC0yMTY5LDE3ICsxOTg3LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgICAgICAKICAg
ICAgICAgcmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgCi0gICAgICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAg
cHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUp
KTsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpLCAw
KTsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAg
ICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHRydWUpLCBt
X3Nlc3Npb25JRCk7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNz
UG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpKTsKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpLCAwKTsKKyAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgIHByb2Nlc3NQ
b29sLT5zZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpT
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChmYWxzZSksIG1fc2Vzc2lvbklEKTsKLSAg
ICB9CiAKICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkID0gZmFsc2U7CiAjZWxz
ZQpAQCAtMjE5MSw4ICsyMDA3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soRnVuY3Rpb248dm9pZChjb25zdCBTdHJp
bmcmKT4mJiBjYWxsYmFjaykKIHsKICAgICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICAgICAgcHJvY2Vzc1Bv
b2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSk7CisgICAgICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQodHJ1ZSksIDApOwogICAgIH0KICAgICAKICAg
ICBtX3N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKQEAgLTIy
MTEsOCArMjAyNiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZShib29sIGVuYWJsZWQsIENvbXBsZXRpCiAKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CiAgICAg
VU5VU0VEX1BBUkFNKGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIyMjcsMjAgKzIwNDEsMTUgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJh
bChtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCisgICAgbmV0d29ya1Byb2Nlc3MoKS5p
c1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwor
I2VuZGlmCiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9u
RGVidWdNb2RlKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKIH0KIAog
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMjYyLDQ4ICsyMDcxLDE5
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzSW5X
ZWJQcm9jZXNzZXMoQ29tcGxldGlvbkhhbmRsCiB9CiAjZW5kaWYKIAotVmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4gV2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMoKSBjb25zdAotewotICAg
IHJldHVybiBjb3B5VG9WZWN0b3IobV9wZW5kaW5nQ29va2llcyk7Ci19Ci0KLXZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tp
ZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZUlmKFsmY29va2llXShhdXRvJiBwZW5k
aW5nQ29va2llKSB7Ci0gICAgICAgIHJldHVybiBwZW5kaW5nQ29va2llLmlzS2V5RXF1YWwoY29v
a2llKTsKLSAgICB9KTsKLSAgICBtX3BlbmRpbmdDb29raWVzLmFkZChjb29raWUpOwotfQotCi12
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6
Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmUoY29va2llKTsK
LX0KLSAgICAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcygpCi17
Ci0gICAgbV9wZW5kaW5nQ29va2llcy5jbGVhcigpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmZsdXNoQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvIHBy
b2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+Zmx1c2hDb29raWVzKHNlc3Npb25JRCgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCgpLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYm9vbCBhbGxvd3MpCiB7Ci0g
ICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJT
b2NrZXQoYWxsb3dzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xD
ZXJ0aWZpY2F0ZUZvcldlYlNvY2tldDo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlT
U0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChhbGxvd3MpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0OjpSZXBseSgpLCAwKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKCkKIHsK
LSAgICBmb3IgKGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bv
b2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5jbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Np
b25JRCgpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCgpKSwgMCk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6ZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5j
dGlvbikKQEAgLTIzMjksOCArMjEwOSw2IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdl
YnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMoKQogCiAgICAgcmVzb2x2ZURpcmVjdG9yaWVzSWZO
ZWNlc3NhcnkoKTsKIAotICAgIHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBwZW5kaW5nQ29v
a2llcygpOwotCiAgICAgYXV0byByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV9j
b25maWd1cmF0aW9uLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7CiAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlIYW5k
bGU7CiAgICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkK
QEAgLTI0MzUsNyArMjIxMywxNCBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRl
RGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVkID0gbV9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDsKICNlbmRpZgogICAgIHBsYXRmb3JtU2V0TmV0d29y
a1BhcmFtZXRlcnMocGFyYW1ldGVycyk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRl
VHJhY2tpbmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJt
aXNzaW9uKCk7CisjZW5kaWYKIAorI2lmIFVTRShTT1VQKQorICAgIG5ldHdvcmtQcm9jZXNzKCku
Y29va2llTWFuYWdlcigpLmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCgpLCBw
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFn
ZVBhdGgsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlVHlwZSk7CisjZW5kaWYKKyAgICAKICAgICByZXR1cm4gcGFyYW1ldGVyczsKIH0K
IApAQCAtMjQ2NSwxMCArMjI1MCw2IEBAIEFQSTo6SFRUUENvb2tpZVN0b3JlJiBXZWJzaXRlRGF0
YVN0b3JlOjpjb29raWVTdG9yZSgpCiAgICAgcmV0dXJuICptX2Nvb2tpZVN0b3JlOwogfQogCi12
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCkKLXsKLX0KLQog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZv
aWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFpc1BlcnNpc3RlbnQoKSkgewpAQCAt
MjQ3NiwyMyArMjI1NywxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFn
ZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRAogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlz
KS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMpIHsKLSAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWlscykpOwotICAgICAgICB9KTsKLSAg
ICAgICAgLy8gRklYTUU6IFN1cHBvcnQgZmV0Y2hpbmcgZnJvbSBtdWx0aXBsZSBwb29scy4KLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIEFTU0VSVCghY29tcGxldGlvbkhhbmRsZXIpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuZ2V0TG9jYWxTdG9yYWdlRGV0YWlscyhtX3Nlc3Npb25JRCwgW2Nv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBkZXRh
aWxzKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWlscykpOworICAg
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UXVvdGEoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+cmVzZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldFF1
b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgIVBM
QVRGT1JNKENPQ09BKQpAQCAtMjUxOCw3ICsyMjkxLDEyIEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9y
ZTo6aHR0cDNFbmFibGVkKCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9Ci0jZW5kaWYKKworYm9v
bCBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGlu
Zyhjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZiAvLyAhUExB
VEZPUk0oQ09DT0EpCiAKICNpZiAhVVNFKEdMSUIpCiBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkKQEAgLTI1MzAs
MzUgKzIzMDgsMTkgQEAgV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERldmlj
ZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiBvbGROYW1lLCBVUkwmJiBuZXdOYW1lLCBP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRk
U2Vzc2lvbigqdGhpcyk7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVuYW1lT3JpZ2lu
SW5XZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgZGF0YVR5cGVzLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuYWRkU2Vzc2lvbigqdGhpcyk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW5hbWVP
cmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlw
ZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShBUFBfQk9V
TkRfRE9NQUlOUykKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzQXBwQm91bmRTZXNzaW9uKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vz
c2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuaGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJBcHBC
b3VuZFNlc3Npb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5j
bGVhckFwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNU
b0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMjU4MCw3ICsyMzQyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3J3
YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGUKIAog
ICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhnbG9iYWxEZWZhdWx0RGF0YVN0b3JlKCkuZ2V0
KCksICphcHBCb3VuZERvbWFpbnMpOwogCi0gICAgZm9yIChhdXRvKiBzdG9yZSA6IG5vbkRlZmF1
bHREYXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAgZm9yIChhdXRvKiBzdG9yZSA6IGFsbERhdGFT
dG9yZXMoKS52YWx1ZXMoKSkKICAgICAgICAgcHJvcGFnYXRlQXBwQm91bmREb21haW5zKHN0b3Jl
LCAqYXBwQm91bmREb21haW5zKTsKIH0KIApAQCAtMjU4OCwxMCArMjM1MCw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKGNvbnN0IEhhc2hTZXQ8V2Vi
Q29yZTo6UmVnaXN0cmFiCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0QXBwQm91bmREb21haW5zRm9yUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogI2VuZGlmCiAKQEAgLTI1OTksMTYgKzIzNTgsMTQgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25z
dCBTdHJpbmcmIGJ1bmQKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bv
b2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5kbGVJ
ZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNz
KCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRl
bnRpZmllckluTmV0d29ya1Byb2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRp
ZmllcihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXgg
ZTFiNDBlZDI1ZDg2NWU0YzJiYzQ3MjQyM2NhYzZiZjQ1YmFhYzdkZC4uMzk0M2I1YTg2ZTYzMDFk
MWVmYTEyOTBlOTkyYmI3MGUwZTE3OGU3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaApAQCAtNzUsNiArNzUsNyBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOwogY2xhc3Mg
U2VjS2V5UHJveHlTdG9yZTsKIGNsYXNzIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOworY2xhc3Mg
TmV0d29ya1Byb2Nlc3NQcm94eTsKIGNsYXNzIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOwog
Y2xhc3MgV2ViQ2VydGlmaWNhdGVJbmZvOwogY2xhc3MgV2ViUGFnZVByb3h5OwpAQCAtMTA5LDcg
KzExMCwxMiBAQCBwdWJsaWM6CiAgICAgV2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURhdGFT
dG9yZUNvbmZpZ3VyYXRpb24+JiYsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB+V2Vic2l0ZURhdGFT
dG9yZSgpOwogCi0gICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nTm9uRGVmYXVs
dERhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CisgICAgc3RhdGljIHZvaWQg
Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0YVN0b3JlJik+
JiYpOworICAgIAorICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKCkgY29u
c3Q7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MoKTsKKworICAgIHN0
YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6
OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlzUGVyc2lzdGVudCgpIGNvbnN0IHsgcmV0dXJuICFt
X3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9CiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTExOSw2ICsxMjUsMTEgQEAgcHVi
bGljOgogICAgIAogICAgIGNvbnN0IFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIHByb2Nl
c3NlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc2VzOyB9CiAKKyAgICB2b2lkIHRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9T
dXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQg
c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworICAg
IHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7CisKICAgICBib29sIHJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZChib29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1Z01vZGUoKSBjb25zdDsKQEAgLTIzNSwxNyArMjQ2LDExIEBAIHB1YmxpYzoKIAogICAgIERl
dmljZUlkSGFzaFNhbHRTdG9yYWdlJiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSgpIHsgcmV0dXJu
IG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuZ2V0KCk7IH0KIAotICAgIFdlYlByb2Nlc3NQb29s
KiBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgYm9vbCBpc0Fz
c29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYpIGNvbnN0OwotCiAgICAgV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMgcGFyYW1ldGVycygpOwogCi0gICAgVmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXMoKSBjb25zdDsKLSAgICB2b2lkIGFkZFBlbmRpbmdDb29r
aWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCByZW1vdmVQZW5kaW5nQ29va2ll
KGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwotICAgIHZvaWQgY2xlYXJQZW5kaW5nQ29va2llcygp
OwogICAgIHZvaWQgZmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAg
ICAgdm9pZCBjbGVhckNhY2hlZENyZWRlbnRpYWxzKCk7CisgICAgc3RhdGljIFZlY3RvcjxXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKTsKIAogICAg
IHZvaWQgc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYm9vbCk7CiAKQEAg
LTI3Miw4ICsyNzcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNb2NrV2ViQXV0aGVudGljYXRp
b25Db25maWd1cmF0aW9uKFdlYkNvcmU6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRp
b24mJik7CiAjZW5kaWYKIAotICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKLQog
ICAgIGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKCkg
eyByZXR1cm4gbV9jb25maWd1cmF0aW9uLmdldCgpOyB9CiAKICAgICBXZWJzaXRlRGF0YVN0b3Jl
Q2xpZW50JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQpAQCAtMjgzLDYgKzI4
Niw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwm
JiwgVVJMJiYsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwogCisgICAgYm9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVz
dGluZyhjb25zdCBTdHJpbmcmKTsKKwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAg
ICAgV2ViRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyJiBkZXZpY2VP
cmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXIoKSB7IHJldHVybiBtX2RldmljZU9y
aWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcjsgfQogI2VuZGlmCkBAIC0zNTksNyAr
MzY0LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3Qg
U3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNl
KTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtl
eXNTdG9yYWdlRGlyZWN0b3J5LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
RGF0YT4mKTsKIAotICAgIHZvaWQgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAg
ICB2b2lkIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogCiAjaWYgRU5BQkxFKEFQUF9CT1VO
RF9ET01BSU5TKQogICAgIHN0YXRpYyBPcHRpb25hbDxIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluPj4gYXBwQm91bmREb21haW5zSWZJbml0aWFsaXplZCgpOwpAQCAtMzk3LDggKzQw
Miw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVu
YWJsZWQgeyB0cnVlIH07CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29va2llPiBt
X3BlbmRpbmdDb29raWVzOwotICAgIAogICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4g
bV9wcm9jZXNzZXM7CiAKICAgICBib29sIG1faXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQgeyBmYWxz
ZSB9OwpAQCAtNDE5LDYgKzQyMiw3IEBAIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPFdlYnNpdGVE
YXRhU3RvcmVDbGllbnQ+IG1fY2xpZW50OwogCiAgICAgUmVmUHRyPEFQSTo6SFRUUENvb2tpZVN0
b3JlPiBtX2Nvb2tpZVN0b3JlOworICAgIFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25l
dHdvcmtQcm9jZXNzOwogCiAjaWYgSEFWRShBUFBfU1NPKQogICAgIFVuaXF1ZVJlZjxTT0F1dGhv
cml6YXRpb25Db29yZGluYXRvcj4gbV9zb0F1dGhvcml6YXRpb25Db29yZGluYXRvcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURh
dGFTdG9yZVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291
cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKaW5kZXggMTJmOWNkODE5YjZkY2NhOGFjNTA5MmEz
MGRkOTNjNTNiOGVlOTM0Mi4uNWJhMzkwMGQyZGFmZjA1NmFiZDBjZGYwNTdhZTMyODU0ZWJmZWNm
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9X
ZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKQEAgLTM5LDggKzM5LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKFdlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzJgogICAgIGF1dG8mIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cyA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogICAgIG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gbV9wZXJz
aXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkOwogCi0gICAgaWYgKGF1dG8qIHByb2Nlc3NQ
b29sID0gcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tp
ZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
Y29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29v
a2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKKyAgICBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2luZ2xldG9uKCkuZ2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9zZXNzaW9uSUQs
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVu
YWJsZWQoYm9vbCBlbmFibGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2ds
aWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKaW5kZXggMGE4NGE3NTkwZDlhOTg1YmZjOTk2ODRh
NDg5NTEzNzRlNWIyOTQyOS4uMjdmMjNlYTA2NWRjNzVjZTRhODI3MGM1NzZlYTJhYTU1YWIwZGM4
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJv
eHlHTGliLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQ
cm94eUdMaWIuY3BwCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpwbGF0
Zm9ybUdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsCiAg
ICAgICAgIGlmICghZGF0YVN0b3JlKSB7CiAgICAgICAgICAgICAvLyBQcmV3YXJtZWQgcHJvY2Vz
c2VzIGRvbid0IGhhdmUgYSBXZWJzaXRlRGF0YVN0b3JlIHlldCwgc28gdXNlIHRoZSBwcmltYXJ5
IFdlYnNpdGVEYXRhU3RvcmUgZnJvbSB0aGUgV2ViUHJvY2Vzc1Bvb2wuCiAgICAgICAgICAgICAv
LyBUaGUgcHJvY2VzcyB3b24ndCBiZSB1c2VkIGlmIGN1cnJlbnQgV2Vic2l0ZURhdGFTdG9yZSBp
cyBkaWZmZXJlbnQgdGhhbiB0aGUgV2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBvbmUuCi0gICAgICAg
ICAgICBkYXRhU3RvcmUgPSBtX3Byb2Nlc3NQb29sLT53ZWJzaXRlRGF0YVN0b3JlKCk7CisgICAg
ICAgICAgICBkYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCku
cHRyKCk7CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoZGF0YVN0b3JlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291
cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94
eVNvdXAuY3BwCmluZGV4IDlmN2JlM2M5NDFiNmNkMGExYjk0Y2IxMzYwOThmM2EwNDFjZWZmOTku
LjA4OTI4ZmNkMzE2ZDg4ZjlkNTE1MDBlYzY4NGFkMWI2NGFmOGEzZjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlT
b3VwLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94
eS5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldl
YlByb2Nlc3NQb29sLmgiCiAKQEAgLTM0LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29v
a2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKQogewogICAgIG1fY29va2llUGVy
c2lzdGVudFN0b3JhZ2VNYXAuc2V0KHNlc3Npb25JRCwgc3RkOjptYWtlX3BhaXIoc3RvcmFnZVBh
dGgsIHN0b3JhZ2VUeXBlKSk7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1By
b2Nlc3MoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSk7CisgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBzdG9yYWdlUGF0aCwgc3RvcmFn
ZVR5cGUpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nJiBzdG9yYWdl
UGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSYgc3RvcmFnZVR5cGUpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29s
U291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291
cC5jcHAKaW5kZXggYmZiYmY5NjY0ZTQ4MzUzMDk3MDk3MTFkZmQ2YzEzNDE1NzMyYmRhYy4uMDc5
M2VkNTEzOTE1MjhkOWI0YjlmZGIwZjRhZDNjODk2MGZkYTUyNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcApAQCAtMzcsMzAg
KzM3LDI0IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0
Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycyYgcGFyYW1ldGVycykKIHsKLSAgICBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVy
cyYgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgc3VwcGxlbWVudDxXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKGRlZmF1bHRT
ZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5jb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQ
ZXJzaXN0ZW50U3RvcmFnZVR5cGUpOwotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAg
ICAgIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VF
bmFibGVkID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VF
bmFibGVkKCk7CisgICAgLy8gRklYTUU6IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3kg
c2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgorICAgIC8vIEZJWE1FOiBt
X2lnbm9yZVRMU0Vycm9ycyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUg
b3IgcmVtb3ZlZC4KKyAgICAvLyBGSVhNRTogbV9uZXR3b3JrUHJveHlTZXR0aW5ncyBzaG91bGQg
YmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCiAKLSAgICBwYXJhbWV0ZXJzLmNvb2tp
ZUFjY2VwdFBvbGljeSA9IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3k7Ci0gICAgcGFy
YW1ldGVycy5pZ25vcmVUTFNFcnJvcnMgPSBtX2lnbm9yZVRMU0Vycm9yczsKICAgICBwYXJhbWV0
ZXJzLmxhbmd1YWdlcyA9IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKTsKLSAgICBwYXJhbWV0ZXJz
LnByb3h5U2V0dGluZ3MgPSBtX25ldHdvcmtQcm94eVNldHRpbmdzOwogICAgIHBhcmFtZXRlcnMu
c2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSB0cnVlOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMpCiB7CiAgICAgbV9pZ25v
cmVUTFNFcnJvcnMgPSBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRJZ25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0SWdub3JlVExTRXJyb3JzKG1faWdub3JlVExTRXJyb3JzKSwgMCk7CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKGNvbnN0IFdlYkNvcmU6OlNvdXBO
ZXR3b3JrUHJveHlTZXR0aW5ncyYgc2V0dGluZ3MpCiB7CiAgICAgbV9uZXR3b3JrUHJveHlTZXR0
aW5ncyA9IHNldHRpbmdzOwotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25l
dHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1By
b3h5U2V0dGluZ3MobV9uZXR3b3JrUHJveHlTZXR0aW5ncyksIDApOworICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRO
ZXR3b3JrUHJveHlTZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxYmNi
ZThkZjYyNTk4NDMxOTA3ZGVmYjQzOWU5ZGJkZDkxMjM5MTQwLi5kZGFkNDhlYjc5YWZlYzQ2Mzg5
N2NiM2MyNWY1NGQwNTM1YmI2ZTI4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMjAtMDktMTkgIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBNb3ZlIE5ldHdvcmtQ
cm9jZXNzUHJveHkgb3duZXJzaGlwIGZyb20gV2ViUHJvY2Vzc1Bvb2wgdG8gV2Vic2l0ZURhdGFT
dG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2
MDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdD
b25uZWN0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbToKKyAg
ICAgICAgKHJ1blRlc3QpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbToKKyAgICAgICAgKFRFU1QpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW06CisgICAgICAgICgt
W0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQ
YW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6Cisg
ICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdKToK
KyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxd
KToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29u
c2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFk
anVzdENvbnRleHQpOgorCiAyMDIwLTA5LTE2ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbRmxhdHBha10gd2Via2l0LWJ3cmFwIGRyaXZlLWJ5IGNs
ZWFudXBzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3
b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlv
bi5tbQppbmRleCA5NzM4OWYwMWZmMmVlOTliNzgzYjBiNTIxMDgwNzRmMWE4MWI2OTgxLi4zM2Y0
NTRjNWNkNTliNDhhNzY5OGFhYjU2ZTYxMWNmNmYwOWM5ZjRmIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdD
b25uZWN0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdv
cmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NHcm91cFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktp
dC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZh
dGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTE0
Niw4ICsxNDcsOCBAQCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NSZWxhdW5jaE9uTGF1bmNo
RmFpbHVyZSkKIAogICAgIC8vIENvbnN0dWN0aW5nIGEgV2ViVmlldyBzdGFydHMgYSBuZXR3b3Jr
IHByb2Nlc3Mgc28gdGVybWluYXRlIHRoaXMgb25lLiBUaGUgcGFnZSBsb2FkIGJlbG93IHdpbGwg
dGhlbiByZXF1ZXN0IGEgbmV0d29yayBwcm9jZXNzIGFuZCB3ZQogICAgIC8vIG1ha2UgdGhpcyBu
ZXcgbmV0d29yayBwcm9jZXNzIGxhdW5jaCBjcmFzaCBvbiBzdGFydHVwLgotICAgIFtwcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIFtwcm9jZXNzUG9vbCBfbWFrZU5l
eHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nXTsKKyAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAg
ICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW01vbml0b3JXZWJDb250ZW50Q3Jhc2hOYXZpZ2F0
aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKICAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVs
ZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvRG93bmxvYWQubW0KaW5kZXggYjdlZDk5OTM5ZmQ1OWYyMjhhN2U4YmQ3NDk3
MTJmNTM2NjAxNTYxNi4uMTgxOTEzMWM5YTBmZWIzMGIxYTJmMGNmY2Q4N2JmMjA0NWViYjNmNCAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9h
ZC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2Fk
Lm1tCkBAIC04ODksOSArODg5LDkgQEAgdm9pZCBkb3dubG9hZEF0UmF0ZShkb3VibGUgZGVzaXJl
ZEticHMsIHVuc2lnbmVkIHNwZWVkTXVsdGlwbGllciwgQXBwUmV0dXJuc1RvRm8KICAgICByZWNl
aXZlZERhdGEgPSBmYWxzZTsKICAgICBVdGlsOjpydW4oJnJlY2VpdmVkRGF0YSk7CiAgICAgLy8g
U3RhcnQgdGhlIERvd25sb2FkTW9uaXRvcidzIHRpbWVyLgotICAgIFtbd2ViVmlldyBjb25maWd1
cmF0aW9uXS5wcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpZRVNdOworICAg
IFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBw
SXNCYWNrZ3JvdW5kOllFU107CiAgICAgaWYgKHJldHVyblRvRm9yZWdyb3VuZCA9PSBBcHBSZXR1
cm5zVG9Gb3JlZ3JvdW5kOjpZZXMpCi0gICAgICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5w
cm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpOT107CisgICAgICAgIFtbd2Vi
VmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBwSXNCYWNr
Z3JvdW5kOk5PXTsKICAgICBkaWRDYW5jZWwgPSBmYWxzZTsKICAgICBVdGlsOjpydW4oJmRpZENh
bmNlbCk7CiAgICAgdGVybWluYXRlU2VydmVyID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbQppbmRl
eCA1Y2Q3YWJkYTAxZDE5NzQ3ZGNlZDQ1YWJlZTk5ZWNiMWMxNGQ2MTYwLi5kNzdhNmZkOTg3OWU0
M2Y3MDExZGRhZjkyYzNhNzk3ZjNmYzEzNzM0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tCkBAIC0zMSw2
ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dL
V2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNp
bXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdl
YktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtODYsNyArODcsNyBAQCBURVNUKEluZGV4ZWRE
QiwgQ2hlY2twb2ludHNXQUxBdXRvbWF0aWNhbGx5KQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdD
b25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250
cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0
SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0
YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBSZXRhaW5QdHI8V0tXZWJW
aWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0
KCldKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JREJEZWxldGVSZWNvdmVyeS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KaW5kZXggYzhhZjFkMjQzYzRmZWI1OGFjOTg0ZGFm
MTRkODE1MzFhN2NjM2M3My4uYmJmMWExNTIxNWRjMWZkMjhkZmRkYjllMzQxYjY0ZjljMDA4ZjRj
NCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJE
ZWxldGVSZWNvdmVyeS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0IDxXZWJL
aXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50
Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0
aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5o
PgpAQCAtNTcsNyArNTgsNyBAQCBURVNUKEluZGV4ZWREQiwgRGVsZXRlUmVjb3ZlcnkpCiAgICAg
UmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJh
dGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRs
ZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAog
ICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0aGUgZGF0YWJh
c2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVS
TEZvclJlc291cmNlOkAiSURCRGVsZXRlUmVjb3ZlcnkiIHdpdGhFeHRlbnNpb246QCJzcWxpdGUz
IiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1Yy
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3Jh
ZGVUb1YyLm1tCmluZGV4IDk1Y2NhMGNlMjgxNmZmMWE2YTQ1NWFkMGJkMmM4YTRhYTRmMjdmZWQu
Ljg4YTUzZjYxZDlkOTgyNjU3Yjk2NWVmOGE2Y2ViYTc5MWVmZjE3NTUgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBn
cmFkZVRvVjIubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQ
b29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJh
dGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01OCw3ICs1
OSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleFVwZ3JhZGVUb1YyKQogICAgIFJldGFpblB0cjxX
S1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNv
bnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5h
bWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5
IHRoZSBpbmNvbnNpc3RlbnQgZGF0YWJhc2UgZmlsZXMgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9y
eQogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJj
ZTpAIkluZGV4VXBncmFkZSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpA
IlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9V
cGdyYWRlVG9WMi5tbQppbmRleCBmZmE1YTc4NzhhNDczMmI4ZWMyNDVjOTA1M2ZkMTdlZTU5NTZm
YTNkLi40MDNlMGZmYTgyMTIzNDUxYzQ2NmZlZWNjMzI0ZjljNmU3NjFkNDNkIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5m
b1VwZ3JhZGVUb1YyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNp
bXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
VXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0
b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0
L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJT
dHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJREJPYmplY3RT
dG9yZUluZm9VcGdyYWRlVG9WMikKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlv
bj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9j
XSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRk
U2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsK
IAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSBkYXRhYmFzZSBmaWxlcyB3aXRo
IG9sZCBPYmplY3RTdG9yZUluZm8gc2NoZW1hIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkuCiAg
ICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAi
SURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRp
cmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tp
bGwubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRh
dGFiYXNlUHJvY2Vzc0tpbGwubW0KaW5kZXggNjg3NDUyOWViYmYzNzg1MThkOTNlMGEwODIxZjYz
MDEyY2ZhNmQ1Zi4uNzMwNzdlY2RmZDM2NWI1MjkwNTNkNDdjYmEyYTE0ZWQwNTFlZDZlYSAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJE
YXRhYmFzZVByb2Nlc3NLaWxsLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQpAQCAtMzEsNiArMzEsNyBA
QAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVE
YXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxX
ZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CkBAIC05Miw3ICs5Myw3IEBAIFRFU1QoSW5kZXhlZERCLCBEYXRhYmFzZVByb2Nlc3NL
aWxsKQogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVz
c2FnZSk7CiAgICAgICAgIGlmICgha2lsbGVkREJQcm9jZXNzICYmIG9wZW5SZXF1ZXN0VXBncmFk
ZU5lZWRlZCkgewogICAgICAgICAgICAga2lsbGVkREJQcm9jZXNzID0gdHJ1ZTsKLSAgICAgICAg
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CisgICAgICAgICAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3Jl
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5h
bWUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZp
bGVOYW1lLm1tCmluZGV4IDExZjg3ZjgwMzRkMmIxYjU1ZDcyMGRlYjc2NWEzMTY4MjEyMGQ3NzMu
LmE5OGJmMzgyNWJiMWVkNmQ3NTljMDhkNDUzM2FkY2I3ZmYzOTVmZDUgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxl
TmFtZS5tbQpAQCAtNDksNyArNDksNyBAQCBzdGF0aWMgUmV0YWluUHRyPFdLU2NyaXB0TWVzc2Fn
ZT4gbGFzdFNjcmlwdE1lc3NhZ2U7CiAKIEBlbmQKIAotc3RhdGljIHZvaWQgcnVuVGVzdCgpCitz
dGF0aWMgdm9pZCBydW5UZXN0KGJvb2wgb2xkRmlsZVNob3VsZEV4aXN0ID0gdHJ1ZSkKIHsKICAg
ICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbSW5kZXhlZERCRmlsZU5hbWVNZXNzYWdlSGFuZGxl
ciBhbGxvY10gaW5pdF0pOwogICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dl
YlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CkBAIC04Nyw3ICs4Nyw3IEBAIHN0YXRp
YyB2b2lkIHJ1blRlc3QoKQogICAgIE5TVVJMICpvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJM
ID0gW29sZFZlcnNpb25EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OiBA
ImZpbGVfXzAiXTsKICAgICBOU1VSTCAqbmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCA9IFtu
ZXdWZXJzaW9uRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDogQCJmaWxl
X18wIl07CiAgICAgTlNVUkwgKm9sZFZlcnNpb25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTCA9
IFtvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVu
dDp1bnVzZWREYXRhYmFzZU5hbWVdOwotICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBk
ZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpvbGRWZXJzaW9uVW51c2VkRGF0YWJhc2VE
aXJlY3RvcnlVUkwucGF0aF0pOworICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZh
dWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpvbGRWZXJzaW9uVW51c2VkRGF0YWJhc2VEaXJl
Y3RvcnlVUkwucGF0aF0gPT0gb2xkRmlsZVNob3VsZEV4aXN0KTsKICAgICAKICAgICAvLyBGb3Ig
ZGF0YWJhc2UgdGhhdCBpcyBvcGVuZWQgYWZ0ZXIgdXBncmFkZSwgaXRzIGZpbGUgc2hvdWxkIG9u
bHkgYmUgaW4gdjEuCiAgICAgTlNVUkwgKm9sZFZlcnNpb25FeGlzdGluZ0RhdGFiYXNlRGlyZWN0
b3J5VVJMID0gW29sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQYXRo
Q29tcG9uZW50OiBleGlzdGluZ0RhdGFiYXNlTmFtZV07CkBAIC0xNTQsNyArMTU0LDcgQEAgc3Rh
dGljIHZvaWQgY3JlYXRlRGlyZWN0b3JpZXMoU3RyaW5nIHRlc3ROYW1lKQogVEVTVChJbmRleGVk
REIsIEluZGV4ZWREQkZpbGVOYW1lKQogewogICAgIGNyZWF0ZURpcmVjdG9yaWVzKCJub25lIik7
Ci0gICAgcnVuVGVzdCgpOworICAgIHJ1blRlc3QoZmFsc2UpOwogfQogCiBURVNUKEluZGV4ZWRE
QiwgSW5kZXhlZERCRmlsZU5hbWVWMCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0KaW5kZXgg
N2Y2MjY0NWQ5OTYwZWRlOTYwYzAwMWMyNzJiNjUwMzkzOTAxMTYzMi4uNmY2N2RjMjdlZGMzZDI3
NDViMTcwZTQ4MmJjZDkwZTg0OTRjYjk1YSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0KKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0K
QEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxl
clByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktp
dC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQu
aD4KICNpbXBvcnQgPHd0Zi9EZXF1ZS5oPgpAQCAtNjksNyArNzAsNyBAQCBURVNUKEluZGV4ZWRE
QiwgSW5kZXhlZERCTXVsdGlQcm9jZXNzKQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1
cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24g
YWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVy
XSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxl
ciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3Jl
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3
ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsK
IApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eGVkREJQZXJzaXN0ZW5jZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KaW5kZXggYjMyY2U0YTVmNzM4NjNhZWRkY2I5MTkw
YjViNDM3MGUzNzQ0M2I1ZS4uZDYyMjAzMjJlNDc4ZDFkYWM3OGYwNjk2N2MzYjY0M2JmZDYyZjli
ZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eGVkREJQZXJzaXN0ZW5jZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCkBAIC03OCw3ICs3OCw3IEBAIFRFU1QoSW5k
ZXhlZERCLCBJbmRleGVkREJQZXJzaXN0ZW5jZSkKICAgICB3ZWJWaWV3ID0gbmlsOwogCiAgICAg
Ly8gVGVybWluYXRlIHRoZSBuZXR3b3JrIHByb2Nlc3MKLSAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAog
ICAgIC8vIE1ha2UgYSBuZXcgd2ViIHZpZXcgdG8gZmluaXNoIHRoZSB0ZXN0CiAgICAgd2ViVmll
dyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CkBAIC0y
NjgsNyArMjY4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlRoaXJkUGFydHlGcmFtZUhh
c0FjY2VzcykKIAogICAgIHdlYlZpZXcgPSBuaWw7CiAgICAgc2Vjb25kV2ViVmlldyA9IG5pbDsK
LSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIFRoaXJkLXBhcnR5IElEQiBzdG9yYWdlIGlz
IHN0b3JlZCBpbiB0aGUgbWVtb3J5IG9mIG5ldHdvcmsgcHJvY2Vzcy4KICAgICBhdXRvIHRoaXJk
V2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7
CkBAIC0zODUsNyArMzg1LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlRoaXJkUGFydHlX
b3JrZXJIYXNBY2Nlc3MpCiAKICAgICB3ZWJWaWV3ID0gbmlsOwogICAgIHNlY29uZFdlYlZpZXcg
PSBuaWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3Jl
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHRoaXJkV2ViVmlldyA9IGFk
b3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4
MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgbG9hZFRl
c3RQYWdlSW5XZWJWaWV3KHRoaXJkV2ViVmlldy5nZXQoKSwgQCJkYXRhYmFzZSBpcyBjcmVhdGVk
Iik7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCmluZGV4IDUzNjU0MWUzYjBlNWNkYTNhM2I1
NTFjMWU4MWU5NjNmNTkyYWViMmYuLmU3Yjk5MjI4Y2U4NzZlNDQ3ZTY0NzgyZWY5ZDg3ZjI1YWRj
OWI5ZmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCkBAIC05NSw3ICs5NSw3IEBAIFRF
U1QoSW5kZXhlZERCLCBJbmRleGVkREJUZW1wRmlsZVNpemUpCiAKICAgICAvLyBUZXJtaW5hdGUg
bmV0d29yayBwcm9jZXNzIHRvIGtlZXAgV0FMIG9uIGRpc2suCiAgICAgd2ViVmlldyA9IG5pbDsK
LSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBk
ZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDp3YWxGaWxlUGF0aC5nZXQoKS5wYXRoXSk7
CiAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gZmlsZUF0dHJpYnV0ZXMgPSBbW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdIGF0dHJpYnV0ZXNPZkl0ZW1BdFBhdGg6d2FsRmlsZVBhdGgu
Z2V0KCkucGF0aCBlcnJvcjpuaWxdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KaW5k
ZXggNDEzM2VlN2IzZGFlNDNlYzIwNDljZmZjMDYzYzBlNDI5YzE3YzVlZi4uNWY3OTE5MDk0M2M3
NzFlOWQ5ZTQ0MmEwZGEyNjZmZjlhMDNiYTJmMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3Rl
bmNlLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENv
bnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlv
blByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYnBhZ2VQcmVmZXJlbmNlc1ByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTEwOSw3
ICsxMTAsNyBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlUHJvY2Vzc0NyYXNoZXMpCiAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAg
IEVYUEVDVF9XS19TVFJFUShAInNlc3Npb246c3RvcmFnZSIsIFtsYXN0U2NyaXB0TWVzc2FnZSBi
b2R5XSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3Rv
cmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2Fn
ZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRN
ZXNzYWdlKTsKQEAgLTE2Miw3ICsxNjMsNyBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdl
UHJvY2Vzc1N1c3BlbmRzKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRT
Y3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJ2YWx1ZSIsIFtsYXN0U2NyaXB0
TWVzc2FnZSBib2R5XSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX3NlbmROZXR3b3JrUHJv
Y2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsK
IAogICAgIHJlYWR5VG9Db250aW51ZSA9IGZhbHNlOwogICAgIFt3ZWJWaWV3MSBldmFsdWF0ZUph
dmFTY3JpcHQ6QCJ3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2tleScsICduZXdWYWx1ZScp
IiBjb21wbGV0aW9uSGFuZGxlcjpeKGlkLCBOU0Vycm9yICopIHsKQEAgLTE3Nyw3ICsxNzgsNyBA
QCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlUHJvY2Vzc1N1c3BlbmRzKQogICAgIH1dOwog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0NvbnRpbnVlKTsKICAgICAKLSAg
ICBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNz
RGlkUmVzdW1lXTsKIAogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwogICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3Mu
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNz
Lm1tCmluZGV4IGU2MGY4ODAyNWQwOTM3ODlmNjk1NjBkOWI5MmIyODJmMDcxMzBhOGQuLjBlMjFm
OTA5NTAwMTRmNmM0OTBiMGViOGU0NjFlYzRiYTg1MGJiODEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQpAQCAt
MjgsNyArMjgsNyBAQAogI2ltcG9ydCAiSFRUUFNlcnZlci5oIgogI2ltcG9ydCAiVGVzdFdLV2Vi
Vmlldy5oIgogI2ltcG9ydCAiVXRpbGl0aWVzLmgiCi0jaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNz
UG9vbFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRl
Lmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4K
ICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KQEAgLTM3LDE0ICszNywxNCBAQCBURVNUKFdlYktpdCwg
TmV0d29ya1Byb2Nlc3NFbnRpdGxlbWVudHMpCiB7CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4
MDAsIDYwMCkgY29uZmlndXJhdGlvbjpbW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBp
bml0XSBhdXRvcmVsZWFzZV1dKTsKICAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQ
YWdlTmFtZWQ6QCJzaW1wbGUiXTsKLSAgICBXS1Byb2Nlc3NQb29sICpwb29sID0gW3dlYlZpZXcg
Y29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2w7Ci0gICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9IFtw
b29sIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAImNvbS5hcHBsZS5y
b290bGVzcy5zdG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94Il07CisgICAgV0tXZWJzaXRl
RGF0YVN0b3JlICpzdG9yZSA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3Rv
cmU7CisgICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9IFtzdG9yZSBfbmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Muc3RvcmFnZS5XZWJLaXRO
ZXR3b3JraW5nU2FuZGJveCJdOwogI2lmIFBMQVRGT1JNKE1BQykgJiYgVVNFKEFQUExFX0lOVEVS
TkFMX1NESykKICAgICBFWFBFQ1RfVFJVRShoYXNFbnRpdGxlbWVudCk7CiAjZWxzZQogICAgIEVY
UEVDVF9GQUxTRShoYXNFbnRpdGxlbWVudCk7CiAjZW5kaWYKLSAgICBFWFBFQ1RfRkFMU0UoW3Bv
b2wgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAidGVzdCBmYWlsdXJl
IGNhc2UiXSk7CisgICAgRVhQRUNUX0ZBTFNFKFtzdG9yZSBfbmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJdKTsKIH0KIAogVEVTVChXZWJL
aXQsIEhUVFBSZWZlcmVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFz
aE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KaW5kZXggNjA5OGU4ZGFkMjUyZTU5ZWM0OTEyNTBi
NDIxNmQzY2QwOTM2ZThmNy4uMmY4YTJlMzNmZTg3MDNiYWIyZDhlMDUxMDgzMmJlY2Q5ZDQ4OTM0
YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3
b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0
ZW50RGF0YVN0b3JlLm1tCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrUmVjb3Zl
cnlBZnRlckNyYXNoKFdLV2Vic2l0ZURhdGFTdG9yZSAqZGF0YVN0b3JlKQogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwogCi0gICAgW1t3ZWJW
aWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0
IHJlcXVlc3RXaXRoVVJMOnNpbXBsZTJdXTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmUpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KaW5kZXggOTVkYzlkOThk
ZjEzYjA3MDVlMDgxN2QwNTg3MjY1MTIwYzE4OGQyMy4uZGYzMjBkNjRkYWRiZGQxZWUyODNmODY1
YzE0NDIzZjNhYzU1NjRiZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCkBAIC01
Mzg1LDcgKzUzODUsNyBAQCBURVNUKFByb2Nlc3NTd2FwLCBVc2VQcmV3YXJtZWRQcm9jZXNzQWZ0
ZXJUZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNzKQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MiA9IGFkb3B0TlMo
W1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYw
MCkgY29uZmlndXJhdGlvbjp3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIFt3ZWJW
aWV3MiBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLm1tCmluZGV4IDBlMTBjMzRlZWM4MmM2ZjY1OTJiYjdjNDI3NGQwZTQ1NWVh
ZjExZTguLmEzYWJhMjMxYTkzYjNkNWYwMGExOTNjNDdjMjc2Nzg2NGIzNTA1NWIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3MubW0KQEAgLTcxOSw3ICs3MTksNyBAQCBURVNUKFJlc291cmNl
TG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jZXNzUmVzdGFydCkKIAogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJv
Y2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5n
ZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBh
dXRvIHdlYlZpZXcyID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0
KCldKTsKIApAQCAtNzUyLDcgKzc1Miw3IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywg
TmV0d29ya1Byb2Nlc3NSZXN0YXJ0KQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1
bkxvb3AoMSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRh
U3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzMgPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkBAIC0xNTU4
LDEwICsxNTU4LDggQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBNaWdyYXRlRGF0YUZy
b21NaXNzaW5nVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFNhbWVTaXQKIAogVEVTVChSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLCBDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sKQogewor
ICAgIE5TVVJMICppdHBSb290VVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNUZW1wb3Jh
cnlEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJDYW5BY2Nlc3NE
YXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sVGVzdCJdIGlzRGlyZWN0b3J5OllFU107CiAgICAg
YXV0byBkZWZhdWx0RmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07
Ci0gICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKmRhdGFTdG9yZUNvbmZpZ3Vy
YXRpb24gPSBbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVh
c2VdOwotICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10g
X2luaXRXaXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFz
ZV07Ci0gICAgTlNVUkwgKml0cFJvb3RVUkwgPSBbW2RhdGFTdG9yZSBfY29uZmlndXJhdGlvbl0g
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnldOwogICAgIE5TVVJMICpmaWxlVVJMID0g
W2l0cFJvb3RVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAib2JzZXJ2YXRpb25zLmRi
Il07CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciByZW1vdmVJdGVtQXRQYXRoOml0cFJvb3RVUkwu
cGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVDVF9GQUxTRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZp
bGVFeGlzdHNBdFBhdGg6aXRwUm9vdFVSTC5wYXRoXSk7CkBAIC0xNTcyLDYgKzE1NzAsMTAgQEAg
VEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1By
b2Nlc3NQb29sKQogICAgIEVYUEVDVF9UUlVFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0
c0F0UGF0aDpuZXdGaWxlVVJMLnBhdGhdKTsKICAgICBbZGVmYXVsdEZpbGVNYW5hZ2VyIGNvcHlJ
dGVtQXRQYXRoOm5ld0ZpbGVVUkwucGF0aCB0b1BhdGg6ZmlsZVVSTC5wYXRoIGVycm9yOm5pbF07
CiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOmZp
bGVVUkwucGF0aF0pOworCisgICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKmRh
dGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9u
IG5ld10gYXV0b3JlbGVhc2VdOworICAgIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBpdHBSb290VVJMOworICAgIGF1dG8gKmRhdGFTdG9y
ZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpk
YXRhU3RvcmVDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CiAgICAgW2RhdGFTdG9yZSBfc2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKIAogICAgIHN0YXRpYyBib29sIGRv
bmVGbGFnID0gZmFsc2U7CkBAIC0xNjMzLDEyICsxNjM1LDEyIEBAIFRFU1QoUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcywgU3RvcmVTdXNwZW5zaW9uKQogICAgIFt3ZWJWaWV3MiBfdGVzdF93YWl0Rm9y
RGlkRmluaXNoTmF2aWdhdGlvbl07CiAKICAgICBkb25lRmxhZyA9IGZhbHNlOwotICAgIFtzaGFy
ZWRQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeeworICAg
IFtkYXRhU3RvcmUxIF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOl57CiAgICAg
ICAgIGRvbmVGbGFnID0gdHJ1ZTsKICAgICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmVGbGFnKTsKIAotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lXTsKKyAgICBbZGF0YVN0b3JlMSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVz
dW1lXTsKIH0KIAogQGludGVyZmFjZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2NoZW1lSGFuZGxl
ciA6IE5TT2JqZWN0IDxXS1VSTFNjaGVtZUhhbmRsZXI+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCmlu
ZGV4IDM0YTRmNWM1MzhiOWIwZTlmY2IwNTA3MmIxNzAyODhlOWU0ZTlmOGYuLjJmOGUzNGRiYTZk
YTQ3MjM1NjU1ZmYwZGIyYWRjYTFiZjhjNTY3MjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCkBA
IC01NTgsNyArNTU4LDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgVXNlckFnZW50T3ZlcnJpZGUp
CiAKICAgICBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24g
YWxsb2NdIGluaXRdKTsKIAotICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1NXVXNlckFn
ZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNzYWdlOkAiTWVzc2Fn
ZSBmcm9tIHdvcmtlcjogQmFyIEN1c3RvbSBVc2VyQWdlbnQiXSk7CisgICAgbWVzc2FnZUhhbmRs
ZXIgPSBhZG9wdE5TKFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhF
eHBlY3RlZE1lc3NhZ2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBGb28gQ3VzdG9tIFVzZXJBZ2Vu
dCJdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3Jp
cHRNZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAic3ciXTsKIAogICAg
IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFr
ZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0p
OwpAQCAtNjMzLDggKzYzMyw2IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIENhY2hlU3RvcmFnZVJl
c3RvcmVGcm9tRGlzaykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAg
IGRvbmUgPSBmYWxzZTsKIAotICAgIFtXS1dlYnNpdGVEYXRhU3RvcmUgX2RlbGV0ZURlZmF1bHRE
YXRhU3RvcmVGb3JUZXN0aW5nXTsKLQogICAgIFNlcnZpY2VXb3JrZXJUQ1BTZXJ2ZXIgc2VydmVy
KHsKICAgICAgICAgeyAidGV4dC9odG1sIiwgbWFpbkNhY2hlU3RvcmFnZUJ5dGVzIH0KICAgICB9
LCB7CkBAIC05ODIsNiArOTgwLDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU2VydmljZVdvcmtl
clByb2Nlc3NDcmVhdGlvbikKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9u
PiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2Nd
IGluaXRdKTsKICAgICBzZXRDb25maWd1cmF0aW9uSW5qZWN0ZWRCdW5kbGVQYXRoKGNvbmZpZ3Vy
YXRpb24uZ2V0KCkpOworICAgIFJldGFpblB0cjxXS1Byb2Nlc3NQb29sPiBvcmlnaW5hbFByb2Nl
c3NQb29sID0gY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbDsKIAogICAgIGRvbmUgPSBm
YWxzZTsKIApAQCAtMTAzNSw3ICsxMDM0LDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU2Vydmlj
ZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKICAgICBkb25lID0gZmFsc2U7CiAKICAgICAvLyBNYWtl
IHN1cmUgdGhhdCBsb2FkaW5nIHRoZSBzaW1wbGUgcGFnZSBkaWQgbm90IHN0YXJ0IHRoZSBzZXJ2
aWNlIHdvcmtlciBwcm9jZXNzLgotICAgIEVYUEVDVF9FUSgwdSwgd2ViVmlldy5nZXQoKS5jb25m
aWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKKyAgICBF
WFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fc2Vy
dmljZVdvcmtlclByb2Nlc3NDb3VudCk7CiAKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25m
aWd1cmF0aW9uOm5ld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBFWFBFQ1RfRVEoMnUsIHdl
YlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fd2ViUHJvY2Vzc0NvdW50SWdu
b3JpbmdQcmV3YXJtZWQpOwpAQCAtMTA0Myw5ICsxMDQyLDggQEAgVEVTVChTZXJ2aWNlV29ya2Vy
cywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKICAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IGxvYWRpbmcgdGhpcyBwYWdlIGRpZCBzdGFydCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vzcy4K
ICAgICBFWFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9v
bC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7Ci0KKyAgICBFWFBFQ1RfRVEoMXUsIG9yaWdp
bmFsUHJvY2Vzc1Bvb2wuZ2V0KCkuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwogICAgIFtb
Y29uZmlndXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSByZW1vdmVEYXRhT2ZUeXBlczpbV0tXZWJz
aXRlRGF0YVN0b3JlIGFsbFdlYnNpdGVEYXRhVHlwZXNdIG1vZGlmaWVkU2luY2U6W05TRGF0ZSBk
aXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XigpIHsKICAgICAgICAgZG9uZSA9IHRydWU7
CiAgICAgfV07CkBAIC0xNjE4LDIxICsxNjE2LDM1IEBAIHN0YXRpYyBzaXplX3QgbGF1bmNoU2Vy
dmljZVdvcmtlclByb2Nlc3MoYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBi
CiAgICAgcmV0dXJuIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fd2Vi
UHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3YXJtZWQ7CiB9CiAKLVRFU1QoU2VydmljZVdvcmtlcnMs
IE91dE9mQW5kSW5Qcm9jZXNzU2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMsIE91
dE9mUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCiB7CiAgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVl
OwogCiAgICAgRVhQRUNUX0VRKDF1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2VzcyghdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgIWZpcnN0TG9hZEFib3V0QmxhbmspKTsKK30KKwor
VEVTVChTZXJ2aWNlV29ya2VycywgSW5Qcm9jZXNzU2VydmljZVdvcmtlcikKK3sKKyAgICBib29s
IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOworICAgIGJvb2wgZmlyc3RM
b2FkQWJvdXRCbGFuayA9IHRydWU7CisKICAgICBFWFBFQ1RfRVEoMnUsIGxhdW5jaFNlcnZpY2VX
b3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsICFmaXJzdExvYWRB
Ym91dEJsYW5rKSk7CiB9CiAKLVRFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5rQmVm
b3JlTmF2aWdhdGluZ1Rocm91Z2hTZXJ2aWNlV29ya2VyKQorVEVTVChTZXJ2aWNlV29ya2Vycywg
TG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaE91dE9mUHJvY2Vzc1NlcnZpY2VX
b3JrZXIpCiB7CiAgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1
ZTsKICAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOwogCiAgICAgRVhQRUNUX0VR
KDF1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2VzcyghdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzcywgZmlyc3RMb2FkQWJvdXRCbGFuaykpOworfQorCitURVNUKFNlcnZpY2VXb3JrZXJz
LCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoSW5Qcm9jZXNzU2VydmljZVdv
cmtlcikKK3sKKyAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVl
OworICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CisKICAgICBFWFBFQ1RfRVEo
MnUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MsIGZpcnN0TG9hZEFib3V0QmxhbmspKTsKIH0KIApAQCAtMTk0NCwxMSArMTk1NiwxMSBA
QCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTdXNwZW5kTmV0d29ya1Byb2Nlc3MpCiAKICAgICBFWFBF
Q1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6
c3dEQlBhdGgucGF0aF0pOwogCi0gICAgWyB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJv
Y2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAg
W3dlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29y
a1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0Zp
bGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnN3REJQYXRoLnBhdGhd
KTsKIAotICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF9zZW5k
TmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFt3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRp
b24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAg
IFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnNlcnZlci5yZXF1ZXN0KCldOwogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZG9uZSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQppbmRleCBhMzVmMDUzNTBh
YWI0YjQyZjM2YzQ2YWVjZGVlZWU2Y2U1NDRlZjg2Li4zMzc2MDkyYTE5NWI1MTJkYTY3YzQ5NmU0
NTIxN2I5MTRmZTJhNTc5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KQEAgLTQ3OSw4ICs0NzksNiBA
QCBzdGF0aWMgYm9vbCBmaW5pc2hlZDsKIH0KIEBlbmQKIAotLy8gRklYTUU6IG9uIGlPUywgVUkg
cHJvY2VzcyBzaG91bGQgYmUgdXNpbmcgdGhlIHNhbWUgY29va2llIGZpbGUgYXMgdGhlIG5ldHdv
cmsgcHJvY2VzcyBmb3IgZGVmYXVsdCBzZXNzaW9uLgotI2lmIFBMQVRGT1JNKE1BQykKIGVudW0g
Y2xhc3MgU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgeyBObywgWWVzIH07CiB2b2lkIHJ1
bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQ
cmV3YXJtaW5nIHNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nKQogewpAQCAtNTg5LDIwICs1
ODcsNjYgQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQb29sV2l0aFBy
ZXdhcm1pbmcpCiAgICAgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hv
dWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmc6Olllcyk7CiB9CiAKLSNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCi0KIEBpbnRlcmZhY2UgQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSA6IE5TT2Jq
ZWN0IDxXS1VJRGVsZWdhdGU+CistIChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTDsKKy0gKE5T
U3RyaW5nICopd2FpdEZvck1lc3NhZ2U7CiBAZW5kCiAKLUBpbXBsZW1lbnRhdGlvbiBDaGVja1Nl
c3Npb25Db29raWVVSURlbGVnYXRlCitAaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2ll
VUlEZWxlZ2F0ZSB7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfbWVzc2FnZTsKK30KKwogLSAo
dm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVs
V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1l
SW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9u
SGFuZGxlcgogewotICAgIEVYUEVDVF9TVFJFUSgiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFs
dWUiLCBtZXNzYWdlLlVURjhTdHJpbmcpOworICAgIF9tZXNzYWdlID0gbWVzc2FnZTsKICAgICBm
aW5pc2hlZCA9IHRydWU7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KKworLSAoTlNTdHJp
bmcgKil3YWl0Rm9yTWVzc2FnZQoreworICAgIHdoaWxlICghX21lc3NhZ2UpCisgICAgICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgcmV0dXJuIF9tZXNzYWdlLmF1
dG9yZWxlYXNlKCk7Cit9CisKKy0gKE5TU3RyaW5nICopYWxlcnRDb29raWVIVE1MCit7CisgICAg
cmV0dXJuIEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycp
OyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0g
PSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2lu
KCc7ICcpKTs8L3NjcmlwdD4iOworfQorCiBAZW5kCiAKK1RFU1QoV2ViS2l0LCBXS0hUVFBDb29r
aWVTdG9yZU11bHRpcGxlVmlld3MpCit7CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzEgPSBb
W1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcxIHN5bmNocm9u
b3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IG5ldHdvcmsgcHJvY2VzcyJdOworCisgICAgTlNI
VFRQQ29va2llICpzZXNzaW9uQ29va2llID0gW05TSFRUUENvb2tpZSBjb29raWVXaXRoUHJvcGVy
dGllczpAeworICAgICAgICBOU0hUVFBDb29raWVQYXRoOiBAIi8iLAorICAgICAgICBOU0hUVFBD
b29raWVOYW1lOiBAIlNlc3Npb25Db29raWVOYW1lIiwKKyAgICAgICAgTlNIVFRQQ29va2llVmFs
dWU6IEAiQ29va2llVmFsdWUiLAorICAgICAgICBOU0hUVFBDb29raWVEb21haW46IEAiMTI3LjAu
MC4xIiwKKyAgICB9XTsKKworICAgIF9fYmxvY2sgYm9vbCBzZXRDb29raWVEb25lID0gZmFsc2U7
CisgICAgW3dlYlZpZXcxLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZS5odHRwQ29va2ll
U3RvcmUgc2V0Q29va2llOnNlc3Npb25Db29raWUgY29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAg
ICAgc2V0Q29va2llRG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZzZXRDb29raWVEb25lKTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtD
aGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIG5ld10pOworICAgIFt3ZWJWaWV3MSBzZXRVSURl
bGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3MSBsb2FkSFRNTFN0cmluZzpb
ZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAi
aHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRG
b3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CisKKyAgICBUZXN0
V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtbVGVzdFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNlXTsK
KyAgICBbd2ViVmlldzIgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZp
ZXcyIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05T
VVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19T
VFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2ll
VmFsdWUiKTsKK30KKwogVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQb29s
RXBoZW1lcmFsU2Vzc2lvbikKIHsKICAgICBSZXRhaW5QdHI8V0tXZWJzaXRlRGF0YVN0b3JlPiBl
cGhlbWVyYWxTdG9yZVdpdGhDb29raWVzID0gW1dLV2Vic2l0ZURhdGFTdG9yZSBub25QZXJzaXN0
ZW50RGF0YVN0b3JlXTsKQEAgLTYyNyw5ICs2NzEsOCBAQCBURVNUKFdLSFRUUENvb2tpZVN0b3Jl
LCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQogICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZmluaXNoZWQpOwogICAgIGZpbmlzaGVkID0gZmFsc2U7CiAgICAgCi0gICAg
TlNTdHJpbmcgKmFsZXJ0Q29va2llSFRNTCA9IEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3Vt
ZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3Ro
OyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQo
KTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOwotICAgIFt3ZWJWaWV3IGxv
YWRIVE1MU3RyaW5nOmFsZXJ0Q29va2llSFRNTCBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5n
OkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZp
bmlzaGVkKTsKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29r
aWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJd
XTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Np
b25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CiB9CiAKIHN0YXRpYyBib29sIGFyZUNvb2tpZXNF
cXVhbChOU0hUVFBDb29raWUgKmZpcnN0LCBOU0hUVFBDb29raWUgKnNlY29uZCkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5k
bGVyLWxlYWtzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VS
TFNjaGVtZUhhbmRsZXItbGVha3MubW0KaW5kZXggYWM3ZGU0MTUxMmM0NTEzOGVjNWU0YzA5ZTUx
MTVkMTZjZDIzYjIyZS4uYWMxNjUzNWRmZDkzOTk5ZDJlYzUwZGNmZDcxYzNhNTZkMTEzZWM3YSAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNj
aGVtZUhhbmRsZXItbGVha3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNp
bXBvcnQgPFdlYktpdC9XS1VSTFNjaGVtZVRhc2tQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZp
ZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgog
I2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgpAQCAtMTUyLDcgKzE1Myw3IEBAIFRFU1QoVVJMU2NoZW1l
SGFuZGxlciwgTGVha3MzKQogCiAgICAgcnVuVW50aWxUYXNrc0luRmxpZ2h0KDIpOwogCi0gICAg
W3dlYlZpZXcxLmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKKyAgICBbd2ViVmlldzEuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0
YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBydW5VbnRpbFRhc2tzSW5G
bGlnaHQoMCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCmluZGV4
IDkyY2YzYTYxOThhNWI5ZDE0NTQ0OTA1ZGI5ZTk0OGYxMWM3MjU2ZGUuLmJmOGJkZTgzMWEyODU5
YmNmMzQxMzgwNjE4OGI1OTFmY2FhOWQzYWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1
c3RvbVBhdGhzLm1tCkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vic2l0ZURh
dGFTdG9yZUN1c3RvbVBhdGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEUK
ICAgICAvLyBOb3csIHdpdGggYnJhbmQgbmV3IFdLV2Vic2l0ZURhdGFTdG9yZXMgcG9pbnRpbmcg
YXQgdGhlIHNhbWUgY3VzdG9tIGNvb2tpZSBzdG9yYWdlIGxvY2F0aW9uLAogICAgIC8vIGluIG5l
d2x5IGZpcmVkIHVwIE5ldHdvcmtQcm9jZXNzZXMsIHZlcmlmeSB0aGF0IHRoZSBmZXRjaCBhbmQg
ZGVsZXRlIEFQSXMgd29yayBhcyBleHBlY3RlZC4KIAotICAgIFtwcm9jZXNzUG9vbCBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtkYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKICAgICBhdXRvIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVE
YXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0ZURhdGFTdG9yZUNv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21EYXRhU3RvcmUgZmV0Y2hEYXRh
UmVjb3Jkc09mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldLV2Vic2l0ZURhdGFUeXBlQ29v
a2llcywgbmlsXSBjb21wbGV0aW9uSGFuZGxlcjpeKE5TQXJyYXk8V0tXZWJzaXRlRGF0YVJlY29y
ZCAqPiAqIHJlY29yZHMpIHsKQEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0aWMgdm9pZCBydW5XZWJz
aXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMoU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hv
dWxkRQogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKIAotICAgIFtwcm9jZXNzUG9v
bCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtkYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKICAgICBuZXdDdXN0b21EYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJz
aXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3Rv
cmVDb25maWd1cmF0aW9uLmdldCgpXSk7CiAKICAgICBbbmV3Q3VzdG9tRGF0YVN0b3JlIHJlbW92
ZURhdGFPZlR5cGVzOltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dlYnNpdGVEYXRhVHlwZUNvb2tp
ZXMsIG5pbF0gbW9kaWZpZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQYXN0XSBjb21wbGV0aW9uSGFu
ZGxlcjpeIHsKQEAgLTUzOSw3ICs1MzksNyBAQCBURVNUKFdlYktpdCwgRG9Mb2FkV2l0aE5vbkRl
ZmF1bHREYXRhU3RvcmVBZnRlclRlcm1pbmF0aW5nTmV0d29ya1Byb2Nlc3MpCiAKICAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFt3ZWJWaWV3Q29uZmlndXJh
dGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3
ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CiAKICAgICByZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4
dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1d
OwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwpAQCAtODU3LDcgKzg1Nyw3IEBA
IFRFU1QoV2ViS2l0LCBNZWRpYUNhY2hlKQogICAgIEVYUEVDVF9GQUxTRShlcnJvcik7CiAKICAg
ICBkb25lID0gdHJ1ZTsKLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0u
d2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgW2ZpbGVN
YW5hZ2VyIHJlbW92ZUl0ZW1BdFBhdGg6cGF0aCBlcnJvcjomZXJyb3JdOwogICAgIEVYUEVDVF9G
QUxTRShlcnJvcik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmlu
ZGV4IGFkYmNlOWY2MDRhZjhkYjRkZDE0NWRlMGNjMDY1Y2NjNGI2NGVjZjUuLjRiM2MxOTNiMDQ1
MDg1NDA5OTM1NTA3YTdlNDBhODQyNGMyYzc4ZTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwCkBAIC0xMDY0LDggKzEwNjQsNiBAQCBib29sIFRlc3RDb250cm9s
bGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRp
b25zLCBSZQogCiAgICAgcmVzZXRRdW90YSgpOwogCi0gICAgV0tDb250ZXh0U2V0QWxsb3dzQW55
U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhwbGF0Zm9ybUNvbnRleHQoKSwg
dHJ1ZSk7Ci0KICAgICBXS0NvbnRleHRDbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGlu
ZyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpKTsKIAogICAgIFdLQ29udGV4
dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLmNvbnRleHQoKSwgZmFsc2UpOwpAQCAtMzEzOSw3ICszMTM3LDcgQEAgdm9pZCBUZXN0
Q29udHJvbGxlcjo6c2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoYm9vbCBpZ25vcmVzVmll
d3BvcnRTY2FsZUxpbWkKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlTmV0d29ya1By
b2Nlc3MoKQogewotICAgIFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKHBsYXRmb3Jt
Q29udGV4dCgpKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
cyh3ZWJzaXRlRGF0YVN0b3JlKCkpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjp0ZXJtaW5h
dGVTZXJ2aWNlV29ya2VycygpCkBAIC0zMTcwLDkgKzMxNjgsOCBAQCBQbGF0Zm9ybVdlYlZpZXcq
IFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNyZWF0ZU90aGVyUGFnZShQbGF0Zm9ybVdlYlZpZXcq
IHBhcmVudAogICAgIHJldHVybiBuZXcgUGxhdGZvcm1XZWJWaWV3KGNvbmZpZ3VyYXRpb24sIG9w
dGlvbnMpOwogfQogCi1XS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0
Q29udGV4dChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBj
b250ZXh0Q29uZmlndXJhdGlvbikKK1dLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxhdGZv
cm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1cmF0
aW9uUmVmKQogewotICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKGNvbnRl
eHQsIGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCkpOwogICAgIHJldHVybiBjb250ZXh0OwogfQog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409214</attachid>
            <date>2020-09-19 16:34:05 -0700</date>
            <delta_ts>2020-09-21 12:36:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200919163403.patch</filename>
            <type>text/plain</type>
            <size>315485</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBmY2FmY2FlZDMzOWZhYmRh
N2I0OTk4ZTIwZTViYjRlMDliYzJlNzcuLmNmNWEyNTJmZDIyMDIxMzljYjMyODdjMDA2Yzg2N2Jm
NTRmOGJlZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzM4IEBACisyMDIwLTA5LTE5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24p
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0
b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuY3BwOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBD
b29raWVTdG9yZTo6Y29va2llc0ZvclVSTCk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9y
ZTo6c2V0Q29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29v
a2llKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVzdHJveWVkKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6dW5y
ZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmNwcDoKKyAgICAgICAgKFdLQ29udGV4dEdldENvb2tpZU1hbmFn
ZXIpOgorICAgICAgICAoV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKToKKyAgICAg
ICAgKFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgIChXS0Nv
bnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdLQ29u
dGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdLQ29udGV4dFNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcpOiBEZWxldGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9zZXRDb29raWVBY2NlcHRQb2xpY3k6XSk6CisgICAgICAgICgtW1dLUHJvY2Vzc1Bv
b2wgX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6XSk6CisgICAgICAgICgtW1dL
UHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1By
b2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3Jl
IF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChf
V2ViS2l0Q29va2llTWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUp
OgorICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9hZGRfY29va2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29v
a2llcyk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAg
ICAod2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1
dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNz
L0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lm1tOgorICAgICAgICAoV2ViS2l0
OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbik6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6
OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVz
cyk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5k
UmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OkRvd25sb2FkUHJveHlNYXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5
TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAg
IChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0
YXJ0TG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5OjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OmF0dGVtcHRSZWxhdW5jaEFmdGVyQ3Jhc2hJZk5lY2Vzc2FyeSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tn
cm91bmRQcmlvcml0eSk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sU2hvdWxkVGFr
ZVVJQmFja2dyb3VuZEFzc2VydGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRo
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OndlYnNp
dGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vz
c2VzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJv
Y2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJv
Y2Vzc0Fzc2VydGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZl
bnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRl
Q29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVB
bGxDb29raWVzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0QWxsQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3Vw
cGxlbWVudE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRl
cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpjcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50
aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25V
UkxGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlj
a0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxT
Y2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6fldlYlByb2Nlc3NQb29sKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3
YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxp
emVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nl
c3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVT
ZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpy
ZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRTZXJ2
aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29u
dGVudFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJl
Z2lzdGVyVVJMU2NoZW1lQXNMb2NhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpyZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFu
ZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2Jh
bFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JXZWJTb2NrZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJD
YWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpz
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHlGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
Ojp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzeW5jTmV0d29ya1Byb2Nlc3NDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc0Fz
c2VydGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29y
a2VyUGFnZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRpZENv
bW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rp
dml0eUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
aGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5l
dHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVj
ZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpk
dW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbik6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVh
clByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c3VibWl0VGVsZW1ldHJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3Vt
bWFyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2ll
QmxvY2tpbmdVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hl
ZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0
aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0Vu
dHJpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bG9n
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFz
SGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fk
c1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9T
YW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVE
b21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNl
c3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFw
cEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbmFt
ZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
Ojpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0
d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1
bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3Rv
cmVGb3JTZXNzaW9uSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwZW5k
aW5nQ29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmFkZFBlbmRpbmdDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRh
U3RvcmVTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZv
cm1TZXROZXR3b3JrUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL2dsaWIvV2ViUHJv
Y2Vzc1Byb3h5R0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cGxh
dGZvcm1HZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJDb29r
aWVNYW5hZ2VyUHJveHlTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSk6CisgICAgICAgICogVUlQcm9jZXNz
L3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyk6CisKIDIwMjAtMDktMTkg
IFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBydW50aW1l
IHNldHRpbmcgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyB0aGUgQ3Jvc3NPcmlnaW5SZXNvdXJjZVBv
bGljeSBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2ll
cy9XZWJDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29v
a2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAppbmRleCBmY2UyMzg5ODdhNzg1MGYxOGM5ZjMwNmM1
MGU5OGNlOTg4ZDEyNWZkLi5lYjU4ZmM5NDVkMTkyNTU0NjFiODYwZjRhOGI4ZGM2MTI1ZjUzZjg4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29v
a2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVz
L1dlYkNvb2tpZU1hbmFnZXIuY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBXZWJDb29raWVN
YW5hZ2VyOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kg
cG9saWN5LAogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihtX3Byb2Nlc3MuZGVmYXVs
dFN0b3JhZ2VTZXNzaW9uKCkuY29va2llQWNjZXB0UG9saWN5KCkpOworICAgIGNvbXBsZXRpb25I
YW5kbGVyKG1fcHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKS0+Y29va2llQWNjZXB0UG9saWN5KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5j
cHAKaW5kZXggYmU4ZDk2NjYyYmU2ZGNkODVmYTNjMzI5MjlhZTBmMGI1ZDE4MjM0My4uN2Y0Nzc3
MTMyZDUyNDc1ODE4Mjk4MWFhZjBjMThiNzJiN2JhMzk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTM0NywyOSArMzQ3LDE5IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiAKICAgICBzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1
Z01vZGUocGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUpOwogCi0g
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBh
dXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRDsKLSAgICBzZXRTZXNzaW9uKHNlc3Npb25J
RCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKLQotICAg
IFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0gICAgYWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFn
ZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFn
ZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCisgICAgZm9yIChhdXRvJiBkYXRhU3Rv
cmVQYXJhbWV0ZXJzIDogcGFyYW1ldGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzKSB7CisgICAgICAg
IGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuc2Vzc2lvbklEOworICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkoZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOworICAgICAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQs
IGRhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBkYXRhU3RvcmVQYXJh
bWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRl
cnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFn
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0gICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lv
bklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgZGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwog
I2VuZGlmCi0KKyAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25JRCwgZGF0
YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRl
cnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgUmVtb3Rl
TmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKCp0aGlzLCBX
VEZNb3ZlKGRhdGFTdG9yZVBhcmFtZXRlcnMpKTsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
Ci0gICAgYm9vbCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkID0g
dHJ1ZTsKLSAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVk
LCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSks
IHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CisgICAgICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKHNlc3Npb25JRCwgZGF0YVN0
b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVk
LCBXVEZNb3ZlKGRhdGFTdG9yZVBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeSksIGRhdGFTdG9yZVBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKLQotICAgIG1fc3RvcmFnZU1hbmFnZXJT
ZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvKiBk
ZWZhdWx0U2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCkpOwotICAgIGF1dG8qIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IGRlZmF1bHRTZXNz
aW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tp
ZSA6IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMp
Ci0gICAgICAgIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7CisgICAg
fQogCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkK
ICAgICAgICAgc3VwcGxlbWVudC0+aW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKQEAgLTUwNSw4ICs0
OTUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vz
c2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5z
dXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNob3VsZFVz
ZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFzZSkKICNl
bmRpZgogewotICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSk7Ci0KICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmV0d29ya1N0b3JhZ2VTZXNz
aW9ucy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0Vu
dHJ5KQogICAgICAgICByZXR1cm47CkBAIC01MjEsNyArNTA5LDcgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29s
IHNob3VsZFUKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllciA9IG1ha2VT
dHJpbmcoaWRlbnRpZmllckJhc2UsICIuUHJpdmF0ZUJyb3dzaW5nLiIsIGNyZWF0ZUNhbm9uaWNh
bFVVSURTdHJpbmcoKSkuY3JlYXRlQ0ZTdHJpbmcoKTsKICAgICBpZiAoc2Vzc2lvbklELmlzRXBo
ZW1lcmFsKCkpCiAgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gYWRvcHRDRihjcmVhdGVQcml2YXRl
U3RvcmFnZVNlc3Npb24oY2ZJZGVudGlmaWVyLmdldCgpKSk7Ci0gICAgZWxzZQorICAgIGVsc2Ug
aWYgKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAg
ICAgICBzdG9yYWdlU2Vzc2lvbiA9IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3Jl
YXRlQ0ZTdG9yYWdlU2Vzc2lvbkZvcklkZW50aWZpZXIoY2ZJZGVudGlmaWVyLmdldCgpKTsKIAog
ICAgIGlmIChOZXR3b3JrU3RvcmFnZVNlc3Npb246OnByb2Nlc3NNYXlVc2VDb29raWVBUEkoKSkg
ewpAQCAtNTQ0LDIxICs1MzIsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y29va2llQWNjZXB0
UG9saWN5Q2hhbmdlZChIVFRQQ29va2llQWNjZXB0UG9saWN5IG5ld1BvbGljeSkKIAogV2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBOZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24o
Y29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkgY29uc3QKIHsKLSAgICBpZiAoc2Vzc2lv
bklEID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgIHJldHVy
biAmZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CiAgICAgcmV0dXJuIG1fbmV0d29ya1N0b3JhZ2VT
ZXNzaW9ucy5nZXQoc2Vzc2lvbklEKTsKIH0KIAotV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBOZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbikKLSAgICAgICAgbV9kZWZhdWx0
TmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Np
b24oKTsKLSAgICByZXR1cm4gKm1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjsKLX0KLQog
dm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBG
dW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYpPiYgZnVuY3RvcikK
IHsKLSAgICBmdW5jdG9yKGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpKTsKICAgICBmb3IgKGF1dG8m
IHN0b3JhZ2VTZXNzaW9uIDogbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLnZhbHVlcygpKQogICAg
ICAgICBmdW5jdG9yKCpzdG9yYWdlU2Vzc2lvbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXggYWE3MzM3N2I3MzJmNjEwYjg2NzkwNTZj
MzdkZjI4YWVlYTA3YWY4My4uZGM4NmYzOTY5N2ZjNTAzZWE0ZGJkMWIwNmMzMjI5NzViMWU2OWQx
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApA
QCAtMTcwLDcgKzE3MCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZm9yRWFjaE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYpPiYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5ld1Rlc3RpbmdTZXNz
aW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJik7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9p
ZCBlbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgYm9vbCBzaG91bGRVc2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYpOwpAQCAtMzc1LDcgKzM3NCw2IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSBjb25zdDsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNz
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKIApAQCAtNTQ0LDcgKzU0
Miw2IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiBtX25ldHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPj4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zOwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbV9kZWZhdWx0TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOwogCiAgICAgUmVmUHRyPFN0b3JhZ2VNYW5hZ2VyU2V0PiBtX3N0b3JhZ2VNYW5h
Z2VyU2V0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCmluZGV4IDk5MDFjNWNi
NzNjNzRmZTNkYTRlYmY1N2JhODUxMjg2ZmRhMTA0YmYuLjAyZGRiOTIzNGU5OTljM2U2Y2RjZGNm
MGI4NzhiODcyNTgzNjMyOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBA
IC01NSw3ICs1NSw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVu
Y29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCB1aVByb2Nl
c3NTREtWZXJzaW9uOwogICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIG5ldHdvcmtBVFNDb250ZXh0
LmdldCgpKTsKICNlbmRpZgotICAgIGVuY29kZXIgPDwgZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnM7CisgICAgZW5jb2RlciA8PCBkYXRhU3RvcmVQYXJhbWV0ZXJzOwogI2lmIFVTRShTT1VQKQog
ICAgIGVuY29kZXIgPDwgY29va2llQWNjZXB0UG9saWN5OwogICAgIGVuY29kZXIgPDwgaWdub3Jl
VExTRXJyb3JzOwpAQCAtNjgsOSArNjgsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29k
ZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIGVuY29kZXIgPDwgdXJsU2No
ZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQot
ICAgIGVuY29kZXIgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA8PCBzZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlIDw8IHNob3VsZERp
c2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXk7Ci0jZW5kaWYKICAgICBl
bmNvZGVyIDw8IHNob3VsZEVuYWJsZUlUUERhdGFiYXNlOwogICAgIGVuY29kZXIgPDwgZW5hYmxl
QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlOwogfQpAQCAtMTE2LDExICsxMTMsMTEgQEAgYm9v
bCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjb2RlciYg
ZGVjb2RlciwgTmV0d29ya1Byb2MKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKLSAg
ICBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnM7Ci0gICAgZGVjb2RlciA+PiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAg
ICBpZiAoIWRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKQorICAgIE9wdGlvbmFsPFZlY3RvcjxX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZGVj
b2RlciA+PiBkYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGlmICghZGF0YVN0b3JlUGFyYW1ldGVy
cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycyA9IFdURk1vdmUoKmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKKyAgICByZXN1
bHQuZGF0YVN0b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRhdGFTdG9yZVBhcmFtZXRlcnMpOwog
CiAjaWYgVVNFKFNPVVApCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29va2llQWNj
ZXB0UG9saWN5KSkKQEAgLTE0MiwyMCArMTM5LDYgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Byb2MK
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9B
Y2Nlc3MpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBPcHRpb25h
bDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+PiBzZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlmICghc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlID0gV1RGTW92ZSgqc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGREaXNh
YmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5KSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotI2VuZGlmCi0KICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRF
bmFibGVJVFBEYXRhYmFzZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oCmluZGV4IDExY2E1YTE5OWZjZmZlODgzZmZmMGEyZmY3OWRmZTQyMTBk
OWRhZDEuLjY3NDlkYTBjNGE2M2MyMDIxMDc3ODM1ODQ4NDZjOTBkMDEwYTAzNDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKQEAgLTcxLDcgKzcxLDcgQEAgc3RydWN0IE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBuZXR3
b3JrQVRTQ29udGV4dDsKICNlbmRpZgogCi0gICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMg
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzPiBkYXRhU3RvcmVQYXJhbWV0ZXJzOwogICAgIAogI2lmIFVTRShTT1VQKQogICAg
IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5IHsgV2Vi
Q29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeTo6QWx3YXlzQWNjZXB0IH07CkBAIC04NSwxMiAr
ODUsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFZl
Y3RvcjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbDsKICAgICBWZWN0b3I8U3Ry
aW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCi0gICAgU3RyaW5nIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnk7
Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgYm9vbCBzaG91bGREaXNhYmxlU2VydmljZVdv
cmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5IHsgZmFsc2UgfTsKLSNlbmRpZgotICAgIGJvb2wg
c2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgeyBmYWxzZSB9OworICAgIGJvb2wgc2hvdWxkRW5hYmxl
SVRQRGF0YWJhc2UgeyB0cnVlIH07CiAgICAgYm9vbCBlbmFibGVBZENsaWNrQXR0cmlidXRpb25E
ZWJ1Z01vZGUgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCmluZGV4IGRhNjM1OTEy
NDIyM2RiOTcwMzBkMWVhNzdiYzAwY2VlNTFmYjAxN2QuLjUwMTBmOWE4NjkwMzkwZGZmZTlhMzQ0
ZTk5MDViMjRlNjY4NWM3YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KQEAgLTc4LDkgKzc4LDYgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2Nv
YShjb25zdCBOZXR3b3JrUHJvY2Vzc0MKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVy
bWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5j
b250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRl
bnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9DRk5ldHdvcmtTZXRBVFNDb250ZXh0KHBh
cmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwpAQCAtMTA1LDExICsxMDIsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29h
KGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFtOU1VSTENhY2hlIHNldFNoYXJlZFVSTENhY2hl
OnVybENhY2hlLmdldCgpXTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3Jh
Z2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwot
fQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3b3JrUHJvY2Vzczo6c291cmNlQXBwbGljYXRp
b25BdWRpdERhdGEoKSBjb25zdAogewogI2lmIFVTRShTT1VSQ0VfQVBQTElDQVRJT05fQVVESVRf
REFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3
b3JrUHJvY2Vzc0N1cmwuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHAKaW5kZXggZDk5ZjlkZDY0YmFkNmU0MmRjYzhlM2Y5YjhmMTY5
Mjk5N2Y2NzE5Mi4uNDk1MzgxMWIyMTY0ZTg5ODQ2ZjkyNzllNjIyOWQ1OTNlMjI1NmEzNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQ
cm9jZXNzQ3VybC5jcHAKQEAgLTM5LDExICszOSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBs
YXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRp
CiB7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+
IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3
b3JrUHJvY2Vzczo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IENl
cnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KaW5kZXggYzI3MzZlMDI2
YTU1ZDNkNDAyMGY4NGY0ZDY5M2QxNmI0NjUyZWQyMy4uMWUxODQ4OWY5NDYyMGYwMmE3ZDllOWU4
NjllYzg2NDkxYjdiYmQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KQEAgLTU1LDE1ICs1NSwx
MSBAQCB2b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3Jl
U2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYgbmV0dwogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
b25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhh
bmRsZSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gdWlQcm9jZXNz
Q29va2llU3RvcmFnZTsKLSAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJh
bWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSkKKyAgICBp
ZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tp
ZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSAmJiBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQo
KSkKICAgICAgICAgdWlQcm9jZXNzQ29va2llU3RvcmFnZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRl
bnRpZnlpbmdEYXRhKHBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIp
OwogCiAgICAgbmV0d29ya1Byb2Nlc3MuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lv
biwgbWFrZVN0cmluZyhiYXNlLCAnLicsIHNlc3Npb25JRC50b1VJbnQ2NCgpKSwgV1RGTW92ZSh1
aVByb2Nlc3NDb29raWVTdG9yYWdlKSk7CiAKLSAgICBhdXRvKiBzZXNzaW9uID0gbmV0d29ya1By
b2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNv
b2tpZSA6IHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHNlc3Npb24tPnNldENv
b2tpZShjb29raWUpOwotCiAgICAgbmV0d29ya1Byb2Nlc3Muc2V0U2Vzc2lvbihzZXNzaW9uSUQs
IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUobmV0d29ya1Byb2Nlc3MsIFdURk1vdmUocGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKaW5kZXgg
NDFhZmRjYzYxYWRjNTgzZGNmMTlmMmQ0MGFhMjg5MWY4YTAxMzI4Yi4uMDkzZDU5OTU5NmE2ODgz
MGFmMDk5M2ZhMzY4MzFlMGMzMjRiZmJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKQEAgLTE0MCwxMSAr
MTQwLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1By
b2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKICAgICBzZXRJZ25vcmVUTFNFcnJvcnMo
cGFyYW1ldGVycy5pZ25vcmVUTFNFcnJvcnMpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVE
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vycm9ycyhi
b29sIGlnbm9yZVRMU0Vycm9ycykKIHsKICAgICBTb3VwTmV0d29ya1Nlc3Npb246OnNldFNob3Vs
ZElnbm9yZVRMU0Vycm9ycyhpZ25vcmVUTFNFcnJvcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCmluZGV4IDZkMGMxMjlhNzQw
NTEwZDM4Njk3MzcwNWFkMDkyZWYxMzJjYzA3NWEuLjA0ODEwYjNlMTliZTk2Y2FkMWFkODJhNDRk
Y2VkYjI2ZWY3ODI2MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKQEAgLTQwLDEzICs0MCw5IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAg
ICAgZW5jb2RlciA8PCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgZW5jb2RlciA8PCB1
aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGNvb2tpZVN0
b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIGVuY29kZXIgPDwgcGVuZGluZ0Nvb2tpZXM7
CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBlbmNvZGVyIDw8IGluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeSA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGU7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRh
YmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5kaWYKIAog
I2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTgzLDEyICs3OSw2IEBAIE9wdGlvbmFsPFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVj
b2RlKElQQzo6RGVjCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVy
cy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmNvb2tpZVN0b3Jh
Z2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+PiBwZW5kaW5nQ29va2llczsKLSAgICBkZWNvZGVyID4+IHBlbmRpbmdDb29raWVzOwot
ICAgIGlmICghcGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IFdURk1vdmUoKnBlbmRpbmdDb29raWVzKTsK
LQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIE9wdGlvbmFsPFN0cmluZz4gaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5OwpAQCAtMTAxLDE0ICs5MSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAg
aWYgKCFpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBPcHRpb25hbDxT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFpbmRleGVkRGF0YWJhc2VUZW1wQmxv
YkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5o
CmluZGV4IGYyN2RmNDg5ODA5ZjMxOTYwOGI2ODBjYjJhOGExYzE0YjcwMTg0MzkuLmUxYjIzMzcw
MTk5ZmUzNzAzMWU5ZGM1YzA1NzgxNTUwMjFlMzRkNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaApAQCAtNTEsMTUgKzUxLDExIEBA
IHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyB7CiAKICAgICBWZWN0b3I8dWludDhf
dD4gdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29raWVzOwogICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRp
b25QYXJhbWV0ZXJzIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKIAogI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQogICAgIFN0cmluZyBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsK
LSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCmluZGV4IGJj
MDc4NjZmYmMzOTY4ZTc2Y2FhOWEzNTY4MTBjNmEyZmIwOWRjZmQuLmZmOTU1ODkyYmRhMGI4M2My
M2E5NmEwODM5ZWYzYmQwZDk0NjljMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCkBAIC00Niw4ICs0Niw2IEBAIG5hbWVzcGFj
ZSBBUEkgewogSFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQogICAgIDogbV9vd25pbmdEYXRhU3RvcmUod2Vi
c2l0ZURhdGFTdG9yZSkKIHsKLSAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9v
bEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29r
aWVTdG9yZSgpCkBAIC01NSw4ICs1Myw2IEBAIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVT
dG9yZSgpCiAgICAgQVNTRVJUKG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFt
X29ic2VydmVkQ29va2llTWFuYWdlclByb3h5KTsKICAgICBBU1NFUlQoIW1fY29va2llTWFuYWdl
clByb3h5T2JzZXJ2ZXIpOwotCi0gICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZp
Y2F0aW9ucygpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZmlsdGVyQXBwQm91bmRDb29r
aWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtODEsMzMgKzc3LDE2IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3Vu
ZENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpCiAKIHZvaWQgSFRU
UENvb2tpZVN0b3JlOjpjb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBw
b29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tp
ZT4gYWxsQ29va2llczsKLSAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICAgICAgYWxs
Q29va2llcyA9IGdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKLSAg
ICAgICAgYWxsQ29va2llcy5hcHBlbmRWZWN0b3IobV9vd25pbmdEYXRhU3RvcmUtPnBlbmRpbmdD
b29raWVzKCkpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBhbGxDb29raWVzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAg
IGZpbHRlckFwcEJvdW5kQ29va2llcyhhbGxDb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byog
Y29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IHBvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11
dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0
d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRBbGxD
b29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRh
YmxlIHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNv
b2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byog
cG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVy
YXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRs
ZXIoeyB9KTsKLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmdldENv
b2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFi
bGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29y
a1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRDb29raWVz
KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsK
ICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTExNSw3OCArOTQsMjkgQEAgdm9pZCBIVFRQQ29v
a2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmVjdG8KIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMs
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgYXBwQm91bmRDb29raWVzKSBt
dXRhYmxlIHsKLSAgICAgICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNz
UG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgICAgIGlmICghcG9vbCkgewot
ICAgICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBhcHBCb3VuZENvb2tpZXMpIHsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogcGVuZGluZ0Nvb2tpZXMgdXNlZCBmb3IgZGVmYXVsdFNlc3Np
b24gYmVjYXVzZSBzZXNzaW9uIGNvb2tpZXMgY2Fubm90IGJlIHByb3BhZ2F0ZWQgdG8gTmV0d29y
ayBQcm9jZXNzIHdpdGggdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuCi0gICAgICAg
ICAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAg
ICAgICAgICAgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0
b3JlLT5hZGRQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvKiBjb29raWVN
YW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KTsKLSAgICAgICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+
c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOworICAgICAgICBh
dXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCku
Y29va2llTWFuYWdlcigpOworICAgICAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMobV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBhcHBCb3VuZENvb2tpZXMsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0
ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmlu
Z0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAg
IGlmICghcG9vbCkgewotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgp
ID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9u
KQotICAgICAgICAgICAgZGVsZXRlQ29va2llRnJvbURlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9y
ZShjb29raWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+
cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb29raWUpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0g
KCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNv
b2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IGNvb2tpZSwgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFT
dG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdl
ci5kZWxldGVDb29raWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRl
bGV0ZUFsbENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xG
b3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBp
ZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAg
ICAgICAgZGVsZXRlQ29va2llc0luRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAg
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9v
bC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29r
aWVNYW5hZ2VyLT5kZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3Jr
UHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUFsbENv
b2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKICAgICAvLyBGSVhNRTogVGhl
IENvbXBsZXRpb25IYW5kbGVyIHNob3VsZCBiZSBwYXNzZWQgdG8gV2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVBbGxDb29raWVzLgogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9s
aWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0
b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBzZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUocG9saWN5
KTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFn
ZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwot
ICAgIGNvb2tpZU1hbmFnZXItPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKLSAgICB9KTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3Rv
cmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIu
c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IHBvbGljeSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29r
aWVTdG9yZTo6Zmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTIyNywyMSArMTU3LDcgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OnJl
Z2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQogCiAgICAgbV9jb29raWVNYW5hZ2Vy
UHJveHlPYnNlcnZlciA9IG1ha2VVbmlxdWU8QVBJV2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2
ZXI+KCp0aGlzKTsKIAotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vz
c1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKSB7Ci0g
ICAgICAgIEFTU0VSVCghbV9vYnNlcnZpbmdVSVByb2Nlc3NDb29raWVzKTsKLQotICAgICAgICAv
LyBMaXN0ZW4gZm9yIGNvb2tpZSBub3RpZmljYXRpb25zIGluIHRoZSBVSVByb2Nlc3MgaW4gdGhl
IG1lYW50aW1lLgotICAgICAgICBzdGFydE9ic2VydmluZ0NoYW5nZXNUb0RlZmF1bHRVSVByb2Nl
c3NDb29raWVTdG9yZShbdGhpc10gKCkgewotICAgICAgICAgICAgY29va2llc0RpZENoYW5nZSgp
OwotICAgICAgICB9KTsKLQotICAgICAgICBtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMgPSB0
cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+
KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9ICZtX293bmluZ0RhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CiAgICAgbV9vYnNlcnZlZENvb2tp
ZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lv
bklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0KIApAQCAtMjc2LDQ2ICsx
OTIsMTAgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNEaWRDaGFuZ2UoKQogdm9pZCBI
VFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQoKQogewogICAgIG1fb2JzZXJ2
ZWRDb29raWVNYW5hZ2VyUHJveHktPnVucmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLSAgICBtX29i
c2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbnVsbHB0cjsKLQotICAgIGF1dG8qIHBvb2wgPSBt
X293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygp
OwotCi0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5n
RGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2Vy
dmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCi12b2lk
IEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMo
KQotewotICAgIEFTU0VSVCghbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVy
KTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IFdlYlBy
b2Nlc3NQb29sOjpyZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihbdGhpc10oV2Vi
UHJvY2Vzc1Bvb2wmIG5ld1Byb2Nlc3NQb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRh
U3RvcmUtPmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKG5ld1Byb2Nlc3NQb29sKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAvLyBOb3cgdGhhdCBhbiBhc3NvY2lhdGVkIHByb2Nlc3Mg
cG9vbCBleGlzdHMsIHdlIG5lZWQgdG8gZmx1c2ggdGhlIFVJIHByb2Nlc3MgY29va2llIHN0b3Jl
Ci0gICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBhbnkgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIHdpdGhp
biB0aGUgbmV3IHByb2Nlc3MgcG9vbC4KLSAgICAgICAgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29v
a2llU3RvcmUoKTsKLSAgICAgICAgbmV3UHJvY2Vzc1Bvb2wuZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KTsKLQotICAgICAgICBpZiAobV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcikgewotICAgICAg
ICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG5ld1Byb2Nlc3NQb29sLnN1cHBs
ZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgICAgICAgICBtX29i
c2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgICAg
ICB9Ci0gICAgICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsK
LSAgICB9KTsKLX0KLQotdm9pZCBIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQcm9j
ZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIGlmIChtX3Byb2Nlc3NQb29sQ3JlYXRpb25M
aXN0ZW5lcklkZW50aWZpZXIpCi0gICAgICAgIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyUHJv
Y2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRl
bnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIg
PSAwOwotfQotCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmZs
dXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCkgeyB9CiBWZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiBIVFRQQ29va2llU3RvcmU6OmdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNv
b2tpZXMoKSB7IHJldHVybiB7IH07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElIVFRQQ29va2llU3RvcmUuaAppbmRleCBkNjIwYWRkYTRlN2Y4OTQ1NjYxOGEzZTIyZTFi
ZmQ0MzU3Nzc1YjE5Li5hMDVmNDE0MzBkYjJiMjNkNDE3ODQwNzlhNGZiODZjNzQ2MGE3NTQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3Jl
LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5o
CkBAIC04Myw5ICs4Myw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSFRUUENvb2tpZVN0b3Jl
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYpOwogCi0gICAgdm9pZCByZWdpc3RlckZvck5ld1By
b2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotICAgIHZvaWQgdW5yZWdpc3RlckZvck5ld1Byb2Nl
c3NQb29sTm90aWZpY2F0aW9ucygpOwotCiAgICAgdm9pZCBmbHVzaERlZmF1bHRVSVByb2Nlc3ND
b29raWVTdG9yZSgpOwogICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBnZXRBbGxE
ZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0
Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29uc3QgV2ViQ29yZTo6Q29va2ll
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAppbmRleCA1
OGM1NDUzZjQ4OTg3ZjVlMWFmYWZlZjM0YzQzMzM1ZjFiNGNjOTkwLi42NWY4YjUzZjViM2QzMDVj
ZjI4MGJhNWQzMGFhZTM3YjM5YWNmNDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHAKQEAgLTQxMSwxMSArNDExLDYgQEAgdm9pZCBXS0NvbnRleHRQcmVj
b25uZWN0VG9TZXJ2ZXIoV0tDb250ZXh0UmVmLCBXS1VSTFJlZikKIHsKIH0KIAotV0tDb29raWVN
YW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHRS
ZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJl
ZiktPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkpOwotfQotCiBX
S1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRl
eHRSZWYpCiB7CiAgICAgcmV0dXJuIFdLV2Vic2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3Rv
cmUoKTsKQEAgLTUyNywxMyArNTIyLDYgQEAgdm9pZCBXS0NvbnRleHRTZXRKYXZhU2NyaXB0R2Fy
YmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwKICAgICBX
ZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JU
aW1lckVuYWJsZWQoZW5hYmxlKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xD
ZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0LCBi
b29sIGFsbG93cykKLXsKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2ViS2l0Ojp0
b0ltcGwoY29udGV4dCktPnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtl
cihhbGxvd3MpOwotI2VuZGlmCi19Ci0KIFdLRGljdGlvbmFyeVJlZiBXS0NvbnRleHRDb3B5UGx1
Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewogICAg
IHJldHVybiBXZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+cGx1Z0lu
QXV0b1N0YXJ0T3JpZ2luSGFzaGVzKCkubGVha1JlZigpKTsKQEAgLTU3NSwxMSArNTYzLDYgQEAg
dm9pZCBXS0NvbnRleHRTZXRGb250QWxsb3dMaXN0KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBX
S0FycmF5UmVmIGFycmF5UmVmKQogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRG
b250QWxsb3dMaXN0KFdlYktpdDo6dG9JbXBsKGFycmF5UmVmKSk7CiB9CiAKLXZvaWQgV0tDb250
ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAg
V2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0K
IHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmIGNvbnRl
eHQpCiB7CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZVNlcnZpY2VXb3Jr
ZXJzKCk7CkBAIC01ODcsNyArNTcwLDcgQEAgdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNl
V29ya2VycyhXS0NvbnRleHRSZWYgY29udGV4dCkKIAogUHJvY2Vzc0lEIFdLQ29udGV4dEdldE5l
dHdvcmtQcm9jZXNzSWRlbnRpZmllcihXS0NvbnRleHRSZWYgY29udGV4dFJlZikKIHsKLSAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPm5ldHdvcmtQcm9jZXNzSWRlbnRpZmll
cigpOworICAgIHJldHVybiAwOwogfQogCiB2b2lkIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdp
bihXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tTdHJpbmdSZWYgZG9tYWluUmVmLCBXS1N0cmlu
Z1JlZiBuYW1lUmVmLCBXS0FycmF5UmVmIG1pbWVUeXBlc1JlZiwgV0tBcnJheVJlZiBleHRlbnNp
b25zUmVmKQpAQCAtNjE5LDEyICs2MDIsMTEgQEAgdm9pZCBXS0NvbnRleHRDbGVhckN1cnJlbnRN
b2RpZmllclN0YXRlRm9yVGVzdGluZyhXS0NvbnRleHRSZWYgY29udGV4dFJlZikKICAgICBXZWJL
aXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3Rp
bmcoKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MpCit2b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MoV0tDb250ZXh0UmVmLCBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiB7
Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAgV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRQcmlt
YXJ5V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tXZWJzaXRlRGF0
YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3RvcmUpCit2b2lkIFdLQ29udGV4dFNldFByaW1hcnlXZWJz
aXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiwgV0tXZWJzaXRlRGF0YVN0b3JlUmVmKQogewotICAg
IFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRQcmltYXJ5RGF0YVN0b3JlKCpXZWJLaXQ6
OnRvSW1wbCh3ZWJzaXRlRGF0YVN0b3JlKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5oCmluZGV4IDFkOGZhYjhhMTQ4NmFhZGI0OTQxNDRiOThmMTBlOTM2Mzhk
MGM1ZTYuLjJhYjZlZjg2ZjUzMGU3N2Y3NGNiZDVkZjU4NjJhYzRkMzBiNzk4NzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oCkBAIC0xNjgsNyArMTY4LDYgQEAg
V0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U3RvcE1lbW9yeVNhbXBsZXIoV0tDb250ZXh0UmVmIGNv
bnRleHQpOwogV0tfRVhQT1JUIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJz
aXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEX1dJ
VEhfUkVQTEFDRU1FTlQoV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSk7CiAK
IFdLX0VYUE9SVCBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEFwcGxp
Y2F0aW9uQ2FjaGVNYW5hZ2VyKFdLQ29udGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNB
VEVEX1dJVEhfUkVQTEFDRU1FTlQoV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9y
ZSk7Ci1XS19FWFBPUlQgV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFn
ZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiBXS19FWFBPUlQg
V0tHZW9sb2NhdGlvbk1hbmFnZXJSZWYgV0tDb250ZXh0R2V0R2VvbG9jYXRpb25NYW5hZ2VyKFdL
Q29udGV4dFJlZiBjb250ZXh0KTsKIFdLX0VYUE9SVCBXS0ljb25EYXRhYmFzZVJlZiBXS0NvbnRl
eHRHZXRJY29uRGF0YWJhc2UoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLS2V5
VmFsdWVTdG9yYWdlTWFuYWdlclJlZiBXS0NvbnRleHRHZXRLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2Vy
KFdLQ29udGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1F
TlQoV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKaW5kZXggYTAyNTAxMWY3
MGNjNjU5ZjVmYWEwOGE3ZDZjYmIzZmY1NmVlNmEzOC4uZDgzOWNhY2IyOGJhNTY1ZGM5NWE4Mzkz
YmZjY2FiOTM4ZGFkY2M1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dFByaXZhdGUuaApAQCAtODMsMTEgKzgzLDggQEAgV0tfRVhQT1JUIHZvaWQgV0tD
b250ZXh0V2FybUluaXRpYWxQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIC8vIEF0IHNv
bWUgcG9pbnQgaXQgc2hvdWxkIGJlIHJlbW92ZWQuCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRT
ZXRVc2VzTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmLCBib29sKTsKIAotV0tfRVhQT1JUIHZv
aWQgV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmKTsKIFdLX0VY
UE9SVCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29udGV4dFJlZik7
CiAKLVdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9y
U2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmLCBib29sKTsKLQogdHlwZWRlZiB2b2lk
ICgqV0tDb250ZXh0SW52YWxpZE1lc3NhZ2VGdW5jdGlvbikoV0tTdHJpbmdSZWYgbWVzc2FnZU5h
bWUpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0SW52YWxpZE1lc3NhZ2VGdW5jdGlvbihX
S0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uIGludmFsaWRNZXNzYWdlRnVuY3Rpb24pOwog
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRl
RGF0YVN0b3JlUmVmLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0
ZURhdGFTdG9yZVJlZi5jcHAKaW5kZXggOWRkYTU5MWM5NTE4OWFiMGMyNWFjNTU0NjZjMGEyYmZj
MzkyN2ViYy4uYjc4YTkxZTMzZWRmOWUyOTRiYjRkOGQ0YzBkZGY1N2NlNTAxNmI3ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVm
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3Rv
cmVSZWYuY3BwCkBAIC02OSw2ICs2OSwxMSBAQCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tXZWJz
aXRlRGF0YVN0b3JlQ3JlYXRlV2l0aENvbmZpZ3VyYXRpb24oV0tXZWJzaXRlRGF0YVN0bwogICAg
IHJldHVybiBXZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZSgq
V2ViS2l0Ojp0b0ltcGwoY29uZmlndXJhdGlvbiksIHNlc3Npb25JRCkubGVha1JlZigpKTsKIH0K
IAordm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS1dlYnNp
dGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKQoreworICAgIFdlYktpdDo6dG9JbXBsKGRhdGFTdG9y
ZSktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Cit9CisKIHZvaWQgV0tXZWJzaXRlRGF0YVN0
b3JlUmVtb3ZlSVRQRGF0YUZvckRvbWFpbihXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3Jl
UmVmLCBXS1N0cmluZ1JlZiBob3N0LCB2b2lkKiBjb250ZXh0LCBXS1dlYnNpdGVEYXRhU3RvcmVS
ZW1vdmVJVFBEYXRhRm9yRG9tYWluRnVuY3Rpb24gY2FsbGJhY2spCiB7CiAjaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKaW5kZXggZTc3ZDA5YzEwN2QxZGEwNzgz
ZDA5YzA3ZTI4MDNkMDg3MTI1ZTQ4Yi4uYzNmYTFiZjNmOTI0OGMyZmU0OWJlMTI0Mzk2NDQxMWY4
MzFkMmE2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmLmgKQEAgLTUwLDYgKzUwLDkgQEAgV0tfRVhQT1JUIHZvaWQgV0tX
ZWJzaXRlRGF0YVN0b3JlU2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0
aW5nKFcKIAogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlQ2xlYXJDYWNoZWRDcmVk
ZW50aWFscyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmKTsKIAorV0tfRVhQT1JU
IHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlQ2xlYXJDYWNoZWRDcmVkZW50aWFscyhXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKK1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9y
ZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUp
OworCiBXS19FWFBPUlQgYm9vbCBXS1dlYnNpdGVEYXRhU3RvcmVHZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZChXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmKTsKIFdLX0VY
UE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIGJvb2wgZW5hYmxlKTsKIHR5
cGVkZWYgdm9pZCAoKldLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3RpY3NFcGhlbWVyYWxGdW5jdGlv
bikoYm9vbCBpc0VwaGVtZXJhbCwgdm9pZCogZnVuY3Rpb25Db250ZXh0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KaW5kZXggZmYz
MDk0OTg2YzI0M2QwNDc0ZjI1MmQzOTFlNmNjYjc0ZjFmZWQ1Yi4uYTgwMmI5N2M3YjQxNmY5NmJi
YTU0ZmViZTdhMWRkZDQzODNkMGJmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KQEAgLTQwNiwyOCArNDA2LDYgQEAgc3RhdGlj
IE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhhc2hNYXA8
U3RyaW5nLCBIYXNoTWFwPFMKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyU3VwcG9ydGVkUGx1Z2lu
cygpOwogfQogCi0tICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcwotewotICAgIF9wcm9j
ZXNzUG9vbC0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0KLQotLSAodm9pZClfc2VuZE5l
dHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Ci17Ci0gICAgX3Byb2Nlc3NQb29sLT5z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7Ci19Ci0K
LS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9p
ZCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJv
Y2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VC
bG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lCi17
Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQog
LSAodm9pZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPnRl
cm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CkBAIC00MzUsMTIgKzQxMywxMiBAQCBzdGF0aWMgTlNE
aWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJp
bmcsIEhhc2hNYXA8UwogCiAtICh2b2lkKV9zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzOihCT09MKXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MKIHsKLSAgICBfcHJvY2Vz
c1Bvb2wtPnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2Vzcyk7CisgICAgV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KTsKIH0KIAogLSAocGlkX3QpX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcgogewotICAgIHJldHVy
biBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpOworICAgIHJldHVybiAw
OwogfQogCiAtIChwaWRfdClfcHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIKQEAgLTU2MCwxOCAr
NTM4LDYgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5
KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMKICAgICBfcHJvY2Vzc1Bvb2wtPnNldENv
b2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKGVuYWJsZWQpOwogfQogCi0tICh2b2lkKV9z
eW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQKLXsKLSAgICBfcHJvY2Vz
c1Bvb2wtPnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7Ci19Ci0KLS0gKHZv
aWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjooQk9PTClhbGxv
d3MKLXsKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgX3Byb2Nlc3NQb29sLT5zZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoYWxsb3dzKTsKLSNlbmRpZgot
fQotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIC0gKGlkIDxfV0tHZW9sb2NhdGlvbkNvcmVM
b2NhdGlvblByb3ZpZGVyPilfY29yZUxvY2F0aW9uUHJvdmlkZXIKIHsKQEAgLTYwNCwxMSArNTcw
LDYgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNv
bnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMKICAgICB9KTsKIH0KIAotLSAoQk9PTClfbmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1l
bnQKLXsKLSAgICByZXR1cm4gX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVt
ZW50Rm9yVGVzdGluZyhlbnRpdGxlbWVudCk7Ci19Ci0KIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50
Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJv
dGVjdGlvblNwYWNlCiB7CiAgICAgX3Byb2Nlc3NQb29sLT5jbGVhclBlcm1hbmVudENyZWRlbnRp
YWxzRm9yUHJvdGVjdGlvblNwYWNlKFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZShwcm90ZWN0aW9u
U3BhY2UpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgKaW5kZXggNjc2OTAxNWUwODU1ODk5NGNkOGEyMTlhMTdh
OWM2OGFkZTNiNTM4My4uYmY0OGNhMWM1MmMyMjE5NzM2OGI4ODI5MDUwNzIyM2YwZjIwNmNkMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bv
b2xQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJv
Y2Vzc1Bvb2xQcml2YXRlLmgKQEAgLTg3LDEwICs4Nyw2IEBACiAtIChfV0tEb3dubG9hZCAqKV9y
ZXN1bWVEb3dubG9hZEZyb21EYXRhOihOU0RhdGEgKilyZXN1bWVEYXRhIHdlYnNpdGVEYXRhU3Rv
cmU6KFdLV2Vic2l0ZURhdGFTdG9yZSAqKWRhdGFTdG9yZSAgcGF0aDooTlNTdHJpbmcgKilwYXRo
IG9yaWdpbmF0aW5nV2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBXS19BUElfQVZBSUxBQkxF
KG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCiAvLyBUZXN0IG9ubHkuIFNo
b3VsZCBiZSBjYWxsZWQgb25seSB3aGlsZSBubyB3ZWIgY29udGVudCBwcm9jZXNzZXMgYXJlIHJ1
bm5pbmcuCi0tICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1By
ZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKLS0gKHZvaWQpX3Nl
bmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE1KSwgaW9zKDEzLjApKTsKLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJl
c3VtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIC0gKHZvaWQp
X3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBp
b3MoMTIuMCkpOwogCiAvLyBUZXN0IG9ubHkuCkBAIC0xMjIsMTMgKzExOCwxMCBAQAogLSAodm9p
ZClfcHJlY29ubmVjdFRvU2VydmVyOihOU1VSTCAqKXNlcnZlclVSTCBXS19BUElfREVQUkVDQVRF
RF9XSVRIX1JFUExBQ0VNRU5UKCJXS1dlYlZpZXcuX3ByZWNvbm5lY3RUb1NlcnZlciIsIG1hY29z
KDEwLjEzLjQsIFdLX01BQ19UQkEpLCBpb3MoMTEuMywgV0tfSU9TX1RCQSkpOwogCiAvLyBUZXN0
IG9ubHkuCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXI6KEJPT0wpYWxsb3dzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4z
KSk7CiAtICh2b2lkKV9nZXRBY3RpdmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JUZXN0aW5n
OihwaWRfdClwaWQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNBcnJheTxOU1N0cmluZyAq
PiAqKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBp
b3MoMTIuMikpOwotLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rp
bmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40
KSwgaW9zKDEyLjIpKTsKIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90
ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVjdGlvblNwYWNlIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogCiBAcHJvcGVydHkgKG5vbmF0
b21pYywgZ2V0dGVyPV9pc0Nvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkLCBzZXR0ZXI9
X3NldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkOikgQk9PTCBfY29va2llU3RvcmFn
ZVBhcnRpdGlvbmluZ0VuYWJsZWQgV0tfQVBJX0RFUFJFQ0FURUQoIlBhcnRpdGlvbmVkIGNvb2tp
ZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQiLCBtYWNvcygxMC4xMi4zLCAxMC4xNC40KSwgaW9z
KDEwLjMsIDEyLjIpKTsKLS0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wp
YmFja2dyb3VuZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIAog
Ly8gVGVzdCBvbmx5LgogLSAodm9pZClfc2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0
aW5nV2l0aEZpcnN0UGFydHk6KE5TVVJMICopZmlyc3RQYXJ0eVVSTCB0aGlyZFBhcnR5OihOU1VS
TCAqKXRoaXJkUGFydHlVUkwgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb246KEJPT0wpc2hvdWxk
U2NoZWR1bGVOb3RpZmljYXRpb24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29t
cGxldGlvbkhhbmRsZXIgIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQppbmRleCAyOThkOWNlYzllODRkOGE1MTIyMDY1Y2M5
OTIzM2VmNGYwYjk1Mzg5Li5hZTljNDUwNzc5MDg2Y2MxZTMxMTRjZTEzZjJkMjE4OGU3ODdmMTRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRl
RGF0YVN0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YnNpdGVEYXRhU3RvcmUubW0KQEAgLTYxNyw2ICs2MTcsMTEgQEAgc3RhdGljIFZlY3RvcjxXZWJL
aXQ6OldlYnNpdGVEYXRhUmVjb3JkPiB0b1dlYnNpdGVEYXRhUmVjb3JkcyhOU0FycmF5ICpkYXRh
UmVjb3IKICAgICB9KTsKIH0KIAorLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVu
dEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQKK3sKKyAgICByZXR1cm4gX3dlYnNp
dGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGVudGl0
bGVtZW50KTsKK30KKwogLSAoaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4pX2RlbGVn
YXRlCiB7CiAgICAgcmV0dXJuIF9kZWxlZ2F0ZS5nZXQoKS5nZXQoKTsKQEAgLTY2OCw0ICs2NzMs
MzIgQEAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6OldlYnNpdGVEYXRhUmVjb3JkPiB0b1dlYnNpdGVE
YXRhUmVjb3JkcyhOU0FycmF5ICpkYXRhUmVjb3IKICNlbmRpZgogfQogCistICh2b2lkKV90ZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcworeworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT50ZXJtaW5hdGVO
ZXR3b3JrUHJvY2VzcygpOworfQorCistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJl
VG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgX3dlYnNp
dGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5n
KFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9KTsKK30KKworLSAodm9pZClfc2Vu
ZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Cit7CisgICAgX3dlYnNpdGVEYXRh
U3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rpbmco
KTsKKworfQorCistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUKK3sKKyAgICBf
d2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7Cit9CisKKy0g
KHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAoreworICAg
IF93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0JhY2tn
cm91bmQoYmFja2dyb3VuZCk7Cit9CisKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCmlu
ZGV4IDk5MzIwMTA0NmI1NTFjM2YyOGRmMmRjMGEwMzQ2ZDdiYzc5YWM1ZjQuLjQyMTVkYjc0N2Jh
MzIyZmFlYjhhNDdlMTY3NWE2NTgzODE0NzI2MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUu
aApAQCAtODUsOSArODUsMTcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dl
YnNpdGVEYXRhU3RvcmVGZXRjaE9wdGlvbnMpIHsKIAogLSAodm9pZClfcmVuYW1lT3JpZ2luOihO
U1VSTCAqKW9sZE5hbWUgdG86KE5TVVJMICopbmV3TmFtZSBmb3JEYXRhT2ZUeXBlczooTlNTZXQ8
TlNTdHJpbmcgKj4gKilkYXRhVHlwZXMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQp
KWNvbXBsZXRpb25IYW5kbGVyOwogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVt
ZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCiBAcHJvcGVydHkgKG51bGxhYmxl
LCBub25hdG9taWMsIHdlYWspIGlkIDxfV0tXZWJzaXRlRGF0YVN0b3JlRGVsZWdhdGU+IF9kZWxl
Z2F0ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3Vy
YXRpb24gKl9jb25maWd1cmF0aW9uOwogCistICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwor
LSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lk
KSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3N5bnRo
ZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZCBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCiBAZW5kCiAKIE5TX0FTU1VNRV9O
T05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0Q29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAppbmRleCAxZWU3M2ViYzBlYTAzNmY4NmIzZmU5NDQx
NDkwNzJlNmFjNGRjNzY3Li43NzAxNDk5ODM2ZWU0NGY5YWNmMGUyNzBkNzBjOTVkMTZiZTY3OGQ3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29r
aWVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRDb29raWVNYW5hZ2VyLmNwcApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIldlYktpdENvb2tpZU1hbmFnZXIuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtQ
cm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBl
LmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0
Q29va2llTWFuYWdlclByaXZhdGUuaCIKQEAgLTU2LDYgKzU3LDEyIEBAIGVudW0gewogfTsKIAog
c3RydWN0IF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSB7CisgICAgV2ViQ29va2llTWFuYWdl
clByb3h5JiBjb29raWVNYW5hZ2VyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChkYXRh
TWFuYWdlcik7CisgICAgICAgIHJldHVybiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRh
U3RvcmUoZGF0YU1hbmFnZXIpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAg
IH0KKwogICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoZGF0YU1hbmFnZXIpOwpAQCAtNjQsOCArNzEsNyBAQCBzdHJ1Y3QgX1dlYktpdENv
b2tpZU1hbmFnZXJQcml2YXRlIHsKIAogICAgIH5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUo
KQogICAgIHsKLSAgICAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVE
YXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhkYXRhTWFuYWdlcikpCi0gICAgICAgICAgICBwcm9j
ZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9i
c2VydmVyQ2FsbGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOworICAgICAgICBjb29raWVNYW5h
Z2VyKCkuc2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CiAg
ICAgfQogCiAgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuYWdlcjsKQEAgLTEz
OSwxMSArMTQ1LDkgQEAgV2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0Q29va2llTWFuYWdlckNy
ZWF0ZShXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW4KIHsKICAgICBXZWJLaXRDb29r
aWVNYW5hZ2VyKiBtYW5hZ2VyID0gV0VCS0lUX0NPT0tJRV9NQU5BR0VSKGdfb2JqZWN0X25ldyhX
RUJLSVRfVFlQRV9DT09LSUVfTUFOQUdFUiwgbnVsbHB0cikpOwogICAgIG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyID0gZGF0YU1hbmFnZXI7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6
IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5k
YXRhTWFuYWdlcikpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpLT5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYt
PnNlc3Npb25JRCgpLCBbbWFuYWdlcl0gewotICAgICAgICAgICAgZ19zaWduYWxfZW1pdChtYW5h
Z2VyLCBzaWduYWxzW0NIQU5HRURdLCAwKTsKLSAgICAgICAgfSk7Ci0gICAgfQorICAgIG1hbmFn
ZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFn
ZXItPnByaXYtPnNlc3Npb25JRCgpLCBbbWFuYWdlcl0geworICAgICAgICBnX3NpZ25hbF9lbWl0
KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOworICAgIH0pOwogICAgIHJldHVybiBtYW5h
Z2VyOwogfQogCkBAIC0xNzMsOCArMTc3LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJf
c2V0X3BlcnNpc3RlbnRfc3RvcmFnZShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLAogICAg
IGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQ
b29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQb29sLT5z
dXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llUGVyc2lzdGVudFN0
b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2ll
UGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0b3JhZ2UpKTsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29r
aWVNYW5hZ2VyKCkuc2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6
OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0
b3JhZ2UpKTsKIH0KIAogLyoqCkBAIC0xOTIsOCArMTk1LDcgQEAgdm9pZCB3ZWJraXRfY29va2ll
X21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3koV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwg
V2ViS2kKIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUiht
YW5hZ2VyKSk7CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5z
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB0b0hU
VFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0pOworICAgIG1hbmFnZXItPnBy
aXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7
IH0pOwogfQogCiAvKioKQEAgLTIyNCw3ICsyMjYsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFu
YWdlcl9nZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBHQ2Fu
YwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVt
ZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSht
YW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3Jl
OjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgeworICAgIG1hbmFnZXItPnByaXYtPmNv
b2tpZU1hbmFnZXIoKS5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNl
c3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNvcmU6OkhUVFBDb29raWVBY2Nl
cHRQb2xpY3kgcG9saWN5KSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5faW50KHRhc2suZ2V0KCks
IHRvV2ViS2l0Q29va2llQWNjZXB0UG9saWN5KHBvbGljeSkpOwogICAgIH0pOwogfQpAQCAtMjY5
LDExICsyNzEsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKFdlYktp
dENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIFNvdXBDb29raWUqCiAgICAgZ19yZXR1cm5faWZfZmFp
bChjb29raWUpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tf
bmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8v
IENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFz
ZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhl
bSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1
dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29s
cyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBw
bGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llcyhtYW5hZ2VyLT5wcml2
LT5zZXNzaW9uSUQoKSwgeyBXZWJDb3JlOjpDb29raWUoY29va2llKSB9LCBbdGFzayA9IFdURk1v
dmUodGFzayldKCkgeworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29r
aWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUp
IH0sIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9v
bGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KQEAgLTMyMCwxMSArMzE4LDcgQEAg
dm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMoV2ViS2l0Q29va2llTWFuYWdl
ciogbWFuYWdlciwgY29uc3QgZ2NoYXIKICAgICBnX3JldHVybl9pZl9mYWlsKHVyaSk7CiAKICAg
ICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2Fu
Y2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVh
ZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJk
bGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3Qg
dXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xz
ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpLT5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBV
UkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0o
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKKyAgICBtYW5hZ2VyLT5w
cml2LT5jb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQo
KSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUodGFz
ayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSB7CiAgICAgICAgIEdM
aXN0KiBjb29raWVzTGlzdCA9IG51bGxwdHI7CiAgICAgICAgIGZvciAoYXV0byYgY29va2llIDog
Y29va2llcykKICAgICAgICAgICAgIGNvb2tpZXNMaXN0ID0gZ19saXN0X3ByZXBlbmQoY29va2ll
c0xpc3QsIGNvb2tpZS50b1NvdXBDb29raWUoKSk7CkBAIC0zNzgsMTEgKzM3Miw3IEBAIHZvaWQg
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUoV2ViS2l0Q29va2llTWFuYWdlciog
bWFuYWdlciwgU291cENvb2tpCiAgICAgZ19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAgICAg
R1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNl
bGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQv
d3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxl
c3MKLSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVz
ZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9
IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5k
YXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKS0+ZGVsZXRlQ29va2llKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBX
ZWJDb3JlOjpDb29raWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKKyAgICBt
YW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuZGVsZXRlQ29va2llKG1hbmFnZXItPnByaXYt
PnNlc3Npb25JRCgpLCBXZWJDb3JlOjpDb29raWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3ZlKHRh
c2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUp
OwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRXZWJDb250ZXh0LmNwcAppbmRleCA4OWJlNTZhZDcxZDcxNTY5MTJhMjY5MTUzMDU3
ZGY1MjdjZGQ0NDYwLi5iN2VkODgyYjNhZTVkZTVkYTc1ODI3OThkMWI2NDJjMWFkYmEyOTY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJD
b250ZXh0LmNwcApAQCAtNDA0LDcgKzQwNCw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNvbnRl
eHRDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIHByaXYtPndlYnNpdGVEYXRh
TWFuYWdlciA9IGFkb3B0R1JlZih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3KCJsb2Nh
bC1zdG9yYWdlLWRpcmVjdG9yeSIsIHByaXYtPmxvY2FsU3RvcmFnZURpcmVjdG9yeS5kYXRhKCks
IG51bGxwdHIpKTsKIAogICAgIHByaXYtPnByb2Nlc3NQb29sID0gV2ViUHJvY2Vzc1Bvb2w6OmNy
ZWF0ZShjb25maWd1cmF0aW9uKTsKLSAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0UHJpbWFyeURh
dGFTdG9yZSh3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUocHJpdi0+d2Vic2l0
ZURhdGFNYW5hZ2VyLmdldCgpKSk7CiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFVzZXJNZXNz
YWdlSGFuZGxlcihbd2ViQ29udGV4dF0oVXNlck1lc3NhZ2UmJiBtZXNzYWdlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFVzZXJNZXNzYWdlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAg
ICAgIC8vIFNpbmsgdGhlIGZsb2F0aW5nIHJlZi4KICAgICAgICAgR1JlZlB0cjxXZWJLaXRVc2Vy
TWVzc2FnZT4gdXNlck1lc3NhZ2UgPSB3ZWJraXRVc2VyTWVzc2FnZUNyZWF0ZShXVEZNb3ZlKG1l
c3NhZ2UpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3Bw
CmluZGV4IDRhYjQ3ZmZmNTkxMWVlYzM3ZTU2YmM1YmJiMzI5ZWJhZWE3ZDM4NjUuLjMwMDZmNGZh
ZTZjNDNjMjZiZjQwODIyYjZkZTg2OGVmMmUwMmNmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3Bw
CkBAIC0xMzkyLDggKzEzOTIsOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5n
bGVDb29raWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbgogCiAgICAgY29v
a2llLmh0dHBPbmx5ID0gKmh0dHBPbmx5OwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBj
b29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0
YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CisgICAgV2Vi
Q29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9y
ZSgpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIu
c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2ll
IH0sIFtjYWxsYmFja10oKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAg
IH0pOwogfQpAQCAtMTQwOSw4ICsxNDA5LDggQEAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygKIAog
ICAgIFN0cmluZyBob3N0ID0gYWN0aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2Vi
Q29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxl
bWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCks
IHsgaG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBX
ZWJDb29raWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0YVN0
b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdl
ci5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNz
aW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0p
OwogCiAgICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4
aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKaW5kZXggNDFjMGEwZmJmNTA2ZWZhMTQwOGJjZWY5YWY4YTkw
Yjg1YTFhZDA4YS4uNGYzOThiNTMwZjYwODU3NWM5NjdiODNjNzRmYTJmNDMyOGY2Y2UzYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKQEAg
LTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94
eSgpOwogCiAgICAgdm9pZCBjb25uZWN0KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdGVybWluYXRlKCk7CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXIm
IHRocm90dGxlcigpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAppbmRl
eCBkYmU0NGY5NTk0MTA1MTEyMTUxMjhkMjlkMjE0ZWVlMDc0YWFmODRjLi4zYzQyODcyZTE1ZTAz
ZjVhZTYxMzNiYzVhOTJhYzJhYzgxODNkZjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQuaApAQCAtNDAsMTIgKzQwLDE1IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTsKIAorLy8gRklYTUU6IEN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCBpcyB1bm5lZWRlZCBub3cuCisvLyBUaGlzIGlzIGp1c3QgYSBsZWZ0
b3ZlciBvbiBDb2NvYSBwbGF0Zm9ybXMgd2UgYXJlIHRyeWluZyB0byBtb3ZlIGF3YXkgZnJvbSBh
bmQgZG9lcyBub3QgbmVlZCBhbiBBUEkgYWJzdHJhY3Rpb24uCiBjbGFzcyBMZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQgZmluYWwgOiBwdWJsaWMgQVBJOjpDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQgewotcHJpdmF0ZToKK3B1YmxpYzoKKyAgICBzdGF0aWMgTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBzaW5nbGV0b24oKTsKICAgICB2b2lkIHN0YXJ0TG9hZGlu
ZyhMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYsIExlZ2FjeUN1c3RvbVByb3RvY29s
SUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGZpbmFsOwogICAgIHZvaWQgc3Rv
cExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkmLCBMZWdhY3lDdXN0b21Q
cm90b2NvbElEKSBmaW5hbDsKICAgICB2b2lkIGludmFsaWRhdGUoTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHkmKSBmaW5hbDsKLQorcHJpdmF0ZToKICAgICBIYXNoTWFwPExlZ2FjeUN1
c3RvbVByb3RvY29sSUQsIFJldGFpblB0cjxXS0N1c3RvbVByb3RvY29sTG9hZGVyPj4gbV9sb2Fk
ZXJNYXA7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9M
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQubW0KaW5kZXggMTUx
MjI5MDQ1ZjEzZTljZGRiZTA5MWU2MjdiZmExZmUyMDZkZTI4OS4uMTRkMGI2YmQxZDZlNTU1OWVj
N2U2YjFhMmZiYTgzMWJiMzdhYjdiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dC5tbQpAQCAtMTM5LDYgKzEzOSwxMiBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAorTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ6OnNpbmdsZXRvbigpCit7CisgICAgTmV2ZXJE
ZXN0cm95ZWQ8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBjbGllbnQ7CisgICAg
cmV0dXJuIGNsaWVudDsKK30KKwogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQ6OnN0YXJ0TG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYgbWFuYWdl
ciwgV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1c3RvbVByb3RvY29sSUQsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgY29yZVJlcXVlc3QpCiB7CiAgICAgTlNVUkxSZXF1ZXN0ICpyZXF1
ZXN0ID0gY29yZVJlcXVlc3QubnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05v
dFVwZGF0ZUhUVFBCb2R5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4IDc2ZDdhNjQwNDFhMjkxZDVmMjk3MzUxNzZl
MzFlYTcwZjVlZDU1NmMuLjEzNjcwZTJkODBiMDE4NDcwMzVjMTlkZjg5MjExZmM3NTU1NmM2Njgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29s
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bv
b2xDb2NvYS5tbQpAQCAtMTM0LDggKzEzNCw5IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRl
ZmF1bHRzSWZOZWVkZWQoKQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3Vw
cHJlc3Npb25TdGF0ZSgpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1cHBy
ZXNzaW9uRW5hYmxlZCgpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURh
dGFTdG9yZShbZW5hYmxlZCA9IHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKV0gKFdlYnNpdGVE
YXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3Mo
KS5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGVuYWJsZWQpOworICAgIH0pOwogCiAjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lv
bkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkKQEAgLTE2Niw4ICsxNjcsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogICAgIGlmICghW1tOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIldlYktpdFN1cHByZXNz
TWVtb3J5UHJlc3N1cmVIYW5kbGVyIl0pCiAgICAgICAgIGluc3RhbGxNZW1vcnlQcmVzc3VyZUhh
bmRsZXIoKTsKIAotICAgIHNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtl
VW5pcXVlPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSk7Ci0KICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgaWYgKCFfTUdD
YWNoZVZhbGlkKCkpIHsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2Jh
bF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsKQEAgLTQ5Mywy
MiArNDkyLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKIAogICAgIE5TVXNlckRlZmF1bHRz
ICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CiAKLSAg
ICB7Ci0gICAgICAgIGJvb2wgaXNTYWZhcmkgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc01pbmlC
cm93c2VyID0gZmFsc2U7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaXNTYWZh
cmkgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNNb2JpbGVTYWZhcmkoKTsKLSAgICAgICAg
aXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7
Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBw
bGljYXRpb246OmlzU2FmYXJpKCk7Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpN
YWNBcHBsaWNhdGlvbjo6aXNNaW5pQnJvd3NlcigpOwotI2VuZGlmCi0gICAgICAgIGlmIChpc1Nh
ZmFyaSB8fCBpc01pbmlCcm93c2VyKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwUHJveHkgPSBV
UkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQ
cm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwc1Byb3h5ID0gVVJMKFVS
TCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5
RGVmYXVsdHNLZXldKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHBhcmFtZXRlcnMubmV0d29y
a0FUU0NvbnRleHQgPSBhZG9wdENGKF9DRk5ldHdvcmtDb3B5QVRTQ29udGV4dCgpKTsKIAogICAg
IHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVs
dHMgYm9vbEZvcktleTpXZWJLaXRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlckRlZmF1bHRz
S2V5XTsKQEAgLTUyMiwxMiArNTA1LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1J
bml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKICAgICBO
U051bWJlciAqZGF0YWJhc2VFbmFibGVkVmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5j
ZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1d
OwogICAgIGlmIChkYXRhYmFzZUVuYWJsZWRWYWx1ZSkKICAgICAgICAgcGFyYW1ldGVycy5zaG91
bGRFbmFibGVJVFBEYXRhYmFzZSA9IGRhdGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAg
ICBlbHNlCi0gICAgICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBtX2Rl
ZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsKIAog
ICAgIHBhcmFtZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2RlZmF1
bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50YWwl
QCIsIFdlYlByZWZlcmVuY2VzS2V5OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVk
S2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwotCi0gICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVz
dGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJz
aXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRm
b3JtSW52YWxpZGF0ZUNvbnRleHQoKQpAQCAtNjA2LDExICs1ODUsNiBAQCBib29sIFdlYlByb2Nl
c3NQb29sOjpwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gIW1f
dXNlck9ic2VydmFibGVQYWdlQ291bnRlci52YWx1ZSgpICYmICFtX3Byb2Nlc3NTdXBwcmVzc2lv
bkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKTsKIH0KIAotYm9vbCBXZWJQcm9jZXNzUG9v
bDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBl
bnRpdGxlbWVudCkKLXsKLSAgICByZXR1cm4gV1RGOjpoYXNFbnRpdGxlbWVudChlbnN1cmVOZXR3
b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51
dGY4KCkuZGF0YSgpKTsKLX0KLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9S
TShNQUNDQVRBTFlTVCkKIGZsb2F0IFdlYlByb2Nlc3NQb29sOjpkaXNwbGF5QnJpZ2h0bmVzcygp
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQ
cm94eS5jcHAKaW5kZXggYzVkZTRlN2QwZjU5MTk0ZjQzYTAyM2IwODllMzcyYzU4Y2Y4ZWUwNi4u
ZjdjZmY4NTJmMGJhNmQwMTU1MTE2NWRkOGE5ZjdkNTc2M2IwMDdkMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcApAQCAtNzUs
OCArNzUsOCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmNhbmNlbCgpCiAgICAgaWYgKCFtX3Byb2Nl
c3NQb29sKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoTmV0d29ya1Byb2Nlc3NQcm94eSog
bmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERv
d25sb2FkKG1fZG93bmxvYWRJRCksIDApOworICAgIGlmIChtX2RhdGFTdG9yZSkKKyAgICAgICAg
bV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOwogfQogCiB2b2lkIERvd25sb2Fk
UHJveHk6OmludmFsaWRhdGUoKQpAQCAtMTAzLDE1ICsxMDMsMTMgQEAgV2ViUGFnZVByb3h5KiBE
b3dubG9hZFByb3h5OjpvcmlnaW5hdGluZ1BhZ2UoKSBjb25zdAogI2lmIFBMQVRGT1JNKENPQ09B
KQogdm9pZCBEb3dubG9hZFByb3h5OjpwdWJsaXNoUHJvZ3Jlc3MoY29uc3QgVVJMJiBVUkwpCiB7
Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgIGlmICghbV9kYXRhU3RvcmUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhh
bmRsZTsKLSAgICAgICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lv
bjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0
ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbik7Ci0gICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERvd25s
b2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwotICAgIH0KKyAgICBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOworICAgIGJvb2wgY3JlYXRlZFNhbmRib3hF
eHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1Q
YXRoKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgaGFuZGxlKTsKKyAgICBB
U1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJveEV4dGVu
c2lvbik7CisgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKG1fZG93bmxvYWRJRCwgVVJM
LCBoYW5kbGUpLCAwKTsKIH0KICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKIApAQCAtMTMxLDEx
ICsxMjksMTAgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRTdGFydChjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2UKIAogdm9pZCBEb3dubG9hZFByb3h5
OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmJiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgdWludDY0X3QgY2hhbGxlbmdlSUQpCiB7Ci0g
ICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgIGlmICghbV9wcm9jZXNzUG9vbCB8fCAhbV9kYXRh
U3RvcmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gYXV0aGVudGljYXRpb25DaGFsbGVu
Z2VQcm94eSA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk6OmNyZWF0ZShXVEZNb3ZlKGF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgY2hhbGxlbmdlSUQsIG1ha2VSZWYoKm1fcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpKSwgbnVsbHB0cik7Ci0KKyAgICBhdXRv
IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVBy
b3h5OjpjcmVhdGUoV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlE
LCBtYWtlUmVmKCptX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCkpLCBu
dWxscHRyKTsKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSgqdGhpcywgYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94
eS5nZXQoKSk7CiB9CiAKQEAgLTE0NiwxNSArMTQzLDEwIEBAIHZvaWQgRG93bmxvYWRQcm94eTo6
d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmIHByb3Bvc2VkUmVxdWVzdCwgY29uc3Qg
UmVzCiAKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLndpbGxTZW5kUmVxdWVz
dCgqdGhpcywgV1RGTW92ZShwcm9wb3NlZFJlcXVlc3QpLCByZWRpcmVjdFJlc3BvbnNlLCBbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXShSZXNvdXJjZVJlcXVlc3QmJiBuZXdS
ZXF1ZXN0KSB7CiAgICAgICAgIG1fcmVkaXJlY3RDaGFpbi5hcHBlbmQobmV3UmVxdWVzdC51cmwo
KSk7Ci0KLSAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sKQorICAgICAg
ICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fZGF0YVN0b3JlKQogICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRUaGlzLT5tX3By
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpOwotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNz
UHJveHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3NQcm94
eS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0
KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOworICAgICAgICBh
dXRvJiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVjdGVkVGhpcy0+bV9kYXRhU3RvcmUtPm5l
dHdvcmtQcm9jZXNzKCk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzUHJveHkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMt
Pm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOwogICAgIH0pOwogfQogCkBAIC0xNzksMTYg
KzE3MSwxNCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dl
c3RlZEZpbGVuYW1lQXN5bmMoRG93bmxvYWRJRCBkb3dubAogICAgIGlmICghbV9wcm9jZXNzUG9v
bCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xp
ZW50KCkuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJlc291
cmNlUmVzcG9uc2VCYXNlOjpzYW5pdGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVu
YW1lKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxvYWRJRCA9
IGRvd25sb2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3Rp
bmF0aW9uKSB7CisgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0
aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6
OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBkb3dubG9hZElEXSAoQWxsb3dPdmVyd3JpdGUg
YWxsb3dPdmVyd3JpdGUsIFN0cmluZyBkZXN0aW5hdGlvbikgewogICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZTsKICAgICAgICAgaWYgKCFkZXN0
aW5hdGlvbi5pc051bGwoKSkKICAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZShkZXN0aW5hdGlvbiwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAg
ICAgIGlmICghbV9kYXRhU3RvcmUpCiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElELCBk
ZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxs
b3dPdmVyd3JpdGU6OlllcyksIDApOworICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5kaW5n
RG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVu
c2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDApOwog
ICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRQcm94eU1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKaW5kZXggNzZhMDcxNTdiNTkxYWFjZTUwZjE1ZDE1MjVk
YmNmYjhjNmE0YmJjOC4uZDc0YThmYTZjNjRjODg2MzVmOWViNzVjYTczZTcwZmQ5NDZjYTAyYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJv
eHlNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmNwcApAQCAtNDQsNyArNDQsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIERv
d25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlNYXAoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJv
Y2VzcykKLSAgICA6IG1fcHJvY2VzcyhtYWtlV2Vha1B0cihwcm9jZXNzKSkKKyAgICA6IG1fcHJv
Y2Vzcyhwcm9jZXNzKQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICwgbV9zaG91bGRUYWtlQXNz
ZXJ0aW9uKFdURjo6cHJvY2Vzc0hhc0VudGl0bGVtZW50KCJjb20uYXBwbGUubXVsdGl0YXNraW5n
LnN5c3RlbWFwcGFzc2VydGlvbnMiKSkKICNlbmRpZgpAQCAtNzAsMTQgKzcwLDEyIEBAIHZvaWQg
RG93bmxvYWRQcm94eU1hcDo6cGxhdGZvcm1EZXN0cm95KCkKIAogdm9pZCBEb3dubG9hZFByb3h5
TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2Vz
cykKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBw
bGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7CisgICAgbV9wcm9jZXNzLnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpLCAw
KTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbldpbGxFbnRlckZvcmVn
cm91bmQoKQogewotICAgIGlmIChtX3Byb2Nlc3MpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgp
LCAwKTsKKyAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxp
Y2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKIH0KIAogRG93bmxvYWRQcm94eSYgRG93
bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRh
U3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5m
bywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCkBAIC05MiwxMyArOTAsMTIgQEAgRG93
bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRl
RGF0YVN0b3JlJiBkYXRhU3RvcmUKICAgICAgICAgbV9kb3dubG9hZFVJQXNzZXJ0aW9uID0gbWFr
ZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihnZXRDdXJyZW50UHJvY2Vzc0lEKCksICJXZWJLaXQg
ZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7
CiAKICAgICAgICAgQVNTRVJUKCFtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbik7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1fcHJvY2Vzcyk7Ci0gICAgICAgIG1fZG93bmxvYWROZXR3b3Jr
aW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3Byb2Nlc3MtPnBy
b2Nlc3NJZGVudGlmaWVyKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9u
VHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CisgICAgICAgIG1fZG93bmxvYWROZXR3b3JraW5n
QXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3Byb2Nlc3MucHJvY2Vz
c0lkZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBl
OjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAogICAgICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3Vz
cGVuc2lvbiwgIlVJUHJvY2VzcyB0b29rICdXZWJLaXQgZG93bmxvYWRzJyBhc3NlcnRpb25zIGZv
ciBVSVByb2Nlc3MgYW5kIE5ldHdvcmtQcm9jZXNzIik7CiAgICAgfQogCi0gICAgbV9wcm9jZXNz
LT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSwgZG93
bmxvYWRQcm94eS5nZXQoKSk7CisgICAgbV9wcm9jZXNzLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZFByb3h5
LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsKIAogICAg
IHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTA5LDEyICsxMDYsOSBAQCB2b2lkIERvd25s
b2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQoRG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94
eSkKIAogICAgIFJFTEVBU0VfTE9HKExvYWRpbmcsICJSZW1vdmluZyBkb3dubG9hZCAlIiBQUkl1
NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIiwgZG93bmxvYWRJRC5kb3dubG9h
ZElEKCkpOwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJveHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxh
c3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCi0gICAgYXV0byBwcm90ZWN0ZWRQcm9j
ZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsKLQogICAgIEFT
U0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CiAKLSAgICBtX3Byb2Nlc3Mt
PnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CisgICAgbV9wcm9jZXNzLnJl
bW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CiAgICAgZG93bmxvYWRQcm94eS5p
bnZhbGlkYXRlKCk7CiAgICAgbV9kb3dubG9hZHMucmVtb3ZlKGRvd25sb2FkSUQpOwogCkBAIC0x
MzMsMTUgKzEyNywxMyBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmludmFsaWRhdGUoKQogICAg
IGZvciAoY29uc3QgYXV0byYgZG93bmxvYWQgOiBtX2Rvd25sb2Fkcy52YWx1ZXMoKSkgewogICAg
ICAgICBkb3dubG9hZC0+cHJvY2Vzc0RpZENsb3NlKCk7CiAgICAgICAgIGRvd25sb2FkLT5pbnZh
bGlkYXRlKCk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkLT5kb3du
bG9hZElEKCkuZG93bmxvYWRJRCgpKTsKKyAgICAgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBk
b3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7CiAgICAgfQogCiAgICAgbV9kb3du
bG9hZHMuY2xlYXIoKTsKICAgICBtX2Rvd25sb2FkVUlBc3NlcnRpb24gPSBudWxscHRyOwogICAg
IG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbnVsbHB0cjsKICAgICBSRUxFQVNFX0xP
RyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIGludmFsaWRh
dGVkIC0gUmVsZWFzZWQgJ1dlYktpdCBkb3dubG9hZHMnIGFzc2VydGlvbnMgZm9yIFVJUHJvY2Vz
cyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKLQotICAgIG1fcHJvY2VzcyA9IG51bGxwdHI7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKaW5kZXggM2JlMjA3OWEwZjJjNGI1MzcwNjJj
ZTEzMDBlMWNkNWRhNDQ0ZmZiZS4uNGZhMDAxYmQ3ZmFlMWNlZDAyNGQyYjkxZjIwMTcwZmY5OTQ1
MjhiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkUHJveHlNYXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRQcm94eU1hcC5oCkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0
Zm9ybUNyZWF0ZSgpOwogICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBXZWFrUHRy
PE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fcHJvY2VzczsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
JiBtX3Byb2Nlc3M7CiAgICAgSGFzaE1hcDxEb3dubG9hZElELCBSZWZQdHI8RG93bmxvYWRQcm94
eT4+IG1fZG93bmxvYWRzOwogCiAgICAgYm9vbCBtX3Nob3VsZFRha2VBc3NlcnRpb24geyBmYWxz
ZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Q
cm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDhjMjNiYmU4YzA2YTE1OTljYjliOTE2YTBiMzJhZmIz
Nzc4M2YzMDUuLjIwNzRiNmM2M2EyMDJmNmI3NjQ3YWM2YWM4ZDU5ZTlmZGI1OTA3ZjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eS5jcHAKQEAgLTQ0LDE3ICs0NCwyOCBAQCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6fkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5KCkKIAogdm9pZCBMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVBy
b3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0KQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJv
dG9jb2xJRCwgcmVxdWVzdCk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50OjpzaW5nbGV0b24oKS5zdGFydExvYWRpbmcoKnRoaXMsIGN1
c3RvbVByb3RvY29sSUQsIHJlcXVlc3QpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY3VzdG9t
UHJvdG9jb2xJRCk7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworI2VuZGlmCiB9CiAKIHZv
aWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1
c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNz
UHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9h
ZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OjpzaW5nbGV0b24oKS5zdG9wTG9hZGlu
ZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjdXN0
b21Qcm90b2NvbElEKTsKKyNlbmRpZgogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJv
Y2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5pbnZhbGlkYXRlKCp0aGlz
KTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ6OnNpbmdsZXRvbigpLmludmFsaWRhdGUoKnRoaXMpOworI2VuZGlmCiB9CiAKIHZvaWQg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3Qo
TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
IHJlZGlyZWN0UmVzcG9uc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBjMWY0NzA4YjgxY2ZhNTNhYjEy
MmMyOTQ0Njc1ZTc4MjUxNjcxMjFmLi40NWQ5NjZjM2U0YjBhNDBmZDY3ODk4NGY5OGI5OGYyNTc5
MWYxYzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkxlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNlbmRpZgorI2luY2x1ZGUgIkxlZ2Fj
eUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdv
cmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC00OCw2ICs0OSw3IEBACiAjaW5jbHVkZSAiU2hvdWxk
R3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5o
IgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmgiCisjaW5jbHVkZSAiV2Vi
Q29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCkBA
IC02MCw2ICs2Miw3IEBACiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZUNsaWVudC5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpc3Ry
YWJsZURvbWFpbi5oPgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KICNpbmNs
dWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KIAogI2lmIEVOQUJMRShTRUNfSVRFTV9TSElN
KQpAQCAtNzAsMjAgKzczLDEwMCBAQAogI2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5o
PgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJMZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQuaCIKKyNlbmRpZgorCiAjZGVmaW5lIE1FU1NBR0VfQ0hFQ0so
YXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0aW9uLCBjb25uZWN0aW9uKCkpCiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLU5ldHdvcmtQ
cm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQ
b29sKQotICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KHByb2Nlc3NQb29sLmFsd2F5c1J1bnNB
dEJhY2tncm91bmRQcmlvcml0eSgpKQotICAgICwgbV9wcm9jZXNzUG9vbChwcm9jZXNzUG9vbCkK
K3N0YXRpYyBIYXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkqPiYgbmV0d29ya1Byb2Nlc3Nlc1Nl
dCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkqPj4gc2V0OworICAg
IHJldHVybiBzZXQ7Cit9CisKK1ZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IE5ldHdv
cmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKQoreworICAgIFZlY3RvcjxSZWY8
TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICBwcm9jZXNzZXMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzIDogbmV0d29ya1Byb2Nlc3Nlc1NldCgpKQorICAgICAgICBwcm9j
ZXNzZXMudW5jaGVja2VkQXBwZW5kKCpuZXR3b3JrUHJvY2Vzcyk7CisgICAgcmV0dXJuIHByb2Nl
c3NlczsKK30KKworCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpCit7Cisg
ICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Ojp0ZXJtaW5hdGUoKTsKK30KKwordm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCkKK3sKKyAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0
ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWlu
IHRocmVhZHMuCisgICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0
aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91ciBBUElzLgorICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYuCisgICAgaWYgKCFSdW5Mb29wOjpp
c01haW4oKSkgeworICAgICAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXNdIHsKKyAg
ICAgICAgICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICAgICAg
fSk7CisgICAgfQorCisgICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1l
dGVyczsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5
VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lz
dGVyQXNTZWN1cmUoKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlw
YXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNl
Y3VyaXR5UG9saWN5KCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xv
Y2FsID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hl
bWVzVG9SZWdpc3RlckFzTG9jYWwoKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0
ZXJlZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKKyAgICBwYXJhbWV0ZXJzLmNh
Y2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgp
OworICAgIGZvciAoYXV0byYgc2NoZW1lIDogV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRo
Q3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQorICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNS
ZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOworI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCisgICAgaWYgKFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2Vi
UHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsgIWNvb2tpZVN0b3JhZ2VEaXJl
Y3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5j
b29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIGNv
bnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVz
RGlyZWN0b3J5KCk7ICFjb250YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29u
dGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7CisgICAgaWYgKFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3Rvcnkg
PSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7ICFwYXJlbnRCdW5kbGVE
aXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25s
eSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworI2Vu
ZGlmCisgICAgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
KHBhcmFtZXRlcnMpOworICAgIHBhcmFtZXRlcnMuZGF0YVN0b3JlUGFyYW1ldGVycyA9IFdlYnNp
dGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKCk7CisgICAgc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKSwg
MCk7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3Vu
ZFByaW9yaXR5KCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bv
b2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+YWx3YXlz
UnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbFNo
b3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKQoreworICAgIGZvciAoYXV0byogcHJvY2Vz
c1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYg
KHByb2Nlc3NQb29sLT5zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KCkKKyAgICA6IEF1eGlsaWFyeVByb2Nl
c3NQcm94eShhbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQog
I2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCiAgICAgLCBtX2N1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5KCp0aGlzKQogI2VuZGlmCi0gICAgLCBtX3Rocm90dGxlcigq
dGhpcywgcHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAg
ICwgbV90aHJvdHRsZXIoKnRoaXMsIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3Vu
ZEFzc2VydGlvbigpKQorICAgICwgbV9jb29raWVNYW5hZ2VyKFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6Y3JlYXRlKCp0aGlzKSkKIHsKICAgICBjb25uZWN0KCk7CisgICAgc2VuZENyZWF0aW9uUGFy
YW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5hZGQodGhp
cyk7CiB9CiAKIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1Byb3h5KCkKQEAg
LTk4LDYgKzE4MSw3IEBAIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1Byb3h5
KCkKIAogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94
eU1hcC0+aW52YWxpZGF0ZSgpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5yZW1vdmUodGhp
cyk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhQcm9j
ZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMpCkBAIC0xMDUsMTUgKzE4
OSwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vz
c0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuYwogICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vz
c1R5cGUgPSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOwogICAgIEF1eGls
aWFyeVByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zKTsKIAotICAg
IGlmIChwcm9jZXNzUG9vbCgpLnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWls
Rm9yVGVzdGluZygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sKCkuc2V0U2hvdWxkTWFrZU5leHRO
ZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKLSAgICAgICAgbGF1bmNo
T3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKKyAg
ICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29s
cygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkTWFrZU5leHROZXR3b3JrUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgIHByb2Nlc3NQb29sLT5z
ZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoZmFsc2Up
OworICAgICAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxG
b3JUZXN0aW5nID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KLQotI2lmIFBMQVRGT1JNKFBMQVlT
VEFUSU9OKQotICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1BhdGggPSBtX3Byb2Nlc3NQb29sLm5l
dHdvcmtQcm9jZXNzUGF0aCgpOwotICAgIGxhdW5jaE9wdGlvbnMudXNlcklkID0gbV9wcm9jZXNz
UG9vbC51c2VySWQoKTsKLSNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNv
bm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCkBAIC0xNjYsMTIg
KzI0NywxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnN5bnRoZXNpemVBcHBJc0JhY2tn
cm91bmQoYm9vbCBiYWNrZ3JvdW5kKQogICAgIH0KIH0KIAotRG93bmxvYWRQcm94eSYgTmV0d29y
a1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRh
U3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFt
ZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQorRG93
bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJz
aXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEm
IGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAgICAgaWYgKCFt
X2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1ha2VVbmlx
dWU8RG93bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxvYWRQcm94
eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2wsIHJlc291
cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVybiBtX2Rv
d25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBwcm9jZXNzUG9v
bCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0
PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCAoV2Vic2l0ZURhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjM3LDggKzMxOCw4
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCkKIHsK
ICAgICBjbGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKLSAgICAvLyBUZWxsIHRoZSBuZXR3b3JrIHBy
b2Nlc3MgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgdGhpcyBuZXR3b3JrIHByb2Nlc3MgcHJveHku
IFRoaXMgd2lsbCBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgotICAgIG1fcHJvY2Vzc1Bvb2wubmV0
d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDog
V2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpjbGVhckNhbGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICszMzksNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgSVBDOjpEZQogICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rl
cikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Byb2Nlc3NQb29sLmRpc3BhdGNoTWVz
c2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZGlkUmVj
ZWl2ZU5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQog
CkBAIC0yNzQsOCArMzUyLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZl
U3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEMKIAogdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewotICAgIGF1dG8g
cHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmKG1fcHJvY2Vzc1Bvb2wpOwotCiAgICAgaWYg
KG1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5pbnZhbGlk
YXRlKCk7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKQEAgLTMz
MSwxMSArNDA3LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2kKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nlc3NQb29sLmlzU2VydmljZVdv
cmtlclBhZ2VJRChwYWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShzZXNzaW9uSUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6Zm9yTW9zdFZpc2libGVXZWJQ
YWdlSWZBbnkoc2Vzc2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vh
a1B0cih0aGlzKSwgc2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IFdURk1vdmUo
YXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVnYWN5VExTXShhdXRvKiBwYWdl
KSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTM5MiwxMSArNDYzLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hM
YXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBDOjpDb24KICAgICAgICAgbmV0
d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5wcm9jZXNzU3VwcHJlc3Npb25FbmFi
bGVkKCkpCi0gICAgICAgIHNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1ZSk7Ci0jZW5k
aWYKICAgICAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICh4cGNfY29ubmVjdGlv
bl90IGNvbm5lY3Rpb24gPSB0aGlzLT5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSkKQEAg
LTEyMDUsNyArMTI3MSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0VGhpcmRQYXJ0
eUNOQU1FRG9tYWluRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzCiB9CiB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsKLSAgICBwcm9jZXNzUG9vbCgp
LnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKFdURk1vdmUoZG9tYWlucykpOworICAgIGZv
ciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkp
CisgICAgICAgIHByb2Nlc3NQb29sLT5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNo
U2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiB7IGRvbWFpbnMgfSk7CiB9CiAjZW5kaWYg
Ly8gRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIApAQCAtMTI1MiwxNiArMTMxOSwx
NiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNl
c3Npb25JRCYgc2Vzc2lvbklELCBDb21wbGV0aQogICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkZsdXNoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vz
c2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9yZSkKIHsKLSAgICBtX3Nlc3Np
b25JRHMuYWRkKHN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgbV9zZXNzaW9uSURzLmFkZChzdG9y
ZS5zZXNzaW9uSUQoKSk7CiAKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS0+
cGFyYW1ldGVycygpIH0sIDApOwotICAgIGF1dG8gc2Vzc2lvbklEID0gc3RvcmUtPnNlc3Npb25J
RCgpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWRkV2Vic2l0ZURh
dGFTdG9yZSB7IHN0b3JlLnBhcmFtZXRlcnMoKSB9LCAwKTsKKyAgICBhdXRvIHNlc3Npb25JRCA9
IHN0b3JlLnNlc3Npb25JRCgpOwogICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpIHsK
ICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAgICAgY3JlYXRlU3ltTGlua0ZvckZp
bGVVcGdyYWRlKHN0b3JlLT5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsKKyAg
ICAgICAgY3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHN0b3JlLnJlc29sdmVkSW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5KCkpOwogI2VuZGlmCiAgICAgfQogfQpAQCAtMTI4MSwxNiArMTM0OCw3
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCiAKIFdlYnNpdGVEYXRhU3RvcmUqIE5ldHdvcmtQcm9jZXNzUHJveHk6Ondl
YnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsK
LSAgICBpZiAoc2Vzc2lvbklEID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkp
IHsKLSAgICAgICAgaWYgKCFXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3Rz
KCkpIHsKLSAgICAgICAgICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBtX3Byb2Nlc3NQb29s
LndlYnNpdGVEYXRhU3RvcmUoKTsKLSAgICAgICAgICAgIGlmICh3ZWJzaXRlRGF0YVN0b3JlICYm
IHdlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IHNlc3Npb25JRCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gd2Vic2l0ZURhdGFTdG9yZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0gICAgfQotICAg
IHJldHVybiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JT
ZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3Rp
bmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpyZXRyaWV2ZUNhY2hlU3RvcmFnZVBhcmFtZXRlcnMoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQpAQCAtMTMzNyw3ICsxMzk1LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkoV2ViVXNlckNvbnRlbnQK
ICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhSZWdpc3RyYWJs
ZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9tYWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX3By
b2Nlc3NQb29sLmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vz
cygqdGhpcywgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksIHNlc3Npb25JRCwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworICAgIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJD
b250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoKnRoaXMsIFJlZ2lzdHJhYmxlRG9tYWlu
IHtyZWdpc3RyYWJsZURvbWFpbn0sIHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OndvcmtlckNvbnRleHRDb25uZWN0
aW9uTm9Mb25nZXJOZWVkZWQoV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgaWRlbnRpZmllcikK
QEAgLTE1MDAsMTYgKzE1NTgsMzQgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpwcmVjb25u
ZWN0VG8oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJQYWdlUHJveHlJZGUKICAgICBzZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlY29ubmVjdFRvKHNlc3Npb25JRCwgd2ViUGFn
ZVByb3h5SUQsIHdlYlBhZ2VJRCwgdXJsLCB1c2VyQWdlbnQsIHN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5LCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKSwgMCk7CiB9CiAKK3N0YXRpYyBib29s
IGFueVByb2Nlc3NQb29sSGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpCit7CisgICAgZm9yIChh
dXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewor
ICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPmhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0
YXRpYyBib29sIGFueVByb2Nlc3NQb29sSGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpCit7Cisg
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9v
bHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPmhhc0JhY2tncm91bmRXZWJQcm9jZXNz
ZXMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigp
CiB7Ci0gICAgaWYgKHByb2Nlc3NQb29sKCkuaGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKSB7
CisgICAgaWYgKGFueVByb2Nlc3NQb29sSGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKSB7CiAg
ICAgICAgIGlmICghUHJvY2Vzc1Rocm90dGxlcjo6aXNWYWxpZEZvcmVncm91bmRBY3Rpdml0eSht
X2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcykpIHsKICAgICAgICAgICAgIG1fYWN0aXZpdHlGcm9t
V2ViUHJvY2Vzc2VzID0gdGhyb3R0bGVyKCkuZm9yZWdyb3VuZEFjdGl2aXR5KCJOZXR3b3JraW5n
IGZvciBmb3JlZ3JvdW5kIHZpZXcocykiX3MpOwogICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NEaWRUcmFuc2l0aW9uVG9Gb3JlZ3JvdW5kKCksIDApOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHByb2Nlc3NQb29sKCku
aGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpKSB7CisgICAgaWYgKGFueVByb2Nlc3NQb29sSGFz
QmFja2dyb3VuZFdlYlByb2Nlc3NlcygpKSB7CiAgICAgICAgIGlmICghUHJvY2Vzc1Rocm90dGxl
cjo6aXNWYWxpZEJhY2tncm91bmRBY3Rpdml0eShtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3Nlcykp
IHsKICAgICAgICAgICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzID0gdGhyb3R0bGVyKCku
YmFja2dyb3VuZEFjdGl2aXR5KCJOZXR3b3JraW5nIGZvciBiYWNrZ3JvdW5kIHZpZXcocykiX3Mp
OwogICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NEaWRU
cmFuc2l0aW9uVG9CYWNrZ3JvdW5kKCksIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAppbmRleCBhMGI0YzFkODkzOGUy
MDVlYzM2MWRlNWMxMDgyNWQxODI3NzY1M2I0Li5hOWI4NDEyOTE4ZmJjMTlmNTZhYTlmNTA2Mzdk
N2U4NjBhMTExZTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaApAQCAtNTIsNiArNTIsMTAgQEAgbmFtZXNwYWNlIElQ
QyB7CiBjbGFzcyBGb3JtRGF0YVJlZmVyZW5jZTsKIH0KIAorbmFtZXNwYWNlIEFQSSB7CitjbGFz
cyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xh
c3MgU2Vzc2lvbklEOwogfQpAQCAtNzMsOCArNzcsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
Y2xhc3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7CitjbGFzcyBXZWJD
b29raWVNYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNz
UG9vbDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OwogCiBlbnVtIGNsYXNz
IFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyA6IGJvb2w7CkBAIC04Nyw3ICs5MSw3IEBAIHN0
cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBSZXNvdXJjZUxv
YWRJbmZvOwogc3RydWN0IFdlYnNpdGVEYXRhOwogCi1jbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5
IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhy
b3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4g
eworY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94eSBmaW5hbCA6IHB1YmxpYyBBdXhpbGlhcnlQcm9j
ZXNzUHJveHksIHByaXZhdGUgUHJvY2Vzc1Rocm90dGxlckNsaWVudCwgcHVibGljIENhbk1ha2VX
ZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+LCBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrUHJv
Y2Vzc1Byb3h5PiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAg
dXNpbmcgUmVnaXN0cmFibGVEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKQEAg
LTEwMiwxMiArMTA2LDE2IEBAIHB1YmxpYzoKICAgICB1c2luZyBEb21haW5Jbk5lZWRPZlN0b3Jh
Z2VBY2Nlc3MgPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKICAgICB1c2luZyBPcGVuZXJE
b21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKIAotICAgIGV4cGxpY2l0IE5ldHdv
cmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmKTsKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtQ
cm9jZXNzUHJveHk+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya1Byb2Nl
c3NQcm94eSk7IH0KICAgICB+TmV0d29ya1Byb2Nlc3NQcm94eSgpOwogCisgICAgc3RhdGljIFZl
Y3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IGFsbE5ldHdvcmtQcm9jZXNzZXMoKTsKKyAg
ICAKKyAgICB2b2lkIHRlcm1pbmF0ZSgpIGZpbmFsOworCiAgICAgdm9pZCBnZXROZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94
eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwogCi0gICAgRG93
bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQ
cm94eSogb3JpZ2luYXRpbmdQYWdlKTsKKyAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9h
ZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBXZWJQcm9jZXNzUG9vbCYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9y
aWdpbmF0aW5nUGFnZSk7CiAKICAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9u
SUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRj
aE9wdGlvbj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPiYmKTsKICAgICB2
b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIwNiwxMyArMjE0LDExIEBAIHB1YmxpYzoKICAg
ICBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSBmaW5hbCB7IHJldHVybiBtX3Rocm90dGxl
cjsgfQogICAgIHZvaWQgdXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwogCi0gICAgV2ViUHJvY2Vz
c1Bvb2wmIHByb2Nlc3NQb29sKCkgeyByZXR1cm4gbV9wcm9jZXNzUG9vbDsgfQotCiAjaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICB2b2lkIGRpZERlc3Ryb3lXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYpOwogI2VuZGlm
CiAKLSAgICB2b2lkIGFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYpOworICAgIHZv
aWQgYWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CiAgICAgYm9vbCBoYXNTZXNzaW9uKFBB
TDo6U2Vzc2lvbklEKSBjb25zdDsKICAgICB2b2lkIHJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9u
SUQpOwogICAgIApAQCAtMjI5LDYgKzIzNSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVy
U2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1
bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAK
KyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQgcmVzZXRR
dW90YShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAg
IHZvaWQgcmVzb3VyY2VMb2FkRGlkU2VuZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRpZmllciwg
UmVzb3VyY2VMb2FkSW5mbyYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgT3B0aW9uYWw8
SVBDOjpGb3JtRGF0YVJlZmVyZW5jZT4mJik7CkBAIC0yNDgsNyArMjU2LDEzIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyQnVuZGxlSWRlbnRpZmllcihDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBj
b29raWVNYW5hZ2VyKCkgeyByZXR1cm4gbV9jb29raWVNYW5hZ2VyLmdldCgpOyB9CisKIHByaXZh
dGU6CisgICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eSgpOworCisgICAgdm9pZCBzZW5k
Q3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisKICAgICAvLyBBdXhpbGlhcnlQcm9j
ZXNzUHJveHkKICAgICBBU0NJSUxpdGVyYWwgcHJvY2Vzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiTmV0d29ya2luZyJfczsgfQogCkBAIC0yNTYsNyArMjcwLDYgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAg
ICB2b2lkIHByb2Nlc3NXaWxsU2h1dERvd24oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgIHZvaWQgY2xlYXJDYWxsYmFj
a1N0YXRlcygpOwogCiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKQEAgLTMxMiw4ICsz
MjUsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoUEFMOjpTZXNzaW9uSUQsIFJlZjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiYmKTsK
IAotICAgIFdlYlByb2Nlc3NQb29sJiBtX3Byb2Nlc3NQb29sOwotCiAgICAgSGFzaE1hcDxDYWxs
YmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4+IG1fcGVuZGluZ0Zl
dGNoV2Vic2l0ZURhdGFDYWxsYmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUNhbGxiYWNrczsK
ICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVu
ZGluZ0RlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2luc0NhbGxiYWNrczsKQEAgLTM1MCw2ICszNjEs
NyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBIYXNoU2V0PFBBTDo6U2Vzc2lvbklEPiBtX3Nl
c3Npb25JRHM7CisgICAgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gbV9jb29raWVNYW5hZ2Vy
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCmluZGV4
IGI4ZGFlZGY3YmViYTFjZDgxZjZlNTI0NDk2MDMxMGYxMzMxMGMxMWUuLjgyYzEwZTQxZDU2MjVk
YmFhZGY5MTNiOTQ4MDQ0N2M3MGNjMTlkOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCkBAIC01
MSw4ICs1MSwxMCBAQCBib29sIE5ldHdvcmtQcm9jZXNzUHJveHk6OlhQQ0V2ZW50SGFuZGxlcjo6
aGFuZGxlWFBDRXZlbnQoeHBjX29iamVjdF90IGV2ZW50KSBjbwogICAgIGlmIChtZXNzYWdlTmFt
ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtZXNzYWdlTmFt
ZSA9PSBMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDQ29uc3RhbnRzOjp4cGNMYXVuY2hTZXJ2aWNl
c0RhdGFiYXNlWFBDRW5kcG9pbnRNZXNzYWdlTmFtZSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+cHJvY2Vzc1Bvb2woKS5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vz
cyhldmVudCk7CisgICAgaWYgKG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VY
UENDb25zdGFudHM6OnhwY0xhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VO
YW1lKSB7CisgICAgICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6
YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQ
cm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoZXZlbnQpOworICAgIH0KIAogICAgIHJldHVy
biB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2ll
TWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5jcHAKaW5kZXggY2M1MjZhYWYzYWFmYjFjMTQ2ZGE0YjI0MTk0NTliMTA5MjAxYjYx
MC4uZDgxNjBiMDBiZTQ2NGI2NDEyZTg4Njc3MDY5YjY5OWE4YmM4NmVmZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCkBAIC0yOSw2
ICsyOSw3IEBACiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElTZWN1cml0eU9y
aWdpbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgiCiAj
aW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2ll
TWFuYWdlclByb3h5TWVzc2FnZXMuaCIKQEAgLTM5LDI0ICs0MCwxNiBAQAogbmFtZXNwYWNlIFdl
YktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY29uc3QgY2hhciogV2ViQ29va2ll
TWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSgpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykK
KyAgICA6IG1fbmV0d29ya1Byb2Nlc3MobWFrZVdlYWtQdHIobmV0d29ya1Byb2Nlc3MpKQogewot
ICAgIHJldHVybiAiV2ViQ29va2llTWFuYWdlclByb3h5IjsKLX0KLQotUmVmPFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4gV2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wq
IHByb2Nlc3NQb29sKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFn
ZXJQcm94eShwcm9jZXNzUG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNv
b2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi0gICAgOiBXZWJD
b250ZXh0U3VwcGxlbWVudChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250ZXh0U3VwcGxlbWVu
dDo6cHJvY2Vzc1Bvb2woKS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIG5ldHdvcmtQ
cm9jZXNzLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIH0KIAogV2ViQ29va2llTWFuYWdlclBy
b3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KCkKIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CiAgICAg
QVNTRVJUKG1fY29va2llT2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiB9CiAKQEAgLTY1LDEwMiArNTgs
ODQgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmluaXRpYWxpemVDbGllbnQoY29uc3Qg
V0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSogY2wKICAgICBtX2NsaWVudC5pbml0aWFsaXplKGNs
aWVudCk7CiB9CiAKLS8vIFdlYkNvbnRleHRTdXBwbGVtZW50Ci0KLXZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCgpCi17Ci0gICAgVmVjdG9yPE9ic2VydmVy
Kj4gb2JzZXJ2ZXJzOwotICAgIGZvciAoYXV0byYgb2JzZXJ2ZXJTZXQgOiBtX2Nvb2tpZU9ic2Vy
dmVycy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJT
ZXQpCi0gICAgICAgICAgICBvYnNlcnZlcnMuYXBwZW5kKG9ic2VydmVyKTsKLSAgICB9Ci0KLSAg
ICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJzKQotICAgICAgICBvYnNlcnZlci0+bWFu
YWdlckRlc3Ryb3llZCgpOwotCi0gICAgQVNTRVJUKG1fY29va2llT2JzZXJ2ZXJzLmlzRW1wdHko
KSk7Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xvc2UoV2Vi
UHJvY2Vzc1Byb3h5KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nl
c3NEaWRDbG9zZShOZXR3b3JrUHJvY2Vzc1Byb3h5KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkKLXsKLSAgICBBUEk6Ok9iamVj
dDo6cmVmKCk7Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZXJlZldlYkNvbnRl
eHRTdXBwbGVtZW50KCkKLXsKLSAgICBBUEk6Ok9iamVjdDo6ZGVyZWYoKTsKLX0KLQogdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhvc3RuYW1lc1dp
dGhDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAg
ICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0bmFtZXMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9z
dG5hbWVzKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZXMoc2Vzc2lvbklELCBob3N0bmFtZXMpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQog
ewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJ
Zk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhz
ZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2ll
cyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0
ZUNvb2tpZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENvb2tpZSYgY29va2llLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRv
JiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7
Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBbY2FsbGJhY2tGdW5j
dGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbildKCkgbXV0YWJsZSB7CisgICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llKHNlc3Npb25JRCwg
Y29va2llKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQogICAgICAgICBj
YWxsYmFja0Z1bmN0aW9uKCk7Ci0gICAgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIFdhbGxUaW1lIHRpbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNp
bmNlKHNlc3Npb25JRCwgdGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXNNb2Rp
ZmllZFNpbmNlKHNlc3Npb25JRCwgdGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwor
ICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2Fs
bGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
KCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklE
LCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llKHNlc3Npb25JRCwgY29va2llcyks
IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tG
dW5jdGlvbigpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBj
b25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBtYWluRG9jdW1lbnRVUkwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3Jr
UHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNl
dENvb2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVudFVSTCksIFdURk1v
dmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OlNldENvb2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVu
dFVSTCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2Fs
bGJhY2tGdW5jdGlvbigpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxs
Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAg
bmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpHZXRBbGxDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikp
OworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tp
ZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAg
ICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpnZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5j
dGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFdURk1vdmUoY2FsbGJh
Y2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwog
fQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFu
Z2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5k
VG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNl
c3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RvcE9ic2Vy
dmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nl
c3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vz
c2lvbklEKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdU
Rjo6RnVuY3Rpb248dm9pZCAoKT4mJiBjYWxsYmFjaykKQEAgLTIxMSwxOCArMTg2LDE4IEBAIHZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSNpZiBV
U0UoU09VUCkKLSAgICBwcm9jZXNzUG9vbCgpLT5zZXRJbml0aWFsSFRUUENvb2tpZUFjY2VwdFBv
bGljeShwb2xpY3kpOwotI2VuZGlmCi0KLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2Vu
ZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KHBvbGljeSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kocG9saWN5KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAg
ICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5
OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7
Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3Jr
UHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSgpLCBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KCksIFdURk1vdmUoY2FsbGJhY2tGdW5j
dGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihIVFRQQ29va2llQWNj
ZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAppbmRleCAwYmRmYzBk
NGU0N2M0MzZmNTg1Y2YyOWMwOWQ1MWEyOWJjODExYTlkLi42ZjUxZjAzZTVjMGNhODk0MTIzMzQz
NzdiNTU0M2Q4MjJjYzJmZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJD
b29raWVNYW5hZ2VyUHJveHkuaApAQCAtNTYsMTEgKzU2LDkgQEAgdHlwZWRlZiBHZW5lcmljQ2Fs
bGJhY2s8QVBJOjpBcnJheSo+IEFycmF5Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFj
azxXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5PiBIVFRQQ29va2llQWNjZXB0UG9saWN5
Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiY+IEdldENvb2tpZXNDYWxsYmFjazsKIAotY2xhc3MgV2ViQ29va2llTWFuYWdlclBy
b3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFu
YWdlcj4sIHB1YmxpYyBXZWJDb250ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciB7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmpl
Y3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1l
c3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1l
bnROYW1lKCk7Ci0KLSAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRl
KFdlYlByb2Nlc3NQb29sKik7CisgICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+
IGNyZWF0ZShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykgeyByZXR1cm4gYWRv
cHRSZWYoKm5ldyBXZWJDb29raWVNYW5hZ2VyUHJveHkobmV0d29ya1Byb2Nlc3MpKTsgfQogICAg
IHZpcnR1YWwgfldlYkNvb2tpZU1hbmFnZXJQcm94eSgpOwogCiAgICAgdm9pZCBpbml0aWFsaXpl
Q2xpZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNsaWVudEJhc2UqKTsKQEAgLTEwNCwxNyArMTAy
LDEwIEBAIHB1YmxpYzoKICAgICB1c2luZyBBUEk6Ok9iamVjdDo6ZGVyZWY7CiAKIHByaXZhdGU6
Ci0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKik7CisgICAgV2ViQ29v
a2llTWFuYWdlclByb3h5KE5ldHdvcmtQcm9jZXNzUHJveHkmKTsKIAogICAgIHZvaWQgY29va2ll
c0RpZENoYW5nZShQQUw6OlNlc3Npb25JRCk7CiAKLSAgICAvLyBXZWJDb250ZXh0U3VwcGxlbWVu
dAotICAgIHZvaWQgcHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHBy
b2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nl
c3NEaWRDbG9zZShOZXR3b3JrUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWZX
ZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVyZWZXZWJDb250ZXh0
U3VwcGxlbWVudCgpIG92ZXJyaWRlOwotCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAg
ICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYp
IG92ZXJyaWRlOwogCkBAIC0xMjUsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+PiBtX2xlZ2FjeUNvb2tpZU9ic2Vy
dmVyczsKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBIYXNoU2V0PE9ic2VydmVyKj4+IG1f
Y29va2llT2JzZXJ2ZXJzOwogCisgICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25l
dHdvcmtQcm9jZXNzOwogICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eUNsaWVudCBtX2NsaWVudDsK
IAogI2lmIFVTRShTT1VQKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
aW5kZXggMWNkNjNhNTY5ZDcwNDg2OTQ5ZTg4MzQ5ZTIwMGZlNzFlNDg2NTg4Ni4uZDk2YjE1MGRk
OTA2NmUyMWEzNWY3MjdjOWNkMDRlYWFkNzgxNTRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCkBAIC0xNzQ2LDcgKzE3NDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbihib29sIGNvbnRyb2xsZWQpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENvbnRyb2xsZWRCeUF1dG9t
YXRpb24oY29udHJvbGxlZCkpOwotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9O
ZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0Nv
bnRyb2xsZWRCeUF1dG9tYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9j
b250cm9sbGVkQnlBdXRvbWF0aW9uKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQ
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRy
b2xsZWRCeUF1dG9tYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250
cm9sbGVkQnlBdXRvbWF0aW9uKSwgMCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjcmVhdGVJ
bnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0
b3JUYXJnZXRUeXBlIHR5cGUpCkBAIC0zMjEwLDExICszMjEwLDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmlzRm9yY2VkSW50b0FwcEJvdW5kTW9kZVRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sKT4KIHZvaWQgV2ViUGFnZVByb3h5OjpkaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVt
ZW50SW5OZXR3b3JrUHJvY2VzcygpCiB7CiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAm
JiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYg
KCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpE
aXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCksIDApOwotICAgIH0KKyAgICB3ZWJzaXRl
RGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCAwKTsKICNlbmRpZgogfQogCkBA
IC0zMjIzLDEzICszMjE5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtl
ckVudGl0bGVtZW50T3ZlcnJpZGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgKICNpZiBFTkFCTEUo
QVBQX0JPVU5EX0RPTUFJTlMpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBh
Z2U6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3Mt
PnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQ
cm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNl
cnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtl
ckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNl
CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRpZgpAQCAtNDQyOSw3ICs0NDE5LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnByZWNvbm5lY3RUbyhjb25zdCBVUkwmIHVybCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgYXV0byBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9IG1fY2FuVXNlQ3Jl
ZGVudGlhbFN0b3JhZ2UgPyBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlIDog
V2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlOwotICAgIG1fcHJvY2Vz
cy0+cHJvY2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnByZWNvbm5lY3RUbyhzZXNz
aW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQoKSwgdXJsLCB1c2VyQWdlbnQoKSwgc3Rv
cmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4oKSk7Cisg
ICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkucHJlY29ubmVjdFRvKHNlc3Np
b25JRCgpLCBpZGVudGlmaWVyKCksIHdlYlBhZ2VJRCgpLCB1cmwsIHVzZXJBZ2VudCgpLCBzdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpKTsKIH0K
IAogdm9pZCBXZWJQYWdlUHJveHk6OnNldENhblVzZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wgY2Fu
VXNlQ3JlZGVudGlhbFN0b3JhZ2UpCkBAIC00NzI1LDcgKzQ3MTUsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFt
ZUluZm9EYXRhJgogICAgICAgICAgICAgUmVnaXN0cmFibGVEb21haW4gY3VycmVudERvbWFpbiB7
IGN1cnJlbnRSZXF1ZXN0LnVybCgpIH07CiAgICAgICAgICAgICBVUkwgcmVxdWVzdGVyVVJMIHsg
VVJMKCksIHJlcXVlc3Rlck9yaWdpbi50b1N0cmluZygpIH07CiAgICAgICAgICAgICBpZiAoIWN1
cnJlbnREb21haW4ubWF0Y2hlcyhyZXF1ZXN0ZXJVUkwpKQotICAgICAgICAgICAgICAgIG1fcHJv
Y2Vzcy0+cHJvY2Vzc1Bvb2woKS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zl
cihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJl
cXVlc3RlclVSTCB9LCBjdXJyZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lk
ZW50aWZpZXIsIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3Rv
cmUtPm5ldHdvcmtQcm9jZXNzKCkuZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNm
ZXIobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyBy
ZXF1ZXN0ZXJVUkwgfSwgY3VycmVudERvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9p
ZGVudGlmaWVyLCBtX3dlYlBhZ2VJRCk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTQ3
NjMsNyArNDc1Myw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUo
RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIEZyYW1lSW5mb0RhdGEmCiAgICAgaWYgKG5hdmlnYXRp
b24gJiYgZnJhbWUtPmlzTWFpbkZyYW1lKCkpIHsKICAgICAgICAgaWYgKGF1dG8mIGFkQ2xpY2tB
dHRyaWJ1dGlvbiA9IG5hdmlnYXRpb24tPmFkQ2xpY2tBdHRyaWJ1dGlvbigpKSB7CiAgICAgICAg
ICAgICBpZiAoYWRDbGlja0F0dHJpYnV0aW9uLT5kZXN0aW5hdGlvbigpLm1hdGNoZXMoZnJhbWUt
PnVybCgpKSkKLSAgICAgICAgICAgICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yZUFkQ2xpY2tB
dHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqYWRDbGlja0F0dHJp
YnV0aW9uKSk7CisgICAgICAgICAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0dHJpYnV0
aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmlidXRpb24p
LCAwKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTM3NCw3ICs1MzY0LDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSwg
Y29uc3QgVVJMJiBwYWcKICAgICBpZiAodGFyZ2V0SG9zdC5pc0VtcHR5KCkgfHwgbWFpbkZyYW1l
SG9zdC5pc0VtcHR5KCkgfHwgdGFyZ2V0SG9zdCA9PSBzb3VyY2VVUkwuaG9zdCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93
ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRV
UkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBwYWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsg
c291cmNlVVJMIH0sIGlzUmVkaXJlY3QsIGZyYW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1Rp
bWU6Om5vdygpIC0gbV9kaWRGaW5pc2hEb2N1bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAs
IHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgp
Lm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1l
TmF2aWdhdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURv
bWFpbiB7IHRhcmdldFVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0
cmFibGVEb21haW4geyBzb3VyY2VVUkwgfSwgaXNSZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUo
KSwgTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2RpZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5G
cmFtZVRpbWVzdGFtcCwgd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpLCAwKTsKIH0KICNl
bmRpZgogCkBAIC05OTk5LDU4ICs5OTg5LDI3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzeXN0ZW1Q
cmV2aWV3QWN0aW9uVHJpZ2dlcmVkKGNvbnN0IFdlYkNvcmU6OlN5c3RlbVByZXZpZXdJbmZvCiAK
IHZvaWQgV2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2Uo
KSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZW1wdHlTdHJpbmcoKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmli
dXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNz
KCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xp
Y2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJBZENsaWNr
QXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bv
b2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNh
blNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJp
YnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cisg
ICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGlt
ZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nl
c3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdv
cmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRB
ZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3Zl
cnJpZGVUaW1lckZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFs
dWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5
OjpzZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhjb25zdCBVUkwm
IHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRN
ZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNv
bnZlcnNpb25VUkxGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVy
bCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFT
dG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3Rpbmco
bV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlv
bnNBc0V4cGlyZWRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3Mt
PnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQ
cm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRD
bGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vi
c2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JU
ZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKICNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAppbmRleCBkOTI2YjMzY2JkZjJiYjhi
Yjk4MGQ2M2M1ZGM1MmFlNTI1MDkyNTI5Li5hOTk0OWIwODk4NGYwNjA5MGVmOTA5MDhhNDBiN2I2
ZDZmYWM1YWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3Bw
CkBAIC0xNDMsOCArMTQzLDEwIEBACiAjZW5kaWYKIAogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9S
RUxFQVNFX0xPRyhjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIiVwIC0g
V2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBXRUJQ
Uk9DRVNTUE9PTF9SRUxFQVNFX0xPR19TVEFUSUMoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0Vf
TE9HKGNoYW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAjZGVm
aW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsIGZtdCwgLi4uKSBS
RUxFQVNFX0xPR19FUlJPUihjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRo
aXMsICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lG
X0FMTE9XRUQoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lGKHNlc3Npb25JRC5pc0Fs
d2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgY2hhbm5lbCwgIiVwIC0gV2ViUHJvY2Vzc1Bvb2w6OiIg
Zm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNF
X0xPR19JRl9BTExPV0VEX1NUQVRJQyhjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfSUYo
c2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAiV2ViUHJvY2Vz
c1Bvb2w6OiIgZm10LCAjI19fVkFfQVJHU19fKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMjMyLDYgKzIzNCwxMSBAQCBzdGF0aWMgSGFzaFNldDxT
dHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3Vz
dG9tUHJvdAogICAgIHJldHVybiBzZXQ7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IFdlYlByb2Nlc3NQ
b29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQoreworICAgIHJldHVy
biBjb3B5VG9WZWN0b3IoZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJz
KCkpOworfQorCiBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgOiBtX2NvbmZpZ3VyYXRpb24oY29u
ZmlndXJhdGlvbi5jb3B5KCkpCiAgICAgLCBtX2RlZmF1bHRQYWdlR3JvdXAoV2ViUGFnZUdyb3Vw
OjpjcmVhdGUoKSkKQEAgLTIzOSw3ICsyNDYsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vz
c1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAg
LCBtX2F1dG9tYXRpb25DbGllbnQobWFrZVVuaXF1ZTxBUEk6OkF1dG9tYXRpb25DbGllbnQ+KCkp
CiAgICAgLCBtX2Rvd25sb2FkQ2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVu
dD4oKSkKICAgICAsIG1faGlzdG9yeUNsaWVudChtYWtlVW5pcXVlPEFQSTo6TGVnYWN5Q29udGV4
dEhpc3RvcnlDbGllbnQ+KCkpCi0gICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCht
YWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogICAgICwgbV92
aXNpdGVkTGlua1N0b3JlKFZpc2l0ZWRMaW5rU3RvcmU6OmNyZWF0ZSgpKQogI2lmIFBMQVRGT1JN
KE1BQykKICAgICAsIG1faGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXIobWFrZVVu
aXF1ZTxIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlcj4oKnRoaXMpKQpAQCAtMjY3
LDkgKzI3Myw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQ
b29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICNlbmRpZgogICAgIH0pOwogCi0gICAg
aWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUgJiYgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpOwotCiAgICAgZm9yIChhdXRv
JiBzY2hlbWUgOiBtX2NvbmZpZ3VyYXRpb24tPmFsd2F5c1JldmFsaWRhdGVkVVJMU2NoZW1lcygp
KQogICAgICAgICBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNBbHdheXNSZXZhbGlkYXRlZC5hZGQoc2No
ZW1lKTsKIApAQCAtMjg1LDcgKzI4OCw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9v
bChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICBhZGRN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksICp0aGlzKTsKIAogICAgIC8vIE5PVEU6IFRoZXNlIHN1Yi1vYmplY3RzIG11c3QgYmUg
aW5pdGlhbGl6ZWQgYWZ0ZXIgbV9tZXNzYWdlUmVjZWl2ZXJNYXAuLgotICAgIGFkZFN1cHBsZW1l
bnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViR2VvbG9j
YXRpb25NYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25N
YW5hZ2VyUHJveHk+KCk7CiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCkBAIC0zNDIsOSArMzQ0
LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6On5XZWJQcm9jZXNzUG9vbCgpCiAgICAgcHJvY2Vzc1Bvb2xD
b3VudGVyLmRlY3JlbWVudCgpOwogI2VuZGlmCiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
LSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2h1dERvd25Qcm9jZXNzKCk7Ci0KICNpZiBFTkFC
TEUoR0FNRVBBRCkKICAgICBpZiAoIW1fcHJvY2Vzc2VzVXNpbmdHYW1lcGFkcy5pc0VtcHR5KCkp
CiAgICAgICAgIFVJR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5wcm9jZXNzUG9vbFN0b3Bw
ZWRVc2luZ0dhbWVwYWRzKCp0aGlzKTsKQEAgLTQwMiwxNiArNDAxLDYgQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0
aW9uQ2xpZW50PiYKICAgICAgICAgbV9hdXRvbWF0aW9uQ2xpZW50ID0gV1RGTW92ZShhdXRvbWF0
aW9uQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudD4mJiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi17Ci0jaWYgRU5BQkxF
KExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKLSAgICBpZiAoIWN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudCkKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBt
YWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpOwotICAgIGVsc2UK
LSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBXVEZNb3ZlKGN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYg
Y3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKQogewogICAgIC8vIEd1YXJk
IGFnYWluc3QgQVBJIG1pc3VzZS4KQEAgLTQyMSwxMSArNDEwLDYgQEAgdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0
cmluZyYgY3UKICAgICBtX2NvbmZpZ3VyYXRpb24tPnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNl
QnVuZGxlSWRlbnRpZmllcihjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIp
OwogfQogCi1JUEM6OkNvbm5lY3Rpb24qIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vz
c0Nvbm5lY3Rpb24oKQotewotICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzLT5jb25uZWN0aW9u
KCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCh2b2lkKiBjb250
ZXh0KQogewogICAgIHN0YXRpY19jYXN0PFdlYlByb2Nlc3NQb29sKj4oY29udGV4dCktPmxhbmd1
YWdlQ2hhbmdlZCgpOwpAQCAtNDM1LDggKzQxOSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Omxh
bmd1YWdlQ2hhbmdlZCgpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCgpKTsKICNpZiBVU0UoU09VUCkK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2Vk
KHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDApOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmUoKS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1
YWdlcygpKSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtNDQ5LDcgKzQzMiw4IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmZ1bGxLZXlib2FyZEFjY2Vzc01vZGVDaGFuZ2VkKGJvb2wgZnVsbEtleWJvYXJk
QWNjZXNzRW5hYmxlCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVu
dChib29sIGlzQ3JpdGljYWwpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpB
dXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2Fs
KSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nl
c3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpKTsKKyAgICBmb3Ig
KGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJv
Y2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpBdXhpbGlh
cnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSk7CiAj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgUGx1Z2luUHJvY2Vzc01hbmFnZXI6
OnNpbmdsZXRvbigpLnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpOwogI2VuZGlm
CkBAIC00NzQsMjc1ICs0NTgsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzY3JlZW5Qcm9wZXJ0
aWVzU3RhdGVDaGFuZ2VkKCkKICNlbmRpZgogfQogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJQ
cm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdl
YnNpdGVEYXRhU3RvcmUpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAK
LSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVz
aW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KLSAgICAvLyBXZSBzaG91bGQgcmVt
b3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3Vy
IEFQSXMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
MDI0Ni4KLSAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7Ci0gICAgICAgIGNhbGxPbk1haW5S
dW5Mb29wQW5kV2FpdChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0g
ICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICB9KTsKLSAgICAgICAg
cmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotICAgIH0KLQotICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKSB7Ci0gICAgICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9y
ZSkpOwotICAgICAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tp
ZXMoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAg
fQotCi0gICAgYXV0byBuZXR3b3JrUHJvY2VzcyA9IG1ha2VVbmlxdWU8TmV0d29ya1Byb2Nlc3NQ
cm94eT4oKnRoaXMpOwotCi0gICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFy
YW1ldGVyczsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IGNvcHlUb1Zl
Y3RvcihtX3dlYnNpdGVEYXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwotICAgICAgICBtX3dl
YnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSNpZiBQTEFURk9STShDT0NP
QSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25CdW5kbGVJ
ZGVudGlmaWVyKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRl
bnRpZmllciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxp
Y2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcigpOwotI2VuZGlmCi0gICAgfQotCi0gICAgcGFyYW1l
dGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hl
TW9kZWwoKTsKLQotICAgIGZvciAoYXV0byYgc2NoZW1lIDogZ2xvYmFsVVJMU2NoZW1lc1dpdGhD
dXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1Jl
Z2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7Ci0KLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJv
Y2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvb2tpZVN0b3Jh
Z2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1l
dGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmlu
ZyBjb250YWluZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ0Nh
Y2hlc0RpcmVjdG9yeSgpOwotICAgIGlmICghY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1w
dHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRl
RGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJD
YWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIHBhcmVudEJ1bmRs
ZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAg
ICBpZiAoIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRl
bnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxlKGVtcHR5U3RyaW5nKCks
IFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVn
aXN0ZXJlZEFzU2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5n
bGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOwotICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlU
b1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0
ZXJBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVy
bFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0
aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOwotICAgIHBhcmFt
ZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2Fj
eUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3Mo
KSk7Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAvLyAqKioqKioqKioKLSAg
ICAvLyBJTVBPUlRBTlQ6IERvIG5vdCBjaGFuZ2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9y
IGluZGV4ZWQgZGF0YWJhc2VzIG9uIGRpc2sgd2l0aG91dCBmaXJzdCBjb25zdWx0aW5nIGEgcmV2
aWV3ZXIgZnJvbSBBcHBsZSAoPHJkYXI6Ly9wcm9ibGVtLzE3NDU0NzEyPikKLSAgICAvLyAqKioq
KioqKioKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IG1fd2Vi
c2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsKLSAgICBl
bHNlIGlmIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMo
KSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKS0+cGFyYW1ldGVycygpLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKLSAgICAKLSAg
ICBpZiAoIXBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeSk7Ci0gICAgfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAg
aWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGVmYXVsdFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAg
ICBhdXRvIGxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vi
c2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJp
bmcoKTsKLSAgICBpZiAoIWxvY2FsU3RvcmFnZURpcmVjdG9yeSkKLSAgICAgICAgbG9jYWxTdG9y
YWdlRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TG9jYWxTdG9y
YWdlRGlyZWN0b3J5KCk7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3Rv
cmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2Nh
bFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0byBjYWNoZVN0b3Jh
Z2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPmNh
Y2hlU3RvcmFnZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghY2FjaGVTdG9y
YWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gV1RGTW92ZShjYWNoZVN0b3JhZ2VEaXJlY3Rv
cnkpOwotICAgIH0KLQotICAgIFN0cmluZyByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
OwotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAg
ICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUt
PnJlc29sdmVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAg
ICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5OwotICAg
IAotICAgIGlmICghcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0g
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LCByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyA9IGZhbHNlOwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0xvZ1Rlc3RpbmdFdmVudCA9IGZhbHNlOwotICAgIGJvb2wgc2hvdWxkSW5jbHVkZUxvY2FsaG9z
dCA9IHRydWU7Ci0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2Rl
ID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBXZWJD
b3JlOjpUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlIHRoaXJkUGFydHlDb29raWVCbG9ja2lu
Z01vZGUgPSBXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpBbGw7Ci0gICAg
V2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgc2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudEVuYWJsZWQgPSBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5h
YmxlZDo6Tm87Ci0jZW5kaWYKLSAgICBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZSBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IFdlYkNvcmU6OkZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzOwotICAgIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICBIYXNo
U2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBhcHBCb3VuZERvbWFpbnM7Ci0gICAgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4gbWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICBtX3RjY1ByZWZlcmVuY2VFbmFibGVkID0gZG9lc0FwcEhhdmVJ
VFBFbmFibGVkKCk7Ci0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlICYmICF3aXRoV2Vic2l0
ZURhdGFTdG9yZS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAg
d2l0aFdlYnNpdGVEYXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0
YVN0b3JlICYmICFtX3dlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkp
IHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5j
ZUVuYWJsZWQ7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNl
IGlmIChXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkgJiYgIVdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQo
KSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJl
bmNlRW5hYmxlZDsKLSAgICAgICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgp
LT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0jZW5kaWYKLQotICAgIGlmICh3aXRoV2Vic2l0
ZURhdGFTdG9yZSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gd2l0
aFdlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5oYXNT
dGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJsZVJl
c291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNo
b3VsZEluY2x1ZGVMb2NhbGhvc3Q7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZURlYnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQotICAgICAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9k
ZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy50aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVT
dHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJs
ZWQ7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLmZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOwotICAgICAgICAgICAgc3RhbmRh
bG9uZUFwcGxpY2F0aW9uRG9tYWluID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNl
TG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAg
ICAgICAgICAgIGFwcEJvdW5kRG9tYWlucyA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5hcHBCb3VuZERvbWFpbnM7Ci0gICAgICAgICAg
ICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5tYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
cGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0
b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFTdG9y
ZS0+cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICAKLSAgICAgICAg
Y29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUt
PnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0Nh
Y2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVE
aXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBhdXRvJiBoc3RzU3RvcmFnZURp
cmVjdG9yeSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEhTVFNTdG9yYWdlRGlyZWN0
b3J5KCk7Ci0gICAgICAgIGlmICghaHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAg
ICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gaHN0c1N0b3JhZ2VEaXJlY3Rv
cnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoaHN0c1N0b3Jh
Z2VEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0
c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5oYXNTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYg
KGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9z
dCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BhcmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAgIHNh
bWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnRFbmFibGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAgICAg
IHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25lQXBwbGljYXRpb25Eb21h
aW47Ci0gICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91bmREb21haW5zOwotICAg
ICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFsUHJldmFsZW50UmVzb3Vy
Y2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyT3Jp
Z2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotCi0gICAgICAgIGNvbnN0
IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2
ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9y
eSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5
cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IGF1dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5
ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEhTVFNTdG9yYWdlRGlyZWN0b3J5KCk7Ci0g
ICAgICAgIGlmICghaHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAg
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoaHN0c1N0b3JhZ2VEaXJlY3Rv
cnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAg
ICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlKCktPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0gICAg
ICAgIGF1dG8gbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5
cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLSAgICB9Ci0KLSNpZiBIQVZFKENGTkVUV09SS19BTFRFUk5BVElWRV9TRVJWSUNFKQotICAg
IGlmIChXZWJzaXRlRGF0YVN0b3JlOjpodHRwM0VuYWJsZWQoKSkgewotICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5h
bHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0QWx0
ZXJuYXRpdmVTZXJ2aWNlc0RpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIXBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0
aXZlU2VydmljZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVT
ZXJ2aWNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwM0VuYWJsZWQgPSB0cnVlOwotICAgIH0KLSNl
bmRpZgotICAgIGJvb2wgaXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQgPSBmYWxzZTsKLSAgICBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycyA9IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQYXJhbWV0ZXJzIHsKLSAgICAgICAgV1RGTW92ZShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5KSwKLSAgICAgICAgV1RGTW92ZShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKSwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcywK
LSAgICAgICAgaXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQsCi0gICAgICAgIGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQsCi0gICAgICAgIHNob3VsZEluY2x1ZGVMb2Nh
bGhvc3QsCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUsCi0j
aWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgdGhpcmRQYXJ0eUNv
b2tpZUJsb2NraW5nTW9kZSwKLSAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJs
ZWQsCi0jZW5kaWYKLSAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUsCi0g
ICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiwKLSAgICAgICAgYXBwQm91bmREb21h
aW5zLAotICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSwKLSAgICB9OwotCi0gICAgLy8g
QWRkIGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBwYXJhbWV0ZXJzCi0gICAgcGxhdGZvcm1Jbml0aWFs
aXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBu
ZXR3b3JrIHByb2Nlc3MuCi0gICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyksIDApOwotCi0j
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRRT1MobmV0d29ya1Byb2Nlc3NMYXRlbmN5UU9TKCksIG5ldHdvcmtQ
cm9jZXNzVGhyb3VnaHB1dFFPUygpKSwgMCk7Ci0jZW5kaWYKLQotICAgIG5ldHdvcmtQcm9jZXNz
LT51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7Ci0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3Rv
cmUpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdl
YnNpdGVEYXRhU3RvcmUpKTsKLSAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVu
ZGluZ0Nvb2tpZXMoKTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIG5ldHdvcmsgcHJv
Y2VzcyBrbm93cyBhYm91dCBhbGwgdGhlIHNlc3Npb25zIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVy
ZWQgYmVmb3JlIGl0IHN0YXJ0ZWQuCi0gICAgZm9yIChhdXRvJiBzZXNzaW9uSUQgOiBtX3Nlc3Np
b25Ub1BhZ2VJRHNNYXAua2V5cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB3ZWJzaXRlRGF0YVN0
b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vz
c2lvbklEKHNlc3Npb25JRCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lv
bigqd2Vic2l0ZURhdGFTdG9yZSk7Ci0gICAgfQotCi0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IFdU
Rk1vdmUobmV0d29ya1Byb2Nlc3MpOwotICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLX0K
LQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9j
ZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzUHJveHkpCiB7Ci0gICAgQVNTRVJUKG1fbmV0d29ya1By
b2Nlc3MpOwotICAgIEFTU0VSVCgmbmV0d29ya1Byb2Nlc3NQcm94eSA9PSBtX25ldHdvcmtQcm9j
ZXNzLmdldCgpKTsKLQogICAgIGZvciAoYXV0byYgc3VwcGxlbWVudCA6IG1fc3VwcGxlbWVudHMu
dmFsdWVzKCkpCiAgICAgICAgIHN1cHBsZW1lbnQtPnByb2Nlc3NEaWRDbG9zZSgmbmV0d29ya1By
b2Nlc3NQcm94eSk7CiAKQEAgLTc1MSw5ICs0NjgsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpu
ZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQ
cgogICAgIGlmIChtX2F1dG9tYXRpb25TZXNzaW9uKQogICAgICAgICBtX2F1dG9tYXRpb25TZXNz
aW9uLT50ZXJtaW5hdGUoKTsKIAotICAgIC8vIExlYXZlIHRoZSBwcm9jZXNzIHByb3h5IGFyb3Vu
ZCBkdXJpbmcgY2xpZW50IGNhbGwsIHNvIHRoYXQgdGhlIGNsaWVudCBjb3VsZCBxdWVyeSB0aGUg
cHJvY2VzcyBpZGVudGlmaWVyLgotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOwotCiAg
ICAgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIH0KIApAQCAtNzY0LDIwICs0NzgsNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc0NyYXNoZWQoV2ViUHJvY2Vz
c1Byb3h5JiBwcm94eSkKICNlbmRpZgogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpnZXROZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIE1l
c3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVs
YXllZFJlcGx5JiYgcmVwbHkpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBt
X25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1By
b3h5LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHdlYlByb2Nlc3NQcm94
eSA9IG1ha2VXZWFrUHRyKHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0gV1RGTW92ZShyZXBseSld
IChhdXRvJiBjb25uZWN0aW9uSW5mbykgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSgh
SVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSW5mby5pZGVudGlm
aWVyKCkpICYmIHdlYlByb2Nlc3NQcm94eSAmJiB3ZWFrVGhpcykpIHsKLSAgICAgICAgICAgIFdF
QlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKFByb2Nlc3MsICJnZXROZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb246IEZhaWxlZCBmaXJzdCBhdHRlbXB0LCByZXRyeWluZyIpOwotICAgICAgICAg
ICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqd2ViUHJvY2Vzc1Byb3h5LCBXVEZNb3ZlKHJl
cGx5KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcmVwbHkoY29u
bmVjdGlvbkluZm8pOwotICAgIH0pOwotfQotCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6Z3B1UHJvY2Vzc0NyYXNoZWQoUHJvY2Vzc0lEIGlkZW50aWZpZXIp
CiB7CkBAIC04MDEsMjMgKzUwMSwyNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpnZXRHUFVQcm9j
ZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwgTQogfQogI2Vu
ZGlmCiAKK2Jvb2wgV2ViUHJvY2Vzc1Bvb2w6OnNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcyA9IGZhbHNlOworCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
KE5ldHdvcmtQcm9jZXNzUHJveHkmIHByb3h5LCBSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJh
YmxlRG9tYWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHByb3h5LCAm
cHJveHkgPT0gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKSk7CisgICAgYXV0byogd2Vic2l0ZURhdGFT
dG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNl
c3Npb25JRCk7CisgICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKQorICAgICAgICB3ZWJzaXRlRGF0
YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOworICAg
IGlmICghcHJvY2Vzc1Bvb2xzKCkuc2l6ZSgpKQorICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8UmVmPFdlYlByb2Nlc3NQb29sPj4gc2VydmljZVdvcmtlclByb2Nlc3NQb29sKFdlYlByb2Nl
c3NQb29sOjpjcmVhdGUoQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OmNyZWF0ZSgpLmdl
dCgpKSk7CiAKLSAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6
ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7Ci0KLSAg
ICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgaWYgKCFtX3dlYnNpdGVEYXRhU3Rv
cmUpCi0gICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLSAgICAgICAgd2Vic2l0ZURhdGFTdG9y
ZSA9IG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsKLSAgICB9CisgICAgLy8gQXJiaXRyYXJpbHkg
Y2hvb3NlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wgdG8gaG9zdCB0aGUgc2VydmljZSB3b3JrZXIg
cHJvY2Vzcy4KKyAgICBhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29scygpWzBdOworICAg
IEFTU0VSVChwcm9jZXNzUG9vbCk7CiAKICAgICBXZWJQcm9jZXNzUHJveHkqIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzUHJveHkgeyBudWxscHRyIH07Ci0gICAgaWYgKCFtX3VzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNz
ZXMpIHsKLSAgICAgICAgICAgIGlmIChwcm9jZXNzID09IG1fcHJld2FybWVkUHJvY2VzcyB8fCBw
cm9jZXNzLT5pc0R1bW15UHJvY2Vzc1Byb3h5KCkpCisKKyAgICBpZiAoIXNfdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcykgeworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBwcm9j
ZXNzUG9vbC0+bV9wcm9jZXNzZXMpIHsKKyAgICAgICAgICAgIGlmIChwcm9jZXNzID09IHByb2Nl
c3NQb29sLT5tX3ByZXdhcm1lZFByb2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94
eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCZwcm9jZXNz
LT53ZWJzaXRlRGF0YVN0b3JlKCkgIT0gd2Vic2l0ZURhdGFTdG9yZSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKQEAgLTgyNSwzNSArNTI4LDM1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzUHJveHkgPSBwcm9jZXNzLmdldCgpOwotICAgICAgICAgICAgc2VydmljZVdvcmtlclBy
b2Nlc3NQcm94eS0+ZW5hYmxlU2VydmljZVdvcmtlcnModXNlckNvbnRlbnRDb250cm9sbGVySWRl
bnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkpOworICAgICAgICAgICAgc2VydmljZVdvcmtlclBy
b2Nlc3NQcm94eS0+ZW5hYmxlU2VydmljZVdvcmtlcnMocHJvY2Vzc1Bvb2wtPnVzZXJDb250ZW50
Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpKTsKIAotICAgICAgICAgICAg
V0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNlV29ya2VyLCAiZXN0
YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIHJldXNpbmcgYW4g
ZXhpc3Rpbmcgd2ViIHByb2Nlc3MgKHByb2Nlc3M9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmll
cigpKTsKKyAgICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURf
U1RBVElDKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRv
TmV0d29ya1Byb2Nlc3MgcmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0l
cCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICBpZiAoIXNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpIHsKLSAg
ICAgICAgYXV0byBuZXdQcm9jZXNzUHJveHkgPSBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZUZvclNl
cnZpY2VXb3JrZXJzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgKndlYnNpdGVE
YXRhU3RvcmUpOworICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlByb2Nlc3NQcm94
eTo6Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMoKnByb2Nlc3NQb29sLCBXVEZNb3ZlKHJlZ2lzdHJh
YmxlRG9tYWluKSwgKndlYnNpdGVEYXRhU3RvcmUpOwogICAgICAgICBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Byb3h5ID0gbmV3UHJvY2Vzc1Byb3h5LnB0cigpOwogCi0gICAgICAgIFdFQlBST0NFU1NQ
T09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyBjcmVhdGluZyBhIG5ldyBzZXJ2aWNl
IHdvcmtlciBwcm9jZXNzIChwcm9jZXM9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsK
KyAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoU2Vy
dmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJv
Y2VzcyBjcmVhdGluZyBhIG5ldyBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzIChwcm9jZXM9JXAsIFBJ
RD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1By
b3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKIAotICAgICAgICBpbml0aWFsaXplTmV3V2ViUHJv
Y2VzcyhuZXdQcm9jZXNzUHJveHksIHdlYnNpdGVEYXRhU3RvcmUpOwotICAgICAgICBtX3Byb2Nl
c3Nlcy5hcHBlbmQoV1RGTW92ZShuZXdQcm9jZXNzUHJveHkpKTsKKyAgICAgICAgcHJvY2Vzc1Bv
b2wtPmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFT
dG9yZSk7CisgICAgICAgIHByb2Nlc3NQb29sLT5tX3Byb2Nlc3Nlcy5hcHBlbmQoV1RGTW92ZShu
ZXdQcm9jZXNzUHJveHkpKTsKICAgICB9CiAKLSAgICBBU1NFUlQoIW1fc2VydmljZVdvcmtlclBy
b2Nlc3Nlcy5jb250YWlucygqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkpOwotICAgIG1fc2Vy
dmljZVdvcmtlclByb2Nlc3Nlcy5hZGQoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpOworICAg
IEFTU0VSVCghc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5KSk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmFkZCgqc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eSk7CiAKLSAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5l
c3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4dChtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA/
IG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzLnZhbHVlKCkgOiBtX2RlZmF1bHRQYWdlR3JvdXAt
PnByZWZlcmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
IGlmICghbV9zZXJ2aWNlV29ya2VyVXNlckFnZW50LmlzTnVsbCgpKQotICAgICAgICBzZXJ2aWNl
V29ya2VyUHJvY2Vzc1Byb3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KG1fc2VydmljZVdv
cmtlclVzZXJBZ2VudCk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZXN0YWJsaXNo
U2VydmljZVdvcmtlckNvbnRleHQocHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclByZWZlcmVu
Y2VzID8gcHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzLnZhbHVlKCkgOiBw
cm9jZXNzUG9vbC0+bV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLnN0b3JlKCksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBpZiAoIXByb2Nlc3NQb29sLT5tX3NlcnZp
Y2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxsKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNz
UHJveHktPnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQocHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdv
cmtlclVzZXJBZ2VudCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZUZyb21TZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKIHsKLSAgICBBU1NF
UlQobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKHByb2Nlc3MpKTsKLSAgICBtX3Nl
cnZpY2VXb3JrZXJQcm9jZXNzZXMucmVtb3ZlKHByb2Nlc3MpOworICAgIEFTU0VSVChzZXJ2aWNl
V29ya2VyUHJvY2Vzc2VzKCkuY29udGFpbnMocHJvY2VzcykpOworICAgIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzZXMoKS5yZW1vdmUocHJvY2Vzcyk7CiB9CiAjZW5kaWYKIApAQCAtOTIyLDcgKzYyNSw3
IEBAIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2Fy
bWVkUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShXUEUpCiAgICAgLy8gSW4gcGxhdGZvcm1zIHVzaW5nIEJ1YmJsZXdyYXAgZm9yIHNhbmRib3hp
bmcsIHByZXdhcm1lZCBwcm9jZXNzIGlzIGxhdW5jaGVkIHVzaW5nIHRoZSBXZWJQcm9jZXNzUG9v
bCBwcmltYXJ5IFdlYnNpdGVEYXRhU3RvcmUsCiAgICAgLy8gc28gd2UgZG9uJ3QgdXNlIGl0IGlu
IGNhc2Ugb2YgdXNpbmcgYSBkaWZmZXJlbnQgV2Vic2l0ZURhdGFTdG9yZS4KLSAgICBpZiAobV9z
YW5kYm94RW5hYmxlZCAmJiBtX3dlYnNpdGVEYXRhU3RvcmUgJiYgbV93ZWJzaXRlRGF0YVN0b3Jl
LmdldCgpICE9ICZ3ZWJzaXRlRGF0YVN0b3JlKQorICAgIGlmIChtX3NhbmRib3hFbmFibGVkKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRpZgogCkBAIC0xMDMyLDggKzczNSw2IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94
eSYgcHJvY2VzcywgV2Vic2l0ZURhCiAgICAgICAgIHByb2Nlc3MuaXNSZXNwb25zaXZlKFtpbml0
aWFsaXphdGlvbkFjdGl2aXR5ID0gV1RGTW92ZShpbml0aWFsaXphdGlvbkFjdGl2aXR5KV0gKGJv
b2wpIHsgfSk7CiAgICAgfSk7CiAKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAg
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwogCiAgICAgcGFyYW1ldGVy
cy5pbmplY3RlZEJ1bmRsZVBhdGggPSBtX3Jlc29sdmVkUGF0aHMuaW5qZWN0ZWRCdW5kbGVQYXRo
OwpAQCAtMTE5OCw5ICs4OTksNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmlu
aXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKICAgICAgICAgcHJvY2Vzcy0+
Y29ubmVjdGlvbigpLT5pZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcoKTsKIAogICAgIG1fY29ubmVj
dGlvbkNsaWVudC5kaWRDcmVhdGVDb25uZWN0aW9uKHRoaXMsIHByb2Nlc3MtPndlYkNvbm5lY3Rp
b24oKSk7Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBtX3dlYnNpdGVE
YXRhU3RvcmUtPmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKQEAgLTEy
OTUsMTAgKzk5Myw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQb29sOjpjcmVhdGVX
ZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAgICAgaWYgKCFwYWdlQ29u
ZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpKSB7CiAgICAgICAgIC8vIFdlIHRyeSB0byBh
dm9pZCBjcmVhdGluZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxvbmcgYXMgcG9zc2libGUu
CiAgICAgICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRvIGNyZWF0ZSBhIHdlYiBw
YWdlIHdpdGhvdXQgYW55IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVuIHdlIGhhdmUgdG8gY3Jl
YXRlIGl0LgotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1f
d2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZSgpLnB0cigpOwotCi0gICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0
YVN0b3JlKG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAgIHBhZ2VDb25maWd1cmF0
aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dERhdGFTdG9yZSgpLnB0cigpKTsKICAgICB9CiAKICAgICBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5
PiBwcm9jZXNzOwpAQCAtMTMyOSw3ICsxMDI0LDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJv
Y2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSToK
ICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJQcmVm
ZXJlbmNlcykgewogICAgICAgICBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA9IHBhZ2UtPnBy
ZWZlcmVuY2VzU3RvcmUoKTsKLSAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2Vz
cyA6IG1fc2VydmljZVdvcmtlclByb2Nlc3NlcykKKyAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNl
V29ya2VyUHJvY2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgICAgIHNl
cnZpY2VXb3JrZXJQcm9jZXNzLnVwZGF0ZVNlcnZpY2VXb3JrZXJQcmVmZXJlbmNlc1N0b3JlKCpt
X3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyk7CiAgICAgfQogICAgIGlmICh1c2VyQ29udGVudENv
bnRyb2xsZXIpCkBAIC0xMzU2LDcgKzEwNTEsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRh
dGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KGNvbnN0IFN0cmluZyYgdXNlckFnZW50KQogICAgIGlm
IChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQgPT0gdXNlckFnZW50KQogICAgICAgICByZXR1cm47
CiAgICAgbV9zZXJ2aWNlV29ya2VyVXNlckFnZW50ID0gdXNlckFnZW50OwotICAgIGZvciAoYXV0
byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMpCisgICAg
Zm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMo
KSkKICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3Muc2V0U2VydmljZVdvcmtlclVzZXJBZ2Vu
dChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOwogfQogI2VuZGlmCkBAIC0xMzY1LDE1ICsxMDYw
LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3Jl
KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1fc2Vz
c2lvblRvUGFnZUlEc01hcC5hZGQoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBIYXNoU2V0PFdlYlBh
Z2VQcm94eUlkZW50aWZpZXI+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQocGFnZUlEKTsKICAgICBB
U1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwotCi0gICAgYXV0byBzZXNz
aW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7Ci0gICAgaWYgKHNlc3Npb25JRCAhPSBQQUw6
OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIEFTU0VSVCghc2Vzc2lv
bklELmlzRXBoZW1lcmFsKCkgfHwgZGF0YVN0b3JlLnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuc2Vzc2lvbklEID09IHNlc3Npb25JRCk7Ci0gICAgICAgIGlmIChtX25ldHdv
cmtQcm9jZXNzKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1h
a2VSZWYoZGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICBkYXRhU3RvcmUuY2xlYXJQZW5kaW5nQ29v
a2llcygpOwotICAgICAgICB9Ci0gICAgfQogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdl
RW5kVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBX
ZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpCkBAIC0xNDAxLDcgKzEwODcsNiBAQCBib29sIFdl
YlByb2Nlc3NQb29sOjpoYXNQYWdlc1VzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0
b3JlJiBkYXRhU3RvcmUpCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQo
V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdl
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVk
RmlsZW5hbWUpCiB7CiAgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJv
eHkoZGF0YVN0b3JlLCByZXF1ZXN0LCBpbml0aWF0aW5nUGFnZSwgeyB9KTsKLSAgICBQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7CiAKICAgICBPcHRpb25h
bDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4gaXNBcHBCb3VuZCA9IE5hdmlnYXRpbmdUb0Fw
cEJvdW5kRG9tYWluOjpObzsKICAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKQEAgLTE0MTEsMjYg
KzEwOTYsMjMgQEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3gKICNlbmRpZgogICAgIH0KIAotICAg
IGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVk
UmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgLy8gUmVxdWVzdCdzIGZpcnN0UGFydHlGb3JDb29r
aWVzIHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwgb2YgdGhlIGRvd25sb2FkIHJlcXVlc3Qu
Ci0gICAgICAgIC8vIFdlIHNldCB0aGUgdmFsdWUgdG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJM
LgotICAgICAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKLSAgICAgICAgICAgIFVSTCBpbml0aWF0
aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGluaXRpYXRpbmdQYWdlLT5wYWdlTG9hZFN0YXRl
KCkudXJsKCkgfTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JD
b29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNl
dElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkws
IHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRU
UEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQotICAgICAgICAgICAgICAg
IHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2Vu
dEZvclVSTChyZXF1ZXN0LnVybCgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1
cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhVUkwoKSk7Ci0gICAgICAgICAg
ICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKLSAgICAgICAgICAgIGlmICgh
dXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdl
bnQpKQotICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoV2Vi
UGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudCgpKTsKLSAgICAgICAgfQotICAgICAgICB1cGRh
dGVkUmVxdWVzdC5zZXRJc1RvcFNpdGUoZmFsc2UpOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcygp
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RG93bmxvYWRSZXF1ZXN0KHNlc3Npb25J
RCwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0LCBpc0FwcEJvdW5k
LCBzdWdnZXN0ZWRGaWxlbmFtZSksIDApOwotICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsK
KyAgICBSZXNvdXJjZVJlcXVlc3QgdXBkYXRlZFJlcXVlc3QocmVxdWVzdCk7CisgICAgLy8gUmVx
dWVzdCdzIGZpcnN0UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwg
b2YgdGhlIGRvd25sb2FkIHJlcXVlc3QuCisgICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3Ag
bGV2ZWwgZG9jdW1lbnQncyBVUkwuCisgICAgaWYgKGluaXRpYXRpbmdQYWdlKSB7CisgICAgICAg
IFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGluaXRpYXRpbmdQYWdlLT5w
YWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQ
YXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwpOworICAgICAgICB1cGRhdGVkUmVxdWVz
dC5zZXRJc1NhbWVTaXRlKGFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGluaXRpYXRpbmdQYWdl
VVJMLCByZXF1ZXN0LnVybCgpKSk7CisgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRU
UEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQorICAgICAgICAgICAgdXBk
YXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChpbml0aWF0aW5nUGFnZS0+dXNlckFnZW50Rm9y
VVJMKHJlcXVlc3QudXJsKCkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICB1cGRhdGVkUmVxdWVz
dC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhVUkwoKSk7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0
LnNldElzU2FtZVNpdGUoZmFsc2UpOworICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hU
VFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKKyAgICAgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJB
Z2VudCgpKTsKICAgICB9CisgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZhbHNlKTsK
KyAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6RG93bmxvYWRSZXF1ZXN0KGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgZG93bmxvYWRQcm94
eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0LCBpc0FwcEJvdW5kLCBzdWdnZXN0ZWRGaWxl
bmFtZSksIDApOwogCiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CkBAIC0xNDM4LDE3ICsx
MTIwLDEyIEBAIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRl
RGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94CiBEb3dubG9hZFByb3h5JiBXZWJQcm9j
ZXNzUG9vbDo6cmVzdW1lRG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQ
YWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBBUEk6OkRhdGEmIHJlc3VtZURhdGEsIGNv
bnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0gY3JlYXRlRG93
bmxvYWRQcm94eShkYXRhU3RvcmUsIFJlc291cmNlUmVxdWVzdCgpLCBpbml0aWF0aW5nUGFnZSwg
eyB9KTsKLSAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklE
KCk7CiAKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZTsKICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGUocGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXN1
bWVEb3dubG9hZChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCByZXN1bWVE
YXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOwot
ICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKLSAgICB9Ci0KKyAgICBkYXRhU3RvcmUubmV0
d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxv
YWQoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVz
dW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAw
KTsKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KIApAQCAtMTUxNywxMSArMTE5NCw2IEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZnJlc2hQbHVnaW5zKCkKIAogI2VuZGlmIC8vIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQogCi1Qcm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdv
cmtQcm9jZXNzSWRlbnRpZmllcigpCi17Ci0gICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MgPyBt
X25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpIDogMDsKLX0KLQogUHJvY2Vzc0lE
IFdlYlByb2Nlc3NQb29sOjpwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcigpCiB7CiAgICAgcmV0
dXJuIG1fcHJld2FybWVkUHJvY2VzcyA/IG1fcHJld2FybWVkUHJvY2Vzcy0+cHJvY2Vzc0lkZW50
aWZpZXIoKSA6IDA7CkBAIC0xNTU4LDE0ICsxMjMwLDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAg
ICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNT
ZWN1cmUodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNj
aGVtZUFzU2VjdXJlKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hX
ZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUp
IHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSwgMCk7Cisg
ICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBh
c3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAg
ICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNC
eXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQ
cm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3Np
bmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlw
YXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRh
U3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0
b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdD
b250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUo
Y29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNTc4LDE0ICsxMjU0LDE4IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmIHVybFNj
aGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJV
UkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7Ci0g
ICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdp
c3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6
Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRh
dGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSks
IDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVt
ZUFzTm9BY2Nlc3MoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFs
U2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hl
bWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0
ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQ
cm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNj
ZXNzKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0
YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAg
ICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsK
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3BsYXlJc29s
YXRlZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MDYsMTAgKzEyODYsOCBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJv
dG9jb2xIYW5kbGVycyhjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hl
bWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5hZGQodXJsU2NoZW1lKTsKLSAgICBmb3Ig
KGF1dG8qIHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90
b2NvbCh1cmxTY2hlbWUpOwotICAgIH0KKyAgICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVt
ZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVB
c0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBA
IC0xNjE4LDEwICsxMjk2LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2Jh
bFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb24KICAgICAgICAgcmV0
dXJuOwogCiAgICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCku
cmVtb3ZlKHVybFNjaGVtZSk7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnVucmVn
aXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwotICAgIH0KKyAg
ICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3
b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1l
Rm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQoY29uc3QgU3RyaW5nJiB1
cmxTY2hlbWUpCkBAIC0xNjU1LDE2ICsxMzMxLDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
dENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogCiAgICAgc2VuZFRvQWxsUHJvY2Vz
c2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpKTsKIAot
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7
CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW2NhY2hlTW9k
ZWxdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5l
dHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9k
ZWwoY2FjaGVNb2RlbCksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoQ2FjaGVNb2RlbCBjYWNoZU1vZGVs
KQogewogICAgIHVwZGF0ZUJhY2tGb3J3YXJkQ2FjaGVDYXBhY2l0eSgpOwogCi0gICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5n
KGNhY2hlTW9kZWwpLCB7IH0sIHsgfSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdl
YnNpdGVEYXRhU3RvcmUoW2NhY2hlTW9kZWxdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUp
IHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoY2Fj
aGVNb2RlbCksIHsgfSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
dERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCkBA
IC0xNjc0LDEyICsxMzUyLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVl
c3RUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKIAogRG93bmxvYWRQcm94
eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYg
ZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYlBhZ2VQcm94eSog
b3JpZ2luYXRpbmdQYWdlLCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8pCiB7Ci0gICAg
cmV0dXJuIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCZkYXRhU3RvcmUpLmNyZWF0ZURvd25sb2FkUHJv
eHkoZGF0YVN0b3JlLCByZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7Ci19Ci0K
LXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNr
Z3JvdW5kKQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZChiYWNrZ3JvdW5kKTsKKyAgICByZXR1cm4gZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNz
KCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsICp0aGlzLCByZXF1ZXN0LCBmcmFtZUlu
Zm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFkZE1lc3Nh
Z2VSZWNlaXZlcihJUEM6OlJlY2VpdmVyTmFtZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6Ok1l
c3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQpAQCAtMTc1MCwzMCArMTQyMyw2IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnN0b3BNZW1vcnlTYW1wbGVyKCkKICAgICBzZW5kVG9BbGxQcm9j
ZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlN0b3BNZW1vcnlTYW1wbGVyKCkpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2Vu
ZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBVJiYgcmVwbHkpCi17Ci0gICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2Uo
KSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoc3RkOjpmb3J3YXJkPFQ+KG1l
c3NhZ2UpLCBzdGQ6OmZvcndhcmQ8VT4ocmVwbHkpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNz
UG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lv
bklEKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFs
cyhzZXNzaW9uSUQpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0
d29ya1Byb2Nlc3MoKQotewotICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7Ci0KLSAgICBp
ZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX25ldHdv
cmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsK
LX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlQWxsV2ViQ29udGVudFByb2Nlc3Nl
cygpCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXMgPSBt
X3Byb2Nlc3NlczsKQEAgLTE3ODEsNDAgKzE0MzAsMTUgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
dGVybWluYXRlQWxsV2ViQ29udGVudFByb2Nlc3NlcygpCiAgICAgICAgIHByb2Nlc3MtPnRlcm1p
bmF0ZSgpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVw
YXJlVG9TdXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1
cm4gY29tcGxldGlvbkhhbmRsZXIoKTsKLQotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcmVw
YXJlVG9TdXNwZW5kKElzU3VzcGVuc2lvbkltbWluZW50OjpObywgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NX
aWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJv
Y2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NXaWxsU3VzcGVuZElt
bWluZW50bHlGb3JUZXN0aW5nKCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3
b3JrUHJvY2Vzc0RpZFJlc3VtZSgpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7Ci19Ci0KIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCkKIHsKICNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCiAgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7
Ci0gICAgd2hpbGUgKG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb21wdXRlU2l6ZSgpKQotICAg
ICAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYmVnaW4oKS0+ZGlzYWJsZVNlcnZpY2VXb3Jr
ZXJzKCk7CisgICAgd2hpbGUgKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb21wdXRlU2l6ZSgp
KQorICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuYmVnaW4oKS0+ZGlzYWJsZVNlcnZp
Y2VXb3JrZXJzKCk7CiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Zmx1c2hDb29r
aWVzKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LmZsdXNoQ29va2llcyhzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0K
LQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlQXV0b21hdGlvbkNhcGFiaWxpdGllcygpIGNv
bnN0CiB7CiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCkBAIC0yMDg5LDE1ICsxNzEzLDIx
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlcG9ydFdlYkNvbnRlbnRDUFVUaW1lKFNlY29uZHMg
Y3B1VGltZSwgdWludDY0X3QgYWN0aXZpdHlTCiAjZW5kaWYKIH0KIAorV2Vha0hhc2hTZXQ8V2Vi
UHJvY2Vzc1Byb3h5PiYgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKQor
eworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+
PiBwcm9jZXNzZXM7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKwogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbnMoKQogewotICAgIGVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkudXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZv
ckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsK
KyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkudXBkYXRlUHJvY2Vzc0Fzc2VydGlv
bigpOworICAgIH0pOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICAvLyBDaGVjayBv
biBuZXh0IHJ1biBsb29wIHNpbmNlIHRoZSB3ZWIgcHJvY2VzcyBwcm94eSB0b2tlbnMgYXJlIHBy
b2JhYmx5IGJlaW5nIHVwZGF0ZWQuCi0gICAgY2FsbE9uTWFpblJ1bkxvb3AoW3RoaXMsIHdlYWtU
aGlzID0gbWFrZVdlYWtQdHIodGhpcyldIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6
IG1fc2VydmljZVdvcmtlclByb2Nlc3NlcykKKyAgICBjYWxsT25NYWluUnVuTG9vcChbXSB7Cisg
ICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc2VzKCkpCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVTZXJ2aWNl
V29ya2VyUHJvY2Vzc0Fzc2VydGlvbigpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMTA3LDcgKzE3
MzcsNyBAQCBib29sIFdlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFn
ZVByb3h5SWRlbnRpZmllciBwYWdlSUQpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluZWZmaWNpZW50LgotICAgIHJldHVybiBXVEY6
OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW3BhZ2VJRF0oYXV0byYgcHJvY2Vzcykg
eworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW3BhZ2VJ
RF0oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29y
a2VyUGFnZVByb3h5KHBhZ2VJRCk7CiAgICAgfSk7CiAjZW5kaWYKQEAgLTIzMjksMTQgKzE5NTks
NiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVz
dGluZygpCiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFp
biwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvRG9tYWluLCBPcHRpb25TZXQ8Q3Jvc3NTaXRl
TmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6RmxhZz4gbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgV2Vi
UGFnZVByb3h5SWRlbnRpZmllciB3ZWJQYWdlUHJveHlJRCwgUGFnZUlkZW50aWZpZXIgd2ViUGFn
ZUlEKQotewotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNm
ZXIoc2Vzc2lvbklELCBmcm9tRG9tYWluLCB0b0RvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zl
ciwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJRCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4+JiYgZG9tYWlucykKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6
OldlYlByb2Nlc3M6OlNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKGRvbWFpbnMpKTsKQEAg
LTIzODcsMjcgKzIwMDksMjcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlQXVkaWJsZU1l
ZGlhQXNzZXJ0aW9ucygpCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MoYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQog
ewotICAgIGlmIChtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKKyAgICBpZiAoc191c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzID09IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJz
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2Vzcz0lZCkiLCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBX
RUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19TVEFUSUMoU2VydmljZVdvcmtlciwgInNldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzPSVkKSIsIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogCi0gICAgbV91c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzczsKLSAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwotICAgIHRlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzKCk7CisgICAgc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9v
bC0+dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIH0KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0
aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3NlcnZp
Y2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjph
bnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAg
ICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRl
c3RpbmcoKTsKICAgICB9KTsKIH0KIAogYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdv
cmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdAogewotICAgIHJldHVybiBX
VEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10oYXV0byYgcHJvY2Vzcykgewor
ICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW10oYXV0byYg
cHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyQmFja2dy
b3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5kZXggZDFmMWZlOTYxNTA2YTFlNWYxMzI1ZmE5OWE1NjA4
Yjk1MGI2YWI3MS4uZWJiY2FhNGVjYjFkNzM3MTdiMWEzNTQ4MmE3MmZhOWNmNGRlMWU0ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCkBAIC04MSw3ICs4MSw2IEBA
IE9CSkNfQ0xBU1MgV0tQcmVmZXJlbmNlT2JzZXJ2ZXI7CiAKIG5hbWVzcGFjZSBBUEkgewogY2xh
c3MgQXV0b21hdGlvbkNsaWVudDsKLWNsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsK
IGNsYXNzIERvd25sb2FkQ2xpZW50OwogY2xhc3MgSFRUUENvb2tpZVN0b3JlOwogY2xhc3MgSW5q
ZWN0ZWRCdW5kbGVDbGllbnQ7CkBAIC0xODAsNyArMTc5LDYgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0SGlzdG9yeUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9y
eUNsaWVudD4mJik7CiAgICAgdm9pZCBzZXREb3dubG9hZENsaWVudChVbmlxdWVSZWY8QVBJOjpE
b3dubG9hZENsaWVudD4mJik7CiAgICAgdm9pZCBzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JiYpOwotICAgIHZvaWQgc2V0TGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudD4mJik7CiAKICAgICB2b2lkIHNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2
aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKICAgICBjb25zdCBTdHJpbmcmIGN1
c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fY29uZmln
dXJhdGlvbi0+Y3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCk7IH0KQEAg
LTE5MSwxNyArMTg5LDkgQEAgcHVibGljOgogICAgIC8vIG51bGwgY2hlY2tzIGluIFdlYlBhZ2VQ
cm94eS4KICAgICBXZWJQcm9jZXNzUHJveHkqIGR1bW15UHJvY2Vzc1Byb3h5KFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCkgY29uc3QgeyByZXR1cm4gbV9kdW1teVByb2Nlc3NQcm94aWVzLmdldChz
ZXNzaW9uSUQpLmdldCgpOyB9CiAKLSAgICAvLyBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNz
IGFzIGFwcHJvcG9yaWF0ZSBmb3IgY3VycmVudCBwcm9jZXNzIG1vZGVsLiBUaGUgY29ubmVjdGlv
biBtdXN0IGJlIG5vbi1udWxsLgotICAgIElQQzo6Q29ubmVjdGlvbiogbmV0d29ya2luZ1Byb2Nl
c3NDb25uZWN0aW9uKCk7Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0Fs
bFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNzYWdlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2
b2lkIHNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oY29uc3QgVCYgbWVzc2FnZSwgUEFMOjpT
ZXNzaW9uSUQpOwogCi0gICAgLy8gU2VuZHMgdGhlIG1lc3NhZ2UgdG8gV2ViUHJvY2VzcyBvciBO
ZXR3b3JrUHJvY2VzcyBhcyBhcHByb3BvcmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQm
JiBtZXNzYWdlKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiB2b2lkIHNl
bmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KTsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hp
bmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSk7Ci0KICAgICB2b2lkIHByb2Nlc3NEaWRGaW5pc2hM
YXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKICAgICBXZWJQcm9jZXNzQ2FjaGUmIHdlYlBy
b2Nlc3NDYWNoZSgpIHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0NhY2hlLmdldCgpOyB9CkBAIC0yMDks
OSArMTk5LDYgQEAgcHVibGljOgogICAgIC8vIERpc2Nvbm5lY3QgdGhlIHByb2Nlc3MgZnJvbSB0
aGUgY29udGV4dC4KICAgICB2b2lkIGRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSop
OwogCi0gICAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlKiB3ZWJzaXRlRGF0YVN0b3JlKCkgY29u
c3QgeyByZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRQcmlt
YXJ5RGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7IG1fd2Vi
c2l0ZURhdGFTdG9yZSA9ICZkYXRhU3RvcmU7IH0KLQogICAgIFJlZjxXZWJQYWdlUHJveHk+IGNy
ZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsK
IAogICAgIHZvaWQgcGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlk
ZW50aWZpZXIsIFdlYnNpdGVEYXRhU3RvcmUmKTsKQEAgLTI2MiwxMCArMjQ5LDggQEAgcHVibGlj
OgogICAgIHZvaWQgYWRkU3VwcG9ydGVkUGx1Z2luKFN0cmluZyYmIG1hdGNoaW5nRG9tYWluLCBT
dHJpbmcmJiBuYW1lLCBIYXNoU2V0PFN0cmluZz4mJiBtaW1lVHlwZXMsIEhhc2hTZXQ8U3RyaW5n
PiBleHRlbnNpb25zKTsKICAgICB2b2lkIGNsZWFyU3VwcG9ydGVkUGx1Z2lucygpOwogCi0gICAg
UHJvY2Vzc0lEIG5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpOwogICAgIFByb2Nlc3NJRCBwcmV3
YXJtZWRQcm9jZXNzSWRlbnRpZmllcigpOwogICAgIHZvaWQgYWN0aXZlUGFnZXNPcmlnaW5zSW5X
ZWJQcm9jZXNzRm9yVGVzdGluZyhQcm9jZXNzSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVj
dG9yPFN0cmluZz4mJik+JiYpOwotICAgIGJvb2wgbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVu
dEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CiAKICAgICBXZWJQYWdlR3JvdXAmIGRlZmF1bHRQ
YWdlR3JvdXAoKSB7IHJldHVybiBtX2RlZmF1bHRQYWdlR3JvdXAuZ2V0KCk7IH0KIApAQCAtMzA3
LDggKzI5Miw2IEBAIHB1YmxpYzoKICAgICBBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50
JiBoaXN0b3J5Q2xpZW50KCkgeyByZXR1cm4gKm1faGlzdG9yeUNsaWVudDsgfQogICAgIFdlYkNv
bnRleHRDbGllbnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKLSAgICBBUEk6OkN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkg
Y29uc3QgeyByZXR1cm4gKm1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OyB9Ci0KICAgICBz
dHJ1Y3QgU3RhdGlzdGljcyB7CiAgICAgICAgIHVuc2lnbmVkIHdrVmlld0NvdW50OwogICAgICAg
ICB1bnNpZ25lZCB3a1BhZ2VDb3VudDsKQEAgLTMyNCw4ICszMDcsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKICAgICB2b2lkIHRlcm1pbmF0ZVNl
cnZpY2VXb3JrZXJzKCk7CiAKLSAgICB2b2lkIGZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Np
b25JRCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0KICAgICB2b2lkIHNldFNob3Vs
ZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9z
aG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9CiAg
ICAgYm9vbCBzaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmc7IH0KICAgICB2b2lkIHNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWls
Rm9yVGVzdGluZyhib29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nID0gdmFsdWU7IH0KQEAgLTM4OCwxOSArMzY5LDEzIEBAIHB1Ymxp
YzoKICNlbmRpZgogCiAgICAgLy8gTmV0d29yayBQcm9jZXNzIE1hbmFnZW1lbnQKLSAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5JiBlbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3
aXRoV2Vic2l0ZURhdGFTdG9yZSA9IG51bGxwdHIpOwotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkq
IG5ldHdvcmtQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKTsg
fQogICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKTsK
IAotICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYs
IE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRl
bGF5ZWRSZXBseSYmKTsKLQogICAgIGJvb2wgaXNTZXJ2aWNlV29ya2VyUGFnZUlEKFdlYlBhZ2VQ
cm94eUlkZW50aWZpZXIpIGNvbnN0OwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICB2
b2lkIGVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3
b3JrUHJvY2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNz
aW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgc3RhdGljIHZvaWQgZXN0
YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9j
ZXNzUHJveHkmLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYmLCBQQUw6OlNlc3Npb25JRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIHJlbW92ZUZyb21TZXJ2aWNl
V29ya2VyUHJvY2Vzc2VzKFdlYlByb2Nlc3NQcm94eSYpOwotICAgIHNpemVfdCBzZXJ2aWNlV29y
a2VyUHJveGllc0NvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
LmNvbXB1dGVTaXplKCk7IH0KLSAgICB2b2lkIHNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9y
U2VydmljZVdvcmtlcihib29sIGFsbG93cykgeyBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9y
U2VydmljZVdvcmtlciA9IGFsbG93czsgfQotICAgIGJvb2wgYWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JTZXJ2aWNlV29ya2VyKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZUZvclNlcnZpY2VXb3JrZXI7IH0KKyAgICBzaXplX3Qgc2VydmljZVdvcmtlclByb3hpZXND
b3VudCgpIGNvbnN0IHsgcmV0dXJuIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb21wdXRlU2l6
ZSgpOyB9CiAgICAgdm9pZCB1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KGNvbnN0IFN0cmlu
ZyYgdXNlckFnZW50KTsKICAgICBjb25zdCBPcHRpb25hbDxVc2VyQ29udGVudENvbnRyb2xsZXJJ
ZGVudGlmaWVyPiYgdXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3Jr
ZXJzKCkgY29uc3QgeyByZXR1cm4gbV91c2VyQ29udGVudENvbnRyb2xsZXJJREZvclNlcnZpY2VX
b3JrZXI7IH0KICAgICBib29sIGhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JU
ZXN0aW5nKCkgY29uc3Q7CkBAIC00NTksOCArNDM0LDYgQEAgcHVibGljOgogICAgIGJvb2wgYWx3
YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gbV9hbHdheXNSdW5z
QXRCYWNrZ3JvdW5kUHJpb3JpdHk7IH0KICAgICBib29sIHNob3VsZFRha2VVSUJhY2tncm91bmRB
c3NlcnRpb24oKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRp
b247IH0KIAotICAgIHZvaWQgc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91
bmQpOwotICAgIAogI2lmIEVOQUJMRShHQU1FUEFEKQogICAgIHZvaWQgZ2FtZXBhZENvbm5lY3Rl
ZChjb25zdCBVSUdhbWVwYWQmLCBXZWJDb3JlOjpFdmVudE1ha2VzR2FtZXBhZHNWaXNpYmxlKTsK
ICAgICB2b2lkIGdhbWVwYWREaXNjb25uZWN0ZWQoY29uc3QgVUlHYW1lcGFkJik7CkBAIC00OTgs
NyArNDcxLDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZv
clRlc3RpbmcoKTsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAg
dm9pZCBkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25J
RCwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwgT3B0aW9uU2V0PFdlYkNvcmU6OkNy
b3NzU2l0ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6OkZsYWc+LCBXZWJQYWdlUHJveHlJZGVudGlm
aWVyLCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllcik7CiAgICAgdm9pZCBzZXREb21haW5zV2l0aFVz
ZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmKTsKICAg
ICB2b2lkIHNlZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRm9yVGVzdGluZyhjb25zdCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiYgZmlyc3RQYXJ0eURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4mIHRoaXJkUGFydHlEb21haW4sIGJvb2wgc2hvdWxkU2NoZWR1bGVOb3Rp
ZmljYXRpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBzZW5kUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOwpAQCAtNTI1LDggKzQ5Nyw4IEBAIHB1YmxpYzoKICAgICAKICAgICBQbHVnSW5BdXRv
U3RhcnRQcm92aWRlciYgcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIoKSB7IHJldHVybiBtX3BsdWdJ
bkF1dG9TdGFydFByb3ZpZGVyOyB9CiAKLSAgICB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MoYm9vbCk7Ci0gICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKCkgY29uc3QgeyByZXR1cm4gbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOyB9
CisgICAgc3RhdGljIHZvaWQgc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29s
KTsKKyAgICBzdGF0aWMgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkgeyBy
ZXR1cm4gc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOyB9CiAKICNpZiBFTkFCTEUo
Q0ZQUkVGU19ESVJFQ1RfTU9ERSkKICAgICB2b2lkIG5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZChj
b25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IE9wdGlvbmFsPFN0
cmluZz4mIGVuY29kZWRWYWx1ZSk7CkBAIC01NDMsNiArNTE1LDE3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKE9TT2JqZWN0UHRy
PHhwY19vYmplY3RfdD4gZW5kcG9pbnRNZXNzYWdlKTsKICNlbmRpZgogCisgICAgc3RhdGljIHZv
aWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMmKTsKKyAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1dpdGhD
dXN0b21Qcm90b2NvbEhhbmRsZXJzKCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAg
IHN0YXRpYyBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJp
bmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5n
Q2FjaGVzRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGly
ZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3Rvcnko
KTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAK
QEAgLTU1Niw4ICs1MzksNiBAQCBwcml2YXRlOgogICAgIFdlYlByb2Nlc3NQcm94eSYgY3JlYXRl
TmV3V2ViUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdh
cm1lZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKICAgICB2b2lkIGluaXRp
YWxpemVOZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYsIFdlYnNpdGVEYXRhU3RvcmUqLCBX
ZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1l
ZDo6Tm8pOwogCi0gICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwotCiAgICAgdm9pZCBoYW5kbGVNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJE
YXRhJiBtZXNzYWdlQm9keSk7CiAgICAgdm9pZCBoYW5kbGVTeW5jaHJvbm91c01lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEm
IG1lc3NhZ2VCb2R5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJEYXRhJiYpPiYmKTsKIApA
QCAtNTgxLDE0ICs1NjIsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB1c2VzU2luZ2xlV2ViUHJv
Y2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi0+dXNlc1NpbmdsZVdlYlByb2Nl
c3MoKTsgfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBzdGF0aWMgU3RyaW5nIGNv
b2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURp
cmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgp
OwotICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0
YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7Ci0jZW5kaWYKLQogI2lm
IFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMo
KTsKICAgICB2b2lkIHVucmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKQEAgLTYzMCw5
ICs2MDMsOCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYWtQdHI8
V2ViUHJvY2Vzc1Byb3h5Pj4gbV9kdW1teVByb2Nlc3NQcm94aWVzOyAvLyBMaWdodHdlaWdodCBX
ZWJQcm9jZXNzUHJveHkgb2JqZWN0cyB3aXRob3V0IGJhY2tpbmcgcHJvY2Vzcy4KIAogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+IG1f
c2VydmljZVdvcmtlclByb2Nlc3NlczsKKyAgICBzdGF0aWMgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vz
c1Byb3h5PiYgc2VydmljZVdvcmtlclByb2Nlc3NlcygpOwogICAgIGJvb2wgbV93YWl0aW5nRm9y
V29ya2VyQ29udGV4dFByb2Nlc3NDb25uZWN0aW9uIHsgZmFsc2UgfTsKLSAgICBib29sIG1fYWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyIHsgZmFsc2UgfTsKICAgICBTdHJp
bmcgbV9zZXJ2aWNlV29ya2VyVXNlckFnZW50OwogICAgIE9wdGlvbmFsPFdlYlByZWZlcmVuY2Vz
U3RvcmU+IG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzOwogICAgIE9wdGlvbmFsPFVzZXJDb250
ZW50Q29udHJvbGxlcklkZW50aWZpZXI+IG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2
aWNlV29ya2VyOwpAQCAtNjQ4LDcgKzYyMCw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4gbV9hdXRvbWF0aW9uQ2xpZW50OwogICAgIFVuaXF1
ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PiBtX2Rvd25sb2FkQ2xpZW50OwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBt
X2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKIAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9u
U2Vzc2lvbj4gbV9hdXRvbWF0aW9uU2Vzc2lvbjsKIApAQCAtNjgwLDggKzY1MSw2IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX21lbW9yeVNhbXBsZXJFbmFibGVkIHsgZmFsc2UgfTsKICAgICBkb3Vi
bGUgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWwgeyAxNDAwLjAgfTsKIAotICAgIFJlZlB0cjxXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU+IG1fd2Vic2l0ZURhdGFTdG9yZTsKLQogICAgIHR5cGVkZWYg
SGFzaE1hcDxjb25zdCBjaGFyKiwgUmVmUHRyPFdlYkNvbnRleHRTdXBwbGVtZW50PiwgUHRySGFz
aDxjb25zdCBjaGFyKj4+IFdlYkNvbnRleHRTdXBwbGVtZW50TWFwOwogICAgIFdlYkNvbnRleHRT
dXBwbGVtZW50TWFwIG1fc3VwcGxlbWVudHM7CiAKQEAgLTcxNCw4ICs2ODMsNiBAQCBwcml2YXRl
OgogCiAgICAgYm9vbCBtX3Byb2Nlc3NUZXJtaW5hdGlvbkVuYWJsZWQgeyB0cnVlIH07CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsK
LQogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+PiBtX2Rp
Y3Rpb25hcnlDYWxsYmFja3M7CiAKICNpZiBVU0UoU09VUCkKQEAgLTgyMCw3ICs3ODcsNyBAQCBw
cml2YXRlOgogI2Vsc2UKICAgICBib29sIG1faXNEZWxheWVkV2ViUHJvY2Vzc0xhdW5jaERpc2Fi
bGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzIHsgZmFsc2UgfTsKKyAgICBzdGF0aWMgYm9vbCBzX3VzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3M7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQog
ICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IG1fZG9tYWluc1dpdGhVc2Vy
SW50ZXJhY3Rpb247CkBAIC04MzEsMjAgKzc5OCw2IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3Jr
aW5nUHJvY2VzcyhUJiYgbWVzc2FnZSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBt
X25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1Jl
bGF1bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpCi17Ci0gICAgZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNz
YWdlKSwgMCk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpzZW5kVG9BbGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSkKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCmluZGV4IGQ2NjEwMzM4YjZjZjYwYTI3YTZm
NzVkYWVjMzQ5YThmNzJhYjNiODUuLjJlNTRhODExNWM0ODg3ZjBhMWRkODNlZGY1YmRjYmUzYTQw
OGEyNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApA
QCAtNzM4LDcgKzczOCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXRQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbih1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4sIE1lCiAKIHZvaWQgV2ViUHJv
Y2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oTWVzc2FnZXM6OldlYlByb2Nl
c3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBs
eSkKIHsKLSAgICBtX3Byb2Nlc3NQb29sLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKnRo
aXMsIFdURk1vdmUocmVwbHkpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nl
c3MoKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKnRoaXMsIFdURk1vdmUocmVwbHkpKTsK
IH0KIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVD
b2NvYS5tbQppbmRleCBlZWU3OGZiYzk4ODY0OTQ3NmQxMDk1YjQ5Y2YxMDZjMTg0NDVkMjQ1Li44
YjY4OTYzNDhjNmYyZmRmY2ZkZGUxNDg4OTYwMTVmMzYzMmQ2NDdlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29j
b2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vi
c2l0ZURhdGFTdG9yZUNvY29hLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbXBvcnQgIkNvb2tp
ZVN0b3JhZ2VVdGlsc0NGLmgiCiAjaW1wb3J0ICJEZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5oIgor
I2ltcG9ydCAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2ltcG9ydCAiU2FuZGJveFV0aWxpdGll
cy5oIgogI2ltcG9ydCAiU3RvcmFnZU1hbmFnZXIuaCIKICNpbXBvcnQgIldlYkZyYW1lUG9saWN5
TGlzdGVuZXJQcm94eS5oIgpAQCAtNDQsNiArNDUsNyBAQAogI2ltcG9ydCA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgogI2ltcG9ydCA8d3Rm
L1VSTC5oPgorI2ltcG9ydCA8d3RmL2NvY29hL0VudGl0bGVtZW50cy5oPgogI2ltcG9ydCA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTU2
Myw0ICs1NjUsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlaW5pdGlhbGl6ZUFwcEJvdW5k
RG9tYWlucygpCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJv
Y2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmIGVudGl0bGVtZW50KQor
eworICAgIHJldHVybiBXVEY6Omhhc0VudGl0bGVtZW50KG5ldHdvcmtQcm9jZXNzKCkuY29ubmVj
dGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVudGl0bGVtZW50LnV0ZjgoKS5kYXRhKCkpOworfQor
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IDA4MzBjYTc1YTdmYzM4ZTY0NWI3NzViMzliMzM3NWQ0
YzIwNTAzN2QuLjFhODZiZWYyMmNhYzljNjQzNzM0MDdjN2EzYWYyMTVhMTg3YjI1NzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRo
ZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1
ZGUgIldlYkJhY2tGb3J3YXJkQ2FjaGUuaCIKKyNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJv
eHkuaCIKICNpbmNsdWRlICJXZWJLaXQySW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQ
cm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDYWNoZS5oIgpAQCAtNzUsNiArNzYsMTAgQEAK
ICNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oIgogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJEZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5oIgorI2Vu
ZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgYm9vbCBhbGxvd3NXZWJzaXRlRGF0
YVJlY29yZHNGb3JBbGxPcmlnaW5zOwpAQCAtODMsMTMgKzg4LDI5IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6YWxsb3dXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zKCkKICAgICBhbGxv
d3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zID0gdHJ1ZTsKIH0KIAotc3RhdGljIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgbm9uRGVmYXVsdERhdGFT
dG9yZXMoKQorc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUq
PiYgYWxsRGF0YVN0b3JlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNVSVRocmVhZCgpKTsK
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0
ZURhdGFTdG9yZSo+PiBtYXA7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAordm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRh
U3RvcmUmKT4mJiBmdW5jdGlvbikKK3sKKyAgICBmb3IgKGF1dG8qIGRhdGFTdG9yZSA6IGFsbERh
dGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICAgICAgZnVuY3Rpb24oKmRhdGFTdG9yZSk7Cit9CisK
Ky8vIEZJWE1FOiBSZXBsYWNlIHRoaXMgd2l0aCB0aGUgY29ycmVjdCB3ZWJzaXRlIGRhdGEgc3Rv
cmVzLgorVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3Jl
OjpwYXJhbWV0ZXJzRnJvbUFsbFN0b3JlcygpCit7CisgICAgVmVjdG9yPFdlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzPiBhbGxQYXJhbWV0ZXJzOworICAgIGFsbFBhcmFtZXRlcnMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShhbGxEYXRhU3RvcmVzKCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIHN0
b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgICAgICBhbGxQYXJhbWV0ZXJzLnVu
Y2hlY2tlZEFwcGVuZChzdG9yZS0+cGFyYW1ldGVycygpKTsKKyAgICByZXR1cm4gYWxsUGFyYW1l
dGVyczsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVEYXRhU3RvcmU6OmNyZWF0
ZU5vblBlcnNpc3RlbnQoKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYnNpdGVEYXRh
U3RvcmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb246OmNyZWF0ZShJc1BlcnNpc3RlbnQ6
Ok5vKSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlRXBoZW1lcmFsU2Vzc2lvbklEKCkpKTsKQEAg
LTExNSwxMCArMTM2LDExIEBAIFdlYnNpdGVEYXRhU3RvcmU6OldlYnNpdGVEYXRhU3RvcmUoUmVm
PFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYmIGNvbmZpZ3VyCiAjZW5kaWYKIHsKICAg
ICBXVEY6OnNldFByb2Nlc3NQcml2aWxlZ2VzKGFsbFByaXZpbGVnZXMoKSk7Ci0gICAgbWF5YmVS
ZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICByZWdpc3RlcldpdGhTZXNzaW9uSURNYXAo
KTsKICAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIAogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5hZGRTZXNzaW9uKCp0aGlzKTsKIH0KIAogV2Vi
c2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUoKQpAQCAtMTI4LDE3ICsxNTAsMTIgQEAg
V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUoKQogCiAgICAgcGxhdGZvcm1EZXN0
cm95KCk7CiAKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSkgewotICAgICAgICBBU1NFUlQobm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQo
bV9zZXNzaW9uSUQpID09IHRoaXMpOwotICAgICAgICBub25EZWZhdWx0RGF0YVN0b3JlcygpLnJl
bW92ZShtX3Nlc3Npb25JRCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQ
cm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBBU1NFUlQoYWxsRGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkg
PT0gdGhpcyk7CisgICAgYWxsRGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKICNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCi0gICAgICAgIGlmIChhdXRvKiBncHVQcm9jZXNzUHJveHkgPSBHUFVQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQotICAgICAgICAgICAgZ3B1UHJvY2Vzc1By
b3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKKyAgICBpZiAoYXV0byogZ3B1UHJvY2Vz
c1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkKKyAgICAgICAg
Z3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKICNlbmRpZgogfQog
CkBAIC0xNjksMTcgKzE4NiwzMiBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmVFeGlzdHMoKQogICAgIHJldHVybiAhIWdsb2JhbERlZmF1bHREYXRhU3RvcmUoKTsKIH0K
IAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgp
Cit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpCiB7Ci0g
ICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkp
IHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBub25EZWZhdWx0RGF0YVN0b3JlcygpLmFkZChtX3Nl
c3Npb25JRCwgdGhpcyk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNO
ZXdFbnRyeSk7CisgICAgYXV0byByZXN1bHQgPSBhbGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lv
bklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkp
OworfQorCitXZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFT
dG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgcmV0dXJu
IGFsbERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklEKTsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94
eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3MoKQoreworICAgIGlmICghbV9uZXR3
b3JrUHJvY2VzcykgeworICAgICAgICBpZiAobV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKKyAg
ICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MgPSAmZGVmYXVsdERhdGFTdG9yZSgpLT5uZXR3b3Jr
UHJvY2VzcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzID0g
TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlKCk7CiAgICAgfQorCisgICAgcmV0dXJuICptX25l
dHdvcmtQcm9jZXNzOwogfQogCi1XZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpl
eGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQorTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1By
b2Nlc3MoKSBjb25zdAogewotICAgIHJldHVybiBzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSA/IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25J
RCkgOiBudWxscHRyOworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYnNpdGVEYXRhU3RvcmUmPigq
dGhpcykubmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWdp
c3RlclByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQpAQCAtMTk1LDEyICsyMjcsNiBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVucmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94
eSYgcHJvY2VzcykKICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CiB9CiAKLVdlYlBy
b2Nlc3NQb29sKiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VP
cGVyYXRpb25zKCkKLXsKLSAgICBhdXRvIHBvb2xzID0gcHJvY2Vzc1Bvb2xzKDEpOwotICAgIHJl
dHVybiBwb29scy5pc0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVnaW4oKS0+Z2V0KCk7Ci19
Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3Nhcnko
KQogewogICAgIGlmIChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBAIC00NDIsMTUgKzQ2OCwx
NCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogICAgIGF1dG8gbmV0d29ya1Byb2Nlc3NBY2Nl
c3NUeXBlID0gY29tcHV0ZU5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFGZXRjaChkYXRh
VHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CiAgICAgaWYgKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlw
ZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkgewogICAgICAgICBhdXRvIHBvb2xzID0gbmV0
d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09IFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2ggPyBlbnN1
cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nlc3NQb29scygpOworICAgICAgICAvLyBGSVhNRTogSXQg
bWlnaHQgbm90IGJlIGNvcnJlY3QgdG8gaXRlcmF0ZSB0aGUgcG9vbHMgaGVyZS4KICAgICAgICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5l
dHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNz
VHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Okxh
dW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
dGhpcyk7CisgICAgICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKQEAg
LTQ1OCw3ICs0ODMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5
KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwot
ICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmZldGNoV2Vic2l0ZURh
dGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yLCBwcm9jZXNzUG9vbF0oV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsKKyAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzKCkuZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVz
LCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXShXZWJzaXRl
RGF0YSB3ZWJzaXRlRGF0YSkgewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9CkBAIC03MjYsMTUgKzc1MSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxs
VGltZQogICAgIGF1dG8gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZU5ldHdvcmtQ
cm9jZXNzQWNjZXNzVHlwZUZvckRhdGFSZW1vdmFsKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgp
KTsKICAgICBpZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NBY2Nlc3NUeXBl
OjpOb25lKSB7CiAgICAgICAgIGF1dG8gcG9vbHMgPSBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUg
PT0gUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaCA/IGVuc3VyZVByb2Nlc3NQb29scygpIDogcHJv
Y2Vzc1Bvb2xzKCk7CisgICAgICAgIC8vIEZJWE1FOiBJdCBtaWdodCBub3QgYmUgY29ycmVjdCB0
byBpdGVyYXRlIHBvb2xzIGhlcmUuCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
b29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsK
ICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAg
ICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
ICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOworICAgICAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNh
c2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CkBAIC03NDIsNyArNzY2LDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFU
eXBlcywgV2FsbFRpbWUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVz
LCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwg
ZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9v
bF0gewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0Nh
bGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQpAQCAtODkzLDE0ICs5MTcsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92
ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogI2lm
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgaWYgKGRhdGFUeXBlcy5jb250
YWlucyhXZWJzaXRlRGF0YVR5cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MpKSB7CiAgICAgICAg
IGlmICghZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhKSB7Ci0gICAg
ICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGlu
Z0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MtPmRlbGV0ZVdlYnNpdGVE
YXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVt
b3ZlUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVs
ZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geworICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CkBAIC05OTQs
MTIgKzEwMTMsMTAgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3QgVmUKICAgICAgICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9j
ZXNzQWNjZXNzVHlwZSkgewogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25s
eUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAg
ICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7Cisg
ICAgICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKICAgICAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKQEAgLTEwMjEsNyAr
MTAzOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAg
ICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGFGb3JP
cmlnaW5zKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1lcywg
SFNUU0NhY2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0
b3IsIHByb2Nlc3NQb29sXSB7CisgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmRlbGV0ZVdl
YnNpdGVEYXRhRm9yT3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBvcmlnaW5zLCBjb29r
aWVIb3N0TmFtZXMsIEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0cmFibGVEb21haW5zLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0gewogICAgICAgICAgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgfQpAQCAtMTE4MCwxOCArMTE5NywxMiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
bW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGlu
ZyhTZWNvbmRzIHNlY29uZHMpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlBy
b2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZp
Y2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKHNlY29uZHMpLCBNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgp
LCAwKTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKHNlY29u
ZHMpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVv
dXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZXNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZygpCiB7Ci0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSwgTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JU
ZXN0aW5nOjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kU3lu
YyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91
dEZvclRlc3RpbmcoKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3Jr
ZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKIH0KIAogI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0xMjAxLDggKzEyMTIsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBtYXhpbXVtRW50cnlD
b3VudCwgQ29tcGxldAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lv
bklELCBtYXhpbXVtRW50cnlDb3VudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtX3Nl
c3Npb25JRCwgbWF4aW11bUVudHJ5Q291bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBw
cnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xMjExLDggKzEyMjEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBy
dW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCwgQ29tcGxldGlvbgogICAg
IAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0
Q291bnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1fc2Vzc2lvbklELCBwcnVuZVRhcmdl
dENvdW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMjEsOCArMTIzMCw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vj
b25kcywgQ29tcGxldGlvbkhhbmRsZXI8CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAg
cHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1l
KG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyaW5nVGltZShtX3Nlc3Np
b25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vj
b25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xMjMxLDIwICsxMjM5LDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWlu
aW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcywKIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5zZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQs
IHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1f
c2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogICAgIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+ZHVtcFJl
c291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZh
bGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wg
aXNQcmV2YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI1NiwxMiArMTI1Nyw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAg
ICAgcHJvY2Vzcy0+aXNQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5p
c1ByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wgaXNQcmV2YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI3
MywxMiArMTI2OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLmlzR3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjkyLDgg
KzEyODMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nl
c3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5z
ZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVn
TW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTMwNywxMCArMTI5Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNz
LT5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3Vy
Y2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCBpc1ZlcnlQcmV2YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTMyMiwxMiArMTMwOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzVmVyeVByZXZhbGVudFJlc291
cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzVmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZh
bGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzQxLDEwICsxMzIzLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGUKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRW
ZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1Jl
bW92YWwoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTM1Myw4ICsxMzMyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHYKICAg
ICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1Jl
bW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2Vz
QmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3QgVVJMJiB0b3BG
cmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTM2OCwyMiArMTM0NiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjbwogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVS
TCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVV
bmRlcihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVk
QXNTdWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1l
VW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVV
UkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNv
bnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTEzOTcsMjMgKzEzNjcsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJyZXNvdXJj
ZVUKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1
YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVS
TCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdp
c3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwm
IHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQyNywxMCArMTM4OCw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNv
bnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bv
b2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJv
bShjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9t
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDQy
LDEyICsxNDAwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJlc291cmNlVVIKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJl
ZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiB0
b3BGcmFtZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NTksMTIgKzE0MTIsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwm
IHRvcEZyYW1lVVJMLCBjb25zdAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9w
RnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8g
fSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRG
cm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
NDc2LDI1ICsxNDI0LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlx
dWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9wRnJhbWVVbmlx
dWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVk
RnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFVSTCYgdXJsUmVkaXJl
Y3RlZEZyb20sIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3Rp
bmdUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVj
dGVkRnJvbSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNl
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xNTA2LDYwICsxNDQzLDQxIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xl
YXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgcHJvY2Vzcy0+Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+cmVz
ZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNl
dFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnko
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNz
LT5zdWJtaXRUZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQo
V2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIHNob3Vs
ZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRmYXRo
ZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNz
aW9uSUQsIG1vZGlmaWVkU2luY2UsIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFTdW1tYXJ5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBzdHJ1
Y3QgQ2FsbGJhY2tBZ2dyZWdhdG9yIDogUmVmQ291bnRlZDxDYWxsYmFja0FnZ3JlZ2F0b3I+IHsK
LSAgICAgICAgQ2FsbGJhY2tBZ2dyZWdhdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9y
PFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQorICAgIHN0cnVjdCBMb2NhbENhbGxiYWNrQWdncmVnYXRvciA6IFJl
ZkNvdW50ZWQ8TG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3I+IHsKKyAgICAgICAgTG9jYWxDYWxsYmFj
a0FnZ3JlZ2F0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiAgICAgICAgICAgICA6IG1fY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAgICAgICAgIH07CiAKLSAgICAgICAgfkNhbGxiYWNrQWdncmVnYXRvcigpCisgICAgICAgIH5M
b2NhbENhbGxiYWNrQWdncmVnYXRvcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTE1NzQsMzggKzE0OTIsMzEgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkoQ29tcGxldGlv
bkhhbmRsZXI8dm8KICAgICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+IG1fY29tcGxldGlv
bkhhbmRsZXI7CiAgICAgICAgIFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OlRoaXJkUGFydHlEYXRhPiBtX3Jlc3VsdHM7CiAgICAgfTsKLQotICAgIFJlZlB0cjxDYWxsYmFj
a0FnZ3JlZ2F0b3I+IGNhbGxiYWNrQWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBDYWxsYmFja0Fn
Z3JlZ2F0b3IoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKLQotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9v
bC0+c2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0gewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMp
LmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShtX3Nlc3Npb25JRCwgW2NhbGxi
YWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmIGRhdGEpIHsKLSAgICAgICAgICAgICAgICBjYWxs
YmFja0FnZ3JlZ2F0b3ItPmFkZFJlc3VsdChXVEZNb3ZlKGRhdGEpKTsKLSAgICAgICAgICAgIH0p
OworICAgIAorICAgIGF1dG8gbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IgPSBhZG9wdFJlZihuZXcg
TG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKKyAg
ICAKKyAgICBhdXRvIHd0ZkNhbGxiYWNrQWdncmVnYXRvciA9IFdURjo6Q2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgbG9jYWxD
YWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQsIFtsb2NhbENhbGxiYWNrQWdn
cmVnYXRvcl0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0
eURhdGE+JiYgZGF0YSkgeworICAgICAgICAgICAgbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3ItPmFk
ZFJlc3VsdChXVEZNb3ZlKGRhdGEpKTsKICAgICAgICAgfSk7Ci0gICAgfQorICAgIH0pOworICAg
IAorICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vz
c1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFJbW1lZGlhdGVseShbd3RmQ2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoU2hv
dWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIHNob3VsZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKICAgICAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwg
eyB9LCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgeyB9LCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlQ29va2llQmxvY2tpbmdVcGRhdGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKG1fc2Vzc2lvbklELCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3Rh
dGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjE0LDI0ICsxNTI1LDEzIEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKENv
bXBsZXRpb25IYW5kCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3Npbmco
bV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRz
UHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPnN0YXRpc3RpY3NE
YXRhYmFzZUhhc0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29tcGxl
dGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc3RhdGlzdGljc0RhdGFi
YXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1cmws
IFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTY0MywyMiArMTU0MywxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dExhc3RTZWVuKGNvbnN0IFVSTCYgdXJsLCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYQog
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldExhc3RT
ZWVuKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBzZWNv
bmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRMYXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UoaW50
IGRvbWFpbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vz
cy0+ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKG1fc2Vzc2lvbklELCBkb21haW5JRCwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kb21haW5JREV4aXN0c0luRGF0YWJhc2UobV9zZXNz
aW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJs
LCBjb25zdCBVUkwmIHRvcEZyYW1lVXJsMSwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDIsIFNlY29u
ZHMgbGFzdFNlZW4sIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBTZWNvbmRzIG1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb24sIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBib29sIGlzUHJldmFsZW50LCBi
b29sIGlzVmVyeVByZXZhbGVudCwgdW5zaWduZWQgZGF0YVJlY29yZHNSZW1vdmVkLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjcwLDEwICsxNTYy
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29u
c3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9wRnIKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBwcm9jZXNzLT5tZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdG9wRnJhbWVVcmwxIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZh
bGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5tZXJnZVN0YXRpc3RpY0ZvclRl
c3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwxIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rp
b24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxl
bnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0
aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwg
Ym9vbCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBib29sIGlzUHJldmFs
ZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
Njg1LDE4ICsxNTc0LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0
YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaGFkCiAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+aW5zZXJ0RXhwaXJlZFN0YXRpc3Rp
Y0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbCwgaXNQcmV2YWxlbnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBo
YWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWws
IGlzUHJldmFsZW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9v
bCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKS5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKG1fc2Vz
c2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2Fu
bmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGVzdChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xNzA0LDggKzE1ODksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElz
UnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBsZQogICAg
IHVzZUV4cGxpY2l0SVRQU3RhdGUoKTsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NUZXN0KG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFn
ZUFjY2Vzc0VudHJpZXMoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJiBkb21haW5zKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE3MTYsNyArMTYwMCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3Rv
cmFnZUFjY2Vzc0VudHJpZXMoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQsCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICB3ZWJQYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1fc2Vzc2lv
bklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5n
ZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiAKQEAgLTE3MjQsOCArMTYwOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzIHNlY29uZHMsIENvbXBs
ZXRpb25ICiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKG1fc2Vz
c2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgc2Vjb25k
cywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MzksMTAgKzE2MjIsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZAogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkubG9nVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTE3NTQsMTMgKzE2MzQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhh
c0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dgog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5oYXNIYWRVc2Vy
SW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25j
ZShjb25zdCBVUkwmIHN1YlVybCwgY29uc3QgVVJMJiB0b3BVcmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzcyLDEzICsxNjQ2LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShj
b25zdCBVUkwmIHN1YlVybCwgY29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICAgICAgcHJvY2Vzcy0+aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxl
cihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFi
YXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJVcmwg
fSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwgfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xNzkyLDEwICsxNjYwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm8KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
Y2xlYXJVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuY2xlYXJVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwg
Ym9vbCBpc0dyYW5kZmF0aGVyZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE4MDksMTAgKzE2NzQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBD
bwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRV
c2VJVFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xODIxLDEwICsxNjgzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3MtPnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRVc2VJVFBEYXRh
YmFzZShtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlv
bkZvclRlc3RpbmcoY29uc3QgVVJMJiBmcm9tVVJMLCBjb25zdCBVUkwmIHRvVVJMLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODMzLDYyICsxNjky
LDM4IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVj
b3JhdGlvbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtE
ZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9VUkwgfSwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5r
RGVjb3JhdGlvbkZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0
aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNv
cmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyhjb25z
dCBVUkwmIHVybCwgYm9vbCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmRlbGV0ZUNvb2tpZXNG
b3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpbmNsdWRlSHR0cE9ubHlD
b29raWVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzTG9jYWxTdG9yYWdlKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxl
dGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzTG9jYWxTdG9yYWdl
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSXNv
bGF0ZWRTZXNzaW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5oYXNJc29sYXRlZFNlc3Npb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFu
ZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNJc29sYXRlZFNlc3Npb24obV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGJvb2wgZW5h
YmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoZW5hYmxlZCwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRT
aG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKQEAgLTE5MTksMTAgKzE3NTQs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUoV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZQogICAgICAgICAgICAgd2ViUHJvY2Vzcy5zZXRU
aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VGhp
cmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRo
aXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50
Rm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTE5MzAsMTAgKzE3NjIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZQogICAgIGF1dG8gZmxhZyA9IGVuYWJsZWQgPyBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZDo6WWVzIDogV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVu
dEVuYWJsZWQ6Ok5vOwogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVu
dEZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZsYWcsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKGJvb2wg
ZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTk0MSwyMCArMTc3MCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZQogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIGF1dG8gbW9kZSA9IGVuYWJsZWQgPyBXZWJDb3JlOjpG
aXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llcyA6IFdlYkNvcmU6
OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpOb25lOwogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVz
dGluZyhtX3Nlc3Npb25JRCwgbW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZUZvclRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rv
U2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFRvU2FtZVNp
dGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKGNvbnN0IFVS
TCYgZmlyc3RQYXJ0eVVSTCwgY29uc3QgVVJMJiBjbmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk2Niw4ICsxNzg5LDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RD
TkFNRURvbWFpbkZvclRlc3QKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWlu
Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURv
bWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZpcnN0UGFydHlVUkwuaG9zdCgpLnRvU3RyaW5n
KCksIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhjb25zdCBVUkwmIGNu
YW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xOTc5LDE4ICsxODAxLDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcoCiAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
c2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGlu
ZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3RvcmFn
ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3Jh
Z2UoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5jTG9j
YWxTdG9yYWdlKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhTZWNv
bmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE5OTgsOCArMTgxNSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVN
YXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDCiAjaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldENhY2hlTWF4QWdl
Q2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBG
b3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzZWNvbmRzKTsKICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwpAQCAtMjAwOSwyNiArMTgyNSwxMiBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vj
b25kcywgQwogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJl
dmFsZW50UmVzb3VyY2VzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5y
ZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0
Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNl
bmRpZgogfQogCi1ib29sIFdlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29s
KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogcHJv
Y2Vzc1Bvb2xEYXRhU3RvcmUgPSBwcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCkpCi0gICAg
ICAgIHJldHVybiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9PSB0aGlzOwotICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgcmV0dXJuIG5ldHdvcmtQcm9jZXNzUHJveHktPmhhc1Nlc3Npb24obV9zZXNzaW9uSUQpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQogSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBX
ZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBjb25zdAogewogICAg
IEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gcHJvY2Vzc1Bvb2xzOwpAQCAtMjA0Myw5
ICsxODQ1LDYgQEAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0
b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBjb24KICAgICBpZiAocHJvY2Vzc1Bvb2xz
LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBvbmUgb2YgdGhlIGxlZ2Fj
eSBkYXRhIHN0b3Jlcy4KICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nl
c3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYgKCFpc0Fzc29jaWF0
ZWRQcm9jZXNzUG9vbCgqcHJvY2Vzc1Bvb2wpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
CiAgICAgICAgICAgICBwcm9jZXNzUG9vbHMuYWRkKHByb2Nlc3NQb29sKTsKICAgICAgICAgICAg
IGlmIChwcm9jZXNzUG9vbHMuc2l6ZSgpID09IGxpbWl0KQogICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMjA4NCw4ICsxODgzLDcgQEAgc3RhdGljIFN0cmluZyBjb21wdXRlTWVkaWFLZXlGaWxl
KGNvbnN0IFN0cmluZyYgbWVkaWFLZXlEaXJlY3RvcnkpCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNlcnRpZmlj
YXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxv
d1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRl
SW5mbygpLCBob3N0KSwgMCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRp
ZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOwogfQogCiBWZWN0b3I8V2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBXZWJzaXRlRGF0YVN0b3JlOjptZWRpYUtleU9yaWdpbnMo
Y29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KQpAQCAtMjE0MCw2ICsxOTM4
LDMwIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmlu
ZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwKICAgICB9CiB9CiAKK3ZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQoreworICAgIGlmICghbV9uZXR3b3Jr
UHJvY2VzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWlu
YXRlKCk7CisgICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3Rpbmco
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5lbnQ6
Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygp
Cit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRs
eUZvclRlc3RpbmcoKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1By
b2Nlc3NEaWRSZXN1bWUoKQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByb2Nlc3NEaWRS
ZXN1bWUoKTsKK30KKwogYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKQEAgLTIxNjksMTcgKzE5OTEsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgICAgIAogICAgICAg
ICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwogICAgICAgICAKLSAgICAgICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBwcm9j
ZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgdHJ1ZSkpOwor
ICAgICAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgdHJ1ZSksIDApOwor
ICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAg
ICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihNZXNzYWdlczo6
V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQodHJ1ZSksIG1fc2Vz
c2lvbklEKTsKLSAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29s
LT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSkpOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSksIDApOworICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAgICAgcHJvY2Vzc1Bvb2wt
PnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGZhbHNlKSwgbV9zZXNzaW9uSUQpOwotICAgIH0K
IAogICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgPSBmYWxzZTsKICNlbHNlCkBA
IC0yMTkxLDggKzIwMTEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjayhGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYp
PiYmIGNhbGxiYWNrKQogewogICAgIGlmIChjYWxsYmFjaykgewotICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpKTsKKyAgICAgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSwgMCk7CiAgICAgfQogICAgIAogICAgIG1f
c3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwpAQCAtMjIxMSw4
ICsyMDMwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlKGJvb2wgZW5hYmxlZCwgQ29tcGxldGkKIAogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShtX3Nlc3Npb25JRCwgZW5hYmxlZCwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKICAgICBVTlVT
RURfUEFSQU0oY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMjIyNywyMCArMjA0NSwxNSBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1f
c2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOworI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisjZW5k
aWYKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1
Z01vZGUoYm9vbCBlbmFibGVkKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOwogfQogCiAjaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIyNjIsNDggKzIwNzUsMTkgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZFN0YXRpc3RpY3NJbldlYlBy
b2Nlc3NlcyhDb21wbGV0aW9uSGFuZGwKIH0KICNlbmRpZgogCi1WZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiBXZWJzaXRlRGF0YVN0b3JlOjpwZW5kaW5nQ29va2llcygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGNvcHlUb1ZlY3RvcihtX3BlbmRpbmdDb29raWVzKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjphZGRQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQot
ewotICAgIG1fcGVuZGluZ0Nvb2tpZXMucmVtb3ZlSWYoWyZjb29raWVdKGF1dG8mIHBlbmRpbmdD
b29raWUpIHsKLSAgICAgICAgcmV0dXJuIHBlbmRpbmdDb29raWUuaXNLZXlFcXVhbChjb29raWUp
OwotICAgIH0pOwotICAgIG1fcGVuZGluZ0Nvb2tpZXMuYWRkKGNvb2tpZSk7Ci19Ci0KLXZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29r
aWUmIGNvb2tpZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZShjb29raWUpOwotfQot
ICAgIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdDb29raWVzKCkKLXsKLSAg
ICBtX3BlbmRpbmdDb29raWVzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Zmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8gcHJvY2Vz
c1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nl
c3NQb29sLT5mbHVzaENvb2tpZXMoc2Vzc2lvbklEKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5mbHVzaENvb2tpZXMoc2Vzc2lvbklEKCksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93cykKIHsKLSAgICBm
b3IgKGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tl
dChhbGxvd3MpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRp
ZmljYXRlRm9yV2ViU29ja2V0OjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENl
cnRpZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQ6OlJlcGx5KCksIDApOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogewotICAg
IGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMo
KSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklE
KCkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKCkpLCAwKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpkaXNwYXRjaE9uUXVldWUoRnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9u
KQpAQCAtMjMyOSw4ICsyMTEzLDYgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0
ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAKICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vz
c2FyeSgpOwogCi0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBlbmRpbmdDb29raWVz
KCk7Ci0KICAgICBhdXRvIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX2NvbmZp
Z3VyYXRpb24tPnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUhhbmRsZTsK
ICAgICBpZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAt
MjQzNSw3ICsyMjE3LDE0IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRh
U3RvcmU6OnBhcmFtZXRlcnMoKQogICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZWQgPSBtX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkOwogI2VuZGlmCiAgICAgcGxhdGZvcm1TZXROZXR3b3JrUGFy
YW1ldGVycyhwYXJhbWV0ZXJzKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFj
a2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Np
b24oKTsKKyNlbmRpZgogCisjaWYgVVNFKFNPVVApCisgICAgbmV0d29ya1Byb2Nlc3MoKS5jb29r
aWVNYW5hZ2VyKCkuZ2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklEKCksIHBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0
aCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0
b3JhZ2VUeXBlKTsKKyNlbmRpZgorICAgIAogICAgIHJldHVybiBwYXJhbWV0ZXJzOwogfQogCkBA
IC0yNDY1LDEwICsyMjU0LDYgQEAgQVBJOjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3Rv
cmU6OmNvb2tpZVN0b3JlKCkKICAgICByZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAKLXZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQotewotfQotCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChW
ZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIWlzUGVyc2lzdGVudCgpKSB7CkBAIC0yNDc2
LDIzICsyMjYxLDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0
YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VECiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpLmdl
dExvY2FsU3RvcmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgewotICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7Ci0gICAgICAgIH0pOwotICAgICAg
ICAvLyBGSVhNRTogU3VwcG9ydCBmZXRjaGluZyBmcm9tIG11bHRpcGxlIHBvb2xzLgotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUKCFjb21wbGV0aW9uSGFuZGxlcik7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMp
IHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7CisgICAgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YShDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UXVvdGEo
bV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZP
Uk0oQ09DT0EpCkBAIC0yNTE4LDcgKzIyOTUsMTIgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpo
dHRwM0VuYWJsZWQoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZgorCitib29sIFdl
YnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNv
bnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmIC8vICFQTEFURk9S
TShDT0NPQSkKIAogI2lmICFVU0UoR0xJQikKIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQpAQCAtMjUzMCwzNSAr
MjMxMiwxOSBAQCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRI
YXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW5h
bWVPcmlnaW5JbldlYnNpdGVEYXRhKFVSTCYmIG9sZE5hbWUsIFVSTCYmIG5ld05hbWUsIE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNz
aW9uKCp0aGlzKTsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW5hbWVPcmlnaW5Jbldl
YnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5hZGRTZXNzaW9uKCp0aGlzKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlbmFtZU9yaWdp
bkluV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9E
T01BSU5TKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24oQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9u
SUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5k
U2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+Y2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFy
QXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQ
SWZJbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0yNTgwLDcgKzIzNDYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRB
cHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZQogCiAgICAg
cHJvcGFnYXRlQXBwQm91bmREb21haW5zKGdsb2JhbERlZmF1bHREYXRhU3RvcmUoKS5nZXQoKSwg
KmFwcEJvdW5kRG9tYWlucyk7CiAKLSAgICBmb3IgKGF1dG8qIHN0b3JlIDogbm9uRGVmYXVsdERh
dGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICBmb3IgKGF1dG8qIHN0b3JlIDogYWxsRGF0YVN0b3Jl
cygpLnZhbHVlcygpKQogICAgICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoc3RvcmUsICph
cHBCb3VuZERvbWFpbnMpOwogfQogCkBAIC0yNTg4LDEwICsyMzU0LDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRBcHBCb3VuZERvbWFpbnNGb3JJVFAoY29uc3QgSGFzaFNldDxXZWJDb3Jl
OjpSZWdpc3RyYWIKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEFwcEJvdW5kRG9tYWluc0ZvclJlc291cmNl
TG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAjZW5kaWYKIApAQCAtMjU5OSwxNiArMjM2MiwxNCBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IFN0
cmluZyYgYnVuZAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50
aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS51
cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlm
aWVySW5OZXR3b3JrUHJvY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlmaWVy
KFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAppbmRleCBlMWI0
MGVkMjVkODY1ZTRjMmJjNDcyNDIzY2FjNmJmNDViYWFjN2RkLi4zOTQzYjVhODZlNjMwMWQxZWZh
MTI5MGU5OTJiYjcwZTBlMTc4ZTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC03NSw2ICs3NSw3IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7CiBjbGFzcyBTZWNL
ZXlQcm94eVN0b3JlOwogY2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CitjbGFzcyBOZXR3
b3JrUHJvY2Vzc1Byb3h5OwogY2xhc3MgU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I7CiBjbGFz
cyBXZWJDZXJ0aWZpY2F0ZUluZm87CiBjbGFzcyBXZWJQYWdlUHJveHk7CkBAIC0xMDksNyArMTEw
LDEyIEBAIHB1YmxpYzoKICAgICBXZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbj4mJiwgUEFMOjpTZXNzaW9uSUQpOwogICAgIH5XZWJzaXRlRGF0YVN0b3Jl
KCk7CiAKLSAgICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhpc3RpbmdOb25EZWZhdWx0RGF0
YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEKTsKKyAgICBzdGF0aWMgdm9pZCBmb3JF
YWNoV2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRhU3RvcmUmKT4mJik7
CisgICAgCisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MoKSBjb25zdDsK
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcygpOworCisgICAgc3RhdGlj
IFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vz
c2lvbklEKTsKIAogICAgIGJvb2wgaXNQZXJzaXN0ZW50KCkgY29uc3QgeyByZXR1cm4gIW1fc2Vz
c2lvbklELmlzRXBoZW1lcmFsKCk7IH0KICAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQoKSBj
b25zdCB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQpAQCAtMTE5LDYgKzEyNSwxMSBAQCBwdWJsaWM6
CiAgICAgCiAgICAgY29uc3QgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiYgcHJvY2Vzc2Vz
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzZXM7IH0KIAorICAgIHZvaWQgdGVybWluYXRlTmV0
d29ya1Byb2Nlc3MoKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3Bl
bmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7CisgICAgdm9p
ZCBzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKKwogICAgIGJvb2wgcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkKGJvb2wpOwogICAgIGJvb2wgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVn
TW9kZSgpIGNvbnN0OwpAQCAtMjM1LDE3ICsyNDYsMTEgQEAgcHVibGljOgogCiAgICAgRGV2aWNl
SWRIYXNoU2FsdFN0b3JhZ2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4gbV9k
ZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bvb2wqIHBy
b2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlzQXNzb2Np
YXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycyBwYXJhbWV0ZXJzKCk7CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiBwZW5kaW5nQ29va2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShj
b25zdCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29raWUoY29u
c3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVzKCk7CiAg
ICAgdm9pZCBmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2
b2lkIGNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKKyAgICBzdGF0aWMgVmVjdG9yPFdlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzPiBwYXJhbWV0ZXJzRnJvbUFsbFN0b3JlcygpOwogCiAgICAgdm9p
ZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sKTsKIApAQCAtMjcy
LDggKzI3Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1vY2tXZWJBdXRoZW50aWNhdGlvbkNv
bmZpZ3VyYXRpb24oV2ViQ29yZTo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbiYm
KTsKICNlbmRpZgogCi0gICAgdm9pZCBkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAg
Y29uc3QgV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24oKSB7IHJl
dHVybiBtX2NvbmZpZ3VyYXRpb24uZ2V0KCk7IH0KIAogICAgIFdlYnNpdGVEYXRhU3RvcmVDbGll
bnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50LmdldCgpOyB9CkBAIC0yODMsNiArMjg2LDgg
QEAgcHVibGljOgogCiAgICAgdm9pZCByZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFVSTCYmLCBV
UkwmJiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CiAKKyAgICBib29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5n
KGNvbnN0IFN0cmluZyYpOworCiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICAgICBX
ZWJEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXImIGRldmljZU9yaWVu
dGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fZGV2aWNlT3JpZW50
YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyOyB9CiAjZW5kaWYKQEAgLTM1OSw3ICszNjQs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJp
bmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UpOwog
ICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0
b3JhZ2VEaXJlY3RvcnksIGNvbnN0IEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
PiYpOwogCi0gICAgdm9pZCBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOworICAgIHZv
aWQgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RP
TUFJTlMpCiAgICAgc3RhdGljIE9wdGlvbmFsPEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4+PiBhcHBCb3VuZERvbWFpbnNJZkluaXRpYWxpemVkKCk7CkBAIC0zOTcsOCArNDAyLDYg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxl
ZCB7IHRydWUgfTsKICNlbmRpZgogCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1fcGVu
ZGluZ0Nvb2tpZXM7Ci0gICAgCiAgICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3By
b2Nlc3NlczsKIAogICAgIGJvb2wgbV9pc0l0cFN0YXRlRXhwbGljaXRseVNldCB7IGZhbHNlIH07
CkBAIC00MTksNiArNDIyLDcgQEAgcHJpdmF0ZToKICAgICBVbmlxdWVSZWY8V2Vic2l0ZURhdGFT
dG9yZUNsaWVudD4gbV9jbGllbnQ7CiAKICAgICBSZWZQdHI8QVBJOjpIVFRQQ29va2llU3RvcmU+
IG1fY29va2llU3RvcmU7CisgICAgUmVmUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29y
a1Byb2Nlc3M7CiAKICNpZiBIQVZFKEFQUF9TU08pCiAgICAgVW5pcXVlUmVmPFNPQXV0aG9yaXph
dGlvbkNvb3JkaW5hdG9yPiBtX3NvQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0
b3JlU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dl
YnNpdGVEYXRhU3RvcmVTb3VwLmNwcAppbmRleCAxMmY5Y2Q4MTliNmRjY2E4YWM1MDkyYTMwZGQ5
M2M1M2I4ZWU5MzQyLi41YmEzOTAwZDJkYWZmMDU2YWJkMGNkZjA1N2FlMzI4NTRlYmZlY2YxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNp
dGVEYXRhU3RvcmVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcApAQCAtMzksOCArMzksNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMoV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMmCiAgICAgYXV0byYgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0g
cGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBtX3BlcnNpc3Rl
bnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQ7CiAKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2wg
PSBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHByb2Nl
c3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVy
c2lzdGVudFN0b3JhZ2UobV9zZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQ
ZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworICAgIFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
OjpzaW5nbGV0b24oKS5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxl
ZChib29sIGVuYWJsZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGli
L1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9X
ZWJQcm9jZXNzUHJveHlHTGliLmNwcAppbmRleCAwYTg0YTc1OTBkOWE5ODViZmM5OTY4NGE0ODk1
MTM3NGU1YjI5NDI5Li4yN2YyM2VhMDY1ZGM3NWNlNGE4MjcwYzU3NmVhMmFhNTVhYjBkYzhmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdM
aWIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5
R0xpYi5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3Jt
R2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGwKICAgICAg
ICAgaWYgKCFkYXRhU3RvcmUpIHsKICAgICAgICAgICAgIC8vIFByZXdhcm1lZCBwcm9jZXNzZXMg
ZG9uJ3QgaGF2ZSBhIFdlYnNpdGVEYXRhU3RvcmUgeWV0LCBzbyB1c2UgdGhlIHByaW1hcnkgV2Vi
c2l0ZURhdGFTdG9yZSBmcm9tIHRoZSBXZWJQcm9jZXNzUG9vbC4KICAgICAgICAgICAgIC8vIFRo
ZSBwcm9jZXNzIHdvbid0IGJlIHVzZWQgaWYgY3VycmVudCBXZWJzaXRlRGF0YVN0b3JlIGlzIGRp
ZmZlcmVudCB0aGFuIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IG9uZS4KLSAgICAgICAgICAg
IGRhdGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wtPndlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICAgICAg
ICAgIGRhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIo
KTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChkYXRhU3RvcmUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291
cC5jcHAKaW5kZXggOWY3YmUzYzk0MWI2Y2QwYTFiOTRjYjEzNjA5OGYzYTA0MWNlZmY5OS4uMDg5
MjhmY2QzMTZkODhmOWQ1MTUwMGVjNjg0YWQxYjY0YWY4YTNmOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAu
Y3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2Vi
Q29va2llTWFuYWdlclByb3h5LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5Lmgi
CiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJv
Y2Vzc1Bvb2wuaCIKIApAQCAtMzQsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQ
ZXJzaXN0ZW50U3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUpCiB7CiAgICAgbV9jb29raWVQZXJzaXN0
ZW50U3RvcmFnZU1hcC5zZXQoc2Vzc2lvbklELCBzdGQ6Om1ha2VfcGFpcihzdG9yYWdlUGF0aCwg
c3RvcmFnZVR5cGUpKTsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vz
cyhNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uo
c2Vzc2lvbklELCBzdG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpKTsKKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRD
b29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlw
ZSksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llUGVyc2lz
dGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmIHN0b3JhZ2VQYXRo
LCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlJiBzdG9yYWdlVHlwZSkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3Vw
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNw
cAppbmRleCBiZmJiZjk2NjRlNDgzNTMwOTcwOTcxMWRmZDZjMTM0MTU3MzJiZGFjLi4wNzkzZWQ1
MTM5MTUyOGQ5YjRiOWZkYjBmNGFkM2M4OTYwZmRhNTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCkBAIC0zNywzMCArMzcs
MjQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3Jt
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzKQogewotICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiBk
ZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICBzdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoZGVmYXVsdFNlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlUGF0aCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlVHlwZSk7Ci0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAg
ZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJs
ZWQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJs
ZWQoKTsKKyAgICAvLyBGSVhNRTogbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeSBzaG91
bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCisgICAgLy8gRklYTUU6IG1faWdu
b3JlVExTRXJyb3JzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZSBvciBy
ZW1vdmVkLgorICAgIC8vIEZJWE1FOiBtX25ldHdvcmtQcm94eVNldHRpbmdzIHNob3VsZCBiZSBt
b3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KIAotICAgIHBhcmFtZXRlcnMuY29va2llQWNj
ZXB0UG9saWN5ID0gbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeTsKLSAgICBwYXJhbWV0
ZXJzLmlnbm9yZVRMU0Vycm9ycyA9IG1faWdub3JlVExTRXJyb3JzOwogICAgIHBhcmFtZXRlcnMu
bGFuZ3VhZ2VzID0gdXNlclByZWZlcnJlZExhbmd1YWdlcygpOwotICAgIHBhcmFtZXRlcnMucHJv
eHlTZXR0aW5ncyA9IG1fbmV0d29ya1Byb3h5U2V0dGluZ3M7CiAgICAgcGFyYW1ldGVycy5zaG91
bGRFbmFibGVJVFBEYXRhYmFzZSA9IHRydWU7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
dElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKICAgICBtX2lnbm9yZVRM
U0Vycm9ycyA9IGlnbm9yZVRMU0Vycm9yczsKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vycm9ycyksIDApOworICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRJ
Z25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoY29uc3QgV2ViQ29yZTo6U291cE5ldHdv
cmtQcm94eVNldHRpbmdzJiBzZXR0aW5ncykKIHsKICAgICBtX25ldHdvcmtQcm94eVNldHRpbmdz
ID0gc2V0dGluZ3M7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlT
ZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdv
cmtQcm94eVNldHRpbmdzKG1fbmV0d29ya1Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDA1NjMwNDNh
ZTkyYjI0MDE0MjExNzRkZGNkYTdmZWZhZWFkZGNkMmEuLjIxYzhhYjFiMTU5MGQ2YWIwYWI2YTJk
ZTU5YjA4MWY2MTYyMzRjNjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAyMC0wOS0xOSAgQWxleCBDaHJpc3RlbnNl
biAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgTmV0d29ya1Byb2Nl
c3NQcm94eSBvd25lcnNoaXAgZnJvbSBXZWJQcm9jZXNzUG9vbCB0byBXZWJzaXRlRGF0YVN0b3Jl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYwNDEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5l
Y3Rpb24ubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tOgorICAgICAg
ICAocnVuVGVzdCk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW06CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbToKKyAgICAgICAgKC1bQ2hl
Y2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3ZWJWaWV3OnJ1bkphdmFTY3JpcHRBbGVydFBhbmVs
V2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAg
ICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0pOgorICAg
ICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0pOgor
ICAgICAgICAoVEVTVCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0
ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0
Q29udGV4dCk6CisKIDIwMjAtMDktMTggIERpZWdvIFBpbm8gR2FyY2lhICA8ZHBpbm9AaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXSBBUEkgdGVzdCAvd2Via2l0L1dlYktpdFdlYlZpZXcvdXNl
cm1lZGlhLWVudW1lcmF0ZWRldmljZXMtcGVybWlzc2lvbi1jaGVjayBpcyBjcmFzaGluZwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3ND
cmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KaW5kZXgg
OTczODlmMDFmZjJlZTk5Yjc4M2IwYjUyMTA4MDc0ZjFhODFiNjk4MS4uMzNmNDU0YzVjZDU5YjQ4
YTc2OThhYWI1NmU2MTFjZjZmMDljOWY0ZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0Ny
YXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxX
ZWJLaXQvV0tQcm9jZXNzR3JvdXBQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNz
UG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1w
b3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dlYktpdC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCkBAIC0xNDYsOCArMTQ3LDgg
QEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzUmVsYXVuY2hPbkxhdW5jaEZhaWx1cmUpCiAK
ICAgICAvLyBDb25zdHVjdGluZyBhIFdlYlZpZXcgc3RhcnRzIGEgbmV0d29yayBwcm9jZXNzIHNv
IHRlcm1pbmF0ZSB0aGlzIG9uZS4gVGhlIHBhZ2UgbG9hZCBiZWxvdyB3aWxsIHRoZW4gcmVxdWVz
dCBhIG5ldHdvcmsgcHJvY2VzcyBhbmQgd2UKICAgICAvLyBtYWtlIHRoaXMgbmV3IG5ldHdvcmsg
cHJvY2VzcyBsYXVuY2ggY3Jhc2ggb24gc3RhcnR1cC4KLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBbcHJvY2Vzc1Bvb2wgX21ha2VOZXh0TmV0d29ya1By
b2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZ107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byBkZWxl
Z2F0ZSA9IGFkb3B0TlMoW1tNb25pdG9yV2ViQ29udGVudENyYXNoTmF2aWdhdGlvbkRlbGVnYXRl
IGFsbG9jXSBpbml0XSk7CiAgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVn
YXRlLmdldCgpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvRG93bmxvYWQubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0Rvd25sb2FkLm1tCmluZGV4IGI3ZWQ5OTkzOWZkNTlmMjI4YTdlOGJkNzQ5NzEyZjUzNjYwMTU2
MTYuLjE4MTkxMzFjOWEwZmViMzBiMWEyZjBjZmNkODdiZjIwNDVlYmIzZjQgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQpAQCAtODg5
LDkgKzg4OSw5IEBAIHZvaWQgZG93bmxvYWRBdFJhdGUoZG91YmxlIGRlc2lyZWRLYnBzLCB1bnNp
Z25lZCBzcGVlZE11bHRpcGxpZXIsIEFwcFJldHVybnNUb0ZvCiAgICAgcmVjZWl2ZWREYXRhID0g
ZmFsc2U7CiAgICAgVXRpbDo6cnVuKCZyZWNlaXZlZERhdGEpOwogICAgIC8vIFN0YXJ0IHRoZSBE
b3dubG9hZE1vbml0b3IncyB0aW1lci4KLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJv
Y2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKKyAgICBbW3dlYlZpZXcg
Y29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3Vu
ZDpZRVNdOwogICAgIGlmIChyZXR1cm5Ub0ZvcmVncm91bmQgPT0gQXBwUmV0dXJuc1RvRm9yZWdy
b3VuZDo6WWVzKQotICAgICAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wg
X3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9dOworICAgICAgICBbW3dlYlZpZXcgY29uZmln
dXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpOT107
CiAgICAgZGlkQ2FuY2VsID0gZmFsc2U7CiAgICAgVXRpbDo6cnVuKCZkaWRDYW5jZWwpOwogICAg
IHRlcm1pbmF0ZVNlcnZlciA9IHRydWU7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0KaW5kZXggNWNkN2FiZGEw
MWQxOTc0N2RjZWQ0NWFiZWU5OWVjYjFjMTRkNjE2MC4uZDc3YTZmZDk4NzllNDNmNzAxMWRkYWY5
MmMzYTc5N2YzZmMxMzczNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbQpAQCAtMzEsNiArMzEsNyBAQAog
I2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRh
U3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJL
aXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNl
clN0eWxlU2hlZXQuaD4KQEAgLTg2LDcgKzg3LDcgQEAgVEVTVChJbmRleGVkREIsIENoZWNrcG9p
bnRzV0FMQXV0b21hdGljYWxseSkKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlv
bj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9j
XSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRk
U2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsK
IAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmll
dyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRl
UmVjb3ZlcnkubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRl
bGV0ZVJlY292ZXJ5Lm1tCmluZGV4IGM4YWYxZDI0M2M0ZmViNThhYzk4NGRhZjE0ZDgxNTMxYTdj
YzNjNzMuLmJiZjFhMTUyMTVkYzFmZDI4ZGZkZGI5ZTM0MWI2NGY5YzAwOGY0YzQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3Zl
cnkubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxl
dGVSZWNvdmVyeS5tbQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vz
c1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcg
KzU4LDcgQEAgVEVTVChJbmRleGVkREIsIERlbGV0ZVJlY292ZXJ5KQogICAgIFJldGFpblB0cjxX
S1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNv
bnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5h
bWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5
IHRoZSBpbmNvbnNpc3RlbnQgZGF0YWJhc2UgZmlsZXMgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9y
eQogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJj
ZTpAIklEQkRlbGV0ZVJlY292ZXJ5IiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0
b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbQpp
bmRleCA5NWNjYTBjZTI4MTZmZjFhNmE0NTVhZDBiZDJjOGE0YWE0ZjI3ZmVkLi44OGE1M2Y2MWQ5
ZDk4MjY1N2I5NjVlZjhhNmNlYmE3OTFlZmYxNzU1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1t
CkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8
V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJL
aXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNp
bXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtNTgsNyArNTksNyBAQCBURVNU
KEluZGV4ZWREQiwgSW5kZXhVcGdyYWRlVG9WMikKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29u
ZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0
aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJv
bGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhh
bmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFT
dG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5jb25z
aXN0ZW50IGRhdGFiYXNlIGZpbGVzIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBOU1VS
TCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJbmRleFVw
Z3JhZGUiIHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0
QVBJLnJlc291cmNlcyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIu
bW0KaW5kZXggZmZhNWE3ODc4YTQ3MzJiOGVjMjQ1YzkwNTNmZDE3ZWU1OTU2ZmEzZC4uNDAzZTBm
ZmE4MjEyMzQ1MWM0NjZmZWVjYzMyNGY5YzZlNzYxZDQzZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9W
Mi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVj
dFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJL
aXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50
Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0
aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5o
PgpAQCAtNTcsNyArNTgsNyBAQCBURVNUKEluZGV4ZWREQiwgSURCT2JqZWN0U3RvcmVJbmZvVXBn
cmFkZVRvVjIpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3Vy
YXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwog
ICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3Nh
Z2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29u
ZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwor
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKIAogICAgIC8vIENvcHkgZGF0YWJhc2UgZmlsZXMgd2l0aCBvbGQgT2JqZWN0
U3RvcmVJbmZvIHNjaGVtYSB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5LgogICAgIE5TVVJMICp1
cmwxID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklEQk9iamVjdFN0
b3JlSW5mb1VwZ3JhZGUiIHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJU
ZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nl
c3NLaWxsLm1tCmluZGV4IDY4NzQ1MjllYmJmMzc4NTE4ZDkzZTBhMDgyMWY2MzAxMmNmYTZkNWYu
LjczMDc3ZWNkZmQzNjViNTI5MDUzZDQ3Y2JhMmExNGVkMDUxZWQ2ZWEgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9j
ZXNzS2lsbC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQg
PFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNv
bnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZp
Z3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1By
b2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpAQCAt
OTIsNyArOTMsNyBAQCBURVNUKEluZGV4ZWREQiwgRGF0YWJhc2VQcm9jZXNzS2lsbCkKICAgICAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAg
ICAgICBpZiAoIWtpbGxlZERCUHJvY2VzcyAmJiBvcGVuUmVxdWVzdFVwZ3JhZGVOZWVkZWQpIHsK
ICAgICAgICAgICAgIGtpbGxlZERCUHJvY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAg
ICAgICAgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbQpp
bmRleCAxMWY4N2Y4MDM0ZDJiMWI1NWQ3MjBkZWI3NjVhMzE2ODIxMjBkNzczLi5hOThiZjM4MjVi
YjFlZDZkNzU5YzA4ZDQ1MzNhZGNiN2ZmMzk1ZmQ1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0KQEAg
LTQ5LDcgKzQ5LDcgQEAgc3RhdGljIFJldGFpblB0cjxXS1NjcmlwdE1lc3NhZ2U+IGxhc3RTY3Jp
cHRNZXNzYWdlOwogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoKQorc3RhdGljIHZvaWQg
cnVuVGVzdChib29sIG9sZEZpbGVTaG91bGRFeGlzdCA9IHRydWUpCiB7CiAgICAgYXV0byBoYW5k
bGVyID0gYWRvcHROUyhbW0luZGV4ZWREQkZpbGVOYW1lTWVzc2FnZUhhbmRsZXIgYWxsb2NdIGlu
aXRdKTsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmln
dXJhdGlvbiBhbGxvY10gaW5pdF0pOwpAQCAtODcsNyArODcsNyBAQCBzdGF0aWMgdm9pZCBydW5U
ZXN0KCkKICAgICBOU1VSTCAqb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCA9IFtvbGRWZXJz
aW9uRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDogQCJmaWxlX18wIl07
CiAgICAgTlNVUkwgKm5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgPSBbbmV3VmVyc2lvbkRp
cmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJdOwogICAg
IE5TVVJMICpvbGRWZXJzaW9uVW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lv
bk9yaWdpbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6dW51c2VkRGF0
YWJhc2VOYW1lXTsKLSAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFn
ZXJdIGZpbGVFeGlzdHNBdFBhdGg6b2xkVmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5VVJM
LnBhdGhdKTsKKyAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IGZpbGVFeGlzdHNBdFBhdGg6b2xkVmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5VVJMLnBh
dGhdID09IG9sZEZpbGVTaG91bGRFeGlzdCk7CiAgICAgCiAgICAgLy8gRm9yIGRhdGFiYXNlIHRo
YXQgaXMgb3BlbmVkIGFmdGVyIHVwZ3JhZGUsIGl0cyBmaWxlIHNob3VsZCBvbmx5IGJlIGluIHYx
LgogICAgIE5TVVJMICpvbGRWZXJzaW9uRXhpc3RpbmdEYXRhYmFzZURpcmVjdG9yeVVSTCA9IFtv
bGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDog
ZXhpc3RpbmdEYXRhYmFzZU5hbWVdOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHN0YXRpYyB2b2lkIGNy
ZWF0ZURpcmVjdG9yaWVzKFN0cmluZyB0ZXN0TmFtZSkKIFRFU1QoSW5kZXhlZERCLCBJbmRleGVk
REJGaWxlTmFtZSkKIHsKICAgICBjcmVhdGVEaXJlY3Rvcmllcygibm9uZSIpOwotICAgIHJ1blRl
c3QoKTsKKyAgICBydW5UZXN0KGZhbHNlKTsKIH0KIAogVEVTVChJbmRleGVkREIsIEluZGV4ZWRE
QkZpbGVOYW1lVjApCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCmluZGV4IDdmNjI2NDVkOTk2
MGVkZTk2MGMwMDFjMjcyYjY1MDM5MzkwMTE2MzIuLjZmNjdkYzI3ZWRjM2QyNzQ1YjE3MGU0ODJi
Y2Q5MGU4NDk0Y2I5NWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCkBAIC0zMiw2ICsz
Miw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRl
RGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmln
dXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CiAjaW1wb3J0
IDx3dGYvRGVxdWUuaD4KQEAgLTY5LDcgKzcwLDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWRE
Qk11bHRpUHJvY2VzcykKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29u
ZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0
XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0
TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFk
b3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4
MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lz
dGVuY2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QlBlcnNpc3RlbmNlLm1tCmluZGV4IGIzMmNlNGE1ZjczODYzYWVkZGNiOTE5MGI1YjQzNzBlMzc0
NDNiNWUuLmQ2MjIwMzIyZTQ3OGQxZGFjNzhmMDY5NjdjM2I2NDNiZmQ2MmY5YmYgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lz
dGVuY2UubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eGVkREJQZXJzaXN0ZW5jZS5tbQpAQCAtNzgsNyArNzgsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5k
ZXhlZERCUGVyc2lzdGVuY2UpCiAgICAgd2ViVmlldyA9IG5pbDsKIAogICAgIC8vIFRlcm1pbmF0
ZSB0aGUgbmV0d29yayBwcm9jZXNzCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBNYWtl
IGEgbmV3IHdlYiB2aWV3IHRvIGZpbmlzaCB0aGUgdGVzdAogICAgIHdlYlZpZXcgPSBhZG9wdE5T
KFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2
MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwpAQCAtMjY4LDcgKzI2OCw3
IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUaGlyZFBhcnR5RnJhbWVIYXNBY2Nlc3MpCiAK
ICAgICB3ZWJWaWV3ID0gbmlsOwogICAgIHNlY29uZFdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CiAKICAgICAvLyBUaGlyZC1wYXJ0eSBJREIgc3RvcmFnZSBpcyBzdG9yZWQgaW4g
dGhlIG1lbW9yeSBvZiBuZXR3b3JrIHByb2Nlc3MuCiAgICAgYXV0byB0aGlyZFdlYlZpZXcgPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwpAQCAtMzg1LDcg
KzM4NSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUaGlyZFBhcnR5V29ya2VySGFzQWNj
ZXNzKQogCiAgICAgd2ViVmlldyA9IG5pbDsKICAgICBzZWNvbmRXZWJWaWV3ID0gbmlsOwotICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB0aGlyZFdlYlZpZXcgPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIGxvYWRUZXN0UGFnZUluV2Vi
Vmlldyh0aGlyZFdlYlZpZXcuZ2V0KCksIEAiZGF0YWJhc2UgaXMgY3JlYXRlZCIpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1w
RmlsZVNpemUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4
ZWREQlRlbXBGaWxlU2l6ZS5tbQppbmRleCA1MzY1NDFlM2IwZTVjZGEzYTNiNTUxYzFlODFlOTYz
ZjU5MmFlYjJmLi5lN2I5OTIyOGNlODc2ZTQ0N2U2NDc4MmVmOWQ4N2YyNWFkYzliOWZhIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRl
bXBGaWxlU2l6ZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQpAQCAtOTUsNyArOTUsNyBAQCBURVNUKEluZGV4ZWRE
QiwgSW5kZXhlZERCVGVtcEZpbGVTaXplKQogCiAgICAgLy8gVGVybWluYXRlIG5ldHdvcmsgcHJv
Y2VzcyB0byBrZWVwIFdBTCBvbiBkaXNrLgogICAgIHdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFn
ZXJdIGZpbGVFeGlzdHNBdFBhdGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aF0pOwogICAgIFJldGFp
blB0cjxOU0RpY3Rpb25hcnk+IGZpbGVBdHRyaWJ1dGVzID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1
bHRNYW5hZ2VyXSBhdHRyaWJ1dGVzT2ZJdGVtQXRQYXRoOndhbEZpbGVQYXRoLmdldCgpLnBhdGgg
ZXJyb3I6bmlsXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCmluZGV4IDQxMzNlZTdi
M2RhZTQzZWMyMDQ5Y2ZmYzA2M2MwZTQyOWMxN2M1ZWYuLjVmNzkxOTA5NDNjNzcxZTlkOWU0NDJh
MGRhMjY2ZmY5YTAzYmEyZjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQpAQCAt
MzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmg+CisjaW1wb3J0
IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dl
YktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgog
I2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC0xMDksNyArMTEwLDcgQEAg
VEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NDcmFzaGVzKQogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tf
U1RSRVEoQCJzZXNzaW9uOnN0b3JhZ2UiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCi0g
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsK
ICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CkBA
IC0xNjIsNyArMTYzLDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNw
ZW5kcykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2Fn
ZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAidmFsdWUiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9k
eV0pOwogCi0gICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3Rv
cmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CiAKICAgICByZWFk
eVRvQ29udGludWUgPSBmYWxzZTsKICAgICBbd2ViVmlldzEgZXZhbHVhdGVKYXZhU2NyaXB0OkAi
d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdrZXknLCAnbmV3VmFsdWUnKSIgY29tcGxldGlv
bkhhbmRsZXI6XihpZCwgTlNFcnJvciAqKSB7CkBAIC0xNzcsNyArMTc4LDcgQEAgVEVTVChXS1dl
YlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5kcykKICAgICB9XTsKICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJnJlYWR5VG9Db250aW51ZSk7CiAgICAgCi0gICAgW3Byb2Nlc3NQ
b29sLmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07
CiAKICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQppbmRleCBl
NjBmODgwMjVkMDkzNzg5ZjY5NTYwZDliOTJiMjgyZjA3MTMwYThkLi4wZTIxZjkwOTUwMDE0ZjZj
NDkwYjBlYjhlNDYxZWM0YmE4NTBiYjgxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KQEAgLTI4LDcgKzI4LDcg
QEAKICNpbXBvcnQgIkhUVFBTZXJ2ZXIuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNp
bXBvcnQgIlV0aWxpdGllcy5oIgotI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRl
Lmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9y
dCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3
dGYvVmVjdG9yLmg+CkBAIC0zNywxNCArMzcsMTQgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9j
ZXNzRW50aXRsZW1lbnRzKQogewogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNv
bmZpZ3VyYXRpb246W1tbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdXSk7CiAgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAi
c2ltcGxlIl07Ci0gICAgV0tQcm9jZXNzUG9vbCAqcG9vbCA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRp
b25dLnByb2Nlc3NQb29sOwotICAgIGJvb2wgaGFzRW50aXRsZW1lbnQgPSBbcG9vbCBfbmV0d29y
a1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Muc3Rv
cmFnZS5XZWJLaXROZXR3b3JraW5nU2FuZGJveCJdOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZSAq
c3RvcmUgPSBbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlOworICAgIGJv
b2wgaGFzRW50aXRsZW1lbnQgPSBbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRG
b3JUZXN0aW5nOkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0TmV0d29ya2luZ1Nh
bmRib3giXTsKICNpZiBQTEFURk9STShNQUMpICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAg
ICAgRVhQRUNUX1RSVUUoaGFzRW50aXRsZW1lbnQpOwogI2Vsc2UKICAgICBFWFBFQ1RfRkFMU0Uo
aGFzRW50aXRsZW1lbnQpOwogI2VuZGlmCi0gICAgRVhQRUNUX0ZBTFNFKFtwb29sIF9uZXR3b3Jr
UHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVyZSBjYXNlIl0pOwor
ICAgIEVYUEVDVF9GQUxTRShbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JU
ZXN0aW5nOkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7CiB9CiAKIFRFU1QoV2ViS2l0LCBIVFRQUmVm
ZXJlcikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
TmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0
ZW50RGF0YVN0b3JlLm1tCmluZGV4IDYwOThlOGRhZDI1MmU1OWVjNDkxMjUwYjQyMTZkM2NkMDkz
NmU4ZjcuLjJmOGEyZTMzZmU4NzAzYmFiMmQ4ZTA1MTA4MzJiZWNkOWQ0ODkzNGIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3ND
cmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9y
ZS5tbQpAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1JlY292ZXJ5QWZ0ZXJDcmFz
aChXS1dlYnNpdGVEYXRhU3RvcmUgKmRhdGFTdG9yZSkKICAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtbd2ViVmlldyBjb25maWd1
cmF0aW9uXS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtbd2Vi
VmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0
aFVSTDpzaW1wbGUyXV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIH0K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vz
c1N3YXBPbk5hdmlnYXRpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCmluZGV4IDk1ZGM5ZDk4ZGYxM2IwNzA1ZTA4
MTdkMDU4NzI2NTEyMGMxODhkMjMuLmRmMzIwZDY0ZGFkYmRkMWVlMjgzZjg2NWMxNDQyM2YzYWM1
NTY0YmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQpAQCAtNTM4NSw3ICs1Mzg1
LDcgQEAgVEVTVChQcm9jZXNzU3dhcCwgVXNlUHJld2FybWVkUHJvY2Vzc0FmdGVyVGVybWluYXRp
bmdOZXR3b3JrUHJvY2VzcykKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29w
KDEpOwogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAg
W3dlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9wdE5TKFtbV0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3Vy
YXRpb246d2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBbd2ViVmlldzIgc2V0TmF2
aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy5tbQppbmRleCAwZTEwYzM0ZWVjODJjNmY2NTkyYmI3YzQyNzRkMGU0NTVlYWYxMWU4Li5hM2Fi
YTIzMWE5M2IzZDVmMDBhMTkzYzQ3YzI3Njc4NjRiMzUwNTViIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLm1tCkBAIC03MTksNyArNzE5LDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLCBOZXR3b3JrUHJvY2Vzc1Jlc3RhcnQpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpz
cGluUnVuTG9vcCgxKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0
ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3
MiA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKQEAg
LTc1Miw3ICs3NTIsNyBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9j
ZXNzUmVzdGFydCkKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwog
Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXczID0gYWRvcHROUyhbW1dL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBj
b25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAtMTU1OCwxMCArMTU1OCw4
IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTWlncmF0ZURhdGFGcm9tTWlzc2luZ1Rv
cEZyYW1lVW5pcXVlUmVkaXJlY3RTYW1lU2l0CiAKIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKIHsKKyAgICBOU1VSTCAq
aXRwUm9vdFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TVGVtcG9yYXJ5RGlyZWN0b3J5
KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQ2FuQWNjZXNzRGF0YVN1bW1hcnlX
aXRoTm9Qcm9jZXNzUG9vbFRlc3QiXSBpc0RpcmVjdG9yeTpZRVNdOwogICAgIGF1dG8gZGVmYXVs
dEZpbGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgIF9XS1dl
YnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tf
V0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKLSAgICBh
dXRvICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENv
bmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwotICAgIE5T
VVJMICppdHBSb290VVJMID0gW1tkYXRhU3RvcmUgX2NvbmZpZ3VyYXRpb25dIF9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGlyZWN0b3J5XTsKICAgICBOU1VSTCAqZmlsZVVSTCA9IFtpdHBSb290VVJM
IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIm9ic2VydmF0aW9ucy5kYiJdOwogICAgIFtk
ZWZhdWx0RmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0UGF0aDppdHBSb290VVJMLnBhdGggZXJyb3I6
bmlsXTsKICAgICBFWFBFQ1RfRkFMU0UoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQ
YXRoOml0cFJvb3RVUkwucGF0aF0pOwpAQCAtMTU3Miw2ICsxNTcwLDEwIEBAIFRFU1QoUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkK
ICAgICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6bmV3
RmlsZVVSTC5wYXRoXSk7CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciBjb3B5SXRlbUF0UGF0aDpu
ZXdGaWxlVVJMLnBhdGggdG9QYXRoOmZpbGVVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVD
VF9UUlVFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpmaWxlVVJMLnBhdGhd
KTsKKworICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25m
aWd1cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9y
ZWxlYXNlXTsKKyAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLl9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5ID0gaXRwUm9vdFVSTDsKKyAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tXS1dl
YnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29u
ZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkOllFU107CiAKICAgICBzdGF0aWMgYm9vbCBkb25lRmxhZyA9IGZh
bHNlOwpAQCAtMTYzMywxMiArMTYzNSwxMiBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3Ms
IFN0b3JlU3VzcGVuc2lvbikKICAgICBbd2ViVmlldzIgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5h
dmlnYXRpb25dOwogCiAgICAgZG9uZUZsYWcgPSBmYWxzZTsKLSAgICBbc2hhcmVkUHJvY2Vzc1Bv
b2wgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6XnsKKyAgICBbZGF0YVN0b3Jl
MSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeewogICAgICAgICBkb25lRmxh
ZyA9IHRydWU7CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxh
Zyk7CiAKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3Vt
ZV07CisgICAgW2RhdGFTdG9yZTEgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiB9CiAK
IEBpbnRlcmZhY2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1NjaGVtZUhhbmRsZXIgOiBOU09iamVj
dCA8V0tVUkxTY2hlbWVIYW5kbGVyPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQppbmRleCAzNGE0ZjVj
NTM4YjliMGU5ZmNiMDUwNzJiMTcwMjg4ZTllNGU5ZjhmLi4yZjhlMzRkYmE2ZGE0NzIzNTY1NWZm
MGRiMmFkY2ExYmY4YzU2NzIwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpAQCAtNTU4LDcgKzU1
OCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFVzZXJBZ2VudE92ZXJyaWRlKQogCiAgICAgY29u
ZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0
XSk7CiAKLSAgICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VI
YW5kbGVyIGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3Jr
ZXI6IEJhciBDdXN0b20gVXNlckFnZW50Il0pOworICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHRO
UyhbW1NXVXNlckFnZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNz
YWdlOkAiTWVzc2FnZSBmcm9tIHdvcmtlcjogRm9vIEN1c3RvbSBVc2VyQWdlbnQiXSk7CiAgICAg
W1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhh
bmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07CiAKICAgICB3ZWJWaWV3ID0g
YWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAs
IDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTYzMyw4
ICs2MzMsNiBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBDYWNoZVN0b3JhZ2VSZXN0b3JlRnJvbURp
c2spCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFs
c2U7CiAKLSAgICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9kZWxldGVEZWZhdWx0RGF0YVN0b3JlRm9y
VGVzdGluZ107Ci0KICAgICBTZXJ2aWNlV29ya2VyVENQU2VydmVyIHNlcnZlcih7CiAgICAgICAg
IHsgInRleHQvaHRtbCIsIG1haW5DYWNoZVN0b3JhZ2VCeXRlcyB9CiAgICAgfSwgewpAQCAtOTgy
LDYgKzk4MCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3Jl
YXRpb24pCiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJh
dGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAg
ICAgc2V0Q29uZmlndXJhdGlvbkluamVjdGVkQnVuZGxlUGF0aChjb25maWd1cmF0aW9uLmdldCgp
KTsKKyAgICBSZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gb3JpZ2luYWxQcm9jZXNzUG9vbCA9IGNv
bmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2w7CiAKICAgICBkb25lID0gZmFsc2U7CiAKQEAg
LTEwMzUsNyArMTAzNCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9j
ZXNzQ3JlYXRpb24pCiAgICAgZG9uZSA9IGZhbHNlOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQg
bG9hZGluZyB0aGUgc2ltcGxlIHBhZ2UgZGlkIG5vdCBzdGFydCB0aGUgc2VydmljZSB3b3JrZXIg
cHJvY2Vzcy4KLSAgICBFWFBFQ1RfRVEoMHUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5w
cm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CisgICAgRVhQRUNUX0VRKDF1
LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQ
cm9jZXNzQ291bnQpOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpu
ZXdDb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgRVhQRUNUX0VRKDJ1LCB3ZWJWaWV3LmdldCgp
LmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudElnbm9yaW5nUHJld2Fy
bWVkKTsKQEAgLTEwNDMsOSArMTA0Miw4IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VX
b3JrZXJQcm9jZXNzQ3JlYXRpb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25l
KTsKICAgICBkb25lID0gZmFsc2U7CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5nIHRo
aXMgcGFnZSBkaWQgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCiAgICAgRVhQRUNU
X0VRKDF1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VX
b3JrZXJQcm9jZXNzQ291bnQpOwotCisgICAgRVhQRUNUX0VRKDF1LCBvcmlnaW5hbFByb2Nlc3NQ
b29sLmdldCgpLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKICAgICBbW2NvbmZpZ3VyYXRp
b24gd2Vic2l0ZURhdGFTdG9yZV0gcmVtb3ZlRGF0YU9mVHlwZXM6W1dLV2Vic2l0ZURhdGFTdG9y
ZSBhbGxXZWJzaXRlRGF0YVR5cGVzXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3Rd
IGNvbXBsZXRpb25IYW5kbGVyOl4oKSB7CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH1dOwpA
QCAtMTYxOCwyMSArMTYxNiwzNSBAQCBzdGF0aWMgc2l6ZV90IGxhdW5jaFNlcnZpY2VXb3JrZXJQ
cm9jZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgYgogICAgIHJldHVy
biB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3Vu
dElnbm9yaW5nUHJld2FybWVkOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZkFuZElu
UHJvY2Vzc1NlcnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZlByb2Nlc3NT
ZXJ2aWNlV29ya2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyA9IHRydWU7CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVY
UEVDVF9FUSgxdSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RFU1QoU2Vydmlj
ZVdvcmtlcnMsIEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0Qmxh
bmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vz
cyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykp
OwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRp
bmdUaHJvdWdoU2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJs
YW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hPdXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewog
ICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9v
bCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNo
U2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGZp
cnN0TG9hZEFib3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0
QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7Cisg
ICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29s
IGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJz
dExvYWRBYm91dEJsYW5rKSk7CiB9CiAKQEAgLTE5NDQsMTEgKzE5NTYsMTEgQEAgVEVTVChTZXJ2
aWNlV29ya2VycywgU3VzcGVuZE5ldHdvcmtQcm9jZXNzKQogCiAgICAgRVhQRUNUX1RSVUUoW1tO
U0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnN3REJQYXRoLnBh
dGhdKTsKIAotICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFt3ZWJWaWV3Lmdl
dCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2ls
bFN1c3BlbmRJbW1pbmVudGx5XTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBk
ZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAgICBb
IHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lXTsKKyAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVE
YXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBbd2ViVmlldyBs
b2FkUmVxdWVzdDpzZXJ2ZXIucmVxdWVzdCgpXTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KaW5kZXggYTM1ZjA1MzUwYWFiNGI0MmYzNmM0
NmFlY2RlZWVlNmNlNTQ0ZWY4Ni4uMzM3NjA5MmExOTViNTEyZGE2N2M0OTZlNDUyMTdiOTE0ZmUy
YTU3OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9X
S0hUVFBDb29raWVTdG9yZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCkBAIC00NzksOCArNDc5LDYgQEAgc3RhdGljIGJv
b2wgZmluaXNoZWQ7CiB9CiBAZW5kCiAKLS8vIEZJWE1FOiBvbiBpT1MsIFVJIHByb2Nlc3Mgc2hv
dWxkIGJlIHVzaW5nIHRoZSBzYW1lIGNvb2tpZSBmaWxlIGFzIHRoZSBuZXR3b3JrIHByb2Nlc3Mg
Zm9yIGRlZmF1bHQgc2Vzc2lvbi4KLSNpZiBQTEFURk9STShNQUMpCiBlbnVtIGNsYXNzIFNob3Vs
ZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHsgTm8sIFllcyB9Owogdm9pZCBydW5XS0hUVFBDb29r
aWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBz
aG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZykKIHsKQEAgLTU4OSwyMCArNTg3LDY2IEBAIFRF
U1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbFdpdGhQcmV3YXJtaW5nKQog
ICAgIHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVBy
b2Nlc3NQcmV3YXJtaW5nOjpZZXMpOwogfQogCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCiBA
aW50ZXJmYWNlIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURl
bGVnYXRlPgorLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUw7CistIChOU1N0cmluZyAqKXdh
aXRGb3JNZXNzYWdlOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2ll
VUlEZWxlZ2F0ZQorQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUg
eworICAgIFJldGFpblB0cjxOU1N0cmluZz4gX21lc3NhZ2U7Cit9CisKIC0gKHZvaWQpd2ViVmll
dzooV0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdl
OihOU1N0cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFt
ZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKIHsK
LSAgICBFWFBFQ1RfU1RSRVEoIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIiwgbWVzc2Fn
ZS5VVEY4U3RyaW5nKTsKKyAgICBfbWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgZmluaXNoZWQgPSB0
cnVlOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CisKKy0gKE5TU3RyaW5nICopd2FpdEZv
ck1lc3NhZ2UKK3sKKyAgICB3aGlsZSAoIV9tZXNzYWdlKQorICAgICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpzcGluUnVuTG9vcCgpOworICAgIHJldHVybiBfbWVzc2FnZS5hdXRvcmVsZWFzZSgp
OworfQorCistIChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTAoreworICAgIHJldHVybiBAIjxz
Y3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQg
aSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tp
XS50cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9z
Y3JpcHQ+IjsKK30KKwogQGVuZAogCitURVNUKFdlYktpdCwgV0tIVFRQQ29va2llU3RvcmVNdWx0
aXBsZVZpZXdzKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcxID0gW1tUZXN0V0tXZWJW
aWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MSBzeW5jaHJvbm91c2x5TG9hZEhU
TUxTdHJpbmc6QCJzdGFydCBuZXR3b3JrIHByb2Nlc3MiXTsKKworICAgIE5TSFRUUENvb2tpZSAq
c2Vzc2lvbkNvb2tpZSA9IFtOU0hUVFBDb29raWUgY29va2llV2l0aFByb3BlcnRpZXM6QHsKKyAg
ICAgICAgTlNIVFRQQ29va2llUGF0aDogQCIvIiwKKyAgICAgICAgTlNIVFRQQ29va2llTmFtZTog
QCJTZXNzaW9uQ29va2llTmFtZSIsCisgICAgICAgIE5TSFRUUENvb2tpZVZhbHVlOiBAIkNvb2tp
ZVZhbHVlIiwKKyAgICAgICAgTlNIVFRQQ29va2llRG9tYWluOiBAIjEyNy4wLjAuMSIsCisgICAg
fV07CisKKyAgICBfX2Jsb2NrIGJvb2wgc2V0Q29va2llRG9uZSA9IGZhbHNlOworICAgIFt3ZWJW
aWV3MS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUuaHR0cENvb2tpZVN0b3JlIHNldENv
b2tpZTpzZXNzaW9uQ29va2llIGNvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIHNldENvb2tp
ZURvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmc2V0
Q29va2llRG9uZSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbQ2hlY2tTZXNzaW9u
Q29va2llVUlEZWxlZ2F0ZSBuZXddKTsKKyAgICBbd2ViVmlldzEgc2V0VUlEZWxlZ2F0ZTpkZWxl
Z2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldzEgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFs
ZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcu
MC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0s
ICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworCisgICAgVGVzdFdLV2ViVmlldyAq
d2ViVmlldzIgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZp
ZXcyIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3MiBsb2FkSFRN
TFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRo
U3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVn
YXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7Cit9
CisKIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNl
c3Npb24pCiB7CiAgICAgUmV0YWluUHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4gZXBoZW1lcmFsU3Rv
cmVXaXRoQ29va2llcyA9IFtXS1dlYnNpdGVEYXRhU3RvcmUgbm9uUGVyc2lzdGVudERhdGFTdG9y
ZV07CkBAIC02MjcsOSArNjcxLDggQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFBy
b2Nlc3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmZpbmlzaGVkKTsKICAgICBmaW5pc2hlZCA9IGZhbHNlOwogICAgIAotICAgIE5TU3RyaW5nICph
bGVydENvb2tpZUhUTUwgPSBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUu
c3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBj
b29raWVzW2ldID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNv
b2tpZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsKLSAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmlu
ZzphbGVydENvb2tpZUhUTUwgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8x
MjcuMC4wLjEiXV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7Cisg
ICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFz
ZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQ
RUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFt
ZT1Db29raWVWYWx1ZSIpOwogfQogCiBzdGF0aWMgYm9vbCBhcmVDb29raWVzRXF1YWwoTlNIVFRQ
Q29va2llICpmaXJzdCwgTlNIVFRQQ29va2llICpzZWNvbmQpCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5t
bSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5k
bGVyLWxlYWtzLm1tCmluZGV4IGFjN2RlNDE1MTJjNDUxMzhlYzVlNGMwOWU1MTE1ZDE2Y2QyM2Iy
MmUuLmFjMTY1MzVkZmQ5Mzk5OWQyZWM1MGRjZmQ3MWMzYTU2ZDExM2VjN2EgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVy
LWxlYWtzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tV
UkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0IDxXZWJL
aXQvV0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5o
PgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0
Zi9WZWN0b3IuaD4KQEAgLTE1Miw3ICsxNTMsNyBAQCBURVNUKFVSTFNjaGVtZUhhbmRsZXIsIExl
YWtzMykKIAogICAgIHJ1blVudGlsVGFza3NJbkZsaWdodCgyKTsKIAotICAgIFt3ZWJWaWV3MS5n
ZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CisgICAgW3dlYlZpZXcxLmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgcnVuVW50aWxUYXNrc0luRmxpZ2h0KDApOwog
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJz
aXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQppbmRleCA5MmNmM2E2MTk4
YTViOWQxNDU0NDkwNWRiOWU5NDhmMTFjNzI1NmRlLi5iZjhiZGU4MzFhMjg1OWJjZjM0MTM4MDYx
ODhiNTkxZmNhYTlkM2FiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5t
bQpAQCAtMjQ0LDcgKzI0NCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0
b21QYXRocyhTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRFCiAgICAgLy8gTm93
LCB3aXRoIGJyYW5kIG5ldyBXS1dlYnNpdGVEYXRhU3RvcmVzIHBvaW50aW5nIGF0IHRoZSBzYW1l
IGN1c3RvbSBjb29raWUgc3RvcmFnZSBsb2NhdGlvbiwKICAgICAvLyBpbiBuZXdseSBmaXJlZCB1
cCBOZXR3b3JrUHJvY2Vzc2VzLCB2ZXJpZnkgdGhhdCB0aGUgZmV0Y2ggYW5kIGRlbGV0ZSBBUElz
IHdvcmsgYXMgZXhwZWN0ZWQuCiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAg
YXV0byBuZXdDdXN0b21EYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFs
bG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9u
LmdldCgpXSk7CiAKICAgICBbbmV3Q3VzdG9tRGF0YVN0b3JlIGZldGNoRGF0YVJlY29yZHNPZlR5
cGVzOltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dlYnNpdGVEYXRhVHlwZUNvb2tpZXMsIG5pbF0g
Y29tcGxldGlvbkhhbmRsZXI6XihOU0FycmF5PFdLV2Vic2l0ZURhdGFSZWNvcmQgKj4gKiByZWNv
cmRzKSB7CkBAIC0yNTUsNyArMjU1LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vic2l0ZURhdGFTdG9y
ZUN1c3RvbVBhdGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEUKICAgICBy
ZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CiAgICAgbmV3Q3VzdG9tRGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9y
ZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJh
dGlvbi5nZXQoKV0pOwogCiAgICAgW25ld0N1c3RvbURhdGFTdG9yZSByZW1vdmVEYXRhT2ZUeXBl
czpbTlNTZXQgc2V0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVDb29raWVzLCBuaWxdIG1v
ZGlmaWVkU2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XiB7CkBA
IC01MzksNyArNTM5LDcgQEAgVEVTVChXZWJLaXQsIERvTG9hZFdpdGhOb25EZWZhdWx0RGF0YVN0
b3JlQWZ0ZXJUZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNzKQogCiAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCku
cHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZp
Z3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OwogCiAgICAgcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRs
ZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJo
dG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKICAgICBbd2Vi
VmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKQEAgLTg1Nyw3ICs4NTcsNyBAQCBURVNUKFdlYktp
dCwgTWVkaWFDYWNoZSkKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwogCiAgICAgZG9uZSA9IHRy
dWU7Ci0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRh
U3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFtmaWxlTWFuYWdlciByZW1v
dmVJdGVtQXRQYXRoOnBhdGggZXJyb3I6JmVycm9yXTsKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3Ip
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCA5ZDM3Y2Nl
ZGRiODIxNTc0NzVkODFmMTIyMGY0NTZiODY0YzNiMTcxLi42MzMyNmY2ODU2YmM2MDU5ZGM2Mzc5
ZjJhYTVjMDA1MGEwNzg0YWJkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmNwcApAQCAtMTA2MSw4ICsxMDYxLDYgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRT
dGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKIAog
ICAgIHJlc2V0UXVvdGEoKTsKIAotICAgIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcocGxhdGZvcm1Db250ZXh0KCksIHRydWUpOwotCiAg
ICAgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSk7CiAKICAgICBXS0NvbnRleHRTZXRVc2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250
ZXh0KCksIGZhbHNlKTsKQEAgLTMxMzYsNyArMzEzNCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6
OnNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVM
aW1pCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsK
LSAgICBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhwbGF0Zm9ybUNvbnRleHQoKSk7
CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3Mod2Vic2l0ZURh
dGFTdG9yZSgpKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdv
cmtlcnMoKQpAQCAtMzE2Nyw5ICszMTY1LDggQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1DcmVhdGVPdGhlclBhZ2UoUGxhdGZvcm1XZWJWaWV3KiBwYXJlbnQKICAg
ICByZXR1cm4gbmV3IFBsYXRmb3JtV2ViVmlldyhjb25maWd1cmF0aW9uLCBvcHRpb25zKTsKIH0K
IAotV0tDb250ZXh0UmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tD
b250ZXh0UmVmIGNvbnRleHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29udGV4dENvbmZp
Z3VyYXRpb24pCitXS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29u
dGV4dChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZikKIHsK
LSAgICBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShjb250ZXh0LCBkZWZhdWx0
V2Vic2l0ZURhdGFTdG9yZSgpKTsKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409300</attachid>
            <date>2020-09-21 12:36:33 -0700</date>
            <delta_ts>2020-09-21 14:59:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200921123631.patch</filename>
            <type>text/plain</type>
            <size>322495</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRhZGZjMzM1NmEzMzk3NmU4
YmE5Mzk2YmJhOTM0ZThmNGMzODhmM2EuLmYzNGM3MzkxNzdhZjQ3ZTE3YWJlYmZlNTUyYzkyMDlk
MWRkYzI0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzU3IEBACisyMDIwLTA5LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmg6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24pOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Byb2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lv
bik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0
U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVT
dG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3Jl
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRU
UENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0
b3JlOjpzZXRDb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVD
b29raWUpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMp
OgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1
bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0TmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyKToKKyAgICAgICAgKFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpOgorICAgICAgICAoV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRh
U3RvcmUpOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXJUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9z
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOl0pOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKToKKyAgICAgICAgKC1bV0tQcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQ
cm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQ
b29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1Byb2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0
b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAg
KC1bV0tXZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOgorICAgICAg
ICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3Bl
bmQ6XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFT
dG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChfV2ViS2l0Q29v
a2llTWFuYWdlclByaXZhdGU6OmNvb2tpZU1hbmFnZXIgY29uc3QpOgorICAgICAgICAoX1dlYktp
dENvb2tpZU1hbmFnZXJQcml2YXRlOjp+X1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlKToKKyAg
ICAgICAgKHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9nZXRfYWNjZXB0X3BvbGljeSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJf
YWRkX2Nvb2tpZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMp
OgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKHdl
YmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZCk6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21h
dGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXhp
bGlhcnlQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1
cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmcp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmNhbmNlbCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVzcyk6CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAg
ICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1h
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlN
YXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVu
dGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxp
Y2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFBy
b3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94
eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1By
b2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHRO
ZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnRl
cm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVh
dGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkYXRhU3RvcmVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJv
Y2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkpOgorICAgICAgICAoV2ViS2l0
OjphbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQ
cm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJl
Y2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
Q2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29u
bmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9v
bEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNz
UG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVu
dCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdl
clByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29v
a2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVD
aGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0
cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaDoK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRp
dGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVjb25u
ZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JG
cmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9u
T3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZv
clRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bv
b2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENv
bm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9y
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250
ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFs
VVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3Nlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpo
YXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFj
dGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2lu
Z1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xl
YXJDYWNoZWRDcmVkZW50aWFscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9y
VGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJl
c3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpmbHVzaENv
b2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZGlkQ29t
bWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNz
YXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0
YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdv
cmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRTZXJ2aWNlV29ya2VyVGlt
ZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRN
YXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1
ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRz
UHJvY2Vzc2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3Rp
Y3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZG9t
YWluSURFeGlzdHNJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5n
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNl
T25jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRo
ZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFi
YXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9h
ZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JU
ZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9y
YWdlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRl
UmVmZXJyZXJGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQ
YXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9v
bHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1NwZWNp
ZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3RhdGlzdGljc1Rlc3RpbmdD
YWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmbHVzaENvb2tpZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvcldlYlNvY2tldCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFy
Q2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpw
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxT
dG9yYWdlRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0
UXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vz
c0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlh
bGl6ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBcHBCb3VuZERv
bWFpbnNGb3JJVFApOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjp1cGRhdGVC
dW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25J
RE1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmV4aXN0
aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc0Fz
c29jaWF0ZWRQcm9jZXNzUG9vbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdD
b29raWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGlk
Q3JlYXRlTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKToK
KyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3Jz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRp
bmdzKToKKwogMjAyMC0wOS0yMSAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxl
LmNvbT4KIAogICAgICAgICBBbGxvdyBhYm91dDpibGFuayBzdWJmcmFtZSBsb2FkcyBmb3Igbm9u
IGFwcC1ib3VuZCB0b3AgZnJhbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKaW5kZXggZmNlMjM4OTg3YTc4
NTBmMThjOWYzMDZjNTBlOThjZTk4OGQxMjVmZC4uYTI3ZWZkODk4M2E4ZmY3NGEwOWUyYjFiYzI4
YjAzMTYwYmEwNDNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
b29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcApAQCAtMTQ5LDkgKzE0OSwxMiBAQCB2
b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBwb2xpY3ksCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAotdm9p
ZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVy
KG1fcHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7
CisgICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9u
KHNlc3Npb25JRCkpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5j
b29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihIVFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dl
YkNvb2tpZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9X
ZWJDb29raWVNYW5hZ2VyLmgKaW5kZXggY2E3ZjU1ZTg2NmJkYWQ0YjFlMzUyZThmNjQwNTdiYWJj
NDYyODMyZC4uZWI3NDE4MjM1ZjU3MDkzMDM5NjAxOWJlNDQ3MjFkZGMwOWZhOThmNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2ll
TWFuYWdlci5oCkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRDb29raWVz
KFBBTDo6U2Vzc2lvbklELCBjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiYpPiYmKTsKIAogICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpOwotICAgIHZv
aWQgZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmKTsKKyAgICB2b2lkIGdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYpOwogCiAgICAgdm9pZCBzdGFydE9ic2Vydmlu
Z0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQpOwogICAgIHZvaWQgc3RvcE9ic2VydmluZ0Nv
b2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdl
cy5pbgppbmRleCBhY2Q3NTQ0MGQ4M2YzNDY2NTBjOWYzM2I3NWI1ZDVkMDkzNTIxM2JhLi42ZmRm
NTc3MmFhNmFhZTM5NDAyYTlhODlmNTZjODRmN2JkNDM1ODVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFu
YWdlci5tZXNzYWdlcy5pbgpAQCAtMzYsNyArMzYsNyBAQCBtZXNzYWdlcyAtPiBXZWJDb29raWVN
YW5hZ2VyIE5vdFJlZkNvdW50ZWQgewogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVk
U2luY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3lu
YwogCiAgICAgdm9pZCBTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJD
b3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lk
IEdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhU
VFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3Qg
V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAg
dm9pZCBTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KQogICAgIHZvaWQgU3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcAppbmRleCBiZThkOTY2NjJiZTZkY2Q4NWZhM2MzMjkyOWFlMGYwYjVkMTgyMzQzLi43ZjQ3
NzcxMzJkNTI0NzU4MTgyOTgxYWFmMGMxOGI3MmI3YmEzOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ3LDI5ICszNDcsMTkg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRl
YnVnTW9kZShwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAK
LSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAg
IGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lv
bklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0g
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLSAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9y
YWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hl
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFT
dG9yZVBhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAg
ICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5zZXNzaW9uSUQ7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJt
YW5lbnRseShkYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CisgICAgICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25J
RCwgZGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBh
cmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNz
aW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CiAjZW5kaWYKLQorICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBk
YXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1l
dGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1v
dGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMs
IFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKLSAgICBib29sIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQg
PSB0cnVlOwotICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQsIFdURk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
KSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKKyAgICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRh
U3RvcmVQYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQsIFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5KSwgZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdl
clNldC0+YWRkKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8q
IGRlZmF1bHRTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSk7Ci0gICAgYXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNl
c3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29v
a2llIDogcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2ll
cykKLSAgICAgICAgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAg
ICB9CiAKICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygp
KQogICAgICAgICBzdXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNTA1LDgg
KzQ5NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpT
ZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpl
bnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxk
VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXJCYXNlKQog
I2VuZGlmCiB7Ci0gICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpKTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3JrU3RvcmFnZVNl
c3Npb25zLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3
RW50cnkpCiAgICAgICAgIHJldHVybjsKQEAgLTUyMSw3ICs1MDksNyBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJv
b2wgc2hvdWxkVQogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gbWFr
ZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fub25p
Y2FsVVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVByaXZh
dGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAgZWxz
ZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAg
ICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpj
cmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkpOwog
CiAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQSSgp
KSB7CkBAIC01NDQsMjEgKzUzMiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVBY2Nl
cHRQb2xpY3lDaGFuZ2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9saWN5KQogCiBXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lv
bihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNz
aW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0
dXJuICZkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFn
ZVNlc3Npb25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewot
ICAgIGlmICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1
bHROZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vz
c2lvbigpOwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQot
CiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9y
KQogewotICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0
byYgc3RvcmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAg
ICAgICAgIGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCBhYTczMzc3YjczMmY2MTBiODY3OTA1
NmMzN2RmMjhhZWVhMDdhZjgzLi5kYzg2ZjM5Njk3ZmM1MDNlYTRkYmQxYjA2YzMyMjk3NWIxZTY5
ZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5o
CkBAIC0xNzAsNyArMTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0
b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdl
U2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2
b2lkIGVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJik7CkBAIC0zNzUsNyArMzc0LDYgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29u
c3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nl
c3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBAIC01NDQsNyAr
NTQyLDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8
UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3Rv
cmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1h
bmFnZXJTZXQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggOTkwMWM1
Y2I3M2M3NGZlM2RhNGViZjU3YmE4NTEyODZmZGExMDRiZi4uMDJkZGI5MjM0ZTk5OWMzZTZjZGNk
Y2YwYjg3OGI4NzI1ODM2MzI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAK
QEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6
ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IHVpUHJv
Y2Vzc1NES1ZlcnNpb247CiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRl
eHQuZ2V0KCkpOwogI2VuZGlmCi0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVyczsKKyAgICBlbmNvZGVyIDw8IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYgVVNFKFNPVVAp
CiAgICAgZW5jb2RlciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5jb2RlciA8PCBpZ25v
cmVUTFNFcnJvcnM7CkBAIC02OCw5ICs2OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5j
b2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxT
Y2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
Ci0gICAgZW5jb2RlciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxk
RGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAg
IGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFi
bGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTYsMTEgKzExMywxMSBAQCBi
b29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVy
JiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAot
ICAgIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVyczsKLSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwot
ICAgIGlmICghZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9y
PFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBk
ZWNvZGVyID4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0
ZXJzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzID0gV1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJl
c3VsdC5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7
CiAKICNpZiBVU0UoU09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVB
Y2NlcHRQb2xpY3kpKQpAQCAtMTQyLDIwICsxMzksNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJv
YwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNO
b0FjY2VzcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlv
bmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmVzdWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUgPSBXVEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERp
c2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3Vs
ZEVuYWJsZUlUUERhdGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggMTFjYTVhMTk5ZmNmZmU4ODNmZmYwYTJmZjc5ZGZlNDIx
MGQ5ZGFkMS4uNjc0OWRhMGM0YTYzYzIwMjEwNzc4MzU4NDg0NmM5MGQwMTBhMDM0MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtNzEsNyArNzEsNyBAQCBzdHJ1Y3QgTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG5l
dHdvcmtBVFNDb250ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cyBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnM+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAgICAgCiAjaWYgVVNFKFNPVVApCiAg
ICAgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBX
ZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsKQEAgLTg1LDEy
ICs4NSw3IEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAg
VmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIFZlY3RvcjxT
dHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKLSAgICBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBib29sIHNob3VsZERpc2FibGVTZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgYm9v
bCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZSB7IGZhbHNlIH07CisgICAgYm9vbCBzaG91bGRFbmFi
bGVJVFBEYXRhYmFzZSB7IHRydWUgfTsKICAgICBib29sIGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlv
bkRlYnVnTW9kZSB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXggZGE2MzU5
MTI0MjIzZGI5NzAzMGQxZWE3N2JjMDBjZWU1MWZiMDE3ZC4uNTAxMGY5YTg2OTAzOTBkZmZlOWEz
NDRlOTkwNWIyNGU2Njg1YzdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpAQCAtNzgsOSArNzgsNiBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0Nv
Y29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQ
ZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJz
LmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFUU0NvbnRleHQo
cGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMDUsMTEgKzEwMiw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29j
b2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2Fj
aGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7
Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNzOjpzb3VyY2VBcHBsaWNh
dGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9BUFBMSUNBVElPTl9BVURJ
VF9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwv
TmV0d29ya1Byb2Nlc3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQyZGNjOGUzZjliOGYx
NjkyOTk3ZjY3MTkyLi40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5M2UyMjU2YTM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29y
a1Byb2Nlc3NDdXJsLmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGkKIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5l
dHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3Qg
Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBjMjczNmUw
MjZhNTVkM2Q0MDIwZjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0NjIwZjAyYTdkOWU5
ZTg2OWVjODY0OTFiN2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNTUsMTUgKzU1
LDExIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3Rv
cmVTZXNzaW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9u
SGFuZGxlKTsKIAogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nl
c3NDb29raWVTdG9yYWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBh
cmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAg
IGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29v
a2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25J
RCgpKQogICAgICAgICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3RvcmFnZUZyb21J
ZGVudGlmeWluZ0RhdGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmll
cik7CiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNz
aW9uLCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkpLCBXVEZNb3Zl
KHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3Jr
UHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29uc3QgYXV0byYg
Y29va2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0
Q29va2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25J
RCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRl
eCA0MWFmZGNjNjFhZGM1ODNkY2YxOWYyZDQwYWEyODkxZjhhMDEzMjhiLi4wOTNkNTk5NTk2YTY4
ODMwYWYwOTkzZmEzNjgzMWUwYzMyNGJmYmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApAQCAtMTQwLDEx
ICsxNDAsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNldElnbm9yZVRMU0Vycm9y
cyhwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3Jz
KGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0U2hv
dWxkSWdub3JlVExTRXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXggNmQwYzEyOWE3
NDA1MTBkMzg2OTczNzA1YWQwOTJlZjEzMmNjMDc1YS4uMDQ4MTBiM2UxOWJlOTZjYWQxYWQ4MmE0
NGRjZWRiMjZlZjc4MjYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcApAQCAtNDAsMTMgKzQwLDkgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QK
ICAgICBlbmNvZGVyIDw8IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8
IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2ll
U3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2ll
czsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERh
dGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpk
ZWNvZGUoSVBDOjpEZWMKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0
ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY29va2llU3Rv
cmFnZVBhdGhFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4+IHBlbmRpbmdDb29raWVzOwotICAgIGRlY29kZXIgPj4gcGVuZGluZ0Nvb2tpZXM7
Ci0gICAgaWYgKCFwZW5kaW5nQ29va2llcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gV1RGTW92ZSgqcGVuZGluZ0Nvb2tpZXMp
OwotCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBp
bmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VE
aXJlY3Rvcnk7CkBAIC0xMDEsMTQgKzkxLDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAg
ICBpZiAoIWluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIE9wdGlvbmFs
PFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VUZW1wQmxv
YkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIWluZGV4ZWREYXRhYmFzZVRlbXBC
bG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
LmgKaW5kZXggZjI3ZGY0ODk4MDlmMzE5NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQzOS4uZTFiMjMz
NzAxOTlmZTM3MDMxZTlkYzVjMDU3ODE1NTAyMWUzNGQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCkBAIC01MSwxNSArNTEsMTEg
QEAgc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKIAogICAgIFZlY3Rvcjx1aW50
OF90PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXM7CiAgICAgTmV0d29ya1Nlc3Npb25DcmVh
dGlvblBhcmFtZXRlcnMgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAgICAgU3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
OwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKaW5kZXgg
YmMwNzg2NmZiYzM5NjhlNzZjYWE5YTM1NjgxMGM2YTJmYjA5ZGNmZC4uZmY5NTU4OTJiZGEwYjgz
YzIzYTk2YTA4MzllZjNiZDBkOTQ2OWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKQEAgLTQ2LDggKzQ2LDYgQEAgbmFtZXNw
YWNlIEFQSSB7CiBIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0RhdGFTdG9yZSh3
ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQ
b29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQ
cm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENv
b2tpZVN0b3JlKCkKQEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tp
ZVN0b3JlKCkKICAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQo
IW1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9jb29raWVNYW5h
Z2VyUHJveHlPYnNlcnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENv
b2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC04MSwzMyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJv
dW5kQ29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2kKIAogdm9pZCBI
VFRQQ29va2llU3RvcmU6OmNvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8q
IHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiBhbGxDb29raWVzOwotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgICAgICBh
bGxDb29raWVzID0gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwot
ICAgICAgICBhbGxDb29raWVzLmFwcGVuZFZlY3RvcihtX293bmluZ0RhdGFTdG9yZS0+cGVuZGlu
Z0Nvb2tpZXMoKSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIGFsbENvb2tpZXNdICgpIG11dGFibGUgewotICAgICAgICAg
ICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGFsbENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRv
KiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykg
bXV0YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5u
ZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldEFs
bENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11
dGFibGUgewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRv
KiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9w
ZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcih7IH0pOwotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0
Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYgY29va2llcykgbXV0
YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldENvb2tp
ZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUg
ewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtMTE1LDc4ICs5NCwyOSBAQCB2b2lkIEhUVFBD
b29raWVTdG9yZTo6Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0bwogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldENvb2tpZXMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2ll
cywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiBhcHBCb3VuZENvb2tpZXMp
IG11dGFibGUgewotICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nl
c3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vz
c2lvbiBiZWNhdXNlIHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3
b3JrIFByb2Nlc3Mgd2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAg
ICAgICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAg
ICAgICAgICAgICBzZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUp
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9vd25pbmdEYXRh
U3RvcmUtPmFkZFBlbmRpbmdDb29raWUoY29va2llKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tp
ZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
PigpOwotICAgICAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUg
ewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAg
IGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3Mo
KS5jb29raWVNYW5hZ2VyKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVs
ZXRlQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3du
aW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0g
ICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Np
b24pCi0gICAgICAgICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0
b3JlKGNvb2tpZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3Jl
LT5yZW1vdmVQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAg
IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9
IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAg
Y29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgY29va2llLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci0gICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0
YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5h
Z2VyLmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
ZGVsZXRlQWxsQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9v
bEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAg
IGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAg
ICAgICAgICBkZWxldGVDb29raWVzSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNv
b2tpZU1hbmFnZXItPmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpKTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdv
cmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxs
Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBU
aGUgQ29tcGxldGlvbkhhbmRsZXIgc2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbENvb2tpZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xp
Y3kpOwotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFu
YWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
Ci0gICAgY29va2llTWFuYWdlci0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0Rh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFT
dG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdl
ci5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgcG9saWN5LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENv
b2tpZVN0b3JlOjpmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMjI3LDIxICsxNTcsNyBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6
cmVnaXN0ZXJPYnNlcnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCiAKICAgICBtX2Nvb2tpZU1hbmFn
ZXJQcm94eU9ic2VydmVyID0gbWFrZVVuaXF1ZTxBUElXZWJDb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcj4oKnRoaXMpOwogCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wpIHsK
LSAgICAgICAgQVNTRVJUKCFtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMpOwotCi0gICAgICAg
IC8vIExpc3RlbiBmb3IgY29va2llIG5vdGlmaWNhdGlvbnMgaW4gdGhlIFVJUHJvY2VzcyBpbiB0
aGUgbWVhbnRpbWUuCi0gICAgICAgIHN0YXJ0T2JzZXJ2aW5nQ2hhbmdlc1RvRGVmYXVsdFVJUHJv
Y2Vzc0Nvb2tpZVN0b3JlKFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICBjb29raWVzRGlkQ2hhbmdl
KCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIG1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyA9
IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFu
YWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0
b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCkBAIC0yNzYsNDYg
KzE5MiwxMCBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0RpZENoYW5nZSgpCiB2b2lk
IEhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCgpCiB7CiAgICAgbV9vYnNl
cnZlZENvb2tpZU1hbmFnZXJQcm94eS0+dW5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBudWxscHRyOwotCi0gICAgYXV0byogcG9vbCA9
IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25z
KCk7Ci0KLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb2JzZXJ2ZWRD
b29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmbV9vd25p
bmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwogICAgIG1fb2Jz
ZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKLXZv
aWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9u
cygpCi17Ci0gICAgQVNTRVJUKCFtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZp
ZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKFt0aGlzXShX
ZWJQcm9jZXNzUG9vbCYgbmV3UHJvY2Vzc1Bvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0Rh
dGFTdG9yZS0+aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wobmV3UHJvY2Vzc1Bvb2wpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIE5vdyB0aGF0IGFuIGFzc29jaWF0ZWQgcHJvY2Vz
cyBwb29sIGV4aXN0cywgd2UgbmVlZCB0byBmbHVzaCB0aGUgVUkgcHJvY2VzcyBjb29raWUgc3Rv
cmUKLSAgICAgICAgLy8gdG8gbWFrZSBzdXJlIGFueSBjaGFuZ2VzIGFyZSByZWZsZWN0ZWQgd2l0
aGluIHRoZSBuZXcgcHJvY2VzcyBwb29sLgotICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3ND
b29raWVTdG9yZSgpOwotICAgICAgICBuZXdQcm9jZXNzUG9vbC5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotCi0gICAgICAgIGlmIChtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKSB7Ci0gICAg
ICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbmV3UHJvY2Vzc1Bvb2wuc3Vw
cGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAg
ICAgIH0KLSAgICAgICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygp
OwotICAgIH0pOwotfQotCi12b2lkIEhUVFBDb29raWVTdG9yZTo6dW5yZWdpc3RlckZvck5ld1By
b2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAgaWYgKG1fcHJvY2Vzc1Bvb2xDcmVhdGlv
bkxpc3RlbmVySWRlbnRpZmllcikKLSAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJQ
cm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJ
ZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmll
ciA9IDA7Ci19Ci0KICNpZiAhUExBVEZPUk0oQ09DT0EpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Zmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKSB7IH0KIFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+IEhUVFBDb29raWVTdG9yZTo6Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
Q29va2llcygpIHsgcmV0dXJuIHsgfTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCmluZGV4IGQ2MjBhZGRhNGU3Zjg5NDU2NjE4YTNlMjJl
MWJmZDQzNTc3NzViMTkuLmEwNWY0MTQzMGRiMmIyM2Q0MTc4NDA3OWE0ZmI4NmM3NDYwYTc1NDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3Jl
LmgKQEAgLTgzLDkgKzgzLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3Rv
cmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTmV3
UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0KICAgICB2b2lkIGZsdXNoRGVmYXVsdFVJUHJvY2Vz
c0Nvb2tpZVN0b3JlKCk7CiAgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGdldEFs
bERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKICAgICBzdGF0aWMgdm9pZCBz
ZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb25zdCBXZWJDb3JlOjpDb29r
aWUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCmluZGV4
IDU4YzU0NTNmNDg5ODdmNWUxYWZhZmVmMzRjNDMzMzVmMWI0Y2M5OTAuLjY1ZjhiNTNmNWIzZDMw
NWNmMjgwYmE1ZDMwYWFlMzdiMzlhY2Y0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmNwcApAQCAtNDExLDExICs0MTEsNiBAQCB2b2lkIFdLQ29udGV4dFBy
ZWNvbm5lY3RUb1NlcnZlcihXS0NvbnRleHRSZWYsIFdLVVJMUmVmKQogewogfQogCi1XS0Nvb2tp
ZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4
dFJlZikKLXsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0
UmVmKS0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSk7Ci19Ci0K
IFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29u
dGV4dFJlZikKIHsKICAgICByZXR1cm4gV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFT
dG9yZSgpOwpAQCAtNTI3LDEzICs1MjIsNiBAQCB2b2lkIFdLQ29udGV4dFNldEphdmFTY3JpcHRH
YXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLAogICAg
IFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3Rv
clRpbWVyRW5hYmxlZChlbmFibGUpOwogfQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNT
TENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQs
IGJvb2wgYWxsb3dzKQotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6
OnRvSW1wbChjb250ZXh0KS0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQ
bHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAg
ICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVn
SW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoKS5sZWFrUmVmKCkpOwpAQCAtNTc1LDExICs1NjMsNiBA
QCB2b2lkIFdLQ29udGV4dFNldEZvbnRBbGxvd0xpc3QoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYs
IFdLQXJyYXlSZWYgYXJyYXlSZWYpCiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNl
dEZvbnRBbGxvd0xpc3QoV2ViS2l0Ojp0b0ltcGwoYXJyYXlSZWYpKTsKIH0KIAotdm9pZCBXS0Nv
bnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAg
ICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0K
LQogdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYgY29u
dGV4dCkKIHsKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlU2VydmljZVdv
cmtlcnMoKTsKQEAgLTU4Nyw3ICs1NzAsNyBAQCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZp
Y2VXb3JrZXJzKFdLQ29udGV4dFJlZiBjb250ZXh0KQogCiBQcm9jZXNzSUQgV0tDb250ZXh0R2V0
TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewotICAg
IHJldHVybiBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+bmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyKCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1
Z2luKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBkb21haW5SZWYsIFdLU3Ry
aW5nUmVmIG5hbWVSZWYsIFdLQXJyYXlSZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5UmVmIGV4dGVu
c2lvbnNSZWYpCkBAIC02MTksMTIgKzYwMiwxMSBAQCB2b2lkIFdLQ29udGV4dENsZWFyQ3VycmVu
dE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogICAgIFdl
YktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5jbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVz
dGluZygpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcykKK3ZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcyhXS0NvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykK
IHsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFBy
aW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgd2Vic2l0ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdl
YnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0g
ICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktp
dDo6dG9JbXBsKHdlYnNpdGVEYXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmgKaW5kZXggMWQ4ZmFiOGExNDg2YWFkYjQ5NDE0NGI5OGYxMGU5MzYz
OGQwYzVlNi4uMmFiNmVmODZmNTMwZTc3Zjc0Y2JkNWRmNTg2MmFjNGQzMGI3OTg3NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2OCw3ICsxNjgsNiBA
QCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihXS0NvbnRleHRSZWYg
Y29udGV4dCk7CiBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4dEdldFdl
YnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURf
V0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsK
IAogV0tfRVhQT1JUIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0QXBw
bGljYXRpb25DYWNoZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJF
Q0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0
b3JlKTsKLVdLX0VYUE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFu
YWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdLX0VYUE9S
VCBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1hbmFnZXIo
V0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVmIFdLQ29u
dGV4dEdldEljb25EYXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFnZU1hbmFn
ZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNF
TUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAppbmRleCBhMDI1MDEx
ZjcwY2M2NTlmNWZhYTA4YTdkNmNiYjNmZjU2ZWU2YTM4Li5kODM5Y2FjYjI4YmE1NjVkYzk1YTgz
OTNiZmNjYWI5MzhkYWRjYzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0UHJpdmF0ZS5oCkBAIC04MywxMSArODMsOCBAQCBXS19FWFBPUlQgdm9pZCBX
S0NvbnRleHRXYXJtSW5pdGlhbFByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogLy8gQXQg
c29tZSBwb2ludCBpdCBzaG91bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4
dFNldFVzZXNOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1XS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tf
RVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVm
KTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVG
b3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0eXBlZGVmIHZv
aWQgKCpXS0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1JlZiBtZXNzYWdl
TmFtZSk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9u
KFdLQ29udGV4dEludmFsaWRNZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VGdW5jdGlvbik7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNp
dGVEYXRhU3RvcmVSZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmNwcAppbmRleCA5ZGRhNTkxYzk1MTg5YWIwYzI1YWM1NTQ2NmMwYTJi
ZmMzOTI3ZWJjLi5iNzhhOTFlMzNlZGY5ZTI5NGJiNGQ4ZDRjMGRkZjU3Y2U1MDE2YjdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVS
ZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5jcHAKQEAgLTY5LDYgKzY5LDExIEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1dl
YnNpdGVEYXRhU3RvcmVDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihXS1dlYnNpdGVEYXRhU3RvCiAg
ICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRl
KCpXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKSwgc2Vzc2lvbklEKS5sZWFrUmVmKCkpOwog
fQogCit2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpCit7CisgICAgV2ViS2l0Ojp0b0ltcGwoZGF0YVN0
b3JlKS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKK30KKwogdm9pZCBXS1dlYnNpdGVEYXRh
U3RvcmVSZW1vdmVJVFBEYXRhRm9yRG9tYWluKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3Rv
cmVSZWYsIFdLU3RyaW5nUmVmIGhvc3QsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9y
ZVJlbW92ZUlUUERhdGFGb3JEb21haW5GdW5jdGlvbiBjYWxsYmFjaykKIHsKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAppbmRleCBlNzdkMDljMTA3ZDFkYTA3
ODNkMDljMDdlMjgwM2QwODcxMjVlNDhiLi5jM2ZhMWJmM2Y5MjQ4YzJmZTQ5YmUxMjQzOTY0NDEx
ZjgzMWQyYTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dl
YnNpdGVEYXRhU3RvcmVSZWYuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1dlYnNpdGVEYXRhU3RvcmVSZWYuaApAQCAtNTAsNiArNTAsOSBAQCBXS19FWFBPUlQgdm9pZCBX
S1dlYnNpdGVEYXRhU3RvcmVTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldFRl
c3RpbmcoVwogCiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENy
ZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogCitXS19FWFBP
UlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0
ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0
b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9y
ZSk7CisKIFdLX0VYUE9SVCBib29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogV0tf
RVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUpOwog
dHlwZWRlZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0VwaGVtZXJhbEZ1bmN0
aW9uKShib29sIGlzRXBoZW1lcmFsLCB2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQppbmRleCBm
ZjMwOTQ5ODZjMjQzZDA0NzRmMjUyZDM5MWU2Y2NiNzRmMWZlZDViLi5hODAyYjk3YzdiNDE2Zjk2
YmJhNTRmZWJlN2ExZGRkNDM4M2QwYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQpAQCAtNDA2LDI4ICs0MDYsNiBAQCBzdGF0
aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1h
cDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJTdXBwb3J0ZWRQbHVn
aW5zKCk7CiB9CiAKLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCi17Ci0gICAgX3By
b2Nlc3NQb29sLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCi0tICh2b2lkKV9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKLXsKLSAgICBfcHJvY2Vzc1Bvb2wt
PnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0K
LQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQ
cm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFr
ZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgIH0pOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUK
LXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQot
CiAtICh2b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29ya2VycwogewogICAgIF9wcm9jZXNzUG9vbC0+
dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKQEAgLTQzNSwxMiArNDEzLDEyIEBAIHN0YXRpYyBO
U0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0
cmluZywgSGFzaE1hcDxTCiAKIC0gKHZvaWQpX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3M6KEJPT0wpdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcwogewotICAgIF9wcm9j
ZXNzUG9vbC0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MpOwogfQogCiAtIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCiB7Ci0gICAgcmV0
dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CisgICAgcmV0dXJu
IDA7CiB9CiAKIC0gKHBpZF90KV9wcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcgpAQCAtNTYwLDE4
ICs1MzgsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25h
cnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0
Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLS0gKHZvaWQp
X3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAotewotICAgIF9wcm9j
ZXNzUG9vbC0+c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKLX0KLQotLSAo
dm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFs
bG93cwotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBfcHJvY2Vzc1Bvb2wtPnNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlm
Ci19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogLSAoaWQgPF9XS0dlb2xvY2F0aW9uQ29y
ZUxvY2F0aW9uUHJvdmlkZXI+KV9jb3JlTG9jYXRpb25Qcm92aWRlcgogewpAQCAtNjA0LDExICs1
NzAsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnko
Y29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIH0pOwogfQogCi0tIChCT09MKV9u
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxl
bWVudAotewotICAgIHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nKGVudGl0bGVtZW50KTsKLX0KLQogLSAodm9pZClfY2xlYXJQZXJtYW5l
bnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilw
cm90ZWN0aW9uU3BhY2UKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyUGVybWFuZW50Q3JlZGVu
dGlhbHNGb3JQcm90ZWN0aW9uU3BhY2UoV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rp
b25TcGFjZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAppbmRleCA2NzY5MDE1ZTA4NTU4OTk0Y2Q4YTIxOWEx
N2E5YzY4YWRlM2I1MzgzLi5iZjQ4Y2ExYzUyYzIyMTk3MzY4Yjg4MjkwNTA3MjIzZjBmMjA2Y2Qx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNz
UG9vbFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQ
cm9jZXNzUG9vbFByaXZhdGUuaApAQCAtODcsMTAgKzg3LDYgQEAKIC0gKF9XS0Rvd25sb2FkICop
X3Jlc3VtZURvd25sb2FkRnJvbURhdGE6KE5TRGF0YSAqKXJlc3VtZURhdGEgd2Vic2l0ZURhdGFT
dG9yZTooV0tXZWJzaXRlRGF0YVN0b3JlICopZGF0YVN0b3JlICBwYXRoOihOU1N0cmluZyAqKXBh
dGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4g
U2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoaWxlIG5vIHdlYiBjb250ZW50IHByb2Nlc3NlcyBhcmUg
cnVubmluZy4KLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNz
UHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElf
QVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClf
c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9p
ZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCks
IGlvcygxMi4wKSk7CiAKIC8vIFRlc3Qgb25seS4KQEAgLTEyMiwxMyArMTE4LDEwIEBACiAtICh2
b2lkKV9wcmVjb25uZWN0VG9TZXJ2ZXI6KE5TVVJMICopc2VydmVyVVJMIFdLX0FQSV9ERVBSRUNB
VEVEX1dJVEhfUkVQTEFDRU1FTlQoIldLV2ViVmlldy5fcHJlY29ubmVjdFRvU2VydmVyIiwgbWFj
b3MoMTAuMTMuNCwgV0tfTUFDX1RCQSksIGlvcygxMS4zLCBXS19JT1NfVEJBKSk7CiAKIC8vIFRl
c3Qgb25seS4KLS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdv
cmtlcjooQk9PTClhbGxvd3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDEx
LjMpKTsKIC0gKHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3Rp
bmc6KHBpZF90KXBpZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PE5TU3RyaW5n
ICo+ICopKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCks
IGlvcygxMi4yKSk7Ci0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVz
dGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0
LjQpLCBpb3MoMTIuMikpOwogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclBy
b3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBnZXR0ZXI9X2lzQ29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQsIHNldHRl
cj1fc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQ6KSBCT09MIF9jb29raWVTdG9y
YWdlUGFydGl0aW9uaW5nRW5hYmxlZCBXS19BUElfREVQUkVDQVRFRCgiUGFydGl0aW9uZWQgY29v
a2llcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCIsIG1hY29zKDEwLjEyLjMsIDEwLjE0LjQpLCBp
b3MoMTAuMywgMTIuMikpOwotLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9P
TCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwog
CiAvLyBUZXN0IG9ubHkuCiAtICh2b2lkKV9zZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRl
c3RpbmdXaXRoRmlyc3RQYXJ0eTooTlNVUkwgKilmaXJzdFBhcnR5VVJMIHRoaXJkUGFydHk6KE5T
VVJMICopdGhpcmRQYXJ0eVVSTCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbjooQk9PTClzaG91
bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSlj
b21wbGV0aW9uSGFuZGxlciAgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9z
KFdLX0lPU19UQkEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCmluZGV4IDI5OGQ5Y2VjOWU4NGQ4YTUxMjIwNjVj
Yzk5MjMzZWY0ZjBiOTUzODkuLmFlOWM0NTA3NzkwODZjYzFlMzExNGNlMTNmMmQyMTg4ZTc4N2Yx
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2Vic2l0ZURhdGFTdG9yZS5tbQpAQCAtNjE3LDYgKzYxNywxMSBAQCBzdGF0aWMgVmVjdG9yPFdl
YktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRh
dGFSZWNvcgogICAgIH0pOwogfQogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVt
ZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAoreworICAgIHJldHVybiBfd2Vi
c2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoZW50
aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVnYXRlPilfZGVs
ZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdldCgpLmdldCgpOwpAQCAtNjY4LDQgKzY3
MywzMiBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0
ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogI2VuZGlmCiB9CiAKKy0gKHZvaWQpX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfd2Vi
c2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3Rp
bmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0g
eworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworfQorCistICh2b2lkKV9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKK3sKKyAgICBfd2Vic2l0ZURh
dGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGlu
ZygpOworCit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQoreworICAg
IF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKK30KKwor
LSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kCit7Cisg
ICAgX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZChiYWNrZ3JvdW5kKTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgK
aW5kZXggOTkzMjAxMDQ2YjU1MWMzZjI4ZGYyZGMwYTAzNDZkN2JjNzlhYzVmNC4uNDIxNWRiNzQ3
YmEzMjJmYWViOGE0N2UxNjc1YTY1ODM4MTQ3MjYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0
ZS5oCkBAIC04NSw5ICs4NSwxNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dL
V2Vic2l0ZURhdGFTdG9yZUZldGNoT3B0aW9ucykgewogCiAtICh2b2lkKV9yZW5hbWVPcmlnaW46
KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKiluZXdOYW1lIGZvckRhdGFPZlR5cGVzOihOU1Nl
dDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9p
ZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9wZXJ0eSAobnVsbGFi
bGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2Rl
bGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZv
aWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVu
ZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZB
SUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc3lu
dGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBlbmQKIAogTlNfQVNTVU1F
X05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDFlZTczZWJjMGVhMDM2Zjg2YjNmZTk0
NDE0OTA3MmU2YWM0ZGM3NjcuLjc3MDE0OTk4MzZlZTQ0ZjlhY2YwZTI3MGQ3MGM5NWQxNmJlNjc4
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdENvb2tpZU1hbmFnZXIuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlci5oIgogCisjaW5jbHVkZSAiTmV0d29y
a1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIlNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5
cGUuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJL
aXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIgpAQCAtNTYsNiArNTcsMTIgQEAgZW51bSB7CiB9Owog
CiBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKKyAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHkmIGNvb2tpZU1hbmFnZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGRh
dGFNYW5hZ2VyKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERh
dGFTdG9yZShkYXRhTWFuYWdlcikubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7Cisg
ICAgfQorCiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVChkYXRhTWFuYWdlcik7CkBAIC02NCw4ICs3MSw3IEBAIHN0cnVjdCBfV2ViS2l0
Q29va2llTWFuYWdlclByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0
ZSgpCiAgICAgewotICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2ll
T2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CisgICAgICAgIGNvb2tpZU1h
bmFnZXIoKS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsK
ICAgICB9CiAKICAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW5hZ2VyOwpAQCAt
MTM5LDExICsxNDUsOSBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRDb29raWVNYW5hZ2Vy
Q3JlYXRlKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbgogewogICAgIFdlYktpdENv
b2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9lbWl0KG1h
bmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9CisgICAgbWFu
YWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFu
YWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2lnbmFsX2Vt
aXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1h
bmFnZXI7CiB9CiAKQEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsCiAg
ICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vz
c1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIG1hbmFnZXItPnByaXYtPmNv
b2tpZU1hbmFnZXIoKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmlu
Zzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUo
c3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE5Miw4ICsxOTUsNyBAQCB2b2lkIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2Vy
LCBXZWJLaQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VS
KG1hbmFnZXIpKTsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkt
PnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRv
SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgbWFuYWdlci0+
cHJpdi0+Y29va2llTWFuYWdlcigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+
cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgp
IHsgfSk7CiB9CiAKIC8qKgpAQCAtMjI0LDcgKzIyNiw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIEdD
YW5jCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CisgICAgbWFuYWdlci0+cHJpdi0+
Y29va2llTWFuYWdlcigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSBwb2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQo
KSwgdG9XZWJLaXRDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7CiB9CkBAIC0y
NjksMTEgKzI3MSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUoV2Vi
S2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3JldHVybl9pZl9m
YWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFz
a19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAg
Ly8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFi
YXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0
aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3Qg
YXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bv
b2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1
cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RG
TW92ZSh0YXNrKV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENv
b2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tp
ZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9i
b29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIwLDExICszMTgsNyBA
QCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRDb29raWVNYW5h
Z2VyKiBtYW5hZ2VyLCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAog
ICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBj
YW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSBy
ZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdh
cmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVz
dCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9v
bHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2sp
XShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIG1hbmFnZXIt
PnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25J
RCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0
YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAg
R0xpc3QqIGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUg
OiBjb29raWVzKQogICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29r
aWVzTGlzdCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzcyLDcgQEAgdm9p
ZCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2Vy
KiBtYW5hZ2VyLCBTb3VwQ29va2kKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAg
ICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2Fu
Y2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVh
ZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJk
bGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3Qg
dXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xz
ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAg
IG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5kZWxldGVDb29raWUobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUo
dGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJV
RSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDg5YmU1NmFkNzFkNzE1NjkxMmEyNjkxNTMw
NTdkZjUyN2NkZDQ0NjAuLmI3ZWQ4ODJiM2FlNWRlNWRhNzU4Mjc5OGQxYjY0MmMxYWRiYTI5NjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdl
YkNvbnRleHQuY3BwCkBAIC00MDQsNyArNDA0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29u
dGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgcHJpdi0+d2Vic2l0ZURh
dGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcoImxv
Y2FsLXN0b3JhZ2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEo
KSwgbnVsbHB0cikpOwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlKGNvbmZpZ3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRQcmltYXJ5
RGF0YVN0b3JlKHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJz
aXRlRGF0YU1hbmFnZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1l
c3NhZ2VIYW5kbGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKICAg
ICAgICAgLy8gU2luayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRyPFdlYktpdFVz
ZXJNZXNzYWdlPiB1c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRlKFdURk1vdmUo
bWVzc2FnZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5j
cHAKaW5kZXggNGFiNDdmZmY1OTExZWVjMzdlNTZiYzViYmIzMjllYmFlYTdkMzg2NS4uMzAwNmY0
ZmFlNmM0M2MyNmJmNDA4MjJiNmRlODY4ZWYyZTAyY2ZiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5j
cHAKQEAgLTEzOTIsOCArMTM5Miw4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNp
bmdsZUNvb2tpZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uCiAKICAgICBj
b29raWUuaHR0cE9ubHkgPSAqaHR0cE9ubHk7CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkq
IGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKHBhZ2UtPndlYnNpdGVE
YXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2NhbGxiYWNrXSgpIHsKKyAgICBX
ZWJDb29raWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0YVN0
b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdl
ci5zZXRDb29raWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29r
aWUgfSwgW2NhbGxiYWNrXSgpIHsKICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAg
ICAgfSk7CiB9CkBAIC0xNDA5LDggKzE0MDksOCBAQCBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKAog
CiAgICAgU3RyaW5nIGhvc3QgPSBhY3RpdmVVUkwuaG9zdCgpLnRvU3RyaW5nKCk7CiAKLSAgICBX
ZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBw
bGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxl
dGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQo
KSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOworICAg
IFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlciA9IHBhZ2UtPndlYnNpdGVEYXRh
U3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5h
Z2VyLmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNl
c3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoaG9zdCkg
fSk7CiAKICAgICByZXR1cm4geyB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
dXhpbGlhcnlQcm9jZXNzUHJveHkuaAppbmRleCA0MWMwYTBmYmY1MDZlZmExNDA4YmNlZjlhZjhh
OTBiODVhMWFkMDhhLi40ZjM5OGI1MzBmNjA4NTc1Yzk2N2I4M2M3NGZhMmY0MzI4ZjZjZTNiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaApA
QCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+QXV4aWxpYXJ5UHJvY2Vzc1By
b3h5KCk7CiAKICAgICB2b2lkIGNvbm5lY3QoKTsKLSAgICB2b2lkIHRlcm1pbmF0ZSgpOworICAg
IHZpcnR1YWwgdm9pZCB0ZXJtaW5hdGUoKTsKIAogICAgIHZpcnR1YWwgUHJvY2Vzc1Rocm90dGxl
ciYgdGhyb3R0bGVyKCkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oCmlu
ZGV4IGRiZTQ0Zjk1OTQxMDUxMTIxNTEyOGQyOWQyMTRlZWUwNzRhYWY4NGMuLjRjODQ1YTBlYzcy
NTY1OWNmZTc5Y2VhMzVkM2NiYTk2NjgzNDYxNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudC5oCkBAIC00MSwxMSArNDEsMTEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTsKIAogY2xhc3MgTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50IGZpbmFsIDogcHVibGljIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50IHsKLXByaXZhdGU6CitwdWJsaWM6CiAgICAgdm9pZCBzdGFydExvYWRpbmcoTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkmLCBMZWdhY3lDdXN0b21Qcm90b2NvbElELCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBmaW5hbDsKICAgICB2b2lkIHN0b3BMb2Fk
aW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9j
b2xJRCkgZmluYWw7CiAgICAgdm9pZCBpbnZhbGlkYXRlKExlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5JikgZmluYWw7Ci0KK3ByaXZhdGU6CiAgICAgSGFzaE1hcDxMZWdhY3lDdXN0b21Q
cm90b2NvbElELCBSZXRhaW5QdHI8V0tDdXN0b21Qcm90b2NvbExvYWRlcj4+IG1fbG9hZGVyTWFw
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJv
Y2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nl
c3NQb29sQ29jb2EubW0KaW5kZXggNzZkN2E2NDA0MWEyOTFkNWYyOTczNTE3NmUzMWVhNzBmNWVk
NTU2Yy4uMTM2NzBlMmQ4MGIwMTg0NzAzNWMxOWRmODkyMTFmYzc1NTU2YzY2OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1t
CkBAIC0xMzQsOCArMTM0LDkgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5l
ZWRlZCgpCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0
YXRlKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25FbmFi
bGVkKCkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtl
bmFibGVkID0gcHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpXSAoV2Vic2l0ZURhdGFTdG9yZSYg
ZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNldFByb2Nl
c3NTdXBwcmVzc2lvbkVuYWJsZWQoZW5hYmxlZCk7CisgICAgfSk7CiAKICNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKICAgICBpZiAoIW1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRG
b3JQYWdlQ291bnRlci52YWx1ZSgpKQpAQCAtMTY2LDggKzE2Nyw2IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiAgICAgaWYgKCFbW05TVXNlckRlZmF1bHRzIHN0
YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiV2ViS2l0U3VwcHJlc3NNZW1vcnlQcmVz
c3VyZUhhbmRsZXIiXSkKICAgICAgICAgaW5zdGFsbE1lbW9yeVByZXNzdXJlSGFuZGxlcigpOwog
Ci0gICAgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8TGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKTsKLQogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBpZiAoIV9NR0NhY2hlVmFsaWQo
KSkgewogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJ
U1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBeewpAQCAtNDkzLDIyICs0OTIsNiBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhO
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYQogCiAgICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRz
ID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKIAotICAgIHsKLSAgICAg
ICAgYm9vbCBpc1NhZmFyaSA9IGZhbHNlOwotICAgICAgICBib29sIGlzTWluaUJyb3dzZXIgPSBm
YWxzZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBpc1NhZmFyaSA9IFdlYkNv
cmU6OklPU0FwcGxpY2F0aW9uOjppc01vYmlsZVNhZmFyaSgpOwotICAgICAgICBpc01pbmlCcm93
c2VyID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTWluaUJyb3dzZXIoKTsKLSNlbGlmIFBM
QVRGT1JNKE1BQykKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6
aXNTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6Ok1hY0FwcGxpY2F0
aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGlzU2FmYXJpIHx8IGlz
TWluaUJyb3dzZXIpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBQcm94eSA9IFVSTChVUkwoKSwg
W2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcgKilXZWJLaXQySFRUUFByb3h5RGVmYXVs
dHNLZXldKTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBzUHJveHkgPSBVUkwoVVJMKCksIFtkZWZh
dWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBTUHJveHlEZWZhdWx0c0tl
eV0pOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4
dCA9IGFkb3B0Q0YoX0NGTmV0d29ya0NvcHlBVFNDb250ZXh0KCkpOwogCiAgICAgcGFyYW1ldGVy
cy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciA9IFtkZWZhdWx0cyBib29sRm9y
S2V5OldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyRGVmYXVsdHNLZXldOwpAQCAt
NTIyLDEyICs1MDUsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVO
ZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYQogICAgIE5TTnVtYmVyICpk
YXRhYmFzZUVuYWJsZWRWYWx1ZSA9IFtkZWZhdWx0cyBvYmplY3RGb3JLZXk6W05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5hbERlYnVnJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6aXNJ
VFBEYXRhYmFzZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07CiAgICAgaWYg
KGRhdGFiYXNlRW5hYmxlZFZhbHVlKQogICAgICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlU
UERhdGFiYXNlID0gZGF0YWJhc2VFbmFibGVkVmFsdWUuYm9vbFZhbHVlOwotICAgIGVsc2UKLSAg
ICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IG1fZGVmYXVsdFBhZ2VH
cm91cC0+cHJlZmVyZW5jZXMoKS5pc0lUUERhdGFiYXNlRW5hYmxlZCgpOwogCiAgICAgcGFyYW1l
dGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUgPSBbZGVmYXVsdHMgYm9vbEZv
cktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4cGVyaW1lbnRhbCVAIiwgV2ViUHJl
ZmVyZW5jZXNLZXk6OmFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWRLZXkoKS5jcmVh
dGVDRlN0cmluZygpLmdldCgpXV07Ci0KLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dl
YnNpdGVUcmFja2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2lu
Z1Blcm1pc3Npb24oKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1JbnZhbGlk
YXRlQ29udGV4dCgpCkBAIC02MDYsMTEgKzU4NSw2IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6OnBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSBjb25zdAogICAgIHJldHVybiAhbV91c2VyT2JzZXJ2
YWJsZVBhZ2VDb3VudGVyLnZhbHVlKCkgJiYgIW1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRG
b3JQYWdlQ291bnRlci52YWx1ZSgpOwogfQogCi1ib29sIFdlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmIGVudGl0bGVtZW50
KQotewotICAgIHJldHVybiBXVEY6Omhhc0VudGl0bGVtZW50KGVuc3VyZU5ldHdvcmtQcm9jZXNz
KCkuY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVudGl0bGVtZW50LnV0ZjgoKS5kYXRh
KCkpOwotfQotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFM
WVNUKQogZmxvYXQgV2ViUHJvY2Vzc1Bvb2w6OmRpc3BsYXlCcmlnaHRuZXNzKCkKIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcApp
bmRleCBjNWRlNGU3ZDBmNTkxOTRmNDNhMDIzYjA4OWUzNzJjNThjZjhlZTA2Li5mN2NmZjg1MmYw
YmE2ZDAxNTUxMTY1ZGQ4YTlmN2Q1NzYzYjAwN2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCkBAIC03NSw4ICs3NSw4IEBA
IHZvaWQgRG93bmxvYWRQcm94eTo6Y2FuY2VsKCkKICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJv
Y2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9k
b3dubG9hZElEKSwgMCk7CisgICAgaWYgKG1fZGF0YVN0b3JlKQorICAgICAgICBtX2RhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2Vs
RG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6aW52
YWxpZGF0ZSgpCkBAIC0xMDMsMTUgKzEwMywxMyBAQCBXZWJQYWdlUHJveHkqIERvd25sb2FkUHJv
eHk6Om9yaWdpbmF0aW5nUGFnZSgpIGNvbnN0CiAjaWYgUExBVEZPUk0oQ09DT0EpCiB2b2lkIERv
d25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVzcyhjb25zdCBVUkwmIFVSTCkKIHsKLSAgICBpZiAo
IW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOwotICAg
ICAgICBib29sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlKFVSTC5maWxlU3lzdGVtUGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpS
ZWFkV3JpdGUsIGhhbmRsZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hF
eHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsKLSAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9ncmVz
cyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFuZGxlKSwgMCk7Ci0gICAgfQorICAgIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSBoYW5kbGU7CisgICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOworICAgIEFTU0VSVF9VTlVT
RUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsKKyAg
ICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSks
IDApOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQogCkBAIC0xMzEsMTEgKzEyOSwxMCBA
QCB2b2lkIERvd25sb2FkUHJveHk6OmRpZFN0YXJ0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgU3RyaW5nJiBzdWdnZQogCiB2b2lkIERvd25sb2FkUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmIGF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlLCB1aW50NjRfdCBjaGFsbGVuZ2VJRCkKIHsKLSAgICBpZiAoIW1f
cHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFtX3Byb2Nlc3NQb29sIHx8ICFtX2RhdGFTdG9yZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0g
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eTo6Y3JlYXRlKFdURk1vdmUoYXV0aGVudGljYXRp
b25DaGFsbGVuZ2UpLCBjaGFsbGVuZ2VJRCwgbWFrZVJlZigqbV9wcm9jZXNzUG9vbC0+bmV0d29y
a2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkpLCBudWxscHRyKTsKLQorICAgIGF1dG8gYXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk6OmNyZWF0
ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgY2hhbGxlbmdlSUQsIG1ha2VSZWYo
Km1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKSksIG51bGxwdHIpOwog
ICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKCp0aGlzLCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmdldCgpKTsK
IH0KIApAQCAtMTQ2LDE1ICsxNDMsMTAgQEAgdm9pZCBEb3dubG9hZFByb3h5Ojp3aWxsU2VuZFJl
cXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYgcHJvcG9zZWRSZXF1ZXN0LCBjb25zdCBSZXMKIAogICAg
IG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkud2lsbFNlbmRSZXF1ZXN0KCp0aGlzLCBX
VEZNb3ZlKHByb3Bvc2VkUmVxdWVzdCksIHJlZGlyZWN0UmVzcG9uc2UsIFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKFJlc291cmNlUmVxdWVzdCYmIG5ld1JlcXVlc3QpIHsK
ICAgICAgICAgbV9yZWRpcmVjdENoYWluLmFwcGVuZChuZXdSZXF1ZXN0LnVybCgpKTsKLQotICAg
ICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fcHJvY2Vzc1Bvb2wpCisgICAgICAgIGlmICghcHJv
dGVjdGVkVGhpcy0+bV9kYXRhU3RvcmUpCiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
YXV0byogbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb3RlY3RlZFRoaXMtPm1fcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3NQcm94eSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVXaWxsU2VuZFJlcXVlc3QocHJvdGVjdGVk
VGhpcy0+bV9kb3dubG9hZElELCBuZXdSZXF1ZXN0KSwgMCk7CisgICAgICAgIGF1dG8mIG5ldHdv
cmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRUaGlzLT5tX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nl
c3MoKTsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3NQcm94eS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6Q29udGludWVXaWxsU2VuZFJlcXVlc3QocHJvdGVjdGVkVGhpcy0+bV9kb3dubG9h
ZElELCBuZXdSZXF1ZXN0KSwgMCk7CiAgICAgfSk7CiB9CiAKQEAgLTE3OSwxNiArMTcxLDE0IEBA
IHZvaWQgRG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5h
bWVBc3luYyhEb3dubG9hZElEIGRvd25sCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNp
ZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25z
ZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBkb3dubG9hZElEID0gZG93bmxvYWRJ
RF0gKEFsbG93T3ZlcndyaXRlIGFsbG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsK
KyAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0
aFN1Z2dlc3RlZEZpbGVuYW1lKCp0aGlzLCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVT
dWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGRvd25sb2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3
cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlz
TnVsbCgpKQogICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGRlc3Rp
bmF0aW9uLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNp
b25IYW5kbGUpOwogCi0gICAgICAgIGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICAgICAgaWYgKCFt
X2RhdGFTdG9yZSkKICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51
ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9u
LCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0
ZTo6WWVzKSwgMCk7CisgICAgICAgIG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERl
c3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxl
LCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CiAgICAgfSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmNwcAppbmRleCA3NmEwNzE1N2I1OTFhYWNlNTBmMTVkMTUyNWRiY2ZiOGM2YTRi
YmM4Li5kNzRhOGZhNmM2NGM4ODYzNWY5ZWI3NWNhNzNlNzBmZDk0NmNhMDJjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAu
Y3BwCkBAIC00NCw3ICs0NCw3IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogRG93bmxvYWRQcm94
eU1hcDo6RG93bmxvYWRQcm94eU1hcChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQotICAg
IDogbV9wcm9jZXNzKG1ha2VXZWFrUHRyKHByb2Nlc3MpKQorICAgIDogbV9wcm9jZXNzKHByb2Nl
c3MpCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLCBtX3Nob3VsZFRha2VBc3NlcnRpb24oV1RG
Ojpwcm9jZXNzSGFzRW50aXRsZW1lbnQoImNvbS5hcHBsZS5tdWx0aXRhc2tpbmcuc3lzdGVtYXBw
YXNzZXJ0aW9ucyIpKQogI2VuZGlmCkBAIC03MCwxNCArNzAsMTIgQEAgdm9pZCBEb3dubG9hZFBy
b3h5TWFwOjpwbGF0Zm9ybURlc3Ryb3koKQogCiB2b2lkIERvd25sb2FkUHJveHlNYXA6OmFwcGxp
Y2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCkKIHsKLSAgICBpZiAobV9wcm9jZXNzKQotICAgICAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbkRp
ZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCksIDApOwogfQogCiB2
b2lkIERvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpCiB7
Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCksIDApOworICAg
IG1fcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25XaWxs
RW50ZXJGb3JlZ3JvdW5kKCksIDApOwogfQogCiBEb3dubG9hZFByb3h5JiBEb3dubG9hZFByb3h5
TWFwOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2Vi
UHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdl
UHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKQEAgLTkyLDEzICs5MCwxMiBAQCBEb3dubG9hZFByb3h5
JiBEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUm
IGRhdGFTdG9yZQogICAgICAgICBtX2Rvd25sb2FkVUlBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFBy
b2Nlc3NBc3NlcnRpb24+KGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIldlYktpdCBkb3dubG9hZHMi
X3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAogICAgICAg
ICBBU1NFUlQoIW1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uKTsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9wcm9jZXNzKTsKLSAgICAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRp
b24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy0+cHJvY2Vzc0lkZW50
aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJv
dW5kZWROZXR3b3JraW5nKTsKKyAgICAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24g
PSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy5wcm9jZXNzSWRlbnRpZmll
cigpLCAiV2ViS2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVuYm91bmRl
ZE5ldHdvcmtpbmcpOwogCiAgICAgICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAi
VUlQcm9jZXNzIHRvb2sgJ1dlYktpdCBkb3dubG9hZHMnIGFzc2VydGlvbnMgZm9yIFVJUHJvY2Vz
cyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKICAgICB9CiAKLSAgICBtX3Byb2Nlc3MtPmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3dubG9hZFByb3h5
LmdldCgpKTsKKyAgICBtX3Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3du
bG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkUHJveHktPmRvd25sb2Fk
SUQoKS5kb3dubG9hZElEKCksIGRvd25sb2FkUHJveHkuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGRv
d25sb2FkUHJveHk7CiB9CkBAIC0xMDksMTIgKzEwNiw5IEBAIHZvaWQgRG93bmxvYWRQcm94eU1h
cDo6ZG93bmxvYWRGaW5pc2hlZChEb3dubG9hZFByb3h5JiBkb3dubG9hZFByb3h5KQogCiAgICAg
UkVMRUFTRV9MT0coTG9hZGluZywgIlJlbW92aW5nIGRvd25sb2FkICUiIFBSSXU2NCAiIGZyb20g
VUlQcm9jZXNzIERvd25sb2FkUHJveHlNYXAiLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CiAK
LSAgICAvLyBUaGUgRG93bmxvYWRQcm94eSBtYXkgYmUgaG9sZGluZyB0aGUgbGFzdCByZWZlcmVu
Y2UgdG8gdGhlIHByb2Nlc3MgcG9vbC4KLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0g
bWFrZVJlZlB0cihtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkpOwotCiAgICAgQVNTRVJUKG1fZG93
bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsKIAotICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKKyAgICBtX3Byb2Nlc3MucmVtb3ZlTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKICAgICBkb3dubG9hZFByb3h5LmludmFsaWRhdGUo
KTsKICAgICBtX2Rvd25sb2Fkcy5yZW1vdmUoZG93bmxvYWRJRCk7CiAKQEAgLTEzMywxNSArMTI3
LDEzIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6aW52YWxpZGF0ZSgpCiAgICAgZm9yIChjb25z
dCBhdXRvJiBkb3dubG9hZCA6IG1fZG93bmxvYWRzLnZhbHVlcygpKSB7CiAgICAgICAgIGRvd25s
b2FkLT5wcm9jZXNzRGlkQ2xvc2UoKTsKICAgICAgICAgZG93bmxvYWQtPmludmFsaWRhdGUoKTsK
LSAgICAgICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25s
b2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWQtPmRvd25sb2FkSUQoKS5k
b3dubG9hZElEKCkpOworICAgICAgICBtX3Byb2Nlc3MucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkLT5k
b3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKICAgICB9CiAKICAgICBtX2Rvd25sb2Fkcy5jbGVh
cigpOwogICAgIG1fZG93bmxvYWRVSUFzc2VydGlvbiA9IG51bGxwdHI7CiAgICAgbV9kb3dubG9h
ZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBudWxscHRyOwogICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NT
dXNwZW5zaW9uLCAiVUlQcm9jZXNzIERvd25sb2FkUHJveHlNYXAgaW52YWxpZGF0ZWQgLSBSZWxl
YXNlZCAnV2ViS2l0IGRvd25sb2FkcycgYXNzZXJ0aW9ucyBmb3IgVUlQcm9jZXNzIGFuZCBOZXR3
b3JrUHJvY2VzcyIpOwotCi0gICAgbV9wcm9jZXNzID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRQcm94eU1hcC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkUHJveHlNYXAuaAppbmRleCAzYmUyMDc5YTBmMmM0YjUzNzA2MmNlMTMwMGUxY2Q1
ZGE0NDRmZmJlLi40ZmEwMDFiZDdmYWUxY2VkMDI0ZDJiOTFmMjAxNzBmZjk5NDUyOGJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1h
cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
TWFwLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtQ3JlYXRl
KCk7CiAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKIAotICAgIFdlYWtQdHI8TmV0d29ya1By
b2Nlc3NQcm94eT4gbV9wcm9jZXNzOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG1fcHJvY2Vz
czsKICAgICBIYXNoTWFwPERvd25sb2FkSUQsIFJlZlB0cjxEb3dubG9hZFByb3h5Pj4gbV9kb3du
bG9hZHM7CiAKICAgICBib29sIG1fc2hvdWxkVGFrZUFzc2VydGlvbiB7IGZhbHNlIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9M
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQ
cm94eS5jcHAKaW5kZXggOGMyM2JiZThjMDZhMTU5OWNiOWI5MTZhMGIzMmFmYjM3NzgzZjMwNS4u
ZDZjMzMyM2RkOTNlNjlmNTZhZGY2YmUwZDJhMWIxNGYwODIyNDUxMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNw
cApAQCAtNDQsMTcgKzQ0LDE3IEBAIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp+
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKQogCiB2b2lkIExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5OjpzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBj
dXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
CiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50KCkuc3RhcnRMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCBy
ZXF1ZXN0KTsKKyAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkuY3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50KCkuc3RhcnRMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsK
IH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RvcExvYWRpbmco
TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElEKQogewotICAgIG1fbmV0d29y
a1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgp
LnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKKyAgICBtX25ldHdvcmtQcm9j
ZXNzUHJveHkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RvcExvYWRpbmcoKnRoaXMs
IGN1c3RvbVByb3RvY29sSUQpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vz
c1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5pbnZhbGlkYXRlKCp0aGlzKTsK
KyAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCku
aW52YWxpZGF0ZSgqdGhpcyk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHk6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3QoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0
b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHku
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcAppbmRleCBjMWY0NzA4YjgxY2ZhNTNhYjEyMmMyOTQ0Njc1ZTc4MjUxNjcxMjFmLi4xOTIw
YjA1OWIzOGIzOTY2MmFmOTBhNjRkNTU3NjhkNjlhMWU3ZTI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKQEAg
LTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNz
YWdlcy5oIgogI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2Fn
ZXMuaCIKICNlbmRpZgorI2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVz
c2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC00
OCw2ICs0OSw3IEBACiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAj
aW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29u
dGVudFJ1bGVMaXN0LmgiCisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5j
bHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5j
bHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCkBAIC02MCw2ICs2Miw3IEBACiAjaW5jbHVkZSAi
V2Vic2l0ZURhdGFTdG9yZUNsaWVudC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2lu
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2luY2x1ZGUgPHd0
Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIu
aD4KIAogI2lmIEVOQUJMRShTRUNfSVRFTV9TSElNKQpAQCAtNzAsMjAgKzczLDExOCBAQAogI2lu
Y2x1ZGUgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShD
T0NPQSkKKyNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIKKyNl
bmRpZgorCiAjZGVmaW5lIE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JB
U0UoYXNzZXJ0aW9uLCBjb25uZWN0aW9uKCkpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKLU5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNz
UHJveHkoV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJvY2Vz
c1Byb3h5KHByb2Nlc3NQb29sLmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQotICAg
ICwgbV9wcm9jZXNzUG9vbChwcm9jZXNzUG9vbCkKK3N0YXRpYyBIYXNoU2V0PE5ldHdvcmtQcm9j
ZXNzUHJveHkqPiYgbmV0d29ya1Byb2Nlc3Nlc1NldCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PE5l
dHdvcmtQcm9jZXNzUHJveHkqPj4gc2V0OworICAgIHJldHVybiBzZXQ7Cit9CisKK1ZlY3RvcjxS
ZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQ
cm9jZXNzZXMoKQoreworICAgIFZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nl
c3NlczsKKyAgICBwcm9jZXNzZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXR3b3JrUHJvY2Vz
c2VzU2V0KCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIG5ldHdvcmtQcm9jZXNzIDogbmV0d29y
a1Byb2Nlc3Nlc1NldCgpKQorICAgICAgICBwcm9jZXNzZXMudW5jaGVja2VkQXBwZW5kKCpuZXR3
b3JrUHJvY2Vzcyk7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKworUmVmPE5ldHdvcmtQcm9j
ZXNzUHJveHk+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHROZXR3b3JrUHJvY2VzcygpCit7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4g
cHJvY2VzczsKKyAgICBpZiAoIXByb2Nlc3MuZ2V0KCkpCisgICAgICAgIHByb2Nlc3MuZ2V0KCkg
PSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gKnByb2Nlc3MuZ2V0
KCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKCkKK3sKKyAgICBB
dXhpbGlhcnlQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpOworfQorCit2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKQoreworICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBv
cmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhy
ZWFkcy4KKyAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVh
ZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KKyAgICBpZiAoIVJ1bkxvb3A6OmlzTWFp
bigpKSB7CisgICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpc10geworICAgICAg
ICAgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgICAgICB9KTsK
KyAgICB9CisKKyAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJz
OworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1Zl
Y3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJB
c1NlY3VyZSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3Np
bmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGlu
Z3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJp
dHlQb2xpY3koKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwg
PSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNU
b1JlZ2lzdGVyQXNMb2NhbCgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVk
QXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9u
KCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOworICAgIHBhcmFtZXRlcnMuY2FjaGVN
b2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7Cisg
ICAgZm9yIChhdXRvJiBzY2hlbWUgOiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0
b21Qcm90b2NvbEhhbmRsZXJzKCkpCisgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lz
dGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7CisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKyAgICBpZiAoU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9j
ZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURpcmVjdG9y
eS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJl
YWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tp
ZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgY29udGFp
bmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJl
Y3RvcnkoKTsgIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWlu
ZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdl
YlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsgIXBhcmVudEJ1bmRsZURpcmVj
dG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShw
YXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBw
YXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisjZW5kaWYK
KyAgICBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFy
YW1ldGVycyk7CisgICAgcGFyYW1ldGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gZGF0YVN0b3Jl
UGFyYW1ldGVycygpOworICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFs
aXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyksIDApOworfQorCitWZWN0b3I8V2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnM+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRhdGFTdG9yZVBhcmFtZXRl
cnMoKQoreworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1ldGVy
czsKKyAgICBmb3IgKGF1dG8mIHN0b3JlIDogbV93ZWJzaXRlRGF0YVN0b3JlcykKKyAgICAgICAg
cGFyYW1ldGVycy5hcHBlbmQoc3RvcmUucGFyYW1ldGVycygpKTsKKyAgICByZXR1cm4gcGFyYW1l
dGVyczsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3Jv
dW5kUHJpb3JpdHkoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5hbHdh
eXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29s
U2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpCit7CisgICAgZm9yIChhdXRvKiBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBp
ZiAocHJvY2Vzc1Bvb2wtPnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK05ldHdv
cmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoKQorICAgIDogQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5KGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkp
CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKICAgICAsIG1fY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKnRoaXMpCisgICAgLCBtX2N1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4o
KSkKKyNlbHNlCisgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVl
PEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogI2VuZGlmCi0gICAgLCBtX3Ro
cm90dGxlcigqdGhpcywgcHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlv
bigpKQorICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJ
QmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV9jb29raWVNYW5hZ2VyKFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzKSkKIHsKICAgICBjb25uZWN0KCk7CisgICAgc2VuZENy
ZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQo
KS5hZGQodGhpcyk7CiB9CiAKIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1By
b3h5KCkKQEAgLTk4LDYgKzE5OSw3IEBAIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJv
Y2Vzc1Byb3h5KCkKIAogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93
bmxvYWRQcm94eU1hcC0+aW52YWxpZGF0ZSgpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5y
ZW1vdmUodGhpcyk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0
aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMpCkBAIC0x
MDUsMTUgKzIwNywxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
bnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuYwogICAgIGxhdW5jaE9wdGlv
bnMucHJvY2Vzc1R5cGUgPSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOwog
ICAgIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25z
KTsKIAotICAgIGlmIChwcm9jZXNzUG9vbCgpLnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sKCkuc2V0U2hvdWxk
TWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKLSAgICAg
ICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0g
dHJ1ZTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFBy
b2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkTWFrZU5leHRO
ZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgIHByb2Nl
c3NQb29sLT5zZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmcoZmFsc2UpOworICAgICAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KLQotI2lmIFBMQVRG
T1JNKFBMQVlTVEFUSU9OKQotICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1BhdGggPSBtX3Byb2Nl
c3NQb29sLm5ldHdvcmtQcm9jZXNzUGF0aCgpOwotICAgIGxhdW5jaE9wdGlvbnMudXNlcklkID0g
bV9wcm9jZXNzUG9vbC51c2VySWQoKTsKLSNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCkBA
IC0xNjYsMTIgKzI2NSwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnN5bnRoZXNpemVB
cHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQogICAgIH0KIH0KIAotRG93bmxvYWRQcm94
eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0
b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBj
b25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQ
YWdlKQorRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQ
cm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNz
UG9vbCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1l
SW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAg
ICAgaWYgKCFtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9
IG1ha2VVbmlxdWU8RG93bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0dXJuIG1fZG93
bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bv
b2wsIHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJl
dHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBw
cm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7
CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywg
T3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCAoV2Vic2l0ZURhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjM3
LDggKzMzNiw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFz
aGVkKCkKIHsKICAgICBjbGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKLSAgICAvLyBUZWxsIHRoZSBu
ZXR3b3JrIHByb2Nlc3MgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgdGhpcyBuZXR3b3JrIHByb2Nl
c3MgcHJveHkuIFRoaXMgd2lsbCBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgotICAgIG1fcHJvY2Vz
c1Bvb2wubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nl
c3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpjbGVhckNhbGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICszNTcsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbiwgSVBDOjpEZQogICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlv
biwgZGVjb2RlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Byb2Nlc3NQb29sLmRp
c3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKLSAgICAgICAgcmV0dXJuOwotCiAg
ICAgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29k
ZXIpOwogfQogCkBAIC0yNzQsOCArMzcwLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEMKIAog
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewot
ICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmKG1fcHJvY2Vzc1Bvb2wpOwot
CiAgICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFw
LT5pbnZhbGlkYXRlKCk7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdF
UikKQEAgLTMzMSwxMSArNDI1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2kKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nlc3NQb29sLmlz
U2VydmljZVdvcmtlclBhZ2VJRChwYWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShzZXNzaW9uSUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2Up
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6Zm9yTW9zdFZp
c2libGVXZWJQYWdlSWZBbnkoc2Vzc2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywgd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9
IFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVnYWN5VExTXShh
dXRvKiBwYWdlKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTM5MiwxMSArNDgxLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBDOjpDb24KICAg
ICAgICAgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0K
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5wcm9jZXNzU3VwcHJl
c3Npb25FbmFibGVkKCkpCi0gICAgICAgIHNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1
ZSk7Ci0jZW5kaWYKICAgICAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICh4cGNf
Y29ubmVjdGlvbl90IGNvbm5lY3Rpb24gPSB0aGlzLT5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rp
b24oKSkKQEAgLTEyMDUsNyArMTI4OSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0
VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzCiB9CiB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhh
c2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsKLSAgICBwcm9j
ZXNzUG9vbCgpLnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKFdURk1vdmUoZG9tYWlucykp
OworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vz
c1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFj
dGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiB7IGRvbWFpbnMgfSk7CiB9
CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIApAQCAtMTI1Miw0
NSArMTMzNywzMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZsdXNoQ29va2llcyhjb25z
dCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21wbGV0aQogICAgIHNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkZsdXNoQ29va2llcyhzZXNzaW9uSUQpLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6YWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9yZSkKIHsKLSAg
ICBtX3Nlc3Npb25JRHMuYWRkKHN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgbV93ZWJzaXRlRGF0
YVN0b3Jlcy5hZGQoc3RvcmUpOwogCiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAg
IHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3Rv
cmUtPnBhcmFtZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0b3JlLT5zZXNz
aW9uSUQoKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNp
dGVEYXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCk7CisgICAgYXV0byBzZXNzaW9u
SUQgPSBzdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgp
KSB7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0ZVN5bUxpbmtG
b3JGaWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7
CisgICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNvbHZlZEluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgogICAgIH0KIH0KIAotYm9vbCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9zZXNzaW9uSURzLmNvbnRhaW5zKHNlc3Npb25JRCk7Ci19Ci0KLXZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oV2Vic2l0ZURh
dGFTdG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMucmVtb3ZlKHNl
c3Npb25JRCk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5yZW1vdmUod2Vic2l0ZURhdGFTdG9y
ZSk7CiAKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkRlc3Ryb3lTZXNzaW9uIHsgc2Vzc2lvbklEIH0sIDApOworICAgICAg
ICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24geyB3ZWJzaXRl
RGF0YVN0b3JlLnNlc3Npb25JRCgpIH0sIDApOwogfQogCiBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3
b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0
b3JlID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAgICAgICBpZiAo
d2Vic2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBzZXNz
aW9uSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgp
LnB0cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25E
ZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFdlYnNp
dGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CiB9
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3JhZ2VQYXJhbWV0
ZXJzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEzMzcsNyArMTQwOCw3IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5KFdlYlVzZXJDb250ZW50CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29y
a1Byb2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC5lc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVj
dGlvblRvTmV0d29ya1Byb2Nlc3MoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCBz
ZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBXZWJQcm9jZXNzUG9v
bDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlz
LCBSZWdpc3RyYWJsZURvbWFpbiB7cmVnaXN0cmFibGVEb21haW59LCBzZXNzaW9uSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3
b3JrZXJDb250ZXh0Q29ubmVjdGlvbk5vTG9uZ2VyTmVlZGVkKFdlYkNvcmU6OlByb2Nlc3NJZGVu
dGlmaWVyIGlkZW50aWZpZXIpCkBAIC0xNTAwLDE2ICsxNTcxLDM0IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6cHJlY29ubmVjdFRvKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2ViUGFn
ZVByb3h5SWRlCiAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWNvbm5lY3RU
byhzZXNzaW9uSUQsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQsIHVybCwgdXNlckFnZW50LCBz
dG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiksIDAp
OwogfQogCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNz
ZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxs
UHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNGb3JlZ3JvdW5k
V2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRX
ZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNC
YWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0
ZVByb2Nlc3NBc3NlcnRpb24oKQogewotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0ZvcmVncm91
bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRX
ZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRG
b3JlZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAg
ICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmZvcmVncm91bmRB
Y3Rpdml0eSgiTmV0d29ya2luZyBmb3IgZm9yZWdyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAg
ICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRv
Rm9yZWdyb3VuZCgpLCAwKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IGlmIChwcm9jZXNzUG9vbCgpLmhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlm
IChhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBp
ZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRCYWNrZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0
eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nl
c3NlcyA9IHRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgYmFj
a2dyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvQmFja2dyb3VuZCgpLCAwKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgK
aW5kZXggYTBiNGMxZDg5MzhlMjA1ZWMzNjFkZTVjMTA4MjVkMTgyNzc2NTNiNC4uMWFmZTIyNDM1
ODgxNmRlOTVjNDA1NzkxZTk0MTk2MTNiODZiYWQ5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTUyLDYgKzUy
LDEwIEBAIG5hbWVzcGFjZSBJUEMgewogY2xhc3MgRm9ybURhdGFSZWZlcmVuY2U7CiB9CiAKK25h
bWVzcGFjZSBBUEkgeworY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OworfQorCiBu
YW1lc3BhY2UgUEFMIHsKIGNsYXNzIFNlc3Npb25JRDsKIH0KQEAgLTczLDggKzc3LDggQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERvd25sb2FkUHJveHk7CiBjbGFzcyBEb3dubG9hZFBy
b3h5TWFwOworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5OwogY2xhc3MgV2ViUGFnZVByb3h5
OwotY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQ
cm94eTsKIAogZW51bSBjbGFzcyBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MgOiBib29sOwpA
QCAtODYsOCArOTAsOSBAQCBzdHJ1Y3QgRnJhbWVJbmZvRGF0YTsKIHN0cnVjdCBOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBSZXNvdXJjZUxvYWRJbmZvOwogc3RydWN0
IFdlYnNpdGVEYXRhOworc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOwogCi1jbGFz
cyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94
eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8
TmV0d29ya1Byb2Nlc3NQcm94eT4geworY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94eSBmaW5hbCA6
IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHByaXZhdGUgUHJvY2Vzc1Rocm90dGxlckNs
aWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+LCBwdWJsaWMg
UmVmQ291bnRlZDxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgdXNpbmcgUmVnaXN0cmFibGVEb21haW4gPSBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbjsKQEAgLTEwMiwxMiArMTA3LDE3IEBAIHB1YmxpYzoKICAgICB1c2lu
ZyBEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
bjsKICAgICB1c2luZyBPcGVuZXJEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsK
IAotICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmKTsKKyAg
ICBzdGF0aWMgUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IGRlZmF1bHROZXR3b3JrUHJvY2Vzcygp
OworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gY3JlYXRlKCkgeyByZXR1cm4g
YWRvcHRSZWYoKm5ldyBOZXR3b3JrUHJvY2Vzc1Byb3h5KTsgfQogICAgIH5OZXR3b3JrUHJvY2Vz
c1Byb3h5KCk7CiAKKyAgICBzdGF0aWMgVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4g
YWxsTmV0d29ya1Byb2Nlc3NlcygpOworICAgIAorICAgIHZvaWQgdGVybWluYXRlKCkgZmluYWw7
CisKICAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkm
LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25E
ZWxheWVkUmVwbHkmJik7CiAKLSAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5
KFdlYnNpdGVEYXRhU3RvcmUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpOworICAgIERv
d25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIFdlYlBy
b2Nlc3NQb29sJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJ
bmZvRGF0YSYsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsKIAogICAgIHZvaWQgZmV0
Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4s
IE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChXZWJzaXRlRGF0YSk+JiYpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNz
aW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSBtb2RpZmllZFNpbmNl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMjA2
LDE1ICsyMTYsMTIgQEAgcHVibGljOgogICAgIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigp
IGZpbmFsIHsgcmV0dXJuIG1fdGhyb3R0bGVyOyB9CiAgICAgdm9pZCB1cGRhdGVQcm9jZXNzQXNz
ZXJ0aW9uKCk7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2woKSB7IHJldHVybiBt
X3Byb2Nlc3NQb29sOyB9Ci0KICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIHZv
aWQgZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3h5Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgYWRkU2Vzc2lvbihSZWY8V2Vi
c2l0ZURhdGFTdG9yZT4mJik7Ci0gICAgYm9vbCBoYXNTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKSBj
b25zdDsKLSAgICB2b2lkIHJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQpOworICAgIHZvaWQg
YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CisgICAgdm9pZCByZW1vdmVTZXNzaW9uKFdl
YnNpdGVEYXRhU3RvcmUmKTsKICAgICAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAg
ICB2b2lkIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShjb25zdCBTdHJpbmcmIGluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeSk7CkBAIC0yMjksNiArMjM2LDggQEAgcHVibGljOgogICAgIHZvaWQg
cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsKICAg
ICB2b2lkIHVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJp
bmcmKTsKIAorICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CisgICAgCiAgICAgdm9p
ZCByZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
OwogCiAgICAgdm9pZCByZXNvdXJjZUxvYWREaWRTZW5kUmVxdWVzdChXZWJQYWdlUHJveHlJZGVu
dGlmaWVyLCBSZXNvdXJjZUxvYWRJbmZvJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBP
cHRpb25hbDxJUEM6OkZvcm1EYXRhUmVmZXJlbmNlPiYmKTsKQEAgLTI0OCw3ICsyNTcsMTYgQEAg
cHVibGljOgogICAgIHZvaWQgdXBkYXRlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJCdW5kbGVJZGVudGlm
aWVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBXZWJDb29raWVNYW5hZ2Vy
UHJveHkmIGNvb2tpZU1hbmFnZXIoKSB7IHJldHVybiBtX2Nvb2tpZU1hbmFnZXIuZ2V0KCk7IH0K
KworICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBjdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVybiAqbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQ7IH0KKwogcHJpdmF0ZToKKyAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KCk7CisK
KyAgICB2b2lkIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICBWZWN0
b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IGRhdGFTdG9yZVBhcmFtZXRlcnMoKTsKKwog
ICAgIC8vIEF1eGlsaWFyeVByb2Nlc3NQcm94eQogICAgIEFTQ0lJTGl0ZXJhbCBwcm9jZXNzTmFt
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJOZXR3b3JraW5nIl9zOyB9CiAKQEAgLTI1Niw3ICsy
NzQsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgY29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVj
dGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgcHJvY2Vzc1dpbGxTaHV0RG93bihJUEM6OkNvbm5l
Y3Rpb24mKSBvdmVycmlkZTsKIAotICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAg
ICAgdm9pZCBjbGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246
OkNsaWVudApAQCAtMzEyLDE2ICszMjksMTcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHJvY2Vz
c0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklELCBSZWY8QXV0aGVudGljYXRp
b25DaGFsbGVuZ2VQcm94eT4mJik7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgbV9wcm9jZXNzUG9v
bDsKLQogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJz
aXRlRGF0YSk+PiBtX3BlbmRpbmdGZXRjaFdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hN
YXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRl
V2Vic2l0ZURhdGFDYWxsYmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnNDYWxs
YmFja3M7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RG93bmxvYWRQcm94eU1hcD4gbV9kb3dubG9h
ZFByb3h5TWFwOworCiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikK
ICAgICBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSBtX2N1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5OwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKKwogICAgIFBy
b2Nlc3NUaHJvdHRsZXIgbV90aHJvdHRsZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByb2Nlc3NU
aHJvdHRsZXI6OkJhY2tncm91bmRBY3Rpdml0eT4gbV9hY3Rpdml0eUZvckhvbGRpbmdMb2NrZWRG
aWxlczsKICAgICBQcm9jZXNzVGhyb3R0bGVyOjpBY3Rpdml0eVZhcmlhbnQgbV9hY3Rpdml0eUZy
b21XZWJQcm9jZXNzZXM7CkBAIC0zNDksNyArMzY3LDggQEAgcHJpdmF0ZToKICAgICB9OwogI2Vu
ZGlmCiAKLSAgICBIYXNoU2V0PFBBTDo6U2Vzc2lvbklEPiBtX3Nlc3Npb25JRHM7CisgICAgV2Vh
a0hhc2hTZXQ8V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRlRGF0YVN0b3JlczsKKyAgICBSZWY8
V2ViQ29va2llTWFuYWdlclByb3h5PiBtX2Nvb2tpZU1hbmFnZXI7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KaW5kZXggYjhkYWVkZjdiZWJhMWNkODFm
NmU1MjQ0OTYwMzEwZjEzMzEwYzExZS4uODJjMTBlNDFkNTYyNWRiYWFkZjkxM2I5NDgwNDQ3Yzcw
Y2MxOWQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAgLTUxLDggKzUxLDEwIEBAIGJvb2wg
TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCh4cGNf
b2JqZWN0X3QgZXZlbnQpIGNvCiAgICAgaWYgKG1lc3NhZ2VOYW1lLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2Vz
RGF0YWJhc2VYUENDb25zdGFudHM6OnhwY0xhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2lu
dE1lc3NhZ2VOYW1lKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNl
bmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICBpZiAo
bWVzc2FnZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1
bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVzc2FnZU5hbWUpIHsKKyAgICAgICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkK
KyAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRv
V2ViUHJvY2VzcyhldmVudCk7CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAppbmRleCBj
YzUyNmFhZjNhYWZiMWMxNDZkYTRiMjQxOTQ1OWIxMDkyMDFiNjEwLi4wODVlN2QyNjVhMTM3MzVi
ZTdhMTI3OGVjMWRmYjYzZmQ1ZGQ1ZDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQSVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHku
aCIKICNpbmNsdWRlICJPcHRpb25hbENhbGxiYWNrSUQuaCIKICNpbmNsdWRlICJXZWJDb29raWVN
YW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHlNZXNzYWdl
cy5oIgpAQCAtMzksMjQgKzQwLDE2IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCi1jb25zdCBjaGFyKiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN1cHBs
ZW1lbnROYW1lKCkKK1dlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5
KE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKQorICAgIDogbV9uZXR3b3JrUHJv
Y2VzcyhtYWtlV2Vha1B0cihuZXR3b3JrUHJvY2VzcykpCiB7Ci0gICAgcmV0dXJuICJXZWJDb29r
aWVNYW5hZ2VyUHJveHkiOwotfQotCi1SZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KHByb2Nlc3NQb29s
KSk7Ci19Ci0KLVdlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KFdl
YlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKLSAgICA6IFdlYkNvbnRleHRTdXBwbGVtZW50KHBy
b2Nlc3NQb29sKQotewotICAgIFdlYkNvbnRleHRTdXBwbGVtZW50Ojpwcm9jZXNzUG9vbCgpLT5h
ZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CisgICAgbmV0d29ya1Byb2Nlc3MuYWRkTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgKnRoaXMpOwogfQogCiBXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5h
Z2VyUHJveHkoKQogeworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsKICAgICBBU1NFUlQobV9jb29raWVPYnNl
cnZlcnMuaXNFbXB0eSgpKTsKIH0KIApAQCAtNjUsMTAyICs1OCw4NCBAQCB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6aW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGll
bnRCYXNlKiBjbAogICAgIG1fY2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKIH0KIAotLy8gV2Vi
Q29udGV4dFN1cHBsZW1lbnQKLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NQ
b29sRGVzdHJveWVkKCkKLXsKLSAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnM7Ci0gICAg
Zm9yIChhdXRvJiBvYnNlcnZlclNldCA6IG1fY29va2llT2JzZXJ2ZXJzLnZhbHVlcygpKSB7Ci0g
ICAgICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlclNldCkKLSAgICAgICAgICAgIG9i
c2VydmVycy5hcHBlbmQob2JzZXJ2ZXIpOwotICAgIH0KLQotICAgIGZvciAoYXV0byogb2JzZXJ2
ZXIgOiBvYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyLT5tYW5hZ2VyRGVzdHJveWVkKCk7Ci0K
LSAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKQotewot
fQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQ
cm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2Vi
Q29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpyZWYoKTsKLX0KLQotdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewot
ICAgIEFQSTo6T2JqZWN0OjpkZXJlZigpOwotfQotCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklE
KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RG
TW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0
aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGhvc3RuYW1lcykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJv
Y2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRl
bGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklELCBob3N0bmFtZXMpKTsKKyAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQs
IGhvc3RuYW1lcyksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRl
QWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2wo
KS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCkpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCksIDApOwog
fQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgY29uc3QgQ29va2llJiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vz
cy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNv
b2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxs
YmFja0Z1bmN0aW9uKV0oKSBtdXRhYmxlIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAg
ICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJD
b29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBXVEZNb3ZlKGNh
bGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsK
LSAgICB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tp
ZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2FsbFRpbWUgdGltZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0
byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
OwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1l
KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklE
LCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBj
YWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRD
b29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNv
b2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewot
ICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1
bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIGNvbnN0IFVSTCYgdXJsLCBjb25z
dCBVUkwmIG1haW5Eb2N1bWVudFVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxi
YWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgp
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQs
IGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2ll
cyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxs
YmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tpZXMo
c2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZN
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rp
b24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8m
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsK
LSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVu
Y3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRD
b29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAg
ZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNz
UmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRP
YnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAK
IHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0
d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklE
KSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVPYnNlcnZl
ckNhbGxiYWNrKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgp
PiYmIGNhbGxiYWNrKQpAQCAtMjExLDE4ICsxODYsMTggQEAgdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNl
c3Npb25JRCwgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotI2lmIFVTRShTT1VQKQotICAgIHByb2Nl
c3NQb29sKCktPnNldEluaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5k
aWYKLQotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5
KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZN
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rp
b24oKTsKIH0KIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxs
YmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wo
KS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3koKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzZXNzaW9u
SUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxi
YWNrRnVuY3Rpb24oSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6TmV2ZXIpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNv
b2tpZU1hbmFnZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFu
YWdlclByb3h5LmgKaW5kZXggMGJkZmMwZDRlNDdjNDM2ZjU4NWNmMjljMDlkNTFhMjliYzgxMWE5
ZC4uNmY1MWYwM2U1YzBjYTg5NDEyMzM0Mzc3YjU1NDNkODIyY2MyZmVjMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKQEAgLTU2LDExICs1
Niw5IEBAIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6QXJyYXkqPiBBcnJheUNhbGxiYWNr
OwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGlj
eT4gSFRUUENvb2tpZUFjY2VwdFBvbGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJh
Y2s8Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7CiAK
LWNsYXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJ
OjpPYmplY3Q6OlR5cGU6OkNvb2tpZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1l
bnQsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFuYWdl
clByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2ll
TWFuYWdlcj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxXZWJD
b29raWVNYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRpYyBS
ZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBjcmVhdGUoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0
d29ya1Byb2Nlc3MpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5
KG5ldHdvcmtQcm9jZXNzKSk7IH0KICAgICB2aXJ0dWFsIH5XZWJDb29raWVNYW5hZ2VyUHJveHko
KTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGll
bnRCYXNlKik7CkBAIC0xMDQsMTcgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQVBJOjpP
YmplY3Q6OmRlcmVmOwogCiBwcml2YXRlOgotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQ
cm9jZXNzUG9vbCopOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vzc1By
b3h5Jik7CiAKICAgICB2b2lkIGNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQpOwogCi0g
ICAgLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLSAgICB2b2lkIHByb2Nlc3NQb29sRGVzdHJveWVk
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5Kikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSop
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLQogICAgIC8v
IElQQzo6TWVzc2FnZVJlY2VpdmVyCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKIApAQCAtMTI1LDYgKzExNiw3IEBA
IHByaXZhdGU6CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lk
ICgpPj4gbV9sZWdhY3lDb29raWVPYnNlcnZlcnM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25J
RCwgSGFzaFNldDxPYnNlcnZlcio+PiBtX2Nvb2tpZU9ic2VydmVyczsKIAorICAgIFdlYWtQdHI8
TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHlDbGllbnQgbV9jbGllbnQ7CiAKICNpZiBVU0UoU09VUCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGQzYjhjMzU1NDBmM2YyNDU2ZjcxMDU1ZjVi
NGQ3YTc4MjI2MGQzODcuLjQ5Y2VlYjIyODkyZjI0NTE4MWE0NDgwOTU5ZGM4MzRhMTVlZjhkNWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTc0Niw3ICsx
NzQ2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oYm9v
bCBjb250cm9sbGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpTZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGNvbnRyb2xsZWQpKTsKLSAgICBtX3Byb2Nl
c3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbikpOworICAgIHdl
YnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbiksIDApOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFy
Z2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQpAQCAtMzIxMCwxMSAr
MzIxMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojppc0ZvcmNlZEludG9BcHBCb3VuZE1vZGVUZXN0
aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+CiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlz
YWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MoKQogewogI2lmIEVO
QUJMRShBUFBfQk9VTkRfRE9NQUlOUykgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdl
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgp
LCAwKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1l
bnQoKSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtMzIyMywxMyArMzIxOSw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAhUExBVEZPUk0o
TUFDQ0FUQUxZU1QpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgc2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVu
dE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkp
IHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgp
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3Jl
KCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAjZW5k
aWYKQEAgLTQ0MjksNyArNDQxOSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8o
Y29uc3QgVVJMJiB1cmwpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gc3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3kgPSBtX2NhblVzZUNyZWRlbnRpYWxTdG9yYWdlID8gV2ViQ29yZTo6U3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3k6OlVzZSA6IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5
OjpEb05vdFVzZTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5wcmVjb25uZWN0VG8oc2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlE
KCksIHVybCwgdXNlckFnZW50KCksIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRp
bmdUb0FwcEJvdW5kRG9tYWluKCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJv
Y2VzcygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQo
KSwgdXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW4oKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDYW5Vc2VD
cmVkZW50aWFsU3RvcmFnZShib29sIGNhblVzZUNyZWRlbnRpYWxTdG9yYWdlKQpAQCAtNDcyNSw3
ICs0NzE1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZShGcmFt
ZUlkZW50aWZpZXIgZnJhbWVJRCwgRnJhbWVJbmZvRGF0YSYKICAgICAgICAgICAgIFJlZ2lzdHJh
YmxlRG9tYWluIGN1cnJlbnREb21haW4geyBjdXJyZW50UmVxdWVzdC51cmwoKSB9OwogICAgICAg
ICAgICAgVVJMIHJlcXVlc3RlclVSTCB7IFVSTCgpLCByZXF1ZXN0ZXJPcmlnaW4udG9TdHJpbmco
KSB9OwogICAgICAgICAgICAgaWYgKCFjdXJyZW50RG9tYWluLm1hdGNoZXMocmVxdWVzdGVyVVJM
KSkKLSAgICAgICAgICAgICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZGlkQ29tbWl0Q3Jv
c3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwgY3VycmVudERvbWFpbiwgbmF2
aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dlYlBhZ2VJRCk7CisgICAgICAg
ICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmRpZENvbW1pdENy
b3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIFJlZ2lzdHJhYmxlRG9tYWluIHsgcmVxdWVzdGVyVVJMIH0sIGN1cnJlbnREb21haW4sIG5h
dmlnYXRpb25EYXRhVHJhbnNmZXIsIG1faWRlbnRpZmllciwgbV93ZWJQYWdlSUQpOwogICAgICAg
ICB9CiAjZW5kaWYKICAgICB9CkBAIC00NzYzLDcgKzQ3NTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUlu
Zm9EYXRhJgogICAgIGlmIChuYXZpZ2F0aW9uICYmIGZyYW1lLT5pc01haW5GcmFtZSgpKSB7CiAg
ICAgICAgIGlmIChhdXRvJiBhZENsaWNrQXR0cmlidXRpb24gPSBuYXZpZ2F0aW9uLT5hZENsaWNr
QXR0cmlidXRpb24oKSkgewogICAgICAgICAgICAgaWYgKGFkQ2xpY2tBdHRyaWJ1dGlvbi0+ZGVz
dGluYXRpb24oKS5tYXRjaGVzKGZyYW1lLT51cmwoKSkpCi0gICAgICAgICAgICAgICAgbV9wcm9j
ZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U3RvcmVBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgKmFkQ2xpY2tBdHRyaWJ1dGlvbikpOworICAgICAgICAgICAgICAgIHdlYnNp
dGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTdG9yZUFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCAqYWRDbGlja0F0dHJpYnV0aW9uKSwgMCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUz
NzcsNyArNTM2Nyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmlnYXRpb24oY29u
c3QgV2ViRnJhbWVQcm94eSYgZnJhbWUsIGNvbnN0IFVSTCYgcGFnCiAgICAgaWYgKHRhcmdldEhv
c3QuaXNFbXB0eSgpIHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3QgPT0g
c291cmNlVVJMLmhvc3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5wcm9j
ZXNzUG9vbCgpLnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6TG9nRnJhbWVOYXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJl
Z2lzdHJhYmxlRG9tYWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVS
TCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5p
c01haW5GcmFtZSgpLCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRM
b2FkRm9yTWFpbkZyYW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlcikp
OworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVE
b21haW4geyBwYWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVk
aXJlY3QsIGZyYW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRG
aW5pc2hEb2N1bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5p
dGlhdGVkQnlVc2VyKSwgMCk7CiB9CiAjZW5kaWYKIApAQCAtMTAwMDIsNTggKzk5OTIsMjcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnN5c3RlbVByZXZpZXdBY3Rpb25UcmlnZ2VyZWQoY29uc3QgV2Vi
Q29yZTo6U3lzdGVtUHJldmlld0luZm8KIAogdm9pZCBXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNr
QXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nl
c3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdv
cmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihlbXB0eVN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Np
b25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRl
RGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQg
V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9j
ZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAg
ICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1By
b2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVh
ckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRD
bGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJG
b3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0
d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNp
b25VUkxGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYg
KCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRl
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRp
b25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVz
dGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3Mo
KS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlj
a0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShT
UEVFQ0hfU1lOVEhFU0lTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
Y3BwCmluZGV4IGQ5MjZiMzNjYmRmMmJiOGJiOTgwZDYzYzVkYzUyYWU1MjUwOTI1MjkuLmE5OTQ5
YjA4OTg0ZjA2MDkwZWY5MDkwOGE0MGI3YjZkNmZhYzVhYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTE0Myw4ICsxNDMsMTAgQEAKICNlbmRpZgog
CiAjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4uKSBS
RUxFQVNFX0xPRyhjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMj
X19WQV9BUkdTX18pCisjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhj
aGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoi
IGZtdCwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0df
RVJST1IoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIlcCAt
IFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VC
UFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikgUkVM
RUFTRV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVs
LCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVm
aW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5uZWws
IGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxv
d2VkKCksIGNoYW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIsNiAr
MjM0LDExIEBAIHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNo
PiYgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90CiAgICAgcmV0dXJuIHNldDsKIH0KIAor
VmVjdG9yPFN0cmluZz4gV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9j
b2xIYW5kbGVycygpCit7CisgICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihnbG9iYWxVUkxTY2hlbWVz
V2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSk7Cit9CisKIFdlYlByb2Nlc3NQb29sOjpXZWJQ
cm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikK
ICAgICA6IG1fY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uLmNvcHkoKSkKICAgICAsIG1fZGVm
YXVsdFBhZ2VHcm91cChXZWJQYWdlR3JvdXA6OmNyZWF0ZSgpKQpAQCAtMjM5LDcgKzI0Niw2IEBA
IFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJh
dGlvbiYgY29uZmlndXJhdGlvbikKICAgICAsIG1fYXV0b21hdGlvbkNsaWVudChtYWtlVW5pcXVl
PEFQSTo6QXV0b21hdGlvbkNsaWVudD4oKSkKICAgICAsIG1fZG93bmxvYWRDbGllbnQobWFrZVVu
aXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PigpKQogICAgICwgbV9oaXN0b3J5Q2xpZW50KG1h
a2VVbmlxdWU8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4oKSkKLSAgICAsIG1fY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQ+KCkpCiAgICAgLCBtX3Zpc2l0ZWRMaW5rU3RvcmUoVmlzaXRlZExpbmtTdG9y
ZTo6Y3JlYXRlKCkpCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICwgbV9oaWdoUGVyZm9ybWFuY2VH
cmFwaGljc1VzYWdlU2FtcGxlcihtYWtlVW5pcXVlPEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNh
Z2VTYW1wbGVyPigqdGhpcykpCkBAIC0yNjcsOSArMjczLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6Oldl
YlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9u
KQogI2VuZGlmCiAgICAgfSk7CiAKLSAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSAmJiBXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAg
bV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0
YVN0b3JlKCk7Ci0KICAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IG1fY29uZmlndXJhdGlvbi0+YWx3
YXlzUmV2YWxpZGF0ZWRVUkxTY2hlbWVzKCkpCiAgICAgICAgIG1fc2NoZW1lc1RvUmVnaXN0ZXJB
c0Fsd2F5c1JldmFsaWRhdGVkLmFkZChzY2hlbWUpOwogCkBAIC0yODUsNyArMjg4LDYgQEAgV2Vi
UHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
JiBjb25maWd1cmF0aW9uKQogICAgIGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUHJv
Y2Vzc1Bvb2w6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9URTog
VGhlc2Ugc3ViLW9iamVjdHMgbXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VSZWNl
aXZlck1hcC4uCi0gICAgYWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAg
ICAgYWRkU3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRT
dXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUoTUVE
SUFfU0VTU0lPTikKQEAgLTM0Miw5ICszNDQsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nl
c3NQb29sKCkKICAgICBwcm9jZXNzUG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAot
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zaHV0
RG93blByb2Nlc3MoKTsKLQogI2lmIEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9jZXNz
ZXNVc2luZ0dhbWVwYWRzLmlzRW1wdHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNp
bmdsZXRvbigpLnByb2Nlc3NQb29sU3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAtNDAy
LDE2ICs0MDEsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9uQ2xpZW50KHN0
ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JgogICAgICAgICBtX2F1dG9tYXRp
b25DbGllbnQgPSBXVEZNb3ZlKGF1dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVf
cHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudCkKLXsKLSNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VS
KQotICAgIGlmICghY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAgICBtX2N1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQ+KCk7Ci0gICAgZWxzZQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudCA9IFdURk1vdmUoY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsKLSNlbmRpZgot
fQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRs
ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlk
ZW50aWZpZXIpCiB7CiAgICAgLy8gR3VhcmQgYWdhaW5zdCBBUEkgbWlzdXNlLgpAQCAtNDIxLDEx
ICs0MTAsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2Vydmlj
ZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBjdQogICAgIG1fY29uZmlndXJhdGlvbi0+
c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGN1c3RvbVdlYkNvbnRl
bnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcik7CiB9CiAKLUlQQzo6Q29ubmVjdGlvbiogV2ViUHJv
Y2Vzc1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIG1f
bmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
bGFuZ3VhZ2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViUHJv
Y2Vzc1Bvb2wqPihjb250ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7CkBAIC00MzUsOCArNDE5LDcg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9B
bGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXND
aGFuZ2VkKCkpOwogI2lmIFVTRShTT1VQKQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNl
clByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7
CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5uZXR3b3JrUHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
Q2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKICNlbmRpZgogfQogCkBAIC00
NDksNyArNDMyLDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZnVsbEtleWJvYXJkQWNjZXNzTW9k
ZUNoYW5nZWQoYm9vbCBmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGUKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KGJvb2wgaXNDcml0aWNhbCkKIHsKICAgICBzZW5k
VG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1v
cnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2Vz
cyhNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZl
bnQoaXNDcml0aWNhbCkpOworICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVz
c3VyZUV2ZW50KGlzQ3JpdGljYWwpKTsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
ICAgICBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuc2VuZE1lbW9yeVByZXNzdXJl
RXZlbnQoaXNDcml0aWNhbCk7CiAjZW5kaWYKQEAgLTQ3NCwyNzUgKzQ1OCw4IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNjcmVlblByb3BlcnRpZXNTdGF0ZUNoYW5nZWQoKQogI2VuZGlmCiB9CiAK
LU5ldHdvcmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vz
cyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKLXsKLSAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9y
YXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJl
YWRzLgotICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFk
aW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlmICghUnVuTG9vcDo6aXNNYWlu
KCkpIHsKLSAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAg
fQotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgaWYgKHdpdGhXZWJzaXRl
RGF0YVN0b3JlKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1h
a2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICB3aXRoV2Vic2l0ZURh
dGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBhdXRvIG5ldHdvcmtQcm9jZXNzID0g
bWFrZVVuaXF1ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7Ci0KLSAgICBOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCi0gICAgaWYgKG1fd2Vic2l0ZURh
dGFTdG9yZSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
LnBlbmRpbmdDb29raWVzID0gY29weVRvVmVjdG9yKG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVuZGlu
Z0Nvb2tpZXMoKSk7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29v
a2llcygpOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNh
dGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24o
KS5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291
cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5j
b25maWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKCk7Ci0j
ZW5kaWYKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxT
ZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotCi0gICAgZm9yIChhdXRvJiBzY2hl
bWUgOiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAg
ICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBl
bmQoc2NoZW1lKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU3RyaW5nIGNvb2tp
ZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9y
eSgpOwotICAgIGlmICghY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29r
aWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdl
YlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb250
YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0
b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0KLSAgICBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBh
cmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyZW50QnVuZGxlRGlyZWN0b3J5Lmlz
RW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1
bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRl
cnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRl
bXBvcmFyeUZpbGUoZW1wdHlTdHJpbmcoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdy
aXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFz
ZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAg
ICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9WZWN0b3Io
TGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1
cmUoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29u
dGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpz
aW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9s
aWN5KCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29w
eVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdp
c3RlckFzTG9jYWwoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9B
Y2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNj
aGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQotICAgIC8vICoqKioqKioqKgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNoYW5nZSB0
aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlzayB3aXRo
b3V0IGZpcnN0IGNvbnN1bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjovL3Byb2Js
ZW0vMTc0NTQ3MTI+KQotICAgIC8vICoqKioqKioqKgotICAgIGlmIChtX3dlYnNpdGVEYXRhU3Rv
cmUpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y3Jl
YXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAg
ICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBtX3dlYnNp
dGVEYXRhU3RvcmUtPnJlc29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgp
OwotICAgIGlmICghcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
KQotICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnkg
PSAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeSgpOwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJl
YWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0g
bV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExvY2FsU3Rv
cmFnZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9yYWdlRGly
ZWN0b3J5KQotICAgICAgICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2Fs
U3RvcmFnZURpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JS
ZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0KLSAgICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9y
ZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3Ry
aW5nKCk7Ci0gICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShj
YWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBX
VEZNb3ZlKGNhY2hlU3RvcmFnZURpcmVjdG9yeSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYg
KG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVj
dG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJl
Y3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFy
YW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5kaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rv
cnksIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0g
ICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAgYm9vbCBl
bmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAg
Ym9vbCBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQotICAgIFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IFdlYkNvcmU6OlRoaXJkUGFydHlDb29r
aWVCbG9ja2luZ01vZGU6OkFsbDsKLSAgICBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50RW5hYmxlZCBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IFdlYkNvcmU6OlNh
bWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKLSNlbmRpZgotICAgIFdlYkNvcmU6
OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlID0gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFs
bEJ1dENvb2tpZXM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gc3RhbmRhbG9uZUFw
cGxpY2F0aW9uRG9tYWluOwotICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+
IGFwcEJvdW5kRG9tYWluczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBtYW51YWxQ
cmV2YWxlbnRSZXNvdXJjZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fdGNjUHJlZmVy
ZW5jZUVuYWJsZWQgPSBkb2VzQXBwSGF2ZUlUUEVuYWJsZWQoKTsKLSAgICBpZiAod2l0aFdlYnNp
dGVEYXRhU3RvcmUgJiYgIXdpdGhXZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRs
eVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1By
ZWZlcmVuY2VFbmFibGVkOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0g
ICAgfSBlbHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUgJiYgIW1fd2Vic2l0ZURhdGFTdG9yZS0+
aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgbV93ZWJzaXRlRGF0
YVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
YXRhU3RvcmVFeGlzdHMoKSAmJiAhV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgp
LT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9h
ZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZQotICAgICAgICBl
bmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSNl
bmRpZgotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJl
c291cmNlTG9hZFN0YXRpc3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0g
d2l0aFdlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNl
bmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAg
ICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURhdGFTdG9y
ZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNo
b3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAg
ICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdN
b2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0
aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJl
c291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQ
YXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRh
bG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFw
cEJvdW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1h
bnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vi
c2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VR
dW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1
b3RhKCk7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3Rv
cnkgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3Rvcnko
KTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAg
ICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9y
eTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2Fj
aGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0
d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGNvbnN0IGF1dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUt
PnJlc29sdmVkSFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFn
ZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJl
Y3RvcnkgPSBoc3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6
VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAg
ICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0
aW5nRXZlbnQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJh
Y2soKTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykg
ewotICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dlYnNpdGVE
YXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAg
ICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJl
c291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3Q7Ci0g
ICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJs
ZURlYnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAg
ICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29va2llQmxv
Y2tpbmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQg
PSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRl
cnMuc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAgICAgICAg
IGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlOwotICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
LnN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5kRG9tYWlu
cyA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy5hcHBCb3VuZERvbWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJj
ZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy5tYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0g
bV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3Rv
cmFnZVF1b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFn
ZVF1b3RhKCk7Ci0KLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0g
bV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAg
ICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAg
ICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVj
dG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2Fj
aGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3Qg
YXV0byYgaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVk
SFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURpcmVjdG9y
eS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBo
c3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnkg
PSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsK
LSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVj
dG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2Fj
aGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lmIEhBVkUoQ0ZORVRXT1JL
X0FMVEVSTkFUSVZFX1NFUlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6Omh0dHAzRW5h
YmxlZCgpKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeSA9IFdl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2VzRGlyZWN0b3J5KCk7Ci0g
ICAgICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURp
cmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0
aXZlU2VydmljZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHAz
RW5hYmxlZCA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBpc0l0cFN0YXRlRXhwbGlj
aXRseVNldCA9IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewotICAgICAgICBXVEZNb3Zl
KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAgICBXVEZNb3ZlKHJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpLAotICAgICAgICBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0YXRlRXhwbGljaXRseVNl
dCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCwK
LSAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RlYnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNU
SUNTKQotICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlLAotICAgICAgICBzYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9t
YWluLAotICAgICAgICBhcHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZhbGVudFJl
c291cmNlLAotICAgIH07Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmljIHBhcmFt
ZXRlcnMKLSAgICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsK
LQotICAgIC8vIEluaXRpYWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJv
Y2VzcyhwYXJhbWV0ZXJzKSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBuZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3b3JrUHJv
Y2Vzc0xhdGVuY3lRT1MoKSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAwKTsKLSNl
bmRpZgotCi0gICAgbmV0d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKLQot
ICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICB3aXRo
V2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQotICAgIC8v
IE1ha2Ugc3VyZSB0aGUgbmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUgc2Vzc2lv
bnMgdGhhdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAgICBmb3Ig
KGF1dG8mIHNlc3Npb25JRCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGlu
Z05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICB9Ci0K
LSAgICBtX25ldHdvcmtQcm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0gICAgcmV0
dXJuICptX25ldHdvcmtQcm9jZXNzOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSkK
IHsKLSAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJv
Y2Vzc1Byb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChhdXRvJiBz
dXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+
cHJvY2Vzc0RpZENsb3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzUxLDkgKzQ2OCw2
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1ByCiAgICAgaWYgKG1fYXV0b21hdGlvblNlc3Npb24p
CiAgICAgICAgIG1fYXV0b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAgLy8gTGVh
dmUgdGhlIHByb2Nlc3MgcHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28gdGhhdCB0
aGUgY2xpZW50IGNvdWxkIHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAgbV9uZXR3
b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwog
fQogCkBAIC03NjQsMjAgKzQ3OCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3Jr
ZXJQcm9jZXNzQ3Jhc2hlZChXZWJQcm9jZXNzUHJveHkmIHByb3h5KQogI2VuZGlmCiB9CiAKLXZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNz
UHJveHkmIHdlYlByb2Nlc3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAgICBlbnN1
cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFr
UHRyKCp0aGlzKSwgd2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5
KSwgcmVwbHkgPSBXVEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc1Zh
bGlkKGNvbm5lY3Rpb25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5ICYmIHdl
YWtUaGlzKSkgewotICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1Io
UHJvY2VzcywgImdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0IGF0dGVt
cHQsIHJldHJ5aW5nIik7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAg
ICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3
ZWJQcm9jZXNzUHJveHksIFdURk1vdmUocmVwbHkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7Ci0gICAgfSk7Ci19Ci0KICNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpncHVQcm9jZXNzQ3Jh
c2hlZChQcm9jZXNzSUQgaWRlbnRpZmllcikKIHsKQEAgLTgwMSwyMyArNTAxLDI2IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OmdldEdQVVByb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYg
d2ViUHJvY2Vzc1Byb3h5LCBNCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJQcm9jZXNzUG9vbDo6c191
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gZmFsc2U7CisKICNpZiBFTkFCTEUoU0VS
VklDRV9XT1JLRVIpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0
Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJveHksIFJl
Z2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIEFTU0VSVF9VTlVTRUQocHJveHksICZwcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgp
KTsKKyAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3Rp
bmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXdlYnNpdGVEYXRh
U3RvcmUpCisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlKCkucHRyKCk7CisgICAgaWYgKCFwcm9jZXNzUG9vbHMoKS5zaXplKCkpCisg
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWY8V2ViUHJvY2Vzc1Bvb2w+PiBzZXJ2aWNl
V29ya2VyUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShBUEk6OlByb2Nlc3NQb29s
Q29uZmlndXJhdGlvbjo6Y3JlYXRlKCkuZ2V0KCkpKTsKIAotICAgIGF1dG8qIHdlYnNpdGVEYXRh
U3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JT
ZXNzaW9uSUQoc2Vzc2lvbklEKTsKLQotICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkgewotICAg
ICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFT
dG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigp
OwotICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlID0gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOwot
ICAgIH0KKyAgICAvLyBBcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCB0
byBob3N0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgorICAgIGF1dG8qIHByb2Nlc3NQb29s
ID0gcHJvY2Vzc1Bvb2xzKClbMF07CisgICAgQVNTRVJUKHByb2Nlc3NQb29sKTsKIAogICAgIFdl
YlByb2Nlc3NQcm94eSogc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSB7IG51bGxwdHIgfTsKLSAg
ICBpZiAoIW1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgewotICAgICAgICBmb3Ig
KGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAgICAgICAgaWYgKHByb2Nlc3Mg
PT0gbV9wcmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkK
KworICAgIGlmICghc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7CisgICAgICAg
IGZvciAoYXV0byYgcHJvY2VzcyA6IHByb2Nlc3NQb29sLT5tX3Byb2Nlc3NlcykgeworICAgICAg
ICAgICAgaWYgKHByb2Nlc3MgPT0gcHJvY2Vzc1Bvb2wtPm1fcHJld2FybWVkUHJvY2VzcyB8fCBw
cm9jZXNzLT5pc0R1bW15UHJvY2Vzc1Byb3h5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBpZiAoJnByb2Nlc3MtPndlYnNpdGVEYXRhU3RvcmUoKSAhPSB3ZWJzaXRl
RGF0YVN0b3JlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODI1LDM1ICs1MjgsMzUg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25U
b05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm8KICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAog
ICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9IHByb2Nlc3MuZ2V0KCk7Ci0g
ICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vy
cyh1c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSk7Cisg
ICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vy
cyhwcm9jZXNzUG9vbC0+dXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VX
b3JrZXJzKCkpOwogCi0gICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9B
TExPV0VEKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRv
TmV0d29ya1Byb2Nlc3MgcmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0l
cCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgV0VCUFJPQ0VTU1BP
T0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoU2VydmljZVdvcmtlciwgImVzdGFibGlz
aFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0
aW5nIHdlYiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eSkgewotICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdl
YlByb2Nlc3NQcm94eTo6Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMoKnRoaXMsIFdURk1vdmUocmVn
aXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CisgICAgICAgIGF1dG8gbmV3UHJv
Y2Vzc1Byb3h5ID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2VycygqcHJv
Y2Vzc1Bvb2wsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7
CiAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgPSBuZXdQcm9jZXNzUHJveHkucHRy
KCk7CiAKLSAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2
aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElE
PSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJv
eHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNF
X0xPR19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29y
a2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJv
eHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCi0g
ICAgICAgIGluaXRpYWxpemVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURh
dGFTdG9yZSk7Ci0gICAgICAgIG1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQ
cm94eSkpOworICAgICAgICBwcm9jZXNzUG9vbC0+aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3
UHJvY2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm1f
cHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOwogICAgIH0KIAotICAg
IEFTU0VSVCghbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5KSk7Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmFkZCgqc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eSk7CisgICAgQVNTRVJUKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
KCkuY29udGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpKTsKKyAgICBzZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzKCkuYWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKIAotICAgIHNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KG1f
c2VydmljZVdvcmtlclByZWZlcmVuY2VzID8gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFs
dWUoKSA6IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQu
aXNOdWxsKCkpCi0gICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VX
b3JrZXJVc2VyQWdlbnQobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKKyAgICBzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5LT5lc3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4dChwcm9jZXNzUG9v
bC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMgPyBwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29y
a2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IHByb2Nlc3NQb29sLT5tX2RlZmF1bHRQYWdlR3JvdXAt
PnByZWZlcmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
IGlmICghcHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkKKyAg
ICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2Vu
dChwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1By
b3h5JiBwcm9jZXNzKQogewotICAgIEFTU0VSVChtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29u
dGFpbnMocHJvY2VzcykpOwotICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5yZW1vdmUocHJv
Y2Vzcyk7CisgICAgQVNTRVJUKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlucyhwcm9j
ZXNzKSk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLnJlbW92ZShwcm9jZXNzKTsKIH0K
ICNlbmRpZgogCkBAIC05MjIsNyArNjI1LDcgQEAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gV2Vi
UHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUKICNp
ZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICAvLyBJbiBwbGF0Zm9ybXMgdXNp
bmcgQnViYmxld3JhcCBmb3Igc2FuZGJveGluZywgcHJld2FybWVkIHByb2Nlc3MgaXMgbGF1bmNo
ZWQgdXNpbmcgdGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSwKICAg
ICAvLyBzbyB3ZSBkb24ndCB1c2UgaXQgaW4gY2FzZSBvZiB1c2luZyBhIGRpZmZlcmVudCBXZWJz
aXRlRGF0YVN0b3JlLgotICAgIGlmIChtX3NhbmRib3hFbmFibGVkICYmIG1fd2Vic2l0ZURhdGFT
dG9yZSAmJiBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCkgIT0gJndlYnNpdGVEYXRhU3RvcmUpCisg
ICAgaWYgKG1fc2FuZGJveEVuYWJsZWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogI2VuZGlm
CiAKQEAgLTEwMzIsOCArNzM1LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5l
d1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzLCBXZWJzaXRlRGEKICAgICAgICAg
cHJvY2Vzcy5pc1Jlc3BvbnNpdmUoW2luaXRpYWxpemF0aW9uQWN0aXZpdHkgPSBXVEZNb3ZlKGlu
aXRpYWxpemF0aW9uQWN0aXZpdHkpXSAoYm9vbCkgeyB9KTsKICAgICB9KTsKIAotICAgIGVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCk7Ci0KICAgICBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBh
cmFtZXRlcnM7CiAKICAgICBwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aCA9IG1fcmVzb2x2
ZWRQYXRocy5pbmplY3RlZEJ1bmRsZVBhdGg7CkBAIC0xMTk4LDkgKzg5OSw2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5KiBw
cm9jZXNzKQogICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPmlnbm9yZVRpbWVvdXRzRm9y
VGVzdGluZygpOwogCiAgICAgbV9jb25uZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5lY3Rpb24o
dGhpcywgcHJvY2Vzcy0+d2ViQ29ubmVjdGlvbigpKTsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRh
U3RvcmUpCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nl
c3MoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJv
Y2Vzc1Byb3h5KiBwcm9jZXNzKQpAQCAtMTI5NSwxMCArOTkzLDcgQEAgUmVmPFdlYlBhZ2VQcm94
eT4gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwg
UmVmPEFQSToKICAgICBpZiAoIXBhZ2VDb25maWd1cmF0aW9uLT53ZWJzaXRlRGF0YVN0b3JlKCkp
IHsKICAgICAgICAgLy8gV2UgdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBkZWZhdWx0IGRhdGEg
c3RvcmUgYXMgbG9uZyBhcyBwb3NzaWJsZS4KICAgICAgICAgLy8gQnV0IGlmIHRoZXJlIGlzIGFu
IGF0dGVtcHQgdG8gY3JlYXRlIGEgd2ViIHBhZ2Ugd2l0aG91dCBhbnkgc3BlY2lmaWVkIGRhdGEg
c3RvcmUsIHRoZW4gd2UgaGF2ZSB0byBjcmVhdGUgaXQuCi0gICAgICAgIGlmICghbV93ZWJzaXRl
RGF0YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0KLSAgICAgICAgcGFnZUNv
bmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0b3JlLmdldCgp
KTsKKyAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCkpOwogICAgIH0KIAog
ICAgIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IHByb2Nlc3M7CkBAIC0xMzI5LDcgKzEwMjQsNyBA
QCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xp
ZW50JiBwYWdlQ2xpZW50LCBSZWY8QVBJOgogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAg
ICBpZiAoIW1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKSB7CiAgICAgICAgIG1fc2VydmljZVdv
cmtlclByZWZlcmVuY2VzID0gcGFnZS0+cHJlZmVyZW5jZXNTdG9yZSgpOwotICAgICAgICBmb3Ig
KGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQor
ICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclBy
b2Nlc3NlcygpKQogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2Vydmlj
ZVdvcmtlclByZWZlcmVuY2VzU3RvcmUoKm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKTsKICAg
ICB9CiAgICAgaWYgKHVzZXJDb250ZW50Q29udHJvbGxlcikKQEAgLTEzNTYsNyArMTA1MSw3IEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3Qg
U3RyaW5nJiB1c2VyQWdlbnQpCiAgICAgaWYgKG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9PSB1
c2VyQWdlbnQpCiAgICAgICAgIHJldHVybjsKICAgICBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQg
PSB1c2VyQWdlbnQ7Ci0gICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2Vy
dmljZVdvcmtlclByb2Nlc3NlcykKKyAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNz
IDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQogICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
cy5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CiB9
CiAjZW5kaWYKQEAgLTEzNjUsMTUgKzEwNjAsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdl
QmVnaW5Vc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSQog
ewogICAgIGF1dG8gcmVzdWx0ID0gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmFkZChkYXRhU3RvcmUu
c2Vzc2lvbklEKCksIEhhc2hTZXQ8V2ViUGFnZVByb3h5SWRlbnRpZmllcj4oKSkuaXRlcmF0b3It
PnZhbHVlLmFkZChwYWdlSUQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNO
ZXdFbnRyeSk7Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsK
LSAgICBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkp
IHsKLSAgICAgICAgQVNTRVJUKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRhU3RvcmUu
cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0gc2Vzc2lv
bklEKTsKLSAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAgICAgICAg
IGRhdGFTdG9yZS5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VFbmRVc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFn
ZVByb3h5SWRlbnRpZmllciBwYWdlSUQsIFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKQEAg
LTE0MDEsNyArMTA4Nyw2IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1BhZ2VzVXNpbmdXZWJz
aXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKIERvd25sb2FkUHJveHkm
IFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdl
YlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKIHsKICAgICBhdXRvJiBkb3dubG9h
ZFByb3h5ID0gY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGluaXRpYXRp
bmdQYWdlLCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5z
ZXNzaW9uSUQoKTsKIAogICAgIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBp
c0FwcEJvdW5kID0gTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46Ok5vOwogICAgIGlmIChpbml0
aWF0aW5nUGFnZSkgewpAQCAtMTQxMSwyNiArMTA5NiwyMyBAQCBEb3dubG9hZFByb3h5JiBXZWJQ
cm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdl
UHJveAogI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAg
ICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICAvLyBS
ZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVS
TCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KLSAgICAgICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0
byB0b3AgbGV2ZWwgZG9jdW1lbnQncyBVUkwuCi0gICAgICAgIGlmIChpbml0aWF0aW5nUGFnZSkg
ewotICAgICAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5p
dGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OwotICAgICAgICAgICAgdXBkYXRl
ZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwpOwotICAg
ICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3RyYWJsZURvbWFp
bnNFcXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOwotICAgICAgICAgICAg
aWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVz
ZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2Vu
dChpbml0aWF0aW5nUGFnZS0+dXNlckFnZW50Rm9yVVJMKHJlcXVlc3QudXJsKCkpKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JD
b29raWVzKFVSTCgpKTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUo
ZmFsc2UpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmll
bGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJl
cXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkp
OwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7
Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwg
dXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAg
ICAgIHJldHVybiBkb3dubG9hZFByb3h5OworICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVx
dWVzdChyZXF1ZXN0KTsKKyAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2ls
bCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KKyAgICAv
LyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KKyAgICBpZiAo
aW5pdGlhdGluZ1BhZ2UpIHsKKyAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsg
VVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OworICAgICAg
ICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVS
TCk7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVE
b21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKKyAgICAgICAg
aWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVz
ZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGlu
aXRpYXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgp
KTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7CisgICAgICAg
IGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpV
c2VyQWdlbnQpKQorICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChX
ZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwogICAgIH0KKyAgICB1cGRhdGVkUmVx
dWVzdC5zZXRJc1RvcFNpdGUoZmFsc2UpOworICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3QoZGF0YVN0b3Jl
LnNlc3Npb25JRCgpLCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3Qs
IGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7CiAKICAgICByZXR1cm4gZG93bmxv
YWRQcm94eTsKIH0KQEAgLTE0MzgsMTcgKzExMjAsMTIgQEAgRG93bmxvYWRQcm94eSYgV2ViUHJv
Y2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVBy
b3gKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZChXZWJzaXRl
RGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0
IEFQSTo6RGF0YSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIGF1dG8m
IGRvd25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgUmVzb3VyY2VS
ZXF1ZXN0KCksIGluaXRpYXRpbmdQYWdlLCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKIAogICAgIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAgIGlmICghcGF0aC5pc0VtcHR5KCkpCiAg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgaWYg
KG5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93bmxvYWRQ
cm94eS5kb3dubG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5Owot
ICAgIH0KLQorICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIGRvd25s
b2FkUHJveHkuZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwg
c2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOwogICAgIHJldHVybiBkb3dubG9hZFByb3h5Owog
fQogCkBAIC0xNTE3LDExICsxMTk0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVmcmVzaFBs
dWdpbnMoKQogCiAjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAKLVByb2Nl
c3NJRCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCkKLXsKLSAgICBy
ZXR1cm4gbV9uZXR3b3JrUHJvY2VzcyA/IG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NJZGVudGlm
aWVyKCkgOiAwOwotfQotCiBQcm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6OnByZXdhcm1lZFByb2Nl
c3NJZGVudGlmaWVyKCkKIHsKICAgICByZXR1cm4gbV9wcmV3YXJtZWRQcm9jZXNzID8gbV9wcmV3
YXJtZWRQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpIDogMDsKQEAgLTE1NTgsMTQgKzEyMzAs
MTggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZShjb25z
dCBTdHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xl
dG9uKCkucmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0Fs
bFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3Vy
ZSh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7CisgICAg
V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdl
YnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVB
c1NlY3VyZSh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeShjb25z
dCBTdHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xl
dG9uKCkucmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1
cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6
UmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hl
bWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJs
U2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUo
W3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRh
U3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVn
aXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUp
LCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluUmVsYXhh
dGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE1
NzgsMTQgKzEyNTQsMTggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVB
c0xvY2FsKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRp
bmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKTsKICAg
ICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2No
ZW1lQXNMb2NhbCh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUp
KTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2No
ZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5u
ZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVS
TFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmIHVybFNj
aGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJV
UkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1l
KSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURh
dGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRh
U3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNz
KHVybFNjaGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdp
c3RlclVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpA
QCAtMTYwNiwxMCArMTI4Niw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFs
VVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0CiAgICAgICAgIHJl
dHVybjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygp
LmFkZCh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdpc3Rl
clNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZv
ciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQ
cm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVn
YWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
dW5yZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhj
b25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MTgsMTAgKzEyOTYsOCBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2Nv
bEhhbmRsZXJzKGNvbgogICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0
aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5yZW1vdmUodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3Rv
Y29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5l
dHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hl
bWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQ
YXJ0aXRpb25lZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2NTUsMTYgKzEzMzEsMTgg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9k
ZWwpCiAKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldENh
Y2hlTW9kZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRD
YWNoZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNo
V2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9y
ZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAgfSk7CiB9
CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVz
dGluZyhDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB7CiAgICAgdXBkYXRlQmFja0ZvcndhcmRDYWNo
ZUNhcGFjaXR5KCk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1v
ZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsKKyAgICBX
ZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdl
YnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1By
b2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxT
eW5jaHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCAwKTsKKyAgICB9KTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwo
ZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE2NzQsMTIgKzEzNTIsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91
dEludGVydmFsKQogCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxv
YWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UsIGNvbnN0IEZyYW1lSW5m
b0RhdGEmIGZyYW1lSW5mbykKIHsKLSAgICByZXR1cm4gZW5zdXJlTmV0d29ya1Byb2Nlc3MoJmRh
dGFTdG9yZSkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGZyYW1lSW5m
bywgb3JpZ2luYXRpbmdQYWdlKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCi17Ci0gICAgZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOworICAgIHJldHVy
biBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9y
ZSwgKnRoaXMsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6YWRkTWVzc2FnZVJlY2VpdmVyKElQQzo6UmVjZWl2ZXJOYW1lIG1l
c3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6TWVzc2FnZVJlY2VpdmVyJiBtZXNzYWdlUmVjZWl2ZXIp
CkBAIC0xNzUwLDMwICsxNDIzLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3RvcE1lbW9yeVNh
bXBsZXIoKQogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U3Rv
cE1lbW9yeVNhbXBsZXIoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1l
c3NhZ2UsIFUmJiByZXBseSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdv
cmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kU3luYyhzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIHN0ZDo6Zm9yd2FyZDxVPihyZXBseSks
IDApOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKGNv
bnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCksIDApOwotfQotCi12b2lkIFdl
YlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCi17Ci0gICAgdGVybWluYXRl
U2VydmljZVdvcmtlcnMoKTsKLQotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOwotICAgIG1f
bmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJt
aW5hdGVBbGxXZWJDb250ZW50UHJvY2Vzc2VzKCkKIHsKICAgICBWZWN0b3I8UmVmUHRyPFdlYlBy
b2Nlc3NQcm94eT4+IHByb2Nlc3NlcyA9IG1fcHJvY2Vzc2VzOwpAQCAtMTc4MSw0MCArMTQzMCwx
NSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250ZW50UHJvY2Vzc2Vz
KCkKICAgICAgICAgcHJvY2Vzcy0+dGVybWluYXRlKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1fbmV0
d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0gICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5l
bnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rpbmco
KQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0KLQotdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkKLXsKLSAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nl
c3NEaWRSZXN1bWUoKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2Vydmlj
ZVdvcmtlcnMoKQogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBhdXRvIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICB3aGlsZSAobV9zZXJ2aWNlV29ya2VyUHJv
Y2Vzc2VzLmNvbXB1dGVTaXplKCkpCi0gICAgICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5i
ZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKKyAgICB3aGlsZSAoc2VydmljZVdvcmtl
clByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMoKS5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKICNlbmRpZgogfQogCi12b2lk
IFdlYlByb2Nlc3NQb29sOjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewot
ICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVB
dXRvbWF0aW9uQ2FwYWJpbGl0aWVzKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKQEAgLTIwODksMTUgKzE3MTMsMjEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVwb3J0
V2ViQ29udGVudENQVVRpbWUoU2Vjb25kcyBjcHVUaW1lLCB1aW50NjRfdCBhY3Rpdml0eVMKICNl
bmRpZgogfQogCitXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBXZWJQcm9jZXNzUG9vbDo6
c2VydmljZVdvcmtlclByb2Nlc3NlcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdl
YWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICByZXR1cm4gcHJvY2Vz
c2VzOworfQorCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucygp
CiB7Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7
CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW10gKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3MoKS51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7CisgICAgfSk7CiAjaWYgRU5BQkxFKFNFUlZJ
Q0VfV09SS0VSKQogICAgIC8vIENoZWNrIG9uIG5leHQgcnVuIGxvb3Agc2luY2UgdGhlIHdlYiBw
cm9jZXNzIHByb3h5IHRva2VucyBhcmUgcHJvYmFibHkgYmVpbmcgdXBkYXRlZC4KLSAgICBjYWxs
T25NYWluUnVuTG9vcChbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0gewotICAg
ICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBmb3IgKGF1
dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAg
IGNhbGxPbk1haW5SdW5Mb29wKFtdIHsKKyAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2Vy
UHJvY2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgICAgIHNlcnZpY2VX
b3JrZXJQcm9jZXNzLnVwZGF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzQXNzZXJ0aW9uKCk7CiAgICAg
fSk7CiAjZW5kaWYKQEAgLTIxMDcsNyArMTczNyw3IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omlz
U2VydmljZVdvcmtlclBhZ2VJRChXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCkgY29uc3QK
IHsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgaW5l
ZmZpY2llbnQuCi0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
LCBbcGFnZUlEXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcygpLCBbcGFnZUlEXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJl
dHVybiBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJQYWdlUHJveHkocGFnZUlEKTsKICAgICB9KTsK
ICNlbmRpZgpAQCAtMjMyOSwxNCArMTk1OSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFy
Q3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCkKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCi12b2lkIFdlYlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1Np
dGVMb2FkV2l0aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9E
b21haW4sIE9wdGlvblNldDxDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiBu
YXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94
eUlELCBQYWdlSWRlbnRpZmllciB3ZWJQYWdlSUQpCi17Ci0gICAgaWYgKCFtX25ldHdvcmtQcm9j
ZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5kaWRDb21taXRD
cm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihzZXNzaW9uSUQsIGZyb21Eb21haW4sIHRvRG9t
YWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlEKTsK
LX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24o
SGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zKQogewogICAgIHNl
bmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0RG9tYWluc1dpdGhVc2Vy
SW50ZXJhY3Rpb24oZG9tYWlucykpOwpAQCAtMjM4NywyNyArMjAwOSwyNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjp1cGRhdGVBdWRpYmxlTWVkaWFBc3NlcnRpb25zKCkKIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sIHVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgaWYgKG1fdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQorICAgIGlm
IChzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0VCUFJPQ0VTU1BPT0xfUkVM
RUFTRV9MT0coU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3M6ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MpOworICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJ
QyhTZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczogKHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2Vzcyk7CiAKLSAgICBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwotICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3Jr
ZXJzKCk7Ci0gICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBzX3VzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwor
ICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bv
b2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwog
fQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFz
U2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdAogewotICAg
IHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10oYXV0byYgcHJv
Y2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwg
W10oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29y
a2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQogCiBib29sIFdl
YlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGlu
ZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2VydmljZVdv
cmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBwcm9j
ZXNzLmhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCk7CiAgICAg
fSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRleCBkMWYx
ZmU5NjE1MDZhMWU1ZjEzMjVmYTk5YTU2MDhiOTUwYjZhYjcxLi5lYmJjYWE0ZWNiMWQ3MzcxN2Ix
YTM1NDgyYTcyZmE5Y2Y0ZGUxZTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmgKQEAgLTgxLDcgKzgxLDYgQEAgT0JKQ19DTEFTUyBXS1ByZWZlcmVuY2VPYnNlcnZl
cjsKIAogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBBdXRvbWF0aW9uQ2xpZW50OwotY2xhc3MgQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogY2xhc3MgRG93bmxvYWRDbGllbnQ7CiBjbGFzcyBI
VFRQQ29va2llU3RvcmU7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZUNsaWVudDsKQEAgLTE4MCw3ICsx
NzksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIaXN0b3J5Q2xpZW50KHN0ZDo6dW5pcXVlX3B0
cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiYmKTsKICAgICB2b2lkIHNldERvd25s
b2FkQ2xpZW50KFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PiYmKTsKICAgICB2b2lkIHNl
dEF1dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4m
Jik7Ci0gICAgdm9pZCBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1
bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmKTsKIAogICAgIHZv
aWQgc2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmlu
ZyYpOwogICAgIGNvbnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVu
dGlmaWVyKCkgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT5jdXN0b21XZWJDb250ZW50U2Vydmlj
ZUJ1bmRsZUlkZW50aWZpZXIoKTsgfQpAQCAtMTkxLDE3ICsxODksOSBAQCBwdWJsaWM6CiAgICAg
Ly8gbnVsbCBjaGVja3MgaW4gV2ViUGFnZVByb3h5LgogICAgIFdlYlByb2Nlc3NQcm94eSogZHVt
bXlQcm9jZXNzUHJveHkoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSBjb25zdCB7IHJldHVybiBt
X2R1bW15UHJvY2Vzc1Byb3hpZXMuZ2V0KHNlc3Npb25JRCkuZ2V0KCk7IH0KIAotICAgIC8vIFdl
YlByb2Nlc3Mgb3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJyZW50IHBy
b2Nlc3MgbW9kZWwuIFRoZSBjb25uZWN0aW9uIG11c3QgYmUgbm9uLW51bGwuCi0gICAgSVBDOjpD
b25uZWN0aW9uKiBuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKLQogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1lc3NhZ2UpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lv
bihjb25zdCBUJiBtZXNzYWdlLCBQQUw6OlNlc3Npb25JRCk7CiAKLSAgICAvLyBTZW5kcyB0aGUg
bWVzc2FnZSB0byBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNzIGFzIGFwcHJvcG9yaWF0ZSBm
b3IgY3VycmVudCBwcm9jZXNzIG1vZGVsLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQg
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpOwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IHZvaWQgc2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBt
ZXNzYWdlLCBVJiYgcmVwbHkpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKTsKLQog
ICAgIHZvaWQgcHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkqKTsKIAog
ICAgIFdlYlByb2Nlc3NDYWNoZSYgd2ViUHJvY2Vzc0NhY2hlKCkgeyByZXR1cm4gbV93ZWJQcm9j
ZXNzQ2FjaGUuZ2V0KCk7IH0KQEAgLTIwOSw5ICsxOTksNiBAQCBwdWJsaWM6CiAgICAgLy8gRGlz
Y29ubmVjdCB0aGUgcHJvY2VzcyBmcm9tIHRoZSBjb250ZXh0LgogICAgIHZvaWQgZGlzY29ubmVj
dFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKLSAgICBXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmUqIHdlYnNpdGVEYXRhU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX3dlYnNpdGVEYXRhU3RvcmUu
Z2V0KCk7IH0KLSAgICB2b2lkIHNldFByaW1hcnlEYXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlJiBkYXRhU3RvcmUpIHsgbV93ZWJzaXRlRGF0YVN0b3JlID0gJmRhdGFTdG9yZTsgfQot
CiAgICAgUmVmPFdlYlBhZ2VQcm94eT4gY3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiwgUmVmPEFQ
STo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogCiAgICAgdm9pZCBwYWdlQmVnaW5Vc2luZ1dlYnNp
dGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2Vic2l0ZURhdGFTdG9yZSYpOwpA
QCAtMjYyLDEwICsyNDksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRTdXBwb3J0ZWRQbHVnaW4o
U3RyaW5nJiYgbWF0Y2hpbmdEb21haW4sIFN0cmluZyYmIG5hbWUsIEhhc2hTZXQ8U3RyaW5nPiYm
IG1pbWVUeXBlcywgSGFzaFNldDxTdHJpbmc+IGV4dGVuc2lvbnMpOwogICAgIHZvaWQgY2xlYXJT
dXBwb3J0ZWRQbHVnaW5zKCk7CiAKLSAgICBQcm9jZXNzSUQgbmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyKCk7CiAgICAgUHJvY2Vzc0lEIHByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyKCk7CiAgICAg
dm9pZCBhY3RpdmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JUZXN0aW5nKFByb2Nlc3NJRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJik7Ci0gICAgYm9vbCBu
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKTsKIAog
ICAgIFdlYlBhZ2VHcm91cCYgZGVmYXVsdFBhZ2VHcm91cCgpIHsgcmV0dXJuIG1fZGVmYXVsdFBh
Z2VHcm91cC5nZXQoKTsgfQogCkBAIC0zMDcsOCArMjkyLDYgQEAgcHVibGljOgogICAgIEFQSTo6
TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlDbGllbnQoKSB7IHJldHVybiAqbV9o
aXN0b3J5Q2xpZW50OyB9CiAgICAgV2ViQ29udGV4dENsaWVudCYgY2xpZW50KCkgeyByZXR1cm4g
bV9jbGllbnQ7IH0KIAotICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBjdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVybiAqbV9jdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQ7IH0KLQogICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKICAgICAgICAgdW5z
aWduZWQgd2tWaWV3Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHdrUGFnZUNvdW50OwpAQCAtMzI0
LDggKzMwNyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3Vt
ZSgpOwogICAgIHZvaWQgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIAotICAgIHZvaWQgZmx1
c2hDb29raWVzKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKLQogICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZv
clRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZh
aWxGb3JUZXN0aW5nID0gdmFsdWU7IH0KICAgICBib29sIHNob3VsZE1ha2VOZXh0V2ViUHJvY2Vz
c0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRNYWtlTmV4dFdl
YlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZzsgfQogICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5l
eHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9zaG91
bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQpA
QCAtMzg4LDE5ICszNjksMTMgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICAvLyBOZXR3b3JrIFBy
b2Nlc3MgTWFuYWdlbWVudAotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3JlID0gbnVsbHB0cik7
Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MoKSBjb25zdCB7IHJldHVy
biBtX25ldHdvcmtQcm9jZXNzLmdldCgpOyB9CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNo
ZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwogCi0gICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwotCiAgICAgYm9vbCBpc1Nl
cnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmllcikgY29uc3Q7CiAjaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIHZvaWQgZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5l
Y3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmLCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKKyAgICBzdGF0aWMgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRv
TmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluJiYsIFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwog
ICAgIHZvaWQgcmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5
Jik7Ci0gICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVy
biBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKTsgfQotICAgIHZvaWQgc2V0
QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGJvb2wgYWxsb3dzKSB7IG1f
YWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyID0gYWxsb3dzOyB9Ci0gICAg
Ym9vbCBhbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoKSBjb25zdCB7IHJl
dHVybiBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjsgfQorICAgIHNp
emVfdCBzZXJ2aWNlV29ya2VyUHJveGllc0NvdW50KCkgY29uc3QgeyByZXR1cm4gc2VydmljZVdv
cmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCk7IH0KICAgICB2b2lkIHVwZGF0ZVNlcnZpY2VX
b3JrZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpOwogICAgIGNvbnN0IE9wdGlv
bmFsPFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXI+JiB1c2VyQ29udGVudENvbnRyb2xs
ZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJDb250
ZW50Q29udHJvbGxlcklERm9yU2VydmljZVdvcmtlcjsgfQogICAgIGJvb2wgaGFzU2VydmljZVdv
cmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdDsKQEAgLTQ1OSw4ICs0MzQs
NiBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSBj
b25zdCB7IHJldHVybiBtX2Fsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eTsgfQogICAgIGJv
b2wgc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hv
dWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbjsgfQogCi0gICAgdm9pZCBzeW50aGVzaXplQXBw
SXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCk7Ci0gICAgCiAjaWYgRU5BQkxFKEdBTUVQQUQp
CiAgICAgdm9pZCBnYW1lcGFkQ29ubmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYsIFdlYkNvcmU6OkV2
ZW50TWFrZXNHYW1lcGFkc1Zpc2libGUpOwogICAgIHZvaWQgZ2FtZXBhZERpc2Nvbm5lY3RlZChj
b25zdCBVSUdhbWVwYWQmKTsKQEAgLTQ5OCw3ICs0NzEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
bGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpOwogCiAjaWYgRU5BQkxFKFJFU09V
UkNFX0xPQURfU1RBVElTVElDUykKLSAgICB2b2lkIGRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRo
RGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiYgZnJvbURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIHRvRG9t
YWluLCBPcHRpb25TZXQ8V2ViQ29yZTo6Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6
RmxhZz4sIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsK
ICAgICB2b2lkIHNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4+JiYpOwogICAgIHZvaWQgc2VlZFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NGb3JUZXN0aW5nKGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5
RG9tYWluLCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdGhpcmRQYXJ0eURvbWFp
biwgYm9vbCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKICAgICB2b2lkIHNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0
ZWx5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CkBAIC01MjUsOCArNDk3LDggQEAgcHVi
bGljOgogICAgIAogICAgIFBsdWdJbkF1dG9TdGFydFByb3ZpZGVyJiBwbHVnSW5BdXRvU3RhcnRQ
cm92aWRlcigpIHsgcmV0dXJuIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI7IH0KIAotICAgIHZv
aWQgc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKLSAgICBib29sIHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3VzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3M7IH0KKyAgICBzdGF0aWMgdm9pZCBzZXRVc2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOworICAgIHN0YXRpYyBib29sIHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MoKSB7IHJldHVybiBzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3M7IH0KIAogI2lmIEVOQUJMRShDRlBSRUZTX0RJUkVDVF9NT0RFKQogICAgIHZvaWQg
bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgT3B0aW9uYWw8U3RyaW5nPiYgZW5jb2RlZFZhbHVlKTsKQEAgLTU0Myw2
ICs1MTUsMTcgQEAgcHVibGljOgogICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9p
bnRUb1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRwb2ludE1lc3NhZ2Up
OwogI2VuZGlmCiAKKyAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJv
Y2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOworICAgIHN0YXRpYyBWZWN0
b3I8U3RyaW5nPiB1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKTsKKworI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgc3RhdGljIFN0cmluZyBjb29raWVTdG9yYWdlRGly
ZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKKyAg
ICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMg
U3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNv
bnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgdm9p
ZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIApAQCAtNTU2LDggKzUzOSw2IEBAIHByaXZhdGU6CiAg
ICAgV2ViUHJvY2Vzc1Byb3h5JiBjcmVhdGVOZXdXZWJQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUq
LCBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdh
cm1lZDo6Tm8pOwogICAgIHZvaWQgaW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1By
b3h5JiwgV2Vic2l0ZURhdGFTdG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQgPSBX
ZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkOjpObyk7CiAKLSAgICB2b2lkIHBsYXRmb3JtSW5p
dGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7
Ci0KICAgICB2b2lkIGhhbmRsZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5KTsKICAgICB2b2lkIGhh
bmRsZVN5bmNocm9ub3VzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHksIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVXNlckRhdGEmJik+JiYpOwogCkBAIC01ODEsMTQgKzU2Miw2IEBAIHByaXZhdGU6CiAK
ICAgICBib29sIHVzZXNTaW5nbGVXZWJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1
cmF0aW9uLT51c2VzU2luZ2xlV2ViUHJvY2VzcygpOyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIHN0YXRpYyBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHN0
YXRpYyBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBu
ZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50
Q2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlE
aXJlY3RvcnkoKTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCByZWdp
c3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpOwogICAgIHZvaWQgdW5yZWdpc3Rlck5vdGlmaWNh
dGlvbk9ic2VydmVycygpOwpAQCAtNjMwLDkgKzYwMyw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1h
cDxQQUw6OlNlc3Npb25JRCwgV2Vha1B0cjxXZWJQcm9jZXNzUHJveHk+PiBtX2R1bW15UHJvY2Vz
c1Byb3hpZXM7IC8vIExpZ2h0d2VpZ2h0IFdlYlByb2Nlc3NQcm94eSBvYmplY3RzIHdpdGhvdXQg
YmFja2luZyBwcm9jZXNzLgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIFdlYWtI
YXNoU2V0PFdlYlByb2Nlc3NQcm94eT4gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzOworICAgIHN0
YXRpYyBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
KCk7CiAgICAgYm9vbCBtX3dhaXRpbmdGb3JXb3JrZXJDb250ZXh0UHJvY2Vzc0Nvbm5lY3Rpb24g
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VX
b3JrZXIgeyBmYWxzZSB9OwogICAgIFN0cmluZyBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQ7CiAg
ICAgT3B0aW9uYWw8V2ViUHJlZmVyZW5jZXNTdG9yZT4gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5j
ZXM7CiAgICAgT3B0aW9uYWw8VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllcj4gbV91c2Vy
Q29udGVudENvbnRyb2xsZXJJREZvclNlcnZpY2VXb3JrZXI7CkBAIC02NDgsNyArNjIwLDYgQEAg
cHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiBtX2F1
dG9tYXRpb25DbGllbnQ7CiAgICAgVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+IG1fZG93
bmxvYWRDbGllbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3Rv
cnlDbGllbnQ+IG1faGlzdG9yeUNsaWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Owog
CiAgICAgUmVmUHRyPFdlYkF1dG9tYXRpb25TZXNzaW9uPiBtX2F1dG9tYXRpb25TZXNzaW9uOwog
CkBAIC02ODAsOCArNjUxLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbWVtb3J5U2FtcGxlckVu
YWJsZWQgeyBmYWxzZSB9OwogICAgIGRvdWJsZSBtX21lbW9yeVNhbXBsZXJJbnRlcnZhbCB7IDE0
MDAuMCB9OwogCi0gICAgUmVmUHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRl
RGF0YVN0b3JlOwotCiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIqLCBSZWZQdHI8V2Vi
Q29udGV4dFN1cHBsZW1lbnQ+LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4gV2ViQ29udGV4dFN1cHBs
ZW1lbnRNYXA7CiAgICAgV2ViQ29udGV4dFN1cHBsZW1lbnRNYXAgbV9zdXBwbGVtZW50czsKIApA
QCAtNzE0LDggKzY4Myw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fcHJvY2Vzc1Rlcm1pbmF0
aW9uRW5hYmxlZCB7IHRydWUgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vz
c1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwotCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRy
PERpY3Rpb25hcnlDYWxsYmFjaz4+IG1fZGljdGlvbmFyeUNhbGxiYWNrczsKIAogI2lmIFVTRShT
T1VQKQpAQCAtODIwLDcgKzc4Nyw3IEBAIHByaXZhdGU6CiAjZWxzZQogICAgIGJvb2wgbV9pc0Rl
bGF5ZWRXZWJQcm9jZXNzTGF1bmNoRGlzYWJsZWQgeyBmYWxzZSB9OwogI2VuZGlmCi0gICAgYm9v
bCBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgeyBmYWxzZSB9OworICAgIHN0YXRp
YyBib29sIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsKIAogI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbj4gbV9kb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbjsKQEAgLTgzMSwyMCArNzk4LDYg
QEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlKQotewotICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdl
KCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3Nh
Z2UpLCAwKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2Fn
ZSkKLXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5h
bWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb0FsbFByb2Nlc3Nlcyhjb25zdCBUJiBt
ZXNzYWdlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAK
aW5kZXggZDY2MTAzMzhiNmNmNjBhMjdhNmY3NWRhZWMzNDlhOGY3MmFiM2I4NS4uMmU1NGE4MTE1
YzQ4ODdmMGExZGQ4M2VkZjViZGNiZTNhNDA4YTI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC03MzgsNyArNzM4LDcgQEAgdm9pZCBXZWJQcm9j
ZXNzUHJveHk6OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHVpbnQ2NF90IHBsdWdpblByb2Nl
c3NUb2tlbiwgTWUKIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbihNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQogewotICAgIG1fcHJvY2Vzc1Bvb2wtPmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOworICAgIHdlYnNp
dGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bigqdGhpcywgV1RGTW92ZShyZXBseSkpOwogfQogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vi
c2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4IDdjNDQwODUxNjc3MzY4YjVk
Zjg5YTg2ZmY0ZDNiNTE1MzRiOTBiYjcuLmEyMDcyNTQ4OGJiOTM5ZTM3YTZhNGRiZDc0ZjVlNzU1
MzM4NzBiNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRh
L0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2ltcG9ydCAiQ29va2llU3RvcmFnZVV0aWxzQ0YuaCIKICNpbXBvcnQgIkRl
ZmF1bHRXZWJCcm93c2VyQ2hlY2tzLmgiCisjaW1wb3J0ICJOZXR3b3JrUHJvY2Vzc1Byb3h5Lmgi
CiAjaW1wb3J0ICJTYW5kYm94VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJTdG9yYWdlTWFuYWdlci5o
IgogI2ltcG9ydCAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgiCkBAIC00NCw2ICs0NSw3
IEBACiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNz
UHJpdmlsZWdlLmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvRW50
aXRsZW1lbnRzLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQpAQCAtNTYyLDQgKzU2NCw5IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6cmVpbml0aWFsaXplQXBwQm91bmREb21haW5zKCkKIH0KICNlbmRpZgogCitib29sIFdl
YnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNv
bnN0IFN0cmluZyYgZW50aXRsZW1lbnQpCit7CisgICAgcmV0dXJuIFdURjo6aGFzRW50aXRsZW1l
bnQobmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwgZW50aXRs
ZW1lbnQudXRmOCgpLmRhdGEoKSk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggMDgzMGNh
NzVhN2ZjMzhlNjQ1Yjc3NWIzOWIzMzc1ZDRjMjA1MDM3ZC4uMGZmZTQ0MDdiMjk2NjM1MGMwYzA3
MGE3ZjJkM2Q4N2NiODdmN2RhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAK
ICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJTdG9y
YWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRDYWNoZS5oIgorI2lu
Y2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYktpdDJJbml0aWFs
aXplLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0Nh
Y2hlLmgiCkBAIC03NSw2ICs3NiwxMCBAQAogI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlvbkNvb3Jk
aW5hdG9yLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkRlZmF1
bHRXZWJCcm93c2VyQ2hlY2tzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0
YXRpYyBib29sIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnM7CkBAIC04Mywx
MyArODgsMTkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1dlYnNpdGVEYXRhUmVjb3Jk
c0ZvckFsbE9yaWdpbnMoKQogICAgIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdp
bnMgPSB0cnVlOwogfQogCi1zdGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURh
dGFTdG9yZSo+JiBub25EZWZhdWx0RGF0YVN0b3JlcygpCitzdGF0aWMgSGFzaE1hcDxQQUw6OlNl
c3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBhbGxEYXRhU3RvcmVzKCkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNo
TWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4+IG1hcDsKICAgICByZXR1cm4g
bWFwOwogfQogCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3Jl
KEZ1bmN0aW9uPHZvaWQoV2Vic2l0ZURhdGFTdG9yZSYpPiYmIGZ1bmN0aW9uKQoreworICAgIGZv
ciAoYXV0byogZGF0YVN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgICAgICBm
dW5jdGlvbigqZGF0YVN0b3JlKTsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVE
YXRhU3RvcmU6OmNyZWF0ZU5vblBlcnNpc3RlbnQoKQogewogICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb246OmNyZWF0
ZShJc1BlcnNpc3RlbnQ6Ok5vKSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlRXBoZW1lcmFsU2Vz
c2lvbklEKCkpKTsKQEAgLTExNSwxMCArMTI2LDExIEBAIFdlYnNpdGVEYXRhU3RvcmU6OldlYnNp
dGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYmIGNvbmZpZ3Vy
CiAjZW5kaWYKIHsKICAgICBXVEY6OnNldFByb2Nlc3NQcml2aWxlZ2VzKGFsbFByaXZpbGVnZXMo
KSk7Ci0gICAgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICByZWdpc3Rlcldp
dGhTZXNzaW9uSURNYXAoKTsKICAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIAogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5hZGRTZXNzaW9uKCp0
aGlzKTsKIH0KIAogV2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUoKQpAQCAtMTI4
LDE3ICsxNDAsMTIgQEAgV2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUoKQogCiAg
ICAgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBBU1NFUlQobm9uRGVmYXVsdERh
dGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOwotICAgICAgICBub25EZWZhdWx0
RGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
ICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW1vdmVTZXNzaW9uKG1fc2Vz
c2lvbklEKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBBU1NFUlQoYWxsRGF0YVN0b3JlcygpLmdl
dChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7CisgICAgYWxsRGF0YVN0b3JlcygpLnJlbW92ZShtX3Nl
c3Npb25JRCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW1vdmVTZXNzaW9uKCp0aGlzKTsKICNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0gICAgICAgIGlmIChhdXRvKiBncHVQcm9jZXNzUHJveHkg
PSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQotICAgICAgICAgICAgZ3B1
UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKKyAgICBpZiAoYXV0byog
Z3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkK
KyAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKICNl
bmRpZgogfQogCkBAIC0xNjksMTcgKzE3NiwzMiBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmVFeGlzdHMoKQogICAgIHJldHVybiAhIWdsb2JhbERlZmF1bHREYXRhU3Rv
cmUoKTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Np
b25JRE1hcCgpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyV2l0aFNlc3Npb25JRE1h
cCgpCit7CisgICAgYXV0byByZXN1bHQgPSBhbGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklE
LCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwor
fQorCitXZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9y
ZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgcmV0dXJuIGFs
bERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklEKTsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eSYg
V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3MoKQogewotICAgIGlmIChtX3Nlc3Npb25J
RCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGF1dG8g
cmVzdWx0ID0gbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5hZGQobV9zZXNzaW9uSUQsIHRoaXMpOwot
ICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgIGlm
ICghbV9uZXR3b3JrUHJvY2VzcykgeworICAgICAgICBpZiAobV9zZXNzaW9uSUQuaXNFcGhlbWVy
YWwoKSB8fCBtX3Nlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KQorICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRl
ZmF1bHROZXR3b3JrUHJvY2VzcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX25ldHdv
cmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlKCk7CiAgICAgfQorCisgICAg
cmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwogfQogCi1XZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRl
RGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEKQorTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9y
ZTo6bmV0d29ya1Byb2Nlc3MoKSBjb25zdAogewotICAgIHJldHVybiBzZXNzaW9uSUQgIT0gUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSA/IG5vbkRlZmF1bHREYXRhU3RvcmVzKCku
Z2V0KHNlc3Npb25JRCkgOiBudWxscHRyOworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYnNpdGVE
YXRhU3RvcmUmPigqdGhpcykubmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpyZWdpc3RlclByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQpAQCAtMTk1
LDEyICsyMTcsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVucmVnaXN0ZXJQcm9jZXNzKFdl
YlByb2Nlc3NQcm94eSYgcHJvY2VzcykKICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7
CiB9CiAKLVdlYlByb2Nlc3NQb29sKiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNv
b2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkKLXsKLSAgICBhdXRvIHBvb2xzID0gcHJvY2Vzc1Bvb2xz
KDEpOwotICAgIHJldHVybiBwb29scy5pc0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVnaW4o
KS0+Z2V0KCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVz
SWZOZWNlc3NhcnkoKQogewogICAgIGlmIChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBAIC00
NDIsMTUgKzQ1OCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5
KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogICAgIGF1dG8gbmV0d29y
a1Byb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZU5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZUZvckRh
dGFGZXRjaChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CiAgICAgaWYgKG5ldHdvcmtQcm9j
ZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkgewogICAgICAgICBhdXRv
IHBvb2xzID0gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09IFByb2Nlc3NBY2Nlc3NUeXBlOjpM
YXVuY2ggPyBlbnN1cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nlc3NQb29scygpOworICAgICAgICAv
LyBGSVhNRTogSXQgbWlnaHQgbm90IGJlIGNvcnJlY3QgdG8gaXRlcmF0ZSB0aGUgcG9vbHMgaGVy
ZS4KICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7CiAgICAgICAgICAg
ICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewogICAgICAgICAgICAgY2FzZSBQ
cm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0Fj
Y2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3ModGhpcyk7CisgICAgICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlw
ZTo6Tm9uZToKQEAgLTQ1OCw3ICs0NzMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNo
RGF0YUFuZEFwcGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdD
YWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmZl
dGNoV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRpb25zLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0oV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsK
KyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25J
RCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQ
b29sXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkgewogICAgICAgICAgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKFdURk1vdmUod2Vic2l0ZURhdGEpKTsK
ICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC03MjYsMTUgKzc0MSwxNCBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0
YVR5cGVzLCBXYWxsVGltZQogICAgIGF1dG8gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID0gY29t
cHV0ZU5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFSZW1vdmFsKGRhdGFUeXBlcywgIWlz
UGVyc2lzdGVudCgpKTsKICAgICBpZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nl
c3NBY2Nlc3NUeXBlOjpOb25lKSB7CiAgICAgICAgIGF1dG8gcG9vbHMgPSBuZXR3b3JrUHJvY2Vz
c0FjY2Vzc1R5cGUgPT0gUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaCA/IGVuc3VyZVByb2Nlc3NQ
b29scygpIDogcHJvY2Vzc1Bvb2xzKCk7CisgICAgICAgIC8vIEZJWE1FOiBJdCBtaWdodCBub3Qg
YmUgY29ycmVjdCB0byBpdGVyYXRlIHBvb2xzIGhlcmUuCiAgICAgICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0Fj
Y2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxh
dW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAg
ICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOworICAgICAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CkBAIC03NDIsNyArNzU2LDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0
YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25J
RCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNz
UG9vbF0geworICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YSht
X3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
LCBwcm9jZXNzUG9vbF0gewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVt
b3ZlUGVuZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtODkzLDE0ICs5MDcsOSBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBX
YWxsVGltZQogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgaWYgKGRh
dGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3Mp
KSB7CiAgICAgICAgIGlmICghZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVE
YXRhKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRv
ci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MtPmRl
bGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdn
cmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZp
ZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geworICAgICAgICAgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CisgICAgICAgICAgICB9KTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNr
KCk7CkBAIC05OTQsMTIgKzEwMDMsMTAgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVE
YXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3QgVmUKICAgICAg
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7CiAgICAgICAgICAgICBzd2l0Y2gg
KG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNj
ZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6
OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3ModGhpcyk7CisgICAgICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToK
QEAgLTEwMjEsNyArMTAyOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNr
KCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vi
c2l0ZURhdGFGb3JPcmlnaW5zKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tp
ZUhvc3ROYW1lcywgSFNUU0NhY2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxs
YmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CisgICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cygpLmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBv
cmlnaW5zLCBjb29raWVIb3N0TmFtZXMsIEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0cmFibGVE
b21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0gewogICAgICAgICAgICAg
ICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CiAgICAgICAg
ICAgICB9KTsKICAgICAgICAgfQpAQCAtMTE4MCwxOCArMTE4NywxMiBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVz
LCBjb25zdCBWZQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNlcnZpY2VXb3JrZXJUaW1l
b3V0Rm9yVGVzdGluZyhTZWNvbmRzIHNlY29uZHMpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKHNlY29uZHMpLCBNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0
aW5nOjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JU
ZXN0aW5nKHNlY29uZHMpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3Jr
ZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZygpCiB7Ci0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRl
c3RpbmcoKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRj
aFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtl
ckZldGNoVGltZW91dEZvclRlc3RpbmcoKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNl
dFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKIH0KIAog
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0xMjAxLDggKzEyMDIsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBt
YXhpbXVtRW50cnlDb3VudCwgQ29tcGxldAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1heFN0YXRpc3RpY3NFbnRy
aWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50cnlDb3VudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRNYXhTdGF0aXN0aWNz
RW50cmllcyhtX3Nlc3Npb25JRCwgbWF4aW11bUVudHJ5Q291bnQsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93
blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjExLDggKzEyMTEsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCwgQ29t
cGxldGlvbgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNEb3duVG8obV9zZXNzaW9uSUQs
IHBydW5lVGFyZ2V0Q291bnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1fc2Vzc2lvbklE
LCBwcnVuZVRhcmdldENvdW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMjEs
OCArMTIyMCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1l
KFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8CiAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRm
YXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyaW5n
VGltZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jk
c1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xMjMxLDIwICsxMjI5LDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMgc2Vj
b25kcywKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwo
bV9zZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogICAgIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJv
Y2Vzcy0+ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9u
SUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wgaXNQcmV2YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI1Niwx
MiArMTI0Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5pc1ByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNQcmV2YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTI3MywxMiArMTI1OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFu
ZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNHcmFuZGZhdGhlcmVkKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLmlzR3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xMjkyLDggKzEyNzMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVu
dFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IGVuc3VyZVByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNv
dXJjZUZvckRlYnVnTW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTMwNywxMCArMTI4Nyw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UHJl
dmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ZlcnlQcmV2YWxlbnQpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTMyMiwxMiArMTI5OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzVmVyeVBy
ZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzVmVyeVByZXZhbGVudFJl
c291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzQxLDEwICsxMzEzLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGUKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VmVyeVByZXZhbGVudFJlc291
cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM1Myw4ICsxMzIyLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3Zh
bChib29sIHYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCB2YWx1ZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29u
c3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTM2OCwyMiArMTMzNiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBj
bwogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5z
ZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB0b3BGcmFtZVVSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwg
fSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJl
ZEFzU3ViRnJhbWVVbmRlcihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZy
YW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+
aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVy
ZWRBc1N1YkZyYW1lVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVS
TCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3VicmVz
b3VyY2VVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzOTcsMjMgKzEzNTcsMTQgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJM
JiBzdWJyZXNvdXJjZVUKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgVVJMJiBz
dWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291
cmNlVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVz
b3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RU
byhjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQyNywx
MCArMTM3OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsCiAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNv
dXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHVybFJl
ZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xNDQyLDEyICsxMzkwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJlc291cmNlVVIKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8o
Y29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NTksMTIgKzE0
MDIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RU
byhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdAogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxS
ZWRpcmVjdGVkVG8gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwmIHVy
bFJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xNDc2LDI1ICsxNDE0LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmxSZWRpcmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFVS
TCYgdXJsUmVkaXJlY3RlZEZyb20sIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJl
ZEFzUmVkaXJlY3RpbmdUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJl
ZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZh
bGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNTA2LDYwICsxNDMzLDQxIEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlv
bkhhbmRsZXI8CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xl
YXJQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMobV9zZXNzaW9uSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzdWJt
aXRUZWxlbWV0cnkoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zdWJtaXRUZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFu
ZFBlcnNpc3RlbnQoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgU2hvdWxkR3JhbmRmYXRoZXJTdGF0
aXN0aWNzIHNob3VsZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAK
LSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVD
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgc2hv
dWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNp
c3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UsIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAKLSAgICBzdHJ1Y3QgQ2FsbGJhY2tBZ2dyZWdhdG9yIDogUmVmQ291bnRlZDxDYWxsYmFja0Fn
Z3JlZ2F0b3I+IHsKLSAgICAgICAgQ2FsbGJhY2tBZ2dyZWdhdG9yKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURh
dGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAgIHN0cnVjdCBMb2NhbENhbGxiYWNrQWdn
cmVnYXRvciA6IFJlZkNvdW50ZWQ8TG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3I+IHsKKyAgICAgICAg
TG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiAgICAgICAgICAgICA6IG1fY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CiAgICAgICAgIH07CiAKLSAgICAgICAgfkNhbGxiYWNrQWdncmVnYXRvcigp
CisgICAgICAgIH5Mb2NhbENhbGxiYWNrQWdncmVnYXRvcigpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTE1NzQsMzggKzE0ODIsMzEgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1h
cnkoQ29tcGxldGlvbkhhbmRsZXI8dm8KICAgICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChW
ZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+
IG1fY29tcGxldGlvbkhhbmRsZXI7CiAgICAgICAgIFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiBtX3Jlc3VsdHM7CiAgICAgfTsKLQotICAgIFJl
ZlB0cjxDYWxsYmFja0FnZ3JlZ2F0b3I+IGNhbGxiYWNrQWdncmVnYXRvciA9IGFkb3B0UmVmKG5l
dyBDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKLQotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBwcm9jZXNzUG9vbC0+c2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHko
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKHRoaXMpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShtX3Nlc3Np
b25JRCwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFZlY3RvcjxXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmIGRhdGEpIHsKLSAgICAgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFJlc3VsdChXVEZNb3ZlKGRhdGEpKTsKLSAg
ICAgICAgICAgIH0pOworICAgIAorICAgIGF1dG8gbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IgPSBh
ZG9wdFJlZihuZXcgTG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpKTsKKyAgICAKKyAgICBhdXRvIHd0ZkNhbGxiYWNrQWdncmVnYXRvciA9IFdURjo6Q2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3Mo
KS5nZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQsIFtsb2Nh
bENhbGxiYWNrQWdncmVnYXRvcl0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6VGhpcmRQYXJ0eURhdGE+JiYgZGF0YSkgeworICAgICAgICAgICAgbG9jYWxDYWxsYmFja0Fn
Z3JlZ2F0b3ItPmFkZFJlc3VsdChXVEZNb3ZlKGRhdGEpKTsKICAgICAgICAgfSk7Ci0gICAgfQor
ICAgIH0pOworICAgIAorICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9v
bDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShbd3RmQ2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnQoU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIHNob3VsZEdyYW5kZmF0aGVyLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCht
X3Nlc3Npb25JRCwgeyB9LCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVD
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgeyB9LCBzaG91bGRHcmFuZGZh
dGhlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKG1fc2Vzc2lv
bklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKG1fc2Vzc2lvbklE
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjE0LDI0ICsxNTE1LDEzIEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQ
cm9jZXNzaW5nKENvbXBsZXRpb25IYW5kCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jk
c1Byb2Nlc3NpbmcobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlU3RhdGlzdGljc0Fu
ZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNB
bGxUYWJsZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc3Rh
dGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29u
c3QgVVJMJiB1cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY0MywyMiArMTUzMywxNCBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFVSTCYgdXJsLCBTZWNvbmRzIHNlY29uZHMsIENv
bXBsZXRpb25IYQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnNldExhc3RTZWVuKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRMYXN0U2VlbihtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0lu
RGF0YWJhc2UoaW50IGRvbWFpbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICAgICAgcHJvY2Vzcy0+ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKG1fc2Vzc2lvbklELCBkb21h
aW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kb21haW5JREV4aXN0c0luRGF0
YWJhc2UobV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHRvcEZyYW1lVXJsMSwgY29uc3QgVVJMJiB0b3BGcmFt
ZVVybDIsIFNlY29uZHMgbGFzdFNlZW4sIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBTZWNvbmRz
IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBib29sIGlz
UHJldmFsZW50LCBib29sIGlzVmVyeVByZXZhbGVudCwgdW5zaWduZWQgZGF0YVJlY29yZHNSZW1v
dmVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
NjcwLDEwICsxNTUyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0Zv
clRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9wRnIKIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5tZXJnZVN0YXRpc3RpY0ZvclRlc3Rp
bmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwxIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rpb24s
IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQs
IGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5tZXJnZVN0
YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwxIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVuLCBoYWRV
c2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJl
ZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omluc2Vy
dEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGhhZFVzZXJJ
bnRlcmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBi
b29sIGlzUHJldmFsZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xNjg1LDE4ICsxNTY0LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aW5z
ZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaGFkCiAK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+aW5zZXJ0RXhw
aXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRGb3JBbGxCdXRD
b29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmluc2VydEV4cGlyZWRT
dGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWwsIGlzUHJldmFsZW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2Vy
ZVNjYW5uZWQoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVzdChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzA0LDggKzE1NzksNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUs
IENvbXBsZQogICAgIHVzZUV4cGxpY2l0SVRQU3RhdGUoKTsKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldElzUnVu
bmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJiBkb21haW5zKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTE3MTYsNyArMTU5MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdl
SUQsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB3ZWJQYWdlLT5wcm9jZXNzKCkucHJv
Y2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRy
aWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhtX3Nlc3Npb25JRCwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAKQEAgLTE3MjQsOCArMTU5OCw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzIHNl
Y29uZHMsIENvbXBsZXRpb25ICiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlckludGVy
YWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihtX3Nlc3Np
b25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MzksMTAgKzE2MTIs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwm
IHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZAogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkubG9nVXNlckludGVyYWN0aW9uKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJ
bnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3NTQsMTMgKzE2MjQsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlv
bkhhbmRsZXI8dgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNz
LT5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJ
bkRhdGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVybCwgY29uc3QgVVJMJiB0b3BVcmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzcyLDEz
ICsxNjM2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRh
dGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVybCwgY29uc3QKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9u
Y2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViVXJsIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21w
bGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlbGF0aW9uc2hp
cE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNs
ZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzkyLDEwICsxNjUwLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm8KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgcHJvY2Vzcy0+Y2xlYXJVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25z
dCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MDksMTAgKzE2NjQsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wgaXNHcmFu
ZGZhdGhlcmVkLCBDbwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgcHJvY2Vzcy0+c2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyZWQo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRm
YXRoZXJlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODIxLDEwICsxNjczLDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRVc2VJVFBEYXRhYmFzZShtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhM
aW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmcm9tVVJMLCBjb25zdCBVUkwmIHRv
VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
ODMzLDYyICsxNjgyLDM4IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9h
ZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmCiAgICAgCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRDcm9zc1NpdGVM
b2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9VUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZv
clRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgZnJvbVVS
TCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvVVJMIH0sIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVM
b2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNldENyb3NzU2l0ZUxvYWRzV2l0
aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldENyb3NzU2l0ZUxvYWRz
V2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9y
VGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmRl
bGV0ZUNvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmRlbGV0ZUNvb2tpZXNGb3JUZXN0
aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpbmNs
dWRlSHR0cE9ubHlDb29raWVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNv
bnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzTG9jYWxTdG9yYWdlKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFz
TG9jYWxTdG9yYWdlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNJc29sYXRlZFNlc3Npb24obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
b21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNJc29sYXRl
ZFNlc3Npb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0
aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3Rpbmco
ZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoZW5hYmxlZCwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKQEAgLTE5
MTksMTAgKzE3NDQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29r
aWVCbG9ja2luZ01vZGUoV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZQogICAgICAgICAgICAgd2Vi
UHJvY2Vzcy5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKGJsb2NraW5nTW9kZSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShtX3Nlc3Npb25JRCwgYmxvY2tp
bmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2Nr
aW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50Rm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5MzAsMTAgKzE3NTIsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVT
aXRlU3RyaWN0RW5mb3JjZQogICAgIGF1dG8gZmxhZyA9IGVuYWJsZWQgPyBXZWJDb3JlOjpTYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6WWVzIDogV2ViQ29yZTo6U2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudEVuYWJsZWQ6Ok5vOwogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZEVuYmxlU2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudEZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZsYWcsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkRW5ibGVT
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JU
ZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTk0MSwyMCArMTc2MCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIGF1dG8gbW9kZSA9IGVuYWJsZWQg
PyBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2ll
cyA6IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpOb25lOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92
YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgbW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5V2Vic2l0ZURh
dGFSZW1vdmFsTW9kZUZvclRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PnNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0Zv
clRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0
aW5nKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eVVSTCwgY29uc3QgVVJMJiBjbmFtZVVSTCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk2Niw4ICsxNzc5
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmly
c3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3QKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAg
ICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5SG9z
dENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmlyc3RQYXJ0eVVSTC5ob3N0KCku
dG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0
eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZpcnN0UGFydHlVUkwuaG9z
dCgpLnRvU3RyaW5nKCksIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhj
b25zdCBVUkwmIGNuYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xOTc5LDE4ICsxNzkxLDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3Rpbmco
CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNOQU1FRG9t
YWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBj
bmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogI2VuZGlmIC8vIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3lu
Y0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5
bmNMb2NhbFN0b3JhZ2UoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTeW5jTG9jYWxTdG9yYWdlKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJl
c291cmNlcyhTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTE5OTgsOCArMTgwNSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRz
LCBDCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNl
dENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRz
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Q2Fj
aGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzZWNvbmRz
KTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMjAwOSwyNiArMTgxNSwxMiBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2Vz
KFNlY29uZHMgc2Vjb25kcywgQwogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENhY2hlTWF4
QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5yZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vz
c2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9u
SUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKICNlbmRpZgogfQogCi1ib29sIFdlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRl
ZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkgY29uc3QKLXsKLSAgICBp
ZiAoYXV0byogcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPSBwcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0
b3JlKCkpCi0gICAgICAgIHJldHVybiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9PSB0aGlzOwotICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgcmV0dXJuIG5ldHdvcmtQcm9jZXNzUHJveHktPmhhc1Nlc3Npb24obV9z
ZXNzaW9uSUQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogSGFzaFNldDxSZWZQdHI8V2ViUHJv
Y2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBj
b25zdAogewogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gcHJvY2Vzc1Bvb2xz
OwpAQCAtMjA0Myw5ICsxODM1LDYgQEAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBX
ZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBjb24KICAgICBpZiAo
cHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBvbmUg
b2YgdGhlIGxlZ2FjeSBkYXRhIHN0b3Jlcy4KICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYg
KCFpc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbCgqcHJvY2Vzc1Bvb2wpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotCiAgICAgICAgICAgICBwcm9jZXNzUG9vbHMuYWRkKHByb2Nlc3NQb29sKTsK
ICAgICAgICAgICAgIGlmIChwcm9jZXNzUG9vbHMuc2l6ZSgpID09IGxpbWl0KQogICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMjA4NCw4ICsxODczLDcgQEAgc3RhdGljIFN0cmluZyBjb21wdXRl
TWVkaWFLZXlGaWxlKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlEaXJlY3RvcnkpCiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0
IFdlYkNlcnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUt
PmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVG
b3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOwogfQogCiBW
ZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBXZWJzaXRlRGF0YVN0b3JlOjptZWRp
YUtleU9yaWdpbnMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KQpAQCAt
MjE0MCw2ICsxOTI4LDMwIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlTWVkaWFLZXlz
KGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwKICAgICB9CiB9CiAKK3Zv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQoreworICAgIGlm
ICghbV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+dGVybWluYXRlKCk7CisgICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Cit9CisK
K3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVu
ZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5z
aW9uSW1taW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5
Rm9yVGVzdGluZygpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc1dpbGxTdXNw
ZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZFByb2Nlc3NEaWRSZXN1bWUoKTsKK30KKwogYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xP
QURfU1RBVElTVElDUykKQEAgLTIxNjksMTcgKzE5ODEsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAg
ICAgIAogICAgICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwogICAgICAgICAK
LSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25J
RCwgdHJ1ZSkpOworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwg
dHJ1ZSksIDApOworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCiAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lv
bihNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
dHJ1ZSksIG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxz
ZSkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSksIDAp
OworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAgICAg
cHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGZhbHNlKSwgbV9zZXNzaW9u
SUQpOwotICAgIH0KIAogICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgPSBmYWxz
ZTsKICNlbHNlCkBAIC0yMTkxLDggKzIwMDEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0U3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjayhGdW5jdGlvbjx2b2lkKGNv
bnN0IFN0cmluZyYpPiYmIGNhbGxiYWNrKQogewogICAgIGlmIChjYWxsYmFjaykgewotICAgICAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpKTsKKyAg
ICAgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSwgMCk7CiAgICAgfQog
ICAgIAogICAgIG1fc3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
OwpAQCAtMjIxMSw4ICsyMDIwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgZW5hYmxlZCwgQ29tcGxldGkKIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShtX3Nlc3Npb25JRCwgZW5h
YmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbmFibGVk
KTsKICAgICBVTlVTRURfUEFSQU0oY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMjIyNywyMCArMjAz
NSwxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vw
aGVtZXJhbChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKAogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RXBoZW1lcmFsKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CisjZW5kaWYKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0
cmlidXRpb25EZWJ1Z01vZGUoYm9vbCBlbmFibGVkKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQp
OwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIyNjIsNDgg
KzIwNjUsMTkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZFN0YXRp
c3RpY3NJbldlYlByb2Nlc3NlcyhDb21wbGV0aW9uSGFuZGwKIH0KICNlbmRpZgogCi1WZWN0b3I8
V2ViQ29yZTo6Q29va2llPiBXZWJzaXRlRGF0YVN0b3JlOjpwZW5kaW5nQ29va2llcygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihtX3BlbmRpbmdDb29raWVzKTsKLX0KLQotdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjphZGRQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tp
ZSYgY29va2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMucmVtb3ZlSWYoWyZjb29raWVdKGF1
dG8mIHBlbmRpbmdDb29raWUpIHsKLSAgICAgICAgcmV0dXJuIHBlbmRpbmdDb29raWUuaXNLZXlF
cXVhbChjb29raWUpOwotICAgIH0pOwotICAgIG1fcGVuZGluZ0Nvb2tpZXMuYWRkKGNvb2tpZSk7
Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBX
ZWJDb3JlOjpDb29raWUmIGNvb2tpZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZShj
b29raWUpOwotfQotICAgIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdDb29r
aWVzKCkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6Zmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3Ig
KGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5mbHVzaENvb2tpZXMoc2Vzc2lvbklEKCksIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5mbHVzaENvb2tpZXMoc2Vzc2lv
bklEKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93
cykKIHsKLSAgICBmb3IgKGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvcldlYlNvY2tldChhbGxvd3MpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0OjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyksIE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQ6OlJlcGx5
KCksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMoKQogewotICAgIGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQ
cm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMoc2Vzc2lvbklEKCkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKCkpLCAwKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkaXNwYXRjaE9uUXVldWUoRnVuY3Rpb248dm9pZCgp
PiYmIGZ1bmN0aW9uKQpAQCAtMjMyOSw4ICsyMTAzLDYgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAKICAgICByZXNvbHZlRGlyZWN0
b3JpZXNJZk5lY2Vzc2FyeSgpOwogCi0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBl
bmRpbmdDb29raWVzKCk7Ci0KICAgICBhdXRvIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rv
cnkgPSBtX2NvbmZpZ3VyYXRpb24tPnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsK
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVj
dG9yeUhhbmRsZTsKICAgICBpZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNF
bXB0eSgpKQpAQCAtMjQzNSw3ICsyMjA3LDE0IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
IFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMoKQogICAgIHBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZWQg
PSBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOwogI2VuZGlmCiAgICAgcGxhdGZvcm1T
ZXROZXR3b3JrUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAg
ICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9z
c1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFj
a2luZ1Blcm1pc3Npb24oKTsKKyNlbmRpZgogCisjaWYgVVNFKFNPVVApCisgICAgbmV0d29ya1By
b2Nlc3MoKS5jb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lv
bklEKCksIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlUGF0aCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2ll
UGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKKyNlbmRpZgorICAgIAogICAgIHJldHVybiBwYXJhbWV0
ZXJzOwogfQogCkBAIC0yNDY1LDEwICsyMjQ0LDYgQEAgQVBJOjpIVFRQQ29va2llU3RvcmUmIFdl
YnNpdGVEYXRhU3RvcmU6OmNvb2tpZVN0b3JlKCkKICAgICByZXR1cm4gKm1fY29va2llU3RvcmU7
CiB9CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQot
ewotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVu
Y3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRh
aWxzPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIWlzUGVyc2lzdGVudCgp
KSB7CkBAIC0yNDc2LDIzICsyMjUxLDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9j
YWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VECiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJl
UHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKHRoaXMpLmdldExvY2FsU3RvcmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgewot
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7Ci0gICAgICAg
IH0pOwotICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBmZXRjaGluZyBmcm9tIG11bHRpcGxlIHBv
b2xzLgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUKCFjb21wbGV0aW9uSGFuZGxl
cik7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lv
bklELCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0
byYmIGRldGFpbHMpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxz
KSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFF1b3RhKG1fc2Vzc2lvbklE
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnJlc2V0UXVvdGEobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
ICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0yNTE4LDcgKzIyODUsMTIgQEAgYm9vbCBXZWJzaXRl
RGF0YVN0b3JlOjpodHRwM0VuYWJsZWQoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRp
ZgorCitib29sIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRG
b3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlm
IC8vICFQTEFURk9STShDT0NPQSkKIAogI2lmICFVU0UoR0xJQikKIFdURjo6U3RyaW5nIFdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQpA
QCAtMjUzMCwzNSArMjMwMiwxOSBAQCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkKIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpyZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFVSTCYmIG9sZE5hbWUsIFVSTCYmIG5l
d05hbWUsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6
YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5hZGRTZXNzaW9uKCp0aGlzKTsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW5h
bWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRh
VHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5hZGRTZXNzaW9uKCp0aGlzKTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUs
IGRhdGFUeXBlcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxF
KEFQUF9CT1VORF9ET01BSU5TKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNl
c3Npb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikg
Y29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNBcHBCb3VuZFNlc3Np
b24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpj
bGVhckFwcEJvdW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+Y2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFtwcm9j
ZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5k
RG9tYWluc1RvSVRQSWZJbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0yNTgwLDcgKzIzMzYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhh
bmRsZQogCiAgICAgcHJvcGFnYXRlQXBwQm91bmREb21haW5zKGdsb2JhbERlZmF1bHREYXRhU3Rv
cmUoKS5nZXQoKSwgKmFwcEJvdW5kRG9tYWlucyk7CiAKLSAgICBmb3IgKGF1dG8qIHN0b3JlIDog
bm9uRGVmYXVsdERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICBmb3IgKGF1dG8qIHN0b3JlIDog
YWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQogICAgICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFp
bnMoc3RvcmUsICphcHBCb3VuZERvbWFpbnMpOwogfQogCkBAIC0yNTg4LDEwICsyMzQ0LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBcHBCb3VuZERvbWFpbnNGb3JJVFAoY29uc3QgSGFz
aFNldDxXZWJDb3JlOjpSZWdpc3RyYWIKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEFwcEJvdW5kRG9tYWlu
c0ZvclJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAjZW5kaWYKIApAQCAtMjU5OSwxNiArMjM1MiwxNCBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9j
ZXNzKGNvbnN0IFN0cmluZyYgYnVuZAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVy
KGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJC
dW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5k
bGVJZGVudGlmaWVyKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUu
aAppbmRleCAwZGM5MWYyM2M0MTU0Mzk1YzhlYmY4OTBmMzViZDAxODBjZDUxYWFkLi5iNTU4YTFk
OGUxN2NmNTE2YmY4NWY1MTkzZTE0MGM5YjA1OWZmYWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC03NSw2
ICs3NSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7
CiBjbGFzcyBTZWNLZXlQcm94eVN0b3JlOwogY2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7
CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5OwogY2xhc3MgU09BdXRob3JpemF0aW9uQ29vcmRp
bmF0b3I7CiBjbGFzcyBXZWJDZXJ0aWZpY2F0ZUluZm87CiBjbGFzcyBXZWJQYWdlUHJveHk7CkBA
IC0xMDksNyArMTEwLDEyIEBAIHB1YmxpYzoKICAgICBXZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbj4mJiwgUEFMOjpTZXNzaW9uSUQpOwogICAgIH5XZWJz
aXRlRGF0YVN0b3JlKCk7CiAKLSAgICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhpc3RpbmdO
b25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEKTsKKyAgICBzdGF0
aWMgdm9pZCBmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRh
U3RvcmUmKT4mJik7CisgICAgCisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nl
c3MoKSBjb25zdDsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcygpOwor
CisgICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lv
bklEKFBBTDo6U2Vzc2lvbklEKTsKIAogICAgIGJvb2wgaXNQZXJzaXN0ZW50KCkgY29uc3QgeyBy
ZXR1cm4gIW1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCk7IH0KICAgICBQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQpAQCAtMTE5LDYgKzEyNSwx
MSBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5
PiYgcHJvY2Vzc2VzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzZXM7IH0KIAorICAgIHZvaWQg
dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1By
ZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Cisg
ICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5n
KCk7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKKwogICAgIGJvb2wg
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wpOwogICAgIGJvb2wgcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZSgpIGNvbnN0OwpAQCAtMjM1LDE1ICsyNDYsOCBAQCBwdWJsaWM6CiAK
ICAgICBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSYgZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKSB7
IHJldHVybiBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlLmdldCgpOyB9CiAKLSAgICBXZWJQcm9j
ZXNzUG9vbCogcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGJv
b2wgaXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmKSBjb25zdDsKLQogICAg
IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHBhcmFtZXRlcnMoKTsKIAotICAgIFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29raWVzKCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRQZW5k
aW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwotICAgIHZvaWQgcmVtb3ZlUGVuZGlu
Z0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIGNsZWFyUGVuZGluZ0Nv
b2tpZXMoKTsKICAgICB2b2lkIGZsdXNoQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwogICAgIHZvaWQgY2xlYXJDYWNoZWRDcmVkZW50aWFscygpOwogCkBAIC0yNzIsOCArMjc2
LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJh
dGlvbihXZWJDb3JlOjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uJiYpOwogI2Vu
ZGlmCiAKLSAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci0KICAgICBjb25zdCBX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbigpIHsgcmV0dXJuIG1f
Y29uZmlndXJhdGlvbi5nZXQoKTsgfQogCiAgICAgV2Vic2l0ZURhdGFTdG9yZUNsaWVudCYgY2xp
ZW50KCkgeyByZXR1cm4gbV9jbGllbnQuZ2V0KCk7IH0KQEAgLTI4Myw2ICsyODUsOCBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEoVVJMJiYsIFVSTCYmLCBP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
IAorICAgIGJvb2wgbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3Qg
U3RyaW5nJik7CisKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogICAgIFdlYkRldmlj
ZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlciYgZGV2aWNlT3JpZW50YXRpb25B
bmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyKCkgeyByZXR1cm4gbV9kZXZpY2VPcmllbnRhdGlvbkFu
ZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXI7IH0KICNlbmRpZgpAQCAtMzU5LDcgKzM2Myw3IEBAIHBy
aXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVk
aWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSk7CiAgICAgc3Rh
dGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURp
cmVjdG9yeSwgY29uc3QgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAK
LSAgICB2b2lkIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgdm9pZCByZWdp
c3RlcldpdGhTZXNzaW9uSURNYXAoKTsKIAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykK
ICAgICBzdGF0aWMgT3B0aW9uYWw8SGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4+
IGFwcEJvdW5kRG9tYWluc0lmSW5pdGlhbGl6ZWQoKTsKQEAgLTM5Nyw4ICs0MDEsNiBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkIHsgdHJ1
ZSB9OwogI2VuZGlmCiAKLSAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb2tpZT4gbV9wZW5kaW5nQ29v
a2llczsKLSAgICAKICAgICBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+IG1fcHJvY2Vzc2Vz
OwogCiAgICAgYm9vbCBtX2lzSXRwU3RhdGVFeHBsaWNpdGx5U2V0IHsgZmFsc2UgfTsKQEAgLTQx
OSw2ICs0MjEsNyBAQCBwcml2YXRlOgogICAgIFVuaXF1ZVJlZjxXZWJzaXRlRGF0YVN0b3JlQ2xp
ZW50PiBtX2NsaWVudDsKIAogICAgIFJlZlB0cjxBUEk6OkhUVFBDb29raWVTdG9yZT4gbV9jb29r
aWVTdG9yZTsKKyAgICBSZWZQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2Vz
czsKIAogI2lmIEhBVkUoQVBQX1NTTykKICAgICBVbmlxdWVSZWY8U09BdXRob3JpemF0aW9uQ29v
cmRpbmF0b3I+IG1fc29BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3Vw
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURh
dGFTdG9yZVNvdXAuY3BwCmluZGV4IDEyZjljZDgxOWI2ZGNjYThhYzUwOTJhMzBkZDkzYzUzYjhl
ZTkzNDIuLjViYTM5MDBkMmRhZmYwNTZhYmQwY2RmMDU3YWUzMjg1NGViZmVjZjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFT
dG9yZVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3Nv
dXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCkBAIC0zOSw4ICszOSw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyhXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycyYKICAgICBhdXRvJiBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fcGVyc2lzdGVudENyZWRl
bnRpYWxTdG9yYWdlRW5hYmxlZDsKIAotICAgIGlmIChhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nl
c3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlVHlwZSk7CisgICAgV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmds
ZXRvbigpLmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJv
Y2Vzc1Byb3h5R0xpYi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nl
c3NQcm94eUdMaWIuY3BwCmluZGV4IDBhODRhNzU5MGQ5YTk4NWJmYzk5Njg0YTQ4OTUxMzc0ZTVi
Mjk0MjkuLjI3ZjIzZWEwNjVkYzc1Y2U0YTgyNzBjNTc2ZWEyYWE1NWFiMGRjOGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNw
cApAQCAtNDQsNyArNDQsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1HZXRMYXVu
Y2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbAogICAgICAgICBpZiAo
IWRhdGFTdG9yZSkgewogICAgICAgICAgICAgLy8gUHJld2FybWVkIHByb2Nlc3NlcyBkb24ndCBo
YXZlIGEgV2Vic2l0ZURhdGFTdG9yZSB5ZXQsIHNvIHVzZSB0aGUgcHJpbWFyeSBXZWJzaXRlRGF0
YVN0b3JlIGZyb20gdGhlIFdlYlByb2Nlc3NQb29sLgogICAgICAgICAgICAgLy8gVGhlIHByb2Nl
c3Mgd29uJ3QgYmUgdXNlZCBpZiBjdXJyZW50IFdlYnNpdGVEYXRhU3RvcmUgaXMgZGlmZmVyZW50
IHRoYW4gdGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgb25lLgotICAgICAgICAgICAgZGF0YVN0
b3JlID0gbV9wcm9jZXNzUG9vbC0+d2Vic2l0ZURhdGFTdG9yZSgpOworICAgICAgICAgICAgZGF0
YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwogICAg
ICAgICB9CiAKICAgICAgICAgQVNTRVJUKGRhdGFTdG9yZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcApp
bmRleCA5ZjdiZTNjOTQxYjZjZDBhMWI5NGNiMTM2MDk4ZjNhMDQxY2VmZjk5Li5hYzA0ZTM4YTU3
YjIxNTliZWI0MmYzODQ3OWI0NGY1ZTI2ZGVkYmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKQEAg
LTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJDb29raWVN
YW5hZ2VyUHJveHkuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNs
dWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9v
bC5oIgogCkBAIC0zMyw4ICszNCw4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lz
dGVudFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKQogewotICAgIG1fY29va2llUGVyc2lzdGVudFN0
b3JhZ2VNYXAuc2V0KHNlc3Npb25JRCwgc3RkOjptYWtlX3BhaXIoc3RvcmFnZVBhdGgsIHN0b3Jh
Z2VUeXBlKSk7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Np
b25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgs
IHN0b3JhZ2VUeXBlKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRD
b29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyYg
c3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUmIHN0b3JhZ2VUeXBl
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9j
ZXNzUG9vbFNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNz
UG9vbFNvdXAuY3BwCmluZGV4IGJmYmJmOTY2NGU0ODM1MzA5NzA5NzExZGZkNmMxMzQxNTczMmJk
YWMuLjdmZTRhY2EwYzVkMmQwZTdmYzBkOWQ1YTRmYTI3ZWJjYzgwYTY3NWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKQEAg
LTM3LDMwICszNywyNCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0gICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBh
cmFtZXRlcnMmIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgIHN1cHBsZW1l
bnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShk
ZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklELCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRl
cnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMu
Y29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3Jl
KQotICAgICAgICBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxT
dG9yYWdlRW5hYmxlZCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyc2lzdGVudENyZWRlbnRpYWxT
dG9yYWdlRW5hYmxlZCgpOworICAgIC8vIEZJWE1FOiBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0
UG9saWN5IHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KKyAgICAvLyBG
SVhNRTogbV9pZ25vcmVUTFNFcnJvcnMgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0
YVN0b3JlIG9yIHJlbW92ZWQuCisgICAgLy8gRklYTUU6IG1fbmV0d29ya1Byb3h5U2V0dGluZ3Mg
c2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgogCi0gICAgcGFyYW1ldGVy
cy5jb29raWVBY2NlcHRQb2xpY3kgPSBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5Owot
ICAgIHBhcmFtZXRlcnMuaWdub3JlVExTRXJyb3JzID0gbV9pZ25vcmVUTFNFcnJvcnM7CiAgICAg
cGFyYW1ldGVycy5sYW5ndWFnZXMgPSB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCk7Ci0gICAgcGFy
YW1ldGVycy5wcm94eVNldHRpbmdzID0gbV9uZXR3b3JrUHJveHlTZXR0aW5nczsKICAgICBwYXJh
bWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gdHJ1ZTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQogeworICAg
IC8vIEZJWE1FOiBNb3ZlIHRoaXMgdG8gV2Vic2l0ZURhdGFTdG9yZS4KICAgICBtX2lnbm9yZVRM
U0Vycm9ycyA9IGlnbm9yZVRMU0Vycm9yczsKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vycm9ycyksIDApOwogfQogCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhjb25zdCBXZWJDb3JlOjpTb3VwTmV0
d29ya1Byb3h5U2V0dGluZ3MmIHNldHRpbmdzKQogeworICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMg
dG8gV2Vic2l0ZURhdGFTdG9yZS4KICAgICBtX25ldHdvcmtQcm94eVNldHRpbmdzID0gc2V0dGlu
Z3M7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyht
X25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5OGIzNmNjN2FkNzUxYWJhMTMwOTc3NzMy
ODQ2OWEwNjRiMWMxYWVkLi5mYzM5YzBlOTczYWEzNWQ4ZmFjMGYwNTEwMDBmZTY5MjlhOGU3NDJh
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNjAgQEAKKzIwMjAtMDktMjEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5A
d2Via2l0Lm9yZz4KKworICAgICAgICBNb3ZlIE5ldHdvcmtQcm9jZXNzUHJveHkgb3duZXJzaGlw
IGZyb20gV2ViUHJvY2Vzc1Bvb2wgdG8gV2Vic2l0ZURhdGFTdG9yZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MDQxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Eb3dubG9hZC5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRvd25sb2Fk
QXRSYXRlKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNo
ZWNrcG9pbnRXQUwubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tOgorICAgICAgICAoVEVTVCk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3Jh
ZGVUb1YyLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbToKKyAgICAgICAg
KFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhl
ZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW06CisgICAg
ICAgIChydW5UZXN0KToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tOgorICAgICAgICAoVEVT
VCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQ
ZXJzaXN0ZW5jZS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW06CisgICAgICAg
IChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4
ZWREQlRlbXBGaWxlU2l6ZS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW06CisgICAg
ICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05l
dHdvcmtQcm9jZXNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFT
dG9yZS5tbToKKyAgICAgICAgKGNoZWNrUmVjb3ZlcnlBZnRlckNyYXNoKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1t
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW06CisgICAgICAg
ICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxl
cnRQYW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6
CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2FpdEZvck1lc3NhZ2Vd
KToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBhbGVydENvb2tpZUhU
TUxdKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3Jl
Q3VzdG9tUGF0aHMubW06CisgICAgICAgIChydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMp
OgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25z
aXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRq
dXN0Q29udGV4dCk6CisKIDIwMjAtMDktMjEgIEthdGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5l
eUBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cgYWJvdXQ6Ymxhbmsgc3ViZnJhbWUgbG9hZHMg
Zm9yIG5vbiBhcHAtYm91bmQgdG9wIGZyYW1lcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlv
bi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jh
c2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KaW5kZXggOTczODlmMDFmZjJlZTk5Yjc4M2IwYjUy
MTA4MDc0ZjFhODFiNjk4MS4uMzNmNDU0YzVjZDU5YjQ4YTc2OThhYWI1NmU2MTFjZjZmMDljOWY0
ZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1By
b2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9u
Lm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzR3JvdXBQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0
YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgogCkBAIC0xNDYsOCArMTQ3LDggQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQ
cm9jZXNzUmVsYXVuY2hPbkxhdW5jaEZhaWx1cmUpCiAKICAgICAvLyBDb25zdHVjdGluZyBhIFdl
YlZpZXcgc3RhcnRzIGEgbmV0d29yayBwcm9jZXNzIHNvIHRlcm1pbmF0ZSB0aGlzIG9uZS4gVGhl
IHBhZ2UgbG9hZCBiZWxvdyB3aWxsIHRoZW4gcmVxdWVzdCBhIG5ldHdvcmsgcHJvY2VzcyBhbmQg
d2UKICAgICAvLyBtYWtlIHRoaXMgbmV3IG5ldHdvcmsgcHJvY2VzcyBsYXVuY2ggY3Jhc2ggb24g
c3RhcnR1cC4KLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAg
ICBbcHJvY2Vzc1Bvb2wgX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGlu
Z107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tNb25pdG9y
V2ViQ29udGVudENyYXNoTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CiAgICAgW3dl
YlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0gYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCmluZGV4IGI3ZWQ5
OTkzOWZkNTlmMjI4YTdlOGJkNzQ5NzEyZjUzNjYwMTU2MTYuLjE4MTkxMzFjOWEwZmViMzBiMWEy
ZjBjZmNkODdiZjIwNDVlYmIzZjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQpAQCAtODg5LDkgKzg4OSw5IEBAIHZvaWQgZG93bmxv
YWRBdFJhdGUoZG91YmxlIGRlc2lyZWRLYnBzLCB1bnNpZ25lZCBzcGVlZE11bHRpcGxpZXIsIEFw
cFJldHVybnNUb0ZvCiAgICAgcmVjZWl2ZWREYXRhID0gZmFsc2U7CiAgICAgVXRpbDo6cnVuKCZy
ZWNlaXZlZERhdGEpOwogICAgIC8vIFN0YXJ0IHRoZSBEb3dubG9hZE1vbml0b3IncyB0aW1lci4K
LSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJ
c0JhY2tncm91bmQ6WUVTXTsKKyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURh
dGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpZRVNdOwogICAgIGlmIChyZXR1cm5U
b0ZvcmVncm91bmQgPT0gQXBwUmV0dXJuc1RvRm9yZWdyb3VuZDo6WWVzKQotICAgICAgICBbW3dl
YlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91
bmQ6Tk9dOworICAgICAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9y
ZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpOT107CiAgICAgZGlkQ2FuY2VsID0gZmFsc2U7
CiAgICAgVXRpbDo6cnVuKCZkaWRDYW5jZWwpOwogICAgIHRlcm1pbmF0ZVNlcnZlciA9IHRydWU7
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNo
ZWNrcG9pbnRXQUwubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lE
QkNoZWNrcG9pbnRXQUwubW0KaW5kZXggNWNkN2FiZGEwMWQxOTc0N2RjZWQ0NWFiZWU5OWVjYjFj
MTRkNjE2MC4uZDc3YTZmZDk4NzllNDNmNzAxMWRkYWY5MmMzYTc5N2YzZmMxMzczNCAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50
V0FMLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hl
Y2twb2ludFdBTC5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vz
c1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTg2LDcg
Kzg3LDcgQEAgVEVTVChJbmRleGVkREIsIENoZWNrcG9pbnRzV0FMQXV0b21hdGljYWxseSkKICAg
ICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0
TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1
cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFu
ZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwog
CiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJh
dGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCmluZGV4IGM4
YWYxZDI0M2M0ZmViNThhYzk4NGRhZjE0ZDgxNTMxYTdjYzNjNzMuLmJiZjFhMTUyMTVkYzFmZDI4
ZGZkZGI5ZTM0MWI2NGY5YzAwOGY0YzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQpAQCAtMzAsNiAr
MzAsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1w
b3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJL
aXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJbmRleGVkREIs
IERlbGV0ZVJlY292ZXJ5KQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBj
b25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGlu
aXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3Jp
cHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0g
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IHRoZSBpbmNvbnNpc3RlbnQgZGF0YWJh
c2UgZmlsZXMgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeQogICAgIE5TVVJMICp1cmwxID0gW1tO
U0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklEQkRlbGV0ZVJlY292ZXJ5IiB3
aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNv
dXJjZXMiXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbQppbmRleCA5NWNjYTBjZTI4MTZmZjFhNmE0
NTVhZDBiZDJjOGE0YWE0ZjI3ZmVkLi44OGE1M2Y2MWQ5ZDk4MjY1N2I5NjVlZjhhNmNlYmE3OTFl
ZmYxNzU1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0lEQkluZGV4VXBncmFkZVRvVjIubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1w
b3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1Vz
ZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdD
b25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9y
ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9f
V0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5
bGVTaGVldC5oPgpAQCAtNTgsNyArNTksNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhVcGdyYWRl
VG9WMikKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAg
W1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhh
bmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5jb25zaXN0ZW50IGRhdGFiYXNlIGZpbGVzIHRv
IHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFp
bkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJbmRleFVwZ3JhZGUiIHdpdGhFeHRlbnNpb246QCJz
cWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9y
ZUluZm9VcGdyYWRlVG9WMi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KaW5kZXggZmZhNWE3ODc4YTQ3MzJi
OGVjMjQ1YzkwNTNmZDE3ZWU1OTU2ZmEzZC4uNDAzZTBmZmE4MjEyMzQ1MWM0NjZmZWVjYzMyNGY5
YzZlNzYxZDQzZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1t
CkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8
V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJL
aXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNp
bXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtNTcsNyArNTgsNyBAQCBURVNU
KEluZGV4ZWREQiwgSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIpCiAgICAgUmV0YWluUHRy
PFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2Vy
Q29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkg
bmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIENv
cHkgZGF0YWJhc2UgZmlsZXMgd2l0aCBvbGQgT2JqZWN0U3RvcmVJbmZvIHNjaGVtYSB0byB0aGUg
ZGF0YWJhc2UgZGlyZWN0b3J5LgogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVu
ZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUiIHdpdGhFeHRl
bnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJd
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tCmluZGV4IDY4NzQ1Mjll
YmJmMzc4NTE4ZDkzZTBhMDgyMWY2MzAxMmNmYTZkNWYuLjczMDc3ZWNkZmQzNjViNTI5MDUzZDQ3
Y2JhMmExNGVkMDUxZWQ2ZWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tp
bGwubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1w
b3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5o
PgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpAQCAtOTIsNyArOTMsNyBAQCBURVNUKEluZGV4
ZWREQiwgRGF0YWJhc2VQcm9jZXNzS2lsbCkKICAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAgICAgICBpZiAoIWtpbGxlZERCUHJvY2Vz
cyAmJiBvcGVuUmVxdWVzdFVwZ3JhZGVOZWVkZWQpIHsKICAgICAgICAgICAgIGtpbGxlZERCUHJv
Y2VzcyA9IHRydWU7Ci0gICAgICAgICAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9v
bCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgICAgICAgICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgICAg
ICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbQppbmRleCAxMWY4N2Y4MDM0ZDJiMWI1NWQ3
MjBkZWI3NjVhMzE2ODIxMjBkNzczLi5hOThiZjM4MjViYjFlZDZkNzU5YzA4ZDQ1MzNhZGNiN2Zm
Mzk1ZmQ1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0luZGV4ZWREQkZpbGVOYW1lLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0KQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIFJl
dGFpblB0cjxXS1NjcmlwdE1lc3NhZ2U+IGxhc3RTY3JpcHRNZXNzYWdlOwogCiBAZW5kCiAKLXN0
YXRpYyB2b2lkIHJ1blRlc3QoKQorc3RhdGljIHZvaWQgcnVuVGVzdChib29sIG9sZEZpbGVTaG91
bGRFeGlzdCA9IHRydWUpCiB7CiAgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbW0luZGV4ZWRE
QkZpbGVOYW1lTWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKICAgICBhdXRvIGNvbmZpZ3Vy
YXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwpA
QCAtODcsNyArODcsNyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KCkKICAgICBOU1VSTCAqb2xkVmVy
c2lvbk9yaWdpbkRpcmVjdG9yeVVSTCA9IFtvbGRWZXJzaW9uRGlyZWN0b3J5VVJMIFVSTEJ5QXBw
ZW5kaW5nUGF0aENvbXBvbmVudDogQCJmaWxlX18wIl07CiAgICAgTlNVUkwgKm5ld1ZlcnNpb25P
cmlnaW5EaXJlY3RvcnlVUkwgPSBbbmV3VmVyc2lvbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGlu
Z1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJdOwogICAgIE5TVVJMICpvbGRWZXJzaW9uVW51c2Vk
RGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCBVUkxC
eUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6dW51c2VkRGF0YWJhc2VOYW1lXTsKLSAgICBFWFBFQ1Rf
VFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6b2xk
VmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5VVJMLnBhdGhdKTsKKyAgICBFWFBFQ1RfVFJV
RShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6b2xkVmVy
c2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5VVJMLnBhdGhdID09IG9sZEZpbGVTaG91bGRFeGlz
dCk7CiAgICAgCiAgICAgLy8gRm9yIGRhdGFiYXNlIHRoYXQgaXMgb3BlbmVkIGFmdGVyIHVwZ3Jh
ZGUsIGl0cyBmaWxlIHNob3VsZCBvbmx5IGJlIGluIHYxLgogICAgIE5TVVJMICpvbGRWZXJzaW9u
RXhpc3RpbmdEYXRhYmFzZURpcmVjdG9yeVVSTCA9IFtvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5
VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDogZXhpc3RpbmdEYXRhYmFzZU5hbWVdOwpA
QCAtMTU0LDcgKzE1NCw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZURpcmVjdG9yaWVzKFN0cmluZyB0
ZXN0TmFtZSkKIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJGaWxlTmFtZSkKIHsKICAgICBjcmVh
dGVEaXJlY3Rvcmllcygibm9uZSIpOwotICAgIHJ1blRlc3QoKTsKKyAgICBydW5UZXN0KGZhbHNl
KTsKIH0KIAogVEVTVChJbmRleGVkREIsIEluZGV4ZWREQkZpbGVOYW1lVjApCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJv
Y2Vzcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERC
TXVsdGlQcm9jZXNzLm1tCmluZGV4IDdmNjI2NDVkOTk2MGVkZTk2MGMwMDFjMjcyYjY1MDM5Mzkw
MTE2MzIuLjZmNjdkYzI3ZWRjM2QyNzQ1YjE3MGU0ODJiY2Q5MGU4NDk0Y2I5NWEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQ
cm9jZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5k
ZXhlZERCTXVsdGlQcm9jZXNzLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxXZWJLaXQv
V0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2Vi
S2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CiAjaW1wb3J0IDx3dGYvRGVxdWUuaD4KQEAgLTY5LDcg
KzcwLDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQk11bHRpUHJvY2VzcykKICAgICBSZXRh
aW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tX
S1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9u
IHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5n
ZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnBy
b2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAg
UmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpj
b25maWd1cmF0aW9uLmdldCgpXSk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCmluZGV4IGIz
MmNlNGE1ZjczODYzYWVkZGNiOTE5MGI1YjQzNzBlMzc0NDNiNWUuLmQ2MjIwMzIyZTQ3OGQxZGFj
NzhmMDY5NjdjM2I2NDNiZmQ2MmY5YmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQpAQCAt
NzgsNyArNzgsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCUGVyc2lzdGVuY2UpCiAgICAg
d2ViVmlldyA9IG5pbDsKIAogICAgIC8vIFRlcm1pbmF0ZSB0aGUgbmV0d29yayBwcm9jZXNzCi0g
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBNYWtlIGEgbmV3IHdlYiB2aWV3IHRvIGZpbmlz
aCB0aGUgdGVzdAogICAgIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOwpAQCAtMjY4LDcgKzI2OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRl
eGVkREJUaGlyZFBhcnR5RnJhbWVIYXNBY2Nlc3MpCiAKICAgICB3ZWJWaWV3ID0gbmlsOwogICAg
IHNlY29uZFdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBUaGly
ZC1wYXJ0eSBJREIgc3RvcmFnZSBpcyBzdG9yZWQgaW4gdGhlIG1lbW9yeSBvZiBuZXR3b3JrIHBy
b2Nlc3MuCiAgICAgYXV0byB0aGlyZFdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246
Y29uZmlndXJhdGlvbi5nZXQoKV0pOwpAQCAtMzg1LDcgKzM4NSw3IEBAIFRFU1QoSW5kZXhlZERC
LCBJbmRleGVkREJUaGlyZFBhcnR5V29ya2VySGFzQWNjZXNzKQogCiAgICAgd2ViVmlldyA9IG5p
bDsKICAgICBzZWNvbmRXZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnBy
b2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAg
YXV0byB0aGlyZFdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlv
bi5nZXQoKV0pOwogICAgIGxvYWRUZXN0UGFnZUluV2ViVmlldyh0aGlyZFdlYlZpZXcuZ2V0KCks
IEAiZGF0YWJhc2UgaXMgY3JlYXRlZCIpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50
bHkubW0KaW5kZXggOGVjNjVmMGEzYmE5MzczNmZkYjRmOWRkZmVmNzVjZTYwMDA1ZmQwZC4uNTEw
YjI0ZjU2OWQyMmJkNDBhN2FkYmUyNWVjZmQwZWNmYzhhYzcyNiAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRs
eS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QlN1c3BlbmRJbW1pbmVudGx5Lm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxXZWJLaXQv
V0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29u
dHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9u
UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTg4LDggKzg5
LDggQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5KQogCiAgICAg
cnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiQ29udGludWUiKTsKIAotICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHldOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1By
b2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3Rv
cmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVz
dW1lXTsKIAogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkV4cGVjdGVkIEFib3J0IEZvciBT
dXNwZW5zaW9uIik7CiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiRXhwZWN0ZWQgU3VjY2Vz
cyBBZnRlciBSZXN1bWUiKTsKQEAgLTE1OCw4ICsxNTksOCBAQCBURVNUKEluZGV4ZWREQiwgU3Vz
cGVuZEltbWluZW50bHlGb3JUaGlyZFBhcnR5RGF0YWJhc2VzKQogICAgIFt3ZWJWaWV3IGxvYWRI
VE1MU3RyaW5nOm1haW5GcmFtZVN0cmluZyBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAi
aHR0cDovL3dlYmtpdC5vcmciXV07CiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiZGF0YWJh
c2UgaXMgY3JlYXRlZCIpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wg
X3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07Ci0gICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07Cisg
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9j
ZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJz
aXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgcnVuVGVz
dEFuZENoZWNrUmVzdWx0KEAidHJhbnNhY3Rpb24gaXMgY29tcGxldGVkIik7CiB9CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBG
aWxlU2l6ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhl
ZERCVGVtcEZpbGVTaXplLm1tCmluZGV4IDUzNjU0MWUzYjBlNWNkYTNhM2I1NTFjMWU4MWU5NjNm
NTkyYWViMmYuLmU3Yjk5MjI4Y2U4NzZlNDQ3ZTY0NzgyZWY5ZDg3ZjI1YWRjOWI5ZmEgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVt
cEZpbGVTaXplLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCkBAIC05NSw3ICs5NSw3IEBAIFRFU1QoSW5kZXhlZERC
LCBJbmRleGVkREJUZW1wRmlsZVNpemUpCiAKICAgICAvLyBUZXJtaW5hdGUgbmV0d29yayBwcm9j
ZXNzIHRvIGtlZXAgV0FMIG9uIGRpc2suCiAgICAgd2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdl
cl0gZmlsZUV4aXN0c0F0UGF0aDp3YWxGaWxlUGF0aC5nZXQoKS5wYXRoXSk7CiAgICAgUmV0YWlu
UHRyPE5TRGljdGlvbmFyeT4gZmlsZUF0dHJpYnV0ZXMgPSBbW05TRmlsZU1hbmFnZXIgZGVmYXVs
dE1hbmFnZXJdIGF0dHJpYnV0ZXNPZkl0ZW1BdFBhdGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aCBl
cnJvcjpuaWxdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KaW5kZXggNDEzM2VlN2Iz
ZGFlNDNlYzIwNDljZmZjMDYzYzBlNDI5YzE3YzVlZi4uNWY3OTE5MDk0M2M3NzFlOWQ5ZTQ0MmEw
ZGEyNjZmZjlhMDNiYTJmMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCkBAIC0z
MSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1dlYnBhZ2VQcmVmZXJlbmNlc1ByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2Vi
S2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAj
aW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTEwOSw3ICsxMTAsNyBAQCBU
RVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlUHJvY2Vzc0NyYXNoZXMpCiAgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAgIEVYUEVDVF9XS19T
VFJFUShAInNlc3Npb246c3RvcmFnZSIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7CiAKLSAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKQEAg
LTE2Miw3ICsxNjMsNyBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlUHJvY2Vzc1N1c3Bl
bmRzKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdl
KTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJ2YWx1ZSIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5
XSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNw
ZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9y
ZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKIAogICAgIHJlYWR5
VG9Db250aW51ZSA9IGZhbHNlOwogICAgIFt3ZWJWaWV3MSBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ3
aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2tleScsICduZXdWYWx1ZScpIiBjb21wbGV0aW9u
SGFuZGxlcjpeKGlkLCBOU0Vycm9yICopIHsKQEAgLTE3Nyw3ICsxNzgsNyBAQCBURVNUKFdLV2Vi
VmlldywgTG9jYWxTdG9yYWdlUHJvY2Vzc1N1c3BlbmRzKQogICAgIH1dOwogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0NvbnRpbnVlKTsKICAgICAKLSAgICBbcHJvY2Vzc1Bv
b2wuZ2V0KCkgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW2NvbmZpZ3VyYXRp
b24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsK
IAogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCmluZGV4IGU2
MGY4ODAyNWQwOTM3ODlmNjk1NjBkOWI5MmIyODJmMDcxMzBhOGQuLjBlMjFmOTA5NTAwMTRmNmM0
OTBiMGViOGU0NjFlYzRiYTg1MGJiODEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQpAQCAtMjgsNyArMjgsNyBA
QAogI2ltcG9ydCAiSFRUUFNlcnZlci5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2lt
cG9ydCAiVXRpbGl0aWVzLmgiCi0jaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0
IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0
Zi9WZWN0b3IuaD4KQEAgLTM3LDE0ICszNywxNCBAQCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nl
c3NFbnRpdGxlbWVudHMpCiB7CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29u
ZmlndXJhdGlvbjpbW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVs
ZWFzZV1dKTsKICAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJz
aW1wbGUiXTsKLSAgICBXS1Byb2Nlc3NQb29sICpwb29sID0gW3dlYlZpZXcgY29uZmlndXJhdGlv
bl0ucHJvY2Vzc1Bvb2w7Ci0gICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9IFtwb29sIF9uZXR3b3Jr
UHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAImNvbS5hcHBsZS5yb290bGVzcy5zdG9y
YWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94Il07CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlICpz
dG9yZSA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmU7CisgICAgYm9v
bCBoYXNFbnRpdGxlbWVudCA9IFtzdG9yZSBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZv
clRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Muc3RvcmFnZS5XZWJLaXROZXR3b3JraW5nU2Fu
ZGJveCJdOwogI2lmIFBMQVRGT1JNKE1BQykgJiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKICAg
ICBFWFBFQ1RfVFJVRShoYXNFbnRpdGxlbWVudCk7CiAjZWxzZQogICAgIEVYUEVDVF9GQUxTRSho
YXNFbnRpdGxlbWVudCk7CiAjZW5kaWYKLSAgICBFWFBFQ1RfRkFMU0UoW3Bvb2wgX25ldHdvcmtQ
cm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKFtzdG9yZSBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJdKTsKIH0KIAogVEVTVChXZWJLaXQsIEhUVFBSZWZl
cmVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9O
ZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3Rl
bnREYXRhU3RvcmUubW0KaW5kZXggNjA5OGU4ZGFkMjUyZTU5ZWM0OTEyNTBiNDIxNmQzY2QwOTM2
ZThmNy4uMmY4YTJlMzNmZTg3MDNiYWIyZDhlMDUxMDgzMmJlY2Q5ZDQ4OTM0YiAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0Ny
YXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3Jl
Lm1tCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrUmVjb3ZlcnlBZnRlckNyYXNo
KFdLV2Vic2l0ZURhdGFTdG9yZSAqZGF0YVN0b3JlKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwogCi0gICAgW1t3ZWJWaWV3IGNvbmZpZ3Vy
YXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW1t3ZWJW
aWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRo
VVJMOnNpbXBsZTJdXTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNz
U3dhcE9uTmF2aWdhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KaW5kZXggOTVkYzlkOThkZjEzYjA3MDVlMDgx
N2QwNTg3MjY1MTIwYzE4OGQyMy4uZGYzMjBkNjRkYWRiZGQxZWUyODNmODY1YzE0NDIzZjNhYzU1
NjRiZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Q
cm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCkBAIC01Mzg1LDcgKzUzODUs
NyBAQCBURVNUKFByb2Nlc3NTd2FwLCBVc2VQcmV3YXJtZWRQcm9jZXNzQWZ0ZXJUZXJtaW5hdGlu
Z05ldHdvcmtQcm9jZXNzKQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3Ao
MSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBb
d2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MiA9IGFkb3B0TlMoW1tXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJh
dGlvbjp3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIFt3ZWJWaWV3MiBzZXROYXZp
Z2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Lm1tCmluZGV4IDBlMTBjMzRlZWM4MmM2ZjY1OTJiYjdjNDI3NGQwZTQ1NWVhZjExZTguLmEzYWJh
MjMxYTkzYjNkNWYwMGExOTNjNDdjMjc2Nzg2NGIzNTA1NWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MubW0KQEAgLTcxOSw3ICs3MTksNyBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MsIE5ldHdvcmtQcm9jZXNzUmVzdGFydCkKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNw
aW5SdW5Mb29wKDEpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRl
RGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXcy
ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAt
NzUyLDcgKzc1Miw3IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTmV0d29ya1Byb2Nl
c3NSZXN0YXJ0KQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAK
LSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzMgPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkBAIC0xNTU4LDEwICsxNTU4LDgg
QEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBNaWdyYXRlRGF0YUZyb21NaXNzaW5nVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdFNhbWVTaXQKIAogVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LCBDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sKQogeworICAgIE5TVVJMICpp
dHBSb290VVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNUZW1wb3JhcnlEaXJlY3Rvcnko
KSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJDYW5BY2Nlc3NEYXRhU3VtbWFyeVdp
dGhOb1Byb2Nlc3NQb29sVGVzdCJdIGlzRGlyZWN0b3J5OllFU107CiAgICAgYXV0byBkZWZhdWx0
RmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07Ci0gICAgX1dLV2Vi
c2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19X
S1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOwotICAgIGF1
dG8gKmRhdGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29u
ZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07Ci0gICAgTlNV
UkwgKml0cFJvb3RVUkwgPSBbW2RhdGFTdG9yZSBfY29uZmlndXJhdGlvbl0gX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NEaXJlY3RvcnldOwogICAgIE5TVVJMICpmaWxlVVJMID0gW2l0cFJvb3RVUkwg
VVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAib2JzZXJ2YXRpb25zLmRiIl07CiAgICAgW2Rl
ZmF1bHRGaWxlTWFuYWdlciByZW1vdmVJdGVtQXRQYXRoOml0cFJvb3RVUkwucGF0aCBlcnJvcjpu
aWxdOwogICAgIEVYUEVDVF9GQUxTRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBh
dGg6aXRwUm9vdFVSTC5wYXRoXSk7CkBAIC0xNTcyLDYgKzE1NzAsMTAgQEAgVEVTVChSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLCBDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sKQog
ICAgIEVYUEVDVF9UUlVFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpuZXdG
aWxlVVJMLnBhdGhdKTsKICAgICBbZGVmYXVsdEZpbGVNYW5hZ2VyIGNvcHlJdGVtQXRQYXRoOm5l
d0ZpbGVVUkwucGF0aCB0b1BhdGg6ZmlsZVVSTC5wYXRoIGVycm9yOm5pbF07CiAgICAgRVhQRUNU
X1RSVUUoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOmZpbGVVUkwucGF0aF0p
OworCisgICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKmRhdGFTdG9yZUNvbmZp
Z3VyYXRpb24gPSBbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIG5ld10gYXV0b3Jl
bGVhc2VdOworICAgIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uX3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnkgPSBpdHBSb290VVJMOworICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtbW1dLV2Vi
c2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25m
aWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CiAgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKIAogICAgIHN0YXRpYyBib29sIGRvbmVGbGFnID0gZmFs
c2U7CkBAIC0xNjMzLDEyICsxNjM1LDEyIEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywg
U3RvcmVTdXNwZW5zaW9uKQogICAgIFt3ZWJWaWV3MiBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2
aWdhdGlvbl07CiAKICAgICBkb25lRmxhZyA9IGZhbHNlOwotICAgIFtzaGFyZWRQcm9jZXNzUG9v
bCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeeworICAgIFtkYXRhU3RvcmUx
IF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOl57CiAgICAgICAgIGRvbmVGbGFn
ID0gdHJ1ZTsKICAgICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFn
KTsKIAotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1l
XTsKKyAgICBbZGF0YVN0b3JlMSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIH0KIAog
QGludGVyZmFjZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2NoZW1lSGFuZGxlciA6IE5TT2JqZWN0
IDxXS1VSTFNjaGVtZUhhbmRsZXI+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCmluZGV4IDM0YTRmNWM1
MzhiOWIwZTlmY2IwNTA3MmIxNzAyODhlOWU0ZTlmOGYuLjJmOGUzNGRiYTZkYTQ3MjM1NjU1ZmYw
ZGIyYWRjYTFiZjhjNTY3MjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCkBAIC01NTgsNyArNTU4
LDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgVXNlckFnZW50T3ZlcnJpZGUpCiAKICAgICBjb25m
aWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRd
KTsKIAotICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1NXVXNlckFnZW50TWVzc2FnZUhh
bmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNzYWdlOkAiTWVzc2FnZSBmcm9tIHdvcmtl
cjogQmFyIEN1c3RvbSBVc2VyQWdlbnQiXSk7CisgICAgbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5T
KFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhFeHBlY3RlZE1lc3Nh
Z2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBGb28gQ3VzdG9tIFVzZXJBZ2VudCJdKTsKICAgICBb
W2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFu
ZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAic3ciXTsKIAogICAgIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwpAQCAtNjMzLDgg
KzYzMyw2IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIENhY2hlU3RvcmFnZVJlc3RvcmVGcm9tRGlz
aykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxz
ZTsKIAotICAgIFtXS1dlYnNpdGVEYXRhU3RvcmUgX2RlbGV0ZURlZmF1bHREYXRhU3RvcmVGb3JU
ZXN0aW5nXTsKLQogICAgIFNlcnZpY2VXb3JrZXJUQ1BTZXJ2ZXIgc2VydmVyKHsKICAgICAgICAg
eyAidGV4dC9odG1sIiwgbWFpbkNhY2hlU3RvcmFnZUJ5dGVzIH0KICAgICB9LCB7CkBAIC05ODIs
NiArOTgwLDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVh
dGlvbikKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0
aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAg
ICBzZXRDb25maWd1cmF0aW9uSW5qZWN0ZWRCdW5kbGVQYXRoKGNvbmZpZ3VyYXRpb24uZ2V0KCkp
OworICAgIFJldGFpblB0cjxXS1Byb2Nlc3NQb29sPiBvcmlnaW5hbFByb2Nlc3NQb29sID0gY29u
ZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbDsKIAogICAgIGRvbmUgPSBmYWxzZTsKIApAQCAt
MTAzNSw3ICsxMDM0LDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU2VydmljZVdvcmtlclByb2Nl
c3NDcmVhdGlvbikKICAgICBkb25lID0gZmFsc2U7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBs
b2FkaW5nIHRoZSBzaW1wbGUgcGFnZSBkaWQgbm90IHN0YXJ0IHRoZSBzZXJ2aWNlIHdvcmtlciBw
cm9jZXNzLgotICAgIEVYUEVDVF9FUSgwdSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnBy
b2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUs
IHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclBy
b2Nlc3NDb3VudCk7CiAKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOm5l
d0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBFWFBFQ1RfRVEoMnUsIHdlYlZpZXcuZ2V0KCku
Y29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fd2ViUHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3YXJt
ZWQpOwpAQCAtMTA0Myw5ICsxMDQyLDggQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU2VydmljZVdv
cmtlclByb2Nlc3NDcmVhdGlvbikKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUp
OwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGxvYWRpbmcgdGhp
cyBwYWdlIGRpZCBzdGFydCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vzcy4KICAgICBFWFBFQ1Rf
RVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdv
cmtlclByb2Nlc3NDb3VudCk7Ci0KKyAgICBFWFBFQ1RfRVEoMXUsIG9yaWdpbmFsUHJvY2Vzc1Bv
b2wuZ2V0KCkuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwogICAgIFtbY29uZmlndXJhdGlv
biB3ZWJzaXRlRGF0YVN0b3JlXSByZW1vdmVEYXRhT2ZUeXBlczpbV0tXZWJzaXRlRGF0YVN0b3Jl
IGFsbFdlYnNpdGVEYXRhVHlwZXNdIG1vZGlmaWVkU2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0g
Y29tcGxldGlvbkhhbmRsZXI6XigpIHsKICAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgfV07CkBA
IC0xNjE4LDIxICsxNjE2LDM1IEBAIHN0YXRpYyBzaXplX3QgbGF1bmNoU2VydmljZVdvcmtlclBy
b2Nlc3MoYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBiCiAgICAgcmV0dXJu
IHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fd2ViUHJvY2Vzc0NvdW50
SWdub3JpbmdQcmV3YXJtZWQ7CiB9CiAKLVRFU1QoU2VydmljZVdvcmtlcnMsIE91dE9mQW5kSW5Q
cm9jZXNzU2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMsIE91dE9mUHJvY2Vzc1Nl
cnZpY2VXb3JrZXIpCiB7CiAgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
ID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOwogCiAgICAgRVhQ
RUNUX0VRKDF1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2VzcyghdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcywgIWZpcnN0TG9hZEFib3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNl
V29ya2VycywgSW5Qcm9jZXNzU2VydmljZVdvcmtlcikKK3sKKyAgICBib29sIHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOworICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFu
ayA9IHRydWU7CisKICAgICBFWFBFQ1RfRVEoMnUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNz
KHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7
CiB9CiAKLVRFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGlu
Z1Rocm91Z2hTZXJ2aWNlV29ya2VyKQorVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0Qmxh
bmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaE91dE9mUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCiB7CiAg
ICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKICAgICBib29s
IGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOwogCiAgICAgRVhQRUNUX0VRKDF1LCBsYXVuY2hT
ZXJ2aWNlV29ya2VyUHJvY2VzcyghdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgZmly
c3RMb2FkQWJvdXRCbGFuaykpOworfQorCitURVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRC
bGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoSW5Qcm9jZXNzU2VydmljZVdvcmtlcikKK3sKKyAg
ICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOworICAgIGJvb2wg
Zmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CisKICAgICBFWFBFQ1RfRVEoMnUsIGxhdW5jaFNl
cnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGZpcnN0
TG9hZEFib3V0QmxhbmspKTsKIH0KIApAQCAtMTk0NCwxMSArMTk1NiwxMSBAQCBURVNUKFNlcnZp
Y2VXb3JrZXJzLCBTdXNwZW5kTmV0d29ya1Byb2Nlc3MpCiAKICAgICBFWFBFQ1RfVFJVRShbW05T
RmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0
aF0pOwogCi0gICAgWyB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3Nl
bmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW3dlYlZpZXcuZ2V0
KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxs
U3VzcGVuZEltbWluZW50bHldOwogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRl
ZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnN3REJQYXRoLnBhdGhdKTsKIAotICAgIFsg
d2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nl
c3NEaWRSZXN1bWVdOworICAgIFt3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURh
dGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIFt3ZWJWaWV3IGxv
YWRSZXF1ZXN0OnNlcnZlci5yZXF1ZXN0KCldOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZG9uZSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dLSFRUUENvb2tpZVN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQppbmRleCBhMzVmMDUzNTBhYWI0YjQyZjM2YzQ2
YWVjZGVlZWU2Y2U1NDRlZjg2Li4zMzc2MDkyYTE5NWI1MTJkYTY3YzQ5NmU0NTIxN2I5MTRmZTJh
NTc5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dL
SFRUUENvb2tpZVN0b3JlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KQEAgLTQ3OSw4ICs0NzksNiBAQCBzdGF0aWMgYm9v
bCBmaW5pc2hlZDsKIH0KIEBlbmQKIAotLy8gRklYTUU6IG9uIGlPUywgVUkgcHJvY2VzcyBzaG91
bGQgYmUgdXNpbmcgdGhlIHNhbWUgY29va2llIGZpbGUgYXMgdGhlIG5ldHdvcmsgcHJvY2VzcyBm
b3IgZGVmYXVsdCBzZXNzaW9uLgotI2lmIFBMQVRGT1JNKE1BQykKIGVudW0gY2xhc3MgU2hvdWxk
RW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgeyBObywgWWVzIH07CiB2b2lkIHJ1bldLSFRUUENvb2tp
ZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNo
b3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nKQogewpAQCAtNTg5LDIwICs1ODcsNjYgQEAgVEVT
VChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQb29sV2l0aFByZXdhcm1pbmcpCiAg
ICAgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJv
Y2Vzc1ByZXdhcm1pbmc6Olllcyk7CiB9CiAKLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KIEBp
bnRlcmZhY2UgQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS1VJRGVs
ZWdhdGU+CistIChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTDsKKy0gKE5TU3RyaW5nICopd2Fp
dEZvck1lc3NhZ2U7CiBAZW5kCiAKLUBpbXBsZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVV
SURlbGVnYXRlCitAaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB7
CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfbWVzc2FnZTsKK30KKwogLSAodm9pZCl3ZWJWaWV3
OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6
KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1l
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgogewot
ICAgIEVYUEVDVF9TVFJFUSgiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiLCBtZXNzYWdl
LlVURjhTdHJpbmcpOworICAgIF9tZXNzYWdlID0gbWVzc2FnZTsKICAgICBmaW5pc2hlZCA9IHRy
dWU7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KKworLSAoTlNTdHJpbmcgKil3YWl0Rm9y
TWVzc2FnZQoreworICAgIHdoaWxlICghX21lc3NhZ2UpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgcmV0dXJuIF9tZXNzYWdlLmF1dG9yZWxlYXNlKCk7
Cit9CisKKy0gKE5TU3RyaW5nICopYWxlcnRDb29raWVIVE1MCit7CisgICAgcmV0dXJuIEAiPHNj
cmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBp
ID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ld
LnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3Nj
cmlwdD4iOworfQorCiBAZW5kCiAKK1RFU1QoV2ViS2l0LCBXS0hUVFBDb29raWVTdG9yZU11bHRp
cGxlVmlld3MpCit7CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzEgPSBbW1Rlc3RXS1dlYlZp
ZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcxIHN5bmNocm9ub3VzbHlMb2FkSFRN
TFN0cmluZzpAInN0YXJ0IG5ldHdvcmsgcHJvY2VzcyJdOworCisgICAgTlNIVFRQQ29va2llICpz
ZXNzaW9uQ29va2llID0gW05TSFRUUENvb2tpZSBjb29raWVXaXRoUHJvcGVydGllczpAeworICAg
ICAgICBOU0hUVFBDb29raWVQYXRoOiBAIi8iLAorICAgICAgICBOU0hUVFBDb29raWVOYW1lOiBA
IlNlc3Npb25Db29raWVOYW1lIiwKKyAgICAgICAgTlNIVFRQQ29va2llVmFsdWU6IEAiQ29va2ll
VmFsdWUiLAorICAgICAgICBOU0hUVFBDb29raWVEb21haW46IEAiMTI3LjAuMC4xIiwKKyAgICB9
XTsKKworICAgIF9fYmxvY2sgYm9vbCBzZXRDb29raWVEb25lID0gZmFsc2U7CisgICAgW3dlYlZp
ZXcxLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZS5odHRwQ29va2llU3RvcmUgc2V0Q29v
a2llOnNlc3Npb25Db29raWUgY29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAgc2V0Q29va2ll
RG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZzZXRD
b29raWVEb25lKTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtDaGVja1Nlc3Npb25D
b29raWVVSURlbGVnYXRlIG5ld10pOworICAgIFt3ZWJWaWV3MSBzZXRVSURlbGVnYXRlOmRlbGVn
YXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3MSBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxl
cnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4w
LjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwg
IlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CisKKyAgICBUZXN0V0tXZWJWaWV3ICp3
ZWJWaWV3MiA9IFtbVGVzdFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmll
dzIgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcyIGxvYWRIVE1M
U3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhT
dHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdh
dGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKK30K
KwogVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQb29sRXBoZW1lcmFsU2Vz
c2lvbikKIHsKICAgICBSZXRhaW5QdHI8V0tXZWJzaXRlRGF0YVN0b3JlPiBlcGhlbWVyYWxTdG9y
ZVdpdGhDb29raWVzID0gW1dLV2Vic2l0ZURhdGFTdG9yZSBub25QZXJzaXN0ZW50RGF0YVN0b3Jl
XTsKQEAgLTYyNyw5ICs2NzEsOCBAQCBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJv
Y2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
ZmluaXNoZWQpOwogICAgIGZpbmlzaGVkID0gZmFsc2U7CiAgICAgCi0gICAgTlNTdHJpbmcgKmFs
ZXJ0Q29va2llSFRNTCA9IEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5z
cGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNv
b2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29v
a2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOwotICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5n
OmFsZXJ0Q29va2llSFRNTCBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEy
Ny4wLjAuMSJdXTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKKyAg
ICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNl
VVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBF
Q1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1l
PUNvb2tpZVZhbHVlIik7CiB9CiAKIHN0YXRpYyBib29sIGFyZUNvb2tpZXNFcXVhbChOU0hUVFBD
b29raWUgKmZpcnN0LCBOU0hUVFBDb29raWUgKnNlY29uZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRs
ZXItbGVha3MubW0KaW5kZXggYWM3ZGU0MTUxMmM0NTEzOGVjNWU0YzA5ZTUxMTVkMTZjZDIzYjIy
ZS4uYWMxNjUzNWRmZDkzOTk5ZDJlYzUwZGNmZDcxYzNhNTZkMTEzZWM3YSAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXIt
bGVha3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VS
TFNjaGVtZUhhbmRsZXItbGVha3MubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgPFdlYktp
dC9XS1VSTFNjaGVtZVRhc2tQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29u
ZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3Rm
L1ZlY3Rvci5oPgpAQCAtMTUyLDcgKzE1Myw3IEBAIFRFU1QoVVJMU2NoZW1lSGFuZGxlciwgTGVh
a3MzKQogCiAgICAgcnVuVW50aWxUYXNrc0luRmxpZ2h0KDIpOwogCi0gICAgW3dlYlZpZXcxLmdl
dCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
KyAgICBbd2ViVmlldzEuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBydW5VbnRpbFRhc2tzSW5GbGlnaHQoMCk7CiB9
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNp
dGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCmluZGV4IDkyY2YzYTYxOThh
NWI5ZDE0NTQ0OTA1ZGI5ZTk0OGYxMWM3MjU2ZGUuLmJmOGJkZTgzMWEyODU5YmNmMzQxMzgwNjE4
OGI1OTFmY2FhOWQzYWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1t
CkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vic2l0ZURhdGFTdG9yZUN1c3Rv
bVBhdGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEUKICAgICAvLyBOb3cs
IHdpdGggYnJhbmQgbmV3IFdLV2Vic2l0ZURhdGFTdG9yZXMgcG9pbnRpbmcgYXQgdGhlIHNhbWUg
Y3VzdG9tIGNvb2tpZSBzdG9yYWdlIGxvY2F0aW9uLAogICAgIC8vIGluIG5ld2x5IGZpcmVkIHVw
IE5ldHdvcmtQcm9jZXNzZXMsIHZlcmlmeSB0aGF0IHRoZSBmZXRjaCBhbmQgZGVsZXRlIEFQSXMg
d29yayBhcyBleHBlY3RlZC4KIAotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOworICAgIFtkYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBh
dXRvIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxs
b2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24u
Z2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21EYXRhU3RvcmUgZmV0Y2hEYXRhUmVjb3Jkc09mVHlw
ZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldLV2Vic2l0ZURhdGFUeXBlQ29va2llcywgbmlsXSBj
b21wbGV0aW9uSGFuZGxlcjpeKE5TQXJyYXk8V0tXZWJzaXRlRGF0YVJlY29yZCAqPiAqIHJlY29y
ZHMpIHsKQEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0aWMgdm9pZCBydW5XZWJzaXRlRGF0YVN0b3Jl
Q3VzdG9tUGF0aHMoU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxkRQogICAgIHJl
Y2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKIAotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOworICAgIFtkYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKICAgICBuZXdDdXN0b21EYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3Jl
IGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uLmdldCgpXSk7CiAKICAgICBbbmV3Q3VzdG9tRGF0YVN0b3JlIHJlbW92ZURhdGFPZlR5cGVz
OltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dlYnNpdGVEYXRhVHlwZUNvb2tpZXMsIG5pbF0gbW9k
aWZpZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQYXN0XSBjb21wbGV0aW9uSGFuZGxlcjpeIHsKQEAg
LTUzOSw3ICs1MzksNyBAQCBURVNUKFdlYktpdCwgRG9Mb2FkV2l0aE5vbkRlZmF1bHREYXRhU3Rv
cmVBZnRlclRlcm1pbmF0aW5nTmV0d29ya1Byb2Nlc3MpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS5w
cm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3Q29uZmln
dXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CiAKICAgICByZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxl
IG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0
bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOwogICAgIFt3ZWJW
aWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwpAQCAtODU3LDcgKzg1Nyw3IEBAIFRFU1QoV2ViS2l0
LCBNZWRpYUNhY2hlKQogICAgIEVYUEVDVF9GQUxTRShlcnJvcik7CiAKICAgICBkb25lID0gdHJ1
ZTsKLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKKyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFT
dG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92
ZUl0ZW1BdFBhdGg6cGF0aCBlcnJvcjomZXJyb3JdOwogICAgIEVYUEVDVF9GQUxTRShlcnJvcik7
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDlkMzdjY2Vk
ZGI4MjE1NzQ3NWQ4MWYxMjIwZjQ1NmI4NjRjM2IxNzEuLjYzMzI2ZjY4NTZiYzYwNTlkYzYzNzlm
MmFhNWMwMDUwYTA3ODRhYmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwCkBAIC0xMDYxLDggKzEwNjEsNiBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0
YXRlVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zLCBSZQogCiAg
ICAgcmVzZXRRdW90YSgpOwogCi0gICAgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhwbGF0Zm9ybUNvbnRleHQoKSwgdHJ1ZSk7Ci0KICAg
ICBXS0NvbnRleHRDbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZyhUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpKTsKIAogICAgIFdLQ29udGV4dFNldFVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRl
eHQoKSwgZmFsc2UpOwpAQCAtMzEzNiw3ICszMTM0LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
c2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoYm9vbCBpZ25vcmVzVmlld3BvcnRTY2FsZUxp
bWkKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQogewot
ICAgIFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKHBsYXRmb3JtQ29udGV4dCgpKTsK
KyAgICBXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyh3ZWJzaXRlRGF0
YVN0b3JlKCkpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycygpCkBAIC0zMTY3LDkgKzMxNjUsOCBAQCBQbGF0Zm9ybVdlYlZpZXcqIFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybUNyZWF0ZU90aGVyUGFnZShQbGF0Zm9ybVdlYlZpZXcqIHBhcmVudAogICAg
IHJldHVybiBuZXcgUGxhdGZvcm1XZWJWaWV3KGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpOwogfQog
Ci1XS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0Nv
bnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBjb250ZXh0Q29uZmln
dXJhdGlvbikKK1dLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250
ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmKQogewot
ICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKGNvbnRleHQsIGRlZmF1bHRX
ZWJzaXRlRGF0YVN0b3JlKCkpOwogICAgIHJldHVybiBjb250ZXh0OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409323</attachid>
            <date>2020-09-21 14:59:59 -0700</date>
            <delta_ts>2020-09-21 15:14:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200921145958.patch</filename>
            <type>text/plain</type>
            <size>325115</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRhZGZjMzM1NmEzMzk3NmU4
YmE5Mzk2YmJhOTM0ZThmNGMzODhmM2EuLmYzNGM3MzkxNzdhZjQ3ZTE3YWJlYmZlNTUyYzkyMDlk
MWRkYzI0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzU3IEBACisyMDIwLTA5LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmg6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24pOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Byb2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lv
bik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0
U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVT
dG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3Jl
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRU
UENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0
b3JlOjpzZXRDb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVD
b29raWUpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMp
OgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1
bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0TmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyKToKKyAgICAgICAgKFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpOgorICAgICAgICAoV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRh
U3RvcmUpOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXJUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9z
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOl0pOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKToKKyAgICAgICAgKC1bV0tQcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQ
cm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQ
b29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1Byb2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0
b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAg
KC1bV0tXZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOgorICAgICAg
ICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3Bl
bmQ6XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFT
dG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChfV2ViS2l0Q29v
a2llTWFuYWdlclByaXZhdGU6OmNvb2tpZU1hbmFnZXIgY29uc3QpOgorICAgICAgICAoX1dlYktp
dENvb2tpZU1hbmFnZXJQcml2YXRlOjp+X1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlKToKKyAg
ICAgICAgKHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9nZXRfYWNjZXB0X3BvbGljeSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJf
YWRkX2Nvb2tpZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMp
OgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKHdl
YmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZCk6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21h
dGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXhp
bGlhcnlQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1
cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmcp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmNhbmNlbCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVzcyk6CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAg
ICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1h
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlN
YXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVu
dGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxp
Y2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFBy
b3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94
eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1By
b2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHRO
ZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnRl
cm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVh
dGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkYXRhU3RvcmVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJv
Y2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkpOgorICAgICAgICAoV2ViS2l0
OjphbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQ
cm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJl
Y2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
Q2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29u
bmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9v
bEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNz
UG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVu
dCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdl
clByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29v
a2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVD
aGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0
cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaDoK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRp
dGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVjb25u
ZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JG
cmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9u
T3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZv
clRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bv
b2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENv
bm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9y
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250
ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFs
VVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3Nlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpo
YXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFj
dGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2lu
Z1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xl
YXJDYWNoZWRDcmVkZW50aWFscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9y
VGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJl
c3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpmbHVzaENv
b2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZGlkQ29t
bWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNz
YXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0
YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdv
cmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRTZXJ2aWNlV29ya2VyVGlt
ZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRN
YXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1
ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRz
UHJvY2Vzc2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3Rp
Y3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZG9t
YWluSURFeGlzdHNJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5n
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNl
T25jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRo
ZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFi
YXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9h
ZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JU
ZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9y
YWdlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRl
UmVmZXJyZXJGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQ
YXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9v
bHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1NwZWNp
ZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3RhdGlzdGljc1Rlc3RpbmdD
YWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmbHVzaENvb2tpZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvcldlYlNvY2tldCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFy
Q2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpw
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxT
dG9yYWdlRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0
UXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vz
c0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlh
bGl6ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBcHBCb3VuZERv
bWFpbnNGb3JJVFApOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjp1cGRhdGVC
dW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25J
RE1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmV4aXN0
aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc0Fz
c29jaWF0ZWRQcm9jZXNzUG9vbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdD
b29raWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGlk
Q3JlYXRlTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKToK
KyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3Jz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRp
bmdzKToKKwogMjAyMC0wOS0yMSAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxl
LmNvbT4KIAogICAgICAgICBBbGxvdyBhYm91dDpibGFuayBzdWJmcmFtZSBsb2FkcyBmb3Igbm9u
IGFwcC1ib3VuZCB0b3AgZnJhbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKaW5kZXggZmNlMjM4OTg3YTc4
NTBmMThjOWYzMDZjNTBlOThjZTk4OGQxMjVmZC4uYTI3ZWZkODk4M2E4ZmY3NGEwOWUyYjFiYzI4
YjAzMTYwYmEwNDNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
b29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcApAQCAtMTQ5LDkgKzE0OSwxMiBAQCB2
b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBwb2xpY3ksCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAotdm9p
ZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVy
KG1fcHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7
CisgICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9u
KHNlc3Npb25JRCkpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5j
b29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihIVFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dl
YkNvb2tpZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9X
ZWJDb29raWVNYW5hZ2VyLmgKaW5kZXggY2E3ZjU1ZTg2NmJkYWQ0YjFlMzUyZThmNjQwNTdiYWJj
NDYyODMyZC4uZWI3NDE4MjM1ZjU3MDkzMDM5NjAxOWJlNDQ3MjFkZGMwOWZhOThmNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2ll
TWFuYWdlci5oCkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRDb29raWVz
KFBBTDo6U2Vzc2lvbklELCBjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiYpPiYmKTsKIAogICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpOwotICAgIHZv
aWQgZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmKTsKKyAgICB2b2lkIGdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYpOwogCiAgICAgdm9pZCBzdGFydE9ic2Vydmlu
Z0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQpOwogICAgIHZvaWQgc3RvcE9ic2VydmluZ0Nv
b2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdl
cy5pbgppbmRleCBhY2Q3NTQ0MGQ4M2YzNDY2NTBjOWYzM2I3NWI1ZDVkMDkzNTIxM2JhLi42ZmRm
NTc3MmFhNmFhZTM5NDAyYTlhODlmNTZjODRmN2JkNDM1ODVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFu
YWdlci5tZXNzYWdlcy5pbgpAQCAtMzYsNyArMzYsNyBAQCBtZXNzYWdlcyAtPiBXZWJDb29raWVN
YW5hZ2VyIE5vdFJlZkNvdW50ZWQgewogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVk
U2luY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3lu
YwogCiAgICAgdm9pZCBTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJD
b3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lk
IEdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhU
VFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3Qg
V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAg
dm9pZCBTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KQogICAgIHZvaWQgU3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcAppbmRleCBiZThkOTY2NjJiZTZkY2Q4NWZhM2MzMjkyOWFlMGYwYjVkMTgyMzQzLi43ZjQ3
NzcxMzJkNTI0NzU4MTgyOTgxYWFmMGMxOGI3MmI3YmEzOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ3LDI5ICszNDcsMTkg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRl
YnVnTW9kZShwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAK
LSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAg
IGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lv
bklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0g
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLSAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9y
YWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hl
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFT
dG9yZVBhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAg
ICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5zZXNzaW9uSUQ7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJt
YW5lbnRseShkYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CisgICAgICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25J
RCwgZGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBh
cmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNz
aW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CiAjZW5kaWYKLQorICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBk
YXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1l
dGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1v
dGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMs
IFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKLSAgICBib29sIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQg
PSB0cnVlOwotICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQsIFdURk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
KSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKKyAgICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRh
U3RvcmVQYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQsIFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5KSwgZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdl
clNldC0+YWRkKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8q
IGRlZmF1bHRTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSk7Ci0gICAgYXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNl
c3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29v
a2llIDogcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2ll
cykKLSAgICAgICAgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAg
ICB9CiAKICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygp
KQogICAgICAgICBzdXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNTA1LDgg
KzQ5NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpT
ZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpl
bnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxk
VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXJCYXNlKQog
I2VuZGlmCiB7Ci0gICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpKTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3JrU3RvcmFnZVNl
c3Npb25zLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3
RW50cnkpCiAgICAgICAgIHJldHVybjsKQEAgLTUyMSw3ICs1MDksNyBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJv
b2wgc2hvdWxkVQogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gbWFr
ZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fub25p
Y2FsVVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVByaXZh
dGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAgZWxz
ZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAg
ICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpj
cmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkpOwog
CiAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQSSgp
KSB7CkBAIC01NDQsMjEgKzUzMiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVBY2Nl
cHRQb2xpY3lDaGFuZ2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9saWN5KQogCiBXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lv
bihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNz
aW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0
dXJuICZkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFn
ZVNlc3Npb25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewot
ICAgIGlmICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1
bHROZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vz
c2lvbigpOwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQot
CiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9y
KQogewotICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0
byYgc3RvcmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAg
ICAgICAgIGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCBhYTczMzc3YjczMmY2MTBiODY3OTA1
NmMzN2RmMjhhZWVhMDdhZjgzLi5kYzg2ZjM5Njk3ZmM1MDNlYTRkYmQxYjA2YzMyMjk3NWIxZTY5
ZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5o
CkBAIC0xNzAsNyArMTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0
b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdl
U2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2
b2lkIGVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJik7CkBAIC0zNzUsNyArMzc0LDYgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29u
c3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nl
c3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBAIC01NDQsNyAr
NTQyLDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8
UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3Rv
cmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1h
bmFnZXJTZXQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggOTkwMWM1
Y2I3M2M3NGZlM2RhNGViZjU3YmE4NTEyODZmZGExMDRiZi4uMDJkZGI5MjM0ZTk5OWMzZTZjZGNk
Y2YwYjg3OGI4NzI1ODM2MzI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAK
QEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6
ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IHVpUHJv
Y2Vzc1NES1ZlcnNpb247CiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRl
eHQuZ2V0KCkpOwogI2VuZGlmCi0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVyczsKKyAgICBlbmNvZGVyIDw8IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYgVVNFKFNPVVAp
CiAgICAgZW5jb2RlciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5jb2RlciA8PCBpZ25v
cmVUTFNFcnJvcnM7CkBAIC02OCw5ICs2OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5j
b2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxT
Y2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
Ci0gICAgZW5jb2RlciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxk
RGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAg
IGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFi
bGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTYsMTEgKzExMywxMSBAQCBi
b29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVy
JiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAot
ICAgIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVyczsKLSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwot
ICAgIGlmICghZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9y
PFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBk
ZWNvZGVyID4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0
ZXJzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzID0gV1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJl
c3VsdC5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7
CiAKICNpZiBVU0UoU09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVB
Y2NlcHRQb2xpY3kpKQpAQCAtMTQyLDIwICsxMzksNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJv
YwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNO
b0FjY2VzcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlv
bmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmVzdWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUgPSBXVEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERp
c2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3Vs
ZEVuYWJsZUlUUERhdGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggMTFjYTVhMTk5ZmNmZmU4ODNmZmYwYTJmZjc5ZGZlNDIx
MGQ5ZGFkMS4uNjc0OWRhMGM0YTYzYzIwMjEwNzc4MzU4NDg0NmM5MGQwMTBhMDM0MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtNzEsNyArNzEsNyBAQCBzdHJ1Y3QgTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG5l
dHdvcmtBVFNDb250ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cyBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnM+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAgICAgCiAjaWYgVVNFKFNPVVApCiAg
ICAgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBX
ZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsKQEAgLTg1LDEy
ICs4NSw3IEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAg
VmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIFZlY3RvcjxT
dHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKLSAgICBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBib29sIHNob3VsZERpc2FibGVTZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgYm9v
bCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZSB7IGZhbHNlIH07CisgICAgYm9vbCBzaG91bGRFbmFi
bGVJVFBEYXRhYmFzZSB7IHRydWUgfTsKICAgICBib29sIGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlv
bkRlYnVnTW9kZSB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXggZGE2MzU5
MTI0MjIzZGI5NzAzMGQxZWE3N2JjMDBjZWU1MWZiMDE3ZC4uNTAxMGY5YTg2OTAzOTBkZmZlOWEz
NDRlOTkwNWIyNGU2Njg1YzdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpAQCAtNzgsOSArNzgsNiBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0Nv
Y29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQ
ZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJz
LmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFUU0NvbnRleHQo
cGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMDUsMTEgKzEwMiw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29j
b2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2Fj
aGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7
Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNzOjpzb3VyY2VBcHBsaWNh
dGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9BUFBMSUNBVElPTl9BVURJ
VF9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwv
TmV0d29ya1Byb2Nlc3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQyZGNjOGUzZjliOGYx
NjkyOTk3ZjY3MTkyLi40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5M2UyMjU2YTM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29y
a1Byb2Nlc3NDdXJsLmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGkKIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5l
dHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3Qg
Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBjMjczNmUw
MjZhNTVkM2Q0MDIwZjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0NjIwZjAyYTdkOWU5
ZTg2OWVjODY0OTFiN2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNTUsMTUgKzU1
LDExIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3Rv
cmVTZXNzaW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9u
SGFuZGxlKTsKIAogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nl
c3NDb29raWVTdG9yYWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBh
cmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAg
IGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29v
a2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25J
RCgpKQogICAgICAgICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3RvcmFnZUZyb21J
ZGVudGlmeWluZ0RhdGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmll
cik7CiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNz
aW9uLCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkpLCBXVEZNb3Zl
KHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3Jr
UHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29uc3QgYXV0byYg
Y29va2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0
Q29va2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25J
RCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRl
eCA0MWFmZGNjNjFhZGM1ODNkY2YxOWYyZDQwYWEyODkxZjhhMDEzMjhiLi4wOTNkNTk5NTk2YTY4
ODMwYWYwOTkzZmEzNjgzMWUwYzMyNGJmYmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApAQCAtMTQwLDEx
ICsxNDAsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNldElnbm9yZVRMU0Vycm9y
cyhwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3Jz
KGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0U2hv
dWxkSWdub3JlVExTRXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXggNmQwYzEyOWE3
NDA1MTBkMzg2OTczNzA1YWQwOTJlZjEzMmNjMDc1YS4uMDQ4MTBiM2UxOWJlOTZjYWQxYWQ4MmE0
NGRjZWRiMjZlZjc4MjYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcApAQCAtNDAsMTMgKzQwLDkgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QK
ICAgICBlbmNvZGVyIDw8IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8
IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2ll
U3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2ll
czsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERh
dGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpk
ZWNvZGUoSVBDOjpEZWMKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0
ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY29va2llU3Rv
cmFnZVBhdGhFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4+IHBlbmRpbmdDb29raWVzOwotICAgIGRlY29kZXIgPj4gcGVuZGluZ0Nvb2tpZXM7
Ci0gICAgaWYgKCFwZW5kaW5nQ29va2llcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gV1RGTW92ZSgqcGVuZGluZ0Nvb2tpZXMp
OwotCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBp
bmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VE
aXJlY3Rvcnk7CkBAIC0xMDEsMTQgKzkxLDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAg
ICBpZiAoIWluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIE9wdGlvbmFs
PFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VUZW1wQmxv
YkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIWluZGV4ZWREYXRhYmFzZVRlbXBC
bG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
LmgKaW5kZXggZjI3ZGY0ODk4MDlmMzE5NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQzOS4uZTFiMjMz
NzAxOTlmZTM3MDMxZTlkYzVjMDU3ODE1NTAyMWUzNGQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCkBAIC01MSwxNSArNTEsMTEg
QEAgc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKIAogICAgIFZlY3Rvcjx1aW50
OF90PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXM7CiAgICAgTmV0d29ya1Nlc3Npb25DcmVh
dGlvblBhcmFtZXRlcnMgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAgICAgU3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
OwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKaW5kZXgg
YmMwNzg2NmZiYzM5NjhlNzZjYWE5YTM1NjgxMGM2YTJmYjA5ZGNmZC4uZmY5NTU4OTJiZGEwYjgz
YzIzYTk2YTA4MzllZjNiZDBkOTQ2OWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKQEAgLTQ2LDggKzQ2LDYgQEAgbmFtZXNw
YWNlIEFQSSB7CiBIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0RhdGFTdG9yZSh3
ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQ
b29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQ
cm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENv
b2tpZVN0b3JlKCkKQEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tp
ZVN0b3JlKCkKICAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQo
IW1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9jb29raWVNYW5h
Z2VyUHJveHlPYnNlcnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENv
b2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC04MSwzMyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJv
dW5kQ29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2kKIAogdm9pZCBI
VFRQQ29va2llU3RvcmU6OmNvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8q
IHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiBhbGxDb29raWVzOwotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgICAgICBh
bGxDb29raWVzID0gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwot
ICAgICAgICBhbGxDb29raWVzLmFwcGVuZFZlY3RvcihtX293bmluZ0RhdGFTdG9yZS0+cGVuZGlu
Z0Nvb2tpZXMoKSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIGFsbENvb2tpZXNdICgpIG11dGFibGUgewotICAgICAgICAg
ICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGFsbENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRv
KiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykg
bXV0YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5u
ZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldEFs
bENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11
dGFibGUgewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRv
KiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9w
ZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcih7IH0pOwotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0
Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYgY29va2llcykgbXV0
YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldENvb2tp
ZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUg
ewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtMTE1LDc4ICs5NCwyOSBAQCB2b2lkIEhUVFBD
b29raWVTdG9yZTo6Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0bwogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldENvb2tpZXMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2ll
cywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiBhcHBCb3VuZENvb2tpZXMp
IG11dGFibGUgewotICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nl
c3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vz
c2lvbiBiZWNhdXNlIHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3
b3JrIFByb2Nlc3Mgd2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAg
ICAgICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAg
ICAgICAgICAgICBzZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUp
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9vd25pbmdEYXRh
U3RvcmUtPmFkZFBlbmRpbmdDb29raWUoY29va2llKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tp
ZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
PigpOwotICAgICAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUg
ewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAg
IGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3Mo
KS5jb29raWVNYW5hZ2VyKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVs
ZXRlQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3du
aW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0g
ICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Np
b24pCi0gICAgICAgICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0
b3JlKGNvb2tpZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3Jl
LT5yZW1vdmVQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAg
IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9
IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAg
Y29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgY29va2llLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci0gICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0
YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5h
Z2VyLmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
ZGVsZXRlQWxsQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9v
bEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAg
IGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAg
ICAgICAgICBkZWxldGVDb29raWVzSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNv
b2tpZU1hbmFnZXItPmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpKTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdv
cmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxs
Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBU
aGUgQ29tcGxldGlvbkhhbmRsZXIgc2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbENvb2tpZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xp
Y3kpOwotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFu
YWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
Ci0gICAgY29va2llTWFuYWdlci0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0Rh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFT
dG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdl
ci5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgcG9saWN5LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENv
b2tpZVN0b3JlOjpmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMjI3LDIxICsxNTcsNyBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6
cmVnaXN0ZXJPYnNlcnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCiAKICAgICBtX2Nvb2tpZU1hbmFn
ZXJQcm94eU9ic2VydmVyID0gbWFrZVVuaXF1ZTxBUElXZWJDb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcj4oKnRoaXMpOwogCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wpIHsK
LSAgICAgICAgQVNTRVJUKCFtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMpOwotCi0gICAgICAg
IC8vIExpc3RlbiBmb3IgY29va2llIG5vdGlmaWNhdGlvbnMgaW4gdGhlIFVJUHJvY2VzcyBpbiB0
aGUgbWVhbnRpbWUuCi0gICAgICAgIHN0YXJ0T2JzZXJ2aW5nQ2hhbmdlc1RvRGVmYXVsdFVJUHJv
Y2Vzc0Nvb2tpZVN0b3JlKFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICBjb29raWVzRGlkQ2hhbmdl
KCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIG1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyA9
IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFu
YWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0
b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCkBAIC0yNzYsNDYg
KzE5MiwxMCBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0RpZENoYW5nZSgpCiB2b2lk
IEhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCgpCiB7CiAgICAgbV9vYnNl
cnZlZENvb2tpZU1hbmFnZXJQcm94eS0+dW5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBudWxscHRyOwotCi0gICAgYXV0byogcG9vbCA9
IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25z
KCk7Ci0KLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb2JzZXJ2ZWRD
b29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmbV9vd25p
bmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwogICAgIG1fb2Jz
ZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKLXZv
aWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9u
cygpCi17Ci0gICAgQVNTRVJUKCFtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZp
ZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKFt0aGlzXShX
ZWJQcm9jZXNzUG9vbCYgbmV3UHJvY2Vzc1Bvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0Rh
dGFTdG9yZS0+aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wobmV3UHJvY2Vzc1Bvb2wpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIE5vdyB0aGF0IGFuIGFzc29jaWF0ZWQgcHJvY2Vz
cyBwb29sIGV4aXN0cywgd2UgbmVlZCB0byBmbHVzaCB0aGUgVUkgcHJvY2VzcyBjb29raWUgc3Rv
cmUKLSAgICAgICAgLy8gdG8gbWFrZSBzdXJlIGFueSBjaGFuZ2VzIGFyZSByZWZsZWN0ZWQgd2l0
aGluIHRoZSBuZXcgcHJvY2VzcyBwb29sLgotICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3ND
b29raWVTdG9yZSgpOwotICAgICAgICBuZXdQcm9jZXNzUG9vbC5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotCi0gICAgICAgIGlmIChtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKSB7Ci0gICAg
ICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbmV3UHJvY2Vzc1Bvb2wuc3Vw
cGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAg
ICAgIH0KLSAgICAgICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygp
OwotICAgIH0pOwotfQotCi12b2lkIEhUVFBDb29raWVTdG9yZTo6dW5yZWdpc3RlckZvck5ld1By
b2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAgaWYgKG1fcHJvY2Vzc1Bvb2xDcmVhdGlv
bkxpc3RlbmVySWRlbnRpZmllcikKLSAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJQ
cm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJ
ZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmll
ciA9IDA7Ci19Ci0KICNpZiAhUExBVEZPUk0oQ09DT0EpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Zmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKSB7IH0KIFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+IEhUVFBDb29raWVTdG9yZTo6Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
Q29va2llcygpIHsgcmV0dXJuIHsgfTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCmluZGV4IGQ2MjBhZGRhNGU3Zjg5NDU2NjE4YTNlMjJl
MWJmZDQzNTc3NzViMTkuLmEwNWY0MTQzMGRiMmIyM2Q0MTc4NDA3OWE0ZmI4NmM3NDYwYTc1NDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3Jl
LmgKQEAgLTgzLDkgKzgzLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3Rv
cmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTmV3
UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0KICAgICB2b2lkIGZsdXNoRGVmYXVsdFVJUHJvY2Vz
c0Nvb2tpZVN0b3JlKCk7CiAgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGdldEFs
bERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKICAgICBzdGF0aWMgdm9pZCBz
ZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb25zdCBXZWJDb3JlOjpDb29r
aWUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCmluZGV4
IDU4YzU0NTNmNDg5ODdmNWUxYWZhZmVmMzRjNDMzMzVmMWI0Y2M5OTAuLjY1ZjhiNTNmNWIzZDMw
NWNmMjgwYmE1ZDMwYWFlMzdiMzlhY2Y0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmNwcApAQCAtNDExLDExICs0MTEsNiBAQCB2b2lkIFdLQ29udGV4dFBy
ZWNvbm5lY3RUb1NlcnZlcihXS0NvbnRleHRSZWYsIFdLVVJMUmVmKQogewogfQogCi1XS0Nvb2tp
ZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4
dFJlZikKLXsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0
UmVmKS0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSk7Ci19Ci0K
IFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29u
dGV4dFJlZikKIHsKICAgICByZXR1cm4gV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFT
dG9yZSgpOwpAQCAtNTI3LDEzICs1MjIsNiBAQCB2b2lkIFdLQ29udGV4dFNldEphdmFTY3JpcHRH
YXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLAogICAg
IFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3Rv
clRpbWVyRW5hYmxlZChlbmFibGUpOwogfQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNT
TENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQs
IGJvb2wgYWxsb3dzKQotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6
OnRvSW1wbChjb250ZXh0KS0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQ
bHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAg
ICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVn
SW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoKS5sZWFrUmVmKCkpOwpAQCAtNTc1LDExICs1NjMsNiBA
QCB2b2lkIFdLQ29udGV4dFNldEZvbnRBbGxvd0xpc3QoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYs
IFdLQXJyYXlSZWYgYXJyYXlSZWYpCiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNl
dEZvbnRBbGxvd0xpc3QoV2ViS2l0Ojp0b0ltcGwoYXJyYXlSZWYpKTsKIH0KIAotdm9pZCBXS0Nv
bnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAg
ICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0K
LQogdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYgY29u
dGV4dCkKIHsKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlU2VydmljZVdv
cmtlcnMoKTsKQEAgLTU4Nyw3ICs1NzAsNyBAQCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZp
Y2VXb3JrZXJzKFdLQ29udGV4dFJlZiBjb250ZXh0KQogCiBQcm9jZXNzSUQgV0tDb250ZXh0R2V0
TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewotICAg
IHJldHVybiBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+bmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyKCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1
Z2luKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBkb21haW5SZWYsIFdLU3Ry
aW5nUmVmIG5hbWVSZWYsIFdLQXJyYXlSZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5UmVmIGV4dGVu
c2lvbnNSZWYpCkBAIC02MTksMTIgKzYwMiwxMSBAQCB2b2lkIFdLQ29udGV4dENsZWFyQ3VycmVu
dE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogICAgIFdl
YktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5jbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVz
dGluZygpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcykKK3ZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcyhXS0NvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykK
IHsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFBy
aW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgd2Vic2l0ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdl
YnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0g
ICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktp
dDo6dG9JbXBsKHdlYnNpdGVEYXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmgKaW5kZXggMWQ4ZmFiOGExNDg2YWFkYjQ5NDE0NGI5OGYxMGU5MzYz
OGQwYzVlNi4uMmFiNmVmODZmNTMwZTc3Zjc0Y2JkNWRmNTg2MmFjNGQzMGI3OTg3NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2OCw3ICsxNjgsNiBA
QCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihXS0NvbnRleHRSZWYg
Y29udGV4dCk7CiBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4dEdldFdl
YnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURf
V0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsK
IAogV0tfRVhQT1JUIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0QXBw
bGljYXRpb25DYWNoZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJF
Q0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0
b3JlKTsKLVdLX0VYUE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFu
YWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdLX0VYUE9S
VCBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1hbmFnZXIo
V0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVmIFdLQ29u
dGV4dEdldEljb25EYXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFnZU1hbmFn
ZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNF
TUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAppbmRleCBhMDI1MDEx
ZjcwY2M2NTlmNWZhYTA4YTdkNmNiYjNmZjU2ZWU2YTM4Li5kODM5Y2FjYjI4YmE1NjVkYzk1YTgz
OTNiZmNjYWI5MzhkYWRjYzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0UHJpdmF0ZS5oCkBAIC04MywxMSArODMsOCBAQCBXS19FWFBPUlQgdm9pZCBX
S0NvbnRleHRXYXJtSW5pdGlhbFByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogLy8gQXQg
c29tZSBwb2ludCBpdCBzaG91bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4
dFNldFVzZXNOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1XS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tf
RVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVm
KTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVG
b3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0eXBlZGVmIHZv
aWQgKCpXS0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1JlZiBtZXNzYWdl
TmFtZSk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9u
KFdLQ29udGV4dEludmFsaWRNZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VGdW5jdGlvbik7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNp
dGVEYXRhU3RvcmVSZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmNwcAppbmRleCA5ZGRhNTkxYzk1MTg5YWIwYzI1YWM1NTQ2NmMwYTJi
ZmMzOTI3ZWJjLi5iNzhhOTFlMzNlZGY5ZTI5NGJiNGQ4ZDRjMGRkZjU3Y2U1MDE2YjdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVS
ZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5jcHAKQEAgLTY5LDYgKzY5LDExIEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1dl
YnNpdGVEYXRhU3RvcmVDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihXS1dlYnNpdGVEYXRhU3RvCiAg
ICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRl
KCpXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKSwgc2Vzc2lvbklEKS5sZWFrUmVmKCkpOwog
fQogCit2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpCit7CisgICAgV2ViS2l0Ojp0b0ltcGwoZGF0YVN0
b3JlKS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKK30KKwogdm9pZCBXS1dlYnNpdGVEYXRh
U3RvcmVSZW1vdmVJVFBEYXRhRm9yRG9tYWluKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3Rv
cmVSZWYsIFdLU3RyaW5nUmVmIGhvc3QsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9y
ZVJlbW92ZUlUUERhdGFGb3JEb21haW5GdW5jdGlvbiBjYWxsYmFjaykKIHsKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAppbmRleCBlNzdkMDljMTA3ZDFkYTA3
ODNkMDljMDdlMjgwM2QwODcxMjVlNDhiLi5jM2ZhMWJmM2Y5MjQ4YzJmZTQ5YmUxMjQzOTY0NDEx
ZjgzMWQyYTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dl
YnNpdGVEYXRhU3RvcmVSZWYuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1dlYnNpdGVEYXRhU3RvcmVSZWYuaApAQCAtNTAsNiArNTAsOSBAQCBXS19FWFBPUlQgdm9pZCBX
S1dlYnNpdGVEYXRhU3RvcmVTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldFRl
c3RpbmcoVwogCiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENy
ZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogCitXS19FWFBP
UlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0
ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0
b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9y
ZSk7CisKIFdLX0VYUE9SVCBib29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogV0tf
RVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUpOwog
dHlwZWRlZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0VwaGVtZXJhbEZ1bmN0
aW9uKShib29sIGlzRXBoZW1lcmFsLCB2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQppbmRleCBm
ZjMwOTQ5ODZjMjQzZDA0NzRmMjUyZDM5MWU2Y2NiNzRmMWZlZDViLi5hODAyYjk3YzdiNDE2Zjk2
YmJhNTRmZWJlN2ExZGRkNDM4M2QwYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQpAQCAtNDA2LDI4ICs0MDYsNiBAQCBzdGF0
aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1h
cDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJTdXBwb3J0ZWRQbHVn
aW5zKCk7CiB9CiAKLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCi17Ci0gICAgX3By
b2Nlc3NQb29sLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCi0tICh2b2lkKV9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKLXsKLSAgICBfcHJvY2Vzc1Bvb2wt
PnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0K
LQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQ
cm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFr
ZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgIH0pOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUK
LXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQot
CiAtICh2b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29ya2VycwogewogICAgIF9wcm9jZXNzUG9vbC0+
dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKQEAgLTQzNSwxMiArNDEzLDEyIEBAIHN0YXRpYyBO
U0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0
cmluZywgSGFzaE1hcDxTCiAKIC0gKHZvaWQpX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3M6KEJPT0wpdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcwogewotICAgIF9wcm9j
ZXNzUG9vbC0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MpOwogfQogCiAtIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCiB7Ci0gICAgcmV0
dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CisgICAgcmV0dXJu
IDA7CiB9CiAKIC0gKHBpZF90KV9wcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcgpAQCAtNTYwLDE4
ICs1MzgsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25h
cnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0
Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLS0gKHZvaWQp
X3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAotewotICAgIF9wcm9j
ZXNzUG9vbC0+c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKLX0KLQotLSAo
dm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFs
bG93cwotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBfcHJvY2Vzc1Bvb2wtPnNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlm
Ci19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogLSAoaWQgPF9XS0dlb2xvY2F0aW9uQ29y
ZUxvY2F0aW9uUHJvdmlkZXI+KV9jb3JlTG9jYXRpb25Qcm92aWRlcgogewpAQCAtNjA0LDExICs1
NzAsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnko
Y29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIH0pOwogfQogCi0tIChCT09MKV9u
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxl
bWVudAotewotICAgIHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nKGVudGl0bGVtZW50KTsKLX0KLQogLSAodm9pZClfY2xlYXJQZXJtYW5l
bnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilw
cm90ZWN0aW9uU3BhY2UKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyUGVybWFuZW50Q3JlZGVu
dGlhbHNGb3JQcm90ZWN0aW9uU3BhY2UoV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rp
b25TcGFjZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAppbmRleCA2NzY5MDE1ZTA4NTU4OTk0Y2Q4YTIxOWEx
N2E5YzY4YWRlM2I1MzgzLi5iZjQ4Y2ExYzUyYzIyMTk3MzY4Yjg4MjkwNTA3MjIzZjBmMjA2Y2Qx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNz
UG9vbFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQ
cm9jZXNzUG9vbFByaXZhdGUuaApAQCAtODcsMTAgKzg3LDYgQEAKIC0gKF9XS0Rvd25sb2FkICop
X3Jlc3VtZURvd25sb2FkRnJvbURhdGE6KE5TRGF0YSAqKXJlc3VtZURhdGEgd2Vic2l0ZURhdGFT
dG9yZTooV0tXZWJzaXRlRGF0YVN0b3JlICopZGF0YVN0b3JlICBwYXRoOihOU1N0cmluZyAqKXBh
dGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4g
U2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoaWxlIG5vIHdlYiBjb250ZW50IHByb2Nlc3NlcyBhcmUg
cnVubmluZy4KLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNz
UHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElf
QVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClf
c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9p
ZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCks
IGlvcygxMi4wKSk7CiAKIC8vIFRlc3Qgb25seS4KQEAgLTEyMiwxMyArMTE4LDEwIEBACiAtICh2
b2lkKV9wcmVjb25uZWN0VG9TZXJ2ZXI6KE5TVVJMICopc2VydmVyVVJMIFdLX0FQSV9ERVBSRUNB
VEVEX1dJVEhfUkVQTEFDRU1FTlQoIldLV2ViVmlldy5fcHJlY29ubmVjdFRvU2VydmVyIiwgbWFj
b3MoMTAuMTMuNCwgV0tfTUFDX1RCQSksIGlvcygxMS4zLCBXS19JT1NfVEJBKSk7CiAKIC8vIFRl
c3Qgb25seS4KLS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdv
cmtlcjooQk9PTClhbGxvd3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDEx
LjMpKTsKIC0gKHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3Rp
bmc6KHBpZF90KXBpZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PE5TU3RyaW5n
ICo+ICopKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCks
IGlvcygxMi4yKSk7Ci0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVz
dGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0
LjQpLCBpb3MoMTIuMikpOwogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclBy
b3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBnZXR0ZXI9X2lzQ29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQsIHNldHRl
cj1fc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQ6KSBCT09MIF9jb29raWVTdG9y
YWdlUGFydGl0aW9uaW5nRW5hYmxlZCBXS19BUElfREVQUkVDQVRFRCgiUGFydGl0aW9uZWQgY29v
a2llcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCIsIG1hY29zKDEwLjEyLjMsIDEwLjE0LjQpLCBp
b3MoMTAuMywgMTIuMikpOwotLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9P
TCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwog
CiAvLyBUZXN0IG9ubHkuCiAtICh2b2lkKV9zZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRl
c3RpbmdXaXRoRmlyc3RQYXJ0eTooTlNVUkwgKilmaXJzdFBhcnR5VVJMIHRoaXJkUGFydHk6KE5T
VVJMICopdGhpcmRQYXJ0eVVSTCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbjooQk9PTClzaG91
bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSlj
b21wbGV0aW9uSGFuZGxlciAgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9z
KFdLX0lPU19UQkEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCmluZGV4IDI5OGQ5Y2VjOWU4NGQ4YTUxMjIwNjVj
Yzk5MjMzZWY0ZjBiOTUzODkuLmFlOWM0NTA3NzkwODZjYzFlMzExNGNlMTNmMmQyMTg4ZTc4N2Yx
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2Vic2l0ZURhdGFTdG9yZS5tbQpAQCAtNjE3LDYgKzYxNywxMSBAQCBzdGF0aWMgVmVjdG9yPFdl
YktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRh
dGFSZWNvcgogICAgIH0pOwogfQogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVt
ZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAoreworICAgIHJldHVybiBfd2Vi
c2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoZW50
aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVnYXRlPilfZGVs
ZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdldCgpLmdldCgpOwpAQCAtNjY4LDQgKzY3
MywzMiBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0
ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogI2VuZGlmCiB9CiAKKy0gKHZvaWQpX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfd2Vi
c2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3Rp
bmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0g
eworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworfQorCistICh2b2lkKV9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKK3sKKyAgICBfd2Vic2l0ZURh
dGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGlu
ZygpOworCit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQoreworICAg
IF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKK30KKwor
LSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kCit7Cisg
ICAgX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZChiYWNrZ3JvdW5kKTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgK
aW5kZXggOTkzMjAxMDQ2YjU1MWMzZjI4ZGYyZGMwYTAzNDZkN2JjNzlhYzVmNC4uNDIxNWRiNzQ3
YmEzMjJmYWViOGE0N2UxNjc1YTY1ODM4MTQ3MjYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0
ZS5oCkBAIC04NSw5ICs4NSwxNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dL
V2Vic2l0ZURhdGFTdG9yZUZldGNoT3B0aW9ucykgewogCiAtICh2b2lkKV9yZW5hbWVPcmlnaW46
KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKiluZXdOYW1lIGZvckRhdGFPZlR5cGVzOihOU1Nl
dDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9p
ZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9wZXJ0eSAobnVsbGFi
bGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2Rl
bGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZv
aWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVu
ZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZB
SUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc3lu
dGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBlbmQKIAogTlNfQVNTVU1F
X05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDFlZTczZWJjMGVhMDM2Zjg2YjNmZTk0
NDE0OTA3MmU2YWM0ZGM3NjcuLjc3MDE0OTk4MzZlZTQ0ZjlhY2YwZTI3MGQ3MGM5NWQxNmJlNjc4
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdENvb2tpZU1hbmFnZXIuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlci5oIgogCisjaW5jbHVkZSAiTmV0d29y
a1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIlNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5
cGUuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJL
aXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIgpAQCAtNTYsNiArNTcsMTIgQEAgZW51bSB7CiB9Owog
CiBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKKyAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHkmIGNvb2tpZU1hbmFnZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGRh
dGFNYW5hZ2VyKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERh
dGFTdG9yZShkYXRhTWFuYWdlcikubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7Cisg
ICAgfQorCiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVChkYXRhTWFuYWdlcik7CkBAIC02NCw4ICs3MSw3IEBAIHN0cnVjdCBfV2ViS2l0
Q29va2llTWFuYWdlclByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0
ZSgpCiAgICAgewotICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2ll
T2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CisgICAgICAgIGNvb2tpZU1h
bmFnZXIoKS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsK
ICAgICB9CiAKICAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW5hZ2VyOwpAQCAt
MTM5LDExICsxNDUsOSBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRDb29raWVNYW5hZ2Vy
Q3JlYXRlKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbgogewogICAgIFdlYktpdENv
b2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9lbWl0KG1h
bmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9CisgICAgbWFu
YWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFu
YWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2lnbmFsX2Vt
aXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1h
bmFnZXI7CiB9CiAKQEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsCiAg
ICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vz
c1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIG1hbmFnZXItPnByaXYtPmNv
b2tpZU1hbmFnZXIoKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmlu
Zzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUo
c3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE5Miw4ICsxOTUsNyBAQCB2b2lkIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2Vy
LCBXZWJLaQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VS
KG1hbmFnZXIpKTsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkt
PnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRv
SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgbWFuYWdlci0+
cHJpdi0+Y29va2llTWFuYWdlcigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+
cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgp
IHsgfSk7CiB9CiAKIC8qKgpAQCAtMjI0LDcgKzIyNiw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIEdD
YW5jCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CisgICAgbWFuYWdlci0+cHJpdi0+
Y29va2llTWFuYWdlcigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSBwb2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQo
KSwgdG9XZWJLaXRDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7CiB9CkBAIC0y
NjksMTEgKzI3MSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUoV2Vi
S2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3JldHVybl9pZl9m
YWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFz
a19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAg
Ly8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFi
YXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0
aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3Qg
YXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bv
b2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1
cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RG
TW92ZSh0YXNrKV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENv
b2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tp
ZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9i
b29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIwLDExICszMTgsNyBA
QCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRDb29raWVNYW5h
Z2VyKiBtYW5hZ2VyLCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAog
ICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBj
YW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSBy
ZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdh
cmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVz
dCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9v
bHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2sp
XShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIG1hbmFnZXIt
PnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25J
RCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0
YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAg
R0xpc3QqIGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUg
OiBjb29raWVzKQogICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29r
aWVzTGlzdCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzcyLDcgQEAgdm9p
ZCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2Vy
KiBtYW5hZ2VyLCBTb3VwQ29va2kKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAg
ICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2Fu
Y2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVh
ZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJk
bGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3Qg
dXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xz
ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAg
IG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5kZWxldGVDb29raWUobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUo
dGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJV
RSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDg5YmU1NmFkNzFkNzE1NjkxMmEyNjkxNTMw
NTdkZjUyN2NkZDQ0NjAuLmNmZjAzNTg2ZGY4YTFmYjk2YTYyYTAxN2EzYzQ2ZTVmNDBkZTJkMzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdl
YkNvbnRleHQuY3BwCkBAIC00MDQsNyArNDA0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29u
dGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgcHJpdi0+d2Vic2l0ZURh
dGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcoImxv
Y2FsLXN0b3JhZ2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEo
KSwgbnVsbHB0cikpOwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlKGNvbmZpZ3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRQcmltYXJ5
RGF0YVN0b3JlKHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJz
aXRlRGF0YU1hbmFnZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1l
c3NhZ2VIYW5kbGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKICAg
ICAgICAgLy8gU2luayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRyPFdlYktpdFVz
ZXJNZXNzYWdlPiB1c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRlKFdURk1vdmUo
bWVzc2FnZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTE2MDMsOCArMTYwMiw4
IEBAIHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3ByZWZldGNoX2RucyhXZWJLaXRXZWJDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBjaGFyKiBob3N0CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoaG9zdG5hbWUp
OwogCi0gICAgaWYgKGNvbnRleHQtPnByaXYtPmRuc1ByZWZldGNoZWRIb3N0cy5hZGQoaG9zdG5h
bWUpLmlzTmV3RW50cnkpCi0gICAgICAgIGNvbnRleHQtPnByaXYtPnByb2Nlc3NQb29sLT5zZW5k
VG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWZldGNoRE5T
KFN0cmluZzo6ZnJvbVVURjgoaG9zdG5hbWUpKSk7CisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9y
ZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShjb250ZXh0LT5wcml2LT53
ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5n
Ojpmcm9tVVRGOChob3N0bmFtZSkpLCAwKTsKICAgICBjb250ZXh0LT5wcml2LT5kbnNQcmVmZXRj
aEh5c3RlcmVyaXMuaW1wdWxzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IDRh
YjQ3ZmZmNTkxMWVlYzM3ZTU2YmM1YmJiMzI5ZWJhZWE3ZDM4NjUuLjMwMDZmNGZhZTZjNDNjMjZi
ZjQwODIyYjZkZTg2OGVmMmUwMmNmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0xMzky
LDggKzEzOTIsOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbgogCiAgICAgY29va2llLmh0dHBP
bmx5ID0gKmh0dHBPbmx5OwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5h
Z2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
Ci0gICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCku
c2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CisgICAgV2ViQ29va2llTWFu
YWdlclByb3h5JiBjb29raWVNYW5hZ2VyID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdv
cmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2ll
cyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxs
YmFja10oKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpA
QCAtMTQwOSw4ICsxNDA5LDggQEAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygKIAogICAgIFN0cmlu
ZyBob3N0ID0gYWN0aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2ViQ29va2llTWFu
YWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwg
ZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBXZWJDb29raWVN
YW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkubmV0
d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVD
b29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwg
eyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOwogCiAgICAg
cmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGls
aWFyeVByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5LmgKaW5kZXggNDFjMGEwZmJmNTA2ZWZhMTQwOGJjZWY5YWY4YTkwYjg1YTFhZDA4
YS4uNGYzOThiNTMwZjYwODU3NWM5NjdiODNjNzRmYTJmNDMyOGY2Y2UzYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94eSgpOwogCiAg
ICAgdm9pZCBjb25uZWN0KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdGVybWluYXRlKCk7CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxl
cigpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAppbmRleCBkYmU0NGY5
NTk0MTA1MTEyMTUxMjhkMjlkMjE0ZWVlMDc0YWFmODRjLi40Yzg0NWEwZWM3MjU2NTljZmU3OWNl
YTM1ZDNjYmE5NjY4MzQ2MTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaApA
QCAtNDEsMTEgKzQxLDExIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHk7CiAKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudCBmaW5hbCA6IHB1YmxpYyBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCB7
Ci1wcml2YXRlOgorcHVibGljOgogICAgIHZvaWQgc3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JikgZmluYWw7CiAgICAgdm9pZCBzdG9wTG9hZGluZyhMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYsIExlZ2FjeUN1c3RvbVByb3RvY29sSUQpIGZpbmFs
OwogICAgIHZvaWQgaW52YWxpZGF0ZShMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYp
IGZpbmFsOwotCitwcml2YXRlOgogICAgIEhhc2hNYXA8TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwg
UmV0YWluUHRyPFdLQ3VzdG9tUHJvdG9jb2xMb2FkZXI+PiBtX2xvYWRlck1hcDsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29j
b2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29h
Lm1tCmluZGV4IDc2ZDdhNjQwNDFhMjkxZDVmMjk3MzUxNzZlMzFlYTcwZjVlZDU1NmMuLjEzNjcw
ZTJkODBiMDE4NDcwMzVjMTlkZjg5MjExZmM3NTU1NmM2NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtMTM0LDgg
KzEzNCw5IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKQogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0g
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNldFBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAg
ICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbZW5hYmxlZCA9IHBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkg
eworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZXRQcm9jZXNzU3VwcHJlc3Np
b25FbmFibGVkKGVuYWJsZWQpOworICAgIH0pOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50
ZXIudmFsdWUoKSkKQEAgLTE2Niw4ICsxNjcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0
Zm9ybUluaXRpYWxpemUoKQogICAgIGlmICghW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJE
ZWZhdWx0c10gYm9vbEZvcktleTpAIldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVy
Il0pCiAgICAgICAgIGluc3RhbGxNZW1vcnlQcmVzc3VyZUhhbmRsZXIoKTsKIAotICAgIHNldExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudD4oKSk7Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAh
UExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgaWYgKCFfTUdDYWNoZVZhbGlkKCkpIHsKICAgICAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVV
RV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsKQEAgLTQ5MywyMiArNDkyLDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmEKIAogICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CiAKLSAgICB7Ci0gICAgICAgIGJvb2wgaXNT
YWZhcmkgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc01pbmlCcm93c2VyID0gZmFsc2U7Ci0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpJT1NBcHBs
aWNhdGlvbjo6aXNNb2JpbGVTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNv
cmU6OklPU0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZWxpZiBQTEFURk9STShNQUMp
Ci0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCk7
Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNNaW5p
QnJvd3NlcigpOwotI2VuZGlmCi0gICAgICAgIGlmIChpc1NhZmFyaSB8fCBpc01pbmlCcm93c2Vy
KSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBz
dHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQcm94eURlZmF1bHRzS2V5XSk7Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5odHRwc1Byb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5n
Rm9yS2V5OihOU1N0cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXldKTsKLSAgICAg
ICAgfQotICAgIH0KLQogICAgIHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQgPSBhZG9wdENG
KF9DRk5ldHdvcmtDb3B5QVRTQ29udGV4dCgpKTsKIAogICAgIHBhcmFtZXRlcnMuc2hvdWxkU3Vw
cHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpXZWJLaXRT
dXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlckRlZmF1bHRzS2V5XTsKQEAgLTUyMiwxMiArNTA1
LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKICAgICBOU051bWJlciAqZGF0YWJhc2VFbmFi
bGVkVmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VF
bmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogICAgIGlmIChkYXRhYmFzZUVu
YWJsZWRWYWx1ZSkKICAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9
IGRhdGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIHBhcmFt
ZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZl
cmVuY2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuZW5hYmxl
QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5
OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKV1dOwotCi0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tp
bmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9u
KCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQo
KQpAQCAtNjA2LDExICs1ODUsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzU3VwcHJl
c3Npb25FbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gIW1fdXNlck9ic2VydmFibGVQYWdlQ291
bnRlci52YWx1ZSgpICYmICFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50
ZXIudmFsdWUoKTsKIH0KIAotYm9vbCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKLXsKLSAgICBy
ZXR1cm4gV1RGOjpoYXNFbnRpdGxlbWVudChlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rp
b24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKLX0KLQog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKIGZsb2F0
IFdlYlByb2Nlc3NQb29sOjpkaXNwbGF5QnJpZ2h0bmVzcygpCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAKaW5kZXggYzVkZTRl
N2QwZjU5MTk0ZjQzYTAyM2IwODllMzcyYzU4Y2Y4ZWUwNi4uZjdjZmY4NTJmMGJhNmQwMTU1MTE2
NWRkOGE5ZjdkNTc2M2IwMDdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcApAQCAtNzUsOCArNzUsOCBAQCB2b2lkIERvd25s
b2FkUHJveHk6OmNhbmNlbCgpCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MgPSBtX3By
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCks
IDApOworICAgIGlmIChtX2RhdGFTdG9yZSkKKyAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQ
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1f
ZG93bmxvYWRJRCksIDApOwogfQogCiB2b2lkIERvd25sb2FkUHJveHk6OmludmFsaWRhdGUoKQpA
QCAtMTAzLDE1ICsxMDMsMTMgQEAgV2ViUGFnZVByb3h5KiBEb3dubG9hZFByb3h5OjpvcmlnaW5h
dGluZ1BhZ2UoKSBjb25zdAogI2lmIFBMQVRGT1JNKENPQ09BKQogdm9pZCBEb3dubG9hZFByb3h5
OjpwdWJsaXNoUHJvZ3Jlc3MoY29uc3QgVVJMJiBVUkwpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQ
b29sKQorICAgIGlmICghbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgYm9vbCBj
cmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShV
UkwuZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBo
YW5kbGUpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBj
cmVhdGVkU2FuZGJveEV4dGVuc2lvbik7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9h
ZElELCBVUkwsIGhhbmRsZSksIDApOwotICAgIH0KKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUgaGFuZGxlOworICAgIGJvb2wgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNp
b246OlR5cGU6OlJlYWRXcml0ZSwgaGFuZGxlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRT
YW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbik7CisgICAgbV9kYXRhU3Rv
cmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxp
c2hEb3dubG9hZFByb2dyZXNzKG1fZG93bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKIH0KICNl
bmRpZiAvLyBQTEFURk9STShDT0NPQSkKIApAQCAtMTMxLDExICsxMjksMTAgQEAgdm9pZCBEb3du
bG9hZFByb3h5OjpkaWRTdGFydChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFN0cmluZyYgc3VnZ2UKIAogdm9pZCBEb3dubG9hZFByb3h5OjpkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSwgdWludDY0X3QgY2hhbGxlbmdlSUQpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29s
KQorICAgIGlmICghbV9wcm9jZXNzUG9vbCB8fCAhbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlUHJveHk6OmNyZWF0ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KSwgY2hhbGxlbmdlSUQsIG1ha2VSZWYoKm1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtpbmdQcm9jZXNz
Q29ubmVjdGlvbigpKSwgbnVsbHB0cik7Ci0KKyAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlUHJveHkgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShh
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX2RhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCkpLCBudWxscHRyKTsKICAgICBtX3Byb2Nl
c3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSgqdGhpcywgYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5nZXQoKSk7CiB9CiAKQEAgLTE0
NiwxNSArMTQzLDEwIEBAIHZvaWQgRG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291
cmNlUmVxdWVzdCYmIHByb3Bvc2VkUmVxdWVzdCwgY29uc3QgUmVzCiAKICAgICBtX3Byb2Nlc3NQ
b29sLT5kb3dubG9hZENsaWVudCgpLndpbGxTZW5kUmVxdWVzdCgqdGhpcywgV1RGTW92ZShwcm9w
b3NlZFJlcXVlc3QpLCByZWRpcmVjdFJlc3BvbnNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpXShSZXNvdXJjZVJlcXVlc3QmJiBuZXdSZXF1ZXN0KSB7CiAgICAgICAgIG1f
cmVkaXJlY3RDaGFpbi5hcHBlbmQobmV3UmVxdWVzdC51cmwoKSk7Ci0KLSAgICAgICAgaWYgKCFw
cm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sKQorICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMt
Pm1fZGF0YVN0b3JlKQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8qIG5ldHdv
cmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpOwotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzUHJveHkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3NQcm94eS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93
bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOworICAgICAgICBhdXRvJiBuZXR3b3JrUHJvY2Vzc1By
b3h5ID0gcHJvdGVjdGVkVGhpcy0+bV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCk7CisgICAg
ICAgIG5ldHdvcmtQcm9jZXNzUHJveHkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNv
bnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVx
dWVzdCksIDApOwogICAgIH0pOwogfQogCkBAIC0xNzksMTYgKzE3MSwxNCBAQCB2b2lkIERvd25s
b2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMoRG93
bmxvYWRJRCBkb3dubAogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzYW5p
dGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKSwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxvYWRJRCA9IGRvd25sb2FkSURdIChBbGxvd092
ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CisgICAgbV9wcm9j
ZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRG
aWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmls
ZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBkb3dubG9hZElEXSAoQWxsb3dPdmVyd3JpdGUgYWxsb3dPdmVyd3JpdGUsIFN0cmlu
ZyBkZXN0aW5hdGlvbikgewogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZTsKICAgICAgICAgaWYgKCFkZXN0aW5hdGlvbi5pc051bGwoKSkKICAg
ICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShkZXN0aW5hdGlvbiwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsK
IAotICAgICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgICAgIGlmICghbV9kYXRhU3RvcmUp
CiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5k
aW5nRG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4
dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDAp
OworICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihk
b3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVy
d3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDApOwogICAgIH0pOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5j
cHAKaW5kZXggNzZhMDcxNTdiNTkxYWFjZTUwZjE1ZDE1MjVkYmNmYjhjNmE0YmJjOC4uZDc0YThm
YTZjNjRjODg2MzVmOWViNzVjYTczZTcwZmQ5NDZjYTAyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcApAQCAtNDQs
NyArNDQsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIERvd25sb2FkUHJveHlNYXA6OkRvd25s
b2FkUHJveHlNYXAoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJvY2VzcykKLSAgICA6IG1fcHJvY2Vz
cyhtYWtlV2Vha1B0cihwcm9jZXNzKSkKKyAgICA6IG1fcHJvY2Vzcyhwcm9jZXNzKQogI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgICwgbV9zaG91bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJvY2Vzc0hh
c0VudGl0bGVtZW50KCJjb20uYXBwbGUubXVsdGl0YXNraW5nLnN5c3RlbWFwcGFzc2VydGlvbnMi
KSkKICNlbmRpZgpAQCAtNzAsMTQgKzcwLDEyIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxh
dGZvcm1EZXN0cm95KCkKIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVu
dGVyQmFja2dyb3VuZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tn
cm91bmQoKSwgMCk7CisgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpBcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9h
ZFByb3h5TWFwOjphcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKQogewotICAgIGlmICht
X3Byb2Nlc3MpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Mu
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdy
b3VuZCgpLCAwKTsKIH0KIAogRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRl
RG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29s
JiBwcm9jZXNzUG9vbCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJl
cXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmln
aW5hdGluZ1BhZ2UpCkBAIC05MiwxMyArOTAsMTIgQEAgRG93bmxvYWRQcm94eSYgRG93bmxvYWRQ
cm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUK
ICAgICAgICAgbV9kb3dubG9hZFVJQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0
aW9uPihnZXRDdXJyZW50UHJvY2Vzc0lEKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNz
QXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CiAKICAgICAgICAgQVNTRVJUKCFt
X2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
cHJvY2Vzcyk7Ci0gICAgICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVu
aXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCksICJX
ZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29y
a2luZyk7CisgICAgICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1
ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3Byb2Nlc3MucHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktp
dCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5n
KTsKIAogICAgICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyB0
b29rICdXZWJLaXQgZG93bmxvYWRzJyBhc3NlcnRpb25zIGZvciBVSVByb2Nlc3MgYW5kIE5ldHdv
cmtQcm9jZXNzIik7CiAgICAgfQogCi0gICAgbV9wcm9jZXNzLT5hZGRNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRQ
cm94eS0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSwgZG93bmxvYWRQcm94eS5nZXQoKSk7Cisg
ICAgbV9wcm9jZXNzLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxv
YWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsKIAogICAgIHJldHVybiBkb3dubG9hZFByb3h5
OwogfQpAQCAtMTA5LDEyICsxMDYsOSBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmRvd25sb2Fk
RmluaXNoZWQoRG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSkKIAogICAgIFJFTEVBU0VfTE9H
KExvYWRpbmcsICJSZW1vdmluZyBkb3dubG9hZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBE
b3dubG9hZFByb3h5TWFwIiwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhl
IERvd25sb2FkUHJveHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBw
cm9jZXNzIHBvb2wuCi0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIo
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsKLQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250
YWlucyhkb3dubG9hZElEKSk7CiAKLSAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9h
ZElELmRvd25sb2FkSUQoKSk7CisgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElE
LmRvd25sb2FkSUQoKSk7CiAgICAgZG93bmxvYWRQcm94eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9k
b3dubG9hZHMucmVtb3ZlKGRvd25sb2FkSUQpOwogCkBAIC0xMzMsMTUgKzEyNywxMyBAQCB2b2lk
IERvd25sb2FkUHJveHlNYXA6OmludmFsaWRhdGUoKQogICAgIGZvciAoY29uc3QgYXV0byYgZG93
bmxvYWQgOiBtX2Rvd25sb2Fkcy52YWx1ZXMoKSkgewogICAgICAgICBkb3dubG9hZC0+cHJvY2Vz
c0RpZENsb3NlKCk7CiAgICAgICAgIGRvd25sb2FkLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1f
cHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgp
KTsKKyAgICAgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93
bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgp
LmRvd25sb2FkSUQoKSk7CiAgICAgfQogCiAgICAgbV9kb3dubG9hZHMuY2xlYXIoKTsKICAgICBt
X2Rvd25sb2FkVUlBc3NlcnRpb24gPSBudWxscHRyOwogICAgIG1fZG93bmxvYWROZXR3b3JraW5n
QXNzZXJ0aW9uID0gbnVsbHB0cjsKICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwg
IlVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIGludmFsaWRhdGVkIC0gUmVsZWFzZWQgJ1dlYktp
dCBkb3dubG9hZHMnIGFzc2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3Mi
KTsKLQotICAgIG1fcHJvY2VzcyA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
UHJveHlNYXAuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFBy
b3h5TWFwLmgKaW5kZXggM2JlMjA3OWEwZjJjNGI1MzcwNjJjZTEzMDBlMWNkNWRhNDQ0ZmZiZS4u
NGZhMDAxYmQ3ZmFlMWNlZDAyNGQyYjkxZjIwMTcwZmY5OTQ1MjhiZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCkBAIC03
MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZSgpOwogICAgIHZv
aWQgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+
IG1fcHJvY2VzczsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBtX3Byb2Nlc3M7CiAgICAgSGFz
aE1hcDxEb3dubG9hZElELCBSZWZQdHI8RG93bmxvYWRQcm94eT4+IG1fZG93bmxvYWRzOwogCiAg
ICAgYm9vbCBtX3Nob3VsZFRha2VBc3NlcnRpb24geyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCmlu
ZGV4IDhjMjNiYmU4YzA2YTE1OTljYjliOTE2YTBiMzJhZmIzNzc4M2YzMDUuLmQ2YzMzMjNkZDkz
ZTY5ZjU2YWRmNmJlMGQyYTFiMTRmMDgyMjQ1MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3Rv
bVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKQEAgLTQ0LDE3
ICs0NCwxNyBAQCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6fkxlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5KCkKIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6c3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9j
b2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1f
bmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7Cisg
ICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0
YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3Rv
bVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJv
eHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGlu
ZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90
b2NvbElEKTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52
YWxpZGF0ZSgpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuaW52YWxpZGF0ZSgqdGhpcyk7CisgICAgbV9uZXR3
b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUo
KnRoaXMpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3YXNS
ZWRpcmVjdGVkVG9SZXF1ZXN0KExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJ
RCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXgg
YzFmNDcwOGI4MWNmYTUzYWIxMjJjMjk0NDY3NWU3ODI1MTY3MTIxZi4uMzE1NTRmM2ZkZTUzNjkw
YzE4YzkyZWFlNjkzNWViZWIzNzAwNmViZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaCIKICNp
bmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjZW5k
aWYKKyNpbmNsdWRlICJMZWdhY3lHbG9iYWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJOZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlck1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mby5oIgpAQCAtNDgsNiArNDksNyBA
QAogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIlN0
b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRSdWxlTGlz
dC5oIgorI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYlBh
Z2VNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlBy
b2Nlc3NNZXNzYWdlcy5oIgpAQCAtNjAsNiArNjIsNyBAQAogI2luY2x1ZGUgIldlYnNpdGVEYXRh
U3RvcmVDbGllbnQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tB
Z2dyZWdhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKICNpZiBF
TkFCTEUoU0VDX0lURU1fU0hJTSkKQEAgLTcwLDIwICs3MywxMTggQEAKICNpbmNsdWRlIDx3dGYv
c3BpL2Rhcndpbi9YUENTUEkuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5j
bHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwogI2Rl
ZmluZSBNRVNTQUdFX0NIRUNLKGFzc2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlv
biwgY29ubmVjdGlvbigpKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlBy
b2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShwcm9j
ZXNzUG9vbC5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJvY2Vz
c1Bvb2wocHJvY2Vzc1Bvb2wpCitzdGF0aWMgSGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5Kj4m
IG5ldHdvcmtQcm9jZXNzZXNTZXQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxOZXR3b3JrUHJvY2Vz
c1Byb3h5Kj4+IHNldDsKKyAgICByZXR1cm4gc2V0OworfQorCitWZWN0b3I8UmVmPE5ldHdvcmtQ
cm9jZXNzUHJveHk+PiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkK
K3sKKyAgICBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXM7CisgICAg
cHJvY2Vzc2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobmV0d29ya1Byb2Nlc3Nlc1NldCgpLnNp
emUoKSk7CisgICAgZm9yIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA6IG5ldHdvcmtQcm9jZXNzZXNT
ZXQoKSkKKyAgICAgICAgcHJvY2Vzc2VzLnVuY2hlY2tlZEFwcGVuZCgqbmV0d29ya1Byb2Nlc3Mp
OworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9CisKK1JlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpkZWZhdWx0TmV0d29ya1Byb2Nlc3MoKQoreworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nlc3M7Cisg
ICAgaWYgKCFwcm9jZXNzLmdldCgpKQorICAgICAgICBwcm9jZXNzLmdldCgpID0gTmV0d29ya1By
b2Nlc3NQcm94eTo6Y3JlYXRlKCk7CisgICAgcmV0dXJuICpwcm9jZXNzLmdldCgpOworfQorCit2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpCit7CisgICAgQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5Ojp0ZXJtaW5hdGUoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
ZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fy
b3VuZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCisgICAg
Ly8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0
aW9uIGNoZWNrIG9uIG91ciBBUElzLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDAyNDYuCisgICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgeworICAg
ICAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXNdIHsKKyAgICAgICAgICAgIHNlbmRD
cmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBwYXJh
bWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9WZWN0b3IoTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmUoKSk7
CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29udGVudFNl
Y3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0
b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KCkp
OworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVj
dG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFz
TG9jYWwoKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3Mg
PSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNU
b1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKKyAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdh
Y3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOworICAgIGZvciAoYXV0
byYgc2NoZW1lIDogV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycygpKQorICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3Vz
dG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisg
ICAgaWYgKFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNv
b2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsgIWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgp
KQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJl
Y3RvcnkoY29va2llU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIGNvbnRhaW5lckNhY2hlc0Rp
cmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7ICFj
b250YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7CisgICAgaWYgKFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9v
bDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7ICFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0
eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxl
RGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5w
YXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworI2VuZGlmCisgICAgV2ViUHJv
Y2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOwor
ICAgIHBhcmFtZXRlcnMuZGF0YVN0b3JlUGFyYW1ldGVycyA9IGRhdGFTdG9yZVBhcmFtZXRlcnMo
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKK30KKworVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzPiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkYXRhU3RvcmVQYXJhbWV0ZXJzKCkKK3sKKyAg
ICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IHBhcmFtZXRlcnM7CisgICAgZm9y
IChhdXRvJiBzdG9yZSA6IG1fd2Vic2l0ZURhdGFTdG9yZXMpCisgICAgICAgIHBhcmFtZXRlcnMu
YXBwZW5kKHN0b3JlLnBhcmFtZXRlcnMoKSk7CisgICAgcmV0dXJuIHBhcmFtZXRlcnM7Cit9CisK
K3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5
KCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFBy
b2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+YWx3YXlzUnVuc0F0QmFj
a2dyb3VuZFByaW9yaXR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbFNob3VsZFRha2VV
SUJhY2tncm91bmRBc3NlcnRpb24oKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBX
ZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQ
b29sLT5zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitOZXR3b3JrUHJvY2Vzc1By
b3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KCkKKyAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShh
bnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQogI2lmIEVOQUJM
RShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCisgICAgLCBtX2N1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudChtYWtlVW5pcXVlUmVmPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudD4oKSkKICAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKnRoaXMpCisjZWxz
ZQorICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZVJlZjxBUEk6
OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICNlbmRpZgotICAgICwgbV90aHJvdHRs
ZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkK
KyAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBhbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tn
cm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fY29va2llTWFuYWdlcihXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmNyZWF0ZSgqdGhpcykpCiB7CiAgICAgY29ubmVjdCgpOworICAgIHNlbmRDcmVhdGlv
blBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuYWRk
KHRoaXMpOwogfQogCiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgp
CkBAIC05OCw2ICsxOTksNyBAQCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQ
cm94eSgpCiAKICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2Fk
UHJveHlNYXAtPmludmFsaWRhdGUoKTsKKyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkucmVtb3Zl
KHRoaXMpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMo
UHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuY2hPcHRpb25zKQpAQCAtMTA1LDE1
ICsyMDcsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKFBy
b2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1bmMKICAgICBsYXVuY2hPcHRpb25zLnBy
b2Nlc3NUeXBlID0gUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6TmV0d29yazsKICAgICBB
dXhpbGlhcnlQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7CiAK
LSAgICBpZiAocHJvY2Vzc1Bvb2woKS5zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNo
RmFpbEZvclRlc3RpbmcoKSkgewotICAgICAgICBwcm9jZXNzUG9vbCgpLnNldFNob3VsZE1ha2VO
ZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhmYWxzZSk7Ci0gICAgICAgIGxh
dW5jaE9wdGlvbnMuc2hvdWxkTWFrZVByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7
CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNz
UG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNob3VsZE1ha2VOZXh0TmV0d29y
a1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpKSB7CisgICAgICAgICAgICBwcm9jZXNzUG9v
bC0+c2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZh
bHNlKTsKKyAgICAgICAgICAgIGxhdW5jaE9wdGlvbnMuc2hvdWxkTWFrZVByb2Nlc3NMYXVuY2hG
YWlsRm9yVGVzdGluZyA9IHRydWU7CisgICAgICAgIH0KICAgICB9Ci0KLSNpZiBQTEFURk9STShQ
TEFZU1RBVElPTikKLSAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NQYXRoID0gbV9wcm9jZXNzUG9v
bC5uZXR3b3JrUHJvY2Vzc1BhdGgoKTsKLSAgICBsYXVuY2hPcHRpb25zLnVzZXJJZCA9IG1fcHJv
Y2Vzc1Bvb2wudXNlcklkKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMTY2
LDEyICsyNjUsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBwSXNC
YWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKICAgICB9CiB9CiAKLURvd25sb2FkUHJveHkmIE5l
dHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYg
ZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3Qg
RnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkK
K0Rvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHko
V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2ws
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9E
YXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQogewogICAgIGlm
ICghbV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAgPSBtYWtl
VW5pcXVlPERvd25sb2FkUHJveHlNYXA+KCp0aGlzKTsKIAotICAgIHJldHVybiBtX2Rvd25sb2Fk
UHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBtX3Byb2Nlc3NQb29sLCBy
ZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKKyAgICByZXR1cm4g
bV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcHJvY2Vz
c1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwogfQog
CiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE9wdGlv
blNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQgKFdlYnNpdGVEYXRhKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIzNyw4ICsz
MzYsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgp
CiB7CiAgICAgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCi0gICAgLy8gVGVsbCB0aGUgbmV0d29y
ayBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRoaXMgbmV0d29yayBwcm9jZXNzIHBy
b3h5LiBUaGlzIHdpbGwgY2F1c2UgdXMgdG8gYmUgZGVsZXRlZC4KLSAgICBtX3Byb2Nlc3NQb29s
Lm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6Y2xlYXJDYWxsYmFja1N0YXRlcygpCkBAIC0yNTgsOSArMzU3LDYgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIElQQzo6RGUKICAgICBpZiAoZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRl
Y29kZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5kaXNwYXRj
aE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCi0gICAgICAgIHJldHVybjsKLQogICAgIGRp
ZFJlY2VpdmVOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsK
IH0KIApAQCAtMjc0LDggKzM3MCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVj
ZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDCiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKLSAgICBh
dXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZihtX3Byb2Nlc3NQb29sKTsKLQogICAg
IGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+aW52
YWxpZGF0ZSgpOwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCkBA
IC0zMzEsMTEgKzQyNSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3NpCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAoIXRvcE9yaWdpbiB8fCAhbV9wcm9jZXNzUG9vbC5pc1NlcnZp
Y2VXb3JrZXJQYWdlSUQocGFnZUlEKSkgewotICAgICAgICBwcm9jZXNzQXV0aGVudGljYXRpb25D
aGFsbGVuZ2Uoc2Vzc2lvbklELCBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBXZWJQYWdlUHJveHk6OmZvck1vc3RWaXNpYmxl
V2ViUGFnZUlmQW55KHNlc3Npb25JRCwgKnRvcE9yaWdpbiwgW3RoaXMsIHdlYWtUaGlzID0gbWFr
ZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRCwgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSBXVEZN
b3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgbmVnb3RpYXRlZExlZ2FjeVRMU10oYXV0byog
cGFnZSkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1
cm47CkBAIC0zOTIsMTEgKzQ4MSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRmlu
aXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hlciogbGF1bmNoZXIsIElQQzo6Q29uCiAgICAgICAg
IG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0jaWYg
UExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wucHJvY2Vzc1N1cHByZXNzaW9u
RW5hYmxlZCgpKQotICAgICAgICBzZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHRydWUpOwot
I2VuZGlmCiAgICAgCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoeHBjX2Nvbm5l
Y3Rpb25fdCBjb25uZWN0aW9uID0gdGhpcy0+Y29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCkp
CkBAIC0xMjA1LDcgKzEyODksOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNldFRoaXJk
UGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2VzcwogfQogdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0
PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7Ci0gICAgcHJvY2Vzc1Bv
b2woKS5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihXVEZNb3ZlKGRvbWFpbnMpKTsKKyAg
ICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29s
cygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24o
SGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4geyBkb21haW5zIH0pOwogfQogI2Vu
ZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKQEAgLTEyNTIsNDUgKzEz
MzcsMzEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpmbHVzaENvb2tpZXMoY29uc3QgUEFM
OjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgQ29tcGxldGkKICAgICBzZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpGbHVzaENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCi12b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmFk
ZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYgc3RvcmUpCit2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYgc3RvcmUpCiB7Ci0gICAgbV9z
ZXNzaW9uSURzLmFkZChzdG9yZS0+c2Vzc2lvbklEKCkpOworICAgIG1fd2Vic2l0ZURhdGFTdG9y
ZXMuYWRkKHN0b3JlKTsKIAogICAgIGlmIChjYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBzZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWRkV2Vic2l0ZURhdGFTdG9yZSB7IHN0b3JlLT5w
YXJhbWV0ZXJzKCkgfSwgMCk7Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS0+c2Vzc2lvbklE
KCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0
YVN0b3JlIHsgc3RvcmUucGFyYW1ldGVycygpIH0sIDApOworICAgIGF1dG8gc2Vzc2lvbklEID0g
c3RvcmUuc2Vzc2lvbklEKCk7CiAgICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgewog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmls
ZVVwZ3JhZGUoc3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCkpOworICAg
ICAgICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUucmVzb2x2ZWRJbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnkoKSk7CiAjZW5kaWYKICAgICB9CiB9CiAKLWJvb2wgTmV0d29ya1Byb2Nl
c3NQcm94eTo6aGFzU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fc2Vzc2lvbklEcy5jb250YWlucyhzZXNzaW9uSUQpOwotfQotCi12b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KQordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKFdlYnNpdGVEYXRhU3Rv
cmUmIHdlYnNpdGVEYXRhU3RvcmUpCiB7Ci0gICAgbV9zZXNzaW9uSURzLnJlbW92ZShzZXNzaW9u
SUQpOworICAgIG1fd2Vic2l0ZURhdGFTdG9yZXMucmVtb3ZlKHdlYnNpdGVEYXRhU3RvcmUpOwog
CiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpEZXN0cm95U2Vzc2lvbiB7IHNlc3Npb25JRCB9LCAwKTsKKyAgICAgICAgc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRlc3Ryb3lTZXNzaW9uIHsgd2Vic2l0ZURhdGFT
dG9yZS5zZXNzaW9uSUQoKSB9LCAwKTsKIH0KIAogV2Vic2l0ZURhdGFTdG9yZSogTmV0d29ya1By
b2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBpZiAoIVdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
YXRhU3RvcmVFeGlzdHMoKSkgewotICAgICAgICAgICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9
IG1fcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpOwotICAgICAgICAgICAgaWYgKHdlYnNp
dGVEYXRhU3RvcmUgJiYgd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gc2Vzc2lvbklE
KQotICAgICAgICAgICAgICAgIHJldHVybiB3ZWJzaXRlRGF0YVN0b3JlOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIo
KTsKLSAgICB9Ci0gICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVs
dERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIHJldHVybiBXZWJzaXRlRGF0
YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwogfQogCiB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJldHJpZXZlQ2FjaGVTdG9yYWdlUGFyYW1ldGVycyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCkBAIC0xMzM3LDcgKzE0MDgsNyBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShX
ZWJVc2VyQ29udGVudAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIG1fcHJvY2Vzc1Bvb2wuZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25U
b05ldHdvcmtQcm9jZXNzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgc2Vzc2lv
bklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgV2ViUHJvY2Vzc1Bvb2w6OmVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgUmVn
aXN0cmFibGVEb21haW4ge3JlZ2lzdHJhYmxlRG9tYWlufSwgc2Vzc2lvbklELCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6d29ya2Vy
Q29udGV4dENvbm5lY3Rpb25Ob0xvbmdlck5lZWRlZChXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmll
ciBpZGVudGlmaWVyKQpAQCAtMTUwMCwxNiArMTU3MSwzNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnByZWNvbm5lY3RUbyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYlBhZ2VQcm94
eUlkZQogICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vz
c2lvbklELCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0K
IAorc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkK
K3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlBy
b2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJv
Y2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6
OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dy
b3VuZFdlYlByb2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9j
ZXNzQXNzZXJ0aW9uKCkKIHsKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2Vi
UHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJv
Y2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdy
b3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAg
bV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZp
dHkoIk5ldHdvcmtpbmcgZm9yIGZvcmVncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVn
cm91bmQoKSwgMCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAo
cHJvY2Vzc1Bvb2woKS5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55
UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQ
cm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkQmFja2dyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9t
V2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMg
PSB0aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91
bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0JhY2tncm91bmQoKSwgMCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4
IGEwYjRjMWQ4OTM4ZTIwNWVjMzYxZGU1YzEwODI1ZDE4Mjc3NjUzYjQuLjk3YWU1YTk5ZjVlNjUy
MGUxNmU0MmRjN2Y0OGI3MzljNzM0YmM1ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC01Miw2ICs1MiwxMCBA
QCBuYW1lc3BhY2UgSVBDIHsKIGNsYXNzIEZvcm1EYXRhUmVmZXJlbmNlOwogfQogCituYW1lc3Bh
Y2UgQVBJIHsKK2NsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKK30KKwogbmFtZXNw
YWNlIFBBTCB7CiBjbGFzcyBTZXNzaW9uSUQ7CiB9CkBAIC03Myw4ICs3Nyw4IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBjbGFzcyBEb3dubG9hZFByb3h5OwogY2xhc3MgRG93bmxvYWRQcm94eU1h
cDsKK2NsYXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKLWNs
YXNzIFdlYlByb2Nlc3NQb29sOwogY2xhc3MgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk7
CiAKIGVudW0gY2xhc3MgU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIDogYm9vbDsKQEAgLTg2
LDggKzkwLDkgQEAgc3RydWN0IEZyYW1lSW5mb0RhdGE7CiBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnM7CiBzdHJ1Y3QgUmVzb3VyY2VMb2FkSW5mbzsKIHN0cnVjdCBXZWJz
aXRlRGF0YTsKK3N0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczsKIAotY2xhc3MgTmV0
d29ya1Byb2Nlc3NQcm94eSBmaW5hbCA6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHBy
aXZhdGUgUHJvY2Vzc1Rocm90dGxlckNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRyPE5ldHdv
cmtQcm9jZXNzUHJveHk+IHsKK2NsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkgZmluYWwgOiBwdWJs
aWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQs
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiwgcHVibGljIFJlZkNv
dW50ZWQ8TmV0d29ya1Byb2Nlc3NQcm94eT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIHVzaW5nIFJlZ2lzdHJhYmxlRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW47CkBAIC0xMDIsMTIgKzEwNywxNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgRG9t
YWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CiAg
ICAgdXNpbmcgT3BlbmVyRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CiAKLSAg
ICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJik7CisgICAgc3Rh
dGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBkZWZhdWx0TmV0d29ya1Byb2Nlc3MoKTsKKyAg
ICBzdGF0aWMgUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgTmV0d29ya1Byb2Nlc3NQcm94eSk7IH0KICAgICB+TmV0d29ya1Byb2Nlc3NQcm94
eSgpOwogCisgICAgc3RhdGljIFZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IGFsbE5l
dHdvcmtQcm9jZXNzZXMoKTsKKyAgICAKKyAgICB2b2lkIHRlcm1pbmF0ZSgpIGZpbmFsOworCiAg
ICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVz
c2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXll
ZFJlcGx5JiYpOwogCi0gICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJz
aXRlRGF0YVN0b3JlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJh
bWVJbmZvRGF0YSYsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsKKyAgICBEb3dubG9h
ZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBXZWJQcm9jZXNz
UG9vbCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0Rh
dGEmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSk7CiAKICAgICB2b2lkIGZldGNoV2Vi
c2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRp
b25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vi
c2l0ZURhdGEpPiYmKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklE
LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIwNiwxNSAr
MjE2LDEyIEBAIHB1YmxpYzoKICAgICBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSBmaW5h
bCB7IHJldHVybiBtX3Rocm90dGxlcjsgfQogICAgIHZvaWQgdXBkYXRlUHJvY2Vzc0Fzc2VydGlv
bigpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKCkgeyByZXR1cm4gbV9wcm9j
ZXNzUG9vbDsgfQotCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICB2b2lkIGRp
ZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eSYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGFkZFNlc3Npb24oUmVmPFdlYnNpdGVE
YXRhU3RvcmU+JiYpOwotICAgIGJvb2wgaGFzU2Vzc2lvbihQQUw6OlNlc3Npb25JRCkgY29uc3Q7
Ci0gICAgdm9pZCByZW1vdmVTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKKyAgICB2b2lkIGFkZFNl
c3Npb24oV2Vic2l0ZURhdGFTdG9yZSYpOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihXZWJzaXRl
RGF0YVN0b3JlJik7CiAgICAgCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgdm9p
ZCBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoY29uc3QgU3RyaW5nJiBpbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnkpOwpAQCAtMjI5LDYgKzIzNiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lz
dGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAgICAgdm9p
ZCB1bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7
CiAKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQgcmVz
ZXRRdW90YShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAog
ICAgIHZvaWQgcmVzb3VyY2VMb2FkRGlkU2VuZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRpZmll
ciwgUmVzb3VyY2VMb2FkSW5mbyYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgT3B0aW9u
YWw8SVBDOjpGb3JtRGF0YVJlZmVyZW5jZT4mJik7CkBAIC0yNDgsNyArMjU3LDE2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyQnVuZGxlSWRlbnRpZmllcihD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAgV2ViQ29va2llTWFuYWdlclByb3h5
JiBjb29raWVNYW5hZ2VyKCkgeyByZXR1cm4gbV9jb29raWVNYW5hZ2VyLmdldCgpOyB9CisKKyAg
ICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50KCkgeyByZXR1cm4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuZ2V0KCk7IH0K
KwogcHJpdmF0ZToKKyAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KCk7CisKKyAgICB2
b2lkIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICBWZWN0b3I8V2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IGRhdGFTdG9yZVBhcmFtZXRlcnMoKTsKKwogICAgIC8v
IEF1eGlsaWFyeVByb2Nlc3NQcm94eQogICAgIEFTQ0lJTGl0ZXJhbCBwcm9jZXNzTmFtZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuICJOZXR3b3JraW5nIl9zOyB9CiAKQEAgLTI1Niw3ICsyNzQsNiBA
QCBwcml2YXRlOgogICAgIHZvaWQgY29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYp
IG92ZXJyaWRlOwogICAgIHZvaWQgcHJvY2Vzc1dpbGxTaHV0RG93bihJUEM6OkNvbm5lY3Rpb24m
KSBvdmVycmlkZTsKIAotICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgdm9p
ZCBjbGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVu
dApAQCAtMzEyLDE2ICszMjksMTcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHJvY2Vzc0F1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklELCBSZWY8QXV0aGVudGljYXRpb25DaGFs
bGVuZ2VQcm94eT4mJik7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgbV9wcm9jZXNzUG9vbDsKLQog
ICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJzaXRlRGF0
YSk+PiBtX3BlbmRpbmdGZXRjaFdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hNYXA8Q2Fs
bGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vic2l0
ZURhdGFDYWxsYmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnNDYWxsYmFja3M7
CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RG93bmxvYWRQcm94eU1hcD4gbV9kb3dubG9hZFByb3h5
TWFwOworCisgICAgVW5pcXVlUmVmPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBt
X2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9Q
Uk9UT0NPTF9NQU5BR0VSKQogICAgIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5IG1f
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk7CiAjZW5kaWYKKwogICAgIFByb2Nlc3NUaHJvdHRs
ZXIgbV90aHJvdHRsZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByb2Nlc3NUaHJvdHRsZXI6OkJh
Y2tncm91bmRBY3Rpdml0eT4gbV9hY3Rpdml0eUZvckhvbGRpbmdMb2NrZWRGaWxlczsKICAgICBQ
cm9jZXNzVGhyb3R0bGVyOjpBY3Rpdml0eVZhcmlhbnQgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNz
ZXM7CkBAIC0zNDksNyArMzY3LDggQEAgcHJpdmF0ZToKICAgICB9OwogI2VuZGlmCiAKLSAgICBI
YXNoU2V0PFBBTDo6U2Vzc2lvbklEPiBtX3Nlc3Npb25JRHM7CisgICAgV2Vha0hhc2hTZXQ8V2Vi
c2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRlRGF0YVN0b3JlczsKKyAgICBSZWY8V2ViQ29va2llTWFu
YWdlclByb3h5PiBtX2Nvb2tpZU1hbmFnZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5Q29jb2EubW0KaW5kZXggYjhkYWVkZjdiZWJhMWNkODFmNmU1MjQ0OTYwMzEw
ZjEzMzEwYzExZS4uODJjMTBlNDFkNTYyNWRiYWFkZjkxM2I5NDgwNDQ3YzcwY2MxOWQ5ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1By
b3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAgLTUxLDggKzUxLDEwIEBAIGJvb2wgTmV0d29ya1Byb2Nl
c3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCh4cGNfb2JqZWN0X3QgZXZl
bnQpIGNvCiAgICAgaWYgKG1lc3NhZ2VOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUEND
b25zdGFudHM6OnhwY0xhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1l
KQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmROZXR3b3JrUHJv
Y2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICBpZiAobWVzc2FnZU5hbWUg
PT0gTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNE
YXRhYmFzZVhQQ0VuZHBvaW50TWVzc2FnZU5hbWUpIHsKKyAgICAgICAgZm9yIChhdXRvKiBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgICAg
IHByb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vzcyhl
dmVudCk7CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAppbmRleCBjYzUyNmFhZjNhYWZi
MWMxNDZkYTRiMjQxOTQ1OWIxMDkyMDFiNjEwLi4wODVlN2QyNjVhMTM3MzViZTdhMTI3OGVjMWRm
YjYzZmQ1ZGQ1ZDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29r
aWVNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tp
ZU1hbmFnZXJQcm94eS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBUElBcnJheS5o
IgogI2luY2x1ZGUgIkFQSVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nl
c3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRl
ICJPcHRpb25hbENhbGxiYWNrSUQuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2Fn
ZXMuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgpAQCAtMzks
MjQgKzQwLDE2IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCi1jb25zdCBjaGFyKiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN1cHBsZW1lbnROYW1lKCkK
K1dlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KE5ldHdvcmtQcm9j
ZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKQorICAgIDogbV9uZXR3b3JrUHJvY2VzcyhtYWtlV2Vh
a1B0cihuZXR3b3JrUHJvY2VzcykpCiB7Ci0gICAgcmV0dXJuICJXZWJDb29raWVNYW5hZ2VyUHJv
eHkiOwotfQotCi1SZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OmNyZWF0ZShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KHByb2Nlc3NQb29sKSk7Ci19Ci0KLVdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29s
KiBwcm9jZXNzUG9vbCkKLSAgICA6IFdlYkNvbnRleHRTdXBwbGVtZW50KHByb2Nlc3NQb29sKQot
ewotICAgIFdlYkNvbnRleHRTdXBwbGVtZW50Ojpwcm9jZXNzUG9vbCgpLT5hZGRNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCAqdGhpcyk7CisgICAgbmV0d29ya1Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMp
OwogfQogCiBXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5hZ2VyUHJveHkoKQog
eworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5y
ZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpKTsKICAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0
eSgpKTsKIH0KIApAQCAtNjUsMTAyICs1OCw4NCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6aW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKiBjbAog
ICAgIG1fY2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKIH0KIAotLy8gV2ViQ29udGV4dFN1cHBs
ZW1lbnQKLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NQb29sRGVzdHJveWVk
KCkKLXsKLSAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnM7Ci0gICAgZm9yIChhdXRvJiBv
YnNlcnZlclNldCA6IG1fY29va2llT2JzZXJ2ZXJzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAo
YXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlclNldCkKLSAgICAgICAgICAgIG9ic2VydmVycy5hcHBl
bmQob2JzZXJ2ZXIpOwotICAgIH0KLQotICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZl
cnMpCi0gICAgICAgIG9ic2VydmVyLT5tYW5hZ2VyRGVzdHJveWVkKCk7Ci0KLSAgICBBU1NFUlQo
bV9jb29raWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkq
KQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBs
ZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpyZWYoKTsKLX0KLQotdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2Jq
ZWN0OjpkZXJlZigpOwotfQotCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0
byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
OwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFu
YWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1l
cykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNo
aW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZXMoc2Vzc2lvbklELCBob3N0bmFtZXMpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJv
Y2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyks
IDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0
d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgQ29va2llJiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxs
YmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wo
KS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9u
SUQsIGNvb2tpZSksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KV0oKSBtdXRhYmxlIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rp
b24pKTsKKyAgICBlbHNlCiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKLSAgICB9KTsKIH0K
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNp
bmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2FsbFRpbWUgdGltZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdv
cmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFu
YWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RG
TW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0
aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAg
ICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OlNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNrRnVu
Y3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRD
b29raWUoc2Vzc2lvbklELCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7Cisg
ICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3Qg
VmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIG1haW5E
b2N1bWVudFVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVy
bCwgbWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYg
KG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQs
IGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2Vi
Q29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0K
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8
Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3Jr
UHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6Okdl
dENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Np
b25JRCwgdXJsKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAg
ICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5
OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQog
ewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJ
Zk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFy
dE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9w
T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJv
Y2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAK
IHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmIGNhbGxiYWNr
KQpAQCAtMjExLDE4ICsxODYsMTggQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNvb2tp
ZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiB2b2lkIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgSFRU
UENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
YWxsYmFja0Z1bmN0aW9uKQogewotI2lmIFVTRShTT1VQKQotICAgIHByb2Nlc3NQb29sKCktPnNl
dEluaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAgIGF1
dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFu
YWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAot
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFM
OjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1bmN0aW9u
KQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwgV1RG
TW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzZXNzaW9uSUQpLCBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24o
SFRUUENvb2tpZUFjY2VwdFBvbGljeTo6TmV2ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgK
aW5kZXggMGJkZmMwZDRlNDdjNDM2ZjU4NWNmMjljMDlkNTFhMjliYzgxMWE5ZC4uNmY1MWYwM2U1
YzBjYTg5NDEyMzM0Mzc3YjU1NDNkODIyY2MyZmVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKQEAgLTU2LDExICs1Niw5IEBAIHR5cGVk
ZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6QXJyYXkqPiBBcnJheUNhbGxiYWNrOwogdHlwZWRlZiBH
ZW5lcmljQ2FsbGJhY2s8V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeT4gSFRUUENvb2tp
ZUFjY2VwdFBvbGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7CiAKLWNsYXNzIFdlYkNv
b2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5
cGU6OkNvb2tpZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1lbnQsIHByaXZhdGUg
SVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVi
bGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHBy
aXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBzdXBwbGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRpYyBSZWY8V2ViQ29va2ll
TWFuYWdlclByb3h5PiBjcmVhdGUoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3Mp
IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KG5ldHdvcmtQcm9j
ZXNzKSk7IH0KICAgICB2aXJ0dWFsIH5XZWJDb29raWVNYW5hZ2VyUHJveHkoKTsKIAogICAgIHZv
aWQgaW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKik7CkBA
IC0xMDQsMTcgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQVBJOjpPYmplY3Q6OmRlcmVm
OwogCiBwcml2YXRlOgotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCop
OworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAKICAg
ICB2b2lkIGNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gV2ViQ29u
dGV4dFN1cHBsZW1lbnQKLSAgICB2b2lkIHByb2Nlc3NQb29sRGVzdHJveWVkKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopIG92ZXJyaWRlOwot
ICAgIHZvaWQgcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRl
cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLQogICAgIC8vIElQQzo6TWVzc2Fn
ZVJlY2VpdmVyCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImKSBvdmVycmlkZTsKIApAQCAtMTI1LDYgKzExNiw3IEBAIHByaXZhdGU6CiAg
ICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPj4gbV9sZWdh
Y3lDb29raWVPYnNlcnZlcnM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgSGFzaFNldDxP
YnNlcnZlcio+PiBtX2Nvb2tpZU9ic2VydmVyczsKIAorICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nl
c3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHlDbGll
bnQgbV9jbGllbnQ7CiAKICNpZiBVU0UoU09VUCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCmluZGV4IGQzYjhjMzU1NDBmM2YyNDU2ZjcxMDU1ZjViNGQ3YTc4MjI2MGQz
ODcuLjQ5Y2VlYjIyODkyZjI0NTE4MWE0NDgwOTU5ZGM4MzRhMTVlZjhkNWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTc0Niw3ICsxNzQ2LDcgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oYm9vbCBjb250cm9sbGVk
KQogICAgICAgICByZXR1cm47CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb250
cm9sbGVkQnlBdXRvbWF0aW9uKGNvbnRyb2xsZWQpKTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQ
b29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRTZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbikpOworICAgIHdlYnNpdGVEYXRhU3Rv
cmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRT
ZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lv
bklEKCksIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbiksIDApOwogfQogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQpAQCAtMzIxMCwxMSArMzIxMCw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5Ojppc0ZvcmNlZEludG9BcHBCb3VuZE1vZGVUZXN0aW5nKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+CiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlzYWJsZVNlcnZpY2VX
b3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MoKQogewogI2lmIEVOQUJMRShBUFBfQk9V
TkRfRE9NQUlOUykgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCAwKTsKLSAgICB9
CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnQoKSwgMCk7CiAj
ZW5kaWYKIH0KIApAQCAtMzIyMywxMyArMzIxOSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjbGVh
clNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
CiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1Qp
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJQYWdlOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCks
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
aWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1By
b2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVh
clNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAjZW5kaWYKQEAgLTQ0Mjks
NyArNDQxOSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8oY29uc3QgVVJMJiB1
cmwpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kg
PSBtX2NhblVzZUNyZWRlbnRpYWxTdG9yYWdlID8gV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3k6OlVzZSA6IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZTsK
LSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5wcmVj
b25uZWN0VG8oc2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlEKCksIHVybCwgdXNl
ckFnZW50KCksIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRpbmdUb0FwcEJvdW5k
RG9tYWluKCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnByZWNv
bm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQoKSwgdXJsLCB1c2Vy
QWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmRE
b21haW4oKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDYW5Vc2VDcmVkZW50aWFsU3Rv
cmFnZShib29sIGNhblVzZUNyZWRlbnRpYWxTdG9yYWdlKQpAQCAtNDcyNSw3ICs0NzE1LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZShGcmFtZUlkZW50aWZpZXIg
ZnJhbWVJRCwgRnJhbWVJbmZvRGF0YSYKICAgICAgICAgICAgIFJlZ2lzdHJhYmxlRG9tYWluIGN1
cnJlbnREb21haW4geyBjdXJyZW50UmVxdWVzdC51cmwoKSB9OwogICAgICAgICAgICAgVVJMIHJl
cXVlc3RlclVSTCB7IFVSTCgpLCByZXF1ZXN0ZXJPcmlnaW4udG9TdHJpbmcoKSB9OwogICAgICAg
ICAgICAgaWYgKCFjdXJyZW50RG9tYWluLm1hdGNoZXMocmVxdWVzdGVyVVJMKSkKLSAgICAgICAg
ICAgICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdp
dGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFi
bGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwgY3VycmVudERvbWFpbiwgbmF2aWdhdGlvbkRhdGFU
cmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgICAgICAgICAgbV93
ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmRpZENvbW1pdENyb3NzU2l0ZUxvYWRX
aXRoRGF0YVRyYW5zZmVyKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJh
YmxlRG9tYWluIHsgcmVxdWVzdGVyVVJMIH0sIGN1cnJlbnREb21haW4sIG5hdmlnYXRpb25EYXRh
VHJhbnNmZXIsIG1faWRlbnRpZmllciwgbV93ZWJQYWdlSUQpOwogICAgICAgICB9CiAjZW5kaWYK
ICAgICB9CkBAIC00NzYzLDcgKzQ3NTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0
TG9hZEZvckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUluZm9EYXRhJgogICAg
IGlmIChuYXZpZ2F0aW9uICYmIGZyYW1lLT5pc01haW5GcmFtZSgpKSB7CiAgICAgICAgIGlmIChh
dXRvJiBhZENsaWNrQXR0cmlidXRpb24gPSBuYXZpZ2F0aW9uLT5hZENsaWNrQXR0cmlidXRpb24o
KSkgewogICAgICAgICAgICAgaWYgKGFkQ2xpY2tBdHRyaWJ1dGlvbi0+ZGVzdGluYXRpb24oKS5t
YXRjaGVzKGZyYW1lLT51cmwoKSkpCi0gICAgICAgICAgICAgICAgbV9wcm9jZXNzLT5wcm9jZXNz
UG9vbCgpLnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U3RvcmVBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwg
KmFkQ2xpY2tBdHRyaWJ1dGlvbikpOworICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUo
KS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yZUFk
Q2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqYWRDbGlj
a0F0dHJpYnV0aW9uKSwgMCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUzNzcsNyArNTM2Nyw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgV2ViRnJhbWVQ
cm94eSYgZnJhbWUsIGNvbnN0IFVSTCYgcGFnCiAgICAgaWYgKHRhcmdldEhvc3QuaXNFbXB0eSgp
IHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3QgPT0gc291cmNlVVJMLmhv
c3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TG9nRnJhbWVO
YXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxlRG9t
YWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVSTCB9LCBSZWdpc3Ry
YWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5pc01haW5GcmFtZSgp
LCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yTWFpbkZy
YW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlcikpOworICAgIHdlYnNp
dGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwg
UmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBwYWdl
VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVkaXJlY3QsIGZyYW1l
LmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRGaW5pc2hEb2N1bWVu
dExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2Vy
KSwgMCk7CiB9CiAjZW5kaWYKIApAQCAtMTAwMDIsNTggKzk5OTIsMjcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OnN5c3RlbVByZXZpZXdBY3Rpb25UcmlnZ2VyZWQoY29uc3QgV2ViQ29yZTo6U3lzdGVt
UHJldmlld0luZm8KIAogdm9pZCBXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24o
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQ
b29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5j
YW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihlbXB0eVN0
cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3Jr
UHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVt
cEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCku
bmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklE
KCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5
OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9j
ZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3
b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3Jr
UHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xl
YXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRy
aWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1f
d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3Mo
KS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNr
QXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNl
c3Npb25JRCgpLCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0
aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5w
cm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJv
Y2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlj
a0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAg
ICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9u
VVJMRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjptYXJrQWRD
bGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
cyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
IGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNp
dGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9u
c0FzRXhwaXJlZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhF
U0lTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IGQ5
MjZiMzNjYmRmMmJiOGJiOTgwZDYzYzVkYzUyYWU1MjUwOTI1MjkuLjllZDAzY2NhN2IzODRiNmJl
YWNhMTJjOTI0ZGY4MmNkZTU5MjAxMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5jcHAKQEAgLTE0Myw4ICsxNDMsMTAgQEAKICNlbmRpZgogCiAjZGVmaW5lIFdF
QlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhj
aGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18p
CisjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhjaGFubmVsLCBmbXQs
IC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwgIyNfX1ZB
X0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoY2hhbm5l
bCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQ
b29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xf
UkVMRUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfSUYo
c2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAiJXAgLSBXZWJQ
cm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIFdFQlBST0NF
U1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5uZWwsIGZtdCwgLi4uKSBS
RUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIGNoYW5u
ZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIsNiArMjM0LDExIEBAIHN0
YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgZ2xvYmFsVVJM
U2NoZW1lc1dpdGhDdXN0b21Qcm90CiAgICAgcmV0dXJuIHNldDsKIH0KIAorVmVjdG9yPFN0cmlu
Zz4gV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygp
Cit7CisgICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVBy
b3RvY29sSGFuZGxlcnMoKSk7Cit9CisKIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChB
UEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICA6IG1fY29u
ZmlndXJhdGlvbihjb25maWd1cmF0aW9uLmNvcHkoKSkKICAgICAsIG1fZGVmYXVsdFBhZ2VHcm91
cChXZWJQYWdlR3JvdXA6OmNyZWF0ZSgpKQpAQCAtMjM5LDcgKzI0Niw2IEBAIFdlYlByb2Nlc3NQ
b29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmln
dXJhdGlvbikKICAgICAsIG1fYXV0b21hdGlvbkNsaWVudChtYWtlVW5pcXVlPEFQSTo6QXV0b21h
dGlvbkNsaWVudD4oKSkKICAgICAsIG1fZG93bmxvYWRDbGllbnQobWFrZVVuaXF1ZVJlZjxBUEk6
OkRvd25sb2FkQ2xpZW50PigpKQogICAgICwgbV9oaXN0b3J5Q2xpZW50KG1ha2VVbmlxdWU8QVBJ
OjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4oKSkKLSAgICAsIG1fY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+
KCkpCiAgICAgLCBtX3Zpc2l0ZWRMaW5rU3RvcmUoVmlzaXRlZExpbmtTdG9yZTo6Y3JlYXRlKCkp
CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICwgbV9oaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdl
U2FtcGxlcihtYWtlVW5pcXVlPEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyPigq
dGhpcykpCkBAIC0yNjcsOSArMjczLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29s
KEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogI2VuZGlmCiAg
ICAgfSk7CiAKLSAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSAmJiBXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgbV93ZWJzaXRlRGF0
YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCk7Ci0K
ICAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IG1fY29uZmlndXJhdGlvbi0+YWx3YXlzUmV2YWxpZGF0
ZWRVUkxTY2hlbWVzKCkpCiAgICAgICAgIG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0Fsd2F5c1JldmFs
aWRhdGVkLmFkZChzY2hlbWUpOwogCkBAIC0yODUsNyArMjg4LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6
OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0
aW9uKQogICAgIGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9URTogVGhlc2Ugc3ViLW9i
amVjdHMgbXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VSZWNlaXZlck1hcC4uCi0g
ICAgYWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxl
bWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdl
Yk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikK
QEAgLTM0Miw5ICszNDQsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKCkKICAg
ICBwcm9jZXNzUG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAotICAgIGlmIChtX25l
dHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zaHV0RG93blByb2Nlc3Mo
KTsKLQogI2lmIEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9jZXNzZXNVc2luZ0dhbWVw
YWRzLmlzRW1wdHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnBy
b2Nlc3NQb29sU3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAtNDAyLDE2ICs0MDEsNiBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0
cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JgogICAgICAgICBtX2F1dG9tYXRpb25DbGllbnQgPSBX
VEZNb3ZlKGF1dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkK
LXsKLSNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQotICAgIGlmICgh
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+
KCk7Ci0gICAgZWxzZQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCA9IFdU
Rk1vdmUoY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsKLSNlbmRpZgotfQotCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIo
Y29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIpCiB7
CiAgICAgLy8gR3VhcmQgYWdhaW5zdCBBUEkgbWlzdXNlLgpAQCAtNDIxLDExICs0MTAsNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50
aWZpZXIoY29uc3QgU3RyaW5nJiBjdQogICAgIG1fY29uZmlndXJhdGlvbi0+c2V0Q3VzdG9tV2Vi
Q29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVu
ZGxlSWRlbnRpZmllcik7CiB9CiAKLUlQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vzc1Bvb2w6Om5l
dHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nl
c3MtPmNvbm5lY3Rpb24oKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFu
Z2VkKHZvaWQqIGNvbnRleHQpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViUHJvY2Vzc1Bvb2wqPihj
b250ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7CkBAIC00MzUsOCArNDE5LDcgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMo
TWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKCkpOwog
I2lmIFVTRShTT1VQKQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExh
bmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CisgICAgV2Vic2l0
ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2Vy
UHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKICNlbmRpZgogfQogCkBAIC00NDksNyArNDMyLDgg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZnVsbEtleWJvYXJkQWNjZXNzTW9kZUNoYW5nZWQoYm9v
bCBmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGUKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRNZW1v
cnlQcmVzc3VyZUV2ZW50KGJvb2wgaXNDcml0aWNhbCkKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNz
ZXMoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2
ZW50KGlzQ3JpdGljYWwpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6
QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNh
bCkpOworICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6
OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2ZW50KGlz
Q3JpdGljYWwpLCAwKTsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBQbHVn
aW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuc2VuZE1lbW9yeVByZXNzdXJlRXZlbnQoaXND
cml0aWNhbCk7CiAjZW5kaWYKQEAgLTQ3NCwyNzUgKzQ1OCw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNjcmVlblByb3BlcnRpZXNTdGF0ZUNoYW5nZWQoKQogI2VuZGlmCiB9CiAKLU5ldHdvcmtQ
cm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRl
RGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmth
cm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgotICAg
IC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xh
dGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsKLSAg
ICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAg
ICAgIH0pOwotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3Jl
KSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndp
dGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+
Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqbV9uZXR3
b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBhdXRvIG5ldHdvcmtQcm9jZXNzID0gbWFrZVVuaXF1
ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7Ci0KLSAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkg
ewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRpbmdD
b29raWVzID0gY29weVRvVmVjdG9yKG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMo
KSk7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwot
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRs
ZUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24oKS5zb3VyY2VB
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBwbGlj
YXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0
aW9uKCkuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKCk7Ci0jZW5kaWYKLSAg
ICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6
c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotCi0gICAgZm9yIChhdXRvJiBzY2hlbWUgOiBnbG9i
YWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAgICAgcGFyYW1l
dGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1l
KTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU3RyaW5nIGNvb2tpZVN0b3JhZ2VE
aXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAg
IGlmICghY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdl
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotCi0gICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nlc3NQ
b29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb250YWluZXJDYWNo
ZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBT
dHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRs
ZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkK
LSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVj
dG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50
QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZp
bGUoZW1wdHlTdHJpbmcoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9i
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAgICBwYXJhbWV0
ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xv
YmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmUoKSk7Ci0g
ICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29udGVudFNlY3Vy
aXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24o
KS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KCkpOwot
ICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVjdG9y
KExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTG9j
YWwoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3MgPSBj
b3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1Jl
Z2lzdGVyQXNOb0FjY2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAg
IC8vICoqKioqKioqKgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNoYW5nZSB0aGUgZGlyZWN0
b3J5IHN0cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlzayB3aXRob3V0IGZpcnN0
IGNvbnN1bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjovL3Byb2JsZW0vMTc0NTQ3
MTI+KQotICAgIC8vICoqKioqKioqKgotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURp
cmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5OwotICAgIAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y3JlYXRlU3ltTGlu
a0ZvckZpbGVVcGdyYWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0
ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3Rv
cmUtPnJlc29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAgIGlm
ICghcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KQotICAgICAg
ICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSAgV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSgpOwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURp
cmVjdG9yeShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnksIHBh
cmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRl
RGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExvY2FsU3RvcmFnZURpcmVj
dG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQot
ICAgICAgICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2FsU3RvcmFnZURp
cmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVE
aXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAg
ICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vi
c2l0ZURhdGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0g
ICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjYWNoZVN0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBXVEZNb3ZlKGNh
Y2hlU3RvcmFnZURpcmVjdG9yeSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKG1fd2Vic2l0
ZURhdGFTdG9yZSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IG1f
d2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlRXhpc3RzKCkpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1ldGVycygp
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5kaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0
b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9y
UmVhZFdyaXRlRGlyZWN0b3J5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnksIHJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYm9vbCBl
bmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAgYm9vbCBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAgYm9vbCBzaG91
bGRJbmNsdWRlTG9jYWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3NEZWJ1Z01vZGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQotICAgIFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgdGhpcmRQ
YXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2lu
Z01vZGU6OkFsbDsKLSAgICBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxl
ZCBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IFdlYkNvcmU6OlNhbWVTaXRlU3Ry
aWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKLSNlbmRpZgotICAgIFdlYkNvcmU6OkZpcnN0UGFy
dHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
ID0gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tp
ZXM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gc3RhbmRhbG9uZUFwcGxpY2F0aW9u
RG9tYWluOwotICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IGFwcEJvdW5k
RG9tYWluczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBtYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fdGNjUHJlZmVyZW5jZUVuYWJs
ZWQgPSBkb2VzQXBwSGF2ZUlUUEVuYWJsZWQoKTsKLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3Rv
cmUgJiYgIXdpdGhXZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7
Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VF
bmFibGVkOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNl
IGlmIChtX3dlYnNpdGVEYXRhU3RvcmUgJiYgIW1fd2Vic2l0ZURhdGFTdG9yZS0+aXNJdHBTdGF0
ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
ID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKTsKLSAgICB9IGVsc2UgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVF
eGlzdHMoKSAmJiAhV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5pc0l0cFN0
YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlKCktPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZQotICAgICAgICBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSNlbmRpZgotCi0g
ICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9h
ZFN0YXRpc3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAg
ICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gd2l0aFdlYnNp
dGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNlbmRpZgotICAg
ICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICAgICAgYXV0
byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1l
dGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3VsZEluY2x1
ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAgICAgIGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdNb2RlOwotI2lm
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0aGlyZFBhcnR5
Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7Ci0gICAg
ICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNp
dGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0g
ICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxp
Y2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9t
YWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZh
bGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFT
dG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IHdp
dGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0g
ICAgICAgIAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSB3aXRo
V2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAg
ICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3Rv
cnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IGF1
dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVk
SFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURpcmVjdG9y
eS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBo
c3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJ
Q1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQg
PSBtX3dlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNl
bmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAg
ICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dlYnNpdGVEYXRhU3RvcmUt
PnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91
bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3Q7Ci0gICAgICAgICAg
ICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZURlYnVnTW9k
ZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICAgICAgdGhp
cmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2Rl
OwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2FtZVNp
dGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZpcnN0UGFy
dHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlOwotICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluID0gbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnN0YW5kYWxv
bmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5kRG9tYWlucyA9IG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5hcHBC
b3VuZERvbWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5tYW51
YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gbV93ZWJzaXRl
RGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3Rh
ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7
Ci0KLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbV93ZWJzaXRl
RGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAo
IW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0
d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgYXV0byYgaHN0
c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSFNUU1N0b3Jh
Z2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURpcmVjdG9yeS5pc051bGwo
KSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBoc3RzU3RvcmFn
ZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZSho
c3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9y
ZUV4aXN0cygpKQotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IFdl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
Lm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lmIEhBVkUoQ0ZORVRXT1JLX0FMVEVSTkFU
SVZFX1NFUlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6Omh0dHAzRW5hYmxlZCgpKSB7
Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2VzRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlm
ICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2Vydmlj
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHAzRW5hYmxlZCA9
IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBpc0l0cFN0YXRlRXhwbGljaXRseVNldCA9
IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzID0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewotICAgICAgICBXVEZNb3ZlKHJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAgICBXVEZNb3ZlKHJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpLAotICAgICAgICBlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0YXRlRXhwbGljaXRseVNldCwKLSAgICAg
ICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCwKLSAgICAgICAg
c2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAg
ICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlLAotICAgICAgICBzYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50RW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURh
dGFSZW1vdmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluLAotICAg
ICAgICBhcHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlLAot
ICAgIH07Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmljIHBhcmFtZXRlcnMKLSAg
ICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKLQotICAgIC8v
IEluaXRpYWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJh
bWV0ZXJzKSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBuZXR3b3JrUHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3b3JrUHJvY2Vzc0xhdGVu
Y3lRT1MoKSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAwKTsKLSNlbmRpZgotCi0g
ICAgbmV0d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKLQotICAgIGlmICh3
aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lv
bihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICB3aXRoV2Vic2l0ZURh
dGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQotICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgbmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUgc2Vzc2lvbnMgdGhhdCBo
YXZlIGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAgICBmb3IgKGF1dG8mIHNl
c3Npb25JRCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1
bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICB9Ci0KLSAgICBtX25l
dHdvcmtQcm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0gICAgcmV0dXJuICptX25l
dHdvcmtQcm9jZXNzOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0Ny
YXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSkKIHsKLSAgICBB
U1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJvY2Vzc1Byb3h5
ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50
IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+cHJvY2Vzc0Rp
ZENsb3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzUxLDkgKzQ2OCw2IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5
JiBuZXR3b3JrUHJvY2Vzc1ByCiAgICAgaWYgKG1fYXV0b21hdGlvblNlc3Npb24pCiAgICAgICAg
IG1fYXV0b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAgLy8gTGVhdmUgdGhlIHBy
b2Nlc3MgcHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28gdGhhdCB0aGUgY2xpZW50
IGNvdWxkIHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAgbV9uZXR3b3JrUHJvY2Vz
cyA9IG51bGxwdHI7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQogCkBAIC03
NjQsMjAgKzQ3OCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9jZXNz
Q3Jhc2hlZChXZWJQcm9jZXNzUHJveHkmIHByb3h5KQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdl
YlByb2Nlc3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAgICBlbnN1cmVOZXR3b3Jr
UHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KSwgd2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwgcmVwbHkg
PSBXVEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc1ZhbGlkKGNvbm5l
Y3Rpb25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5ICYmIHdlYWtUaGlzKSkg
ewotICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoUHJvY2Vzcywg
ImdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0IGF0dGVtcHQsIHJldHJ5
aW5nIik7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3ZWJQcm9jZXNz
UHJveHksIFdURk1vdmUocmVwbHkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7Ci0gICAgfSk7Ci19Ci0KICNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpncHVQcm9jZXNzQ3Jhc2hlZChQcm9j
ZXNzSUQgaWRlbnRpZmllcikKIHsKQEAgLTgwMSwyMyArNTAxLDI2IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmdldEdQVVByb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vz
c1Byb3h5LCBNCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJQcm9jZXNzUG9vbDo6c191c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gZmFsc2U7CisKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlv
blRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJveHksIFJlZ2lzdHJhYmxl
RG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIEFTU0VS
VF9VTlVTRUQocHJveHksICZwcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsKKyAgICBh
dXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3Rv
cmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpCisg
ICAgICAgIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlKCkucHRyKCk7CisgICAgaWYgKCFwcm9jZXNzUG9vbHMoKS5zaXplKCkpCisgICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxSZWY8V2ViUHJvY2Vzc1Bvb2w+PiBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJh
dGlvbjo6Y3JlYXRlKCkuZ2V0KCkpKTsKIAotICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBX
ZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQo
c2Vzc2lvbklEKTsKLQotICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBpZiAo
IW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgICAg
ICB3ZWJzaXRlRGF0YVN0b3JlID0gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOwotICAgIH0KKyAg
ICAvLyBBcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCB0byBob3N0IHRo
ZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgorICAgIGF1dG8qIHByb2Nlc3NQb29sID0gcHJvY2Vz
c1Bvb2xzKClbMF07CisgICAgQVNTRVJUKHByb2Nlc3NQb29sKTsKIAogICAgIFdlYlByb2Nlc3NQ
cm94eSogc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSB7IG51bGxwdHIgfTsKLSAgICBpZiAoIW1f
dXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgewotICAgICAgICBmb3IgKGF1dG8mIHBy
b2Nlc3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAgICAgICAgaWYgKHByb2Nlc3MgPT0gbV9wcmV3
YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkKKworICAgIGlm
ICghc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7CisgICAgICAgIGZvciAoYXV0
byYgcHJvY2VzcyA6IHByb2Nlc3NQb29sLT5tX3Byb2Nlc3NlcykgeworICAgICAgICAgICAgaWYg
KHByb2Nlc3MgPT0gcHJvY2Vzc1Bvb2wtPm1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9jZXNzLT5p
c0R1bW15UHJvY2Vzc1Byb3h5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICBpZiAoJnByb2Nlc3MtPndlYnNpdGVEYXRhU3RvcmUoKSAhPSB3ZWJzaXRlRGF0YVN0b3Jl
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODI1LDM1ICs1MjgsMzUgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQ
cm9jZXNzKE5ldHdvcmtQcm8KICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAg
ICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9IHByb2Nlc3MuZ2V0KCk7Ci0gICAgICAgICAg
ICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyh1c2VyQ29u
dGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CisgICAgICAgICAg
ICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyhwcm9jZXNz
UG9vbC0+dXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkp
OwogCi0gICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFNl
cnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1By
b2Nlc3MgcmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0lcCwgUElEPSVk
KSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkt
PnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFT
RV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNv
bnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdlYiBw
cm9jZXNzIChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwg
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghc2VydmljZVdvcmtlclBy
b2Nlc3NQcm94eSkgewotICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlByb2Nlc3NQ
cm94eTo6Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVE
b21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CisgICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5
ID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2VycygqcHJvY2Vzc1Bvb2ws
IFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CiAgICAgICAg
IHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgPSBuZXdQcm9jZXNzUHJveHkucHRyKCk7CiAKLSAg
ICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNlV29ya2Vy
LCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0
aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nl
c3NJZGVudGlmaWVyKCkpOworICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9B
TExPV0VEX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5l
Y3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nl
c3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCi0gICAgICAgIGlu
aXRpYWxpemVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFTdG9yZSk7
Ci0gICAgICAgIG1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOwor
ICAgICAgICBwcm9jZXNzUG9vbC0+aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJvY2Vzc1By
b3h5LCB3ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2Vz
LmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOwogICAgIH0KIAotICAgIEFTU0VSVCgh
bV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1By
b3h5KSk7Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmFkZCgqc2VydmljZVdvcmtlclBy
b2Nlc3NQcm94eSk7CisgICAgQVNTRVJUKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29udGFp
bnMoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpKTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzKCkuYWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKIAotICAgIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KG1fc2VydmljZVdv
cmtlclByZWZlcmVuY2VzID8gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IG1f
ZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxsKCkp
Ci0gICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3JrZXJVc2Vy
QWdlbnQobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LT5lc3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4dChwcm9jZXNzUG9vbC0+bV9zZXJ2
aWNlV29ya2VyUHJlZmVyZW5jZXMgPyBwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVy
ZW5jZXMudmFsdWUoKSA6IHByb2Nlc3NQb29sLT5tX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVu
Y2VzKCkuc3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmICghcHJv
Y2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgc2Vy
dmljZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChwcm9jZXNz
UG9vbC0+bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5JiBwcm9j
ZXNzKQogewotICAgIEFTU0VSVChtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFpbnMocHJv
Y2VzcykpOwotICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7Cisg
ICAgQVNTRVJUKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlucyhwcm9jZXNzKSk7Cisg
ICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLnJlbW92ZShwcm9jZXNzKTsKIH0KICNlbmRpZgog
CkBAIC05MjIsNyArNjI1LDcgQEAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bv
b2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUKICNpZiBQTEFURk9S
TShHVEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICAvLyBJbiBwbGF0Zm9ybXMgdXNpbmcgQnViYmxl
d3JhcCBmb3Igc2FuZGJveGluZywgcHJld2FybWVkIHByb2Nlc3MgaXMgbGF1bmNoZWQgdXNpbmcg
dGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSwKICAgICAvLyBzbyB3
ZSBkb24ndCB1c2UgaXQgaW4gY2FzZSBvZiB1c2luZyBhIGRpZmZlcmVudCBXZWJzaXRlRGF0YVN0
b3JlLgotICAgIGlmIChtX3NhbmRib3hFbmFibGVkICYmIG1fd2Vic2l0ZURhdGFTdG9yZSAmJiBt
X3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCkgIT0gJndlYnNpdGVEYXRhU3RvcmUpCisgICAgaWYgKG1f
c2FuZGJveEVuYWJsZWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogI2VuZGlmCiAKQEAgLTEw
MzIsOCArNzM1LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nl
c3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzLCBXZWJzaXRlRGEKICAgICAgICAgcHJvY2Vzcy5p
c1Jlc3BvbnNpdmUoW2luaXRpYWxpemF0aW9uQWN0aXZpdHkgPSBXVEZNb3ZlKGluaXRpYWxpemF0
aW9uQWN0aXZpdHkpXSAoYm9vbCkgeyB9KTsKICAgICB9KTsKIAotICAgIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7Ci0KICAgICBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7
CiAKICAgICBwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aCA9IG1fcmVzb2x2ZWRQYXRocy5p
bmplY3RlZEJ1bmRsZVBhdGg7CkBAIC0xMTk4LDkgKzg5OSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQog
ICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPmlnbm9yZVRpbWVvdXRzRm9yVGVzdGluZygp
OwogCiAgICAgbV9jb25uZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5lY3Rpb24odGhpcywgcHJv
Y2Vzcy0+d2ViQ29ubmVjdGlvbigpKTsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0g
ICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5
KiBwcm9jZXNzKQpAQCAtMTI5NSwxMCArOTkzLDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJv
Y2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSToK
ICAgICBpZiAoIXBhZ2VDb25maWd1cmF0aW9uLT53ZWJzaXRlRGF0YVN0b3JlKCkpIHsKICAgICAg
ICAgLy8gV2UgdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBkZWZhdWx0IGRhdGEgc3RvcmUgYXMg
bG9uZyBhcyBwb3NzaWJsZS4KICAgICAgICAgLy8gQnV0IGlmIHRoZXJlIGlzIGFuIGF0dGVtcHQg
dG8gY3JlYXRlIGEgd2ViIHBhZ2Ugd2l0aG91dCBhbnkgc3BlY2lmaWVkIGRhdGEgc3RvcmUsIHRo
ZW4gd2UgaGF2ZSB0byBjcmVhdGUgaXQuCi0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3Jl
KQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0KLSAgICAgICAgcGFnZUNvbmZpZ3VyYXRp
b24tPnNldFdlYnNpdGVEYXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsKKyAgICAg
ICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCkpOwogICAgIH0KIAogICAgIFJlZlB0
cjxXZWJQcm9jZXNzUHJveHk+IHByb2Nlc3M7CkBAIC0xMzI5LDcgKzEwMjQsNyBAQCBSZWY8V2Vi
UGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiBwYWdl
Q2xpZW50LCBSZWY8QVBJOgogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBpZiAoIW1f
c2VydmljZVdvcmtlclByZWZlcmVuY2VzKSB7CiAgICAgICAgIG1fc2VydmljZVdvcmtlclByZWZl
cmVuY2VzID0gcGFnZS0+cHJlZmVyZW5jZXNTdG9yZSgpOwotICAgICAgICBmb3IgKGF1dG8mIHNl
cnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgICAgICBm
b3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3Nlcygp
KQogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclBy
ZWZlcmVuY2VzU3RvcmUoKm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKTsKICAgICB9CiAgICAg
aWYgKHVzZXJDb250ZW50Q29udHJvbGxlcikKQEAgLTEzNTYsNyArMTA1MSw3IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiB1
c2VyQWdlbnQpCiAgICAgaWYgKG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9PSB1c2VyQWdlbnQp
CiAgICAgICAgIHJldHVybjsKICAgICBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQgPSB1c2VyQWdl
bnQ7Ci0gICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtl
clByb2Nlc3NlcykKKyAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcygpKQogICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy5zZXRTZXJ2
aWNlV29ya2VyVXNlckFnZW50KG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CiB9CiAjZW5kaWYK
QEAgLTEzNjUsMTUgKzEwNjAsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdlQmVnaW5Vc2lu
Z1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSQogewogICAgIGF1
dG8gcmVzdWx0ID0gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmFkZChkYXRhU3RvcmUuc2Vzc2lvbklE
KCksIEhhc2hTZXQ8V2ViUGFnZVByb3h5SWRlbnRpZmllcj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFk
ZChwYWdlSUQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7
Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKLSAgICBpZiAo
c2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAg
ICAgQVNTRVJUKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRhU3RvcmUucGFyYW1ldGVy
cygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsKLSAg
ICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPmFkZFNlc3Npb24obWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIGRhdGFTdG9y
ZS5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnBhZ2VFbmRVc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRl
bnRpZmllciBwYWdlSUQsIFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKQEAgLTE0MDEsNyAr
MTA4Nyw2IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1BhZ2VzVXNpbmdXZWJzaXRlRGF0YVN0
b3JlKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKIERvd25sb2FkUHJveHkmIFdlYlByb2Nl
c3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94
eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
U3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKIHsKICAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0g
Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGluaXRpYXRpbmdQYWdlLCB7
IH0pOwotICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQo
KTsKIAogICAgIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc0FwcEJvdW5k
ID0gTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46Ok5vOwogICAgIGlmIChpbml0aWF0aW5nUGFn
ZSkgewpAQCAtMTQxMSwyNiArMTA5NiwyMyBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9v
bDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveAogI2Vu
ZGlmCiAgICAgfQogCi0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgUmVzb3Vy
Y2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICAvLyBSZXF1ZXN0J3Mg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUg
ZG93bmxvYWQgcmVxdWVzdC4KLSAgICAgICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3AgbGV2
ZWwgZG9jdW1lbnQncyBVUkwuCi0gICAgICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewotICAgICAg
ICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1Bh
Z2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Qu
c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwpOwotICAgICAgICAgICAg
dXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVhbChp
bml0aWF0aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOwotICAgICAgICAgICAgaWYgKCF1cGRh
dGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkp
Ci0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChpbml0aWF0
aW5nUGFnZS0+dXNlckFnZW50Rm9yVVJMKHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVS
TCgpKTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOwot
ICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhl
YWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0
SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwotICAgICAg
ICB9Ci0gICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAgICAg
IG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9h
ZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJl
cXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAgICAgIHJldHVy
biBkb3dubG9hZFByb3h5OworICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1
ZXN0KTsKKyAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2Vk
IGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KKyAgICAvLyBXZSBzZXQg
dGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KKyAgICBpZiAoaW5pdGlhdGlu
Z1BhZ2UpIHsKKyAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwg
aW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OworICAgICAgICB1cGRhdGVk
UmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7CisgICAg
ICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1
YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKKyAgICAgICAgaWYgKCF1cGRh
dGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkp
CisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQ
YWdlLT51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKKyAgICAg
ICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7CisgICAgICAgIGlmICghdXBk
YXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQp
KQorICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJv
eHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwogICAgIH0KKyAgICB1cGRhdGVkUmVxdWVzdC5zZXRJ
c1RvcFNpdGUoZmFsc2UpOworICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3QoZGF0YVN0b3JlLnNlc3Npb25J
RCgpLCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91
bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7CiAKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsK
IH0KQEAgLTE0MzgsMTcgKzExMjAsMTIgQEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6
OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3gKIERvd25s
b2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZChXZWJzaXRlRGF0YVN0b3Jl
JiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IEFQSTo6RGF0
YSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIGF1dG8mIGRvd25sb2Fk
UHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgUmVzb3VyY2VSZXF1ZXN0KCks
IGluaXRpYXRpbmdQYWdlLCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGRh
dGFTdG9yZS5zZXNzaW9uSUQoKTsKIAogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlOwogICAgIGlmICghcGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBl
OjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgaWYgKG5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93bmxvYWRQcm94eS5kb3du
bG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5z
aW9uSGFuZGxlKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5OwotICAgIH0KLQor
ICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpSZXN1bWVEb3dubG9hZChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIGRvd25sb2FkUHJveHku
ZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2FuZGJveEV4
dGVuc2lvbkhhbmRsZSksIDApOwogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQogCkBAIC0x
NTE3LDExICsxMTk0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVmcmVzaFBsdWdpbnMoKQog
CiAjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAKLVByb2Nlc3NJRCBXZWJQ
cm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCkKLXsKLSAgICByZXR1cm4gbV9u
ZXR3b3JrUHJvY2VzcyA/IG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCkgOiAw
OwotfQotCiBQcm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6OnByZXdhcm1lZFByb2Nlc3NJZGVudGlm
aWVyKCkKIHsKICAgICByZXR1cm4gbV9wcmV3YXJtZWRQcm9jZXNzID8gbV9wcmV3YXJtZWRQcm9j
ZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpIDogMDsKQEAgLTE1NTgsMTQgKzEyMzAsMTggQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZShjb25zdCBTdHJpbmcm
IHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVn
aXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hl
bWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURh
dGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRh
U3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1
cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0
ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeShjb25zdCBTdHJpbmcm
IHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVn
aXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUp
OwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJV
UkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpKTsKLSAg
ICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lz
dGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSk7
CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVt
ZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0
d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxT
Y2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpLCAwKTsKKyAg
ICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJp
ZGRlbkZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE1NzgsMTQgKzEy
NTQsMTggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKGNv
bnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5n
bGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKTsKICAgICBzZW5kVG9B
bGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2Nh
bCh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpKTsKKyAgICBX
ZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vi
c2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFz
TG9jYWwodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKIHsK
ICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxTY2hlbWVB
c05vQWNjZXNzKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7Ci0gICAg
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3Rl
clVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6
Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRh
dGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVt
ZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNj
aGVtZUFzRGlzcGxheUlzb2xhdGVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTYwNiwx
MCArMTI4Niw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1l
QXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0CiAgICAgICAgIHJldHVybjsKIAog
ICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLmFkZCh1cmxT
Y2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdpc3RlclNjaGVtZUZv
ckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAoYXV0byBu
ZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMo
KSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9t
UHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rl
ckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25zdCBTdHJp
bmcmIHVybFNjaGVtZSkKQEAgLTE2MTgsMTAgKzEyOTYsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
Ojp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJz
KGNvbgogICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVBy
b3RvY29sSGFuZGxlcnMoKS5yZW1vdmUodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1dG8qIHByb2Nl
c3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNj
aGVtZSk7Ci0gICAgfQorICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PnVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwogfQog
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25l
ZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2NTUsMTYgKzEzMzEsMTggQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAKICAg
ICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldENhY2hlTW9kZWwo
Y2FjaGVNb2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVs
KGNhY2hlTW9kZWwpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURh
dGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAg
ICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhDYWNo
ZU1vZGVsIGNhY2hlTW9kZWwpCiB7CiAgICAgdXBkYXRlQmFja0ZvcndhcmRDYWNoZUNhcGFjaXR5
KCk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsU3luY2hy
b25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsKKyAgICBXZWJzaXRlRGF0
YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRh
U3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5z
ZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91
c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIHRp
bWVvdXRJbnRlcnZhbCkKQEAgLTE2NzQsMTIgKzEzNTIsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dEludGVydmFs
KQogCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eShX
ZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZy
YW1lSW5mbykKIHsKLSAgICByZXR1cm4gZW5zdXJlTmV0d29ya1Byb2Nlc3MoJmRhdGFTdG9yZSku
Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2lu
YXRpbmdQYWdlKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZChib29sIGJhY2tncm91bmQpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5z
eW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOworICAgIHJldHVybiBkYXRhU3Rv
cmUubmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgKnRoaXMs
IHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6YWRkTWVzc2FnZVJlY2VpdmVyKElQQzo6UmVjZWl2ZXJOYW1lIG1lc3NhZ2VSZWNl
aXZlck5hbWUsIElQQzo6TWVzc2FnZVJlY2VpdmVyJiBtZXNzYWdlUmVjZWl2ZXIpCkBAIC0xNzUw
LDMwICsxNDIzLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3RvcE1lbW9yeVNhbXBsZXIoKQog
ICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U3RvcE1lbW9yeVNh
bXBsZXIoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci12b2lkIFdl
YlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UsIFUm
JiByZXBseSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQcm9jZXNz
LT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhz
dGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIHN0ZDo6Zm9yd2FyZDxVPihyZXBseSksIDApOwotfQot
Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKGNvbnN0IFBBTDo6
U2Vzc2lvbklEJiBzZXNzaW9uSUQpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVh
ckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCksIDApOwotfQotCi12b2lkIFdlYlByb2Nlc3NQ
b29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCi17Ci0gICAgdGVybWluYXRlU2VydmljZVdv
cmtlcnMoKTsKLQotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOwotICAgIG1fbmV0d29ya1By
b2Nlc3MgPSBudWxscHRyOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxX
ZWJDb250ZW50UHJvY2Vzc2VzKCkKIHsKICAgICBWZWN0b3I8UmVmUHRyPFdlYlByb2Nlc3NQcm94
eT4+IHByb2Nlc3NlcyA9IG1fcHJvY2Vzc2VzOwpAQCAtMTc4MSw0MCArMTQzMCwxNSBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250ZW50UHJvY2Vzc2VzKCkKICAgICAg
ICAgcHJvY2Vzcy0+dGVybWluYXRlKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRO
ZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nl
c3MpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0gICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5lbnQ6Ok5vLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
bmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKQotewotICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJv
Y2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0KLQotdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkKLXsKLSAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NEaWRSZXN1
bWUoKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMo
KQogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBhdXRvIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKTsKLSAgICB3aGlsZSAobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNv
bXB1dGVTaXplKCkpCi0gICAgICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5iZWdpbigpLT5k
aXNhYmxlU2VydmljZVdvcmtlcnMoKTsKKyAgICB3aGlsZSAoc2VydmljZVdvcmtlclByb2Nlc3Nl
cygpLmNvbXB1dGVTaXplKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5iZWdp
bigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKICNlbmRpZgogfQogCi12b2lkIFdlYlByb2Nl
c3NQb29sOjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVBdXRvbWF0aW9u
Q2FwYWJpbGl0aWVzKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKQEAg
LTIwODksMTUgKzE3MTMsMjEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVwb3J0V2ViQ29udGVu
dENQVVRpbWUoU2Vjb25kcyBjcHVUaW1lLCB1aW50NjRfdCBhY3Rpdml0eVMKICNlbmRpZgogfQog
CitXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdv
cmtlclByb2Nlc3NlcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYWtIYXNoU2V0
PFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICByZXR1cm4gcHJvY2Vzc2VzOworfQor
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucygpCiB7Ci0gICAg
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7CisgICAgV2Vi
c2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW10gKFdlYnNpdGVEYXRhU3Rv
cmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS51cGRh
dGVQcm9jZXNzQXNzZXJ0aW9uKCk7CisgICAgfSk7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQogICAgIC8vIENoZWNrIG9uIG5leHQgcnVuIGxvb3Agc2luY2UgdGhlIHdlYiBwcm9jZXNzIHBy
b3h5IHRva2VucyBhcmUgcHJvYmFibHkgYmVpbmcgdXBkYXRlZC4KLSAgICBjYWxsT25NYWluUnVu
TG9vcChbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0gewotICAgICAgICBpZiAo
IXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBmb3IgKGF1dG8mIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgIGNhbGxPbk1h
aW5SdW5Mb29wKFtdIHsKKyAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6
IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzLnVwZGF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzQXNzZXJ0aW9uKCk7CiAgICAgfSk7CiAjZW5k
aWYKQEAgLTIxMDcsNyArMTczNyw3IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6OmlzU2VydmljZVdv
cmtlclBhZ2VJRChXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCkgY29uc3QKIHsKICNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgaW5lZmZpY2llbnQu
Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLCBbcGFnZUlE
XShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2VydmljZVdvcmtlclBy
b2Nlc3NlcygpLCBbcGFnZUlEXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBwcm9j
ZXNzLmhhc1NlcnZpY2VXb3JrZXJQYWdlUHJveHkocGFnZUlEKTsKICAgICB9KTsKICNlbmRpZgpA
QCAtMjMyOSwxNCArMTk1OSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ3VycmVudE1v
ZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCkKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpCi12b2lkIFdlYlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0
aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21haW4sIE9w
dGlvblNldDxDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiBuYXZpZ2F0aW9u
RGF0YVRyYW5zZmVyLCBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlELCBQYWdl
SWRlbnRpZmllciB3ZWJQYWdlSUQpCi17Ci0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5kaWRDb21taXRDcm9zc1NpdGVM
b2FkV2l0aERhdGFUcmFuc2ZlcihzZXNzaW9uSUQsIGZyb21Eb21haW4sIHRvRG9tYWluLCBuYXZp
Z2F0aW9uRGF0YVRyYW5zZmVyLCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlEKTsKLX0KLQogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zKQogewogICAgIHNlbmRUb0FsbFBy
b2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rp
b24oZG9tYWlucykpOwpAQCAtMjM4NywyNyArMjAwOSwyNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
Ojp1cGRhdGVBdWRpYmxlTWVkaWFBc3NlcnRpb25zKCkKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sIHVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgaWYgKG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQorICAgIGlmIChzX3VzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0co
U2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6ICh1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MpOworICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhTZXJ2aWNl
V29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczogKHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyk7CiAKLSAgICBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB1c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwotICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7Ci0g
ICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBzX3VzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOworICAgIGZvciAo
YXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisg
ICAgICAgIHByb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQogCiAjaWYg
RU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdv
cmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdAogewotICAgIHJldHVybiBX
VEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10oYXV0byYgcHJvY2Vzcykgewor
ICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW10oYXV0byYg
cHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyRm9yZWdy
b3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQogCiBib29sIFdlYlByb2Nlc3NQ
b29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLCBbXShh
dXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2VydmljZVdvcmtlclByb2Nl
c3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBwcm9jZXNzLmhhc1Nl
cnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCk7CiAgICAgfSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRleCBkMWYxZmU5NjE1MDZh
MWU1ZjEzMjVmYTk5YTU2MDhiOTUwYjZhYjcxLi5lYmJjYWE0ZWNiMWQ3MzcxN2IxYTM1NDgyYTcy
ZmE5Y2Y0ZGUxZTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgK
QEAgLTgxLDcgKzgxLDYgQEAgT0JKQ19DTEFTUyBXS1ByZWZlcmVuY2VPYnNlcnZlcjsKIAogbmFt
ZXNwYWNlIEFQSSB7CiBjbGFzcyBBdXRvbWF0aW9uQ2xpZW50OwotY2xhc3MgQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50OwogY2xhc3MgRG93bmxvYWRDbGllbnQ7CiBjbGFzcyBIVFRQQ29va2ll
U3RvcmU7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZUNsaWVudDsKQEAgLTE4MCw3ICsxNzksNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRIaXN0b3J5Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6Okxl
Z2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiYmKTsKICAgICB2b2lkIHNldERvd25sb2FkQ2xpZW50
KFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PiYmKTsKICAgICB2b2lkIHNldEF1dG9tYXRp
b25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4mJik7Ci0gICAg
dm9pZCBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRy
PEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmKTsKIAogICAgIHZvaWQgc2V0Q3Vz
dG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYpOwogICAg
IGNvbnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCkg
eyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT5jdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlk
ZW50aWZpZXIoKTsgfQpAQCAtMTkxLDE3ICsxODksOSBAQCBwdWJsaWM6CiAgICAgLy8gbnVsbCBj
aGVja3MgaW4gV2ViUGFnZVByb3h5LgogICAgIFdlYlByb2Nlc3NQcm94eSogZHVtbXlQcm9jZXNz
UHJveHkoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSBjb25zdCB7IHJldHVybiBtX2R1bW15UHJv
Y2Vzc1Byb3hpZXMuZ2V0KHNlc3Npb25JRCkuZ2V0KCk7IH0KIAotICAgIC8vIFdlYlByb2Nlc3Mg
b3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9k
ZWwuIFRoZSBjb25uZWN0aW9uIG11c3QgYmUgbm9uLW51bGwuCi0gICAgSVBDOjpDb25uZWN0aW9u
KiBuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKLQogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1lc3NhZ2UpOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihjb25zdCBU
JiBtZXNzYWdlLCBQQUw6OlNlc3Npb25JRCk7CiAKLSAgICAvLyBTZW5kcyB0aGUgbWVzc2FnZSB0
byBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNzIGFzIGFwcHJvcG9yaWF0ZSBmb3IgY3VycmVu
dCBwcm9jZXNzIG1vZGVsLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvTmV0
d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IHZvaWQgc2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBV
JiYgcmVwbHkpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKTsKLQogICAgIHZvaWQg
cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkqKTsKIAogICAgIFdlYlBy
b2Nlc3NDYWNoZSYgd2ViUHJvY2Vzc0NhY2hlKCkgeyByZXR1cm4gbV93ZWJQcm9jZXNzQ2FjaGUu
Z2V0KCk7IH0KQEAgLTIwOSw5ICsxOTksNiBAQCBwdWJsaWM6CiAgICAgLy8gRGlzY29ubmVjdCB0
aGUgcHJvY2VzcyBmcm9tIHRoZSBjb250ZXh0LgogICAgIHZvaWQgZGlzY29ubmVjdFByb2Nlc3Mo
V2ViUHJvY2Vzc1Byb3h5Kik7CiAKLSAgICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUqIHdlYnNp
dGVEYXRhU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7IH0K
LSAgICB2b2lkIHNldFByaW1hcnlEYXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiBk
YXRhU3RvcmUpIHsgbV93ZWJzaXRlRGF0YVN0b3JlID0gJmRhdGFTdG9yZTsgfQotCiAgICAgUmVm
PFdlYlBhZ2VQcm94eT4gY3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiwgUmVmPEFQSTo6UGFnZUNv
bmZpZ3VyYXRpb24+JiYpOwogCiAgICAgdm9pZCBwYWdlQmVnaW5Vc2luZ1dlYnNpdGVEYXRhU3Rv
cmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2Vic2l0ZURhdGFTdG9yZSYpOwpAQCAtMjYyLDEw
ICsyNDksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRTdXBwb3J0ZWRQbHVnaW4oU3RyaW5nJiYg
bWF0Y2hpbmdEb21haW4sIFN0cmluZyYmIG5hbWUsIEhhc2hTZXQ8U3RyaW5nPiYmIG1pbWVUeXBl
cywgSGFzaFNldDxTdHJpbmc+IGV4dGVuc2lvbnMpOwogICAgIHZvaWQgY2xlYXJTdXBwb3J0ZWRQ
bHVnaW5zKCk7CiAKLSAgICBQcm9jZXNzSUQgbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CiAg
ICAgUHJvY2Vzc0lEIHByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyKCk7CiAgICAgdm9pZCBhY3Rp
dmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JUZXN0aW5nKFByb2Nlc3NJRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJik7Ci0gICAgYm9vbCBuZXR3b3JrUHJv
Y2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKTsKIAogICAgIFdlYlBh
Z2VHcm91cCYgZGVmYXVsdFBhZ2VHcm91cCgpIHsgcmV0dXJuIG1fZGVmYXVsdFBhZ2VHcm91cC5n
ZXQoKTsgfQogCkBAIC0zMDcsOCArMjkyLDYgQEAgcHVibGljOgogICAgIEFQSTo6TGVnYWN5Q29u
dGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlDbGllbnQoKSB7IHJldHVybiAqbV9oaXN0b3J5Q2xp
ZW50OyB9CiAgICAgV2ViQ29udGV4dENsaWVudCYgY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7
IH0KIAotICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBjdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVybiAqbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ7IH0KLQogICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKICAgICAgICAgdW5zaWduZWQgd2tW
aWV3Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHdrUGFnZUNvdW50OwpAQCAtMzI0LDggKzMwNyw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwogICAg
IHZvaWQgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIAotICAgIHZvaWQgZmx1c2hDb29raWVz
KGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLQog
ICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmco
Ym9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nID0gdmFsdWU7IH0KICAgICBib29sIHNob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZh
aWxGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZzsgfQogICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHROZXR3b3Jr
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRNYWtlTmV4
dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQpAQCAtMzg4LDE5
ICszNjksMTMgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICAvLyBOZXR3b3JrIFByb2Nlc3MgTWFu
YWdlbWVudAotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIGVuc3VyZU5ldHdvcmtQcm9jZXNzKFdl
YnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3JlID0gbnVsbHB0cik7Ci0gICAgTmV0
d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX25ldHdv
cmtQcm9jZXNzLmdldCgpOyB9CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29y
a1Byb2Nlc3NQcm94eSYpOwogCi0gICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24o
V2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwotCiAgICAgYm9vbCBpc1NlcnZpY2VXb3Jr
ZXJQYWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmllcikgY29uc3Q7CiAjaWYgRU5BQkxFKFNFUlZJ
Q0VfV09SS0VSKQotICAgIHZvaWQgZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05l
dHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAg
ICBzdGF0aWMgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1By
b2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYs
IFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQg
cmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5Jik7Ci0gICAg
c2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NlcnZp
Y2VXb3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKTsgfQotICAgIHZvaWQgc2V0QWxsb3dzQW55
U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGJvb2wgYWxsb3dzKSB7IG1fYWxsb3dzQW55
U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyID0gYWxsb3dzOyB9Ci0gICAgYm9vbCBhbGxv
d3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoKSBjb25zdCB7IHJldHVybiBtX2Fs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjsgfQorICAgIHNpemVfdCBzZXJ2
aWNlV29ya2VyUHJveGllc0NvdW50KCkgY29uc3QgeyByZXR1cm4gc2VydmljZVdvcmtlclByb2Nl
c3NlcygpLmNvbXB1dGVTaXplKCk7IH0KICAgICB2b2lkIHVwZGF0ZVNlcnZpY2VXb3JrZXJVc2Vy
QWdlbnQoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpOwogICAgIGNvbnN0IE9wdGlvbmFsPFVzZXJD
b250ZW50Q29udHJvbGxlcklkZW50aWZpZXI+JiB1c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlm
aWVyRm9yU2VydmljZVdvcmtlcnMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJDb250ZW50Q29udHJv
bGxlcklERm9yU2VydmljZVdvcmtlcjsgfQogICAgIGJvb2wgaGFzU2VydmljZVdvcmtlckZvcmVn
cm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdDsKQEAgLTQ1OSw4ICs0MzQsNiBAQCBwdWJs
aWM6CiAgICAgYm9vbCBhbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSBjb25zdCB7IHJl
dHVybiBtX2Fsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eTsgfQogICAgIGJvb2wgc2hvdWxk
VGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkVGFrZVVJ
QmFja2dyb3VuZEFzc2VydGlvbjsgfQogCi0gICAgdm9pZCBzeW50aGVzaXplQXBwSXNCYWNrZ3Jv
dW5kKGJvb2wgYmFja2dyb3VuZCk7Ci0gICAgCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAgICAgdm9p
ZCBnYW1lcGFkQ29ubmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYsIFdlYkNvcmU6OkV2ZW50TWFrZXNH
YW1lcGFkc1Zpc2libGUpOwogICAgIHZvaWQgZ2FtZXBhZERpc2Nvbm5lY3RlZChjb25zdCBVSUdh
bWVwYWQmKTsKQEAgLTQ5OCw3ICs0NzEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckN1cnJl
bnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKLSAgICB2b2lkIGRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5z
ZmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgZnJv
bURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIHRvRG9tYWluLCBPcHRp
b25TZXQ8V2ViQ29yZTo6Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6RmxhZz4sIFdl
YlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsKICAgICB2b2lk
IHNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4+JiYpOwogICAgIHZvaWQgc2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0
aW5nKGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5RG9tYWluLCBj
b25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdGhpcmRQYXJ0eURvbWFpbiwgYm9vbCBz
aG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
ICAgICB2b2lkIHNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CkBAIC01MjUsOCArNDk3LDggQEAgcHVibGljOgogICAg
IAogICAgIFBsdWdJbkF1dG9TdGFydFByb3ZpZGVyJiBwbHVnSW5BdXRvU3RhcnRQcm92aWRlcigp
IHsgcmV0dXJuIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI7IH0KIAotICAgIHZvaWQgc2V0VXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKLSAgICBib29sIHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3VzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3M7IH0KKyAgICBzdGF0aWMgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzKGJvb2wpOworICAgIHN0YXRpYyBib29sIHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MoKSB7IHJldHVybiBzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7
IH0KIAogI2lmIEVOQUJMRShDRlBSRUZTX0RJUkVDVF9NT0RFKQogICAgIHZvaWQgbm90aWZ5UHJl
ZmVyZW5jZXNDaGFuZ2VkKGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgT3B0aW9uYWw8U3RyaW5nPiYgZW5jb2RlZFZhbHVlKTsKQEAgLTU0Myw2ICs1MTUsMTcg
QEAgcHVibGljOgogICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlBy
b2Nlc3MoT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRwb2ludE1lc3NhZ2UpOwogI2VuZGlm
CiAKKyAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOworICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5n
PiB1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKTsKKworI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCisgICAgc3RhdGljIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7
CisgICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMg
U3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHdl
YkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRl
bXBvcmFyeURpcmVjdG9yeSgpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9y
bUluaXRpYWxpemUoKTsKIApAQCAtNTU2LDggKzUzOSw2IEBAIHByaXZhdGU6CiAgICAgV2ViUHJv
Y2Vzc1Byb3h5JiBjcmVhdGVOZXdXZWJQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9j
ZXNzUHJveHk6OklzUHJld2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8p
OwogICAgIHZvaWQgaW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiwgV2Vi
c2l0ZURhdGFTdG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNz
UHJveHk6OklzUHJld2FybWVkOjpObyk7CiAKLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5l
dHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0KICAgICB2
b2lkIGhhbmRsZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
TmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5KTsKICAgICB2b2lkIGhhbmRsZVN5bmNo
cm9ub3VzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1l
LCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNl
ckRhdGEmJik+JiYpOwogCkBAIC01ODEsMTQgKzU2Miw2IEBAIHByaXZhdGU6CiAKICAgICBib29s
IHVzZXNTaW5nbGVXZWJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT51
c2VzU2luZ2xlV2ViUHJvY2VzcygpOyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IHN0YXRpYyBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJp
bmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5n
Q2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGly
ZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3Rvcnko
KTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCByZWdpc3Rlck5vdGlm
aWNhdGlvbk9ic2VydmVycygpOwogICAgIHZvaWQgdW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2Vy
dmVycygpOwpAQCAtNjMwLDkgKzYwMyw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxQQUw6OlNl
c3Npb25JRCwgV2Vha1B0cjxXZWJQcm9jZXNzUHJveHk+PiBtX2R1bW15UHJvY2Vzc1Byb3hpZXM7
IC8vIExpZ2h0d2VpZ2h0IFdlYlByb2Nlc3NQcm94eSBvYmplY3RzIHdpdGhvdXQgYmFja2luZyBw
cm9jZXNzLgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIFdlYWtIYXNoU2V0PFdl
YlByb2Nlc3NQcm94eT4gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzOworICAgIHN0YXRpYyBXZWFr
SGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCk7CiAgICAg
Ym9vbCBtX3dhaXRpbmdGb3JXb3JrZXJDb250ZXh0UHJvY2Vzc0Nvbm5lY3Rpb24geyBmYWxzZSB9
OwotICAgIGJvb2wgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIgeyBm
YWxzZSB9OwogICAgIFN0cmluZyBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQ7CiAgICAgT3B0aW9u
YWw8V2ViUHJlZmVyZW5jZXNTdG9yZT4gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXM7CiAgICAg
T3B0aW9uYWw8VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllcj4gbV91c2VyQ29udGVudENv
bnRyb2xsZXJJREZvclNlcnZpY2VXb3JrZXI7CkBAIC02NDgsNyArNjIwLDYgQEAgcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiBtX2F1dG9tYXRpb25D
bGllbnQ7CiAgICAgVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+IG1fZG93bmxvYWRDbGll
bnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+
IG1faGlzdG9yeUNsaWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogCiAgICAgUmVm
UHRyPFdlYkF1dG9tYXRpb25TZXNzaW9uPiBtX2F1dG9tYXRpb25TZXNzaW9uOwogCkBAIC02ODAs
OCArNjUxLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQgeyBm
YWxzZSB9OwogICAgIGRvdWJsZSBtX21lbW9yeVNhbXBsZXJJbnRlcnZhbCB7IDE0MDAuMCB9Owog
Ci0gICAgUmVmUHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRlRGF0YVN0b3Jl
OwotCiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIqLCBSZWZQdHI8V2ViQ29udGV4dFN1
cHBsZW1lbnQ+LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4gV2ViQ29udGV4dFN1cHBsZW1lbnRNYXA7
CiAgICAgV2ViQ29udGV4dFN1cHBsZW1lbnRNYXAgbV9zdXBwbGVtZW50czsKIApAQCAtNzE0LDgg
KzY4Myw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fcHJvY2Vzc1Rlcm1pbmF0aW9uRW5hYmxl
ZCB7IHRydWUgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBt
X25ldHdvcmtQcm9jZXNzOwotCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPERpY3Rpb25h
cnlDYWxsYmFjaz4+IG1fZGljdGlvbmFyeUNhbGxiYWNrczsKIAogI2lmIFVTRShTT1VQKQpAQCAt
ODIwLDcgKzc4Nyw3IEBAIHByaXZhdGU6CiAjZWxzZQogICAgIGJvb2wgbV9pc0RlbGF5ZWRXZWJQ
cm9jZXNzTGF1bmNoRGlzYWJsZWQgeyBmYWxzZSB9OwogI2VuZGlmCi0gICAgYm9vbCBtX3VzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgeyBmYWxzZSB9OworICAgIHN0YXRpYyBib29sIHNf
dXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCiAgICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4g
bV9kb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbjsKQEAgLTgzMSwyMCArNzk4LDYgQEAgcHJpdmF0
ZToKICNlbmRpZgogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlKQotewotICAgIGlmIChtX25l
dHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSkKLXsKLSAg
ICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3Rk
Ojpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb0FsbFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNzYWdlKQog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXggZDY2
MTAzMzhiNmNmNjBhMjdhNmY3NWRhZWMzNDlhOGY3MmFiM2I4NS4uMmU1NGE4MTE1YzQ4ODdmMGEx
ZGQ4M2VkZjViZGNiZTNhNDA4YTI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwCkBAIC03MzgsNyArNzM4LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6
OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbiwg
TWUKIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihN
ZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRl
bGF5ZWRSZXBseSYmIHJlcGx5KQogewotICAgIG1fcHJvY2Vzc1Bvb2wtPmdldE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOworICAgIHdlYnNpdGVEYXRhU3Rv
cmUoKS5uZXR3b3JrUHJvY2VzcygpLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqdGhpcywg
V1RGTW92ZShyZXBseSkpOwogfQogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFT
dG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2Ev
V2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4IDdjNDQwODUxNjc3MzY4YjVkZjg5YTg2ZmY0
ZDNiNTE1MzRiOTBiYjcuLmEyMDcyNTQ4OGJiOTM5ZTM3YTZhNGRiZDc0ZjVlNzU1MzM4NzBiNjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dl
YnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2ltcG9ydCAiQ29va2llU3RvcmFnZVV0aWxzQ0YuaCIKICNpbXBvcnQgIkRlZmF1bHRXZWJC
cm93c2VyQ2hlY2tzLmgiCisjaW1wb3J0ICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0
ICJTYW5kYm94VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJTdG9yYWdlTWFuYWdlci5oIgogI2ltcG9y
dCAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgiCkBAIC00NCw2ICs0NSw3IEBACiAjaW1w
b3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdl
Lmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvRW50aXRsZW1lbnRz
Lmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQpAQCAtNTYyLDQgKzU2NCw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVp
bml0aWFsaXplQXBwQm91bmREb21haW5zKCkKIH0KICNlbmRpZgogCitib29sIFdlYnNpdGVEYXRh
U3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmlu
ZyYgZW50aXRsZW1lbnQpCit7CisgICAgcmV0dXJuIFdURjo6aGFzRW50aXRsZW1lbnQobmV0d29y
a1Byb2Nlc3MoKS5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwgZW50aXRsZW1lbnQudXRm
OCgpLmRhdGEoKSk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggMDgzMGNhNzVhN2ZjMzhl
NjQ1Yjc3NWIzOWIzMzc1ZDRjMjA1MDM3ZC4uNDgwMzRmMWVmMThlZDdkZjc2NDMwZDg0NDAwNTAx
NTgxMzcyOTgwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRl
ICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJTdG9yYWdlQWNjZXNz
U3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRDYWNoZS5oIgorI2luY2x1ZGUgIldl
YkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYktpdDJJbml0aWFsaXplLmgiCiAj
aW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0NhY2hlLmgiCkBA
IC03NSw2ICs3NiwxMCBAQAogI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgi
CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkRlZmF1bHRXZWJCcm93
c2VyQ2hlY2tzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBib29s
IGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnM7CkBAIC04MywxMyArODgsMTkg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9y
aWdpbnMoKQogICAgIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMgPSB0cnVl
OwogfQogCi1zdGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+
JiBub25EZWZhdWx0RGF0YVN0b3JlcygpCitzdGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwg
V2Vic2l0ZURhdGFTdG9yZSo+JiBhbGxEYXRhU3RvcmVzKCkKIHsKICAgICBSRUxFQVNFX0FTU0VS
VChpc1VJVGhyZWFkKCkpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFBBTDo6
U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4+IG1hcDsKICAgICByZXR1cm4gbWFwOwogfQog
Cit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKEZ1bmN0aW9u
PHZvaWQoV2Vic2l0ZURhdGFTdG9yZSYpPiYmIGZ1bmN0aW9uKQoreworICAgIGZvciAoYXV0byog
ZGF0YVN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgICAgICBmdW5jdGlvbigq
ZGF0YVN0b3JlKTsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVEYXRhU3RvcmU6
OmNyZWF0ZU5vblBlcnNpc3RlbnQoKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYnNp
dGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb246OmNyZWF0ZShJc1BlcnNp
c3RlbnQ6Ok5vKSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlRXBoZW1lcmFsU2Vzc2lvbklEKCkp
KTsKQEAgLTExNSw3ICsxMjYsNyBAQCBXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3Jl
KFJlZjxXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbj4mJiBjb25maWd1cgogI2VuZGlmCiB7
CiAgICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1h
eWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklE
TWFwKCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwpAQCAtMTI4LDE3ICsxMzksMTIgQEAgV2Vic2l0ZURhdGFTdG9yZTo6fldlYnNp
dGVEYXRhU3RvcmUoKQogCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBpZiAobV9zZXNz
aW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBB
U1NFUlQobm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOwot
ICAgICAgICBub25EZWZhdWx0RGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7Ci0gICAg
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5y
ZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBBU1NFUlQo
YWxsRGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7CisgICAgYWxsRGF0YVN0
b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW1vdmVT
ZXNzaW9uKCp0aGlzKTsKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0gICAgICAgIGlmIChhdXRv
KiBncHVQcm9jZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgp
KQotICAgICAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklE
KTsKKyAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b25JZkNyZWF0ZWQoKSkKKyAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9u
KG1fc2Vzc2lvbklEKTsKICNlbmRpZgogfQogCkBAIC0xNjksMTcgKzE3NSwzMyBAQCBib29sIFdl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKQogICAgIHJldHVybiAhIWds
b2JhbERlZmF1bHREYXRhU3RvcmUoKTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXli
ZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lz
dGVyV2l0aFNlc3Npb25JRE1hcCgpCiB7Ci0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBub25E
ZWZhdWx0RGF0YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7Ci0gICAgICAgIEFTU0VS
VF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0byByZXN1bHQgPSBh
bGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VE
KHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworfQorCitXZWJzaXRlRGF0YVN0b3JlKiBXZWJz
aXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCit7CisgICAgcmV0dXJuIGFsbERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklE
KTsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1By
b2Nlc3MoKQoreworICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykgeworICAgICAgICBpZiAobV9z
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBtX3Nlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpKQorICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IE5ldHdv
cmtQcm9jZXNzUHJveHk6OmRlZmF1bHROZXR3b3JrUHJvY2VzcygpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRl
KCk7CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOwogICAgIH0K
KworICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKIH0KIAotV2Vic2l0ZURhdGFTdG9yZSog
V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklE
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK05ldHdvcmtQcm9jZXNzUHJveHkmIFdlYnNpdGVE
YXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc2Vzc2lvbklE
ICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgPyBub25EZWZhdWx0RGF0YVN0
b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxX
ZWJzaXRlRGF0YVN0b3JlJj4oKnRoaXMpLm5ldHdvcmtQcm9jZXNzKCk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykK
QEAgLTE5NSwxMiArMjE3LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1bnJlZ2lzdGVyUHJv
Y2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiAgICAgbV9wcm9jZXNzZXMucmVtb3ZlKHBy
b2Nlc3MpOwogfQogCi1XZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bv
b2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpCi17Ci0gICAgYXV0byBwb29scyA9IHByb2Nl
c3NQb29scygxKTsKLSAgICByZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8gbnVsbHB0ciA6IHBvb2xz
LmJlZ2luKCktPmdldCgpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc29sdmVEaXJl
Y3Rvcmllc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9oYXNSZXNvbHZlZERpcmVjdG9yaWVz
KQpAQCAtNDQwLDI4ICs0NTYsMjEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFB
bmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICNlbmRpZgog
CiAgICAgYXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlTmV0d29ya1Byb2Nl
c3NBY2Nlc3NUeXBlRm9yRGF0YUZldGNoKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgpKTsKLSAg
ICBpZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25l
KSB7Ci0gICAgICAgIGF1dG8gcG9vbHMgPSBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPT0gUHJv
Y2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaCA/IGVuc3VyZVByb2Nlc3NQb29scygpIDogcHJvY2Vzc1Bv
b2xzKCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewotICAgICAg
ICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKLSAgICAgICAgICAgIGNh
c2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlm
ICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFByb2Nl
c3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKHRoaXMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgotICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotCisgICAgc3dpdGNoIChuZXR3b3JrUHJv
Y2Vzc0FjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Cisg
ICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNz
KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25s
eUlmTGF1bmNoZWQ6CisgICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7CiAgICAgICAgICAg
ICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAg
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmZldGNoV2Vic2l0ZURhdGEobV9zZXNzaW9u
SUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNz
UG9vbF0oV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPmZldGNoV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRp
b25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkgewogICAg
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKFdU
Rk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CisgICAgICAgIGJyZWFr
OwogICAgIH0KIAogICAgIGF1dG8gd2ViUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlV2ViUHJv
Y2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwpA
QCAtNzI0LDMxICs3MzMsMjQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICAgICBib29sIGRp
ZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSA9IGZhbHNlOwogI2VuZGlm
CiAgICAgYXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlTmV0d29ya1Byb2Nl
c3NBY2Nlc3NUeXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwot
ICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5v
bmUpIHsKLSAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQ
cm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNz
UG9vbHMoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewotICAgICAgICAgICAg
Y2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAg
aWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJv
Y2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6Ci0gICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICBzd2l0Y2ggKG5ldHdvcmtQ
cm9jZXNzQWNjZXNzVHlwZSkgeworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoK
KyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nl
c3MpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpP
bmx5SWZMYXVuY2hlZDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAg
ICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAg
ICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNz
aW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJv
Y2Vzc1Bvb2xdIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRlbGV0ZVdlYnNpdGVE
YXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRp
bmdDYWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKICAgICAgICAgICAgIGRpZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVX
ZWJzaXRlRGF0YSA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgorICAgICAgICBicmVhazsKICAgICB9CiAK
ICAgICBhdXRvIHdlYlByb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZVdlYlByb2Nlc3NBY2Nlc3NU
eXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwpAQCAtODkzLDE0
ICs4OTUsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MpKSB7CiAgICAgICAgIGlmICghZGlkTm90aWZ5TmV0
d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHByb2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBk
YXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNr
KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGEobV9z
ZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eworICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxi
YWNrKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhbGxiYWNrQWdn
cmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CkBAIC05OTQsMTIgKzk5MSwxMCBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4g
ZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9v
bHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CiAg
ICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAg
ICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAg
ICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nl
c3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAgICAgICAgICAgICAgICBuZXR3
b3JrUHJvY2VzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNl
IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgpAQCAtMTAyMSw3ICsxMDE2LDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFU
eXBlcywgY29uc3QgVmUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQs
IGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMs
IHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsK
KyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5z
KG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1lcywgSFNUU0Nh
Y2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHBy
b2Nlc3NQb29sXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQ
ZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC0xMTgwLDE4
ICsxMTc1LDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKFNlY29uZHMgc2Vjb25kcykK
IHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRT
eW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91
dEZvclRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vydmlj
ZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vy
dmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5
KCksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0U2VydmljZVdvcmtlclRp
bWVvdXRGb3JUZXN0aW5nKCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJv
Y2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2
aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDAp
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRl
c3Rpbmc6OlJlcGx5KCksIDApOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKQEAgLTEyMDEsOCArMTE5MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4
U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50LCBDb21wbGV0CiAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNv
dW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50
cnlDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMTEsOCAr
MTE5OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNp
emVfdCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uCiAgICAgCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFBydW5l
RW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVu
ZUVudHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRo
ZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTIyMSw4ICsxMjA4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFu
ZGxlcjwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQsIHNlY29u
ZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMzEsMjAgKzEy
MTcsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRh
UmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1l
QmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRN
aW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAgICAgCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kdW1wUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xMjU2LDEyICsxMjM1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2kKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ByZXZh
bGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUHJldmFsZW50UmVzb3VyY2Uo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5k
ZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1By
ZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjczLDEyICsxMjQ3LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBw
cm9jZXNzLT5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNHcmFuZGZh
dGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyOTIsOCArMTI2MSw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNl
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzA3
LDEwICsxMjc1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJj
ZUZvckRlYnVnTW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGkKICAgICAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFByZXZhbGVudFJlc291
cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlz
VmVyeVByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzIyLDEyICsxMjg3LDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgcHJvY2Vzcy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTEzNDEsMTAgKzEzMDEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZQogICAgIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91
bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzUzLDgg
KzEzMTAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdgogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91
bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwg
dmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1Jl
bW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihj
b25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzY4LDIyICsxMzI0LDE0
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
KGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbiht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvcEZyYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYgc3Vi
RnJhbWVVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW4oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVS
TCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM5
NywyMyArMTM0NSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVQogCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
c3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVS
TCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3Vi
cmVzb3VyY2VVbmRlcihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZy
YW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nl
c3MtPmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxl
cihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3Vy
Y2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNv
bnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xNDI3LDEwICsxMzY2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJj
ZVVSTCwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBz
dWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0
ZWRUbyB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVz
b3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NDIsMTIgKzEzNzgsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0
IFVSTCYgc3VicmVzb3VyY2VVUgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGly
ZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9t
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJM
IH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBV
UkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTQ1OSwxMiArMTM5MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxS
ZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYg
dG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NzYsMjUgKzE0MDIsMTQgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25z
dCBVUkwmIHRvcEZyYW1lVVJMLCBjb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVj
dGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVy
ZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJM
JiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
b21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVy
ZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxS
ZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE1MDYsNjAg
KzE0MjEsNDEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNl
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVh
clByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9E
ZWZhdWx0VmFsdWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1
bHRWYWx1ZXMobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVs
dFZhbHVlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSgpCiB7CiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnN1Ym1pdFRlbGVtZXRyeSht
X3Nlc3Npb25JRCwgW10geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdWJtaXRU
ZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2RpZmllZFNp
bmNlLCBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vz
c2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2No
ZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5j
ZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1h
cnkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIHN0cnVjdCBDYWxsYmFja0FnZ3JlZ2F0
b3IgOiBSZWZDb3VudGVkPENhbGxiYWNrQWdncmVnYXRvcj4gewotICAgICAgICBDYWxsYmFja0Fn
Z3JlZ2F0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCisg
ICAgc3RydWN0IExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yIDogUmVmQ291bnRlZDxMb2NhbENhbGxi
YWNrQWdncmVnYXRvcj4geworICAgICAgICBMb2NhbENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRo
aXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIDogbV9j
b21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgewog
ICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAgICAgfTsKIAotICAg
ICAgICB+Q2FsbGJhY2tBZ2dyZWdhdG9yKCkKKyAgICAgICAgfkxvY2FsQ2FsbGJhY2tBZ2dyZWdh
dG9yKCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
IApAQCAtMTU3NCwzOCArMTQ3MCwzMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgICAg
ICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4gbV9jb21wbGV0aW9uSGFuZGxlcjsKICAgICAgICAg
VmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IG1f
cmVzdWx0czsKICAgICB9OwotCi0gICAgUmVmUHRyPENhbGxiYWNrQWdncmVnYXRvcj4gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gYWRvcHRSZWYobmV3IENhbGxiYWNrQWdncmVnYXRvcihXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3Vy
ZVByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Ci0gICAgICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcykuZ2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9j
ZXNzUG9vbF0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0
eURhdGE+JiYgZGF0YSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRk
UmVzdWx0KFdURk1vdmUoZGF0YSkpOwotICAgICAgICAgICAgfSk7CisgICAgCisgICAgYXV0byBs
b2NhbENhbGxiYWNrQWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBMb2NhbENhbGxiYWNrQWdncmVn
YXRvcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworICAgIAorICAgIGF1dG8gd3RmQ2Fs
bGJhY2tBZ2dyZWdhdG9yID0gV1RGOjpDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBsb2NhbENhbGxiYWNrQWdncmVnYXRvcl0g
eworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
U3VtbWFyeShtX3Nlc3Npb25JRCwgW2xvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yXShWZWN0b3I8V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7Cisg
ICAgICAgICAgICBsb2NhbENhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVzdWx0KFdURk1vdmUoZGF0
YSkpOwogICAgICAgICB9KTsKLSAgICB9CisgICAgfSk7CisgICAgCisgICAgZm9yIChhdXRvKiBw
cm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAg
cHJvY2Vzc1Bvb2wtPnNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KFt3
dGZDYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlclN0YXRp
c3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAot
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNs
ZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0
aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vz
c2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1Vw
ZGF0ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ29v
a2llQmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ29va2ll
QmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29y
ZHNQcm9jZXNzaW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE2MTQsMjQgKzE1MDMsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVs
ZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmQKICAgICAK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVk
dWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lv
bklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVz
KG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9z
ZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjQzLDIy
ICsxNTIxLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJM
JiB1cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhCiAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dExhc3RTZWVuKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kb21haW5JREV4aXN0c0lu
RGF0YWJhc2UobV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpt
ZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9wRnJh
bWVVcmwxLCBjb25zdCBVUkwmIHRvcEZyYW1lVXJsMiwgU2Vjb25kcyBsYXN0U2VlbiwgYm9vbCBo
YWRVc2VySW50ZXJhY3Rpb24sIFNlY29uZHMgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgYm9v
bCBpc0dyYW5kZmF0aGVyZWQsIGJvb2wgaXNQcmV2YWxlbnQsIGJvb2wgaXNWZXJ5UHJldmFsZW50
LCB1bnNpZ25lZCBkYXRhUmVjb3Jkc1JlbW92ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2NzAsMTAgKzE1NDAsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29uc3Qg
VVJMJiB0b3BGcgogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFz
dFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNH
cmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1Jl
bW92ZWQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BG
cmFtZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50
LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29u
c3QgVVJMJiB1cmwsIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9y
QWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2ODUsMTggKzE1NTIsMTQgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhj
b25zdCBVUkwmIHVybCwgYm9vbCBoYWQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0
aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwg
aXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZh
bHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MDQsOCAr
MTU2Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxlCiAgICAgdXNlRXhwbGljaXRJVFBTdGF0
ZSgpOwogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3Qo
bV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZXN0KG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQ
YWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8
U3RyaW5nPiYmIGRvbWFpbnMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcxNiw3ICsxNTc4
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhX
ZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIHdlYlBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NF
bnRyaWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIApA
QCAtMTcyNCw4ICsxNTg2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkgKIHsKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9M
aXZlVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlv
bihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTczOSwxMCArMTYwMCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9n
VXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkCiAg
ICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmxvZ1Vz
ZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc1NCwx
MyArMTYxMiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9u
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAg
IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0hhZFVz
ZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJs
LCBjb25zdCBVUkwmIHRvcFVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTE3NzIsMTMgKzE2MjQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBj
b25zdAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1Jl
bGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BV
cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3
OTIsMTAgKzE2MzgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0
aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclVzZXJJbnRlcmFjdGlv
bihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclVz
ZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJl
ZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgw
OSwxMCArMTY1Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChj
b25zdCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvCiAgICAgCiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRHcmFuZGZhdGhlcmVk
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5k
ZmF0aGVyZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wg
dmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTE4MjEsMTAgKzE2NjEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFi
YXNlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJgogICAgIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0
YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2
YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBV
UkwmIGZyb21VUkwsIGNvbnN0IFVSTCYgdG9VUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MzMsNjIgKzE2NzAsMzggQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhj
b25zdCBVUkwmIGYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3MtPnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5n
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRDcm9zc1Np
dGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdG9VUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGlu
ZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1f
c2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGlu
Y2x1ZGVIdHRwT25seUNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNv
b2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9y
YWdlRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0
aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhh
c0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91
bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZERv
d25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZERvd25ncmFkZVJlZmVy
cmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAj
aWYgIVBMQVRGT1JNKENPQ09BKQpAQCAtMTkxOSwxMCArMTczMiw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShXZWJDb3JlOjpUaGlyZFBh
cnR5Q29va2llCiAgICAgICAgICAgICB3ZWJQcm9jZXNzLnNldFRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGUoYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0K
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlKG1fc2Vzc2lvbklELCBibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2Nr
aW5nTW9kZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKGJvb2wgZW5h
YmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTkzMCwxMCArMTc0MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlCiAgICAgYXV0byBmbGFn
ID0gZW5hYmxlZCA/IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZ
ZXMgOiBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87CiAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
c2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgZmxhZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0
aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTQxLDIwICsxNzQ4LDE0
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgYXV0byBtb2RlID0gZW5hYmxlZCA/IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzIDogV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGU6Ok5vbmU7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0
Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBt
b2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgbW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tp
ZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFRvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQ
YXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmaXJzdFBhcnR5VVJMLCBj
b25zdCBVUkwmIGNuYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xOTY2LDggKzE3NjcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdAog
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3Jr
UHJvY2VzcygpLnNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBmaXJzdFBhcnR5VVJMLmhvc3QoKS50b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nl
c3Npb25JRCwgZmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBh
cnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NzksMTggKzE3NzksMTMg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQ
YXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZygKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVE
b21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZSgpLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3JhZ2UoKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENh
Y2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk5OCw4ICsxNzkz
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVu
dFJlc291cmNlcyhTZWNvbmRzIHNlY29uZHMsIEMKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNv
dXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNl
cyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKHNlY29uZHMpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CkBA
IC0yMDA5LDI2ICsxODAzLDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhB
Z2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q2FjaGVNYXhBZ2VDYXBG
b3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogI2VuZGlmCiB9CiAKLWJvb2wgV2Vi
c2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmIHBy
b2Nlc3NQb29sKSBjb25zdAotewotICAgIGlmIChhdXRvKiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9
IHByb2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUoKSkKLSAgICAgICAgcmV0dXJuIHByb2Nlc3NQ
b29sRGF0YVN0b3JlID09IHRoaXM7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkg
PSBwcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICByZXR1cm4gbmV0d29ya1By
b2Nlc3NQcm94eS0+aGFzU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCiBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnBy
b2Nlc3NQb29scyhzaXplX3QgbGltaXQpIGNvbnN0CiB7CiAgICAgSGFzaFNldDxSZWZQdHI8V2Vi
UHJvY2Vzc1Bvb2w+PiBwcm9jZXNzUG9vbHM7CkBAIC0yMDQzLDkgKzE4MjMsNiBAQCBIYXNoU2V0
PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyhz
aXplX3QgbGltaXQpIGNvbgogICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9uZSBvZiB0aGUgbGVnYWN5IGRhdGEgc3RvcmVzLgogICAg
ICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKCpwcm9j
ZXNzUG9vbCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAgICAgIHByb2Nl
c3NQb29scy5hZGQocHJvY2Vzc1Bvb2wpOwogICAgICAgICAgICAgaWYgKHByb2Nlc3NQb29scy5z
aXplKCkgPT0gbGltaXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDg0LDggKzE4NjEs
NyBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVNZWRpYUtleUZpbGUoY29uc3QgU3RyaW5nJiBtZWRp
YUtleURpcmVjdG9yeSkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1NwZWNpZmljSFRU
UFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJbmZvKiBjZXJ0aWZpY2F0
ZSwgY29uc3QgU3RyaW5nJiBob3N0KQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRp
ZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxv
d1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRl
SW5mbygpLCBob3N0KSwgMCk7CiB9CiAKIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+IFdlYnNpdGVEYXRhU3RvcmU6Om1lZGlhS2V5T3JpZ2lucyhjb25zdCBTdHJpbmcmIG1lZGlh
S2V5c1N0b3JhZ2VEaXJlY3RvcnkpCkBAIC0yMTQwLDYgKzE5MTYsMzAgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdl
RGlyZWN0b3J5LAogICAgIH0KIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp0ZXJtaW5hdGVO
ZXR3b3JrUHJvY2VzcygpCit7CisgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX25ldHdvcmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsKKyAgICBtX25ldHdv
cmtQcm9jZXNzID0gbnVsbHB0cjsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0
d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5k
UHJlcGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25JbW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1By
b2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCkKK3sKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworfQor
Cit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpCit7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOworfQorCiBib29s
IFdlYnNpdGVEYXRhU3RvcmU6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgY29uc3QK
IHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjE2OSwxNyArMTk2
OSwxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICAgICAgCiAgICAgICAgIHJlc29sdmVEaXJlY3Rvcmll
c0lmTmVjZXNzYXJ5KCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3
b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCB0cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCB0cnVlKSwgMCk7CisgICAgICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5z
ZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCh0cnVlKSwgbV9zZXNzaW9uSUQpOwotICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQ
cm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQobV9zZXNzaW9uSUQsIGZhbHNlKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQobV9zZXNzaW9uSUQsIGZhbHNlKSwgMCk7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQogICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2Vz
Rm9yU2Vzc2lvbihNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoZmFsc2UpLCBtX3Nlc3Npb25JRCk7Ci0gICAgfQogCiAgICAgbV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZCA9IGZhbHNlOwogI2Vsc2UKQEAgLTIxOTEsOCArMTk4OSw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
Ym9vbCBlbmFibGVkKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGlu
Z0NhbGxiYWNrKEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY2FsbGJhY2spCiB7CiAg
ICAgaWYgKGNhbGxiYWNrKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJv
Y2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NM
b2dUZXN0aW5nRXZlbnQodHJ1ZSkpOworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGlu
Z0V2ZW50KHRydWUpLCAwKTsKICAgICB9CiAgICAgCiAgICAgbV9zdGF0aXN0aWNzVGVzdGluZ0Nh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CkBAIC0yMjExLDggKzIwMDgsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBl
bmFibGVkLCBDb21wbGV0aQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGVidWdNb2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9k
ZShtX3Nlc3Npb25JRCwgZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOwogICAgIFVOVVNFRF9QQVJBTShjb21wbGV0aW9u
SGFuZGxlcik7CkBAIC0yMjI3LDIwICsyMDIzLDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5pc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLSNlbmRpZgorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RXBoZW1lcmFsKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisjZWxz
ZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShib29sIGVuYWJsZWQp
CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0cmlidXRp
b25EZWJ1Z01vZGUoZW5hYmxlZCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0
cmlidXRpb25EZWJ1Z01vZGUoZW5hYmxlZCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQpAQCAtMjI2Miw0OCArMjA1MywxOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmNsZWFyUmVzb3VyY2VMb2FkU3RhdGlzdGljc0luV2ViUHJvY2Vzc2VzKENvbXBsZXRpb25I
YW5kbAogfQogI2VuZGlmCiAKLVZlY3RvcjxXZWJDb3JlOjpDb29raWU+IFdlYnNpdGVEYXRhU3Rv
cmU6OnBlbmRpbmdDb29raWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29weVRvVmVjdG9yKG1f
cGVuZGluZ0Nvb2tpZXMpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFkZFBlbmRpbmdD
b29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29v
a2llcy5yZW1vdmVJZihbJmNvb2tpZV0oYXV0byYgcGVuZGluZ0Nvb2tpZSkgewotICAgICAgICBy
ZXR1cm4gcGVuZGluZ0Nvb2tpZS5pc0tleUVxdWFsKGNvb2tpZSk7Ci0gICAgfSk7Ci0gICAgbV9w
ZW5kaW5nQ29va2llcy5hZGQoY29va2llKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZW1vdmVQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAg
IG1fcGVuZGluZ0Nvb2tpZXMucmVtb3ZlKGNvb2tpZSk7Ci19Ci0gICAgCi12b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tpZXMoKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMu
Y2xlYXIoKTsKLX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmbHVzaENvb2tpZXMoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmZsdXNoQ29va2ll
cyhzZXNzaW9uSUQoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmZsdXNoQ29va2llcyhzZXNzaW9uSUQoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yV2ViU29ja2V0KGJvb2wgYWxsb3dzKQogewotICAgIGZvciAoYXV0byBwcm9jZXNzUG9v
bCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyksIE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQ6
OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2Nr
ZXQoYWxsb3dzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZUZvcldlYlNvY2tldDo6UmVwbHkoKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpCiB7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQ
b29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+Y2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9uSUQoKSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50
aWFscyhzZXNzaW9uSUQoKSksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpc3Bh
dGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pCkBAIC0yMzI5LDggKzIwOTEs
NiBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0
ZXJzKCkKIAogICAgIHJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7CiAKLSAgICBwYXJh
bWV0ZXJzLnBlbmRpbmdDb29raWVzID0gcGVuZGluZ0Nvb2tpZXMoKTsKLQogICAgIGF1dG8gcmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+cmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5SGFuZGxlOwogICAgIGlmICghcmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCkBAIC0yNDM1LDcgKzIxOTUsMTQgQEAg
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygp
CiAgICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlZCA9IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQ7CiAjZW5kaWYKICAgICBwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKHBhcmFtZXRlcnMp
OworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLmFwcEhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbiA9IGhh
c1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbigpOworI2VuZGlmCiAKKyNp
ZiBVU0UoU09VUCkKKyAgICBuZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKS5nZXRDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQoKSwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBwYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworI2VuZGlm
CisgICAgCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiB9CiAKQEAgLTI0NjUsMTAgKzIyMzIsNiBA
QCBBUEk6OkhUVFBDb29raWVTdG9yZSYgV2Vic2l0ZURhdGFTdG9yZTo6Y29va2llU3RvcmUoKQog
ICAgIHJldHVybiAqbV9jb29raWVTdG9yZTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpk
aWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpCi17Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGlmICghaXNQZXJzaXN0ZW50KCkpIHsKQEAgLTI0NzYsMjMgKzIyMzksMTUgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQo
VmVjdG9yPExvY2FsU3RvcmFnZUQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcykuZ2V0TG9jYWxTdG9yYWdlRGV0YWls
cyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihX
VEZNb3ZlKGRldGFpbHMpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0
IGZldGNoaW5nIGZyb20gbXVsdGlwbGUgcG9vbHMuCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBBU1NFUlQoIWNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldExv
Y2FsU3RvcmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgeworICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihXVEZNb3ZlKGRldGFpbHMpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldFF1b3RhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnJlc2V0UXVvdGEobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKQEAgLTI1MTgs
NyArMjI3MywxMiBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6Omh0dHAzRW5hYmxlZCgpCiB7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQotI2VuZGlmCisKK2Jvb2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJikKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYgLy8gIVBMQVRGT1JNKENPQ09BKQogCiAjaWYgIVVT
RShHTElCKQogV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERldmljZUlkSGFz
aFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpCkBAIC0yNTMwLDM1ICsyMjkwLDE4IEBAIFdURjo6U3Ry
aW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJl
Y3RvcnkoKQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURh
dGEoVVJMJiYgb2xkTmFtZSwgVVJMJiYgbmV3TmFtZSwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZT4gZGF0YVR5cGVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOwotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9zZXNzaW9u
SUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlbmFtZU9yaWdpbklu
V2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01B
SU5TKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24oQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vz
c2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+Y2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyQXBw
Qm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJ
bml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0yNTgwLDcgKzIzMjMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBC
b3VuZERvbWFpbnNUb0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZQogCiAgICAgcHJv
cGFnYXRlQXBwQm91bmREb21haW5zKGdsb2JhbERlZmF1bHREYXRhU3RvcmUoKS5nZXQoKSwgKmFw
cEJvdW5kRG9tYWlucyk7CiAKLSAgICBmb3IgKGF1dG8qIHN0b3JlIDogbm9uRGVmYXVsdERhdGFT
dG9yZXMoKS52YWx1ZXMoKSkKKyAgICBmb3IgKGF1dG8qIHN0b3JlIDogYWxsRGF0YVN0b3Jlcygp
LnZhbHVlcygpKQogICAgICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoc3RvcmUsICphcHBC
b3VuZERvbWFpbnMpOwogfQogCkBAIC0yNTg4LDEwICsyMzMxLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRBcHBCb3VuZERvbWFpbnNGb3JJVFAoY29uc3QgSGFzaFNldDxXZWJDb3JlOjpS
ZWdpc3RyYWIKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEFwcEJvdW5kRG9tYWluc0ZvclJlc291cmNlTG9h
ZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAjZW5kaWYKIApAQCAtMjU5OSwxNiArMjMzOSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IFN0cmlu
ZyYgYnVuZAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZp
ZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS51cGRh
dGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVy
SW5OZXR3b3JrUHJvY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlmaWVyKFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAppbmRleCAwZGM5MWYy
M2M0MTU0Mzk1YzhlYmY4OTBmMzViZDAxODBjZDUxYWFkLi5iNTU4YTFkOGUxN2NmNTE2YmY4NWY1
MTkzZTE0MGM5YjA1OWZmYWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC03NSw2ICs3NSw3IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7CiBjbGFzcyBTZWNLZXlQ
cm94eVN0b3JlOwogY2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CitjbGFzcyBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OwogY2xhc3MgU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBX
ZWJDZXJ0aWZpY2F0ZUluZm87CiBjbGFzcyBXZWJQYWdlUHJveHk7CkBAIC0xMDksNyArMTEwLDEy
IEBAIHB1YmxpYzoKICAgICBXZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvbj4mJiwgUEFMOjpTZXNzaW9uSUQpOwogICAgIH5XZWJzaXRlRGF0YVN0b3JlKCk7
CiAKLSAgICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0
b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEKTsKKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNo
V2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRhU3RvcmUmKT4mJik7Cisg
ICAgCisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MoKSBjb25zdDsKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcygpOworCisgICAgc3RhdGljIFdl
YnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lv
bklEKTsKIAogICAgIGJvb2wgaXNQZXJzaXN0ZW50KCkgY29uc3QgeyByZXR1cm4gIW1fc2Vzc2lv
bklELmlzRXBoZW1lcmFsKCk7IH0KICAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQoKSBjb25z
dCB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQpAQCAtMTE5LDYgKzEyNSwxMSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgY29uc3QgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiYgcHJvY2Vzc2VzKCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9jZXNzZXM7IH0KIAorICAgIHZvaWQgdGVybWluYXRlTmV0d29y
a1Byb2Nlc3MoKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRG
b3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7CisgICAgdm9pZCBz
ZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKKwogICAgIGJvb2wgcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKGJvb2wpOwogICAgIGJvb2wgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9k
ZSgpIGNvbnN0OwpAQCAtMjM1LDE1ICsyNDYsOCBAQCBwdWJsaWM6CiAKICAgICBEZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZSYgZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKSB7IHJldHVybiBtX2Rldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlLmdldCgpOyB9CiAKLSAgICBXZWJQcm9jZXNzUG9vbCogcHJvY2Vz
c1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGJvb2wgaXNBc3NvY2lhdGVk
UHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmKSBjb25zdDsKLQogICAgIFdlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzIHBhcmFtZXRlcnMoKTsKIAotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+
IHBlbmRpbmdDb29raWVzKCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRQZW5kaW5nQ29va2llKGNvbnN0
IFdlYkNvcmU6OkNvb2tpZSYpOwotICAgIHZvaWQgcmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBX
ZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIGNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKICAgICB2
b2lkIGZsdXNoQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQg
Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpOwogCkBAIC0yNzIsOCArMjc2LDYgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbihXZWJDb3JlOjpN
b2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uJiYpOwogI2VuZGlmCiAKLSAgICB2b2lk
IGRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci0KICAgICBjb25zdCBXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi5n
ZXQoKTsgfQogCiAgICAgV2Vic2l0ZURhdGFTdG9yZUNsaWVudCYgY2xpZW50KCkgeyByZXR1cm4g
bV9jbGllbnQuZ2V0KCk7IH0KQEAgLTI4Myw2ICsyODUsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEoVVJMJiYsIFVSTCYmLCBPcHRpb25TZXQ8V2Vic2l0
ZURhdGFUeXBlPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAgIGJvb2wgbmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CisKICNp
ZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogICAgIFdlYkRldmljZU9yaWVudGF0aW9uQW5k
TW90aW9uQWNjZXNzQ29udHJvbGxlciYgZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3ND
b250cm9sbGVyKCkgeyByZXR1cm4gbV9kZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0Nv
bnRyb2xsZXI7IH0KICNlbmRpZgpAQCAtMzU5LDcgKzM2Myw3IEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURp
cmVjdG9yeSwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSk7CiAgICAgc3RhdGljIHZvaWQgcmVtb3Zl
TWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgY29uc3Qg
SGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAKLSAgICB2b2lkIG1heWJl
UmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgdm9pZCByZWdpc3RlcldpdGhTZXNzaW9u
SURNYXAoKTsKIAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykKICAgICBzdGF0aWMgT3B0
aW9uYWw8SGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4+IGFwcEJvdW5kRG9tYWlu
c0lmSW5pdGlhbGl6ZWQoKTsKQEAgLTM5Nyw4ICs0MDEsNiBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkIHsgdHJ1ZSB9OwogI2VuZGlmCiAK
LSAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb2tpZT4gbV9wZW5kaW5nQ29va2llczsKLSAgICAKICAg
ICBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+IG1fcHJvY2Vzc2VzOwogCiAgICAgYm9vbCBt
X2lzSXRwU3RhdGVFeHBsaWNpdGx5U2V0IHsgZmFsc2UgfTsKQEAgLTQxOSw2ICs0MjEsNyBAQCBw
cml2YXRlOgogICAgIFVuaXF1ZVJlZjxXZWJzaXRlRGF0YVN0b3JlQ2xpZW50PiBtX2NsaWVudDsK
IAogICAgIFJlZlB0cjxBUEk6OkhUVFBDb29raWVTdG9yZT4gbV9jb29raWVTdG9yZTsKKyAgICBS
ZWZQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKIAogI2lmIEhBVkUo
QVBQX1NTTykKICAgICBVbmlxdWVSZWY8U09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I+IG1fc29B
dXRob3JpemF0aW9uQ29vcmRpbmF0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3Bw
CmluZGV4IDBlMGMwNmUxZGVkNDJjMTRiODAyZTE1ODlmMzFkYzYyOTgyYWMzOTMuLjY0YjZjNzRk
MDg2ZWM0NWJiNjJkYTZlZTA4MjIzYjI4ZGI3M2E1N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFT
dG9yZUN1cmwuY3BwCkBAIC00Miw4ICs0Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
TmV0d29ya1Byb3h5U2V0dGluZ3MoV2ViQ29yZTo6Q3VybFByb3h5U2V0dGluZ3MmJiBwcm94CiB7
CiAgICAgbV9wcm94eVNldHRpbmdzID0gV1RGTW92ZShwcm94eVNldHRpbmdzKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bv
b2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
TmV0d29ya1Byb3h5U2V0dGluZ3MobV9zZXNzaW9uSUQsIG1fcHJveHlTZXR0aW5ncykpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdv
cmtQcm94eVNldHRpbmdzKG1fc2Vzc2lvbklELCBtX3Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9X
ZWJzaXRlRGF0YVN0b3JlU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcAppbmRleCAxMmY5Y2Q4MTliNmRjY2E4
YWM1MDkyYTMwZGQ5M2M1M2I4ZWU5MzQyLi4zYjcwNWMxZmM5YTcyNTdmYzViYWZkNTIxY2IzNmMz
NTdiOWY2ZWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcApAQCAtMzksOCAr
MzksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRl
cnMoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmCiAgICAgYXV0byYgbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzID0gcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQg
PSBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQ7CiAKLSAgICBpZiAoYXV0byog
cHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+
Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9zZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworICAgIFdlYktpdDo6V2ViQ29va2ll
TWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nl
c3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
UGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlw
ZSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxT
dG9yYWdlRW5hYmxlZChib29sIGVuYWJsZWQpCkBAIC01Miw4ICs1MSw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChib29sIGVu
YWJsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9y
YWdlRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3Mo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VF
bmFibGVkKG1fc2Vzc2lvbklELCBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQp
KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKG1fc2Vzc2lvbklELCBtX3BlcnNp
c3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQpLCAwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nl
c3NQcm94eUdMaWIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNz
UHJveHlHTGliLmNwcAppbmRleCAwYTg0YTc1OTBkOWE5ODViZmM5OTY4NGE0ODk1MTM3NGU1YjI5
NDI5Li4yN2YyM2VhMDY1ZGM3NWNlNGE4MjcwYzU3NmVhMmFhNTVhYjBkYzhmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAK
QEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNo
T3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGwKICAgICAgICAgaWYgKCFk
YXRhU3RvcmUpIHsKICAgICAgICAgICAgIC8vIFByZXdhcm1lZCBwcm9jZXNzZXMgZG9uJ3QgaGF2
ZSBhIFdlYnNpdGVEYXRhU3RvcmUgeWV0LCBzbyB1c2UgdGhlIHByaW1hcnkgV2Vic2l0ZURhdGFT
dG9yZSBmcm9tIHRoZSBXZWJQcm9jZXNzUG9vbC4KICAgICAgICAgICAgIC8vIFRoZSBwcm9jZXNz
IHdvbid0IGJlIHVzZWQgaWYgY3VycmVudCBXZWJzaXRlRGF0YVN0b3JlIGlzIGRpZmZlcmVudCB0
aGFuIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IG9uZS4KLSAgICAgICAgICAgIGRhdGFTdG9y
ZSA9IG1fcHJvY2Vzc1Bvb2wtPndlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICAgICAgICAgIGRhdGFT
dG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKICAgICAg
ICAgfQogCiAgICAgICAgIEFTU0VSVChkYXRhU3RvcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKaW5k
ZXggOWY3YmUzYzk0MWI2Y2QwYTFiOTRjYjEzNjA5OGYzYTA0MWNlZmY5OS4uYWMwNGUzOGE1N2Iy
MTU5YmViNDJmMzg0NzliNDRmNWUyNmRlZGJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCkBAIC0y
Niw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFu
YWdlclByb3h5LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVk
ZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wu
aCIKIApAQCAtMzMsOCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKLSAgICBtX2Nvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlTWFwLnNldChzZXNzaW9uSUQsIHN0ZDo6bWFrZV9wYWlyKHN0b3JhZ2VQYXRoLCBzdG9yYWdl
VHlwZSkpOwotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9u
SUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNz
KQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBz
dG9yYWdlVHlwZSksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29v
a2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmIHN0
b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlJiBzdG9yYWdlVHlwZSkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vz
c1Bvb2xTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bv
b2xTb3VwLmNwcAppbmRleCBiZmJiZjk2NjRlNDgzNTMwOTcwOTcxMWRmZDZjMTM0MTU3MzJiZGFj
Li43ZmU0YWNhMGM1ZDJkMGU3ZmMwZDlkNWE0ZmEyN2ViY2M4MGE2NzVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCkBAIC0z
NywzMCArMzcsMjQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewotICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJh
bWV0ZXJzJiBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICBzdXBwbGVtZW50
PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoZGVm
YXVsdFNlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJz
LmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLmNv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7Ci0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkK
LSAgICAgICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQoKTsKKyAgICAvLyBGSVhNRTogbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBv
bGljeSBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCisgICAgLy8gRklY
TUU6IG1faWdub3JlVExTRXJyb3JzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFT
dG9yZSBvciByZW1vdmVkLgorICAgIC8vIEZJWE1FOiBtX25ldHdvcmtQcm94eVNldHRpbmdzIHNo
b3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KIAotICAgIHBhcmFtZXRlcnMu
Y29va2llQWNjZXB0UG9saWN5ID0gbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeTsKLSAg
ICBwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyA9IG1faWdub3JlVExTRXJyb3JzOwogICAgIHBh
cmFtZXRlcnMubGFuZ3VhZ2VzID0gdXNlclByZWZlcnJlZExhbmd1YWdlcygpOwotICAgIHBhcmFt
ZXRlcnMucHJveHlTZXR0aW5ncyA9IG1fbmV0d29ya1Byb3h5U2V0dGluZ3M7CiAgICAgcGFyYW1l
dGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IHRydWU7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKKyAgICAv
LyBGSVhNRTogTW92ZSB0aGlzIHRvIFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgbV9pZ25vcmVUTFNF
cnJvcnMgPSBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRJ
Z25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoY29uc3QgV2ViQ29yZTo6U291cE5ldHdv
cmtQcm94eVNldHRpbmdzJiBzZXR0aW5ncykKIHsKKyAgICAvLyBGSVhNRTogTW92ZSB0aGlzIHRv
IFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgbV9uZXR3b3JrUHJveHlTZXR0aW5ncyA9IHNldHRpbmdz
OwotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9u
ZXR3b3JrUHJveHlTZXR0aW5ncyksIDApOwogfQogCiB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOThiMzZjYzdhZDc1MWFiYTEzMDk3NzczMjg0
NjlhMDY0YjFjMWFlZC4uZmMzOWMwZTk3M2FhMzVkOGZhYzBmMDUxMDAwZmU2OTI5YThlNzQyYSAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDYwIEBACisyMDIwLTA5LTIxICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBm
cm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVEYXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjA0MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvRG93bmxvYWQubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpkb3dubG9hZEF0
UmF0ZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVj
a3BvaW50V0FMLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbToKKyAgICAgICAgKFRFU1QpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRl
VG9WMi5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW06CisgICAgICAgIChU
RVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QkRhdGFiYXNlUHJvY2Vzc0tpbGwubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tOgorICAgICAg
ICAocnVuVGVzdCk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbToKKyAgICAgICAgKFRFU1Qp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVy
c2lzdGVuY2UubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tOgorICAgICAgICAo
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJUZW1wRmlsZVNpemUubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tOgorICAgICAg
ICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3
b3JrUHJvY2Vzcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3Rv
cmUubW06CisgICAgICAgIChjaGVja1JlY292ZXJ5QWZ0ZXJDcmFzaCk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tOgorICAgICAgICAo
LVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdlYlZpZXc6cnVuSmF2YVNjcmlwdEFsZXJ0
UGFuZWxXaXRoTWVzc2FnZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOl0pOgor
ICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSk6
CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgYWxlcnRDb29raWVIVE1M
XSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1
c3RvbVBhdGhzLm1tOgorICAgICAgICAocnVuV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzKToK
KyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lz
dGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp0ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVz
dENvbnRleHQpOgorCiAyMDIwLTA5LTIxICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlA
YXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGFib3V0OmJsYW5rIHN1YmZyYW1lIGxvYWRzIGZv
ciBub24gYXBwLWJvdW5kIHRvcCBmcmFtZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24u
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNo
V2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCmluZGV4IDk3Mzg5ZjAxZmYyZWU5OWI3ODNiMGI1MjEw
ODA3NGYxYTgxYjY5ODEuLjMzZjQ1NGM1Y2Q1OWI0OGE3Njk4YWFiNTZlNjExY2Y2ZjA5YzlmNGYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5t
bQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc0dyb3VwUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFT
dG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KIApAQCAtMTQ2LDggKzE0Nyw4IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJv
Y2Vzc1JlbGF1bmNoT25MYXVuY2hGYWlsdXJlKQogCiAgICAgLy8gQ29uc3R1Y3RpbmcgYSBXZWJW
aWV3IHN0YXJ0cyBhIG5ldHdvcmsgcHJvY2VzcyBzbyB0ZXJtaW5hdGUgdGhpcyBvbmUuIFRoZSBw
YWdlIGxvYWQgYmVsb3cgd2lsbCB0aGVuIHJlcXVlc3QgYSBuZXR3b3JrIHByb2Nlc3MgYW5kIHdl
CiAgICAgLy8gbWFrZSB0aGlzIG5ldyBuZXR3b3JrIHByb2Nlc3MgbGF1bmNoIGNyYXNoIG9uIHN0
YXJ0dXAuCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAg
W3Byb2Nlc3NQb29sIF9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmdd
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbTW9uaXRvcldl
YkNvbnRlbnRDcmFzaE5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwogICAgIFt3ZWJW
aWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQppbmRleCBiN2VkOTk5
MzlmZDU5ZjIyOGE3ZThiZDc0OTcxMmY1MzY2MDE1NjE2Li4xODE5MTMxYzlhMGZlYjMwYjFhMmYw
Y2ZjZDg3YmYyMDQ1ZWJiM2Y0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0Rvd25sb2FkLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvRG93bmxvYWQubW0KQEAgLTg4OSw5ICs4ODksOSBAQCB2b2lkIGRvd25sb2Fk
QXRSYXRlKGRvdWJsZSBkZXNpcmVkS2JwcywgdW5zaWduZWQgc3BlZWRNdWx0aXBsaWVyLCBBcHBS
ZXR1cm5zVG9GbwogICAgIHJlY2VpdmVkRGF0YSA9IGZhbHNlOwogICAgIFV0aWw6OnJ1bigmcmVj
ZWl2ZWREYXRhKTsKICAgICAvLyBTdGFydCB0aGUgRG93bmxvYWRNb25pdG9yJ3MgdGltZXIuCi0g
ICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVzaXplQXBwSXNC
YWNrZ3JvdW5kOllFU107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRh
U3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKICAgICBpZiAocmV0dXJuVG9G
b3JlZ3JvdW5kID09IEFwcFJldHVybnNUb0ZvcmVncm91bmQ6OlllcykKLSAgICAgICAgW1t3ZWJW
aWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5k
Ok5PXTsKKyAgICAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUg
X3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9dOwogICAgIGRpZENhbmNlbCA9IGZhbHNlOwog
ICAgIFV0aWw6OnJ1bigmZGlkQ2FuY2VsKTsKICAgICB0ZXJtaW5hdGVTZXJ2ZXIgPSB0cnVlOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVj
a3BvaW50V0FMLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJD
aGVja3BvaW50V0FMLm1tCmluZGV4IDVjZDdhYmRhMDFkMTk3NDdkY2VkNDVhYmVlOTllY2IxYzE0
ZDYxNjAuLmQ3N2E2ZmQ5ODc5ZTQzZjcwMTFkZGFmOTJjM2E3OTdmM2ZjMTM3MzQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdB
TC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNr
cG9pbnRXQUwubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQ
b29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJh
dGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC04Niw3ICs4
Nyw3IEBAIFRFU1QoSW5kZXhlZERCLCBDaGVja3BvaW50c1dBTEF1dG9tYXRpY2FsbHkpCiAgICAg
UmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJh
dGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRs
ZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAog
ICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQppbmRleCBjOGFm
MWQyNDNjNGZlYjU4YWM5ODRkYWYxNGQ4MTUzMWE3Y2MzYzczLi5iYmYxYTE1MjE1ZGMxZmQyOGRm
ZGRiOWUzNDFiNjRmOWMwMDhmNGM0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KQEAgLTMwLDYgKzMw
LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJz
aXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9y
dCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0
L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBE
ZWxldGVSZWNvdmVyeSkKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29u
ZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0
XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0
TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5jb25zaXN0ZW50IGRhdGFiYXNl
IGZpbGVzIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBOU1VSTCAqdXJsMSA9IFtbTlNC
dW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJEZWxldGVSZWNvdmVyeSIgd2l0
aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3Vy
Y2VzIl07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0lEQkluZGV4VXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KaW5kZXggOTVjY2EwY2UyODE2ZmYxYTZhNDU1
YWQwYmQyYzhhNGFhNGYyN2ZlZC4uODhhNTNmNjFkOWQ5ODI2NTdiOTY1ZWY4YTZjZWJhNzkxZWZm
MTc1NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJJbmRleFVwZ3JhZGVUb1YyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9y
dCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2Vy
Q29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29u
ZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxl
U2hlZXQuaD4KQEAgLTU4LDcgKzU5LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4VXBncmFkZVRv
VjIpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtb
Y29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5k
bGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKIAogICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0
aGUgZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5C
dW5kbGVdIFVSTEZvclJlc291cmNlOkAiSW5kZXhVcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3Fs
aXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJ
bmZvVXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCmluZGV4IGZmYTVhNzg3OGE0NzMyYjhl
YzI0NWM5MDUzZmQxN2VlNTk1NmZhM2QuLjQwM2UwZmZhODIxMjM0NTFjNDY2ZmVlY2MzMjRmOWM2
ZTc2MWQ0M2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQpA
QCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdl
YktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1w
b3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJ
bmRleGVkREIsIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyKQogICAgIFJldGFpblB0cjxX
S1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNv
bnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5h
bWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5
IGRhdGFiYXNlIGZpbGVzIHdpdGggb2xkIE9iamVjdFN0b3JlSW5mbyBzY2hlbWEgdG8gdGhlIGRh
dGFiYXNlIGRpcmVjdG9yeS4KICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRs
ZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlIiB3aXRoRXh0ZW5z
aW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhl
ZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQppbmRleCA2ODc0NTI5ZWJi
ZjM3ODUxOGQ5M2UwYTA4MjFmNjMwMTJjZmE2ZDVmLi43MzA3N2VjZGZkMzY1YjUyOTA1M2Q0N2Ni
YTJhMTRlZDA1MWVkNmVhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxs
Lm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9y
dCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
ZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4K
ICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTkyLDcgKzkzLDcgQEAgVEVTVChJbmRleGVk
REIsIERhdGFiYXNlUHJvY2Vzc0tpbGwpCiAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICAgICAgaWYgKCFraWxsZWREQlByb2Nlc3Mg
JiYgb3BlblJlcXVlc3RVcGdyYWRlTmVlZGVkKSB7CiAgICAgICAgICAgICBraWxsZWREQlByb2Nl
c3MgPSB0cnVlOwotICAgICAgICAgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICAgICAg
fQogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0KaW5kZXggMTFmODdmODAzNGQyYjFiNTVkNzIw
ZGViNzY1YTMxNjgyMTIwZDc3My4uYTk4YmYzODI1YmIxZWQ2ZDc1OWMwOGQ0NTMzYWRjYjdmZjM5
NWZkNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bmRleGVkREJGaWxlTmFtZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBSZXRh
aW5QdHI8V0tTY3JpcHRNZXNzYWdlPiBsYXN0U2NyaXB0TWVzc2FnZTsKIAogQGVuZAogCi1zdGF0
aWMgdm9pZCBydW5UZXN0KCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoYm9vbCBvbGRGaWxlU2hvdWxk
RXhpc3QgPSB0cnVlKQogewogICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1tJbmRleGVkREJG
aWxlTmFtZU1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7CiAgICAgYXV0byBjb25maWd1cmF0
aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKQEAg
LTg3LDcgKzg3LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdCgpCiAgICAgTlNVUkwgKm9sZFZlcnNp
b25PcmlnaW5EaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVu
ZGluZ1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJdOwogICAgIE5TVVJMICpuZXdWZXJzaW9uT3Jp
Z2luRGlyZWN0b3J5VVJMID0gW25ld1ZlcnNpb25EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQ
YXRoQ29tcG9uZW50OiBAImZpbGVfXzAiXTsKICAgICBOU1VSTCAqb2xkVmVyc2lvblVudXNlZERh
dGFiYXNlRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgVVJMQnlB
cHBlbmRpbmdQYXRoQ29tcG9uZW50OnVudXNlZERhdGFiYXNlTmFtZV07Ci0gICAgRVhQRUNUX1RS
VUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOm9sZFZl
cnNpb25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTC5wYXRoXSk7CisgICAgRVhQRUNUX1RSVUUo
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOm9sZFZlcnNp
b25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTC5wYXRoXSA9PSBvbGRGaWxlU2hvdWxkRXhpc3Qp
OwogICAgIAogICAgIC8vIEZvciBkYXRhYmFzZSB0aGF0IGlzIG9wZW5lZCBhZnRlciB1cGdyYWRl
LCBpdHMgZmlsZSBzaG91bGQgb25seSBiZSBpbiB2MS4KICAgICBOU1VSTCAqb2xkVmVyc2lvbkV4
aXN0aW5nRGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVS
TCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IGV4aXN0aW5nRGF0YWJhc2VOYW1lXTsKQEAg
LTE1NCw3ICsxNTQsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVEaXJlY3RvcmllcyhTdHJpbmcgdGVz
dE5hbWUpCiBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCRmlsZU5hbWUpCiB7CiAgICAgY3JlYXRl
RGlyZWN0b3JpZXMoIm5vbmUiKTsKLSAgICBydW5UZXN0KCk7CisgICAgcnVuVGVzdChmYWxzZSk7
CiB9CiAKIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJGaWxlTmFtZVYwKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nl
c3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11
bHRpUHJvY2Vzcy5tbQppbmRleCA3ZjYyNjQ1ZDk5NjBlZGU5NjBjMDAxYzI3MmI2NTAzOTM5MDEx
NjMyLi42ZjY3ZGMyN2VkYzNkMjc0NWIxNzBlNDgyYmNkOTBlODQ5NGNiOTVhIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJv
Y2Vzcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4
ZWREQk11bHRpUHJvY2Vzcy5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dL
VXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0
ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktp
dC9fV0tVc2VyU3R5bGVTaGVldC5oPgogI2ltcG9ydCA8d3RmL0RlcXVlLmg+CkBAIC02OSw3ICs3
MCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJNdWx0aVByb2Nlc3MpCiAgICAgUmV0YWlu
UHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1
c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0
KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFJl
dGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29u
ZmlndXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQppbmRleCBiMzJj
ZTRhNWY3Mzg2M2FlZGRjYjkxOTBiNWI0MzcwZTM3NDQzYjVlLi5kNjIyMDMyMmU0NzhkMWRhYzc4
ZjA2OTY3YzNiNjQzYmZkNjJmOWJmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KQEAgLTc4
LDcgKzc4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlBlcnNpc3RlbmNlKQogICAgIHdl
YlZpZXcgPSBuaWw7CiAKICAgICAvLyBUZXJtaW5hdGUgdGhlIG5ldHdvcmsgcHJvY2VzcwotICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gTWFrZSBhIG5ldyB3ZWIgdmlldyB0byBmaW5pc2gg
dGhlIHRlc3QKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3Vy
YXRpb24uZ2V0KCldKTsKQEAgLTI2OCw3ICsyNjgsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhl
ZERCVGhpcmRQYXJ0eUZyYW1lSGFzQWNjZXNzKQogCiAgICAgd2ViVmlldyA9IG5pbDsKICAgICBz
ZWNvbmRXZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29s
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gVGhpcmQt
cGFydHkgSURCIHN0b3JhZ2UgaXMgc3RvcmVkIGluIHRoZSBtZW1vcnkgb2YgbmV0d29yayBwcm9j
ZXNzLgogICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTM4NSw3ICszODUsNyBAQCBURVNUKEluZGV4ZWREQiwg
SW5kZXhlZERCVGhpcmRQYXJ0eVdvcmtlckhhc0FjY2VzcykKIAogICAgIHdlYlZpZXcgPSBuaWw7
CiAgICAgc2Vjb25kV2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1
dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24u
Z2V0KCldKTsKICAgICBsb2FkVGVzdFBhZ2VJbldlYlZpZXcodGhpcmRXZWJWaWV3LmdldCgpLCBA
ImRhdGFiYXNlIGlzIGNyZWF0ZWQiKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5
Lm1tCmluZGV4IDhlYzY1ZjBhM2JhOTM3MzZmZGI0ZjlkZGZlZjc1Y2U2MDAwNWZkMGQuLjUxMGIy
NGY1NjlkMjJiZDQwYTdhZGJlMjVlY2ZkMGVjZmM4YWM3MjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHku
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJT
dXNwZW5kSW1taW5lbnRseS5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dL
UHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRy
b2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblBy
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC04OCw4ICs4OSw4
IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJTdXNwZW5kSW1taW5lbnRseSkKIAogICAgIHJ1
blRlc3RBbmRDaGVja1Jlc3VsdChAIkNvbnRpbnVlIik7CiAKLSAgICBbY29uZmlndXJhdGlvbi5n
ZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5
XTsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3Jl
IF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3Vt
ZV07CiAKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJFeHBlY3RlZCBBYm9ydCBGb3IgU3Vz
cGVuc2lvbiIpOwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkV4cGVjdGVkIFN1Y2Nlc3Mg
QWZ0ZXIgUmVzdW1lIik7CkBAIC0xNTgsOCArMTU5LDggQEAgVEVTVChJbmRleGVkREIsIFN1c3Bl
bmRJbW1pbmVudGx5Rm9yVGhpcmRQYXJ0eURhdGFiYXNlcykKICAgICBbd2ViVmlldyBsb2FkSFRN
TFN0cmluZzptYWluRnJhbWVTdHJpbmcgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0
dHA6Ly93ZWJraXQub3JnIl1dOwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAImRhdGFiYXNl
IGlzIGNyZWF0ZWQiKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwotICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0
ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJ1blRlc3RB
bmRDaGVja1Jlc3VsdChAInRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZCIpOwogfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmls
ZVNpemUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QlRlbXBGaWxlU2l6ZS5tbQppbmRleCA1MzY1NDFlM2IwZTVjZGEzYTNiNTUxYzFlODFlOTYzZjU5
MmFlYjJmLi5lN2I5OTIyOGNlODc2ZTQ0N2U2NDc4MmVmOWQ4N2YyNWFkYzliOWZhIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBG
aWxlU2l6ZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQpAQCAtOTUsNyArOTUsNyBAQCBURVNUKEluZGV4ZWREQiwg
SW5kZXhlZERCVGVtcEZpbGVTaXplKQogCiAgICAgLy8gVGVybWluYXRlIG5ldHdvcmsgcHJvY2Vz
cyB0byBrZWVwIFdBTCBvbiBkaXNrLgogICAgIHdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IGZpbGVFeGlzdHNBdFBhdGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aF0pOwogICAgIFJldGFpblB0
cjxOU0RpY3Rpb25hcnk+IGZpbGVBdHRyaWJ1dGVzID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRN
YW5hZ2VyXSBhdHRyaWJ1dGVzT2ZJdGVtQXRQYXRoOndhbEZpbGVQYXRoLmdldCgpLnBhdGggZXJy
b3I6bmlsXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCmluZGV4IDQxMzNlZTdiM2Rh
ZTQzZWMyMDQ5Y2ZmYzA2M2MwZTQyOWMxN2M1ZWYuLjVmNzkxOTA5NDNjNzcxZTlkOWU0NDJhMGRh
MjY2ZmY5YTAzYmEyZjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQpAQCAtMzEs
NiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktp
dC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2lt
cG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC0xMDksNyArMTEwLDcgQEAgVEVT
VChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NDcmFzaGVzKQogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tfU1RS
RVEoQCJzZXNzaW9uOnN0b3JhZ2UiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCi0gICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CiAKICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CkBAIC0x
NjIsNyArMTYzLDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5k
cykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7
CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAidmFsdWUiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0p
OwogCi0gICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVu
ZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUg
X3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CiAKICAgICByZWFkeVRv
Q29udGludWUgPSBmYWxzZTsKICAgICBbd2ViVmlldzEgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2lu
ZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdrZXknLCAnbmV3VmFsdWUnKSIgY29tcGxldGlvbkhh
bmRsZXI6XihpZCwgTlNFcnJvciAqKSB7CkBAIC0xNzcsNyArMTc4LDcgQEAgVEVTVChXS1dlYlZp
ZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5kcykKICAgICB9XTsKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJnJlYWR5VG9Db250aW51ZSk7CiAgICAgCi0gICAgW3Byb2Nlc3NQb29s
LmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAK
ICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQppbmRleCBlNjBm
ODgwMjVkMDkzNzg5ZjY5NTYwZDliOTJiMjgyZjA3MTMwYThkLi4wZTIxZjkwOTUwMDE0ZjZjNDkw
YjBlYjhlNDYxZWM0YmE4NTBiYjgxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KQEAgLTI4LDcgKzI4LDcgQEAK
ICNpbXBvcnQgIkhUVFBTZXJ2ZXIuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBv
cnQgIlV0aWxpdGllcy5oIgotI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8
d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYv
VmVjdG9yLmg+CkBAIC0zNywxNCArMzcsMTQgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNz
RW50aXRsZW1lbnRzKQogewogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZp
Z3VyYXRpb246W1tbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVh
c2VdXSk7CiAgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAic2lt
cGxlIl07Ci0gICAgV0tQcm9jZXNzUG9vbCAqcG9vbCA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25d
LnByb2Nlc3NQb29sOwotICAgIGJvb2wgaGFzRW50aXRsZW1lbnQgPSBbcG9vbCBfbmV0d29ya1By
b2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Muc3RvcmFn
ZS5XZWJLaXROZXR3b3JraW5nU2FuZGJveCJdOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZSAqc3Rv
cmUgPSBbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlOworICAgIGJvb2wg
aGFzRW50aXRsZW1lbnQgPSBbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JU
ZXN0aW5nOkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0TmV0d29ya2luZ1NhbmRi
b3giXTsKICNpZiBQTEFURk9STShNQUMpICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAgICAg
RVhQRUNUX1RSVUUoaGFzRW50aXRsZW1lbnQpOwogI2Vsc2UKICAgICBFWFBFQ1RfRkFMU0UoaGFz
RW50aXRsZW1lbnQpOwogI2VuZGlmCi0gICAgRVhQRUNUX0ZBTFNFKFtwb29sIF9uZXR3b3JrUHJv
Y2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVyZSBjYXNlIl0pOworICAg
IEVYUEVDVF9GQUxTRShbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0
aW5nOkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7CiB9CiAKIFRFU1QoV2ViS2l0LCBIVFRQUmVmZXJl
cikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0
d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50
RGF0YVN0b3JlLm1tCmluZGV4IDYwOThlOGRhZDI1MmU1OWVjNDkxMjUwYjQyMTZkM2NkMDkzNmU4
ZjcuLjJmOGEyZTMzZmU4NzAzYmFiMmQ4ZTA1MTA4MzJiZWNkOWQ0ODkzNGIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFz
aE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5t
bQpAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1JlY292ZXJ5QWZ0ZXJDcmFzaChX
S1dlYnNpdGVEYXRhU3RvcmUgKmRhdGFTdG9yZSkKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtbd2ViVmlldyBjb25maWd1cmF0
aW9uXS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtbd2ViVmll
dyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDpzaW1wbGUyXV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIH0KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3
YXBPbk5hdmlnYXRpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCmluZGV4IDk1ZGM5ZDk4ZGYxM2IwNzA1ZTA4MTdk
MDU4NzI2NTEyMGMxODhkMjMuLmRmMzIwZDY0ZGFkYmRkMWVlMjgzZjg2NWMxNDQyM2YzYWM1NTY0
YmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJv
Y2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQpAQCAtNTM4NSw3ICs1Mzg1LDcg
QEAgVEVTVChQcm9jZXNzU3dhcCwgVXNlUHJld2FybWVkUHJvY2Vzc0FmdGVyVGVybWluYXRpbmdO
ZXR3b3JrUHJvY2VzcykKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEp
OwogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW3dl
YlZpZXdDb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRp
b246d2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBbd2ViVmlldzIgc2V0TmF2aWdh
dGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5t
bQppbmRleCAwZTEwYzM0ZWVjODJjNmY2NTkyYmI3YzQyNzRkMGU0NTVlYWYxMWU4Li5hM2FiYTIz
MWE5M2IzZDVmMDBhMTkzYzQ3YzI3Njc4NjRiMzUwNTViIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLm1tCkBAIC03MTksNyArNzE5LDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LCBOZXR3b3JrUHJvY2Vzc1Jlc3RhcnQpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGlu
UnVuTG9vcCgxKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURh
dGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MiA9
IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAw
LCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKQEAgLTc1
Miw3ICs3NTIsNyBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jZXNz
UmVzdGFydCkKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0g
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXczID0gYWRvcHROUyhbW1dLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25m
aWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAtMTU1OCwxMCArMTU1OCw4IEBA
IFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTWlncmF0ZURhdGFGcm9tTWlzc2luZ1RvcEZy
YW1lVW5pcXVlUmVkaXJlY3RTYW1lU2l0CiAKIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywg
Q2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKIHsKKyAgICBOU1VSTCAqaXRw
Um9vdFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TVGVtcG9yYXJ5RGlyZWN0b3J5KCkg
c3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRo
Tm9Qcm9jZXNzUG9vbFRlc3QiXSBpc0RpcmVjdG9yeTpZRVNdOwogICAgIGF1dG8gZGVmYXVsdEZp
bGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgIF9XS1dlYnNp
dGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKLSAgICBhdXRv
ICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZp
Z3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwotICAgIE5TVVJM
ICppdHBSb290VVJMID0gW1tkYXRhU3RvcmUgX2NvbmZpZ3VyYXRpb25dIF9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5XTsKICAgICBOU1VSTCAqZmlsZVVSTCA9IFtpdHBSb290VVJMIFVS
TEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIm9ic2VydmF0aW9ucy5kYiJdOwogICAgIFtkZWZh
dWx0RmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0UGF0aDppdHBSb290VVJMLnBhdGggZXJyb3I6bmls
XTsKICAgICBFWFBFQ1RfRkFMU0UoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRo
Oml0cFJvb3RVUkwucGF0aF0pOwpAQCAtMTU3Miw2ICsxNTcwLDEwIEBAIFRFU1QoUmVzb3VyY2VM
b2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKICAg
ICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6bmV3Rmls
ZVVSTC5wYXRoXSk7CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciBjb3B5SXRlbUF0UGF0aDpuZXdG
aWxlVVJMLnBhdGggdG9QYXRoOmZpbGVVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVDVF9U
UlVFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpmaWxlVVJMLnBhdGhdKTsK
KworICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1
cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxl
YXNlXTsKKyAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLl9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5ID0gaXRwUm9vdFVSTDsKKyAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNp
dGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmln
dXJhdGlvbl0gYXV0b3JlbGVhc2VdOwogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkOllFU107CiAKICAgICBzdGF0aWMgYm9vbCBkb25lRmxhZyA9IGZhbHNl
OwpAQCAtMTYzMywxMiArMTYzNSwxMiBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIFN0
b3JlU3VzcGVuc2lvbikKICAgICBbd2ViVmlldzIgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmln
YXRpb25dOwogCiAgICAgZG9uZUZsYWcgPSBmYWxzZTsKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wg
X3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6XnsKKyAgICBbZGF0YVN0b3JlMSBf
c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeewogICAgICAgICBkb25lRmxhZyA9
IHRydWU7CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7
CiAKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07
CisgICAgW2RhdGFTdG9yZTEgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiB9CiAKIEBp
bnRlcmZhY2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1NjaGVtZUhhbmRsZXIgOiBOU09iamVjdCA8
V0tVUkxTY2hlbWVIYW5kbGVyPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQppbmRleCAzNGE0ZjVjNTM4
YjliMGU5ZmNiMDUwNzJiMTcwMjg4ZTllNGU5ZjhmLi4yZjhlMzRkYmE2ZGE0NzIzNTY1NWZmMGRi
MmFkY2ExYmY4YzU2NzIwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpAQCAtNTU4LDcgKzU1OCw3
IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFVzZXJBZ2VudE92ZXJyaWRlKQogCiAgICAgY29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7
CiAKLSAgICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5k
bGVyIGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6
IEJhciBDdXN0b20gVXNlckFnZW50Il0pOworICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhb
W1NXVXNlckFnZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNzYWdl
OkAiTWVzc2FnZSBmcm9tIHdvcmtlcjogRm9vIEN1c3RvbSBVc2VyQWdlbnQiXSk7CiAgICAgW1tj
b25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRs
ZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07CiAKICAgICB3ZWJWaWV3ID0gYWRv
cHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgw
MCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTYzMyw4ICs2
MzMsNiBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBDYWNoZVN0b3JhZ2VSZXN0b3JlRnJvbURpc2sp
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7
CiAKLSAgICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9kZWxldGVEZWZhdWx0RGF0YVN0b3JlRm9yVGVz
dGluZ107Ci0KICAgICBTZXJ2aWNlV29ya2VyVENQU2VydmVyIHNlcnZlcih7CiAgICAgICAgIHsg
InRleHQvaHRtbCIsIG1haW5DYWNoZVN0b3JhZ2VCeXRlcyB9CiAgICAgfSwgewpAQCAtOTgyLDYg
Kzk4MCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRp
b24pCiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAg
c2V0Q29uZmlndXJhdGlvbkluamVjdGVkQnVuZGxlUGF0aChjb25maWd1cmF0aW9uLmdldCgpKTsK
KyAgICBSZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gb3JpZ2luYWxQcm9jZXNzUG9vbCA9IGNvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2w7CiAKICAgICBkb25lID0gZmFsc2U7CiAKQEAgLTEw
MzUsNyArMTAzNCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNz
Q3JlYXRpb24pCiAgICAgZG9uZSA9IGZhbHNlOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbG9h
ZGluZyB0aGUgc2ltcGxlIHBhZ2UgZGlkIG5vdCBzdGFydCB0aGUgc2VydmljZSB3b3JrZXIgcHJv
Y2Vzcy4KLSAgICBFWFBFQ1RfRVEoMHUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9j
ZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCB3
ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzQ291bnQpOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpuZXdD
b25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgRVhQRUNUX0VRKDJ1LCB3ZWJWaWV3LmdldCgpLmNv
bmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudElnbm9yaW5nUHJld2FybWVk
KTsKQEAgLTEwNDMsOSArMTA0Miw4IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3Jr
ZXJQcm9jZXNzQ3JlYXRpb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsK
ICAgICBkb25lID0gZmFsc2U7CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5nIHRoaXMg
cGFnZSBkaWQgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCiAgICAgRVhQRUNUX0VR
KDF1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3Jr
ZXJQcm9jZXNzQ291bnQpOwotCisgICAgRVhQRUNUX0VRKDF1LCBvcmlnaW5hbFByb2Nlc3NQb29s
LmdldCgpLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKICAgICBbW2NvbmZpZ3VyYXRpb24g
d2Vic2l0ZURhdGFTdG9yZV0gcmVtb3ZlRGF0YU9mVHlwZXM6W1dLV2Vic2l0ZURhdGFTdG9yZSBh
bGxXZWJzaXRlRGF0YVR5cGVzXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNv
bXBsZXRpb25IYW5kbGVyOl4oKSB7CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH1dOwpAQCAt
MTYxOCwyMSArMTYxNiwzNSBAQCBzdGF0aWMgc2l6ZV90IGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9j
ZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgYgogICAgIHJldHVybiB3
ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudEln
bm9yaW5nUHJld2FybWVkOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZkFuZEluUHJv
Y2Vzc1NlcnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZlByb2Nlc3NTZXJ2
aWNlV29ya2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9
IHRydWU7CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVD
VF9FUSgxdSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RFU1QoU2VydmljZVdv
cmtlcnMsIEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0Qmxhbmsg
PSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykpOwog
fQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdU
aHJvdWdoU2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5r
QmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hPdXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewogICAg
IGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9vbCBm
aXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNoU2Vy
dmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGZpcnN0
TG9hZEFib3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0Qmxh
bmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAg
Ym9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZp
cnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2
aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJzdExv
YWRBYm91dEJsYW5rKSk7CiB9CiAKQEAgLTE5NDQsMTEgKzE5NTYsMTEgQEAgVEVTVChTZXJ2aWNl
V29ya2VycywgU3VzcGVuZE5ldHdvcmtQcm9jZXNzKQogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0Zp
bGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnN3REJQYXRoLnBhdGhd
KTsKIAotICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFt3ZWJWaWV3LmdldCgp
LmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1
c3BlbmRJbW1pbmVudGx5XTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZh
dWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAgICBbIHdl
YlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNz
RGlkUmVzdW1lXTsKKyAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRh
U3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBbd2ViVmlldyBsb2Fk
UmVxdWVzdDpzZXJ2ZXIucmVxdWVzdCgpXTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS0hUVFBDb29raWVTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KaW5kZXggYTM1ZjA1MzUwYWFiNGI0MmYzNmM0NmFl
Y2RlZWVlNmNlNTQ0ZWY4Ni4uMzM3NjA5MmExOTViNTEyZGE2N2M0OTZlNDUyMTdiOTE0ZmUyYTU3
OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hU
VFBDb29raWVTdG9yZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCkBAIC00NzksOCArNDc5LDYgQEAgc3RhdGljIGJvb2wg
ZmluaXNoZWQ7CiB9CiBAZW5kCiAKLS8vIEZJWE1FOiBvbiBpT1MsIFVJIHByb2Nlc3Mgc2hvdWxk
IGJlIHVzaW5nIHRoZSBzYW1lIGNvb2tpZSBmaWxlIGFzIHRoZSBuZXR3b3JrIHByb2Nlc3MgZm9y
IGRlZmF1bHQgc2Vzc2lvbi4KLSNpZiBQTEFURk9STShNQUMpCiBlbnVtIGNsYXNzIFNob3VsZEVu
YWJsZVByb2Nlc3NQcmV3YXJtaW5nIHsgTm8sIFllcyB9Owogdm9pZCBydW5XS0hUVFBDb29raWVT
dG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91
bGRFbmFibGVQcm9jZXNzUHJld2FybWluZykKIHsKQEAgLTU4OSwyMCArNTg3LDY2IEBAIFRFU1Qo
V0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbFdpdGhQcmV3YXJtaW5nKQogICAg
IHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nl
c3NQcmV3YXJtaW5nOjpZZXMpOwogfQogCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCiBAaW50
ZXJmYWNlIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVn
YXRlPgorLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUw7CistIChOU1N0cmluZyAqKXdhaXRG
b3JNZXNzYWdlOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2llVUlE
ZWxlZ2F0ZQorQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgewor
ICAgIFJldGFpblB0cjxOU1N0cmluZz4gX21lc3NhZ2U7Cit9CisKIC0gKHZvaWQpd2ViVmlldzoo
V0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOihO
U1N0cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBj
b21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAg
ICBFWFBFQ1RfU1RSRVEoIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIiwgbWVzc2FnZS5V
VEY4U3RyaW5nKTsKKyAgICBfbWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgZmluaXNoZWQgPSB0cnVl
OwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CisKKy0gKE5TU3RyaW5nICopd2FpdEZvck1l
c3NhZ2UKK3sKKyAgICB3aGlsZSAoIV9tZXNzYWdlKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpzcGluUnVuTG9vcCgpOworICAgIHJldHVybiBfbWVzc2FnZS5hdXRvcmVsZWFzZSgpOwor
fQorCistIChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTAoreworICAgIHJldHVybiBAIjxzY3Jp
cHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9
IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50
cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3Jp
cHQ+IjsKK30KKwogQGVuZAogCitURVNUKFdlYktpdCwgV0tIVFRQQ29va2llU3RvcmVNdWx0aXBs
ZVZpZXdzKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcxID0gW1tUZXN0V0tXZWJWaWV3
IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MSBzeW5jaHJvbm91c2x5TG9hZEhUTUxT
dHJpbmc6QCJzdGFydCBuZXR3b3JrIHByb2Nlc3MiXTsKKworICAgIE5TSFRUUENvb2tpZSAqc2Vz
c2lvbkNvb2tpZSA9IFtOU0hUVFBDb29raWUgY29va2llV2l0aFByb3BlcnRpZXM6QHsKKyAgICAg
ICAgTlNIVFRQQ29va2llUGF0aDogQCIvIiwKKyAgICAgICAgTlNIVFRQQ29va2llTmFtZTogQCJT
ZXNzaW9uQ29va2llTmFtZSIsCisgICAgICAgIE5TSFRUUENvb2tpZVZhbHVlOiBAIkNvb2tpZVZh
bHVlIiwKKyAgICAgICAgTlNIVFRQQ29va2llRG9tYWluOiBAIjEyNy4wLjAuMSIsCisgICAgfV07
CisKKyAgICBfX2Jsb2NrIGJvb2wgc2V0Q29va2llRG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3
MS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUuaHR0cENvb2tpZVN0b3JlIHNldENvb2tp
ZTpzZXNzaW9uQ29va2llIGNvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIHNldENvb2tpZURv
bmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmc2V0Q29v
a2llRG9uZSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbQ2hlY2tTZXNzaW9uQ29v
a2llVUlEZWxlZ2F0ZSBuZXddKTsKKyAgICBbd2ViVmlldzEgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0
ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldzEgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0
Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4w
LjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJT
ZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworCisgICAgVGVzdFdLV2ViVmlldyAqd2Vi
VmlldzIgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcy
IHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3MiBsb2FkSFRNTFN0
cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3Ry
aW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRl
IHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7Cit9CisK
IFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Np
b24pCiB7CiAgICAgUmV0YWluUHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4gZXBoZW1lcmFsU3RvcmVX
aXRoQ29va2llcyA9IFtXS1dlYnNpdGVEYXRhU3RvcmUgbm9uUGVyc2lzdGVudERhdGFTdG9yZV07
CkBAIC02MjcsOSArNjcxLDggQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nl
c3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZp
bmlzaGVkKTsKICAgICBmaW5pc2hlZCA9IGZhbHNlOwogICAgIAotICAgIE5TU3RyaW5nICphbGVy
dENvb2tpZUhUTUwgPSBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3Bs
aXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29r
aWVzW2ldID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tp
ZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsKLSAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzph
bGVydENvb2tpZUhUTUwgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcu
MC4wLjEiXV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7CisgICAg
W3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVS
TDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNU
X1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1D
b29raWVWYWx1ZSIpOwogfQogCiBzdGF0aWMgYm9vbCBhcmVDb29raWVzRXF1YWwoTlNIVFRQQ29v
a2llICpmaXJzdCwgTlNIVFRQQ29va2llICpzZWNvbmQpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVy
LWxlYWtzLm1tCmluZGV4IGFjN2RlNDE1MTJjNDUxMzhlYzVlNGMwOWU1MTE1ZDE2Y2QyM2IyMmUu
LmFjMTY1MzVkZmQ5Mzk5OWQyZWM1MGRjZmQ3MWMzYTU2ZDExM2VjN2EgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxl
YWtzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxT
Y2hlbWVIYW5kbGVyLWxlYWtzLm1tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0IDxXZWJLaXQv
V0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZp
Z3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9W
ZWN0b3IuaD4KQEAgLTE1Miw3ICsxNTMsNyBAQCBURVNUKFVSTFNjaGVtZUhhbmRsZXIsIExlYWtz
MykKIAogICAgIHJ1blVudGlsVGFza3NJbkZsaWdodCgyKTsKIAotICAgIFt3ZWJWaWV3MS5nZXQo
KS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107Cisg
ICAgW3dlYlZpZXcxLmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgcnVuVW50aWxUYXNrc0luRmxpZ2h0KDApOwogfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQppbmRleCA5MmNmM2E2MTk4YTVi
OWQxNDU0NDkwNWRiOWU5NDhmMTFjNzI1NmRlLi5iZjhiZGU4MzFhMjg1OWJjZjM0MTM4MDYxODhi
NTkxZmNhYTlkM2FiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQpA
QCAtMjQ0LDcgKzI0NCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0b21Q
YXRocyhTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRFCiAgICAgLy8gTm93LCB3
aXRoIGJyYW5kIG5ldyBXS1dlYnNpdGVEYXRhU3RvcmVzIHBvaW50aW5nIGF0IHRoZSBzYW1lIGN1
c3RvbSBjb29raWUgc3RvcmFnZSBsb2NhdGlvbiwKICAgICAvLyBpbiBuZXdseSBmaXJlZCB1cCBO
ZXR3b3JrUHJvY2Vzc2VzLCB2ZXJpZnkgdGhhdCB0aGUgZmV0Y2ggYW5kIGRlbGV0ZSBBUElzIHdv
cmsgYXMgZXhwZWN0ZWQuCiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgYXV0
byBuZXdDdXN0b21EYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9j
XSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdl
dCgpXSk7CiAKICAgICBbbmV3Q3VzdG9tRGF0YVN0b3JlIGZldGNoRGF0YVJlY29yZHNPZlR5cGVz
OltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dlYnNpdGVEYXRhVHlwZUNvb2tpZXMsIG5pbF0gY29t
cGxldGlvbkhhbmRsZXI6XihOU0FycmF5PFdLV2Vic2l0ZURhdGFSZWNvcmQgKj4gKiByZWNvcmRz
KSB7CkBAIC0yNTUsNyArMjU1LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vic2l0ZURhdGFTdG9yZUN1
c3RvbVBhdGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEUKICAgICByZWNl
aXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CiAgICAgbmV3Q3VzdG9tRGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBh
bGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlv
bi5nZXQoKV0pOwogCiAgICAgW25ld0N1c3RvbURhdGFTdG9yZSByZW1vdmVEYXRhT2ZUeXBlczpb
TlNTZXQgc2V0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVDb29raWVzLCBuaWxdIG1vZGlm
aWVkU2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XiB7CkBAIC01
MzksNyArNTM5LDcgQEAgVEVTVChXZWJLaXQsIERvTG9hZFdpdGhOb25EZWZhdWx0RGF0YVN0b3Jl
QWZ0ZXJUZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNzKQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkucHJv
Y2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3Vy
YXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwog
CiAgICAgcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBt
YWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1s
IiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKICAgICBbd2ViVmll
dyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKQEAgLTg1Nyw3ICs4NTcsNyBAQCBURVNUKFdlYktpdCwg
TWVkaWFDYWNoZSkKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwogCiAgICAgZG9uZSA9IHRydWU7
Ci0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3Rv
cmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFtmaWxlTWFuYWdlciByZW1vdmVJ
dGVtQXRQYXRoOnBhdGggZXJyb3I6JmVycm9yXTsKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCA5ZDM3Y2NlZGRi
ODIxNTc0NzVkODFmMTIyMGY0NTZiODY0YzNiMTcxLi42MzMyNmY2ODU2YmM2MDU5ZGM2Mzc5ZjJh
YTVjMDA1MGEwNzg0YWJkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcApAQCAtMTA2MSw4ICsxMDYxLDYgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0
ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKIAogICAg
IHJlc2V0UXVvdGEoKTsKIAotICAgIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRl
Rm9yU2VydmljZVdvcmtlclRlc3RpbmcocGxhdGZvcm1Db250ZXh0KCksIHRydWUpOwotCiAgICAg
V0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSk7CiAKICAgICBXS0NvbnRleHRTZXRVc2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0
KCksIGZhbHNlKTsKQEAgLTMxMzYsNyArMzEzNCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNl
dElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1p
CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKLSAg
ICBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhwbGF0Zm9ybUNvbnRleHQoKSk7Cisg
ICAgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3Mod2Vic2l0ZURhdGFT
dG9yZSgpKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdvcmtl
cnMoKQpAQCAtMzE2Nyw5ICszMTY1LDggQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxl
cjo6cGxhdGZvcm1DcmVhdGVPdGhlclBhZ2UoUGxhdGZvcm1XZWJWaWV3KiBwYXJlbnQKICAgICBy
ZXR1cm4gbmV3IFBsYXRmb3JtV2ViVmlldyhjb25maWd1cmF0aW9uLCBvcHRpb25zKTsKIH0KIAot
V0tDb250ZXh0UmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250
ZXh0UmVmIGNvbnRleHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29udGV4dENvbmZpZ3Vy
YXRpb24pCitXS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4
dChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZikKIHsKLSAg
ICBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShjb250ZXh0LCBkZWZhdWx0V2Vi
c2l0ZURhdGFTdG9yZSgpKTsKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAo=
</data>
<flag name="commit-queue"
          id="424976"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409327</attachid>
            <date>2020-09-21 15:13:04 -0700</date>
            <delta_ts>2020-09-21 18:53:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200921151303.patch</filename>
            <type>text/plain</type>
            <size>325115</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRhZGZjMzM1NmEzMzk3NmU4
YmE5Mzk2YmJhOTM0ZThmNGMzODhmM2EuLmYzNGM3MzkxNzdhZjQ3ZTE3YWJlYmZlNTUyYzkyMDlk
MWRkYzI0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzU3IEBACisyMDIwLTA5LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmg6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24pOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Byb2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lv
bik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0
U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVT
dG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3Jl
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRU
UENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0
b3JlOjpzZXRDb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVD
b29raWUpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMp
OgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1
bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0TmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyKToKKyAgICAgICAgKFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpOgorICAgICAgICAoV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRh
U3RvcmUpOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXJUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9z
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOl0pOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKToKKyAgICAgICAgKC1bV0tQcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQ
cm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQ
b29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1Byb2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0
b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAg
KC1bV0tXZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOgorICAgICAg
ICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3Bl
bmQ6XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFT
dG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChfV2ViS2l0Q29v
a2llTWFuYWdlclByaXZhdGU6OmNvb2tpZU1hbmFnZXIgY29uc3QpOgorICAgICAgICAoX1dlYktp
dENvb2tpZU1hbmFnZXJQcml2YXRlOjp+X1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlKToKKyAg
ICAgICAgKHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9nZXRfYWNjZXB0X3BvbGljeSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJf
YWRkX2Nvb2tpZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMp
OgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKHdl
YmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZCk6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21h
dGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXhp
bGlhcnlQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1
cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmcp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmNhbmNlbCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVzcyk6CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAg
ICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1h
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlN
YXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVu
dGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxp
Y2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFBy
b3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94
eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1By
b2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHRO
ZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnRl
cm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVh
dGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkYXRhU3RvcmVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJv
Y2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkpOgorICAgICAgICAoV2ViS2l0
OjphbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQ
cm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJl
Y2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
Q2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29u
bmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9v
bEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNz
UG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVu
dCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdl
clByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29v
a2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVD
aGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0
cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaDoK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRp
dGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVjb25u
ZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JG
cmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9u
T3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZv
clRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bv
b2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENv
bm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9y
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250
ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFs
VVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3Nlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpo
YXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFj
dGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2lu
Z1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xl
YXJDYWNoZWRDcmVkZW50aWFscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9y
VGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJl
c3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpmbHVzaENv
b2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZGlkQ29t
bWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNz
YXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0
YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdv
cmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRTZXJ2aWNlV29ya2VyVGlt
ZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRN
YXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1
ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRz
UHJvY2Vzc2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3Rp
Y3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZG9t
YWluSURFeGlzdHNJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5n
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNl
T25jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRo
ZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFi
YXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9h
ZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JU
ZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9y
YWdlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRl
UmVmZXJyZXJGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQ
YXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9v
bHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1NwZWNp
ZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3RhdGlzdGljc1Rlc3RpbmdD
YWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmbHVzaENvb2tpZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvcldlYlNvY2tldCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFy
Q2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpw
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxT
dG9yYWdlRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0
UXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vz
c0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlh
bGl6ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBcHBCb3VuZERv
bWFpbnNGb3JJVFApOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjp1cGRhdGVC
dW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25J
RE1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmV4aXN0
aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc0Fz
c29jaWF0ZWRQcm9jZXNzUG9vbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdD
b29raWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGlk
Q3JlYXRlTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKToK
KyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3Jz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRp
bmdzKToKKwogMjAyMC0wOS0yMSAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxl
LmNvbT4KIAogICAgICAgICBBbGxvdyBhYm91dDpibGFuayBzdWJmcmFtZSBsb2FkcyBmb3Igbm9u
IGFwcC1ib3VuZCB0b3AgZnJhbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKaW5kZXggZmNlMjM4OTg3YTc4
NTBmMThjOWYzMDZjNTBlOThjZTk4OGQxMjVmZC4uYTI3ZWZkODk4M2E4ZmY3NGEwOWUyYjFiYzI4
YjAzMTYwYmEwNDNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
b29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcApAQCAtMTQ5LDkgKzE0OSwxMiBAQCB2
b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBwb2xpY3ksCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAotdm9p
ZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVy
KG1fcHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7
CisgICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9u
KHNlc3Npb25JRCkpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5j
b29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihIVFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dl
YkNvb2tpZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9X
ZWJDb29raWVNYW5hZ2VyLmgKaW5kZXggY2E3ZjU1ZTg2NmJkYWQ0YjFlMzUyZThmNjQwNTdiYWJj
NDYyODMyZC4uZWI3NDE4MjM1ZjU3MDkzMDM5NjAxOWJlNDQ3MjFkZGMwOWZhOThmNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2ll
TWFuYWdlci5oCkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRDb29raWVz
KFBBTDo6U2Vzc2lvbklELCBjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiYpPiYmKTsKIAogICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpOwotICAgIHZv
aWQgZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmKTsKKyAgICB2b2lkIGdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYpOwogCiAgICAgdm9pZCBzdGFydE9ic2Vydmlu
Z0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQpOwogICAgIHZvaWQgc3RvcE9ic2VydmluZ0Nv
b2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdl
cy5pbgppbmRleCBhY2Q3NTQ0MGQ4M2YzNDY2NTBjOWYzM2I3NWI1ZDVkMDkzNTIxM2JhLi42ZmRm
NTc3MmFhNmFhZTM5NDAyYTlhODlmNTZjODRmN2JkNDM1ODVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFu
YWdlci5tZXNzYWdlcy5pbgpAQCAtMzYsNyArMzYsNyBAQCBtZXNzYWdlcyAtPiBXZWJDb29raWVN
YW5hZ2VyIE5vdFJlZkNvdW50ZWQgewogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVk
U2luY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3lu
YwogCiAgICAgdm9pZCBTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJD
b3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lk
IEdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhU
VFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3Qg
V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAg
dm9pZCBTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KQogICAgIHZvaWQgU3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcAppbmRleCBiZThkOTY2NjJiZTZkY2Q4NWZhM2MzMjkyOWFlMGYwYjVkMTgyMzQzLi43ZjQ3
NzcxMzJkNTI0NzU4MTgyOTgxYWFmMGMxOGI3MmI3YmEzOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ3LDI5ICszNDcsMTkg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRl
YnVnTW9kZShwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAK
LSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAg
IGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lv
bklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0g
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLSAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9y
YWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hl
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFT
dG9yZVBhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAg
ICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5zZXNzaW9uSUQ7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJt
YW5lbnRseShkYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CisgICAgICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25J
RCwgZGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBh
cmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNz
aW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CiAjZW5kaWYKLQorICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBk
YXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1l
dGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1v
dGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMs
IFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKLSAgICBib29sIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQg
PSB0cnVlOwotICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQsIFdURk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
KSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKKyAgICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRh
U3RvcmVQYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQsIFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5KSwgZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdl
clNldC0+YWRkKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8q
IGRlZmF1bHRTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSk7Ci0gICAgYXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNl
c3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29v
a2llIDogcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2ll
cykKLSAgICAgICAgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAg
ICB9CiAKICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygp
KQogICAgICAgICBzdXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNTA1LDgg
KzQ5NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpT
ZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpl
bnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxk
VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXJCYXNlKQog
I2VuZGlmCiB7Ci0gICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpKTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3JrU3RvcmFnZVNl
c3Npb25zLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3
RW50cnkpCiAgICAgICAgIHJldHVybjsKQEAgLTUyMSw3ICs1MDksNyBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJv
b2wgc2hvdWxkVQogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gbWFr
ZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fub25p
Y2FsVVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVByaXZh
dGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAgZWxz
ZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAg
ICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpj
cmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkpOwog
CiAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQSSgp
KSB7CkBAIC01NDQsMjEgKzUzMiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVBY2Nl
cHRQb2xpY3lDaGFuZ2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9saWN5KQogCiBXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lv
bihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNz
aW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0
dXJuICZkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFn
ZVNlc3Npb25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewot
ICAgIGlmICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1
bHROZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vz
c2lvbigpOwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQot
CiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9y
KQogewotICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0
byYgc3RvcmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAg
ICAgICAgIGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCBhYTczMzc3YjczMmY2MTBiODY3OTA1
NmMzN2RmMjhhZWVhMDdhZjgzLi5kYzg2ZjM5Njk3ZmM1MDNlYTRkYmQxYjA2YzMyMjk3NWIxZTY5
ZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5o
CkBAIC0xNzAsNyArMTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0
b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdl
U2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2
b2lkIGVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJik7CkBAIC0zNzUsNyArMzc0LDYgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29u
c3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nl
c3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBAIC01NDQsNyAr
NTQyLDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8
UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3Rv
cmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1h
bmFnZXJTZXQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggOTkwMWM1
Y2I3M2M3NGZlM2RhNGViZjU3YmE4NTEyODZmZGExMDRiZi4uMDJkZGI5MjM0ZTk5OWMzZTZjZGNk
Y2YwYjg3OGI4NzI1ODM2MzI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAK
QEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6
ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IHVpUHJv
Y2Vzc1NES1ZlcnNpb247CiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRl
eHQuZ2V0KCkpOwogI2VuZGlmCi0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVyczsKKyAgICBlbmNvZGVyIDw8IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYgVVNFKFNPVVAp
CiAgICAgZW5jb2RlciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5jb2RlciA8PCBpZ25v
cmVUTFNFcnJvcnM7CkBAIC02OCw5ICs2OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5j
b2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxT
Y2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
Ci0gICAgZW5jb2RlciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxk
RGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAg
IGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFi
bGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTYsMTEgKzExMywxMSBAQCBi
b29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVy
JiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAot
ICAgIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVyczsKLSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwot
ICAgIGlmICghZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9y
PFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBk
ZWNvZGVyID4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0
ZXJzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzID0gV1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJl
c3VsdC5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7
CiAKICNpZiBVU0UoU09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVB
Y2NlcHRQb2xpY3kpKQpAQCAtMTQyLDIwICsxMzksNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJv
YwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNO
b0FjY2VzcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlv
bmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmVzdWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUgPSBXVEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERp
c2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3Vs
ZEVuYWJsZUlUUERhdGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggMTFjYTVhMTk5ZmNmZmU4ODNmZmYwYTJmZjc5ZGZlNDIx
MGQ5ZGFkMS4uNjc0OWRhMGM0YTYzYzIwMjEwNzc4MzU4NDg0NmM5MGQwMTBhMDM0MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtNzEsNyArNzEsNyBAQCBzdHJ1Y3QgTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG5l
dHdvcmtBVFNDb250ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cyBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnM+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAgICAgCiAjaWYgVVNFKFNPVVApCiAg
ICAgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBX
ZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsKQEAgLTg1LDEy
ICs4NSw3IEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAg
VmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIFZlY3RvcjxT
dHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKLSAgICBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBib29sIHNob3VsZERpc2FibGVTZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgYm9v
bCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZSB7IGZhbHNlIH07CisgICAgYm9vbCBzaG91bGRFbmFi
bGVJVFBEYXRhYmFzZSB7IHRydWUgfTsKICAgICBib29sIGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlv
bkRlYnVnTW9kZSB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXggZGE2MzU5
MTI0MjIzZGI5NzAzMGQxZWE3N2JjMDBjZWU1MWZiMDE3ZC4uNTAxMGY5YTg2OTAzOTBkZmZlOWEz
NDRlOTkwNWIyNGU2Njg1YzdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpAQCAtNzgsOSArNzgsNiBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0Nv
Y29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQ
ZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJz
LmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFUU0NvbnRleHQo
cGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMDUsMTEgKzEwMiw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29j
b2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2Fj
aGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7
Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNzOjpzb3VyY2VBcHBsaWNh
dGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9BUFBMSUNBVElPTl9BVURJ
VF9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwv
TmV0d29ya1Byb2Nlc3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQyZGNjOGUzZjliOGYx
NjkyOTk3ZjY3MTkyLi40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5M2UyMjU2YTM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29y
a1Byb2Nlc3NDdXJsLmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGkKIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5l
dHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3Qg
Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBjMjczNmUw
MjZhNTVkM2Q0MDIwZjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0NjIwZjAyYTdkOWU5
ZTg2OWVjODY0OTFiN2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNTUsMTUgKzU1
LDExIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3Rv
cmVTZXNzaW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9u
SGFuZGxlKTsKIAogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nl
c3NDb29raWVTdG9yYWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBh
cmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAg
IGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29v
a2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25J
RCgpKQogICAgICAgICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3RvcmFnZUZyb21J
ZGVudGlmeWluZ0RhdGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmll
cik7CiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNz
aW9uLCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkpLCBXVEZNb3Zl
KHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3Jr
UHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29uc3QgYXV0byYg
Y29va2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0
Q29va2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25J
RCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRl
eCA0MWFmZGNjNjFhZGM1ODNkY2YxOWYyZDQwYWEyODkxZjhhMDEzMjhiLi4wOTNkNTk5NTk2YTY4
ODMwYWYwOTkzZmEzNjgzMWUwYzMyNGJmYmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApAQCAtMTQwLDEx
ICsxNDAsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNldElnbm9yZVRMU0Vycm9y
cyhwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3Jz
KGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0U2hv
dWxkSWdub3JlVExTRXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXggNmQwYzEyOWE3
NDA1MTBkMzg2OTczNzA1YWQwOTJlZjEzMmNjMDc1YS4uMDQ4MTBiM2UxOWJlOTZjYWQxYWQ4MmE0
NGRjZWRiMjZlZjc4MjYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcApAQCAtNDAsMTMgKzQwLDkgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QK
ICAgICBlbmNvZGVyIDw8IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8
IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2ll
U3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2ll
czsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERh
dGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpk
ZWNvZGUoSVBDOjpEZWMKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0
ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY29va2llU3Rv
cmFnZVBhdGhFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4+IHBlbmRpbmdDb29raWVzOwotICAgIGRlY29kZXIgPj4gcGVuZGluZ0Nvb2tpZXM7
Ci0gICAgaWYgKCFwZW5kaW5nQ29va2llcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gV1RGTW92ZSgqcGVuZGluZ0Nvb2tpZXMp
OwotCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBp
bmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VE
aXJlY3Rvcnk7CkBAIC0xMDEsMTQgKzkxLDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAg
ICBpZiAoIWluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIE9wdGlvbmFs
PFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VUZW1wQmxv
YkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIWluZGV4ZWREYXRhYmFzZVRlbXBC
bG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
LmgKaW5kZXggZjI3ZGY0ODk4MDlmMzE5NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQzOS4uZTFiMjMz
NzAxOTlmZTM3MDMxZTlkYzVjMDU3ODE1NTAyMWUzNGQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCkBAIC01MSwxNSArNTEsMTEg
QEAgc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKIAogICAgIFZlY3Rvcjx1aW50
OF90PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXM7CiAgICAgTmV0d29ya1Nlc3Npb25DcmVh
dGlvblBhcmFtZXRlcnMgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAgICAgU3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
OwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKaW5kZXgg
YmMwNzg2NmZiYzM5NjhlNzZjYWE5YTM1NjgxMGM2YTJmYjA5ZGNmZC4uZmY5NTU4OTJiZGEwYjgz
YzIzYTk2YTA4MzllZjNiZDBkOTQ2OWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKQEAgLTQ2LDggKzQ2LDYgQEAgbmFtZXNw
YWNlIEFQSSB7CiBIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0RhdGFTdG9yZSh3
ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQ
b29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQ
cm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENv
b2tpZVN0b3JlKCkKQEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tp
ZVN0b3JlKCkKICAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQo
IW1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9jb29raWVNYW5h
Z2VyUHJveHlPYnNlcnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENv
b2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC04MSwzMyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJv
dW5kQ29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2kKIAogdm9pZCBI
VFRQQ29va2llU3RvcmU6OmNvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8q
IHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiBhbGxDb29raWVzOwotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgICAgICBh
bGxDb29raWVzID0gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwot
ICAgICAgICBhbGxDb29raWVzLmFwcGVuZFZlY3RvcihtX293bmluZ0RhdGFTdG9yZS0+cGVuZGlu
Z0Nvb2tpZXMoKSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIGFsbENvb2tpZXNdICgpIG11dGFibGUgewotICAgICAgICAg
ICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGFsbENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRv
KiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykg
bXV0YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5u
ZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldEFs
bENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11
dGFibGUgewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRv
KiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9w
ZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcih7IH0pOwotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0
Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYgY29va2llcykgbXV0
YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldENvb2tp
ZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUg
ewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtMTE1LDc4ICs5NCwyOSBAQCB2b2lkIEhUVFBD
b29raWVTdG9yZTo6Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0bwogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldENvb2tpZXMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2ll
cywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiBhcHBCb3VuZENvb2tpZXMp
IG11dGFibGUgewotICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nl
c3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vz
c2lvbiBiZWNhdXNlIHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3
b3JrIFByb2Nlc3Mgd2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAg
ICAgICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAg
ICAgICAgICAgICBzZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUp
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9vd25pbmdEYXRh
U3RvcmUtPmFkZFBlbmRpbmdDb29raWUoY29va2llKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tp
ZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
PigpOwotICAgICAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUg
ewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAg
IGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3Mo
KS5jb29raWVNYW5hZ2VyKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVs
ZXRlQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3du
aW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0g
ICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Np
b24pCi0gICAgICAgICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0
b3JlKGNvb2tpZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3Jl
LT5yZW1vdmVQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAg
IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9
IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAg
Y29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgY29va2llLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci0gICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0
YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5h
Z2VyLmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
ZGVsZXRlQWxsQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9v
bEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAg
IGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAg
ICAgICAgICBkZWxldGVDb29raWVzSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNv
b2tpZU1hbmFnZXItPmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpKTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdv
cmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxs
Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBU
aGUgQ29tcGxldGlvbkhhbmRsZXIgc2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbENvb2tpZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xp
Y3kpOwotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFu
YWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
Ci0gICAgY29va2llTWFuYWdlci0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0Rh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFT
dG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdl
ci5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgcG9saWN5LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENv
b2tpZVN0b3JlOjpmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMjI3LDIxICsxNTcsNyBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6
cmVnaXN0ZXJPYnNlcnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCiAKICAgICBtX2Nvb2tpZU1hbmFn
ZXJQcm94eU9ic2VydmVyID0gbWFrZVVuaXF1ZTxBUElXZWJDb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcj4oKnRoaXMpOwogCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wpIHsK
LSAgICAgICAgQVNTRVJUKCFtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMpOwotCi0gICAgICAg
IC8vIExpc3RlbiBmb3IgY29va2llIG5vdGlmaWNhdGlvbnMgaW4gdGhlIFVJUHJvY2VzcyBpbiB0
aGUgbWVhbnRpbWUuCi0gICAgICAgIHN0YXJ0T2JzZXJ2aW5nQ2hhbmdlc1RvRGVmYXVsdFVJUHJv
Y2Vzc0Nvb2tpZVN0b3JlKFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICBjb29raWVzRGlkQ2hhbmdl
KCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIG1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyA9
IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFu
YWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0
b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCkBAIC0yNzYsNDYg
KzE5MiwxMCBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0RpZENoYW5nZSgpCiB2b2lk
IEhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCgpCiB7CiAgICAgbV9vYnNl
cnZlZENvb2tpZU1hbmFnZXJQcm94eS0+dW5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBudWxscHRyOwotCi0gICAgYXV0byogcG9vbCA9
IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25z
KCk7Ci0KLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb2JzZXJ2ZWRD
b29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmbV9vd25p
bmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwogICAgIG1fb2Jz
ZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKLXZv
aWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9u
cygpCi17Ci0gICAgQVNTRVJUKCFtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZp
ZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKFt0aGlzXShX
ZWJQcm9jZXNzUG9vbCYgbmV3UHJvY2Vzc1Bvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0Rh
dGFTdG9yZS0+aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wobmV3UHJvY2Vzc1Bvb2wpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIE5vdyB0aGF0IGFuIGFzc29jaWF0ZWQgcHJvY2Vz
cyBwb29sIGV4aXN0cywgd2UgbmVlZCB0byBmbHVzaCB0aGUgVUkgcHJvY2VzcyBjb29raWUgc3Rv
cmUKLSAgICAgICAgLy8gdG8gbWFrZSBzdXJlIGFueSBjaGFuZ2VzIGFyZSByZWZsZWN0ZWQgd2l0
aGluIHRoZSBuZXcgcHJvY2VzcyBwb29sLgotICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3ND
b29raWVTdG9yZSgpOwotICAgICAgICBuZXdQcm9jZXNzUG9vbC5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotCi0gICAgICAgIGlmIChtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKSB7Ci0gICAg
ICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbmV3UHJvY2Vzc1Bvb2wuc3Vw
cGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAg
ICAgIH0KLSAgICAgICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygp
OwotICAgIH0pOwotfQotCi12b2lkIEhUVFBDb29raWVTdG9yZTo6dW5yZWdpc3RlckZvck5ld1By
b2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAgaWYgKG1fcHJvY2Vzc1Bvb2xDcmVhdGlv
bkxpc3RlbmVySWRlbnRpZmllcikKLSAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJQ
cm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJ
ZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmll
ciA9IDA7Ci19Ci0KICNpZiAhUExBVEZPUk0oQ09DT0EpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Zmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKSB7IH0KIFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+IEhUVFBDb29raWVTdG9yZTo6Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
Q29va2llcygpIHsgcmV0dXJuIHsgfTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCmluZGV4IGQ2MjBhZGRhNGU3Zjg5NDU2NjE4YTNlMjJl
MWJmZDQzNTc3NzViMTkuLmEwNWY0MTQzMGRiMmIyM2Q0MTc4NDA3OWE0ZmI4NmM3NDYwYTc1NDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3Jl
LmgKQEAgLTgzLDkgKzgzLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3Rv
cmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTmV3
UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0KICAgICB2b2lkIGZsdXNoRGVmYXVsdFVJUHJvY2Vz
c0Nvb2tpZVN0b3JlKCk7CiAgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGdldEFs
bERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKICAgICBzdGF0aWMgdm9pZCBz
ZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb25zdCBXZWJDb3JlOjpDb29r
aWUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCmluZGV4
IDU4YzU0NTNmNDg5ODdmNWUxYWZhZmVmMzRjNDMzMzVmMWI0Y2M5OTAuLjY1ZjhiNTNmNWIzZDMw
NWNmMjgwYmE1ZDMwYWFlMzdiMzlhY2Y0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmNwcApAQCAtNDExLDExICs0MTEsNiBAQCB2b2lkIFdLQ29udGV4dFBy
ZWNvbm5lY3RUb1NlcnZlcihXS0NvbnRleHRSZWYsIFdLVVJMUmVmKQogewogfQogCi1XS0Nvb2tp
ZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4
dFJlZikKLXsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0
UmVmKS0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSk7Ci19Ci0K
IFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29u
dGV4dFJlZikKIHsKICAgICByZXR1cm4gV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFT
dG9yZSgpOwpAQCAtNTI3LDEzICs1MjIsNiBAQCB2b2lkIFdLQ29udGV4dFNldEphdmFTY3JpcHRH
YXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLAogICAg
IFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3Rv
clRpbWVyRW5hYmxlZChlbmFibGUpOwogfQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNT
TENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQs
IGJvb2wgYWxsb3dzKQotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6
OnRvSW1wbChjb250ZXh0KS0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQ
bHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAg
ICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVn
SW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoKS5sZWFrUmVmKCkpOwpAQCAtNTc1LDExICs1NjMsNiBA
QCB2b2lkIFdLQ29udGV4dFNldEZvbnRBbGxvd0xpc3QoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYs
IFdLQXJyYXlSZWYgYXJyYXlSZWYpCiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNl
dEZvbnRBbGxvd0xpc3QoV2ViS2l0Ojp0b0ltcGwoYXJyYXlSZWYpKTsKIH0KIAotdm9pZCBXS0Nv
bnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAg
ICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0K
LQogdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYgY29u
dGV4dCkKIHsKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlU2VydmljZVdv
cmtlcnMoKTsKQEAgLTU4Nyw3ICs1NzAsNyBAQCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZp
Y2VXb3JrZXJzKFdLQ29udGV4dFJlZiBjb250ZXh0KQogCiBQcm9jZXNzSUQgV0tDb250ZXh0R2V0
TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewotICAg
IHJldHVybiBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+bmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyKCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1
Z2luKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBkb21haW5SZWYsIFdLU3Ry
aW5nUmVmIG5hbWVSZWYsIFdLQXJyYXlSZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5UmVmIGV4dGVu
c2lvbnNSZWYpCkBAIC02MTksMTIgKzYwMiwxMSBAQCB2b2lkIFdLQ29udGV4dENsZWFyQ3VycmVu
dE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogICAgIFdl
YktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5jbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVz
dGluZygpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcykKK3ZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcyhXS0NvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykK
IHsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFBy
aW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgd2Vic2l0ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdl
YnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0g
ICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktp
dDo6dG9JbXBsKHdlYnNpdGVEYXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmgKaW5kZXggMWQ4ZmFiOGExNDg2YWFkYjQ5NDE0NGI5OGYxMGU5MzYz
OGQwYzVlNi4uMmFiNmVmODZmNTMwZTc3Zjc0Y2JkNWRmNTg2MmFjNGQzMGI3OTg3NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2OCw3ICsxNjgsNiBA
QCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihXS0NvbnRleHRSZWYg
Y29udGV4dCk7CiBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4dEdldFdl
YnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURf
V0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsK
IAogV0tfRVhQT1JUIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0QXBw
bGljYXRpb25DYWNoZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJF
Q0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0
b3JlKTsKLVdLX0VYUE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFu
YWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdLX0VYUE9S
VCBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1hbmFnZXIo
V0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVmIFdLQ29u
dGV4dEdldEljb25EYXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFnZU1hbmFn
ZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNF
TUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAppbmRleCBhMDI1MDEx
ZjcwY2M2NTlmNWZhYTA4YTdkNmNiYjNmZjU2ZWU2YTM4Li5kODM5Y2FjYjI4YmE1NjVkYzk1YTgz
OTNiZmNjYWI5MzhkYWRjYzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0UHJpdmF0ZS5oCkBAIC04MywxMSArODMsOCBAQCBXS19FWFBPUlQgdm9pZCBX
S0NvbnRleHRXYXJtSW5pdGlhbFByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogLy8gQXQg
c29tZSBwb2ludCBpdCBzaG91bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4
dFNldFVzZXNOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1XS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tf
RVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVm
KTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVG
b3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0eXBlZGVmIHZv
aWQgKCpXS0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1JlZiBtZXNzYWdl
TmFtZSk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9u
KFdLQ29udGV4dEludmFsaWRNZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VGdW5jdGlvbik7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNp
dGVEYXRhU3RvcmVSZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmNwcAppbmRleCA5ZGRhNTkxYzk1MTg5YWIwYzI1YWM1NTQ2NmMwYTJi
ZmMzOTI3ZWJjLi5iNzhhOTFlMzNlZGY5ZTI5NGJiNGQ4ZDRjMGRkZjU3Y2U1MDE2YjdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVS
ZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5jcHAKQEAgLTY5LDYgKzY5LDExIEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1dl
YnNpdGVEYXRhU3RvcmVDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihXS1dlYnNpdGVEYXRhU3RvCiAg
ICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRl
KCpXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKSwgc2Vzc2lvbklEKS5sZWFrUmVmKCkpOwog
fQogCit2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpCit7CisgICAgV2ViS2l0Ojp0b0ltcGwoZGF0YVN0
b3JlKS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKK30KKwogdm9pZCBXS1dlYnNpdGVEYXRh
U3RvcmVSZW1vdmVJVFBEYXRhRm9yRG9tYWluKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3Rv
cmVSZWYsIFdLU3RyaW5nUmVmIGhvc3QsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9y
ZVJlbW92ZUlUUERhdGFGb3JEb21haW5GdW5jdGlvbiBjYWxsYmFjaykKIHsKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAppbmRleCBlNzdkMDljMTA3ZDFkYTA3
ODNkMDljMDdlMjgwM2QwODcxMjVlNDhiLi5jM2ZhMWJmM2Y5MjQ4YzJmZTQ5YmUxMjQzOTY0NDEx
ZjgzMWQyYTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dl
YnNpdGVEYXRhU3RvcmVSZWYuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1dlYnNpdGVEYXRhU3RvcmVSZWYuaApAQCAtNTAsNiArNTAsOSBAQCBXS19FWFBPUlQgdm9pZCBX
S1dlYnNpdGVEYXRhU3RvcmVTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldFRl
c3RpbmcoVwogCiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENy
ZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogCitXS19FWFBP
UlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0
ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0
b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9y
ZSk7CisKIFdLX0VYUE9SVCBib29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogV0tf
RVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUpOwog
dHlwZWRlZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0VwaGVtZXJhbEZ1bmN0
aW9uKShib29sIGlzRXBoZW1lcmFsLCB2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQppbmRleCBm
ZjMwOTQ5ODZjMjQzZDA0NzRmMjUyZDM5MWU2Y2NiNzRmMWZlZDViLi5hODAyYjk3YzdiNDE2Zjk2
YmJhNTRmZWJlN2ExZGRkNDM4M2QwYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQpAQCAtNDA2LDI4ICs0MDYsNiBAQCBzdGF0
aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1h
cDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJTdXBwb3J0ZWRQbHVn
aW5zKCk7CiB9CiAKLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCi17Ci0gICAgX3By
b2Nlc3NQb29sLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCi0tICh2b2lkKV9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKLXsKLSAgICBfcHJvY2Vzc1Bvb2wt
PnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0K
LQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQ
cm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFr
ZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgIH0pOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUK
LXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQot
CiAtICh2b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29ya2VycwogewogICAgIF9wcm9jZXNzUG9vbC0+
dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKQEAgLTQzNSwxMiArNDEzLDEyIEBAIHN0YXRpYyBO
U0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0
cmluZywgSGFzaE1hcDxTCiAKIC0gKHZvaWQpX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3M6KEJPT0wpdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcwogewotICAgIF9wcm9j
ZXNzUG9vbC0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MpOwogfQogCiAtIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCiB7Ci0gICAgcmV0
dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CisgICAgcmV0dXJu
IDA7CiB9CiAKIC0gKHBpZF90KV9wcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcgpAQCAtNTYwLDE4
ICs1MzgsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25h
cnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0
Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLS0gKHZvaWQp
X3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAotewotICAgIF9wcm9j
ZXNzUG9vbC0+c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKLX0KLQotLSAo
dm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFs
bG93cwotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBfcHJvY2Vzc1Bvb2wtPnNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlm
Ci19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogLSAoaWQgPF9XS0dlb2xvY2F0aW9uQ29y
ZUxvY2F0aW9uUHJvdmlkZXI+KV9jb3JlTG9jYXRpb25Qcm92aWRlcgogewpAQCAtNjA0LDExICs1
NzAsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnko
Y29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIH0pOwogfQogCi0tIChCT09MKV9u
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxl
bWVudAotewotICAgIHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nKGVudGl0bGVtZW50KTsKLX0KLQogLSAodm9pZClfY2xlYXJQZXJtYW5l
bnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilw
cm90ZWN0aW9uU3BhY2UKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyUGVybWFuZW50Q3JlZGVu
dGlhbHNGb3JQcm90ZWN0aW9uU3BhY2UoV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rp
b25TcGFjZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAppbmRleCA2NzY5MDE1ZTA4NTU4OTk0Y2Q4YTIxOWEx
N2E5YzY4YWRlM2I1MzgzLi5iZjQ4Y2ExYzUyYzIyMTk3MzY4Yjg4MjkwNTA3MjIzZjBmMjA2Y2Qx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNz
UG9vbFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQ
cm9jZXNzUG9vbFByaXZhdGUuaApAQCAtODcsMTAgKzg3LDYgQEAKIC0gKF9XS0Rvd25sb2FkICop
X3Jlc3VtZURvd25sb2FkRnJvbURhdGE6KE5TRGF0YSAqKXJlc3VtZURhdGEgd2Vic2l0ZURhdGFT
dG9yZTooV0tXZWJzaXRlRGF0YVN0b3JlICopZGF0YVN0b3JlICBwYXRoOihOU1N0cmluZyAqKXBh
dGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4g
U2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoaWxlIG5vIHdlYiBjb250ZW50IHByb2Nlc3NlcyBhcmUg
cnVubmluZy4KLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNz
UHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElf
QVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClf
c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9p
ZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCks
IGlvcygxMi4wKSk7CiAKIC8vIFRlc3Qgb25seS4KQEAgLTEyMiwxMyArMTE4LDEwIEBACiAtICh2
b2lkKV9wcmVjb25uZWN0VG9TZXJ2ZXI6KE5TVVJMICopc2VydmVyVVJMIFdLX0FQSV9ERVBSRUNB
VEVEX1dJVEhfUkVQTEFDRU1FTlQoIldLV2ViVmlldy5fcHJlY29ubmVjdFRvU2VydmVyIiwgbWFj
b3MoMTAuMTMuNCwgV0tfTUFDX1RCQSksIGlvcygxMS4zLCBXS19JT1NfVEJBKSk7CiAKIC8vIFRl
c3Qgb25seS4KLS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdv
cmtlcjooQk9PTClhbGxvd3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDEx
LjMpKTsKIC0gKHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3Rp
bmc6KHBpZF90KXBpZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PE5TU3RyaW5n
ICo+ICopKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCks
IGlvcygxMi4yKSk7Ci0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVz
dGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0
LjQpLCBpb3MoMTIuMikpOwogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclBy
b3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBnZXR0ZXI9X2lzQ29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQsIHNldHRl
cj1fc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQ6KSBCT09MIF9jb29raWVTdG9y
YWdlUGFydGl0aW9uaW5nRW5hYmxlZCBXS19BUElfREVQUkVDQVRFRCgiUGFydGl0aW9uZWQgY29v
a2llcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCIsIG1hY29zKDEwLjEyLjMsIDEwLjE0LjQpLCBp
b3MoMTAuMywgMTIuMikpOwotLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9P
TCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwog
CiAvLyBUZXN0IG9ubHkuCiAtICh2b2lkKV9zZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRl
c3RpbmdXaXRoRmlyc3RQYXJ0eTooTlNVUkwgKilmaXJzdFBhcnR5VVJMIHRoaXJkUGFydHk6KE5T
VVJMICopdGhpcmRQYXJ0eVVSTCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbjooQk9PTClzaG91
bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSlj
b21wbGV0aW9uSGFuZGxlciAgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9z
KFdLX0lPU19UQkEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCmluZGV4IDI5OGQ5Y2VjOWU4NGQ4YTUxMjIwNjVj
Yzk5MjMzZWY0ZjBiOTUzODkuLmFlOWM0NTA3NzkwODZjYzFlMzExNGNlMTNmMmQyMTg4ZTc4N2Yx
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2Vic2l0ZURhdGFTdG9yZS5tbQpAQCAtNjE3LDYgKzYxNywxMSBAQCBzdGF0aWMgVmVjdG9yPFdl
YktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRh
dGFSZWNvcgogICAgIH0pOwogfQogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVt
ZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAoreworICAgIHJldHVybiBfd2Vi
c2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoZW50
aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVnYXRlPilfZGVs
ZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdldCgpLmdldCgpOwpAQCAtNjY4LDQgKzY3
MywzMiBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0
ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogI2VuZGlmCiB9CiAKKy0gKHZvaWQpX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfd2Vi
c2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3Rp
bmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0g
eworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworfQorCistICh2b2lkKV9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKK3sKKyAgICBfd2Vic2l0ZURh
dGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGlu
ZygpOworCit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQoreworICAg
IF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKK30KKwor
LSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kCit7Cisg
ICAgX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZChiYWNrZ3JvdW5kKTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgK
aW5kZXggOTkzMjAxMDQ2YjU1MWMzZjI4ZGYyZGMwYTAzNDZkN2JjNzlhYzVmNC4uNDIxNWRiNzQ3
YmEzMjJmYWViOGE0N2UxNjc1YTY1ODM4MTQ3MjYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0
ZS5oCkBAIC04NSw5ICs4NSwxNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dL
V2Vic2l0ZURhdGFTdG9yZUZldGNoT3B0aW9ucykgewogCiAtICh2b2lkKV9yZW5hbWVPcmlnaW46
KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKiluZXdOYW1lIGZvckRhdGFPZlR5cGVzOihOU1Nl
dDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9p
ZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9wZXJ0eSAobnVsbGFi
bGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2Rl
bGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZv
aWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVu
ZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZB
SUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc3lu
dGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBlbmQKIAogTlNfQVNTVU1F
X05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDFlZTczZWJjMGVhMDM2Zjg2YjNmZTk0
NDE0OTA3MmU2YWM0ZGM3NjcuLjc3MDE0OTk4MzZlZTQ0ZjlhY2YwZTI3MGQ3MGM5NWQxNmJlNjc4
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdENvb2tpZU1hbmFnZXIuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlci5oIgogCisjaW5jbHVkZSAiTmV0d29y
a1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIlNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5
cGUuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJL
aXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIgpAQCAtNTYsNiArNTcsMTIgQEAgZW51bSB7CiB9Owog
CiBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKKyAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHkmIGNvb2tpZU1hbmFnZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGRh
dGFNYW5hZ2VyKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERh
dGFTdG9yZShkYXRhTWFuYWdlcikubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7Cisg
ICAgfQorCiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVChkYXRhTWFuYWdlcik7CkBAIC02NCw4ICs3MSw3IEBAIHN0cnVjdCBfV2ViS2l0
Q29va2llTWFuYWdlclByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0
ZSgpCiAgICAgewotICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2ll
T2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CisgICAgICAgIGNvb2tpZU1h
bmFnZXIoKS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsK
ICAgICB9CiAKICAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW5hZ2VyOwpAQCAt
MTM5LDExICsxNDUsOSBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRDb29raWVNYW5hZ2Vy
Q3JlYXRlKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbgogewogICAgIFdlYktpdENv
b2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9lbWl0KG1h
bmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9CisgICAgbWFu
YWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFu
YWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2lnbmFsX2Vt
aXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1h
bmFnZXI7CiB9CiAKQEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsCiAg
ICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vz
c1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIG1hbmFnZXItPnByaXYtPmNv
b2tpZU1hbmFnZXIoKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmlu
Zzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUo
c3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE5Miw4ICsxOTUsNyBAQCB2b2lkIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2Vy
LCBXZWJLaQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VS
KG1hbmFnZXIpKTsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkt
PnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRv
SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgbWFuYWdlci0+
cHJpdi0+Y29va2llTWFuYWdlcigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+
cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgp
IHsgfSk7CiB9CiAKIC8qKgpAQCAtMjI0LDcgKzIyNiw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIEdD
YW5jCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CisgICAgbWFuYWdlci0+cHJpdi0+
Y29va2llTWFuYWdlcigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSBwb2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQo
KSwgdG9XZWJLaXRDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7CiB9CkBAIC0y
NjksMTEgKzI3MSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUoV2Vi
S2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3JldHVybl9pZl9m
YWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFz
a19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAg
Ly8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFi
YXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0
aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3Qg
YXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bv
b2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1
cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RG
TW92ZSh0YXNrKV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENv
b2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tp
ZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9i
b29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIwLDExICszMTgsNyBA
QCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRDb29raWVNYW5h
Z2VyKiBtYW5hZ2VyLCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAog
ICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBj
YW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSBy
ZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdh
cmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVz
dCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9v
bHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2sp
XShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIG1hbmFnZXIt
PnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25J
RCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0
YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAg
R0xpc3QqIGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUg
OiBjb29raWVzKQogICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29r
aWVzTGlzdCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzcyLDcgQEAgdm9p
ZCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2Vy
KiBtYW5hZ2VyLCBTb3VwQ29va2kKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAg
ICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2Fu
Y2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVh
ZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJk
bGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3Qg
dXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xz
ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAg
IG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5kZWxldGVDb29raWUobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUo
dGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJV
RSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDg5YmU1NmFkNzFkNzE1NjkxMmEyNjkxNTMw
NTdkZjUyN2NkZDQ0NjAuLmNmZjAzNTg2ZGY4YTFmYjk2YTYyYTAxN2EzYzQ2ZTVmNDBkZTJkMzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdl
YkNvbnRleHQuY3BwCkBAIC00MDQsNyArNDA0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29u
dGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgcHJpdi0+d2Vic2l0ZURh
dGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcoImxv
Y2FsLXN0b3JhZ2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEo
KSwgbnVsbHB0cikpOwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlKGNvbmZpZ3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRQcmltYXJ5
RGF0YVN0b3JlKHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJz
aXRlRGF0YU1hbmFnZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1l
c3NhZ2VIYW5kbGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKICAg
ICAgICAgLy8gU2luayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRyPFdlYktpdFVz
ZXJNZXNzYWdlPiB1c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRlKFdURk1vdmUo
bWVzc2FnZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTE2MDMsOCArMTYwMiw4
IEBAIHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3ByZWZldGNoX2RucyhXZWJLaXRXZWJDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBjaGFyKiBob3N0CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoaG9zdG5hbWUp
OwogCi0gICAgaWYgKGNvbnRleHQtPnByaXYtPmRuc1ByZWZldGNoZWRIb3N0cy5hZGQoaG9zdG5h
bWUpLmlzTmV3RW50cnkpCi0gICAgICAgIGNvbnRleHQtPnByaXYtPnByb2Nlc3NQb29sLT5zZW5k
VG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWZldGNoRE5T
KFN0cmluZzo6ZnJvbVVURjgoaG9zdG5hbWUpKSk7CisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9y
ZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShjb250ZXh0LT5wcml2LT53
ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5n
Ojpmcm9tVVRGOChob3N0bmFtZSkpLCAwKTsKICAgICBjb250ZXh0LT5wcml2LT5kbnNQcmVmZXRj
aEh5c3RlcmVyaXMuaW1wdWxzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IDRh
YjQ3ZmZmNTkxMWVlYzM3ZTU2YmM1YmJiMzI5ZWJhZWE3ZDM4NjUuLjMwMDZmNGZhZTZjNDNjMjZi
ZjQwODIyYjZkZTg2OGVmMmUwMmNmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0xMzky
LDggKzEzOTIsOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbgogCiAgICAgY29va2llLmh0dHBP
bmx5ID0gKmh0dHBPbmx5OwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5h
Z2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
Ci0gICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCku
c2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CisgICAgV2ViQ29va2llTWFu
YWdlclByb3h5JiBjb29raWVNYW5hZ2VyID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdv
cmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2ll
cyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxs
YmFja10oKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpA
QCAtMTQwOSw4ICsxNDA5LDggQEAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygKIAogICAgIFN0cmlu
ZyBob3N0ID0gYWN0aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2ViQ29va2llTWFu
YWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwg
ZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBXZWJDb29raWVN
YW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkubmV0
d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVD
b29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwg
eyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOwogCiAgICAg
cmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGls
aWFyeVByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5LmgKaW5kZXggNDFjMGEwZmJmNTA2ZWZhMTQwOGJjZWY5YWY4YTkwYjg1YTFhZDA4
YS4uNGYzOThiNTMwZjYwODU3NWM5NjdiODNjNzRmYTJmNDMyOGY2Y2UzYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94eSgpOwogCiAg
ICAgdm9pZCBjb25uZWN0KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdGVybWluYXRlKCk7CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxl
cigpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAppbmRleCBkYmU0NGY5
NTk0MTA1MTEyMTUxMjhkMjlkMjE0ZWVlMDc0YWFmODRjLi40Yzg0NWEwZWM3MjU2NTljZmU3OWNl
YTM1ZDNjYmE5NjY4MzQ2MTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaApA
QCAtNDEsMTEgKzQxLDExIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHk7CiAKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudCBmaW5hbCA6IHB1YmxpYyBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCB7
Ci1wcml2YXRlOgorcHVibGljOgogICAgIHZvaWQgc3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JikgZmluYWw7CiAgICAgdm9pZCBzdG9wTG9hZGluZyhMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYsIExlZ2FjeUN1c3RvbVByb3RvY29sSUQpIGZpbmFs
OwogICAgIHZvaWQgaW52YWxpZGF0ZShMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYp
IGZpbmFsOwotCitwcml2YXRlOgogICAgIEhhc2hNYXA8TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwg
UmV0YWluUHRyPFdLQ3VzdG9tUHJvdG9jb2xMb2FkZXI+PiBtX2xvYWRlck1hcDsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29j
b2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29h
Lm1tCmluZGV4IDc2ZDdhNjQwNDFhMjkxZDVmMjk3MzUxNzZlMzFlYTcwZjVlZDU1NmMuLjEzNjcw
ZTJkODBiMDE4NDcwMzVjMTlkZjg5MjExZmM3NTU1NmM2NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtMTM0LDgg
KzEzNCw5IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKQogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0g
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNldFBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAg
ICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbZW5hYmxlZCA9IHBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkg
eworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZXRQcm9jZXNzU3VwcHJlc3Np
b25FbmFibGVkKGVuYWJsZWQpOworICAgIH0pOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50
ZXIudmFsdWUoKSkKQEAgLTE2Niw4ICsxNjcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0
Zm9ybUluaXRpYWxpemUoKQogICAgIGlmICghW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJE
ZWZhdWx0c10gYm9vbEZvcktleTpAIldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVy
Il0pCiAgICAgICAgIGluc3RhbGxNZW1vcnlQcmVzc3VyZUhhbmRsZXIoKTsKIAotICAgIHNldExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudD4oKSk7Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAh
UExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgaWYgKCFfTUdDYWNoZVZhbGlkKCkpIHsKICAgICAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVV
RV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsKQEAgLTQ5MywyMiArNDkyLDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmEKIAogICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CiAKLSAgICB7Ci0gICAgICAgIGJvb2wgaXNT
YWZhcmkgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc01pbmlCcm93c2VyID0gZmFsc2U7Ci0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpJT1NBcHBs
aWNhdGlvbjo6aXNNb2JpbGVTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNv
cmU6OklPU0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZWxpZiBQTEFURk9STShNQUMp
Ci0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCk7
Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNNaW5p
QnJvd3NlcigpOwotI2VuZGlmCi0gICAgICAgIGlmIChpc1NhZmFyaSB8fCBpc01pbmlCcm93c2Vy
KSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBz
dHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQcm94eURlZmF1bHRzS2V5XSk7Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5odHRwc1Byb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5n
Rm9yS2V5OihOU1N0cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXldKTsKLSAgICAg
ICAgfQotICAgIH0KLQogICAgIHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQgPSBhZG9wdENG
KF9DRk5ldHdvcmtDb3B5QVRTQ29udGV4dCgpKTsKIAogICAgIHBhcmFtZXRlcnMuc2hvdWxkU3Vw
cHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpXZWJLaXRT
dXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlckRlZmF1bHRzS2V5XTsKQEAgLTUyMiwxMiArNTA1
LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKICAgICBOU051bWJlciAqZGF0YWJhc2VFbmFi
bGVkVmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VF
bmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogICAgIGlmIChkYXRhYmFzZUVu
YWJsZWRWYWx1ZSkKICAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9
IGRhdGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIHBhcmFt
ZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZl
cmVuY2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuZW5hYmxl
QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5
OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKV1dOwotCi0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tp
bmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9u
KCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQo
KQpAQCAtNjA2LDExICs1ODUsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzU3VwcHJl
c3Npb25FbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gIW1fdXNlck9ic2VydmFibGVQYWdlQ291
bnRlci52YWx1ZSgpICYmICFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50
ZXIudmFsdWUoKTsKIH0KIAotYm9vbCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKLXsKLSAgICBy
ZXR1cm4gV1RGOjpoYXNFbnRpdGxlbWVudChlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rp
b24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKLX0KLQog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKIGZsb2F0
IFdlYlByb2Nlc3NQb29sOjpkaXNwbGF5QnJpZ2h0bmVzcygpCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAKaW5kZXggYzVkZTRl
N2QwZjU5MTk0ZjQzYTAyM2IwODllMzcyYzU4Y2Y4ZWUwNi4uZjdjZmY4NTJmMGJhNmQwMTU1MTE2
NWRkOGE5ZjdkNTc2M2IwMDdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcApAQCAtNzUsOCArNzUsOCBAQCB2b2lkIERvd25s
b2FkUHJveHk6OmNhbmNlbCgpCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MgPSBtX3By
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCks
IDApOworICAgIGlmIChtX2RhdGFTdG9yZSkKKyAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQ
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1f
ZG93bmxvYWRJRCksIDApOwogfQogCiB2b2lkIERvd25sb2FkUHJveHk6OmludmFsaWRhdGUoKQpA
QCAtMTAzLDE1ICsxMDMsMTMgQEAgV2ViUGFnZVByb3h5KiBEb3dubG9hZFByb3h5OjpvcmlnaW5h
dGluZ1BhZ2UoKSBjb25zdAogI2lmIFBMQVRGT1JNKENPQ09BKQogdm9pZCBEb3dubG9hZFByb3h5
OjpwdWJsaXNoUHJvZ3Jlc3MoY29uc3QgVVJMJiBVUkwpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQ
b29sKQorICAgIGlmICghbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgYm9vbCBj
cmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShV
UkwuZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBo
YW5kbGUpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBj
cmVhdGVkU2FuZGJveEV4dGVuc2lvbik7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9h
ZElELCBVUkwsIGhhbmRsZSksIDApOwotICAgIH0KKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUgaGFuZGxlOworICAgIGJvb2wgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNp
b246OlR5cGU6OlJlYWRXcml0ZSwgaGFuZGxlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRT
YW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbik7CisgICAgbV9kYXRhU3Rv
cmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxp
c2hEb3dubG9hZFByb2dyZXNzKG1fZG93bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKIH0KICNl
bmRpZiAvLyBQTEFURk9STShDT0NPQSkKIApAQCAtMTMxLDExICsxMjksMTAgQEAgdm9pZCBEb3du
bG9hZFByb3h5OjpkaWRTdGFydChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFN0cmluZyYgc3VnZ2UKIAogdm9pZCBEb3dubG9hZFByb3h5OjpkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSwgdWludDY0X3QgY2hhbGxlbmdlSUQpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29s
KQorICAgIGlmICghbV9wcm9jZXNzUG9vbCB8fCAhbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlUHJveHk6OmNyZWF0ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KSwgY2hhbGxlbmdlSUQsIG1ha2VSZWYoKm1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtpbmdQcm9jZXNz
Q29ubmVjdGlvbigpKSwgbnVsbHB0cik7Ci0KKyAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlUHJveHkgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShh
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX2RhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCkpLCBudWxscHRyKTsKICAgICBtX3Byb2Nl
c3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSgqdGhpcywgYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5nZXQoKSk7CiB9CiAKQEAgLTE0
NiwxNSArMTQzLDEwIEBAIHZvaWQgRG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291
cmNlUmVxdWVzdCYmIHByb3Bvc2VkUmVxdWVzdCwgY29uc3QgUmVzCiAKICAgICBtX3Byb2Nlc3NQ
b29sLT5kb3dubG9hZENsaWVudCgpLndpbGxTZW5kUmVxdWVzdCgqdGhpcywgV1RGTW92ZShwcm9w
b3NlZFJlcXVlc3QpLCByZWRpcmVjdFJlc3BvbnNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpXShSZXNvdXJjZVJlcXVlc3QmJiBuZXdSZXF1ZXN0KSB7CiAgICAgICAgIG1f
cmVkaXJlY3RDaGFpbi5hcHBlbmQobmV3UmVxdWVzdC51cmwoKSk7Ci0KLSAgICAgICAgaWYgKCFw
cm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sKQorICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMt
Pm1fZGF0YVN0b3JlKQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8qIG5ldHdv
cmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpOwotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzUHJveHkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3NQcm94eS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93
bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOworICAgICAgICBhdXRvJiBuZXR3b3JrUHJvY2Vzc1By
b3h5ID0gcHJvdGVjdGVkVGhpcy0+bV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCk7CisgICAg
ICAgIG5ldHdvcmtQcm9jZXNzUHJveHkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNv
bnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVx
dWVzdCksIDApOwogICAgIH0pOwogfQogCkBAIC0xNzksMTYgKzE3MSwxNCBAQCB2b2lkIERvd25s
b2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMoRG93
bmxvYWRJRCBkb3dubAogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzYW5p
dGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKSwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxvYWRJRCA9IGRvd25sb2FkSURdIChBbGxvd092
ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CisgICAgbV9wcm9j
ZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRG
aWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmls
ZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBkb3dubG9hZElEXSAoQWxsb3dPdmVyd3JpdGUgYWxsb3dPdmVyd3JpdGUsIFN0cmlu
ZyBkZXN0aW5hdGlvbikgewogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZTsKICAgICAgICAgaWYgKCFkZXN0aW5hdGlvbi5pc051bGwoKSkKICAg
ICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShkZXN0aW5hdGlvbiwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsK
IAotICAgICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgICAgIGlmICghbV9kYXRhU3RvcmUp
CiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5k
aW5nRG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4
dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDAp
OworICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihk
b3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVy
d3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDApOwogICAgIH0pOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5j
cHAKaW5kZXggNzZhMDcxNTdiNTkxYWFjZTUwZjE1ZDE1MjVkYmNmYjhjNmE0YmJjOC4uZDc0YThm
YTZjNjRjODg2MzVmOWViNzVjYTczZTcwZmQ5NDZjYTAyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcApAQCAtNDQs
NyArNDQsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIERvd25sb2FkUHJveHlNYXA6OkRvd25s
b2FkUHJveHlNYXAoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJvY2VzcykKLSAgICA6IG1fcHJvY2Vz
cyhtYWtlV2Vha1B0cihwcm9jZXNzKSkKKyAgICA6IG1fcHJvY2Vzcyhwcm9jZXNzKQogI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgICwgbV9zaG91bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJvY2Vzc0hh
c0VudGl0bGVtZW50KCJjb20uYXBwbGUubXVsdGl0YXNraW5nLnN5c3RlbWFwcGFzc2VydGlvbnMi
KSkKICNlbmRpZgpAQCAtNzAsMTQgKzcwLDEyIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxh
dGZvcm1EZXN0cm95KCkKIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVu
dGVyQmFja2dyb3VuZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tn
cm91bmQoKSwgMCk7CisgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpBcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9h
ZFByb3h5TWFwOjphcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKQogewotICAgIGlmICht
X3Byb2Nlc3MpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Mu
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdy
b3VuZCgpLCAwKTsKIH0KIAogRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRl
RG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29s
JiBwcm9jZXNzUG9vbCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJl
cXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmln
aW5hdGluZ1BhZ2UpCkBAIC05MiwxMyArOTAsMTIgQEAgRG93bmxvYWRQcm94eSYgRG93bmxvYWRQ
cm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUK
ICAgICAgICAgbV9kb3dubG9hZFVJQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0
aW9uPihnZXRDdXJyZW50UHJvY2Vzc0lEKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNz
QXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CiAKICAgICAgICAgQVNTRVJUKCFt
X2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
cHJvY2Vzcyk7Ci0gICAgICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVu
aXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCksICJX
ZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29y
a2luZyk7CisgICAgICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1
ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3Byb2Nlc3MucHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktp
dCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5n
KTsKIAogICAgICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyB0
b29rICdXZWJLaXQgZG93bmxvYWRzJyBhc3NlcnRpb25zIGZvciBVSVByb2Nlc3MgYW5kIE5ldHdv
cmtQcm9jZXNzIik7CiAgICAgfQogCi0gICAgbV9wcm9jZXNzLT5hZGRNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRQ
cm94eS0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSwgZG93bmxvYWRQcm94eS5nZXQoKSk7Cisg
ICAgbV9wcm9jZXNzLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxv
YWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsKIAogICAgIHJldHVybiBkb3dubG9hZFByb3h5
OwogfQpAQCAtMTA5LDEyICsxMDYsOSBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmRvd25sb2Fk
RmluaXNoZWQoRG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSkKIAogICAgIFJFTEVBU0VfTE9H
KExvYWRpbmcsICJSZW1vdmluZyBkb3dubG9hZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBE
b3dubG9hZFByb3h5TWFwIiwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhl
IERvd25sb2FkUHJveHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBw
cm9jZXNzIHBvb2wuCi0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIo
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsKLQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250
YWlucyhkb3dubG9hZElEKSk7CiAKLSAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9h
ZElELmRvd25sb2FkSUQoKSk7CisgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElE
LmRvd25sb2FkSUQoKSk7CiAgICAgZG93bmxvYWRQcm94eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9k
b3dubG9hZHMucmVtb3ZlKGRvd25sb2FkSUQpOwogCkBAIC0xMzMsMTUgKzEyNywxMyBAQCB2b2lk
IERvd25sb2FkUHJveHlNYXA6OmludmFsaWRhdGUoKQogICAgIGZvciAoY29uc3QgYXV0byYgZG93
bmxvYWQgOiBtX2Rvd25sb2Fkcy52YWx1ZXMoKSkgewogICAgICAgICBkb3dubG9hZC0+cHJvY2Vz
c0RpZENsb3NlKCk7CiAgICAgICAgIGRvd25sb2FkLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1f
cHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgp
KTsKKyAgICAgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93
bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgp
LmRvd25sb2FkSUQoKSk7CiAgICAgfQogCiAgICAgbV9kb3dubG9hZHMuY2xlYXIoKTsKICAgICBt
X2Rvd25sb2FkVUlBc3NlcnRpb24gPSBudWxscHRyOwogICAgIG1fZG93bmxvYWROZXR3b3JraW5n
QXNzZXJ0aW9uID0gbnVsbHB0cjsKICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwg
IlVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIGludmFsaWRhdGVkIC0gUmVsZWFzZWQgJ1dlYktp
dCBkb3dubG9hZHMnIGFzc2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3Mi
KTsKLQotICAgIG1fcHJvY2VzcyA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
UHJveHlNYXAuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFBy
b3h5TWFwLmgKaW5kZXggM2JlMjA3OWEwZjJjNGI1MzcwNjJjZTEzMDBlMWNkNWRhNDQ0ZmZiZS4u
NGZhMDAxYmQ3ZmFlMWNlZDAyNGQyYjkxZjIwMTcwZmY5OTQ1MjhiZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCkBAIC03
MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZSgpOwogICAgIHZv
aWQgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+
IG1fcHJvY2VzczsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBtX3Byb2Nlc3M7CiAgICAgSGFz
aE1hcDxEb3dubG9hZElELCBSZWZQdHI8RG93bmxvYWRQcm94eT4+IG1fZG93bmxvYWRzOwogCiAg
ICAgYm9vbCBtX3Nob3VsZFRha2VBc3NlcnRpb24geyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCmlu
ZGV4IDhjMjNiYmU4YzA2YTE1OTljYjliOTE2YTBiMzJhZmIzNzc4M2YzMDUuLmQ2YzMzMjNkZDkz
ZTY5ZjU2YWRmNmJlMGQyYTFiMTRmMDgyMjQ1MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3Rv
bVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKQEAgLTQ0LDE3
ICs0NCwxNyBAQCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6fkxlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5KCkKIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6c3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9j
b2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1f
bmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7Cisg
ICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0
YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3Rv
bVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJv
eHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGlu
ZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90
b2NvbElEKTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52
YWxpZGF0ZSgpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuaW52YWxpZGF0ZSgqdGhpcyk7CisgICAgbV9uZXR3
b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUo
KnRoaXMpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3YXNS
ZWRpcmVjdGVkVG9SZXF1ZXN0KExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJ
RCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXgg
YzFmNDcwOGI4MWNmYTUzYWIxMjJjMjk0NDY3NWU3ODI1MTY3MTIxZi4uZjNkYjUxNTE5ZDZjYmI0
YWJlN2JmYTFlMjEwY2NiODc5MzMxNzMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogCiAjaW5jbHVkZSAiQVBJQ29u
dGVudFJ1bGVMaXN0LmgiCisjaW5jbHVkZSAiQVBJQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
LmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIgogI2luY2x1ZGUg
IkF1dGhlbnRpY2F0aW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHlNYXAuaCIK
QEAgLTM1LDYgKzM2LDcgQEAKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVz
c2FnZXMuaCIKICNlbmRpZgorI2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2Vy
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBA
IC00OCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgi
CiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVk
Q29udGVudFJ1bGVMaXN0LmgiCisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAj
aW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAj
aW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCkBAIC02MCw2ICs2Myw3IEBACiAjaW5jbHVk
ZSAiV2Vic2l0ZURhdGFTdG9yZUNsaWVudC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3Jp
Z2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2luY2x1ZGUg
PHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRs
ZXIuaD4KIAogI2lmIEVOQUJMRShTRUNfSVRFTV9TSElNKQpAQCAtNzAsMjAgKzc0LDExOCBAQAog
I2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIK
KyNlbmRpZgorCiAjZGVmaW5lIE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNL
X0JBU0UoYXNzZXJ0aW9uLCBjb25uZWN0aW9uKCkpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLU5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9j
ZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5KHByb2Nlc3NQb29sLmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQot
ICAgICwgbV9wcm9jZXNzUG9vbChwcm9jZXNzUG9vbCkKK3N0YXRpYyBIYXNoU2V0PE5ldHdvcmtQ
cm9jZXNzUHJveHkqPiYgbmV0d29ya1Byb2Nlc3Nlc1NldCgpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0
PE5ldHdvcmtQcm9jZXNzUHJveHkqPj4gc2V0OworICAgIHJldHVybiBzZXQ7Cit9CisKK1ZlY3Rv
cjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdv
cmtQcm9jZXNzZXMoKQoreworICAgIFZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHBy
b2Nlc3NlczsKKyAgICBwcm9jZXNzZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXR3b3JrUHJv
Y2Vzc2VzU2V0KCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIG5ldHdvcmtQcm9jZXNzIDogbmV0
d29ya1Byb2Nlc3Nlc1NldCgpKQorICAgICAgICBwcm9jZXNzZXMudW5jaGVja2VkQXBwZW5kKCpu
ZXR3b3JrUHJvY2Vzcyk7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKworUmVmPE5ldHdvcmtQ
cm9jZXNzUHJveHk+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHROZXR3b3JrUHJvY2Vzcygp
Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5
Pj4gcHJvY2VzczsKKyAgICBpZiAoIXByb2Nlc3MuZ2V0KCkpCisgICAgICAgIHByb2Nlc3MuZ2V0
KCkgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gKnByb2Nlc3Mu
Z2V0KCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKCkKK3sKKyAg
ICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpOworfQorCit2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKQoreworICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRl
bXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4g
dGhyZWFkcy4KKyAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRo
cmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCisgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KKyAgICBpZiAoIVJ1bkxvb3A6Omlz
TWFpbigpKSB7CisgICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpc10geworICAg
ICAgICAgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgICAgICB9
KTsKKyAgICB9CisKKyAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0
ZXJzOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlU
b1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0
ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBh
c3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0
dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2Vj
dXJpdHlQb2xpY3koKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9j
YWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVt
ZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3Rl
cmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xl
dG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOworICAgIHBhcmFtZXRlcnMuY2Fj
aGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7
CisgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhD
dXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCisgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1Jl
Z2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7CisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKyAgICBpZiAoU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQ
cm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURpcmVj
dG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZv
clJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNv
b2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgY29u
dGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNE
aXJlY3RvcnkoKTsgIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250
YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9
IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsgIXBhcmVudEJ1bmRsZURp
cmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5
LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisjZW5k
aWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3Mo
cGFyYW1ldGVycyk7CisgICAgcGFyYW1ldGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gZGF0YVN0
b3JlUGFyYW1ldGVycygpOworICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyksIDApOworfQorCitWZWN0b3I8V2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRhdGFTdG9yZVBhcmFt
ZXRlcnMoKQoreworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1l
dGVyczsKKyAgICBmb3IgKGF1dG8mIHN0b3JlIDogbV93ZWJzaXRlRGF0YVN0b3JlcykKKyAgICAg
ICAgcGFyYW1ldGVycy5hcHBlbmQoc3RvcmUucGFyYW1ldGVycygpKTsKKyAgICByZXR1cm4gcGFy
YW1ldGVyczsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNr
Z3JvdW5kUHJpb3JpdHkoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9j
ZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5h
bHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQ
b29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpCit7CisgICAgZm9yIChhdXRvKiBw
cm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAg
ICBpZiAocHJvY2Vzc1Bvb2wtPnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK05l
dHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoKQorICAgIDogQXV4aWxpYXJ5
UHJvY2Vzc1Byb3h5KGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5
KCkpCiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKKyAgICAsIG1f
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWVSZWY8TGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94
eSgqdGhpcykKKyNlbHNlCisgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtl
VW5pcXVlUmVmPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogI2VuZGlmCi0g
ICAgLCBtX3Rocm90dGxlcigqdGhpcywgcHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJQmFja2dyb3Vu
ZEFzc2VydGlvbigpKQorICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIGFueVByb2Nlc3NQb29sU2hv
dWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV9jb29raWVNYW5hZ2VyKFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzKSkKIHsKICAgICBjb25uZWN0KCk7Cisg
ICAgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgIG5ldHdvcmtQcm9j
ZXNzZXNTZXQoKS5hZGQodGhpcyk7CiB9CiAKIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3Jr
UHJvY2Vzc1Byb3h5KCkKQEAgLTk4LDYgKzIwMCw3IEBAIE5ldHdvcmtQcm9jZXNzUHJveHk6On5O
ZXR3b3JrUHJvY2Vzc1Byb3h5KCkKIAogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAg
ICAgIG1fZG93bmxvYWRQcm94eU1hcC0+aW52YWxpZGF0ZSgpOworICAgIG5ldHdvcmtQcm9jZXNz
ZXNTZXQoKS5yZW1vdmUodGhpcyk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0
TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlv
bnMpCkBAIC0xMDUsMTUgKzIwOCwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExh
dW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuYwogICAgIGxh
dW5jaE9wdGlvbnMucHJvY2Vzc1R5cGUgPSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpO
ZXR3b3JrOwogICAgIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVu
Y2hPcHRpb25zKTsKIAotICAgIGlmIChwcm9jZXNzUG9vbCgpLnNob3VsZE1ha2VOZXh0TmV0d29y
a1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sKCku
c2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNl
KTsKLSAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JU
ZXN0aW5nID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bv
b2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxk
TWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKKyAgICAgICAg
ICAgIHByb2Nlc3NQb29sLT5zZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFp
bEZvclRlc3RpbmcoZmFsc2UpOworICAgICAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtl
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KLQot
I2lmIFBMQVRGT1JNKFBMQVlTVEFUSU9OKQotICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1BhdGgg
PSBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzUGF0aCgpOwotICAgIGxhdW5jaE9wdGlvbnMu
dXNlcklkID0gbV9wcm9jZXNzUG9vbC51c2VySWQoKTsKLSNlbmRpZgogfQogCiB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24pCkBAIC0xNjYsMTIgKzI2NiwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnN5
bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQogICAgIH0KIH0KIAotRG93
bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJz
aXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VS
ZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3Jp
Z2luYXRpbmdQYWdlKQorRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRl
RG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29s
JiBwcm9jZXNzUG9vbCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNv
bnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1Bh
Z2UpCiB7CiAgICAgaWYgKCFtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQ
cm94eU1hcCA9IG1ha2VVbmlxdWU8RG93bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0
dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1f
cHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2Up
OworICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0
YVN0b3JlLCBwcm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0
aW5nUGFnZSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZmV0Y2hXZWJzaXRlRGF0
YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRh
dGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCAoV2Vic2l0ZURhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMjM3LDggKzMzNyw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKCkKIHsKICAgICBjbGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKLSAgICAvLyBU
ZWxsIHRoZSBuZXR3b3JrIHByb2Nlc3MgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgdGhpcyBuZXR3
b3JrIHByb2Nlc3MgcHJveHkuIFRoaXMgd2lsbCBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgotICAg
IG1fcHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKKyAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAg
ICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKIH0KIAogdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjbGVhckNhbGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICsz
NTgsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZQogICAgIGlmIChkaXNwYXRjaE1lc3NhZ2Uo
Y29ubmVjdGlvbiwgZGVjb2RlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Byb2Nl
c3NQb29sLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIpOwogfQogCkBAIC0yNzQsOCArMzcxLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBJUEMKIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rp
b24mKQogewotICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmKG1fcHJvY2Vz
c1Bvb2wpOwotCiAgICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9h
ZFByb3h5TWFwLT5pbnZhbGlkYXRlKCk7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9D
T0xfTUFOQUdFUikKQEAgLTMzMSwxMSArNDI2LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2kK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nl
c3NQb29sLmlzU2VydmljZVdvcmtlclBhZ2VJRChwYWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZShzZXNzaW9uSUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6
Zm9yTW9zdFZpc2libGVXZWJQYWdlSWZBbnkoc2Vzc2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywg
d2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSA9IFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVn
YWN5VExTXShhdXRvKiBwYWdlKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTM5MiwxMSArNDgyLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBD
OjpDb24KICAgICAgICAgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5wcm9j
ZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpCi0gICAgICAgIHNldFByb2Nlc3NTdXBwcmVzc2lvbkVu
YWJsZWQodHJ1ZSk7Ci0jZW5kaWYKICAgICAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAg
IGlmICh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24gPSB0aGlzLT5jb25uZWN0aW9uKCktPnhw
Y0Nvbm5lY3Rpb24oKSkKQEAgLTEyMDUsNyArMTI5MCw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBz
ZXNzCiB9CiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVy
YWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsK
LSAgICBwcm9jZXNzUG9vbCgpLnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKFdURk1vdmUo
ZG9tYWlucykpOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6
YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5zZXREb21haW5zV2l0aFVz
ZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiB7IGRvbWFp
bnMgfSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIApA
QCAtMTI1Miw0NSArMTMzOCwzMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZsdXNoQ29v
a2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21wbGV0aQogICAgIHNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkZsdXNoQ29va2llcyhzZXNz
aW9uSUQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3Zv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9y
ZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMuYWRkKHN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgbV93
ZWJzaXRlRGF0YVN0b3Jlcy5hZGQoc3RvcmUpOwogCiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkp
Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0
b3JlIHsgc3RvcmUtPnBhcmFtZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0
b3JlLT5zZXNzaW9uSUQoKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCk7CisgICAgYXV0
byBzZXNzaW9uSUQgPSBzdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAoIXNlc3Npb25JRC5pc0Vw
aGVtZXJhbCgpKSB7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0
ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnkoKSk7CisgICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNv
bHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgogICAgIH0KIH0KIAotYm9v
bCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zZXNzaW9uSURzLmNvbnRhaW5zKHNlc3Npb25JRCk7
Ci19Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24o
V2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMu
cmVtb3ZlKHNlc3Npb25JRCk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5yZW1vdmUod2Vic2l0
ZURhdGFTdG9yZSk7CiAKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRlc3Ryb3lTZXNzaW9uIHsgc2Vzc2lvbklEIH0sIDAp
OworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24g
eyB3ZWJzaXRlRGF0YVN0b3JlLnNlc3Npb25JRCgpIH0sIDApOwogfQogCiBXZWJzaXRlRGF0YVN0
b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJz
aXRlRGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAg
ICAgICBpZiAod2Vic2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSA9PSBzZXNzaW9uSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpLnB0cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhp
c3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0
dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Np
b25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3Jh
Z2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEzMzcsNyArMTQwOSw3
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5KFdlYlVzZXJDb250ZW50CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQog
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlv
blRvTmV0d29ya1Byb2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwg
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC5lc3RhYmxpc2hXb3JrZXJDb250
ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVE
b21haW4pLCBzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBXZWJQ
cm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzKCp0aGlzLCBSZWdpc3RyYWJsZURvbWFpbiB7cmVnaXN0cmFibGVEb21haW59LCBzZXNzaW9u
SUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5Ojp3b3JrZXJDb250ZXh0Q29ubmVjdGlvbk5vTG9uZ2VyTmVlZGVkKFdlYkNvcmU6OlBy
b2Nlc3NJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC0xNTAwLDE2ICsxNTcyLDM0IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6cHJlY29ubmVjdFRvKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgV2ViUGFnZVByb3h5SWRlCiAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlBy
ZWNvbm5lY3RUbyhzZXNzaW9uSUQsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQsIHVybCwgdXNl
ckFnZW50LCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpbiksIDApOwogfQogCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRX
ZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNG
b3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0Jh
Y2tncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBX
ZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQ
b29sLT5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKQogewotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhh
c0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0Zv
cmVncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6
OmlzVmFsaWRGb3JlZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7
CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmZv
cmVncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgZm9yZWdyb3VuZCB2aWV3KHMpIl9zKTsK
ICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJh
bnNpdGlvblRvRm9yZWdyb3VuZCgpLCAwKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkg
eworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgewog
ICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRCYWNrZ3JvdW5kQWN0aXZpdHko
bV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJv
bVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiTmV0d29ya2lu
ZyBmb3IgYmFja2dyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvQmFja2dyb3VuZCgpLCAwKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmgKaW5kZXggYTBiNGMxZDg5MzhlMjA1ZWMzNjFkZTVjMTA4MjVkMTgyNzc2NTNiNC4u
OTdhZTVhOTlmNWU2NTIwZTE2ZTQyZGM3ZjQ4YjczOWM3MzRiYzVmMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAg
LTUyLDYgKzUyLDEwIEBAIG5hbWVzcGFjZSBJUEMgewogY2xhc3MgRm9ybURhdGFSZWZlcmVuY2U7
CiB9CiAKK25hbWVzcGFjZSBBUEkgeworY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
OworfQorCiBuYW1lc3BhY2UgUEFMIHsKIGNsYXNzIFNlc3Npb25JRDsKIH0KQEAgLTczLDggKzc3
LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERvd25sb2FkUHJveHk7CiBjbGFzcyBE
b3dubG9hZFByb3h5TWFwOworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5OwogY2xhc3MgV2Vi
UGFnZVByb3h5OwotY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eTsKIAogZW51bSBjbGFzcyBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mg
OiBib29sOwpAQCAtODYsOCArOTAsOSBAQCBzdHJ1Y3QgRnJhbWVJbmZvRGF0YTsKIHN0cnVjdCBO
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBSZXNvdXJjZUxvYWRJbmZv
Owogc3RydWN0IFdlYnNpdGVEYXRhOworc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
OwogCi1jbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVBy
b2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFr
ZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4geworY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94
eSBmaW5hbCA6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHByaXZhdGUgUHJvY2Vzc1Ro
cm90dGxlckNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+
LCBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgdXNpbmcgUmVnaXN0cmFibGVEb21haW4gPSBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKQEAgLTEwMiwxMiArMTA3LDE3IEBAIHB1YmxpYzoK
ICAgICB1c2luZyBEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPSBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbjsKICAgICB1c2luZyBPcGVuZXJEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbjsKIAotICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bv
b2wmKTsKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IGRlZmF1bHROZXR3b3Jr
UHJvY2VzcygpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gY3JlYXRlKCkg
eyByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrUHJvY2Vzc1Byb3h5KTsgfQogICAgIH5OZXR3
b3JrUHJvY2Vzc1Byb3h5KCk7CiAKKyAgICBzdGF0aWMgVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vz
c1Byb3h5Pj4gYWxsTmV0d29ya1Byb2Nlc3NlcygpOworICAgIAorICAgIHZvaWQgdGVybWluYXRl
KCkgZmluYWw7CisKICAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9j
ZXNzUHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb25EZWxheWVkUmVwbHkmJik7CiAKLSAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3du
bG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2Up
OworICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9y
ZSYsIFdlYlByb2Nlc3NQb29sJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29u
c3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsKIAogICAg
IHZvaWQgZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChXZWJzaXRlRGF0YSk+JiYpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEo
UEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSBtb2Rp
ZmllZFNpbmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
OwpAQCAtMjA2LDE1ICsyMTYsMTIgQEAgcHVibGljOgogICAgIFByb2Nlc3NUaHJvdHRsZXImIHRo
cm90dGxlcigpIGZpbmFsIHsgcmV0dXJuIG1fdGhyb3R0bGVyOyB9CiAgICAgdm9pZCB1cGRhdGVQ
cm9jZXNzQXNzZXJ0aW9uKCk7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2woKSB7
IHJldHVybiBtX3Byb2Nlc3NQb29sOyB9Ci0KICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQogICAgIHZvaWQgZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgYWRkU2Vzc2lv
bihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJik7Ci0gICAgYm9vbCBoYXNTZXNzaW9uKFBBTDo6U2Vz
c2lvbklEKSBjb25zdDsKLSAgICB2b2lkIHJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQpOwor
ICAgIHZvaWQgYWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CisgICAgdm9pZCByZW1vdmVT
ZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmKTsKICAgICAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKICAgICB2b2lkIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShjb25zdCBTdHJpbmcm
IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7CkBAIC0yMjksNiArMjM2LDggQEAgcHVibGljOgog
ICAgIHZvaWQgcmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJp
bmcmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChj
b25zdCBTdHJpbmcmKTsKIAorICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CisgICAg
CiAgICAgdm9pZCByZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwogCiAgICAgdm9pZCByZXNvdXJjZUxvYWREaWRTZW5kUmVxdWVzdChXZWJQYWdl
UHJveHlJZGVudGlmaWVyLCBSZXNvdXJjZUxvYWRJbmZvJiYsIFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYmLCBPcHRpb25hbDxJUEM6OkZvcm1EYXRhUmVmZXJlbmNlPiYmKTsKQEAgLTI0OCw3ICsy
NTcsMTYgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlQnVuZGxlSWRlbnRpZmllcihjb25zdCBT
dHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJCdW5k
bGVJZGVudGlmaWVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBXZWJDb29r
aWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIoKSB7IHJldHVybiBtX2Nvb2tpZU1hbmFnZXIu
Z2V0KCk7IH0KKworICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBjdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQoKSB7IHJldHVybiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudC5nZXQoKTsgfQorCiBwcml2YXRlOgorICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9jZXNzUHJv
eHkoKTsKKworICAgIHZvaWQgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOwor
ICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGF0YVN0b3JlUGFyYW1ldGVy
cygpOworCiAgICAgLy8gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5CiAgICAgQVNDSUlMaXRlcmFsIHBy
b2Nlc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIk5ldHdvcmtpbmciX3M7IH0KIApAQCAt
MjU2LDcgKzI3NCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb25uZWN0aW9uV2lsbE9wZW4oSVBD
OjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwcm9jZXNzV2lsbFNodXREb3duKElQ
Qzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNo
ZWQoKTsKICAgICB2b2lkIGNsZWFyQ2FsbGJhY2tTdGF0ZXMoKTsKIAogICAgIC8vIElQQzo6Q29u
bmVjdGlvbjo6Q2xpZW50CkBAIC0zMTIsMTYgKzMyOSwxNyBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQsIFJlZjxBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiYmKTsKIAotICAgIFdlYlByb2Nlc3NQb29sJiBtX3By
b2Nlc3NQb29sOwotCiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFdlYnNpdGVEYXRhKT4+IG1fcGVuZGluZ0ZldGNoV2Vic2l0ZURhdGFDYWxsYmFja3M7CiAg
ICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+PiBtX3BlbmRp
bmdEZWxldGVXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhRm9yT3Jp
Z2luc0NhbGxiYWNrczsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEb3dubG9hZFByb3h5TWFwPiBt
X2Rvd25sb2FkUHJveHlNYXA7CisKKyAgICBVbmlxdWVSZWY8QVBJOjpDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogI2lmIEVOQUJMRShM
RUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCiAgICAgTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHkgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTsKICNlbmRpZgorCiAgICAg
UHJvY2Vzc1Rocm90dGxlciBtX3Rocm90dGxlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJvY2Vz
c1Rocm90dGxlcjo6QmFja2dyb3VuZEFjdGl2aXR5PiBtX2FjdGl2aXR5Rm9ySG9sZGluZ0xvY2tl
ZEZpbGVzOwogICAgIFByb2Nlc3NUaHJvdHRsZXI6OkFjdGl2aXR5VmFyaWFudCBtX2FjdGl2aXR5
RnJvbVdlYlByb2Nlc3NlczsKQEAgLTM0OSw3ICszNjcsOCBAQCBwcml2YXRlOgogICAgIH07CiAj
ZW5kaWYKIAotICAgIEhhc2hTZXQ8UEFMOjpTZXNzaW9uSUQ+IG1fc2Vzc2lvbklEczsKKyAgICBX
ZWFrSGFzaFNldDxXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmVzOworICAgIFJl
ZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IG1fY29va2llTWFuYWdlcjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQppbmRleCBiOGRhZWRmN2JlYmExY2Q4
MWY2ZTUyNDQ5NjAzMTBmMTMzMTBjMTFlLi44MmMxMGU0MWQ1NjI1ZGJhYWRmOTEzYjk0ODA0NDdj
NzBjYzE5ZDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05l
dHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQpAQCAtNTEsOCArNTEsMTAgQEAgYm9v
bCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRsZXI6OmhhbmRsZVhQQ0V2ZW50KHhw
Y19vYmplY3RfdCBldmVudCkgY28KICAgICBpZiAobWVzc2FnZU5hbWUuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2Vydmlj
ZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBv
aW50TWVzc2FnZU5hbWUpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NQb29sKCku
c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoZXZlbnQpOworICAgIGlm
IChtZXNzYWdlTmFtZSA9PSBMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDQ29uc3RhbnRzOjp4cGNM
YXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDRW5kcG9pbnRNZXNzYWdlTmFtZSkgeworICAgICAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygp
KQorICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50
VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCmluZGV4
IGNjNTI2YWFmM2FhZmIxYzE0NmRhNGIyNDE5NDU5YjEwOTIwMWI2MTAuLjA4NWU3ZDI2NWExMzcz
NWJlN2ExMjc4ZWMxZGZiNjNmZDVkZDVkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1
ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRl
ICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94
eS5oIgogI2luY2x1ZGUgIk9wdGlvbmFsQ2FsbGJhY2tJRC5oIgogI2luY2x1ZGUgIldlYkNvb2tp
ZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eU1lc3Nh
Z2VzLmgiCkBAIC0zOSwyNCArNDAsMTYgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKLWNvbnN0IGNoYXIqIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3Vw
cGxlbWVudE5hbWUoKQorV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJv
eHkoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MpCisgICAgOiBtX25ldHdvcmtQ
cm9jZXNzKG1ha2VXZWFrUHRyKG5ldHdvcmtQcm9jZXNzKSkKIHsKLSAgICByZXR1cm4gIldlYkNv
b2tpZU1hbmFnZXJQcm94eSI7Ci19Ci0KLVJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKLXsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb29raWVNYW5hZ2VyUHJveHkocHJvY2Vzc1Bv
b2wpKTsKLX0KLQotV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHko
V2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQotICAgIDogV2ViQ29udGV4dFN1cHBsZW1lbnQo
cHJvY2Vzc1Bvb2wpCi17Ci0gICAgV2ViQ29udGV4dFN1cHBsZW1lbnQ6OnByb2Nlc3NQb29sKCkt
PmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKKyAgICBuZXR3b3JrUHJvY2Vzcy5hZGRNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCAqdGhpcyk7CiB9CiAKIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6fldlYkNvb2tpZU1h
bmFnZXJQcm94eSgpCiB7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFu
YWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpOwogICAgIEFTU0VSVChtX2Nvb2tpZU9i
c2VydmVycy5pc0VtcHR5KCkpOwogfQogCkBAIC02NSwxMDIgKzU4LDg0IEBAIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5Ojppbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNs
aWVudEJhc2UqIGNsCiAgICAgbV9jbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOwogfQogCi0vLyBX
ZWJDb250ZXh0U3VwcGxlbWVudAotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vz
c1Bvb2xEZXN0cm95ZWQoKQotewotICAgIFZlY3RvcjxPYnNlcnZlcio+IG9ic2VydmVyczsKLSAg
ICBmb3IgKGF1dG8mIG9ic2VydmVyU2V0IDogbV9jb29raWVPYnNlcnZlcnMudmFsdWVzKCkpIHsK
LSAgICAgICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVyU2V0KQotICAgICAgICAgICAg
b2JzZXJ2ZXJzLmFwcGVuZChvYnNlcnZlcik7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvKiBvYnNl
cnZlciA6IG9ic2VydmVycykKLSAgICAgICAgb2JzZXJ2ZXItPm1hbmFnZXJEZXN0cm95ZWQoKTsK
LQotICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVycy5pc0VtcHR5KCkpOwotfQotCi12b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94eSopCi17
Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xvc2UoTmV0d29y
a1Byb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZX
ZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OnJlZigpOwotfQotCi12
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17
Ci0gICAgQVBJOjpPYmplY3Q6OmRlcmVmKCk7Ci19Ci0KIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYgY2FsbGJhY2tGdW5jdGlv
bikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhzZXNzaW9u
SUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhzZXNzaW9uSUQpLCBX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVu
Y3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tp
ZXNGb3JIb3N0bmFtZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgaG9zdG5hbWVzKQogewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQ
cm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcykpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25J
RCwgaG9zdG5hbWVzKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxl
dGVBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9v
bCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbklEKSk7CisgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbklEKSwgMCk7
CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBjb25zdCBDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9j
ZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRl
Q29va2llKHNlc3Npb25JRCwgY29va2llKSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNh
bGxiYWNrRnVuY3Rpb24pXSgpIG11dGFibGUgeworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQor
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFdURk1vdmUo
Y2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigp
OwotICAgIH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29v
a2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1l
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBh
dXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJD
b29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShzZXNzaW9uSUQsIHRp
bWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShzZXNzaW9u
SUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAg
IGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNl
dENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8Q29va2llPiYg
Y29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7
Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3Jr
UHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llKHNlc3Npb25JRCwgY29va2llcyksIFdURk1v
dmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAog
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2llcywgY29uc3QgVVJMJiB1cmwsIGNv
bnN0IFVSTCYgbWFpbkRvY3VtZW50VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2Fs
bGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
KCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25J
RCwgY29va2llcywgdXJsLCBtYWluRG9jdW1lbnRVUkwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rp
b24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29r
aWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWluRG9jdW1lbnRVUkwpLCBXVEZNb3ZlKGNh
bGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsK
IH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEFsbENvb2tpZXMoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29raWU+JiYp
PiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29va2ll
cyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRBbGxDb29raWVzKHNlc3Npb25JRCksIFdU
Rk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5j
dGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0
byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
OwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFdURk1vdmUoY2FsbGJhY2tG
dW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6Okdl
dENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAg
ICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFy
dE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSk7CisgICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0K
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2Vz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9O
ZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9u
SUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZU9ic2Vy
dmVyQ2FsbGJhY2soUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXVEY6OkZ1bmN0aW9uPHZvaWQg
KCk+JiYgY2FsbGJhY2spCkBAIC0yMTEsMTggKzE4NiwxOCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6Y29va2llc0RpZENoYW5nZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAKIHZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6
U2Vzc2lvbklELCBIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0jaWYgVVNFKFNPVVApCi0gICAgcHJv
Y2Vzc1Bvb2woKS0+c2V0SW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsKLSNl
bmRpZgotCi0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVO
ZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xp
Y3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFdU
Rk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5j
dGlvbigpOwogfQogCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29v
a2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQordm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNh
bGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2Vw
dFBvbGljeSgpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHNlc3Np
b25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2Fs
bGJhY2tGdW5jdGlvbihIVFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVN
YW5hZ2VyUHJveHkuaAppbmRleCAwYmRmYzBkNGU0N2M0MzZmNTg1Y2YyOWMwOWQ1MWEyOWJjODEx
YTlkLi42ZjUxZjAzZTVjMGNhODk0MTIzMzQzNzdiNTU0M2Q4MjJjYzJmZWMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaApAQCAtNTYsMTEg
KzU2LDkgQEAgdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpBcnJheSo+IEFycmF5Q2FsbGJh
Y2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9s
aWN5PiBIVFRQQ29va2llQWNjZXB0UG9saWN5Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxs
YmFjazxjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiY+IEdldENvb2tpZXNDYWxsYmFjazsK
IAotY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxB
UEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHB1YmxpYyBXZWJDb250ZXh0U3VwcGxl
bWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitjbGFzcyBXZWJDb29raWVNYW5h
Z2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29r
aWVNYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7Ci0KLSAgICBzdGF0aWMgUmVmPFdl
YkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlByb2Nlc3NQb29sKik7CisgICAgc3RhdGlj
IFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IGNyZWF0ZShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBu
ZXR3b3JrUHJvY2VzcykgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb29raWVNYW5hZ2VyUHJv
eHkobmV0d29ya1Byb2Nlc3MpKTsgfQogICAgIHZpcnR1YWwgfldlYkNvb2tpZU1hbmFnZXJQcm94
eSgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNs
aWVudEJhc2UqKTsKQEAgLTEwNCwxNyArMTAyLDEwIEBAIHB1YmxpYzoKICAgICB1c2luZyBBUEk6
Ok9iamVjdDo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KFdl
YlByb2Nlc3NQb29sKik7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5KE5ldHdvcmtQcm9jZXNz
UHJveHkmKTsKIAogICAgIHZvaWQgY29va2llc0RpZENoYW5nZShQQUw6OlNlc3Npb25JRCk7CiAK
LSAgICAvLyBXZWJDb250ZXh0U3VwcGxlbWVudAotICAgIHZvaWQgcHJvY2Vzc1Bvb2xEZXN0cm95
ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkq
KSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShOZXR3b3JrUHJvY2Vzc1Byb3h5
Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRlOwotCiAgICAg
Ly8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwogCkBAIC0xMjUsNiArMTE2LDcg
QEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXVEY6OkZ1bmN0aW9uPHZv
aWQgKCk+PiBtX2xlZ2FjeUNvb2tpZU9ic2VydmVyczsKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lv
bklELCBIYXNoU2V0PE9ic2VydmVyKj4+IG1fY29va2llT2JzZXJ2ZXJzOwogCisgICAgV2Vha1B0
cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwogICAgIFdlYkNvb2tpZU1h
bmFnZXJQcm94eUNsaWVudCBtX2NsaWVudDsKIAogI2lmIFVTRShTT1VQKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggZDNiOGMzNTU0MGYzZjI0NTZmNzEwNTVm
NWI0ZDdhNzgyMjYwZDM4Ny4uNDljZWViMjI4OTJmMjQ1MTgxYTQ0ODA5NTlkYzgzNGExNWVmOGQ1
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0xNzQ2LDcg
KzE3NDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbihi
b29sIGNvbnRyb2xsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oY29udHJvbGxlZCkpOwotICAgIG1fcHJv
Y2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24obV93ZWJzaXRl
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9sbGVkQnlBdXRvbWF0aW9uKSk7CisgICAg
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24obV93ZWJzaXRlRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9sbGVkQnlBdXRvbWF0aW9uKSwgMCk7CiB9CiAK
IHZvaWQgV2ViUGFnZVByb3h5OjpjcmVhdGVJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0
YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCkBAIC0zMjEwLDEx
ICszMjEwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmlzRm9yY2VkSW50b0FwcEJvdW5kTW9kZVRl
c3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4KIHZvaWQgV2ViUGFnZVByb3h5Ojpk
aXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50SW5OZXR3b3JrUHJvY2VzcygpCiB7CiAjaWYg
RU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3Nh
Z2UoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50
KCksIDApOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxl
bWVudCgpLCAwKTsKICNlbmRpZgogfQogCkBAIC0zMjIzLDEzICszMjE5LDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpICYmICFQTEFURk9S
TShNQUNDQVRBTFlTVCkKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBzZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVt
ZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0g
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRl
KCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3Rv
cmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNl
bmRpZgpAQCAtNDQyOSw3ICs0NDE5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnByZWNvbm5lY3RU
byhjb25zdCBVUkwmIHVybCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBzdG9yZWRDcmVk
ZW50aWFsc1BvbGljeSA9IG1fY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UgPyBXZWJDb3JlOjpTdG9y
ZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlIDogV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xp
Y3k6OkRvTm90VXNlOwotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3Jr
UHJvY2VzcygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdl
SUQoKSwgdXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdh
dGluZ1RvQXBwQm91bmREb21haW4oKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQ
cm9jZXNzKCkucHJlY29ubmVjdFRvKHNlc3Npb25JRCgpLCBpZGVudGlmaWVyKCksIHdlYlBhZ2VJ
RCgpLCB1cmwsIHVzZXJBZ2VudCgpLCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0
aW5nVG9BcHBCb3VuZERvbWFpbigpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldENhblVz
ZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wgY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UpCkBAIC00NzI1
LDcgKzQ3MTUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKEZy
YW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUluZm9EYXRhJgogICAgICAgICAgICAgUmVnaXN0
cmFibGVEb21haW4gY3VycmVudERvbWFpbiB7IGN1cnJlbnRSZXF1ZXN0LnVybCgpIH07CiAgICAg
ICAgICAgICBVUkwgcmVxdWVzdGVyVVJMIHsgVVJMKCksIHJlcXVlc3Rlck9yaWdpbi50b1N0cmlu
ZygpIH07CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnREb21haW4ubWF0Y2hlcyhyZXF1ZXN0ZXJV
UkwpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5kaWRDb21taXRD
cm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9LCBjdXJyZW50RG9tYWluLCBu
YXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50aWZpZXIsIG1fd2ViUGFnZUlEKTsKKyAgICAg
ICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuZGlkQ29tbWl0
Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwgY3VycmVudERvbWFpbiwg
bmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dlYlBhZ2VJRCk7CiAgICAg
ICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTQ3NjMsNyArNDc1Myw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIEZyYW1l
SW5mb0RhdGEmCiAgICAgaWYgKG5hdmlnYXRpb24gJiYgZnJhbWUtPmlzTWFpbkZyYW1lKCkpIHsK
ICAgICAgICAgaWYgKGF1dG8mIGFkQ2xpY2tBdHRyaWJ1dGlvbiA9IG5hdmlnYXRpb24tPmFkQ2xp
Y2tBdHRyaWJ1dGlvbigpKSB7CiAgICAgICAgICAgICBpZiAoYWRDbGlja0F0dHJpYnV0aW9uLT5k
ZXN0aW5hdGlvbigpLm1hdGNoZXMoZnJhbWUtPnVybCgpKSkKLSAgICAgICAgICAgICAgICBtX3By
b2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTdG9yZUFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCAqYWRDbGlja0F0dHJpYnV0aW9uKSk7CisgICAgICAgICAgICAgICAgd2Vi
c2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlN0b3JlQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lv
bklEKCksICphZENsaWNrQXR0cmlidXRpb24pLCAwKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
NTM3Nyw3ICs1MzY3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmxvZ0ZyYW1lTmF2aWdhdGlvbihj
b25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgY29uc3QgVVJMJiBwYWcKICAgICBpZiAodGFyZ2V0
SG9zdC5pc0VtcHR5KCkgfHwgbWFpbkZyYW1lSG9zdC5pc0VtcHR5KCkgfHwgdGFyZ2V0SG9zdCA9
PSBzb3VyY2VVUkwuaG9zdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnBy
b2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwg
UmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBwYWdl
VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVkaXJlY3QsIGZyYW1l
LmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRGaW5pc2hEb2N1bWVu
dExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2Vy
KSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1lTmF2aWdhdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHRhcmdldFVSTCB9LCBSZWdpc3RyYWJs
ZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBzb3VyY2VVUkwgfSwgaXNS
ZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUoKSwgTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2Rp
ZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5GcmFtZVRpbWVzdGFtcCwgd2FzUG90ZW50aWFsbHlJ
bml0aWF0ZWRCeVVzZXIpLCAwKTsKIH0KICNlbmRpZgogCkBAIC0xMDAwMiw1OCArOTk5MiwyNyBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6c3lzdGVtUHJldmlld0FjdGlvblRyaWdnZXJlZChjb25zdCBX
ZWJDb3JlOjpTeXN0ZW1QcmV2aWV3SW5mbwogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZHVtcEFkQ2xp
Y2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJv
Y2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0
d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKGVtcHR5U3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vz
c2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNp
dGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNl
c3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0gZWxzZQotICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3Jr
UHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNs
ZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRB
ZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVlLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9j
ZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkg
ewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1l
ckZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFsdWUpLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5u
ZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vic2l0
ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVy
c2lvblVSTEZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBp
ZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNp
dGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1
dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdl
UHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewot
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JU
ZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vz
cygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENs
aWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNl
c3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxF
KFNQRUVDSF9TWU5USEVTSVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5jcHAKaW5kZXggZDkyNmIzM2NiZGYyYmI4YmI5ODBkNjNjNWRjNTJhZTUyNTA5MjUyOS4uOWVk
MDNjY2E3YjM4NGI2YmVhY2ExMmM5MjRkZjgyY2RlNTkyMDEyNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtMTQzLDggKzE0MywxMCBAQAogI2VuZGlm
CiAKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0coY2hhbm5lbCwgZm10LCAuLi4p
IFJFTEVBU0VfTE9HKGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywg
IyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfU1RBVElD
KGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhjaGFubmVsLCAiV2ViUHJvY2Vzc1Bvb2w6
OiIgZm10LCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xP
R19FUlJPUihjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfRVJST1IoY2hhbm5lbCwgIiVw
IC0gV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBX
RUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKGNoYW5uZWwsIGZtdCwgLi4uKSBS
RUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIGNoYW5u
ZWwsICIlcCAtIFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNk
ZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoY2hhbm5l
bCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lGKHNlc3Npb25JRC5pc0Fsd2F5c09uTG9nZ2luZ0Fs
bG93ZWQoKSwgY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwgIyNfX1ZBX0FSR1NfXykK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTIzMiw2
ICsyMzQsMTEgQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhh
c2g+JiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3QKICAgICByZXR1cm4gc2V0OwogfQog
CitWZWN0b3I8U3RyaW5nPiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90
b2NvbEhhbmRsZXJzKCkKK3sKKyAgICByZXR1cm4gY29weVRvVmVjdG9yKGdsb2JhbFVSTFNjaGVt
ZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKTsKK30KKwogV2ViUHJvY2Vzc1Bvb2w6Oldl
YlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9u
KQogICAgIDogbV9jb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24uY29weSgpKQogICAgICwgbV9k
ZWZhdWx0UGFnZUdyb3VwKFdlYlBhZ2VHcm91cDo6Y3JlYXRlKCkpCkBAIC0yMzksNyArMjQ2LDYg
QEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uJiBjb25maWd1cmF0aW9uKQogICAgICwgbV9hdXRvbWF0aW9uQ2xpZW50KG1ha2VVbmlx
dWU8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PigpKQogICAgICwgbV9kb3dubG9hZENsaWVudChtYWtl
VW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+KCkpCiAgICAgLCBtX2hpc3RvcnlDbGllbnQo
bWFrZVVuaXF1ZTxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PigpKQotICAgICwgbV9j
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudD4oKSkKICAgICAsIG1fdmlzaXRlZExpbmtTdG9yZShWaXNpdGVkTGlua1N0
b3JlOjpjcmVhdGUoKSkKICNpZiBQTEFURk9STShNQUMpCiAgICAgLCBtX2hpZ2hQZXJmb3JtYW5j
ZUdyYXBoaWNzVXNhZ2VTYW1wbGVyKG1ha2VVbmlxdWU8SGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NV
c2FnZVNhbXBsZXI+KCp0aGlzKSkKQEAgLTI2Nyw5ICsyNzMsNiBAQCBXZWJQcm9jZXNzUG9vbDo6
V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRp
b24pCiAjZW5kaWYKICAgICB9KTsKIAotICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlICYmIFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAg
ICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
YXRhU3RvcmUoKTsKLQogICAgIGZvciAoYXV0byYgc2NoZW1lIDogbV9jb25maWd1cmF0aW9uLT5h
bHdheXNSZXZhbGlkYXRlZFVSTFNjaGVtZXMoKSkKICAgICAgICAgbV9zY2hlbWVzVG9SZWdpc3Rl
ckFzQWx3YXlzUmV2YWxpZGF0ZWQuYWRkKHNjaGVtZSk7CiAKQEAgLTI4NSw3ICsyODgsNiBAQCBX
ZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24mIGNvbmZpZ3VyYXRpb24pCiAgICAgYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzUG9vbDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiAKICAgICAvLyBOT1RF
OiBUaGVzZSBzdWItb2JqZWN0cyBtdXN0IGJlIGluaXRpYWxpemVkIGFmdGVyIG1fbWVzc2FnZVJl
Y2VpdmVyTWFwLi4KLSAgICBhZGRTdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsK
ICAgICBhZGRTdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5PigpOwogICAgIGFk
ZFN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5PigpOwogI2lmIEVOQUJMRShN
RURJQV9TRVNTSU9OKQpAQCAtMzQyLDkgKzM0NCw2IEBAIFdlYlByb2Nlc3NQb29sOjp+V2ViUHJv
Y2Vzc1Bvb2woKQogICAgIHByb2Nlc3NQb29sQ291bnRlci5kZWNyZW1lbnQoKTsKICNlbmRpZgog
Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNo
dXREb3duUHJvY2VzcygpOwotCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAgICAgaWYgKCFtX3Byb2Nl
c3Nlc1VzaW5nR2FtZXBhZHMuaXNFbXB0eSgpKQogICAgICAgICBVSUdhbWVwYWRQcm92aWRlcjo6
c2luZ2xldG9uKCkucHJvY2Vzc1Bvb2xTdG9wcGVkVXNpbmdHYW1lcGFkcygqdGhpcyk7CkBAIC00
MDIsMTYgKzQwMSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEF1dG9tYXRpb25DbGllbnQo
c3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4mCiAgICAgICAgIG1fYXV0b21h
dGlvbkNsaWVudCA9IFdURk1vdmUoYXV0b21hdGlvbkNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1
ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYgY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50KQotewotI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFH
RVIpCi0gICAgaWYgKCFjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi0gICAgICAgIG1fY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gbWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudD4oKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50ID0gV1RGTW92ZShjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOwotI2VuZGlm
Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVu
ZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxl
SWRlbnRpZmllcikKIHsKICAgICAvLyBHdWFyZCBhZ2FpbnN0IEFQSSBtaXN1c2UuCkBAIC00MjEs
MTEgKzQxMCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2
aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGN1CiAgICAgbV9jb25maWd1cmF0aW9u
LT5zZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY3VzdG9tV2ViQ29u
dGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKTsKIH0KIAotSVBDOjpDb25uZWN0aW9uKiBXZWJQ
cm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkKLXsKLSAgICByZXR1cm4g
bV9uZXR3b3JrUHJvY2Vzcy0+Y29ubmVjdGlvbigpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpsYW5ndWFnZUNoYW5nZWQodm9pZCogY29udGV4dCkKIHsKICAgICBzdGF0aWNfY2FzdDxXZWJQ
cm9jZXNzUG9vbCo+KGNvbnRleHQpLT5sYW5ndWFnZUNoYW5nZWQoKTsKQEAgLTQzNSw4ICs0MTks
NyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQoKQogewogICAgIHNlbmRU
b0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdl
c0NoYW5nZWQoKSk7CiAjaWYgVVNFKFNPVVApCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0g
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpV
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAw
KTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPm5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFn
ZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDApOwogI2VuZGlmCiB9CiAKQEAg
LTQ0OSw3ICs0MzIsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpmdWxsS2V5Ym9hcmRBY2Nlc3NN
b2RlQ2hhbmdlZChib29sIGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZQogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2VuZE1lbW9yeVByZXNzdXJlRXZlbnQoYm9vbCBpc0NyaXRpY2FsKQogewogICAgIHNl
bmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1l
bW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9j
ZXNzKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVF
dmVudChpc0NyaXRpY2FsKSk7CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29y
a1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVBy
ZXNzdXJlRXZlbnQoaXNDcml0aWNhbCksIDApOwogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQogICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5zZW5kTWVtb3J5UHJl
c3N1cmVFdmVudChpc0NyaXRpY2FsKTsKICNlbmRpZgpAQCAtNDc0LDI3NSArNDU4LDggQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2NyZWVuUHJvcGVydGllc1N0YXRlQ2hhbmdlZCgpCiAjZW5kaWYK
IH0KIAotTmV0d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3JlKQotewotICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0
ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWlu
IHRocmVhZHMuCi0gICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0
aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91ciBBUElzLgotICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYuCi0gICAgaWYgKCFSdW5Mb29wOjpp
c01haW4oKSkgewotICAgICAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICAgICAgZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsK
LSAgICB9Ci0KLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICBpZiAod2l0aFdl
YnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Np
b24obWFrZVJlZigqd2l0aFdlYnNpdGVEYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIHdpdGhXZWJz
aXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotICAgIH0KLQotICAgIGF1dG8gbmV0d29ya1Byb2Nl
c3MgPSBtYWtlVW5pcXVlPE5ldHdvcmtQcm9jZXNzUHJveHk+KCp0aGlzKTsKLQotICAgIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0KLSAgICBpZiAobV93ZWJz
aXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBjb3B5VG9WZWN0b3IobV93ZWJzaXRlRGF0YVN0b3JlLT5w
ZW5kaW5nQ29va2llcygpKTsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRp
bmdDb29raWVzKCk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFw
cGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJh
dGlvbigpLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpOwotICAgICAgICBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3Rv
cmUtPmNvbmZpZ3VyYXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIo
KTsKLSNlbmRpZgotICAgIH0KLQotICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUds
b2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7Ci0KLSAgICBmb3IgKGF1dG8m
IHNjaGVtZSA6IGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQot
ICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xz
LmFwcGVuZChzY2hlbWUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBTdHJpbmcg
Y29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGly
ZWN0b3J5KCk7Ci0gICAgaWYgKCFjb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5
KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5
ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBpZiAo
IWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNE
aXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKLQotICAgIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9v
bDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJlbnRCdW5kbGVEaXJlY3Rv
cnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFy
ZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgcGFy
YW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yVGVtcG9yYXJ5RmlsZShlbXB0eVN0cmluZygpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpS
ZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0jZW5kaWYK
LQotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1Zl
Y3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJB
c1NlY3VyZSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3Np
bmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGlu
Z3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJp
dHlQb2xpY3koKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwg
PSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNU
b1JlZ2lzdGVyQXNMb2NhbCgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVk
QXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9u
KCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOwotCi0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0gICAgLy8gKioqKioqKioqCi0gICAgLy8gSU1QT1JUQU5UOiBEbyBub3QgY2hh
bmdlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBpbmRleGVkIGRhdGFiYXNlcyBvbiBkaXNr
IHdpdGhvdXQgZmlyc3QgY29uc3VsdGluZyBhIHJldmlld2VyIGZyb20gQXBwbGUgKDxyZGFyOi8v
cHJvYmxlbS8xNzQ1NDcxMj4pCi0gICAgLy8gKioqKioqKioqCi0gICAgaWYgKG1fd2Vic2l0ZURh
dGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5p
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5pbmRl
eGVkRGF0YWJhc2VEaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5jcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwotICAgIH0KLSNlbmRpZgotCi0j
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0g
ICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IG1f
d2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5KCk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnkpCi0gICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSA9ICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRTZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0gICAgYXV0byBsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTG9j
YWxTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFsb2NhbFN0b3Jh
Z2VEaXJlY3RvcnkpCi0gICAgICAgIGxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdExvY2FsU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0g
bG9jYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLQotICAgIGF1dG8gY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0
YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51
bGxTdHJpbmcoKTsKLSAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9y
eSA9IFdURk1vdmUoY2FjaGVTdG9yYWdlRGlyZWN0b3J5KTsKLSAgICB9Ci0KLSAgICBTdHJpbmcg
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAg
ICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgp
LT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeSwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0KLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBmYWxzZTsKLSAgICBi
b29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBmYWxzZTsK
LSAgICBib29sIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSB0cnVlOwotICAgIGJvb2wgZW5hYmxl
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IGZhbHNlOwotI2lmIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2Nr
aW5nTW9kZSB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gV2ViQ29yZTo6VGhpcmRQYXJ0
eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsOwotICAgIFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRFbmFibGVkIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gV2ViQ29y
ZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6Ok5vOwotI2VuZGlmCi0gICAgV2Vi
Q29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgZmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGUgPSBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZTo6QWxsQnV0Q29va2llczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBzdGFuZGFs
b25lQXBwbGljYXRpb25Eb21haW47Ci0gICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbj4gYXBwQm91bmREb21haW5zOwotICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIG1h
bnVhbFByZXZhbGVudFJlc291cmNlOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbV90Y2NQ
cmVmZXJlbmNlRW5hYmxlZCA9IGRvZXNBcHBIYXZlSVRQRW5hYmxlZCgpOwotICAgIGlmICh3aXRo
V2Vic2l0ZURhdGFTdG9yZSAmJiAhd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBs
aWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1f
dGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5zZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
KTsKLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSAmJiAhbV93ZWJzaXRlRGF0YVN0
b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBtX3dlYnNp
dGVEYXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZUV4aXN0cygpICYmICFXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlKCktPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIFdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVk
OwotI2VuZGlmCi0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJ
U1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZl
bnQgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygp
OwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0g
ICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IHdpdGhXZWJzaXRlRGF0
YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAg
ICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAg
ICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVE
ZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAg
ICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2Nr
aW5nTW9kZTsKLSAgICAgICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
LnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOwotI2VuZGlmCi0gICAgICAgICAgICBm
aXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZTsKLSAgICAgICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5z
dGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0gICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMg
PSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRl
cnMuYXBwQm91bmREb21haW5zOwotICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2Ug
PSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRl
cnMubWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHdp
dGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3Rv
cmFnZVF1b3RhID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9y
YWdlUXVvdGEoKTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURp
cmVjdG9yeSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVj
dG9yeSgpOwotICAgICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewot
ICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGly
ZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdv
cmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgY29uc3QgYXV0byYgaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFT
dG9yZS0+cmVzb2x2ZWRIU1RTU3RvcmFnZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIWhzdHNT
dG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFn
ZURpcmVjdG9yeSA9IGhzdHNTdG9yYWdlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGhzdHNTdG9yYWdlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7
Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3dlYnNpdGVEYXRhU3Rv
cmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xv
Z1Rlc3RpbmdFdmVudCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdD
YWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IG1fd2Vi
c2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAg
ICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9z
dDsKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
ZW5hYmxlRGVidWdNb2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0g
ICAgICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29r
aWVCbG9ja2luZ01vZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5h
YmxlZCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFy
YW1ldGVycy5zYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAg
ICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNp
dGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21h
aW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFt
ZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmRE
b21haW5zID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJl
c291cmNlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVv
dGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAg
ICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmln
aW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5T
dG9yYWdlUXVvdGEoKTsKLQotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3Rv
cnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7
Ci0gICAgICAgIGlmICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7
Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hl
RGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdv
cmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBj
b25zdCBhdXRvJiBoc3RzU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVz
b2x2ZWRIU1RTU3RvcmFnZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIWhzdHNTdG9yYWdlRGly
ZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9y
eSA9IGhzdHNTdG9yYWdlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlKGhzdHNTdG9yYWdlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBl
OjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotICAgICAgICBhdXRvIG5ldHdvcmtDYWNoZURpcmVj
dG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsK
LSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0
b3J5OwotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hl
RGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdv
cmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgfQotCi0jaWYgSEFWRShDRk5F
VFdPUktfQUxURVJOQVRJVkVfU0VSVklDRSkKLSAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6aHR0
cDNFbmFibGVkKCkpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5
ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdEFsdGVybmF0aXZlU2VydmljZXNEaXJlY3Rvcnko
KTsKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnkuaXNFbXB0
eSgpKQotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdy
aXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeSwgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0
ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
aHR0cDNFbmFibGVkID0gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLSAgICBib29sIGlzSXRwU3RhdGVF
eHBsaWNpdGx5U2V0ID0gZmFsc2U7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycyB7Ci0gICAgICAgIFdU
Rk1vdmUocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSksCi0gICAgICAgIFdURk1vdmUo
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSksCi0gICAgICAg
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MsCi0gICAgICAgIGlzSXRwU3RhdGVFeHBsaWNp
dGx5U2V0LAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2
ZW50LAotICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0LAotICAgICAgICBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlLAotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpCi0gICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUsCi0gICAgICAg
IHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkLAotI2VuZGlmCi0gICAgICAgIGZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlLAotICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRp
b25Eb21haW4sCi0gICAgICAgIGFwcEJvdW5kRG9tYWlucywKLSAgICAgICAgbWFudWFsUHJldmFs
ZW50UmVzb3VyY2UsCi0gICAgfTsKLQotICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMg
cGFyYW1ldGVycwotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRl
cnMpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgbmV0d29yayBwcm9jZXNzLgotICAgIG5ldHdv
cmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG5l
dHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UU9TKG5ldHdv
cmtQcm9jZXNzTGF0ZW5jeVFPUygpLCBuZXR3b3JrUHJvY2Vzc1Rocm91Z2hwdXRRT1MoKSksIDAp
OwotI2VuZGlmCi0KLSAgICBuZXR3b3JrUHJvY2Vzcy0+dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigp
OwotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAg
IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgfQotCi0g
ICAgLy8gTWFrZSBzdXJlIHRoZSBuZXR3b3JrIHByb2Nlc3Mga25vd3MgYWJvdXQgYWxsIHRoZSBz
ZXNzaW9ucyB0aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSBpdCBzdGFydGVkLgotICAg
IGZvciAoYXV0byYgc2Vzc2lvbklEIDogbV9zZXNzaW9uVG9QYWdlSURzTWFwLmtleXMoKSkgewot
ICAgICAgICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4
aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpKQotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKndlYnNpdGVEYXRhU3RvcmUpOwotICAg
IH0KLQotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBXVEZNb3ZlKG5ldHdvcmtQcm9jZXNzKTsKLSAg
ICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5l
dHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1By
b3h5KQogewotICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsKLSAgICBBU1NFUlQoJm5ldHdv
cmtQcm9jZXNzUHJveHkgPT0gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKSk7Ci0KICAgICBmb3IgKGF1
dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBzdXBwbGVt
ZW50LT5wcm9jZXNzRGlkQ2xvc2UoJm5ldHdvcmtQcm9jZXNzUHJveHkpOwogCkBAIC03NTEsOSAr
NDY4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdv
cmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzUHIKICAgICBpZiAobV9hdXRvbWF0aW9uU2Vz
c2lvbikKICAgICAgICAgbV9hdXRvbWF0aW9uU2Vzc2lvbi0+dGVybWluYXRlKCk7CiAKLSAgICAv
LyBMZWF2ZSB0aGUgcHJvY2VzcyBwcm94eSBhcm91bmQgZHVyaW5nIGNsaWVudCBjYWxsLCBzbyB0
aGF0IHRoZSBjbGllbnQgY291bGQgcXVlcnkgdGhlIHByb2Nlc3MgaWRlbnRpZmllci4KLSAgICBt
X25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKLQogICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
KCk7CiB9CiAKQEAgLTc2NCwyMCArNDc4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2Vydmlj
ZVdvcmtlclByb2Nlc3NDcmFzaGVkKFdlYlByb2Nlc3NQcm94eSYgcHJveHkpCiAjZW5kaWYKIH0K
IAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlBy
b2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1Byb3h5LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpH
ZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQotewotICAg
IGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKHdlYlByb2Nlc3NQcm94eSwgW3RoaXMsIHdlYWtUaGlzID0gbWFr
ZVdlYWtQdHIoKnRoaXMpLCB3ZWJQcm9jZXNzUHJveHkgPSBtYWtlV2Vha1B0cih3ZWJQcm9jZXNz
UHJveHkpLCByZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYXV0byYgY29ubmVjdGlvbkluZm8pIG11
dGFibGUgewotICAgICAgICBpZiAoVU5MSUtFTFkoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmll
cklzVmFsaWQoY29ubmVjdGlvbkluZm8uaWRlbnRpZmllcigpKSAmJiB3ZWJQcm9jZXNzUHJveHkg
JiYgd2Vha1RoaXMpKSB7Ci0gICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19F
UlJPUihQcm9jZXNzLCAiZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOiBGYWlsZWQgZmlyc3Qg
YXR0ZW1wdCwgcmV0cnlpbmciKTsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7
Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24oKndlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIHJlcGx5KGNvbm5lY3Rpb25JbmZvKTsKLSAgICB9KTsKLX0K
LQogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdwdVByb2Nl
c3NDcmFzaGVkKFByb2Nlc3NJRCBpZGVudGlmaWVyKQogewpAQCAtODAxLDIzICs1MDEsMjYgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1By
b3h5JiB3ZWJQcm9jZXNzUHJveHksIE0KIH0KICNlbmRpZgogCitib29sIFdlYlByb2Nlc3NQb29s
OjpzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSBmYWxzZTsKKwogI2lmIEVOQUJM
RShTRVJWSUNFX1dPUktFUikKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNv
bnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm94
eSwgUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgQVNTRVJUX1VOVVNFRChwcm94eSwgJnByb3h5ID09IG1fbmV0d29ya1Byb2Nlc3Mu
Z2V0KCkpOworICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpl
eGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIGlmICghd2Vic2l0
ZURhdGFTdG9yZSkKKyAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKKyAgICBpZiAoIXByb2Nlc3NQb29scygpLnNpemUo
KSkKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZjxXZWJQcm9jZXNzUG9vbD4+IHNl
cnZpY2VXb3JrZXJQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKEFQSTo6UHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uOjpjcmVhdGUoKS5nZXQoKSkpOwogCi0gICAgYXV0byogd2Vic2l0
ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9y
ZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwotCi0gICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKSB7
Ci0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRl
RGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCku
cHRyKCk7Ci0gICAgICAgIHdlYnNpdGVEYXRhU3RvcmUgPSBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0
KCk7Ci0gICAgfQorICAgIC8vIEFyYml0cmFyaWx5IGNob29zZSB0aGUgZmlyc3QgcHJvY2VzcyBw
b29sIHRvIGhvc3QgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCisgICAgYXV0byogcHJvY2Vz
c1Bvb2wgPSBwcm9jZXNzUG9vbHMoKVswXTsKKyAgICBBU1NFUlQocHJvY2Vzc1Bvb2wpOwogCiAg
ICAgV2ViUHJvY2Vzc1Byb3h5KiBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5IHsgbnVsbHB0ciB9
OwotICAgIGlmICghbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7Ci0gICAgICAg
IGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7Ci0gICAgICAgICAgICBpZiAocHJv
Y2VzcyA9PSBtX3ByZXdhcm1lZFByb2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94
eSgpKQorCisgICAgaWYgKCFzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKKyAg
ICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2VzKSB7Cisg
ICAgICAgICAgICBpZiAocHJvY2VzcyA9PSBwcm9jZXNzUG9vbC0+bV9wcmV3YXJtZWRQcm9jZXNz
IHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIGlmICgmcHJvY2Vzcy0+d2Vic2l0ZURhdGFTdG9yZSgpICE9IHdl
YnNpdGVEYXRhU3RvcmUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC04MjUsMzUgKzUy
OCwzNSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVj
dGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1BybwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5ID0gcHJvY2Vzcy5nZXQo
KTsKLSAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VX
b3JrZXJzKHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2Vycygp
KTsKKyAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VX
b3JrZXJzKHByb2Nlc3NQb29sLT51c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2Vy
dmljZVdvcmtlcnMoKSk7CiAKLSAgICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9H
X0lGX0FMTE9XRUQoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0
aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdlYiBwcm9jZXNzIChwcm9j
ZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtl
clByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBXRUJQUk9D
RVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0
YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIHJldXNpbmcgYW4g
ZXhpc3Rpbmcgd2ViIHByb2Nlc3MgKHByb2Nlc3M9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmll
cigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFz
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSB7Ci0gICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5
ID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2VycygqdGhpcywgV1RGTW92
ZShyZWdpc3RyYWJsZURvbWFpbiksICp3ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgYXV0byBu
ZXdQcm9jZXNzUHJveHkgPSBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZUZvclNlcnZpY2VXb3JrZXJz
KCpwcm9jZXNzUG9vbCwgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksICp3ZWJzaXRlRGF0YVN0
b3JlKTsKICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9IG5ld1Byb2Nlc3NQcm94
eS5wdHIoKTsKIAotICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VE
KFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29y
a1Byb2Nlc3MgY3JlYXRpbmcgYSBuZXcgc2VydmljZSB3b3JrZXIgcHJvY2VzcyAocHJvY2VzPSVw
LCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisgICAgICAgIFdFQlBST0NFU1NQT09MX1JF
TEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3Jr
ZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgY3JlYXRpbmcgYSBuZXcgc2Vydmlj
ZSB3b3JrZXIgcHJvY2VzcyAocHJvY2VzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7
CiAKLSAgICAgICAgaW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJvY2Vzc1Byb3h5LCB3ZWJz
aXRlRGF0YVN0b3JlKTsKLSAgICAgICAgbV9wcm9jZXNzZXMuYXBwZW5kKFdURk1vdmUobmV3UHJv
Y2Vzc1Byb3h5KSk7CisgICAgICAgIHByb2Nlc3NQb29sLT5pbml0aWFsaXplTmV3V2ViUHJvY2Vz
cyhuZXdQcm9jZXNzUHJveHksIHdlYnNpdGVEYXRhU3RvcmUpOworICAgICAgICBwcm9jZXNzUG9v
bC0+bV9wcm9jZXNzZXMuYXBwZW5kKFdURk1vdmUobmV3UHJvY2Vzc1Byb3h5KSk7CiAgICAgfQog
Ci0gICAgQVNTRVJUKCFtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFpbnMoKnNlcnZpY2VX
b3JrZXJQcm9jZXNzUHJveHkpKTsKLSAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYWRkKCpz
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKKyAgICBBU1NFUlQoIXNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoKS5jb250YWlucygqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkpOworICAgIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzZXMoKS5hZGQoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpOwogCi0g
ICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZXN0YWJsaXNoU2VydmljZVdvcmtlckNvbnRl
eHQobV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMgPyBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNl
cy52YWx1ZSgpIDogbV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLnN0b3JlKCksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBpZiAoIW1fc2VydmljZVdvcmtlclVzZXJB
Z2VudC5pc051bGwoKSkKLSAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2Vy
dmljZVdvcmtlclVzZXJBZ2VudChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOworICAgIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KHByb2Nl
c3NQb29sLT5tX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA/IHByb2Nlc3NQb29sLT5tX3NlcnZp
Y2VXb3JrZXJQcmVmZXJlbmNlcy52YWx1ZSgpIDogcHJvY2Vzc1Bvb2wtPm1fZGVmYXVsdFBhZ2VH
cm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CisgICAgaWYgKCFwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50LmlzTnVsbCgp
KQorICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNl
ckFnZW50KHByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpyZW1vdmVGcm9tU2VydmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9j
ZXNzUHJveHkmIHByb2Nlc3MpCiB7Ci0gICAgQVNTRVJUKG1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cy5jb250YWlucyhwcm9jZXNzKSk7Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLnJlbW92
ZShwcm9jZXNzKTsKKyAgICBBU1NFUlQoc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5z
KHByb2Nlc3MpKTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkucmVtb3ZlKHByb2Nlc3Mp
OwogfQogI2VuZGlmCiAKQEAgLTkyMiw3ICs2MjUsNyBAQCBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5
PiBXZWJQcm9jZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MoV2Vic2l0ZURhdGFTdG9y
ZQogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQogICAgIC8vIEluIHBsYXRmb3Jt
cyB1c2luZyBCdWJibGV3cmFwIGZvciBzYW5kYm94aW5nLCBwcmV3YXJtZWQgcHJvY2VzcyBpcyBs
YXVuY2hlZCB1c2luZyB0aGUgV2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3Jl
LAogICAgIC8vIHNvIHdlIGRvbid0IHVzZSBpdCBpbiBjYXNlIG9mIHVzaW5nIGEgZGlmZmVyZW50
IFdlYnNpdGVEYXRhU3RvcmUuCi0gICAgaWYgKG1fc2FuZGJveEVuYWJsZWQgJiYgbV93ZWJzaXRl
RGF0YVN0b3JlICYmIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSAhPSAmd2Vic2l0ZURhdGFTdG9y
ZSkKKyAgICBpZiAobV9zYW5kYm94RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAj
ZW5kaWYKIApAQCAtMTAzMiw4ICs3MzUsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjppbml0aWFs
aXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIFdlYnNpdGVEYQogICAg
ICAgICBwcm9jZXNzLmlzUmVzcG9uc2l2ZShbaW5pdGlhbGl6YXRpb25BY3Rpdml0eSA9IFdURk1v
dmUoaW5pdGlhbGl6YXRpb25BY3Rpdml0eSldIChib29sKSB7IH0pOwogICAgIH0pOwogCi0gICAg
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQogICAgIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMgcGFyYW1ldGVyczsKIAogICAgIHBhcmFtZXRlcnMuaW5qZWN0ZWRCdW5kbGVQYXRoID0gbV9y
ZXNvbHZlZFBhdGhzLmluamVjdGVkQnVuZGxlUGF0aDsKQEAgLTExOTgsOSArODk5LDYgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJv
eHkqIHByb2Nlc3MpCiAgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+aWdub3JlVGltZW91
dHNGb3JUZXN0aW5nKCk7CiAKICAgICBtX2Nvbm5lY3Rpb25DbGllbnQuZGlkQ3JlYXRlQ29ubmVj
dGlvbih0aGlzLCBwcm9jZXNzLT53ZWJDb25uZWN0aW9uKCkpOwotCi0gICAgaWYgKG1fd2Vic2l0
ZURhdGFTdG9yZSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5kaWRDcmVhdGVOZXR3b3Jr
UHJvY2VzcygpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpkaXNjb25uZWN0UHJvY2VzcyhX
ZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCkBAIC0xMjk1LDEwICs5OTMsNyBAQCBSZWY8V2ViUGFn
ZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiBwYWdlQ2xp
ZW50LCBSZWY8QVBJOgogICAgIGlmICghcGFnZUNvbmZpZ3VyYXRpb24tPndlYnNpdGVEYXRhU3Rv
cmUoKSkgewogICAgICAgICAvLyBXZSB0cnkgdG8gYXZvaWQgY3JlYXRpbmcgdGhlIGRlZmF1bHQg
ZGF0YSBzdG9yZSBhcyBsb25nIGFzIHBvc3NpYmxlLgogICAgICAgICAvLyBCdXQgaWYgdGhlcmUg
aXMgYW4gYXR0ZW1wdCB0byBjcmVhdGUgYSB3ZWIgcGFnZSB3aXRob3V0IGFueSBzcGVjaWZpZWQg
ZGF0YSBzdG9yZSwgdGhlbiB3ZSBoYXZlIHRvIGNyZWF0ZSBpdC4KLSAgICAgICAgaWYgKCFtX3dl
YnNpdGVEYXRhU3RvcmUpCi0gICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLQotICAgICAgICBw
YWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZShtX3dlYnNpdGVEYXRhU3RvcmUu
Z2V0KCkpOworICAgICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZShX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKSk7CiAgICAg
fQogCiAgICAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzczsKQEAgLTEzMjksNyArMTAy
NCw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKFBh
Z2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQogICAgIGlmICghbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMpIHsKICAgICAgICAgbV9zZXJ2
aWNlV29ya2VyUHJlZmVyZW5jZXMgPSBwYWdlLT5wcmVmZXJlbmNlc1N0b3JlKCk7Ci0gICAgICAg
IGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMpCisgICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVT
ZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXNTdG9yZSgqbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMp
OwogICAgIH0KICAgICBpZiAodXNlckNvbnRlbnRDb250cm9sbGVyKQpAQCAtMTM1Niw3ICsxMDUx
LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChj
b25zdCBTdHJpbmcmIHVzZXJBZ2VudCkKICAgICBpZiAobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50
ID09IHVzZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2VydmljZVdvcmtlclVzZXJB
Z2VudCA9IHVzZXJBZ2VudDsKLSAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDog
bV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclBy
b2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzLnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50
KTsKIH0KICNlbmRpZgpAQCAtMTM2NSwxNSArMTA2MCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBh
Z2VJCiB7CiAgICAgYXV0byByZXN1bHQgPSBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAuYWRkKGRhdGFT
dG9yZS5zZXNzaW9uSUQoKSwgSGFzaFNldDxXZWJQYWdlUHJveHlJZGVudGlmaWVyPigpKS5pdGVy
YXRvci0+dmFsdWUuYWRkKHBhZ2VJRCk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3Vs
dC5pc05ld0VudHJ5KTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25J
RCgpOwotICAgIGlmIChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSkgewotICAgICAgICBBU1NFUlQoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IGRhdGFT
dG9yZS5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCA9PSBz
ZXNzaW9uSUQpOwotICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKGRhdGFTdG9yZSkpOwotICAgICAg
ICAgICAgZGF0YVN0b3JlLmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgIH0K
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUVuZFVzaW5nV2Vic2l0ZURhdGFTdG9yZShX
ZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3Jl
KQpAQCAtMTQwMSw3ICsxMDg3LDYgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzUGFnZXNVc2lu
Z1dlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKQogRG93bmxvYWRQ
cm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9y
ZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQogewogICAgIGF1dG8mIGRv
d25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcmVxdWVzdCwgaW5p
dGlhdGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0
b3JlLnNlc3Npb25JRCgpOwogCiAgICAgT3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21h
aW4+IGlzQXBwQm91bmQgPSBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbjo6Tm87CiAgICAgaWYg
KGluaXRpYXRpbmdQYWdlKSB7CkBAIC0xNDExLDI2ICsxMDk2LDIzIEBAIERvd25sb2FkUHJveHkm
IFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdl
YlBhZ2VQcm94CiAjZW5kaWYKICAgICB9CiAKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICBSZXNvdXJjZVJlcXVlc3QgdXBkYXRlZFJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAg
IC8vIFJlcXVlc3QncyBmaXJzdFBhcnR5Rm9yQ29va2llcyB3aWxsIGJlIHVzZWQgYXMgT3JpZ2lu
YWwgVVJMIG9mIHRoZSBkb3dubG9hZCByZXF1ZXN0LgotICAgICAgICAvLyBXZSBzZXQgdGhlIHZh
bHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KLSAgICAgICAgaWYgKGluaXRpYXRpbmdQ
YWdlKSB7Ci0gICAgICAgICAgICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwgPSBVUkwgeyBVUkwgeyB9
LCBpbml0aWF0aW5nUGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07Ci0gICAgICAgICAgICB1
cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7
Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGFyZVJlZ2lzdHJhYmxl
RG9tYWluc0VxdWFsKGluaXRpYXRpbmdQYWdlVVJMLCByZXF1ZXN0LnVybCgpKSk7Ci0gICAgICAg
ICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6VXNlckFnZW50KSkKLSAgICAgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNl
ckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0
eUZvckNvb2tpZXMoVVJMKCkpOwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1l
U2l0ZShmYWxzZSk7Ci0gICAgICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFk
ZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKLSAgICAgICAgICAgICAgICB1cGRh
dGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdl
bnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZh
bHNlKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkRvd25sb2FkUmVxdWVzdChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJ
RCgpLCB1cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsK
LSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0
ZWRSZXF1ZXN0KHJlcXVlc3QpOworICAgIC8vIFJlcXVlc3QncyBmaXJzdFBhcnR5Rm9yQ29va2ll
cyB3aWxsIGJlIHVzZWQgYXMgT3JpZ2luYWwgVVJMIG9mIHRoZSBkb3dubG9hZCByZXF1ZXN0Lgor
ICAgIC8vIFdlIHNldCB0aGUgdmFsdWUgdG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJMLgorICAg
IGlmIChpbml0aWF0aW5nUGFnZSkgeworICAgICAgICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwgPSBV
UkwgeyBVUkwgeyB9LCBpbml0aWF0aW5nUGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07Cisg
ICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQ
YWdlVVJMKTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3Ry
YWJsZURvbWFpbnNFcXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOworICAg
ICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6VXNlckFnZW50KSkKKyAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdl
bnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2VudEZvclVSTChyZXF1ZXN0LnVybCgpKSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMo
VVJMKCkpOworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKKyAg
ICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFn
ZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7CiAgICAgfQorICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7CisgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25sb2FkUmVxdWVzdChkYXRh
U3RvcmUuc2Vzc2lvbklEKCksIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1cGRhdGVkUmVx
dWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsKIAogICAgIHJldHVybiBk
b3dubG9hZFByb3h5OwogfQpAQCAtMTQzOCwxNyArMTEyMCwxMiBAQCBEb3dubG9hZFByb3h5JiBX
ZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQ
YWdlUHJveAogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKFdl
YnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwg
Y29uc3QgQVBJOjpEYXRhJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAg
YXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBSZXNv
dXJjZVJlcXVlc3QoKSwgaW5pdGlhdGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwogCiAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHko
KSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hF
eHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAg
ICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3du
bG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgs
IHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJv
eHk7Ci0gICAgfQotCisgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwg
ZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBw
YXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSwgMCk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJv
eHk7CiB9CiAKQEAgLTE1MTcsMTEgKzExOTQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWZy
ZXNoUGx1Z2lucygpCiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAot
UHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQotewot
ICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lk
ZW50aWZpZXIoKSA6IDA7Ci19Ci0KIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6cHJld2FybWVk
UHJvY2Vzc0lkZW50aWZpZXIoKQogewogICAgIHJldHVybiBtX3ByZXdhcm1lZFByb2Nlc3MgPyBt
X3ByZXdhcm1lZFByb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCkgOiAwOwpAQCAtMTU1OCwxNCAr
MTIzMCwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJl
KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpz
aW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSk7CiAgICAgc2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFz
U2VjdXJlKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpKTsK
KyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1l
XSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3
b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNj
aGVtZUFzU2VjdXJlKHVybFNjaGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5
KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpz
aW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9s
aWN5KHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVy
bFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGlj
eSh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFT
dG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAg
IGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNj
aGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5S
ZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpA
QCAtMTU3OCwxNCArMTI1NCwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNj
aGVtZUFzTG9jYWwoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFs
U2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUp
OwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJV
UkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNz
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNj
aGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1
cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0
b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lz
dGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKGNvbnN0IFN0cmluZyYg
dXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdp
c3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNz
ZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxT
Y2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpKTsKKyAgICBXZWJz
aXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0
ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9B
Y2Nlc3ModXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0ZWQoY29uc3QgU3RyaW5nJiB1cmxTY2hl
bWUpCkBAIC0xNjA2LDEwICsxMjg2LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJH
bG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRs
ZXJzKCkuYWRkKHVybFNjaGVtZSk7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJl
Z2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9Cisg
ICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0
d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVG
b3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRs
ZXJzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTYxOCwxMCArMTI5Niw4IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVBy
b3RvY29sSGFuZGxlcnMoY29uCiAgICAgICAgIHJldHVybjsKIAogICAgIGdsb2JhbFVSTFNjaGVt
ZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLnJlbW92ZSh1cmxTY2hlbWUpOwotICAgIGZv
ciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9t
UHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNz
IDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVy
bFNjaGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXND
YWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTY1NSwxNiArMTMz
MSwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKENhY2hlTW9kZWwgY2Fj
aGVNb2RlbCkKIAogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6
U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
LSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCksIDApOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZv
ckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtjYWNoZU1vZGVsXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0
YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICB9
KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlG
b3JUZXN0aW5nKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIHsKICAgICB1cGRhdGVCYWNrRm9yd2Fy
ZENhY2hlQ2FwYWNpdHkoKTsKIAotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENh
Y2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCB7IH0pOwor
ICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtjYWNoZU1vZGVs
XSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3
b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVN
b2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKGNhY2hlTW9kZWwpLCB7IH0sIDApOworICAgIH0p
OwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRl
cnZhbChkb3VibGUgdGltZW91dEludGVydmFsKQpAQCAtMTY3NCwxMiArMTM1Miw3IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKGRvdWJsZSB0
aW1lb3V0SW50ZXJ2YWwpCiAKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpjcmVhdGVE
b3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSwgY29uc3QgRnJh
bWVJbmZvRGF0YSYgZnJhbWVJbmZvKQogewotICAgIHJldHVybiBlbnN1cmVOZXR3b3JrUHJvY2Vz
cygmZGF0YVN0b3JlKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcmVxdWVzdCwgZnJh
bWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzeW50
aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKLXsKLSAgICBlbnN1cmVOZXR3
b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7CisgICAg
cmV0dXJuIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0
YVN0b3JlLCAqdGhpcywgcmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwogfQog
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIoSVBDOjpSZWNlaXZlck5h
bWUgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpNZXNzYWdlUmVjZWl2ZXImIG1lc3NhZ2VSZWNl
aXZlcikKQEAgLTE3NTAsMzAgKzE0MjMsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzdG9wTWVt
b3J5U2FtcGxlcigpCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhU
JiYgbWVzc2FnZSwgVSYmIHJlcGx5KQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1f
bmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnNlbmRTeW5jKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJl
cGx5KSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkKLXsKLSAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKSwgMCk7Ci19Ci0KLXZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKLXsKLSAgICB0ZXJt
aW5hdGVTZXJ2aWNlV29ya2VycygpOwotCi0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Ci0g
ICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQogewogICAgIFZlY3RvcjxSZWZQdHI8
V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzID0gbV9wcm9jZXNzZXM7CkBAIC0xNzgxLDQwICsx
NDMwLDE1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9j
ZXNzZXMoKQogICAgICAgICBwcm9jZXNzLT50ZXJtaW5hdGUoKTsKIH0KIAotdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICgh
bV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0K
LSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJlcGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25J
bW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQotdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVz
dGluZygpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOwotfQot
Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQotewot
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
UHJvY2Vzc0RpZFJlc3VtZSgpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVT
ZXJ2aWNlV29ya2VycygpCiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIGF1dG8g
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpOwotICAgIHdoaWxlIChtX3NlcnZpY2VXb3Jr
ZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKSkKLSAgICAgICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzLmJlZ2luKCktPmRpc2FibGVTZXJ2aWNlV29ya2VycygpOworICAgIHdoaWxlIChzZXJ2aWNl
V29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNpemUoKSkKKyAgICAgICAgc2VydmljZVdvcmtlclBy
b2Nlc3NlcygpLmJlZ2luKCktPmRpc2FibGVTZXJ2aWNlV29ya2VycygpOwogI2VuZGlmCiB9CiAK
LXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYg
c2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Ci17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5mbHVzaENvb2tpZXMoc2Vzc2lvbklELCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVw
ZGF0ZUF1dG9tYXRpb25DYXBhYmlsaXRpZXMoKSBjb25zdAogewogI2lmIEVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKQpAQCAtMjA4OSwxNSArMTcxMywyMSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpy
ZXBvcnRXZWJDb250ZW50Q1BVVGltZShTZWNvbmRzIGNwdVRpbWUsIHVpbnQ2NF90IGFjdGl2aXR5
UwogI2VuZGlmCiB9CiAKK1dlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIFdlYlByb2Nlc3NQ
b29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzOworICAgIHJldHVybiBw
cm9jZXNzZXM7Cit9CisKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NBc3NlcnRp
b25zKCkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRp
b24oKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbXSAo
V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3Jr
UHJvY2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICB9KTsKICNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCiAgICAgLy8gQ2hlY2sgb24gbmV4dCBydW4gbG9vcCBzaW5jZSB0aGUg
d2ViIHByb2Nlc3MgcHJveHkgdG9rZW5zIGFyZSBwcm9iYWJseSBiZWluZyB1cGRhdGVkLgotICAg
IGNhbGxPbk1haW5SdW5Mb29wKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXSB7
Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGZv
ciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMp
CisgICAgY2FsbE9uTWFpblJ1bkxvb3AoW10geworICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VX
b3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQogICAgICAgICAgICAgc2Vy
dmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclByb2Nlc3NBc3NlcnRpb24oKTsK
ICAgICB9KTsKICNlbmRpZgpAQCAtMjEwNyw3ICsxNzM3LDcgQEAgYm9vbCBXZWJQcm9jZXNzUG9v
bDo6aXNTZXJ2aWNlV29ya2VyUGFnZUlEKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlEKSBj
b25zdAogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICAvLyBGSVhNRTogVGhpcyBp
cyBpbmVmZmljaWVudC4KLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMsIFtwYWdlSURdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihz
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtwYWdlSURdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAg
ICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlclBhZ2VQcm94eShwYWdlSUQpOwogICAg
IH0pOwogI2VuZGlmCkBAIC0yMzI5LDE0ICsxOTU5LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKQogfQogCiAjaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpZENvbW1pdENy
b3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiB0b0RvbWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6OkZs
YWc+IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgd2ViUGFn
ZVByb3h5SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCkKLXsKLSAgICBpZiAoIW1fbmV0d29y
a1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRpZENv
bW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25JRCwgZnJvbURvbWFpbiwg
dG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdl
SUQpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFj
dGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7CiAg
ICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXREb21haW5zV2l0
aFVzZXJJbnRlcmFjdGlvbihkb21haW5zKSk7CkBAIC0yMzg3LDI3ICsyMDA5LDI3IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1ZGlibGVNZWRpYUFzc2VydGlvbnMoKQogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wgdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKIHsKLSAgICBpZiAobV91c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzID09IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCisg
ICAgaWYgKHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKQogICAgICAgICByZXR1cm47CiAKLSAgICBXRUJQUk9DRVNTUE9P
TF9SRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0df
U1RBVElDKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
OiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcz0lZCkiLCB1c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzKTsKIAotICAgIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyA9IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7Ci0gICAgdGVybWluYXRlU2Vydmlj
ZVdvcmtlcnMoKTsKLSAgICB0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworICAgIHNfdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3M7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9j
ZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
KCk7CiB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiBib29sIFdlYlByb2Nlc3NQb29s
OjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLCBbXShhdXRv
JiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2VydmljZVdvcmtlclByb2Nlc3Nl
cygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBwcm9jZXNzLmhhc1NlcnZp
Y2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCk7CiAgICAgfSk7CiB9CiAKIGJv
b2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JU
ZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQ
cm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJu
IHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKTsK
ICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4
IGQxZjFmZTk2MTUwNmExZTVmMTMyNWZhOTlhNTYwOGI5NTBiNmFiNzEuLmViYmNhYTRlY2IxZDcz
NzE3YjFhMzU0ODJhNzJmYTljZjRkZTFlNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuaApAQCAtODEsNyArODEsNiBAQCBPQkpDX0NMQVNTIFdLUHJlZmVyZW5jZU9i
c2VydmVyOwogCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEF1dG9tYXRpb25DbGllbnQ7Ci1jbGFz
cyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiBjbGFzcyBEb3dubG9hZENsaWVudDsKIGNs
YXNzIEhUVFBDb29raWVTdG9yZTsKIGNsYXNzIEluamVjdGVkQnVuZGxlQ2xpZW50OwpAQCAtMTgw
LDcgKzE3OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlx
dWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0
RG93bmxvYWRDbGllbnQoVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+JiYpOwogICAgIHZv
aWQgc2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xp
ZW50PiYmKTsKLSAgICB2b2lkIHNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYpOwogCiAg
ICAgdm9pZCBzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3Qg
U3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRs
ZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPmN1c3RvbVdlYkNvbnRlbnRT
ZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpOyB9CkBAIC0xOTEsMTcgKzE4OSw5IEBAIHB1YmxpYzoK
ICAgICAvLyBudWxsIGNoZWNrcyBpbiBXZWJQYWdlUHJveHkuCiAgICAgV2ViUHJvY2Vzc1Byb3h5
KiBkdW1teVByb2Nlc3NQcm94eShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIGNvbnN0IHsgcmV0
dXJuIG1fZHVtbXlQcm9jZXNzUHJveGllcy5nZXQoc2Vzc2lvbklEKS5nZXQoKTsgfQogCi0gICAg
Ly8gV2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2VzcyBhcyBhcHByb3BvcmlhdGUgZm9yIGN1cnJl
bnQgcHJvY2VzcyBtb2RlbC4gVGhlIGNvbm5lY3Rpb24gbXVzdCBiZSBub24tbnVsbC4KLSAgICBJ
UEM6OkNvbm5lY3Rpb24qIG5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpOwotCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9BbGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2Fn
ZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9BbGxQcm9jZXNzZXNGb3JT
ZXNzaW9uKGNvbnN0IFQmIG1lc3NhZ2UsIFBBTDo6U2Vzc2lvbklEKTsKIAotICAgIC8vIFNlbmRz
IHRoZSBtZXNzYWdlIHRvIFdlYlByb2Nlc3Mgb3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3Jp
YXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9kZWwuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
dm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSk7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gdm9pZCBzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3Mo
VCYmIG1lc3NhZ2UsIFUmJiByZXBseSk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBz
ZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2Up
OwotCiAgICAgdm9pZCBwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSop
OwogCiAgICAgV2ViUHJvY2Vzc0NhY2hlJiB3ZWJQcm9jZXNzQ2FjaGUoKSB7IHJldHVybiBtX3dl
YlByb2Nlc3NDYWNoZS5nZXQoKTsgfQpAQCAtMjA5LDkgKzE5OSw2IEBAIHB1YmxpYzoKICAgICAv
LyBEaXNjb25uZWN0IHRoZSBwcm9jZXNzIGZyb20gdGhlIGNvbnRleHQuCiAgICAgdm9pZCBkaXNj
b25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqKTsKIAotICAgIFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZSogd2Vic2l0ZURhdGFTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2Vic2l0ZURhdGFT
dG9yZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0UHJpbWFyeURhdGFTdG9yZShXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeyBtX3dlYnNpdGVEYXRhU3RvcmUgPSAmZGF0YVN0b3Jl
OyB9Ci0KICAgICBSZWY8V2ViUGFnZVByb3h5PiBjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmLCBS
ZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJik7CiAKICAgICB2b2lkIHBhZ2VCZWdpblVzaW5n
V2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBXZWJzaXRlRGF0YVN0b3Jl
Jik7CkBAIC0yNjIsMTAgKzI0OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFN1cHBvcnRlZFBs
dWdpbihTdHJpbmcmJiBtYXRjaGluZ0RvbWFpbiwgU3RyaW5nJiYgbmFtZSwgSGFzaFNldDxTdHJp
bmc+JiYgbWltZVR5cGVzLCBIYXNoU2V0PFN0cmluZz4gZXh0ZW5zaW9ucyk7CiAgICAgdm9pZCBj
bGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIAotICAgIFByb2Nlc3NJRCBuZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXIoKTsKICAgICBQcm9jZXNzSUQgcHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKTsK
ICAgICB2b2lkIGFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3RpbmcoUHJvY2Vz
c0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmKTsKLSAgICBi
b29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYp
OwogCiAgICAgV2ViUGFnZUdyb3VwJiBkZWZhdWx0UGFnZUdyb3VwKCkgeyByZXR1cm4gbV9kZWZh
dWx0UGFnZUdyb3VwLmdldCgpOyB9CiAKQEAgLTMwNyw4ICsyOTIsNiBAQCBwdWJsaWM6CiAgICAg
QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudCYgaGlzdG9yeUNsaWVudCgpIHsgcmV0dXJu
ICptX2hpc3RvcnlDbGllbnQ7IH0KICAgICBXZWJDb250ZXh0Q2xpZW50JiBjbGllbnQoKSB7IHJl
dHVybiBtX2NsaWVudDsgfQogCi0gICAgQVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQm
IGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIGNvbnN0IHsgcmV0dXJuICptX2N1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudDsgfQotCiAgICAgc3RydWN0IFN0YXRpc3RpY3MgewogICAgICAg
ICB1bnNpZ25lZCB3a1ZpZXdDb3VudDsKICAgICAgICAgdW5zaWduZWQgd2tQYWdlQ291bnQ7CkBA
IC0zMjQsOCArMzA3LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lKCk7CiAgICAgdm9pZCB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogCi0gICAgdm9p
ZCBmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwotCiAgICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hG
YWlsRm9yVGVzdGluZyhib29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1
bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQogICAgIGJvb2wgc2hvdWxkTWFrZU5leHRXZWJQ
cm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE1ha2VO
ZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nOyB9CiAgICAgdm9pZCBzZXRTaG91bGRN
YWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBt
X3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVl
OyB9CkBAIC0zODgsMTkgKzM2OSwxMyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIC8vIE5ldHdv
cmsgUHJvY2VzcyBNYW5hZ2VtZW50Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgZW5zdXJlTmV0
d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUgPSBudWxs
cHRyKTsKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0IHsg
cmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCk7IH0KICAgICB2b2lkIG5ldHdvcmtQcm9jZXNz
Q3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAKLSAgICB2b2lkIGdldE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5
OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkmJik7Ci0KICAgICBib29s
IGlzU2VydmljZVdvcmtlclBhZ2VJRChXZWJQYWdlUHJveHlJZGVudGlmaWVyKSBjb25zdDsKICNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0
Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOworICAgIHN0YXRpYyB2b2lkIGVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0
aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4mJiwgUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7CiAgICAgdm9pZCByZW1vdmVGcm9tU2VydmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNz
UHJveHkmKTsKLSAgICBzaXplX3Qgc2VydmljZVdvcmtlclByb3hpZXNDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb21wdXRlU2l6ZSgpOyB9Ci0gICAgdm9p
ZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoYm9vbCBhbGxvd3Mp
IHsgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIgPSBhbGxvd3M7IH0K
LSAgICBib29sIGFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOyB9Cisg
ICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBzZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNpemUoKTsgfQogICAgIHZvaWQgdXBkYXRlU2Vy
dmljZVdvcmtlclVzZXJBZ2VudChjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCk7CiAgICAgY29uc3Qg
T3B0aW9uYWw8VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllcj4mIHVzZXJDb250ZW50Q29u
dHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNl
ckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNlV29ya2VyOyB9CiAgICAgYm9vbCBoYXNTZXJ2
aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpIGNvbnN0OwpAQCAtNDU5LDgg
KzQzNCw2IEBAIHB1YmxpYzoKICAgICBib29sIGFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5OyB9CiAg
ICAgYm9vbCBzaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uOyB9CiAKLSAgICB2b2lkIHN5bnRoZXNp
emVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKTsKLSAgICAKICNpZiBFTkFCTEUoR0FN
RVBBRCkKICAgICB2b2lkIGdhbWVwYWRDb25uZWN0ZWQoY29uc3QgVUlHYW1lcGFkJiwgV2ViQ29y
ZTo6RXZlbnRNYWtlc0dhbWVwYWRzVmlzaWJsZSk7CiAgICAgdm9pZCBnYW1lcGFkRGlzY29ubmVj
dGVkKGNvbnN0IFVJR2FtZXBhZCYpOwpAQCAtNDk4LDcgKzQ3MSw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCk7CiAKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIHZvaWQgZGlkQ29tbWl0Q3Jvc3NTaXRlTG9h
ZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYg
dG9Eb21haW4sIE9wdGlvblNldDxXZWJDb3JlOjpDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5z
ZmVyOjpGbGFnPiwgV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZp
ZXIpOwogICAgIHZvaWQgc2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJik7CiAgICAgdm9pZCBzZWVkUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0ZvclRlc3RpbmcoY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIGZpcnN0
UGFydHlEb21haW4sIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiB0aGlyZFBhcnR5
RG9tYWluLCBib29sIHNob3VsZFNjaGVkdWxlTm90aWZpY2F0aW9uLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOwogICAgIHZvaWQgc2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1t
ZWRpYXRlbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKQEAgLTUyNSw4ICs0OTcsOCBA
QCBwdWJsaWM6CiAgICAgCiAgICAgUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXImIHBsdWdJbkF1dG9T
dGFydFByb3ZpZGVyKCkgeyByZXR1cm4gbV9wbHVnSW5BdXRvU3RhcnRQcm92aWRlcjsgfQogCi0g
ICAgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOwotICAgIGJv
b2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQorICAgIHN0YXRpYyB2b2lkIHNldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCk7CisgICAgc3RhdGljIGJvb2wgdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIHsgcmV0dXJuIHNfdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzczsgfQogCiAjaWYgRU5BQkxFKENGUFJFRlNfRElSRUNUX01PREUpCiAgICAg
dm9pZCBub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQoY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBPcHRpb25hbDxTdHJpbmc+JiBlbmNvZGVkVmFsdWUpOwpAQCAt
NTQzLDYgKzUxNSwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENF
bmRwb2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVz
c2FnZSk7CiAjZW5kaWYKIAorICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGlj
IFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOwor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3Jh
Z2VEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgp
OworICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0
YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJp
bmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAg
ICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCkBAIC01NTYsOCArNTM5LDYgQEAgcHJpdmF0
ZToKICAgICBXZWJQcm9jZXNzUHJveHkmIGNyZWF0ZU5ld1dlYlByb2Nlc3MoV2Vic2l0ZURhdGFT
dG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6Oklz
UHJld2FybWVkOjpObyk7CiAgICAgdm9pZCBpbml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9j
ZXNzUHJveHkmLCBXZWJzaXRlRGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1l
ZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKIAotICAgIHZvaWQgcGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmKTsKLQogICAgIHZvaWQgaGFuZGxlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHkpOwogICAgIHZv
aWQgaGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChVc2VyRGF0YSYmKT4mJik7CiAKQEAgLTU4MSwxNCArNTYyLDYgQEAgcHJpdmF0
ZToKIAogICAgIGJvb2wgdXNlc1NpbmdsZVdlYlByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2Nv
bmZpZ3VyYXRpb24tPnVzZXNTaW5nbGVXZWJQcm9jZXNzKCk7IH0KIAotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgc3RhdGljIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0g
ICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3Ry
aW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHdlYkNv
bnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBv
cmFyeURpcmVjdG9yeSgpOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lk
IHJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyTm90
aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CkBAIC02MzAsOSArNjAzLDggQEAgcHJpdmF0ZToKICAgICBI
YXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWFrUHRyPFdlYlByb2Nlc3NQcm94eT4+IG1fZHVtbXlQ
cm9jZXNzUHJveGllczsgLy8gTGlnaHR3ZWlnaHQgV2ViUHJvY2Vzc1Byb3h5IG9iamVjdHMgd2l0
aG91dCBiYWNraW5nIHByb2Nlc3MuCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAg
V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXM7Cisg
ICAgc3RhdGljIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoKTsKICAgICBib29sIG1fd2FpdGluZ0ZvcldvcmtlckNvbnRleHRQcm9jZXNzQ29ubmVj
dGlvbiB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vy
dmljZVdvcmtlciB7IGZhbHNlIH07CiAgICAgU3RyaW5nIG1fc2VydmljZVdvcmtlclVzZXJBZ2Vu
dDsKICAgICBPcHRpb25hbDxXZWJQcmVmZXJlbmNlc1N0b3JlPiBtX3NlcnZpY2VXb3JrZXJQcmVm
ZXJlbmNlczsKICAgICBPcHRpb25hbDxVc2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyPiBt
X3VzZXJDb250ZW50Q29udHJvbGxlcklERm9yU2VydmljZVdvcmtlcjsKQEAgLTY0OCw3ICs2MjAs
NiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+
IG1fYXV0b21hdGlvbkNsaWVudDsKICAgICBVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4g
bV9kb3dubG9hZENsaWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0
SGlzdG9yeUNsaWVudD4gbV9oaXN0b3J5Q2xpZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6
OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQ7CiAKICAgICBSZWZQdHI8V2ViQXV0b21hdGlvblNlc3Npb24+IG1fYXV0b21hdGlvblNlc3Np
b247CiAKQEAgLTY4MCw4ICs2NTEsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9tZW1vcnlTYW1w
bGVyRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgZG91YmxlIG1fbWVtb3J5U2FtcGxlckludGVydmFs
IHsgMTQwMC4wIH07CiAKLSAgICBSZWZQdHI8V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlPiBtX3dl
YnNpdGVEYXRhU3RvcmU7Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIFJlZlB0
cjxXZWJDb250ZXh0U3VwcGxlbWVudD4sIFB0ckhhc2g8Y29uc3QgY2hhcio+PiBXZWJDb250ZXh0
U3VwcGxlbWVudE1hcDsKICAgICBXZWJDb250ZXh0U3VwcGxlbWVudE1hcCBtX3N1cHBsZW1lbnRz
OwogCkBAIC03MTQsOCArNjgzLDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9wcm9jZXNzVGVy
bWluYXRpb25FbmFibGVkIHsgdHJ1ZSB9OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQ
cm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7Ci0KICAgICBIYXNoTWFwPHVpbnQ2NF90LCBS
ZWZQdHI8RGljdGlvbmFyeUNhbGxiYWNrPj4gbV9kaWN0aW9uYXJ5Q2FsbGJhY2tzOwogCiAjaWYg
VVNFKFNPVVApCkBAIC04MjAsNyArNzg3LDcgQEAgcHJpdmF0ZToKICNlbHNlCiAgICAgYm9vbCBt
X2lzRGVsYXllZFdlYlByb2Nlc3NMYXVuY2hEaXNhYmxlZCB7IGZhbHNlIH07CiAjZW5kaWYKLSAg
ICBib29sIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyB7IGZhbHNlIH07CisgICAg
c3RhdGljIGJvb2wgc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwogCiAjaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluPiBtX2RvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uOwpAQCAtODMxLDIwICs3
OTgsNiBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpCi17
Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1l
c3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4o
bWVzc2FnZSksIDApOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBt
ZXNzYWdlKQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotfQotCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0
IFQmIG1lc3NhZ2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcAppbmRleCBkNjYxMDMzOGI2Y2Y2MGEyN2E2Zjc1ZGFlYzM0OWE4ZjcyYWIzYjg1Li4yZTU0
YTgxMTVjNDg4N2YwYTFkZDgzZWRmNWJkY2JlM2E0MDhhMjU3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTczOCw3ICs3MzgsNyBAQCB2b2lkIFdl
YlByb2Nlc3NQcm94eTo6Z2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24odWludDY0X3QgcGx1Z2lu
UHJvY2Vzc1Rva2VuLCBNZQogCiB2b2lkIFdlYlByb2Nlc3NQcm94eTo6Z2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC0+
Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CisgICAg
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CiB9CiAKICNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2Nv
YS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KaW5kZXggN2M0NDA4NTE2Nzcz
NjhiNWRmODlhODZmZjRkM2I1MTUzNGI5MGJiNy4uYTIwNzI1NDg4YmI5MzllMzdhNmE0ZGJkNzRm
NWU3NTUzMzg3MGI2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW1wb3J0ICJDb29raWVTdG9yYWdlVXRpbHNDRi5oIgogI2ltcG9y
dCAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzUHJv
eHkuaCIKICNpbXBvcnQgIlNhbmRib3hVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlN0b3JhZ2VNYW5h
Z2VyLmgiCiAjaW1wb3J0ICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKQEAgLTQ0LDYg
KzQ1LDcgQEAKICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1By
b2Nlc3NQcml2aWxlZ2UuaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4KKyNpbXBvcnQgPHd0Zi9jb2Nv
YS9FbnRpdGxlbWVudHMuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC01NjIsNCArNTY0LDkgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZWluaXRpYWxpemVBcHBCb3VuZERvbWFpbnMoKQogfQogI2VuZGlmCiAKK2Jv
b2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rp
bmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKK3sKKyAgICByZXR1cm4gV1RGOjpoYXNFbnRp
dGxlbWVudChuZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBl
bnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCAw
ODMwY2E3NWE3ZmMzOGU2NDViNzc1YjM5YjMzNzVkNGMyMDUwMzdkLi4zZDI5MTU5MDRkM2U1NzQy
Yjg2NzIyNWRhODNlZWYxMGMwNzczODhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMzcsNiArMzcs
NyBAQAogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUg
IlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNsdWRlICJXZWJCYWNrRm9yd2FyZENhY2hlLmgi
CisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0Mklu
aXRpYWxpemUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9j
ZXNzQ2FjaGUuaCIKQEAgLTc1LDYgKzc2LDEwIEBACiAjaW5jbHVkZSAiU09BdXRob3JpemF0aW9u
Q29vcmRpbmF0b3IuaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAi
RGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogc3RhdGljIGJvb2wgYWxsb3dzV2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2luczsKQEAg
LTgzLDEzICs4OCwxOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFsbG93V2Vic2l0ZURhdGFS
ZWNvcmRzRm9yQWxsT3JpZ2lucygpCiAgICAgYWxsb3dzV2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxs
T3JpZ2lucyA9IHRydWU7CiB9CiAKLXN0YXRpYyBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJz
aXRlRGF0YVN0b3JlKj4mIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkKK3N0YXRpYyBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4mIGFsbERhdGFTdG9yZXMoKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPj4gbWFwOwogICAgIHJl
dHVybiBtYXA7CiB9CiAKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRh
U3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0YVN0b3JlJik+JiYgZnVuY3Rpb24pCit7Cisg
ICAgZm9yIChhdXRvKiBkYXRhU3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAg
ICAgIGZ1bmN0aW9uKCpkYXRhU3RvcmUpOworfQorCiBSZWY8V2Vic2l0ZURhdGFTdG9yZT4gV2Vi
c2l0ZURhdGFTdG9yZTo6Y3JlYXRlTm9uUGVyc2lzdGVudCgpCiB7CiAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbjo6
Y3JlYXRlKElzUGVyc2lzdGVudDo6Tm8pLCBQQUw6OlNlc3Npb25JRDo6Z2VuZXJhdGVFcGhlbWVy
YWxTZXNzaW9uSUQoKSkpOwpAQCAtMTE1LDcgKzEyNiw3IEBAIFdlYnNpdGVEYXRhU3RvcmU6Oldl
YnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYmIGNvbmZp
Z3VyCiAjZW5kaWYKIHsKICAgICBXVEY6OnNldFByb2Nlc3NQcml2aWxlZ2VzKGFsbFByaXZpbGVn
ZXMoKSk7Ci0gICAgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICByZWdpc3Rl
cldpdGhTZXNzaW9uSURNYXAoKTsKICAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIAogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CkBAIC0xMjgsMTcgKzEzOSwxMiBAQCBXZWJzaXRlRGF0
YVN0b3JlOjp+V2Vic2l0ZURhdGFTdG9yZSgpCiAKICAgICBwbGF0Zm9ybURlc3Ryb3koKTsKIAot
ICAgIGlmIChtX3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KSB7Ci0gICAgICAgIEFTU0VSVChub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25J
RCkgPT0gdGhpcyk7Ci0gICAgICAgIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vz
c2lvbklEKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29s
OjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwotICAgICAgICB9Ci0gICAg
fQorICAgIEFTU0VSVChhbGxEYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsK
KyAgICBhbGxEYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnJlbW92ZVNlc3Npb24oKnRoaXMpOwogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKLSAg
ICAgICAgaWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94eSA9IEdQVVByb2Nlc3NQcm94eTo6c2luZ2xl
dG9uSWZDcmVhdGVkKCkpCi0gICAgICAgICAgICBncHVQcm9jZXNzUHJveHktPnJlbW92ZVNlc3Np
b24obV9zZXNzaW9uSUQpOworICAgIGlmIChhdXRvKiBncHVQcm9jZXNzUHJveHkgPSBHUFVQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQorICAgICAgICBncHVQcm9jZXNzUHJveHkt
PnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwogI2VuZGlmCiB9CiAKQEAgLTE2OSwxNyArMTc1
LDMzIEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpCiAg
ICAgcmV0dXJuICEhZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpOwogfQogCi12b2lkIFdlYnNpdGVE
YXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKK3ZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKIHsKLSAgICBpZiAobV9zZXNzaW9u
SUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBhdXRv
IHJlc3VsdCA9IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsK
LSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBh
dXRvIHJlc3VsdCA9IGFsbERhdGFTdG9yZXMoKS5hZGQobV9zZXNzaW9uSUQsIHRoaXMpOworICAg
IEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK1dlYnNpdGVE
YXRhU3RvcmUqIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklE
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK3sKKyAgICByZXR1cm4gYWxsRGF0YVN0b3Jlcygp
LmdldChzZXNzaW9uSUQpOworfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJzaXRlRGF0YVN0
b3JlOjpuZXR3b3JrUHJvY2VzcygpCit7CisgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKSB7Cisg
ICAgICAgIGlmIChtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IG1fc2Vzc2lvbklEID09IFBB
TDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCisgICAgICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpjcmVhdGUoKTsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigq
dGhpcyk7CiAgICAgfQorCisgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwogfQogCi1XZWJz
aXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3Rv
cmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQorTmV0d29ya1Byb2Nlc3NQ
cm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3MoKSBjb25zdAogewotICAgIHJl
dHVybiBzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSA/IG5v
bkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCkgOiBudWxscHRyOworICAgIHJldHVy
biBjb25zdF9jYXN0PFdlYnNpdGVEYXRhU3RvcmUmPigqdGhpcykubmV0d29ya1Byb2Nlc3MoKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlclByb2Nlc3MoV2ViUHJvY2Vzc1By
b3h5JiBwcm9jZXNzKQpAQCAtMTk1LDEyICsyMTcsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnVucmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKICAgICBtX3Byb2Nl
c3Nlcy5yZW1vdmUocHJvY2Vzcyk7CiB9CiAKLVdlYlByb2Nlc3NQb29sKiBXZWJzaXRlRGF0YVN0
b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkKLXsKLSAgICBhdXRv
IHBvb2xzID0gcHJvY2Vzc1Bvb2xzKDEpOwotICAgIHJldHVybiBwb29scy5pc0VtcHR5KCkgPyBu
dWxscHRyIDogcG9vbHMuYmVnaW4oKS0+Z2V0KCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKQogewogICAgIGlmIChtX2hhc1Jlc29s
dmVkRGlyZWN0b3JpZXMpCkBAIC00NDAsMjggKzQ1NiwyMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmZldGNoRGF0YUFuZEFwcGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBl
cywgTwogI2VuZGlmCiAKICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1
dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJz
aXN0ZW50KCkpOwotICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0Fj
Y2Vzc1R5cGU6Ok5vbmUpIHsKLSAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNj
ZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xz
KCkgOiBwcm9jZXNzUG9vbHMoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBv
b2xzKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewot
ICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAg
ICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICBzd2l0
Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgeworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5
cGU6OkxhdW5jaDoKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgQVNTRVJUKG1f
bmV0d29ya1Byb2Nlc3MpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFByb2Nlc3NB
Y2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
IHsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7
Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZmV0Y2hXZWJzaXRl
RGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3IsIHByb2Nlc3NQb29sXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkgeworICAgICAgICAg
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5
cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKFdlYnNpdGVEYXRhIHdlYnNp
dGVEYXRhKSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5k
aW5nQ2FsbGJhY2soV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToK
KyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgYXV0byB3ZWJQcm9jZXNzQWNjZXNzVHlwZSA9
IGNvbXB1dGVXZWJQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFGZXRjaChkYXRhVHlwZXMsICFpc1Bl
cnNpc3RlbnQoKSk7CkBAIC03MjQsMzEgKzczMywyNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGlt
ZQogICAgIGJvb2wgZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhID0g
ZmFsc2U7CiAjZW5kaWYKICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1
dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFpc1Bl
cnNpc3RlbnQoKSk7Ci0gICAgaWYgKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNz
QWNjZXNzVHlwZTo6Tm9uZSkgewotICAgICAgICBhdXRvIHBvb2xzID0gbmV0d29ya1Byb2Nlc3NB
Y2Nlc3NUeXBlID09IFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2ggPyBlbnN1cmVQcm9jZXNzUG9v
bHMoKSA6IHByb2Nlc3NQb29scygpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cG9vbHMpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7
Ci0gICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAg
ICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKLSAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLQorICAgIHN3
aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNz
VHlwZTo6TGF1bmNoOgorICAgICAgICBuZXR3b3JrUHJvY2VzcygpOworICAgICAgICBBU1NFUlQo
bV9uZXR3b3JrUHJvY2Vzcyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUHJvY2Vz
c0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgorICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykgewogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2so
KTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJz
aXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0gewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRv
ci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgICAgICAgICAgZGlkTm90aWZ5TmV0d29ya1By
b2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhID0gdHJ1ZTsKICNlbmRpZgogICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CisgICAgICAgIGJy
ZWFrOwogICAgIH0KIAogICAgIGF1dG8gd2ViUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlV2Vi
UHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQo
KSk7CkBAIC04OTMsMTQgKzg5NSw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0
YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAjaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5z
KFdlYnNpdGVEYXRhVHlwZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcykpIHsKICAgICAgICAgaWYg
KCFkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEpIHsKLSAgICAgICAg
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAg
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2Fs
bGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEo
bV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0gewotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQ
ZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVX
ZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1v
dmVQZW5kaW5nQ2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKQEAgLTk5NCwxMiAr
OTkxLDEwIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0Fj
Y2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxh
dW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAg
ICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOworICAgICAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CkBAIC0xMDIxLDcgKzEwMTYs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAg
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lu
cyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBvcmlnaW5zLCBjb29raWVIb3N0TmFtZXMsIEhTVFND
YWNoZUhvc3ROYW1lcywgcmVnaXN0cmFibGVEb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBw
cm9jZXNzUG9vbF0geworICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRl
RGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9z
dE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNr
QWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3Jl
Z2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAgICAgICAg
IH0KQEAgLTExODAsMTggKzExNzUsMTIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVE
YXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3QgVmUKIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoU2Vj
b25kcyBzZWNvbmRzKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3Jr
UHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29y
a2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhzZWNvbmRzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhzZWNvbmRzKSwg
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9y
VGVzdGluZzo6UmVwbHkoKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRT
ZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKCksIE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGlu
Zzo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JU
ZXN0aW5nKCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0
Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMTIwMSw4ICsxMTkwLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQs
IENvbXBsZXQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtX3Nlc3Npb25JRCwg
bWF4aW11bUVudHJ5Q291bnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9u
SUQsIG1heGltdW1FbnRyeUNvdW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVU
YXJnZXRDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTIxMSw4ICsxMTk5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVu
dHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBsZXRpb24KICAgICAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1fc2Vzc2lvbklELCBwcnVuZVRhcmdldENvdW50
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNldFBydW5lRW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3Vu
dCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjIxLDggKzEyMDgsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMs
IENvbXBsZXRpb25IYW5kbGVyPAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nl
c3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyaW5nVGltZShtX3Nl
c3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQs
IHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMg
c2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTIzMSwyMCArMTIxNywxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1pbmltdW1U
aW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsCiAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCBzZWNv
bmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Np
b25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICAgICAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmR1bXBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzUHJl
dmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyNTYsMTIgKzEyMzUsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHBy
b2Nlc3MtPmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNQcmV2
YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sIGlzUHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyNzMsMTIg
KzEyNDcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChibwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgICAgIHByb2Nlc3MtPmlzR3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI5Miw4ICsxMjYx
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm8KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9v
bHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJl
dmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUo
Y29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTEzMDcsMTAgKzEyNzUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBy
ZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aQogICAg
IAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0
UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNlRm9y
RGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wgaXNWZXJ5UHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEz
MjIsMTIgKzEyODcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJl
c291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcgogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTM0MSwxMCArMTMwMSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VmVyeVBy
ZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFs
KGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTEzNTMsOCArMTMxMCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxk
Q2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2CiAgICAgCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFs
KG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9y
ZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVV
UkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEz
NjgsMjIgKzEzMjQsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY28KIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1
YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIo
Y29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3Vi
RnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJG
cmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVy
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBV
UkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xMzk3LDIzICsxMzQ1LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVCiAK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNv
dXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNS
ZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNv
bnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJl
ZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZy
YW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJy
ZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0MjcsMTAgKzEzNjYsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBV
UkwmIHN1YnJlc291cmNlVVJMLAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29u
c3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ0MiwxMiAr
MTM3OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
c3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVj
dGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJh
bWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDU5LDEyICsxMzkwLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiB0b3BG
cmFtZVVSTCwgY29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRp
cmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1l
VVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZy
b20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ3Niwy
NSArMTQwMiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbgogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNz
LT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZy
YW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20g
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRG
cm9tLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
b29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8o
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZy
b20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTUwNiw2MCArMTQyMSw0MSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPAogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPmNsZWFyUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyUHJldmFsZW50UmVzb3Vy
Y2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNl
dFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnJlc2V0UGFy
YW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRQYXJh
bWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3VibWl0VGVsZW1ldHJ5KCkKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c3Vi
bWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25JRCwgW10geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KFdhbGxU
aW1lIG1vZGlmaWVkU2luY2UsIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyBzaG91bGRHcmFu
ZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UsIHNob3VsZEdyYW5kZmF0aGVyLCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklE
LCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgc3RydWN0IENh
bGxiYWNrQWdncmVnYXRvciA6IFJlZkNvdW50ZWQ8Q2FsbGJhY2tBZ2dyZWdhdG9yPiB7Ci0gICAg
ICAgIENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKKyAgICBzdHJ1Y3QgTG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IgOiBSZWZDb3Vu
dGVkPExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yPiB7CisgICAgICAgIExvY2FsQ2FsbGJhY2tBZ2dy
ZWdhdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAg
ICAgICAgICAgOiBtX2NvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAg
ICAgICB9OwogCi0gICAgICAgIH5DYWxsYmFja0FnZ3JlZ2F0b3IoKQorICAgICAgICB+TG9jYWxD
YWxsYmFja0FnZ3JlZ2F0b3IoKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwogCkBAIC0xNTc0LDM4ICsxNDcwLDMxIEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KENvbXBsZXRpb25IYW5k
bGVyPHZvCiAgICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiBtX2NvbXBsZXRpb25IYW5k
bGVyOwogICAgICAgICBWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGly
ZFBhcnR5RGF0YT4gbV9yZXN1bHRzOwogICAgIH07Ci0KLSAgICBSZWZQdHI8Q2FsbGJhY2tBZ2dy
ZWdhdG9yPiBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBhZG9wdFJlZihuZXcgQ2FsbGJhY2tBZ2dyZWdh
dG9yKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNl
bmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIHByb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsK
LSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKS5nZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3IsIHByb2Nlc3NQb29sXShWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5hZGRSZXN1bHQoV1RGTW92ZShkYXRhKSk7Ci0gICAgICAgICAgICB9KTsKKyAg
ICAKKyAgICBhdXRvIGxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yID0gYWRvcHRSZWYobmV3IExvY2Fs
Q2FsbGJhY2tBZ2dyZWdhdG9yKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7CisgICAgCisg
ICAgYXV0byB3dGZDYWxsYmFja0FnZ3JlZ2F0b3IgPSBXVEY6OkNhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGxvY2FsQ2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbbG9jYWxDYWxsYmFja0FnZ3JlZ2F0
b3JdKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRh
PiYmIGRhdGEpIHsKKyAgICAgICAgICAgIGxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRSZXN1
bHQoV1RGTW92ZShkYXRhKSk7CiAgICAgICAgIH0pOwotICAgIH0KKyAgICB9KTsKKyAgICAKKyAg
ICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29s
cygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
SW1tZWRpYXRlbHkoW3d0ZkNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KFNob3VsZEdy
YW5kZmF0aGVyU3RhdGlzdGljcyBzaG91bGRHcmFuZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAgICAgCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIHsgfSwg
c2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnQobV9zZXNzaW9uSUQsIHsgfSwgc2hvdWxkR3JhbmRmYXRoZXIsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNv
b2tpZUJsb2NraW5nVXBkYXRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZVN0YXRpc3Rp
Y3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTYxNCwyNCArMTUwMywxMyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhDb21wbGV0
aW9uSGFuZAogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vz
c2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nl
c3NpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5zdGF0aXN0aWNzRGF0YWJh
c2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbXBsZXRpb25I
YW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnN0YXRpc3RpY3NEYXRhYmFzZUhh
c0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFVSTCYgdXJsLCBTZWNv
bmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE2NDMsMjIgKzE1MjEsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0
U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGEKIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRMYXN0U2Vlbiht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgc2Vjb25kcywg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKGludCBkb21h
aW5JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmRv
bWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKG1fc2Vzc2lvbklE
LCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29u
c3QgVVJMJiB0b3BGcmFtZVVybDEsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwyLCBTZWNvbmRzIGxh
c3RTZWVuLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgU2Vjb25kcyBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgYm9vbCBpc1ByZXZhbGVudCwgYm9vbCBp
c1ZlcnlQcmV2YWxlbnQsIHVuc2lnbmVkIGRhdGFSZWNvcmRzUmVtb3ZlZCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY3MCwxMCArMTU0MCw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVS
TCYgdXJsLCBjb25zdCBVUkwmIHRvcEZyCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgcHJvY2Vzcy0+bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZy
YW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQs
IGRhdGFSZWNvcmRzUmVtb3ZlZCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkubWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5n
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBt
b3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBp
c1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGlj
Rm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIGJvb2wg
aXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgYm9vbCBpc1ByZXZhbGVudCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY4NSwx
OCArMTU1MiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0
aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGhhZAogCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBo
YWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWws
IGlzUHJldmFsZW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGlu
ZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNl
ckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1By
ZXZhbGVudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFs
dWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChtX3Nlc3Npb25J
RCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCht
X3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3Qo
Ym9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTcwNCw4ICsxNTY3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRJc1J1bm5p
bmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChib29sIHZhbHVlLCBDb21wbGUKICAgICB1c2VF
eHBsaWNpdElUUFN0YXRlKCk7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nl
c3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xNzE2LDcgKzE1NzgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VB
Y2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELAogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgd2ViUGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhtX3Nlc3Npb25JRCwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxs
U3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogCkBAIC0xNzI0LDggKzE1ODYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9u
SAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25J
RCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9n
VXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzM5LDEwICsxNjAwLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+bG9nVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLmxvZ1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xNzU0LDEzICsxNjEyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRV
c2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHYKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aGFzSGFkVXNlckludGVy
YWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuaGFzSGFkVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UoY29u
c3QgVVJMJiBzdWJVcmwsIGNvbnN0IFVSTCYgdG9wVXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc3MiwxMyArMTYyNCw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UoY29uc3Qg
VVJMJiBzdWJVcmwsIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAg
IHByb2Nlc3MtPmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFs
c2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9u
Y2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViVXJsIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlv
bihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTc5MiwxMCArMTYzOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xl
YXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvCiAg
ICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFy
VXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wg
aXNHcmFuZGZhdGhlcmVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xODA5LDEwICsxNjUyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRH
cmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgQ28KICAg
ICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNl
dEdyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VXNlSVRQ
RGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTgyMSwxMCArMTY2MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNz
LT5zZXRVc2VJVFBEYXRhYmFzZShtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VXNlSVRQRGF0YWJhc2Uo
bV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JU
ZXN0aW5nKGNvbnN0IFVSTCYgZnJvbVVSTCwgY29uc3QgVVJMJiB0b1VSTCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgzMyw2MiArMTY3MCwzOCBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRp
b25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3Jh
dGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
ZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvVVJMIH0sIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29y
YXRpb25Gb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZv
clRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlv
bkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJM
JiB1cmwsIGJvb2wgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5kZWxldGVDb29raWVzRm9yVGVz
dGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5j
bHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2ll
cywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0xvY2FsU3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25I
YW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0xvY2FsU3RvcmFnZShtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0lzb2xhdGVk
U2Vzc2lvbkZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+aGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIo
ZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhib29sIGVuYWJsZWQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxk
RG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0xOTE5LDEwICsxNzMyLDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKFdl
YkNvcmU6OlRoaXJkUGFydHlDb29raWUKICAgICAgICAgICAgIHdlYlByb2Nlc3Muc2V0VGhpcmRQ
YXJ0eUNvb2tpZUJsb2NraW5nTW9kZShibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFRoaXJkUGFy
dHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBh
cnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lvbklELCBibG9ja2luZ01vZGUsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRl
c3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xOTMwLDEwICsxNzQwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2UK
ICAgICBhdXRvIGZsYWcgPSBlbmFibGVkID8gV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudEVuYWJsZWQ6OlllcyA6IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFi
bGVkOjpObzsKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudEZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZsYWcsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhib29sIGVuYWJs
ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5
NDEsMjAgKzE3NDgsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICBhdXRvIG1vZGUgPSBlbmFibGVkID8gV2ViQ29yZTo6Rmlyc3RQ
YXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tpZXMgOiBXZWJDb3JlOjpGaXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6Tm9uZTsKIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5zZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3Rpbmco
bV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVT
aXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUb1NhbWVTaXRlU3Ry
aWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhjb25zdCBVUkwmIGZp
cnN0UGFydHlVUkwsIGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NjYsOCArMTc2Nyw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVE
b21haW5Gb3JUZXN0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRl
c3RpbmcobV9zZXNzaW9uSUQsIGZpcnN0UGFydHlVUkwuaG9zdCgpLnRvU3RyaW5nKCksIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5G
b3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJzdFBhcnR5VVJMLmhvc3QoKS50b1N0cmluZygpLCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcoY29uc3QgVVJMJiBjbmFtZVVS
TCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk3
OSwxOCArMTc3OSwxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKAogCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFRo
aXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN5bmNMb2NhbFN0b3JhZ2UoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5jTG9jYWxTdG9yYWdlKCks
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3Rv
cmFnZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBz
ZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xOTk4LDggKzE3OTMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdl
Q2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQwogI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZv
clByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENhY2hlTWF4QWdlQ2FwRm9yUHJl
dmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Vjb25kcyk7CiAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKQEAgLTIwMDksMjYgKzE4MDMsMTIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhTZWNvbmRzIHNlY29uZHMs
IEMKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVu
dFJlc291cmNlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRD
YWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldENhY2hl
TWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAjZW5kaWYK
IH0KIAotYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjppc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQ
cm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHByb2Nlc3NQ
b29sRGF0YVN0b3JlID0gcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpKQotICAgICAgICBy
ZXR1cm4gcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPT0gdGhpczsKLSAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3NQcm94eSA9IHByb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIHJl
dHVybiBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5oYXNTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0
ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uc3QKIHsKICAgICBIYXNo
U2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IHByb2Nlc3NQb29sczsKQEAgLTIwNDMsOSArMTgy
Myw2IEBAIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6
cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uCiAgICAgaWYgKHByb2Nlc3NQb29scy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgb25lIG9mIHRoZSBsZWdhY3kgZGF0
YSBzdG9yZXMuCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9v
bDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmICghaXNBc3NvY2lhdGVkUHJv
Y2Vzc1Bvb2woKnByb2Nlc3NQb29sKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQogICAg
ICAgICAgICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9jZXNzUG9vbCk7CiAgICAgICAgICAgICBpZiAo
cHJvY2Vzc1Bvb2xzLnNpemUoKSA9PSBsaW1pdCkKICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTIwODQsOCArMTg2MSw3IEBAIHN0YXRpYyBTdHJpbmcgY29tcHV0ZU1lZGlhS2V5RmlsZShjb25z
dCBTdHJpbmcmIG1lZGlhS2V5RGlyZWN0b3J5KQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFs
bG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDZXJ0aWZpY2F0ZUlu
Zm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7Ci0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVj
aWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8o
KSwgaG9zdCksIDApOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0
ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKIH0KIAogVmVjdG9yPFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luRGF0YT4gV2Vic2l0ZURhdGFTdG9yZTo6bWVkaWFLZXlPcmlnaW5zKGNvbnN0
IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSkKQEAgLTIxNDAsNiArMTkxNiwzMCBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1l
ZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksCiAgICAgfQogfQogCit2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nl
c3MpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgp
OworICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOworfQorCit2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNlbmRQcmVwYXJlVG9TdXNwZW5kKElzU3VzcGVuc2lvbkltbWluZW50OjpObywg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKQorewor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JU
ZXN0aW5nKCk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNz
RGlkUmVzdW1lKCkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcm9jZXNzRGlkUmVzdW1l
KCk7Cit9CisKIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQoKSBjb25zdAogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBA
IC0yMTY5LDE3ICsxOTY5LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgICAgICAKICAgICAgICAgcmVz
b2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgcHJvY2Vzc1Bv
b2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpKTsKKyAgICAg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpLCAwKTsKKyAgICAg
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAgICAgICAgICAg
cHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHRydWUpLCBtX3Nlc3Npb25J
RCk7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c2Vu
ZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpKTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpLCAwKTsKKyAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5k
VG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChmYWxzZSksIG1fc2Vzc2lvbklEKTsKLSAgICB9CiAKICAg
ICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkID0gZmFsc2U7CiAjZWxzZQpAQCAtMjE5
MSw4ICsxOTg5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN0
YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBj
YWxsYmFjaykKIHsKICAgICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRU
b05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NMb2dUZXN0aW5nRXZlbnQodHJ1ZSksIDApOwogICAgIH0KICAgICAKICAgICBtX3N0YXRp
c3RpY3NUZXN0aW5nQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKQEAgLTIyMTEsOCArMjAw
OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZShib29sIGVuYWJsZWQsIENvbXBsZXRpCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWdNb2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CiAgICAgVU5VU0VEX1BB
UkFNKGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIyMjcsMjAgKzIwMjMsMTUgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Np
b25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotI2VuZGlmCisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKKyNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworI2VuZGlmCiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2Rl
KGJvb2wgZW5hYmxlZCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEFk
Q2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKIH0KIAogI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMjYyLDQ4ICsyMDUzLDE5IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzSW5XZWJQcm9jZXNz
ZXMoQ29tcGxldGlvbkhhbmRsCiB9CiAjZW5kaWYKIAotVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4g
V2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMoKSBjb25zdAotewotICAgIHJldHVybiBj
b3B5VG9WZWN0b3IobV9wZW5kaW5nQ29va2llcyk7Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6YWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSkKLXsKLSAg
ICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZUlmKFsmY29va2llXShhdXRvJiBwZW5kaW5nQ29va2ll
KSB7Ci0gICAgICAgIHJldHVybiBwZW5kaW5nQ29va2llLmlzS2V5RXF1YWwoY29va2llKTsKLSAg
ICB9KTsKLSAgICBtX3BlbmRpbmdDb29raWVzLmFkZChjb29raWUpOwotfQotCi12b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBj
b29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmUoY29va2llKTsKLX0KLSAgICAK
LXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcygpCi17Ci0gICAgbV9w
ZW5kaW5nQ29va2llcy5jbGVhcigpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZsdXNo
Q29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQb29s
IDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+Zmx1c2hDb29raWVzKHNlc3Npb25JRCgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCgpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWxsb3dz
QW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYm9vbCBhbGxvd3MpCiB7Ci0gICAgZm9yIChh
dXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxs
b3dzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvcldlYlNvY2tldDo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZUZvcldlYlNvY2tldChhbGxvd3MpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0OjpSZXBseSgpLCAwKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKCkKIHsKLSAgICBmb3Ig
KGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5jbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCgpKTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVh
ckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCgpKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6ZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKQEAg
LTIzMjksOCArMjA5MSw2IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRh
U3RvcmU6OnBhcmFtZXRlcnMoKQogCiAgICAgcmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3Nhcnko
KTsKIAotICAgIHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBwZW5kaW5nQ29va2llcygpOwot
CiAgICAgYXV0byByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0
aW9uLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7CiAgICAgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlIYW5kbGU7CiAgICAg
aWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKQEAgLTI0MzUs
NyArMjE5NSwxMCBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3Jl
OjpwYXJhbWV0ZXJzKCkKICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVkID0gbV9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZDsKICNlbmRpZgogICAgIHBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRl
cnMocGFyYW1ldGVycyk7Ci0KKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2lu
Z1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24o
KTsKKyNlbmRpZgorICAgIAogICAgIHJldHVybiBwYXJhbWV0ZXJzOwogfQogCkBAIC0yNDY1LDEw
ICsyMjI4LDYgQEAgQVBJOjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6OmNvb2tp
ZVN0b3JlKCkKICAgICByZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAKLXZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQotewotfQotCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBpZiAoIWlzUGVyc2lzdGVudCgpKSB7CkBAIC0yNDc2LDIzICsyMjM1
LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5j
dGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VECiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpLmdldExvY2FsU3Rv
cmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgewotICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7Ci0gICAgICAgIH0pOwotICAgICAgICAvLyBGSVhN
RTogU3VwcG9ydCBmZXRjaGluZyBmcm9tIG11bHRpcGxlIHBvb2xzLgotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgQVNTRVJUKCFjb21wbGV0aW9uSGFuZGxlcik7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMpIHsKKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7CisgICAgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UXVvdGEobV9zZXNzaW9u
SUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0Ep
CkBAIC0yNTE4LDcgKzIyNjksMTIgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpodHRwM0VuYWJs
ZWQoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZgorCitib29sIFdlYnNpdGVEYXRh
U3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmlu
ZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkK
IAogI2lmICFVU0UoR0xJQikKIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
ZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQpAQCAtMjUzMCwzNSArMjI4NiwxOCBA
QCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNT
dG9yYWdlRGlyZWN0b3J5KCkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW5hbWVPcmlnaW5J
bldlYnNpdGVEYXRhKFVSTCYmIG9sZE5hbWUsIFVSTCYmIG5ld05hbWUsIE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp0aGlz
KTsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRh
KG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW5h
bWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRh
VHlwZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShBUFBf
Qk9VTkRfRE9NQUlOUykKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzQXBwQm91bmRTZXNzaW9u
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0
CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzQXBwQm91bmRTZXNzaW9uKG1f
c2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuaGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJB
cHBCb3VuZFNlc3Npb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bv
b2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5jbGVhckFwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFp
bnNUb0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMjU4MCw3ICsyMzE5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpm
b3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGUK
IAogICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhnbG9iYWxEZWZhdWx0RGF0YVN0b3JlKCku
Z2V0KCksICphcHBCb3VuZERvbWFpbnMpOwogCi0gICAgZm9yIChhdXRvKiBzdG9yZSA6IG5vbkRl
ZmF1bHREYXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAgZm9yIChhdXRvKiBzdG9yZSA6IGFsbERh
dGFTdG9yZXMoKS52YWx1ZXMoKSkKICAgICAgICAgcHJvcGFnYXRlQXBwQm91bmREb21haW5zKHN0
b3JlLCAqYXBwQm91bmREb21haW5zKTsKIH0KIApAQCAtMjU4OCwxMCArMjMyNyw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKGNvbnN0IEhhc2hTZXQ8
V2ViQ29yZTo6UmVnaXN0cmFiCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0QXBwQm91bmREb21haW5zRm9yUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBcHBCb3VuZERvbWFpbnNGb3JS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogI2VuZGlmCiAKQEAgLTI1OTksMTYgKzIzMzUsMTQgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhj
b25zdCBTdHJpbmcmIGJ1bmQKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vz
c1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5k
bGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxl
SWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRl
bnRpZmllcihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5k
ZXggMGRjOTFmMjNjNDE1NDM5NWM4ZWJmODkwZjM1YmQwMTgwY2Q1MWFhZC4uYjU1OGExZDhlMTdj
ZjUxNmJmODVmNTE5M2UxNDBjOWIwNTlmZmFmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaApAQCAtNzUsNiArNzUs
NyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOwogY2xh
c3MgU2VjS2V5UHJveHlTdG9yZTsKIGNsYXNzIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOworY2xh
c3MgTmV0d29ya1Byb2Nlc3NQcm94eTsKIGNsYXNzIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9y
OwogY2xhc3MgV2ViQ2VydGlmaWNhdGVJbmZvOwogY2xhc3MgV2ViUGFnZVByb3h5OwpAQCAtMTA5
LDcgKzExMCwxMiBAQCBwdWJsaWM6CiAgICAgV2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURh
dGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB+V2Vic2l0ZURh
dGFTdG9yZSgpOwogCi0gICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nTm9uRGVm
YXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CisgICAgc3RhdGljIHZv
aWQgZm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0YVN0b3Jl
Jik+JiYpOworICAgIAorICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKCkg
Y29uc3Q7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MoKTsKKworICAg
IHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQ
QUw6OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlzUGVyc2lzdGVudCgpIGNvbnN0IHsgcmV0dXJu
ICFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9CiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTExOSw2ICsxMjUsMTEgQEAg
cHVibGljOgogICAgIAogICAgIGNvbnN0IFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIHBy
b2Nlc3NlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc2VzOyB9CiAKKyAgICB2b2lkIHRlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJl
VG9TdXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZv
aWQgc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOwor
ICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7CisKICAgICBib29sIHJlc291
cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZChib29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUoKSBjb25zdDsKQEAgLTIzNSwxNSArMjQ2LDggQEAgcHVibGljOgogCiAgICAg
RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1
cm4gbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bv
b2wqIHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlz
QXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycyBwYXJhbWV0ZXJzKCk7CiAKLSAgICBWZWN0b3I8V2ViQ29y
ZTo6Q29va2llPiBwZW5kaW5nQ29va2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nv
b2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29r
aWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVz
KCk7CiAgICAgdm9pZCBmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
ICAgICB2b2lkIGNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKIApAQCAtMjcyLDggKzI3Niw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldE1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24o
V2ViQ29yZTo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbiYmKTsKICNlbmRpZgog
Ci0gICAgdm9pZCBkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAgY29uc3QgV2Vic2l0
ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24oKSB7IHJldHVybiBtX2NvbmZp
Z3VyYXRpb24uZ2V0KCk7IH0KIAogICAgIFdlYnNpdGVEYXRhU3RvcmVDbGllbnQmIGNsaWVudCgp
IHsgcmV0dXJuIG1fY2xpZW50LmdldCgpOyB9CkBAIC0yODMsNiArMjg1LDggQEAgcHVibGljOgog
CiAgICAgdm9pZCByZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFVSTCYmLCBVUkwmJiwgT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAg
ICBib29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmlu
ZyYpOworCiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICAgICBXZWJEZXZpY2VPcmll
bnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXImIGRldmljZU9yaWVudGF0aW9uQW5kTW90
aW9uQWNjZXNzQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rp
b25BY2Nlc3NDb250cm9sbGVyOyB9CiAjZW5kaWYKQEAgLTM1OSw3ICszNjMsNyBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5
c1N0b3JhZ2VEaXJlY3RvcnksIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UpOwogICAgIHN0YXRpYyB2
b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rv
cnksIGNvbnN0IEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYpOwogCi0gICAg
dm9pZCBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOworICAgIHZvaWQgcmVnaXN0ZXJX
aXRoU2Vzc2lvbklETWFwKCk7CiAKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpCiAgICAg
c3RhdGljIE9wdGlvbmFsPEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+PiBhcHBC
b3VuZERvbWFpbnNJZkluaXRpYWxpemVkKCk7CkBAIC0zOTcsOCArNDAxLDYgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCB7IHRydWUgfTsK
ICNlbmRpZgogCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1fcGVuZGluZ0Nvb2tpZXM7
Ci0gICAgCiAgICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3NlczsKIAog
ICAgIGJvb2wgbV9pc0l0cFN0YXRlRXhwbGljaXRseVNldCB7IGZhbHNlIH07CkBAIC00MTksNiAr
NDIxLDcgQEAgcHJpdmF0ZToKICAgICBVbmlxdWVSZWY8V2Vic2l0ZURhdGFTdG9yZUNsaWVudD4g
bV9jbGllbnQ7CiAKICAgICBSZWZQdHI8QVBJOjpIVFRQQ29va2llU3RvcmU+IG1fY29va2llU3Rv
cmU7CisgICAgUmVmUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAK
ICNpZiBIQVZFKEFQUF9TU08pCiAgICAgVW5pcXVlUmVmPFNPQXV0aG9yaXphdGlvbkNvb3JkaW5h
dG9yPiBtX3NvQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3Rv
cmVDdXJsLmNwcAppbmRleCAwZTBjMDZlMWRlZDQyYzE0YjgwMmUxNTg5ZjMxZGM2Mjk4MmFjMzkz
Li42NGI2Yzc0ZDA4NmVjNDViYjYyZGE2ZWUwODIyM2IyOGRiNzNhNTdjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVD
dXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dl
YnNpdGVEYXRhU3RvcmVDdXJsLmNwcApAQCAtNDIsOCArNDIsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKFdlYkNvcmU6OkN1cmxQcm94eVNldHRpbmdz
JiYgcHJveAogewogICAgIG1fcHJveHlTZXR0aW5ncyA9IFdURk1vdmUocHJveHlTZXR0aW5ncyk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fc2Vzc2lvbklELCBtX3Byb3h5U2V0dGlu
Z3MpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX3Nlc3Npb25JRCwgbV9wcm94eVNldHRpbmdzKSwg
MCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKaW5kZXggMTJmOWNk
ODE5YjZkY2NhOGFjNTA5MmEzMGRkOTNjNTNiOGVlOTM0Mi4uNmY5NjNmMTQyMTAwNDc1OGUyZDY1
ZWQ5NjI2ZTJhNDlhM2Y0ZjkxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAK
QEAgLTM5LDggKzM5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdv
cmtQYXJhbWV0ZXJzKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJgogICAgIGF1dG8mIG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
OwogICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3Jh
Z2VFbmFibGVkID0gbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkOwogCi0gICAg
aWYgKGF1dG8qIHByb2Nlc3NQb29sID0gcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0
aW9ucygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nl
c3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
UGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlw
ZSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxT
dG9yYWdlRW5hYmxlZChib29sIGVuYWJsZWQpCkBAIC01Miw4ICs1MSw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChib29sIGVu
YWJsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9y
YWdlRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3Mo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VF
bmFibGVkKG1fc2Vzc2lvbklELCBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQp
KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKG1fc2Vzc2lvbklELCBtX3BlcnNp
c3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQpLCAwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nl
c3NQcm94eUdMaWIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNz
UHJveHlHTGliLmNwcAppbmRleCAwYTg0YTc1OTBkOWE5ODViZmM5OTY4NGE0ODk1MTM3NGU1YjI5
NDI5Li4yN2YyM2VhMDY1ZGM3NWNlNGE4MjcwYzU3NmVhMmFhNTVhYjBkYzhmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAK
QEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNo
T3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGwKICAgICAgICAgaWYgKCFk
YXRhU3RvcmUpIHsKICAgICAgICAgICAgIC8vIFByZXdhcm1lZCBwcm9jZXNzZXMgZG9uJ3QgaGF2
ZSBhIFdlYnNpdGVEYXRhU3RvcmUgeWV0LCBzbyB1c2UgdGhlIHByaW1hcnkgV2Vic2l0ZURhdGFT
dG9yZSBmcm9tIHRoZSBXZWJQcm9jZXNzUG9vbC4KICAgICAgICAgICAgIC8vIFRoZSBwcm9jZXNz
IHdvbid0IGJlIHVzZWQgaWYgY3VycmVudCBXZWJzaXRlRGF0YVN0b3JlIGlzIGRpZmZlcmVudCB0
aGFuIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IG9uZS4KLSAgICAgICAgICAgIGRhdGFTdG9y
ZSA9IG1fcHJvY2Vzc1Bvb2wtPndlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICAgICAgICAgIGRhdGFT
dG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKICAgICAg
ICAgfQogCiAgICAgICAgIEFTU0VSVChkYXRhU3RvcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKaW5k
ZXggOWY3YmUzYzk0MWI2Y2QwYTFiOTRjYjEzNjA5OGYzYTA0MWNlZmY5OS4uYWMwNGUzOGE1N2Iy
MTU5YmViNDJmMzg0NzliNDRmNWUyNmRlZGJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCkBAIC0y
Niw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFu
YWdlclByb3h5LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVk
ZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wu
aCIKIApAQCAtMzMsOCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKLSAgICBtX2Nvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlTWFwLnNldChzZXNzaW9uSUQsIHN0ZDo6bWFrZV9wYWlyKHN0b3JhZ2VQYXRoLCBzdG9yYWdl
VHlwZSkpOwotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9u
SUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNz
KQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBz
dG9yYWdlVHlwZSksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29v
a2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmIHN0
b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlJiBzdG9yYWdlVHlwZSkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vz
c1Bvb2xTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bv
b2xTb3VwLmNwcAppbmRleCBiZmJiZjk2NjRlNDgzNTMwOTcwOTcxMWRmZDZjMTM0MTU3MzJiZGFj
Li43ZmU0YWNhMGM1ZDJkMGU3ZmMwZDlkNWE0ZmEyN2ViY2M4MGE2NzVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCkBAIC0z
NywzMCArMzcsMjQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewotICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJh
bWV0ZXJzJiBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICBzdXBwbGVtZW50
PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoZGVm
YXVsdFNlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJz
LmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLmNv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7Ci0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkK
LSAgICAgICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQoKTsKKyAgICAvLyBGSVhNRTogbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBv
bGljeSBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCisgICAgLy8gRklY
TUU6IG1faWdub3JlVExTRXJyb3JzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFT
dG9yZSBvciByZW1vdmVkLgorICAgIC8vIEZJWE1FOiBtX25ldHdvcmtQcm94eVNldHRpbmdzIHNo
b3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KIAotICAgIHBhcmFtZXRlcnMu
Y29va2llQWNjZXB0UG9saWN5ID0gbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeTsKLSAg
ICBwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyA9IG1faWdub3JlVExTRXJyb3JzOwogICAgIHBh
cmFtZXRlcnMubGFuZ3VhZ2VzID0gdXNlclByZWZlcnJlZExhbmd1YWdlcygpOwotICAgIHBhcmFt
ZXRlcnMucHJveHlTZXR0aW5ncyA9IG1fbmV0d29ya1Byb3h5U2V0dGluZ3M7CiAgICAgcGFyYW1l
dGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IHRydWU7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKKyAgICAv
LyBGSVhNRTogTW92ZSB0aGlzIHRvIFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgbV9pZ25vcmVUTFNF
cnJvcnMgPSBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRJ
Z25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoY29uc3QgV2ViQ29yZTo6U291cE5ldHdv
cmtQcm94eVNldHRpbmdzJiBzZXR0aW5ncykKIHsKKyAgICAvLyBGSVhNRTogTW92ZSB0aGlzIHRv
IFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgbV9uZXR3b3JrUHJveHlTZXR0aW5ncyA9IHNldHRpbmdz
OwotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9u
ZXR3b3JrUHJveHlTZXR0aW5ncyksIDApOwogfQogCiB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOThiMzZjYzdhZDc1MWFiYTEzMDk3NzczMjg0
NjlhMDY0YjFjMWFlZC4uZmMzOWMwZTk3M2FhMzVkOGZhYzBmMDUxMDAwZmU2OTI5YThlNzQyYSAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDYwIEBACisyMDIwLTA5LTIxICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBm
cm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVEYXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjA0MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvRG93bmxvYWQubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpkb3dubG9hZEF0
UmF0ZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVj
a3BvaW50V0FMLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbToKKyAgICAgICAgKFRFU1QpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRl
VG9WMi5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW06CisgICAgICAgIChU
RVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QkRhdGFiYXNlUHJvY2Vzc0tpbGwubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tOgorICAgICAg
ICAocnVuVGVzdCk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbToKKyAgICAgICAgKFRFU1Qp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVy
c2lzdGVuY2UubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tOgorICAgICAgICAo
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJUZW1wRmlsZVNpemUubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tOgorICAgICAg
ICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3
b3JrUHJvY2Vzcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3Rv
cmUubW06CisgICAgICAgIChjaGVja1JlY292ZXJ5QWZ0ZXJDcmFzaCk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tOgorICAgICAgICAo
LVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdlYlZpZXc6cnVuSmF2YVNjcmlwdEFsZXJ0
UGFuZWxXaXRoTWVzc2FnZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOl0pOgor
ICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSk6
CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgYWxlcnRDb29raWVIVE1M
XSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1
c3RvbVBhdGhzLm1tOgorICAgICAgICAocnVuV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzKToK
KyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lz
dGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp0ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVz
dENvbnRleHQpOgorCiAyMDIwLTA5LTIxICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlA
YXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGFib3V0OmJsYW5rIHN1YmZyYW1lIGxvYWRzIGZv
ciBub24gYXBwLWJvdW5kIHRvcCBmcmFtZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24u
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNo
V2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCmluZGV4IDk3Mzg5ZjAxZmYyZWU5OWI3ODNiMGI1MjEw
ODA3NGYxYTgxYjY5ODEuLjMzZjQ1NGM1Y2Q1OWI0OGE3Njk4YWFiNTZlNjExY2Y2ZjA5YzlmNGYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5t
bQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc0dyb3VwUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFT
dG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KIApAQCAtMTQ2LDggKzE0Nyw4IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJv
Y2Vzc1JlbGF1bmNoT25MYXVuY2hGYWlsdXJlKQogCiAgICAgLy8gQ29uc3R1Y3RpbmcgYSBXZWJW
aWV3IHN0YXJ0cyBhIG5ldHdvcmsgcHJvY2VzcyBzbyB0ZXJtaW5hdGUgdGhpcyBvbmUuIFRoZSBw
YWdlIGxvYWQgYmVsb3cgd2lsbCB0aGVuIHJlcXVlc3QgYSBuZXR3b3JrIHByb2Nlc3MgYW5kIHdl
CiAgICAgLy8gbWFrZSB0aGlzIG5ldyBuZXR3b3JrIHByb2Nlc3MgbGF1bmNoIGNyYXNoIG9uIHN0
YXJ0dXAuCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAg
W3Byb2Nlc3NQb29sIF9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmdd
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbTW9uaXRvcldl
YkNvbnRlbnRDcmFzaE5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwogICAgIFt3ZWJW
aWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQppbmRleCBiN2VkOTk5
MzlmZDU5ZjIyOGE3ZThiZDc0OTcxMmY1MzY2MDE1NjE2Li4xODE5MTMxYzlhMGZlYjMwYjFhMmYw
Y2ZjZDg3YmYyMDQ1ZWJiM2Y0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0Rvd25sb2FkLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvRG93bmxvYWQubW0KQEAgLTg4OSw5ICs4ODksOSBAQCB2b2lkIGRvd25sb2Fk
QXRSYXRlKGRvdWJsZSBkZXNpcmVkS2JwcywgdW5zaWduZWQgc3BlZWRNdWx0aXBsaWVyLCBBcHBS
ZXR1cm5zVG9GbwogICAgIHJlY2VpdmVkRGF0YSA9IGZhbHNlOwogICAgIFV0aWw6OnJ1bigmcmVj
ZWl2ZWREYXRhKTsKICAgICAvLyBTdGFydCB0aGUgRG93bmxvYWRNb25pdG9yJ3MgdGltZXIuCi0g
ICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVzaXplQXBwSXNC
YWNrZ3JvdW5kOllFU107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRh
U3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKICAgICBpZiAocmV0dXJuVG9G
b3JlZ3JvdW5kID09IEFwcFJldHVybnNUb0ZvcmVncm91bmQ6OlllcykKLSAgICAgICAgW1t3ZWJW
aWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5k
Ok5PXTsKKyAgICAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUg
X3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9dOwogICAgIGRpZENhbmNlbCA9IGZhbHNlOwog
ICAgIFV0aWw6OnJ1bigmZGlkQ2FuY2VsKTsKICAgICB0ZXJtaW5hdGVTZXJ2ZXIgPSB0cnVlOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVj
a3BvaW50V0FMLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJD
aGVja3BvaW50V0FMLm1tCmluZGV4IDVjZDdhYmRhMDFkMTk3NDdkY2VkNDVhYmVlOTllY2IxYzE0
ZDYxNjAuLmQ3N2E2ZmQ5ODc5ZTQzZjcwMTFkZGFmOTJjM2E3OTdmM2ZjMTM3MzQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdB
TC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNr
cG9pbnRXQUwubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQ
b29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJh
dGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC04Niw3ICs4
Nyw3IEBAIFRFU1QoSW5kZXhlZERCLCBDaGVja3BvaW50c1dBTEF1dG9tYXRpY2FsbHkpCiAgICAg
UmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJh
dGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRs
ZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAog
ICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQppbmRleCBjOGFm
MWQyNDNjNGZlYjU4YWM5ODRkYWYxNGQ4MTUzMWE3Y2MzYzczLi5iYmYxYTE1MjE1ZGMxZmQyOGRm
ZGRiOWUzNDFiNjRmOWMwMDhmNGM0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KQEAgLTMwLDYgKzMw
LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJz
aXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9y
dCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0
L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBE
ZWxldGVSZWNvdmVyeSkKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29u
ZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0
XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0
TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5jb25zaXN0ZW50IGRhdGFiYXNl
IGZpbGVzIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBOU1VSTCAqdXJsMSA9IFtbTlNC
dW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJEZWxldGVSZWNvdmVyeSIgd2l0
aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3Vy
Y2VzIl07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0lEQkluZGV4VXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KaW5kZXggOTVjY2EwY2UyODE2ZmYxYTZhNDU1
YWQwYmQyYzhhNGFhNGYyN2ZlZC4uODhhNTNmNjFkOWQ5ODI2NTdiOTY1ZWY4YTZjZWJhNzkxZWZm
MTc1NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJJbmRleFVwZ3JhZGVUb1YyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9y
dCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2Vy
Q29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29u
ZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxl
U2hlZXQuaD4KQEAgLTU4LDcgKzU5LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4VXBncmFkZVRv
VjIpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtb
Y29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5k
bGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKIAogICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0
aGUgZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5C
dW5kbGVdIFVSTEZvclJlc291cmNlOkAiSW5kZXhVcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3Fs
aXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJ
bmZvVXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCmluZGV4IGZmYTVhNzg3OGE0NzMyYjhl
YzI0NWM5MDUzZmQxN2VlNTk1NmZhM2QuLjQwM2UwZmZhODIxMjM0NTFjNDY2ZmVlY2MzMjRmOWM2
ZTc2MWQ0M2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQpA
QCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdl
YktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1w
b3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJ
bmRleGVkREIsIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyKQogICAgIFJldGFpblB0cjxX
S1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNv
bnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5h
bWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5
IGRhdGFiYXNlIGZpbGVzIHdpdGggb2xkIE9iamVjdFN0b3JlSW5mbyBzY2hlbWEgdG8gdGhlIGRh
dGFiYXNlIGRpcmVjdG9yeS4KICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRs
ZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlIiB3aXRoRXh0ZW5z
aW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhl
ZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQppbmRleCA2ODc0NTI5ZWJi
ZjM3ODUxOGQ5M2UwYTA4MjFmNjMwMTJjZmE2ZDVmLi43MzA3N2VjZGZkMzY1YjUyOTA1M2Q0N2Ni
YTJhMTRlZDA1MWVkNmVhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxs
Lm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9y
dCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
ZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4K
ICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTkyLDcgKzkzLDcgQEAgVEVTVChJbmRleGVk
REIsIERhdGFiYXNlUHJvY2Vzc0tpbGwpCiAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICAgICAgaWYgKCFraWxsZWREQlByb2Nlc3Mg
JiYgb3BlblJlcXVlc3RVcGdyYWRlTmVlZGVkKSB7CiAgICAgICAgICAgICBraWxsZWREQlByb2Nl
c3MgPSB0cnVlOwotICAgICAgICAgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICAgICAg
fQogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0KaW5kZXggMTFmODdmODAzNGQyYjFiNTVkNzIw
ZGViNzY1YTMxNjgyMTIwZDc3My4uYTk4YmYzODI1YmIxZWQ2ZDc1OWMwOGQ0NTMzYWRjYjdmZjM5
NWZkNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bmRleGVkREJGaWxlTmFtZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBSZXRh
aW5QdHI8V0tTY3JpcHRNZXNzYWdlPiBsYXN0U2NyaXB0TWVzc2FnZTsKIAogQGVuZAogCi1zdGF0
aWMgdm9pZCBydW5UZXN0KCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoYm9vbCBvbGRGaWxlU2hvdWxk
RXhpc3QgPSB0cnVlKQogewogICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1tJbmRleGVkREJG
aWxlTmFtZU1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7CiAgICAgYXV0byBjb25maWd1cmF0
aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKQEAg
LTg3LDcgKzg3LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdCgpCiAgICAgTlNVUkwgKm9sZFZlcnNp
b25PcmlnaW5EaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVu
ZGluZ1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJdOwogICAgIE5TVVJMICpuZXdWZXJzaW9uT3Jp
Z2luRGlyZWN0b3J5VVJMID0gW25ld1ZlcnNpb25EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQ
YXRoQ29tcG9uZW50OiBAImZpbGVfXzAiXTsKICAgICBOU1VSTCAqb2xkVmVyc2lvblVudXNlZERh
dGFiYXNlRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgVVJMQnlB
cHBlbmRpbmdQYXRoQ29tcG9uZW50OnVudXNlZERhdGFiYXNlTmFtZV07Ci0gICAgRVhQRUNUX1RS
VUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOm9sZFZl
cnNpb25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTC5wYXRoXSk7CisgICAgRVhQRUNUX1RSVUUo
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOm9sZFZlcnNp
b25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTC5wYXRoXSA9PSBvbGRGaWxlU2hvdWxkRXhpc3Qp
OwogICAgIAogICAgIC8vIEZvciBkYXRhYmFzZSB0aGF0IGlzIG9wZW5lZCBhZnRlciB1cGdyYWRl
LCBpdHMgZmlsZSBzaG91bGQgb25seSBiZSBpbiB2MS4KICAgICBOU1VSTCAqb2xkVmVyc2lvbkV4
aXN0aW5nRGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVS
TCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IGV4aXN0aW5nRGF0YWJhc2VOYW1lXTsKQEAg
LTE1NCw3ICsxNTQsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVEaXJlY3RvcmllcyhTdHJpbmcgdGVz
dE5hbWUpCiBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCRmlsZU5hbWUpCiB7CiAgICAgY3JlYXRl
RGlyZWN0b3JpZXMoIm5vbmUiKTsKLSAgICBydW5UZXN0KCk7CisgICAgcnVuVGVzdChmYWxzZSk7
CiB9CiAKIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJGaWxlTmFtZVYwKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nl
c3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11
bHRpUHJvY2Vzcy5tbQppbmRleCA3ZjYyNjQ1ZDk5NjBlZGU5NjBjMDAxYzI3MmI2NTAzOTM5MDEx
NjMyLi42ZjY3ZGMyN2VkYzNkMjc0NWIxNzBlNDgyYmNkOTBlODQ5NGNiOTVhIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJv
Y2Vzcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4
ZWREQk11bHRpUHJvY2Vzcy5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dL
VXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0
ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktp
dC9fV0tVc2VyU3R5bGVTaGVldC5oPgogI2ltcG9ydCA8d3RmL0RlcXVlLmg+CkBAIC02OSw3ICs3
MCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJNdWx0aVByb2Nlc3MpCiAgICAgUmV0YWlu
UHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1
c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0
KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFJl
dGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29u
ZmlndXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQppbmRleCBiMzJj
ZTRhNWY3Mzg2M2FlZGRjYjkxOTBiNWI0MzcwZTM3NDQzYjVlLi5kNjIyMDMyMmU0NzhkMWRhYzc4
ZjA2OTY3YzNiNjQzYmZkNjJmOWJmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KQEAgLTc4
LDcgKzc4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlBlcnNpc3RlbmNlKQogICAgIHdl
YlZpZXcgPSBuaWw7CiAKICAgICAvLyBUZXJtaW5hdGUgdGhlIG5ldHdvcmsgcHJvY2VzcwotICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gTWFrZSBhIG5ldyB3ZWIgdmlldyB0byBmaW5pc2gg
dGhlIHRlc3QKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3Vy
YXRpb24uZ2V0KCldKTsKQEAgLTI2OCw3ICsyNjgsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhl
ZERCVGhpcmRQYXJ0eUZyYW1lSGFzQWNjZXNzKQogCiAgICAgd2ViVmlldyA9IG5pbDsKICAgICBz
ZWNvbmRXZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29s
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gVGhpcmQt
cGFydHkgSURCIHN0b3JhZ2UgaXMgc3RvcmVkIGluIHRoZSBtZW1vcnkgb2YgbmV0d29yayBwcm9j
ZXNzLgogICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTM4NSw3ICszODUsNyBAQCBURVNUKEluZGV4ZWREQiwg
SW5kZXhlZERCVGhpcmRQYXJ0eVdvcmtlckhhc0FjY2VzcykKIAogICAgIHdlYlZpZXcgPSBuaWw7
CiAgICAgc2Vjb25kV2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1
dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24u
Z2V0KCldKTsKICAgICBsb2FkVGVzdFBhZ2VJbldlYlZpZXcodGhpcmRXZWJWaWV3LmdldCgpLCBA
ImRhdGFiYXNlIGlzIGNyZWF0ZWQiKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5
Lm1tCmluZGV4IDhlYzY1ZjBhM2JhOTM3MzZmZGI0ZjlkZGZlZjc1Y2U2MDAwNWZkMGQuLjUxMGIy
NGY1NjlkMjJiZDQwYTdhZGJlMjVlY2ZkMGVjZmM4YWM3MjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHku
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJT
dXNwZW5kSW1taW5lbnRseS5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dL
UHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRy
b2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblBy
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC04OCw4ICs4OSw4
IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJTdXNwZW5kSW1taW5lbnRseSkKIAogICAgIHJ1
blRlc3RBbmRDaGVja1Jlc3VsdChAIkNvbnRpbnVlIik7CiAKLSAgICBbY29uZmlndXJhdGlvbi5n
ZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5
XTsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3Jl
IF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3Vt
ZV07CiAKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJFeHBlY3RlZCBBYm9ydCBGb3IgU3Vz
cGVuc2lvbiIpOwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkV4cGVjdGVkIFN1Y2Nlc3Mg
QWZ0ZXIgUmVzdW1lIik7CkBAIC0xNTgsOCArMTU5LDggQEAgVEVTVChJbmRleGVkREIsIFN1c3Bl
bmRJbW1pbmVudGx5Rm9yVGhpcmRQYXJ0eURhdGFiYXNlcykKICAgICBbd2ViVmlldyBsb2FkSFRN
TFN0cmluZzptYWluRnJhbWVTdHJpbmcgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0
dHA6Ly93ZWJraXQub3JnIl1dOwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAImRhdGFiYXNl
IGlzIGNyZWF0ZWQiKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwotICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0
ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJ1blRlc3RB
bmRDaGVja1Jlc3VsdChAInRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZCIpOwogfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmls
ZVNpemUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QlRlbXBGaWxlU2l6ZS5tbQppbmRleCA1MzY1NDFlM2IwZTVjZGEzYTNiNTUxYzFlODFlOTYzZjU5
MmFlYjJmLi5lN2I5OTIyOGNlODc2ZTQ0N2U2NDc4MmVmOWQ4N2YyNWFkYzliOWZhIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBG
aWxlU2l6ZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQpAQCAtOTUsNyArOTUsNyBAQCBURVNUKEluZGV4ZWREQiwg
SW5kZXhlZERCVGVtcEZpbGVTaXplKQogCiAgICAgLy8gVGVybWluYXRlIG5ldHdvcmsgcHJvY2Vz
cyB0byBrZWVwIFdBTCBvbiBkaXNrLgogICAgIHdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IGZpbGVFeGlzdHNBdFBhdGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aF0pOwogICAgIFJldGFpblB0
cjxOU0RpY3Rpb25hcnk+IGZpbGVBdHRyaWJ1dGVzID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRN
YW5hZ2VyXSBhdHRyaWJ1dGVzT2ZJdGVtQXRQYXRoOndhbEZpbGVQYXRoLmdldCgpLnBhdGggZXJy
b3I6bmlsXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCmluZGV4IDQxMzNlZTdiM2Rh
ZTQzZWMyMDQ5Y2ZmYzA2M2MwZTQyOWMxN2M1ZWYuLjVmNzkxOTA5NDNjNzcxZTlkOWU0NDJhMGRh
MjY2ZmY5YTAzYmEyZjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQpAQCAtMzEs
NiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktp
dC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2lt
cG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC0xMDksNyArMTEwLDcgQEAgVEVT
VChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NDcmFzaGVzKQogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tfU1RS
RVEoQCJzZXNzaW9uOnN0b3JhZ2UiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCi0gICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CiAKICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CkBAIC0x
NjIsNyArMTYzLDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5k
cykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7
CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAidmFsdWUiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0p
OwogCi0gICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVu
ZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUg
X3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CiAKICAgICByZWFkeVRv
Q29udGludWUgPSBmYWxzZTsKICAgICBbd2ViVmlldzEgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2lu
ZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdrZXknLCAnbmV3VmFsdWUnKSIgY29tcGxldGlvbkhh
bmRsZXI6XihpZCwgTlNFcnJvciAqKSB7CkBAIC0xNzcsNyArMTc4LDcgQEAgVEVTVChXS1dlYlZp
ZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5kcykKICAgICB9XTsKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJnJlYWR5VG9Db250aW51ZSk7CiAgICAgCi0gICAgW3Byb2Nlc3NQb29s
LmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAK
ICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQppbmRleCBlNjBm
ODgwMjVkMDkzNzg5ZjY5NTYwZDliOTJiMjgyZjA3MTMwYThkLi4wZTIxZjkwOTUwMDE0ZjZjNDkw
YjBlYjhlNDYxZWM0YmE4NTBiYjgxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KQEAgLTI4LDcgKzI4LDcgQEAK
ICNpbXBvcnQgIkhUVFBTZXJ2ZXIuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBv
cnQgIlV0aWxpdGllcy5oIgotI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8
d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYv
VmVjdG9yLmg+CkBAIC0zNywxNCArMzcsMTQgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNz
RW50aXRsZW1lbnRzKQogewogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZp
Z3VyYXRpb246W1tbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVh
c2VdXSk7CiAgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAic2lt
cGxlIl07Ci0gICAgV0tQcm9jZXNzUG9vbCAqcG9vbCA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25d
LnByb2Nlc3NQb29sOwotICAgIGJvb2wgaGFzRW50aXRsZW1lbnQgPSBbcG9vbCBfbmV0d29ya1By
b2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Muc3RvcmFn
ZS5XZWJLaXROZXR3b3JraW5nU2FuZGJveCJdOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZSAqc3Rv
cmUgPSBbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlOworICAgIGJvb2wg
aGFzRW50aXRsZW1lbnQgPSBbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JU
ZXN0aW5nOkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0TmV0d29ya2luZ1NhbmRi
b3giXTsKICNpZiBQTEFURk9STShNQUMpICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAgICAg
RVhQRUNUX1RSVUUoaGFzRW50aXRsZW1lbnQpOwogI2Vsc2UKICAgICBFWFBFQ1RfRkFMU0UoaGFz
RW50aXRsZW1lbnQpOwogI2VuZGlmCi0gICAgRVhQRUNUX0ZBTFNFKFtwb29sIF9uZXR3b3JrUHJv
Y2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVyZSBjYXNlIl0pOworICAg
IEVYUEVDVF9GQUxTRShbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0
aW5nOkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7CiB9CiAKIFRFU1QoV2ViS2l0LCBIVFRQUmVmZXJl
cikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0
d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50
RGF0YVN0b3JlLm1tCmluZGV4IDYwOThlOGRhZDI1MmU1OWVjNDkxMjUwYjQyMTZkM2NkMDkzNmU4
ZjcuLjJmOGEyZTMzZmU4NzAzYmFiMmQ4ZTA1MTA4MzJiZWNkOWQ0ODkzNGIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFz
aE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5t
bQpAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1JlY292ZXJ5QWZ0ZXJDcmFzaChX
S1dlYnNpdGVEYXRhU3RvcmUgKmRhdGFTdG9yZSkKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtbd2ViVmlldyBjb25maWd1cmF0
aW9uXS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtbd2ViVmll
dyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDpzaW1wbGUyXV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIH0KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3
YXBPbk5hdmlnYXRpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCmluZGV4IDk1ZGM5ZDk4ZGYxM2IwNzA1ZTA4MTdk
MDU4NzI2NTEyMGMxODhkMjMuLmRmMzIwZDY0ZGFkYmRkMWVlMjgzZjg2NWMxNDQyM2YzYWM1NTY0
YmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJv
Y2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQpAQCAtNTM4NSw3ICs1Mzg1LDcg
QEAgVEVTVChQcm9jZXNzU3dhcCwgVXNlUHJld2FybWVkUHJvY2Vzc0FmdGVyVGVybWluYXRpbmdO
ZXR3b3JrUHJvY2VzcykKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEp
OwogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW3dl
YlZpZXdDb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRp
b246d2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBbd2ViVmlldzIgc2V0TmF2aWdh
dGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5t
bQppbmRleCAwZTEwYzM0ZWVjODJjNmY2NTkyYmI3YzQyNzRkMGU0NTVlYWYxMWU4Li5hM2FiYTIz
MWE5M2IzZDVmMDBhMTkzYzQ3YzI3Njc4NjRiMzUwNTViIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLm1tCkBAIC03MTksNyArNzE5LDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LCBOZXR3b3JrUHJvY2Vzc1Jlc3RhcnQpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGlu
UnVuTG9vcCgxKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURh
dGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MiA9
IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAw
LCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKQEAgLTc1
Miw3ICs3NTIsNyBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jZXNz
UmVzdGFydCkKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0g
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXczID0gYWRvcHROUyhbW1dLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25m
aWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAtMTU1OCwxMCArMTU1OCw4IEBA
IFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTWlncmF0ZURhdGFGcm9tTWlzc2luZ1RvcEZy
YW1lVW5pcXVlUmVkaXJlY3RTYW1lU2l0CiAKIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywg
Q2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKIHsKKyAgICBOU1VSTCAqaXRw
Um9vdFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TVGVtcG9yYXJ5RGlyZWN0b3J5KCkg
c3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRo
Tm9Qcm9jZXNzUG9vbFRlc3QiXSBpc0RpcmVjdG9yeTpZRVNdOwogICAgIGF1dG8gZGVmYXVsdEZp
bGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgIF9XS1dlYnNp
dGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKLSAgICBhdXRv
ICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZp
Z3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwotICAgIE5TVVJM
ICppdHBSb290VVJMID0gW1tkYXRhU3RvcmUgX2NvbmZpZ3VyYXRpb25dIF9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5XTsKICAgICBOU1VSTCAqZmlsZVVSTCA9IFtpdHBSb290VVJMIFVS
TEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIm9ic2VydmF0aW9ucy5kYiJdOwogICAgIFtkZWZh
dWx0RmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0UGF0aDppdHBSb290VVJMLnBhdGggZXJyb3I6bmls
XTsKICAgICBFWFBFQ1RfRkFMU0UoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRo
Oml0cFJvb3RVUkwucGF0aF0pOwpAQCAtMTU3Miw2ICsxNTcwLDEwIEBAIFRFU1QoUmVzb3VyY2VM
b2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKICAg
ICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6bmV3Rmls
ZVVSTC5wYXRoXSk7CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciBjb3B5SXRlbUF0UGF0aDpuZXdG
aWxlVVJMLnBhdGggdG9QYXRoOmZpbGVVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVDVF9U
UlVFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpmaWxlVVJMLnBhdGhdKTsK
KworICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1
cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxl
YXNlXTsKKyAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLl9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5ID0gaXRwUm9vdFVSTDsKKyAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNp
dGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmln
dXJhdGlvbl0gYXV0b3JlbGVhc2VdOwogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkOllFU107CiAKICAgICBzdGF0aWMgYm9vbCBkb25lRmxhZyA9IGZhbHNl
OwpAQCAtMTYzMywxMiArMTYzNSwxMiBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIFN0
b3JlU3VzcGVuc2lvbikKICAgICBbd2ViVmlldzIgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmln
YXRpb25dOwogCiAgICAgZG9uZUZsYWcgPSBmYWxzZTsKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wg
X3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6XnsKKyAgICBbZGF0YVN0b3JlMSBf
c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeewogICAgICAgICBkb25lRmxhZyA9
IHRydWU7CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7
CiAKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07
CisgICAgW2RhdGFTdG9yZTEgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiB9CiAKIEBp
bnRlcmZhY2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1NjaGVtZUhhbmRsZXIgOiBOU09iamVjdCA8
V0tVUkxTY2hlbWVIYW5kbGVyPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQppbmRleCAzNGE0ZjVjNTM4
YjliMGU5ZmNiMDUwNzJiMTcwMjg4ZTllNGU5ZjhmLi4yZjhlMzRkYmE2ZGE0NzIzNTY1NWZmMGRi
MmFkY2ExYmY4YzU2NzIwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpAQCAtNTU4LDcgKzU1OCw3
IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFVzZXJBZ2VudE92ZXJyaWRlKQogCiAgICAgY29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7
CiAKLSAgICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5k
bGVyIGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6
IEJhciBDdXN0b20gVXNlckFnZW50Il0pOworICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhb
W1NXVXNlckFnZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNzYWdl
OkAiTWVzc2FnZSBmcm9tIHdvcmtlcjogRm9vIEN1c3RvbSBVc2VyQWdlbnQiXSk7CiAgICAgW1tj
b25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRs
ZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07CiAKICAgICB3ZWJWaWV3ID0gYWRv
cHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgw
MCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTYzMyw4ICs2
MzMsNiBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBDYWNoZVN0b3JhZ2VSZXN0b3JlRnJvbURpc2sp
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7
CiAKLSAgICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9kZWxldGVEZWZhdWx0RGF0YVN0b3JlRm9yVGVz
dGluZ107Ci0KICAgICBTZXJ2aWNlV29ya2VyVENQU2VydmVyIHNlcnZlcih7CiAgICAgICAgIHsg
InRleHQvaHRtbCIsIG1haW5DYWNoZVN0b3JhZ2VCeXRlcyB9CiAgICAgfSwgewpAQCAtOTgyLDYg
Kzk4MCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRp
b24pCiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAg
c2V0Q29uZmlndXJhdGlvbkluamVjdGVkQnVuZGxlUGF0aChjb25maWd1cmF0aW9uLmdldCgpKTsK
KyAgICBSZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gb3JpZ2luYWxQcm9jZXNzUG9vbCA9IGNvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2w7CiAKICAgICBkb25lID0gZmFsc2U7CiAKQEAgLTEw
MzUsNyArMTAzNCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNz
Q3JlYXRpb24pCiAgICAgZG9uZSA9IGZhbHNlOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbG9h
ZGluZyB0aGUgc2ltcGxlIHBhZ2UgZGlkIG5vdCBzdGFydCB0aGUgc2VydmljZSB3b3JrZXIgcHJv
Y2Vzcy4KLSAgICBFWFBFQ1RfRVEoMHUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9j
ZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCB3
ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzQ291bnQpOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpuZXdD
b25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgRVhQRUNUX0VRKDJ1LCB3ZWJWaWV3LmdldCgpLmNv
bmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudElnbm9yaW5nUHJld2FybWVk
KTsKQEAgLTEwNDMsOSArMTA0Miw4IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3Jr
ZXJQcm9jZXNzQ3JlYXRpb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsK
ICAgICBkb25lID0gZmFsc2U7CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5nIHRoaXMg
cGFnZSBkaWQgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCiAgICAgRVhQRUNUX0VR
KDF1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3Jr
ZXJQcm9jZXNzQ291bnQpOwotCisgICAgRVhQRUNUX0VRKDF1LCBvcmlnaW5hbFByb2Nlc3NQb29s
LmdldCgpLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKICAgICBbW2NvbmZpZ3VyYXRpb24g
d2Vic2l0ZURhdGFTdG9yZV0gcmVtb3ZlRGF0YU9mVHlwZXM6W1dLV2Vic2l0ZURhdGFTdG9yZSBh
bGxXZWJzaXRlRGF0YVR5cGVzXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNv
bXBsZXRpb25IYW5kbGVyOl4oKSB7CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH1dOwpAQCAt
MTYxOCwyMSArMTYxNiwzNSBAQCBzdGF0aWMgc2l6ZV90IGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9j
ZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgYgogICAgIHJldHVybiB3
ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudEln
bm9yaW5nUHJld2FybWVkOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZkFuZEluUHJv
Y2Vzc1NlcnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZlByb2Nlc3NTZXJ2
aWNlV29ya2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9
IHRydWU7CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVD
VF9FUSgxdSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RFU1QoU2VydmljZVdv
cmtlcnMsIEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0Qmxhbmsg
PSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykpOwog
fQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdU
aHJvdWdoU2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5r
QmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hPdXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewogICAg
IGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9vbCBm
aXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNoU2Vy
dmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGZpcnN0
TG9hZEFib3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0Qmxh
bmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAg
Ym9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZp
cnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2
aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJzdExv
YWRBYm91dEJsYW5rKSk7CiB9CiAKQEAgLTE5NDQsMTEgKzE5NTYsMTEgQEAgVEVTVChTZXJ2aWNl
V29ya2VycywgU3VzcGVuZE5ldHdvcmtQcm9jZXNzKQogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0Zp
bGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnN3REJQYXRoLnBhdGhd
KTsKIAotICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFt3ZWJWaWV3LmdldCgp
LmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1
c3BlbmRJbW1pbmVudGx5XTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZh
dWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAgICBbIHdl
YlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNz
RGlkUmVzdW1lXTsKKyAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRh
U3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBbd2ViVmlldyBsb2Fk
UmVxdWVzdDpzZXJ2ZXIucmVxdWVzdCgpXTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS0hUVFBDb29raWVTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KaW5kZXggYTM1ZjA1MzUwYWFiNGI0MmYzNmM0NmFl
Y2RlZWVlNmNlNTQ0ZWY4Ni4uMzM3NjA5MmExOTViNTEyZGE2N2M0OTZlNDUyMTdiOTE0ZmUyYTU3
OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hU
VFBDb29raWVTdG9yZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCkBAIC00NzksOCArNDc5LDYgQEAgc3RhdGljIGJvb2wg
ZmluaXNoZWQ7CiB9CiBAZW5kCiAKLS8vIEZJWE1FOiBvbiBpT1MsIFVJIHByb2Nlc3Mgc2hvdWxk
IGJlIHVzaW5nIHRoZSBzYW1lIGNvb2tpZSBmaWxlIGFzIHRoZSBuZXR3b3JrIHByb2Nlc3MgZm9y
IGRlZmF1bHQgc2Vzc2lvbi4KLSNpZiBQTEFURk9STShNQUMpCiBlbnVtIGNsYXNzIFNob3VsZEVu
YWJsZVByb2Nlc3NQcmV3YXJtaW5nIHsgTm8sIFllcyB9Owogdm9pZCBydW5XS0hUVFBDb29raWVT
dG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91
bGRFbmFibGVQcm9jZXNzUHJld2FybWluZykKIHsKQEAgLTU4OSwyMCArNTg3LDY2IEBAIFRFU1Qo
V0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbFdpdGhQcmV3YXJtaW5nKQogICAg
IHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nl
c3NQcmV3YXJtaW5nOjpZZXMpOwogfQogCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCiBAaW50
ZXJmYWNlIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVn
YXRlPgorLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUw7CistIChOU1N0cmluZyAqKXdhaXRG
b3JNZXNzYWdlOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2llVUlE
ZWxlZ2F0ZQorQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgewor
ICAgIFJldGFpblB0cjxOU1N0cmluZz4gX21lc3NhZ2U7Cit9CisKIC0gKHZvaWQpd2ViVmlldzoo
V0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOihO
U1N0cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBj
b21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAg
ICBFWFBFQ1RfU1RSRVEoIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIiwgbWVzc2FnZS5V
VEY4U3RyaW5nKTsKKyAgICBfbWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgZmluaXNoZWQgPSB0cnVl
OwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CisKKy0gKE5TU3RyaW5nICopd2FpdEZvck1l
c3NhZ2UKK3sKKyAgICB3aGlsZSAoIV9tZXNzYWdlKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpzcGluUnVuTG9vcCgpOworICAgIHJldHVybiBfbWVzc2FnZS5hdXRvcmVsZWFzZSgpOwor
fQorCistIChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTAoreworICAgIHJldHVybiBAIjxzY3Jp
cHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9
IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50
cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3Jp
cHQ+IjsKK30KKwogQGVuZAogCitURVNUKFdlYktpdCwgV0tIVFRQQ29va2llU3RvcmVNdWx0aXBs
ZVZpZXdzKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcxID0gW1tUZXN0V0tXZWJWaWV3
IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MSBzeW5jaHJvbm91c2x5TG9hZEhUTUxT
dHJpbmc6QCJzdGFydCBuZXR3b3JrIHByb2Nlc3MiXTsKKworICAgIE5TSFRUUENvb2tpZSAqc2Vz
c2lvbkNvb2tpZSA9IFtOU0hUVFBDb29raWUgY29va2llV2l0aFByb3BlcnRpZXM6QHsKKyAgICAg
ICAgTlNIVFRQQ29va2llUGF0aDogQCIvIiwKKyAgICAgICAgTlNIVFRQQ29va2llTmFtZTogQCJT
ZXNzaW9uQ29va2llTmFtZSIsCisgICAgICAgIE5TSFRUUENvb2tpZVZhbHVlOiBAIkNvb2tpZVZh
bHVlIiwKKyAgICAgICAgTlNIVFRQQ29va2llRG9tYWluOiBAIjEyNy4wLjAuMSIsCisgICAgfV07
CisKKyAgICBfX2Jsb2NrIGJvb2wgc2V0Q29va2llRG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3
MS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUuaHR0cENvb2tpZVN0b3JlIHNldENvb2tp
ZTpzZXNzaW9uQ29va2llIGNvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIHNldENvb2tpZURv
bmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmc2V0Q29v
a2llRG9uZSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbQ2hlY2tTZXNzaW9uQ29v
a2llVUlEZWxlZ2F0ZSBuZXddKTsKKyAgICBbd2ViVmlldzEgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0
ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldzEgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0
Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4w
LjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJT
ZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworCisgICAgVGVzdFdLV2ViVmlldyAqd2Vi
VmlldzIgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcy
IHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3MiBsb2FkSFRNTFN0
cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3Ry
aW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRl
IHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7Cit9CisK
IFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Np
b24pCiB7CiAgICAgUmV0YWluUHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4gZXBoZW1lcmFsU3RvcmVX
aXRoQ29va2llcyA9IFtXS1dlYnNpdGVEYXRhU3RvcmUgbm9uUGVyc2lzdGVudERhdGFTdG9yZV07
CkBAIC02MjcsOSArNjcxLDggQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nl
c3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZp
bmlzaGVkKTsKICAgICBmaW5pc2hlZCA9IGZhbHNlOwogICAgIAotICAgIE5TU3RyaW5nICphbGVy
dENvb2tpZUhUTUwgPSBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3Bs
aXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29r
aWVzW2ldID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tp
ZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsKLSAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzph
bGVydENvb2tpZUhUTUwgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcu
MC4wLjEiXV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7CisgICAg
W3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVS
TDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNU
X1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1D
b29raWVWYWx1ZSIpOwogfQogCiBzdGF0aWMgYm9vbCBhcmVDb29raWVzRXF1YWwoTlNIVFRQQ29v
a2llICpmaXJzdCwgTlNIVFRQQ29va2llICpzZWNvbmQpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVy
LWxlYWtzLm1tCmluZGV4IGFjN2RlNDE1MTJjNDUxMzhlYzVlNGMwOWU1MTE1ZDE2Y2QyM2IyMmUu
LmFjMTY1MzVkZmQ5Mzk5OWQyZWM1MGRjZmQ3MWMzYTU2ZDExM2VjN2EgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxl
YWtzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxT
Y2hlbWVIYW5kbGVyLWxlYWtzLm1tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0IDxXZWJLaXQv
V0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZp
Z3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9W
ZWN0b3IuaD4KQEAgLTE1Miw3ICsxNTMsNyBAQCBURVNUKFVSTFNjaGVtZUhhbmRsZXIsIExlYWtz
MykKIAogICAgIHJ1blVudGlsVGFza3NJbkZsaWdodCgyKTsKIAotICAgIFt3ZWJWaWV3MS5nZXQo
KS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107Cisg
ICAgW3dlYlZpZXcxLmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgcnVuVW50aWxUYXNrc0luRmxpZ2h0KDApOwogfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQppbmRleCA5MmNmM2E2MTk4YTVi
OWQxNDU0NDkwNWRiOWU5NDhmMTFjNzI1NmRlLi5iZjhiZGU4MzFhMjg1OWJjZjM0MTM4MDYxODhi
NTkxZmNhYTlkM2FiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQpA
QCAtMjQ0LDcgKzI0NCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0b21Q
YXRocyhTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRFCiAgICAgLy8gTm93LCB3
aXRoIGJyYW5kIG5ldyBXS1dlYnNpdGVEYXRhU3RvcmVzIHBvaW50aW5nIGF0IHRoZSBzYW1lIGN1
c3RvbSBjb29raWUgc3RvcmFnZSBsb2NhdGlvbiwKICAgICAvLyBpbiBuZXdseSBmaXJlZCB1cCBO
ZXR3b3JrUHJvY2Vzc2VzLCB2ZXJpZnkgdGhhdCB0aGUgZmV0Y2ggYW5kIGRlbGV0ZSBBUElzIHdv
cmsgYXMgZXhwZWN0ZWQuCiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgYXV0
byBuZXdDdXN0b21EYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9j
XSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdl
dCgpXSk7CiAKICAgICBbbmV3Q3VzdG9tRGF0YVN0b3JlIGZldGNoRGF0YVJlY29yZHNPZlR5cGVz
OltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dlYnNpdGVEYXRhVHlwZUNvb2tpZXMsIG5pbF0gY29t
cGxldGlvbkhhbmRsZXI6XihOU0FycmF5PFdLV2Vic2l0ZURhdGFSZWNvcmQgKj4gKiByZWNvcmRz
KSB7CkBAIC0yNTUsNyArMjU1LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vic2l0ZURhdGFTdG9yZUN1
c3RvbVBhdGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEUKICAgICByZWNl
aXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CiAgICAgbmV3Q3VzdG9tRGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBh
bGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlv
bi5nZXQoKV0pOwogCiAgICAgW25ld0N1c3RvbURhdGFTdG9yZSByZW1vdmVEYXRhT2ZUeXBlczpb
TlNTZXQgc2V0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVDb29raWVzLCBuaWxdIG1vZGlm
aWVkU2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XiB7CkBAIC01
MzksNyArNTM5LDcgQEAgVEVTVChXZWJLaXQsIERvTG9hZFdpdGhOb25EZWZhdWx0RGF0YVN0b3Jl
QWZ0ZXJUZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNzKQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkucHJv
Y2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3Vy
YXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwog
CiAgICAgcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBt
YWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1s
IiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKICAgICBbd2ViVmll
dyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKQEAgLTg1Nyw3ICs4NTcsNyBAQCBURVNUKFdlYktpdCwg
TWVkaWFDYWNoZSkKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwogCiAgICAgZG9uZSA9IHRydWU7
Ci0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3Rv
cmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFtmaWxlTWFuYWdlciByZW1vdmVJ
dGVtQXRQYXRoOnBhdGggZXJyb3I6JmVycm9yXTsKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCA5ZDM3Y2NlZGRi
ODIxNTc0NzVkODFmMTIyMGY0NTZiODY0YzNiMTcxLi42MzMyNmY2ODU2YmM2MDU5ZGM2Mzc5ZjJh
YTVjMDA1MGEwNzg0YWJkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcApAQCAtMTA2MSw4ICsxMDYxLDYgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0
ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKIAogICAg
IHJlc2V0UXVvdGEoKTsKIAotICAgIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRl
Rm9yU2VydmljZVdvcmtlclRlc3RpbmcocGxhdGZvcm1Db250ZXh0KCksIHRydWUpOwotCiAgICAg
V0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSk7CiAKICAgICBXS0NvbnRleHRTZXRVc2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0
KCksIGZhbHNlKTsKQEAgLTMxMzYsNyArMzEzNCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNl
dElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1p
CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKLSAg
ICBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhwbGF0Zm9ybUNvbnRleHQoKSk7Cisg
ICAgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3Mod2Vic2l0ZURhdGFT
dG9yZSgpKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdvcmtl
cnMoKQpAQCAtMzE2Nyw5ICszMTY1LDggQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxl
cjo6cGxhdGZvcm1DcmVhdGVPdGhlclBhZ2UoUGxhdGZvcm1XZWJWaWV3KiBwYXJlbnQKICAgICBy
ZXR1cm4gbmV3IFBsYXRmb3JtV2ViVmlldyhjb25maWd1cmF0aW9uLCBvcHRpb25zKTsKIH0KIAot
V0tDb250ZXh0UmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250
ZXh0UmVmIGNvbnRleHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29udGV4dENvbmZpZ3Vy
YXRpb24pCitXS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4
dChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZikKIHsKLSAg
ICBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShjb250ZXh0LCBkZWZhdWx0V2Vi
c2l0ZURhdGFTdG9yZSgpKTsKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409341</attachid>
            <date>2020-09-21 18:53:21 -0700</date>
            <delta_ts>2020-09-21 18:54:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200921185320.patch</filename>
            <type>text/plain</type>
            <size>327906</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRhZGZjMzM1NmEzMzk3NmU4
YmE5Mzk2YmJhOTM0ZThmNGMzODhmM2EuLmYzNGM3MzkxNzdhZjQ3ZTE3YWJlYmZlNTUyYzkyMDlk
MWRkYzI0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzU3IEBACisyMDIwLTA5LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmg6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24pOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Byb2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lv
bik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0
U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVT
dG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3Jl
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRU
UENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0
b3JlOjpzZXRDb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVD
b29raWUpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMp
OgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1
bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0TmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyKToKKyAgICAgICAgKFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpOgorICAgICAgICAoV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRh
U3RvcmUpOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXJUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9z
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOl0pOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKToKKyAgICAgICAgKC1bV0tQcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQ
cm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQ
b29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1Byb2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0
b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAg
KC1bV0tXZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOgorICAgICAg
ICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3Bl
bmQ6XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFT
dG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChfV2ViS2l0Q29v
a2llTWFuYWdlclByaXZhdGU6OmNvb2tpZU1hbmFnZXIgY29uc3QpOgorICAgICAgICAoX1dlYktp
dENvb2tpZU1hbmFnZXJQcml2YXRlOjp+X1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlKToKKyAg
ICAgICAgKHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9nZXRfYWNjZXB0X3BvbGljeSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJf
YWRkX2Nvb2tpZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMp
OgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKHdl
YmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZCk6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21h
dGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXhp
bGlhcnlQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1
cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmcp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmNhbmNlbCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVzcyk6CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAg
ICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1h
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlN
YXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVu
dGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxp
Y2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFBy
b3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94
eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1By
b2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHRO
ZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnRl
cm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVh
dGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkYXRhU3RvcmVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJv
Y2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkpOgorICAgICAgICAoV2ViS2l0
OjphbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQ
cm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJl
Y2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
Q2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29u
bmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9v
bEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNz
UG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVu
dCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdl
clByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29v
a2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVD
aGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0
cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaDoK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRp
dGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVjb25u
ZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JG
cmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9u
T3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZv
clRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bv
b2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENv
bm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9y
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250
ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFs
VVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3Nlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpo
YXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFj
dGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2lu
Z1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xl
YXJDYWNoZWRDcmVkZW50aWFscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9y
VGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJl
c3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpmbHVzaENv
b2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZGlkQ29t
bWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNz
YXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0
YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdv
cmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRTZXJ2aWNlV29ya2VyVGlt
ZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRN
YXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1
ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRz
UHJvY2Vzc2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3Rp
Y3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZG9t
YWluSURFeGlzdHNJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5n
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNl
T25jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRo
ZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFi
YXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9h
ZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JU
ZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9y
YWdlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRl
UmVmZXJyZXJGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQ
YXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9v
bHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1NwZWNp
ZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3RhdGlzdGljc1Rlc3RpbmdD
YWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmbHVzaENvb2tpZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvcldlYlNvY2tldCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFy
Q2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpw
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxT
dG9yYWdlRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0
UXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vz
c0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlh
bGl6ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBcHBCb3VuZERv
bWFpbnNGb3JJVFApOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjp1cGRhdGVC
dW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25J
RE1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmV4aXN0
aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc0Fz
c29jaWF0ZWRQcm9jZXNzUG9vbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdD
b29raWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGlk
Q3JlYXRlTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKToK
KyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3Jz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRp
bmdzKToKKwogMjAyMC0wOS0yMSAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxl
LmNvbT4KIAogICAgICAgICBBbGxvdyBhYm91dDpibGFuayBzdWJmcmFtZSBsb2FkcyBmb3Igbm9u
IGFwcC1ib3VuZCB0b3AgZnJhbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKaW5kZXggZmNlMjM4OTg3YTc4
NTBmMThjOWYzMDZjNTBlOThjZTk4OGQxMjVmZC4uYTI3ZWZkODk4M2E4ZmY3NGEwOWUyYjFiYzI4
YjAzMTYwYmEwNDNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
b29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcApAQCAtMTQ5LDkgKzE0OSwxMiBAQCB2
b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBwb2xpY3ksCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAotdm9p
ZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVy
KG1fcHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7
CisgICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9u
KHNlc3Npb25JRCkpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5j
b29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihIVFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dl
YkNvb2tpZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9X
ZWJDb29raWVNYW5hZ2VyLmgKaW5kZXggY2E3ZjU1ZTg2NmJkYWQ0YjFlMzUyZThmNjQwNTdiYWJj
NDYyODMyZC4uZWI3NDE4MjM1ZjU3MDkzMDM5NjAxOWJlNDQ3MjFkZGMwOWZhOThmNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2ll
TWFuYWdlci5oCkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRDb29raWVz
KFBBTDo6U2Vzc2lvbklELCBjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiYpPiYmKTsKIAogICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpOwotICAgIHZv
aWQgZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmKTsKKyAgICB2b2lkIGdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYpOwogCiAgICAgdm9pZCBzdGFydE9ic2Vydmlu
Z0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQpOwogICAgIHZvaWQgc3RvcE9ic2VydmluZ0Nv
b2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdl
cy5pbgppbmRleCBhY2Q3NTQ0MGQ4M2YzNDY2NTBjOWYzM2I3NWI1ZDVkMDkzNTIxM2JhLi42ZmRm
NTc3MmFhNmFhZTM5NDAyYTlhODlmNTZjODRmN2JkNDM1ODVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFu
YWdlci5tZXNzYWdlcy5pbgpAQCAtMzYsNyArMzYsNyBAQCBtZXNzYWdlcyAtPiBXZWJDb29raWVN
YW5hZ2VyIE5vdFJlZkNvdW50ZWQgewogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVk
U2luY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3lu
YwogCiAgICAgdm9pZCBTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJD
b3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lk
IEdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhU
VFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3Qg
V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAg
dm9pZCBTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KQogICAgIHZvaWQgU3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcAppbmRleCBiZThkOTY2NjJiZTZkY2Q4NWZhM2MzMjkyOWFlMGYwYjVkMTgyMzQzLi43ZjQ3
NzcxMzJkNTI0NzU4MTgyOTgxYWFmMGMxOGI3MmI3YmEzOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ3LDI5ICszNDcsMTkg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRl
YnVnTW9kZShwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAK
LSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAg
IGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lv
bklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0g
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLSAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9y
YWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hl
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFT
dG9yZVBhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAg
ICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5zZXNzaW9uSUQ7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJt
YW5lbnRseShkYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CisgICAgICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25J
RCwgZGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBh
cmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNz
aW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CiAjZW5kaWYKLQorICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBk
YXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1l
dGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1v
dGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMs
IFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKLSAgICBib29sIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQg
PSB0cnVlOwotICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQsIFdURk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
KSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKKyAgICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRh
U3RvcmVQYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQsIFdURk1vdmUoZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5KSwgZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdl
clNldC0+YWRkKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8q
IGRlZmF1bHRTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSk7Ci0gICAgYXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNl
c3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29v
a2llIDogcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2ll
cykKLSAgICAgICAgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAg
ICB9CiAKICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygp
KQogICAgICAgICBzdXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNTA1LDgg
KzQ5NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpT
ZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpl
bnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxk
VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXJCYXNlKQog
I2VuZGlmCiB7Ci0gICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpKTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3JrU3RvcmFnZVNl
c3Npb25zLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3
RW50cnkpCiAgICAgICAgIHJldHVybjsKQEAgLTUyMSw3ICs1MDksNyBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJv
b2wgc2hvdWxkVQogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gbWFr
ZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fub25p
Y2FsVVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVByaXZh
dGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAgZWxz
ZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAg
ICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpj
cmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkpOwog
CiAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQSSgp
KSB7CkBAIC01NDQsMjEgKzUzMiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVBY2Nl
cHRQb2xpY3lDaGFuZ2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9saWN5KQogCiBXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lv
bihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNz
aW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0
dXJuICZkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFn
ZVNlc3Npb25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewot
ICAgIGlmICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1
bHROZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vz
c2lvbigpOwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQot
CiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9y
KQogewotICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0
byYgc3RvcmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAg
ICAgICAgIGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCBhYTczMzc3YjczMmY2MTBiODY3OTA1
NmMzN2RmMjhhZWVhMDdhZjgzLi5kYzg2ZjM5Njk3ZmM1MDNlYTRkYmQxYjA2YzMyMjk3NWIxZTY5
ZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5o
CkBAIC0xNzAsNyArMTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0
b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdl
U2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2
b2lkIGVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJik7CkBAIC0zNzUsNyArMzc0LDYgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29u
c3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nl
c3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBAIC01NDQsNyAr
NTQyLDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8
UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3Rv
cmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1h
bmFnZXJTZXQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggOTkwMWM1
Y2I3M2M3NGZlM2RhNGViZjU3YmE4NTEyODZmZGExMDRiZi4uMDJkZGI5MjM0ZTk5OWMzZTZjZGNk
Y2YwYjg3OGI4NzI1ODM2MzI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAK
QEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6
ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IHVpUHJv
Y2Vzc1NES1ZlcnNpb247CiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRl
eHQuZ2V0KCkpOwogI2VuZGlmCi0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVyczsKKyAgICBlbmNvZGVyIDw8IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYgVVNFKFNPVVAp
CiAgICAgZW5jb2RlciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5jb2RlciA8PCBpZ25v
cmVUTFNFcnJvcnM7CkBAIC02OCw5ICs2OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5j
b2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxT
Y2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
Ci0gICAgZW5jb2RlciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxk
RGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAg
IGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFi
bGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTYsMTEgKzExMywxMSBAQCBi
b29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVy
JiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAot
ICAgIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVyczsKLSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwot
ICAgIGlmICghZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9y
PFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBk
ZWNvZGVyID4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0
ZXJzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzID0gV1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJl
c3VsdC5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7
CiAKICNpZiBVU0UoU09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVB
Y2NlcHRQb2xpY3kpKQpAQCAtMTQyLDIwICsxMzksNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJv
YwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNO
b0FjY2VzcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlv
bmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmVzdWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUgPSBXVEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERp
c2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3Vs
ZEVuYWJsZUlUUERhdGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggMTFjYTVhMTk5ZmNmZmU4ODNmZmYwYTJmZjc5ZGZlNDIx
MGQ5ZGFkMS4uNjc0OWRhMGM0YTYzYzIwMjEwNzc4MzU4NDg0NmM5MGQwMTBhMDM0MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtNzEsNyArNzEsNyBAQCBzdHJ1Y3QgTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG5l
dHdvcmtBVFNDb250ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cyBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnM+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAgICAgCiAjaWYgVVNFKFNPVVApCiAg
ICAgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBX
ZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsKQEAgLTg1LDEy
ICs4NSw3IEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAg
VmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIFZlY3RvcjxT
dHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKLSAgICBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBib29sIHNob3VsZERpc2FibGVTZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgYm9v
bCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZSB7IGZhbHNlIH07CisgICAgYm9vbCBzaG91bGRFbmFi
bGVJVFBEYXRhYmFzZSB7IHRydWUgfTsKICAgICBib29sIGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlv
bkRlYnVnTW9kZSB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXggZGE2MzU5
MTI0MjIzZGI5NzAzMGQxZWE3N2JjMDBjZWU1MWZiMDE3ZC4uNTAxMGY5YTg2OTAzOTBkZmZlOWEz
NDRlOTkwNWIyNGU2Njg1YzdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpAQCAtNzgsOSArNzgsNiBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0Nv
Y29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQ
ZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJz
LmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFUU0NvbnRleHQo
cGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMDUsMTEgKzEwMiw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29j
b2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2Fj
aGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7
Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNzOjpzb3VyY2VBcHBsaWNh
dGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9BUFBMSUNBVElPTl9BVURJ
VF9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwv
TmV0d29ya1Byb2Nlc3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQyZGNjOGUzZjliOGYx
NjkyOTk3ZjY3MTkyLi40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5M2UyMjU2YTM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29y
a1Byb2Nlc3NDdXJsLmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGkKIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5l
dHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3Qg
Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBjMjczNmUw
MjZhNTVkM2Q0MDIwZjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0NjIwZjAyYTdkOWU5
ZTg2OWVjODY0OTFiN2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNTUsMTUgKzU1
LDExIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3Rv
cmVTZXNzaW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9u
SGFuZGxlKTsKIAogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nl
c3NDb29raWVTdG9yYWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBh
cmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAg
IGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29v
a2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25J
RCgpKQogICAgICAgICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3RvcmFnZUZyb21J
ZGVudGlmeWluZ0RhdGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmll
cik7CiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNz
aW9uLCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkpLCBXVEZNb3Zl
KHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3Jr
UHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29uc3QgYXV0byYg
Y29va2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0
Q29va2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25J
RCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRl
eCA0MWFmZGNjNjFhZGM1ODNkY2YxOWYyZDQwYWEyODkxZjhhMDEzMjhiLi4wOTNkNTk5NTk2YTY4
ODMwYWYwOTkzZmEzNjgzMWUwYzMyNGJmYmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApAQCAtMTQwLDEx
ICsxNDAsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNldElnbm9yZVRMU0Vycm9y
cyhwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3Jz
KGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0U2hv
dWxkSWdub3JlVExTRXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXggNmQwYzEyOWE3
NDA1MTBkMzg2OTczNzA1YWQwOTJlZjEzMmNjMDc1YS4uMDQ4MTBiM2UxOWJlOTZjYWQxYWQ4MmE0
NGRjZWRiMjZlZjc4MjYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcApAQCAtNDAsMTMgKzQwLDkgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QK
ICAgICBlbmNvZGVyIDw8IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8
IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2ll
U3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2ll
czsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERh
dGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpk
ZWNvZGUoSVBDOjpEZWMKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0
ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY29va2llU3Rv
cmFnZVBhdGhFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4+IHBlbmRpbmdDb29raWVzOwotICAgIGRlY29kZXIgPj4gcGVuZGluZ0Nvb2tpZXM7
Ci0gICAgaWYgKCFwZW5kaW5nQ29va2llcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gV1RGTW92ZSgqcGVuZGluZ0Nvb2tpZXMp
OwotCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBp
bmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VE
aXJlY3Rvcnk7CkBAIC0xMDEsMTQgKzkxLDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAg
ICBpZiAoIWluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIE9wdGlvbmFs
PFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VUZW1wQmxv
YkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIWluZGV4ZWREYXRhYmFzZVRlbXBC
bG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
LmgKaW5kZXggZjI3ZGY0ODk4MDlmMzE5NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQzOS4uZTFiMjMz
NzAxOTlmZTM3MDMxZTlkYzVjMDU3ODE1NTAyMWUzNGQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCkBAIC01MSwxNSArNTEsMTEg
QEAgc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKIAogICAgIFZlY3Rvcjx1aW50
OF90PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXM7CiAgICAgTmV0d29ya1Nlc3Npb25DcmVh
dGlvblBhcmFtZXRlcnMgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAgICAgU3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
OwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKaW5kZXgg
YmMwNzg2NmZiYzM5NjhlNzZjYWE5YTM1NjgxMGM2YTJmYjA5ZGNmZC4uZmY5NTU4OTJiZGEwYjgz
YzIzYTk2YTA4MzllZjNiZDBkOTQ2OWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKQEAgLTQ2LDggKzQ2LDYgQEAgbmFtZXNw
YWNlIEFQSSB7CiBIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0RhdGFTdG9yZSh3
ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQ
b29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQ
cm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENv
b2tpZVN0b3JlKCkKQEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tp
ZVN0b3JlKCkKICAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQo
IW1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9jb29raWVNYW5h
Z2VyUHJveHlPYnNlcnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENv
b2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC04MSwzMyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJv
dW5kQ29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2kKIAogdm9pZCBI
VFRQQ29va2llU3RvcmU6OmNvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8q
IHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiBhbGxDb29raWVzOwotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgICAgICBh
bGxDb29raWVzID0gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwot
ICAgICAgICBhbGxDb29raWVzLmFwcGVuZFZlY3RvcihtX293bmluZ0RhdGFTdG9yZS0+cGVuZGlu
Z0Nvb2tpZXMoKSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIGFsbENvb2tpZXNdICgpIG11dGFibGUgewotICAgICAgICAg
ICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGFsbENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRv
KiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykg
bXV0YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5u
ZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldEFs
bENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11
dGFibGUgewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRv
KiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9w
ZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcih7IH0pOwotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0
Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYgY29va2llcykgbXV0
YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldENvb2tp
ZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUg
ewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtMTE1LDc4ICs5NCwyOSBAQCB2b2lkIEhUVFBD
b29raWVTdG9yZTo6Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0bwogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldENvb2tpZXMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2ll
cywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiBhcHBCb3VuZENvb2tpZXMp
IG11dGFibGUgewotICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nl
c3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vz
c2lvbiBiZWNhdXNlIHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3
b3JrIFByb2Nlc3Mgd2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAg
ICAgICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAg
ICAgICAgICAgICBzZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUp
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9vd25pbmdEYXRh
U3RvcmUtPmFkZFBlbmRpbmdDb29raWUoY29va2llKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tp
ZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
PigpOwotICAgICAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUg
ewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAg
IGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3Mo
KS5jb29raWVNYW5hZ2VyKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVs
ZXRlQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3du
aW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0g
ICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Np
b24pCi0gICAgICAgICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0
b3JlKGNvb2tpZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3Jl
LT5yZW1vdmVQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAg
IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9
IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAg
Y29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgY29va2llLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci0gICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0
YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5h
Z2VyLmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
ZGVsZXRlQWxsQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9v
bEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAg
IGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAg
ICAgICAgICBkZWxldGVDb29raWVzSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNv
b2tpZU1hbmFnZXItPmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpKTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdv
cmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxs
Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBU
aGUgQ29tcGxldGlvbkhhbmRsZXIgc2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbENvb2tpZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xp
Y3kpOwotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFu
YWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
Ci0gICAgY29va2llTWFuYWdlci0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0Rh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFT
dG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdl
ci5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgcG9saWN5LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENv
b2tpZVN0b3JlOjpmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMjI3LDIxICsxNTcsNyBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6
cmVnaXN0ZXJPYnNlcnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCiAKICAgICBtX2Nvb2tpZU1hbmFn
ZXJQcm94eU9ic2VydmVyID0gbWFrZVVuaXF1ZTxBUElXZWJDb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcj4oKnRoaXMpOwogCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wpIHsK
LSAgICAgICAgQVNTRVJUKCFtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMpOwotCi0gICAgICAg
IC8vIExpc3RlbiBmb3IgY29va2llIG5vdGlmaWNhdGlvbnMgaW4gdGhlIFVJUHJvY2VzcyBpbiB0
aGUgbWVhbnRpbWUuCi0gICAgICAgIHN0YXJ0T2JzZXJ2aW5nQ2hhbmdlc1RvRGVmYXVsdFVJUHJv
Y2Vzc0Nvb2tpZVN0b3JlKFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICBjb29raWVzRGlkQ2hhbmdl
KCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIG1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyA9
IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFu
YWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0
b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCkBAIC0yNzYsNDYg
KzE5MiwxMCBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0RpZENoYW5nZSgpCiB2b2lk
IEhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCgpCiB7CiAgICAgbV9vYnNl
cnZlZENvb2tpZU1hbmFnZXJQcm94eS0+dW5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBudWxscHRyOwotCi0gICAgYXV0byogcG9vbCA9
IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25z
KCk7Ci0KLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb2JzZXJ2ZWRD
b29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmbV9vd25p
bmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwogICAgIG1fb2Jz
ZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKLXZv
aWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9u
cygpCi17Ci0gICAgQVNTRVJUKCFtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZp
ZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKFt0aGlzXShX
ZWJQcm9jZXNzUG9vbCYgbmV3UHJvY2Vzc1Bvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0Rh
dGFTdG9yZS0+aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wobmV3UHJvY2Vzc1Bvb2wpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIE5vdyB0aGF0IGFuIGFzc29jaWF0ZWQgcHJvY2Vz
cyBwb29sIGV4aXN0cywgd2UgbmVlZCB0byBmbHVzaCB0aGUgVUkgcHJvY2VzcyBjb29raWUgc3Rv
cmUKLSAgICAgICAgLy8gdG8gbWFrZSBzdXJlIGFueSBjaGFuZ2VzIGFyZSByZWZsZWN0ZWQgd2l0
aGluIHRoZSBuZXcgcHJvY2VzcyBwb29sLgotICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3ND
b29raWVTdG9yZSgpOwotICAgICAgICBuZXdQcm9jZXNzUG9vbC5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotCi0gICAgICAgIGlmIChtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKSB7Ci0gICAg
ICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbmV3UHJvY2Vzc1Bvb2wuc3Vw
cGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAg
ICAgIH0KLSAgICAgICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygp
OwotICAgIH0pOwotfQotCi12b2lkIEhUVFBDb29raWVTdG9yZTo6dW5yZWdpc3RlckZvck5ld1By
b2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAgaWYgKG1fcHJvY2Vzc1Bvb2xDcmVhdGlv
bkxpc3RlbmVySWRlbnRpZmllcikKLSAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJQ
cm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJ
ZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmll
ciA9IDA7Ci19Ci0KICNpZiAhUExBVEZPUk0oQ09DT0EpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Zmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKSB7IH0KIFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+IEhUVFBDb29raWVTdG9yZTo6Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
Q29va2llcygpIHsgcmV0dXJuIHsgfTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCmluZGV4IGQ2MjBhZGRhNGU3Zjg5NDU2NjE4YTNlMjJl
MWJmZDQzNTc3NzViMTkuLmEwNWY0MTQzMGRiMmIyM2Q0MTc4NDA3OWE0ZmI4NmM3NDYwYTc1NDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3Jl
LmgKQEAgLTgzLDkgKzgzLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3Rv
cmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTmV3
UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0KICAgICB2b2lkIGZsdXNoRGVmYXVsdFVJUHJvY2Vz
c0Nvb2tpZVN0b3JlKCk7CiAgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGdldEFs
bERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKICAgICBzdGF0aWMgdm9pZCBz
ZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb25zdCBXZWJDb3JlOjpDb29r
aWUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCmluZGV4
IDU4YzU0NTNmNDg5ODdmNWUxYWZhZmVmMzRjNDMzMzVmMWI0Y2M5OTAuLjY1ZjhiNTNmNWIzZDMw
NWNmMjgwYmE1ZDMwYWFlMzdiMzlhY2Y0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmNwcApAQCAtNDExLDExICs0MTEsNiBAQCB2b2lkIFdLQ29udGV4dFBy
ZWNvbm5lY3RUb1NlcnZlcihXS0NvbnRleHRSZWYsIFdLVVJMUmVmKQogewogfQogCi1XS0Nvb2tp
ZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4
dFJlZikKLXsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0
UmVmKS0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSk7Ci19Ci0K
IFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29u
dGV4dFJlZikKIHsKICAgICByZXR1cm4gV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFT
dG9yZSgpOwpAQCAtNTI3LDEzICs1MjIsNiBAQCB2b2lkIFdLQ29udGV4dFNldEphdmFTY3JpcHRH
YXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLAogICAg
IFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3Rv
clRpbWVyRW5hYmxlZChlbmFibGUpOwogfQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNT
TENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQs
IGJvb2wgYWxsb3dzKQotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6
OnRvSW1wbChjb250ZXh0KS0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQ
bHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAg
ICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVn
SW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoKS5sZWFrUmVmKCkpOwpAQCAtNTc1LDExICs1NjMsNiBA
QCB2b2lkIFdLQ29udGV4dFNldEZvbnRBbGxvd0xpc3QoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYs
IFdLQXJyYXlSZWYgYXJyYXlSZWYpCiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNl
dEZvbnRBbGxvd0xpc3QoV2ViS2l0Ojp0b0ltcGwoYXJyYXlSZWYpKTsKIH0KIAotdm9pZCBXS0Nv
bnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAg
ICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0K
LQogdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYgY29u
dGV4dCkKIHsKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlU2VydmljZVdv
cmtlcnMoKTsKQEAgLTU4Nyw3ICs1NzAsNyBAQCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZp
Y2VXb3JrZXJzKFdLQ29udGV4dFJlZiBjb250ZXh0KQogCiBQcm9jZXNzSUQgV0tDb250ZXh0R2V0
TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewotICAg
IHJldHVybiBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+bmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyKCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1
Z2luKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBkb21haW5SZWYsIFdLU3Ry
aW5nUmVmIG5hbWVSZWYsIFdLQXJyYXlSZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5UmVmIGV4dGVu
c2lvbnNSZWYpCkBAIC02MTksMTIgKzYwMiwxMSBAQCB2b2lkIFdLQ29udGV4dENsZWFyQ3VycmVu
dE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogICAgIFdl
YktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5jbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVz
dGluZygpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcykKK3ZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcyhXS0NvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykK
IHsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFBy
aW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgd2Vic2l0ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdl
YnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0g
ICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktp
dDo6dG9JbXBsKHdlYnNpdGVEYXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmgKaW5kZXggMWQ4ZmFiOGExNDg2YWFkYjQ5NDE0NGI5OGYxMGU5MzYz
OGQwYzVlNi4uMmFiNmVmODZmNTMwZTc3Zjc0Y2JkNWRmNTg2MmFjNGQzMGI3OTg3NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2OCw3ICsxNjgsNiBA
QCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihXS0NvbnRleHRSZWYg
Y29udGV4dCk7CiBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4dEdldFdl
YnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURf
V0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsK
IAogV0tfRVhQT1JUIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0QXBw
bGljYXRpb25DYWNoZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJF
Q0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0
b3JlKTsKLVdLX0VYUE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFu
YWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdLX0VYUE9S
VCBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1hbmFnZXIo
V0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVmIFdLQ29u
dGV4dEdldEljb25EYXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFnZU1hbmFn
ZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNF
TUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAppbmRleCBhMDI1MDEx
ZjcwY2M2NTlmNWZhYTA4YTdkNmNiYjNmZjU2ZWU2YTM4Li5kODM5Y2FjYjI4YmE1NjVkYzk1YTgz
OTNiZmNjYWI5MzhkYWRjYzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0UHJpdmF0ZS5oCkBAIC04MywxMSArODMsOCBAQCBXS19FWFBPUlQgdm9pZCBX
S0NvbnRleHRXYXJtSW5pdGlhbFByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogLy8gQXQg
c29tZSBwb2ludCBpdCBzaG91bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4
dFNldFVzZXNOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1XS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tf
RVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVm
KTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVG
b3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0eXBlZGVmIHZv
aWQgKCpXS0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1JlZiBtZXNzYWdl
TmFtZSk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9u
KFdLQ29udGV4dEludmFsaWRNZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VGdW5jdGlvbik7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNp
dGVEYXRhU3RvcmVSZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmNwcAppbmRleCA5ZGRhNTkxYzk1MTg5YWIwYzI1YWM1NTQ2NmMwYTJi
ZmMzOTI3ZWJjLi5iNzhhOTFlMzNlZGY5ZTI5NGJiNGQ4ZDRjMGRkZjU3Y2U1MDE2YjdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVS
ZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5jcHAKQEAgLTY5LDYgKzY5LDExIEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1dl
YnNpdGVEYXRhU3RvcmVDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihXS1dlYnNpdGVEYXRhU3RvCiAg
ICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRl
KCpXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKSwgc2Vzc2lvbklEKS5sZWFrUmVmKCkpOwog
fQogCit2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpCit7CisgICAgV2ViS2l0Ojp0b0ltcGwoZGF0YVN0
b3JlKS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKK30KKwogdm9pZCBXS1dlYnNpdGVEYXRh
U3RvcmVSZW1vdmVJVFBEYXRhRm9yRG9tYWluKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3Rv
cmVSZWYsIFdLU3RyaW5nUmVmIGhvc3QsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9y
ZVJlbW92ZUlUUERhdGFGb3JEb21haW5GdW5jdGlvbiBjYWxsYmFjaykKIHsKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAppbmRleCBlNzdkMDljMTA3ZDFkYTA3
ODNkMDljMDdlMjgwM2QwODcxMjVlNDhiLi5jM2ZhMWJmM2Y5MjQ4YzJmZTQ5YmUxMjQzOTY0NDEx
ZjgzMWQyYTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dl
YnNpdGVEYXRhU3RvcmVSZWYuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1dlYnNpdGVEYXRhU3RvcmVSZWYuaApAQCAtNTAsNiArNTAsOSBAQCBXS19FWFBPUlQgdm9pZCBX
S1dlYnNpdGVEYXRhU3RvcmVTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldFRl
c3RpbmcoVwogCiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENy
ZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogCitXS19FWFBP
UlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0
ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0
b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9y
ZSk7CisKIFdLX0VYUE9SVCBib29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogV0tf
RVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUpOwog
dHlwZWRlZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0VwaGVtZXJhbEZ1bmN0
aW9uKShib29sIGlzRXBoZW1lcmFsLCB2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQppbmRleCBm
ZjMwOTQ5ODZjMjQzZDA0NzRmMjUyZDM5MWU2Y2NiNzRmMWZlZDViLi5hODAyYjk3YzdiNDE2Zjk2
YmJhNTRmZWJlN2ExZGRkNDM4M2QwYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQpAQCAtNDA2LDI4ICs0MDYsNiBAQCBzdGF0
aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1h
cDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJTdXBwb3J0ZWRQbHVn
aW5zKCk7CiB9CiAKLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCi17Ci0gICAgX3By
b2Nlc3NQb29sLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCi0tICh2b2lkKV9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKLXsKLSAgICBfcHJvY2Vzc1Bvb2wt
PnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0K
LQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQ
cm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFr
ZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgIH0pOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUK
LXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQot
CiAtICh2b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29ya2VycwogewogICAgIF9wcm9jZXNzUG9vbC0+
dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKQEAgLTQzNSwxMiArNDEzLDEyIEBAIHN0YXRpYyBO
U0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0
cmluZywgSGFzaE1hcDxTCiAKIC0gKHZvaWQpX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3M6KEJPT0wpdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcwogewotICAgIF9wcm9j
ZXNzUG9vbC0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MpOwogfQogCiAtIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCiB7Ci0gICAgcmV0
dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CisgICAgcmV0dXJu
IDA7CiB9CiAKIC0gKHBpZF90KV9wcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcgpAQCAtNTYwLDE4
ICs1MzgsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25h
cnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0
Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLS0gKHZvaWQp
X3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAotewotICAgIF9wcm9j
ZXNzUG9vbC0+c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKLX0KLQotLSAo
dm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFs
bG93cwotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBfcHJvY2Vzc1Bvb2wtPnNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlm
Ci19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogLSAoaWQgPF9XS0dlb2xvY2F0aW9uQ29y
ZUxvY2F0aW9uUHJvdmlkZXI+KV9jb3JlTG9jYXRpb25Qcm92aWRlcgogewpAQCAtNjA0LDExICs1
NzAsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnko
Y29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIH0pOwogfQogCi0tIChCT09MKV9u
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxl
bWVudAotewotICAgIHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nKGVudGl0bGVtZW50KTsKLX0KLQogLSAodm9pZClfY2xlYXJQZXJtYW5l
bnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilw
cm90ZWN0aW9uU3BhY2UKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyUGVybWFuZW50Q3JlZGVu
dGlhbHNGb3JQcm90ZWN0aW9uU3BhY2UoV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rp
b25TcGFjZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAppbmRleCA2NzY5MDE1ZTA4NTU4OTk0Y2Q4YTIxOWEx
N2E5YzY4YWRlM2I1MzgzLi5iZjQ4Y2ExYzUyYzIyMTk3MzY4Yjg4MjkwNTA3MjIzZjBmMjA2Y2Qx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNz
UG9vbFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQ
cm9jZXNzUG9vbFByaXZhdGUuaApAQCAtODcsMTAgKzg3LDYgQEAKIC0gKF9XS0Rvd25sb2FkICop
X3Jlc3VtZURvd25sb2FkRnJvbURhdGE6KE5TRGF0YSAqKXJlc3VtZURhdGEgd2Vic2l0ZURhdGFT
dG9yZTooV0tXZWJzaXRlRGF0YVN0b3JlICopZGF0YVN0b3JlICBwYXRoOihOU1N0cmluZyAqKXBh
dGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4g
U2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoaWxlIG5vIHdlYiBjb250ZW50IHByb2Nlc3NlcyBhcmUg
cnVubmluZy4KLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNz
UHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElf
QVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClf
c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9p
ZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCks
IGlvcygxMi4wKSk7CiAKIC8vIFRlc3Qgb25seS4KQEAgLTEyMiwxMyArMTE4LDEwIEBACiAtICh2
b2lkKV9wcmVjb25uZWN0VG9TZXJ2ZXI6KE5TVVJMICopc2VydmVyVVJMIFdLX0FQSV9ERVBSRUNB
VEVEX1dJVEhfUkVQTEFDRU1FTlQoIldLV2ViVmlldy5fcHJlY29ubmVjdFRvU2VydmVyIiwgbWFj
b3MoMTAuMTMuNCwgV0tfTUFDX1RCQSksIGlvcygxMS4zLCBXS19JT1NfVEJBKSk7CiAKIC8vIFRl
c3Qgb25seS4KLS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdv
cmtlcjooQk9PTClhbGxvd3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDEx
LjMpKTsKIC0gKHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3Rp
bmc6KHBpZF90KXBpZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PE5TU3RyaW5n
ICo+ICopKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCks
IGlvcygxMi4yKSk7Ci0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVz
dGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0
LjQpLCBpb3MoMTIuMikpOwogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclBy
b3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBnZXR0ZXI9X2lzQ29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQsIHNldHRl
cj1fc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQ6KSBCT09MIF9jb29raWVTdG9y
YWdlUGFydGl0aW9uaW5nRW5hYmxlZCBXS19BUElfREVQUkVDQVRFRCgiUGFydGl0aW9uZWQgY29v
a2llcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCIsIG1hY29zKDEwLjEyLjMsIDEwLjE0LjQpLCBp
b3MoMTAuMywgMTIuMikpOwotLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9P
TCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwog
CiAvLyBUZXN0IG9ubHkuCiAtICh2b2lkKV9zZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRl
c3RpbmdXaXRoRmlyc3RQYXJ0eTooTlNVUkwgKilmaXJzdFBhcnR5VVJMIHRoaXJkUGFydHk6KE5T
VVJMICopdGhpcmRQYXJ0eVVSTCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbjooQk9PTClzaG91
bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSlj
b21wbGV0aW9uSGFuZGxlciAgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9z
KFdLX0lPU19UQkEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCmluZGV4IDI5OGQ5Y2VjOWU4NGQ4YTUxMjIwNjVj
Yzk5MjMzZWY0ZjBiOTUzODkuLmFlOWM0NTA3NzkwODZjYzFlMzExNGNlMTNmMmQyMTg4ZTc4N2Yx
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2Vic2l0ZURhdGFTdG9yZS5tbQpAQCAtNjE3LDYgKzYxNywxMSBAQCBzdGF0aWMgVmVjdG9yPFdl
YktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRh
dGFSZWNvcgogICAgIH0pOwogfQogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVt
ZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAoreworICAgIHJldHVybiBfd2Vi
c2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoZW50
aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVnYXRlPilfZGVs
ZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdldCgpLmdldCgpOwpAQCAtNjY4LDQgKzY3
MywzMiBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0
ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogI2VuZGlmCiB9CiAKKy0gKHZvaWQpX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfd2Vi
c2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3Rp
bmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0g
eworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworfQorCistICh2b2lkKV9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKK3sKKyAgICBfd2Vic2l0ZURh
dGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGlu
ZygpOworCit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQoreworICAg
IF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKK30KKwor
LSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kCit7Cisg
ICAgX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZChiYWNrZ3JvdW5kKTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgK
aW5kZXggOTkzMjAxMDQ2YjU1MWMzZjI4ZGYyZGMwYTAzNDZkN2JjNzlhYzVmNC4uNDIxNWRiNzQ3
YmEzMjJmYWViOGE0N2UxNjc1YTY1ODM4MTQ3MjYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0
ZS5oCkBAIC04NSw5ICs4NSwxNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dL
V2Vic2l0ZURhdGFTdG9yZUZldGNoT3B0aW9ucykgewogCiAtICh2b2lkKV9yZW5hbWVPcmlnaW46
KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKiluZXdOYW1lIGZvckRhdGFPZlR5cGVzOihOU1Nl
dDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9p
ZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9wZXJ0eSAobnVsbGFi
bGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2Rl
bGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZv
aWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVu
ZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZB
SUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc3lu
dGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBlbmQKIAogTlNfQVNTVU1F
X05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDFlZTczZWJjMGVhMDM2Zjg2YjNmZTk0
NDE0OTA3MmU2YWM0ZGM3NjcuLjc3MDE0OTk4MzZlZTQ0ZjlhY2YwZTI3MGQ3MGM5NWQxNmJlNjc4
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdENvb2tpZU1hbmFnZXIuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlci5oIgogCisjaW5jbHVkZSAiTmV0d29y
a1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIlNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5
cGUuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJL
aXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIgpAQCAtNTYsNiArNTcsMTIgQEAgZW51bSB7CiB9Owog
CiBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKKyAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHkmIGNvb2tpZU1hbmFnZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGRh
dGFNYW5hZ2VyKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERh
dGFTdG9yZShkYXRhTWFuYWdlcikubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7Cisg
ICAgfQorCiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVChkYXRhTWFuYWdlcik7CkBAIC02NCw4ICs3MSw3IEBAIHN0cnVjdCBfV2ViS2l0
Q29va2llTWFuYWdlclByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0
ZSgpCiAgICAgewotICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2ll
T2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CisgICAgICAgIGNvb2tpZU1h
bmFnZXIoKS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsK
ICAgICB9CiAKICAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW5hZ2VyOwpAQCAt
MTM5LDExICsxNDUsOSBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRDb29raWVNYW5hZ2Vy
Q3JlYXRlKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbgogewogICAgIFdlYktpdENv
b2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9lbWl0KG1h
bmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9CisgICAgbWFu
YWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFu
YWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2lnbmFsX2Vt
aXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1h
bmFnZXI7CiB9CiAKQEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsCiAg
ICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vz
c1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIG1hbmFnZXItPnByaXYtPmNv
b2tpZU1hbmFnZXIoKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmlu
Zzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUo
c3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE5Miw4ICsxOTUsNyBAQCB2b2lkIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2Vy
LCBXZWJLaQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VS
KG1hbmFnZXIpKTsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkt
PnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRv
SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgbWFuYWdlci0+
cHJpdi0+Y29va2llTWFuYWdlcigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+
cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgp
IHsgfSk7CiB9CiAKIC8qKgpAQCAtMjI0LDcgKzIyNiw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIEdD
YW5jCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CisgICAgbWFuYWdlci0+cHJpdi0+
Y29va2llTWFuYWdlcigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSBwb2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQo
KSwgdG9XZWJLaXRDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7CiB9CkBAIC0y
NjksMTEgKzI3MSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUoV2Vi
S2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3JldHVybl9pZl9m
YWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFz
a19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAg
Ly8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFi
YXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0
aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3Qg
YXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bv
b2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1
cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RG
TW92ZSh0YXNrKV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENv
b2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tp
ZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9i
b29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIwLDExICszMTgsNyBA
QCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRDb29raWVNYW5h
Z2VyKiBtYW5hZ2VyLCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAog
ICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBj
YW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSBy
ZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdh
cmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVz
dCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9v
bHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2sp
XShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIG1hbmFnZXIt
PnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25J
RCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0
YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAg
R0xpc3QqIGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUg
OiBjb29raWVzKQogICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29r
aWVzTGlzdCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzcyLDcgQEAgdm9p
ZCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2Vy
KiBtYW5hZ2VyLCBTb3VwQ29va2kKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAg
ICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2Fu
Y2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVh
ZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJk
bGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3Qg
dXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xz
ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAg
IG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5kZWxldGVDb29raWUobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUo
dGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJV
RSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDg5YmU1NmFkNzFkNzE1NjkxMmEyNjkxNTMw
NTdkZjUyN2NkZDQ0NjAuLmNmZjAzNTg2ZGY4YTFmYjk2YTYyYTAxN2EzYzQ2ZTVmNDBkZTJkMzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdl
YkNvbnRleHQuY3BwCkBAIC00MDQsNyArNDA0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29u
dGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgcHJpdi0+d2Vic2l0ZURh
dGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcoImxv
Y2FsLXN0b3JhZ2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEo
KSwgbnVsbHB0cikpOwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlKGNvbmZpZ3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRQcmltYXJ5
RGF0YVN0b3JlKHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJz
aXRlRGF0YU1hbmFnZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1l
c3NhZ2VIYW5kbGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKICAg
ICAgICAgLy8gU2luayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRyPFdlYktpdFVz
ZXJNZXNzYWdlPiB1c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRlKFdURk1vdmUo
bWVzc2FnZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTE2MDMsOCArMTYwMiw4
IEBAIHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3ByZWZldGNoX2RucyhXZWJLaXRXZWJDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBjaGFyKiBob3N0CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoaG9zdG5hbWUp
OwogCi0gICAgaWYgKGNvbnRleHQtPnByaXYtPmRuc1ByZWZldGNoZWRIb3N0cy5hZGQoaG9zdG5h
bWUpLmlzTmV3RW50cnkpCi0gICAgICAgIGNvbnRleHQtPnByaXYtPnByb2Nlc3NQb29sLT5zZW5k
VG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWZldGNoRE5T
KFN0cmluZzo6ZnJvbVVURjgoaG9zdG5hbWUpKSk7CisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9y
ZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShjb250ZXh0LT5wcml2LT53
ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5n
Ojpmcm9tVVRGOChob3N0bmFtZSkpLCAwKTsKICAgICBjb250ZXh0LT5wcml2LT5kbnNQcmVmZXRj
aEh5c3RlcmVyaXMuaW1wdWxzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IDRh
YjQ3ZmZmNTkxMWVlYzM3ZTU2YmM1YmJiMzI5ZWJhZWE3ZDM4NjUuLjMwMDZmNGZhZTZjNDNjMjZi
ZjQwODIyYjZkZTg2OGVmMmUwMmNmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0xMzky
LDggKzEzOTIsOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbgogCiAgICAgY29va2llLmh0dHBP
bmx5ID0gKmh0dHBPbmx5OwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5h
Z2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
Ci0gICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCku
c2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CisgICAgV2ViQ29va2llTWFu
YWdlclByb3h5JiBjb29raWVNYW5hZ2VyID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdv
cmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2ll
cyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxs
YmFja10oKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpA
QCAtMTQwOSw4ICsxNDA5LDggQEAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygKIAogICAgIFN0cmlu
ZyBob3N0ID0gYWN0aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2ViQ29va2llTWFu
YWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwg
ZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBXZWJDb29raWVN
YW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkubmV0
d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVD
b29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwg
eyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOwogCiAgICAg
cmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGls
aWFyeVByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5LmgKaW5kZXggNDFjMGEwZmJmNTA2ZWZhMTQwOGJjZWY5YWY4YTkwYjg1YTFhZDA4
YS4uNGYzOThiNTMwZjYwODU3NWM5NjdiODNjNzRmYTJmNDMyOGY2Y2UzYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94eSgpOwogCiAg
ICAgdm9pZCBjb25uZWN0KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdGVybWluYXRlKCk7CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxl
cigpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAppbmRleCBkYmU0NGY5
NTk0MTA1MTEyMTUxMjhkMjlkMjE0ZWVlMDc0YWFmODRjLi40Yzg0NWEwZWM3MjU2NTljZmU3OWNl
YTM1ZDNjYmE5NjY4MzQ2MTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaApA
QCAtNDEsMTEgKzQxLDExIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHk7CiAKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudCBmaW5hbCA6IHB1YmxpYyBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCB7
Ci1wcml2YXRlOgorcHVibGljOgogICAgIHZvaWQgc3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JikgZmluYWw7CiAgICAgdm9pZCBzdG9wTG9hZGluZyhMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYsIExlZ2FjeUN1c3RvbVByb3RvY29sSUQpIGZpbmFs
OwogICAgIHZvaWQgaW52YWxpZGF0ZShMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYp
IGZpbmFsOwotCitwcml2YXRlOgogICAgIEhhc2hNYXA8TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwg
UmV0YWluUHRyPFdLQ3VzdG9tUHJvdG9jb2xMb2FkZXI+PiBtX2xvYWRlck1hcDsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29j
b2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29h
Lm1tCmluZGV4IDc2ZDdhNjQwNDFhMjkxZDVmMjk3MzUxNzZlMzFlYTcwZjVlZDU1NmMuLjE5ZWZj
YTZhNjQwY2IyZjMxYzJhODc1NTA2YjFkNjY5ZDZkYzc2YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtMTM0LDgg
KzEzNCw5IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKQogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0g
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNldFBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAg
ICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbZW5hYmxlZCA9IHBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkg
eworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZXRQcm9jZXNzU3VwcHJlc3Np
b25FbmFibGVkKGVuYWJsZWQpOworICAgIH0pOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50
ZXIudmFsdWUoKSkKQEAgLTE2Niw4ICsxNjcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0
Zm9ybUluaXRpYWxpemUoKQogICAgIGlmICghW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJE
ZWZhdWx0c10gYm9vbEZvcktleTpAIldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVy
Il0pCiAgICAgICAgIGluc3RhbGxNZW1vcnlQcmVzc3VyZUhhbmRsZXIoKTsKIAotICAgIHNldExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudD4oKSk7Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAh
UExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgaWYgKCFfTUdDYWNoZVZhbGlkKCkpIHsKICAgICAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVV
RV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsKQEAgLTQ5MywyMiArNDkyLDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmEKIAogICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CiAKLSAgICB7Ci0gICAgICAgIGJvb2wgaXNT
YWZhcmkgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc01pbmlCcm93c2VyID0gZmFsc2U7Ci0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpJT1NBcHBs
aWNhdGlvbjo6aXNNb2JpbGVTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNv
cmU6OklPU0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZWxpZiBQTEFURk9STShNQUMp
Ci0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCk7
Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNNaW5p
QnJvd3NlcigpOwotI2VuZGlmCi0gICAgICAgIGlmIChpc1NhZmFyaSB8fCBpc01pbmlCcm93c2Vy
KSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBz
dHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQcm94eURlZmF1bHRzS2V5XSk7Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5odHRwc1Byb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5n
Rm9yS2V5OihOU1N0cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXldKTsKLSAgICAg
ICAgfQotICAgIH0KLQogICAgIHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQgPSBhZG9wdENG
KF9DRk5ldHdvcmtDb3B5QVRTQ29udGV4dCgpKTsKIAogICAgIHBhcmFtZXRlcnMuc2hvdWxkU3Vw
cHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpXZWJLaXRT
dXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlckRlZmF1bHRzS2V5XTsKQEAgLTUyMiwxMiArNTA1
LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKICAgICBOU051bWJlciAqZGF0YWJhc2VFbmFi
bGVkVmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VF
bmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogICAgIGlmIChkYXRhYmFzZUVu
YWJsZWRWYWx1ZSkKICAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9
IGRhdGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIHBhcmFt
ZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZl
cmVuY2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuZW5hYmxl
QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5
OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKV1dOwotCi0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tp
bmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9u
KCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQo
KQpAQCAtNjA2LDExICs1ODUsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzU3VwcHJl
c3Npb25FbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gIW1fdXNlck9ic2VydmFibGVQYWdlQ291
bnRlci52YWx1ZSgpICYmICFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50
ZXIudmFsdWUoKTsKIH0KIAotYm9vbCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKLXsKLSAgICBy
ZXR1cm4gV1RGOjpoYXNFbnRpdGxlbWVudChlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rp
b24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKLX0KLQog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKIGZsb2F0
IFdlYlByb2Nlc3NQb29sOjpkaXNwbGF5QnJpZ2h0bmVzcygpCiB7CkBAIC05NDcsMjMgKzkyMSw0
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVySGlnaER5bmFtaWNSYW5nZUNoYW5nZUNh
bGxiYWNrKCkKIH0KICNlbmRpZgogCi1PU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IFdlYlByb2Nl
c3NQb29sOjp4cGNFbmRwb2ludE1lc3NhZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2VuZHBv
aW50TWVzc2FnZTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNz
WFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRwb2lu
dE1lc3NhZ2UpCi17Ci0gICAgbV9lbmRwb2ludE1lc3NhZ2UgPSBlbmRwb2ludE1lc3NhZ2U7Ci0K
LSAgICBmb3IgKGF1dG8gcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7Ci0gICAgICAgIGlmIChwcm9j
ZXNzLT5zdGF0ZSgpICE9IEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6U3RhdGU6OlJ1bm5pbmcpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFwcm9jZXNzLT5jb25uZWN0aW9uKCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byBjb25uZWN0aW9uID0gcHJvY2Vz
cy0+Y29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCk7Ci0gICAgICAgIHhwY19jb25uZWN0aW9u
X3NlbmRfbWVzc2FnZShjb25uZWN0aW9uLCBlbmRwb2ludE1lc3NhZ2UuZ2V0KCkpOwotICAgIH0K
LX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAKaW5kZXggYzVkZTRlN2QwZjU5MTk0ZjQz
YTAyM2IwODllMzcyYzU4Y2Y4ZWUwNi4uZjdjZmY4NTJmMGJhNmQwMTU1MTE2NWRkOGE5ZjdkNTc2
M2IwMDdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5LmNwcApAQCAtNzUsOCArNzUsOCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmNh
bmNlbCgpCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOworICAgIGlm
IChtX2RhdGFTdG9yZSkKKyAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCks
IDApOwogfQogCiB2b2lkIERvd25sb2FkUHJveHk6OmludmFsaWRhdGUoKQpAQCAtMTAzLDE1ICsx
MDMsMTMgQEAgV2ViUGFnZVByb3h5KiBEb3dubG9hZFByb3h5OjpvcmlnaW5hdGluZ1BhZ2UoKSBj
b25zdAogI2lmIFBMQVRGT1JNKENPQ09BKQogdm9pZCBEb3dubG9hZFByb3h5OjpwdWJsaXNoUHJv
Z3Jlc3MoY29uc3QgVVJMJiBVUkwpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgIGlm
ICghbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgYm9vbCBjcmVhdGVkU2FuZGJv
eEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3Rl
bVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOwotICAg
ICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJv
eEV4dGVuc2lvbik7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhh
bmRsZSksIDApOwotICAgIH0KKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOwor
ICAgIGJvb2wgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJl
YWRXcml0ZSwgaGFuZGxlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5z
aW9uLCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbik7CisgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQ
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxpc2hEb3dubG9hZFBy
b2dyZXNzKG1fZG93bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKIH0KICNlbmRpZiAvLyBQTEFU
Rk9STShDT0NPQSkKIApAQCAtMTMxLDExICsxMjksMTAgQEAgdm9pZCBEb3dubG9hZFByb3h5Ojpk
aWRTdGFydChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3Vn
Z2UKIAogdm9pZCBEb3dubG9hZFByb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgdWlu
dDY0X3QgY2hhbGxlbmdlSUQpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgIGlmICgh
bV9wcm9jZXNzUG9vbCB8fCAhbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1
dG8gYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
UHJveHk6OmNyZWF0ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgY2hhbGxlbmdl
SUQsIG1ha2VSZWYoKm1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigp
KSwgbnVsbHB0cik7Ci0KKyAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkgPSBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShhdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSksIGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX2RhdGFTdG9yZS0+bmV0d29ya1By
b2Nlc3MoKS5jb25uZWN0aW9uKCkpLCBudWxscHRyKTsKICAgICBtX3Byb2Nlc3NQb29sLT5kb3du
bG9hZENsaWVudCgpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgqdGhpcywgYXV0
aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5nZXQoKSk7CiB9CiAKQEAgLTE0NiwxNSArMTQzLDEw
IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYm
IHByb3Bvc2VkUmVxdWVzdCwgY29uc3QgUmVzCiAKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9h
ZENsaWVudCgpLndpbGxTZW5kUmVxdWVzdCgqdGhpcywgV1RGTW92ZShwcm9wb3NlZFJlcXVlc3Qp
LCByZWRpcmVjdFJlc3BvbnNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
XShSZXNvdXJjZVJlcXVlc3QmJiBuZXdSZXF1ZXN0KSB7CiAgICAgICAgIG1fcmVkaXJlY3RDaGFp
bi5hcHBlbmQobmV3UmVxdWVzdC51cmwoKSk7Ci0KLSAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlz
LT5tX3Byb2Nlc3NQb29sKQorICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fZGF0YVN0b3Jl
KQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJv
eHkgPSBwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpOwotICAg
ICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzUHJveHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3NQcm94eS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3
UmVxdWVzdCksIDApOworICAgICAgICBhdXRvJiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVj
dGVkVGhpcy0+bV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIG5ldHdvcmtQ
cm9jZXNzUHJveHkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNl
bmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOwog
ICAgIH0pOwogfQogCkBAIC0xNzksMTYgKzE3MSwxNCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRl
Y2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMoRG93bmxvYWRJRCBkb3du
bAogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1f
cHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2Vz
dGVkRmlsZW5hbWUoKnRoaXMsIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzYW5pdGl6ZVN1Z2dlc3Rl
ZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKSwgZG93bmxvYWRJRCA9IGRvd25sb2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxv
d092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CisgICAgbV9wcm9jZXNzUG9vbC0+ZG93
bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhp
cywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2Vz
dGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBkb3du
bG9hZElEXSAoQWxsb3dPdmVyd3JpdGUgYWxsb3dPdmVyd3JpdGUsIFN0cmluZyBkZXN0aW5hdGlv
bikgewogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhh
bmRsZTsKICAgICAgICAgaWYgKCFkZXN0aW5hdGlvbi5pc051bGwoKSkKICAgICAgICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShkZXN0aW5hdGlvbiwgU2FuZGJveEV4dGVuc2lv
bjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgICAgICBp
ZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgICAgIGlmICghbV9kYXRhU3RvcmUpCiAgICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWRE
ZXN0aW5hdGlvbihkb3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDApOworICAgICAgICBt
X2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElELCBk
ZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxs
b3dPdmVyd3JpdGU6OlllcyksIDApOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKaW5kZXggNzZh
MDcxNTdiNTkxYWFjZTUwZjE1ZDE1MjVkYmNmYjhjNmE0YmJjOC4uZDc0YThmYTZjNjRjODg2MzVm
OWViNzVjYTczZTcwZmQ5NDZjYTAyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcApAQCAtNDQsNyArNDQsNyBAQAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIERvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlNYXAo
TmV0d29ya1Byb2Nlc3NQcm94eSYgcHJvY2VzcykKLSAgICA6IG1fcHJvY2VzcyhtYWtlV2Vha1B0
cihwcm9jZXNzKSkKKyAgICA6IG1fcHJvY2Vzcyhwcm9jZXNzKQogI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgICwgbV9zaG91bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJvY2Vzc0hhc0VudGl0bGVtZW50
KCJjb20uYXBwbGUubXVsdGl0YXNraW5nLnN5c3RlbWFwcGFzc2VydGlvbnMiKSkKICNlbmRpZgpA
QCAtNzAsMTQgKzcwLDEyIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxhdGZvcm1EZXN0cm95
KCkKIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3Vu
ZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7
CisgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlv
bkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjph
cHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKQogewotICAgIGlmIChtX3Byb2Nlc3MpCi0g
ICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0
aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsK
IH0KIAogRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94
eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9v
bCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0
IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2Up
CkBAIC05MiwxMyArOTAsMTIgQEAgRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3Jl
YXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUKICAgICAgICAgbV9k
b3dubG9hZFVJQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihnZXRDdXJy
ZW50UHJvY2Vzc0lEKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlw
ZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CiAKICAgICAgICAgQVNTRVJUKCFtX2Rvd25sb2FkTmV0
d29ya2luZ0Fzc2VydGlvbik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcHJvY2Vzcyk7Ci0g
ICAgICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNz
QXNzZXJ0aW9uPihtX3Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCksICJXZWJLaXQgZG93bmxv
YWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CisgICAg
ICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNz
ZXJ0aW9uPihtX3Byb2Nlc3MucHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMi
X3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAogICAgICAg
ICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyB0b29rICdXZWJLaXQg
ZG93bmxvYWRzJyBhc3NlcnRpb25zIGZvciBVSVByb2Nlc3MgYW5kIE5ldHdvcmtQcm9jZXNzIik7
CiAgICAgfQogCi0gICAgbV9wcm9jZXNzLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRv
d25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRQcm94eS0+ZG93bmxv
YWRJRCgpLmRvd25sb2FkSUQoKSwgZG93bmxvYWRQcm94eS5nZXQoKSk7CisgICAgbV9wcm9jZXNz
LmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3du
bG9hZFByb3h5LmdldCgpKTsKIAogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTA5
LDEyICsxMDYsOSBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQoRG93
bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSkKIAogICAgIFJFTEVBU0VfTE9HKExvYWRpbmcsICJS
ZW1vdmluZyBkb3dubG9hZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3dubG9hZFByb3h5
TWFwIiwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJv
eHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wu
Ci0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5w
cm9jZXNzUG9vbCgpKTsKLQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9h
ZElEKSk7CiAKLSAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2Fk
SUQoKSk7CisgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93
bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQo
KSk7CiAgICAgZG93bmxvYWRQcm94eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9kb3dubG9hZHMucmVt
b3ZlKGRvd25sb2FkSUQpOwogCkBAIC0xMzMsMTUgKzEyNywxMyBAQCB2b2lkIERvd25sb2FkUHJv
eHlNYXA6OmludmFsaWRhdGUoKQogICAgIGZvciAoY29uc3QgYXV0byYgZG93bmxvYWQgOiBtX2Rv
d25sb2Fkcy52YWx1ZXMoKSkgewogICAgICAgICBkb3dubG9hZC0+cHJvY2Vzc0RpZENsb3NlKCk7
CiAgICAgICAgIGRvd25sb2FkLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+cmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIGRvd25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKKyAgICAgICAg
bV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQo
KSk7CiAgICAgfQogCiAgICAgbV9kb3dubG9hZHMuY2xlYXIoKTsKICAgICBtX2Rvd25sb2FkVUlB
c3NlcnRpb24gPSBudWxscHRyOwogICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0g
bnVsbHB0cjsKICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyBE
b3dubG9hZFByb3h5TWFwIGludmFsaWRhdGVkIC0gUmVsZWFzZWQgJ1dlYktpdCBkb3dubG9hZHMn
IGFzc2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKLQotICAgIG1f
cHJvY2VzcyA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKaW5k
ZXggM2JlMjA3OWEwZjJjNGI1MzcwNjJjZTEzMDBlMWNkNWRhNDQ0ZmZiZS4uNGZhMDAxYmQ3ZmFl
MWNlZDAyNGQyYjkxZjIwMTcwZmY5OTQ1MjhiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCkBAIC03MSw3ICs3MSw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZSgpOwogICAgIHZvaWQgcGxhdGZvcm1E
ZXN0cm95KCk7CiAKLSAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fcHJvY2VzczsK
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBtX3Byb2Nlc3M7CiAgICAgSGFzaE1hcDxEb3dubG9h
ZElELCBSZWZQdHI8RG93bmxvYWRQcm94eT4+IG1fZG93bmxvYWRzOwogCiAgICAgYm9vbCBtX3No
b3VsZFRha2VBc3NlcnRpb24geyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90
b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDhjMjNiYmU4
YzA2YTE1OTljYjliOTE2YTBiMzJhZmIzNzc4M2YzMDUuLmQ2YzMzMjNkZDkzZTY5ZjU2YWRmNmJl
MGQyYTFiMTRmMDgyMjQ1MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9M
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKQEAgLTQ0LDE3ICs0NCwxNyBAQCBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6fkxlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5KCkKIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3Rh
cnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1fbmV0d29ya1Byb2Nl
c3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0
TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisgICAgbV9uZXR3b3Jr
UHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygq
dGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQg
Y3VzdG9tUHJvdG9jb2xJRCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bv
b2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGluZygqdGhpcywgY3Vz
dG9tUHJvdG9jb2xJRCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKIH0K
IAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7
Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50KCkuaW52YWxpZGF0ZSgqdGhpcyk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1By
b3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUoKnRoaXMpOwogfQog
CiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3YXNSZWRpcmVjdGVkVG9S
ZXF1ZXN0KExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggYzFmNDcwOGI4MWNm
YTUzYWIxMjJjMjk0NDY3NWU3ODI1MTY3MTIxZi4uZjNkYjUxNTE5ZDZjYmI0YWJlN2JmYTFlMjEw
Y2NiODc5MzMxNzMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogCiAjaW5jbHVkZSAiQVBJQ29udGVudFJ1bGVMaXN0
LmgiCisjaW5jbHVkZSAiQVBJQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0
aW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHlNYXAuaCIKQEAgLTM1LDYgKzM2
LDcgQEAKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNl
bmRpZgorI2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC00OCw2ICs1MCw3
IEBACiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAi
U3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVM
aXN0LmgiCisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2Vi
UHJvY2Vzc01lc3NhZ2VzLmgiCkBAIC02MCw2ICs2Myw3IEBACiAjaW5jbHVkZSAiV2Vic2l0ZURh
dGFTdG9yZUNsaWVudC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFj
a0FnZ3JlZ2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KIAogI2lm
IEVOQUJMRShTRUNfSVRFTV9TSElNKQpAQCAtNzAsMjAgKzc0LDExOCBAQAogI2luY2x1ZGUgPHd0
Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNp
bmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIKKyNlbmRpZgorCiAj
ZGVmaW5lIE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0
aW9uLCBjb25uZWN0aW9uKCkpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKLU5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoV2Vi
UHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KHBy
b2Nlc3NQb29sLmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQotICAgICwgbV9wcm9j
ZXNzUG9vbChwcm9jZXNzUG9vbCkKK3N0YXRpYyBIYXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkq
PiYgbmV0d29ya1Byb2Nlc3Nlc1NldCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PE5ldHdvcmtQcm9j
ZXNzUHJveHkqPj4gc2V0OworICAgIHJldHVybiBzZXQ7Cit9CisKK1ZlY3RvcjxSZWY8TmV0d29y
a1Byb2Nlc3NQcm94eT4+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMo
KQoreworICAgIFZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAg
ICBwcm9jZXNzZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXR3b3JrUHJvY2Vzc2VzU2V0KCku
c2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIG5ldHdvcmtQcm9jZXNzIDogbmV0d29ya1Byb2Nlc3Nl
c1NldCgpKQorICAgICAgICBwcm9jZXNzZXMudW5jaGVja2VkQXBwZW5kKCpuZXR3b3JrUHJvY2Vz
cyk7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKworUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHROZXR3b3JrUHJvY2VzcygpCit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gcHJvY2VzczsK
KyAgICBpZiAoIXByb2Nlc3MuZ2V0KCkpCisgICAgICAgIHByb2Nlc3MuZ2V0KCkgPSBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gKnByb2Nlc3MuZ2V0KCk7Cit9CisK
K3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKCkKK3sKKyAgICBBdXhpbGlhcnlQ
cm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKQoreworICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3Jr
YXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KKyAg
ICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9s
YXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KKyAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7Cisg
ICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpc10geworICAgICAgICAgICAgc2Vu
ZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgICAgICB9KTsKKyAgICB9CisK
KyAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIHBh
cmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdh
Y3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgp
KTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50
U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3ko
KSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9W
ZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVy
QXNMb2NhbCgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2Vz
cyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1l
c1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOworICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExl
Z2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7CisgICAgZm9yIChh
dXRvJiBzY2hlbWUgOiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2Nv
bEhhbmRsZXJzKCkpCisgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JD
dXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICBpZiAoU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6
Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5
KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURp
cmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgY29udGFpbmVyQ2FjaGVz
RGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsg
IWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNE
aXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKKyAgICBpZiAoU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQ
b29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsgIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0Vt
cHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5k
bGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJz
LnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisjZW5kaWYKKyAgICBXZWJQ
cm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7
CisgICAgcGFyYW1ldGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gZGF0YVN0b3JlUGFyYW1ldGVy
cygpOworICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MocGFyYW1ldGVycyksIDApOworfQorCitWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnM+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRhdGFTdG9yZVBhcmFtZXRlcnMoKQorewor
ICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1ldGVyczsKKyAgICBm
b3IgKGF1dG8mIHN0b3JlIDogbV93ZWJzaXRlRGF0YVN0b3JlcykKKyAgICAgICAgcGFyYW1ldGVy
cy5hcHBlbmQoc3RvcmUucGFyYW1ldGVycygpKTsKKyAgICByZXR1cm4gcGFyYW1ldGVyczsKK30K
Kworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3Jp
dHkoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxs
UHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5hbHdheXNSdW5zQXRC
YWNrZ3JvdW5kUHJpb3JpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sU2hvdWxkVGFr
ZVVJQmFja2dyb3VuZEFzc2VydGlvbigpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6
IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vz
c1Bvb2wtPnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK05ldHdvcmtQcm9jZXNz
UHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoKQorICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5
KGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCiAjaWYgRU5B
QkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKKyAgICAsIG1fY3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWVSZWY8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50PigpKQogICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgqdGhpcykKKyNl
bHNlCisgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlUmVmPEFQ
STo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogI2VuZGlmCi0gICAgLCBtX3Rocm90
dGxlcigqdGhpcywgcHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigp
KQorICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFj
a2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV9jb29raWVNYW5hZ2VyKFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6Y3JlYXRlKCp0aGlzKSkKIHsKICAgICBjb25uZWN0KCk7CisgICAgc2VuZENyZWF0
aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5h
ZGQodGhpcyk7CiB9CiAKIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1Byb3h5
KCkKQEAgLTk4LDYgKzIwMCw3IEBAIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vz
c1Byb3h5KCkKIAogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxv
YWRQcm94eU1hcC0+aW52YWxpZGF0ZSgpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5yZW1v
dmUodGhpcyk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9u
cyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMpCkBAIC0xMDUs
MTUgKzIwOCwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMo
UHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuYwogICAgIGxhdW5jaE9wdGlvbnMu
cHJvY2Vzc1R5cGUgPSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOwogICAg
IEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zKTsK
IAotICAgIGlmIChwcm9jZXNzUG9vbCgpLnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVu
Y2hGYWlsRm9yVGVzdGluZygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sKCkuc2V0U2hvdWxkTWFr
ZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKLSAgICAgICAg
bGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdHJ1
ZTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkTWFrZU5leHROZXR3
b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgIHByb2Nlc3NQ
b29sLT5zZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmco
ZmFsc2UpOworICAgICAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5j
aEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KLQotI2lmIFBMQVRGT1JN
KFBMQVlTVEFUSU9OKQotICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1BhdGggPSBtX3Byb2Nlc3NQ
b29sLm5ldHdvcmtQcm9jZXNzUGF0aCgpOwotICAgIGxhdW5jaE9wdGlvbnMudXNlcklkID0gbV9w
cm9jZXNzUG9vbC51c2VySWQoKTsKLSNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCkBAIC0x
NjYsMTIgKzI2NiwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnN5bnRoZXNpemVBcHBJ
c0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQogICAgIH0KIH0KIAotRG93bmxvYWRQcm94eSYg
TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3Jl
JiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25z
dCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdl
KQorRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94
eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9v
bCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5m
b0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAgICAg
aWYgKCFtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1h
a2VVbmlxdWU8RG93bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxv
YWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2ws
IHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVy
biBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBwcm9j
ZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0
aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCAoV2Vic2l0ZURhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjM3LDgg
KzMzNyw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVk
KCkKIHsKICAgICBjbGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKLSAgICAvLyBUZWxsIHRoZSBuZXR3
b3JrIHByb2Nlc3MgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgdGhpcyBuZXR3b3JrIHByb2Nlc3Mg
cHJveHkuIFRoaXMgd2lsbCBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgotICAgIG1fcHJvY2Vzc1Bv
b2wubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQ
b29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpjbGVhckNhbGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICszNTgsNiBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgSVBDOjpEZQogICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwg
ZGVjb2RlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Byb2Nlc3NQb29sLmRpc3Bh
dGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAg
ZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIp
OwogfQogCkBAIC0yNzQsOCArMzcxLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRS
ZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEMKIAogdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewotICAg
IGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmKG1fcHJvY2Vzc1Bvb2wpOwotCiAg
ICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5p
bnZhbGlkYXRlKCk7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikK
QEAgLTMzMSwxMSArNDI2LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2kKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nlc3NQb29sLmlzU2Vy
dmljZVdvcmtlclBhZ2VJRChwYWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShzZXNzaW9uSUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6Zm9yTW9zdFZpc2li
bGVXZWJQYWdlSWZBbnkoc2Vzc2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywgd2Vha1RoaXMgPSBt
YWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IFdU
Rk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVnYWN5VExTXShhdXRv
KiBwYWdlKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTM5MiwxMSArNDgyLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRG
aW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBDOjpDb24KICAgICAg
ICAgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSNp
ZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5wcm9jZXNzU3VwcHJlc3Np
b25FbmFibGVkKCkpCi0gICAgICAgIHNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1ZSk7
Ci0jZW5kaWYKICAgICAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICh4cGNfY29u
bmVjdGlvbl90IGNvbm5lY3Rpb24gPSB0aGlzLT5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24o
KSkKQEAgLTEyMDUsNyArMTI5MCw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0VGhp
cmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzCiB9CiB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hT
ZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsKLSAgICBwcm9jZXNz
UG9vbCgpLnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKFdURk1vdmUoZG9tYWlucykpOwor
ICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bv
b2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlv
bihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiB7IGRvbWFpbnMgfSk7CiB9CiAj
ZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIApAQCAtMTI1Miw0NSAr
MTMzOCwzMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZsdXNoQ29va2llcyhjb25zdCBQ
QUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21wbGV0aQogICAgIHNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkZsdXNoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
YWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9yZSkKIHsKLSAgICBt
X3Nlc3Npb25JRHMuYWRkKHN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgbV93ZWJzaXRlRGF0YVN0
b3Jlcy5hZGQoc3RvcmUpOwogCiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUt
PnBhcmFtZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0b3JlLT5zZXNzaW9u
SUQoKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVE
YXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCk7CisgICAgYXV0byBzZXNzaW9uSUQg
PSBzdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JG
aWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7Cisg
ICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNvbHZlZEluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgogICAgIH0KIH0KIAotYm9vbCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpoYXNTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9zZXNzaW9uSURzLmNvbnRhaW5zKHNlc3Npb25JRCk7Ci19Ci0KLXZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFT
dG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMucmVtb3ZlKHNlc3Np
b25JRCk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5yZW1vdmUod2Vic2l0ZURhdGFTdG9yZSk7
CiAKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkRlc3Ryb3lTZXNzaW9uIHsgc2Vzc2lvbklEIH0sIDApOworICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24geyB3ZWJzaXRlRGF0
YVN0b3JlLnNlc3Npb25JRCgpIH0sIDApOwogfQogCiBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3Jl
ID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAgICAgICBpZiAod2Vi
c2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBzZXNzaW9u
SUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0
cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZh
dWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFdlYnNpdGVE
YXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3JhZ2VQYXJhbWV0ZXJz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEzMzcsNyArMTQwOSw3IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
KFdlYlVzZXJDb250ZW50CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1By
b2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC5lc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlv
blRvTmV0d29ya1Byb2Nlc3MoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCBzZXNz
aW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBXZWJQcm9jZXNzUG9vbDo6
ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBS
ZWdpc3RyYWJsZURvbWFpbiB7cmVnaXN0cmFibGVEb21haW59LCBzZXNzaW9uSUQsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3b3Jr
ZXJDb250ZXh0Q29ubmVjdGlvbk5vTG9uZ2VyTmVlZGVkKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlm
aWVyIGlkZW50aWZpZXIpCkBAIC0xNTAwLDE2ICsxNTcyLDM0IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6cHJlY29ubmVjdFRvKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2ViUGFnZVBy
b3h5SWRlCiAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWNvbm5lY3RUbyhz
ZXNzaW9uSUQsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQsIHVybCwgdXNlckFnZW50LCBzdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiksIDApOwog
fQogCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMo
KQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJv
Y2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNGb3JlZ3JvdW5kV2Vi
UHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQ
cm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9v
bDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNCYWNr
Z3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVBy
b2Nlc3NBc3NlcnRpb24oKQogewotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0ZvcmVncm91bmRX
ZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQ
cm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRGb3Jl
Z3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAg
ICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmZvcmVncm91bmRBY3Rp
dml0eSgiTmV0d29ya2luZyBmb3IgZm9yZWdyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAg
IHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvRm9y
ZWdyb3VuZCgpLCAwKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
IChwcm9jZXNzUG9vbCgpLmhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChh
bnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBpZiAo
IVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRCYWNrZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZy
b21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3Nl
cyA9IHRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgYmFja2dy
b3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvQmFja2dyb3VuZCgpLCAwKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKaW5k
ZXggYTBiNGMxZDg5MzhlMjA1ZWMzNjFkZTVjMTA4MjVkMTgyNzc2NTNiNC4uMGJmY2Y0MzViNDdk
ODE1NWE0YTU5MTJmODlhOWJjODcyODgyZGY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTQ2LDEyICs0Niwx
NyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiWFBDRXZlbnRIYW5kbGVyLmgi
CisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRyLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIElQQyB7
CiBjbGFzcyBGb3JtRGF0YVJlZmVyZW5jZTsKIH0KIAorbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xhc3Mg
U2Vzc2lvbklEOwogfQpAQCAtNzMsOCArNzgsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xh
c3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7CitjbGFzcyBXZWJDb29r
aWVNYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9v
bDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OwogCiBlbnVtIGNsYXNzIFNo
b3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyA6IGJvb2w7CkBAIC04Niw4ICs5MSw5IEBAIHN0cnVj
dCBGcmFtZUluZm9EYXRhOwogc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
Owogc3RydWN0IFJlc291cmNlTG9hZEluZm87CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CitzdHJ1Y3Qg
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM7CiAKLWNsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkg
ZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJv
dHRsZXJDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7
CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nl
c3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4sIHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtQcm9j
ZXNzUHJveHk+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB1
c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwpAQCAt
MTAyLDEyICsxMDgsMTcgQEAgcHVibGljOgogICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFn
ZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVzaW5nIE9wZW5lckRv
bWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhwbGljaXQgTmV0d29y
a1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1By
b2Nlc3NQcm94eT4gZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7CisgICAgc3RhdGljIFJlZjxOZXR3
b3JrUHJvY2Vzc1Byb3h5PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtQ
cm9jZXNzUHJveHkpOyB9CiAgICAgfk5ldHdvcmtQcm9jZXNzUHJveHkoKTsKIAorICAgIHN0YXRp
YyBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBhbGxOZXR3b3JrUHJvY2Vzc2VzKCk7
CisgICAgCisgICAgdm9pZCB0ZXJtaW5hdGUoKSBmaW5hbDsKKwogICAgIHZvaWQgZ2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNz
UHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKIAotICAg
IERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQ
YWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSk7CisgICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93
bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgV2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5
KiBvcmlnaW5hdGluZ1BhZ2UpOwogCiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vz
c2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRh
RmV0Y2hPcHRpb24+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4mJik7CiAg
ICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4sIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CkBAIC0yMDYsMTUgKzIxNywxMiBAQCBwdWJsaWM6
CiAgICAgUHJvY2Vzc1Rocm90dGxlciYgdGhyb3R0bGVyKCkgZmluYWwgeyByZXR1cm4gbV90aHJv
dHRsZXI7IH0KICAgICB2b2lkIHVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKIAotICAgIFdlYlBy
b2Nlc3NQb29sJiBwcm9jZXNzUG9vbCgpIHsgcmV0dXJuIG1fcHJvY2Vzc1Bvb2w7IH0KLQogI2lm
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgdm9pZCBkaWREZXN0cm95V2ViVXNlckNv
bnRlbnRDb250cm9sbGVyUHJveHkoV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmKTsKICNl
bmRpZgogCi0gICAgdm9pZCBhZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmKTsKLSAg
ICBib29sIGhhc1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQpIGNvbnN0OwotICAgIHZvaWQgcmVtb3Zl
U2Vzc2lvbihQQUw6OlNlc3Npb25JRCk7CisgICAgdm9pZCBhZGRTZXNzaW9uKFdlYnNpdGVEYXRh
U3RvcmUmKTsKKyAgICB2b2lkIHJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYpOwogICAg
IAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIHZvaWQgY3JlYXRlU3ltTGlua0Zv
ckZpbGVVcGdyYWRlKGNvbnN0IFN0cmluZyYgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKQEAg
LTIyOSw2ICsyMzcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3RlclNjaGVtZUZvckxlZ2Fj
eUN1c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgdW5yZWdpc3RlclNjaGVt
ZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYpOwogCisgICAgdm9pZCBuZXR3
b3JrUHJvY2Vzc0NyYXNoZWQoKTsKKyAgICAKICAgICB2b2lkIHJlc2V0UXVvdGEoUEFMOjpTZXNz
aW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICB2b2lkIHJlc291cmNl
TG9hZERpZFNlbmRSZXF1ZXN0KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFJlc291cmNlTG9hZElu
Zm8mJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIE9wdGlvbmFsPElQQzo6Rm9ybURhdGFS
ZWZlcmVuY2U+JiYpOwpAQCAtMjQ4LDcgKzI1OCwyMCBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRh
dGVCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CiAgICAgdm9pZCBjbGVhckJ1bmRsZUlkZW50aWZpZXIoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKIAorICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlcigp
IHsgcmV0dXJuIG1fY29va2llTWFuYWdlci5nZXQoKTsgfQorCisgICAgQVBJOjpDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIHsgcmV0dXJu
IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmdldCgpOyB9CisKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICB4cGNfb2JqZWN0X3QgeHBjRW5kcG9pbnRNZXNzYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9lbmRwb2ludE1lc3NhZ2UuZ2V0KCk7IH0KKyNlbmRpZgorCiBwcml2YXRlOgorICAgIGV4
cGxpY2l0IE5ldHdvcmtQcm9jZXNzUHJveHkoKTsKKworICAgIHZvaWQgc2VuZENyZWF0aW9uUGFy
YW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycz4gZGF0YVN0b3JlUGFyYW1ldGVycygpOworCiAgICAgLy8gQXV4aWxpYXJ5UHJvY2Vzc1By
b3h5CiAgICAgQVNDSUlMaXRlcmFsIHByb2Nlc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
Ik5ldHdvcmtpbmciX3M7IH0KIApAQCAtMjU2LDcgKzI3OSw2IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBwcm9jZXNzV2lsbFNodXREb3duKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogCi0gICAg
dm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsKICAgICB2b2lkIGNsZWFyQ2FsbGJhY2tTdGF0
ZXMoKTsKIAogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CkBAIC0zMTIsMTYgKzMzNCwx
NyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
UEFMOjpTZXNzaW9uSUQsIFJlZjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiYmKTsKIAot
ICAgIFdlYlByb2Nlc3NQb29sJiBtX3Byb2Nlc3NQb29sOwotCiAgICAgSGFzaE1hcDxDYWxsYmFj
a0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4+IG1fcGVuZGluZ0ZldGNo
V2Vic2l0ZURhdGFDYWxsYmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAg
ICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGlu
Z0RlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2luc0NhbGxiYWNrczsKIAogICAgIHN0ZDo6dW5pcXVl
X3B0cjxEb3dubG9hZFByb3h5TWFwPiBtX2Rvd25sb2FkUHJveHlNYXA7CisKKyAgICBVbmlxdWVS
ZWY8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50OwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCiAg
ICAgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkgbV9jdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTsKICNlbmRpZgorCiAgICAgUHJvY2Vzc1Rocm90dGxlciBtX3Rocm90dGxlcjsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UHJvY2Vzc1Rocm90dGxlcjo6QmFja2dyb3VuZEFjdGl2aXR5PiBt
X2FjdGl2aXR5Rm9ySG9sZGluZ0xvY2tlZEZpbGVzOwogICAgIFByb2Nlc3NUaHJvdHRsZXI6OkFj
dGl2aXR5VmFyaWFudCBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlczsKQEAgLTM0Nyw5ICszNzAs
MTEgQEAgcHJpdmF0ZToKICAgICBwcml2YXRlOgogICAgICAgICBXZWFrUHRyPE5ldHdvcmtQcm9j
ZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAgICAgfTsKKyAgICBPU09iamVjdFB0cjx4cGNf
b2JqZWN0X3Q+IG1fZW5kcG9pbnRNZXNzYWdlOwogI2VuZGlmCiAKLSAgICBIYXNoU2V0PFBBTDo6
U2Vzc2lvbklEPiBtX3Nlc3Npb25JRHM7CisgICAgV2Vha0hhc2hTZXQ8V2Vic2l0ZURhdGFTdG9y
ZT4gbV93ZWJzaXRlRGF0YVN0b3JlczsKKyAgICBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBt
X2Nvb2tpZU1hbmFnZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29h
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
Q29jb2EubW0KaW5kZXggYjhkYWVkZjdiZWJhMWNkODFmNmU1MjQ0OTYwMzEwZjEzMzEwYzExZS4u
OTFjMTkzMWYyZTY1Y2YxYzk3N2FkZjNhZTZjYWVkYjA2MDkwMGJkZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
Q29jb2EubW0KQEAgLTUxLDggKzUxLDExIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NQcm94eTo6WFBD
RXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCh4cGNfb2JqZWN0X3QgZXZlbnQpIGNvCiAgICAg
aWYgKG1lc3NhZ2VOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6Onhw
Y0xhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKQotICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBv
aW50VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2Vy
dmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0Vu
ZHBvaW50TWVzc2FnZU5hbWUpIHsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+bV9lbmRwb2lu
dE1lc3NhZ2UgPSBldmVudDsKKyAgICAgICAgZm9yIChhdXRvJiBkYXRhU3RvcmUgOiBtX25ldHdv
cmtQcm9jZXNzLT5tX3dlYnNpdGVEYXRhU3RvcmVzKQorICAgICAgICAgICAgZGF0YVN0b3JlLnNl
bmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICB9CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJD
b29raWVNYW5hZ2VyUHJveHkuY3BwCmluZGV4IGNjNTI2YWFmM2FhZmIxYzE0NmRhNGIyNDE5NDU5
YjEwOTIwMWI2MTAuLjA4NWU3ZDI2NWExMzczNWJlN2ExMjc4ZWMxZGZiNjNmZDVkZDVkNzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNw
cApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiQVBJ
U2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCisj
aW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIk9wdGlvbmFsQ2FsbGJh
Y2tJRC5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUg
IldlYkNvb2tpZU1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCkBAIC0zOSwyNCArNDAsMTYgQEAKIG5h
bWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLWNvbnN0IGNoYXIq
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUoKQorV2ViQ29va2llTWFuYWdl
clByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29y
a1Byb2Nlc3MpCisgICAgOiBtX25ldHdvcmtQcm9jZXNzKG1ha2VXZWFrUHRyKG5ldHdvcmtQcm9j
ZXNzKSkKIHsKLSAgICByZXR1cm4gIldlYkNvb2tpZU1hbmFnZXJQcm94eSI7Ci19Ci0KLVJlZjxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlBy
b2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJD
b29raWVNYW5hZ2VyUHJveHkocHJvY2Vzc1Bvb2wpKTsKLX0KLQotV2ViQ29va2llTWFuYWdlclBy
b3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQot
ICAgIDogV2ViQ29udGV4dFN1cHBsZW1lbnQocHJvY2Vzc1Bvb2wpCi17Ci0gICAgV2ViQ29udGV4
dFN1cHBsZW1lbnQ6OnByb2Nlc3NQb29sKCktPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKKyAg
ICBuZXR3b3JrUHJvY2Vzcy5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiB9CiAKIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6fldlYkNvb2tpZU1hbmFnZXJQcm94eSgpCiB7CisgICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNl
aXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCkpOwogICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVycy5pc0VtcHR5KCkpOwogfQogCkBAIC02
NSwxMDIgKzU4LDg0IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojppbml0aWFsaXplQ2xp
ZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNsaWVudEJhc2UqIGNsCiAgICAgbV9jbGllbnQuaW5p
dGlhbGl6ZShjbGllbnQpOwogfQogCi0vLyBXZWJDb250ZXh0U3VwcGxlbWVudAotCi12b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKQotewotICAgIFZlY3Rv
cjxPYnNlcnZlcio+IG9ic2VydmVyczsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyU2V0IDogbV9j
b29raWVPYnNlcnZlcnMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBvYnNlcnZlciA6
IG9ic2VydmVyU2V0KQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChvYnNlcnZlcik7Ci0g
ICAgfQotCi0gICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVycykKLSAgICAgICAgb2Jz
ZXJ2ZXItPm1hbmFnZXJEZXN0cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVy
cy5pc0VtcHR5KCkpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0Rp
ZENsb3NlKFdlYlByb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5Ojpwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAg
QVBJOjpPYmplY3Q6OnJlZigpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVy
ZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OmRlcmVmKCk7Ci19
Ci0KIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0
cmluZz4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1By
b2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24p
KTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFt
ZXNXaXRoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAg
ICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQogewotICAgIHByb2Nl
c3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNz
aW9uSUQsIGhvc3RuYW1lcykpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVD
b29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSwgMCk7CiB9CiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1Jl
bGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFs
bENvb2tpZXMoc2Vzc2lvbklEKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0
ZUFsbENvb2tpZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVDb29raWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDb29raWUm
IGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7
Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3Jr
UHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llKHNlc3Npb25JRCwgY29va2llKSwgW2Nh
bGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pXSgpIG11dGFibGUgewor
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShz
ZXNzaW9uSUQsIGNvb2tpZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UK
ICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwotICAgIH0pOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVz
TW9kaWZpZWRTaW5jZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24p
KTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxD
b29raWVzTW9kaWZpZWRTaW5jZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVu
Y3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNz
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2ll
KHNlc3Npb25JRCwgY29va2llcyksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9uSUQs
IGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAg
IGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNl
dENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8Q29va2llPiYg
Y29va2llcywgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgbWFpbkRvY3VtZW50VVJMLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0g
ICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWluRG9jdW1lbnRV
UkwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBt
YWluRG9jdW1lbnRVUkwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisg
ICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OmdldEFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZlY3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAg
YXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpH
ZXRBbGxDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAg
IGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29raWU+JiYpPiYmIGNh
bGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0Q29va2llcyhzZXNzaW9u
SUQsIHVybCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZN
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rp
b24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0YXJ0T2JzZXJ2aW5n
Q29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bv
b2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lv
bklEKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2ll
Q2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsK
LSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZO
ZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVD
aGFuZ2VzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+JiYgY2FsbGJhY2spCkBAIC0yMTEsMTggKzE4
NiwxOCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y29va2llc0RpZENoYW5nZShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBIVFRQQ29va2llQWNjZXB0UG9s
aWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CiB7Ci0jaWYgVVNFKFNPVVApCi0gICAgcHJvY2Vzc1Bvb2woKS0+c2V0SW5pdGlhbEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kocG9saWN5KTsKLSNlbmRpZgotCi0gICAgYXV0byYgbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQ
cm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0
SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24p
KTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KHBvbGljeSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAg
IGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQogCi12b2lkIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQordm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3koUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhU
VFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYg
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwot
ICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSgpLCBXVEZNb3ZlKGNhbGxiYWNrRnVu
Y3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlv
bikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihIVFRQQ29va2llQWNjZXB0
UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAppbmRleCAwYmRmYzBkNGU0
N2M0MzZmNTg1Y2YyOWMwOWQ1MWEyOWJjODExYTlkLi42ZjUxZjAzZTVjMGNhODk0MTIzMzQzNzdi
NTU0M2Q4MjJjYzJmZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJD
b29raWVNYW5hZ2VyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29r
aWVNYW5hZ2VyUHJveHkuaApAQCAtNTYsMTEgKzU2LDkgQEAgdHlwZWRlZiBHZW5lcmljQ2FsbGJh
Y2s8QVBJOjpBcnJheSo+IEFycmF5Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxX
ZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5PiBIVFRQQ29va2llQWNjZXB0UG9saWN5Q2Fs
bGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiY+IEdldENvb2tpZXNDYWxsYmFjazsKIAotY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5
IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdl
cj4sIHB1YmxpYyBXZWJDb250ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNl
aXZlciB7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJ
bXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnRO
YW1lKCk7Ci0KLSAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKFdl
YlByb2Nlc3NQb29sKik7CisgICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IGNy
ZWF0ZShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBXZWJDb29raWVNYW5hZ2VyUHJveHkobmV0d29ya1Byb2Nlc3MpKTsgfQogICAgIHZp
cnR1YWwgfldlYkNvb2tpZU1hbmFnZXJQcm94eSgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplQ2xp
ZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNsaWVudEJhc2UqKTsKQEAgLTEwNCwxNyArMTAyLDEw
IEBAIHB1YmxpYzoKICAgICB1c2luZyBBUEk6Ok9iamVjdDo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0g
ICAgV2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKik7CisgICAgV2ViQ29va2ll
TWFuYWdlclByb3h5KE5ldHdvcmtQcm9jZXNzUHJveHkmKTsKIAogICAgIHZvaWQgY29va2llc0Rp
ZENoYW5nZShQQUw6OlNlc3Npb25JRCk7CiAKLSAgICAvLyBXZWJDb250ZXh0U3VwcGxlbWVudAot
ICAgIHZvaWQgcHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nl
c3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NE
aWRDbG9zZShOZXR3b3JrUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWZXZWJD
b250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVyZWZXZWJDb250ZXh0U3Vw
cGxlbWVudCgpIG92ZXJyaWRlOwotCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAgICB2
b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92
ZXJyaWRlOwogCkBAIC0xMjUsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6
U2Vzc2lvbklELCBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+PiBtX2xlZ2FjeUNvb2tpZU9ic2VydmVy
czsKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBIYXNoU2V0PE9ic2VydmVyKj4+IG1fY29v
a2llT2JzZXJ2ZXJzOwogCisgICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdv
cmtQcm9jZXNzOwogICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eUNsaWVudCBtX2NsaWVudDsKIAog
I2lmIFVTRShTT1VQKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5k
ZXggZDNiOGMzNTU0MGYzZjI0NTZmNzEwNTVmNWI0ZDdhNzgyMjYwZDM4Ny4uNDljZWViMjI4OTJm
MjQ1MTgxYTQ0ODA5NTlkYzgzNGExNWVmOGQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCkBAIC0xNzQ2LDcgKzE3NDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbihib29sIGNvbnRyb2xsZWQpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENvbnRyb2xsZWRCeUF1dG9tYXRp
b24oY29udHJvbGxlZCkpOwotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3
b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRy
b2xsZWRCeUF1dG9tYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250
cm9sbGVkQnlBdXRvbWF0aW9uKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xs
ZWRCeUF1dG9tYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9s
bGVkQnlBdXRvbWF0aW9uKSwgMCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjcmVhdGVJbnNw
ZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JU
YXJnZXRUeXBlIHR5cGUpCkBAIC0zMjEwLDExICszMjEwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmlzRm9yY2VkSW50b0FwcEJvdW5kTW9kZVRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
b29sKT4KIHZvaWQgV2ViUGFnZVByb3h5OjpkaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50
SW5OZXR3b3JrUHJvY2VzcygpCiB7CiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAh
UExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9w
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFu
ZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNh
YmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCksIDApOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0
YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCAwKTsKICNlbmRpZgogfQogCkBAIC0z
MjIzLDEzICszMjE5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVu
dGl0bGVtZW50T3ZlcnJpZGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgKICNpZiBFTkFCTEUoQVBQ
X0JPVU5EX0RPTUFJTlMpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6
OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnBy
b2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9j
ZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZp
Y2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVu
dGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRpZgpAQCAtNDQyOSw3ICs0NDE5LDcgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnByZWNvbm5lY3RUbyhjb25zdCBVUkwmIHVybCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYXV0byBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9IG1fY2FuVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UgPyBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlIDogV2Vi
Q29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlOwotICAgIG1fcHJvY2Vzcy0+
cHJvY2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnByZWNvbm5lY3RUbyhzZXNzaW9u
SUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQoKSwgdXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4oKSk7CisgICAg
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkucHJlY29ubmVjdFRvKHNlc3Npb25J
RCgpLCBpZGVudGlmaWVyKCksIHdlYlBhZ2VJRCgpLCB1cmwsIHVzZXJBZ2VudCgpLCBzdG9yZWRD
cmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OnNldENhblVzZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wgY2FuVXNl
Q3JlZGVudGlhbFN0b3JhZ2UpCkBAIC00NzI1LDcgKzQ3MTUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUlu
Zm9EYXRhJgogICAgICAgICAgICAgUmVnaXN0cmFibGVEb21haW4gY3VycmVudERvbWFpbiB7IGN1
cnJlbnRSZXF1ZXN0LnVybCgpIH07CiAgICAgICAgICAgICBVUkwgcmVxdWVzdGVyVVJMIHsgVVJM
KCksIHJlcXVlc3Rlck9yaWdpbi50b1N0cmluZygpIH07CiAgICAgICAgICAgICBpZiAoIWN1cnJl
bnREb21haW4ubWF0Y2hlcyhyZXF1ZXN0ZXJVUkwpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vz
cy0+cHJvY2Vzc1Bvb2woKS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlciht
X3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVl
c3RlclVSTCB9LCBjdXJyZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50
aWZpZXIsIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUt
Pm5ldHdvcmtQcm9jZXNzKCkuZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIo
bV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1
ZXN0ZXJVUkwgfSwgY3VycmVudERvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVu
dGlmaWVyLCBtX3dlYlBhZ2VJRCk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTQ3NjMs
NyArNDc1Myw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUoRnJh
bWVJZGVudGlmaWVyIGZyYW1lSUQsIEZyYW1lSW5mb0RhdGEmCiAgICAgaWYgKG5hdmlnYXRpb24g
JiYgZnJhbWUtPmlzTWFpbkZyYW1lKCkpIHsKICAgICAgICAgaWYgKGF1dG8mIGFkQ2xpY2tBdHRy
aWJ1dGlvbiA9IG5hdmlnYXRpb24tPmFkQ2xpY2tBdHRyaWJ1dGlvbigpKSB7CiAgICAgICAgICAg
ICBpZiAoYWRDbGlja0F0dHJpYnV0aW9uLT5kZXN0aW5hdGlvbigpLm1hdGNoZXMoZnJhbWUtPnVy
bCgpKSkKLSAgICAgICAgICAgICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0
d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yZUFkQ2xpY2tBdHRy
aWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqYWRDbGlja0F0dHJpYnV0
aW9uKSk7CisgICAgICAgICAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0dHJpYnV0aW9u
KG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmlidXRpb24pLCAw
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTM3Nyw3ICs1MzY3LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgY29u
c3QgVVJMJiBwYWcKICAgICBpZiAodGFyZ2V0SG9zdC5pc0VtcHR5KCkgfHwgbWFpbkZyYW1lSG9z
dC5pc0VtcHR5KCkgfHwgdGFyZ2V0SG9zdCA9PSBzb3VyY2VVUkwuaG9zdCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1By
b2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwg
fSwgUmVnaXN0cmFibGVEb21haW4geyBwYWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291
cmNlVVJMIH0sIGlzUmVkaXJlY3QsIGZyYW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6
Om5vdygpIC0gbV9kaWRGaW5pc2hEb2N1bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdh
c1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5l
dHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1lTmF2
aWdhdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFp
biB7IHRhcmdldFVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0cmFi
bGVEb21haW4geyBzb3VyY2VVUkwgfSwgaXNSZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUoKSwg
TW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2RpZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5GcmFt
ZVRpbWVzdGFtcCwgd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpLCAwKTsKIH0KICNlbmRp
ZgogCkBAIC0xMDAwMiw1OCArOTk5MiwyNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3lzdGVtUHJl
dmlld0FjdGlvblRyaWdnZXJlZChjb25zdCBXZWJDb3JlOjpTeXN0ZW1QcmV2aWV3SW5mbwogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkp
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGVtcHR5U3RyaW5nKCkpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0
aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vzcygp
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNr
QXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0
dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29s
KCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5T
ZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1
dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIH0gZWxzZQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAg
IHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0
ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVy
Rm9yVGVzdGluZyhib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNz
LT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3Jr
UHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRD
bGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgdmFsdWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
fQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJy
aWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVl
KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6
c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVz
c2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252
ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwp
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3Rv
cmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1f
d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25z
QXNFeHBpcmVkRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5w
cm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJv
Y2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFya0FkQ2xp
Y2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vz
c2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNp
dGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVz
dGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggZDkyNmIzM2NiZGYyYmI4YmI5
ODBkNjNjNWRjNTJhZTUyNTA5MjUyOS4uOWVkMDNjY2E3YjM4NGI2YmVhY2ExMmM5MjRkZjgyY2Rl
NTkyMDEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApA
QCAtMTQzLDggKzE0MywxMCBAQAogI2VuZGlmCiAKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVM
RUFTRV9MT0coY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HKGNoYW5uZWwsICIlcCAtIFdl
YlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgV0VCUFJP
Q0VTU1BPT0xfUkVMRUFTRV9MT0dfU1RBVElDKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xP
RyhjaGFubmVsLCAiV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCAjI19fVkFfQVJHU19fKQogI2RlZmlu
ZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19FUlJPUihjaGFubmVsLCBmbXQsIC4uLikgUkVM
RUFTRV9MT0dfRVJST1IoY2hhbm5lbCwgIiVwIC0gV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlz
LCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9B
TExPV0VEKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdh
eXNPbkxvZ2dpbmdBbGxvd2VkKCksIGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29sOjoiIGZt
dCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9M
T0dfSUZfQUxMT1dFRF9TVEFUSUMoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lGKHNl
c3Npb25JRC5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgY2hhbm5lbCwgIldlYlByb2Nlc3NQ
b29sOjoiIGZtdCwgIyNfX1ZBX0FSR1NfXykKIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKQEAgLTIzMiw2ICsyMzQsMTEgQEAgc3RhdGljIEhhc2hTZXQ8U3Ry
aW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3Rv
bVByb3QKICAgICByZXR1cm4gc2V0OwogfQogCitWZWN0b3I8U3RyaW5nPiBXZWJQcm9jZXNzUG9v
bDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkKK3sKKyAgICByZXR1cm4g
Y29weVRvVmVjdG9yKGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygp
KTsKK30KKwogV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogICAgIDogbV9jb25maWd1cmF0aW9uKGNvbmZp
Z3VyYXRpb24uY29weSgpKQogICAgICwgbV9kZWZhdWx0UGFnZUdyb3VwKFdlYlBhZ2VHcm91cDo6
Y3JlYXRlKCkpCkBAIC0yMzksNyArMjQ2LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQ
b29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogICAgICwg
bV9hdXRvbWF0aW9uQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PigpKQog
ICAgICwgbV9kb3dubG9hZENsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+
KCkpCiAgICAgLCBtX2hpc3RvcnlDbGllbnQobWFrZVVuaXF1ZTxBUEk6OkxlZ2FjeUNvbnRleHRI
aXN0b3J5Q2xpZW50PigpKQotICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFr
ZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICAgICAsIG1fdmlz
aXRlZExpbmtTdG9yZShWaXNpdGVkTGlua1N0b3JlOjpjcmVhdGUoKSkKICNpZiBQTEFURk9STShN
QUMpCiAgICAgLCBtX2hpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyKG1ha2VVbmlx
dWU8SGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXI+KCp0aGlzKSkKQEAgLTI2Nyw5
ICsyNzMsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAjZW5kaWYKICAgICB9KTsKIAotICAgIGlm
ICghbV93ZWJzaXRlRGF0YVN0b3JlICYmIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKTsKLQogICAgIGZvciAoYXV0byYg
c2NoZW1lIDogbV9jb25maWd1cmF0aW9uLT5hbHdheXNSZXZhbGlkYXRlZFVSTFNjaGVtZXMoKSkK
ICAgICAgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFzQWx3YXlzUmV2YWxpZGF0ZWQuYWRkKHNjaGVt
ZSk7CiAKQEAgLTI4NSw3ICsyODgsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2wo
QVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgYWRkTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCAqdGhpcyk7CiAKICAgICAvLyBOT1RFOiBUaGVzZSBzdWItb2JqZWN0cyBtdXN0IGJlIGlu
aXRpYWxpemVkIGFmdGVyIG1fbWVzc2FnZVJlY2VpdmVyTWFwLi4KLSAgICBhZGRTdXBwbGVtZW50
PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdlYkdlb2xvY2F0
aW9uTWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFu
YWdlclByb3h5PigpOwogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQpAQCAtMzQyLDkgKzM0NCw2
IEBAIFdlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2woKQogICAgIHByb2Nlc3NQb29sQ291
bnRlci5kZWNyZW1lbnQoKTsKICNlbmRpZgogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0g
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNodXREb3duUHJvY2VzcygpOwotCiAjaWYgRU5BQkxF
KEdBTUVQQUQpCiAgICAgaWYgKCFtX3Byb2Nlc3Nlc1VzaW5nR2FtZXBhZHMuaXNFbXB0eSgpKQog
ICAgICAgICBVSUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkucHJvY2Vzc1Bvb2xTdG9wcGVk
VXNpbmdHYW1lcGFkcygqdGhpcyk7CkBAIC00MDIsMTYgKzQwMSw2IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldEF1dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlv
bkNsaWVudD4mCiAgICAgICAgIG1fYXV0b21hdGlvbkNsaWVudCA9IFdURk1vdmUoYXV0b21hdGlv
bkNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQ+JiYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotewotI2lmIEVOQUJMRShM
RUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCi0gICAgaWYgKCFjdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQpCi0gICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gbWFr
ZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gV1RGTW92ZShjdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQpOwotI2VuZGlmCi19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
dEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGN1
c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcikKIHsKICAgICAvLyBHdWFyZCBh
Z2FpbnN0IEFQSSBtaXN1c2UuCkBAIC00MjEsMTEgKzQxMCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJp
bmcmIGN1CiAgICAgbV9jb25maWd1cmF0aW9uLT5zZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1
bmRsZUlkZW50aWZpZXIoY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKTsK
IH0KIAotSVBDOjpDb25uZWN0aW9uKiBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3ND
b25uZWN0aW9uKCkKLXsKLSAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy0+Y29ubmVjdGlvbigp
OwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQodm9pZCogY29udGV4
dCkKIHsKICAgICBzdGF0aWNfY2FzdDxXZWJQcm9jZXNzUG9vbCo+KGNvbnRleHQpLT5sYW5ndWFn
ZUNoYW5nZWQoKTsKQEAgLTQzNSw4ICs0MTksNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5n
dWFnZUNoYW5nZWQoKQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJv
Y2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQoKSk7CiAjaWYgVVNFKFNPVVApCi0g
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlKCktPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFn
ZXMoKSksIDApOwogI2VuZGlmCiB9CiAKQEAgLTQ0OSw3ICs0MzIsOCBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpmdWxsS2V5Ym9hcmRBY2Nlc3NNb2RlQ2hhbmdlZChib29sIGZ1bGxLZXlib2FyZEFj
Y2Vzc0VuYWJsZQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE1lbW9yeVByZXNzdXJlRXZlbnQo
Ym9vbCBpc0NyaXRpY2FsKQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6QXV4
aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCkp
OwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNz
OjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSk7CisgICAgZm9yIChh
dXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nl
c3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6QXV4aWxpYXJ5
UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCksIDApOwog
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIFBsdWdpblByb2Nlc3NNYW5hZ2Vy
OjpzaW5nbGV0b24oKS5zZW5kTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKTsKICNlbmRp
ZgpAQCAtNDc0LDI3NSArNDU4LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2NyZWVuUHJvcGVy
dGllc1N0YXRlQ2hhbmdlZCgpCiAjZW5kaWYKIH0KIAotTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vi
UHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhX
ZWJzaXRlRGF0YVN0b3JlKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAg
Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1
c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCi0gICAgLy8gV2Ugc2hvdWxkIHJl
bW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91
ciBBUElzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDAyNDYuCi0gICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgewotICAgICAgICBjYWxsT25NYWlu
UnVuTG9vcEFuZFdhaXQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewot
ICAgICAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgfSk7Ci0gICAgICAg
IHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBpZiAobV9uZXR3b3JrUHJv
Y2VzcykgewotICAgICAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdlYnNpdGVEYXRhU3Rv
cmUpKTsKLSAgICAgICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29r
aWVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotICAg
IH0KLQotICAgIGF1dG8gbmV0d29ya1Byb2Nlc3MgPSBtYWtlVW5pcXVlPE5ldHdvcmtQcm9jZXNz
UHJveHk+KCp0aGlzKTsKLQotICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBh
cmFtZXRlcnM7Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBjb3B5VG9W
ZWN0b3IobV93ZWJzaXRlRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLSAgICAgICAgbV93
ZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0jaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IG1f
d2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxl
SWRlbnRpZmllcigpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlk
ZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24oKS5zb3VyY2VBcHBs
aWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHBhcmFt
ZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNo
ZU1vZGVsKCk7Ci0KLSAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IGdsb2JhbFVSTFNjaGVtZXNXaXRo
Q3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQotICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNS
ZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOwotCi0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdlYlBy
b2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb29raWVTdG9y
YWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFt
ZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBTdHJp
bmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdD
YWNoZXNEaXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0Vt
cHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0
ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVy
Q2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBwYXJlbnRCdW5k
bGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7Ci0g
ICAgaWYgKCFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0
ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShlbXB0eVN0cmluZygp
LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1Jl
Z2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2lu
Z2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVy
bFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5
VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lz
dGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0gICAgcGFyYW1ldGVycy51
cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0
dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKLSAgICBwYXJh
bWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdh
Y3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNz
KCkpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgLy8gKioqKioqKioqCi0g
ICAgLy8gSU1QT1JUQU5UOiBEbyBub3QgY2hhbmdlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZv
ciBpbmRleGVkIGRhdGFiYXNlcyBvbiBkaXNrIHdpdGhvdXQgZmlyc3QgY29uc3VsdGluZyBhIHJl
dmlld2VyIGZyb20gQXBwbGUgKDxyZGFyOi8vcHJvYmxlbS8xNzQ1NDcxMj4pCi0gICAgLy8gKioq
KioqKioqCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBtX3dl
YnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCk7Ci0gICAg
ZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3Rz
KCkpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0
YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7Ci0gICAgCi0g
ICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUo
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnkpOwotICAgIH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAg
IGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRTZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLnNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpCi0gICAgICAgIHBhcmFtZXRlcnMuc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9ICBXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRl
cnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSwgcGFyYW1ldGVycy5zZXJ2aWNl
V29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0g
ICAgYXV0byBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dl
YnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3Ry
aW5nKCk7Ci0gICAgaWYgKCFsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpCi0gICAgICAgIGxvY2FsU3Rv
cmFnZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdExvY2FsU3Rv
cmFnZURpcmVjdG9yeSgpOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0
b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9j
YWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gY2FjaGVTdG9y
YWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5j
YWNoZVN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAoIWNhY2hlU3Rv
cmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IFdURk1vdmUoY2FjaGVTdG9yYWdlRGlyZWN0
b3J5KTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAg
ICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3Jl
LT5yZXNvbHZlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlm
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAg
ICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9yeTsKLSAg
ICAKLSAgICBpZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQot
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rv
cnkocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSwgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9h
ZFN0YXRpc3RpY3MgPSBmYWxzZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NMb2dUZXN0aW5nRXZlbnQgPSBmYWxzZTsKLSAgICBib29sIHNob3VsZEluY2x1ZGVMb2NhbGhv
c3QgPSB0cnVlOwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9k
ZSA9IGZhbHNlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgV2Vi
Q29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSB0aGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlID0gV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsOwotICAg
IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkIHNhbWVTaXRlU3RyaWN0
RW5mb3JjZW1lbnRFbmFibGVkID0gV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVu
YWJsZWQ6Ok5vOwotI2VuZGlmCi0gICAgV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVt
b3ZhbE1vZGUgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBXZWJDb3JlOjpGaXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llczsKLSAgICBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0gICAgSGFz
aFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gYXBwQm91bmREb21haW5zOwotICAgIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIG1hbnVhbFByZXZhbGVudFJlc291cmNlOwotCi0jaWYg
UExBVEZPUk0oQ09DT0EpCi0gICAgbV90Y2NQcmVmZXJlbmNlRW5hYmxlZCA9IGRvZXNBcHBIYXZl
SVRQRW5hYmxlZCgpOwotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSAmJiAhd2l0aFdlYnNp
dGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxl
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAg
IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChl
bmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURh
dGFTdG9yZSAmJiAhbV93ZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgp
KSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVu
Y2VFbmFibGVkOwotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxz
ZSBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpICYmICFXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0
KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVy
ZW5jZUVuYWJsZWQ7Ci0gICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotI2VuZGlmCi0KLSAgICBpZiAod2l0aFdlYnNp
dGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IHdp
dGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lm
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+aGFz
U3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5z
aG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFt
ZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAgIHNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFi
bGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAgICAgIHN0YW5k
YWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0g
ICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91bmREb21haW5zOwotICAgICAgICAg
ICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0g
ICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
LnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5T
dG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0aFdlYnNpdGVEYXRhU3Rv
cmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgCi0gICAgICAg
IGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IHdpdGhXZWJzaXRlRGF0YVN0b3Jl
LT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIW5ldHdvcmtD
YWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hl
RGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4dGVu
c2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgYXV0byYgaHN0c1N0b3JhZ2VE
aXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRIU1RTU3RvcmFnZURpcmVj
dG9yeSgpOwotICAgICAgICBpZiAoIWhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IGhzdHNTdG9yYWdlRGlyZWN0
b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGhzdHNTdG9y
YWdlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhz
dHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3MgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlm
IChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygpLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhv
c3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFt
ZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdNb2RlOwotI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxv
Y2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7Ci0gICAgICAgICAgICBz
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVt
b3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAgICAgICAg
ICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9t
YWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWluczsKLSAg
ICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVudFJlc291
cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlck9y
aWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRh
U3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLQotICAgICAgICBjb25z
dCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29s
dmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0NhY2hlRGly
ZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3Rv
cnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpU
eXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBhdXRvJiBoc3RzU3RvcmFnZURpcmVjdG9y
eSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRIU1RTU3RvcmFnZURpcmVjdG9yeSgpOwot
ICAgICAgICBpZiAoIWhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAg
ICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IGhzdHNTdG9yYWdlRGlyZWN0b3J5OwotICAg
ICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGhzdHNTdG9yYWdlRGlyZWN0
b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAg
ICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gV2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZSgpLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotICAg
ICAgICBhdXRvIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1
bHROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGly
ZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpU
eXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0gICAgfQotCi0jaWYgSEFWRShDRk5FVFdPUktfQUxURVJOQVRJVkVfU0VSVklDRSkKLSAg
ICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6aHR0cDNFbmFibGVkKCkpIHsKLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
YWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdEFs
dGVybmF0aXZlU2VydmljZXNEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5h
dGl2ZVNlcnZpY2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZl
U2VydmljZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cDNFbmFibGVkID0gdHJ1ZTsKLSAgICB9Ci0j
ZW5kaWYKLSAgICBib29sIGlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0ID0gZmFsc2U7Ci0gICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgPSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUGFyYW1ldGVycyB7Ci0gICAgICAgIFdURk1vdmUocmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeSksCi0gICAgICAgIFdURk1vdmUocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSksCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3Ms
Ci0gICAgICAgIGlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0LAotICAgICAgICBlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50LAotICAgICAgICBzaG91bGRJbmNsdWRlTG9j
YWxob3N0LAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlLAot
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIHRoaXJkUGFydHlD
b29raWVCbG9ja2luZ01vZGUsCi0gICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFi
bGVkLAotI2VuZGlmCi0gICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlLAot
ICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4sCi0gICAgICAgIGFwcEJvdW5kRG9t
YWlucywKLSAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UsCi0gICAgfTsKLQotICAgIC8v
IEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgcGFyYW1ldGVycwotICAgIHBsYXRmb3JtSW5pdGlh
bGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUg
bmV0d29yayBwcm9jZXNzLgotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKLQot
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0UU9TKG5ldHdvcmtQcm9jZXNzTGF0ZW5jeVFPUygpLCBuZXR3b3Jr
UHJvY2Vzc1Rocm91Z2hwdXRRT1MoKSksIDApOwotI2VuZGlmCi0KLSAgICBuZXR3b3JrUHJvY2Vz
cy0+dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0
b3JlKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhX
ZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBl
bmRpbmdDb29raWVzKCk7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBuZXR3b3JrIHBy
b2Nlc3Mga25vd3MgYWJvdXQgYWxsIHRoZSBzZXNzaW9ucyB0aGF0IGhhdmUgYmVlbiByZWdpc3Rl
cmVkIGJlZm9yZSBpdCBzdGFydGVkLgotICAgIGZvciAoYXV0byYgc2Vzc2lvbklEIDogbV9zZXNz
aW9uVG9QYWdlSURzTWFwLmtleXMoKSkgewotICAgICAgICBpZiAoYXV0byogd2Vic2l0ZURhdGFT
dG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNl
c3Npb25JRChzZXNzaW9uSUQpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Np
b24oKndlYnNpdGVEYXRhU3RvcmUpOwotICAgIH0KLQotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBX
VEZNb3ZlKG5ldHdvcmtQcm9jZXNzKTsKLSAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci19
Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1Byb3h5KQogewotICAgIEFTU0VSVChtX25ldHdvcmtQ
cm9jZXNzKTsKLSAgICBBU1NFUlQoJm5ldHdvcmtQcm9jZXNzUHJveHkgPT0gbV9uZXR3b3JrUHJv
Y2Vzcy5nZXQoKSk7Ci0KICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRz
LnZhbHVlcygpKQogICAgICAgICBzdXBwbGVtZW50LT5wcm9jZXNzRGlkQ2xvc2UoJm5ldHdvcmtQ
cm9jZXNzUHJveHkpOwogCkBAIC03NTEsOSArNDY4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNz
UHIKICAgICBpZiAobV9hdXRvbWF0aW9uU2Vzc2lvbikKICAgICAgICAgbV9hdXRvbWF0aW9uU2Vz
c2lvbi0+dGVybWluYXRlKCk7CiAKLSAgICAvLyBMZWF2ZSB0aGUgcHJvY2VzcyBwcm94eSBhcm91
bmQgZHVyaW5nIGNsaWVudCBjYWxsLCBzbyB0aGF0IHRoZSBjbGllbnQgY291bGQgcXVlcnkgdGhl
IHByb2Nlc3MgaWRlbnRpZmllci4KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKLQog
ICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKQEAgLTc2NCwyMCArNDc4LDYgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3NDcmFzaGVkKFdlYlByb2Nl
c3NQcm94eSYgcHJveHkpCiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1Byb3h5LCBN
ZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRl
bGF5ZWRSZXBseSYmIHJlcGx5KQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAg
bV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKHdlYlByb2Nlc3NQ
cm94eSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB3ZWJQcm9jZXNzUHJv
eHkgPSBtYWtlV2Vha1B0cih3ZWJQcm9jZXNzUHJveHkpLCByZXBseSA9IFdURk1vdmUocmVwbHkp
XSAoYXV0byYgY29ubmVjdGlvbkluZm8pIG11dGFibGUgewotICAgICAgICBpZiAoVU5MSUtFTFko
IUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVjdGlvbkluZm8uaWRlbnRp
ZmllcigpKSAmJiB3ZWJQcm9jZXNzUHJveHkgJiYgd2Vha1RoaXMpKSB7Ci0gICAgICAgICAgICBX
RUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19FUlJPUihQcm9jZXNzLCAiZ2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uOiBGYWlsZWQgZmlyc3QgYXR0ZW1wdCwgcmV0cnlpbmciKTsKLSAgICAgICAg
ICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKndlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShy
ZXBseSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHJlcGx5KGNv
bm5lY3Rpb25JbmZvKTsKLSAgICB9KTsKLX0KLQogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OmdwdVByb2Nlc3NDcmFzaGVkKFByb2Nlc3NJRCBpZGVudGlmaWVy
KQogewpAQCAtODAxLDIzICs1MDEsMjYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0R1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIE0KIH0KICNl
bmRpZgogCitib29sIFdlYlByb2Nlc3NQb29sOjpzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MgPSBmYWxzZTsKKwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vz
cyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm94eSwgUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3Ry
YWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChwcm94eSwg
JnByb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOworICAgIGF1dG8qIHdlYnNpdGVEYXRh
U3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChz
ZXNzaW9uSUQpOworICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAgd2Vic2l0ZURh
dGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKKyAg
ICBpZiAoIXByb2Nlc3NQb29scygpLnNpemUoKSkKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFJlZjxXZWJQcm9jZXNzUG9vbD4+IHNlcnZpY2VXb3JrZXJQcm9jZXNzUG9vbChXZWJQcm9j
ZXNzUG9vbDo6Y3JlYXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjcmVhdGUoKS5n
ZXQoKSkpOwogCi0gICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6
OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwotCi0g
ICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0YVN0
b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0gICAgICAgIHdlYnNpdGVEYXRhU3Rv
cmUgPSBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7Ci0gICAgfQorICAgIC8vIEFyYml0cmFyaWx5
IGNob29zZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sIHRvIGhvc3QgdGhlIHNlcnZpY2Ugd29ya2Vy
IHByb2Nlc3MuCisgICAgYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbHMoKVswXTsKKyAg
ICBBU1NFUlQocHJvY2Vzc1Bvb2wpOwogCiAgICAgV2ViUHJvY2Vzc1Byb3h5KiBzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5IHsgbnVsbHB0ciB9OwotICAgIGlmICghbV91c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vz
c2VzKSB7Ci0gICAgICAgICAgICBpZiAocHJvY2VzcyA9PSBtX3ByZXdhcm1lZFByb2Nlc3MgfHwg
cHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94eSgpKQorCisgICAgaWYgKCFzX3VzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogcHJv
Y2Vzc1Bvb2wtPm1fcHJvY2Vzc2VzKSB7CisgICAgICAgICAgICBpZiAocHJvY2VzcyA9PSBwcm9j
ZXNzUG9vbC0+bV9wcmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJv
eHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICgmcHJvY2Vz
cy0+d2Vic2l0ZURhdGFTdG9yZSgpICE9IHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CkBAIC04MjUsMzUgKzUyOCwzNSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpl
c3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1By
bwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5ID0gcHJvY2Vzcy5nZXQoKTsKLSAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VXb3JrZXJzKHVzZXJDb250ZW50Q29udHJvbGxlcklk
ZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpKTsKKyAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VXb3JrZXJzKHByb2Nlc3NQb29sLT51c2VyQ29udGVu
dENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CiAKLSAgICAgICAgICAg
IFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQoU2VydmljZVdvcmtlciwgImVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFu
IGV4aXN0aW5nIHdlYiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtl
clByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZp
ZXIoKSk7CisgICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VE
X1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25U
b05ldHdvcmtQcm9jZXNzIHJldXNpbmcgYW4gZXhpc3Rpbmcgd2ViIHByb2Nlc3MgKHByb2Nlc3M9
JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSB7Ci0g
ICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5ID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JT
ZXJ2aWNlV29ya2VycygqdGhpcywgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksICp3ZWJzaXRl
RGF0YVN0b3JlKTsKKyAgICAgICAgYXV0byBuZXdQcm9jZXNzUHJveHkgPSBXZWJQcm9jZXNzUHJv
eHk6OmNyZWF0ZUZvclNlcnZpY2VXb3JrZXJzKCpwcm9jZXNzUG9vbCwgV1RGTW92ZShyZWdpc3Ry
YWJsZURvbWFpbiksICp3ZWJzaXRlRGF0YVN0b3JlKTsKICAgICAgICAgc2VydmljZVdvcmtlclBy
b2Nlc3NQcm94eSA9IG5ld1Byb2Nlc3NQcm94eS5wdHIoKTsKIAotICAgICAgICBXRUJQUk9DRVNT
UE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3Jr
ZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgY3JlYXRpbmcgYSBuZXcgc2Vydmlj
ZSB3b3JrZXIgcHJvY2VzcyAocHJvY2VzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7
CisgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKFNl
cnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1By
b2Nlc3MgY3JlYXRpbmcgYSBuZXcgc2VydmljZSB3b3JrZXIgcHJvY2VzcyAocHJvY2VzPSVwLCBQ
SUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAKLSAgICAgICAgaW5pdGlhbGl6ZU5ld1dlYlBy
b2Nlc3MobmV3UHJvY2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICAgICAgbV9wcm9j
ZXNzZXMuYXBwZW5kKFdURk1vdmUobmV3UHJvY2Vzc1Byb3h5KSk7CisgICAgICAgIHByb2Nlc3NQ
b29sLT5pbml0aWFsaXplTmV3V2ViUHJvY2VzcyhuZXdQcm9jZXNzUHJveHksIHdlYnNpdGVEYXRh
U3RvcmUpOworICAgICAgICBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMuYXBwZW5kKFdURk1vdmUo
bmV3UHJvY2Vzc1Byb3h5KSk7CiAgICAgfQogCi0gICAgQVNTRVJUKCFtX3NlcnZpY2VXb3JrZXJQ
cm9jZXNzZXMuY29udGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpKTsKLSAgICBtX3Nl
cnZpY2VXb3JrZXJQcm9jZXNzZXMuYWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKKyAg
ICBBU1NFUlQoIXNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlucygqc2VydmljZVdvcmtl
clByb2Nlc3NQcm94eSkpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5hZGQoKnNlcnZp
Y2VXb3JrZXJQcm9jZXNzUHJveHkpOwogCi0gICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+
ZXN0YWJsaXNoU2VydmljZVdvcmtlckNvbnRleHQobV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMg
PyBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcy52YWx1ZSgpIDogbV9kZWZhdWx0UGFnZUdyb3Vw
LT5wcmVmZXJlbmNlcygpLnN0b3JlKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICBpZiAoIW1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkKLSAgICAgICAgc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChtX3NlcnZpY2VX
b3JrZXJVc2VyQWdlbnQpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVzdGFibGlz
aFNlcnZpY2VXb3JrZXJDb250ZXh0KHByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJQcmVmZXJl
bmNlcyA/IHByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcy52YWx1ZSgpIDog
cHJvY2Vzc1Bvb2wtPm1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgaWYgKCFwcm9jZXNzUG9vbC0+bV9zZXJ2
aWNlV29ya2VyVXNlckFnZW50LmlzTnVsbCgpKQorICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KHByb2Nlc3NQb29sLT5tX3NlcnZpY2VX
b3JrZXJVc2VyQWdlbnQpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZW1vdmVGcm9tU2Vy
dmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiB7Ci0gICAgQVNT
RVJUKG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb250YWlucyhwcm9jZXNzKSk7Ci0gICAgbV9z
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLnJlbW92ZShwcm9jZXNzKTsKKyAgICBBU1NFUlQoc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5zKHByb2Nlc3MpKTsKKyAgICBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzKCkucmVtb3ZlKHByb2Nlc3MpOwogfQogI2VuZGlmCiAKQEAgLTkyMiw3ICs2MjUs
NyBAQCBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBXZWJQcm9jZXNzUG9vbDo6dHJ5VGFrZVByZXdh
cm1lZFByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZQogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oV1BFKQogICAgIC8vIEluIHBsYXRmb3JtcyB1c2luZyBCdWJibGV3cmFwIGZvciBzYW5kYm94
aW5nLCBwcmV3YXJtZWQgcHJvY2VzcyBpcyBsYXVuY2hlZCB1c2luZyB0aGUgV2ViUHJvY2Vzc1Bv
b2wgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlLAogICAgIC8vIHNvIHdlIGRvbid0IHVzZSBpdCBp
biBjYXNlIG9mIHVzaW5nIGEgZGlmZmVyZW50IFdlYnNpdGVEYXRhU3RvcmUuCi0gICAgaWYgKG1f
c2FuZGJveEVuYWJsZWQgJiYgbV93ZWJzaXRlRGF0YVN0b3JlICYmIG1fd2Vic2l0ZURhdGFTdG9y
ZS5nZXQoKSAhPSAmd2Vic2l0ZURhdGFTdG9yZSkKKyAgICBpZiAobV9zYW5kYm94RW5hYmxlZCkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIApAQCAtMTAzMiw4ICs3MzUsNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjppbml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJv
eHkmIHByb2Nlc3MsIFdlYnNpdGVEYQogICAgICAgICBwcm9jZXNzLmlzUmVzcG9uc2l2ZShbaW5p
dGlhbGl6YXRpb25BY3Rpdml0eSA9IFdURk1vdmUoaW5pdGlhbGl6YXRpb25BY3Rpdml0eSldIChi
b29sKSB7IH0pOwogICAgIH0pOwogCi0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQogICAg
IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKIAogICAgIHBhcmFtZXRl
cnMuaW5qZWN0ZWRCdW5kbGVQYXRoID0gbV9yZXNvbHZlZFBhdGhzLmluamVjdGVkQnVuZGxlUGF0
aDsKQEAgLTExOTgsOSArODk5LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZp
bmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCiAgICAgICAgIHByb2Nlc3Mt
PmNvbm5lY3Rpb24oKS0+aWdub3JlVGltZW91dHNGb3JUZXN0aW5nKCk7CiAKICAgICBtX2Nvbm5l
Y3Rpb25DbGllbnQuZGlkQ3JlYXRlQ29ubmVjdGlvbih0aGlzLCBwcm9jZXNzLT53ZWJDb25uZWN0
aW9uKCkpOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgbV93ZWJzaXRl
RGF0YVN0b3JlLT5kaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwogfQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjpkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCkBAIC0x
Mjk1LDEwICs5OTMsNyBAQCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRl
V2ViUGFnZShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBSZWY8QVBJOgogICAgIGlmICghcGFnZUNv
bmZpZ3VyYXRpb24tPndlYnNpdGVEYXRhU3RvcmUoKSkgewogICAgICAgICAvLyBXZSB0cnkgdG8g
YXZvaWQgY3JlYXRpbmcgdGhlIGRlZmF1bHQgZGF0YSBzdG9yZSBhcyBsb25nIGFzIHBvc3NpYmxl
LgogICAgICAgICAvLyBCdXQgaWYgdGhlcmUgaXMgYW4gYXR0ZW1wdCB0byBjcmVhdGUgYSB3ZWIg
cGFnZSB3aXRob3V0IGFueSBzcGVjaWZpZWQgZGF0YSBzdG9yZSwgdGhlbiB3ZSBoYXZlIHRvIGNy
ZWF0ZSBpdC4KLSAgICAgICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgICAgICBt
X3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKS5wdHIoKTsKLQotICAgICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0ZURh
dGFTdG9yZShtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCkpOworICAgICAgICBwYWdlQ29uZmlndXJh
dGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1
bHREYXRhU3RvcmUoKS5wdHIoKSk7CiAgICAgfQogCiAgICAgUmVmUHRyPFdlYlByb2Nlc3NQcm94
eT4gcHJvY2VzczsKQEAgLTEzMjksNyArMTAyNCw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlBy
b2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIGlmICghbV9zZXJ2aWNlV29ya2VyUHJl
ZmVyZW5jZXMpIHsKICAgICAgICAgbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMgPSBwYWdlLT5w
cmVmZXJlbmNlc1N0b3JlKCk7Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nl
c3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMpCisgICAgICAgIGZvciAoYXV0byYgc2Vydmlj
ZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgICAgICBz
ZXJ2aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVTZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXNTdG9yZSgq
bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMpOwogICAgIH0KICAgICBpZiAodXNlckNvbnRlbnRD
b250cm9sbGVyKQpAQCAtMTM1Niw3ICsxMDUxLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBk
YXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCkKICAgICBp
ZiAobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50ID09IHVzZXJBZ2VudCkKICAgICAgICAgcmV0dXJu
OwogICAgIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9IHVzZXJBZ2VudDsKLSAgICBmb3IgKGF1
dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAg
IGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
KCkpCiAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzLnNldFNlcnZpY2VXb3JrZXJVc2VyQWdl
bnQobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KICNlbmRpZgpAQCAtMTM2NSwxNSArMTA2
MCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9y
ZShXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJCiB7CiAgICAgYXV0byByZXN1bHQgPSBtX3Nl
c3Npb25Ub1BhZ2VJRHNNYXAuYWRkKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgSGFzaFNldDxXZWJQ
YWdlUHJveHlJZGVudGlmaWVyPigpKS5pdGVyYXRvci0+dmFsdWUuYWRkKHBhZ2VJRCk7CiAgICAg
QVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKLQotICAgIGF1dG8gc2Vz
c2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwotICAgIGlmIChzZXNzaW9uSUQgIT0gUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBBU1NFUlQoIXNlc3Np
b25JRC5pc0VwaGVtZXJhbCgpIHx8IGRhdGFTdG9yZS5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRCA9PSBzZXNzaW9uSUQpOwotICAgICAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykgewotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbiht
YWtlUmVmKGRhdGFTdG9yZSkpOwotICAgICAgICAgICAgZGF0YVN0b3JlLmNsZWFyUGVuZGluZ0Nv
b2tpZXMoKTsKLSAgICAgICAgfQotICAgIH0KIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFn
ZUVuZFVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwg
V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKQpAQCAtMTQwMSw3ICsxMDg3LDYgQEAgYm9vbCBX
ZWJQcm9jZXNzUG9vbDo6aGFzUGFnZXNVc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFT
dG9yZSYgZGF0YVN0b3JlKQogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2Fk
KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFn
ZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZEZpbGVuYW1lKQogewogICAgIGF1dG8mIGRvd25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFBy
b3h5KGRhdGFTdG9yZSwgcmVxdWVzdCwgaW5pdGlhdGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwogCiAgICAgT3B0aW9u
YWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+IGlzQXBwQm91bmQgPSBOYXZpZ2F0aW5nVG9B
cHBCb3VuZERvbWFpbjo6Tm87CiAgICAgaWYgKGluaXRpYXRpbmdQYWdlKSB7CkBAIC0xNDExLDI2
ICsxMDk2LDIzIEBAIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJz
aXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94CiAjZW5kaWYKICAgICB9CiAKLSAg
ICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBSZXNvdXJjZVJlcXVlc3QgdXBkYXRl
ZFJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAgIC8vIFJlcXVlc3QncyBmaXJzdFBhcnR5Rm9yQ29v
a2llcyB3aWxsIGJlIHVzZWQgYXMgT3JpZ2luYWwgVVJMIG9mIHRoZSBkb3dubG9hZCByZXF1ZXN0
LgotICAgICAgICAvLyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVS
TC4KLSAgICAgICAgaWYgKGluaXRpYXRpbmdQYWdlKSB7Ci0gICAgICAgICAgICBVUkwgaW5pdGlh
dGluZ1BhZ2VVUkwgPSBVUkwgeyBVUkwgeyB9LCBpbml0aWF0aW5nUGFnZS0+cGFnZUxvYWRTdGF0
ZSgpLnVybCgpIH07Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9y
Q29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5z
ZXRJc1NhbWVTaXRlKGFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGluaXRpYXRpbmdQYWdlVVJM
LCByZXF1ZXN0LnVybCgpKSk7Ci0gICAgICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hU
VFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKLSAgICAgICAgICAgICAg
ICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2VyQWdl
bnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
dXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoVVJMKCkpOwotICAgICAgICAg
ICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7Ci0gICAgICAgICAgICBpZiAo
IXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFn
ZW50KSkKLSAgICAgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KFdl
YlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdXBk
YXRlZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZhbHNlKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3Mo
KS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25sb2FkUmVxdWVzdChzZXNzaW9u
SUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3Vu
ZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7
CisgICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJlcXVlc3QpOworICAgIC8vIFJl
cXVlc3QncyBmaXJzdFBhcnR5Rm9yQ29va2llcyB3aWxsIGJlIHVzZWQgYXMgT3JpZ2luYWwgVVJM
IG9mIHRoZSBkb3dubG9hZCByZXF1ZXN0LgorICAgIC8vIFdlIHNldCB0aGUgdmFsdWUgdG8gdG9w
IGxldmVsIGRvY3VtZW50J3MgVVJMLgorICAgIGlmIChpbml0aWF0aW5nUGFnZSkgeworICAgICAg
ICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwgPSBVUkwgeyBVUkwgeyB9LCBpbml0aWF0aW5nUGFnZS0+
cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0
UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKKyAgICAgICAgdXBkYXRlZFJlcXVl
c3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVhbChpbml0aWF0aW5nUGFn
ZVVSTCwgcmVxdWVzdC51cmwoKSkpOworICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hU
VFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKKyAgICAgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2VudEZv
clVSTChyZXF1ZXN0LnVybCgpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdXBkYXRlZFJlcXVl
c3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoVVJMKCkpOworICAgICAgICB1cGRhdGVkUmVxdWVz
dC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNI
VFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1
cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2Vy
QWdlbnQoKSk7CiAgICAgfQorICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7
CisgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkRvd25sb2FkUmVxdWVzdChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIGRvd25sb2FkUHJv
eHkuZG93bmxvYWRJRCgpLCB1cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmls
ZW5hbWUpLCAwKTsKIAogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTQzOCwxNyAr
MTEyMCwxMiBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0
ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveAogRG93bmxvYWRQcm94eSYgV2ViUHJv
Y2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2Vi
UGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgQVBJOjpEYXRhJiByZXN1bWVEYXRhLCBj
b25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0ZURv
d25sb2FkUHJveHkoZGF0YVN0b3JlLCBSZXNvdXJjZVJlcXVlc3QoKSwgaW5pdGlhdGluZ1BhZ2Us
IHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25J
RCgpOwogCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5k
bGU7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2Fu
ZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVz
dW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1l
RGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsK
LSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7Ci0gICAgfQotCisgICAgZGF0YVN0b3JlLm5l
dHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc3VtZURvd25s
b2FkKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHJl
c3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSwg
MCk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CiAKQEAgLTE1MTcsMTEgKzExOTQsNiBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWZyZXNoUGx1Z2lucygpCiAKICNlbmRpZiAvLyBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAotUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpuZXR3
b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQotewotICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzID8g
bV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7Ci19Ci0KIFByb2Nlc3NJ
RCBXZWJQcm9jZXNzUG9vbDo6cHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKQogewogICAgIHJl
dHVybiBtX3ByZXdhcm1lZFByb2Nlc3MgPyBtX3ByZXdhcm1lZFByb2Nlc3MtPnByb2Nlc3NJZGVu
dGlmaWVyKCkgOiAwOwpAQCAtMTU1OCwxNCArMTIzMCwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewog
ICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFz
U2VjdXJlKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSkpOwotICAgIHNlbmRU
b05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxT
Y2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNo
V2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3Jl
KSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSksIDApOwor
ICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQnlw
YXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewog
ICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFz
QnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxs
UHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNz
aW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtp
bmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0J5
cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0
YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFT
dG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5n
Q29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1l
KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTU3OCwxNCArMTI1NCwxOCBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwoY29uc3QgU3RyaW5nJiB1cmxT
Y2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVy
VVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNz
YWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSkpOwot
ICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6
OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBk
YXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUp
LCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hl
bWVBc05vQWNjZXNzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2Jh
bFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2No
ZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lz
dGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5n
UHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0Fj
Y2Vzcyh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURh
dGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAg
ICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSwgMCk7CisgICAgfSk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNv
bGF0ZWQoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNjA2LDEwICsxMjg2LDggQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVBy
b3RvY29sSGFuZGxlcnMoY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2xvYmFsVVJMU2No
ZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkuYWRkKHVybFNjaGVtZSk7Ci0gICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJv
dG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDog
TmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hl
bWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1l
QXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpA
QCAtMTYxOCwxMCArMTI5Niw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9i
YWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygp
LnJlbW92ZSh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJl
Z2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9Cisg
ICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0
d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVt
ZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYg
dXJsU2NoZW1lKQpAQCAtMTY1NSwxNiArMTMzMSwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZXRDYWNoZU1vZGVsKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIAogICAgIHNlbmRUb0FsbFByb2Nl
c3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSk7CiAK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCksIDAp
OworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtjYWNoZU1v
ZGVsXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5u
ZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1v
ZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKENhY2hlTW9kZWwgY2FjaGVNb2Rl
bCkKIHsKICAgICB1cGRhdGVCYWNrRm9yd2FyZENhY2hlQ2FwYWNpdHkoKTsKIAotICAgIGlmICht
X25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGlu
ZyhjYWNoZU1vZGVsKSwgeyB9LCB7IH0pOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hX
ZWJzaXRlRGF0YVN0b3JlKFtjYWNoZU1vZGVsXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3Jl
KSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKGNh
Y2hlTW9kZWwpLCB7IH0sIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dEludGVydmFsKQpA
QCAtMTY3NCwxMiArMTM1Miw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRSZXF1
ZXN0VGltZW91dEludGVydmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCiAKIERvd25sb2FkUHJv
eHkmIFdlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUm
IGRhdGFTdG9yZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkq
IG9yaWdpbmF0aW5nUGFnZSwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvKQogewotICAg
IHJldHVybiBlbnN1cmVOZXR3b3JrUHJvY2VzcygmZGF0YVN0b3JlKS5jcmVhdGVEb3dubG9hZFBy
b3h5KGRhdGFTdG9yZSwgcmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwotfQot
Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFj
a2dyb3VuZCkKLXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQoYmFja2dyb3VuZCk7CisgICAgcmV0dXJuIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2Vz
cygpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCAqdGhpcywgcmVxdWVzdCwgZnJhbWVJ
bmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNz
YWdlUmVjZWl2ZXIoSVBDOjpSZWNlaXZlck5hbWUgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXImIG1lc3NhZ2VSZWNlaXZlcikKQEAgLTE3NTAsMzAgKzE0MjMsNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAgICAgc2VuZFRvQWxsUHJv
Y2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
bmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KQotewotICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdl
KCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKHN0ZDo6Zm9yd2FyZDxUPiht
ZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Np
b25JRCkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMoc2Vzc2lvbklEKSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzKCkKLXsKLSAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwotCi0gICAg
aWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9uZXR3
b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7
Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNz
ZXMoKQogewogICAgIFZlY3RvcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzID0g
bV9wcm9jZXNzZXM7CkBAIC0xNzgxLDQwICsxNDMwLDE1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQogICAgICAgICBwcm9jZXNzLT50ZXJt
aW5hdGUoKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzUHJl
cGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQotewotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJl
cGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25JbW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpCi17Ci0gICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5Rm9yVGVzdGluZygpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQotCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpCiB7CiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQogICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
OwotICAgIHdoaWxlIChtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKSkKLSAg
ICAgICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmJlZ2luKCktPmRpc2FibGVTZXJ2aWNlV29y
a2VycygpOworICAgIHdoaWxlIChzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNpemUo
KSkKKyAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmJlZ2luKCktPmRpc2FibGVTZXJ2
aWNlV29ya2VycygpOwogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmZsdXNoQ29v
a2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KS5mbHVzaENvb2tpZXMoc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19
Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1dG9tYXRpb25DYXBhYmlsaXRpZXMoKSBj
b25zdAogewogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpAQCAtMjA4OSwxNSArMTcxMywy
MSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZXBvcnRXZWJDb250ZW50Q1BVVGltZShTZWNvbmRz
IGNwdVRpbWUsIHVpbnQ2NF90IGFjdGl2aXR5UwogI2VuZGlmCiB9CiAKK1dlYWtIYXNoU2V0PFdl
YlByb2Nlc3NQcm94eT4mIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkK
K3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5
Pj4gcHJvY2Vzc2VzOworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9CisKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb25zKCkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpm
b3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7
CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRp
b24oKTsKKyAgICB9KTsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gQ2hlY2sg
b24gbmV4dCBydW4gbG9vcCBzaW5jZSB0aGUgd2ViIHByb2Nlc3MgcHJveHkgdG9rZW5zIGFyZSBw
cm9iYWJseSBiZWluZyB1cGRhdGVkLgotICAgIGNhbGxPbk1haW5SdW5Mb29wKFt0aGlzLCB3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3Mg
OiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMpCisgICAgY2FsbE9uTWFpblJ1bkxvb3AoW10gewor
ICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclBy
b2Nlc3NlcygpKQogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3NBc3NlcnRpb24oKTsKICAgICB9KTsKICNlbmRpZgpAQCAtMjEwNyw3ICsx
NzM3LDcgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29ya2VyUGFnZUlEKFdlYlBh
Z2VQcm94eUlkZW50aWZpZXIgcGFnZUlEKSBjb25zdAogewogI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmVmZmljaWVudC4KLSAgICByZXR1cm4gV1RG
OjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtwYWdlSURdKGF1dG8mIHByb2Nlc3Mp
IHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtwYWdl
SURdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdv
cmtlclBhZ2VQcm94eShwYWdlSUQpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMzI5LDE0ICsxOTU5
LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRl
c3RpbmcoKQogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLXZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21h
aW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0
ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6OkZsYWc+IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIFdl
YlBhZ2VQcm94eUlkZW50aWZpZXIgd2ViUGFnZVByb3h5SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBh
Z2VJRCkKLXsKLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5z
ZmVyKHNlc3Npb25JRCwgZnJvbURvbWFpbiwgdG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNm
ZXIsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpTZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihkb21haW5zKSk7CkBA
IC0yMzg3LDI3ICsyMDA5LDI3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1ZGlibGVN
ZWRpYUFzc2VydGlvbnMoKQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykK
IHsKLSAgICBpZiAobV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID09IHVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MpCisgICAgaWYgKHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAi
c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAg
V0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2Vzcz0lZCkiLCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIAotICAgIG1fdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3M7Ci0gICAgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKLSAgICB0ZXJtaW5hdGVOZXR3
b3JrUHJvY2VzcygpOworICAgIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bv
b2wtPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCiBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFj
dGl2aXR5Rm9yVGVzdGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6
YW55T2Yoc2VydmljZVdvcmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAg
ICAgIHJldHVybiBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JU
ZXN0aW5nKCk7CiAgICAgfSk7CiB9CiAKIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VX
b3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
V1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsK
KyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8m
IHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckJhY2tn
cm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4IGQxZjFmZTk2MTUwNmExZTVmMTMyNWZhOTlhNTYw
OGI5NTBiNmFiNzEuLjdjMjU0ODkwMzY2ODljZjlmYWViODc4MTkwNjc5ZGFmMTExNmEzMGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApAQCAtODEsNyArODEsNiBA
QCBPQkpDX0NMQVNTIFdLUHJlZmVyZW5jZU9ic2VydmVyOwogCiBuYW1lc3BhY2UgQVBJIHsKIGNs
YXNzIEF1dG9tYXRpb25DbGllbnQ7Ci1jbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7
CiBjbGFzcyBEb3dubG9hZENsaWVudDsKIGNsYXNzIEhUVFBDb29raWVTdG9yZTsKIGNsYXNzIElu
amVjdGVkQnVuZGxlQ2xpZW50OwpAQCAtMTgwLDcgKzE3OSw2IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3Rv
cnlDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0RG93bmxvYWRDbGllbnQoVW5pcXVlUmVmPEFQSTo6
RG93bmxvYWRDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYmKTsKLSAgICB2b2lkIHNldExlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQ+JiYpOwogCiAgICAgdm9pZCBzZXRDdXN0b21XZWJDb250ZW50U2Vy
dmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBj
dXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX2NvbmZp
Z3VyYXRpb24tPmN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpOyB9CkBA
IC0xOTEsMTcgKzE4OSw5IEBAIHB1YmxpYzoKICAgICAvLyBudWxsIGNoZWNrcyBpbiBXZWJQYWdl
UHJveHkuCiAgICAgV2ViUHJvY2Vzc1Byb3h5KiBkdW1teVByb2Nlc3NQcm94eShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQpIGNvbnN0IHsgcmV0dXJuIG1fZHVtbXlQcm9jZXNzUHJveGllcy5nZXQo
c2Vzc2lvbklEKS5nZXQoKTsgfQogCi0gICAgLy8gV2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2Vz
cyBhcyBhcHByb3BvcmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4gVGhlIGNvbm5lY3Rp
b24gbXVzdCBiZSBub24tbnVsbC4KLSAgICBJUEM6OkNvbm5lY3Rpb24qIG5ldHdvcmtpbmdQcm9j
ZXNzQ29ubmVjdGlvbigpOwotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9B
bGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
dm9pZCBzZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKGNvbnN0IFQmIG1lc3NhZ2UsIFBBTDo6
U2Vzc2lvbklEKTsKIAotICAgIC8vIFNlbmRzIHRoZSBtZXNzYWdlIHRvIFdlYlByb2Nlc3Mgb3Ig
TmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9kZWwu
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhU
JiYgbWVzc2FnZSk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gdm9pZCBz
ZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UsIFUmJiByZXBseSk7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNo
aW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpOwotCiAgICAgdm9pZCBwcm9jZXNzRGlkRmluaXNo
TGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSopOwogCiAgICAgV2ViUHJvY2Vzc0NhY2hlJiB3ZWJQ
cm9jZXNzQ2FjaGUoKSB7IHJldHVybiBtX3dlYlByb2Nlc3NDYWNoZS5nZXQoKTsgfQpAQCAtMjA5
LDkgKzE5OSw2IEBAIHB1YmxpYzoKICAgICAvLyBEaXNjb25uZWN0IHRoZSBwcm9jZXNzIGZyb20g
dGhlIGNvbnRleHQuCiAgICAgdm9pZCBkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkq
KTsKIAotICAgIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSogd2Vic2l0ZURhdGFTdG9yZSgpIGNv
bnN0IHsgcmV0dXJuIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0UHJp
bWFyeURhdGFTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeyBtX3dl
YnNpdGVEYXRhU3RvcmUgPSAmZGF0YVN0b3JlOyB9Ci0KICAgICBSZWY8V2ViUGFnZVByb3h5PiBj
cmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJik7
CiAKICAgICB2b2lkIHBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJ
ZGVudGlmaWVyLCBXZWJzaXRlRGF0YVN0b3JlJik7CkBAIC0yNjIsMTAgKzI0OSw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGFkZFN1cHBvcnRlZFBsdWdpbihTdHJpbmcmJiBtYXRjaGluZ0RvbWFpbiwg
U3RyaW5nJiYgbmFtZSwgSGFzaFNldDxTdHJpbmc+JiYgbWltZVR5cGVzLCBIYXNoU2V0PFN0cmlu
Zz4gZXh0ZW5zaW9ucyk7CiAgICAgdm9pZCBjbGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIAotICAg
IFByb2Nlc3NJRCBuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKICAgICBQcm9jZXNzSUQgcHJl
d2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKTsKICAgICB2b2lkIGFjdGl2ZVBhZ2VzT3JpZ2luc0lu
V2ViUHJvY2Vzc0ZvclRlc3RpbmcoUHJvY2Vzc0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxTdHJpbmc+JiYpPiYmKTsKLSAgICBib29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1l
bnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpOwogCiAgICAgV2ViUGFnZUdyb3VwJiBkZWZhdWx0
UGFnZUdyb3VwKCkgeyByZXR1cm4gbV9kZWZhdWx0UGFnZUdyb3VwLmdldCgpOyB9CiAKQEAgLTMw
Nyw4ICsyOTIsNiBAQCBwdWJsaWM6CiAgICAgQVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVu
dCYgaGlzdG9yeUNsaWVudCgpIHsgcmV0dXJuICptX2hpc3RvcnlDbGllbnQ7IH0KICAgICBXZWJD
b250ZXh0Q2xpZW50JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCi0gICAgQVBJOjpD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgp
IGNvbnN0IHsgcmV0dXJuICptX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsgfQotCiAgICAg
c3RydWN0IFN0YXRpc3RpY3MgewogICAgICAgICB1bnNpZ25lZCB3a1ZpZXdDb3VudDsKICAgICAg
ICAgdW5zaWduZWQgd2tQYWdlQ291bnQ7CkBAIC0zMjQsOCArMzA3LDYgQEAgcHVibGljOgogICAg
IHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7CiAgICAgdm9pZCB0ZXJtaW5hdGVT
ZXJ2aWNlV29ya2VycygpOwogCi0gICAgdm9pZCBmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNz
aW9uSUQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCiAgICAgdm9pZCBzZXRTaG91
bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhib29sIHZhbHVlKSB7IG1f
c2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQog
ICAgIGJvb2wgc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSBj
b25zdCB7IHJldHVybiBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nOyB9CiAgICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFp
bEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9CkBAIC0zODgsMTkgKzM2OSwxMyBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogICAgIC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50Ci0gICAgTmV0
d29ya1Byb2Nlc3NQcm94eSYgZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSog
d2l0aFdlYnNpdGVEYXRhU3RvcmUgPSBudWxscHRyKTsKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
KiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCk7
IH0KICAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7
CiAKLSAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkm
LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25E
ZWxheWVkUmVwbHkmJik7Ci0KICAgICBib29sIGlzU2VydmljZVdvcmtlclBhZ2VJRChXZWJQYWdl
UHJveHlJZGVudGlmaWVyKSBjb25zdDsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAg
dm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0
d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vz
c2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHN0YXRpYyB2b2lkIGVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNzaW9uSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCByZW1vdmVGcm9tU2Vydmlj
ZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkmKTsKLSAgICBzaXplX3Qgc2VydmljZVdv
cmtlclByb3hpZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cy5jb21wdXRlU2l6ZSgpOyB9Ci0gICAgdm9pZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZv
clNlcnZpY2VXb3JrZXIoYm9vbCBhbGxvd3MpIHsgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZv
clNlcnZpY2VXb3JrZXIgPSBhbGxvd3M7IH0KLSAgICBib29sIGFsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yU2VydmljZVdvcmtlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzQW55U1NMQ2VydGlm
aWNhdGVGb3JTZXJ2aWNlV29ya2VyOyB9CisgICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVz
Q291bnQoKSBjb25zdCB7IHJldHVybiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNp
emUoKTsgfQogICAgIHZvaWQgdXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25zdCBTdHJp
bmcmIHVzZXJBZ2VudCk7CiAgICAgY29uc3QgT3B0aW9uYWw8VXNlckNvbnRlbnRDb250cm9sbGVy
SWRlbnRpZmllcj4mIHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29y
a2VycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNl
V29ya2VyOyB9CiAgICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9y
VGVzdGluZygpIGNvbnN0OwpAQCAtNDU5LDggKzQzNCw2IEBAIHB1YmxpYzoKICAgICBib29sIGFs
d2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx3YXlzUnVu
c0F0QmFja2dyb3VuZFByaW9yaXR5OyB9CiAgICAgYm9vbCBzaG91bGRUYWtlVUlCYWNrZ3JvdW5k
QXNzZXJ0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0
aW9uOyB9CiAKLSAgICB2b2lkIHN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3Jv
dW5kKTsKLSAgICAKICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICB2b2lkIGdhbWVwYWRDb25uZWN0
ZWQoY29uc3QgVUlHYW1lcGFkJiwgV2ViQ29yZTo6RXZlbnRNYWtlc0dhbWVwYWRzVmlzaWJsZSk7
CiAgICAgdm9pZCBnYW1lcGFkRGlzY29ubmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYpOwpAQCAtNDk4
LDcgKzQ3MSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVG
b3JUZXN0aW5nKCk7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAg
IHZvaWQgZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9u
SUQsIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21haW4sIE9wdGlvblNldDxXZWJDb3JlOjpD
cm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiwgV2ViUGFnZVByb3h5SWRlbnRp
ZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIpOwogICAgIHZvaWQgc2V0RG9tYWluc1dpdGhV
c2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJik7CiAg
ICAgdm9pZCBzZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRlc3RpbmcoY29uc3QgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4mIGZpcnN0UGFydHlEb21haW4sIGNvbnN0IFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluJiB0aGlyZFBhcnR5RG9tYWluLCBib29sIHNob3VsZFNjaGVkdWxlTm90
aWZpY2F0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgc2VuZFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKQEAgLTUyNSw4ICs0OTcsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgUGx1Z0luQXV0
b1N0YXJ0UHJvdmlkZXImIHBsdWdJbkF1dG9TdGFydFByb3ZpZGVyKCkgeyByZXR1cm4gbV9wbHVn
SW5BdXRvU3RhcnRQcm92aWRlcjsgfQogCi0gICAgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzKGJvb2wpOwotICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzczsg
fQorICAgIHN0YXRpYyB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9v
bCk7CisgICAgc3RhdGljIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIHsg
cmV0dXJuIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQogCiAjaWYgRU5BQkxF
KENGUFJFRlNfRElSRUNUX01PREUpCiAgICAgdm9pZCBub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQo
Y29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBPcHRpb25hbDxT
dHJpbmc+JiBlbmNvZGVkVmFsdWUpOwpAQCAtNTM4LDkgKzUxMCwxNSBAQCBwdWJsaWM6CiAgICAg
aW50MzJfdCB1c2VySWQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJJZDsgfQogI2VuZGlmCiAKLSNp
ZiBQTEFURk9STShDT0NPQSkKLSAgICBPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IHhwY0VuZHBv
aW50TWVzc2FnZSgpIGNvbnN0OwotICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9p
bnRUb1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRwb2ludE1lc3NhZ2Up
OworICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+
IHVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsK
KyAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBT
dHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgd2Vi
Q29udGVudENhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVt
cG9yYXJ5RGlyZWN0b3J5KCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTU1Niw4ICs1MzQsNiBA
QCBwcml2YXRlOgogICAgIFdlYlByb2Nlc3NQcm94eSYgY3JlYXRlTmV3V2ViUHJvY2VzcyhXZWJz
aXRlRGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQ
cm94eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKICAgICB2b2lkIGluaXRpYWxpemVOZXdXZWJQcm9jZXNz
KFdlYlByb2Nlc3NQcm94eSYsIFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9jZXNzUHJveHk6Oklz
UHJld2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8pOwogCi0gICAgdm9p
ZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycyYpOwotCiAgICAgdm9pZCBoYW5kbGVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSk7
CiAgICAgdm9pZCBoYW5kbGVTeW5jaHJvbm91c01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJEYXRhJiYpPiYmKTsKIApAQCAtNTgxLDE0ICs1NTcsNiBA
QCBwcml2YXRlOgogCiAgICAgYm9vbCB1c2VzU2luZ2xlV2ViUHJvY2VzcygpIGNvbnN0IHsgcmV0
dXJuIG1fY29uZmlndXJhdGlvbi0+dXNlc1NpbmdsZVdlYlByb2Nlc3MoKTsgfQogCi0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIHN0
YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJp
bmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgY29udGFp
bmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIHZvaWQgcmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKICAgICB2b2lkIHVucmVn
aXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKQEAgLTYzMCw5ICs1OTgsOCBAQCBwcml2YXRl
OgogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYWtQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4g
bV9kdW1teVByb2Nlc3NQcm94aWVzOyAvLyBMaWdodHdlaWdodCBXZWJQcm9jZXNzUHJveHkgb2Jq
ZWN0cyB3aXRob3V0IGJhY2tpbmcgcHJvY2Vzcy4KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKLSAgICBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+IG1fc2VydmljZVdvcmtlclByb2Nl
c3NlczsKKyAgICBzdGF0aWMgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiYgc2VydmljZVdv
cmtlclByb2Nlc3NlcygpOwogICAgIGJvb2wgbV93YWl0aW5nRm9yV29ya2VyQ29udGV4dFByb2Nl
c3NDb25uZWN0aW9uIHsgZmFsc2UgfTsKLSAgICBib29sIG1fYWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JTZXJ2aWNlV29ya2VyIHsgZmFsc2UgfTsKICAgICBTdHJpbmcgbV9zZXJ2aWNlV29ya2Vy
VXNlckFnZW50OwogICAgIE9wdGlvbmFsPFdlYlByZWZlcmVuY2VzU3RvcmU+IG1fc2VydmljZVdv
cmtlclByZWZlcmVuY2VzOwogICAgIE9wdGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50
aWZpZXI+IG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNlV29ya2VyOwpAQCAtNjQ4
LDcgKzYxNSw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlv
bkNsaWVudD4gbV9hdXRvbWF0aW9uQ2xpZW50OwogICAgIFVuaXF1ZVJlZjxBUEk6OkRvd25sb2Fk
Q2xpZW50PiBtX2Rvd25sb2FkQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2Fj
eUNvbnRleHRIaXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudDsKIAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9uU2Vzc2lvbj4gbV9hdXRvbWF0
aW9uU2Vzc2lvbjsKIApAQCAtNjgwLDggKzY0Niw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21l
bW9yeVNhbXBsZXJFbmFibGVkIHsgZmFsc2UgfTsKICAgICBkb3VibGUgbV9tZW1vcnlTYW1wbGVy
SW50ZXJ2YWwgeyAxNDAwLjAgfTsKIAotICAgIFJlZlB0cjxXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU+IG1fd2Vic2l0ZURhdGFTdG9yZTsKLQogICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBjaGFy
KiwgUmVmUHRyPFdlYkNvbnRleHRTdXBwbGVtZW50PiwgUHRySGFzaDxjb25zdCBjaGFyKj4+IFdl
YkNvbnRleHRTdXBwbGVtZW50TWFwOwogICAgIFdlYkNvbnRleHRTdXBwbGVtZW50TWFwIG1fc3Vw
cGxlbWVudHM7CiAKQEAgLTcxNCw4ICs2NzgsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3By
b2Nlc3NUZXJtaW5hdGlvbkVuYWJsZWQgeyB0cnVlIH07CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKLQogICAgIEhhc2hNYXA8dWlu
dDY0X3QsIFJlZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+PiBtX2RpY3Rpb25hcnlDYWxsYmFja3M7
CiAKICNpZiBVU0UoU09VUCkKQEAgLTgyMCwzMSArNzgyLDEzIEBAIHByaXZhdGU6CiAjZWxzZQog
ICAgIGJvb2wgbV9pc0RlbGF5ZWRXZWJQcm9jZXNzTGF1bmNoRGlzYWJsZWQgeyBmYWxzZSB9Owog
I2VuZGlmCi0gICAgYm9vbCBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgeyBmYWxz
ZSB9OworICAgIHN0YXRpYyBib29sIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsK
IAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgSGFzaFNldDxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gbV9kb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbjsKICNl
bmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgT1NPYmplY3RQdHI8eHBjX29iamVjdF90
PiBtX2VuZHBvaW50TWVzc2FnZTsKLSNlbmRpZgogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdl
KQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNl
bmRNZXNzYWdlKCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJk
PFQ+KG1lc3NhZ2UpLCAwKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShU
JiYgbWVzc2FnZSkKLXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKLX0KLQogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb0FsbFByb2Nlc3Nlcyhj
b25zdCBUJiBtZXNzYWdlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5jcHAKaW5kZXggZDY2MTAzMzhiNmNmNjBhMjdhNmY3NWRhZWMzNDlhOGY3MmFiM2I4NS4u
NTQ5MmE5ZTllYzZlMjg4ZTBmYmM5MWQyNTQ5YWUwOWIyMmQ2ZjcwMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC03MzgsNyArNzM4LDcgQEAgdm9p
ZCBXZWJQcm9jZXNzUHJveHk6OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHVpbnQ2NF90IHBs
dWdpblByb2Nlc3NUb2tlbiwgTWUKIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbihNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQogewotICAgIG1fcHJvY2Vzc1Bv
b2wtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOwor
ICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOwogfQogCiAjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQpAQCAtOTU1LDkgKzk1NSw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRGaW5p
c2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBDOjpDb25uZWN0CiAgICAg
fQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgYXV0byBlbmRwb2ludE1lc3NhZ2UgPSBwcm9j
ZXNzUG9vbCgpLnhwY0VuZHBvaW50TWVzc2FnZSgpOworICAgIGF1dG8gZW5kcG9pbnRNZXNzYWdl
ID0gd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkueHBjRW5kcG9pbnRNZXNzYWdl
KCk7CiAgICAgaWYgKGVuZHBvaW50TWVzc2FnZSkKLSAgICAgICAgeHBjX2Nvbm5lY3Rpb25fc2Vu
ZF9tZXNzYWdlKGNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbmRwb2ludE1lc3NhZ2Uu
Z2V0KCkpOworICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbigp
LT54cGNDb25uZWN0aW9uKCksIGVuZHBvaW50TWVzc2FnZSk7CiAjZW5kaWYKIAogICAgIFJFTEVB
U0VfQVNTRVJUKCFtX3dlYkNvbm5lY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNv
Y29hLm1tCmluZGV4IDdjNDQwODUxNjc3MzY4YjVkZjg5YTg2ZmY0ZDNiNTE1MzRiOTBiYjcuLjYy
OTcxMDcxYmU5MzgxZjc3N2RhZWQ1OThkMWJkMDY0MTUzYTY3MWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJz
aXRlRGF0YVN0b3JlQ29jb2EubW0KQEAgLTI4LDEwICsyOCwxMiBAQAogCiAjaW1wb3J0ICJDb29r
aWVTdG9yYWdlVXRpbHNDRi5oIgogI2ltcG9ydCAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIK
KyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIlNhbmRib3hVdGlsaXRp
ZXMuaCIKICNpbXBvcnQgIlN0b3JhZ2VNYW5hZ2VyLmgiCiAjaW1wb3J0ICJXZWJGcmFtZVBvbGlj
eUxpc3RlbmVyUHJveHkuaCIKICNpbXBvcnQgIldlYlByZWZlcmVuY2VzS2V5cy5oIgorI2ltcG9y
dCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0ICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuaCIKICNpbXBvcnQgIldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgiCiAjaW1wb3J0
IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgpAQCAtNDQsNiArNDYsNyBAQAogI2lt
cG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVn
ZS5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgorI2ltcG9ydCA8d3RmL2NvY29hL0VudGl0bGVtZW50
cy5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKQEAgLTU2Miw0ICs1NjUsMjEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZWluaXRpYWxpemVBcHBCb3VuZERvbWFpbnMoKQogfQogI2VuZGlmCiAKK2Jvb2wgV2Vic2l0ZURh
dGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3Ry
aW5nJiBlbnRpdGxlbWVudCkKK3sKKyAgICByZXR1cm4gV1RGOjpoYXNFbnRpdGxlbWVudChuZXR3
b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51
dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1By
b2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vzcyh4cGNfb2JqZWN0X3QgZW5kcG9pbnRNZXNzYWdl
KQoreworICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7CisgICAgICAgIGlm
IChwcm9jZXNzLnN0YXRlKCkgIT0gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpTdGF0ZTo6UnVubmlu
ZykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIXByb2Nlc3MuY29ubmVjdGlv
bigpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGF1dG8gY29ubmVjdGlvbiA9IHBy
b2Nlc3MuY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCk7CisgICAgICAgIHhwY19jb25uZWN0
aW9uX3NlbmRfbWVzc2FnZShjb25uZWN0aW9uLCBlbmRwb2ludE1lc3NhZ2UpOworICAgIH0KK30K
KwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCAwODMwY2E3NWE3ZmMzOGU2NDViNzc1YjM5YjMzNzVk
NGMyMDUwMzdkLi4zZDI5MTU5MDRkM2U1NzQyYjg2NzIyNWRhODNlZWYxMGMwNzczODhlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0
b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVN0b3JlLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0
aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNs
dWRlICJXZWJCYWNrRm9yd2FyZENhY2hlLmgiCisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclBy
b3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0MkluaXRpYWxpemUuaCIKICNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzQ2FjaGUuaCIKQEAgLTc1LDYgKzc2LDEwIEBA
CiAjaW5jbHVkZSAiU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IuaCIKICNlbmRpZgogCisjaWYg
UExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIGJvb2wgYWxsb3dzV2Vic2l0ZURh
dGFSZWNvcmRzRm9yQWxsT3JpZ2luczsKQEAgLTgzLDEzICs4OCwxOSBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmFsbG93V2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2lucygpCiAgICAgYWxs
b3dzV2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2lucyA9IHRydWU7CiB9CiAKLXN0YXRpYyBI
YXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4mIG5vbkRlZmF1bHREYXRh
U3RvcmVzKCkKK3N0YXRpYyBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3Jl
Kj4mIGFsbERhdGFTdG9yZXMoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVUlUaHJlYWQoKSk7
CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNp
dGVEYXRhU3RvcmUqPj4gbWFwOwogICAgIHJldHVybiBtYXA7CiB9CiAKK3ZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0
YVN0b3JlJik+JiYgZnVuY3Rpb24pCit7CisgICAgZm9yIChhdXRvKiBkYXRhU3RvcmUgOiBhbGxE
YXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAgICAgIGZ1bmN0aW9uKCpkYXRhU3RvcmUpOworfQor
CiBSZWY8V2Vic2l0ZURhdGFTdG9yZT4gV2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlTm9uUGVyc2lz
dGVudCgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vic2l0ZURhdGFTdG9yZShXZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKElzUGVyc2lzdGVudDo6Tm8pLCBQQUw6
OlNlc3Npb25JRDo6Z2VuZXJhdGVFcGhlbWVyYWxTZXNzaW9uSUQoKSkpOwpAQCAtMTE1LDcgKzEy
Niw3IEBAIFdlYnNpdGVEYXRhU3RvcmU6OldlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uPiYmIGNvbmZpZ3VyCiAjZW5kaWYKIHsKICAgICBXVEY6OnNldFBy
b2Nlc3NQcml2aWxlZ2VzKGFsbFByaXZpbGVnZXMoKSk7Ci0gICAgbWF5YmVSZWdpc3RlcldpdGhT
ZXNzaW9uSURNYXAoKTsKKyAgICByZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKICAgICBwbGF0
Zm9ybUluaXRpYWxpemUoKTsKIAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CkBAIC0x
MjgsMTcgKzEzOSwxMiBAQCBXZWJzaXRlRGF0YVN0b3JlOjp+V2Vic2l0ZURhdGFTdG9yZSgpCiAK
ICAgICBwbGF0Zm9ybURlc3Ryb3koKTsKIAotICAgIGlmIChtX3Nlc3Npb25JRCAhPSBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIEFTU0VSVChub25EZWZhdWx0
RGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7Ci0gICAgICAgIG5vbkRlZmF1
bHREYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbW92ZVNlc3Npb24obV9z
ZXNzaW9uSUQpOwotICAgICAgICB9Ci0gICAgfQorICAgIEFTU0VSVChhbGxEYXRhU3RvcmVzKCku
Z2V0KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsKKyAgICBhbGxEYXRhU3RvcmVzKCkucmVtb3ZlKG1f
c2Vzc2lvbklEKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlbW92ZVNlc3Npb24oKnRoaXMpOwog
I2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKLSAgICAgICAgaWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94
eSA9IEdQVVByb2Nlc3NQcm94eTo6c2luZ2xldG9uSWZDcmVhdGVkKCkpCi0gICAgICAgICAgICBn
cHVQcm9jZXNzUHJveHktPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOworICAgIGlmIChhdXRv
KiBncHVQcm9jZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgp
KQorICAgICAgICBncHVQcm9jZXNzUHJveHktPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwog
I2VuZGlmCiB9CiAKQEAgLTE2OSwxNyArMTc1LDMzIEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpCiAgICAgcmV0dXJuICEhZ2xvYmFsRGVmYXVsdERhdGFT
dG9yZSgpOwogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJXaXRoU2Vz
c2lvbklETWFwKCkKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklE
TWFwKCkKIHsKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSkgewotICAgICAgICBhdXRvIHJlc3VsdCA9IG5vbkRlZmF1bHREYXRhU3RvcmVz
KCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQs
IHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBhdXRvIHJlc3VsdCA9IGFsbERhdGFTdG9yZXMoKS5h
ZGQobV9zZXNzaW9uSUQsIHRoaXMpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQu
aXNOZXdFbnRyeSk7Cit9CisKK1dlYnNpdGVEYXRhU3RvcmUqIFdlYnNpdGVEYXRhU3RvcmU6OmV4
aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK3sK
KyAgICByZXR1cm4gYWxsRGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpOworfQorCitOZXR3b3Jr
UHJvY2Vzc1Byb3h5JiBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2VzcygpCit7CisgICAg
aWYgKCFtX25ldHdvcmtQcm9jZXNzKSB7CisgICAgICAgIGlmIChtX3Nlc3Npb25JRC5pc0VwaGVt
ZXJhbCgpIHx8IG1fc2Vzc2lvbklEID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCkpCisgICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGUoKTsKKyAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigqdGhpcyk7CiAgICAgfQorCisgICAgcmV0dXJuICpt
X25ldHdvcmtQcm9jZXNzOwogfQogCi1XZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3Jl
OjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQorTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29y
a1Byb2Nlc3MoKSBjb25zdAogewotICAgIHJldHVybiBzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9u
SUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSA/IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KHNlc3Np
b25JRCkgOiBudWxscHRyOworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYnNpdGVEYXRhU3RvcmUm
PigqdGhpcykubmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZWdpc3RlclByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQpAQCAtMTk1LDEyICsyMTcs
NiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVucmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQ
cm94eSYgcHJvY2VzcykKICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CiB9CiAKLVdl
YlByb2Nlc3NQb29sKiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3Jh
Z2VPcGVyYXRpb25zKCkKLXsKLSAgICBhdXRvIHBvb2xzID0gcHJvY2Vzc1Bvb2xzKDEpOwotICAg
IHJldHVybiBwb29scy5pc0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVnaW4oKS0+Z2V0KCk7
Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3Nh
cnkoKQogewogICAgIGlmIChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBAIC00NDAsMjggKzQ1
NiwyMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogI2VuZGlmCiAKICAgICBhdXRvIG5ldHdv
cmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JE
YXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwotICAgIGlmIChuZXR3b3JrUHJv
Y2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsKLSAgICAgICAgYXV0
byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlwZTo6
TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNzUG9vbHMoKTsKLSAgICAgICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5l
dHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNz
VHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Okxh
dW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
dGhpcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vz
c0FjY2Vzc1R5cGU6Ok5vbmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICB9Ci0KKyAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkg
eworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKKyAgICAgICAgbmV0d29ya1By
b2Nlc3MoKTsKKyAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOworICAgICAgICBGQUxM
VEhST1VHSDsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKKyAg
ICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVn
YXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKS0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBm
ZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXShXZWJzaXRlRGF0
YSB3ZWJzaXRlRGF0YSkgeworICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZmV0Y2hXZWJz
aXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CiAgICAgICAgICAgICAgICAgY2Fs
bGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soV1RGTW92ZSh3ZWJzaXRlRGF0
YSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAg
YXV0byB3ZWJQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVXZWJQcm9jZXNzQWNjZXNzVHlwZUZv
ckRhdGFGZXRjaChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CkBAIC03MjQsMzEgKzczMywy
NCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogICAgIGJvb2wgZGlkTm90aWZ5TmV0d29ya1By
b2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhID0gZmFsc2U7CiAjZW5kaWYKICAgICBhdXRvIG5ldHdv
cmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JE
YXRhUmVtb3ZhbChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7Ci0gICAgaWYgKG5ldHdvcmtQ
cm9jZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkgewotICAgICAgICBh
dXRvIHBvb2xzID0gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09IFByb2Nlc3NBY2Nlc3NUeXBl
OjpMYXVuY2ggPyBlbnN1cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nlc3NQb29scygpOwotICAgICAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKLSAgICAgICAgICAgIHN3aXRjaCAo
bmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nl
c3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6
TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cyh0aGlzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBQcm9j
ZXNzQWNjZXNzVHlwZTo6Tm9uZToKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIH0KLQorICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBl
KSB7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgorICAgICAgICBuZXR3b3Jr
UHJvY2VzcygpOworICAgICAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7CisgICAgICAgIEZB
TExUSFJPVUdIOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgor
ICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewogICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVz
LCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAg
ICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQs
IGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewogICAgICAg
ICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CiAg
ICAgICAgICAgICB9KTsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAg
ICAgICAgICAgZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhID0gdHJ1
ZTsKICNlbmRpZgogICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvY2Vzc0Fj
Y2Vzc1R5cGU6Ok5vbmU6CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGF1dG8gd2ViUHJv
Y2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlV2ViUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVtb3Zh
bChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CkBAIC04OTMsMTQgKzg5NSw5IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBk
YXRhVHlwZXMsIFdhbGxUaW1lCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykK
ICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljcykpIHsKICAgICAgICAgaWYgKCFkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVs
ZXRlV2Vic2l0ZURhdGEpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJh
Y2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAg
cHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZp
ZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5
cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKKyAgICAgICAg
ICAgIH0pOwogICAgICAgICB9CiAKICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5k
aW5nQ2FsbGJhY2soKTsKQEAgLTk5NCwxMiArOTkxLDEwIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0
IFZlCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAg
ICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2Ug
UHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICgh
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NB
Y2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKHRoaXMpOworICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5
cGU6Ok5vbmU6CkBAIC0xMDIxLDcgKzEwMTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
bW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRp
bmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkt
PmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBvcmln
aW5zLCBjb29raWVIb3N0TmFtZXMsIEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0cmFibGVEb21h
aW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRh
dGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJl
Z2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAg
ICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygp
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTExODAsMTggKzExNzUsMTIgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IGRhdGFUeXBlcywgY29uc3QgVmUKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNl
V29ya2VyVGltZW91dEZvclRlc3RpbmcoU2Vjb25kcyBzZWNvbmRzKQogewotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhzZWNv
bmRzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1l
b3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hU
aW1lb3V0Rm9yVGVzdGluZyhzZWNvbmRzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRT
ZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3Rpbmco
KQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRp
bWVvdXRGb3JUZXN0aW5nKCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNl
V29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNl
cnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwg
MCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMTIwMSw4
ICsxMTkwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmll
cyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQsIENvbXBsZXQKIAogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRNYXhTdGF0
aXN0aWNzRW50cmllcyhtX3Nlc3Npb25JRCwgbWF4aW11bUVudHJ5Q291bnQsIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4
U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5l
RW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTIxMSw4ICsxMTk5LDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0
Q291bnQsIENvbXBsZXRpb24KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1f
c2Vzc2lvbklELCBwcnVuZVRhcmdldENvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rvd25Ubyht
X3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25k
cyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xMjIxLDggKzEyMDgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0
aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPAogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LnNldEdyYW5kZmF0aGVyaW5nVGltZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFu
ZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVu
RGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTIzMSwyMCArMTIxNywxMyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChT
ZWNvbmRzIHNlY29uZHMsCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bv
b2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2Vl
bkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KICAgICAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNl
TG9hZFN0YXRpc3RpY3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAg
ICAgICAgIHByb2Nlc3MtPmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
KG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sIGlzUHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTEyNTYsMTIgKzEyMzUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50
UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUHJldmFsZW50UmVzb3VyY2UobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzUHJldmFsZW50KT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTEyNzMsMTIgKzEyNDcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChibwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzR3JhbmRm
YXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTI5Miw4ICsxMjYxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm8K
ICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVu
c3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3Vy
Y2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJl
dmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzMDcsMTAgKzEyNzUsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNWZXJ5UHJldmFsZW50KT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzMjIsMTIgKzEyODcsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNz
LT5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM0MSwxMCArMTMw
MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFZlcnlQcmV2
YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2V0VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzNTMsOCArMTMxMCw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVj
b3Jkc1JlbW92YWwoYm9vbCB2CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRT
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25J
RCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3ViRnJh
bWVVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzNjgsMjIgKzEzMjQsMTQgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJG
cmFtZVVSTCwgY28KIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1
YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpp
c1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3Qg
VVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAg
IHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBV
UkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzk3LDIzICsxMzQ1LDE0IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlu
KGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbiht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNv
bnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVk
QXNTdWJyZXNvdXJjZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJh
bWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRp
cmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTE0MjcsMTAgKzEzNjYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLAogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRp
cmVjdGVkVG8gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3Qg
VVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTQ0MiwxMiArMTM3OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJj
ZVVSCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9t
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJM
IH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3Rl
ZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
NDU5LDEyICsxMzkwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJv
Y2Vzcy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29u
c3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ3NiwyNSArMTQwMiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVV
UkwsIGNvbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJv
bShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFtwcm9j
ZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdU
byhjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRU
bywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5p
c1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVy
KGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdU
byhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVk
RnJvbSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTUwNiw2MCArMTQyMSw0MSBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFyUHJldmFsZW50UmVzb3Vy
Y2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9j
ZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmNsZWFyUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Np
b25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkucmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lv
bklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c3VibWl0VGVsZW1ldHJ5KCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgcHJvY2Vzcy0+c3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Np
b25JRCwgW10geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50KFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIFNob3VsZEdyYW5k
ZmF0aGVyU3RhdGlzdGljcyBzaG91bGRHcmFuZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CiAgICAgCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVk
U2luY2UsIHNob3VsZEdyYW5kZmF0aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZh
dGhlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFy
dHlEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogCi0gICAgc3RydWN0IENhbGxiYWNrQWdncmVnYXRvciA6IFJlZkNvdW50ZWQ8
Q2FsbGJhY2tBZ2dyZWdhdG9yPiB7Ci0gICAgICAgIENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRo
aXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICBzdHJ1Y3QgTG9jYWxD
YWxsYmFja0FnZ3JlZ2F0b3IgOiBSZWZDb3VudGVkPExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yPiB7
CisgICAgICAgIExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICAgICAgOiBtX2NvbXBsZXRpb25IYW5kbGVy
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgICAgICB9OwogCi0gICAgICAgIH5DYWxsYmFja0Fn
Z3JlZ2F0b3IoKQorICAgICAgICB+TG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IoKQogICAgICAgICB7
CiAgICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC0xNTc0LDM4ICsx
NDcwLDMxIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFTdW1tYXJ5KENvbXBsZXRpb25IYW5kbGVyPHZvCiAgICAgICAgIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0
eURhdGE+JiYpPiBtX2NvbXBsZXRpb25IYW5kbGVyOwogICAgICAgICBWZWN0b3I8V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4gbV9yZXN1bHRzOwogICAgIH07
Ci0KLSAgICBSZWZQdHI8Q2FsbGJhY2tBZ2dyZWdhdG9yPiBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBh
ZG9wdFJlZihuZXcgQ2FsbGJhY2tBZ2dyZWdhdG9yKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUlt
bWVkaWF0ZWx5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHByb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKS5nZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1h
cnkobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXShWZWN0b3I8
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7
Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRSZXN1bHQoV1RGTW92ZShk
YXRhKSk7Ci0gICAgICAgICAgICB9KTsKKyAgICAKKyAgICBhdXRvIGxvY2FsQ2FsbGJhY2tBZ2dy
ZWdhdG9yID0gYWRvcHRSZWYobmV3IExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKSk7CisgICAgCisgICAgYXV0byB3dGZDYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBXVEY6OkNhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyksIGxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgIG5ldHdv
cmtQcm9jZXNzKCkuZ2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lv
bklELCBbbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3JdKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmIGRhdGEpIHsKKyAgICAgICAgICAgIGxvY2Fs
Q2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRSZXN1bHQoV1RGTW92ZShkYXRhKSk7CiAgICAgICAgIH0p
OwotICAgIH0KKyAgICB9KTsKKyAgICAKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2Vu
ZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoW3d0ZkNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50KFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyBzaG91bGRHcmFu
ZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnQobV9zZXNzaW9uSUQsIHsgfSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIHsgfSwgc2hv
dWxkR3JhbmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0
ZShtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZSht
X3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTYxNCwyNCAr
MTUwMywxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERh
dGFSZWNvcmRzUHJvY2Vzc2luZyhDb21wbGV0aW9uSGFuZAogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVTdGF0aXN0aWNzQW5k
RGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZVN0
YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3RhdGlzdGljc0Rh
dGFiYXNlSGFzQWxsVGFibGVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAg
ICBwcm9jZXNzLT5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldExh
c3RTZWVuKGNvbnN0IFVSTCYgdXJsLCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2NDMsMjIgKzE1MjEsMTQgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBz
ZWNvbmRzLCBDb21wbGV0aW9uSGEKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zZXRMYXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TGFzdFNlZW4obV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZG9tYWlu
SURFeGlzdHNJbkRhdGFiYXNlKGludCBkb21haW5JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
b29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
IHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Np
b25JRCwgZG9tYWluSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZG9tYWluSURF
eGlzdHNJbkRhdGFiYXNlKG1fc2Vzc2lvbklELCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9y
VGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDEsIGNvbnN0IFVS
TCYgdG9wRnJhbWVVcmwyLCBTZWNvbmRzIGxhc3RTZWVuLCBib29sIGhhZFVzZXJJbnRlcmFjdGlv
biwgU2Vjb25kcyBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBib29sIGlzR3JhbmRmYXRoZXJl
ZCwgYm9vbCBpc1ByZXZhbGVudCwgYm9vbCBpc1ZlcnlQcmV2YWxlbnQsIHVuc2lnbmVkIGRhdGFS
ZWNvcmRzUmVtb3ZlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTY3MCwxMCArMTU0MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VT
dGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHRvcEZyCiAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+bWVyZ2VTdGF0aXN0
aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlcklu
dGVyYWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlz
UHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkubWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1l
VXJsMSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0
U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBpc0dy
YW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVt
b3ZlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9v
bCBoYWRVc2VySW50ZXJhY3Rpb24sIGJvb2wgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbCwgYm9vbCBpc1ByZXZhbGVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTY4NSwxOCArMTU1MiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBi
b29sIGhhZAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
Pmluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGlzUHJldmFsZW50LCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pbnNl
cnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRh
UmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJl
Y29yZHNXZXJlU2Nhbm5lZChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Tm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5n
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcwNCw4ICsxNTY3LDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChi
b29sIHZhbHVlLCBDb21wbGUKICAgICB1c2VFeHBsaWNpdElUUFN0YXRlKCk7CiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KS5zZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFs
dWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9u
SUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZp
ZXIgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlu
cyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzE2LDcgKzE1NzgsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50
aWZpZXIgcGFnZUlELAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgd2ViUGFnZS0+cHJv
Y2VzcygpLnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5nZXRBbGxTdG9yYWdl
QWNjZXNzRW50cmllcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9u
SUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogCkBAIC0xNzI0LDggKzE1ODYs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24o
U2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkK
LSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0VGltZVRvTGl2
ZVVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rp
b24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzM5
LDEwICsxNjAwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24o
Y29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQKICAgICAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+bG9nVXNlckludGVyYWN0aW9uKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmxvZ1VzZXJJbnRl
cmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpo
YXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzU0LDEzICsxNjEyLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAg
ICAgcHJvY2Vzcy0+aGFzSGFkVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRs
ZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzSGFkVXNlckludGVyYWN0aW9uKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlv
bnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UoY29uc3QgVVJMJiBzdWJVcmwsIGNvbnN0IFVSTCYgdG9w
VXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTc3MiwxMyArMTYyNCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNo
aXBPbmx5SW5EYXRhYmFzZU9uY2UoY29uc3QgVVJMJiBzdWJVcmwsIGNvbnN0CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVsYXRpb25zaGlwT25seUlu
RGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1
YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNS
ZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9w
VXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc5MiwxMCArMTYzOCw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyVXNlckludGVyYWN0aW9uKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0
aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODA5LDEwICsxNjUyLDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBi
b29sIGlzR3JhbmRmYXRoZXJlZCwgQ28KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldEdyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFu
ZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBpc0dyYW5kZmF0aGVyZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgyMSwxMCArMTY2MSw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRVc2VJVFBEYXRhYmFzZShtX3Nlc3Npb25J
RCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0
ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZnJvbVVSTCwgY29u
c3QgVVJMJiB0b1VSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTgzMyw2MiArMTY3MCwzOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENy
b3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZgogICAg
IAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0
Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0Rl
Y29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0
Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDcm9zc1Np
dGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDcm9z
c1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGVsZXRl
Q29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaW5jbHVkZUh0dHBPbmx5Q29v
a2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5kZWxldGVDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVDb29r
aWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0xvY2Fs
U3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmhhc0xvY2FsU3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNv
bnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzSXNvbGF0ZWRTZXNzaW9u
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCku
aGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVy
cmVyRm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJG
b3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVu
YWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09D
T0EpCkBAIC0xOTE5LDEwICsxNzMyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGly
ZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWUKICAgICAg
ICAgICAgIHdlYlByb2Nlc3Muc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShibG9ja2lu
Z01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9u
SUQsIGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lv
bklELCBibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2Ft
ZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTMwLDEwICsxNzQwLDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxk
RW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2UKICAgICBhdXRvIGZsYWcgPSBlbmFibGVkID8gV2Vi
Q29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6OlllcyA6IFdlYkNvcmU6OlNh
bWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKIAogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRTaG91bGRFbmJsZVNh
bWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNo
b3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IGZsYWcsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92
YWxNb2RlRm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NDEsMjAgKzE3NDgsMTQgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGUKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBhdXRvIG1vZGUg
PSBlbmFibGVkID8gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFs
bEJ1dENvb2tpZXMgOiBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6
Tm9uZTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRGaXJzdFBhcnR5V2Vic2l0
ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcoY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5zZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9TYW1lU2l0ZVN0cmlj
dENvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9t
YWluRm9yVGVzdGluZyhjb25zdCBVUkwmIGZpcnN0UGFydHlVUkwsIGNvbnN0IFVSTCYgY25hbWVV
UkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5
NjYsOCArMTc2Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0CiAKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Rmly
c3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZpcnN0UGFydHlV
UkwuaG9zdCgpLnRvU3RyaW5nKCksIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVV
UkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJzdFBh
cnR5VVJMLmhvc3QoKS50b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNu
YW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZv
clRlc3RpbmcoY29uc3QgVVJMJiBjbmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk3OSwxOCArMTc3OSwxMyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5G
b3JUZXN0aW5nKAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3Rpbmco
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFy
dHlDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRp
ZiAvLyBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnN5bmNMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTeW5jTG9jYWxTdG9yYWdlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQ
cmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTk4LDggKzE3OTMsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29u
ZHMgc2Vjb25kcywgQwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25J
RCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBz
ZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0oc2Vjb25kcyk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTIwMDksMjYgKzE4MDMs
MTIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVu
dFJlc291cmNlcyhTZWNvbmRzIHNlY29uZHMsIEMKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVz
ZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291
cmNlcyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5yZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2Vz
KG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAjZWxzZQogICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7CiAjZW5kaWYKIH0KIAotYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpp
c0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpIGNvbnN0
Ci17Ci0gICAgaWYgKGF1dG8qIHByb2Nlc3NQb29sRGF0YVN0b3JlID0gcHJvY2Vzc1Bvb2wud2Vi
c2l0ZURhdGFTdG9yZSgpKQotICAgICAgICByZXR1cm4gcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPT0g
dGhpczsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb2Nlc3NQb29sLm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIHJldHVybiBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5oYXNT
ZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIEhhc2hTZXQ8UmVm
UHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVf
dCBsaW1pdCkgY29uc3QKIHsKICAgICBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IHBy
b2Nlc3NQb29sczsKQEAgLTIwNDMsOSArMTgyMyw2IEBAIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nl
c3NQb29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29u
CiAgICAgaWYgKHByb2Nlc3NQb29scy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYg
d2UncmUgb25lIG9mIHRoZSBsZWdhY3kgZGF0YSBzdG9yZXMuCiAgICAgICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgICAgIGlmICghaXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woKnByb2Nlc3NQb29sKSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLQogICAgICAgICAgICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9j
ZXNzUG9vbCk7CiAgICAgICAgICAgICBpZiAocHJvY2Vzc1Bvb2xzLnNpemUoKSA9PSBsaW1pdCkK
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIwODQsOCArMTg2MSw3IEBAIHN0YXRpYyBTdHJp
bmcgY29tcHV0ZU1lZGlhS2V5RmlsZShjb25zdCBTdHJpbmcmIG1lZGlhS2V5RGlyZWN0b3J5KQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9y
SG9zdChjb25zdCBXZWJDZXJ0aWZpY2F0ZUluZm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcm
IGhvc3QpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNl
cnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0Nl
cnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAw
KTsKIH0KIAogVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gV2Vic2l0ZURhdGFT
dG9yZTo6bWVkaWFLZXlPcmlnaW5zKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVj
dG9yeSkKQEAgLTIxNDAsNiArMTkxNiwzMCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92
ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksCiAgICAg
fQogfQogCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkK
K3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOworICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxs
cHRyOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcmVwYXJlVG9TdXNwZW5k
KElzU3VzcGVuc2lvbkltbWluZW50OjpObywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwor
fQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5k
SW1taW5lbnRseUZvclRlc3RpbmcoKQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByb2Nl
c3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7Cit9CisKK3ZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkKK3sKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7Cit9CisKIGJvb2wgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSBjb25zdAogewogI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMTY5LDE3ICsxOTY5LDE1IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFi
bGVkKQogICAgICAgICAKICAgICAgICAgcmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsK
ICAgICAgICAgCi0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
bV9zZXNzaW9uSUQsIHRydWUpKTsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9z
ZXNzaW9uSUQsIHRydWUpLCAwKTsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKQogICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3Nl
c0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKHRydWUpLCBtX3Nlc3Npb25JRCk7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Np
b25JRCwgZmFsc2UpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwg
ZmFsc2UpLCAwKTsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
CiAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChmYWxzZSks
IG1fc2Vzc2lvbklEKTsKLSAgICB9CiAKICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkID0gZmFsc2U7CiAjZWxzZQpAQCAtMjE5MSw4ICsxOTg5LDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soRnVuY3Rp
b248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjYWxsYmFjaykKIHsKICAgICBpZiAoY2FsbGJhY2sp
IHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAg
ICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCh0
cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQodHJ1ZSksIDAp
OwogICAgIH0KICAgICAKICAgICBtX3N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKTsKQEAgLTIyMTEsOCArMjAwOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sIGVuYWJsZWQsIENvbXBsZXRp
CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVO
ZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNz
aW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKG1fc2Vzc2lvbklELCBl
bmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0oZW5hYmxlZCk7CiAgICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIy
MjcsMjAgKzIwMjMsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NFcGhlbWVyYWwoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmlzUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCisgICAg
bmV0d29ya1Byb2Nlc3MoKS5pc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNz
aW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyNlbHNlCiAgICAgY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UpOworI2VuZGlmCiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFi
bGVkKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZShlbmFibGVkKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBA
IC0yMjYyLDQ4ICsyMDUzLDE5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzSW5XZWJQcm9jZXNzZXMoQ29tcGxldGlvbkhhbmRsCiB9CiAjZW5kaWYK
IAotVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gV2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tp
ZXMoKSBjb25zdAotewotICAgIHJldHVybiBjb3B5VG9WZWN0b3IobV9wZW5kaW5nQ29va2llcyk7
Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJD
b3JlOjpDb29raWUmIGNvb2tpZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZUlmKFsm
Y29va2llXShhdXRvJiBwZW5kaW5nQ29va2llKSB7Ci0gICAgICAgIHJldHVybiBwZW5kaW5nQ29v
a2llLmlzS2V5RXF1YWwoY29va2llKTsKLSAgICB9KTsKLSAgICBtX3BlbmRpbmdDb29raWVzLmFk
ZChjb29raWUpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29r
aWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2ll
cy5yZW1vdmUoY29va2llKTsKLX0KLSAgICAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQ
ZW5kaW5nQ29va2llcygpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5jbGVhcigpOwotfQotCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZsdXNoQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQ
b29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+Zmx1c2hDb29raWVzKHNlc3Npb25JRCgpLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29r
aWVzKHNlc3Npb25JRCgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQo
Ym9vbCBhbGxvd3MpCiB7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bv
b2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldDo6UmVwbHkoKSwgMCk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChhbGxvd3MpLCBNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29j
a2V0OjpSZXBseSgpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckNhY2hl
ZENyZWRlbnRpYWxzKCkKIHsKLSAgICBmb3IgKGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5jbGVhckNhY2hl
ZENyZWRlbnRpYWxzKHNlc3Npb25JRCgpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCgp
KSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0
aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKQEAgLTIzMjksOCArMjA5MSw2IEBAIFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMoKQogCiAgICAgcmVz
b2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsKIAotICAgIHBhcmFtZXRlcnMucGVuZGluZ0Nv
b2tpZXMgPSBwZW5kaW5nQ29va2llcygpOwotCiAgICAgYXV0byByZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5KCk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHJlc291cmNlTG9hZFN0YXRp
c3RpY3NEaXJlY3RvcnlIYW5kbGU7CiAgICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5LmlzRW1wdHkoKSkKQEAgLTI0MzUsNyArMjE5NSwxMCBAQCBXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKICAgICBwYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5lbmFibGVkID0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDsKICNlbmRpZgogICAg
IHBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMocGFyYW1ldGVycyk7Ci0KKyNpZiBQTEFURk9S
TShDT0NPQSkKKyAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNS
ZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9z
c1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKKyNlbmRpZgorICAgIAogICAgIHJldHVybiBw
YXJhbWV0ZXJzOwogfQogCkBAIC0yNDY1LDEwICsyMjI4LDYgQEAgQVBJOjpIVFRQQ29va2llU3Rv
cmUmIFdlYnNpdGVEYXRhU3RvcmU6OmNvb2tpZVN0b3JlKCkKICAgICByZXR1cm4gKm1fY29va2ll
U3RvcmU7CiB9CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nl
c3MoKQotewotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFp
bHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmln
aW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIWlzUGVyc2lz
dGVudCgpKSB7CkBAIC0yNDc2LDIzICsyMjM1LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VE
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
ZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKHRoaXMpLmdldExvY2FsU3RvcmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWls
cykgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7Ci0g
ICAgICAgIH0pOwotICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBmZXRjaGluZyBmcm9tIG11bHRp
cGxlIHBvb2xzLgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUKCFjb21wbGV0aW9u
SGFuZGxlcik7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1f
c2Vzc2lvbklELCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oYXV0byYmIGRldGFpbHMpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShk
ZXRhaWxzKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90
YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFF1b3RhKG1fc2Vz
c2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnJlc2V0UXVvdGEobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0yNTE4LDcgKzIyNjksMTIgQEAgYm9vbCBX
ZWJzaXRlRGF0YVN0b3JlOjpodHRwM0VuYWJsZWQoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0K
LSNlbmRpZgorCitib29sIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
I2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkKIAogI2lmICFVU0UoR0xJQikKIFdURjo6U3RyaW5n
IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3Rv
cnkoKQpAQCAtMjUzMCwzNSArMjI4NiwxOCBAQCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkKIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFVSTCYmIG9sZE5hbWUsIFVS
TCYmIG5ld05hbWUsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp0aGlzKTsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5yZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1l
LCBkYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgICAgIH0KLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lv
bklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6aGFzQXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+aGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29t
cGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzQXBwQm91bmRT
ZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJBcHBCb3VuZFNlc3Npb24oQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmNsZWFyQXBwQm91bmRTZXNz
aW9uKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhckFwcEJvdW5kU2Vzc2lvbihtX3Nlc3Np
b25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjU4MCw3ICsyMzE5LDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZklu
aXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGUKIAogICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlu
cyhnbG9iYWxEZWZhdWx0RGF0YVN0b3JlKCkuZ2V0KCksICphcHBCb3VuZERvbWFpbnMpOwogCi0g
ICAgZm9yIChhdXRvKiBzdG9yZSA6IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkudmFsdWVzKCkpCisg
ICAgZm9yIChhdXRvKiBzdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKICAgICAgICAg
cHJvcGFnYXRlQXBwQm91bmREb21haW5zKHN0b3JlLCAqYXBwQm91bmREb21haW5zKTsKIH0KIApA
QCAtMjU4OCwxMCArMjMyNyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmRE
b21haW5zRm9ySVRQKGNvbnN0IEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFiCiB7CiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0
QXBwQm91bmREb21haW5zRm9yUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgZG9t
YWlucywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lv
bklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogI2VuZGlmCiAKQEAg
LTI1OTksMTYgKzIzMzUsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1cGRhdGVCdW5kbGVJ
ZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25zdCBTdHJpbmcmIGJ1bmQKIHsKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
dXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihi
dW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5j
bGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXggMGRjOTFmMjNjNDE1NDM5NWM4ZWJmODkwZjM1
YmQwMTgwY2Q1MWFhZC4uODQ3ZWVjZTAzZWZhMTUyMzM1MWM2YmFhY2YxM2IwODI2N2U2NWJmZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuaApAQCAtNzUsNiArNzUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNz
IEF1dGhlbnRpY2F0b3JNYW5hZ2VyOwogY2xhc3MgU2VjS2V5UHJveHlTdG9yZTsKIGNsYXNzIERl
dmljZUlkSGFzaFNhbHRTdG9yYWdlOworY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94eTsKIGNsYXNz
IFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOwogY2xhc3MgV2ViQ2VydGlmaWNhdGVJbmZvOwog
Y2xhc3MgV2ViUGFnZVByb3h5OwpAQCAtMTA5LDcgKzExMCwxMiBAQCBwdWJsaWM6CiAgICAgV2Vi
c2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYsIFBBTDo6
U2Vzc2lvbklEKTsKICAgICB+V2Vic2l0ZURhdGFTdG9yZSgpOwogCi0gICAgc3RhdGljIFdlYnNp
dGVEYXRhU3RvcmUqIGV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6
OlNlc3Npb25JRCk7CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoRnVu
Y3Rpb248dm9pZChXZWJzaXRlRGF0YVN0b3JlJik+JiYpOworICAgIAorICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKCkgY29uc3Q7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eSYgbmV0d29ya1Byb2Nlc3MoKTsKKworICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlz
dGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlz
UGVyc2lzdGVudCgpIGNvbnN0IHsgcmV0dXJuICFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9
CiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9u
SUQ7IH0KQEAgLTExOSw2ICsxMjUsMTEgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IFdlYWtI
YXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIHByb2Nlc3NlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
Y2Vzc2VzOyB9CiAKKyAgICB2b2lkIHRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgdm9p
ZCBzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lKCk7CisKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sKTsKICAg
ICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoKSBjb25zdDsKQEAgLTIzNSwx
NSArMjQ2LDggQEAgcHVibGljOgogCiAgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UmIGRldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4gbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5n
ZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFn
ZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nl
c3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBwYXJhbWV0
ZXJzKCk7CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5kaW5nQ29va2llcygpIGNv
bnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsK
LSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0g
ICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVzKCk7CiAgICAgdm9pZCBmbHVzaENvb2tpZXMoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMoKTsKIApAQCAtMjUxLDYgKzI1NSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpc3BhdGNo
T25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYpOwogCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAg
dm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vzcyh4cGNfb2JqZWN0
X3QgZW5kcG9pbnRNZXNzYWdlKTsKKyNlbmRpZgorCiAjaWYgVVNFKENVUkwpCiAgICAgdm9pZCBz
ZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5ncyYmKTsKICAg
ICBjb25zdCBXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5ncyYgbmV0d29ya1Byb3h5U2V0dGluZ3Mo
KSBjb25zdCB7IHJldHVybiBtX3Byb3h5U2V0dGluZ3M7IH0KQEAgLTI3Miw4ICsyODAsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uKFdl
YkNvcmU6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24mJik7CiAjZW5kaWYKIAot
ICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKLQogICAgIGNvbnN0IFdlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKCkgeyByZXR1cm4gbV9jb25maWd1
cmF0aW9uLmdldCgpOyB9CiAKICAgICBXZWJzaXRlRGF0YVN0b3JlQ2xpZW50JiBjbGllbnQoKSB7
IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQpAQCAtMjgzLDYgKzI4OSw4IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgcmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiwgVVJMJiYsIE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAg
Ym9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcm
KTsKKwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgV2ViRGV2aWNlT3JpZW50
YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyJiBkZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlv
bkFjY2Vzc0NvbnRyb2xsZXIoKSB7IHJldHVybiBtX2RldmljZU9yaWVudGF0aW9uQW5kTW90aW9u
QWNjZXNzQ29udHJvbGxlcjsgfQogI2VuZGlmCkBAIC0zNTksNyArMzY3LDcgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNT
dG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKTsKICAgICBzdGF0aWMgdm9p
ZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5
LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mKTsKIAotICAgIHZv
aWQgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICB2b2lkIHJlZ2lzdGVyV2l0
aFNlc3Npb25JRE1hcCgpOwogCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKQogICAgIHN0
YXRpYyBPcHRpb25hbDxIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPj4gYXBwQm91
bmREb21haW5zSWZJbml0aWFsaXplZCgpOwpAQCAtMzk3LDggKzQwNSw2IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgeyB0cnVlIH07CiAj
ZW5kaWYKIAotICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29va2llPiBtX3BlbmRpbmdDb29raWVzOwot
ICAgIAogICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4gbV9wcm9jZXNzZXM7CiAKICAg
ICBib29sIG1faXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQgeyBmYWxzZSB9OwpAQCAtNDE5LDYgKzQy
NSw3IEBAIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPFdlYnNpdGVEYXRhU3RvcmVDbGllbnQ+IG1f
Y2xpZW50OwogCiAgICAgUmVmUHRyPEFQSTo6SFRUUENvb2tpZVN0b3JlPiBtX2Nvb2tpZVN0b3Jl
OworICAgIFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwogCiAj
aWYgSEFWRShBUFBfU1NPKQogICAgIFVuaXF1ZVJlZjxTT0F1dGhvcml6YXRpb25Db29yZGluYXRv
cj4gbV9zb0F1dGhvcml6YXRpb25Db29yZGluYXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3Jl
Q3VybC5jcHAKaW5kZXggMGUwYzA2ZTFkZWQ0MmMxNGI4MDJlMTU4OWYzMWRjNjI5ODJhYzM5My4u
NjRiNmM3NGQwODZlYzQ1YmI2MmRhNmVlMDgyMjNiMjhkYjczYTU3YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3Vy
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJz
aXRlRGF0YVN0b3JlQ3VybC5jcHAKQEAgLTQyLDggKzQyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5ncyYm
IHByb3gKIHsKICAgICBtX3Byb3h5U2V0dGluZ3MgPSBXVEZNb3ZlKHByb3h5U2V0dGluZ3MpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX3Nlc3Npb25JRCwgbV9wcm94eVNldHRpbmdz
KSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9zZXNzaW9uSUQsIG1fcHJveHlTZXR0aW5ncyksIDAp
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCmluZGV4IDEyZjljZDgx
OWI2ZGNjYThhYzUwOTJhMzBkZDkzYzUzYjhlZTkzNDIuLjZmOTYzZjE0MjEwMDQ3NThlMmQ2NWVk
OTYyNmUyYTQ5YTNmNGY5MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCkBA
IC0zOSw4ICszOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3b3Jr
UGFyYW1ldGVycyhXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYKICAgICBhdXRvJiBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsK
ICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdl
RW5hYmxlZCA9IG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZDsKIAotICAgIGlm
IChhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlv
bnMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclBy
b3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5jb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9zZXNz
aW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBh
dGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQoYm9vbCBlbmFibGVkKQpAQCAtNTIsOCArNTEsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoYm9vbCBlbmFi
bGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFn
ZUVuYWJsZWQgPSBlbmFibGVkOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5h
YmxlZChtX3Nlc3Npb25JRCwgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChtX3Nlc3Npb25JRCwgbV9wZXJzaXN0
ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKSwgMCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNz
UHJveHlHTGliLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1By
b3h5R0xpYi5jcHAKaW5kZXggMGE4NGE3NTkwZDlhOTg1YmZjOTk2ODRhNDg5NTEzNzRlNWIyOTQy
OS4uMjdmMjNlYTA2NWRjNzVjZTRhODI3MGM1NzZlYTJhYTU1YWIwZGM4ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCkBA
IC00NCw3ICs0NCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9w
dGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsCiAgICAgICAgIGlmICghZGF0
YVN0b3JlKSB7CiAgICAgICAgICAgICAvLyBQcmV3YXJtZWQgcHJvY2Vzc2VzIGRvbid0IGhhdmUg
YSBXZWJzaXRlRGF0YVN0b3JlIHlldCwgc28gdXNlIHRoZSBwcmltYXJ5IFdlYnNpdGVEYXRhU3Rv
cmUgZnJvbSB0aGUgV2ViUHJvY2Vzc1Bvb2wuCiAgICAgICAgICAgICAvLyBUaGUgcHJvY2VzcyB3
b24ndCBiZSB1c2VkIGlmIGN1cnJlbnQgV2Vic2l0ZURhdGFTdG9yZSBpcyBkaWZmZXJlbnQgdGhh
biB0aGUgV2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBvbmUuCi0gICAgICAgICAgICBkYXRhU3RvcmUg
PSBtX3Byb2Nlc3NQb29sLT53ZWJzaXRlRGF0YVN0b3JlKCk7CisgICAgICAgICAgICBkYXRhU3Rv
cmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7CiAgICAgICAg
IH0KIAogICAgICAgICBBU1NFUlQoZGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCmluZGV4
IDlmN2JlM2M5NDFiNmNkMGExYjk0Y2IxMzYwOThmM2EwNDFjZWZmOTkuLmFjMDRlMzhhNTdiMjE1
OWJlYjQyZjM4NDc5YjQ0ZjVlMjZkZWRiYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcApAQCAtMjYs
NiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFn
ZXJQcm94eS5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUg
IldlYkNvb2tpZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgi
CiAKQEAgLTMzLDggKzM0LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50
U3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUpCiB7Ci0gICAgbV9jb29raWVQZXJzaXN0ZW50U3RvcmFn
ZU1hcC5zZXQoc2Vzc2lvbklELCBzdGQ6Om1ha2VfcGFpcihzdG9yYWdlUGF0aCwgc3RvcmFnZVR5
cGUpKTsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklE
LCBzdG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
KyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBzdG9yYWdlUGF0aCwgc3Rv
cmFnZVR5cGUpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tp
ZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nJiBzdG9y
YWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSYgc3RvcmFnZVR5cGUpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQ
b29sU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29s
U291cC5jcHAKaW5kZXggYmZiYmY5NjY0ZTQ4MzUzMDk3MDk3MTFkZmQ2YzEzNDE1NzMyYmRhYy4u
N2ZlNGFjYTBjNWQyZDBlN2ZjMGQ5ZDVhNGZhMjdlYmNjODBhNjc1ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcApAQCAtMzcs
MzAgKzM3LDI0IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycyYgcGFyYW1ldGVycykKIHsKLSAgICBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1l
dGVycyYgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgc3VwcGxlbWVudDxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKGRlZmF1
bHRTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5j
b29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5jb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOwotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0g
ICAgICAgIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3Jh
Z2VFbmFibGVkID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3Jh
Z2VFbmFibGVkKCk7CisgICAgLy8gRklYTUU6IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgorICAgIC8vIEZJWE1F
OiBtX2lnbm9yZVRMU0Vycm9ycyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3Rv
cmUgb3IgcmVtb3ZlZC4KKyAgICAvLyBGSVhNRTogbV9uZXR3b3JrUHJveHlTZXR0aW5ncyBzaG91
bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCiAKLSAgICBwYXJhbWV0ZXJzLmNv
b2tpZUFjY2VwdFBvbGljeSA9IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3k7Ci0gICAg
cGFyYW1ldGVycy5pZ25vcmVUTFNFcnJvcnMgPSBtX2lnbm9yZVRMU0Vycm9yczsKICAgICBwYXJh
bWV0ZXJzLmxhbmd1YWdlcyA9IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKTsKLSAgICBwYXJhbWV0
ZXJzLnByb3h5U2V0dGluZ3MgPSBtX25ldHdvcmtQcm94eVNldHRpbmdzOwogICAgIHBhcmFtZXRl
cnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSB0cnVlOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMpCiB7CisgICAgLy8g
RklYTUU6IE1vdmUgdGhpcyB0byBXZWJzaXRlRGF0YVN0b3JlLgogICAgIG1faWdub3JlVExTRXJy
b3JzID0gaWdub3JlVExTRXJyb3JzOwotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0SWdu
b3JlVExTRXJyb3JzKG1faWdub3JlVExTRXJyb3JzKSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKGNvbnN0IFdlYkNvcmU6OlNvdXBOZXR3b3Jr
UHJveHlTZXR0aW5ncyYgc2V0dGluZ3MpCiB7CisgICAgLy8gRklYTUU6IE1vdmUgdGhpcyB0byBX
ZWJzaXRlRGF0YVN0b3JlLgogICAgIG1fbmV0d29ya1Byb3h5U2V0dGluZ3MgPSBzZXR0aW5nczsK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fbmV0
d29ya1Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDk4YjM2Y2M3YWQ3NTFhYmExMzA5Nzc3MzI4NDY5
YTA2NGIxYzFhZWQuLmZjMzljMGU5NzNhYTM1ZDhmYWMwZjA1MTAwMGZlNjkyOWE4ZTc0MmEgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw2MCBAQAorMjAyMC0wOS0yMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgorCisgICAgICAgIE1vdmUgTmV0d29ya1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgZnJv
bSBXZWJQcm9jZXNzUG9vbCB0byBXZWJzaXRlRGF0YVN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYwNDEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW06CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0Rvd25sb2FkLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZG93bmxvYWRBdFJh
dGUpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2tw
b2ludFdBTC5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW06CisgICAgICAgIChURVNUKToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRv
VjIubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tOgorICAgICAgICAoVEVT
VCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJE
YXRhYmFzZVByb2Nlc3NLaWxsLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbToKKyAgICAgICAg
KHJ1blRlc3QpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW06CisgICAgICAgIChURVNUKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNp
c3RlbmNlLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbToKKyAgICAgICAgKFRF
U1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERC
VGVtcEZpbGVTaXplLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbToKKyAgICAgICAg
KFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29y
a1Byb2Nlc3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3Jl
Lm1tOgorICAgICAgICAoY2hlY2tSZWNvdmVyeUFmdGVyQ3Jhc2gpOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW06Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW06CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbToKKyAgICAgICAgKC1b
Q2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3ZWJWaWV3OnJ1bkphdmFTY3JpcHRBbGVydFBh
bmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAg
ICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0pOgor
ICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0p
OgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW06CisgICAgICAgIChURVNUKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0
b21QYXRocy5tbToKKyAgICAgICAgKHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocyk6Cisg
ICAgICAgIChURVNUKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3Rl
bnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlTmV0d29y
a1Byb2Nlc3MpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RD
b250ZXh0KToKKwogMjAyMC0wOS0yMSAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFw
cGxlLmNvbT4KIAogICAgICAgICBBbGxvdyBhYm91dDpibGFuayBzdWJmcmFtZSBsb2FkcyBmb3Ig
bm9uIGFwcC1ib3VuZCB0b3AgZnJhbWVzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdp
dGhQZW5kaW5nQ29ubmVjdGlvbi5tbQppbmRleCA5NzM4OWYwMWZmMmVlOTliNzgzYjBiNTIxMDgw
NzRmMWE4MWI2OTgxLi4zM2Y0NTRjNWNkNTliNDhhNzY5OGFhYjU2ZTYxMWNmNmYwOWM5ZjRmIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vz
c0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0K
QEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NHcm91cFByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3Rv
cmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CiAKQEAgLTE0Niw4ICsxNDcsOCBAQCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nl
c3NSZWxhdW5jaE9uTGF1bmNoRmFpbHVyZSkKIAogICAgIC8vIENvbnN0dWN0aW5nIGEgV2ViVmll
dyBzdGFydHMgYSBuZXR3b3JrIHByb2Nlc3Mgc28gdGVybWluYXRlIHRoaXMgb25lLiBUaGUgcGFn
ZSBsb2FkIGJlbG93IHdpbGwgdGhlbiByZXF1ZXN0IGEgbmV0d29yayBwcm9jZXNzIGFuZCB3ZQog
ICAgIC8vIG1ha2UgdGhpcyBuZXcgbmV0d29yayBwcm9jZXNzIGxhdW5jaCBjcmFzaCBvbiBzdGFy
dHVwLgotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIFtw
cm9jZXNzUG9vbCBfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nXTsK
KyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW01vbml0b3JXZWJD
b250ZW50Q3Jhc2hOYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKICAgICBbd2ViVmll
dyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbSBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0KaW5kZXggYjdlZDk5OTM5
ZmQ1OWYyMjhhN2U4YmQ3NDk3MTJmNTM2NjAxNTYxNi4uMTgxOTEzMWM5YTBmZWIzMGIxYTJmMGNm
Y2Q4N2JmMjA0NWViYjNmNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0Rvd25sb2FkLm1tCkBAIC04ODksOSArODg5LDkgQEAgdm9pZCBkb3dubG9hZEF0
UmF0ZShkb3VibGUgZGVzaXJlZEticHMsIHVuc2lnbmVkIHNwZWVkTXVsdGlwbGllciwgQXBwUmV0
dXJuc1RvRm8KICAgICByZWNlaXZlZERhdGEgPSBmYWxzZTsKICAgICBVdGlsOjpydW4oJnJlY2Vp
dmVkRGF0YSk7CiAgICAgLy8gU3RhcnQgdGhlIERvd25sb2FkTW9uaXRvcidzIHRpbWVyLgotICAg
IFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZDpZRVNdOworICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0
b3JlIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOllFU107CiAgICAgaWYgKHJldHVyblRvRm9y
ZWdyb3VuZCA9PSBBcHBSZXR1cm5zVG9Gb3JlZ3JvdW5kOjpZZXMpCi0gICAgICAgIFtbd2ViVmll
dyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpO
T107CisgICAgICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF9z
eW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOk5PXTsKICAgICBkaWRDYW5jZWwgPSBmYWxzZTsKICAg
ICBVdGlsOjpydW4oJmRpZENhbmNlbCk7CiAgICAgdGVybWluYXRlU2VydmVyID0gdHJ1ZTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2tw
b2ludFdBTC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hl
Y2twb2ludFdBTC5tbQppbmRleCA1Y2Q3YWJkYTAxZDE5NzQ3ZGNlZDQ1YWJlZTk5ZWNiMWMxNGQ2
MTYwLi5kNzdhNmZkOTg3OWU0M2Y3MDExZGRhZjkyYzNhNzk3ZjNmYzEzNzM0IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwu
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3Bv
aW50V0FMLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9v
bFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtODYsNyArODcs
NyBAQCBURVNUKEluZGV4ZWREQiwgQ2hlY2twb2ludHNXQUxBdXRvbWF0aWNhbGx5KQogICAgIFJl
dGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhb
W1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRp
b24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVy
LmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCku
cHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAg
ICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9u
OmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KaW5kZXggYzhhZjFk
MjQzYzRmZWI1OGFjOTg0ZGFmMTRkODE1MzFhN2NjM2M3My4uYmJmMWExNTIxNWRjMWZkMjhkZmRk
YjllMzQxYjY0ZjljMDA4ZjRjNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCkBAIC0zMCw2ICszMCw3
IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
S1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQg
PFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9f
V0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtNTcsNyArNTgsNyBAQCBURVNUKEluZGV4ZWREQiwgRGVs
ZXRlUmVjb3ZlcnkpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZp
Z3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0p
OwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1l
c3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBm
aWxlcyB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVu
ZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiSURCRGVsZXRlUmVjb3ZlcnkiIHdpdGhF
eHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNl
cyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJJbmRleFVwZ3JhZGVUb1YyLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tCmluZGV4IDk1Y2NhMGNlMjgxNmZmMWE2YTQ1NWFk
MGJkMmM4YTRhYTRmMjdmZWQuLjg4YTUzZjYxZDlkOTgyNjU3Yjk2NWVmOGE2Y2ViYTc5MWVmZjE3
NTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURC
SW5kZXhVcGdyYWRlVG9WMi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQg
PFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNv
bnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZp
Z3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1By
b2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNo
ZWV0Lmg+CkBAIC01OCw3ICs1OSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleFVwZ3JhZGVUb1Yy
KQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0g
YWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2Nv
bmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxl
cjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRp
b24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29u
ZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CiAKICAgICAvLyBDb3B5IHRoZSBpbmNvbnNpc3RlbnQgZGF0YWJhc2UgZmlsZXMgdG8gdGhl
IGRhdGFiYXNlIGRpcmVjdG9yeQogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVu
ZGxlXSBVUkxGb3JSZXNvdXJjZTpAIkluZGV4VXBncmFkZSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0
ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5m
b1VwZ3JhZGVUb1YyLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQppbmRleCBmZmE1YTc4NzhhNDczMmI4ZWMy
NDVjOTA1M2ZkMTdlZTU5NTZmYTNkLi40MDNlMGZmYTgyMTIzNDUxYzQ2NmZlZWNjMzI0ZjljNmU3
NjFkNDNkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KQEAg
LTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJL
aXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5o
PgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9y
dCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5k
ZXhlZERCLCBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMikKICAgICBSZXRhaW5QdHI8V0tX
ZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdD
b25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250
ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1l
OkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29s
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSBk
YXRhYmFzZSBmaWxlcyB3aXRoIG9sZCBPYmplY3RTdG9yZUluZm8gc2NoZW1hIHRvIHRoZSBkYXRh
YmFzZSBkaXJlY3RvcnkuCiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVd
IFVSTEZvclJlc291cmNlOkAiSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZSIgd2l0aEV4dGVuc2lv
bjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KaW5kZXggNjg3NDUyOWViYmYz
Nzg1MThkOTNlMGEwODIxZjYzMDEyY2ZhNmQ1Zi4uNzMwNzdlY2RmZDM2NWI1MjkwNTNkNDdjYmEy
YTE0ZWQwNTFlZDZlYSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5t
bQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2Vi
S2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC05Miw3ICs5Myw3IEBAIFRFU1QoSW5kZXhlZERC
LCBEYXRhYmFzZVByb2Nlc3NLaWxsKQogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgICAgIGlmICgha2lsbGVkREJQcm9jZXNzICYm
IG9wZW5SZXF1ZXN0VXBncmFkZU5lZWRlZCkgewogICAgICAgICAgICAga2lsbGVkREJQcm9jZXNz
ID0gdHJ1ZTsKLSAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgICAgICAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgICAgIH0K
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSW5kZXhlZERCRmlsZU5hbWUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCmluZGV4IDExZjg3ZjgwMzRkMmIxYjU1ZDcyMGRl
Yjc2NWEzMTY4MjEyMGQ3NzMuLmE5OGJmMzgyNWJiMWVkNmQ3NTljMDhkNDUzM2FkY2I3ZmYzOTVm
ZDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5k
ZXhlZERCRmlsZU5hbWUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbQpAQCAtNDksNyArNDksNyBAQCBzdGF0aWMgUmV0YWlu
UHRyPFdLU2NyaXB0TWVzc2FnZT4gbGFzdFNjcmlwdE1lc3NhZ2U7CiAKIEBlbmQKIAotc3RhdGlj
IHZvaWQgcnVuVGVzdCgpCitzdGF0aWMgdm9pZCBydW5UZXN0KGJvb2wgb2xkRmlsZVNob3VsZEV4
aXN0ID0gdHJ1ZSkKIHsKICAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbSW5kZXhlZERCRmls
ZU5hbWVNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOwogICAgIGF1dG8gY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CkBAIC04
Nyw3ICs4Nyw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoKQogICAgIE5TVVJMICpvbGRWZXJzaW9u
T3JpZ2luRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRp
bmdQYXRoQ29tcG9uZW50OiBAImZpbGVfXzAiXTsKICAgICBOU1VSTCAqbmV3VmVyc2lvbk9yaWdp
bkRpcmVjdG9yeVVSTCA9IFtuZXdWZXJzaW9uRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0
aENvbXBvbmVudDogQCJmaWxlX18wIl07CiAgICAgTlNVUkwgKm9sZFZlcnNpb25VbnVzZWREYXRh
YmFzZURpcmVjdG9yeVVSTCA9IFtvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMIFVSTEJ5QXBw
ZW5kaW5nUGF0aENvbXBvbmVudDp1bnVzZWREYXRhYmFzZU5hbWVdOwotICAgIEVYUEVDVF9UUlVF
KFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpvbGRWZXJz
aW9uVW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwucGF0aF0pOworICAgIEVYUEVDVF9UUlVFKFtb
TlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpvbGRWZXJzaW9u
VW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwucGF0aF0gPT0gb2xkRmlsZVNob3VsZEV4aXN0KTsK
ICAgICAKICAgICAvLyBGb3IgZGF0YWJhc2UgdGhhdCBpcyBvcGVuZWQgYWZ0ZXIgdXBncmFkZSwg
aXRzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW4gdjEuCiAgICAgTlNVUkwgKm9sZFZlcnNpb25FeGlz
dGluZ0RhdGFiYXNlRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwg
VVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OiBleGlzdGluZ0RhdGFiYXNlTmFtZV07CkBAIC0x
NTQsNyArMTU0LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlRGlyZWN0b3JpZXMoU3RyaW5nIHRlc3RO
YW1lKQogVEVTVChJbmRleGVkREIsIEluZGV4ZWREQkZpbGVOYW1lKQogewogICAgIGNyZWF0ZURp
cmVjdG9yaWVzKCJub25lIik7Ci0gICAgcnVuVGVzdCgpOworICAgIHJ1blRlc3QoZmFsc2UpOwog
fQogCiBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCRmlsZU5hbWVWMCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNz
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0
aVByb2Nlc3MubW0KaW5kZXggN2Y2MjY0NWQ5OTYwZWRlOTYwYzAwMWMyNzJiNjUwMzkzOTAxMTYz
Mi4uNmY2N2RjMjdlZGMzZDI3NDViMTcwZTQ4MmJjZDkwZTg0OTRjYjk1YSAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nl
c3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJNdWx0aVByb2Nlc3MubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Vz
ZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdD
b25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQv
X1dLVXNlclN0eWxlU2hlZXQuaD4KICNpbXBvcnQgPHd0Zi9EZXF1ZS5oPgpAQCAtNjksNyArNzAs
NyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCTXVsdGlQcm9jZXNzKQogICAgIFJldGFpblB0
cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNl
ckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgp
IG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vz
c1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBSZXRh
aW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZp
Z3VyYXRpb24uZ2V0KCldKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KaW5kZXggYjMyY2U0
YTVmNzM4NjNhZWRkY2I5MTkwYjViNDM3MGUzNzQ0M2I1ZS4uZDYyMjAzMjJlNDc4ZDFkYWM3OGYw
Njk2N2MzYjY0M2JmZDYyZjliZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCkBAIC03OCw3
ICs3OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJQZXJzaXN0ZW5jZSkKICAgICB3ZWJW
aWV3ID0gbmlsOwogCiAgICAgLy8gVGVybWluYXRlIHRoZSBuZXR3b3JrIHByb2Nlc3MKLSAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIE1ha2UgYSBuZXcgd2ViIHZpZXcgdG8gZmluaXNoIHRo
ZSB0ZXN0CiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0
aW9uLmdldCgpXSk7CkBAIC0yNjgsNyArMjY4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWRE
QlRoaXJkUGFydHlGcmFtZUhhc0FjY2VzcykKIAogICAgIHdlYlZpZXcgPSBuaWw7CiAgICAgc2Vj
b25kV2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNp
dGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIFRoaXJkLXBh
cnR5IElEQiBzdG9yYWdlIGlzIHN0b3JlZCBpbiB0aGUgbWVtb3J5IG9mIG5ldHdvcmsgcHJvY2Vz
cy4KICAgICBhdXRvIHRoaXJkV2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uLmdldCgpXSk7CkBAIC0zODUsNyArMzg1LDcgQEAgVEVTVChJbmRleGVkREIsIElu
ZGV4ZWREQlRoaXJkUGFydHlXb3JrZXJIYXNBY2Nlc3MpCiAKICAgICB3ZWJWaWV3ID0gbmlsOwog
ICAgIHNlY29uZFdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vz
c1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRv
IHRoaXJkV2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdl
dCgpXSk7CiAgICAgbG9hZFRlc3RQYWdlSW5XZWJWaWV3KHRoaXJkV2ViVmlldy5nZXQoKSwgQCJk
YXRhYmFzZSBpcyBjcmVhdGVkIik7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5t
bQppbmRleCA4ZWM2NWYwYTNiYTkzNzM2ZmRiNGY5ZGRmZWY3NWNlNjAwMDVmZDBkLi41MTBiMjRm
NTY5ZDIyYmQ0MGE3YWRiZTI1ZWNmZDBlY2ZjOGFjNzI2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3Vz
cGVuZEltbWluZW50bHkubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1By
b2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9s
bGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpAQCAtODgsOCArODksOCBA
QCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkpCiAKICAgICBydW5U
ZXN0QW5kQ2hlY2tSZXN1bHQoQCJDb250aW51ZSIpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0
KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07
Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vz
c0RpZFJlc3VtZV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBf
c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVd
OwogCiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiRXhwZWN0ZWQgQWJvcnQgRm9yIFN1c3Bl
bnNpb24iKTsKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJFeHBlY3RlZCBTdWNjZXNzIEFm
dGVyIFJlc3VtZSIpOwpAQCAtMTU4LDggKzE1OSw4IEBAIFRFU1QoSW5kZXhlZERCLCBTdXNwZW5k
SW1taW5lbnRseUZvclRoaXJkUGFydHlEYXRhYmFzZXMpCiAgICAgW3dlYlZpZXcgbG9hZEhUTUxT
dHJpbmc6bWFpbkZyYW1lU3RyaW5nIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRw
Oi8vd2Via2l0Lm9yZyJdXTsKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJkYXRhYmFzZSBp
cyBjcmVhdGVkIik7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2Vu
ZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKLSAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NX
aWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVE
YXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBydW5UZXN0QW5k
Q2hlY2tSZXN1bHQoQCJ0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZWQiKTsKIH0KZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVT
aXplLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJU
ZW1wRmlsZVNpemUubW0KaW5kZXggNTM2NTQxZTNiMGU1Y2RhM2EzYjU1MWMxZTgxZTk2M2Y1OTJh
ZWIyZi4uZTdiOTkyMjhjZTg3NmU0NDdlNjQ3ODJlZjlkODdmMjVhZGM5YjlmYSAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmls
ZVNpemUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eGVkREJUZW1wRmlsZVNpemUubW0KQEAgLTk1LDcgKzk1LDcgQEAgVEVTVChJbmRleGVkREIsIElu
ZGV4ZWREQlRlbXBGaWxlU2l6ZSkKIAogICAgIC8vIFRlcm1pbmF0ZSBuZXR3b3JrIHByb2Nlc3Mg
dG8ga2VlcCBXQUwgb24gZGlzay4KICAgICB3ZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdOwogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBm
aWxlRXhpc3RzQXRQYXRoOndhbEZpbGVQYXRoLmdldCgpLnBhdGhdKTsKICAgICBSZXRhaW5QdHI8
TlNEaWN0aW9uYXJ5PiBmaWxlQXR0cmlidXRlcyA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFu
YWdlcl0gYXR0cmlidXRlc09mSXRlbUF0UGF0aDp3YWxGaWxlUGF0aC5nZXQoKS5wYXRoIGVycm9y
Om5pbF07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQppbmRleCA0MTMzZWU3YjNkYWU0
M2VjMjA0OWNmZmMwNjNjMGU0MjljMTdjNWVmLi41Zjc5MTkwOTQzYzc3MWU5ZDllNDQyYTBkYTI2
NmZmOWEwM2JhMmYyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KQEAgLTMxLDYg
KzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLV2VicGFnZVByZWZlcmVuY2VzUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQu
aD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBv
cnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtMTA5LDcgKzExMCw3IEBAIFRFU1Qo
V0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzQ3Jhc2hlcykKICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVR
KEAic2Vzc2lvbjpzdG9yYWdlIiwgW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHldKTsKIAotICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwogCiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwpAQCAtMTYy
LDcgKzE2Myw3IEBAIFRFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzU3VzcGVuZHMp
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwog
ICAgIEVYUEVDVF9XS19TVFJFUShAInZhbHVlIiwgW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHldKTsK
IAotICAgIFtwcm9jZXNzUG9vbC5nZXQoKSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwogCiAgICAgcmVhZHlUb0Nv
bnRpbnVlID0gZmFsc2U7CiAgICAgW3dlYlZpZXcxIGV2YWx1YXRlSmF2YVNjcmlwdDpAIndpbmRv
dy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgna2V5JywgJ25ld1ZhbHVlJykiIGNvbXBsZXRpb25IYW5k
bGVyOl4oaWQsIE5TRXJyb3IgKikgewpAQCAtMTc3LDcgKzE3OCw3IEBAIFRFU1QoV0tXZWJWaWV3
LCBMb2NhbFN0b3JhZ2VQcm9jZXNzU3VzcGVuZHMpCiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZyZWFkeVRvQ29udGludWUpOwogICAgIAotICAgIFtwcm9jZXNzUG9vbC5n
ZXQoKSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5n
ZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAg
ICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KaW5kZXggZTYwZjg4
MDI1ZDA5Mzc4OWY2OTU2MGQ5YjkyYjI4MmYwNzEzMGE4ZC4uMGUyMWY5MDk1MDAxNGY2YzQ5MGIw
ZWI4ZTQ2MWVjNGJhODUwYmI4MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCkBAIC0yOCw3ICsyOCw3IEBACiAj
aW1wb3J0ICJIVFRQU2VydmVyLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0
ICJVdGlsaXRpZXMuaCIKLSNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPHd0
Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1Zl
Y3Rvci5oPgpAQCAtMzcsMTQgKzM3LDE0IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc0Vu
dGl0bGVtZW50cykKIHsKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1
cmF0aW9uOltbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNl
XV0pOwogICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBs
ZSJdOwotICAgIFdLUHJvY2Vzc1Bvb2wgKnBvb2wgPSBbd2ViVmlldyBjb25maWd1cmF0aW9uXS5w
cm9jZXNzUG9vbDsKLSAgICBib29sIGhhc0VudGl0bGVtZW50ID0gW3Bvb2wgX25ldHdvcmtQcm9j
ZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2Uu
V2ViS2l0TmV0d29ya2luZ1NhbmRib3giXTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmUgKnN0b3Jl
ID0gW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZTsKKyAgICBib29sIGhh
c0VudGl0bGVtZW50ID0gW3N0b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVz
dGluZzpAImNvbS5hcHBsZS5yb290bGVzcy5zdG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94
Il07CiAjaWYgUExBVEZPUk0oTUFDKSAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogICAgIEVY
UEVDVF9UUlVFKGhhc0VudGl0bGVtZW50KTsKICNlbHNlCiAgICAgRVhQRUNUX0ZBTFNFKGhhc0Vu
dGl0bGVtZW50KTsKICNlbmRpZgotICAgIEVYUEVDVF9GQUxTRShbcG9vbCBfbmV0d29ya1Byb2Nl
c3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJdKTsKKyAgICBF
WFBFQ1RfRkFMU0UoW3N0b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGlu
ZzpAInRlc3QgZmFpbHVyZSBjYXNlIl0pOwogfQogCiBURVNUKFdlYktpdCwgSFRUUFJlZmVyZXIp
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdv
cmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERh
dGFTdG9yZS5tbQppbmRleCA2MDk4ZThkYWQyNTJlNTllYzQ5MTI1MGI0MjE2ZDNjZDA5MzZlOGY3
Li4yZjhhMmUzM2ZlODcwM2JhYjJkOGUwNTEwODMyYmVjZDlkNDg5MzRiIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hO
b25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0K
QEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIHZvaWQgY2hlY2tSZWNvdmVyeUFmdGVyQ3Jhc2goV0tX
ZWJzaXRlRGF0YVN0b3JlICpkYXRhU3RvcmUpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7CiAKLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlv
bl0ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbW3dlYlZpZXcg
Y29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6
c2ltcGxlMl1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiB9CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2Fw
T25OYXZpZ2F0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Q
cm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQppbmRleCA5NWRjOWQ5OGRmMTNiMDcwNWUwODE3ZDA1
ODcyNjUxMjBjMTg4ZDIzLi5kZjMyMGQ2NGRhZGJkZDFlZTI4M2Y4NjVjMTQ0MjNmM2FjNTU2NGJm
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nl
c3NTd2FwT25OYXZpZ2F0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KQEAgLTUzODUsNyArNTM4NSw3IEBA
IFRFU1QoUHJvY2Vzc1N3YXAsIFVzZVByZXdhcm1lZFByb2Nlc3NBZnRlclRlcm1pbmF0aW5nTmV0
d29ya1Byb2Nlc3MpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsK
IAotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJW
aWV3Q29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXcyID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9u
OndlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgW3dlYlZpZXcyIHNldE5hdmlnYXRp
b25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0K
aW5kZXggMGUxMGMzNGVlYzgyYzZmNjU5MmJiN2M0Mjc0ZDBlNDU1ZWFmMTFlOC4uYTNhYmEyMzFh
OTNiM2Q1ZjAwYTE5M2M0N2MyNzY3ODY0YjM1MDU1YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlz
dGljcy5tbQpAQCAtNzE5LDcgKzcxOSw3IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywg
TmV0d29ya1Byb2Nlc3NSZXN0YXJ0KQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1
bkxvb3AoMSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRh
U3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkBAIC03NTIs
NyArNzUyLDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBOZXR3b3JrUHJvY2Vzc1Jl
c3RhcnQpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MyA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKQEAgLTE1NTgsMTAgKzE1NTgsOCBAQCBU
RVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE1pZ3JhdGVEYXRhRnJvbU1pc3NpbmdUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0U2FtZVNpdAogCiBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENh
bkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2wpCiB7CisgICAgTlNVUkwgKml0cFJv
b3RVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0
cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkNhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5v
UHJvY2Vzc1Bvb2xUZXN0Il0gaXNEaXJlY3Rvcnk6WUVTXTsKICAgICBhdXRvIGRlZmF1bHRGaWxl
TWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKLSAgICBfV0tXZWJzaXRl
RGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vi
c2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07Ci0gICAgYXV0byAq
ZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1
cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKLSAgICBOU1VSTCAq
aXRwUm9vdFVSTCA9IFtbZGF0YVN0b3JlIF9jb25maWd1cmF0aW9uXSBfcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RpcmVjdG9yeV07CiAgICAgTlNVUkwgKmZpbGVVUkwgPSBbaXRwUm9vdFVSTCBVUkxC
eUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJvYnNlcnZhdGlvbnMuZGIiXTsKICAgICBbZGVmYXVs
dEZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFBhdGg6aXRwUm9vdFVSTC5wYXRoIGVycm9yOm5pbF07
CiAgICAgRVhQRUNUX0ZBTFNFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpp
dHBSb290VVJMLnBhdGhdKTsKQEAgLTE1NzIsNiArMTU3MCwxMCBAQCBURVNUKFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2wpCiAgICAg
RVhQRUNUX1RSVUUoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOm5ld0ZpbGVV
UkwucGF0aF0pOwogICAgIFtkZWZhdWx0RmlsZU1hbmFnZXIgY29weUl0ZW1BdFBhdGg6bmV3Rmls
ZVVSTC5wYXRoIHRvUGF0aDpmaWxlVVJMLnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfVFJV
RShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6ZmlsZVVSTC5wYXRoXSk7CisK
KyAgICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJh
dGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFz
ZV07CisgICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeSA9IGl0cFJvb3RVUkw7CisgICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRl
RGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3Vy
YXRpb25dIGF1dG9yZWxlYXNlXTsKICAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZDpZRVNdOwogCiAgICAgc3RhdGljIGJvb2wgZG9uZUZsYWcgPSBmYWxzZTsK
QEAgLTE2MzMsMTIgKzE2MzUsMTIgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBTdG9y
ZVN1c3BlbnNpb24pCiAgICAgW3dlYlZpZXcyIF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0
aW9uXTsKIAogICAgIGRvbmVGbGFnID0gZmFsc2U7Ci0gICAgW3NoYXJlZFByb2Nlc3NQb29sIF9z
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOl57CisgICAgW2RhdGFTdG9yZTEgX3Nl
bmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6XnsKICAgICAgICAgZG9uZUZsYWcgPSB0
cnVlOwogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcpOwog
Ci0gICAgW3NoYXJlZFByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwor
ICAgIFtkYXRhU3RvcmUxIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogfQogCiBAaW50
ZXJmYWNlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTY2hlbWVIYW5kbGVyIDogTlNPYmplY3QgPFdL
VVJMU2NoZW1lSGFuZGxlcj4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0KaW5kZXggMzRhNGY1YzUzOGI5
YjBlOWZjYjA1MDcyYjE3MDI4OGU5ZTRlOWY4Zi4uMmY4ZTM0ZGJhNmRhNDcyMzU2NTVmZjBkYjJh
ZGNhMWJmOGM1NjcyMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0KQEAgLTU1OCw3ICs1NTgsNyBA
QCBURVNUKFNlcnZpY2VXb3JrZXJzLCBVc2VyQWdlbnRPdmVycmlkZSkKIAogICAgIGNvbmZpZ3Vy
YXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwog
Ci0gICAgbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxl
ciBhbGxvY10gaW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBC
YXIgQ3VzdG9tIFVzZXJBZ2VudCJdKTsKKyAgICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tT
V1VzZXJBZ2VudE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpA
Ik1lc3NhZ2UgZnJvbSB3b3JrZXI6IEZvbyBDdXN0b20gVXNlckFnZW50Il0pOwogICAgIFtbY29u
ZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVy
Om1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJzdyJdOwogCiAgICAgd2ViVmlldyA9IGFkb3B0
TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAs
IDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CkBAIC02MzMsOCArNjMz
LDYgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgQ2FjaGVTdG9yYWdlUmVzdG9yZUZyb21EaXNrKQog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwog
Ci0gICAgW1dLV2Vic2l0ZURhdGFTdG9yZSBfZGVsZXRlRGVmYXVsdERhdGFTdG9yZUZvclRlc3Rp
bmddOwotCiAgICAgU2VydmljZVdvcmtlclRDUFNlcnZlciBzZXJ2ZXIoewogICAgICAgICB7ICJ0
ZXh0L2h0bWwiLCBtYWluQ2FjaGVTdG9yYWdlQnl0ZXMgfQogICAgIH0sIHsKQEAgLTk4Miw2ICs5
ODAsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9u
KQogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIHNl
dENvbmZpZ3VyYXRpb25JbmplY3RlZEJ1bmRsZVBhdGgoY29uZmlndXJhdGlvbi5nZXQoKSk7Cisg
ICAgUmV0YWluUHRyPFdLUHJvY2Vzc1Bvb2w+IG9yaWdpbmFsUHJvY2Vzc1Bvb2wgPSBjb25maWd1
cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sOwogCiAgICAgZG9uZSA9IGZhbHNlOwogCkBAIC0xMDM1
LDcgKzEwMzQsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0Ny
ZWF0aW9uKQogICAgIGRvbmUgPSBmYWxzZTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGxvYWRp
bmcgdGhlIHNpbXBsZSBwYWdlIGRpZCBub3Qgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nl
c3MuCi0gICAgRVhQRUNUX0VRKDB1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vz
c1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgd2Vi
Vmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vz
c0NvdW50KTsKIAogICAgIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246bmV3Q29u
ZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIEVYUEVDVF9FUSgydSwgd2ViVmlldy5nZXQoKS5jb25m
aWd1cmF0aW9uLnByb2Nlc3NQb29sLl93ZWJQcm9jZXNzQ291bnRJZ25vcmluZ1ByZXdhcm1lZCk7
CkBAIC0xMDQzLDkgKzEwNDIsOCBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29ya2Vy
UHJvY2Vzc0NyZWF0aW9uKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAg
ICAgZG9uZSA9IGZhbHNlOwogCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgbG9hZGluZyB0aGlzIHBh
Z2UgZGlkIHN0YXJ0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgogICAgIEVYUEVDVF9FUSgx
dSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2Vy
UHJvY2Vzc0NvdW50KTsKLQorICAgIEVYUEVDVF9FUSgxdSwgb3JpZ2luYWxQcm9jZXNzUG9vbC5n
ZXQoKS5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CiAgICAgW1tjb25maWd1cmF0aW9uIHdl
YnNpdGVEYXRhU3RvcmVdIHJlbW92ZURhdGFPZlR5cGVzOltXS1dlYnNpdGVEYXRhU3RvcmUgYWxs
V2Vic2l0ZURhdGFUeXBlc10gbW9kaWZpZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQYXN0XSBjb21w
bGV0aW9uSGFuZGxlcjpeKCkgewogICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9XTsKQEAgLTE2
MTgsMjEgKzE2MTYsMzUgQEAgc3RhdGljIHNpemVfdCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vz
cyhib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGIKICAgICByZXR1cm4gd2Vi
Vmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl93ZWJQcm9jZXNzQ291bnRJZ25v
cmluZ1ByZXdhcm1lZDsKIH0KIAotVEVTVChTZXJ2aWNlV29ya2VycywgT3V0T2ZBbmRJblByb2Nl
c3NTZXJ2aWNlV29ya2VyKQorVEVTVChTZXJ2aWNlV29ya2VycywgT3V0T2ZQcm9jZXNzU2Vydmlj
ZVdvcmtlcikKIHsKICAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0
cnVlOwogICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CiAKICAgICBFWFBFQ1Rf
RVEoMXUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKCF1c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykpOworfQorCitURVNUKFNlcnZpY2VXb3Jr
ZXJzLCBJblByb2Nlc3NTZXJ2aWNlV29ya2VyKQoreworICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CisgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0g
dHJ1ZTsKKwogICAgIEVYUEVDVF9FUSgydSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3ModXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgIWZpcnN0TG9hZEFib3V0QmxhbmspKTsKIH0K
IAotVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhy
b3VnaFNlcnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0Jl
Zm9yZU5hdmlnYXRpbmdUaHJvdWdoT3V0T2ZQcm9jZXNzU2VydmljZVdvcmtlcikKIHsKICAgICBi
b29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOwogICAgIGJvb2wgZmly
c3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CiAKICAgICBFWFBFQ1RfRVEoMXUsIGxhdW5jaFNlcnZp
Y2VXb3JrZXJQcm9jZXNzKCF1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJzdExv
YWRBYm91dEJsYW5rKSk7Cit9CisKK1RFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5r
QmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hJblByb2Nlc3NTZXJ2aWNlV29ya2VyKQoreworICAgIGJv
b2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CisgICAgYm9vbCBmaXJz
dExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKKwogICAgIEVYUEVDVF9FUSgydSwgbGF1bmNoU2Vydmlj
ZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgZmlyc3RMb2Fk
QWJvdXRCbGFuaykpOwogfQogCkBAIC0xOTQ0LDExICsxOTU2LDExIEBAIFRFU1QoU2VydmljZVdv
cmtlcnMsIFN1c3BlbmROZXR3b3JrUHJvY2VzcykKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxl
TWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7
CiAKLSAgICBbIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2VuZE5l
dHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbd2ViVmlldy5nZXQoKS5j
b25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNw
ZW5kSW1taW5lbnRseV07CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVs
dE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0aF0pOwogCi0gICAgWyB3ZWJW
aWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0Rp
ZFJlc3VtZV07CisgICAgW3dlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0
b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgW3dlYlZpZXcgbG9hZFJl
cXVlc3Q6c2VydmVyLnJlcXVlc3QoKV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZk
b25lKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V0tIVFRQQ29va2llU3RvcmUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCmluZGV4IGEzNWYwNTM1MGFhYjRiNDJmMzZjNDZhZWNk
ZWVlZTZjZTU0NGVmODYuLjMzNzYwOTJhMTk1YjUxMmRhNjdjNDk2ZTQ1MjE3YjkxNGZlMmE1Nzkg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQ
Q29va2llU3RvcmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS0hUVFBDb29raWVTdG9yZS5tbQpAQCAtNDc5LDggKzQ3OSw2IEBAIHN0YXRpYyBib29sIGZp
bmlzaGVkOwogfQogQGVuZAogCi0vLyBGSVhNRTogb24gaU9TLCBVSSBwcm9jZXNzIHNob3VsZCBi
ZSB1c2luZyB0aGUgc2FtZSBjb29raWUgZmlsZSBhcyB0aGUgbmV0d29yayBwcm9jZXNzIGZvciBk
ZWZhdWx0IHNlc3Npb24uCi0jaWYgUExBVEZPUk0oTUFDKQogZW51bSBjbGFzcyBTaG91bGRFbmFi
bGVQcm9jZXNzUHJld2FybWluZyB7IE5vLCBZZXMgfTsKIHZvaWQgcnVuV0tIVFRQQ29va2llU3Rv
cmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxk
RW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcpCiB7CkBAIC01ODksMjAgKzU4Nyw2NiBAQCBURVNUKFdL
SFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xXaXRoUHJld2FybWluZykKICAgICBy
dW5XS0hUVFBDb29raWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNz
UHJld2FybWluZzo6WWVzKTsKIH0KIAotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQogQGludGVy
ZmFjZSBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIDogTlNPYmplY3QgPFdLVUlEZWxlZ2F0
ZT4KKy0gKE5TU3RyaW5nICopYWxlcnRDb29raWVIVE1MOworLSAoTlNTdHJpbmcgKil3YWl0Rm9y
TWVzc2FnZTsKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVs
ZWdhdGUKK0BpbXBsZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHsKKyAg
ICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9tZXNzYWdlOworfQorCiAtICh2b2lkKXdlYlZpZXc6KFdL
V2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNT
dHJpbmcgKiltZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAg
RVhQRUNUX1NUUkVRKCJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIsIG1lc3NhZ2UuVVRG
OFN0cmluZyk7CisgICAgX21lc3NhZ2UgPSBtZXNzYWdlOwogICAgIGZpbmlzaGVkID0gdHJ1ZTsK
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQorCistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNz
YWdlCit7CisgICAgd2hpbGUgKCFfbWVzc2FnZSkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6c3BpblJ1bkxvb3AoKTsKKyAgICByZXR1cm4gX21lc3NhZ2UuYXV0b3JlbGVhc2UoKTsKK30K
KworLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUwKK3sKKyAgICByZXR1cm4gQCI8c2NyaXB0
PnZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAw
OyBpIDwgY29va2llcy5sZW5ndGg7IGkgKyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJp
bSgpOyB9IGNvb2tpZXMuc29ydCgpOyBhbGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0
PiI7Cit9CisKIEBlbmQKIAorVEVTVChXZWJLaXQsIFdLSFRUUENvb2tpZVN0b3JlTXVsdGlwbGVW
aWV3cykKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MSA9IFtbVGVzdFdLV2ViVmlldyBu
ZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzEgc3luY2hyb25vdXNseUxvYWRIVE1MU3Ry
aW5nOkAic3RhcnQgbmV0d29yayBwcm9jZXNzIl07CisKKyAgICBOU0hUVFBDb29raWUgKnNlc3Np
b25Db29raWUgPSBbTlNIVFRQQ29va2llIGNvb2tpZVdpdGhQcm9wZXJ0aWVzOkB7CisgICAgICAg
IE5TSFRUUENvb2tpZVBhdGg6IEAiLyIsCisgICAgICAgIE5TSFRUUENvb2tpZU5hbWU6IEAiU2Vz
c2lvbkNvb2tpZU5hbWUiLAorICAgICAgICBOU0hUVFBDb29raWVWYWx1ZTogQCJDb29raWVWYWx1
ZSIsCisgICAgICAgIE5TSFRUUENvb2tpZURvbWFpbjogQCIxMjcuMC4wLjEiLAorICAgIH1dOwor
CisgICAgX19ibG9jayBib29sIHNldENvb2tpZURvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldzEu
Y29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlLmh0dHBDb29raWVTdG9yZSBzZXRDb29raWU6
c2Vzc2lvbkNvb2tpZSBjb21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBzZXRDb29raWVEb25l
ID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnNldENvb2tp
ZURvbmUpOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW0NoZWNrU2Vzc2lvbkNvb2tp
ZVVJRGVsZWdhdGUgbmV3XSk7CisgICAgW3dlYlZpZXcxIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUu
Z2V0KCldOworCisgICAgW3dlYlZpZXcxIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENv
b2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4x
Il1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vz
c2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKKworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZp
ZXcyID0gW1tUZXN0V0tXZWJWaWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MiBz
ZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzIgbG9hZEhUTUxTdHJp
bmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3
YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworfQorCiBU
RVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9u
KQogewogICAgIFJldGFpblB0cjxXS1dlYnNpdGVEYXRhU3RvcmU+IGVwaGVtZXJhbFN0b3JlV2l0
aENvb2tpZXMgPSBbV0tXZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdOwpA
QCAtNjI3LDkgKzY3MSw4IEBAIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNz
UG9vbEVwaGVtZXJhbFNlc3Npb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5p
c2hlZCk7CiAgICAgZmluaXNoZWQgPSBmYWxzZTsKICAgICAKLSAgICBOU1N0cmluZyAqYWxlcnRD
b29raWVIVE1MID0gQCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0
KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkgKyspIHsgY29va2ll
c1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgpOyBhbGVydChjb29raWVz
LmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Ci0gICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6YWxl
cnRDb29raWVIVE1MIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAu
MC4xIl1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOworICAgIFt3
ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6
W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9X
S19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29v
a2llVmFsdWUiKTsKIH0KIAogc3RhdGljIGJvb2wgYXJlQ29va2llc0VxdWFsKE5TSFRUUENvb2tp
ZSAqZmlyc3QsIE5TSFRUUENvb2tpZSAqc2Vjb25kKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0gYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1s
ZWFrcy5tbQppbmRleCBhYzdkZTQxNTEyYzQ1MTM4ZWM1ZTRjMDllNTExNWQxNmNkMjNiMjJlLi5h
YzE2NTM1ZGZkOTM5OTlkMmVjNTBkY2ZkNzFjM2E1NmQxMTNlYzdhIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFr
cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2No
ZW1lSGFuZGxlci1sZWFrcy5tbQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dL
VVJMU2NoZW1lVGFza1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1
cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNp
bXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVmVj
dG9yLmg+CkBAIC0xNTIsNyArMTUzLDcgQEAgVEVTVChVUkxTY2hlbWVIYW5kbGVyLCBMZWFrczMp
CiAKICAgICBydW5VbnRpbFRhc2tzSW5GbGlnaHQoMik7CiAKLSAgICBbd2ViVmlldzEuZ2V0KCku
Y29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAg
IFt3ZWJWaWV3MS5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJ1blVudGlsVGFza3NJbkZsaWdodCgwKTsKIH0KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURh
dGFTdG9yZUN1c3RvbVBhdGhzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0KaW5kZXggOTJjZjNhNjE5OGE1Yjlk
MTQ1NDQ5MDVkYjllOTQ4ZjExYzcyNTZkZS4uYmY4YmRlODMxYTI4NTliY2YzNDEzODA2MTg4YjU5
MWZjYWE5ZDNhYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0KQEAg
LTI0NCw3ICsyNDQsNyBAQCBzdGF0aWMgdm9pZCBydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0
aHMoU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxkRQogICAgIC8vIE5vdywgd2l0
aCBicmFuZCBuZXcgV0tXZWJzaXRlRGF0YVN0b3JlcyBwb2ludGluZyBhdCB0aGUgc2FtZSBjdXN0
b20gY29va2llIHN0b3JhZ2UgbG9jYXRpb24sCiAgICAgLy8gaW4gbmV3bHkgZmlyZWQgdXAgTmV0
d29ya1Byb2Nlc3NlcywgdmVyaWZ5IHRoYXQgdGhlIGZldGNoIGFuZCBkZWxldGUgQVBJcyB3b3Jr
IGFzIGV4cGVjdGVkLgogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CisgICAgW2RhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIGF1dG8g
bmV3Q3VzdG9tRGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10g
X2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQo
KV0pOwogCiAgICAgW25ld0N1c3RvbURhdGFTdG9yZSBmZXRjaERhdGFSZWNvcmRzT2ZUeXBlczpb
TlNTZXQgc2V0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVDb29raWVzLCBuaWxdIGNvbXBs
ZXRpb25IYW5kbGVyOl4oTlNBcnJheTxXS1dlYnNpdGVEYXRhUmVjb3JkICo+ICogcmVjb3Jkcykg
ewpAQCAtMjU1LDcgKzI1NSw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0
b21QYXRocyhTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRFCiAgICAgcmVjZWl2
ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZy
ZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CisgICAgW2RhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwog
ICAgIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxs
b2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24u
Z2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21EYXRhU3RvcmUgcmVtb3ZlRGF0YU9mVHlwZXM6W05T
U2V0IHNldFdpdGhPYmplY3RzOldLV2Vic2l0ZURhdGFUeXBlQ29va2llcywgbmlsXSBtb2RpZmll
ZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNvbXBsZXRpb25IYW5kbGVyOl4gewpAQCAtNTM5
LDcgKzUzOSw3IEBAIFRFU1QoV2ViS2l0LCBEb0xvYWRXaXRoTm9uRGVmYXVsdERhdGFTdG9yZUFm
dGVyVGVybWluYXRpbmdOZXR3b3JrUHJvY2VzcykKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW3dlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpLnByb2Nl
c3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW3dlYlZpZXdDb25maWd1cmF0
aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAog
ICAgIHJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNCdW5kbGUgbWFp
bkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIg
c3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07CiAgICAgW3dlYlZpZXcg
bG9hZFJlcXVlc3Q6cmVxdWVzdF07CkBAIC04NTcsNyArODU3LDcgQEAgVEVTVChXZWJLaXQsIE1l
ZGlhQ2FjaGUpCiAgICAgRVhQRUNUX0ZBTFNFKGVycm9yKTsKIAogICAgIGRvbmUgPSB0cnVlOwot
ICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOworICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3Jl
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRl
bUF0UGF0aDpwYXRoIGVycm9yOiZlcnJvcl07CiAgICAgRVhQRUNUX0ZBTFNFKGVycm9yKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggOWQzN2NjZWRkYjgy
MTU3NDc1ZDgxZjEyMjBmNDU2Yjg2NGMzYjE3MS4uNjMzMjZmNjg1NmJjNjA1OWRjNjM3OWYyYWE1
YzAwNTBhMDc4NGFiZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAKQEAgLTEwNjEsOCArMTA2MSw2IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVU
b0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAKICAgICBy
ZXNldFF1b3RhKCk7CiAKLSAgICBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZv
clNlcnZpY2VXb3JrZXJUZXN0aW5nKHBsYXRmb3JtQ29udGV4dCgpLCB0cnVlKTsKLQogICAgIFdL
Q29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5jb250ZXh0KCkpOwogCiAgICAgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgp
LCBmYWxzZSk7CkBAIC0zMTM2LDcgKzMxMzQsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRJ
Z25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyhib29sIGlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaQog
CiB2b2lkIFRlc3RDb250cm9sbGVyOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCiB7Ci0gICAg
V0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3MocGxhdGZvcm1Db250ZXh0KCkpOworICAg
IFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKHdlYnNpdGVEYXRhU3Rv
cmUoKSk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
KCkKQEAgLTMxNjcsOSArMzE2NSw4IEBAIFBsYXRmb3JtV2ViVmlldyogVGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtQ3JlYXRlT3RoZXJQYWdlKFBsYXRmb3JtV2ViVmlldyogcGFyZW50CiAgICAgcmV0
dXJuIG5ldyBQbGF0Zm9ybVdlYlZpZXcoY29uZmlndXJhdGlvbiwgb3B0aW9ucyk7CiB9CiAKLVdL
Q29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KFdLQ29udGV4
dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmIGNvbnRleHRDb25maWd1cmF0
aW9uKQorV0tDb250ZXh0UmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQo
V0tDb250ZXh0UmVmIGNvbnRleHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYpCiB7Ci0gICAg
V0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUoY29udGV4dCwgZGVmYXVsdFdlYnNp
dGVEYXRhU3RvcmUoKSk7CiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409342</attachid>
            <date>2020-09-21 18:54:36 -0700</date>
            <delta_ts>2020-09-21 20:09:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200921185435.patch</filename>
            <type>text/plain</type>
            <size>328165</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRhZGZjMzM1NmEzMzk3NmU4
YmE5Mzk2YmJhOTM0ZThmNGMzODhmM2EuLmYzNGM3MzkxNzdhZjQ3ZTE3YWJlYmZlNTUyYzkyMDlk
MWRkYzI0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzU3IEBACisyMDIwLTA5LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmg6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24pOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Byb2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lv
bik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0
U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVT
dG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3Jl
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAg
ICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRU
UENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0
b3JlOjpzZXRDb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVD
b29raWUpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMp
OgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1
bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0TmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyKToKKyAgICAgICAgKFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpOgorICAgICAgICAoV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRh
U3RvcmUpOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXJUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9z
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOl0pOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKToKKyAgICAgICAgKC1bV0tQcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQ
cm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQ
b29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1Byb2Nlc3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0
b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKToKKyAgICAgICAg
KC1bV0tXZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOgorICAgICAg
ICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3Bl
bmQ6XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFT
dG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChfV2ViS2l0Q29v
a2llTWFuYWdlclByaXZhdGU6OmNvb2tpZU1hbmFnZXIgY29uc3QpOgorICAgICAgICAoX1dlYktp
dENvb2tpZU1hbmFnZXJQcml2YXRlOjp+X1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlKToKKyAg
ICAgICAgKHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UpOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFu
YWdlcl9nZXRfYWNjZXB0X3BvbGljeSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJf
YWRkX2Nvb2tpZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMp
OgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKHdl
YmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZCk6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21h
dGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXhp
bGlhcnlQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1
cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmcp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmNhbmNlbCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVzcyk6CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAg
ICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1h
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlN
YXApOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVu
dGVyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxp
Y2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJv
eHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFBy
b3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94
eU1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmg6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1By
b2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHRO
ZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnRl
cm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVh
dGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkYXRhU3RvcmVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJv
Y2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkpOgorICAgICAgICAoV2ViS2l0
OjphbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQ
cm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJl
Y2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
Q2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29u
bmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9v
bEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNz
UG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVu
dCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdl
clByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29v
a2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVD
aGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0
cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaDoK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRp
dGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVjb25u
ZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JG
cmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9u
T3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZv
clRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bv
b2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENv
bm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9y
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250
ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFs
VVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3Nlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpo
YXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFj
dGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2lu
Z1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xl
YXJDYWNoZWRDcmVkZW50aWFscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9y
VGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJl
c3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpmbHVzaENv
b2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZGlkQ29t
bWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNz
YXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0
YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdv
cmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRTZXJ2aWNlV29ya2VyVGlt
ZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRN
YXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1
ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRz
UHJvY2Vzc2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3Rp
Y3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZG9t
YWluSURFeGlzdHNJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5n
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNl
T25jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRo
ZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFi
YXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9h
ZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JU
ZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9y
YWdlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRl
UmVmZXJyZXJGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQ
YXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9v
bHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1NwZWNp
ZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3RhdGlzdGljc1Rlc3RpbmdD
YWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmbHVzaENvb2tpZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvcldlYlNvY2tldCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFy
Q2FjaGVkQ3JlZGVudGlhbHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpw
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxT
dG9yYWdlRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0
UXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vz
c0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlh
bGl6ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRBcHBCb3VuZERv
bWFpbnNGb3JJVFApOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjp1cGRhdGVC
dW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25J
RE1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmV4aXN0
aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc0Fz
c29jaWF0ZWRQcm9jZXNzUG9vbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdD
b29raWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGlk
Q3JlYXRlTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKToK
KyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3Jz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRp
bmdzKToKKwogMjAyMC0wOS0yMSAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxl
LmNvbT4KIAogICAgICAgICBBbGxvdyBhYm91dDpibGFuayBzdWJmcmFtZSBsb2FkcyBmb3Igbm9u
IGFwcC1ib3VuZCB0b3AgZnJhbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKaW5kZXggZmNlMjM4OTg3YTc4
NTBmMThjOWYzMDZjNTBlOThjZTk4OGQxMjVmZC4uNmI0NWMyYmQ5ZjI2YTQ2ODU4ZDE3N2I1Nzc3
YjMwZjYxZDA3ZThlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
b29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2ll
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29raWVTdG9yYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9IVFRQQ29va2llQWNjZXB0UG9saWN5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3Rv
cmFnZVNlc3Npb24uaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0
Zi9VUkwuaD4KQEAgLTE0OSw5ICsxNTAsMTIgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LAogICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKLXZvaWQgV2ViQ29va2llTWFuYWdlcjo6Z2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJDb29raWVNYW5hZ2VyOjpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihtX3Byb2Nlc3MuZGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uKCkuY29va2llQWNjZXB0UG9saWN5KCkpOworICAgIGlmIChhdXRvKiBzdG9yYWdlU2Vz
c2lvbiA9IG1fcHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQorICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihzdG9yYWdlU2Vzc2lvbi0+Y29va2llQWNjZXB0UG9saWN5KCkpOworICAg
IGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6
TmV2ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmggYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCmluZGV4IGNh
N2Y1NWU4NjZiZGFkNGIxZTM1MmU4ZjY0MDU3YmFiYzQ2MjgzMmQuLmViNzQxODIzNWY1NzA5MzAz
OTYwMTliZTQ0NzIxZGRjMDlmYTk4ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaApAQCAtODAsNyArODAsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgZ2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCwgY29uc3QgVVJM
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmKT4mJik7
CiAKICAgICB2b2lkIHBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShXZWJDb3JlOjpI
VFRQQ29va2llQWNjZXB0UG9saWN5KTsKLSAgICB2b2lkIGdldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5
KT4mJik7CisgICAgdm9pZCBnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklE
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kp
PiYmKTsKIAogICAgIHZvaWQgc3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lv
bklEKTsKICAgICB2b2lkIHN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklE
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJD
b29raWVNYW5hZ2VyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
b29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4KaW5kZXggYWNkNzU0NDBkODNmMzQ2
NjUwYzlmMzNiNzViNWQ1ZDA5MzUyMTNiYS4uNmZkZjU3NzJhYTZhYWUzOTQwMmE5YTg5ZjU2Yzg0
ZjdiZDQzNTg1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29r
aWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTM2LDcg
KzM2LDcgQEAgbWVzc2FnZXMgLT4gV2ViQ29va2llTWFuYWdlciBOb3RSZWZDb3VudGVkIHsKICAg
ICB2b2lkIERlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgV2FsbFRpbWUgdGltZSkgLT4gKCkgQXN5bmMKIAogICAgIHZvaWQgU2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3kpIC0+ICgpIEFzeW5jCi0gICAgdm9pZCBHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KCkgLT4gKGVudW06dWludDhfdCBXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGlj
eSkgQXN5bmMKKyAgICB2b2lkIEdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklEKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQ
b2xpY3kgcG9saWN5KSBBc3luYwogICAgIAogICAgIHZvaWQgU3RhcnRPYnNlcnZpbmdDb29raWVD
aGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICB2b2lkIFN0b3BPYnNlcnZpbmdD
b29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggYmU4ZDk2NjYyYmU2ZGNk
ODVmYTNjMzI5MjlhZTBmMGI1ZDE4MjM0My4uN2Y0Nzc3MTMyZDUyNDc1ODE4Mjk4MWFhZjBjMThi
NzJiN2JhMzk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAKQEAgLTM0NywyOSArMzQ3LDE5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6Omlu
aXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYm
CiAKICAgICBzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUocGFyYW1ldGVycy5lbmFibGVB
ZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUpOwogCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29u
c3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNl
c3Npb25JRDsKLSAgICBzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0
ZSgqdGhpcywgV1RGTW92ZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKLQotICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1
bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hl
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgYWRkU2Vzc2lvblN0b3JhZ2VR
dW90YU1hbmFnZXIoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotCisgICAgZm9yIChhdXRvJiBkYXRhU3RvcmVQYXJhbWV0ZXJzIDogcGFyYW1ldGVy
cy5kYXRhU3RvcmVQYXJhbWV0ZXJzKSB7CisgICAgICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOworICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoZGF0YVN0b3JlUGFyYW1ldGVy
cy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBhZGRTZXNz
aW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVy
T3JpZ2luU3RvcmFnZVF1b3RhLCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmln
aW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgYWRkSW5kZXhlZERhdGFiYXNl
U2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAg
IGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJz
LmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2VuZGlmCi0KKyAgICAgICAgbV9zdG9y
YWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3Vy
ZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKCp0aGlzLCBXVEZNb3ZlKGRhdGFTdG9yZVBhcmFtZXRl
cnMpKTsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgYm9vbCBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkID0gdHJ1ZTsKLSAgICBhZGRTZXJ2aWNlV29y
a2VyU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZFNlcnZp
Y2VXb3JrZXJTZXNzaW9uKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29y
a2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKGRhdGFTdG9yZVBhcmFt
ZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIGRhdGFTdG9yZVBhcmFt
ZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CiAjZW5kaWYKLQotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvKiBkZWZhdWx0U2Vzc2lvbiA9IG5ldHdvcmtT
ZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotICAgIGF1dG8qIGRl
ZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IGRlZmF1bHRTZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Np
b24oKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIGRlZmF1bHRTdG9yYWdl
U2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7CisgICAgfQogCiAgICAgZm9yIChhdXRvJiBzdXBw
bGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+aW5p
dGlhbGl6ZShwYXJhbWV0ZXJzKTsKQEAgLTUwNSw4ICs0OTUsNiBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wg
c2hvdWxkVQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNl
c3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwg
Y29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFzZSkKICNlbmRpZgogewotICAgIEFTU0VSVChzZXNz
aW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0KICAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy5hZGQoc2Vzc2lvbklELCBudWxs
cHRyKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm47CkBA
IC01MjEsNyArNTA5LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNob3VsZFUKICAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllciA9IG1ha2VTdHJpbmcoaWRlbnRpZmllckJhc2UsICIu
UHJpdmF0ZUJyb3dzaW5nLiIsIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSkuY3JlYXRlQ0ZT
dHJpbmcoKTsKICAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHN0b3Jh
Z2VTZXNzaW9uID0gYWRvcHRDRihjcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oY2ZJZGVudGlm
aWVyLmdldCgpKSk7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKHNlc3Npb25JRCAhPSBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAgICBzdG9yYWdlU2Vzc2lvbiA9IFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlQ0ZTdG9yYWdlU2Vzc2lvbkZvcklk
ZW50aWZpZXIoY2ZJZGVudGlmaWVyLmdldCgpKTsKIAogICAgIGlmIChOZXR3b3JrU3RvcmFnZVNl
c3Npb246OnByb2Nlc3NNYXlVc2VDb29raWVBUEkoKSkgewpAQCAtNTQ0LDIxICs1MzIsMTEgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6Y29va2llQWNjZXB0UG9saWN5Q2hhbmdlZChIVFRQQ29va2ll
QWNjZXB0UG9saWN5IG5ld1BvbGljeSkKIAogV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
KiBOZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNl
c3Npb25JRCkgY29uc3QKIHsKLSAgICBpZiAoc2Vzc2lvbklEID09IFBBTDo6U2Vzc2lvbklEOjpk
ZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgIHJldHVybiAmZGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCk7CiAgICAgcmV0dXJuIG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy5nZXQoc2Vzc2lvbklEKTsK
IH0KIAotV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrUHJvY2Vzczo6ZGVm
YXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVmYXVsdE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbikKLSAgICAgICAgbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uID0g
cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKLSAgICByZXR1cm4gKm1fZGVm
YXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9y
RWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiYpPiYgZnVuY3RvcikKIHsKLSAgICBmdW5jdG9yKGRlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpKTsKICAgICBmb3IgKGF1dG8mIHN0b3JhZ2VTZXNzaW9uIDogbV9uZXR3
b3JrU3RvcmFnZVNlc3Npb25zLnZhbHVlcygpKQogICAgICAgICBmdW5jdG9yKCpzdG9yYWdlU2Vz
c2lvbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmgKaW5kZXggYWE3MzM3N2I3MzJmNjEwYjg2NzkwNTZjMzdkZjI4YWVlYTA3YWY4My4uZGM4NmYz
OTY5N2ZjNTAzZWE0ZGJkMWIwNmMzMjI5NzViMWU2OWQxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMTcwLDcgKzE3MCw2IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgZm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBGdW5jdGlv
bjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYpPiYpOwogICAgIFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9u
SUQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIGRlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24+IG5ld1Rlc3RpbmdTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklE
Jik7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBlbnN1cmVTZXNzaW9uKGNvbnN0IFBB
TDo6U2Vzc2lvbklEJiwgYm9vbCBzaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0
IFN0cmluZyYgaWRlbnRpZmllciwgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYp
OwpAQCAtMzc1LDcgKzM3NCw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRm
b3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbj4gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdDsKIAog
ICAgIHZvaWQgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImKTsKIApAQCAtNTQ0LDcgKzU0Miw2IEBAIHByaXZhdGU6CiAKICAgICBI
YXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiBt
X25ldHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4gbV9uZXR3b3JrU3RvcmFnZVNl
c3Npb25zOwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbj4gbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwogCiAgICAgUmVmUHRy
PFN0b3JhZ2VNYW5hZ2VyU2V0PiBtX3N0b3JhZ2VNYW5hZ2VyU2V0OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuY3BwCmluZGV4IDk5MDFjNWNiNzNjNzRmZTNkYTRlYmY1N2JhODUxMjg2
ZmRhMTA0YmYuLjAyZGRiOTIzNGU5OTljM2U2Y2RjZGNmMGI4NzhiODcyNTgzNjMyOWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCB1aVByb2Nlc3NTREtWZXJzaW9uOwogICAgIElQQzo6
ZW5jb2RlKGVuY29kZXIsIG5ldHdvcmtBVFNDb250ZXh0LmdldCgpKTsKICNlbmRpZgotICAgIGVu
Y29kZXIgPDwgZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZW5jb2RlciA8PCBkYXRh
U3RvcmVQYXJhbWV0ZXJzOwogI2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIgPDwgY29va2llQWNj
ZXB0UG9saWN5OwogICAgIGVuY29kZXIgPDwgaWdub3JlVExTRXJyb3JzOwpAQCAtNjgsOSArNjgs
NiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVy
ZWRBc0xvY2FsOwogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNz
OwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGVuY29kZXIgPDwgc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlIDw8IHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vz
c1Rlcm1pbmF0aW9uRGVsYXk7Ci0jZW5kaWYKICAgICBlbmNvZGVyIDw8IHNob3VsZEVuYWJsZUlU
UERhdGFiYXNlOwogICAgIGVuY29kZXIgPDwgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdN
b2RlOwogfQpAQCAtMTE2LDExICsxMTMsMTEgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Byb2MKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKLSAgICBPcHRpb25hbDxXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycz4gZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAgZGVjb2RlciA+
PiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICBpZiAoIWRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzKQorICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cz4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZGVjb2RlciA+PiBkYXRhU3RvcmVQYXJhbWV0
ZXJzOworICAgIGlmICghZGF0YVN0b3JlUGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJlc3VsdC5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKKyAgICByZXN1bHQuZGF0YVN0b3JlUGFyYW1ldGVycyA9
IFdURk1vdmUoKmRhdGFTdG9yZVBhcmFtZXRlcnMpOwogCiAjaWYgVVNFKFNPVVApCiAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29va2llQWNjZXB0UG9saWN5KSkKQEAgLTE0MiwyMCAr
MTM5LDYgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQ
Qzo6RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Byb2MKICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3MpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBPcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGU+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0g
ICAgZGVjb2RlciA+PiBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlOwotICAgIGlmICghc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC5zZXJ2aWNlV29y
a2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NU
ZXJtaW5hdGlvbkRlbGF5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCmluZGV4IDEx
Y2E1YTE5OWZjZmZlODgzZmZmMGEyZmY3OWRmZTQyMTBkOWRhZDEuLjY3NDlkYTBjNGE2M2MyMDIx
MDc3ODM1ODQ4NDZjOTBkMDEwYTAzNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgK
QEAgLTcxLDcgKzcxLDcgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
IHsKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBuZXR3b3JrQVRTQ29udGV4dDsKICNlbmRpZgog
Ci0gICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnM7CisgICAgVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkYXRhU3RvcmVQYXJh
bWV0ZXJzOwogICAgIAogI2lmIFVTRShTT1VQKQogICAgIFdlYkNvcmU6OkhUVFBDb29raWVBY2Nl
cHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5IHsgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBv
bGljeTo6QWx3YXlzQWNjZXB0IH07CkBAIC04NSwxMiArODUsNyBAQCBzdHJ1Y3QgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNS
ZWdpc3RlcmVkQXNMb2NhbDsKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgU3RyaW5nIHNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7
Ci0gICAgYm9vbCBzaG91bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRl
bGF5IHsgZmFsc2UgfTsKLSNlbmRpZgotICAgIGJvb2wgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2Ug
eyBmYWxzZSB9OworICAgIGJvb2wgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgeyB0cnVlIH07CiAg
ICAgYm9vbCBlbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUgeyBmYWxzZSB9OwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3
b3JrUHJvY2Vzc0NvY29hLm1tCmluZGV4IGRhNjM1OTEyNDIyM2RiOTcwMzBkMWVhNzdiYzAwY2Vl
NTFmYjAxN2QuLjUwMTBmOWE4NjkwMzkwZGZmZTlhMzQ0ZTk5MDViMjRlNjY4NWM3YWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3ND
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQ
cm9jZXNzQ29jb2EubW0KQEAgLTc4LDkgKzc4LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYShjb25zdCBOZXR3b3JrUHJvY2Vzc0MK
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29r
aWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBTYW5kYm94RXh0ZW5zaW9u
Ojpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRs
eShwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBl
cm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYK
IAogICAgIF9DRk5ldHdvcmtTZXRBVFNDb250ZXh0KHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRl
eHQuZ2V0KCkpOwpAQCAtMTA1LDExICsxMDIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0
Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwog
ICAgIFtOU1VSTENhY2hlIHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdldCgpXTsKIH0KIAot
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1By
b2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiBOZXR3b3JrUHJvY2Vzczo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdAogewog
I2lmIFVTRShTT1VSQ0VfQVBQTElDQVRJT05fQVVESVRfREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKaW5k
ZXggZDk5ZjlkZDY0YmFkNmU0MmRjYzhlM2Y5YjhmMTY5Mjk5N2Y2NzE5Mi4uNDk1MzgxMWIyMTY0
ZTg5ODQ2ZjkyNzllNjIyOWQ1OTNlMjI1NmEzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKQEAgLTM5LDEx
ICszOSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpCiB7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9y
bUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VV
bmlxdWU8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWxsb3dTcGVjaWZp
Y0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNh
dGVJbmZvLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtp
bmdDb250ZXh0Lm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0
d29ya2luZ0NvbnRleHQubW0KaW5kZXggYzI3MzZlMDI2YTU1ZDNkNDAyMGY4NGY0ZDY5M2QxNmI0
NjUyZWQyMy4uMWUxODQ4OWY5NDYyMGYwMmE3ZDllOWU4NjllYzg2NDkxYjdiYmQ0ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQubW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0
d29ya2luZ0NvbnRleHQubW0KQEAgLTU1LDE1ICs1NSwxMSBAQCB2b2lkIFJlbW90ZU5ldHdvcmtp
bmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYg
bmV0dwogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1l
dGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gdWlQcm9jZXNzQ29va2llU3RvcmFnZTsKLSAgICBpZiAo
IXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0
b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSkKKyAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJh
bCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1w
dHkoKSAmJiBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgIT0g
UEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAgICAgICAgdWlQcm9jZXNzQ29v
a2llU3RvcmFnZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlpbmdEYXRhKHBhcmFtZXRlcnMu
dWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIpOwogCiAgICAgbmV0d29ya1Byb2Nlc3Mu
ZW5zdXJlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgbWFrZVN0cmluZyhiYXNlLCAnLics
IHNlc3Npb25JRC50b1VJbnQ2NCgpKSwgV1RGTW92ZSh1aVByb2Nlc3NDb29raWVTdG9yYWdlKSk7
CiAKLSAgICBhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Byb2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vz
c2lvbklEKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMucGVuZGlu
Z0Nvb2tpZXMpCi0gICAgICAgIHNlc3Npb24tPnNldENvb2tpZShjb29raWUpOwotCiAgICAgbmV0
d29ya1Byb2Nlc3Muc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUo
bmV0d29ya1Byb2Nlc3MsIFdURk1vdmUocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKaW5kZXggNDFhZmRjYzYxYWRjNTgzZGNmMTlmMmQ0
MGFhMjg5MWY4YTAxMzI4Yi4uMDkzZDU5OTU5NmE2ODgzMGFmMDk5M2ZhMzY4MzFlMGMzMjRiZmJl
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQ
cm9jZXNzU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05l
dHdvcmtQcm9jZXNzU291cC5jcHAKQEAgLTE0MCwxMSArMTQwLDYgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nl
c3NDcmVhdGkKICAgICBzZXRJZ25vcmVUTFNFcnJvcnMocGFyYW1ldGVycy5pZ25vcmVUTFNFcnJv
cnMpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
PiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBj
b25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsK
ICAgICBTb3VwTmV0d29ya1Nlc3Npb246OnNldFNob3VsZElnbm9yZVRMU0Vycm9ycyhpZ25vcmVU
TFNFcnJvcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMuY3BwCmluZGV4IDZkMGMxMjlhNzQwNTEwZDM4Njk3MzcwNWFkMDkyZWYxMzJj
YzA3NWEuLjA0ODEwYjNlMTliZTk2Y2FkMWFkODJhNDRkY2VkYjI2ZWY3ODI2MWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAK
QEAgLTQwLDEzICs0MCw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29k
ZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnM7CiAgICAgZW5jb2RlciA8PCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRl
bnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxl
OwotICAgIGVuY29kZXIgPDwgcGVuZGluZ0Nvb2tpZXM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKICAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA8PCBpbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKQEAgLTgzLDEyICs3OSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
PiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVu
c2lvbkhhbmRsZSA9IFdURk1vdmUoKmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsK
IAotICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpDb29raWU+PiBwZW5kaW5nQ29va2llczsK
LSAgICBkZWNvZGVyID4+IHBlbmRpbmdDb29raWVzOwotICAgIGlmICghcGVuZGluZ0Nvb2tpZXMp
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29v
a2llcyA9IFdURk1vdmUoKnBlbmRpbmdDb29raWVzKTsKLQogI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQogICAgIE9wdGlvbmFsPFN0cmluZz4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5Owog
ICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwpAQCAtMTAxLDE0ICs5MSw2
IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgaWYgKCFpbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
cGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZN
b3ZlKCppbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBPcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+
IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRl
Y29kZXIgPj4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7
Ci0gICAgaWYgKCFpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmluZGV4ZWRE
YXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaW5kZXhl
ZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5k
aWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCmluZGV4IGYyN2RmNDg5ODA5ZjMxOTYw
OGI2ODBjYjJhOGExYzE0YjcwMTg0MzkuLmUxYjIzMzcwMTk5ZmUzNzAzMWU5ZGM1YzA1NzgxNTUw
MjFlMzRkNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMuaApAQCAtNTEsMTUgKzUxLDExIEBAIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycyB7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdWlQcm9jZXNzQ29va2llU3RvcmFn
ZUlkZW50aWZpZXI7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGNvb2tpZVN0b3JhZ2VQ
YXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdD
b29raWVzOwogICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzIG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVyczsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIFN0cmlu
ZyBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VU
ZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElIVFRQQ29va2llU3RvcmUuY3BwCmluZGV4IGJjMDc4NjZmYmMzOTY4ZTc2Y2FhOWEzNTY4
MTBjNmEyZmIwOWRjZmQuLmZmOTU1ODkyYmRhMGI4M2MyM2E5NmEwODM5ZWYzYmQwZDk0NjljMjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuY3BwCkBAIC00Niw4ICs0Niw2IEBAIG5hbWVzcGFjZSBBUEkgewogSFRUUENvb2tpZVN0b3Jl
OjpIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0
b3JlKQogICAgIDogbV9vd25pbmdEYXRhU3RvcmUod2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBp
ZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRp
b25zKCkpCi0gICAgICAgIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7
CiB9CiAKIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCkBAIC01NSw4ICs1Myw2
IEBAIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCiAgICAgQVNTRVJUKG1fb2Jz
ZXJ2ZXJzLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFtX29ic2VydmVkQ29va2llTWFuYWdlclBy
b3h5KTsKICAgICBBU1NFUlQoIW1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotCi0gICAg
dW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwogfQogCiB2b2lkIEhU
VFBDb29raWVTdG9yZTo6ZmlsdGVyQXBwQm91bmRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3Jl
OjpDb29raWU+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtODEsMzMgKzc3LDE2IEBAIHZv
aWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mIGNvb2tpCiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUt
PnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wp
IHsKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gYWxsQ29va2llczsKLSAgICAgICAg
aWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKQotICAgICAgICAgICAgYWxsQ29va2llcyA9IGdldEFsbERlZmF1bHRV
SVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKLSAgICAgICAgYWxsQ29va2llcy5hcHBlbmRW
ZWN0b3IobV9vd25pbmdEYXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwotCi0gICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBhbGxD
b29raWVzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2llcyhh
bGxDb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIH0pOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1
cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFu
YWdlci0+Z2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHBvb2wgPSBXVEZNb3ZlKHBvb2wpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tp
ZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5h
Z2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKICAgICAgICAgZmlsdGVyQXBw
Qm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9
KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3Jl
LT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29s
KQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLQotICAgIGF1dG8qIGNv
b2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmdldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8
V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1h
bmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2Vy
KCk7CisgICAgY29va2llTWFuYWdlci5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRD
b29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0K
QEAgLTExNSw3OCArOTQsMjkgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwo
V1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG8KIHZvaWQgSFRUUENv
b2tpZVN0b3JlOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29r
aWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildIChhdXRvJiYgYXBwQm91bmRDb29raWVzKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byog
cG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVy
YXRpb25zKCk7Ci0gICAgICAgIGlmICghcG9vbCkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBj
b29raWUgOiBhcHBCb3VuZENvb2tpZXMpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogcGVu
ZGluZ0Nvb2tpZXMgdXNlZCBmb3IgZGVmYXVsdFNlc3Npb24gYmVjYXVzZSBzZXNzaW9uIGNvb2tp
ZXMgY2Fubm90IGJlIHByb3BhZ2F0ZWQgdG8gTmV0d29yayBQcm9jZXNzIHdpdGggdWlQcm9jZXNz
Q29va2llU3RvcmFnZUlkZW50aWZpZXIuCi0gICAgICAgICAgICAgICAgaWYgKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
ICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgICAgICAgICAgc2V0Q29va2llSW5EZWZh
dWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5hZGRQZW5kaW5nQ29va2llKGNv
b2tpZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVu
dDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgY29va2llTWFuYWdl
ci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29v
a2llcywgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci0gICAgICAgIH0pOworICAgICAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9v
d25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgICAg
ICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCBhcHBCb3VuZENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsK
IH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpD
b29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xG
b3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBp
ZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAgICAgZGVsZXRlQ29v
a2llRnJvbURlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb29r
aWUpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tp
ZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgW3Bvb2wgPSBXVEZNb3Zl
KHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIGF1
dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5j
b29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29raWUobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wg
PSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9u
cygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAgZGVsZXRlQ29va2llc0luRGVm
YXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVBbGxDb29r
aWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgYXV0byYgY29va2llTWFu
YWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIo
KTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpKTsKICAgICAvLyBGSVhNRTogVGhlIENvbXBsZXRpb25IYW5kbGVyIHNob3Vs
ZCBiZSBwYXNzZWQgdG8gV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzLgog
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFdl
YkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5n
RGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAg
aWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5SW5E
ZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUocG9saWN5KTsKLSAgICAgICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldEhU
VFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBwb2xp
Y3ksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBt
dXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKKyAgICBhdXRv
JiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29v
a2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGlj
eShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1c2hDb29raWVzKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIyNywyMSAr
MTU3LDcgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXIm
IG9ic2VydmVyKQogCiAgICAgbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA9IG1ha2VVbmlx
dWU8QVBJV2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI+KCp0aGlzKTsKIAotICAgIGF1dG8q
IHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIEFTU0VSVCghbV9vYnNlcnZp
bmdVSVByb2Nlc3NDb29raWVzKTsKLQotICAgICAgICAvLyBMaXN0ZW4gZm9yIGNvb2tpZSBub3Rp
ZmljYXRpb25zIGluIHRoZSBVSVByb2Nlc3MgaW4gdGhlIG1lYW50aW1lLgotICAgICAgICBzdGFy
dE9ic2VydmluZ0NoYW5nZXNUb0RlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShbdGhpc10gKCkg
ewotICAgICAgICAgICAgY29va2llc0RpZENoYW5nZSgpOwotICAgICAgICB9KTsKLQotICAgICAg
ICBtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1l
bnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tp
ZU1hbmFnZXJQcm94eSA9ICZtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29r
aWVNYW5hZ2VyKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJP
YnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQ
cm94eU9ic2VydmVyKTsKIH0KIApAQCAtMjc2LDQ2ICsxOTIsMTAgQEAgdm9pZCBIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZXNEaWRDaGFuZ2UoKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1h
bmFnZXJEZXN0cm95ZWQoKQogewogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnVu
cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tp
ZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5
ID0gbnVsbHB0cjsKLQotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vz
c1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gcG9vbC0+
c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBtX29ic2Vy
dmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vz
cygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5y
ZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2ll
TWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCi12b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIEFTU0VSVCghbV9wcm9j
ZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xD
cmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclByb2Nl
c3NQb29sQ3JlYXRpb25MaXN0ZW5lcihbdGhpc10oV2ViUHJvY2Vzc1Bvb2wmIG5ld1Byb2Nlc3NQ
b29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPmlzQXNzb2NpYXRlZFByb2Nl
c3NQb29sKG5ld1Byb2Nlc3NQb29sKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAv
LyBOb3cgdGhhdCBhbiBhc3NvY2lhdGVkIHByb2Nlc3MgcG9vbCBleGlzdHMsIHdlIG5lZWQgdG8g
Zmx1c2ggdGhlIFVJIHByb2Nlc3MgY29va2llIHN0b3JlCi0gICAgICAgIC8vIHRvIG1ha2Ugc3Vy
ZSBhbnkgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIHdpdGhpbiB0aGUgbmV3IHByb2Nlc3MgcG9vbC4K
LSAgICAgICAgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgbmV3
UHJvY2Vzc1Bvb2wuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQotICAgICAgICBpZiAobV9jb29r
aWVNYW5hZ2VyUHJveHlPYnNlcnZlcikgewotICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1h
bmFnZXJQcm94eSA9IG5ld1Byb2Nlc3NQb29sLnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVN
YW5hZ2VyUHJveHk+KCk7Ci0gICAgICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5
LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29v
a2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgICAgICB9Ci0gICAgICAgIHVucmVnaXN0ZXJG
b3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBIVFRQ
Q29va2llU3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQot
ewotICAgIGlmIChtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpCi0gICAg
ICAgIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVy
KG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nl
c3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSAwOwotfQotCiAjaWYgIVBMQVRGT1JN
KENPQ09BKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tp
ZVN0b3JlKCkgeyB9CiBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBIVFRQQ29va2llU3RvcmU6Omdl
dEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKSB7IHJldHVybiB7IH07IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaApp
bmRleCBkNjIwYWRkYTRlN2Y4OTQ1NjYxOGEzZTIyZTFiZmQ0MzU3Nzc1YjE5Li5hMDVmNDE0MzBk
YjJiMjNkNDE3ODQwNzlhNGZiODZjNzQ2MGE3NTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCkBAIC04Myw5ICs4Myw2IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgSFRUUENvb2tpZVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZSYpOwogCi0gICAgdm9pZCByZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygp
OwotICAgIHZvaWQgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwot
CiAgICAgdm9pZCBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpOwogICAgIHN0YXRp
YyBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBnZXRBbGxEZWZhdWx0VUlQcm9jZXNzQ29va2llU3Rv
cmVDb29raWVzKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNz
Q29va2llU3RvcmUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAppbmRleCA1OGM1NDUzZjQ4OTg3ZjVlMWFmYWZlZjM0
YzQzMzM1ZjFiNGNjOTkwLi42NWY4YjUzZjViM2QzMDVjZjI4MGJhNWQzMGFhZTM3YjM5YWNmNDkx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKQEAgLTQx
MSwxMSArNDExLDYgQEAgdm9pZCBXS0NvbnRleHRQcmVjb25uZWN0VG9TZXJ2ZXIoV0tDb250ZXh0
UmVmLCBXS1VSTFJlZikKIHsKIH0KIAotV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldENv
b2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktp
dDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnN1cHBsZW1lbnQ8V2ViS2l0OjpX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCkpOwotfQotCiBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tD
b250ZXh0R2V0V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdL
V2Vic2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUoKTsKQEAgLTUyNywxMyArNTIyLDYg
QEAgdm9pZCBXS0NvbnRleHRTZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxl
ZChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVm
KS0+c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoZW5hYmxlKTsKIH0K
IAotdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXJUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0LCBib29sIGFsbG93cykKLXsKLSNpZiBFTkFC
TEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnNldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlmCi19Ci0K
IFdLRGljdGlvbmFyeVJlZiBXS0NvbnRleHRDb3B5UGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVz
KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewogICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZX
ZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+cGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzKCku
bGVha1JlZigpKTsKQEAgLTU3NSwxMSArNTYzLDYgQEAgdm9pZCBXS0NvbnRleHRTZXRGb250QWxs
b3dMaXN0KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS0FycmF5UmVmIGFycmF5UmVmKQogICAg
IFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRGb250QWxsb3dMaXN0KFdlYktpdDo6dG9J
bXBsKGFycmF5UmVmKSk7CiB9CiAKLXZvaWQgV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nl
c3MoV0tDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCkt
PnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0KIHZvaWQgV0tDb250ZXh0VGVybWluYXRl
U2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgV2ViS2l0Ojp0b0lt
cGwoY29udGV4dCktPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CkBAIC01ODcsNyArNTcwLDcg
QEAgdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYgY29u
dGV4dCkKIAogUHJvY2Vzc0lEIFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihX
S0NvbnRleHRSZWYgY29udGV4dFJlZikKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoY29u
dGV4dFJlZiktPm5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpOworICAgIHJldHVybiAwOwogfQog
CiB2b2lkIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihXS0NvbnRleHRSZWYgY29udGV4dFJl
ZiwgV0tTdHJpbmdSZWYgZG9tYWluUmVmLCBXS1N0cmluZ1JlZiBuYW1lUmVmLCBXS0FycmF5UmVm
IG1pbWVUeXBlc1JlZiwgV0tBcnJheVJlZiBleHRlbnNpb25zUmVmKQpAQCAtNjE5LDEyICs2MDIs
MTEgQEAgdm9pZCBXS0NvbnRleHRDbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZyhX
S0NvbnRleHRSZWYgY29udGV4dFJlZikKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+
Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKTsKIH0KIAotdm9pZCBXS0NvbnRl
eHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmLCBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCit2b2lkIFdLQ29udGV4
dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoV0tDb250ZXh0UmVmLCBib29sIHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29u
dGV4dFJlZiktPnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAgV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShXS0Nv
bnRleHRSZWYgY29udGV4dFJlZiwgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3Rv
cmUpCit2b2lkIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJl
ZiwgV0tXZWJzaXRlRGF0YVN0b3JlUmVmKQogewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRS
ZWYpLT5zZXRQcmltYXJ5RGF0YVN0b3JlKCpXZWJLaXQ6OnRvSW1wbCh3ZWJzaXRlRGF0YVN0b3Jl
KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oCmluZGV4IDFk
OGZhYjhhMTQ4NmFhZGI0OTQxNDRiOThmMTBlOTM2MzhkMGM1ZTYuLjJhYjZlZjg2ZjUzMGU3N2Y3
NGNiZDVkZjU4NjJhYzRkMzBiNzk4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dC5oCkBAIC0xNjgsNyArMTY4LDYgQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0
U3RvcE1lbW9yeVNhbXBsZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJl
ZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1FTlQoV0tXZWJzaXRl
RGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSk7CiAKIFdLX0VYUE9SVCBXS0FwcGxpY2F0aW9u
Q2FjaGVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKFdLQ29u
dGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1FTlQoV0tX
ZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSk7Ci1XS19FWFBPUlQgV0tDb29raWVN
YW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQp
IFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiBXS19FWFBPUlQgV0tHZW9sb2NhdGlvbk1hbmFnZXJSZWYg
V0tDb250ZXh0R2V0R2VvbG9jYXRpb25NYW5hZ2VyKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIFdL
X0VYUE9SVCBXS0ljb25EYXRhYmFzZVJlZiBXS0NvbnRleHRHZXRJY29uRGF0YWJhc2UoV0tDb250
ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiBX
S0NvbnRleHRHZXRLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyKFdLQ29udGV4dFJlZiBjb250ZXh0KSBX
S19DX0FQSV9ERVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1FTlQoV0tXZWJzaXRlRGF0YVN0b3JlR2V0
RGVmYXVsdERhdGFTdG9yZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S0NvbnRleHRQcml2YXRlLmgKaW5kZXggYTAyNTAxMWY3MGNjNjU5ZjVmYWEwOGE3ZDZjYmIzZmY1
NmVlNmEzOC4uZDgzOWNhY2IyOGJhNTY1ZGM5NWE4MzkzYmZjY2FiOTM4ZGFkY2M1OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaApAQCAt
ODMsMTEgKzgzLDggQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0V2FybUluaXRpYWxQcm9jZXNz
KFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIC8vIEF0IHNvbWUgcG9pbnQgaXQgc2hvdWxkIGJlIHJl
bW92ZWQuCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nlc3MoV0tD
b250ZXh0UmVmLCBib29sKTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlTmV0
d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFRlcm1p
bmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29udGV4dFJlZik7CiAKLVdLX0VYUE9SVCB2b2lkIFdLQ29u
dGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tD
b250ZXh0UmVmLCBib29sKTsKLQogdHlwZWRlZiB2b2lkICgqV0tDb250ZXh0SW52YWxpZE1lc3Nh
Z2VGdW5jdGlvbikoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUpOwogV0tfRVhQT1JUIHZvaWQgV0tD
b250ZXh0U2V0SW52YWxpZE1lc3NhZ2VGdW5jdGlvbihXS0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1
bmN0aW9uIGludmFsaWRNZXNzYWdlRnVuY3Rpb24pOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAKaW5kZXgg
OWRkYTU5MWM5NTE4OWFiMGMyNWFjNTU0NjZjMGEyYmZjMzkyN2ViYy4uYjc4YTkxZTMzZWRmOWUy
OTRiYjRkOGQ0YzBkZGY1N2NlNTAxNmI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCkBAIC02OSw2ICs2OSwx
MSBAQCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tXZWJzaXRlRGF0YVN0b3JlQ3JlYXRlV2l0aENv
bmZpZ3VyYXRpb24oV0tXZWJzaXRlRGF0YVN0bwogICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZSgqV2ViS2l0Ojp0b0ltcGwoY29uZmlndXJh
dGlvbiksIHNlc3Npb25JRCkubGVha1JlZigpKTsKIH0KIAordm9pZCBXS1dlYnNpdGVEYXRhU3Rv
cmVUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3Jl
KQoreworICAgIFdlYktpdDo6dG9JbXBsKGRhdGFTdG9yZSktPnRlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzKCk7Cit9CisKIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlUmVtb3ZlSVRQRGF0YUZvckRvbWFp
bihXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBXS1N0cmluZ1JlZiBob3N0LCB2
b2lkKiBjb250ZXh0LCBXS1dlYnNpdGVEYXRhU3RvcmVSZW1vdmVJVFBEYXRhRm9yRG9tYWluRnVu
Y3Rpb24gY2FsbGJhY2spCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0
b3JlUmVmLmgKaW5kZXggZTc3ZDA5YzEwN2QxZGEwNzgzZDA5YzA3ZTI4MDNkMDg3MTI1ZTQ4Yi4u
YzNmYTFiZjNmOTI0OGMyZmU0OWJlMTI0Mzk2NDQxMWY4MzFkMmE2YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKQEAg
LTUwLDYgKzUwLDkgQEAgV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0QWxsb3dz
QW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0aW5nKFcKIAogV0tfRVhQT1JUIHZvaWQg
V0tXZWJzaXRlRGF0YVN0b3JlQ2xlYXJDYWNoZWRDcmVkZW50aWFscyhXS1dlYnNpdGVEYXRhU3Rv
cmVSZWYgZGF0YVN0b3JlUmVmKTsKIAorV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3Jl
Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsK
K1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
KFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworCiBXS19FWFBPUlQgYm9vbCBXS1dl
YnNpdGVEYXRhU3RvcmVHZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFT
dG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiBkYXRhU3RvcmVSZWYsIGJvb2wgZW5hYmxlKTsKIHR5cGVkZWYgdm9pZCAoKldLV2Vic2l0ZURh
dGFTdG9yZVN0YXRpc3RpY3NFcGhlbWVyYWxGdW5jdGlvbikoYm9vbCBpc0VwaGVtZXJhbCwgdm9p
ZCogZnVuY3Rpb25Db250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KaW5kZXggZmYzMDk0OTg2YzI0M2QwNDc0ZjI1MmQzOTFl
NmNjYjc0ZjFmZWQ1Yi4uYTgwMmI5N2M3YjQxNmY5NmJiYTU0ZmViZTdhMWRkZDQzODNkMGJmNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bv
b2wubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bv
b2wubW0KQEAgLTQwNiwyOCArNDA2LDYgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNI
YXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMKICAgICBf
cHJvY2Vzc1Bvb2wtPmNsZWFyU3VwcG9ydGVkUGx1Z2lucygpOwogfQogCi0tICh2b2lkKV90ZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcwotewotICAgIF9wcm9jZXNzUG9vbC0+dGVybWluYXRlTmV0d29y
a1Byb2Nlc3MoKTsKLX0KLQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5Ci17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7Ci19Ci0KLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJv
Y2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKLXsK
LSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JU
ZXN0aW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxl
cildIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKLX0KLQotLSAodm9p
ZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5k
TmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQogLSAodm9pZClfdGVybWluYXRlU2Vydmlj
ZVdvcmtlcnMKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7
CkBAIC00MzUsMTIgKzQxMywxMiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hN
YXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogCiAtICh2b2lk
KV9zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOihCT09MKXVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MKIHsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNldFVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAg
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIH0KIAogLSAocGlkX3QpX25ldHdv
cmtQcm9jZXNzSWRlbnRpZmllcgogewotICAgIHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzSWRlbnRpZmllcigpOworICAgIHJldHVybiAwOwogfQogCiAtIChwaWRfdClfcHJld2Fy
bWVkUHJvY2Vzc0lkZW50aWZpZXIKQEAgLTU2MCwxOCArNTM4LDYgQEAgc3RhdGljIE5TRGljdGlv
bmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBI
YXNoTWFwPFMKICAgICBfcHJvY2Vzc1Bvb2wtPnNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdF
bmFibGVkKGVuYWJsZWQpOwogfQogCi0tICh2b2lkKV9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5k
OihCT09MKWJhY2tncm91bmQKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnN5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQoYmFja2dyb3VuZCk7Ci19Ci0KLS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRp
ZmljYXRlRm9yU2VydmljZVdvcmtlcjooQk9PTClhbGxvd3MKLXsKLSNpZiBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCi0gICAgX3Byb2Nlc3NQb29sLT5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZv
clNlcnZpY2VXb3JrZXIoYWxsb3dzKTsKLSNlbmRpZgotfQotCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKIC0gKGlkIDxfV0tHZW9sb2NhdGlvbkNvcmVMb2NhdGlvblByb3ZpZGVyPilfY29yZUxv
Y2F0aW9uUHJvdmlkZXIKIHsKQEAgLTYwNCwxMSArNTcwLDYgQEAgc3RhdGljIE5TRGljdGlvbmFy
eSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNo
TWFwPFMKICAgICB9KTsKIH0KIAotLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVu
dEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQKLXsKLSAgICByZXR1cm4gX3Byb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhlbnRpdGxlbWVu
dCk7Ci19Ci0KIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9u
U3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVjdGlvblNwYWNlCiB7CiAgICAgX3By
b2Nlc3NQb29sLT5jbGVhclBlcm1hbmVudENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNwYWNlKFdl
YkNvcmU6OlByb3RlY3Rpb25TcGFjZShwcm90ZWN0aW9uU3BhY2UpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgK
aW5kZXggNjc2OTAxNWUwODU1ODk5NGNkOGEyMTlhMTdhOWM2OGFkZTNiNTM4My4uYmY0OGNhMWM1
MmMyMjE5NzM2OGI4ODI5MDUwNzIyM2YwZjIwNmNkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgKQEAgLTg3
LDEwICs4Nyw2IEBACiAtIChfV0tEb3dubG9hZCAqKV9yZXN1bWVEb3dubG9hZEZyb21EYXRhOihO
U0RhdGEgKilyZXN1bWVEYXRhIHdlYnNpdGVEYXRhU3RvcmU6KFdLV2Vic2l0ZURhdGFTdG9yZSAq
KWRhdGFTdG9yZSAgcGF0aDooTlNTdHJpbmcgKilwYXRoIG9yaWdpbmF0aW5nV2ViVmlldzooV0tX
ZWJWaWV3ICopd2ViVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3Mo
V0tfSU9TX1RCQSkpOwogCiAvLyBUZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgb25seSB3aGls
ZSBubyB3ZWIgY29udGVudCBwcm9jZXNzZXMgYXJlIHJ1bm5pbmcuCi0tICh2b2lkKV90ZXJtaW5h
dGVOZXR3b3JrUHJvY2VzcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjAp
KTsKLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXiko
dm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJB
KSwgaW9zKFdLX0lPU19UQkEpKTsKLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNw
ZW5kSW1taW5lbnRseSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsK
LS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIC0gKHZvaWQpX3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogCiAvLyBUZXN0IG9u
bHkuCkBAIC0xMjIsMTMgKzExOCwxMCBAQAogLSAodm9pZClfcHJlY29ubmVjdFRvU2VydmVyOihO
U1VSTCAqKXNlcnZlclVSTCBXS19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKCJXS1dl
YlZpZXcuX3ByZWNvbm5lY3RUb1NlcnZlciIsIG1hY29zKDEwLjEzLjQsIFdLX01BQ19UQkEpLCBp
b3MoMTEuMywgV0tfSU9TX1RCQSkpOwogCiAvLyBUZXN0IG9ubHkuCi0tICh2b2lkKV9zZXRBbGxv
d3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSk7CiAtICh2b2lkKV9nZXRBY3RpdmVQ
YWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JUZXN0aW5nOihwaWRfdClwaWQgY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQoXikoTlNBcnJheTxOU1N0cmluZyAqPiAqKSljb21wbGV0aW9uSGFuZGxlciBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwotLSAoQk9PTClfbmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1l
bnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKHZvaWQp
X2NsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVj
dGlvblNwYWNlICopcHJvdGVjdGlvblNwYWNlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUp
LCBpb3MoMTMuMCkpOwogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0Nvb2tpZVN0
b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkLCBzZXR0ZXI9X3NldENvb2tpZVN0b3JhZ2VQYXJ0aXRp
b25pbmdFbmFibGVkOikgQk9PTCBfY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQgV0tf
QVBJX0RFUFJFQ0FURUQoIlBhcnRpdGlvbmVkIGNvb2tpZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0
ZWQiLCBtYWNvcygxMC4xMi4zLCAxMC4xNC40KSwgaW9zKDEwLjMsIDEyLjIpKTsKLS0gKHZvaWQp
X3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZCBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIAogLy8gVGVzdCBvbmx5LgogLSAodm9pZClf
c2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0aW5nV2l0aEZpcnN0UGFydHk6KE5TVVJM
ICopZmlyc3RQYXJ0eVVSTCB0aGlyZFBhcnR5OihOU1VSTCAqKXRoaXJkUGFydHlVUkwgc2hvdWxk
U2NoZWR1bGVOb3RpZmljYXRpb246KEJPT0wpc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24gY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5t
bQppbmRleCAyOThkOWNlYzllODRkOGE1MTIyMDY1Y2M5OTIzM2VmNGYwYjk1Mzg5Li5hZTljNDUw
Nzc5MDg2Y2MxZTMxMTRjZTEzZjJkMjE4OGU3ODdmMTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KQEAgLTYx
Nyw2ICs2MTcsMTEgQEAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6OldlYnNpdGVEYXRhUmVjb3JkPiB0
b1dlYnNpdGVEYXRhUmVjb3JkcyhOU0FycmF5ICpkYXRhUmVjb3IKICAgICB9KTsKIH0KIAorLSAo
Qk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICop
ZW50aXRsZW1lbnQKK3sKKyAgICByZXR1cm4gX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9j
ZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGVudGl0bGVtZW50KTsKK30KKwogLSAoaWQgPF9X
S1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4pX2RlbGVnYXRlCiB7CiAgICAgcmV0dXJuIF9kZWxl
Z2F0ZS5nZXQoKS5nZXQoKTsKQEAgLTY2OCw0ICs2NzMsMzIgQEAgc3RhdGljIFZlY3RvcjxXZWJL
aXQ6OldlYnNpdGVEYXRhUmVjb3JkPiB0b1dlYnNpdGVEYXRhUmVjb3JkcyhOU0FycmF5ICpkYXRh
UmVjb3IKICNlbmRpZgogfQogCistICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcworewor
ICAgIF93ZWJzaXRlRGF0YVN0b3JlLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworfQorCist
ICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQp
KWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3Jr
UHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IG1h
a2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKKyAgICB9KTsKK30KKworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5Cit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKKworfQorCistICh2b2lkKV9zZW5k
TmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5l
dHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7Cit9CisKKy0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7Cit9CisK
IEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCmluZGV4IDk5MzIwMTA0NmI1NTFjM2YyOGRm
MmRjMGEwMzQ2ZDdiYzc5YWM1ZjQuLjQyMTVkYjc0N2JhMzIyZmFlYjhhNDdlMTY3NWE2NTgzODE0
NzI2MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaApAQCAtODUsOSArODUsMTcgQEAgdHlw
ZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dlYnNpdGVEYXRhU3RvcmVGZXRjaE9wdGlv
bnMpIHsKIAogLSAodm9pZClfcmVuYW1lT3JpZ2luOihOU1VSTCAqKW9sZE5hbWUgdG86KE5TVVJM
ICopbmV3TmFtZSBmb3JEYXRhT2ZUeXBlczooTlNTZXQ8TlNTdHJpbmcgKj4gKilkYXRhVHlwZXMg
Y29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyOwogCist
IChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcg
KillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOworCiBAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHdlYWspIGlkIDxf
V0tXZWJzaXRlRGF0YVN0b3JlRGVsZWdhdGU+IF9kZWxlZ2F0ZSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwg
Y29weSkgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKl9jb25maWd1cmF0aW9uOwog
CistICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyBXS19BUElfQVZBSUxBQkxFKG1hY29z
KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9j
ZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19B
UElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9p
ZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJP
T0wpYmFja2dyb3VuZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOworCiBAZW5kCiAKIE5TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNw
cAppbmRleCAxZWU3M2ViYzBlYTAzNmY4NmIzZmU5NDQxNDkwNzJlNmFjNGRjNzY3Li43NzAxNDk5
ODM2ZWU0NGY5YWNmMGUyNzBkNzBjOTVkMTZiZTY3OGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcApAQCAt
MjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdENvb2tp
ZU1hbmFnZXIuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRl
ICJTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiV2ViQ29va2ll
TWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUuaCIK
QEAgLTU2LDYgKzU3LDEyIEBAIGVudW0gewogfTsKIAogc3RydWN0IF9XZWJLaXRDb29raWVNYW5h
Z2VyUHJpdmF0ZSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChkYXRhTWFuYWdlcik7CisgICAgICAgIHJldHVy
biB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoZGF0YU1hbmFnZXIpLm5ldHdv
cmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIH0KKwogICAgIFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoZGF0YU1hbmFnZXIpOwpA
QCAtNjQsOCArNzEsNyBAQCBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKIAog
ICAgIH5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUoKQogICAgIHsKLSAgICAgICAgZm9yIChh
dXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29s
cyhkYXRhTWFuYWdlcikpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklE
KCksIG51bGxwdHIpOworICAgICAgICBjb29raWVNYW5hZ2VyKCkuc2V0Q29va2llT2JzZXJ2ZXJD
YWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyKiBkYXRhTWFuYWdlcjsKQEAgLTEzOSwxMSArMTQ1LDkgQEAgV2ViS2l0Q29v
a2llTWFuYWdlciogd2Via2l0Q29va2llTWFuYWdlckNyZWF0ZShXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIqIGRhdGFNYW4KIHsKICAgICBXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyID0gV0VC
S0lUX0NPT0tJRV9NQU5BR0VSKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT09LSUVfTUFOQUdF
UiwgbnVsbHB0cikpOwogICAgIG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyID0gZGF0YU1hbmFn
ZXI7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpIHsKLSAgICAgICAg
cHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29r
aWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbbWFuYWdlcl0g
ewotICAgICAgICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxzW0NIQU5HRURdLCAw
KTsKLSAgICAgICAgfSk7Ci0gICAgfQorICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIo
KS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBb
bWFuYWdlcl0geworICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdF
RF0sIDApOworICAgIH0pOwogICAgIHJldHVybiBtYW5hZ2VyOwogfQogCkBAIC0xNzMsOCArMTc3
LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZShX
ZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLAogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVy
YWwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRh
TWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKS0+c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6
OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0
b3JhZ2UpKTsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuc2V0Q29va2llUGVy
c2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9T
b3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0b3JhZ2UpKTsKIH0KIAogLyoqCkBAIC0x
OTIsOCArMTk1LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xp
Y3koV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgV2ViS2kKIHsKICAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSk7CiAKLSAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xz
KG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9s
aWN5KSwgW10oKSB7IH0pOworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB0b0hUVFBD
b29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0pOwogfQogCiAvKioKQEAgLTIyNCw3
ICsyMjYsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeShX
ZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBHQ2FuYwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQo
KSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5
IHBvbGljeSkgeworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1v
dmUodGFzayldKFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CiAgICAg
ICAgIGdfdGFza19yZXR1cm5faW50KHRhc2suZ2V0KCksIHRvV2ViS2l0Q29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSkpOwogICAgIH0pOwogfQpAQCAtMjY5LDExICsyNzEsNyBAQCB2b2lkIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIs
IFNvdXBDb29raWUqCiAgICAgZ19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAgICAgR1JlZlB0
cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxl
LCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRl
biBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAg
ICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUg
Zmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFu
YWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQ
cm94eT4oKS0+c2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgeyBXZWJDb3Jl
OjpDb29raWUoY29va2llKSB9LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIG1hbmFn
ZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Np
b25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNr
KV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsK
ICAgICB9KTsKIH0KQEAgLTMyMCwxMSArMzE4LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFn
ZXJfZ2V0X2Nvb2tpZXMoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgY29uc3QgZ2NoYXIK
ICAgICBnX3JldHVybl9pZl9mYWlsKHVyaSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0g
YWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2Vy
RGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNh
bWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9j
ZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBv
b2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9j
ZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29r
aWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVU
RjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNv
b2tpZT4mIGNvb2tpZXMpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuZ2V0
Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZy
b21VVEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpDb29raWU+JiBjb29raWVzKSB7CiAgICAgICAgIEdMaXN0KiBjb29raWVzTGlzdCA9IG51bGxw
dHI7CiAgICAgICAgIGZvciAoYXV0byYgY29va2llIDogY29va2llcykKICAgICAgICAgICAgIGNv
b2tpZXNMaXN0ID0gZ19saXN0X3ByZXBlbmQoY29va2llc0xpc3QsIGNvb2tpZS50b1NvdXBDb29r
aWUoKSk7CkBAIC0zNzgsMTEgKzM3Miw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2Rl
bGV0ZV9jb29raWUoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpCiAgICAg
Z19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFk
b3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRh
dGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1l
IFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2Vz
cyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29s
LgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vz
c1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+ZGVsZXRlQ29v
a2llKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBXZWJDb3JlOjpDb29raWUoY29va2llKSwg
W3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5h
Z2VyKCkuZGVsZXRlQ29va2llKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBXZWJDb3JlOjpD
b29raWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNr
X3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcApp
bmRleCA4OWJlNTZhZDcxZDcxNTY5MTJhMjY5MTUzMDU3ZGY1MjdjZGQ0NDYwLi5jZmYwMzU4NmRm
OGExZmI5NmE2MmEwMTdhM2M0NmU1ZjQwZGUyZDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtNDA0LDcgKzQw
NCw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZChHT2JqZWN0KiBv
YmplY3QpCiAgICAgICAgIHByaXYtPndlYnNpdGVEYXRhTWFuYWdlciA9IGFkb3B0R1JlZih3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3KCJsb2NhbC1zdG9yYWdlLWRpcmVjdG9yeSIsIHBy
aXYtPmxvY2FsU3RvcmFnZURpcmVjdG9yeS5kYXRhKCksIG51bGxwdHIpKTsKIAogICAgIHByaXYt
PnByb2Nlc3NQb29sID0gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShjb25maWd1cmF0aW9uKTsKLSAg
ICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0UHJpbWFyeURhdGFTdG9yZSh3ZWJraXRXZWJzaXRlRGF0
YU1hbmFnZXJHZXREYXRhU3RvcmUocHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKSk7CiAg
ICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFVzZXJNZXNzYWdlSGFuZGxlcihbd2ViQ29udGV4dF0o
VXNlck1lc3NhZ2UmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJNZXNzYWdl
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAgIC8vIFNpbmsgdGhlIGZsb2F0aW5n
IHJlZi4KICAgICAgICAgR1JlZlB0cjxXZWJLaXRVc2VyTWVzc2FnZT4gdXNlck1lc3NhZ2UgPSB3
ZWJraXRVc2VyTWVzc2FnZUNyZWF0ZShXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CkBAIC0xNjAzLDggKzE2MDIsOCBAQCB2b2lkIHdlYmtpdF93ZWJfY29udGV4
dF9wcmVmZXRjaF9kbnMoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogaG9z
dAogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpKTsK
ICAgICBnX3JldHVybl9pZl9mYWlsKGhvc3RuYW1lKTsKIAotICAgIGlmIChjb250ZXh0LT5wcml2
LT5kbnNQcmVmZXRjaGVkSG9zdHMuYWRkKGhvc3RuYW1lKS5pc05ld0VudHJ5KQotICAgICAgICBj
b250ZXh0LT5wcml2LT5wcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVmZXRjaEROUyhTdHJpbmc6OmZyb21VVEY4KGhvc3RuYW1l
KSkpOworICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFn
ZXJHZXREYXRhU3RvcmUoY29udGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsK
KyAgICB3ZWJzaXRlRGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlByZWZldGNoRE5TKFN0cmluZzo6ZnJvbVVURjgoaG9zdG5hbWUpKSwgMCk7
CiAgICAgY29udGV4dC0+cHJpdi0+ZG5zUHJlZmV0Y2hIeXN0ZXJlcmlzLmltcHVsc2UoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRv
bWF0aW9uU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dl
YkF1dG9tYXRpb25TZXNzaW9uLmNwcAppbmRleCA0YWI0N2ZmZjU5MTFlZWMzN2U1NmJjNWJiYjMy
OWViYWVhN2QzODY1Li4zMDA2ZjRmYWU2YzQzYzI2YmY0MDgyMmI2ZGU4NjhlZjJlMDJjZmJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRp
b25TZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dl
YkF1dG9tYXRpb25TZXNzaW9uLmNwcApAQCAtMTM5Miw4ICsxMzkyLDggQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb24KIAogICAgIGNvb2tpZS5odHRwT25seSA9ICpodHRwT25seTsKIAotICAgIFdl
YkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldENv
b2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBb
Y2FsbGJhY2tdKCkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlciA9
IHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIo
KTsKKyAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgp
LnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBbY2FsbGJhY2tdKCkgewogICAgICAgICBjYWxsYmFj
ay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9KTsKIH0KQEAgLTE0MDksOCArMTQwOSw4IEBAIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246
OmRlbGV0ZUFsbENvb2tpZXMoCiAKICAgICBTdHJpbmcgaG9zdCA9IGFjdGl2ZVVSTC5ob3N0KCku
dG9TdHJpbmcoKTsKIAotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9
IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAg
IGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURh
dGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZO
ZWVkZWQoaG9zdCkgfSk7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2Vy
ID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdl
cigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhwYWdlLT53
ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQ
cmVmaXhJZk5lZWRlZChob3N0KSB9KTsKIAogICAgIHJldHVybiB7IH07CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oCmluZGV4IDQxYzBhMGZi
ZjUwNmVmYTE0MDhiY2VmOWFmOGE5MGI4NWExYWQwOGEuLjRmMzk4YjUzMGY2MDg1NzVjOTY3Yjgz
Yzc0ZmEyZjQzMjhmNmNlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1
eGlsaWFyeVByb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGls
aWFyeVByb2Nlc3NQcm94eS5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5BdXhpbGlhcnlQcm9jZXNzUHJveHkoKTsKIAogICAgIHZvaWQgY29ubmVjdCgpOwotICAgIHZv
aWQgdGVybWluYXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZSgpOwogCiAgICAgdmly
dHVhbCBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50LmgKaW5kZXggZGJlNDRmOTU5NDEwNTExMjE1MTI4ZDI5ZDIxNGVlZTA3
NGFhZjg0Yy4uNGM4NDVhMGVjNzI1NjU5Y2ZlNzljZWEzNWQzY2JhOTY2ODM0NjE0NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgKQEAgLTQxLDExICs0MSwxMSBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OwogCiBj
bGFzcyBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgZmluYWwgOiBwdWJsaWMgQVBJ
OjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgewotcHJpdmF0ZToKK3B1YmxpYzoKICAgICB2
b2lkIHN0YXJ0TG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYsIExlZ2Fj
eUN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGZpbmFs
OwogICAgIHZvaWQgc3RvcExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkm
LCBMZWdhY3lDdXN0b21Qcm90b2NvbElEKSBmaW5hbDsKICAgICB2b2lkIGludmFsaWRhdGUoTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkmKSBmaW5hbDsKLQorcHJpdmF0ZToKICAgICBI
YXNoTWFwPExlZ2FjeUN1c3RvbVByb3RvY29sSUQsIFJldGFpblB0cjxXS0N1c3RvbVByb3RvY29s
TG9hZGVyPj4gbV9sb2FkZXJNYXA7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQppbmRleCA3NmQ3YTY0MDQxYTI5MWQ1
ZjI5NzM1MTc2ZTMxZWE3MGY1ZWQ1NTZjLi4xOWVmY2E2YTY0MGNiMmYzMWMyYTg3NTUwNmIxZDY2
OWQ2ZGM3NmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
cm9jZXNzUG9vbENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQb29sQ29jb2EubW0KQEAgLTEzNCw4ICsxMzQsOSBAQCBzdGF0aWMgdm9pZCByZWdp
c3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCkKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRl
UHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQot
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFj
aFdlYnNpdGVEYXRhU3RvcmUoW2VuYWJsZWQgPSBwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCld
IChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdv
cmtQcm9jZXNzKCkuc2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChlbmFibGVkKTsKKyAgICB9
KTsKIAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIGlmICghbV9wcm9jZXNz
U3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCkpCkBAIC0xNjYsOCArMTY3
LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplKCkKICAgICBpZiAo
IVtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJXZWJL
aXRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciJdKQogICAgICAgICBpbnN0YWxsTWVtb3J5
UHJlc3N1cmVIYW5kbGVyKCk7CiAKLSAgICBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQobWFrZVVuaXF1ZTxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkpOwot
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogICAg
IGlmICghX01HQ2FjaGVWYWxpZCgpKSB7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIF57
CkBAIC00OTMsMjIgKzQ5Miw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhCiAKICAgICBOU1Vz
ZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVs
dHNdOwogCi0gICAgewotICAgICAgICBib29sIGlzU2FmYXJpID0gZmFsc2U7Ci0gICAgICAgIGJv
b2wgaXNNaW5pQnJvd3NlciA9IGZhbHNlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
ICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTW9iaWxlU2FmYXJpKCk7
Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNNaW5p
QnJvd3NlcigpOwotI2VsaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBpc1NhZmFyaSA9IFdlYkNv
cmU6Ok1hY0FwcGxpY2F0aW9uOjppc1NhZmFyaSgpOwotICAgICAgICBpc01pbmlCcm93c2VyID0g
V2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzTWluaUJyb3dzZXIoKTsKLSNlbmRpZgotICAgICAg
ICBpZiAoaXNTYWZhcmkgfHwgaXNNaW5pQnJvd3NlcikgewotICAgICAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0
cFByb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0cmluZyAqKVdl
YktpdDJIVFRQUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cHNQcm94
eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcgKilXZWJLaXQy
SFRUUFNQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBwYXJhbWV0
ZXJzLm5ldHdvcmtBVFNDb250ZXh0ID0gYWRvcHRDRihfQ0ZOZXR3b3JrQ29weUFUU0NvbnRleHQo
KSk7CiAKICAgICBwYXJhbWV0ZXJzLnNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVy
ID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0U3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRs
ZXJEZWZhdWx0c0tleV07CkBAIC01MjIsMTIgKzUwNSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhCiAgICAgTlNOdW1iZXIgKmRhdGFiYXNlRW5hYmxlZFZhbHVlID0gW2RlZmF1bHRzIG9iamVj
dEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkludGVybmFsRGVidWclQCIsIFdl
YlByZWZlcmVuY2VzS2V5Ojppc0lUUERhdGFiYXNlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCldXTsKICAgICBpZiAoZGF0YWJhc2VFbmFibGVkVmFsdWUpCiAgICAgICAgIHBhcmFt
ZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBkYXRhYmFzZUVuYWJsZWRWYWx1ZS5ib29s
VmFsdWU7Ci0gICAgZWxzZQotICAgICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFi
YXNlID0gbV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLmlzSVRQRGF0YWJhc2VFbmFi
bGVkKCk7CiAKICAgICBwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZSA9IFtkZWZhdWx0cyBib29sRm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRXhw
ZXJpbWVudGFsJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6YWRDbGlja0F0dHJpYnV0aW9uRGVidWdN
b2RlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKLQotICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFw
cEhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbiA9IGhhc1JlcXVlc3Rl
ZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpwbGF0Zm9ybUludmFsaWRhdGVDb250ZXh0KCkKQEAgLTYwNiwxMSArNTg1LDYgQEAgYm9v
bCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpIGNvbnN0CiAgICAg
cmV0dXJuICFtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIudmFsdWUoKSAmJiAhbV9wcm9jZXNz
U3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCk7CiB9CiAKLWJvb2wgV2Vi
UHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0
IFN0cmluZyYgZW50aXRsZW1lbnQpCi17Ci0gICAgcmV0dXJuIFdURjo6aGFzRW50aXRsZW1lbnQo
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwgZW50
aXRsZW1lbnQudXRmOCgpLmRhdGEoKSk7Ci19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAm
JiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiBmbG9hdCBXZWJQcm9jZXNzUG9vbDo6ZGlzcGxheUJy
aWdodG5lc3MoKQogewpAQCAtOTQ3LDIzICs5MjEsNCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpy
ZWdpc3RlckhpZ2hEeW5hbWljUmFuZ2VDaGFuZ2VDYWxsYmFjaygpCiB9CiAjZW5kaWYKIAotT1NP
YmplY3RQdHI8eHBjX29iamVjdF90PiBXZWJQcm9jZXNzUG9vbDo6eHBjRW5kcG9pbnRNZXNzYWdl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lbmRwb2ludE1lc3NhZ2U7Ci19Ci0KLXZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKE9T
T2JqZWN0UHRyPHhwY19vYmplY3RfdD4gZW5kcG9pbnRNZXNzYWdlKQotewotICAgIG1fZW5kcG9p
bnRNZXNzYWdlID0gZW5kcG9pbnRNZXNzYWdlOwotCi0gICAgZm9yIChhdXRvIHByb2Nlc3MgOiBt
X3Byb2Nlc3NlcykgewotICAgICAgICBpZiAocHJvY2Vzcy0+c3RhdGUoKSAhPSBBdXhpbGlhcnlQ
cm9jZXNzUHJveHk6OlN0YXRlOjpSdW5uaW5nKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmICghcHJvY2Vzcy0+Y29ubmVjdGlvbigpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGF1dG8gY29ubmVjdGlvbiA9IHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVj
dGlvbigpOwotICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbiwg
ZW5kcG9pbnRNZXNzYWdlLmdldCgpKTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJv
eHkuY3BwCmluZGV4IGM1ZGU0ZTdkMGY1OTE5NGY0M2EwMjNiMDg5ZTM3MmM1OGNmOGVlMDYuLmY3
Y2ZmODUyZjBiYTZkMDE1NTExNjVkZDhhOWY3ZDU3NjNiMDA3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAKQEAgLTc1LDgg
Kzc1LDggQEAgdm9pZCBEb3dubG9hZFByb3h5OjpjYW5jZWwoKQogICAgIGlmICghbV9wcm9jZXNz
UG9vbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJveHkqIG5l
dHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxEb3du
bG9hZChtX2Rvd25sb2FkSUQpLCAwKTsKKyAgICBpZiAobV9kYXRhU3RvcmUpCisgICAgICAgIG1f
ZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2FkSUQpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFBy
b3h5OjppbnZhbGlkYXRlKCkKQEAgLTEwMywxNSArMTAzLDEzIEBAIFdlYlBhZ2VQcm94eSogRG93
bmxvYWRQcm94eTo6b3JpZ2luYXRpbmdQYWdlKCkgY29uc3QKICNpZiBQTEFURk9STShDT0NPQSkK
IHZvaWQgRG93bmxvYWRQcm94eTo6cHVibGlzaFByb2dyZXNzKGNvbnN0IFVSTCYgVVJMKQogewot
ICAgIGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICBpZiAoIW1fZGF0YVN0b3JlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5k
bGU7Ci0gICAgICAgIGJvb2wgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNpb246
OlR5cGU6OlJlYWRXcml0ZSwgaGFuZGxlKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVk
U2FuZGJveEV4dGVuc2lvbiwgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24pOwotICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxpc2hEb3dubG9h
ZFByb2dyZXNzKG1fZG93bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKLSAgICB9CisgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZTsKKyAgICBib29sIGNyZWF0ZWRTYW5kYm94RXh0
ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKFVSTC5maWxlU3lzdGVtUGF0
aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIGhhbmRsZSk7CisgICAgQVNT
RVJUX1VOVVNFRChjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiwgY3JlYXRlZFNhbmRib3hFeHRlbnNp
b24pOworICAgIG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9ncmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwg
aGFuZGxlKSwgMCk7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCiAKQEAgLTEzMSwxMSAr
MTI5LDEwIEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkU3RhcnQoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dlCiAKIHZvaWQgRG93bmxvYWRQcm94eTo6
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JiYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIHVpbnQ2NF90IGNoYWxsZW5nZUlEKQogewotICAg
IGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wgfHwgIW1fZGF0YVN0
b3JlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
UHJveHkgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShhdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX3Byb2Nlc3NQb29s
LT5uZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKSksIG51bGxwdHIpOwotCisgICAgYXV0byBh
dXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94
eTo6Y3JlYXRlKFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBjaGFsbGVuZ2VJRCwg
bWFrZVJlZigqbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpKSwgbnVs
bHB0cik7CiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UoKnRoaXMsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHku
Z2V0KCkpOwogfQogCkBAIC0xNDYsMTUgKzE0MywxMCBAQCB2b2lkIERvd25sb2FkUHJveHk6Ondp
bGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiBwcm9wb3NlZFJlcXVlc3QsIGNvbnN0IFJl
cwogCiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS53aWxsU2VuZFJlcXVlc3Qo
KnRoaXMsIFdURk1vdmUocHJvcG9zZWRSZXF1ZXN0KSwgcmVkaXJlY3RSZXNwb25zZSwgW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oUmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVx
dWVzdCkgewogICAgICAgICBtX3JlZGlyZWN0Q2hhaW4uYXBwZW5kKG5ld1JlcXVlc3QudXJsKCkp
OwotCi0gICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9wcm9jZXNzUG9vbCkKKyAgICAgICAg
aWYgKCFwcm90ZWN0ZWRUaGlzLT5tX2RhdGFTdG9yZSkKICAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBhdXRvKiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVjdGVkVGhpcy0+bV9wcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzc1By
b3h5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzUHJveHkt
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZVdpbGxTZW5kUmVxdWVzdChw
cm90ZWN0ZWRUaGlzLT5tX2Rvd25sb2FkSUQsIG5ld1JlcXVlc3QpLCAwKTsKKyAgICAgICAgYXV0
byYgbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb3RlY3RlZFRoaXMtPm1fZGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpOworICAgICAgICBuZXR3b3JrUHJvY2Vzc1Byb3h5LnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZVdpbGxTZW5kUmVxdWVzdChwcm90ZWN0ZWRUaGlzLT5t
X2Rvd25sb2FkSUQsIG5ld1JlcXVlc3QpLCAwKTsKICAgICB9KTsKIH0KIApAQCAtMTc5LDE2ICsx
NzEsMTQgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0
ZWRGaWxlbmFtZUFzeW5jKERvd25sb2FkSUQgZG93bmwKICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVu
dCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKCp0aGlzLCBSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFt
ZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRvd25sb2FkSUQgPSBk
b3dubG9hZElEXSAoQWxsb3dPdmVyd3JpdGUgYWxsb3dPdmVyd3JpdGUsIFN0cmluZyBkZXN0aW5h
dGlvbikgeworICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGlu
YXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJlc291cmNlUmVzcG9uc2VCYXNlOjpz
YW5pdGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKSwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxvYWRJRF0gKEFsbG93T3ZlcndyaXRlIGFs
bG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsKICAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgICAgIGlmICghZGVzdGlu
YXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGUoZGVzdGluYXRpb24sIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgICAg
ICBpZiAoIW1fZGF0YVN0b3JlKQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oZG93bmxvYWRJRCwgZGVz
dGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGFsbG93T3ZlcndyaXRlID09IEFsbG93
T3ZlcndyaXRlOjpZZXMpLCAwKTsKKyAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rv
d25sb2FkRGVzdGluYXRpb24oZG93bmxvYWRJRCwgZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNp
b25IYW5kbGUsIGFsbG93T3ZlcndyaXRlID09IEFsbG93T3ZlcndyaXRlOjpZZXMpLCAwKTsKICAg
ICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkUHJveHlNYXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkUHJveHlNYXAuY3BwCmluZGV4IDc2YTA3MTU3YjU5MWFhY2U1MGYxNWQxNTI1ZGJj
ZmI4YzZhNGJiYzguLmQ3NGE4ZmE2YzY0Yzg4NjM1ZjllYjc1Y2E3M2U3MGZkOTQ2Y2EwMmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQ
cm94eU1hcC5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBEb3du
bG9hZFByb3h5TWFwOjpEb3dubG9hZFByb3h5TWFwKE5ldHdvcmtQcm9jZXNzUHJveHkmIHByb2Nl
c3MpCi0gICAgOiBtX3Byb2Nlc3MobWFrZVdlYWtQdHIocHJvY2VzcykpCisgICAgOiBtX3Byb2Nl
c3MocHJvY2VzcykKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAsIG1fc2hvdWxkVGFrZUFzc2Vy
dGlvbihXVEY6OnByb2Nlc3NIYXNFbnRpdGxlbWVudCgiY29tLmFwcGxlLm11bHRpdGFza2luZy5z
eXN0ZW1hcHBhc3NlcnRpb25zIikpCiAjZW5kaWYKQEAgLTcwLDE0ICs3MCwxMiBAQCB2b2lkIERv
d25sb2FkUHJveHlNYXA6OnBsYXRmb3JtRGVzdHJveSgpCiAKIHZvaWQgRG93bmxvYWRQcm94eU1h
cDo6YXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKQogewotICAgIGlmIChtX3Byb2Nlc3Mp
Ci0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxp
Y2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCksIDApOworICAgIG1fcHJvY2Vzcy5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7
CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3Jv
dW5kKCkKIHsKLSAgICBpZiAobV9wcm9jZXNzKQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKSwg
MCk7CisgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNh
dGlvbldpbGxFbnRlckZvcmVncm91bmQoKSwgMCk7CiB9CiAKIERvd25sb2FkUHJveHkmIERvd25s
b2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0
b3JlLCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8s
IFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQpAQCAtOTIsMTMgKzkwLDEyIEBAIERvd25s
b2FkUHJveHkmIERvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURh
dGFTdG9yZSYgZGF0YVN0b3JlCiAgICAgICAgIG1fZG93bmxvYWRVSUFzc2VydGlvbiA9IG1ha2VV
bmlxdWU8UHJvY2Vzc0Fzc2VydGlvbj4oZ2V0Q3VycmVudFByb2Nlc3NJRCgpLCAiV2ViS2l0IGRv
d25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVuYm91bmRlZE5ldHdvcmtpbmcpOwog
CiAgICAgICAgIEFTU0VSVCghbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24pOwotICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX3Byb2Nlc3MpOwotICAgICAgICBtX2Rvd25sb2FkTmV0d29ya2lu
Z0Fzc2VydGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fzc2VydGlvbj4obV9wcm9jZXNzLT5wcm9j
ZXNzSWRlbnRpZmllcigpLCAiV2ViS2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5
cGU6OlVuYm91bmRlZE5ldHdvcmtpbmcpOworICAgICAgICBtX2Rvd25sb2FkTmV0d29ya2luZ0Fz
c2VydGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fzc2VydGlvbj4obV9wcm9jZXNzLnByb2Nlc3NJ
ZGVudGlmaWVyKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6
VW5ib3VuZGVkTmV0d29ya2luZyk7CiAKICAgICAgICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3Bl
bnNpb24sICJVSVByb2Nlc3MgdG9vayAnV2ViS2l0IGRvd25sb2FkcycgYXNzZXJ0aW9ucyBmb3Ig
VUlQcm9jZXNzIGFuZCBOZXR3b3JrUHJvY2VzcyIpOwogICAgIH0KIAotICAgIG1fcHJvY2Vzcy0+
YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCksIGRvd25s
b2FkUHJveHkuZ2V0KCkpOworICAgIG1fcHJvY2Vzcy5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRQcm94eS0+
ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSwgZG93bmxvYWRQcm94eS5nZXQoKSk7CiAKICAgICBy
ZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KQEAgLTEwOSwxMiArMTA2LDkgQEAgdm9pZCBEb3dubG9h
ZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKERvd25sb2FkUHJveHkmIGRvd25sb2FkUHJveHkp
CiAKICAgICBSRUxFQVNFX0xPRyhMb2FkaW5nLCAiUmVtb3ZpbmcgZG93bmxvYWQgJSIgUFJJdTY0
ICIgZnJvbSBVSVByb2Nlc3MgRG93bmxvYWRQcm94eU1hcCIsIGRvd25sb2FkSUQuZG93bmxvYWRJ
RCgpKTsKIAotICAgIC8vIFRoZSBEb3dubG9hZFByb3h5IG1heSBiZSBob2xkaW5nIHRoZSBsYXN0
IHJlZmVyZW5jZSB0byB0aGUgcHJvY2VzcyBwb29sLgotICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vz
c1Bvb2wgPSBtYWtlUmVmUHRyKG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKSk7Ci0KICAgICBBU1NF
UlQobV9kb3dubG9hZHMuY29udGFpbnMoZG93bmxvYWRJRCkpOwogCi0gICAgbV9wcm9jZXNzLT5y
ZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOworICAgIG1fcHJvY2Vzcy5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogICAgIGRvd25sb2FkUHJveHkuaW52
YWxpZGF0ZSgpOwogICAgIG1fZG93bmxvYWRzLnJlbW92ZShkb3dubG9hZElEKTsKIApAQCAtMTMz
LDE1ICsxMjcsMTMgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFwOjppbnZhbGlkYXRlKCkKICAgICBm
b3IgKGNvbnN0IGF1dG8mIGRvd25sb2FkIDogbV9kb3dubG9hZHMudmFsdWVzKCkpIHsKICAgICAg
ICAgZG93bmxvYWQtPnByb2Nlc3NEaWRDbG9zZSgpOwogICAgICAgICBkb3dubG9hZC0+aW52YWxp
ZGF0ZSgpOwotICAgICAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdl
czo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxv
YWRJRCgpLmRvd25sb2FkSUQoKSk7CisgICAgICAgIG1fcHJvY2Vzcy5yZW1vdmVNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93
bmxvYWQtPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOwogICAgIH0KIAogICAgIG1fZG93bmxv
YWRzLmNsZWFyKCk7CiAgICAgbV9kb3dubG9hZFVJQXNzZXJ0aW9uID0gbnVsbHB0cjsKICAgICBt
X2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbiA9IG51bGxwdHI7CiAgICAgUkVMRUFTRV9MT0co
UHJvY2Vzc1N1c3BlbnNpb24sICJVSVByb2Nlc3MgRG93bmxvYWRQcm94eU1hcCBpbnZhbGlkYXRl
ZCAtIFJlbGVhc2VkICdXZWJLaXQgZG93bmxvYWRzJyBhc3NlcnRpb25zIGZvciBVSVByb2Nlc3Mg
YW5kIE5ldHdvcmtQcm9jZXNzIik7Ci0KLSAgICBtX3Byb2Nlc3MgPSBudWxscHRyOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCmluZGV4IDNiZTIwNzlhMGYyYzRiNTM3MDYyY2Ux
MzAwZTFjZDVkYTQ0NGZmYmUuLjRmYTAwMWJkN2ZhZTFjZWQwMjRkMmI5MWYyMDE3MGZmOTk0NTI4
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkUHJveHlNYXAuaApAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZv
cm1DcmVhdGUoKTsKICAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOwogCi0gICAgV2Vha1B0cjxO
ZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3M7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYg
bV9wcm9jZXNzOwogICAgIEhhc2hNYXA8RG93bmxvYWRJRCwgUmVmUHRyPERvd25sb2FkUHJveHk+
PiBtX2Rvd25sb2FkczsKIAogICAgIGJvb2wgbV9zaG91bGRUYWtlQXNzZXJ0aW9uIHsgZmFsc2Ug
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJv
dG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5LmNwcAppbmRleCA4YzIzYmJlOGMwNmExNTk5Y2I5YjkxNmEwYjMyYWZiMzc3
ODNmMzA1Li5kNmMzMzIzZGQ5M2U2OWY1NmFkZjZiZTBkMmExYjE0ZjA4MjI0NTEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHkuY3BwCkBAIC00NCwxNyArNDQsMTcgQEAgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHk6On5MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgpCiAKIHZvaWQgTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyhMZWdhY3lDdXN0b21Qcm90
b2NvbElEIGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdGFydExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3Rv
Y29sSUQsIHJlcXVlc3QpOworICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5jdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQoKS5zdGFydExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQsIHJl
cXVlc3QpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9w
TG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1c3RvbVByb3RvY29sSUQpCiB7Ci0gICAg
bV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50KCkuc3RvcExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOworICAgIG1fbmV0
d29ya1Byb2Nlc3NQcm94eS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGlu
ZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94
eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUo
KnRoaXMpOworICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5jdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQoKS5pbnZhbGlkYXRlKCp0aGlzKTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2Nv
bE1hbmFnZXJQcm94eTo6d2FzUmVkaXJlY3RlZFRvUmVxdWVzdChMZWdhY3lDdXN0b21Qcm90b2Nv
bElEIGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHkuY3BwCmluZGV4IGMxZjQ3MDhiODFjZmE1M2FiMTIyYzI5NDQ2NzVlNzgyNTE2NzEy
MWYuLmYzZGI1MTUxOWQ2Y2JiNGFiZTdiZmExZTIxMGNjYjg3OTMzMTczMWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIK
IAogI2luY2x1ZGUgIkFQSUNvbnRlbnRSdWxlTGlzdC5oIgorI2luY2x1ZGUgIkFQSUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudC5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
UHJveHkuaCIKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbk1hbmFnZXIuaCIKICNpbmNsdWRlICJE
b3dubG9hZFByb3h5TWFwLmgiCkBAIC0zNSw2ICszNiw3IEBACiAjaW5jbHVkZSAiTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjZW5kaWYKKyNpbmNsdWRlICJMZWdhY3lHbG9i
YWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29u
dGVudFJ1bGVMaXN0TWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uSW5mby5oIgpAQCAtNDgsNiArNTAsNyBAQAogI2luY2x1ZGUgIlNob3VsZEdyYW5k
ZmF0aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNp
bmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5oIgorI2luY2x1ZGUgIldlYkNvb2tp
ZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2luY2x1ZGUg
IldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NNZXNzYWdlcy5oIgpAQCAtNjAs
NiArNjMsNyBAQAogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVDbGllbnQuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaXN0cmFibGVE
b21haW4uaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CiAjaW5jbHVkZSA8
d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKICNpZiBFTkFCTEUoU0VDX0lURU1fU0hJTSkKQEAg
LTcwLDIwICs3NCwxMTggQEAKICNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KICNl
bmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwogI2RlZmluZSBNRVNTQUdFX0NIRUNLKGFzc2Vy
dGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlvbiwgY29ubmVjdGlvbigpKQogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1OZXR3b3JrUHJvY2Vz
c1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkK
LSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShwcm9jZXNzUG9vbC5hbHdheXNSdW5zQXRCYWNr
Z3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJvY2Vzc1Bvb2wocHJvY2Vzc1Bvb2wpCitzdGF0
aWMgSGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5Kj4mIG5ldHdvcmtQcm9jZXNzZXNTZXQoKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8SGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5Kj4+IHNldDsKKyAgICByZXR1
cm4gc2V0OworfQorCitWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkKK3sKKyAgICBWZWN0b3I8UmVmPE5ldHdv
cmtQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXM7CisgICAgcHJvY2Vzc2VzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobmV0d29ya1Byb2Nlc3Nlc1NldCgpLnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA6IG5ldHdvcmtQcm9jZXNzZXNTZXQoKSkKKyAgICAgICAgcHJvY2Vzc2Vz
LnVuY2hlY2tlZEFwcGVuZCgqbmV0d29ya1Byb2Nlc3MpOworICAgIHJldHVybiBwcm9jZXNzZXM7
Cit9CisKK1JlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkZWZh
dWx0TmV0d29ya1Byb2Nlc3MoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8
TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nlc3M7CisgICAgaWYgKCFwcm9jZXNzLmdldCgpKQor
ICAgICAgICBwcm9jZXNzLmdldCgpID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlKCk7Cisg
ICAgcmV0dXJuICpwcm9jZXNzLmdldCgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnRlcm1pbmF0ZSgpCit7CisgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Ojp0ZXJtaW5hdGUoKTsK
K30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9O
ZXdQcm9jZXNzKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgLy8g
RklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBXZWJL
aXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCisgICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlz
IG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91ciBBUElzLgor
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYuCisg
ICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgeworICAgICAgICBjYWxsT25NYWluUnVuTG9vcEFu
ZFdhaXQoW3RoaXNdIHsKKyAgICAgICAgICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1By
b2Nlc3MoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3Rl
cmVkQXNTZWN1cmUgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRv
bigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmUoKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hl
bWVzUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVj
dG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFz
QnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KCkpOworICAgIHBhcmFtZXRlcnMudXJsU2No
ZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdz
OjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTG9jYWwoKSk7CisgICAgcGFyYW1ldGVy
cy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xv
YmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsK
KyAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xl
dG9uKCkuY2FjaGVNb2RlbCgpOworICAgIGZvciAoYXV0byYgc2NoZW1lIDogV2ViUHJvY2Vzc1Bv
b2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQorICAgICAgICBwYXJh
bWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hl
bWUpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKFN0cmluZyBjb29raWVTdG9y
YWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsg
IWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVj
dG9yeSwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
KyAgICBpZiAoU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29s
OjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7ICFjb250YWluZXJDYWNoZXNEaXJlY3Rvcnku
aXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFk
V3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRh
aW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgaWYgKFN0cmluZyBwYXJl
bnRCdW5kbGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5
KCk7ICFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOworI2VuZGlmCisgICAgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOworICAgIHBhcmFtZXRlcnMuZGF0YVN0b3Jl
UGFyYW1ldGVycyA9IGRhdGFTdG9yZVBhcmFtZXRlcnMoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsK
K30KKworVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpkYXRhU3RvcmVQYXJhbWV0ZXJzKCkKK3sKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnM+IHBhcmFtZXRlcnM7CisgICAgZm9yIChhdXRvJiBzdG9yZSA6IG1fd2Vic2l0
ZURhdGFTdG9yZXMpCisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHN0b3JlLnBhcmFtZXRlcnMo
KSk7CisgICAgcmV0dXJuIHBhcmFtZXRlcnM7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQ
b29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkKK3sKKyAgICBmb3IgKGF1dG8qIHBy
b2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAg
IGlmIChwcm9jZXNzUG9vbC0+YWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0
aWMgYm9vbCBhbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKQor
eworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vz
c1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5zaG91bGRUYWtlVUlCYWNrZ3Jv
dW5kQXNzZXJ0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
KCkKKyAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShhbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNB
dEJhY2tncm91bmRQcmlvcml0eSgpKQogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09M
X01BTkFHRVIpCisgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVl
UmVmPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICAgICAsIG1fY3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHkoKnRoaXMpCisjZWxzZQorICAgICwgbV9jdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZVJlZjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudD4oKSkKICNlbmRpZgotICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNo
b3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fdGhyb3R0bGVyKCp0aGlz
LCBhbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAs
IG1fY29va2llTWFuYWdlcihXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcykpCiB7
CiAgICAgY29ubmVjdCgpOworICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3Mo
KTsKKyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuYWRkKHRoaXMpOwogfQogCiBOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgpCkBAIC05OCw2ICsyMDAsNyBAQCBOZXR3
b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgpCiAKICAgICBpZiAobV9kb3du
bG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAtPmludmFsaWRhdGUoKTsK
KyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkucmVtb3ZlKHRoaXMpOwogfQogCiB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hP
cHRpb25zJiBsYXVuY2hPcHRpb25zKQpAQCAtMTA1LDE1ICsyMDgsMTIgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0
aW9ucyYgbGF1bmMKICAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID0gUHJvY2Vzc0xhdW5j
aGVyOjpQcm9jZXNzVHlwZTo6TmV0d29yazsKICAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6Omdl
dExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7CiAKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5z
aG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkgewotICAg
ICAgICBwcm9jZXNzUG9vbCgpLnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hG
YWlsRm9yVGVzdGluZyhmYWxzZSk7Ci0gICAgICAgIGxhdW5jaE9wdGlvbnMuc2hvdWxkTWFrZVBy
b2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7CisgICAgZm9yIChhdXRvKiBwcm9jZXNz
UG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAo
cHJvY2Vzc1Bvb2wtPnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZygpKSB7CisgICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5leHROZXR3
b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKKyAgICAgICAgICAgIGxhdW5j
aE9wdGlvbnMuc2hvdWxkTWFrZVByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7Cisg
ICAgICAgIH0KICAgICB9Ci0KLSNpZiBQTEFURk9STShQTEFZU1RBVElPTikKLSAgICBsYXVuY2hP
cHRpb25zLnByb2Nlc3NQYXRoID0gbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc1BhdGgoKTsK
LSAgICBsYXVuY2hPcHRpb25zLnVzZXJJZCA9IG1fcHJvY2Vzc1Bvb2wudXNlcklkKCk7Ci0jZW5k
aWYKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMTY2LDEyICsyNjYsMTIgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3Vu
ZCkKICAgICB9CiB9CiAKLURvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0
ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZv
LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKK0Rvd25sb2FkUHJveHkmIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0
b3JlLCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQ
cm94eSogb3JpZ2luYXRpbmdQYWdlKQogewogICAgIGlmICghbV9kb3dubG9hZFByb3h5TWFwKQog
ICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAgPSBtYWtlVW5pcXVlPERvd25sb2FkUHJveHlNYXA+
KCp0aGlzKTsKIAotICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2Fk
UHJveHkoZGF0YVN0b3JlLCBtX3Byb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5m
bywgb3JpZ2luYXRpbmdQYWdlKTsKKyAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVh
dGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwg
ZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0
aW9uPiBmZXRjaE9wdGlvbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKFdlYnNpdGVEYXRhKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIzNyw4ICszMzcsOCBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpCiB7CiAgICAgY2xlYXJDYWxsYmFja1N0
YXRlcygpOwogCi0gICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIgdG8gZm9y
Z2V0IGFib3V0IHRoaXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1c2UgdXMg
dG8gYmUgZGVsZXRlZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgq
dGhpcyk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQ
cm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzQ3Jhc2hl
ZCgqdGhpcyk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y2xlYXJDYWxsYmFja1N0
YXRlcygpCkBAIC0yNTgsOSArMzU4LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRS
ZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGUKICAgICBp
ZiAoZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVj
b2RlcikpCi0gICAgICAgIHJldHVybjsKLQogICAgIGRpZFJlY2VpdmVOZXR3b3JrUHJvY2Vzc1By
b3h5TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKIH0KIApAQCAtMjc0LDggKzM3MSw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
Q2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29s
ID0gbWFrZVJlZihtX3Byb2Nlc3NQb29sKTsKLQogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXAp
CiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+aW52YWxpZGF0ZSgpOwogI2lmIEVOQUJMRShM
RUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCkBAIC0zMzEsMTEgKzQyNiw2IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBB
TDo6U2Vzc2lvbklEIHNlc3NpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXRv
cE9yaWdpbiB8fCAhbV9wcm9jZXNzUG9vbC5pc1NlcnZpY2VXb3JrZXJQYWdlSUQocGFnZUlEKSkg
ewotICAgICAgICBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uoc2Vzc2lvbklELCBXVEZN
b3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
ICAgICBXZWJQYWdlUHJveHk6OmZvck1vc3RWaXNpYmxlV2ViUGFnZUlmQW55KHNlc3Npb25JRCwg
KnRvcE9yaWdpbiwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25J
RCwgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKSwgbmVnb3RpYXRlZExlZ2FjeVRMU10oYXV0byogcGFnZSkgbXV0YWJsZSB7CiAgICAgICAg
IGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zOTIsMTEgKzQ4Miw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVu
Y2hlciogbGF1bmNoZXIsIElQQzo6Q29uCiAgICAgICAgIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYg
KG1fcHJvY2Vzc1Bvb2wucHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKQotICAgICAgICBzZXRQ
cm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHRydWUpOwotI2VuZGlmCiAgICAgCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uID0gdGhp
cy0+Y29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCkpCkBAIC0xMjA1LDcgKzEyOTAsOCBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3Rp
bmcoUEFMOjpTZXNzaW9uSUQgc2VzcwogfQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXRE
b21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluPiYmIGRvbWFpbnMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS5zZXREb21haW5zV2l0aFVzZXJJ
bnRlcmFjdGlvbihXVEZNb3ZlKGRvbWFpbnMpKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9v
bC0+c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbj4geyBkb21haW5zIH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCiAKQEAgLTEyNTIsNDUgKzEzMzgsMzEgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwg
Q29tcGxldGkKICAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpGbHVzaENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCi12b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRh
U3RvcmU+JiYgc3RvcmUpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24oV2Vi
c2l0ZURhdGFTdG9yZSYgc3RvcmUpCiB7Ci0gICAgbV9zZXNzaW9uSURzLmFkZChzdG9yZS0+c2Vz
c2lvbklEKCkpOworICAgIG1fd2Vic2l0ZURhdGFTdG9yZXMuYWRkKHN0b3JlKTsKIAogICAgIGlm
IChjYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6QWRkV2Vic2l0ZURhdGFTdG9yZSB7IHN0b3JlLT5wYXJhbWV0ZXJzKCkgfSwgMCk7Ci0gICAg
YXV0byBzZXNzaW9uSUQgPSBzdG9yZS0+c2Vzc2lvbklEKCk7CisgICAgICAgIHNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUucGFyYW1ldGVy
cygpIH0sIDApOworICAgIGF1dG8gc2Vzc2lvbklEID0gc3RvcmUuc2Vzc2lvbklEKCk7CiAgICAg
aWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgewogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQotICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUtPnJlc29sdmVk
SW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCkpOworICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmls
ZVVwZ3JhZGUoc3RvcmUucmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CiAjZW5k
aWYKICAgICB9CiB9CiAKLWJvb2wgTmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbihQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2Vzc2lvbklEcy5j
b250YWlucyhzZXNzaW9uSUQpOwotfQotCi12b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92
ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQordm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpyZW1vdmVTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiB7
Ci0gICAgbV9zZXNzaW9uSURzLnJlbW92ZShzZXNzaW9uSUQpOworICAgIG1fd2Vic2l0ZURhdGFT
dG9yZXMucmVtb3ZlKHdlYnNpdGVEYXRhU3RvcmUpOwogCiAgICAgaWYgKGNhblNlbmRNZXNzYWdl
KCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEZXN0cm95U2Vzc2lv
biB7IHNlc3Npb25JRCB9LCAwKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkRlc3Ryb3lTZXNzaW9uIHsgd2Vic2l0ZURhdGFTdG9yZS5zZXNzaW9uSUQoKSB9LCAwKTsK
IH0KIAogV2Vic2l0ZURhdGFTdG9yZSogTmV0d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFT
dG9yZUZyb21TZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIGlmIChz
ZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAg
ICBpZiAoIVdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkgewotICAg
ICAgICAgICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wud2Vic2l0ZURh
dGFTdG9yZSgpOwotICAgICAgICAgICAgaWYgKHdlYnNpdGVEYXRhU3RvcmUgJiYgd2Vic2l0ZURh
dGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gc2Vzc2lvbklEKQotICAgICAgICAgICAgICAgIHJldHVy
biB3ZWJzaXRlRGF0YVN0b3JlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFdlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIFdl
YnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChz
ZXNzaW9uSUQpOworICAgIHJldHVybiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9y
ZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnJldHJpZXZlQ2FjaGVTdG9yYWdlUGFyYW1ldGVycyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQp
CkBAIC0xMzM3LDcgKzE0MDksNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZERlc3Ry
b3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudAogI2lmIEVOQUJM
RShTRVJWSUNFX1dPUktFUikKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29y
a2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYg
cmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG1fcHJvY2Vzc1Bvb2wu
ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBX
VEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CisgICAgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25u
ZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgUmVnaXN0cmFibGVEb21haW4ge3JlZ2lzdHJh
YmxlRG9tYWlufSwgc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6d29ya2VyQ29udGV4dENvbm5lY3Rpb25Ob0xvbmdl
ck5lZWRlZChXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBpZGVudGlmaWVyKQpAQCAtMTUwMCwx
NiArMTU3MiwzNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnByZWNvbm5lY3RUbyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYlBhZ2VQcm94eUlkZQogICAgIHNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vzc2lvbklELCB3ZWJQYWdlUHJveHlJRCwg
d2ViUGFnZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2
aWdhdGluZ1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0KIAorc3RhdGljIGJvb2wgYW55UHJvY2Vz
c1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nl
c3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlm
IChwcm9jZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wg
YW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Cisg
ICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCkKIHsKLSAgICBp
ZiAocHJvY2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAo
YW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYg
KCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlG
cm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNz
ZXMgPSB0aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGZvcmVn
cm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91bmQoKSwgMCk7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNCYWNrZ3Jv
dW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5k
V2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlk
QmFja2dyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAg
ICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5iYWNrZ3JvdW5k
QWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAg
ICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25U
b0JhY2tncm91bmQoKSwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IGEwYjRjMWQ4OTM4ZTIwNWVjMzYxZGU1
YzEwODI1ZDE4Mjc3NjUzYjQuLjBiZmNmNDM1YjQ3ZDgxNTVhNGE1OTEyZjg5YTliYzg3Mjg4MmRm
NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5oCkBAIC00NiwxMiArNDYsMTcgQEAKIAogI2lmIFBMQVRGT1JNKENPQ09B
KQogI2luY2x1ZGUgIlhQQ0V2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgPHd0Zi9PU09iamVjdFB0
ci5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBJUEMgewogY2xhc3MgRm9ybURhdGFSZWZlcmVuY2U7
CiB9CiAKK25hbWVzcGFjZSBBUEkgeworY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
OworfQorCiBuYW1lc3BhY2UgUEFMIHsKIGNsYXNzIFNlc3Npb25JRDsKIH0KQEAgLTczLDggKzc4
LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERvd25sb2FkUHJveHk7CiBjbGFzcyBE
b3dubG9hZFByb3h5TWFwOworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5OwogY2xhc3MgV2Vi
UGFnZVByb3h5OwotY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eTsKIAogZW51bSBjbGFzcyBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mg
OiBib29sOwpAQCAtODYsOCArOTEsOSBAQCBzdHJ1Y3QgRnJhbWVJbmZvRGF0YTsKIHN0cnVjdCBO
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBSZXNvdXJjZUxvYWRJbmZv
Owogc3RydWN0IFdlYnNpdGVEYXRhOworc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
OwogCi1jbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVBy
b2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFr
ZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4geworY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94
eSBmaW5hbCA6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHByaXZhdGUgUHJvY2Vzc1Ro
cm90dGxlckNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+
LCBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgdXNpbmcgUmVnaXN0cmFibGVEb21haW4gPSBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKQEAgLTEwMiwxMiArMTA4LDE3IEBAIHB1YmxpYzoK
ICAgICB1c2luZyBEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPSBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbjsKICAgICB1c2luZyBPcGVuZXJEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbjsKIAotICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bv
b2wmKTsKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IGRlZmF1bHROZXR3b3Jr
UHJvY2VzcygpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gY3JlYXRlKCkg
eyByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrUHJvY2Vzc1Byb3h5KTsgfQogICAgIH5OZXR3
b3JrUHJvY2Vzc1Byb3h5KCk7CiAKKyAgICBzdGF0aWMgVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vz
c1Byb3h5Pj4gYWxsTmV0d29ya1Byb2Nlc3NlcygpOworICAgIAorICAgIHZvaWQgdGVybWluYXRl
KCkgZmluYWw7CisKICAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9j
ZXNzUHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb25EZWxheWVkUmVwbHkmJik7CiAKLSAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3du
bG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2Up
OworICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9y
ZSYsIFdlYlByb2Nlc3NQb29sJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29u
c3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsKIAogICAg
IHZvaWQgZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChXZWJzaXRlRGF0YSk+JiYpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEo
UEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSBtb2Rp
ZmllZFNpbmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
OwpAQCAtMjA2LDE1ICsyMTcsMTIgQEAgcHVibGljOgogICAgIFByb2Nlc3NUaHJvdHRsZXImIHRo
cm90dGxlcigpIGZpbmFsIHsgcmV0dXJuIG1fdGhyb3R0bGVyOyB9CiAgICAgdm9pZCB1cGRhdGVQ
cm9jZXNzQXNzZXJ0aW9uKCk7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2woKSB7
IHJldHVybiBtX3Byb2Nlc3NQb29sOyB9Ci0KICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQogICAgIHZvaWQgZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgYWRkU2Vzc2lv
bihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJik7Ci0gICAgYm9vbCBoYXNTZXNzaW9uKFBBTDo6U2Vz
c2lvbklEKSBjb25zdDsKLSAgICB2b2lkIHJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQpOwor
ICAgIHZvaWQgYWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CisgICAgdm9pZCByZW1vdmVT
ZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmKTsKICAgICAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKICAgICB2b2lkIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShjb25zdCBTdHJpbmcm
IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7CkBAIC0yMjksNiArMjM3LDggQEAgcHVibGljOgog
ICAgIHZvaWQgcmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJp
bmcmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChj
b25zdCBTdHJpbmcmKTsKIAorICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CisgICAg
CiAgICAgdm9pZCByZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwogCiAgICAgdm9pZCByZXNvdXJjZUxvYWREaWRTZW5kUmVxdWVzdChXZWJQYWdl
UHJveHlJZGVudGlmaWVyLCBSZXNvdXJjZUxvYWRJbmZvJiYsIFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYmLCBPcHRpb25hbDxJUEM6OkZvcm1EYXRhUmVmZXJlbmNlPiYmKTsKQEAgLTI0OCw3ICsy
NTgsMjAgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlQnVuZGxlSWRlbnRpZmllcihjb25zdCBT
dHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJCdW5k
bGVJZGVudGlmaWVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBXZWJDb29r
aWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIoKSB7IHJldHVybiBtX2Nvb2tpZU1hbmFnZXIu
Z2V0KCk7IH0KKworICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBjdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQoKSB7IHJldHVybiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudC5nZXQoKTsgfQorCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgeHBjX29iamVjdF90IHhw
Y0VuZHBvaW50TWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kcG9pbnRNZXNzYWdlLmdldCgp
OyB9CisjZW5kaWYKKwogcHJpdmF0ZToKKyAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5
KCk7CisKKyAgICB2b2lkIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAg
ICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IGRhdGFTdG9yZVBhcmFtZXRlcnMo
KTsKKwogICAgIC8vIEF1eGlsaWFyeVByb2Nlc3NQcm94eQogICAgIEFTQ0lJTGl0ZXJhbCBwcm9j
ZXNzTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJOZXR3b3JraW5nIl9zOyB9CiAKQEAgLTI1
Niw3ICsyNzksNiBAQCBwcml2YXRlOgogICAgIHZvaWQgY29ubmVjdGlvbldpbGxPcGVuKElQQzo6
Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgcHJvY2Vzc1dpbGxTaHV0RG93bihJUEM6
OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKIAotICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVk
KCk7CiAgICAgdm9pZCBjbGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKICAgICAvLyBJUEM6OkNvbm5l
Y3Rpb246OkNsaWVudApAQCAtMzEyLDE2ICszMzQsMTcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
cHJvY2Vzc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklELCBSZWY8QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VQcm94eT4mJik7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgbV9wcm9j
ZXNzUG9vbDsKLQogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChXZWJzaXRlRGF0YSk+PiBtX3BlbmRpbmdGZXRjaFdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAg
IEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5n
RGVsZXRlV2Vic2l0ZURhdGFDYWxsYmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvck9yaWdp
bnNDYWxsYmFja3M7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RG93bmxvYWRQcm94eU1hcD4gbV9k
b3dubG9hZFByb3h5TWFwOworCisgICAgVW5pcXVlUmVmPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50PiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKICNpZiBFTkFCTEUoTEVH
QUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQogICAgIExlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk7CiAjZW5kaWYKKwogICAgIFBy
b2Nlc3NUaHJvdHRsZXIgbV90aHJvdHRsZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByb2Nlc3NU
aHJvdHRsZXI6OkJhY2tncm91bmRBY3Rpdml0eT4gbV9hY3Rpdml0eUZvckhvbGRpbmdMb2NrZWRG
aWxlczsKICAgICBQcm9jZXNzVGhyb3R0bGVyOjpBY3Rpdml0eVZhcmlhbnQgbV9hY3Rpdml0eUZy
b21XZWJQcm9jZXNzZXM7CkBAIC0zNDcsOSArMzcwLDExIEBAIHByaXZhdGU6CiAgICAgcHJpdmF0
ZToKICAgICAgICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNz
OwogICAgIH07CisgICAgT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBtX2VuZHBvaW50TWVzc2Fn
ZTsKICNlbmRpZgogCi0gICAgSGFzaFNldDxQQUw6OlNlc3Npb25JRD4gbV9zZXNzaW9uSURzOwor
ICAgIFdlYWtIYXNoU2V0PFdlYnNpdGVEYXRhU3RvcmU+IG1fd2Vic2l0ZURhdGFTdG9yZXM7Cisg
ICAgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gbV9jb29raWVNYW5hZ2VyOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCmluZGV4IGI4ZGFlZGY3YmVi
YTFjZDgxZjZlNTI0NDk2MDMxMGYxMzMxMGMxMWUuLjkxYzE5MzFmMmU2NWNmMWM5NzdhZGYzYWU2
Y2FlZGIwNjA5MDBiZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCkBAIC01MSw4ICs1MSwxMSBA
QCBib29sIE5ldHdvcmtQcm9jZXNzUHJveHk6OlhQQ0V2ZW50SGFuZGxlcjo6aGFuZGxlWFBDRXZl
bnQoeHBjX29iamVjdF90IGV2ZW50KSBjbwogICAgIGlmIChtZXNzYWdlTmFtZS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBMYXVuY2hT
ZXJ2aWNlc0RhdGFiYXNlWFBDQ29uc3RhbnRzOjp4cGNMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBD
RW5kcG9pbnRNZXNzYWdlTmFtZSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc1Bv
b2woKS5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhldmVudCk7Cisg
ICAgaWYgKG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6
OnhwY0xhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKSB7CisgICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPm1fZW5kcG9pbnRNZXNzYWdlID0gZXZlbnQ7CisgICAgICAg
IGZvciAoYXV0byYgZGF0YVN0b3JlIDogbV9uZXR3b3JrUHJvY2Vzcy0+bV93ZWJzaXRlRGF0YVN0
b3JlcykKKyAgICAgICAgICAgIGRhdGFTdG9yZS5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2lu
dFRvV2ViUHJvY2VzcyhldmVudCk7CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAppbmRl
eCBjYzUyNmFhZjNhYWZiMWMxNDZkYTRiMjQxOTQ1OWIxMDkyMDFiNjEwLi4wODVlN2QyNjVhMTM3
MzViZTdhMTI3OGVjMWRmYjYzZmQ1ZGQ1ZDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQSVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJv
eHkuaCIKICNpbmNsdWRlICJPcHRpb25hbENhbGxiYWNrSUQuaCIKICNpbmNsdWRlICJXZWJDb29r
aWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHlNZXNz
YWdlcy5oIgpAQCAtMzksMjQgKzQwLDE2IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCi1jb25zdCBjaGFyKiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN1
cHBsZW1lbnROYW1lKCkKK1dlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclBy
b3h5KE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKQorICAgIDogbV9uZXR3b3Jr
UHJvY2VzcyhtYWtlV2Vha1B0cihuZXR3b3JrUHJvY2VzcykpCiB7Ci0gICAgcmV0dXJuICJXZWJD
b29raWVNYW5hZ2VyUHJveHkiOwotfQotCi1SZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KHByb2Nlc3NQ
b29sKSk7Ci19Ci0KLVdlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5
KFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKLSAgICA6IFdlYkNvbnRleHRTdXBwbGVtZW50
KHByb2Nlc3NQb29sKQotewotICAgIFdlYkNvbnRleHRTdXBwbGVtZW50Ojpwcm9jZXNzUG9vbCgp
LT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CisgICAgbmV0d29ya1Byb2Nlc3MuYWRkTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgKnRoaXMpOwogfQogCiBXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVN
YW5hZ2VyUHJveHkoKQogeworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25l
dHdvcmtQcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsKICAgICBBU1NFUlQobV9jb29raWVP
YnNlcnZlcnMuaXNFbXB0eSgpKTsKIH0KIApAQCAtNjUsMTAyICs1OCw4NCBAQCB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6aW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJD
bGllbnRCYXNlKiBjbAogICAgIG1fY2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKIH0KIAotLy8g
V2ViQ29udGV4dFN1cHBsZW1lbnQKLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nl
c3NQb29sRGVzdHJveWVkKCkKLXsKLSAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnM7Ci0g
ICAgZm9yIChhdXRvJiBvYnNlcnZlclNldCA6IG1fY29va2llT2JzZXJ2ZXJzLnZhbHVlcygpKSB7
Ci0gICAgICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlclNldCkKLSAgICAgICAgICAg
IG9ic2VydmVycy5hcHBlbmQob2JzZXJ2ZXIpOwotICAgIH0KLQotICAgIGZvciAoYXV0byogb2Jz
ZXJ2ZXIgOiBvYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyLT5tYW5hZ2VyRGVzdHJveWVkKCk7
Ci0KLSAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKQot
ewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKE5ldHdv
cmtQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVm
V2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpyZWYoKTsKLX0KLQot
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQot
ewotICAgIEFQSTo6T2JqZWN0OjpkZXJlZigpOwotfQotCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNhbGxiYWNrRnVuY3Rp
b24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVO
ZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lv
bklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1
bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5n
UHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6
OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklELCBob3N0bmFtZXMpKTsKKyAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9u
SUQsIGhvc3RuYW1lcyksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVs
ZXRlQWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bv
b2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCkpOworICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCksIDAp
OwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ29va2llJiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJv
Y2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0
ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKV0oKSBtdXRhYmxlIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
KyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24o
KTsKLSAgICB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENv
b2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2FsbFRpbWUgdGlt
ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAg
YXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0
aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lv
bklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAg
ICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4m
IGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQog
ewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZN
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAg
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAK
IHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIGNvbnN0IFVSTCYgdXJsLCBj
b25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNh
bGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9u
SUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0
aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29v
a2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7
CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYm
KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJv
Y2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5z
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tp
ZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVu
Y3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1
dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpH
ZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7Cisg
ICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9j
ZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3Rh
cnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdl
cyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lv
bklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVPYnNl
cnZlckNhbGxiYWNrKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lk
ICgpPiYmIGNhbGxiYWNrKQpAQCAtMjExLDE4ICsxODYsMTggQEAgdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OmNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6
OlNlc3Npb25JRCwgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotI2lmIFVTRShTT1VQKQotICAgIHBy
b2Nlc3NQb29sKCktPnNldEluaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0j
ZW5kaWYKLQotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9s
aWN5KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVu
Y3Rpb24oKTsKIH0KIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENv
b2tpZUFjY2VwdFBvbGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBj
YWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3koKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzZXNz
aW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNh
bGxiYWNrRnVuY3Rpb24oSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6TmV2ZXIpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkNvb2tpZU1hbmFnZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2ll
TWFuYWdlclByb3h5LmgKaW5kZXggMGJkZmMwZDRlNDdjNDM2ZjU4NWNmMjljMDlkNTFhMjliYzgx
MWE5ZC4uNmY1MWYwM2U1YzBjYTg5NDEyMzM0Mzc3YjU1NDNkODIyY2MyZmVjMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKQEAgLTU2LDEx
ICs1Niw5IEBAIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6QXJyYXkqPiBBcnJheUNhbGxi
YWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBv
bGljeT4gSFRUUENvb2tpZUFjY2VwdFBvbGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2Fs
bGJhY2s8Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7
CiAKLWNsYXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8
QVBJOjpPYmplY3Q6OlR5cGU6OkNvb2tpZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBs
ZW1lbnQsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFu
YWdlclByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29v
a2llTWFuYWdlcj4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRp
YyBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBjcmVhdGUoTmV0d29ya1Byb2Nlc3NQcm94eSYg
bmV0d29ya1Byb2Nlc3MpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclBy
b3h5KG5ldHdvcmtQcm9jZXNzKSk7IH0KICAgICB2aXJ0dWFsIH5XZWJDb29raWVNYW5hZ2VyUHJv
eHkoKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJD
bGllbnRCYXNlKik7CkBAIC0xMDQsMTcgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQVBJ
OjpPYmplY3Q6OmRlcmVmOwogCiBwcml2YXRlOgotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShX
ZWJQcm9jZXNzUG9vbCopOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vz
c1Byb3h5Jik7CiAKICAgICB2b2lkIGNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQpOwog
Ci0gICAgLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLSAgICB2b2lkIHByb2Nlc3NQb29sRGVzdHJv
eWVkKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5
Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94
eSopIG92ZXJyaWRlOwotICAgIHZvaWQgcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLQogICAg
IC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKIApAQCAtMTI1LDYgKzExNiw3
IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2
b2lkICgpPj4gbV9sZWdhY3lDb29raWVPYnNlcnZlcnM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Np
b25JRCwgSGFzaFNldDxPYnNlcnZlcio+PiBtX2Nvb2tpZU9ic2VydmVyczsKIAorICAgIFdlYWtQ
dHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICBXZWJDb29raWVN
YW5hZ2VyUHJveHlDbGllbnQgbV9jbGllbnQ7CiAKICNpZiBVU0UoU09VUCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGQzYjhjMzU1NDBmM2YyNDU2ZjcxMDU1
ZjViNGQ3YTc4MjI2MGQzODcuLjQ5Y2VlYjIyODkyZjI0NTE4MWE0NDgwOTU5ZGM4MzRhMTVlZjhk
NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTc0Niw3
ICsxNzQ2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24o
Ym9vbCBjb250cm9sbGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGNvbnRyb2xsZWQpKTsKLSAgICBtX3By
b2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0
ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbikpOworICAg
IHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbiksIDApOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQpAQCAtMzIxMCwx
MSArMzIxMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojppc0ZvcmNlZEludG9BcHBCb3VuZE1vZGVU
ZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+CiB2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MoKQogewogI2lm
IEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3
b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNz
YWdlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVu
dCgpLCAwKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRs
ZW1lbnQoKSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtMzIyMywxMyArMzIxOSw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAhUExBVEZP
Uk0oTUFDQ0FUQUxZU1QpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgc2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxl
bWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewot
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlk
ZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0
b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAj
ZW5kaWYKQEAgLTQ0MjksNyArNDQxOSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwcmVjb25uZWN0
VG8oY29uc3QgVVJMJiB1cmwpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gc3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3kgPSBtX2NhblVzZUNyZWRlbnRpYWxTdG9yYWdlID8gV2ViQ29yZTo6U3Rv
cmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZSA6IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5OjpEb05vdFVzZTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKS5wcmVjb25uZWN0VG8oc2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFn
ZUlEKCksIHVybCwgdXNlckFnZW50KCksIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmln
YXRpbmdUb0FwcEJvdW5kRG9tYWluKCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3Jr
UHJvY2VzcygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdl
SUQoKSwgdXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdh
dGluZ1RvQXBwQm91bmREb21haW4oKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDYW5V
c2VDcmVkZW50aWFsU3RvcmFnZShib29sIGNhblVzZUNyZWRlbnRpYWxTdG9yYWdlKQpAQCAtNDcy
NSw3ICs0NzE1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZShG
cmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgRnJhbWVJbmZvRGF0YSYKICAgICAgICAgICAgIFJlZ2lz
dHJhYmxlRG9tYWluIGN1cnJlbnREb21haW4geyBjdXJyZW50UmVxdWVzdC51cmwoKSB9OwogICAg
ICAgICAgICAgVVJMIHJlcXVlc3RlclVSTCB7IFVSTCgpLCByZXF1ZXN0ZXJPcmlnaW4udG9TdHJp
bmcoKSB9OwogICAgICAgICAgICAgaWYgKCFjdXJyZW50RG9tYWluLm1hdGNoZXMocmVxdWVzdGVy
VVJMKSkKLSAgICAgICAgICAgICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZGlkQ29tbWl0
Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwgY3VycmVudERvbWFpbiwg
bmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dlYlBhZ2VJRCk7CisgICAg
ICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmRpZENvbW1p
dENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lv
bklEKCksIFJlZ2lzdHJhYmxlRG9tYWluIHsgcmVxdWVzdGVyVVJMIH0sIGN1cnJlbnREb21haW4s
IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIG1faWRlbnRpZmllciwgbV93ZWJQYWdlSUQpOwogICAg
ICAgICB9CiAjZW5kaWYKICAgICB9CkBAIC00NzYzLDcgKzQ3NTMsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFt
ZUluZm9EYXRhJgogICAgIGlmIChuYXZpZ2F0aW9uICYmIGZyYW1lLT5pc01haW5GcmFtZSgpKSB7
CiAgICAgICAgIGlmIChhdXRvJiBhZENsaWNrQXR0cmlidXRpb24gPSBuYXZpZ2F0aW9uLT5hZENs
aWNrQXR0cmlidXRpb24oKSkgewogICAgICAgICAgICAgaWYgKGFkQ2xpY2tBdHRyaWJ1dGlvbi0+
ZGVzdGluYXRpb24oKS5tYXRjaGVzKGZyYW1lLT51cmwoKSkpCi0gICAgICAgICAgICAgICAgbV9w
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U3RvcmVBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgKmFkQ2xpY2tBdHRyaWJ1dGlvbikpOworICAgICAgICAgICAgICAgIHdl
YnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTdG9yZUFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCAqYWRDbGlja0F0dHJpYnV0aW9uKSwgMCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTUzNzcsNyArNTM2Nyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmlnYXRpb24o
Y29uc3QgV2ViRnJhbWVQcm94eSYgZnJhbWUsIGNvbnN0IFVSTCYgcGFnCiAgICAgaWYgKHRhcmdl
dEhvc3QuaXNFbXB0eSgpIHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3Qg
PT0gc291cmNlVVJMLmhvc3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5w
cm9jZXNzUG9vbCgpLnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6TG9nRnJhbWVOYXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IFJlZ2lzdHJhYmxlRG9tYWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFn
ZVVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFt
ZS5pc01haW5GcmFtZSgpLCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1l
bnRMb2FkRm9yTWFpbkZyYW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNl
cikpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFi
bGVEb21haW4geyBwYWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlz
UmVkaXJlY3QsIGZyYW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9k
aWRGaW5pc2hEb2N1bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5
SW5pdGlhdGVkQnlVc2VyKSwgMCk7CiB9CiAjZW5kaWYKIApAQCAtMTAwMDIsNTggKzk5OTIsMjcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OnN5c3RlbVByZXZpZXdBY3Rpb25UcmlnZ2VyZWQoY29uc3Qg
V2ViQ29yZTo6U3lzdGVtUHJldmlld0luZm8KIAogdm9pZCBXZWJQYWdlUHJveHk6OmR1bXBBZENs
aWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3By
b2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5l
dHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihlbXB0eVN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNl
c3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJz
aXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFT
dG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29y
a1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpD
bGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0
QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkp
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGlt
ZXJGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCku
bmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNp
dGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZl
cnNpb25VUkxGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
aWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmli
dXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9y
VGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nl
c3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRD
bGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJM
RShTUEVFQ0hfU1lOVEhFU0lTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuY3BwCmluZGV4IGQ5MjZiMzNjYmRmMmJiOGJiOTgwZDYzYzVkYzUyYWU1MjUwOTI1MjkuLjll
ZDAzY2NhN2IzODRiNmJlYWNhMTJjOTI0ZGY4MmNkZTU5MjAxMjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTE0Myw4ICsxNDMsMTAgQEAKICNlbmRp
ZgogCiAjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4u
KSBSRUxFQVNFX0xPRyhjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMs
ICMjX19WQV9BUkdTX18pCisjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJ
QyhjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29s
OjoiIGZtdCwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9M
T0dfRVJST1IoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIl
cCAtIFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUg
V0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikg
UkVMRUFTRV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFu
bmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisj
ZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5u
ZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdB
bGxvd2VkKCksIGNoYW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18p
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIs
NiArMjM0LDExIEBAIHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVI
YXNoPiYgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90CiAgICAgcmV0dXJuIHNldDsKIH0K
IAorVmVjdG9yPFN0cmluZz4gV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJv
dG9jb2xIYW5kbGVycygpCit7CisgICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihnbG9iYWxVUkxTY2hl
bWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSk7Cit9CisKIFdlYlByb2Nlc3NQb29sOjpX
ZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlv
bikKICAgICA6IG1fY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uLmNvcHkoKSkKICAgICAsIG1f
ZGVmYXVsdFBhZ2VHcm91cChXZWJQYWdlR3JvdXA6OmNyZWF0ZSgpKQpAQCAtMjM5LDcgKzI0Niw2
IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmln
dXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICAsIG1fYXV0b21hdGlvbkNsaWVudChtYWtlVW5p
cXVlPEFQSTo6QXV0b21hdGlvbkNsaWVudD4oKSkKICAgICAsIG1fZG93bmxvYWRDbGllbnQobWFr
ZVVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PigpKQogICAgICwgbV9oaXN0b3J5Q2xpZW50
KG1ha2VVbmlxdWU8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4oKSkKLSAgICAsIG1f
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQ+KCkpCiAgICAgLCBtX3Zpc2l0ZWRMaW5rU3RvcmUoVmlzaXRlZExpbmtT
dG9yZTo6Y3JlYXRlKCkpCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICwgbV9oaWdoUGVyZm9ybWFu
Y2VHcmFwaGljc1VzYWdlU2FtcGxlcihtYWtlVW5pcXVlPEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNz
VXNhZ2VTYW1wbGVyPigqdGhpcykpCkBAIC0yNjcsOSArMjczLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6
OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0
aW9uKQogI2VuZGlmCiAgICAgfSk7CiAKLSAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSAmJiBX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAg
ICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGF0YVN0b3JlKCk7Ci0KICAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IG1fY29uZmlndXJhdGlvbi0+
YWx3YXlzUmV2YWxpZGF0ZWRVUkxTY2hlbWVzKCkpCiAgICAgICAgIG1fc2NoZW1lc1RvUmVnaXN0
ZXJBc0Fsd2F5c1JldmFsaWRhdGVkLmFkZChzY2hlbWUpOwogCkBAIC0yODUsNyArMjg4LDYgQEAg
V2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uJiBjb25maWd1cmF0aW9uKQogICAgIGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2Vi
UHJvY2Vzc1Bvb2w6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9U
RTogVGhlc2Ugc3ViLW9iamVjdHMgbXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VS
ZWNlaXZlck1hcC4uCi0gICAgYWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
CiAgICAgYWRkU3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBh
ZGRTdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUo
TUVESUFfU0VTU0lPTikKQEAgLTM0Miw5ICszNDQsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlBy
b2Nlc3NQb29sKCkKICAgICBwcm9jZXNzUG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYK
IAotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
aHV0RG93blByb2Nlc3MoKTsKLQogI2lmIEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9j
ZXNzZXNVc2luZ0dhbWVwYWRzLmlzRW1wdHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6
OnNpbmdsZXRvbigpLnByb2Nlc3NQb29sU3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAt
NDAyLDE2ICs0MDEsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9uQ2xpZW50
KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JgogICAgICAgICBtX2F1dG9t
YXRpb25DbGllbnQgPSBXVEZNb3ZlKGF1dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlx
dWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudCkKLXsKLSNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5B
R0VSKQotICAgIGlmICghY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAgICBtX2N1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQ+KCk7Ci0gICAgZWxzZQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudCA9IFdURk1vdmUoY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsKLSNlbmRp
ZgotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1
bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRs
ZUlkZW50aWZpZXIpCiB7CiAgICAgLy8gR3VhcmQgYWdhaW5zdCBBUEkgbWlzdXNlLgpAQCAtNDIx
LDExICs0MTAsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2Vy
dmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBjdQogICAgIG1fY29uZmlndXJhdGlv
bi0+c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGN1c3RvbVdlYkNv
bnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcik7CiB9CiAKLUlQQzo6Q29ubmVjdGlvbiogV2Vi
UHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJu
IG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6bGFuZ3VhZ2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2Vi
UHJvY2Vzc1Bvb2wqPihjb250ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7CkBAIC00MzUsOCArNDE5
LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5k
VG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFn
ZXNDaGFuZ2VkKCkpOwogI2lmIFVTRShTT1VQKQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQot
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwg
MCk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5uZXR3b3JrUHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3Vh
Z2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKICNlbmRpZgogfQogCkBA
IC00NDksNyArNDMyLDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZnVsbEtleWJvYXJkQWNjZXNz
TW9kZUNoYW5nZWQoYm9vbCBmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGUKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KGJvb2wgaXNDcml0aWNhbCkKIHsKICAgICBz
ZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVN
ZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJv
Y2VzcyhNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJl
RXZlbnQoaXNDcml0aWNhbCkpOworICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdv
cmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQ
cmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpLCAwKTsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKICAgICBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuc2VuZE1lbW9yeVBy
ZXNzdXJlRXZlbnQoaXNDcml0aWNhbCk7CiAjZW5kaWYKQEAgLTQ3NCwyNzUgKzQ1OCw4IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNjcmVlblByb3BlcnRpZXNTdGF0ZUNoYW5nZWQoKQogI2VuZGlm
CiB9CiAKLU5ldHdvcmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3Jr
UHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKLXsKLSAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEg
dGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFp
biB0aHJlYWRzLgotICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2Ug
dGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KLSAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlmICghUnVuTG9vcDo6
aXNNYWluKCkpIHsKLSAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7
Ci0gICAgfQotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgaWYgKHdpdGhX
ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNz
aW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICB3aXRoV2Vi
c2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBhdXRvIG5ldHdvcmtQcm9j
ZXNzID0gbWFrZVVuaXF1ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7Ci0KLSAgICBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCi0gICAgaWYgKG1fd2Vi
c2l0ZURhdGFTdG9yZSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLnBlbmRpbmdDb29raWVzID0gY29weVRvVmVjdG9yKG1fd2Vic2l0ZURhdGFTdG9yZS0+
cGVuZGluZ0Nvb2tpZXMoKSk7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5k
aW5nQ29va2llcygpOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VB
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3Vy
YXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVy
KCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lH
bG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotCi0gICAgZm9yIChhdXRv
JiBzY2hlbWUgOiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkK
LSAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29s
cy5hcHBlbmQoc2NoZW1lKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU3RyaW5n
IGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURp
cmVjdG9yeSgpOwotICAgIGlmICghY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0g
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9y
eSA9IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYg
KCFjb250YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVz
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7Ci0KLSAgICBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bv
b2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyZW50QnVuZGxlRGlyZWN0
b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBh
cmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBh
cmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclRlbXBvcmFyeUZpbGUoZW1wdHlTdHJpbmcoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6
UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWRE
YXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotI2VuZGlm
Ci0KLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9W
ZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVy
QXNTZWN1cmUoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNz
aW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRp
bmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3Vy
aXR5UG9saWN5KCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2Fs
ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVz
VG9SZWdpc3RlckFzTG9jYWwoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRv
bigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotICAgIC8vICoqKioqKioqKgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNo
YW5nZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlz
ayB3aXRob3V0IGZpcnN0IGNvbnN1bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjov
L3Byb2JsZW0vMTc0NTQ3MTI+KQotICAgIC8vICoqKioqKioqKgotICAgIGlmIChtX3dlYnNpdGVE
YXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZElu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVj
dG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+Y3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQot
I2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQot
ICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBt
X3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSgpOwotICAgIGlmICghcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5KQotICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnkgPSAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExv
Y2FsU3RvcmFnZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9y
YWdlRGlyZWN0b3J5KQotICAgICAgICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9
IGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0KLSAgICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURh
dGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBu
dWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVj
dG9yeShjYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3Rv
cnkgPSBXVEZNb3ZlKGNhY2hlU3RvcmFnZURpcmVjdG9yeSk7Ci0gICAgfQotCi0gICAgU3RyaW5n
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0g
ICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGFyYW1ldGVycy5kaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NE
aXJlY3RvcnksIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwotCi0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAg
Ym9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7
Ci0gICAgYm9vbCBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoUkVT
T1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGUgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IFdlYkNvcmU6OlRoaXJkUGFy
dHlDb29raWVCbG9ja2luZ01vZGU6OkFsbDsKLSAgICBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZCBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IFdlYkNv
cmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKLSNlbmRpZgotICAgIFdl
YkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJzaXRl
RGF0YVJlbW92YWxNb2RlID0gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGU6OkFsbEJ1dENvb2tpZXM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gc3RhbmRh
bG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4+IGFwcEJvdW5kRG9tYWluczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBt
YW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fdGNj
UHJlZmVyZW5jZUVuYWJsZWQgPSBkb2VzQXBwSGF2ZUlUUEVuYWJsZWQoKTsKLSAgICBpZiAod2l0
aFdlYnNpdGVEYXRhU3RvcmUgJiYgIXdpdGhXZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhw
bGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBt
X3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyk7Ci0gICAgfSBlbHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUgJiYgIW1fd2Vic2l0ZURhdGFT
dG9yZS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgbV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmVFeGlzdHMoKSAmJiAhV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZSgpLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZQotICAg
ICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxl
ZDsKLSNlbmRpZgotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2
ZW50ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2so
KTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewot
ICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURh
dGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAg
ICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAg
ICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxl
RGVidWdNb2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAg
ICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5zYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAg
Zmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
c3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5z
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLmFwcEJvdW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNl
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLm1hbnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3
aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0
b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3Rv
cmFnZVF1b3RhKCk7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVE
aXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsK
LSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURp
cmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3
b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNvbnN0IGF1dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRh
U3RvcmUtPnJlc29sdmVkSFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3Rz
U3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3Jh
Z2VEaXJlY3RvcnkgPSBoc3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVu
c2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkg
ewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NM
b2dUZXN0aW5nRXZlbnQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5n
Q2FsbGJhY2soKTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljcykgewotICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dl
YnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0g
ICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhv
c3Q7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
LmVuYWJsZURlYnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQot
ICAgICAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29v
a2llQmxvY2tpbmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVu
YWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMuc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlOwotICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9t
YWluID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJh
bWV0ZXJzLnN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5k
RG9tYWlucyA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5hcHBCb3VuZERvbWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5tYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1
b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAg
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3Jp
Z2luU3RvcmFnZVF1b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2lu
U3RvcmFnZVF1b3RhKCk7Ci0KLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgp
OwotICAgICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAg
ICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5
OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNo
ZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3
b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y29uc3QgYXV0byYgaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJl
c29sdmVkSFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURp
cmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3Rv
cnkgPSBoc3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlw
ZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7
Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVj
dG9yeTsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNo
ZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3
b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lmIEhBVkUoQ0ZO
RVRXT1JLX0FMVEVSTkFUSVZFX1NFUlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6Omh0
dHAzRW5hYmxlZCgpKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9y
eSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2VzRGlyZWN0b3J5
KCk7Ci0gICAgICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnksIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFs
dGVybmF0aXZlU2VydmljZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
Lmh0dHAzRW5hYmxlZCA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBpc0l0cFN0YXRl
RXhwbGljaXRseVNldCA9IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXJhbWV0ZXJzID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewotICAgICAgICBX
VEZNb3ZlKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAgICBXVEZNb3Zl
KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpLAotICAgICAg
ICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0YXRlRXhwbGlj
aXRseVNldCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdF
dmVudCwKLSAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAgZW5hYmxlUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQotICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlLAotICAgICAg
ICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0
aW9uRG9tYWluLAotICAgICAgICBhcHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZh
bGVudFJlc291cmNlLAotICAgIH07Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmlj
IHBhcmFtZXRlcnMKLSAgICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0
ZXJzKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3
b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3
b3JrUHJvY2Vzc0xhdGVuY3lRT1MoKSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAw
KTsKLSNlbmRpZgotCi0gICAgbmV0d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24o
KTsKLQotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAg
ICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQot
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUg
c2Vzc2lvbnMgdGhhdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAg
ICBmb3IgKGF1dG8mIHNlc3Npb25JRCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpl
eGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAg
ICB9Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0g
ICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpu
ZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQ
cm94eSkKIHsKLSAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3
b3JrUHJvY2Vzc1Byb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChh
dXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxl
bWVudC0+cHJvY2Vzc0RpZENsb3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzUxLDkg
KzQ2OCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3
b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1ByCiAgICAgaWYgKG1fYXV0b21hdGlvblNl
c3Npb24pCiAgICAgICAgIG1fYXV0b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAg
Ly8gTGVhdmUgdGhlIHByb2Nlc3MgcHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28g
dGhhdCB0aGUgY2xpZW50IGNvdWxkIHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAg
bV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vy
cygpOwogfQogCkBAIC03NjQsMjAgKzQ3OCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZp
Y2VXb3JrZXJQcm9jZXNzQ3Jhc2hlZChXZWJQcm9jZXNzUHJveHkmIHByb3h5KQogI2VuZGlmCiB9
CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQ
cm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6
R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAg
ICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1h
a2VXZWFrUHRyKCp0aGlzKSwgd2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vz
c1Byb3h5KSwgcmVwbHkgPSBXVEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBt
dXRhYmxlIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZp
ZXJJc1ZhbGlkKGNvbm5lY3Rpb25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5
ICYmIHdlYWtUaGlzKSkgewotICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0df
RVJST1IoUHJvY2VzcywgImdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0
IGF0dGVtcHQsIHJldHJ5aW5nIik7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2Vzcygp
OwotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uKCp3ZWJQcm9jZXNzUHJveHksIFdURk1vdmUocmVwbHkpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7Ci0gICAgfSk7Ci19
Ci0KICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpncHVQcm9j
ZXNzQ3Jhc2hlZChQcm9jZXNzSUQgaWRlbnRpZmllcikKIHsKQEAgLTgwMSwyMyArNTAxLDI2IEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdldEdQVVByb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQ
cm94eSYgd2ViUHJvY2Vzc1Byb3h5LCBNCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJQcm9jZXNzUG9v
bDo6c191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gZmFsc2U7CisKICNpZiBFTkFC
TEUoU0VSVklDRV9XT1JLRVIpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJD
b250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJv
eHksIFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIEFTU0VSVF9VTlVTRUQocHJveHksICZwcm94eSA9PSBtX25ldHdvcmtQcm9jZXNz
LmdldCgpKTsKKyAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6
ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXdlYnNp
dGVEYXRhU3RvcmUpCisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7CisgICAgaWYgKCFwcm9jZXNzUG9vbHMoKS5zaXpl
KCkpCisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWY8V2ViUHJvY2Vzc1Bvb2w+PiBz
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShBUEk6OlByb2Nl
c3NQb29sQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCkuZ2V0KCkpKTsKIAotICAgIGF1dG8qIHdlYnNp
dGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3Rv
cmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKLQotICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkg
ewotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0
ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgp
LnB0cigpOwotICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlID0gbV93ZWJzaXRlRGF0YVN0b3JlLmdl
dCgpOwotICAgIH0KKyAgICAvLyBBcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0IHByb2Nlc3Mg
cG9vbCB0byBob3N0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgorICAgIGF1dG8qIHByb2Nl
c3NQb29sID0gcHJvY2Vzc1Bvb2xzKClbMF07CisgICAgQVNTRVJUKHByb2Nlc3NQb29sKTsKIAog
ICAgIFdlYlByb2Nlc3NQcm94eSogc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSB7IG51bGxwdHIg
fTsKLSAgICBpZiAoIW1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgewotICAgICAg
ICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAgICAgICAgaWYgKHBy
b2Nlc3MgPT0gbV9wcmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJv
eHkoKSkKKworICAgIGlmICghc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IHByb2Nlc3NQb29sLT5tX3Byb2Nlc3Nlcykgewor
ICAgICAgICAgICAgaWYgKHByb2Nlc3MgPT0gcHJvY2Vzc1Bvb2wtPm1fcHJld2FybWVkUHJvY2Vz
cyB8fCBwcm9jZXNzLT5pc0R1bW15UHJvY2Vzc1Byb3h5KCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICBpZiAoJnByb2Nlc3MtPndlYnNpdGVEYXRhU3RvcmUoKSAhPSB3
ZWJzaXRlRGF0YVN0b3JlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODI1LDM1ICs1
MjgsMzUgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5l
Y3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm8KICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9IHByb2Nlc3MuZ2V0
KCk7Ci0gICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNl
V29ya2Vycyh1c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMo
KSk7CisgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNl
V29ya2Vycyhwcm9jZXNzUG9vbC0+dXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllckZvclNl
cnZpY2VXb3JrZXJzKCkpOwogCi0gICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xP
R19JRl9BTExPV0VEKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVj
dGlvblRvTmV0d29ya1Byb2Nlc3MgcmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2VzcyAocHJv
Y2Vzcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgV0VCUFJP
Q0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoU2VydmljZVdvcmtlciwgImVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFu
IGV4aXN0aW5nIHdlYiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtl
clByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZp
ZXIoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICgh
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkgewotICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94
eSA9IFdlYlByb2Nlc3NQcm94eTo6Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMoKnRoaXMsIFdURk1v
dmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CisgICAgICAgIGF1dG8g
bmV3UHJvY2Vzc1Byb3h5ID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2Vy
cygqcHJvY2Vzc1Bvb2wsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFT
dG9yZSk7CiAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgPSBuZXdQcm9jZXNzUHJv
eHkucHRyKCk7CiAKLSAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RChTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdv
cmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0l
cCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAgICAgICBXRUJQUk9DRVNTUE9PTF9S
RUxFQVNFX0xPR19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29y
a2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZp
Y2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkp
OwogCi0gICAgICAgIGluaXRpYWxpemVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwgd2Vi
c2l0ZURhdGFTdG9yZSk7Ci0gICAgICAgIG1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1By
b2Nlc3NQcm94eSkpOworICAgICAgICBwcm9jZXNzUG9vbC0+aW5pdGlhbGl6ZU5ld1dlYlByb2Nl
c3MobmV3UHJvY2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgcHJvY2Vzc1Bv
b2wtPm1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOwogICAgIH0K
IAotICAgIEFTU0VSVCghbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKCpzZXJ2aWNl
V29ya2VyUHJvY2Vzc1Byb3h5KSk7Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmFkZCgq
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eSk7CisgICAgQVNTRVJUKCFzZXJ2aWNlV29ya2VyUHJv
Y2Vzc2VzKCkuY29udGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpKTsKKyAgICBzZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzKCkuYWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKIAot
ICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250
ZXh0KG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzID8gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5j
ZXMudmFsdWUoKSA6IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJVc2Vy
QWdlbnQuaXNOdWxsKCkpCi0gICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnNldFNl
cnZpY2VXb3JrZXJVc2VyQWdlbnQobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKKyAgICBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lc3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4dChwcm9j
ZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMgPyBwcm9jZXNzUG9vbC0+bV9zZXJ2
aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IHByb2Nlc3NQb29sLT5tX2RlZmF1bHRQYWdl
R3JvdXAtPnByZWZlcmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OworICAgIGlmICghcHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwo
KSkKKyAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVz
ZXJBZ2VudChwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6cmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJv
Y2Vzc1Byb3h5JiBwcm9jZXNzKQogewotICAgIEFTU0VSVChtX3NlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMuY29udGFpbnMocHJvY2VzcykpOwotICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5yZW1v
dmUocHJvY2Vzcyk7CisgICAgQVNTRVJUKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlu
cyhwcm9jZXNzKSk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLnJlbW92ZShwcm9jZXNz
KTsKIH0KICNlbmRpZgogCkBAIC05MjIsNyArNjI1LDcgQEAgUmVmUHRyPFdlYlByb2Nlc3NQcm94
eT4gV2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKFdlYnNpdGVEYXRhU3Rv
cmUKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICAvLyBJbiBwbGF0Zm9y
bXMgdXNpbmcgQnViYmxld3JhcCBmb3Igc2FuZGJveGluZywgcHJld2FybWVkIHByb2Nlc3MgaXMg
bGF1bmNoZWQgdXNpbmcgdGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9y
ZSwKICAgICAvLyBzbyB3ZSBkb24ndCB1c2UgaXQgaW4gY2FzZSBvZiB1c2luZyBhIGRpZmZlcmVu
dCBXZWJzaXRlRGF0YVN0b3JlLgotICAgIGlmIChtX3NhbmRib3hFbmFibGVkICYmIG1fd2Vic2l0
ZURhdGFTdG9yZSAmJiBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCkgIT0gJndlYnNpdGVEYXRhU3Rv
cmUpCisgICAgaWYgKG1fc2FuZGJveEVuYWJsZWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
I2VuZGlmCiAKQEAgLTEwMzIsOCArNzM1LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6aW5pdGlh
bGl6ZU5ld1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzLCBXZWJzaXRlRGEKICAg
ICAgICAgcHJvY2Vzcy5pc1Jlc3BvbnNpdmUoW2luaXRpYWxpemF0aW9uQWN0aXZpdHkgPSBXVEZN
b3ZlKGluaXRpYWxpemF0aW9uQWN0aXZpdHkpXSAoYm9vbCkgeyB9KTsKICAgICB9KTsKIAotICAg
IGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0KICAgICBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzIHBhcmFtZXRlcnM7CiAKICAgICBwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aCA9IG1f
cmVzb2x2ZWRQYXRocy5pbmplY3RlZEJ1bmRsZVBhdGg7CkBAIC0xMTk4LDkgKzg5OSw2IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1By
b3h5KiBwcm9jZXNzKQogICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPmlnbm9yZVRpbWVv
dXRzRm9yVGVzdGluZygpOwogCiAgICAgbV9jb25uZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5l
Y3Rpb24odGhpcywgcHJvY2Vzcy0+d2ViQ29ubmVjdGlvbigpKTsKLQotICAgIGlmIChtX3dlYnNp
dGVEYXRhU3RvcmUpCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+ZGlkQ3JlYXRlTmV0d29y
a1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3Mo
V2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQpAQCAtMTI5NSwxMCArOTkzLDcgQEAgUmVmPFdlYlBh
Z2VQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNs
aWVudCwgUmVmPEFQSToKICAgICBpZiAoIXBhZ2VDb25maWd1cmF0aW9uLT53ZWJzaXRlRGF0YVN0
b3JlKCkpIHsKICAgICAgICAgLy8gV2UgdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBkZWZhdWx0
IGRhdGEgc3RvcmUgYXMgbG9uZyBhcyBwb3NzaWJsZS4KICAgICAgICAgLy8gQnV0IGlmIHRoZXJl
IGlzIGFuIGF0dGVtcHQgdG8gY3JlYXRlIGEgd2ViIHBhZ2Ugd2l0aG91dCBhbnkgc3BlY2lmaWVk
IGRhdGEgc3RvcmUsIHRoZW4gd2UgaGF2ZSB0byBjcmVhdGUgaXQuCi0gICAgICAgIGlmICghbV93
ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0KLSAgICAgICAg
cGFnZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0b3Jl
LmdldCgpKTsKKyAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCkpOwogICAg
IH0KIAogICAgIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IHByb2Nlc3M7CkBAIC0xMzI5LDcgKzEw
MjQsNyBAQCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQ
YWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBSZWY8QVBJOgogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKICAgICBpZiAoIW1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKSB7CiAgICAgICAgIG1fc2Vy
dmljZVdvcmtlclByZWZlcmVuY2VzID0gcGFnZS0+cHJlZmVyZW5jZXNTdG9yZSgpOwotICAgICAg
ICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzKQorICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdv
cmtlclByb2Nlc3NlcygpKQogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRl
U2VydmljZVdvcmtlclByZWZlcmVuY2VzU3RvcmUoKm1fc2VydmljZVdvcmtlclByZWZlcmVuY2Vz
KTsKICAgICB9CiAgICAgaWYgKHVzZXJDb250ZW50Q29udHJvbGxlcikKQEAgLTEzNTYsNyArMTA1
MSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQo
Y29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpCiAgICAgaWYgKG1fc2VydmljZVdvcmtlclVzZXJBZ2Vu
dCA9PSB1c2VyQWdlbnQpCiAgICAgICAgIHJldHVybjsKICAgICBtX3NlcnZpY2VXb3JrZXJVc2Vy
QWdlbnQgPSB1c2VyQWdlbnQ7Ci0gICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6
IG1fc2VydmljZVdvcmtlclByb2Nlc3NlcykKKyAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQogICAgICAgICBzZXJ2aWNlV29ya2Vy
UHJvY2Vzcy5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KG1fc2VydmljZVdvcmtlclVzZXJBZ2Vu
dCk7CiB9CiAjZW5kaWYKQEAgLTEzNjUsMTUgKzEwNjAsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpwYWdlQmVnaW5Vc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciBw
YWdlSQogewogICAgIGF1dG8gcmVzdWx0ID0gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmFkZChkYXRh
U3RvcmUuc2Vzc2lvbklEKCksIEhhc2hTZXQ8V2ViUGFnZVByb3h5SWRlbnRpZmllcj4oKSkuaXRl
cmF0b3ItPnZhbHVlLmFkZChwYWdlSUQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1
bHQuaXNOZXdFbnRyeSk7Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9u
SUQoKTsKLSAgICBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkpIHsKLSAgICAgICAgQVNTRVJUKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRh
U3RvcmUucGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0g
c2Vzc2lvbklEKTsKLSAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAg
ICAgICAgIGRhdGFTdG9yZS5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICB9
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VFbmRVc2luZ1dlYnNpdGVEYXRhU3RvcmUo
V2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQsIFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9y
ZSkKQEAgLTE0MDEsNyArMTA4Nyw2IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1BhZ2VzVXNp
bmdXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKIERvd25sb2Fk
UHJveHkmIFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3Rv
cmUsIFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKIHsKICAgICBhdXRvJiBk
b3dubG9hZFByb3h5ID0gY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGlu
aXRpYXRpbmdQYWdlLCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGRhdGFT
dG9yZS5zZXNzaW9uSUQoKTsKIAogICAgIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9t
YWluPiBpc0FwcEJvdW5kID0gTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46Ok5vOwogICAgIGlm
IChpbml0aWF0aW5nUGFnZSkgewpAQCAtMTQxMSwyNiArMTA5NiwyMyBAQCBEb3dubG9hZFByb3h5
JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBX
ZWJQYWdlUHJveAogI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAg
ICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdp
bmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KLSAgICAgICAgLy8gV2Ugc2V0IHRoZSB2
YWx1ZSB0byB0b3AgbGV2ZWwgZG9jdW1lbnQncyBVUkwuCi0gICAgICAgIGlmIChpbml0aWF0aW5n
UGFnZSkgewotICAgICAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsg
fSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OwotICAgICAgICAgICAg
dXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwp
OwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3RyYWJs
ZURvbWFpbnNFcXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOwotICAgICAg
ICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVz
ZXJBZ2VudChpbml0aWF0aW5nUGFnZS0+dXNlckFnZW50Rm9yVVJMKHJlcXVlc3QudXJsKCkpKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFy
dHlGb3JDb29raWVzKFVSTCgpKTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2Ft
ZVNpdGUoZmFsc2UpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVh
ZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBk
YXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFn
ZW50KCkpOwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShm
YWxzZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2Fk
SUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7
Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5OworICAgIFJlc291cmNlUmVxdWVzdCB1cGRh
dGVkUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tp
ZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4K
KyAgICAvLyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KKyAg
ICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKKyAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0g
VVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9Owor
ICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5n
UGFnZVVSTCk7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0
cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKKyAg
ICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFn
ZW50KGluaXRpYXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOworICAg
IH0gZWxzZSB7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVz
KFVSTCgpKTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7Cisg
ICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJO
YW1lOjpVc2VyQWdlbnQpKQorICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJB
Z2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwogICAgIH0KKyAgICB1cGRh
dGVkUmVxdWVzdC5zZXRJc1RvcFNpdGUoZmFsc2UpOworICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3QoZGF0
YVN0b3JlLnNlc3Npb25JRCgpLCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJl
cXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7CiAKICAgICByZXR1cm4g
ZG93bmxvYWRQcm94eTsKIH0KQEAgLTE0MzgsMTcgKzExMjAsMTIgQEAgRG93bmxvYWRQcm94eSYg
V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2Vi
UGFnZVByb3gKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZChX
ZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2Us
IGNvbnN0IEFQSTo6RGF0YSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAg
IGF1dG8mIGRvd25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgUmVz
b3VyY2VSZXF1ZXN0KCksIGluaXRpYXRpbmdQYWdlLCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKIAogICAgIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAgIGlmICghcGF0aC5pc0VtcHR5
KCkpCiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBTYW5kYm94
RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0g
ICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93
bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRo
LCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFBy
b3h5OwotICAgIH0KLQorICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChkYXRhU3RvcmUuc2Vzc2lvbklEKCks
IGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwg
cGF0aCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOwogICAgIHJldHVybiBkb3dubG9hZFBy
b3h5OwogfQogCkBAIC0xNTE3LDExICsxMTk0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVm
cmVzaFBsdWdpbnMoKQogCiAjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAK
LVByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCkKLXsK
LSAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2VzcyA/IG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NJ
ZGVudGlmaWVyKCkgOiAwOwotfQotCiBQcm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6OnByZXdhcm1l
ZFByb2Nlc3NJZGVudGlmaWVyKCkKIHsKICAgICByZXR1cm4gbV9wcmV3YXJtZWRQcm9jZXNzID8g
bV9wcmV3YXJtZWRQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpIDogMDsKQEAgLTE1NTgsMTQg
KzEyMzAsMTggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3Vy
ZShjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6
c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpOwogICAgIHNl
bmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVB
c1NlY3VyZSh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7
CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVt
ZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0
d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxT
Y2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGlj
eShjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6
c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBv
bGljeSh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJv
Y2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1
cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xp
Y3kodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRh
U3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAg
ICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6UmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxT
Y2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWlu
UmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkK
QEAgLTE1NzgsMTQgKzEyNTQsMTggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxT
Y2hlbWVBc0xvY2FsKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2Jh
bFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1l
KTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVy
VVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2Vz
cyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxT
Y2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShb
dXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFT
dG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdp
c3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcm
IHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVn
aXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vz
c2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJs
U2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7CisgICAgV2Vi
c2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05v
QWNjZXNzKHVybFNjaGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpyZWdpc3RlclVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKGNvbnN0IFN0cmluZyYgdXJsU2No
ZW1lKQpAQCAtMTYwNiwxMCArMTI4Niw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVy
R2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0CiAgICAg
ICAgIHJldHVybjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycygpLmFkZCh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQ
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5y
ZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQor
ICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5l
dHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1l
Rm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6dW5yZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycyhjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MTgsMTAgKzEyOTYsOCBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Q
cm90b2NvbEhhbmRsZXJzKGNvbgogICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hl
bWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5yZW1vdmUodXJsU2NoZW1lKTsKLSAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3Rv
bVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2Vz
cyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1
cmxTY2hlbWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFz
Q2FjaGVQYXJ0aXRpb25lZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2NTUsMTYgKzEz
MzEsMTggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNh
Y2hlTW9kZWwpCiAKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6
OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
Ci0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpm
b3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUmIGRh
dGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAg
fSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5
Rm9yVGVzdGluZyhDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB7CiAgICAgdXBkYXRlQmFja0Zvcndh
cmRDYWNoZUNhcGFjaXR5KCk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRD
YWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsK
KyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2Rl
bF0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0
d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hl
TW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCAwKTsKKyAgICB9
KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50
ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE2NzQsMTIgKzEzNTIsNyBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUg
dGltZW91dEludGVydmFsKQogCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRl
RG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UsIGNvbnN0IEZy
YW1lSW5mb0RhdGEmIGZyYW1lSW5mbykKIHsKLSAgICByZXR1cm4gZW5zdXJlTmV0d29ya1Byb2Nl
c3MoJmRhdGFTdG9yZSkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGZy
YW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3lu
dGhlc2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCi17Ci0gICAgZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKS5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOworICAg
IHJldHVybiBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KGRh
dGFTdG9yZSwgKnRoaXMsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6YWRkTWVzc2FnZVJlY2VpdmVyKElQQzo6UmVjZWl2ZXJO
YW1lIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6TWVzc2FnZVJlY2VpdmVyJiBtZXNzYWdlUmVj
ZWl2ZXIpCkBAIC0xNzUwLDMwICsxNDIzLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3RvcE1l
bW9yeVNhbXBsZXIoKQogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vz
czo6U3RvcE1lbW9yeVNhbXBsZXIoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3Mo
VCYmIG1lc3NhZ2UsIFUmJiByZXBseSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBt
X25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kU3luYyhzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIHN0ZDo6Zm9yd2FyZDxVPihy
ZXBseSksIDApOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRp
YWxzKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQpCi17Ci0gICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCksIDApOwotfQotCi12
b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCi17Ci0gICAgdGVy
bWluYXRlU2VydmljZVdvcmtlcnMoKTsKLQotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOwot
ICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29s
Ojp0ZXJtaW5hdGVBbGxXZWJDb250ZW50UHJvY2Vzc2VzKCkKIHsKICAgICBWZWN0b3I8UmVmUHRy
PFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3NlcyA9IG1fcHJvY2Vzc2VzOwpAQCAtMTc4MSw0MCAr
MTQzMCwxNSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250ZW50UHJv
Y2Vzc2VzKCkKICAgICAgICAgcHJvY2Vzcy0+dGVybWluYXRlKCk7CiB9CiAKLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAo
IW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwot
Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9u
SW1taW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRl
c3RpbmcoKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0K
LQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkKLXsK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZFByb2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRl
U2VydmljZVdvcmtlcnMoKQogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBhdXRv
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICB3aGlsZSAobV9zZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzLmNvbXB1dGVTaXplKCkpCi0gICAgICAgIG1fc2VydmljZVdvcmtlclByb2Nl
c3Nlcy5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKKyAgICB3aGlsZSAoc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzZXMoKS5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKICNlbmRpZgogfQog
Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQm
IHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1
cGRhdGVBdXRvbWF0aW9uQ2FwYWJpbGl0aWVzKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoUkVNT1RF
X0lOU1BFQ1RPUikKQEAgLTIwODksMTUgKzE3MTMsMjEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cmVwb3J0V2ViQ29udGVudENQVVRpbWUoU2Vjb25kcyBjcHVUaW1lLCB1aW50NjRfdCBhY3Rpdml0
eVMKICNlbmRpZgogfQogCitXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBXZWJQcm9jZXNz
UG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3NlcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICByZXR1cm4g
cHJvY2Vzc2VzOworfQorCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0
aW9ucygpCiB7Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVQcm9jZXNzQXNzZXJ0
aW9uKCk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW10g
KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29y
a1Byb2Nlc3MoKS51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7CisgICAgfSk7CiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQogICAgIC8vIENoZWNrIG9uIG5leHQgcnVuIGxvb3Agc2luY2UgdGhl
IHdlYiBwcm9jZXNzIHByb3h5IHRva2VucyBhcmUgcHJvYmFibHkgYmVpbmcgdXBkYXRlZC4KLSAg
ICBjYWxsT25NYWluUnVuTG9vcChbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0g
ewotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBm
b3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
KQorICAgIGNhbGxPbk1haW5SdW5Mb29wKFtdIHsKKyAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNl
V29ya2VyUHJvY2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgICAgIHNl
cnZpY2VXb3JrZXJQcm9jZXNzLnVwZGF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzQXNzZXJ0aW9uKCk7
CiAgICAgfSk7CiAjZW5kaWYKQEAgLTIxMDcsNyArMTczNyw3IEBAIGJvb2wgV2ViUHJvY2Vzc1Bv
b2w6OmlzU2VydmljZVdvcmtlclBhZ2VJRChXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCkg
Y29uc3QKIHsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gRklYTUU6IFRoaXMg
aXMgaW5lZmZpY2llbnQuCi0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJv
Y2Vzc2VzLCBbcGFnZUlEXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yo
c2VydmljZVdvcmtlclByb2Nlc3NlcygpLCBbcGFnZUlEXShhdXRvJiBwcm9jZXNzKSB7CiAgICAg
ICAgIHJldHVybiBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJQYWdlUHJveHkocGFnZUlEKTsKICAg
ICB9KTsKICNlbmRpZgpAQCAtMjMyOSwxNCArMTk1OSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OmNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCkKIH0KIAogI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi12b2lkIFdlYlByb2Nlc3NQb29sOjpkaWRDb21taXRD
cm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgdG9Eb21haW4sIE9wdGlvblNldDxDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpG
bGFnPiBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBh
Z2VQcm94eUlELCBQYWdlSWRlbnRpZmllciB3ZWJQYWdlSUQpCi17Ci0gICAgaWYgKCFtX25ldHdv
cmtQcm9jZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5kaWRD
b21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihzZXNzaW9uSUQsIGZyb21Eb21haW4s
IHRvRG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFn
ZUlEKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJh
Y3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zKQogewog
ICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0RG9tYWluc1dp
dGhVc2VySW50ZXJhY3Rpb24oZG9tYWlucykpOwpAQCAtMjM4NywyNyArMjAwOSwyNyBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjp1cGRhdGVBdWRpYmxlTWVkaWFBc3NlcnRpb25zKCkKIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sIHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgaWYgKG1fdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQor
ICAgIGlmIChzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0VCUFJPQ0VTU1BP
T0xfUkVMRUFTRV9MT0coU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3M6ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9H
X1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
czogKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2Vzcyk7CiAKLSAgICBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwotICAgIHRlcm1pbmF0ZVNlcnZp
Y2VXb3JrZXJzKCk7Ci0gICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBzX3VzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJv
Y2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2Vy
cygpOwogfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogYm9vbCBXZWJQcm9jZXNzUG9v
bDo6aGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdAog
ewotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10oYXV0
byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMoKSwgW10oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2
aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQogCiBi
b29sIFdlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9y
VGVzdGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2Vy
dmljZVdvcmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVy
biBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCk7
CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRl
eCBkMWYxZmU5NjE1MDZhMWU1ZjEzMjVmYTk5YTU2MDhiOTUwYjZhYjcxLi43YzI1NDg5MDM2Njg5
Y2Y5ZmFlYjg3ODE5MDY3OWRhZjExMTZhMzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmgKQEAgLTgxLDcgKzgxLDYgQEAgT0JKQ19DTEFTUyBXS1ByZWZlcmVuY2VP
YnNlcnZlcjsKIAogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBBdXRvbWF0aW9uQ2xpZW50OwotY2xh
c3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogY2xhc3MgRG93bmxvYWRDbGllbnQ7CiBj
bGFzcyBIVFRQQ29va2llU3RvcmU7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZUNsaWVudDsKQEAgLTE4
MCw3ICsxNzksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIaXN0b3J5Q2xpZW50KHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiYmKTsKICAgICB2b2lkIHNl
dERvd25sb2FkQ2xpZW50KFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PiYmKTsKICAgICB2
b2lkIHNldEF1dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNs
aWVudD4mJik7Ci0gICAgdm9pZCBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQo
c3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmKTsKIAog
ICAgIHZvaWQgc2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0
IFN0cmluZyYpOwogICAgIGNvbnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5k
bGVJZGVudGlmaWVyKCkgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT5jdXN0b21XZWJDb250ZW50
U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKTsgfQpAQCAtMTkxLDE3ICsxODksOSBAQCBwdWJsaWM6
CiAgICAgLy8gbnVsbCBjaGVja3MgaW4gV2ViUGFnZVByb3h5LgogICAgIFdlYlByb2Nlc3NQcm94
eSogZHVtbXlQcm9jZXNzUHJveHkoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSBjb25zdCB7IHJl
dHVybiBtX2R1bW15UHJvY2Vzc1Byb3hpZXMuZ2V0KHNlc3Npb25JRCkuZ2V0KCk7IH0KIAotICAg
IC8vIFdlYlByb2Nlc3Mgb3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJy
ZW50IHByb2Nlc3MgbW9kZWwuIFRoZSBjb25uZWN0aW9uIG11c3QgYmUgbm9uLW51bGwuCi0gICAg
SVBDOjpDb25uZWN0aW9uKiBuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKLQogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1lc3Nh
Z2UpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzRm9y
U2Vzc2lvbihjb25zdCBUJiBtZXNzYWdlLCBQQUw6OlNlc3Npb25JRCk7CiAKLSAgICAvLyBTZW5k
cyB0aGUgbWVzc2FnZSB0byBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNzIGFzIGFwcHJvcG9y
aWF0ZSBmb3IgY3VycmVudCBwcm9jZXNzIG1vZGVsLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHZvaWQgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpOwotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHZvaWQgc2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNz
KFQmJiBtZXNzYWdlLCBVJiYgcmVwbHkpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQg
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdl
KTsKLQogICAgIHZvaWQgcHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkq
KTsKIAogICAgIFdlYlByb2Nlc3NDYWNoZSYgd2ViUHJvY2Vzc0NhY2hlKCkgeyByZXR1cm4gbV93
ZWJQcm9jZXNzQ2FjaGUuZ2V0KCk7IH0KQEAgLTIwOSw5ICsxOTksNiBAQCBwdWJsaWM6CiAgICAg
Ly8gRGlzY29ubmVjdCB0aGUgcHJvY2VzcyBmcm9tIHRoZSBjb250ZXh0LgogICAgIHZvaWQgZGlz
Y29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKLSAgICBXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmUqIHdlYnNpdGVEYXRhU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX3dlYnNpdGVEYXRh
U3RvcmUuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFByaW1hcnlEYXRhU3RvcmUoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsgbV93ZWJzaXRlRGF0YVN0b3JlID0gJmRhdGFTdG9y
ZTsgfQotCiAgICAgUmVmPFdlYlBhZ2VQcm94eT4gY3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50Jiwg
UmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogCiAgICAgdm9pZCBwYWdlQmVnaW5Vc2lu
Z1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2Vic2l0ZURhdGFTdG9y
ZSYpOwpAQCAtMjYyLDEwICsyNDksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRTdXBwb3J0ZWRQ
bHVnaW4oU3RyaW5nJiYgbWF0Y2hpbmdEb21haW4sIFN0cmluZyYmIG5hbWUsIEhhc2hTZXQ8U3Ry
aW5nPiYmIG1pbWVUeXBlcywgSGFzaFNldDxTdHJpbmc+IGV4dGVuc2lvbnMpOwogICAgIHZvaWQg
Y2xlYXJTdXBwb3J0ZWRQbHVnaW5zKCk7CiAKLSAgICBQcm9jZXNzSUQgbmV0d29ya1Byb2Nlc3NJ
ZGVudGlmaWVyKCk7CiAgICAgUHJvY2Vzc0lEIHByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyKCk7
CiAgICAgdm9pZCBhY3RpdmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JUZXN0aW5nKFByb2Nl
c3NJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJik7Ci0gICAg
Ym9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcm
KTsKIAogICAgIFdlYlBhZ2VHcm91cCYgZGVmYXVsdFBhZ2VHcm91cCgpIHsgcmV0dXJuIG1fZGVm
YXVsdFBhZ2VHcm91cC5nZXQoKTsgfQogCkBAIC0zMDcsOCArMjkyLDYgQEAgcHVibGljOgogICAg
IEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlDbGllbnQoKSB7IHJldHVy
biAqbV9oaXN0b3J5Q2xpZW50OyB9CiAgICAgV2ViQ29udGV4dENsaWVudCYgY2xpZW50KCkgeyBy
ZXR1cm4gbV9jbGllbnQ7IH0KIAotICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
JiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVybiAqbV9jdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQ7IH0KLQogICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKICAgICAg
ICAgdW5zaWduZWQgd2tWaWV3Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHdrUGFnZUNvdW50OwpA
QCAtMzI0LDggKzMwNyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc0Rp
ZFJlc3VtZSgpOwogICAgIHZvaWQgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIAotICAgIHZv
aWQgZmx1c2hDb29raWVzKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKLQogICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNo
RmFpbEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nID0gdmFsdWU7IH0KICAgICBib29sIHNob3VsZE1ha2VOZXh0V2Vi
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRNYWtl
TmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZzsgfQogICAgIHZvaWQgc2V0U2hvdWxk
TWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsg
bV9zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1
ZTsgfQpAQCAtMzg4LDE5ICszNjksMTMgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICAvLyBOZXR3
b3JrIFByb2Nlc3MgTWFuYWdlbWVudAotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIGVuc3VyZU5l
dHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3JlID0gbnVs
bHB0cik7Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MoKSBjb25zdCB7
IHJldHVybiBtX25ldHdvcmtQcm9jZXNzLmdldCgpOyB9CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vz
c0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwogCi0gICAgdm9pZCBnZXROZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94
eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwotCiAgICAgYm9v
bCBpc1NlcnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmllcikgY29uc3Q7CiAj
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIHZvaWQgZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmLCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKKyAgICBzdGF0aWMgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVj
dGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwogICAgIHZvaWQgcmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vz
c1Byb3h5Jik7Ci0gICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQoKSBjb25zdCB7
IHJldHVybiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKTsgfQotICAgIHZv
aWQgc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGJvb2wgYWxsb3dz
KSB7IG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyID0gYWxsb3dzOyB9
Ci0gICAgYm9vbCBhbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoKSBjb25z
dCB7IHJldHVybiBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjsgfQor
ICAgIHNpemVfdCBzZXJ2aWNlV29ya2VyUHJveGllc0NvdW50KCkgY29uc3QgeyByZXR1cm4gc2Vy
dmljZVdvcmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCk7IH0KICAgICB2b2lkIHVwZGF0ZVNl
cnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpOwogICAgIGNvbnN0
IE9wdGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXI+JiB1c2VyQ29udGVudENv
bnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSBjb25zdCB7IHJldHVybiBtX3Vz
ZXJDb250ZW50Q29udHJvbGxlcklERm9yU2VydmljZVdvcmtlcjsgfQogICAgIGJvb2wgaGFzU2Vy
dmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdDsKQEAgLTQ1OSw4
ICs0MzQsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiBtX2Fsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eTsgfQog
ICAgIGJvb2wgc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbjsgfQogCi0gICAgdm9pZCBzeW50aGVz
aXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCk7Ci0gICAgCiAjaWYgRU5BQkxFKEdB
TUVQQUQpCiAgICAgdm9pZCBnYW1lcGFkQ29ubmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYsIFdlYkNv
cmU6OkV2ZW50TWFrZXNHYW1lcGFkc1Zpc2libGUpOwogICAgIHZvaWQgZ2FtZXBhZERpc2Nvbm5l
Y3RlZChjb25zdCBVSUdhbWVwYWQmKTsKQEAgLTQ5OCw3ICs0NzEsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpOwogCiAjaWYgRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICB2b2lkIGRpZENvbW1pdENyb3NzU2l0ZUxv
YWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4m
IHRvRG9tYWluLCBPcHRpb25TZXQ8V2ViQ29yZTo6Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFu
c2Zlcjo6RmxhZz4sIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlm
aWVyKTsKICAgICB2b2lkIHNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYpOwogICAgIHZvaWQgc2VlZFJlc291cmNlTG9hZFN0
YXRpc3RpY3NGb3JUZXN0aW5nKGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmaXJz
dFBhcnR5RG9tYWluLCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdGhpcmRQYXJ0
eURvbWFpbiwgYm9vbCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIHNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUlt
bWVkaWF0ZWx5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CkBAIC01MjUsOCArNDk3LDgg
QEAgcHVibGljOgogICAgIAogICAgIFBsdWdJbkF1dG9TdGFydFByb3ZpZGVyJiBwbHVnSW5BdXRv
U3RhcnRQcm92aWRlcigpIHsgcmV0dXJuIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI7IH0KIAot
ICAgIHZvaWQgc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKLSAgICBi
b29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3Vz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7IH0KKyAgICBzdGF0aWMgdm9pZCBzZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOworICAgIHN0YXRpYyBib29sIHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKSB7IHJldHVybiBzX3VzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3M7IH0KIAogI2lmIEVOQUJMRShDRlBSRUZTX0RJUkVDVF9NT0RFKQogICAg
IHZvaWQgbm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgT3B0aW9uYWw8U3RyaW5nPiYgZW5jb2RlZFZhbHVlKTsKQEAg
LTUzOCw5ICs1MTAsMTUgQEAgcHVibGljOgogICAgIGludDMyX3QgdXNlcklkKCkgY29uc3QgeyBy
ZXR1cm4gbV91c2VySWQ7IH0KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgT1NP
YmplY3RQdHI8eHBjX29iamVjdF90PiB4cGNFbmRwb2ludE1lc3NhZ2UoKSBjb25zdDsKLSAgICB2
b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKE9TT2JqZWN0UHRy
PHhwY19vYmplY3RfdD4gZW5kcG9pbnRNZXNzYWdlKTsKKyAgICBzdGF0aWMgdm9pZCBwbGF0Zm9y
bUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyYpOworICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3Rv
Y29sSGFuZGxlcnMoKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgc3RhdGljIFN0
cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBwYXJlbnRC
dW5kbGVEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJl
Y3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsK
KyAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwogI2VuZGlm
CiAKIHByaXZhdGU6CkBAIC01NTYsOCArNTM0LDYgQEAgcHJpdmF0ZToKICAgICBXZWJQcm9jZXNz
UHJveHkmIGNyZWF0ZU5ld1dlYlByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSosIFdlYlByb2Nlc3NQ
cm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkOjpObyk7CiAg
ICAgdm9pZCBpbml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmLCBXZWJzaXRl
RGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94
eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKIAotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLQogICAgIHZvaWQg
aGFuZGxlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1l
LCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHkpOwogICAgIHZvaWQgaGFuZGxlU3luY2hyb25v
dXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNv
bnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyRGF0
YSYmKT4mJik7CiAKQEAgLTU4MSwxNCArNTU3LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdXNl
c1NpbmdsZVdlYlByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPnVzZXNT
aW5nbGVXZWJQcm9jZXNzKCk7IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3Rh
dGljIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBw
YXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNo
ZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3Rv
cnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwot
I2VuZGlmCi0KICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHJlZ2lzdGVyTm90aWZpY2F0
aW9uT2JzZXJ2ZXJzKCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJz
KCk7CkBAIC02MzAsOSArNTk4LDggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lv
bklELCBXZWFrUHRyPFdlYlByb2Nlc3NQcm94eT4+IG1fZHVtbXlQcm9jZXNzUHJveGllczsgLy8g
TGlnaHR3ZWlnaHQgV2ViUHJvY2Vzc1Byb3h5IG9iamVjdHMgd2l0aG91dCBiYWNraW5nIHByb2Nl
c3MuCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2Vha0hhc2hTZXQ8V2ViUHJv
Y2Vzc1Byb3h5PiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXM7CisgICAgc3RhdGljIFdlYWtIYXNo
U2V0PFdlYlByb2Nlc3NQcm94eT4mIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKTsKICAgICBib29s
IG1fd2FpdGluZ0ZvcldvcmtlckNvbnRleHRQcm9jZXNzQ29ubmVjdGlvbiB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlciB7IGZhbHNl
IH07CiAgICAgU3RyaW5nIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudDsKICAgICBPcHRpb25hbDxX
ZWJQcmVmZXJlbmNlc1N0b3JlPiBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlczsKICAgICBPcHRp
b25hbDxVc2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyPiBtX3VzZXJDb250ZW50Q29udHJv
bGxlcklERm9yU2VydmljZVdvcmtlcjsKQEAgLTY0OCw3ICs2MTUsNiBAQCBwcml2YXRlOgogICAg
IHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+IG1fYXV0b21hdGlvbkNsaWVu
dDsKICAgICBVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4gbV9kb3dubG9hZENsaWVudDsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4gbV9o
aXN0b3J5Q2xpZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiAKICAgICBSZWZQdHI8
V2ViQXV0b21hdGlvblNlc3Npb24+IG1fYXV0b21hdGlvblNlc3Npb247CiAKQEAgLTY4MCw4ICs2
NDYsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9tZW1vcnlTYW1wbGVyRW5hYmxlZCB7IGZhbHNl
IH07CiAgICAgZG91YmxlIG1fbWVtb3J5U2FtcGxlckludGVydmFsIHsgMTQwMC4wIH07CiAKLSAg
ICBSZWZQdHI8V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmU7Ci0K
ICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIFJlZlB0cjxXZWJDb250ZXh0U3VwcGxl
bWVudD4sIFB0ckhhc2g8Y29uc3QgY2hhcio+PiBXZWJDb250ZXh0U3VwcGxlbWVudE1hcDsKICAg
ICBXZWJDb250ZXh0U3VwcGxlbWVudE1hcCBtX3N1cHBsZW1lbnRzOwogCkBAIC03MTQsOCArNjc4
LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9wcm9jZXNzVGVybWluYXRpb25FbmFibGVkIHsg
dHJ1ZSB9OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0
d29ya1Byb2Nlc3M7Ci0KICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8RGljdGlvbmFyeUNh
bGxiYWNrPj4gbV9kaWN0aW9uYXJ5Q2FsbGJhY2tzOwogCiAjaWYgVVNFKFNPVVApCkBAIC04MjAs
MzEgKzc4MiwxMyBAQCBwcml2YXRlOgogI2Vsc2UKICAgICBib29sIG1faXNEZWxheWVkV2ViUHJv
Y2Vzc0xhdW5jaERpc2FibGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgbV91c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzIHsgZmFsc2UgfTsKKyAgICBzdGF0aWMgYm9vbCBzX3Vz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQogICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IG1f
ZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb247CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4gbV9lbmRwb2ludE1lc3NhZ2U7Ci0jZW5k
aWYKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5k
VG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJv
Y2VzcyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25l
dHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5n
UHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpCi17Ci0gICAgZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2Fy
ZDxUPihtZXNzYWdlKSwgMCk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZW5kVG9BbGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSkKIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCmluZGV4IGQ2NjEwMzM4YjZj
ZjYwYTI3YTZmNzVkYWVjMzQ5YThmNzJhYjNiODUuLjU0OTJhOWU5ZWM2ZTI4OGUwZmJjOTFkMjU0
OWFlMDliMjJkNmY3MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmNwcApAQCAtNzM4LDcgKzczOCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXRQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbih1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4sIE1lCiAKIHZv
aWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oTWVzc2FnZXM6
OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVw
bHkmJiByZXBseSkKIHsKLSAgICBtX3Byb2Nlc3NQb29sLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24oKnRoaXMsIFdURk1vdmUocmVwbHkpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0
d29ya1Byb2Nlc3MoKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKnRoaXMsIFdURk1vdmUo
cmVwbHkpKTsKIH0KIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKQEAgLTk1NSw5ICs5NTUsOSBA
QCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hl
ciogbGF1bmNoZXIsIElQQzo6Q29ubmVjdAogICAgIH0KIAogI2lmIFBMQVRGT1JNKENPQ09BKQot
ICAgIGF1dG8gZW5kcG9pbnRNZXNzYWdlID0gcHJvY2Vzc1Bvb2woKS54cGNFbmRwb2ludE1lc3Nh
Z2UoKTsKKyAgICBhdXRvIGVuZHBvaW50TWVzc2FnZSA9IHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3
b3JrUHJvY2VzcygpLnhwY0VuZHBvaW50TWVzc2FnZSgpOwogICAgIGlmIChlbmRwb2ludE1lc3Nh
Z2UpCi0gICAgICAgIHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2FnZShjb25uZWN0aW9uKCktPnhw
Y0Nvbm5lY3Rpb24oKSwgZW5kcG9pbnRNZXNzYWdlLmdldCgpKTsKKyAgICAgICAgeHBjX2Nvbm5l
Y3Rpb25fc2VuZF9tZXNzYWdlKGNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbmRwb2lu
dE1lc3NhZ2UpOwogI2VuZGlmCiAKICAgICBSRUxFQVNFX0FTU0VSVCghbV93ZWJDb25uZWN0aW9u
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29h
L1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQppbmRleCA3YzQ0MDg1MTY3NzM2
OGI1ZGY4OWE4NmZmNGQzYjUxNTM0YjkwYmI3Li42Mjk3MTA3MWJlOTM4MWY3NzdkYWVkNTk4ZDFi
ZDA2NDE1M2E2NzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCkBAIC0y
OCwxMCArMjgsMTIgQEAKIAogI2ltcG9ydCAiQ29va2llU3RvcmFnZVV0aWxzQ0YuaCIKICNpbXBv
cnQgIkRlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLmgiCisjaW1wb3J0ICJOZXR3b3JrUHJvY2Vzc1By
b3h5LmgiCiAjaW1wb3J0ICJTYW5kYm94VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJTdG9yYWdlTWFu
YWdlci5oIgogI2ltcG9ydCAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgiCiAjaW1wb3J0
ICJXZWJQcmVmZXJlbmNlc0tleXMuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgogI2lt
cG9ydCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCiAjaW1wb3J0ICJXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5oIgogI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNl
c3Npb24uaD4KQEAgLTQ0LDYgKzQ2LDcgQEAKICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgogI2ltcG9ydCA8d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4K
KyNpbXBvcnQgPHd0Zi9jb2NvYS9FbnRpdGxlbWVudHMuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC01NjIsNCArNTY1
LDIxIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVpbml0aWFsaXplQXBwQm91bmREb21haW5z
KCkKIH0KICNlbmRpZgogCitib29sIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYgZW50aXRsZW1lbnQpCit7CisgICAg
cmV0dXJuIFdURjo6aGFzRW50aXRsZW1lbnQobmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCkt
PnhwY0Nvbm5lY3Rpb24oKSwgZW50aXRsZW1lbnQudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nl
c3MoeHBjX29iamVjdF90IGVuZHBvaW50TWVzc2FnZSkKK3sKKyAgICBmb3IgKGF1dG8mIHByb2Nl
c3MgOiBtX3Byb2Nlc3NlcykgeworICAgICAgICBpZiAocHJvY2Vzcy5zdGF0ZSgpICE9IEF1eGls
aWFyeVByb2Nlc3NQcm94eTo6U3RhdGU6OlJ1bm5pbmcpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKCFwcm9jZXNzLmNvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBhdXRvIGNvbm5lY3Rpb24gPSBwcm9jZXNzLmNvbm5lY3Rpb24oKS0+eHBjQ29u
bmVjdGlvbigpOworICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlv
biwgZW5kcG9pbnRNZXNzYWdlKTsKKyAgICB9Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXgg
MDgzMGNhNzVhN2ZjMzhlNjQ1Yjc3NWIzOWIzMzc1ZDRjMjA1MDM3ZC4uM2QyOTE1OTA0ZDNlNTc0
MmI4NjcyMjVkYTgzZWVmMTBjMDc3Mzg4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTM3LDYgKzM3
LDcgQEAKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRl
ICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRDYWNoZS5o
IgorI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYktpdDJJ
bml0aWFsaXplLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJv
Y2Vzc0NhY2hlLmgiCkBAIC03NSw2ICs3NiwxMCBAQAogI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlv
bkNvb3JkaW5hdG9yLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUg
IkRlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIHN0YXRpYyBib29sIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnM7CkBA
IC04MywxMyArODgsMTkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1dlYnNpdGVEYXRh
UmVjb3Jkc0ZvckFsbE9yaWdpbnMoKQogICAgIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFs
bE9yaWdpbnMgPSB0cnVlOwogfQogCi1zdGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vi
c2l0ZURhdGFTdG9yZSo+JiBub25EZWZhdWx0RGF0YVN0b3JlcygpCitzdGF0aWMgSGFzaE1hcDxQ
QUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBhbGxEYXRhU3RvcmVzKCkKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4+IG1hcDsKICAgICBy
ZXR1cm4gbWFwOwogfQogCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0
YVN0b3JlKEZ1bmN0aW9uPHZvaWQoV2Vic2l0ZURhdGFTdG9yZSYpPiYmIGZ1bmN0aW9uKQorewor
ICAgIGZvciAoYXV0byogZGF0YVN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAg
ICAgICBmdW5jdGlvbigqZGF0YVN0b3JlKTsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdl
YnNpdGVEYXRhU3RvcmU6OmNyZWF0ZU5vblBlcnNpc3RlbnQoKQogewogICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb246
OmNyZWF0ZShJc1BlcnNpc3RlbnQ6Ok5vKSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlRXBoZW1l
cmFsU2Vzc2lvbklEKCkpKTsKQEAgLTExNSw3ICsxMjYsNyBAQCBXZWJzaXRlRGF0YVN0b3JlOjpX
ZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbj4mJiBjb25m
aWd1cgogI2VuZGlmCiB7CiAgICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxl
Z2VzKCkpOwotICAgIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVnaXN0
ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMTI4LDE3ICsxMzksMTIgQEAgV2Vic2l0ZURh
dGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUoKQogCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiAK
LSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQo
KSkgewotICAgICAgICBBU1NFUlQobm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9u
SUQpID09IHRoaXMpOwotICAgICAgICBub25EZWZhdWx0RGF0YVN0b3JlcygpLnJlbW92ZShtX3Nl
c3Npb25JRCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9v
bDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQotICAg
IH0KKyAgICBBU1NFUlQoYWxsRGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7
CisgICAgYWxsRGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5yZW1vdmVTZXNzaW9uKCp0aGlzKTsKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0g
ICAgICAgIGlmIChhdXRvKiBncHVQcm9jZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbklmQ3JlYXRlZCgpKQotICAgICAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNz
aW9uKG1fc2Vzc2lvbklEKTsKKyAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkKKyAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5
LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKICNlbmRpZgogfQogCkBAIC0xNjksMTcgKzE3
NSwzMyBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKQog
ICAgIHJldHVybiAhIWdsb2JhbERlZmF1bHREYXRhU3RvcmUoKTsKIH0KIAotdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpCit2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpCiB7Ci0gICAgaWYgKG1fc2Vzc2lv
bklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgYXV0
byByZXN1bHQgPSBub25EZWZhdWx0RGF0YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7
Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAg
YXV0byByZXN1bHQgPSBhbGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworfQorCitXZWJzaXRl
RGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25J
RChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgcmV0dXJuIGFsbERhdGFTdG9yZXMo
KS5nZXQoc2Vzc2lvbklEKTsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFT
dG9yZTo6bmV0d29ya1Byb2Nlc3MoKQoreworICAgIGlmICghbV9uZXR3b3JrUHJvY2Vzcykgewor
ICAgICAgICBpZiAobV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBtX3Nlc3Npb25JRCA9PSBQ
QUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQorICAgICAgICAgICAgbV9uZXR3b3Jr
UHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHROZXR3b3JrUHJvY2VzcygpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nl
c3NQcm94eTo6Y3JlYXRlKCk7CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24o
KnRoaXMpOwogICAgIH0KKworICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKIH0KIAotV2Vi
c2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0
b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK05ldHdvcmtQcm9jZXNz
UHJveHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgPyBu
b25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0cjsKKyAgICByZXR1
cm4gY29uc3RfY2FzdDxXZWJzaXRlRGF0YVN0b3JlJj4oKnRoaXMpLm5ldHdvcmtQcm9jZXNzKCk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQ
cm94eSYgcHJvY2VzcykKQEAgLTE5NSwxMiArMjE3LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojp1bnJlZ2lzdGVyUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiAgICAgbV9wcm9j
ZXNzZXMucmVtb3ZlKHByb2Nlc3MpOwogfQogCi1XZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURhdGFT
dG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpCi17Ci0gICAgYXV0
byBwb29scyA9IHByb2Nlc3NQb29scygxKTsKLSAgICByZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8g
bnVsbHB0ciA6IHBvb2xzLmJlZ2luKCktPmdldCgpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9oYXNSZXNv
bHZlZERpcmVjdG9yaWVzKQpAQCAtNDQwLDI4ICs0NTYsMjEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlw
ZXMsIE8KICNlbmRpZgogCiAgICAgYXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21w
dXRlTmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlRm9yRGF0YUZldGNoKGRhdGFUeXBlcywgIWlzUGVy
c2lzdGVudCgpKTsKLSAgICBpZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NB
Y2Nlc3NUeXBlOjpOb25lKSB7Ci0gICAgICAgIGF1dG8gcG9vbHMgPSBuZXR3b3JrUHJvY2Vzc0Fj
Y2Vzc1R5cGUgPT0gUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaCA/IGVuc3VyZVByb2Nlc3NQb29s
cygpIDogcHJvY2Vzc1Bvb2xzKCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
b29scykgewotICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsK
LSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAg
ICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgotICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotCisgICAgc3dp
dGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NU
eXBlOjpMYXVuY2g6CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIEFTU0VSVCht
X25ldHdvcmtQcm9jZXNzKTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBQcm9jZXNz
QWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6CisgICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNz
KSB7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygp
OwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmZldGNoV2Vic2l0
ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yLCBwcm9jZXNzUG9vbF0oV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsKKyAgICAgICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPmZldGNoV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFU
eXBlcywgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShXZWJzaXRlRGF0YSB3ZWJz
aXRlRGF0YSkgewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVu
ZGluZ0NhbGxiYWNrKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6
CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGF1dG8gd2ViUHJvY2Vzc0FjY2Vzc1R5cGUg
PSBjb21wdXRlV2ViUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQ
ZXJzaXN0ZW50KCkpOwpAQCAtNzI0LDMxICs3MzMsMjQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRp
bWUKICAgICBib29sIGRpZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSA9
IGZhbHNlOwogI2VuZGlmCiAgICAgYXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21w
dXRlTmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQ
ZXJzaXN0ZW50KCkpOwotICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vz
c0FjY2Vzc1R5cGU6Ok5vbmUpIHsKLSAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNz
QWNjZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bv
b2xzKCkgOiBwcm9jZXNzUG9vbHMoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHBvb2xzKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkg
ewotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICBz
d2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgeworICAgIGNhc2UgUHJvY2Vzc0FjY2Vz
c1R5cGU6OkxhdW5jaDoKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgQVNTRVJU
KG1fbmV0d29ya1Byb2Nlc3MpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFByb2Nl
c3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpIHsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNr
KCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vi
c2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNr
QWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2Us
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0
b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAjaWYgRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICAgICAgICAgIGRpZE5vdGlmeU5ldHdvcmtQ
cm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgorICAgICAgICBi
cmVhazsKICAgICB9CiAKICAgICBhdXRvIHdlYlByb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZVdl
YlByb2Nlc3NBY2Nlc3NUeXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50
KCkpOwpAQCAtODkzLDE0ICs4OTUsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURh
dGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogI2lmIEVO
QUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlu
cyhXZWJzaXRlRGF0YVR5cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MpKSB7CiAgICAgICAgIGlm
ICghZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhKSB7Ci0gICAgICAg
ICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0Nh
bGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRh
KG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3Zl
UGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRl
V2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geworICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVt
b3ZlUGVuZGluZ0NhbGxiYWNrKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAg
ICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CkBAIC05OTQsMTIg
Kzk5MSwxMCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NB
Y2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZM
YXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAg
ICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAgICAg
ICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgpAQCAtMTAyMSw3ICsxMDE2
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRl
RGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3QgVmUKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAg
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdp
bnMobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RT
Q2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwg
cHJvY2Vzc1Bvb2xdIHsKKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0
ZURhdGFGb3JPcmlnaW5zKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhv
c3ROYW1lcywgSFNUU0NhY2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwogICAgICAg
ICB9CkBAIC0xMTgwLDE4ICsxMTc1LDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3Zl
RGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKFNl
Y29uZHMgc2Vjb25kcykKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vz
c1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdv
cmtlckZldGNoVGltZW91dEZvclRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDAp
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmcoc2Vjb25kcyks
IE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZv
clRlc3Rpbmc6OlJlcGx5KCksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0
U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rp
bmc6OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9y
VGVzdGluZygpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZl
dGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwogfQogCiAjaWYgRU5BQkxFKFJFU09V
UkNFX0xPQURfU1RBVElTVElDUykKQEAgLTEyMDEsOCArMTE5MCw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50
LCBDb21wbGV0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVu
c3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQs
IG1heGltdW1FbnRyeUNvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lv
bklELCBtYXhpbXVtRW50cnlDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5l
VGFyZ2V0Q291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTEyMTEsOCArMTE5OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVF
bnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uCiAgICAgCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnNldFBydW5lRW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3Vu
dCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291
bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTIyMSw4ICsxMjA4LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRz
LCBDb21wbGV0aW9uSGFuZGxlcjwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9z
ZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklE
LCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRz
IHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTEyMzEsMjAgKzEyMTcsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVt
VGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLAogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vj
b25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNz
aW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAgICAgCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kdW1wUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50
UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1By
ZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjU2LDEyICsxMjM1LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2kKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBw
cm9jZXNzLT5pc1ByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUHJl
dmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjczLDEy
ICsxMjQ3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm8KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuaXNHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyOTIsOCArMTI2
MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bv
b2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFBy
ZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2Rl
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xMzA3LDEwICsxMjc1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQ
cmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGkKICAg
ICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNl
dFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZUZv
ckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sIGlzVmVyeVByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
MzIyLDEyICsxMjg3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2Uo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTEzNDEsMTAgKzEzMDEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhh
bmRsZQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3Zh
bChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xMzUzLDggKzEzMTAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdgogICAgIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5zZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3Zh
bChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZv
cmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJU
b3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1l
VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
MzY4LDIyICsxMzI0LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRl
clRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvCiAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YmZyYW1lVW5kZXJU
b3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBz
dWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0s
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVy
KGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1
YkZyYW1lVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3Vi
RnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRl
cihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3Qg
VVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTM5NywyMyArMTM0NSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVQog
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRT
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB0b3BGcmFtZVVSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVz
b3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omlz
UmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBj
b25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
b21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVy
ZWRBc1N1YnJlc291cmNlVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BG
cmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3Vi
cmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDI3LDEwICsxMzY2LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3Qg
VVJMJiBzdWJyZXNvdXJjZVVSTCwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNv
bnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NDIsMTIg
KzEzNzgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUgogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5z
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJl
Y3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZy
YW1lVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ1OSwxMiArMTM5MCw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9w
RnJhbWVVUkwsIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RG
cm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20s
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NzYs
MjUgKzE0MDIsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb24KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BG
cmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9t
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVk
RnJvbSwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1Rv
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRG
cm9tIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE1MDYsNjAgKzE0MjEsNDEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBy
ZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBwcm9jZXNzLT5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclByZXZhbGVudFJlc291
cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVz
ZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFBh
cmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UGFy
YW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSgpCiB7
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnN1
Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25JRCwgW10geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zdWJtaXRUZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxs
VGltZSBtb2RpZmllZFNpbmNlLCBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3Jh
bmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50KG1fc2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25J
RCwgbW9kaWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YVN1bW1hcnkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIHN0cnVjdCBD
YWxsYmFja0FnZ3JlZ2F0b3IgOiBSZWZDb3VudGVkPENhbGxiYWNrQWdncmVnYXRvcj4gewotICAg
ICAgICBDYWxsYmFja0FnZ3JlZ2F0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCisgICAgc3RydWN0IExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yIDogUmVmQ291
bnRlZDxMb2NhbENhbGxiYWNrQWdncmVnYXRvcj4geworICAgICAgICBMb2NhbENhbGxiYWNrQWdn
cmVnYXRvcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAg
ICAgICAgICAgIDogbV9jb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAg
ICAgICAgfTsKIAotICAgICAgICB+Q2FsbGJhY2tBZ2dyZWdhdG9yKCkKKyAgICAgICAgfkxvY2Fs
Q2FsbGJhY2tBZ2dyZWdhdG9yKCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKIApAQCAtMTU3NCwzOCArMTQ3MCwzMSBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFu
ZGxlcjx2bwogICAgICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4gbV9jb21wbGV0aW9uSGFu
ZGxlcjsKICAgICAgICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhp
cmRQYXJ0eURhdGE+IG1fcmVzdWx0czsKICAgICB9OwotCi0gICAgUmVmUHRyPENhbGxiYWNrQWdn
cmVnYXRvcj4gY2FsbGJhY2tBZ2dyZWdhdG9yID0gYWRvcHRSZWYobmV3IENhbGxiYWNrQWdncmVn
YXRvcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5z
ZW5kUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcykuZ2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbY2FsbGJhY2tB
Z2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYgZGF0YSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+YWRkUmVzdWx0KFdURk1vdmUoZGF0YSkpOwotICAgICAgICAgICAgfSk7Cisg
ICAgCisgICAgYXV0byBsb2NhbENhbGxiYWNrQWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBMb2Nh
bENhbGxiYWNrQWdncmVnYXRvcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworICAgIAor
ICAgIGF1dG8gd3RmQ2FsbGJhY2tBZ2dyZWdhdG9yID0gV1RGOjpDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBsb2NhbENhbGxi
YWNrQWdncmVnYXRvcl0geworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmdldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShtX3Nlc3Npb25JRCwgW2xvY2FsQ2FsbGJhY2tBZ2dyZWdh
dG9yXShWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0
YT4mJiBkYXRhKSB7CisgICAgICAgICAgICBsb2NhbENhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVz
dWx0KFdURk1vdmUoZGF0YSkpOwogICAgICAgICB9KTsKLSAgICB9CisgICAgfSk7CisgICAgCisg
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9v
bHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YUltbWVkaWF0ZWx5KFt3dGZDYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRH
cmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9j
ZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0s
IHNob3VsZEdyYW5kZmF0aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVD
b29raWVCbG9ja2luZ1VwZGF0ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0
aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE2MTQsMjQgKzE1MDMsMTMgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxl
dGlvbkhhbmQKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nl
c3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9j
ZXNzaW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+c3RhdGlzdGljc0RhdGFi
YXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb21wbGV0aW9u
SGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdGF0aXN0aWNzRGF0YWJhc2VI
YXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vj
b25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xNjQzLDIyICsxNTIxLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFz
dFNlZW4oY29uc3QgVVJMJiB1cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhCiAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0TGFzdFNlZW4o
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMs
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldExhc3RTZWVuKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQgZG9t
YWluSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5k
b21haW5JREV4aXN0c0luRGF0YWJhc2UobV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25J
RCwgZG9tYWluSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNv
bnN0IFVSTCYgdG9wRnJhbWVVcmwxLCBjb25zdCBVUkwmIHRvcEZyYW1lVXJsMiwgU2Vjb25kcyBs
YXN0U2VlbiwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIFNlY29uZHMgbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvbiwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIGJvb2wgaXNQcmV2YWxlbnQsIGJvb2wg
aXNWZXJ5UHJldmFsZW50LCB1bnNpZ25lZCBkYXRhUmVjb3Jkc1JlbW92ZWQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2NzAsMTAgKzE1NDAsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBV
UkwmIHVybCwgY29uc3QgVVJMJiB0b3BGcgogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BG
cmFtZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50
LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLm1lcmdlU3RhdGlzdGljRm9yVGVzdGlu
ZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwg
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwg
aXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3Rp
Y0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBib29s
IGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2ODUs
MTggKzE1NTIsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlz
dGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBoYWQKIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9y
VGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
aGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFs
LCBpc1ByZXZhbGVudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3Rp
bmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVz
ZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQ
cmV2YWxlbnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZh
bHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9u
SUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQo
bV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0
KGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE3MDQsOCArMTU2Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5u
aW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxlCiAgICAgdXNl
RXhwbGljaXRJVFBTdGF0ZSgpOwogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1Rlc3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNj
ZXNzRW50cmllcyhXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTcxNiw3ICsxNTc4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdl
QWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIHdlYlBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldEFs
bFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIApAQCAtMTcyNCw4ICsxNTg2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlv
bkgKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9u
SUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omxv
Z1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTczOSwxMCArMTYwMCw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPmxvZ1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTc1NCwxMyArMTYxMiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFk
VXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmhhc0hhZFVzZXJJbnRl
cmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNv
bnN0IFVSTCYgc3ViVXJsLCBjb25zdCBVUkwmIHRvcFVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3NzIsMTMgKzE2MjQsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0
IFVSTCYgc3ViVXJsLCBjb25zdAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAg
ICBwcm9jZXNzLT5pc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB0b3BVcmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZh
bHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VP
bmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rp
b24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTE3OTIsMTAgKzE2MzgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNs
ZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwog
ICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVh
clVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29s
IGlzR3JhbmRmYXRoZXJlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTgwOSwxMCArMTY1Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
R3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvCiAg
ICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5z
ZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlU
UERhdGFiYXNlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE4MjEsMTAgKzE2NjEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFVzZUlUUERhdGFiYXNl
KG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9y
VGVzdGluZyhjb25zdCBVUkwmIGZyb21VUkwsIGNvbnN0IFVSTCYgdG9VUkwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MzMsNjIgKzE2NzAsMzgg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0
aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29y
YXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9VUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNv
cmF0aW9uRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25G
b3JUZXN0aW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRp
b25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVS
TCYgdXJsLCBib29sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlQ29va2llc0ZvclRl
c3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlu
Y2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tp
ZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9u
SGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNMb2NhbFN0b3JhZ2UobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRl
ZFNlc3Npb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVy
KGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoYm9vbCBlbmFibGVk
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnNldFNob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3Vs
ZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpAQCAtMTkxOSwxMCArMTczMiw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShX
ZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llCiAgICAgICAgICAgICB3ZWJQcm9jZXNzLnNldFRoaXJk
UGFydHlDb29raWVCbG9ja2luZ01vZGUoYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUaGlyZFBh
cnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lvbklELCBibG9ja2luZ01vZGUsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQ
YXJ0eUNvb2tpZUJsb2NraW5nTW9kZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JU
ZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTkzMCwxMCArMTc0MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNl
CiAgICAgYXV0byBmbGFnID0gZW5hYmxlZCA/IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3Jj
ZW1lbnRFbmFibGVkOjpZZXMgOiBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5h
YmxlZDo6Tm87CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9y
VGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcoYm9vbCBlbmFi
bGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
OTQxLDIwICsxNzQ4LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgYXV0byBtb2RlID0gZW5hYmxlZCA/IFdlYkNvcmU6OkZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzIDogV2ViQ29yZTo6Rmly
c3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6Ok5vbmU7CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+c2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5n
KG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9y
VGVzdGluZyhtX3Nlc3Npb25JRCwgbW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9TYW1l
U2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VG9TYW1lU2l0ZVN0
cmljdENvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcoY29uc3QgVVJMJiBm
aXJzdFBhcnR5VVJMLCBjb25zdCBVUkwmIGNuYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTY2LDggKzE3NjcsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1F
RG9tYWluRm9yVGVzdAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJzdFBhcnR5VVJMLmhvc3QoKS50b1N0cmluZygpLCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWlu
Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgY25hbWVV
UkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5
NzksMTggKzE3NzksMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZygKIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRU
aGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzeW5jTG9jYWxTdG9yYWdlKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZSgp
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0
b3JhZ2UoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMg
c2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTk5OCw4ICsxNzkzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFn
ZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhTZWNvbmRzIHNlY29uZHMsIEMKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBG
b3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlY29uZHMpOwogICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CkBAIC0yMDA5LDI2ICsxODAzLDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRz
LCBDCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxl
bnRSZXNvdXJjZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0
Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDYWNo
ZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogI2VuZGlm
CiB9CiAKLWJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2Vi
UHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKSBjb25zdAotewotICAgIGlmIChhdXRvKiBwcm9jZXNz
UG9vbERhdGFTdG9yZSA9IHByb2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUoKSkKLSAgICAgICAg
cmV0dXJuIHByb2Nlc3NQb29sRGF0YVN0b3JlID09IHRoaXM7Ci0gICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzUHJveHkgPSBwcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICBy
ZXR1cm4gbmV0d29ya1Byb2Nlc3NQcm94eS0+aGFzU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCiBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNp
dGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyhzaXplX3QgbGltaXQpIGNvbnN0CiB7CiAgICAgSGFz
aFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBwcm9jZXNzUG9vbHM7CkBAIC0yMDQzLDkgKzE4
MjMsNiBAQCBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6
OnByb2Nlc3NQb29scyhzaXplX3QgbGltaXQpIGNvbgogICAgIGlmIChwcm9jZXNzUG9vbHMuaXNF
bXB0eSgpKSB7CiAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9uZSBvZiB0aGUgbGVnYWN5IGRh
dGEgc3RvcmVzLgogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bv
b2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQXNzb2NpYXRlZFBy
b2Nlc3NQb29sKCpwcm9jZXNzUG9vbCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KICAg
ICAgICAgICAgIHByb2Nlc3NQb29scy5hZGQocHJvY2Vzc1Bvb2wpOwogICAgICAgICAgICAgaWYg
KHByb2Nlc3NQb29scy5zaXplKCkgPT0gbGltaXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0yMDg0LDggKzE4NjEsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVNZWRpYUtleUZpbGUoY29u
c3QgU3RyaW5nJiBtZWRpYUtleURpcmVjdG9yeSkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjph
bGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJ
bmZvKiBjZXJ0aWZpY2F0ZSwgY29uc3QgU3RyaW5nJiBob3N0KQogewotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3Bl
Y2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZv
KCksIGhvc3QpLCAwKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNh
dGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CiB9CiAKIFZlY3RvcjxXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbkRhdGE+IFdlYnNpdGVEYXRhU3RvcmU6Om1lZGlhS2V5T3JpZ2lucyhjb25z
dCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkpCkBAIC0yMTQwLDYgKzE5MTYsMzAg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBt
ZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LAogICAgIH0KIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCit7CisgICAgaWYgKCFtX25ldHdvcmtQcm9j
ZXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBtX25ldHdvcmtQcm9jZXNzLT50ZXJtaW5hdGUo
KTsKKyAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKK30KKwordm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZW5kUHJlcGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25JbW1pbmVudDo6Tm8s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCkKK3sK
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9y
VGVzdGluZygpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vz
c0RpZFJlc3VtZSgpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc0RpZFJlc3Vt
ZSgpOworfQorCiBib29sIFdlYnNpdGVEYXRhU3RvcmU6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpA
QCAtMjE2OSwxNyArMTk2OSwxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICAgICAgCiAgICAgICAgIHJl
c29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3NQ
b29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCB0cnVlKSk7CisgICAg
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCB0cnVlKSwgMCk7CisgICAg
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAgICAgICAg
IHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCh0cnVlKSwgbV9zZXNzaW9u
SUQpOwotICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIGZhbHNlKSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIGZhbHNlKSwgMCk7CisgICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAgICAgICBwcm9jZXNzUG9vbC0+c2Vu
ZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZmFsc2UpLCBtX3Nlc3Npb25JRCk7Ci0gICAgfQogCiAg
ICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCA9IGZhbHNlOwogI2Vsc2UKQEAgLTIx
OTEsOCArMTk4OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYg
Y2FsbGJhY2spCiB7CiAgICAgaWYgKGNhbGxiYWNrKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5k
VG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQodHJ1ZSkpOworICAgICAgICBuZXR3b3JrUHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpLCAwKTsKICAgICB9CiAgICAgCiAgICAgbV9zdGF0
aXN0aWNzVGVzdGluZ0NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CkBAIC0yMjExLDggKzIw
MDgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1Z01vZGUoYm9vbCBlbmFibGVkLCBDb21wbGV0aQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZShtX3Nlc3Npb25JRCwgZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOwogICAgIFVOVVNFRF9Q
QVJBTShjb21wbGV0aW9uSGFuZGxlcik7CkBAIC0yMjI3LDIwICsyMDIzLDE1IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5pc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNz
aW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLSNlbmRpZgorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CisjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyNlbmRpZgog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZShib29sIGVuYWJsZWQpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRB
ZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoZW5hYmxlZCk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoZW5hYmxlZCk7CiB9CiAKICNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjI2Miw0OCArMjA1MywxOSBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUmVzb3VyY2VMb2FkU3RhdGlzdGljc0luV2ViUHJvY2Vz
c2VzKENvbXBsZXRpb25IYW5kbAogfQogI2VuZGlmCiAKLVZlY3RvcjxXZWJDb3JlOjpDb29raWU+
IFdlYnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Y29weVRvVmVjdG9yKG1fcGVuZGluZ0Nvb2tpZXMpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmFkZFBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0g
ICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmVJZihbJmNvb2tpZV0oYXV0byYgcGVuZGluZ0Nvb2tp
ZSkgewotICAgICAgICByZXR1cm4gcGVuZGluZ0Nvb2tpZS5pc0tleUVxdWFsKGNvb2tpZSk7Ci0g
ICAgfSk7Ci0gICAgbV9wZW5kaW5nQ29va2llcy5hZGQoY29va2llKTsKLX0KLQotdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYg
Y29va2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMucmVtb3ZlKGNvb2tpZSk7Ci19Ci0gICAg
Ci12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tpZXMoKQotewotICAgIG1f
cGVuZGluZ0Nvb2tpZXMuY2xlYXIoKTsKLX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmbHVz
aENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byBwcm9jZXNzUG9v
bCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bv
b2wtPmZsdXNoQ29va2llcyhzZXNzaW9uSUQoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLmZsdXNoQ29va2llcyhzZXNzaW9uSUQoKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJvb2wgYWxsb3dzKQogewotICAgIGZvciAo
YXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGFs
bG93cyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JXZWJTb2NrZXQ6OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlm
aWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldDo6UmVwbHkoKSwgMCk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpCiB7Ci0gICAgZm9y
IChhdXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+Y2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9uSUQoKSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xl
YXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9uSUQoKSksIDApOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pCkBA
IC0yMzI5LDggKzIwOTEsNiBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0
YVN0b3JlOjpwYXJhbWV0ZXJzKCkKIAogICAgIHJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5
KCk7CiAKLSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gcGVuZGluZ0Nvb2tpZXMoKTsK
LQogICAgIGF1dG8gcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IG1fY29uZmlndXJh
dGlvbi0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwogICAgIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5SGFuZGxlOwogICAg
IGlmICghcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCkBAIC0yNDM1
LDcgKzIxOTUsMTAgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9y
ZTo6cGFyYW1ldGVycygpCiAgICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlZCA9IG1fcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQ7CiAjZW5kaWYKICAgICBwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0
ZXJzKHBhcmFtZXRlcnMpOwotCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tp
bmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9u
KCk7CisjZW5kaWYKKyAgICAKICAgICByZXR1cm4gcGFyYW1ldGVyczsKIH0KIApAQCAtMjQ2NSwx
MCArMjIyOCw2IEBAIEFQSTo6SFRUUENvb2tpZVN0b3JlJiBXZWJzaXRlRGF0YVN0b3JlOjpjb29r
aWVTdG9yZSgpCiAgICAgcmV0dXJuICptX2Nvb2tpZVN0b3JlOwogfQogCi12b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCkKLXsKLX0KLQogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExv
Y2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgaWYgKCFpc1BlcnNpc3RlbnQoKSkgewpAQCAtMjQ3NiwyMyArMjIz
NSwxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVu
Y3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRAogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKS5nZXRMb2NhbFN0
b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMpIHsKLSAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKFdURk1vdmUoZGV0YWlscykpOwotICAgICAgICB9KTsKLSAgICAgICAgLy8gRklY
TUU6IFN1cHBvcnQgZmV0Y2hpbmcgZnJvbSBtdWx0aXBsZSBwb29scy4KLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIEFTU0VSVCghY29tcGxldGlvbkhhbmRsZXIpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuZ2V0TG9jYWxTdG9yYWdlRGV0YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7CisgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWlscykpOworICAgIH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgcHJvY2Vzcy0+cmVzZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldFF1b3RhKG1fc2Vzc2lv
bklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09B
KQpAQCAtMjUxOCw3ICsyMjY5LDEyIEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6aHR0cDNFbmFi
bGVkKCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9Ci0jZW5kaWYKKworYm9vbCBXZWJzaXRlRGF0
YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJp
bmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oQ09DT0Ep
CiAKICNpZiAhVVNFKEdMSUIpCiBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkKQEAgLTI1MzAsMzUgKzIyODYsMTgg
QEAgV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERldmljZUlkSGFzaFNhbHRz
U3RvcmFnZURpcmVjdG9yeSgpCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2lu
SW5XZWJzaXRlRGF0YShVUkwmJiBvbGROYW1lLCBVUkwmJiBuZXdOYW1lLCBPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigqdGhp
cyk7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0
YShtX3Nlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgZGF0YVR5cGVzLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVu
YW1lT3JpZ2luSW5XZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgZGF0
YVR5cGVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKICNpZiBFTkFCTEUoQVBQ
X0JPVU5EX0RPTUFJTlMpCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vzc2lv
bihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25z
dAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0FwcEJvdW5kU2Vzc2lvbiht
X3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLmhhc0FwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFy
QXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5jbGVhckFwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuY2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3J3YXJkQXBwQm91bmREb21h
aW5zVG9JVFBJZkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTI1ODAsNyArMjMxOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxl
CiAKICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgp
LmdldCgpLCAqYXBwQm91bmREb21haW5zKTsKIAotICAgIGZvciAoYXV0byogc3RvcmUgOiBub25E
ZWZhdWx0RGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgIGZvciAoYXV0byogc3RvcmUgOiBhbGxE
YXRhU3RvcmVzKCkudmFsdWVzKCkpCiAgICAgICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhz
dG9yZSwgKmFwcEJvdW5kRG9tYWlucyk7CiB9CiAKQEAgLTI1ODgsMTAgKzIzMjcsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUChjb25zdCBIYXNoU2V0
PFdlYkNvcmU6OlJlZ2lzdHJhYgogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEFwcEJvdW5kRG9tYWluc0ZvclJlc291cmNl
TG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0QXBwQm91bmREb21haW5zRm9y
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgZG9tYWlucywgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KICNlbmRpZgogCkBAIC0yNTk5LDE2ICsyMzM1LDE0IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3Mo
Y29uc3QgU3RyaW5nJiBidW5kCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nl
c3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoYnVu
ZGxlSWRlbnRpZmllciwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoYnVuZGxlSWRlbnRpZmllciwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1bmRs
ZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vz
c1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlmaWVyKFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhckJ1bmRsZUlk
ZW50aWZpZXIoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmlu
ZGV4IDBkYzkxZjIzYzQxNTQzOTVjOGViZjg5MGYzNWJkMDE4MGNkNTFhYWQuLjg0N2VlY2UwM2Vm
YTE1MjMzNTFjNmJhYWNmMTNiMDgyNjdlNjViZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTc1LDYgKzc1
LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBBdXRoZW50aWNhdG9yTWFuYWdlcjsKIGNs
YXNzIFNlY0tleVByb3h5U3RvcmU7CiBjbGFzcyBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTsKK2Ns
YXNzIE5ldHdvcmtQcm9jZXNzUHJveHk7CiBjbGFzcyBTT0F1dGhvcml6YXRpb25Db29yZGluYXRv
cjsKIGNsYXNzIFdlYkNlcnRpZmljYXRlSW5mbzsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKQEAgLTEw
OSw3ICsxMTAsMTIgQEAgcHVibGljOgogICAgIFdlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uPiYmLCBQQUw6OlNlc3Npb25JRCk7CiAgICAgfldlYnNpdGVE
YXRhU3RvcmUoKTsKIAotICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ05vbkRl
ZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOworICAgIHN0YXRpYyB2
b2lkIGZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKEZ1bmN0aW9uPHZvaWQoV2Vic2l0ZURhdGFTdG9y
ZSYpPiYmKTsKKyAgICAKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzcygp
IGNvbnN0OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKCk7CisKKyAg
ICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQo
UEFMOjpTZXNzaW9uSUQpOwogCiAgICAgYm9vbCBpc1BlcnNpc3RlbnQoKSBjb25zdCB7IHJldHVy
biAhbV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKTsgfQogICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9CkBAIC0xMTksNiArMTI1LDExIEBA
IHB1YmxpYzoKICAgICAKICAgICBjb25zdCBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBw
cm9jZXNzZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3NlczsgfQogCisgICAgdm9pZCB0ZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcygpOworICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFy
ZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2
b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsK
KyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOworCiAgICAgYm9vbCByZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCk7CiAgICAgYm9vbCByZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlKCkgY29uc3Q7CkBAIC0yMzUsMTUgKzI0Niw4IEBAIHB1YmxpYzoKIAogICAg
IERldmljZUlkSGFzaFNhbHRTdG9yYWdlJiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSgpIHsgcmV0
dXJuIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuZ2V0KCk7IH0KIAotICAgIFdlYlByb2Nlc3NQ
b29sKiBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgYm9vbCBp
c0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYpIGNvbnN0OwotCiAgICAgV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgcGFyYW1ldGVycygpOwogCi0gICAgVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXMoKSBjb25zdDsKLSAgICB2b2lkIGFkZFBlbmRpbmdD
b29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCByZW1vdmVQZW5kaW5nQ29v
a2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwotICAgIHZvaWQgY2xlYXJQZW5kaW5nQ29va2ll
cygpOwogICAgIHZvaWQgZmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
CiAgICAgdm9pZCBjbGVhckNhY2hlZENyZWRlbnRpYWxzKCk7CiAKQEAgLTI1MSw2ICsyNTUsMTAg
QEAgcHVibGljOgogCiAgICAgdm9pZCBkaXNwYXRjaE9uUXVldWUoRnVuY3Rpb248dm9pZCgpPiYm
KTsKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBD
RW5kcG9pbnRUb1dlYlByb2Nlc3MoeHBjX29iamVjdF90IGVuZHBvaW50TWVzc2FnZSk7CisjZW5k
aWYKKwogI2lmIFVTRShDVVJMKQogICAgIHZvaWQgc2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoV2Vi
Q29yZTo6Q3VybFByb3h5U2V0dGluZ3MmJik7CiAgICAgY29uc3QgV2ViQ29yZTo6Q3VybFByb3h5
U2V0dGluZ3MmIG5ldHdvcmtQcm94eVNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9wcm94eVNl
dHRpbmdzOyB9CkBAIC0yNzIsOCArMjgwLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TW9ja1dl
YkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbihXZWJDb3JlOjpNb2NrV2ViQXV0aGVudGljYXRp
b25Db25maWd1cmF0aW9uJiYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQ
cm9jZXNzKCk7Ci0KICAgICBjb25zdCBXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiYgY29u
ZmlndXJhdGlvbigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi5nZXQoKTsgfQogCiAgICAgV2Vi
c2l0ZURhdGFTdG9yZUNsaWVudCYgY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQuZ2V0KCk7IH0K
QEAgLTI4Myw2ICsyODksOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbmFtZU9yaWdpbkluV2Vi
c2l0ZURhdGEoVVJMJiYsIFVSTCYmLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAgIGJvb2wgbmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CisKICNpZiBFTkFCTEUoREVWSUNFX09S
SUVOVEFUSU9OKQogICAgIFdlYkRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJv
bGxlciYgZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyKCkgeyByZXR1
cm4gbV9kZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXI7IH0KICNlbmRp
ZgpAQCAtMzU5LDcgKzM2Nyw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVk
aWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgV2FsbFRpbWUg
bW9kaWZpZWRTaW5jZSk7CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0
cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgY29uc3QgSGFzaFNldDxXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAKLSAgICB2b2lkIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lv
bklETWFwKCk7CisgICAgdm9pZCByZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKIAogI2lmIEVO
QUJMRShBUFBfQk9VTkRfRE9NQUlOUykKICAgICBzdGF0aWMgT3B0aW9uYWw8SGFzaFNldDxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbj4+IGFwcEJvdW5kRG9tYWluc0lmSW5pdGlhbGl6ZWQoKTsK
QEAgLTM5Nyw4ICs0MDUsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wZXJzaXN0ZW50Q3JlZGVu
dGlhbFN0b3JhZ2VFbmFibGVkIHsgdHJ1ZSB9OwogI2VuZGlmCiAKLSAgICBIYXNoU2V0PFdlYkNv
cmU6OkNvb2tpZT4gbV9wZW5kaW5nQ29va2llczsKLSAgICAKICAgICBXZWFrSGFzaFNldDxXZWJQ
cm9jZXNzUHJveHk+IG1fcHJvY2Vzc2VzOwogCiAgICAgYm9vbCBtX2lzSXRwU3RhdGVFeHBsaWNp
dGx5U2V0IHsgZmFsc2UgfTsKQEAgLTQxOSw2ICs0MjUsNyBAQCBwcml2YXRlOgogICAgIFVuaXF1
ZVJlZjxXZWJzaXRlRGF0YVN0b3JlQ2xpZW50PiBtX2NsaWVudDsKIAogICAgIFJlZlB0cjxBUEk6
OkhUVFBDb29raWVTdG9yZT4gbV9jb29raWVTdG9yZTsKKyAgICBSZWZQdHI8TmV0d29ya1Byb2Nl
c3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKIAogI2lmIEhBVkUoQVBQX1NTTykKICAgICBVbmlx
dWVSZWY8U09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I+IG1fc29BdXRob3JpemF0aW9uQ29vcmRp
bmF0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9j
dXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCmluZGV4IDBlMGMwNmUxZGVk
NDJjMTRiODAyZTE1ODlmMzFkYzYyOTgyYWMzOTMuLjY0YjZjNzRkMDg2ZWM0NWJiNjJkYTZlZTA4
MjIzYjI4ZGI3M2E1N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCkBAIC00
Miw4ICs0Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TmV0d29ya1Byb3h5U2V0dGlu
Z3MoV2ViQ29yZTo6Q3VybFByb3h5U2V0dGluZ3MmJiBwcm94CiB7CiAgICAgbV9wcm94eVNldHRp
bmdzID0gV1RGTW92ZShwcm94eVNldHRpbmdzKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtp
bmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGlu
Z3MobV9zZXNzaW9uSUQsIG1fcHJveHlTZXR0aW5ncykpOworICAgIG5ldHdvcmtQcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1f
c2Vzc2lvbklELCBtX3Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291
cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVE
YXRhU3RvcmVTb3VwLmNwcAppbmRleCAxMmY5Y2Q4MTliNmRjY2E4YWM1MDkyYTMwZGQ5M2M1M2I4
ZWU5MzQyLi42Zjk2M2YxNDIxMDA0NzU4ZTJkNjVlZDk2MjZlMmE0OWEzZjRmOTEwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRh
U3RvcmVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9z
b3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcApAQCAtMzksOCArMzksNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMoV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMmCiAgICAgYXV0byYgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBtX3BlcnNpc3RlbnRDcmVk
ZW50aWFsU3RvcmFnZUVuYWJsZWQ7CiAKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVu
dFN0b3JhZ2UobV9zZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJz
aXN0ZW50U3RvcmFnZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0
ZW50U3RvcmFnZVR5cGUpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpLmdl
dENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCkK
QEAgLTUyLDggKzUxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3Jl
ZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gZW5hYmxlZDsKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQobV9zZXNzaW9uSUQsIG1fcGVyc2lz
dGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFn
ZUVuYWJsZWQobV9zZXNzaW9uSUQsIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxl
ZCksIDApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCmluZGV4IDBhODRhNzU5
MGQ5YTk4NWJmYzk5Njg0YTQ4OTUxMzc0ZTViMjk0MjkuLjI3ZjIzZWEwNjVkYzc1Y2U0YTgyNzBj
NTc2ZWEyYWE1NWFiMGRjOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2ds
aWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcApAQCAtNDQsNyArNDQsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQcm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1
bmNoT3B0aW9ucyYgbAogICAgICAgICBpZiAoIWRhdGFTdG9yZSkgewogICAgICAgICAgICAgLy8g
UHJld2FybWVkIHByb2Nlc3NlcyBkb24ndCBoYXZlIGEgV2Vic2l0ZURhdGFTdG9yZSB5ZXQsIHNv
IHVzZSB0aGUgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlIGZyb20gdGhlIFdlYlByb2Nlc3NQb29s
LgogICAgICAgICAgICAgLy8gVGhlIHByb2Nlc3Mgd29uJ3QgYmUgdXNlZCBpZiBjdXJyZW50IFdl
YnNpdGVEYXRhU3RvcmUgaXMgZGlmZmVyZW50IHRoYW4gdGhlIFdlYlByb2Nlc3NQb29sIHByaW1h
cnkgb25lLgotICAgICAgICAgICAgZGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC0+d2Vic2l0ZURh
dGFTdG9yZSgpOworICAgICAgICAgICAgZGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZSgpLnB0cigpOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKGRhdGFT
dG9yZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tp
ZU1hbmFnZXJQcm94eVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJD
b29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAppbmRleCA5ZjdiZTNjOTQxYjZjZDBhMWI5NGNiMTM2
MDk4ZjNhMDQxY2VmZjk5Li5hYzA0ZTM4YTU3YjIxNTliZWI0MmYzODQ3OWI0NGY1ZTI2ZGVkYmIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29v
a2llTWFuYWdlclByb3h5U291cC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKIAorI2luY2x1ZGUgIk5l
dHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMu
aCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogCkBAIC0zMyw4ICszNCw4IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVy
c2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN0
b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKQog
ewotICAgIG1fY29va2llUGVyc2lzdGVudFN0b3JhZ2VNYXAuc2V0KHNlc3Npb25JRCwgc3RkOjpt
YWtlX3BhaXIoc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSk7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBl
KSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSwgMCk7CiB9CiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0
ZW50U3RvcmFnZVR5cGUmIHN0b3JhZ2VUeXBlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCmluZGV4IGJmYmJmOTY2NGU0
ODM1MzA5NzA5NzExZGZkNmMxMzQxNTczMmJkYWMuLjdmZTRhY2EwYzVkMmQwZTdmYzBkOWQ1YTRm
YTI3ZWJjYzgwYTY3NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAv
V2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3Vw
L1dlYlByb2Nlc3NQb29sU291cC5jcHAKQEAgLTM3LDMwICszNywyNCBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1By
b2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0g
ICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmIGRlZmF1bHRTZXNzaW9uUGFyYW1l
dGVycyA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzOwotICAgIHN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5n
ZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lv
bklELCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRo
LCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsK
LSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBkZWZhdWx0U2Vzc2lvblBhcmFt
ZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+cGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpOworICAgIC8vIEZJWE1F
OiBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5IHNob3VsZCBiZSBtb3ZlZCB0byB0aGUg
V2Vic2l0ZURhdGFTdG9yZS4KKyAgICAvLyBGSVhNRTogbV9pZ25vcmVUTFNFcnJvcnMgc2hvdWxk
IGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlIG9yIHJlbW92ZWQuCisgICAgLy8gRklY
TUU6IG1fbmV0d29ya1Byb3h5U2V0dGluZ3Mgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRl
RGF0YVN0b3JlLgogCi0gICAgcGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kgPSBtX2luaXRp
YWxIVFRQQ29va2llQWNjZXB0UG9saWN5OwotICAgIHBhcmFtZXRlcnMuaWdub3JlVExTRXJyb3Jz
ID0gbV9pZ25vcmVUTFNFcnJvcnM7CiAgICAgcGFyYW1ldGVycy5sYW5ndWFnZXMgPSB1c2VyUHJl
ZmVycmVkTGFuZ3VhZ2VzKCk7Ci0gICAgcGFyYW1ldGVycy5wcm94eVNldHRpbmdzID0gbV9uZXR3
b3JrUHJveHlTZXR0aW5nczsKICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNl
ID0gdHJ1ZTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3JzKGJv
b2wgaWdub3JlVExTRXJyb3JzKQogeworICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMgdG8gV2Vic2l0
ZURhdGFTdG9yZS4KICAgICBtX2lnbm9yZVRMU0Vycm9ycyA9IGlnbm9yZVRMU0Vycm9yczsKLSAg
ICBpZiAobmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vy
cm9ycyksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0
aW5ncyhjb25zdCBXZWJDb3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3MmIHNldHRpbmdzKQog
eworICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMgdG8gV2Vic2l0ZURhdGFTdG9yZS4KICAgICBtX25l
dHdvcmtQcm94eVNldHRpbmdzID0gc2V0dGluZ3M7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
Ci0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCA5OGIzNmNjN2FkNzUxYWJhMTMwOTc3NzMyODQ2OWEwNjRiMWMxYWVkLi5mYzM5YzBlOTczYWEz
NWQ4ZmFjMGYwNTEwMDBmZTY5MjlhOGU3NDJhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMjAtMDktMjEgIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBNb3ZlIE5l
dHdvcmtQcm9jZXNzUHJveHkgb3duZXJzaGlwIGZyb20gV2ViUHJvY2Vzc1Bvb2wgdG8gV2Vic2l0
ZURhdGFTdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE2MDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBl
bmRpbmdDb25uZWN0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OmRvd25sb2FkQXRSYXRlKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW06CisgICAgICAgIChURVNU
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJl
Y292ZXJ5Lm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUlu
Zm9VcGdyYWRlVG9WMi5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbToKKyAg
ICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCRmlsZU5hbWUubW06CisgICAgICAgIChydW5UZXN0KToKKyAgICAgICAgKFRFU1Qp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVs
dGlQcm9jZXNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbToKKyAgICAgICAgKFRFU1Qp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3Vz
cGVuZEltbWluZW50bHkubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbToKKyAgICAgICAg
KFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxT
dG9yYWdlUGVyc2lzdGVuY2UubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tOgorICAgICAgICAoVEVT
VCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJv
Y2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbToKKyAgICAgICAgKGNoZWNrUmVjb3Zl
cnlBZnRlckNyYXNoKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbToKKyAgICAgICAgKFRFU1Qp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtl
ckJhc2ljLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tI
VFRQQ29va2llU3RvcmUubW06CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdh
dGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5
RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tp
ZVVJRGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdKToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29v
a2llVUlEZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdKToKKyAgICAgICAgKFRFU1QpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxl
YWtzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW06CisgICAgICAgIChydW5X
ZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dCk6CisKIDIwMjAtMDktMjEgIEth
dGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cg
YWJvdXQ6Ymxhbmsgc3ViZnJhbWUgbG9hZHMgZm9yIG5vbiBhcHAtYm91bmQgdG9wIGZyYW1lcwpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nl
c3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KaW5k
ZXggOTczODlmMDFmZjJlZTk5Yjc4M2IwYjUyMTA4MDc0ZjFhODFiNjk4MS4uMzNmNDU0YzVjZDU5
YjQ4YTc2OThhYWI1NmU2MTFjZjZmMDljOWY0ZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlv
bi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vz
c0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0
IDxXZWJLaXQvV0tQcm9jZXNzR3JvdXBQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9j
ZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+Cisj
aW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dlYktpdC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCkBAIC0xNDYsOCArMTQ3
LDggQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzUmVsYXVuY2hPbkxhdW5jaEZhaWx1cmUp
CiAKICAgICAvLyBDb25zdHVjdGluZyBhIFdlYlZpZXcgc3RhcnRzIGEgbmV0d29yayBwcm9jZXNz
IHNvIHRlcm1pbmF0ZSB0aGlzIG9uZS4gVGhlIHBhZ2UgbG9hZCBiZWxvdyB3aWxsIHRoZW4gcmVx
dWVzdCBhIG5ldHdvcmsgcHJvY2VzcyBhbmQgd2UKICAgICAvLyBtYWtlIHRoaXMgbmV3IG5ldHdv
cmsgcHJvY2VzcyBsYXVuY2ggY3Jhc2ggb24gc3RhcnR1cC4KLSAgICBbcHJvY2Vzc1Bvb2wgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBbcHJvY2Vzc1Bvb2wgX21ha2VOZXh0TmV0d29y
a1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZ107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCku
d2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byBk
ZWxlZ2F0ZSA9IGFkb3B0TlMoW1tNb25pdG9yV2ViQ29udGVudENyYXNoTmF2aWdhdGlvbkRlbGVn
YXRlIGFsbG9jXSBpbml0XSk7CiAgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRl
bGVnYXRlLmdldCgpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvRG93bmxvYWQubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0Rvd25sb2FkLm1tCmluZGV4IGI3ZWQ5OTkzOWZkNTlmMjI4YTdlOGJkNzQ5NzEyZjUzNjYw
MTU2MTYuLjE4MTkxMzFjOWEwZmViMzBiMWEyZjBjZmNkODdiZjIwNDVlYmIzZjQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQpAQCAt
ODg5LDkgKzg4OSw5IEBAIHZvaWQgZG93bmxvYWRBdFJhdGUoZG91YmxlIGRlc2lyZWRLYnBzLCB1
bnNpZ25lZCBzcGVlZE11bHRpcGxpZXIsIEFwcFJldHVybnNUb0ZvCiAgICAgcmVjZWl2ZWREYXRh
ID0gZmFsc2U7CiAgICAgVXRpbDo6cnVuKCZyZWNlaXZlZERhdGEpOwogICAgIC8vIFN0YXJ0IHRo
ZSBEb3dubG9hZE1vbml0b3IncyB0aW1lci4KLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0u
cHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKKyAgICBbW3dlYlZp
ZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dy
b3VuZDpZRVNdOwogICAgIGlmIChyZXR1cm5Ub0ZvcmVncm91bmQgPT0gQXBwUmV0dXJuc1RvRm9y
ZWdyb3VuZDo6WWVzKQotICAgICAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bv
b2wgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9dOworICAgICAgICBbW3dlYlZpZXcgY29u
ZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpO
T107CiAgICAgZGlkQ2FuY2VsID0gZmFsc2U7CiAgICAgVXRpbDo6cnVuKCZkaWRDYW5jZWwpOwog
ICAgIHRlcm1pbmF0ZVNlcnZlciA9IHRydWU7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0KaW5kZXggNWNkN2Fi
ZGEwMWQxOTc0N2RjZWQ0NWFiZWU5OWVjYjFjMTRkNjE2MC4uZDc3YTZmZDk4NzllNDNmNzAxMWRk
YWY5MmMzYTc5N2YzZmMxMzczNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbQpAQCAtMzEsNiArMzEsNyBA
QAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVE
YXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxX
ZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
VXNlclN0eWxlU2hlZXQuaD4KQEAgLTg2LDcgKzg3LDcgQEAgVEVTVChJbmRleGVkREIsIENoZWNr
cG9pbnRzV0FMQXV0b21hdGljYWxseSkKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJh
dGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFs
bG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0g
YWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIi
XTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2Vi
VmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVj
dCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVs
ZXRlUmVjb3ZlcnkubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lE
QkRlbGV0ZVJlY292ZXJ5Lm1tCmluZGV4IGM4YWYxZDI0M2M0ZmViNThhYzk4NGRhZjE0ZDgxNTMx
YTdjYzNjNzMuLmJiZjFhMTUyMTVkYzFmZDI4ZGZkZGI5ZTM0MWI2NGY5YzAwOGY0YzQgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVj
b3ZlcnkubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJE
ZWxldGVSZWNvdmVyeS5tbQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJv
Y2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xs
ZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZh
dGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25m
aWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3
LDcgKzU4LDcgQEAgVEVTVChJbmRleGVkREIsIERlbGV0ZVJlY292ZXJ5KQogICAgIFJldGFpblB0
cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNl
ckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgp
IG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vz
c1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBD
b3B5IHRoZSBpbmNvbnNpc3RlbnQgZGF0YWJhc2UgZmlsZXMgdG8gdGhlIGRhdGFiYXNlIGRpcmVj
dG9yeQogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNv
dXJjZTpAIklEQkRlbGV0ZVJlY292ZXJ5IiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGly
ZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5t
bQppbmRleCA5NWNjYTBjZTI4MTZmZjFhNmE0NTVhZDBiZDJjOGE0YWE0ZjI3ZmVkLi44OGE1M2Y2
MWQ5ZDk4MjY1N2I5NjVlZjhhNmNlYmE3OTFlZmYxNzU1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1Yy
Lm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9y
dCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
ZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4K
ICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtNTgsNyArNTksNyBAQCBU
RVNUKEluZGV4ZWREQiwgSW5kZXhVcGdyYWRlVG9WMikKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3
Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1
cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29u
dHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVz
dEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURh
dGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5j
b25zaXN0ZW50IGRhdGFiYXNlIGZpbGVzIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBO
U1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJbmRl
eFVwZ3JhZGUiIHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2Vi
S2l0QVBJLnJlc291cmNlcyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbSBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRv
VjIubW0KaW5kZXggZmZhNWE3ODc4YTQ3MzJiOGVjMjQ1YzkwNTNmZDE3ZWU1OTU2ZmEzZC4uNDAz
ZTBmZmE4MjEyMzQ1MWM0NjZmZWVjYzMyNGY5YzZlNzYxZDQzZCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRl
VG9WMi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9i
amVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxX
ZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250
ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1
cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVl
dC5oPgpAQCAtNTcsNyArNTgsNyBAQCBURVNUKEluZGV4ZWREQiwgSURCT2JqZWN0U3RvcmVJbmZv
VXBncmFkZVRvVjIpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZp
Z3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0p
OwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1l
c3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIENvcHkgZGF0YWJhc2UgZmlsZXMgd2l0aCBvbGQgT2Jq
ZWN0U3RvcmVJbmZvIHNjaGVtYSB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5LgogICAgIE5TVVJM
ICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklEQk9iamVj
dFN0b3JlSW5mb1VwZ3JhZGUiIHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6
QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVBy
b2Nlc3NLaWxsLm1tCmluZGV4IDY4NzQ1MjllYmJmMzc4NTE4ZDkzZTBhMDgyMWY2MzAxMmNmYTZk
NWYuLjczMDc3ZWNkZmQzNjViNTI5MDUzZDQ3Y2JhMmExNGVkMDUxZWQ2ZWEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQ
cm9jZXNzS2lsbC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBv
cnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3Jl
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19X
S1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpA
QCAtOTIsNyArOTMsNyBAQCBURVNUKEluZGV4ZWREQiwgRGF0YWJhc2VQcm9jZXNzS2lsbCkKICAg
ICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwog
ICAgICAgICBpZiAoIWtpbGxlZERCUHJvY2VzcyAmJiBvcGVuUmVxdWVzdFVwZ3JhZGVOZWVkZWQp
IHsKICAgICAgICAgICAgIGtpbGxlZERCUHJvY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICBbY29u
ZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwor
ICAgICAgICAgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFtZS5t
bQppbmRleCAxMWY4N2Y4MDM0ZDJiMWI1NWQ3MjBkZWI3NjVhMzE2ODIxMjBkNzczLi5hOThiZjM4
MjViYjFlZDZkNzU5YzA4ZDQ1MzNhZGNiN2ZmMzk1ZmQ1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0K
QEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIFJldGFpblB0cjxXS1NjcmlwdE1lc3NhZ2U+IGxhc3RT
Y3JpcHRNZXNzYWdlOwogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoKQorc3RhdGljIHZv
aWQgcnVuVGVzdChib29sIG9sZEZpbGVTaG91bGRFeGlzdCA9IHRydWUpCiB7CiAgICAgYXV0byBo
YW5kbGVyID0gYWRvcHROUyhbW0luZGV4ZWREQkZpbGVOYW1lTWVzc2FnZUhhbmRsZXIgYWxsb2Nd
IGluaXRdKTsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwpAQCAtODcsNyArODcsNyBAQCBzdGF0aWMgdm9pZCBy
dW5UZXN0KCkKICAgICBOU1VSTCAqb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCA9IFtvbGRW
ZXJzaW9uRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDogQCJmaWxlX18w
Il07CiAgICAgTlNVUkwgKm5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgPSBbbmV3VmVyc2lv
bkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJdOwog
ICAgIE5TVVJMICpvbGRWZXJzaW9uVW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xkVmVy
c2lvbk9yaWdpbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6dW51c2Vk
RGF0YWJhc2VOYW1lXTsKLSAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1h
bmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6b2xkVmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5
VVJMLnBhdGhdKTsKKyAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFn
ZXJdIGZpbGVFeGlzdHNBdFBhdGg6b2xkVmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5VVJM
LnBhdGhdID09IG9sZEZpbGVTaG91bGRFeGlzdCk7CiAgICAgCiAgICAgLy8gRm9yIGRhdGFiYXNl
IHRoYXQgaXMgb3BlbmVkIGFmdGVyIHVwZ3JhZGUsIGl0cyBmaWxlIHNob3VsZCBvbmx5IGJlIGlu
IHYxLgogICAgIE5TVVJMICpvbGRWZXJzaW9uRXhpc3RpbmdEYXRhYmFzZURpcmVjdG9yeVVSTCA9
IFtvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVu
dDogZXhpc3RpbmdEYXRhYmFzZU5hbWVdOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHN0YXRpYyB2b2lk
IGNyZWF0ZURpcmVjdG9yaWVzKFN0cmluZyB0ZXN0TmFtZSkKIFRFU1QoSW5kZXhlZERCLCBJbmRl
eGVkREJGaWxlTmFtZSkKIHsKICAgICBjcmVhdGVEaXJlY3Rvcmllcygibm9uZSIpOwotICAgIHJ1
blRlc3QoKTsKKyAgICBydW5UZXN0KGZhbHNlKTsKIH0KIAogVEVTVChJbmRleGVkREIsIEluZGV4
ZWREQkZpbGVOYW1lVjApCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCmluZGV4IDdmNjI2NDVk
OTk2MGVkZTk2MGMwMDFjMjcyYjY1MDM5MzkwMTE2MzIuLjZmNjdkYzI3ZWRjM2QyNzQ1YjE3MGU0
ODJiY2Q5MGU4NDk0Y2I5NWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCkBAIC0zMiw2
ICszMiw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJz
aXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CiAjaW1w
b3J0IDx3dGYvRGVxdWUuaD4KQEAgLTY5LDcgKzcwLDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4
ZWREQk11bHRpUHJvY2VzcykKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4g
Y29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBp
bml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2Ny
aXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAot
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9
IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAw
LCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVy
c2lzdGVuY2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4
ZWREQlBlcnNpc3RlbmNlLm1tCmluZGV4IGIzMmNlNGE1ZjczODYzYWVkZGNiOTE5MGI1YjQzNzBl
Mzc0NDNiNWUuLmQ2MjIwMzIyZTQ3OGQxZGFjNzhmMDY5NjdjM2I2NDNiZmQ2MmY5YmYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVy
c2lzdGVuY2UubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bmRleGVkREJQZXJzaXN0ZW5jZS5tbQpAQCAtNzgsNyArNzgsNyBAQCBURVNUKEluZGV4ZWREQiwg
SW5kZXhlZERCUGVyc2lzdGVuY2UpCiAgICAgd2ViVmlldyA9IG5pbDsKIAogICAgIC8vIFRlcm1p
bmF0ZSB0aGUgbmV0d29yayBwcm9jZXNzCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vz
c1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBN
YWtlIGEgbmV3IHdlYiB2aWV3IHRvIGZpbmlzaCB0aGUgdGVzdAogICAgIHdlYlZpZXcgPSBhZG9w
dE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAw
LCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwpAQCAtMjY4LDcgKzI2
OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUaGlyZFBhcnR5RnJhbWVIYXNBY2Nlc3Mp
CiAKICAgICB3ZWJWaWV3ID0gbmlsOwogICAgIHNlY29uZFdlYlZpZXcgPSBuaWw7Ci0gICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
KyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CiAKICAgICAvLyBUaGlyZC1wYXJ0eSBJREIgc3RvcmFnZSBpcyBzdG9yZWQg
aW4gdGhlIG1lbW9yeSBvZiBuZXR3b3JrIHByb2Nlc3MuCiAgICAgYXV0byB0aGlyZFdlYlZpZXcg
PSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwg
MCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwpAQCAtMzg1
LDcgKzM4NSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUaGlyZFBhcnR5V29ya2VySGFz
QWNjZXNzKQogCiAgICAgd2ViVmlldyA9IG5pbDsKICAgICBzZWNvbmRXZWJWaWV3ID0gbmlsOwot
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB0aGlyZFdlYlZpZXcgPSBhZG9wdE5TKFtb
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDAp
IGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIGxvYWRUZXN0UGFnZUlu
V2ViVmlldyh0aGlyZFdlYlZpZXcuZ2V0KCksIEAiZGF0YWJhc2UgaXMgY3JlYXRlZCIpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJT
dXNwZW5kSW1taW5lbnRseS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0KaW5kZXggOGVjNjVmMGEzYmE5MzczNmZk
YjRmOWRkZmVmNzVjZTYwMDA1ZmQwZC4uNTEwYjI0ZjU2OWQyMmJkNDBhN2FkYmUyNWVjZmQwZWNm
YzhhYzcyNiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tCkBAIC0zMiw2
ICszMiw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dL
V2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNp
bXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KQEAgLTg4LDggKzg5LDggQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWRE
QlN1c3BlbmRJbW1pbmVudGx5KQogCiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiQ29udGlu
dWUiKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29y
a1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNw
ZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9y
ZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJ1blRlc3RBbmRDaGVja1Jl
c3VsdChAIkV4cGVjdGVkIEFib3J0IEZvciBTdXNwZW5zaW9uIik7CiAgICAgcnVuVGVzdEFuZENo
ZWNrUmVzdWx0KEAiRXhwZWN0ZWQgU3VjY2VzcyBBZnRlciBSZXN1bWUiKTsKQEAgLTE1OCw4ICsx
NTksOCBAQCBURVNUKEluZGV4ZWREQiwgU3VzcGVuZEltbWluZW50bHlGb3JUaGlyZFBhcnR5RGF0
YWJhc2VzKQogICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOm1haW5GcmFtZVN0cmluZyBiYXNl
VVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL3dlYmtpdC5vcmciXV07CiAgICAgcnVu
VGVzdEFuZENoZWNrUmVzdWx0KEAiZGF0YWJhc2UgaXMgY3JlYXRlZCIpOwogCi0gICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5k
SW1taW5lbnRseV07Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0
ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nl
c3NEaWRSZXN1bWVdOwogCiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAidHJhbnNhY3Rpb24g
aXMgY29tcGxldGVkIik7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCmluZGV4IDUzNjU0
MWUzYjBlNWNkYTNhM2I1NTFjMWU4MWU5NjNmNTkyYWViMmYuLmU3Yjk5MjI4Y2U4NzZlNDQ3ZTY0
NzgyZWY5ZDg3ZjI1YWRjOWI5ZmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCkBAIC05
NSw3ICs5NSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUZW1wRmlsZVNpemUpCiAKICAg
ICAvLyBUZXJtaW5hdGUgbmV0d29yayBwcm9jZXNzIHRvIGtlZXAgV0FMIG9uIGRpc2suCiAgICAg
d2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVE
YXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIEVYUEVDVF9UUlVFKFtb
TlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDp3YWxGaWxlUGF0
aC5nZXQoKS5wYXRoXSk7CiAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gZmlsZUF0dHJpYnV0
ZXMgPSBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGF0dHJpYnV0ZXNPZkl0ZW1BdFBh
dGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aCBlcnJvcjpuaWxdOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5t
bSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVy
c2lzdGVuY2UubW0KaW5kZXggNDEzM2VlN2IzZGFlNDNlYzIwNDljZmZjMDYzYzBlNDI5YzE3YzVl
Zi4uNWY3OTE5MDk0M2M3NzFlOWQ5ZTQ0MmEwZGEyNjZmZjlhMDNiYTJmMiAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0
ZW5jZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2Fs
U3RvcmFnZVBlcnNpc3RlbmNlLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQv
V0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYnBhZ2VQcmVm
ZXJlbmNlc1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJv
Y2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hl
ZXQuaD4KQEAgLTEwOSw3ICsxMTAsNyBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlUHJv
Y2Vzc0NyYXNoZXMpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlw
dE1lc3NhZ2UpOwogICAgIEVYUEVDVF9XS19TVFJFUShAInNlc3Npb246c3RvcmFnZSIsIFtsYXN0
U2NyaXB0TWVzc2FnZSBib2R5XSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJlY2Vp
dmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
cmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKQEAgLTE2Miw3ICsxNjMsNyBAQCBURVNUKFdLV2ViVmll
dywgTG9jYWxTdG9yYWdlUHJvY2Vzc1N1c3BlbmRzKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJ2YWx1
ZSIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wuZ2V0KCkg
X3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5XTsKIAogICAgIHJlYWR5VG9Db250aW51ZSA9IGZhbHNlOwogICAgIFt3ZWJW
aWV3MSBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2tl
eScsICduZXdWYWx1ZScpIiBjb21wbGV0aW9uSGFuZGxlcjpeKGlkLCBOU0Vycm9yICopIHsKQEAg
LTE3Nyw3ICsxNzgsNyBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlUHJvY2Vzc1N1c3Bl
bmRzKQogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0NvbnRp
bnVlKTsKICAgICAKLSAgICBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX3NlbmROZXR3b3JrUHJvY2Vzc0Rp
ZFJlc3VtZV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2Vu
ZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9
IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNz
YWdlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
TmV0d29ya1Byb2Nlc3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L05ldHdvcmtQcm9jZXNzLm1tCmluZGV4IGU2MGY4ODAyNWQwOTM3ODlmNjk1NjBkOWI5MmIyODJm
MDcxMzBhOGQuLjBlMjFmOTA5NTAwMTRmNmM0OTBiMGViOGU0NjFlYzRiYTg1MGJiODEgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nl
c3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3Jr
UHJvY2Vzcy5tbQpAQCAtMjgsNyArMjgsNyBAQAogI2ltcG9ydCAiSFRUUFNlcnZlci5oIgogI2lt
cG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAiVXRpbGl0aWVzLmgiCi0jaW1wb3J0IDxX
ZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVE
YXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KQEAgLTM3LDE0ICszNywxNCBA
QCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NFbnRpdGxlbWVudHMpCiB7CiAgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNN
YWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpbW1tXS1dlYlZpZXdDb25maWd1
cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV1dKTsKICAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJzaW1wbGUiXTsKLSAgICBXS1Byb2Nlc3NQb29sICpw
b29sID0gW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2w7Ci0gICAgYm9vbCBoYXNF
bnRpdGxlbWVudCA9IFtwb29sIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGlu
ZzpAImNvbS5hcHBsZS5yb290bGVzcy5zdG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94Il07
CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlICpzdG9yZSA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25d
LndlYnNpdGVEYXRhU3RvcmU7CisgICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9IFtzdG9yZSBfbmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Mu
c3RvcmFnZS5XZWJLaXROZXR3b3JraW5nU2FuZGJveCJdOwogI2lmIFBMQVRGT1JNKE1BQykgJiYg
VVNFKEFQUExFX0lOVEVSTkFMX1NESykKICAgICBFWFBFQ1RfVFJVRShoYXNFbnRpdGxlbWVudCk7
CiAjZWxzZQogICAgIEVYUEVDVF9GQUxTRShoYXNFbnRpdGxlbWVudCk7CiAjZW5kaWYKLSAgICBF
WFBFQ1RfRkFMU0UoW3Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5n
OkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7CisgICAgRVhQRUNUX0ZBTFNFKFtzdG9yZSBfbmV0d29y
a1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJdKTsK
IH0KIAogVEVTVChXZWJLaXQsIEhUVFBSZWZlcmVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVu
dERhdGFTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0
d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KaW5kZXggNjA5OGU4ZGFk
MjUyZTU5ZWM0OTEyNTBiNDIxNmQzY2QwOTM2ZThmNy4uMmY4YTJlMzNmZTg3MDNiYWIyZDhlMDUx
MDgzMmJlY2Q5ZDQ4OTM0YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNz
Q3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyB2
b2lkIGNoZWNrUmVjb3ZlcnlBZnRlckNyYXNoKFdLV2Vic2l0ZURhdGFTdG9yZSAqZGF0YVN0b3Jl
KQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNl
OwogCi0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRh
U3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBbd2ViVmlldyBsb2FkUmVxdWVz
dDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnNpbXBsZTJdXTsKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbSBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0K
aW5kZXggOTVkYzlkOThkZjEzYjA3MDVlMDgxN2QwNTg3MjY1MTIwYzE4OGQyMy4uZGYzMjBkNjRk
YWRiZGQxZWUyODNmODY1YzE0NDIzZjNhYzU1NjRiZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZp
Z2F0aW9uLm1tCkBAIC01Mzg1LDcgKzUzODUsNyBAQCBURVNUKFByb2Nlc3NTd2FwLCBVc2VQcmV3
YXJtZWRQcm9jZXNzQWZ0ZXJUZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNzKQogCiAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJW
aWV3MiA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVj
dCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjp3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQo
KV0pOwogICAgIFt3ZWJWaWV3MiBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCld
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCmluZGV4IDBlMTBjMzRlZWM4MmM2ZjY1OTJi
YjdjNDI3NGQwZTQ1NWVhZjExZTguLmEzYWJhMjMxYTkzYjNkNWYwMGExOTNjNDdjMjc2Nzg2NGIz
NTA1NWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
UmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KQEAgLTcxOSw3ICs3MTksNyBA
QCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jZXNzUmVzdGFydCkKIAog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXcyID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAtNzUyLDcgKzc1Miw3IEBAIFRFU1QoUmVzb3VyY2VM
b2FkU3RhdGlzdGljcywgTmV0d29ya1Byb2Nlc3NSZXN0YXJ0KQogCiAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1
dG8gd2ViVmlldzMgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5T
TWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQo
KV0pOwogCkBAIC0xNTU4LDEwICsxNTU4LDggQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LCBNaWdyYXRlRGF0YUZyb21NaXNzaW5nVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFNhbWVTaXQKIAog
VEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1By
b2Nlc3NQb29sKQogeworICAgIE5TVVJMICppdHBSb290VVJMID0gW05TVVJMIGZpbGVVUkxXaXRo
UGF0aDpbTlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25l
bnQ6QCJDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sVGVzdCJdIGlzRGlyZWN0
b3J5OllFU107CiAgICAgYXV0byBkZWZhdWx0RmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBk
ZWZhdWx0TWFuYWdlcl07Ci0gICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKmRh
dGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9u
IG5ld10gYXV0b3JlbGVhc2VdOwotICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURh
dGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0
aW9uXSBhdXRvcmVsZWFzZV07Ci0gICAgTlNVUkwgKml0cFJvb3RVUkwgPSBbW2RhdGFTdG9yZSBf
Y29uZmlndXJhdGlvbl0gX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnldOwogICAgIE5T
VVJMICpmaWxlVVJMID0gW2l0cFJvb3RVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAi
b2JzZXJ2YXRpb25zLmRiIl07CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciByZW1vdmVJdGVtQXRQ
YXRoOml0cFJvb3RVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVDVF9GQUxTRShbZGVmYXVs
dEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6aXRwUm9vdFVSTC5wYXRoXSk7CkBAIC0xNTcy
LDYgKzE1NzAsMTAgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBDYW5BY2Nlc3NEYXRh
U3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sKQogICAgIEVYUEVDVF9UUlVFKFtkZWZhdWx0RmlsZU1h
bmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpuZXdGaWxlVVJMLnBhdGhdKTsKICAgICBbZGVmYXVsdEZp
bGVNYW5hZ2VyIGNvcHlJdGVtQXRQYXRoOm5ld0ZpbGVVUkwucGF0aCB0b1BhdGg6ZmlsZVVSTC5w
YXRoIGVycm9yOm5pbF07CiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxl
RXhpc3RzQXRQYXRoOmZpbGVVUkwucGF0aF0pOworCisgICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNv
bmZpZ3VyYXRpb24gKmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19XS1dlYnNpdGVEYXRhU3Rv
cmVDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGRhdGFTdG9yZUNvbmZpZ3Vy
YXRpb24uX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBpdHBSb290VVJMOworICAg
IGF1dG8gKmRhdGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRo
Q29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CiAgICAg
W2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKIAogICAg
IHN0YXRpYyBib29sIGRvbmVGbGFnID0gZmFsc2U7CkBAIC0xNjMzLDEyICsxNjM1LDEyIEBAIFRF
U1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgU3RvcmVTdXNwZW5zaW9uKQogICAgIFt3ZWJWaWV3
MiBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CiAKICAgICBkb25lRmxhZyA9IGZh
bHNlOwotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRv
U3VzcGVuZDpeeworICAgIFtkYXRhU3RvcmUxIF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9T
dXNwZW5kOl57CiAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKICAgICB9XTsKICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKIAotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbZGF0YVN0b3JlMSBfc2VuZE5ldHdv
cmtQcm9jZXNzRGlkUmVzdW1lXTsKIH0KIAogQGludGVyZmFjZSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU2NoZW1lSGFuZGxlciA6IE5TT2JqZWN0IDxXS1VSTFNjaGVtZUhhbmRsZXI+CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJC
YXNpYy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdv
cmtlckJhc2ljLm1tCmluZGV4IDM0YTRmNWM1MzhiOWIwZTlmY2IwNTA3MmIxNzAyODhlOWU0ZTlm
OGYuLjJmOGUzNGRiYTZkYTQ3MjM1NjU1ZmYwZGIyYWRjYTFiZjhjNTY3MjAgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2lj
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdv
cmtlckJhc2ljLm1tCkBAIC01NTgsNyArNTU4LDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgVXNl
ckFnZW50T3ZlcnJpZGUpCiAKICAgICBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKIAotICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRv
cHROUyhbW1NXVXNlckFnZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRN
ZXNzYWdlOkAiTWVzc2FnZSBmcm9tIHdvcmtlcjogQmFyIEN1c3RvbSBVc2VyQWdlbnQiXSk7Cisg
ICAgbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxlciBh
bGxvY10gaW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBGb28g
Q3VzdG9tIFVzZXJBZ2VudCJdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250
cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1l
OkAic3ciXTsKIAogICAgIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOwpAQCAtNjMzLDggKzYzMyw2IEBAIFRFU1QoU2VydmljZVdvcmtlcnMs
IENhY2hlU3RvcmFnZVJlc3RvcmVGcm9tRGlzaykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtXS1dlYnNpdGVEYXRhU3RvcmUg
X2RlbGV0ZURlZmF1bHREYXRhU3RvcmVGb3JUZXN0aW5nXTsKLQogICAgIFNlcnZpY2VXb3JrZXJU
Q1BTZXJ2ZXIgc2VydmVyKHsKICAgICAgICAgeyAidGV4dC9odG1sIiwgbWFpbkNhY2hlU3RvcmFn
ZUJ5dGVzIH0KICAgICB9LCB7CkBAIC05ODIsNiArOTgwLDcgQEAgVEVTVChTZXJ2aWNlV29ya2Vy
cywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKIAogICAgIFJldGFpblB0cjxXS1dlYlZp
ZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZp
Z3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBzZXRDb25maWd1cmF0aW9uSW5qZWN0ZWRCdW5k
bGVQYXRoKGNvbmZpZ3VyYXRpb24uZ2V0KCkpOworICAgIFJldGFpblB0cjxXS1Byb2Nlc3NQb29s
PiBvcmlnaW5hbFByb2Nlc3NQb29sID0gY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbDsK
IAogICAgIGRvbmUgPSBmYWxzZTsKIApAQCAtMTAzNSw3ICsxMDM0LDcgQEAgVEVTVChTZXJ2aWNl
V29ya2VycywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKICAgICBkb25lID0gZmFsc2U7
CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5nIHRoZSBzaW1wbGUgcGFnZSBkaWQgbm90
IHN0YXJ0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgotICAgIEVYUEVDVF9FUSgwdSwgd2Vi
Vmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vz
c0NvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5w
cm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CiAKICAgICB3ZWJWaWV3ID0g
YWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAs
IDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOm5ld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBF
WFBFQ1RfRVEoMnUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fd2Vi
UHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3YXJtZWQpOwpAQCAtMTA0Myw5ICsxMDQyLDggQEAgVEVT
VChTZXJ2aWNlV29ya2VycywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKICAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IGxvYWRpbmcgdGhpcyBwYWdlIGRpZCBzdGFydCB0aGUgc2VydmljZSB3
b3JrZXIgcHJvY2Vzcy4KICAgICBFWFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJh
dGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7Ci0KKyAgICBFWFBF
Q1RfRVEoMXUsIG9yaWdpbmFsUHJvY2Vzc1Bvb2wuZ2V0KCkuX3NlcnZpY2VXb3JrZXJQcm9jZXNz
Q291bnQpOwogICAgIFtbY29uZmlndXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSByZW1vdmVEYXRh
T2ZUeXBlczpbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbFdlYnNpdGVEYXRhVHlwZXNdIG1vZGlmaWVk
U2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XigpIHsKICAgICAg
ICAgZG9uZSA9IHRydWU7CiAgICAgfV07CkBAIC0xNjE4LDIxICsxNjE2LDM1IEBAIHN0YXRpYyBz
aXplX3QgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzLCBiCiAgICAgcmV0dXJuIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5w
cm9jZXNzUG9vbC5fd2ViUHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3YXJtZWQ7CiB9CiAKLVRFU1Qo
U2VydmljZVdvcmtlcnMsIE91dE9mQW5kSW5Qcm9jZXNzU2VydmljZVdvcmtlcikKK1RFU1QoU2Vy
dmljZVdvcmtlcnMsIE91dE9mUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCiB7CiAgICAgYm9vbCB1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TG9hZEFi
b3V0QmxhbmsgPSB0cnVlOwogCiAgICAgRVhQRUNUX0VRKDF1LCBsYXVuY2hTZXJ2aWNlV29ya2Vy
UHJvY2VzcyghdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgIWZpcnN0TG9hZEFib3V0
QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2VycywgSW5Qcm9jZXNzU2VydmljZVdvcmtl
cikKK3sKKyAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOwor
ICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CisKICAgICBFWFBFQ1RfRVEoMnUs
IGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7CiB9CiAKLVRFU1QoU2VydmljZVdvcmtlcnMsIExv
YWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hTZXJ2aWNlV29ya2VyKQorVEVTVChT
ZXJ2aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaE91dE9m
UHJvY2Vzc1NlcnZpY2VXb3JrZXIpCiB7CiAgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOwog
CiAgICAgRVhQRUNUX0VRKDF1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2VzcyghdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgZmlyc3RMb2FkQWJvdXRCbGFuaykpOworfQorCitURVNU
KFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoSW5Q
cm9jZXNzU2VydmljZVdvcmtlcikKK3sKKyAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MgPSB0cnVlOworICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CisK
ICAgICBFWFBFQ1RfRVEoMnUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MsIGZpcnN0TG9hZEFib3V0QmxhbmspKTsKIH0KIApAQCAtMTk0
NCwxMSArMTk1NiwxMSBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTdXNwZW5kTmV0d29ya1Byb2Nl
c3MpCiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZp
bGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0aF0pOwogCi0gICAgWyB3ZWJWaWV3LmdldCgpLmNv
bmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1t
aW5lbnRseV07CisgICAgW3dlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0
b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwogCiAgICAgRVhQ
RUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRo
OnN3REJQYXRoLnBhdGhdKTsKIAotICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnBy
b2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFt3ZWJWaWV3Lmdl
dCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lXTsKIAogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnNlcnZlci5yZXF1ZXN0KCldOwog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQpp
bmRleCBhMzVmMDUzNTBhYWI0YjQyZjM2YzQ2YWVjZGVlZWU2Y2U1NDRlZjg2Li4zMzc2MDkyYTE5
NWI1MTJkYTY3YzQ5NmU0NTIxN2I5MTRmZTJhNTc5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KQEAg
LTQ3OSw4ICs0NzksNiBAQCBzdGF0aWMgYm9vbCBmaW5pc2hlZDsKIH0KIEBlbmQKIAotLy8gRklY
TUU6IG9uIGlPUywgVUkgcHJvY2VzcyBzaG91bGQgYmUgdXNpbmcgdGhlIHNhbWUgY29va2llIGZp
bGUgYXMgdGhlIG5ldHdvcmsgcHJvY2VzcyBmb3IgZGVmYXVsdCBzZXNzaW9uLgotI2lmIFBMQVRG
T1JNKE1BQykKIGVudW0gY2xhc3MgU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgeyBObywg
WWVzIH07CiB2b2lkIHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3Vs
ZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nKQog
ewpAQCAtNTg5LDIwICs1ODcsNjYgQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFBy
b2Nlc3NQb29sV2l0aFByZXdhcm1pbmcpCiAgICAgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0
UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmc6Olllcyk7CiB9CiAKLSNl
bmRpZiAvLyBQTEFURk9STShNQUMpCi0KIEBpbnRlcmZhY2UgQ2hlY2tTZXNzaW9uQ29va2llVUlE
ZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS1VJRGVsZWdhdGU+CistIChOU1N0cmluZyAqKWFsZXJ0Q29v
a2llSFRNTDsKKy0gKE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2U7CiBAZW5kCiAKLUBpbXBsZW1l
bnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlCitAaW1wbGVtZW50YXRpb24gQ2hl
Y2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfbWVz
c2FnZTsKK30KKwogLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFT
Y3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0ZWRC
eUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIEVYUEVDVF9TVFJFUSgiU2Vzc2lvbkNvb2tp
ZU5hbWU9Q29va2llVmFsdWUiLCBtZXNzYWdlLlVURjhTdHJpbmcpOworICAgIF9tZXNzYWdlID0g
bWVzc2FnZTsKICAgICBmaW5pc2hlZCA9IHRydWU7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
IH0KKworLSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZQoreworICAgIHdoaWxlICghX21lc3Nh
Z2UpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgcmV0
dXJuIF9tZXNzYWdlLmF1dG9yZWxlYXNlKCk7Cit9CisKKy0gKE5TU3RyaW5nICopYWxlcnRDb29r
aWVIVE1MCit7CisgICAgcmV0dXJuIEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50LmNv
b2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpICsr
KSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsgYWxl
cnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOworfQorCiBAZW5kCiAKK1RFU1QoV2Vi
S2l0LCBXS0hUVFBDb29raWVTdG9yZU11bHRpcGxlVmlld3MpCit7CisgICAgVGVzdFdLV2ViVmll
dyAqd2ViVmlldzEgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dl
YlZpZXcxIHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IG5ldHdvcmsgcHJvY2Vz
cyJdOworCisgICAgTlNIVFRQQ29va2llICpzZXNzaW9uQ29va2llID0gW05TSFRUUENvb2tpZSBj
b29raWVXaXRoUHJvcGVydGllczpAeworICAgICAgICBOU0hUVFBDb29raWVQYXRoOiBAIi8iLAor
ICAgICAgICBOU0hUVFBDb29raWVOYW1lOiBAIlNlc3Npb25Db29raWVOYW1lIiwKKyAgICAgICAg
TlNIVFRQQ29va2llVmFsdWU6IEAiQ29va2llVmFsdWUiLAorICAgICAgICBOU0hUVFBDb29raWVE
b21haW46IEAiMTI3LjAuMC4xIiwKKyAgICB9XTsKKworICAgIF9fYmxvY2sgYm9vbCBzZXRDb29r
aWVEb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcxLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFT
dG9yZS5odHRwQ29va2llU3RvcmUgc2V0Q29va2llOnNlc3Npb25Db29raWUgY29tcGxldGlvbkhh
bmRsZXI6XnsKKyAgICAgICAgc2V0Q29va2llRG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZzZXRDb29raWVEb25lKTsKKworICAgIGF1dG8gZGVsZWdh
dGUgPSBhZG9wdE5TKFtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIG5ld10pOworICAgIFt3
ZWJWaWV3MSBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3MSBs
b2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBV
UkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
W2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVl
Iik7CisKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtbVGVzdFdLV2ViVmlldyBuZXdd
IGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzIgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQo
KV07CisgICAgW3dlYlZpZXcyIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhU
TUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOwor
ICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNv
b2tpZU5hbWU9Q29va2llVmFsdWUiKTsKK30KKwogVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0
aG91dFByb2Nlc3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKIHsKICAgICBSZXRhaW5QdHI8V0tXZWJz
aXRlRGF0YVN0b3JlPiBlcGhlbWVyYWxTdG9yZVdpdGhDb29raWVzID0gW1dLV2Vic2l0ZURhdGFT
dG9yZSBub25QZXJzaXN0ZW50RGF0YVN0b3JlXTsKQEAgLTYyNyw5ICs2NzEsOCBAQCBURVNUKFdL
SFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQogICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOwogICAgIGZpbmlzaGVkID0gZmFs
c2U7CiAgICAgCi0gICAgTlNTdHJpbmcgKmFsZXJ0Q29va2llSFRNTCA9IEAiPHNjcmlwdD52YXIg
Y29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8
IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsg
fSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOwot
ICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOmFsZXJ0Q29va2llSFRNTCBiYXNlVVJMOltOU1VS
TCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKLSAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzpbZGVs
ZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0
cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JN
ZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CiB9CiAKIHN0YXRpYyBi
b29sIGFyZUNvb2tpZXNFcXVhbChOU0hUVFBDb29raWUgKmZpcnN0LCBOU0hUVFBDb29raWUgKnNl
Y29uZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KaW5kZXggYWM3ZGU0MTUxMmM0
NTEzOGVjNWU0YzA5ZTUxMTVkMTZjZDIzYjIyZS4uYWMxNjUzNWRmZDkzOTk5ZDJlYzUwZGNmZDcx
YzNhNTZkMTEzZWM3YSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KQEAgLTM1
LDYgKzM1LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VSTFNjaGVtZVRhc2tQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0
YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgpAQCAtMTUyLDcgKzE1Myw3IEBA
IFRFU1QoVVJMU2NoZW1lSGFuZGxlciwgTGVha3MzKQogCiAgICAgcnVuVW50aWxUYXNrc0luRmxp
Z2h0KDIpOwogCi0gICAgW3dlYlZpZXcxLmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlldzEuZ2V0KCkuY29uZmlndXJh
dGlvbi53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBy
dW5VbnRpbFRhc2tzSW5GbGlnaHQoMCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3Rv
bVBhdGhzLm1tCmluZGV4IDkyY2YzYTYxOThhNWI5ZDE0NTQ0OTA1ZGI5ZTk0OGYxMWM3MjU2ZGUu
LmJmOGJkZTgzMWEyODU5YmNmMzQxMzgwNjE4OGI1OTFmY2FhOWQzYWIgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3Rv
bVBhdGhzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vi
c2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RhdGljIHZv
aWQgcnVuV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3
YXJtaW5nIHNob3VsZEUKICAgICAvLyBOb3csIHdpdGggYnJhbmQgbmV3IFdLV2Vic2l0ZURhdGFT
dG9yZXMgcG9pbnRpbmcgYXQgdGhlIHNhbWUgY3VzdG9tIGNvb2tpZSBzdG9yYWdlIGxvY2F0aW9u
LAogICAgIC8vIGluIG5ld2x5IGZpcmVkIHVwIE5ldHdvcmtQcm9jZXNzZXMsIHZlcmlmeSB0aGF0
IHRoZSBmZXRjaCBhbmQgZGVsZXRlIEFQSXMgd29yayBhcyBleHBlY3RlZC4KIAotICAgIFtwcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtkYXRhU3RvcmUgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBhdXRvIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFkb3B0
TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vi
c2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21EYXRh
U3RvcmUgZmV0Y2hEYXRhUmVjb3Jkc09mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldLV2Vi
c2l0ZURhdGFUeXBlQ29va2llcywgbmlsXSBjb21wbGV0aW9uSGFuZGxlcjpeKE5TQXJyYXk8V0tX
ZWJzaXRlRGF0YVJlY29yZCAqPiAqIHJlY29yZHMpIHsKQEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0
aWMgdm9pZCBydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMoU2hvdWxkRW5hYmxlUHJvY2Vz
c1ByZXdhcm1pbmcgc2hvdWxkRQogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKIAot
ICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtkYXRhU3Rv
cmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBuZXdDdXN0b21EYXRhU3RvcmUgPSBh
ZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9u
OndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpXSk7CiAKICAgICBbbmV3Q3VzdG9t
RGF0YVN0b3JlIHJlbW92ZURhdGFPZlR5cGVzOltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dlYnNp
dGVEYXRhVHlwZUNvb2tpZXMsIG5pbF0gbW9kaWZpZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQYXN0
XSBjb21wbGV0aW9uSGFuZGxlcjpeIHsKQEAgLTUzOSw3ICs1MzksNyBAQCBURVNUKFdlYktpdCwg
RG9Mb2FkV2l0aE5vbkRlZmF1bHREYXRhU3RvcmVBZnRlclRlcm1pbmF0aW5nTmV0d29ya1Byb2Nl
c3MpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFt3
ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOworICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3Jl
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICByZXF1ZXN0ID0gW05TVVJMUmVxdWVz
dCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAi
c2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRB
UEkucmVzb3VyY2VzIl1dOwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwpAQCAt
ODU3LDcgKzg1Nyw3IEBAIFRFU1QoV2ViS2l0LCBNZWRpYUNhY2hlKQogICAgIEVYUEVDVF9GQUxT
RShlcnJvcik7CiAKICAgICBkb25lID0gdHJ1ZTsKLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlv
bl0ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbW3dlYlZpZXcg
Y29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OwogCiAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFBhdGg6cGF0aCBlcnJvcjomZXJyb3Jd
OwogICAgIEVYUEVDVF9GQUxTRShlcnJvcik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwCmluZGV4IDlkMzdjY2VkZGI4MjE1NzQ3NWQ4MWYxMjIwZjQ1NmI4NjRjM2Ix
NzEuLjYzMzI2ZjY4NTZiYzYwNTlkYzYzNzlmMmFhNWMwMDUwYTA3ODRhYmQgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC0xMDYxLDggKzEwNjEsNiBAQCBi
b29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRl
c3RPcHRpb25zJiBvcHRpb25zLCBSZQogCiAgICAgcmVzZXRRdW90YSgpOwogCi0gICAgV0tDb250
ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhwbGF0
Zm9ybUNvbnRleHQoKSwgdHJ1ZSk7Ci0KICAgICBXS0NvbnRleHRDbGVhckN1cnJlbnRNb2RpZmll
clN0YXRlRm9yVGVzdGluZyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpKTsK
IAogICAgIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgZmFsc2UpOwpAQCAtMzEzNiw3ICszMTM0
LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMo
Ym9vbCBpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWkKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVy
bWluYXRlTmV0d29ya1Byb2Nlc3MoKQogewotICAgIFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzcyh3ZWJzaXRlRGF0YVN0b3JlKCkpOwogfQogCiB2b2lkIFRlc3RDb250
cm9sbGVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpCkBAIC0zMTY3LDkgKzMxNjUsOCBAQCBQ
bGF0Zm9ybVdlYlZpZXcqIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNyZWF0ZU90aGVyUGFnZShQ
bGF0Zm9ybVdlYlZpZXcqIHBhcmVudAogICAgIHJldHVybiBuZXcgUGxhdGZvcm1XZWJWaWV3KGNv
bmZpZ3VyYXRpb24sIG9wdGlvbnMpOwogfQogCi1XS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29u
ZmlndXJhdGlvblJlZiBjb250ZXh0Q29uZmlndXJhdGlvbikKK1dLQ29udGV4dFJlZiBUZXN0Q29u
dHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0Nv
bnRleHRDb25maWd1cmF0aW9uUmVmKQogewotICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRl
RGF0YVN0b3JlKGNvbnRleHQsIGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCkpOwogICAgIHJldHVy
biBjb250ZXh0OwogfQogCg==
</data>
<flag name="commit-queue"
          id="425017"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409345</attachid>
            <date>2020-09-21 19:51:40 -0700</date>
            <delta_ts>2020-09-21 23:42:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200921195139.patch</filename>
            <type>text/plain</type>
            <size>329897</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRhZGZjMzM1NmEzMzk3NmU4
YmE5Mzk2YmJhOTM0ZThmNGMzODhmM2EuLjAxNTAwYTk4ZWM1ZGJmOTJlYTE2NzlhNzBiN2FmMmE3
NTMzMDE2ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzY0IEBACisyMDIwLTA5LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggbW92ZXMgdGhlIHRoaW5ncyBvbiBXZWJQcm9jZXNzUG9vbCBhc3NvY2lhdGVk
IHdpdGggTmV0d29ya1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgYW5kIG1vdmVzIHRoZW0KKyAgICAg
ICAgdG8gV2Vic2l0ZURhdGFTdG9yZS4gIEl0J3MgcHJldHR5IG1lY2hhbmljYWwsIGJ1dCBpdCBy
ZWFjaGVzIGl0cyBmaW5nZXJzIGludG8gYSBsb3Qgb2YgdGhpbmdzLiAgU29tZSBjb21tZW50cwor
ICAgICAgICBvbiBpbnRlcmVzdGluZyBwYXJ0cyBhcmUgYmVsb3cuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaDoKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZh
dWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdl
U2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cDoKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZXNGb3JVUkwpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNl
dENvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNlcnZlcik6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCk6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXIpOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyk6CisgICAgICAgIChXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZSk6
CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3Rp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3Mp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwOgorICAgICAgICAoV0tXZWJzaXRl
RGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2wubW06CisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6XSk6CisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wg
X25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQ
b29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3N5
bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vz
c1Bvb2wgX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxl
bWVudEZvclRlc3Rpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJzaXRlRGF0YVN0b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOgorICAgICAgICAoLVtXS1dl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXSk6CisgICAgICAgICgtW1dL
V2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpdKToK
KyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHldKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWVdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9z
eW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKF9XZWJLaXRDb29raWVNYW5h
Z2VyUHJpdmF0ZTo6Y29va2llTWFuYWdlciBjb25zdCk6CisgICAgICAgIChfV2ViS2l0Q29va2ll
TWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUpOgorICAgICAgICAo
d2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFn
ZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFn
ZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dl
dF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29v
a2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyk6CisgICAg
ICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAod2Via2l0V2Vi
Q29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNz
aW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNzL0F1eGlsaWFyeVBy
b2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vz
c1Bvb2xDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVBy
b2Nlc3NTdXBwcmVzc2lvblN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eTo6cHVibGlzaFByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWRQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdl
YktpdDo6RG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3lu
Yyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcCk6Cisg
ICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNr
Z3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25X
aWxsRW50ZXJGb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6
Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6
OmRvd25sb2FkRmluaXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpp
bnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlN
YXAuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAgKFdlYktp
dDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2Vz
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFy
YW1ldGVyc1RvTmV3UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OmRhdGFTdG9yZVBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9v
bEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSk6CisgICAgICAgIChXZWJLaXQ6OmFueVBy
b2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFz
aGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1l
c3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6
OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9u
VG9OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sSGFzRm9y
ZWdyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sSGFz
QmFja2dyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRsZXI6OmhhbmRsZVhQQ0V2ZW50IGNvbnN0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5h
Z2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdD
b29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vz
c0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6ZGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50
T3ZlcnJpZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnByZWNvbm5lY3RUbyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmlnYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRD
bGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGlu
Zyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVy
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlv
blRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVt
b3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1
cml0eVBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVS
TFNjaGVtZUFzTG9jYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0
ZXJVUkxTY2hlbWVBc05vQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hl
bWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb25zKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmlzU2VydmljZVdvcmtlclBhZ2VJRCBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZp
Y2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlG
b3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3Mp
OiBEZWxldGVkLgorICAgICAgICBUaGVyZSBzZWVtcyB0byBiZSBhIGxvdCBvZiBjb2RlIHJlbW92
YWwgaGVyZSwgYnV0IG1vc3Qgb2YgaXQgd2FzIGR1cGxpY2F0ZSBjb2RlIHdpdGgKKyAgICAgICAg
V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyB3aGljaCBpcyB1c2VkIGluc3RlYWQuICBUaGF0
IHdoaWNoIHdhcyBub3QgZHVwbGljYXRlIHdhcworICAgICAgICBtb3ZlZCB0byBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzLiAgVGhpcyB3YXMg
dGhlIGhhcmRlc3QgcGFydCBvZiB0aGlzIHBhdGNoLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNr
Z3JvdW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRT
eW5jVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmRGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdv
cmtQcm9jZXNzRGlkUmVzdW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OmZsdXNoQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlcik6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1
bmNoaW5nSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0Nv
Y29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNl
c3Npb25JRCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3Mg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRB
cHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGltZW91
dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFNl
cnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1v
dmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZh
bGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFu
ZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2
YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVj
b3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1Rv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNv
dXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1ldGVy
c1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN1
Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRl
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNz
QW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlw
T25seUluRGF0YWJhc2VPbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0VXNlSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29y
YXRpb25Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVs
ZXRlQ29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
aG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3Vs
ZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RD
b29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNh
cEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnByb2Nlc3NQb29scyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0
aXN0aWNzVGVzdGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEFkQ2xpY2tBdHRyaWJ1
dGlvbkRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZsdXNo
Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vzc2lvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBwQm91bmRTZXNzaW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWlu
c1RvSVRQSWZJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3Jr
UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0
ZXJXaXRoU2Vzc2lvbklETWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphZGRQZW5kaW5nQ29va2ll
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlUGVu
ZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmNsZWFyUGVuZGluZ0Nvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICog
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoT3B0aW9ucyk6
CisgICAgICAgICogVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVyc2lz
dGVudFN0b3JhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRJ
Z25vcmVUTFNFcnJvcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0TmV0
d29ya1Byb3h5U2V0dGluZ3MpOgorCiAyMDIwLTA5LTIxICBLYXRlIENoZW5leSAgPGthdGhlcmlu
ZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGFib3V0OmJsYW5rIHN1YmZyYW1l
IGxvYWRzIGZvciBub24gYXBwLWJvdW5kIHRvcCBmcmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAppbmRl
eCBmY2UyMzg5ODdhNzg1MGYxOGM5ZjMwNmM1MGU5OGNlOTg4ZDEyNWZkLi42YjQ1YzJiZDlmMjZh
NDY4NThkMTc3YjU3NzdiMzBmNjFkMDdlOGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9Db29raWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZVN0b3JhZ2UuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0hUVFBDb29raWVBY2NlcHRQb2xpY3kuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgpAQCAtMTQ5LDkgKzE1MCwxMiBAQCB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3ksCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAotdm9pZCBXZWJDb29raWVN
YW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYkNv
b2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5k
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgaWYgKGF1
dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkp
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5jb29raWVBY2NlcHRQ
b2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihIVFRQQ29va2ll
QWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5h
Z2VyLmgKaW5kZXggY2E3ZjU1ZTg2NmJkYWQ0YjFlMzUyZThmNjQwNTdiYWJjNDYyODMyZC4uZWI3
NDE4MjM1ZjU3MDkzMDM5NjAxOWJlNDQ3MjFkZGMwOWZhOThmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCkBA
IC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRDb29raWVzKFBBTDo6U2Vzc2lv
bklELCBjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiYpPiYmKTsKIAogICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpOwotICAgIHZvaWQgZ2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3kpPiYmKTsKKyAgICB2b2lkIGdldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SFRUUENvb2tp
ZUFjY2VwdFBvbGljeSk+JiYpOwogCiAgICAgdm9pZCBzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5n
ZXMoUEFMOjpTZXNzaW9uSUQpOwogICAgIHZvaWQgc3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMo
UEFMOjpTZXNzaW9uSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgppbmRleCBh
Y2Q3NTQ0MGQ4M2YzNDY2NTBjOWYzM2I3NWI1ZDVkMDkzNTIxM2JhLi42ZmRmNTc3MmFhNmFhZTM5
NDAyYTlhODlmNTZjODRmN2JkNDM1ODVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdl
cy5pbgpAQCAtMzYsNyArMzYsNyBAQCBtZXNzYWdlcyAtPiBXZWJDb29raWVNYW5hZ2VyIE5vdFJl
ZkNvdW50ZWQgewogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3luYwogCiAgICAgdm9p
ZCBTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJDb3JlOjpIVFRQQ29v
a2llQWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lkIEdldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBDb29raWVBY2Nl
cHRQb2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tpZUFjY2VwdFBvbGlj
eShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRU
UENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAgdm9pZCBTdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIHZvaWQg
U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCBi
ZThkOTY2NjJiZTZkY2Q4NWZhM2MzMjkyOWFlMGYwYjVkMTgyMzQzLi43ZjQ3NzcxMzJkNTI0NzU4
MTgyOTgxYWFmMGMxOGI3MmI3YmEzOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ3LDI5ICszNDcsMTkgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJh
bWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lv
bklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3Jr
U2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRT
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFTdG9yZVBhcmFtZXRl
cnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAgICAgYXV0byBzZXNz
aW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNz
aW9uSUQ7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShkYXRh
U3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Cisg
ICAgICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgZGF0YVN0b3Jl
UGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVy
VGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJ
bmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKKyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIGRhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKLQor
ICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1vdGVOZXR3b3JraW5n
Q29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUoZGF0
YVN0b3JlUGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBib29s
IHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgPSB0cnVlOwotICAg
IGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUo
cGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAg
ICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0
ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUo
ZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwg
ZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNl
c3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8qIGRlZmF1bHRTZXNz
aW9uID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7
Ci0gICAgYXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNlc3Npb24tPm5ldHdv
cmtTdG9yYWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAg
ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAgICB9CiAKICAgICBm
b3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBz
dXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNTA1LDggKzQ5NSw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNl
c3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9u
KGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVXNlVGVzdGluZ05l
dHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXJCYXNlKQogI2VuZGlmCiB7Ci0g
ICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmFkZChz
ZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTUyMSw3ICs1MDksNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1
cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQog
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gbWFrZVN0cmluZyhpZGVu
dGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmlu
ZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkK
ICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vz
c2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAoc2Vzc2lv
bklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgICAgIHN0b3Jh
Z2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVDRlN0b3Jh
Z2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkpOwogCiAgICAgaWYgKE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQSSgpKSB7CkBAIC01NDQs
MjEgKzUzMiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVBY2NlcHRQb2xpY3lDaGFu
Z2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9saWN5KQogCiBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6
OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0dXJuICZkZWZhdWx0
U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmdl
dChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdv
cmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIGlmICghbV9k
ZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1bHROZXR3b3JrU3Rv
cmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwotICAg
IHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQotCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZv
aWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9yKQogewotICAgIGZ1
bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0byYgc3RvcmFnZVNl
c3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAgICAgICAgIGZ1bmN0
b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaAppbmRleCBhYTczMzc3YjczMmY2MTBiODY3OTA1NmMzN2RmMjhhZWVh
MDdhZjgzLi5kYzg2ZjM5Njk3ZmM1MDNlYTRkYmQxYjA2YzMyMjk3NWIxZTY5ZDE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0xNzAsNyAr
MTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9u
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7
CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nlc3Npb24oY29uc3Qg
UEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIGVuc3VyZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3Jr
U2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4mJik7CkBAIC0zNzUsNyArMzc0LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBAIC01NDQsNyArNTQyLDYgQEAgcHJp
dmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9u
SUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiBtX25l
dHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247
CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggOTkwMWM1Y2I3M2M3NGZlM2Rh
NGViZjU3YmE4NTEyODZmZGExMDRiZi4uMDJkZGI5MjM0ZTk5OWMzZTZjZGNkY2YwYjg3OGI4NzI1
ODM2MzI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTU1LDcgKzU1
LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc1NES1ZlcnNp
b247CiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwog
I2VuZGlmCi0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBl
bmNvZGVyIDw8IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYgVVNFKFNPVVApCiAgICAgZW5jb2Rl
ciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5jb2RlciA8PCBpZ25vcmVUTFNFcnJvcnM7
CkBAIC02OCw5ICs2OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCB1cmxT
Y2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0
ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgZW5jb2Rl
ciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxkRGlzYWJsZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAgIGVuY29kZXIgPDwg
c2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFibGVBZENsaWNrQXR0
cmlidXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTYsMTEgKzExMywxMSBAQCBib29sIE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBO
ZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIE9wdGlvbmFs
PFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsK
LSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIGlmICghZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9yPFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBkZWNvZGVyID4+IGRh
dGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0ZXJzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzID0g
V1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJlc3VsdC5kYXRhU3Rv
cmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7CiAKICNpZiBVU0Uo
U09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVBY2NlcHRQb2xpY3kp
KQpAQCAtMTQyLDIwICsxMzksNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcykpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlvbmFsPFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVz
dWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBX
VEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERpc2FibGVTZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0j
ZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJsZUlUUERh
dGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmgKaW5kZXggMTFjYTVhMTk5ZmNmZmU4ODNmZmYwYTJmZjc5ZGZlNDIxMGQ5ZGFkMS4uNjc0
OWRhMGM0YTYzYzIwMjEwNzc4MzU4NDg0NmM5MGQwMTBhMDM0MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaApAQCAtNzEsNyArNzEsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMgewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG5ldHdvcmtBVFNDb250
ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBkZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVyczsKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+
IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAgICAgCiAjaWYgVVNFKFNPVVApCiAgICAgV2ViQ29yZTo6
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBXZWJDb3JlOjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsKQEAgLTg1LDEyICs4NSw3IEBAIHN0
cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgVmVjdG9yPFN0cmlu
Zz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNj
aGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
LSAgICBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeTsKLSAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSAgICBib29sIHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vz
c1Rlcm1pbmF0aW9uRGVsYXkgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgYm9vbCBzaG91bGRFbmFi
bGVJVFBEYXRhYmFzZSB7IGZhbHNlIH07CisgICAgYm9vbCBzaG91bGRFbmFibGVJVFBEYXRhYmFz
ZSB7IHRydWUgfTsKICAgICBib29sIGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSB7
IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXggZGE2MzU5MTI0MjIzZGI5NzAz
MGQxZWE3N2JjMDBjZWU1MWZiMDE3ZC4uNTAxMGY5YTg2OTAzOTBkZmZlOWEzNDRlOTkwNWIyNGU2
Njg1YzdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpAQCAtNzgsOSArNzgsNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5l
dHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNh
bmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvbnRhaW5lckNh
Y2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29u
c3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0j
ZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFUU0NvbnRleHQocGFyYW1ldGVycy5u
ZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMDUsMTEgKzEwMiw2IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29uc3QgTmV0
d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2FjaGU6dXJsQ2FjaGUu
Z2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24o
KSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIFJldGFp
blB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNzOjpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0
YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9BUFBMSUNBVElPTl9BVURJVF9EQVRBKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQyZGNjOGUzZjliOGYxNjkyOTk3ZjY3MTky
Li40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5M2UyMjU2YTM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJs
LmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKIHsKIH0KIAot
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1By
b2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNz
OjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQ2VydGlmaWNhdGVJ
bmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMv
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBjMjczNmUwMjZhNTVkM2Q0MDIw
Zjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0NjIwZjAyYTdkOWU5ZTg2OWVjODY0OTFi
N2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1v
dGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNTUsMTUgKzU1LDExIEBAIHZvaWQg
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKE5l
dHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJt
YW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAog
ICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nlc3NDb29raWVTdG9y
YWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQ
cm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAgIGlmICghc2Vzc2lv
bklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlk
ZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAg
ICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3RvcmFnZUZyb21JZGVudGlmeWluZ0Rh
dGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcik7CiAKICAgICBu
ZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBtYWtlU3Ry
aW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkpLCBXVEZNb3ZlKHVpUHJvY2Vzc0Nv
b2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrUHJvY2Vzcy5zdG9y
YWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFy
YW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0Q29va2llKGNvb2tp
ZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nl
c3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRleCA0MWFmZGNjNjFh
ZGM1ODNkY2YxOWYyZDQwYWEyODkxZjhhMDEzMjhiLi4wOTNkNTk5NTk2YTY4ODMwYWYwOTkzZmEz
NjgzMWUwYzMyNGJmYmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApAQCAtMTQwLDExICsxNDAsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25z
dCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNldElnbm9yZVRMU0Vycm9ycyhwYXJhbWV0ZXJz
Lmlnbm9yZVRMU0Vycm9ycyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsK
LX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3Jl
VExTRXJyb3JzKQogewogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0U2hvdWxkSWdub3JlVExT
RXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXggNmQwYzEyOWE3NDA1MTBkMzg2OTcz
NzA1YWQwOTJlZjEzMmNjMDc1YS4uMDQ4MTBiM2UxOWJlOTZjYWQxYWQ4MmE0NGRjZWRiMjZlZjc4
MjYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmNwcApAQCAtNDAsMTMgKzQwLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVy
IDw8IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc0Nv
b2tpZVN0b3JhZ2VJZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2llU3RvcmFnZVBhdGhF
eHRlbnNpb25IYW5kbGU7Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2llczsKIAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlVGVtcEJs
b2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpE
ZWMKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmNvb2tpZVN0
b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY29va2llU3RvcmFnZVBhdGhFeHRl
bnNpb25IYW5kbGUpOwogCi0gICAgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4+IHBl
bmRpbmdDb29raWVzOwotICAgIGRlY29kZXIgPj4gcGVuZGluZ0Nvb2tpZXM7Ci0gICAgaWYgKCFw
ZW5kaW5nQ29va2llcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0
ZXJzLnBlbmRpbmdDb29raWVzID0gV1RGTW92ZSgqcGVuZGluZ0Nvb2tpZXMpOwotCiAjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBpbmRleGVkRGF0YWJh
c2VEaXJlY3Rvcnk7CiAgICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CkBA
IC0xMDEsMTQgKzkxLDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAgICBpZiAoIWluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIE9wdGlvbmFsPFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZT4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGU7Ci0gICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIWluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHBhcmFt
ZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBX
VEZNb3ZlKCppbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKaW5kZXggZjI3
ZGY0ODk4MDlmMzE5NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQzOS4uZTFiMjMzNzAxOTlmZTM3MDMx
ZTlkYzVjMDU3ODE1NTAyMWUzNGQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCkBAIC01MSwxNSArNTEsMTEgQEAgc3RydWN0IFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKIAogICAgIFZlY3Rvcjx1aW50OF90PiB1aVByb2Nl
c3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUg
Y29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkNv
b2tpZT4gcGVuZGluZ0Nvb2tpZXM7CiAgICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRl
cnMgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAgICAgU3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGlu
ZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKaW5kZXggYmMwNzg2NmZiYzM5
NjhlNzZjYWE5YTM1NjgxMGM2YTJmYjA5ZGNmZC4uZmY5NTU4OTJiZGEwYjgzYzIzYTk2YTA4Mzll
ZjNiZDBkOTQ2OWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5jcHAKQEAgLTQ2LDggKzQ2LDYgQEAgbmFtZXNwYWNlIEFQSSB7CiBI
VFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUm
IHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0RhdGFTdG9yZSh3ZWJzaXRlRGF0YVN0
b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5v
dGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkK
QEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkKICAg
ICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoIW1fb2JzZXJ2ZWRD
b29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9jb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7
CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC04MSwz
MyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJvdW5kQ29va2llcyhj
b25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2kKIAogdm9pZCBIVFRQQ29va2llU3Rv
cmU6OmNvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293
bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwot
ICAgIGlmICghcG9vbCkgewotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBhbGxDb29r
aWVzOwotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgICAgICBhbGxDb29raWVzID0g
Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwotICAgICAgICBhbGxD
b29raWVzLmFwcGVuZFZlY3RvcihtX293bmluZ0RhdGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMoKSk7
Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlciksIGFsbENvb2tpZXNdICgpIG11dGFibGUgewotICAgICAgICAgICAgZmlsdGVyQXBw
Qm91bmRDb29raWVzKGFsbENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5h
Z2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsK
LSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcG9vbCA9IFdU
Rk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7Cisg
ICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vz
cygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldEFsbENvb2tpZXMobV9v
d25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFibGUgewogICAg
ICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0ZvclVS
TChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9v
d25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsK
LSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwot
Ci0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0Q29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYgY29va2llcykgbXV0YWJsZSB7CisgICAg
YXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vzcygp
LmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldENvb2tpZXMobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
IChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgewogICAgICAgICBm
aWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIH0pOwogfQpAQCAtMTE1LDc4ICs5NCwyOSBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
bwogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiBhcHBCb3VuZENvb2tpZXMpIG11dGFibGUgewot
ICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29v
a2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7Ci0gICAgICAgICAg
ICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vzc2lvbiBiZWNhdXNl
IHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3b3JrIFByb2Nlc3Mg
d2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAgICAgICAgICAgICBp
ZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAgICAgICAgICAgICBz
ZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9vd25pbmdEYXRhU3RvcmUtPmFkZFBl
bmRpbmdDb29raWUoY29va2llKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgICAg
ICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAgIGF1dG8mIGNvb2tp
ZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5h
Z2VyKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29va2llKGNv
bnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3Jl
LT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29s
KSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Npb24pCi0gICAgICAg
ICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvb2tpZSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5yZW1vdmVQZW5k
aW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBs
ZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdl
ci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBb
cG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0g
ICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNv
b2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29v
a2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0
b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBkZWxl
dGVDb29raWVzSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBh
dXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCku
Y29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxsQ29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBUaGUgQ29tcGxldGlv
bkhhbmRsZXIgc2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0
ZUFsbENvb2tpZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBw
b29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xpY3kpOwotICAgICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wt
PnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2ll
TWFuYWdlci0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAg
IH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29y
a1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5zZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpm
bHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMjI3LDIxICsxNTcsNyBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNl
cnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCiAKICAgICBtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2Vy
dmVyID0gbWFrZVVuaXF1ZTxBUElXZWJDb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcj4oKnRoaXMp
OwogCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNv
b2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgQVNT
RVJUKCFtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMpOwotCi0gICAgICAgIC8vIExpc3RlbiBm
b3IgY29va2llIG5vdGlmaWNhdGlvbnMgaW4gdGhlIFVJUHJvY2VzcyBpbiB0aGUgbWVhbnRpbWUu
Ci0gICAgICAgIHN0YXJ0T2JzZXJ2aW5nQ2hhbmdlc1RvRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0
b3JlKFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICBjb29raWVzRGlkQ2hhbmdlKCk7Ci0gICAgICAg
IH0pOwotCi0gICAgICAgIG1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyA9IHRydWU7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0g
cG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBt
X29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3Jr
UHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclBy
b3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1f
Y29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCkBAIC0yNzYsNDYgKzE5MiwxMCBAQCB2
b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0RpZENoYW5nZSgpCiB2b2lkIEhUVFBDb29raWVT
dG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCgpCiB7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1h
bmFnZXJQcm94eS0+dW5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgIG1fb2JzZXJ2ZWRDb29r
aWVNYW5hZ2VyUHJveHkgPSBudWxscHRyOwotCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0
YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBp
ZiAoIXBvb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2Vy
UHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Pigp
OworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmbV9vd25pbmdEYXRhU3RvcmUt
Pm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwogICAgIG1fb2JzZXJ2ZWRDb29raWVN
YW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKLXZvaWQgSFRUUENvb2tp
ZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAg
QVNTRVJUKCFtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAg
bV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gV2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKFt0aGlzXShXZWJQcm9jZXNzUG9v
bCYgbmV3UHJvY2Vzc1Bvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+aXNB
c3NvY2lhdGVkUHJvY2Vzc1Bvb2wobmV3UHJvY2Vzc1Bvb2wpKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIC8vIE5vdyB0aGF0IGFuIGFzc29jaWF0ZWQgcHJvY2VzcyBwb29sIGV4aXN0
cywgd2UgbmVlZCB0byBmbHVzaCB0aGUgVUkgcHJvY2VzcyBjb29raWUgc3RvcmUKLSAgICAgICAg
Ly8gdG8gbWFrZSBzdXJlIGFueSBjaGFuZ2VzIGFyZSByZWZsZWN0ZWQgd2l0aGluIHRoZSBuZXcg
cHJvY2VzcyBwb29sLgotICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgp
OwotICAgICAgICBuZXdQcm9jZXNzUG9vbC5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCi0gICAg
ICAgIGlmIChtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKSB7Ci0gICAgICAgICAgICBtX29i
c2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbmV3UHJvY2Vzc1Bvb2wuc3VwcGxlbWVudDxXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29r
aWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAgICAgIH0KLSAgICAg
ICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotICAgIH0pOwot
fQotCi12b2lkIEhUVFBDb29raWVTdG9yZTo6dW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucygpCi17Ci0gICAgaWYgKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRl
bnRpZmllcikKLSAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJQcm9jZXNzUG9vbENy
ZWF0aW9uTGlzdGVuZXIobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsK
LQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IDA7Ci19Ci0K
ICNpZiAhUExBVEZPUk0oQ09DT0EpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1c2hEZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmUoKSB7IH0KIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IEhUVFBD
b29raWVTdG9yZTo6Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpIHsg
cmV0dXJuIHsgfTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBD
b29raWVTdG9yZS5oCmluZGV4IGQ2MjBhZGRhNGU3Zjg5NDU2NjE4YTNlMjJlMWJmZDQzNTc3NzVi
MTkuLmEwNWY0MTQzMGRiMmIyM2Q0MTc4NDA3OWE0ZmI4NmM3NDYwYTc1NDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKQEAgLTgzLDkg
KzgzLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7Ci0KICAgICB2b2lkIGZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
KCk7CiAgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGdldEFsbERlZmF1bHRVSVBy
b2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKICAgICBzdGF0aWMgdm9pZCBzZXRDb29raWVJbkRl
ZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCmluZGV4IDU4YzU0NTNmNDg5
ODdmNWUxYWZhZmVmMzRjNDMzMzVmMWI0Y2M5OTAuLjY1ZjhiNTNmNWIzZDMwNWNmMjgwYmE1ZDMw
YWFlMzdiMzlhY2Y0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250
ZXh0LmNwcApAQCAtNDExLDExICs0MTEsNiBAQCB2b2lkIFdLQ29udGV4dFByZWNvbm5lY3RUb1Nl
cnZlcihXS0NvbnRleHRSZWYsIFdLVVJMUmVmKQogewogfQogCi1XS0Nvb2tpZU1hbmFnZXJSZWYg
V0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dFJlZikKLXsKLSAg
ICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c3VwcGxl
bWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSk7Ci19Ci0KIFdLV2Vic2l0ZURh
dGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZikKIHsK
ICAgICByZXR1cm4gV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSgpOwpAQCAt
NTI3LDEzICs1MjIsNiBAQCB2b2lkIFdLQ29udGV4dFNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVj
dG9yVGltZXJFbmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLAogICAgIFdlYktpdDo6dG9J
bXBsKGNvbnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxl
ZChlbmFibGUpOwogfQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRl
Rm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgYWxsb3dz
KQotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250
ZXh0KS0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7
Ci0jZW5kaWYKLX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQbHVnSW5BdXRvU3Rh
cnRPcmlnaW5IYXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdl
YktpdDo6dG9BUEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVnSW5BdXRvU3RhcnRP
cmlnaW5IYXNoZXMoKS5sZWFrUmVmKCkpOwpAQCAtNTc1LDExICs1NjMsNiBAQCB2b2lkIFdLQ29u
dGV4dFNldEZvbnRBbGxvd0xpc3QoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLQXJyYXlSZWYg
YXJyYXlSZWYpCiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldEZvbnRBbGxvd0xp
c3QoV2ViS2l0Ojp0b0ltcGwoYXJyYXlSZWYpKTsKIH0KIAotdm9pZCBXS0NvbnRleHRUZXJtaW5h
dGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAgICBXZWJLaXQ6OnRv
SW1wbChjb250ZXh0KS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0KLQogdm9pZCBXS0Nv
bnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAg
ICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKQEAg
LTU4Nyw3ICs1NzAsNyBAQCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKFdL
Q29udGV4dFJlZiBjb250ZXh0KQogCiBQcm9jZXNzSUQgV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nl
c3NJZGVudGlmaWVyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewotICAgIHJldHVybiBXZWJL
aXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CisgICAg
cmV0dXJuIDA7CiB9CiAKIHZvaWQgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBkb21haW5SZWYsIFdLU3RyaW5nUmVmIG5hbWVS
ZWYsIFdLQXJyYXlSZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5UmVmIGV4dGVuc2lvbnNSZWYpCkBA
IC02MTksMTIgKzYwMiwxMSBAQCB2b2lkIFdLQ29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3Rh
dGVGb3JUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogICAgIFdlYktpdDo6dG9JbXBs
KGNvbnRleHRSZWYpLT5jbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpOwogfQog
Ci12b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykK
K3ZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0NvbnRl
eHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKIHsKLSAgICBXZWJL
aXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRl
RGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYg
d2Vic2l0ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3Rv
cmUoV0tDb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0
b0ltcGwoY29udGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktpdDo6dG9JbXBsKHdl
YnNpdGVEYXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250
ZXh0LmgKaW5kZXggMWQ4ZmFiOGExNDg2YWFkYjQ5NDE0NGI5OGYxMGU5MzYzOGQwYzVlNi4uMmFi
NmVmODZmNTMwZTc3Zjc0Y2JkNWRmNTg2MmFjNGQzMGI3OTg3NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2OCw3ICsxNjgsNiBAQCBXS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihXS0NvbnRleHRSZWYgY29udGV4dCk7CiBX
S19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4dEdldFdlYnNpdGVEYXRhU3Rv
cmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNF
TUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKIAogV0tfRVhQT1JU
IFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0QXBwbGljYXRpb25DYWNo
ZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9S
RVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKLVdLX0VY
UE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRl
eHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdLX0VYUE9SVCBXS0dlb2xvY2F0
aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1hbmFnZXIoV0tDb250ZXh0UmVm
IGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVmIFdLQ29udGV4dEdldEljb25E
YXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tLZXlWYWx1ZVN0b3Jh
Z2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFnZU1hbmFnZXIoV0tDb250ZXh0
UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNp
dGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAppbmRleCBhMDI1MDExZjcwY2M2NTlmNWZh
YTA4YTdkNmNiYjNmZjU2ZWU2YTM4Li5kODM5Y2FjYjI4YmE1NjVkYzk1YTgzOTNiZmNjYWI5Mzhk
YWRjYzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0
UHJpdmF0ZS5oCkBAIC04MywxMSArODMsOCBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRXYXJt
SW5pdGlhbFByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogLy8gQXQgc29tZSBwb2ludCBp
dCBzaG91bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldFVzZXNOZXR3
b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRl
eHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tfRVhQT1JUIHZvaWQg
V0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmKTsKIAotV0tfRVhQ
T1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0eXBlZGVmIHZvaWQgKCpXS0NvbnRl
eHRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSk7CiBXS19F
WFBPUlQgdm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKFdLQ29udGV4dElu
dmFsaWRNZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VGdW5jdGlvbik7CiAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVS
ZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3Jl
UmVmLmNwcAppbmRleCA5ZGRhNTkxYzk1MTg5YWIwYzI1YWM1NTQ2NmMwYTJiZmMzOTI3ZWJjLi5i
NzhhOTFlMzNlZGY5ZTI5NGJiNGQ4ZDRjMGRkZjU3Y2U1MDE2YjdlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAK
QEAgLTY5LDYgKzY5LDExIEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1dlYnNpdGVEYXRhU3Rv
cmVDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihXS1dlYnNpdGVEYXRhU3RvCiAgICAgcmV0dXJuIFdl
YktpdDo6dG9BUEkoJldlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlKCpXZWJLaXQ6OnRv
SW1wbChjb25maWd1cmF0aW9uKSwgc2Vzc2lvbklEKS5sZWFrUmVmKCkpOwogfQogCit2b2lkIFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLV2Vic2l0ZURhdGFTdG9y
ZVJlZiBkYXRhU3RvcmUpCit7CisgICAgV2ViS2l0Ojp0b0ltcGwoZGF0YVN0b3JlKS0+dGVybWlu
YXRlTmV0d29ya1Byb2Nlc3MoKTsKK30KKwogdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVSZW1vdmVJ
VFBEYXRhRm9yRG9tYWluKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIFdLU3Ry
aW5nUmVmIGhvc3QsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9yZVJlbW92ZUlUUERh
dGFGb3JEb21haW5GdW5jdGlvbiBjYWxsYmFjaykKIHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tXZWJzaXRlRGF0YVN0b3JlUmVmLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1dlYnNpdGVEYXRhU3RvcmVSZWYuaAppbmRleCBlNzdkMDljMTA3ZDFkYTA3ODNkMDljMDdlMjgw
M2QwODcxMjVlNDhiLi5jM2ZhMWJmM2Y5MjQ4YzJmZTQ5YmUxMjQzOTY0NDExZjgzMWQyYTZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3Rv
cmVSZWYuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRh
U3RvcmVSZWYuaApAQCAtNTAsNiArNTAsOSBAQCBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRh
U3RvcmVTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldFRlc3RpbmcoVwogCiBX
S19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdL
V2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogCitXS19FWFBPUlQgdm9pZCBXS1dl
YnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiBkYXRhU3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRl
TmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSk7CisKIFdLX0VY
UE9SVCBib29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogV0tfRVhQT1JUIHZvaWQg
V0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJz
aXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUpOwogdHlwZWRlZiB2b2lk
ICgqV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0VwaGVtZXJhbEZ1bmN0aW9uKShib29sIGlz
RXBoZW1lcmFsLCB2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQppbmRleCBmZjMwOTQ5ODZjMjQz
ZDA0NzRmMjUyZDM5MWU2Y2NiNzRmMWZlZDViLi5hODAyYjk3YzdiNDE2Zjk2YmJhNTRmZWJlN2Ex
ZGRkNDM4M2QwYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbC5tbQpAQCAtNDA2LDI4ICs0MDYsNiBAQCBzdGF0aWMgTlNEaWN0aW9u
YXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhh
c2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJTdXBwb3J0ZWRQbHVnaW5zKCk7CiB9CiAK
LS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCi17Ci0gICAgX3Byb2Nlc3NQb29sLT50
ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nl
c3NXaWxsU3VzcGVuZEltbWluZW50bHkKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3Jr
UHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0KLQotLSAodm9pZClf
c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0
aW9uSGFuZGxlcgotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFy
ZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNv
bXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0p
OwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUKLXsKLSAgICBfcHJv
Y2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQotCiAtICh2b2lkKV90
ZXJtaW5hdGVTZXJ2aWNlV29ya2VycwogewogICAgIF9wcm9jZXNzUG9vbC0+dGVybWluYXRlU2Vy
dmljZVdvcmtlcnMoKTsKQEAgLTQzNSwxMiArNDEzLDEyIEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkg
KnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1h
cDxTCiAKIC0gKHZvaWQpX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6KEJPT0wp
dXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcwogewotICAgIF9wcm9jZXNzUG9vbC0+c2V0
VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCiAt
IChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCiB7Ci0gICAgcmV0dXJuIF9wcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIC0g
KHBpZF90KV9wcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcgpAQCAtNTYwLDE4ICs1MzgsNiBAQCBz
dGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFz
aE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0Q29va2llU3RvcmFn
ZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLS0gKHZvaWQpX3N5bnRoZXNpemVB
cHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAotewotICAgIF9wcm9jZXNzUG9vbC0+c3lu
dGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKLX0KLQotLSAodm9pZClfc2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFsbG93cwotewotI2lm
IEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBfcHJvY2Vzc1Bvb2wtPnNldEFsbG93c0FueVNT
TENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlmCi19Ci0KICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQogLSAoaWQgPF9XS0dlb2xvY2F0aW9uQ29yZUxvY2F0aW9uUHJv
dmlkZXI+KV9jb3JlTG9jYXRpb25Qcm92aWRlcgogewpAQCAtNjA0LDExICs1NzAsNiBAQCBzdGF0
aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1h
cDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIH0pOwogfQogCi0tIChCT09MKV9uZXR3b3JrUHJvY2Vz
c0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAotewotICAg
IHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0
aW5nKGVudGl0bGVtZW50KTsKLX0KLQogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFs
c0ZvclByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3Bh
Y2UKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90
ZWN0aW9uU3BhY2UoV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rpb25TcGFjZSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bv
b2xQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNz
UG9vbFByaXZhdGUuaAppbmRleCA2NzY5MDE1ZTA4NTU4OTk0Y2Q4YTIxOWExN2E5YzY4YWRlM2I1
MzgzLi5iZjQ4Y2ExYzUyYzIyMTk3MzY4Yjg4MjkwNTA3MjIzZjBmMjA2Y2QxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFBy
aXZhdGUuaApAQCAtODcsMTAgKzg3LDYgQEAKIC0gKF9XS0Rvd25sb2FkICopX3Jlc3VtZURvd25s
b2FkRnJvbURhdGE6KE5TRGF0YSAqKXJlc3VtZURhdGEgd2Vic2l0ZURhdGFTdG9yZTooV0tXZWJz
aXRlRGF0YVN0b3JlICopZGF0YVN0b3JlICBwYXRoOihOU1N0cmluZyAqKXBhdGggb3JpZ2luYXRp
bmdXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4gU2hvdWxkIGJlIGNh
bGxlZCBvbmx5IHdoaWxlIG5vIHdlYiBjb250ZW50IHByb2Nlc3NlcyBhcmUgcnVubmluZy4KLS0g
KHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQ
cm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUp
LCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9pZClfdGVybWluYXRl
U2VydmljZVdvcmtlcnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4wKSk7
CiAKIC8vIFRlc3Qgb25seS4KQEAgLTEyMiwxMyArMTE4LDEwIEBACiAtICh2b2lkKV9wcmVjb25u
ZWN0VG9TZXJ2ZXI6KE5TVVJMICopc2VydmVyVVJMIFdLX0FQSV9ERVBSRUNBVEVEX1dJVEhfUkVQ
TEFDRU1FTlQoIldLV2ViVmlldy5fcHJlY29ubmVjdFRvU2VydmVyIiwgbWFjb3MoMTAuMTMuNCwg
V0tfTUFDX1RCQSksIGlvcygxMS4zLCBXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4KLS0g
KHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjooQk9PTClh
bGxvd3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMpKTsKIC0gKHZv
aWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3Rpbmc6KHBpZF90KXBp
ZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PE5TU3RyaW5nICo+ICopKWNvbXBs
ZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7
Ci0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJp
bmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIu
MikpOwogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25TcGFj
ZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0
ZXI9X2lzQ29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQsIHNldHRlcj1fc2V0Q29va2ll
U3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQ6KSBCT09MIF9jb29raWVTdG9yYWdlUGFydGl0aW9u
aW5nRW5hYmxlZCBXS19BUElfREVQUkVDQVRFRCgiUGFydGl0aW9uZWQgY29va2llcyBhcmUgbm8g
bG9uZ2VyIHN1cHBvcnRlZCIsIG1hY29zKDEwLjEyLjMsIDEwLjE0LjQpLCBpb3MoMTAuMywgMTIu
MikpOwotLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5k
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogCiAvLyBUZXN0IG9u
bHkuCiAtICh2b2lkKV9zZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRlc3RpbmdXaXRoRmly
c3RQYXJ0eTooTlNVUkwgKilmaXJzdFBhcnR5VVJMIHRoaXJkUGFydHk6KE5TVVJMICopdGhpcmRQ
YXJ0eVVSTCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbjooQk9PTClzaG91bGRTY2hlZHVsZU5v
dGlmaWNhdGlvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFu
ZGxlciAgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJz
aXRlRGF0YVN0b3JlLm1tCmluZGV4IDI5OGQ5Y2VjOWU4NGQ4YTUxMjIwNjVjYzk5MjMzZWY0ZjBi
OTUzODkuLmFlOWM0NTA3NzkwODZjYzFlMzExNGNlMTNmMmQyMTg4ZTc4N2YxNGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUu
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFT
dG9yZS5tbQpAQCAtNjE3LDYgKzYxNywxMSBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0
ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogICAg
IH0pOwogfQogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGlu
ZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAoreworICAgIHJldHVybiBfd2Vic2l0ZURhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoZW50aXRsZW1lbnQpOwor
fQorCiAtIChpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVnYXRlPilfZGVsZWdhdGUKIHsKICAg
ICByZXR1cm4gX2RlbGVnYXRlLmdldCgpLmdldCgpOwpAQCAtNjY4LDQgKzY3MywzMiBAQCBzdGF0
aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRz
KE5TQXJyYXkgKmRhdGFSZWNvcgogI2VuZGlmCiB9CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnRlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzKCk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6
KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9y
ZS0+c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRp
b25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworfQorCistICh2b2lkKV9zZW5kTmV0d29ya1By
b2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+c2Vu
ZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworCit9CisK
Ky0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQoreworICAgIF93ZWJzaXRlRGF0
YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKK30KKworLSAodm9pZClfc3lu
dGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kCit7CisgICAgX3dlYnNpdGVE
YXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNr
Z3JvdW5kKTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKaW5kZXggOTkzMjAx
MDQ2YjU1MWMzZjI4ZGYyZGMwYTAzNDZkN2JjNzlhYzVmNC4uNDIxNWRiNzQ3YmEzMjJmYWViOGE0
N2UxNjc1YTY1ODM4MTQ3MjYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCkBAIC04NSw5
ICs4NSwxNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0ZURhdGFT
dG9yZUZldGNoT3B0aW9ucykgewogCiAtICh2b2lkKV9yZW5hbWVPcmlnaW46KE5TVVJMICopb2xk
TmFtZSB0bzooTlNVUkwgKiluZXdOYW1lIGZvckRhdGFPZlR5cGVzOihOU1NldDxOU1N0cmluZyAq
PiAqKWRhdGFUeXBlcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlv
bkhhbmRsZXI7CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0
aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21p
Yywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2RlbGVnYXRlIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqX2Nv
bmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9z
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRp
b25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0g
KHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1hY29z
KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc3ludGhlc2l6ZUFwcElz
QmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBlbmQKIAogTlNfQVNTVU1FX05PTk5VTExfRU5E
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29r
aWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwCmluZGV4IDFlZTczZWJjMGVhMDM2Zjg2YjNmZTk0NDE0OTA3MmU2YWM0
ZGM3NjcuLjc3MDE0OTk4MzZlZTQ0ZjlhY2YwZTI3MGQ3MGM5NWQxNmJlNjc4ZDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1h
bmFnZXIuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0Q29va2llTWFuYWdlci5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94
eS5oIgogI2luY2x1ZGUgIlNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUuaCIKICNpbmNs
dWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXRDb29raWVNYW5h
Z2VyUHJpdmF0ZS5oIgpAQCAtNTYsNiArNTcsMTIgQEAgZW51bSB7CiB9OwogCiBzdHJ1Y3QgX1dl
YktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkmIGNv
b2tpZU1hbmFnZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGRhdGFNYW5hZ2VyKTsK
KyAgICAgICAgcmV0dXJuIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShkYXRh
TWFuYWdlcikubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgfQorCiAgICAg
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChk
YXRhTWFuYWdlcik7CkBAIC02NCw4ICs3MSw3IEBAIHN0cnVjdCBfV2ViS2l0Q29va2llTWFuYWdl
clByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSgpCiAgICAgewot
ICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
R2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5z
dXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxs
YmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CisgICAgICAgIGNvb2tpZU1hbmFnZXIoKS5zZXRD
b29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsKICAgICB9CiAKICAg
ICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW5hZ2VyOwpAQCAtMTM5LDExICsxNDUs
OSBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbgogewogICAgIFdlYktpdENvb2tpZU1hbmFnZXIq
IG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBF
X0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFn
ZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2Vy
KSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklE
KCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25h
bHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9CisgICAgbWFuYWdlci0+cHJpdi0+
Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2lnbmFsX2VtaXQobWFuYWdlciwg
c2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1hbmFnZXI7CiB9CiAK
QEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfcGVyc2lz
dGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsCiAgICAgaWYgKHNlc3Np
b25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8qIHBy
b2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFn
ZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8
V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNz
aW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50
U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIo
KS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgo
ZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOwog
fQogCiAvKioKQEAgLTE5Miw4ICsxOTUsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9z
ZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBXZWJLaQogewog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsK
IAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQotICAgICAgICBwcm9j
ZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFj
Y2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2ll
TWFuYWdlcigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lv
bklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CiB9CiAK
IC8qKgpAQCAtMjI0LDcgKzIyNiw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9h
Y2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIEdDYW5jCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29v
a2llTWFuYWdlclByb3h5PigpLT5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdl
cigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQoKSwgdG9XZWJLaXRD
b29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7CiB9CkBAIC0yNjksMTEgKzI3MSw3
IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUoV2ViS2l0Q29va2llTWFu
YWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7
CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdl
ciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBh
cmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sg
cmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNv
IGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vz
c1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXIt
PnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2Vi
Q29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25J
RCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0o
KSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZXMobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tpZSkgfSwgW3Rhc2sg
PSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2su
Z2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIwLDExICszMTgsNyBAQCB2b2lkIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2Vy
LCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAogICAgIEdSZWZQdHI8
R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwg
Y2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4g
ZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAg
Ly8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZp
cnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRX
ZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFn
ZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVSTChVUkwoKSwg
U3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25zdCBWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIG1hbmFnZXItPnByaXYtPmNvb2tp
ZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBVUkwoVVJM
KCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAgR0xpc3QqIGNvb2tp
ZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBjb29raWVzKQog
ICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29raWVzTGlzdCwgY29v
a2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzcyLDcgQEAgdm9pZCB3ZWJraXRfY29v
a2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBT
b3VwQ29va2kKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdU
YXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNh
bGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZy
b20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8v
IG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJz
dCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2Vy
KTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5
PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNv
b2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIG1hbmFnZXItPnBy
aXYtPmNvb2tpZU1hbmFnZXIoKS5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklE
KCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgewog
ICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJVRSk7CiAgICAgfSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRX
ZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdl
YkNvbnRleHQuY3BwCmluZGV4IDg5YmU1NmFkNzFkNzE1NjkxMmEyNjkxNTMwNTdkZjUyN2NkZDQ0
NjAuLmNmZjAzNTg2ZGY4YTFmYjk2YTYyYTAxN2EzYzQ2ZTVmNDBkZTJkMzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3Bw
CkBAIC00MDQsNyArNDA0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29udGV4dENvbnN0cnVj
dGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0g
YWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcoImxvY2FsLXN0b3JhZ2Ut
ZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEoKSwgbnVsbHB0cikp
OwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKGNvbmZp
Z3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRQcmltYXJ5RGF0YVN0b3JlKHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJzaXRlRGF0YU1hbmFn
ZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1lc3NhZ2VIYW5kbGVy
KFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgLy8gU2lu
ayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRyPFdlYktpdFVzZXJNZXNzYWdlPiB1
c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRlKFdURk1vdmUobWVzc2FnZSksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTE2MDMsOCArMTYwMiw4IEBAIHZvaWQgd2Vi
a2l0X3dlYl9jb250ZXh0X3ByZWZldGNoX2RucyhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBjaGFyKiBob3N0CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0NPTlRF
WFQoY29udGV4dCkpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoaG9zdG5hbWUpOwogCi0gICAgaWYg
KGNvbnRleHQtPnByaXYtPmRuc1ByZWZldGNoZWRIb3N0cy5hZGQoaG9zdG5hbWUpLmlzTmV3RW50
cnkpCi0gICAgICAgIGNvbnRleHQtPnByaXYtPnByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5n
UHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWZldGNoRE5TKFN0cmluZzo6ZnJv
bVVURjgoaG9zdG5hbWUpKSk7CisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IHdlYmtpdFdl
YnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShjb250ZXh0LT5wcml2LT53ZWJzaXRlRGF0YU1h
bmFnZXIuZ2V0KCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5nOjpmcm9tVVRGOCho
b3N0bmFtZSkpLCAwKTsKICAgICBjb250ZXh0LT5wcml2LT5kbnNQcmVmZXRjaEh5c3RlcmVyaXMu
aW1wdWxzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IDRhYjQ3ZmZmNTkxMWVl
YzM3ZTU2YmM1YmJiMzI5ZWJhZWE3ZDM4NjUuLjMwMDZmNGZhZTZjNDNjMjZiZjQwODIyYjZkZTg2
OGVmMmUwMmNmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0xMzkyLDggKzEzOTIsOCBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUoY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbgogCiAgICAgY29va2llLmh0dHBPbmx5ID0gKmh0dHBP
bmx5OwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9j
ZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2ll
TWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCks
IHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBj
b29raWVNYW5hZ2VyID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCku
Y29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhwYWdlLT53ZWJz
aXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CiAg
ICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAtMTQwOSw4ICsx
NDA5LDggQEAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygKIAogICAgIFN0cmluZyBob3N0ID0gYWN0
aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBj
b29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhw
YWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRp
bmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkm
IGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3Mo
KS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29raWVzRm9ySG9z
dG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21h
aW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOwogCiAgICAgcmV0dXJuIHsgfTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQ
cm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgK
aW5kZXggNDFjMGEwZmJmNTA2ZWZhMTQwOGJjZWY5YWY4YTkwYjg1YTFhZDA4YS4uNGYzOThiNTMw
ZjYwODU3NWM5NjdiODNjNzRmYTJmNDMyOGY2Y2UzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94eSgpOwogCiAgICAgdm9pZCBjb25u
ZWN0KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGVybWluYXRl
KCk7CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigpID0gMDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAppbmRleCBkYmU0NGY5NTk0MTA1MTEyMTUx
MjhkMjlkMjE0ZWVlMDc0YWFmODRjLi40Yzg0NWEwZWM3MjU2NTljZmU3OWNlYTM1ZDNjYmE5NjY4
MzQ2MTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaApAQCAtNDEsMTEgKzQx
LDExIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHk7CiAKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCBmaW5h
bCA6IHB1YmxpYyBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCB7Ci1wcml2YXRlOgor
cHVibGljOgogICAgIHZvaWQgc3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JikgZmluYWw7CiAgICAgdm9pZCBzdG9wTG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2Nv
bE1hbmFnZXJQcm94eSYsIExlZ2FjeUN1c3RvbVByb3RvY29sSUQpIGZpbmFsOwogICAgIHZvaWQg
aW52YWxpZGF0ZShMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYpIGZpbmFsOwotCitw
cml2YXRlOgogICAgIEhhc2hNYXA8TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgUmV0YWluUHRyPFdL
Q3VzdG9tUHJvdG9jb2xMb2FkZXI+PiBtX2xvYWRlck1hcDsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4IDc2
ZDdhNjQwNDFhMjkxZDVmMjk3MzUxNzZlMzFlYTcwZjVlZDU1NmMuLjE5ZWZjYTZhNjQwY2IyZjMx
YzJhODc1NTA2YjFkNjY5ZDZkYzc2YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtMTM0LDggKzEzNCw5IEBAIHN0
YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0gICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNldFByb2Nlc3NTdXBwcmVz
c2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAgICBXZWJzaXRlRGF0
YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbZW5hYmxlZCA9IHByb2Nlc3NTdXBwcmVz
c2lvbkVuYWJsZWQoKV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBk
YXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGVu
YWJsZWQpOworICAgIH0pOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAg
aWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkK
QEAgLTE2Niw4ICsxNjcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emUoKQogICAgIGlmICghW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9v
bEZvcktleTpAIldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyIl0pCiAgICAgICAg
IGluc3RhbGxNZW1vcnlQcmVzc3VyZUhhbmRsZXIoKTsKIAotICAgIHNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudD4oKSk7Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFD
Q0FUQUxZU1QpCiAgICAgaWYgKCFfTUdDYWNoZVZhbGlkKCkpIHsKICAgICAgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9E
RUZBVUxULCAwKSwgXnsKQEAgLTQ5MywyMiArNDkyLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmEKIAogICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFu
ZGFyZFVzZXJEZWZhdWx0c107CiAKLSAgICB7Ci0gICAgICAgIGJvb2wgaXNTYWZhcmkgPSBmYWxz
ZTsKLSAgICAgICAgYm9vbCBpc01pbmlCcm93c2VyID0gZmFsc2U7Ci0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNN
b2JpbGVTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6OklPU0FwcGxp
Y2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAgICAgIGlz
U2FmYXJpID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCk7Ci0gICAgICAgIGlz
TWluaUJyb3dzZXIgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNNaW5pQnJvd3NlcigpOwot
I2VuZGlmCi0gICAgICAgIGlmIChpc1NhZmFyaSB8fCBpc01pbmlCcm93c2VyKSB7Ci0gICAgICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5odHRwUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6
KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5odHRwc1Byb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0
cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgfQotICAgIH0K
LQogICAgIHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQgPSBhZG9wdENGKF9DRk5ldHdvcmtD
b3B5QVRTQ29udGV4dCgpKTsKIAogICAgIHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NNZW1vcnlQ
cmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpXZWJLaXRTdXBwcmVzc01lbW9y
eVByZXNzdXJlSGFuZGxlckRlZmF1bHRzS2V5XTsKQEAgLTUyMiwxMiArNTA1LDggQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmEKICAgICBOU051bWJlciAqZGF0YWJhc2VFbmFibGVkVmFsdWUgPSBb
ZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJu
YWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFibGVkS2V5KCku
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogICAgIGlmIChkYXRhYmFzZUVuYWJsZWRWYWx1ZSkK
ICAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IGRhdGFiYXNlRW5h
YmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIHBhcmFtZXRlcnMuc2hvdWxk
RW5hYmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuaXNJ
VFBEYXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJp
YnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5OjphZENsaWNrQXR0
cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwot
Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9u
ID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQoKQpAQCAtNjA2LDEx
ICs1ODUsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVk
KCkgY29uc3QKICAgICByZXR1cm4gIW1fdXNlck9ic2VydmFibGVQYWdlQ291bnRlci52YWx1ZSgp
ICYmICFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKTsK
IH0KIAotYm9vbCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZv
clRlc3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKLXsKLSAgICByZXR1cm4gV1RGOjpo
YXNFbnRpdGxlbWVudChlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+eHBjQ29u
bmVjdGlvbigpLCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKLX0KLQogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKIGZsb2F0IFdlYlByb2Nlc3NQ
b29sOjpkaXNwbGF5QnJpZ2h0bmVzcygpCiB7CkBAIC05NDcsMjMgKzkyMSw0IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVySGlnaER5bmFtaWNSYW5nZUNoYW5nZUNhbGxiYWNrKCkKIH0K
ICNlbmRpZgogCi1PU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IFdlYlByb2Nlc3NQb29sOjp4cGNF
bmRwb2ludE1lc3NhZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2VuZHBvaW50TWVzc2FnZTsK
LX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRU
b1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRwb2ludE1lc3NhZ2UpCi17
Ci0gICAgbV9lbmRwb2ludE1lc3NhZ2UgPSBlbmRwb2ludE1lc3NhZ2U7Ci0KLSAgICBmb3IgKGF1
dG8gcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7Ci0gICAgICAgIGlmIChwcm9jZXNzLT5zdGF0ZSgp
ICE9IEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6U3RhdGU6OlJ1bm5pbmcpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKCFwcm9jZXNzLT5jb25uZWN0aW9uKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgYXV0byBjb25uZWN0aW9uID0gcHJvY2Vzcy0+Y29ubmVjdGlv
bigpLT54cGNDb25uZWN0aW9uKCk7Ci0gICAgICAgIHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2Fn
ZShjb25uZWN0aW9uLCBlbmRwb2ludE1lc3NhZ2UuZ2V0KCkpOwotICAgIH0KLX0KLQogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRQcm94eS5jcHAKaW5kZXggYzVkZTRlN2QwZjU5MTk0ZjQzYTAyM2IwODllMzcy
YzU4Y2Y4ZWUwNi4uZjdjZmY4NTJmMGJhNmQwMTU1MTE2NWRkOGE5ZjdkNTc2M2IwMDdkMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
LmNwcApAQCAtNzUsOCArNzUsOCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmNhbmNlbCgpCiAgICAg
aWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoTmV0d29ya1By
b2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOworICAgIGlmIChtX2RhdGFTdG9y
ZSkKKyAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOwogfQogCiB2
b2lkIERvd25sb2FkUHJveHk6OmludmFsaWRhdGUoKQpAQCAtMTAzLDE1ICsxMDMsMTMgQEAgV2Vi
UGFnZVByb3h5KiBEb3dubG9hZFByb3h5OjpvcmlnaW5hdGluZ1BhZ2UoKSBjb25zdAogI2lmIFBM
QVRGT1JNKENPQ09BKQogdm9pZCBEb3dubG9hZFByb3h5OjpwdWJsaXNoUHJvZ3Jlc3MoY29uc3Qg
VVJMJiBVUkwpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgIGlmICghbV9kYXRhU3Rv
cmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1f
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOwotICAgICAgICBBU1NFUlRf
VU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbik7
Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwot
ICAgIH0KKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOworICAgIGJvb2wgY3Jl
YXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJM
LmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgaGFu
ZGxlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVk
U2FuZGJveEV4dGVuc2lvbik7CisgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKG1fZG93
bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKIH0KICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkK
IApAQCAtMTMxLDExICsxMjksMTAgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRTdGFydChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2UKIAogdm9pZCBE
b3dubG9hZFByb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmJiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgdWludDY0X3QgY2hhbGxl
bmdlSUQpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgIGlmICghbV9wcm9jZXNzUG9v
bCB8fCAhbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gYXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk6OmNyZWF0
ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgY2hhbGxlbmdlSUQsIG1ha2VSZWYo
Km1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpKSwgbnVsbHB0cik7
Ci0KKyAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkgPSBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSks
IGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb25u
ZWN0aW9uKCkpLCBudWxscHRyKTsKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgp
LmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgqdGhpcywgYXV0aGVudGljYXRpb25D
aGFsbGVuZ2VQcm94eS5nZXQoKSk7CiB9CiAKQEAgLTE0NiwxNSArMTQzLDEwIEBAIHZvaWQgRG93
bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmIHByb3Bvc2VkUmVx
dWVzdCwgY29uc3QgUmVzCiAKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLndp
bGxTZW5kUmVxdWVzdCgqdGhpcywgV1RGTW92ZShwcm9wb3NlZFJlcXVlc3QpLCByZWRpcmVjdFJl
c3BvbnNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXShSZXNvdXJjZVJl
cXVlc3QmJiBuZXdSZXF1ZXN0KSB7CiAgICAgICAgIG1fcmVkaXJlY3RDaGFpbi5hcHBlbmQobmV3
UmVxdWVzdC51cmwoKSk7Ci0KLSAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQ
b29sKQorICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fZGF0YVN0b3JlKQogICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0
ZWRUaGlzLT5tX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpOwotICAgICAgICBpZiAoIW5l
dHdvcmtQcm9jZXNzUHJveHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbmV0d29y
a1Byb2Nlc3NQcm94eS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2ls
bFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDAp
OworICAgICAgICBhdXRvJiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVjdGVkVGhpcy0+bV9k
YXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzUHJveHku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHBy
b3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOwogICAgIH0pOwogfQog
CkBAIC0xNzksMTYgKzE3MSwxNCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMoRG93bmxvYWRJRCBkb3dubAogICAgIGlmICgh
bV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fcHJvY2Vzc1Bvb2wt
PmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUo
KnRoaXMsIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzYW5pdGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1
Z2dlc3RlZEZpbGVuYW1lKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
ZG93bmxvYWRJRCA9IGRvd25sb2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwg
U3RyaW5nIGRlc3RpbmF0aW9uKSB7CisgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQo
KS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VS
ZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUp
LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBkb3dubG9hZElEXSAoQWxs
b3dPdmVyd3JpdGUgYWxsb3dPdmVyd3JpdGUsIFN0cmluZyBkZXN0aW5hdGlvbikgewogICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZTsKICAgICAg
ICAgaWYgKCFkZXN0aW5hdGlvbi5pc051bGwoKSkKICAgICAgICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZShkZXN0aW5hdGlvbiwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgICAgICBpZiAoIW1fcHJvY2Vz
c1Bvb2wpCisgICAgICAgIGlmICghbV9kYXRhU3RvcmUpCiAgICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihk
b3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVy
d3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDApOworICAgICAgICBtX2RhdGFTdG9yZS0+
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVE
ZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElELCBkZXN0aW5hdGlvbiwg
c2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6
OlllcyksIDApOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKaW5kZXggNzZhMDcxNTdiNTkxYWFj
ZTUwZjE1ZDE1MjVkYmNmYjhjNmE0YmJjOC4uZDc0YThmYTZjNjRjODg2MzVmOWViNzVjYTczZTcw
ZmQ5NDZjYTAyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkUHJveHlNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcApAQCAtNDQsNyArNDQsNyBAQAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIERvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlNYXAoTmV0d29ya1Byb2Nl
c3NQcm94eSYgcHJvY2VzcykKLSAgICA6IG1fcHJvY2VzcyhtYWtlV2Vha1B0cihwcm9jZXNzKSkK
KyAgICA6IG1fcHJvY2Vzcyhwcm9jZXNzKQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICwgbV9z
aG91bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJvY2Vzc0hhc0VudGl0bGVtZW50KCJjb20uYXBwbGUu
bXVsdGl0YXNraW5nLnN5c3RlbWFwcGFzc2VydGlvbnMiKSkKICNlbmRpZgpAQCAtNzAsMTQgKzcw
LDEyIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxhdGZvcm1EZXN0cm95KCkKIAogdm9pZCBE
b3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpCiB7Ci0gICAg
aWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7CisgICAgbV9wcm9j
ZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbkRpZEVudGVyQmFj
a2dyb3VuZCgpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbldp
bGxFbnRlckZvcmVncm91bmQoKQogewotICAgIGlmIChtX3Byb2Nlc3MpCi0gICAgICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVy
Rm9yZWdyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKIH0KIAogRG93bmxv
YWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0
YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0Rh
dGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCkBAIC05MiwxMyAr
OTAsMTIgQEAgRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQ
cm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUKICAgICAgICAgbV9kb3dubG9hZFVJQXNz
ZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihnZXRDdXJyZW50UHJvY2Vzc0lE
KCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVk
TmV0d29ya2luZyk7CiAKICAgICAgICAgQVNTRVJUKCFtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2Vy
dGlvbik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcHJvY2Vzcyk7Ci0gICAgICAgIG1fZG93
bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPiht
X3Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9j
ZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CisgICAgICAgIG1fZG93bmxv
YWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3By
b2Nlc3MucHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NB
c3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAogICAgICAgICBSRUxFQVNFX0xP
RyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyB0b29rICdXZWJLaXQgZG93bmxvYWRzJyBh
c3NlcnRpb25zIGZvciBVSVByb2Nlc3MgYW5kIE5ldHdvcmtQcm9jZXNzIik7CiAgICAgfQogCi0g
ICAgbV9wcm9jZXNzLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpLmRvd25s
b2FkSUQoKSwgZG93bmxvYWRQcm94eS5nZXQoKSk7CisgICAgbV9wcm9jZXNzLmFkZE1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBk
b3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3dubG9hZFByb3h5Lmdl
dCgpKTsKIAogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTA5LDEyICsxMDYsOSBA
QCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQoRG93bmxvYWRQcm94eSYg
ZG93bmxvYWRQcm94eSkKIAogICAgIFJFTEVBU0VfTE9HKExvYWRpbmcsICJSZW1vdmluZyBkb3du
bG9hZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIiwgZG93bmxv
YWRJRC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJveHkgbWF5IGJlIGhv
bGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCi0gICAgYXV0byBw
cm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgp
KTsKLQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CiAKLSAg
ICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CisgICAg
bV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CiAgICAgZG93
bmxvYWRQcm94eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9kb3dubG9hZHMucmVtb3ZlKGRvd25sb2Fk
SUQpOwogCkBAIC0xMzMsMTUgKzEyNywxMyBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmludmFs
aWRhdGUoKQogICAgIGZvciAoY29uc3QgYXV0byYgZG93bmxvYWQgOiBtX2Rvd25sb2Fkcy52YWx1
ZXMoKSkgewogICAgICAgICBkb3dubG9hZC0+cHJvY2Vzc0RpZENsb3NlKCk7CiAgICAgICAgIGRv
d25sb2FkLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRv
d25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKKyAgICAgICAgbV9wcm9jZXNzLnJl
bW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7CiAgICAgfQog
CiAgICAgbV9kb3dubG9hZHMuY2xlYXIoKTsKICAgICBtX2Rvd25sb2FkVUlBc3NlcnRpb24gPSBu
dWxscHRyOwogICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbnVsbHB0cjsKICAg
ICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyBEb3dubG9hZFByb3h5
TWFwIGludmFsaWRhdGVkIC0gUmVsZWFzZWQgJ1dlYktpdCBkb3dubG9hZHMnIGFzc2VydGlvbnMg
Zm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKLQotICAgIG1fcHJvY2VzcyA9IG51
bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKaW5kZXggM2JlMjA3OWEw
ZjJjNGI1MzcwNjJjZTEzMDBlMWNkNWRhNDQ0ZmZiZS4uNGZhMDAxYmQ3ZmFlMWNlZDAyNGQyYjkx
ZjIwMTcwZmY5OTQ1MjhiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZSgpOwogICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAK
LSAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fcHJvY2VzczsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5JiBtX3Byb2Nlc3M7CiAgICAgSGFzaE1hcDxEb3dubG9hZElELCBSZWZQdHI8
RG93bmxvYWRQcm94eT4+IG1fZG93bmxvYWRzOwogCiAgICAgYm9vbCBtX3Nob3VsZFRha2VBc3Nl
cnRpb24geyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDhjMjNiYmU4YzA2YTE1OTljYjli
OTE2YTBiMzJhZmIzNzc4M2YzMDUuLmQ2YzMzMjNkZDkzZTY5ZjU2YWRmNmJlMGQyYTFiMTRmMDgy
MjQ1MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9t
UHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJQcm94eS5jcHAKQEAgLTQ0LDE3ICs0NCwxNyBAQCBMZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJQcm94eTo6fkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5KCkK
IAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKExl
Z2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9j
ZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhp
cywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5
LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9t
UHJvdG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9j
b2xJRCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJ
RCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKIH0KIAogdm9pZCBMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgbV9uZXR3
b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
KCkuaW52YWxpZGF0ZSgqdGhpcyk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUoKnRoaXMpOwogfQogCiB2b2lkIExlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3YXNSZWRpcmVjdGVkVG9SZXF1ZXN0KExlZ2Fj
eUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRp
cmVjdFJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggYzFmNDcwOGI4MWNmYTUzYWIxMjJjMjk0
NDY3NWU3ODI1MTY3MTIxZi4uZjNkYjUxNTE5ZDZjYmI0YWJlN2JmYTFlMjEwY2NiODc5MzMxNzMx
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1By
b2Nlc3NQcm94eS5oIgogCiAjaW5jbHVkZSAiQVBJQ29udGVudFJ1bGVMaXN0LmgiCisjaW5jbHVk
ZSAiQVBJQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VQcm94eS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdlci5o
IgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHlNYXAuaCIKQEAgLTM1LDYgKzM2LDcgQEAKICNpbmNs
dWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkxl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNlbmRpZgorI2luY2x1
ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC00OCw2ICs1MCw3IEBACiAjaW5jbHVk
ZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vz
c1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmgiCisjaW5j
bHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3Nh
Z2VzLmgiCkBAIC02MCw2ICs2Myw3IEBACiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZUNsaWVu
dC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KIAogI2lmIEVOQUJMRShTRUNf
SVRFTV9TSElNKQpAQCAtNzAsMjAgKzc0LDExOCBAQAogI2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2lu
L1hQQ1NQSS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIKKyNlbmRpZgorCiAjZGVmaW5lIE1FU1NB
R0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0aW9uLCBjb25uZWN0
aW9uKCkpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
LU5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wm
IHByb2Nlc3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KHByb2Nlc3NQb29sLmFs
d2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQotICAgICwgbV9wcm9jZXNzUG9vbChwcm9j
ZXNzUG9vbCkKK3N0YXRpYyBIYXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkqPiYgbmV0d29ya1By
b2Nlc3Nlc1NldCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkqPj4g
c2V0OworICAgIHJldHVybiBzZXQ7Cit9CisKK1ZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94
eT4+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKQoreworICAgIFZl
Y3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICBwcm9jZXNzZXMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuc2l6ZSgpKTsKKyAg
ICBmb3IgKGF1dG8qIG5ldHdvcmtQcm9jZXNzIDogbmV0d29ya1Byb2Nlc3Nlc1NldCgpKQorICAg
ICAgICBwcm9jZXNzZXMudW5jaGVja2VkQXBwZW5kKCpuZXR3b3JrUHJvY2Vzcyk7CisgICAgcmV0
dXJuIHByb2Nlc3NlczsKK30KKworUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRlZmF1bHROZXR3b3JrUHJvY2VzcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gcHJvY2VzczsKKyAgICBpZiAoIXBy
b2Nlc3MuZ2V0KCkpCisgICAgICAgIHByb2Nlc3MuZ2V0KCkgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gKnByb2Nlc3MuZ2V0KCk7Cit9CisKK3ZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKCkKK3sKKyAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6
OnRlcm1pbmF0ZSgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlv
blBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBh
cHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KKyAgICAvLyBXZSBzaG91
bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sg
b24gb3VyIEFQSXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMDI0Ni4KKyAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7CisgICAgICAgIGNhbGxP
bk1haW5SdW5Mb29wQW5kV2FpdChbdGhpc10geworICAgICAgICAgICAgc2VuZENyZWF0aW9uUGFy
YW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBOZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0
aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJh
bWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xp
Y3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVt
ZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CisgICAgcGFy
YW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsK
KyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1Zl
Y3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJB
c05vQWNjZXNzKCkpOworICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7CisgICAgZm9yIChhdXRvJiBzY2hlbWUg
OiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkp
CisgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2Nv
bHMuYXBwZW5kKHNjaGVtZSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoU3Ry
aW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFn
ZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29r
aWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0g
V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsgIWNvbnRhaW5lckNh
Y2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBh
cmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBp
ZiAoU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRC
dW5kbGVEaXJlY3RvcnkoKTsgIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3Rvcnks
IFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRs
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisjZW5kaWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CisgICAgcGFyYW1l
dGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gZGF0YVN0b3JlUGFyYW1ldGVycygpOworICAgIHNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFy
YW1ldGVycyksIDApOworfQorCitWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IE5l
dHdvcmtQcm9jZXNzUHJveHk6OmRhdGFTdG9yZVBhcmFtZXRlcnMoKQoreworICAgIFZlY3RvcjxX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1ldGVyczsKKyAgICBmb3IgKGF1dG8mIHN0
b3JlIDogbV93ZWJzaXRlRGF0YVN0b3JlcykKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoc3Rv
cmUucGFyYW1ldGVycygpKTsKKyAgICByZXR1cm4gcGFyYW1ldGVyczsKK30KKworc3RhdGljIGJv
b2wgYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKQoreworICAg
IGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xz
KCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJp
b3JpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3Vu
ZEFzc2VydGlvbigpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNob3Vs
ZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdv
cmtQcm9jZXNzUHJveHkoKQorICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KGFueVByb2Nlc3NQ
b29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCiAjaWYgRU5BQkxFKExFR0FDWV9D
VVNUT01fUFJPVE9DT0xfTUFOQUdFUikKKyAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50KG1ha2VVbmlxdWVSZWY8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQog
ICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgqdGhpcykKKyNlbHNlCisgICAgLCBt
X2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogI2VuZGlmCi0gICAgLCBtX3Rocm90dGxlcigqdGhpcywg
cHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV90
aHJvdHRsZXIoKnRoaXMsIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2Vy
dGlvbigpKQorICAgICwgbV9jb29raWVNYW5hZ2VyKFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3Jl
YXRlKCp0aGlzKSkKIHsKICAgICBjb25uZWN0KCk7CisgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVy
c1RvTmV3UHJvY2VzcygpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5hZGQodGhpcyk7CiB9
CiAKIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1Byb3h5KCkKQEAgLTk4LDYg
KzIwMCw3IEBAIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1Byb3h5KCkKIAog
ICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+
aW52YWxpZGF0ZSgpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5yZW1vdmUodGhpcyk7CiB9
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1
bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMpCkBAIC0xMDUsMTUgKzIwOCwxMiBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5j
aGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuYwogICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1R5cGUg
PSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOwogICAgIEF1eGlsaWFyeVBy
b2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zKTsKIAotICAgIGlmIChw
cm9jZXNzUG9vbCgpLnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sKCkuc2V0U2hvdWxkTWFrZU5leHROZXR3b3Jr
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKLSAgICAgICAgbGF1bmNoT3B0aW9u
cy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKKyAgICBmb3Ig
KGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZXRTaG91
bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoZmFsc2UpOworICAg
ICAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KLQotI2lmIFBMQVRGT1JNKFBMQVlTVEFUSU9O
KQotICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1BhdGggPSBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQ
cm9jZXNzUGF0aCgpOwotICAgIGxhdW5jaE9wdGlvbnMudXNlcklkID0gbV9wcm9jZXNzUG9vbC51
c2VySWQoKTsKLSNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNvbm5lY3Rp
b25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCkBAIC0xNjYsMTIgKzI2Niwx
MiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQo
Ym9vbCBiYWNrZ3JvdW5kKQogICAgIH0KIH0KIAotRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nl
c3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9E
YXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQorRG93bmxvYWRQ
cm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0
YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1l
SW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAgICAgaWYgKCFtX2Rvd25s
b2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1ha2VVbmlxdWU8RG93
bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+
Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVx
dWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVybiBtX2Rvd25sb2Fk
UHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBwcm9jZXNzUG9vbCwgcmVz
b3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNp
dGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAo
V2Vic2l0ZURhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjM3LDggKzMzNyw4IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCkKIHsKICAgICBj
bGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKLSAgICAvLyBUZWxsIHRoZSBuZXR3b3JrIHByb2Nlc3Mg
bWFuYWdlciB0byBmb3JnZXQgYWJvdXQgdGhpcyBuZXR3b3JrIHByb2Nlc3MgcHJveHkuIFRoaXMg
d2lsbCBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgotICAgIG1fcHJvY2Vzc1Bvb2wubmV0d29ya1By
b2Nlc3NDcmFzaGVkKCp0aGlzKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJv
Y2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpj
bGVhckNhbGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICszNTgsNiBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
SVBDOjpEZQogICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Byb2Nlc3NQb29sLmRpc3BhdGNoTWVzc2FnZShj
b25uZWN0aW9uLCBkZWNvZGVyKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZGlkUmVjZWl2ZU5l
dHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQogCkBAIC0y
NzQsOCArMzcxLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlU3luY01l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEMKIAogdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewotICAgIGF1dG8gcHJvdGVj
dGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmKG1fcHJvY2Vzc1Bvb2wpOwotCiAgICAgaWYgKG1fZG93
bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5pbnZhbGlkYXRlKCk7
CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKQEAgLTMzMSwxMSAr
NDI2LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2kKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nlc3NQb29sLmlzU2VydmljZVdvcmtlclBh
Z2VJRChwYWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShz
ZXNzaW9uSUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6Zm9yTW9zdFZpc2libGVXZWJQYWdlSWZB
bnkoc2Vzc2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0
aGlzKSwgc2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IFdURk1vdmUoYXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVnYWN5VExTXShhdXRvKiBwYWdlKSBtdXRh
YmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM5
MiwxMSArNDgyLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hp
bmcoUHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBDOjpDb24KICAgICAgICAgbmV0d29ya1By
b2Nlc3NDcmFzaGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSNpZiBQTEFURk9STShD
T0NPQSkKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5wcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkp
Ci0gICAgICAgIHNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKICAg
ICAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICh4cGNfY29ubmVjdGlvbl90IGNv
bm5lY3Rpb24gPSB0aGlzLT5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSkKQEAgLTEyMDUs
NyArMTI5MCw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0VGhpcmRQYXJ0eUNOQU1F
RG9tYWluRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzCiB9CiB2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLnNldERv
bWFpbnNXaXRoVXNlckludGVyYWN0aW9uKFdURk1vdmUoZG9tYWlucykpOworICAgIGZvciAoYXV0
byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAg
ICAgIHByb2Nlc3NQb29sLT5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiB7IGRvbWFpbnMgfSk7CiB9CiAjZW5kaWYgLy8gRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIApAQCAtMTI1Miw0NSArMTMzOCwzMSBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25J
RCYgc2Vzc2lvbklELCBDb21wbGV0aQogICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkZsdXNoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihS
ZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMu
YWRkKHN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5hZGQoc3Rv
cmUpOwogCiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUtPnBhcmFtZXRlcnMo
KSB9LCAwKTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0b3JlLT5zZXNzaW9uSUQoKTsKKyAgICAg
ICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBz
dG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCk7CisgICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS5zZXNz
aW9uSUQoKTsKICAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7CiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShz
dG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CisgICAgICAgIGNyZWF0
ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeSgpKTsKICNlbmRpZgogICAgIH0KIH0KIAotYm9vbCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpo
YXNTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9zZXNzaW9uSURzLmNvbnRhaW5zKHNlc3Npb25JRCk7Ci19Ci0KLXZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0
ZURhdGFTdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMucmVtb3ZlKHNlc3Npb25JRCk7CisgICAg
bV93ZWJzaXRlRGF0YVN0b3Jlcy5yZW1vdmUod2Vic2l0ZURhdGFTdG9yZSk7CiAKICAgICBpZiAo
Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkRlc3Ryb3lTZXNzaW9uIHsgc2Vzc2lvbklEIH0sIDApOworICAgICAgICBzZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24geyB3ZWJzaXRlRGF0YVN0b3JlLnNlc3Np
b25JRCgpIH0sIDApOwogfQogCiBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQp
CiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25J
RCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4
aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gbV9wcm9jZXNz
UG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAgICAgICBpZiAod2Vic2l0ZURhdGFTdG9y
ZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBzZXNzaW9uSUQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgIH0K
LSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3Jl
Rm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4
aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3JhZ2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCkKQEAgLTEzMzcsNyArMTQwOSw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6ZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJDb250
ZW50CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoUmVnaXN0
cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
bV9wcm9jZXNzUG9vbC5lc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1By
b2Nlc3MoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCBzZXNzaW9uSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29y
a2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBSZWdpc3RyYWJsZURv
bWFpbiB7cmVnaXN0cmFibGVEb21haW59LCBzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3b3JrZXJDb250ZXh0Q29u
bmVjdGlvbk5vTG9uZ2VyTmVlZGVkKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIGlkZW50aWZp
ZXIpCkBAIC0xNTAwLDE2ICsxNTcyLDM0IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cHJl
Y29ubmVjdFRvKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2ViUGFnZVByb3h5SWRlCiAgICAg
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWNvbm5lY3RUbyhzZXNzaW9uSUQsIHdl
YlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQsIHVybCwgdXNlckFnZW50LCBzdG9yZWRDcmVkZW50aWFs
c1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiksIDApOwogfQogCitzdGF0aWMg
Ym9vbCBhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAgIGZv
ciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkp
IHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKQor
eworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vz
c1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNCYWNrZ3JvdW5kV2ViUHJv
Y2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRp
b24oKQogewotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMo
KSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkg
ewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRGb3JlZ3JvdW5kQWN0aXZp
dHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5
RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmZvcmVncm91bmRBY3Rpdml0eSgiTmV0d29y
a2luZyBmb3IgZm9yZWdyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvRm9yZWdyb3VuZCgpLCAw
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChwcm9jZXNzUG9v
bCgpLmhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9v
bEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJv
dHRsZXI6OmlzVmFsaWRCYWNrZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNz
ZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxl
cigpLmJhY2tncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgYmFja2dyb3VuZCB2aWV3KHMp
Il9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNz
RGlkVHJhbnNpdGlvblRvQmFja2dyb3VuZCgpLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKaW5kZXggYTBiNGMxZDg5
MzhlMjA1ZWMzNjFkZTVjMTA4MjVkMTgyNzc2NTNiNC4uMGJmY2Y0MzViNDdkODE1NWE0YTU5MTJm
ODlhOWJjODcyODgyZGY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTQ2LDEyICs0NiwxNyBAQAogCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiWFBDRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSA8
d3RmL09TT2JqZWN0UHRyLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBGb3Jt
RGF0YVJlZmVyZW5jZTsKIH0KIAorbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBDdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xhc3MgU2Vzc2lvbklEOwog
fQpAQCAtNzMsOCArNzgsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWRQ
cm94eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJv
eHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OwogCiBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0
aGVyU3RhdGlzdGljcyA6IGJvb2w7CkBAIC04Niw4ICs5MSw5IEBAIHN0cnVjdCBGcmFtZUluZm9E
YXRhOwogc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFJl
c291cmNlTG9hZEluZm87CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CitzdHJ1Y3QgV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM7CiAKLWNsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkgZmluYWwgOiBwdWJs
aWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQs
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CitjbGFzcyBOZXR3
b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJp
dmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29y
a1Byb2Nlc3NQcm94eT4sIHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtQcm9jZXNzUHJveHk+IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB1c2luZyBSZWdpc3Ry
YWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwpAQCAtMTAyLDEyICsxMDgs
MTcgQEAgcHVibGljOgogICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94
eShXZWJQcm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4g
ZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7CisgICAgc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1By
b3h5PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtQcm9jZXNzUHJveHkp
OyB9CiAgICAgfk5ldHdvcmtQcm9jZXNzUHJveHkoKTsKIAorICAgIHN0YXRpYyBWZWN0b3I8UmVm
PE5ldHdvcmtQcm9jZXNzUHJveHk+PiBhbGxOZXR3b3JrUHJvY2Vzc2VzKCk7CisgICAgCisgICAg
dm9pZCB0ZXJtaW5hdGUoKSBmaW5hbDsKKwogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKIAotICAgIERvd25sb2FkUHJv
eHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9y
aWdpbmF0aW5nUGFnZSk7CisgICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShX
ZWJzaXRlRGF0YVN0b3JlJiwgV2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGlu
Z1BhZ2UpOwogCiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRp
b25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4mJik7CiAgICAgdm9pZCBkZWxl
dGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4s
IFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcik7CkBAIC0yMDYsMTUgKzIxNywxMiBAQCBwdWJsaWM6CiAgICAgUHJvY2Vz
c1Rocm90dGxlciYgdGhyb3R0bGVyKCkgZmluYWwgeyByZXR1cm4gbV90aHJvdHRsZXI7IH0KICAg
ICB2b2lkIHVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKIAotICAgIFdlYlByb2Nlc3NQb29sJiBw
cm9jZXNzUG9vbCgpIHsgcmV0dXJuIG1fcHJvY2Vzc1Bvb2w7IH0KLQogI2lmIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCiAgICAgdm9pZCBkaWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9s
bGVyUHJveHkoV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmKTsKICNlbmRpZgogCi0gICAg
dm9pZCBhZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmKTsKLSAgICBib29sIGhhc1Nl
c3Npb24oUEFMOjpTZXNzaW9uSUQpIGNvbnN0OwotICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihQQUw6
OlNlc3Npb25JRCk7CisgICAgdm9pZCBhZGRTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmKTsKKyAg
ICB2b2lkIHJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYpOwogICAgIAogI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQogICAgIHZvaWQgY3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRl
KGNvbnN0IFN0cmluZyYgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKQEAgLTIyOSw2ICsyMzcs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3Rv
Y29sKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgdW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1
c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYpOwogCisgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0Ny
YXNoZWQoKTsKKyAgICAKICAgICB2b2lkIHJlc2V0UXVvdGEoUEFMOjpTZXNzaW9uSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICB2b2lkIHJlc291cmNlTG9hZERpZFNlbmRS
ZXF1ZXN0KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFJlc291cmNlTG9hZEluZm8mJiwgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIE9wdGlvbmFsPElQQzo6Rm9ybURhdGFSZWZlcmVuY2U+JiYp
OwpAQCAtMjQ4LDcgKzI1OCwyMCBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVCdW5kbGVJZGVu
dGlmaWVyKGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAg
dm9pZCBjbGVhckJ1bmRsZUlkZW50aWZpZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
IAorICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlcigpIHsgcmV0dXJuIG1f
Y29va2llTWFuYWdlci5nZXQoKTsgfQorCisgICAgQVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIHsgcmV0dXJuIG1fY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50LmdldCgpOyB9CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICB4
cGNfb2JqZWN0X3QgeHBjRW5kcG9pbnRNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lbmRwb2lu
dE1lc3NhZ2UuZ2V0KCk7IH0KKyNlbmRpZgorCiBwcml2YXRlOgorICAgIGV4cGxpY2l0IE5ldHdv
cmtQcm9jZXNzUHJveHkoKTsKKworICAgIHZvaWQgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3
UHJvY2VzcygpOworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGF0YVN0
b3JlUGFyYW1ldGVycygpOworCiAgICAgLy8gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5CiAgICAgQVND
SUlMaXRlcmFsIHByb2Nlc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIk5ldHdvcmtpbmci
X3M7IH0KIApAQCAtMjU2LDcgKzI3OSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb25uZWN0aW9u
V2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwcm9jZXNzV2ls
bFNodXREb3duKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBuZXR3b3Jr
UHJvY2Vzc0NyYXNoZWQoKTsKICAgICB2b2lkIGNsZWFyQ2FsbGJhY2tTdGF0ZXMoKTsKIAogICAg
IC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CkBAIC0zMTIsMTYgKzMzNCwxNyBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9u
SUQsIFJlZjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiYmKTsKIAotICAgIFdlYlByb2Nl
c3NQb29sJiBtX3Byb2Nlc3NQb29sOwotCiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4+IG1fcGVuZGluZ0ZldGNoV2Vic2l0ZURhdGFD
YWxsYmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENh
bGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNp
dGVEYXRhRm9yT3JpZ2luc0NhbGxiYWNrczsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEb3dubG9h
ZFByb3h5TWFwPiBtX2Rvd25sb2FkUHJveHlNYXA7CisKKyAgICBVbmlxdWVSZWY8QVBJOjpDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Owog
I2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCiAgICAgTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTsKICNl
bmRpZgorCiAgICAgUHJvY2Vzc1Rocm90dGxlciBtX3Rocm90dGxlcjsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UHJvY2Vzc1Rocm90dGxlcjo6QmFja2dyb3VuZEFjdGl2aXR5PiBtX2FjdGl2aXR5Rm9y
SG9sZGluZ0xvY2tlZEZpbGVzOwogICAgIFByb2Nlc3NUaHJvdHRsZXI6OkFjdGl2aXR5VmFyaWFu
dCBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlczsKQEAgLTM0Nyw5ICszNzAsMTEgQEAgcHJpdmF0
ZToKICAgICBwcml2YXRlOgogICAgICAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1f
bmV0d29ya1Byb2Nlc3M7CiAgICAgfTsKKyAgICBPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IG1f
ZW5kcG9pbnRNZXNzYWdlOwogI2VuZGlmCiAKLSAgICBIYXNoU2V0PFBBTDo6U2Vzc2lvbklEPiBt
X3Nlc3Npb25JRHM7CisgICAgV2Vha0hhc2hTZXQ8V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRl
RGF0YVN0b3JlczsKKyAgICBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBtX2Nvb2tpZU1hbmFn
ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KaW5k
ZXggYjhkYWVkZjdiZWJhMWNkODFmNmU1MjQ0OTYwMzEwZjEzMzEwYzExZS4uOTFjMTkzMWYyZTY1
Y2YxYzk3N2FkZjNhZTZjYWVkYjA2MDkwMGJkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAg
LTUxLDggKzUxLDExIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVy
OjpoYW5kbGVYUENFdmVudCh4cGNfb2JqZWN0X3QgZXZlbnQpIGNvCiAgICAgaWYgKG1lc3NhZ2VO
YW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1lc3NhZ2VO
YW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6OnhwY0xhdW5jaFNlcnZp
Y2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9j
ZXNzKGV2ZW50KTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRhYmFz
ZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVzc2Fn
ZU5hbWUpIHsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+bV9lbmRwb2ludE1lc3NhZ2UgPSBl
dmVudDsKKyAgICAgICAgZm9yIChhdXRvJiBkYXRhU3RvcmUgOiBtX25ldHdvcmtQcm9jZXNzLT5t
X3dlYnNpdGVEYXRhU3RvcmVzKQorICAgICAgICAgICAgZGF0YVN0b3JlLnNlbmROZXR3b3JrUHJv
Y2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICB9CiAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2Vy
UHJveHkuY3BwCmluZGV4IGNjNTI2YWFmM2FhZmIxYzE0NmRhNGIyNDE5NDU5YjEwOTIwMWI2MTAu
LjA4NWU3ZDI2NWExMzczNWJlN2ExMjc4ZWMxZGZiNjNmZDVkZDVkNzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcApAQCAtMjksNiAr
MjksNyBAQAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiQVBJU2VjdXJpdHlPcmln
aW4uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTmV0
d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIk9wdGlvbmFsQ2FsbGJhY2tJRC5oIgogI2lu
Y2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1h
bmFnZXJQcm94eU1lc3NhZ2VzLmgiCkBAIC0zOSwyNCArNDAsMTYgQEAKIG5hbWVzcGFjZSBXZWJL
aXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLWNvbnN0IGNoYXIqIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUoKQorV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJD
b29raWVNYW5hZ2VyUHJveHkoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MpCisg
ICAgOiBtX25ldHdvcmtQcm9jZXNzKG1ha2VXZWFrUHRyKG5ldHdvcmtQcm9jZXNzKSkKIHsKLSAg
ICByZXR1cm4gIldlYkNvb2tpZU1hbmFnZXJQcm94eSI7Ci19Ci0KLVJlZjxXZWJDb29raWVNYW5h
Z2VyUHJveHk+IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlByb2Nlc3NQb29sKiBw
cm9jZXNzUG9vbCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb29raWVNYW5hZ2Vy
UHJveHkocHJvY2Vzc1Bvb2wpKTsKLX0KLQotV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQotICAgIDogV2ViQ29u
dGV4dFN1cHBsZW1lbnQocHJvY2Vzc1Bvb2wpCi17Ci0gICAgV2ViQ29udGV4dFN1cHBsZW1lbnQ6
OnByb2Nlc3NQb29sKCktPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFu
YWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKKyAgICBuZXR3b3JrUHJv
Y2Vzcy5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiB9CiAKIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6fldlYkNvb2tpZU1hbmFnZXJQcm94eSgpCiB7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpOwogICAgIEFT
U0VSVChtX2Nvb2tpZU9ic2VydmVycy5pc0VtcHR5KCkpOwogfQogCkBAIC02NSwxMDIgKzU4LDg0
IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojppbml0aWFsaXplQ2xpZW50KGNvbnN0IFdL
Q29va2llTWFuYWdlckNsaWVudEJhc2UqIGNsCiAgICAgbV9jbGllbnQuaW5pdGlhbGl6ZShjbGll
bnQpOwogfQogCi0vLyBXZWJDb250ZXh0U3VwcGxlbWVudAotCi12b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKQotewotICAgIFZlY3RvcjxPYnNlcnZlcio+
IG9ic2VydmVyczsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyU2V0IDogbV9jb29raWVPYnNlcnZl
cnMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVyU2V0
KQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChvYnNlcnZlcik7Ci0gICAgfQotCi0gICAg
Zm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVycykKLSAgICAgICAgb2JzZXJ2ZXItPm1hbmFn
ZXJEZXN0cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVycy5pc0VtcHR5KCkp
OwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKFdlYlBy
b2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNz
RGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6
OnJlZigpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0
U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OmRlcmVmKCk7Ci19Ci0KIHZvaWQgV2Vi
Q29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYg
Y2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFtZXNXaXRo
Q29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFtZXNXaXRoQ29va2ll
cyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAg
ICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQogewotICAgIHByb2Nlc3NQb29sKCktPnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3Ru
YW1lcykpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWVzRm9ySG9z
dG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsK
LSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZO
ZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vz
c2lvbklEKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMo
c2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVD
b29raWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDb29raWUmIGNvb2tpZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYg
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwot
ICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6RGVsZXRlQ29va2llKHNlc3Npb25JRCwgY29va2llKSwgW2NhbGxiYWNrRnVuY3Rp
b24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pXSgpIG11dGFibGUgeworICAgIGlmIChtX25l
dHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNv
b2tpZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKICAgICAgICAgY2Fs
bGJhY2tGdW5jdGlvbigpOwotICAgIH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBXYWxsVGltZSB0aW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5j
dGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5j
ZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzTW9kaWZp
ZWRTaW5jZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAg
ICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBW
ZWN0b3I8Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxi
YWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgp
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llKHNlc3Npb25JRCwg
Y29va2llcyksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVu
Y3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2llcywgY29u
c3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgbWFpbkRvY3VtZW50VVJMLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1By
b2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRD
b29raWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWluRG9jdW1lbnRVUkwpLCBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWluRG9jdW1lbnRV
UkwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxi
YWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEFsbENv
b2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5l
dHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsK
KyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRBbGxDb29raWVz
KHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAg
ICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6Z2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rp
b24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVO
ZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFdU
Rk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0K
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdl
cyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSk7CisgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNz
aW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZp
bmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNz
UG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Np
b25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2ll
Q2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXVEY6
OkZ1bmN0aW9uPHZvaWQgKCk+JiYgY2FsbGJhY2spCkBAIC0yMTEsMTggKzE4NiwxOCBAQCB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y29va2llc0RpZENoYW5nZShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQpCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0jaWYgVVNF
KFNPVVApCi0gICAgcHJvY2Vzc1Bvb2woKS0+c2V0SW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kocG9saWN5KTsKLSNlbmRpZgotCi0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAg
ICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQogCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQordm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQ
cm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0
SFRUUENvb2tpZUFjY2VwdFBvbGljeSgpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVs
c2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihIVFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZl
cik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAppbmRleCAwYmRmYzBkNGU0N2M0MzZmNTg1Y2Yy
OWMwOWQ1MWEyOWJjODExYTlkLi42ZjUxZjAzZTVjMGNhODk0MTIzMzQzNzdiNTU0M2Q4MjJjYzJm
ZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2Vy
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJv
eHkuaApAQCAtNTYsMTEgKzU2LDkgQEAgdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpBcnJh
eSo+IEFycmF5Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXZWJDb3JlOjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5PiBIVFRQQ29va2llQWNjZXB0UG9saWN5Q2FsbGJhY2s7CiB0eXBl
ZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiY+IEdldENv
b2tpZXNDYWxsYmFjazsKIAotY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQ
STo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHB1YmxpYyBX
ZWJDb250ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitjbGFz
cyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2Jq
ZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7Ci0KLSAg
ICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlByb2Nlc3NQb29s
Kik7CisgICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IGNyZWF0ZShOZXR3b3Jr
UHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJD
b29raWVNYW5hZ2VyUHJveHkobmV0d29ya1Byb2Nlc3MpKTsgfQogICAgIHZpcnR1YWwgfldlYkNv
b2tpZU1hbmFnZXJQcm94eSgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0IFdL
Q29va2llTWFuYWdlckNsaWVudEJhc2UqKTsKQEAgLTEwNCwxNyArMTAyLDEwIEBAIHB1YmxpYzoK
ICAgICB1c2luZyBBUEk6Ok9iamVjdDo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29va2ll
TWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKik7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5
KE5ldHdvcmtQcm9jZXNzUHJveHkmKTsKIAogICAgIHZvaWQgY29va2llc0RpZENoYW5nZShQQUw6
OlNlc3Npb25JRCk7CiAKLSAgICAvLyBXZWJDb250ZXh0U3VwcGxlbWVudAotICAgIHZvaWQgcHJv
Y2Vzc1Bvb2xEZXN0cm95ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShX
ZWJQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShOZXR3
b3JrUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWZXZWJDb250ZXh0U3VwcGxl
bWVudCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92
ZXJyaWRlOwotCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAgICB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwogCkBA
IC0xMjUsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBX
VEY6OkZ1bmN0aW9uPHZvaWQgKCk+PiBtX2xlZ2FjeUNvb2tpZU9ic2VydmVyczsKICAgICBIYXNo
TWFwPFBBTDo6U2Vzc2lvbklELCBIYXNoU2V0PE9ic2VydmVyKj4+IG1fY29va2llT2JzZXJ2ZXJz
OwogCisgICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwog
ICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eUNsaWVudCBtX2NsaWVudDsKIAogI2lmIFVTRShTT1VQ
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggZDNiOGMzNTU0
MGYzZjI0NTZmNzEwNTVmNWI0ZDdhNzgyMjYwZDM4Ny4uNDljZWViMjI4OTJmMjQ1MTgxYTQ0ODA5
NTlkYzgzNGExNWVmOGQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCkBAIC0xNzQ2LDcgKzE3NDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29udHJvbGxl
ZEJ5QXV0b21hdGlvbihib29sIGNvbnRyb2xsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oY29udHJvbGxl
ZCkpOwotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2Vz
cyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9t
YXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9sbGVkQnlBdXRv
bWF0aW9uKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9tYXRp
b24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9sbGVkQnlBdXRvbWF0
aW9uKSwgMCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjcmVhdGVJbnNwZWN0b3JUYXJnZXQo
Y29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5
cGUpCkBAIC0zMjEwLDExICszMjEwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmlzRm9yY2VkSW50
b0FwcEJvdW5kTW9kZVRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4KIHZvaWQg
V2ViUGFnZVByb3h5OjpkaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50SW5OZXR3b3JrUHJv
Y2VzcygpCiB7CiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAhUExBVEZPUk0oTUFD
Q0FUQUxZU1QpCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9j
ZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vz
cy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdv
cmtlckVudGl0bGVtZW50KCksIDApOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0
d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZp
Y2VXb3JrZXJFbnRpdGxlbWVudCgpLCAwKTsKICNlbmRpZgogfQogCkBAIC0zMjIzLDEzICszMjE5
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3Zl
cnJpZGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJ
TlMpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkNsZWFyU2Vydmlj
ZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCku
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5k
TWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRp
dGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3Zl
cnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKICNlbmRpZgpAQCAtNDQyOSw3ICs0NDE5LDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OnByZWNvbm5lY3RUbyhjb25zdCBVUkwmIHVybCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
YXV0byBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9IG1fY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2Ug
PyBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlIDogV2ViQ29yZTo6U3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlOwotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2wo
KS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRp
ZmllcigpLCB3ZWJQYWdlSUQoKSwgdXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4oKSk7CisgICAgd2Vic2l0ZURhdGFT
dG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkucHJlY29ubmVjdFRvKHNlc3Npb25JRCgpLCBpZGVudGlm
aWVyKCksIHdlYlBhZ2VJRCgpLCB1cmwsIHVzZXJBZ2VudCgpLCBzdG9yZWRDcmVkZW50aWFsc1Bv
bGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpKTsKIH0KIAogdm9pZCBXZWJQYWdl
UHJveHk6OnNldENhblVzZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wgY2FuVXNlQ3JlZGVudGlhbFN0
b3JhZ2UpCkBAIC00NzI1LDcgKzQ3MTUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0
TG9hZEZvckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUluZm9EYXRhJgogICAg
ICAgICAgICAgUmVnaXN0cmFibGVEb21haW4gY3VycmVudERvbWFpbiB7IGN1cnJlbnRSZXF1ZXN0
LnVybCgpIH07CiAgICAgICAgICAgICBVUkwgcmVxdWVzdGVyVVJMIHsgVVJMKCksIHJlcXVlc3Rl
ck9yaWdpbi50b1N0cmluZygpIH07CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnREb21haW4ubWF0
Y2hlcyhyZXF1ZXN0ZXJVUkwpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bv
b2woKS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9LCBj
dXJyZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50aWZpZXIsIG1fd2Vi
UGFnZUlEKTsKKyAgICAgICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9j
ZXNzKCkuZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwg
Y3VycmVudERvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dl
YlBhZ2VJRCk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTQ3NjMsNyArNDc1Myw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUoRnJhbWVJZGVudGlmaWVy
IGZyYW1lSUQsIEZyYW1lSW5mb0RhdGEmCiAgICAgaWYgKG5hdmlnYXRpb24gJiYgZnJhbWUtPmlz
TWFpbkZyYW1lKCkpIHsKICAgICAgICAgaWYgKGF1dG8mIGFkQ2xpY2tBdHRyaWJ1dGlvbiA9IG5h
dmlnYXRpb24tPmFkQ2xpY2tBdHRyaWJ1dGlvbigpKSB7CiAgICAgICAgICAgICBpZiAoYWRDbGlj
a0F0dHJpYnV0aW9uLT5kZXN0aW5hdGlvbigpLm1hdGNoZXMoZnJhbWUtPnVybCgpKSkKLSAgICAg
ICAgICAgICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yZUFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dl
YnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqYWRDbGlja0F0dHJpYnV0aW9uKSk7CisgICAg
ICAgICAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURh
dGFTdG9yZS0+c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmlidXRpb24pLCAwKTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtNTM3Nyw3ICs1MzY3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmxvZ0Zy
YW1lTmF2aWdhdGlvbihjb25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgY29uc3QgVVJMJiBwYWcK
ICAgICBpZiAodGFyZ2V0SG9zdC5pc0VtcHR5KCkgfHwgbWFpbkZyYW1lSG9zdC5pc0VtcHR5KCkg
fHwgdGFyZ2V0SG9zdCA9PSBzb3VyY2VVUkwuaG9zdCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFi
bGVEb21haW4geyBwYWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlz
UmVkaXJlY3QsIGZyYW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9k
aWRGaW5pc2hEb2N1bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5
SW5pdGlhdGVkQnlVc2VyKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1lTmF2aWdhdGlvbihtX3dl
YnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHRhcmdldFVS
TCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBz
b3VyY2VVUkwgfSwgaXNSZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUoKSwgTW9ub3RvbmljVGlt
ZTo6bm93KCkgLSBtX2RpZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5GcmFtZVRpbWVzdGFtcCwg
d2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpLCAwKTsKIH0KICNlbmRpZgogCkBAIC0xMDAw
Miw1OCArOTk5MiwyNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3lzdGVtUHJldmlld0FjdGlvblRy
aWdnZXJlZChjb25zdCBXZWJDb3JlOjpTeXN0ZW1QcmV2aWV3SW5mbwogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGVtcHR5U3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0
ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24o
bV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgp
KSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNp
dGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgIH0gZWxzZQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIHdlYnNpdGVEYXRh
U3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+
c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhi
b29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9v
bCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2Fu
U2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgdmFsdWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNp
dGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JU
ZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0
dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0g
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9y
VGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3Jr
UHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9y
VGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgp
Lm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2Vu
ZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFya0FkQ2xpY2tBdHRyaWJ1dGlv
bnNBc0V4cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUo
KS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNp
dGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiAjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggZDkyNmIzM2NiZGYyYmI4YmI5ODBkNjNjNWRjNTJh
ZTUyNTA5MjUyOS4uOWVkMDNjY2E3YjM4NGI2YmVhY2ExMmM5MjRkZjgyY2RlNTkyMDEyNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtMTQzLDggKzE0
MywxMCBAQAogI2VuZGlmCiAKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0coY2hh
bm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HKGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29s
OjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVM
RUFTRV9MT0dfU1RBVElDKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhjaGFubmVsLCAi
V2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBXRUJQUk9DRVNT
UE9PTF9SRUxFQVNFX0xPR19FUlJPUihjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfRVJS
T1IoY2hhbm5lbCwgIiVwIC0gV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJH
U19fKQogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKGNoYW5u
ZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdB
bGxvd2VkKCksIGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNf
X1ZBX0FSR1NfXykKKyNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RF9TVEFUSUMoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lGKHNlc3Npb25JRC5pc0Fs
d2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwg
IyNfX1ZBX0FSR1NfXykKIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKQEAgLTIzMiw2ICsyMzQsMTEgQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNh
c2VJbnNlbnNpdGl2ZUhhc2g+JiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3QKICAgICBy
ZXR1cm4gc2V0OwogfQogCitWZWN0b3I8U3RyaW5nPiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1l
c1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkKK3sKKyAgICByZXR1cm4gY29weVRvVmVjdG9y
KGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKTsKK30KKwogV2Vi
UHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
JiBjb25maWd1cmF0aW9uKQogICAgIDogbV9jb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24uY29w
eSgpKQogICAgICwgbV9kZWZhdWx0UGFnZUdyb3VwKFdlYlBhZ2VHcm91cDo6Y3JlYXRlKCkpCkBA
IC0yMzksNyArMjQ2LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJv
Y2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogICAgICwgbV9hdXRvbWF0aW9u
Q2xpZW50KG1ha2VVbmlxdWU8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PigpKQogICAgICwgbV9kb3du
bG9hZENsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+KCkpCiAgICAgLCBt
X2hpc3RvcnlDbGllbnQobWFrZVVuaXF1ZTxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50
PigpKQotICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZTxBUEk6
OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICAgICAsIG1fdmlzaXRlZExpbmtTdG9y
ZShWaXNpdGVkTGlua1N0b3JlOjpjcmVhdGUoKSkKICNpZiBQTEFURk9STShNQUMpCiAgICAgLCBt
X2hpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyKG1ha2VVbmlxdWU8SGlnaFBlcmZv
cm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXI+KCp0aGlzKSkKQEAgLTI2Nyw5ICsyNzMsNiBAQCBX
ZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24mIGNvbmZpZ3VyYXRpb24pCiAjZW5kaWYKICAgICB9KTsKIAotICAgIGlmICghbV93ZWJzaXRl
RGF0YVN0b3JlICYmIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4
aXN0cygpKQotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKTsKLQogICAgIGZvciAoYXV0byYgc2NoZW1lIDogbV9j
b25maWd1cmF0aW9uLT5hbHdheXNSZXZhbGlkYXRlZFVSTFNjaGVtZXMoKSkKICAgICAgICAgbV9z
Y2hlbWVzVG9SZWdpc3RlckFzQWx3YXlzUmV2YWxpZGF0ZWQuYWRkKHNjaGVtZSk7CiAKQEAgLTI4
NSw3ICsyODgsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgYWRkTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7
CiAKICAgICAvLyBOT1RFOiBUaGVzZSBzdWItb2JqZWN0cyBtdXN0IGJlIGluaXRpYWxpemVkIGFm
dGVyIG1fbWVzc2FnZVJlY2VpdmVyTWFwLi4KLSAgICBhZGRTdXBwbGVtZW50PFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlclBy
b3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5Pigp
OwogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQpAQCAtMzQyLDkgKzM0NCw2IEBAIFdlYlByb2Nl
c3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2woKQogICAgIHByb2Nlc3NQb29sQ291bnRlci5kZWNyZW1l
bnQoKTsKICNlbmRpZgogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPnNodXREb3duUHJvY2VzcygpOwotCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAg
ICAgaWYgKCFtX3Byb2Nlc3Nlc1VzaW5nR2FtZXBhZHMuaXNFbXB0eSgpKQogICAgICAgICBVSUdh
bWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkucHJvY2Vzc1Bvb2xTdG9wcGVkVXNpbmdHYW1lcGFk
cygqdGhpcyk7CkBAIC00MDIsMTYgKzQwMSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEF1
dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4mCiAg
ICAgICAgIG1fYXV0b21hdGlvbkNsaWVudCA9IFdURk1vdmUoYXV0b21hdGlvbkNsaWVudCk7CiB9
CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYg
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotewotI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9N
X1BST1RPQ09MX01BTkFHRVIpCi0gICAgaWYgKCFjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQp
Ci0gICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gbWFrZVVuaXF1ZTxBUEk6
OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gV1RGTW92ZShjdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQpOwotI2VuZGlmCi19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNv
bnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRl
bnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcikKIHsKICAgICAvLyBHdWFyZCBhZ2FpbnN0IEFQSSBt
aXN1c2UuCkBAIC00MjEsMTEgKzQxMCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEN1c3Rv
bVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGN1CiAgICAg
bV9jb25maWd1cmF0aW9uLT5zZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZp
ZXIoY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKTsKIH0KIAotSVBDOjpD
b25uZWN0aW9uKiBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkK
LXsKLSAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy0+Y29ubmVjdGlvbigpOwotfQotCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQodm9pZCogY29udGV4dCkKIHsKICAgICBz
dGF0aWNfY2FzdDxXZWJQcm9jZXNzUG9vbCo+KGNvbnRleHQpLT5sYW5ndWFnZUNoYW5nZWQoKTsK
QEAgLTQzNSw4ICs0MTksNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQo
KQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6VXNlclBy
ZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQoKSk7CiAjaWYgVVNFKFNPVVApCi0gICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVk
TGFuZ3VhZ2VzKCkpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3Jl
KCktPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQ
cmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDApOwog
I2VuZGlmCiB9CiAKQEAgLTQ0OSw3ICs0MzIsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpmdWxs
S2V5Ym9hcmRBY2Nlc3NNb2RlQ2hhbmdlZChib29sIGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZQog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE1lbW9yeVByZXNzdXJlRXZlbnQoYm9vbCBpc0NyaXRp
Y2FsKQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vz
czo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCkpOwotICAgIHNlbmRU
b05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZl
TWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSk7CisgICAgZm9yIChhdXRvIG5ldHdvcmtQ
cm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlk
UmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCksIDApOwogI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24o
KS5zZW5kTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKTsKICNlbmRpZgpAQCAtNDc0LDI3
NSArNDU4LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2NyZWVuUHJvcGVydGllc1N0YXRlQ2hh
bmdlZCgpCiAjZW5kaWYKIH0KIAotTmV0d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6
OmVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0
b3JlKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgCi0gICAgLy8gRklY
TUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQg
QVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCi0gICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9u
Y2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91ciBBUElzLgotICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYuCi0gICAg
aWYgKCFSdW5Mb29wOjppc01haW4oKSkgewotICAgICAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdh
aXQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICAgICAg
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiAqbV9u
ZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAg
ICAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdlYnNpdGVEYXRhU3RvcmUpKTsKLSAgICAg
ICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotICAgIH0KLQotICAgIGF1
dG8gbmV0d29ya1Byb2Nlc3MgPSBtYWtlVW5pcXVlPE5ldHdvcmtQcm9jZXNzUHJveHk+KCp0aGlz
KTsKLQotICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0K
LSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBjb3B5VG9WZWN0b3IobV93ZWJz
aXRlRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0
b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigp
OwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIgPSBt
X3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvblNlY29u
ZGFyeUlkZW50aWZpZXIoKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHBhcmFtZXRlcnMuY2FjaGVN
b2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7Ci0K
LSAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9j
b2xIYW5kbGVycygpKQotICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9y
Q3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpj
b29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb29raWVTdG9yYWdlRGlyZWN0b3J5
LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVh
ZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29va2ll
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBTdHJpbmcgY29udGFpbmVy
Q2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3Rv
cnkoKTsKLSAgICBpZiAoIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShj
b250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3Rvcnkg
PSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJl
bnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBl
OjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShlbXB0eVN0cmluZygpLCBTYW5kYm94RXh0
ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
I2VuZGlmCi0jZW5kaWYKLQotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1Nl
Y3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2No
ZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdp
c3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVn
YWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3Np
bmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVn
aXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNj
aGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0
aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOwotCi0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgLy8gKioqKioqKioqCi0gICAgLy8gSU1QT1JU
QU5UOiBEbyBub3QgY2hhbmdlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBpbmRleGVkIGRh
dGFiYXNlcyBvbiBkaXNrIHdpdGhvdXQgZmlyc3QgY29uc3VsdGluZyBhIHJldmlld2VyIGZyb20g
QXBwbGUgKDxyZGFyOi8vcHJvYmxlbS8xNzQ1NDcxMj4pCi0gICAgLy8gKioqKioqKioqCi0gICAg
aWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3Rv
cmUtPnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnBh
cmFtZXRlcnMoKS5pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9y
UmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5jcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUocGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwotICAg
IH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGlmIChtX3dlYnNp
dGVEYXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRTZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnkpCi0gICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeSA9ICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRT
ZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0gICAgYXV0byBsb2Nh
bFN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3Rv
cmUtPnJlc29sdmVkTG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0gICAg
aWYgKCFsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpCi0gICAgICAgIGxvY2FsU3RvcmFnZURpcmVjdG9y
eSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdExvY2FsU3RvcmFnZURpcmVjdG9y
eSgpOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9y
YWdlRGlyZWN0b3J5ID0gbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gY2FjaGVTdG9yYWdlRGlyZWN0b3J5
ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5jYWNoZVN0b3JhZ2VE
aXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9y
eS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9y
UmVhZFdyaXRlRGlyZWN0b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hl
U3RvcmFnZURpcmVjdG9yeSA9IFdURk1vdmUoY2FjaGVTdG9yYWdlRGlyZWN0b3J5KTsKLSAgICB9
Ci0KLSAgICBTdHJpbmcgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeTsKLSAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICByZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJl
c291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAo
IXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeSwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3Mg
PSBmYWxzZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5n
RXZlbnQgPSBmYWxzZTsKLSAgICBib29sIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSB0cnVlOwot
ICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IGZhbHNlOwot
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgV2ViQ29yZTo6VGhpcmRQ
YXJ0eUNvb2tpZUJsb2NraW5nTW9kZSB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gV2Vi
Q29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsOwotICAgIFdlYkNvcmU6OlNh
bWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRF
bmFibGVkID0gV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6Ok5vOwot
I2VuZGlmCi0gICAgV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgZmly
c3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0
ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0gICAgSGFzaFNldDxXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbj4gYXBwQm91bmREb21haW5zOwotICAgIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIG1hbnVhbFByZXZhbGVudFJlc291cmNlOwotCi0jaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgbV90Y2NQcmVmZXJlbmNlRW5hYmxlZCA9IGRvZXNBcHBIYXZlSVRQRW5hYmxlZCgp
OwotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSAmJiAhd2l0aFdlYnNpdGVEYXRhU3RvcmUt
PmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIHdpdGhXZWJzaXRl
RGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSAmJiAh
bV93ZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAg
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwot
ICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAoV2Vic2l0
ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpICYmICFXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGF0YVN0b3JlKCktPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAg
ICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7
Ci0gICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1By
ZWZlcmVuY2VFbmFibGVkOwotI2VuZGlmCi0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUp
IHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IHdpdGhXZWJzaXRlRGF0
YVN0b3JlLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NMb2dUZXN0aW5nRXZlbnQgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rl
c3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9
IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zaG91bGRJbmNsdWRl
TG9jYWxob3N0OwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVn
TW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFy
YW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMudGhpcmRQ
YXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3Jj
ZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOwotI2VuZGlm
Ci0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IG5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5maXJzdFBh
cnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAgICAgIHN0YW5kYWxvbmVBcHBsaWNh
dGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUGFyYW1ldGVycy5zdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0gICAgICAgICAgICBh
cHBCb3VuZERvbWFpbnMgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BhcmFtZXRlcnMuYXBwQm91bmREb21haW5zOwotICAgICAgICAgICAgbWFudWFsUHJl
dmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BhcmFtZXRlcnMubWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0KLQot
ICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0
b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEo
KTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGly
ZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJk
UGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IGF1dG8m
IG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5l
dHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9y
eS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0g
bmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6
UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgYXV0byYgaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSB3
aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRIU1RTU3RvcmFnZURpcmVjdG9yeSgpOwotICAg
ICAgICBpZiAoIWhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IGhzdHNTdG9yYWdlRGlyZWN0b3J5OwotICAgICAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGhzdHNTdG9yYWdlRGlyZWN0b3J5
LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV93ZWJz
aXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBt
X3dlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+aGFzU3Rh
dGlzdGljc1Rlc3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxk
SW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdNb2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
LnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsK
LSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
Zmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25l
QXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAg
ICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNl
TG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWluczsKLSAgICAgICAgICAgIG1h
bnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNl
TG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJP
cmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VR
dW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBl
clRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlclRo
aXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLQotICAgICAgICBjb25zdCBhdXRvJiBuZXR3
b3JrQ2FjaGVEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0Nh
Y2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVs
bCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3Jr
Q2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3Jp
dGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBjb25zdCBhdXRvJiBoc3RzU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0
ZURhdGFTdG9yZS0+cmVzb2x2ZWRIU1RTU3RvcmFnZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAo
IWhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3Rz
U3RvcmFnZURpcmVjdG9yeSA9IGhzdHNTdG9yYWdlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGhzdHNTdG9yYWdlRGlyZWN0b3J5LCBTYW5kYm94
RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgICAgICBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZSgpLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotICAgICAgICBhdXRvIG5l
dHdvcmtDYWNoZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHROZXR3b3JrQ2Fj
aGVEaXJlY3RvcnkoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0
d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3Jp
dGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgfQot
Ci0jaWYgSEFWRShDRk5FVFdPUktfQUxURVJOQVRJVkVfU0VSVklDRSkKLSAgICBpZiAoV2Vic2l0
ZURhdGFTdG9yZTo6aHR0cDNFbmFibGVkKCkpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVT
ZXJ2aWNlRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdEFsdGVybmF0aXZlU2Vy
dmljZXNEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VE
aXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVj
dG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
LSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuaHR0cDNFbmFibGVkID0gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLSAgICBi
b29sIGlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0ID0gZmFsc2U7Ci0gICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cyB7Ci0gICAgICAgIFdURk1vdmUocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSksCi0g
ICAgICAgIFdURk1vdmUocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSksCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MsCi0gICAgICAgIGlz
SXRwU3RhdGVFeHBsaWNpdGx5U2V0LAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTG9nVGVzdGluZ0V2ZW50LAotICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0LAotICAg
ICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlLAotI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2lu
Z01vZGUsCi0gICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkLAotI2VuZGlm
Ci0gICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlLAotICAgICAgICBzdGFu
ZGFsb25lQXBwbGljYXRpb25Eb21haW4sCi0gICAgICAgIGFwcEJvdW5kRG9tYWlucywKLSAgICAg
ICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UsCi0gICAgfTsKLQotICAgIC8vIEFkZCBhbnkgcGxh
dGZvcm0gc3BlY2lmaWMgcGFyYW1ldGVycwotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzKHBhcmFtZXRlcnMpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgbmV0d29yayBwcm9j
ZXNzLgotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKLQotI2lmIFBMQVRGT1JN
KENPQ09BKQotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0UU9TKG5ldHdvcmtQcm9jZXNzTGF0ZW5jeVFPUygpLCBuZXR3b3JrUHJvY2Vzc1Rocm91
Z2hwdXRRT1MoKSksIDApOwotI2VuZGlmCi0KLSAgICBuZXR3b3JrUHJvY2Vzcy0+dXBkYXRlUHJv
Y2Vzc0Fzc2VydGlvbigpOwotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0
b3JlKSk7Ci0gICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVz
KCk7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBuZXR3b3JrIHByb2Nlc3Mga25vd3Mg
YWJvdXQgYWxsIHRoZSBzZXNzaW9ucyB0aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSBp
dCBzdGFydGVkLgotICAgIGZvciAoYXV0byYgc2Vzc2lvbklEIDogbV9zZXNzaW9uVG9QYWdlSURz
TWFwLmtleXMoKSkgewotICAgICAgICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNp
dGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNz
aW9uSUQpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKndlYnNpdGVE
YXRhU3RvcmUpOwotICAgIH0KLQotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBXVEZNb3ZlKG5ldHdv
cmtQcm9jZXNzKTsKLSAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci19Ci0KIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBu
ZXR3b3JrUHJvY2Vzc1Byb3h5KQogewotICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsKLSAg
ICBBU1NFUlQoJm5ldHdvcmtQcm9jZXNzUHJveHkgPT0gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKSk7
Ci0KICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQog
ICAgICAgICBzdXBwbGVtZW50LT5wcm9jZXNzRGlkQ2xvc2UoJm5ldHdvcmtQcm9jZXNzUHJveHkp
OwogCkBAIC03NTEsOSArNDY4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nl
c3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzUHIKICAgICBpZiAo
bV9hdXRvbWF0aW9uU2Vzc2lvbikKICAgICAgICAgbV9hdXRvbWF0aW9uU2Vzc2lvbi0+dGVybWlu
YXRlKCk7CiAKLSAgICAvLyBMZWF2ZSB0aGUgcHJvY2VzcyBwcm94eSBhcm91bmQgZHVyaW5nIGNs
aWVudCBjYWxsLCBzbyB0aGF0IHRoZSBjbGllbnQgY291bGQgcXVlcnkgdGhlIHByb2Nlc3MgaWRl
bnRpZmllci4KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKLQogICAgIHRlcm1pbmF0
ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKQEAgLTc2NCwyMCArNDc4LDYgQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3NDcmFzaGVkKFdlYlByb2Nlc3NQcm94eSYgcHJv
eHkpCiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1Byb3h5LCBNZXNzYWdlczo6V2Vi
UHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYm
IHJlcGx5KQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKHdlYlByb2Nlc3NQcm94eSwgW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB3ZWJQcm9jZXNzUHJveHkgPSBtYWtlV2Vh
a1B0cih3ZWJQcm9jZXNzUHJveHkpLCByZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYXV0byYgY29u
bmVjdGlvbkluZm8pIG11dGFibGUgewotICAgICAgICBpZiAoVU5MSUtFTFkoIUlQQzo6Q29ubmVj
dGlvbjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVjdGlvbkluZm8uaWRlbnRpZmllcigpKSAmJiB3
ZWJQcm9jZXNzUHJveHkgJiYgd2Vha1RoaXMpKSB7Ci0gICAgICAgICAgICBXRUJQUk9DRVNTUE9P
TF9SRUxFQVNFX0xPR19FUlJPUihQcm9jZXNzLCAiZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
OiBGYWlsZWQgZmlyc3QgYXR0ZW1wdCwgcmV0cnlpbmciKTsKLSAgICAgICAgICAgIGVuc3VyZU5l
dHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24oKndlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHJlcGx5KGNvbm5lY3Rpb25JbmZv
KTsKLSAgICB9KTsKLX0KLQogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmdwdVByb2Nlc3NDcmFzaGVkKFByb2Nlc3NJRCBpZGVudGlmaWVyKQogewpAQCAtODAx
LDIzICs1MDEsMjYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0R1BVUHJvY2Vzc0Nvbm5lY3Rp
b24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIE0KIH0KICNlbmRpZgogCitib29s
IFdlYlByb2Nlc3NQb29sOjpzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSBmYWxz
ZTsKKwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiBwcm94eSwgUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwg
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChwcm94eSwgJnByb3h5ID09IG1f
bmV0d29ya1Byb2Nlc3MuZ2V0KCkpOworICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJz
aXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwor
ICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSA9IFdl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKKyAgICBpZiAoIXByb2Nl
c3NQb29scygpLnNpemUoKSkKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZjxXZWJQ
cm9jZXNzUG9vbD4+IHNlcnZpY2VXb3JrZXJQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbDo6Y3Jl
YXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjcmVhdGUoKS5nZXQoKSkpOwogCi0g
ICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9u
RGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwotCi0gICAgaWYgKCF3ZWJz
aXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAg
ICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0gICAgICAgIHdlYnNpdGVEYXRhU3RvcmUgPSBtX3dlYnNp
dGVEYXRhU3RvcmUuZ2V0KCk7Ci0gICAgfQorICAgIC8vIEFyYml0cmFyaWx5IGNob29zZSB0aGUg
Zmlyc3QgcHJvY2VzcyBwb29sIHRvIGhvc3QgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCisg
ICAgYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbHMoKVswXTsKKyAgICBBU1NFUlQocHJv
Y2Vzc1Bvb2wpOwogCiAgICAgV2ViUHJvY2Vzc1Byb3h5KiBzZXJ2aWNlV29ya2VyUHJvY2Vzc1By
b3h5IHsgbnVsbHB0ciB9OwotICAgIGlmICghbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7Ci0gICAg
ICAgICAgICBpZiAocHJvY2VzcyA9PSBtX3ByZXdhcm1lZFByb2Nlc3MgfHwgcHJvY2Vzcy0+aXNE
dW1teVByb2Nlc3NQcm94eSgpKQorCisgICAgaWYgKCFzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogcHJvY2Vzc1Bvb2wtPm1f
cHJvY2Vzc2VzKSB7CisgICAgICAgICAgICBpZiAocHJvY2VzcyA9PSBwcm9jZXNzUG9vbC0+bV9w
cmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICgmcHJvY2Vzcy0+d2Vic2l0ZURh
dGFTdG9yZSgpICE9IHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CkBAIC04MjUsMzUgKzUyOCwzNSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3Jr
ZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1BybwogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5
ID0gcHJvY2Vzcy5nZXQoKTsKLSAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkt
PmVuYWJsZVNlcnZpY2VXb3JrZXJzKHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JT
ZXJ2aWNlV29ya2VycygpKTsKKyAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkt
PmVuYWJsZVNlcnZpY2VXb3JrZXJzKHByb2Nlc3NQb29sLT51c2VyQ29udGVudENvbnRyb2xsZXJJ
ZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CiAKLSAgICAgICAgICAgIFdFQlBST0NFU1NQ
T09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdl
YiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94
eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisgICAg
ICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2
aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzIHJldXNpbmcgYW4gZXhpc3Rpbmcgd2ViIHByb2Nlc3MgKHByb2Nlc3M9JXAsIFBJRD0lZCki
LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5w
cm9jZXNzSWRlbnRpZmllcigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
fQogCiAgICAgaWYgKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSB7Ci0gICAgICAgIGF1dG8g
bmV3UHJvY2Vzc1Byb3h5ID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2Vy
cygqdGhpcywgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksICp3ZWJzaXRlRGF0YVN0b3JlKTsK
KyAgICAgICAgYXV0byBuZXdQcm9jZXNzUHJveHkgPSBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZUZv
clNlcnZpY2VXb3JrZXJzKCpwcm9jZXNzUG9vbCwgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiks
ICp3ZWJzaXRlRGF0YVN0b3JlKTsKICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9
IG5ld1Byb2Nlc3NQcm94eS5wdHIoKTsKIAotICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNF
X0xPR19JRl9BTExPV0VEKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29u
bmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgY3JlYXRpbmcgYSBuZXcgc2VydmljZSB3b3JrZXIgcHJv
Y2VzcyAocHJvY2VzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2Vy
dmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisgICAgICAgIFdF
QlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKFNlcnZpY2VXb3JrZXIs
ICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgY3JlYXRp
bmcgYSBuZXcgc2VydmljZSB3b3JrZXIgcHJvY2VzcyAocHJvY2VzPSVwLCBQSUQ9JWQpIiwgc2Vy
dmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vz
c0lkZW50aWZpZXIoKSk7CiAKLSAgICAgICAgaW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJv
Y2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICAgICAgbV9wcm9jZXNzZXMuYXBwZW5k
KFdURk1vdmUobmV3UHJvY2Vzc1Byb3h5KSk7CisgICAgICAgIHByb2Nlc3NQb29sLT5pbml0aWFs
aXplTmV3V2ViUHJvY2VzcyhuZXdQcm9jZXNzUHJveHksIHdlYnNpdGVEYXRhU3RvcmUpOworICAg
ICAgICBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMuYXBwZW5kKFdURk1vdmUobmV3UHJvY2Vzc1By
b3h5KSk7CiAgICAgfQogCi0gICAgQVNTRVJUKCFtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29u
dGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpKTsKLSAgICBtX3NlcnZpY2VXb3JrZXJQ
cm9jZXNzZXMuYWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKKyAgICBBU1NFUlQoIXNl
cnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlucygqc2VydmljZVdvcmtlclByb2Nlc3NQcm94
eSkpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5hZGQoKnNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHkpOwogCi0gICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZXN0YWJsaXNoU2Vy
dmljZVdvcmtlckNvbnRleHQobV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMgPyBtX3NlcnZpY2VX
b3JrZXJQcmVmZXJlbmNlcy52YWx1ZSgpIDogbV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNl
cygpLnN0b3JlKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBpZiAoIW1fc2Vy
dmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkKLSAgICAgICAgc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChtX3NlcnZpY2VXb3JrZXJVc2VyQWdl
bnQpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3Jr
ZXJDb250ZXh0KHByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA/IHByb2Nl
c3NQb29sLT5tX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcy52YWx1ZSgpIDogcHJvY2Vzc1Bvb2wt
Pm1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CisgICAgaWYgKCFwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyVXNl
ckFnZW50LmlzTnVsbCgpKQorICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5zZXRT
ZXJ2aWNlV29ya2VyVXNlckFnZW50KHByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJVc2VyQWdl
bnQpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZW1vdmVGcm9tU2VydmljZVdvcmtlclBy
b2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiB7Ci0gICAgQVNTRVJUKG1fc2Vydmlj
ZVdvcmtlclByb2Nlc3Nlcy5jb250YWlucyhwcm9jZXNzKSk7Ci0gICAgbV9zZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzLnJlbW92ZShwcm9jZXNzKTsKKyAgICBBU1NFUlQoc2VydmljZVdvcmtlclByb2Nl
c3NlcygpLmNvbnRhaW5zKHByb2Nlc3MpKTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCku
cmVtb3ZlKHByb2Nlc3MpOwogfQogI2VuZGlmCiAKQEAgLTkyMiw3ICs2MjUsNyBAQCBSZWZQdHI8
V2ViUHJvY2Vzc1Byb3h5PiBXZWJQcm9jZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3Mo
V2Vic2l0ZURhdGFTdG9yZQogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQogICAg
IC8vIEluIHBsYXRmb3JtcyB1c2luZyBCdWJibGV3cmFwIGZvciBzYW5kYm94aW5nLCBwcmV3YXJt
ZWQgcHJvY2VzcyBpcyBsYXVuY2hlZCB1c2luZyB0aGUgV2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBX
ZWJzaXRlRGF0YVN0b3JlLAogICAgIC8vIHNvIHdlIGRvbid0IHVzZSBpdCBpbiBjYXNlIG9mIHVz
aW5nIGEgZGlmZmVyZW50IFdlYnNpdGVEYXRhU3RvcmUuCi0gICAgaWYgKG1fc2FuZGJveEVuYWJs
ZWQgJiYgbV93ZWJzaXRlRGF0YVN0b3JlICYmIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSAhPSAm
d2Vic2l0ZURhdGFTdG9yZSkKKyAgICBpZiAobV9zYW5kYm94RW5hYmxlZCkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAjZW5kaWYKIApAQCAtMTAzMiw4ICs3MzUsNiBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjppbml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3Ms
IFdlYnNpdGVEYQogICAgICAgICBwcm9jZXNzLmlzUmVzcG9uc2l2ZShbaW5pdGlhbGl6YXRpb25B
Y3Rpdml0eSA9IFdURk1vdmUoaW5pdGlhbGl6YXRpb25BY3Rpdml0eSldIChib29sKSB7IH0pOwog
ICAgIH0pOwogCi0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQogICAgIFdlYlByb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKIAogICAgIHBhcmFtZXRlcnMuaW5qZWN0ZWRC
dW5kbGVQYXRoID0gbV9yZXNvbHZlZFBhdGhzLmluamVjdGVkQnVuZGxlUGF0aDsKQEAgLTExOTgs
OSArODk5LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGlu
ZyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCiAgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24o
KS0+aWdub3JlVGltZW91dHNGb3JUZXN0aW5nKCk7CiAKICAgICBtX2Nvbm5lY3Rpb25DbGllbnQu
ZGlkQ3JlYXRlQ29ubmVjdGlvbih0aGlzLCBwcm9jZXNzLT53ZWJDb25uZWN0aW9uKCkpOwotCi0g
ICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5k
aWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpkaXNj
b25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCkBAIC0xMjk1LDEwICs5OTMs
NyBAQCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdl
Q2xpZW50JiBwYWdlQ2xpZW50LCBSZWY8QVBJOgogICAgIGlmICghcGFnZUNvbmZpZ3VyYXRpb24t
PndlYnNpdGVEYXRhU3RvcmUoKSkgewogICAgICAgICAvLyBXZSB0cnkgdG8gYXZvaWQgY3JlYXRp
bmcgdGhlIGRlZmF1bHQgZGF0YSBzdG9yZSBhcyBsb25nIGFzIHBvc3NpYmxlLgogICAgICAgICAv
LyBCdXQgaWYgdGhlcmUgaXMgYW4gYXR0ZW1wdCB0byBjcmVhdGUgYSB3ZWIgcGFnZSB3aXRob3V0
IGFueSBzcGVjaWZpZWQgZGF0YSBzdG9yZSwgdGhlbiB3ZSBoYXZlIHRvIGNyZWF0ZSBpdC4KLSAg
ICAgICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgICAgICBtX3dlYnNpdGVEYXRh
U3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIo
KTsKLQotICAgICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZShtX3dl
YnNpdGVEYXRhU3RvcmUuZ2V0KCkpOworICAgICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vi
c2l0ZURhdGFTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS5wdHIoKSk7CiAgICAgfQogCiAgICAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzczsK
QEAgLTEzMjksNyArMTAyNCw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQb29sOjpj
cmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQogICAgIGlmICghbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMpIHsK
ICAgICAgICAgbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMgPSBwYWdlLT5wcmVmZXJlbmNlc1N0
b3JlKCk7Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZp
Y2VXb3JrZXJQcm9jZXNzZXMpCisgICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nl
c3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2Vy
UHJvY2Vzcy51cGRhdGVTZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXNTdG9yZSgqbV9zZXJ2aWNlV29y
a2VyUHJlZmVyZW5jZXMpOwogICAgIH0KICAgICBpZiAodXNlckNvbnRlbnRDb250cm9sbGVyKQpA
QCAtMTM1Niw3ICsxMDUxLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlU2VydmljZVdv
cmtlclVzZXJBZ2VudChjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCkKICAgICBpZiAobV9zZXJ2aWNl
V29ya2VyVXNlckFnZW50ID09IHVzZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2Vy
dmljZVdvcmtlclVzZXJBZ2VudCA9IHVzZXJBZ2VudDsKLSAgICBmb3IgKGF1dG8mIHNlcnZpY2VX
b3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgIGZvciAoYXV0byYg
c2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAgICAg
IHNlcnZpY2VXb3JrZXJQcm9jZXNzLnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQobV9zZXJ2aWNl
V29ya2VyVXNlckFnZW50KTsKIH0KICNlbmRpZgpAQCAtMTM2NSwxNSArMTA2MCw2IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJv
eHlJZGVudGlmaWVyIHBhZ2VJCiB7CiAgICAgYXV0byByZXN1bHQgPSBtX3Nlc3Npb25Ub1BhZ2VJ
RHNNYXAuYWRkKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgSGFzaFNldDxXZWJQYWdlUHJveHlJZGVu
dGlmaWVyPigpKS5pdGVyYXRvci0+dmFsdWUuYWRkKHBhZ2VJRCk7CiAgICAgQVNTRVJUX1VOVVNF
RChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0
YVN0b3JlLnNlc3Npb25JRCgpOwotICAgIGlmIChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBBU1NFUlQoIXNlc3Npb25JRC5pc0VwaGVt
ZXJhbCgpIHx8IGRhdGFTdG9yZS5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnNlc3Npb25JRCA9PSBzZXNzaW9uSUQpOwotICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2Vzcykg
ewotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKGRhdGFT
dG9yZSkpOwotICAgICAgICAgICAgZGF0YVN0b3JlLmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAg
ICAgICAgfQotICAgIH0KIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUVuZFVzaW5nV2Vi
c2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgV2Vic2l0ZURhdGFT
dG9yZSYgZGF0YVN0b3JlKQpAQCAtMTQwMSw3ICsxMDg3LDYgQEAgYm9vbCBXZWJQcm9jZXNzUG9v
bDo6aGFzUGFnZXNVc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0
b3JlKQogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRh
U3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQog
ewogICAgIGF1dG8mIGRvd25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9y
ZSwgcmVxdWVzdCwgaW5pdGlhdGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwogCiAgICAgT3B0aW9uYWw8TmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW4+IGlzQXBwQm91bmQgPSBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFp
bjo6Tm87CiAgICAgaWYgKGluaXRpYXRpbmdQYWdlKSB7CkBAIC0xNDExLDI2ICsxMDk2LDIzIEBA
IERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3Jl
JiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94CiAjZW5kaWYKICAgICB9CiAKLSAgICBpZiAobmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICBSZXNvdXJjZVJlcXVlc3QgdXBkYXRlZFJlcXVlc3QocmVx
dWVzdCk7Ci0gICAgICAgIC8vIFJlcXVlc3QncyBmaXJzdFBhcnR5Rm9yQ29va2llcyB3aWxsIGJl
IHVzZWQgYXMgT3JpZ2luYWwgVVJMIG9mIHRoZSBkb3dubG9hZCByZXF1ZXN0LgotICAgICAgICAv
LyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KLSAgICAgICAg
aWYgKGluaXRpYXRpbmdQYWdlKSB7Ci0gICAgICAgICAgICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwg
PSBVUkwgeyBVUkwgeyB9LCBpbml0aWF0aW5nUGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07
Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0
aWF0aW5nUGFnZVVSTCk7Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRl
KGFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGluaXRpYXRpbmdQYWdlVVJMLCByZXF1ZXN0LnVy
bCgpKSk7Ci0gICAgICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVs
ZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKLSAgICAgICAgICAgICAgICB1cGRhdGVkUmVx
dWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVx
dWVzdC51cmwoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdXBkYXRlZFJlcXVl
c3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoVVJMKCkpOwotICAgICAgICAgICAgdXBkYXRlZFJl
cXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7Ci0gICAgICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1
ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKLSAgICAg
ICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6
c3RhbmRhcmRVc2VyQWdlbnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdXBkYXRlZFJlcXVlc3Qu
c2V0SXNUb3BTaXRlKGZhbHNlKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25sb2FkUmVxdWVzdChzZXNzaW9uSUQsIGRvd25sb2Fk
UHJveHkuZG93bmxvYWRJRCgpLCB1cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVk
RmlsZW5hbWUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CisgICAgUmVzb3Vy
Y2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJlcXVlc3QpOworICAgIC8vIFJlcXVlc3QncyBmaXJz
dFBhcnR5Rm9yQ29va2llcyB3aWxsIGJlIHVzZWQgYXMgT3JpZ2luYWwgVVJMIG9mIHRoZSBkb3du
bG9hZCByZXF1ZXN0LgorICAgIC8vIFdlIHNldCB0aGUgdmFsdWUgdG8gdG9wIGxldmVsIGRvY3Vt
ZW50J3MgVVJMLgorICAgIGlmIChpbml0aWF0aW5nUGFnZSkgeworICAgICAgICBVUkwgaW5pdGlh
dGluZ1BhZ2VVUkwgPSBVUkwgeyBVUkwgeyB9LCBpbml0aWF0aW5nUGFnZS0+cGFnZUxvYWRTdGF0
ZSgpLnVybCgpIH07CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29r
aWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1l
U2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVz
dC51cmwoKSkpOworICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVs
ZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKKyAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0
LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2VudEZvclVSTChyZXF1ZXN0
LnVybCgpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQ
YXJ0eUZvckNvb2tpZXMoVVJMKCkpOworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVT
aXRlKGZhbHNlKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmll
bGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVz
dC5zZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7CiAg
ICAgfQorICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7CisgICAgZGF0YVN0
b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25s
b2FkUmVxdWVzdChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIGRvd25sb2FkUHJveHkuZG93bmxvYWRJ
RCgpLCB1cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsK
IAogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTQzOCwxNyArMTEyMCwxMiBAQCBE
b3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYg
ZGF0YVN0b3JlLCBXZWJQYWdlUHJveAogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OnJl
c3VtZURvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3h5KiBp
bml0aWF0aW5nUGFnZSwgY29uc3QgQVBJOjpEYXRhJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcm
IHBhdGgpCiB7CiAgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHko
ZGF0YVN0b3JlLCBSZXNvdXJjZVJlcXVlc3QoKSwgaW5pdGlhdGluZ1BhZ2UsIHsgfSk7Ci0gICAg
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwogCiAgICAg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgaWYg
KCFwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
KHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lv
bkhhbmRsZSk7CiAKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBuZXR3b3Jr
UHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQo
c2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVm
ZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKLSAgICAgICAgcmV0
dXJuIGRvd25sb2FkUHJveHk7Ci0gICAgfQotCisgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKGRhdGFTdG9y
ZS5zZXNzaW9uSUQoKSwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHJlc3VtZURhdGEuZGF0
YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSwgMCk7CiAgICAgcmV0
dXJuIGRvd25sb2FkUHJveHk7CiB9CiAKQEAgLTE1MTcsMTEgKzExOTQsNiBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpyZWZyZXNoUGx1Z2lucygpCiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKIAotUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXIoKQotewotICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzID8gbV9uZXR3b3JrUHJv
Y2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7Ci19Ci0KIFByb2Nlc3NJRCBXZWJQcm9jZXNz
UG9vbDo6cHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKQogewogICAgIHJldHVybiBtX3ByZXdh
cm1lZFByb2Nlc3MgPyBtX3ByZXdhcm1lZFByb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCkgOiAw
OwpAQCAtMTU1OCwxNCArMTIzMCwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVS
TFNjaGVtZUFzU2VjdXJlKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUds
b2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNj
aGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdp
c3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQ
cm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3Vy
ZSh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFT
dG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAg
IGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSksIDApOworICAgIH0pOwogfQog
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVu
dFNlY3VyaXR5UG9saWN5KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUds
b2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29u
dGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNl
Y3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRl
bnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JF
YWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0
b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3Vy
aXR5UG9saWN5KHVybFNjaGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmlu
ZyYgdXJsU2NoZW1lKQpAQCAtMTU3OCwxNCArMTI1NCwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAg
ICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNM
b2NhbCh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJv
Y2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hl
bWVBc0xvY2FsKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJz
aXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsK
KyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpLCAwKTsKKyAgICB9
KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNz
KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpz
aW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKTsKICAgICBz
ZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1l
QXNOb0FjY2Vzcyh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hl
bWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJs
U2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9y
ZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3Rl
clVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0ZWQoY29uc3Qg
U3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNjA2LDEwICsxMjg2LDggQEAgdm9pZCBXZWJQcm9jZXNz
UG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxl
cnMoY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0
b21Qcm90b2NvbEhhbmRsZXJzKCkuYWRkKHVybFNjaGVtZSk7Ci0gICAgZm9yIChhdXRvKiBwcm9j
ZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2No
ZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nl
c3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwogfQogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0
b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTYxOCwxMCAr
MTI5Niw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVB
c0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uCiAgICAgICAgIHJldHVybjsKIAogICAg
IGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLnJlbW92ZSh1cmxT
Y2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1l
Rm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRv
IG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3Nl
cygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1
c3RvbVByb3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lz
dGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpA
QCAtMTY1NSwxNiArMTMzMSwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVs
KENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIAogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdl
czo6V2ViUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSk7CiAKLSAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCksIDApOworICAgIFdlYnNp
dGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtjYWNoZU1vZGVsXSAoV2Vic2l0
ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9k
ZWwpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2Rl
bFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIHsKICAgICB1
cGRhdGVCYWNrRm9yd2FyZENhY2hlQ2FwYWNpdHkoKTsKIAotICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVs
KSwgeyB9LCB7IH0pOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0
b3JlKFtjYWNoZU1vZGVsXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAg
IGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKGNhY2hlTW9kZWwpLCB7
IH0sIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVx
dWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dEludGVydmFsKQpAQCAtMTY3NCwxMiAr
MTM1Miw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRSZXF1ZXN0VGltZW91dElu
dGVydmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCiAKIERvd25sb2FkUHJveHkmIFdlYlByb2Nl
c3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5n
UGFnZSwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvKQogewotICAgIHJldHVybiBlbnN1
cmVOZXR3b3JrUHJvY2VzcygmZGF0YVN0b3JlKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9y
ZSwgcmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwotfQotCi12b2lkIFdlYlBy
b2Nlc3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKLXsK
LSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFj
a2dyb3VuZCk7CisgICAgcmV0dXJuIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURv
d25sb2FkUHJveHkoZGF0YVN0b3JlLCAqdGhpcywgcmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5h
dGluZ1BhZ2UpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIo
SVBDOjpSZWNlaXZlck5hbWUgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpNZXNzYWdlUmVjZWl2
ZXImIG1lc3NhZ2VSZWNlaXZlcikKQEAgLTE3NTAsMzAgKzE0MjMsNiBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9OZXR3
b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KQotewotICAgIGlmIChtX25ldHdv
cmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3Rk
Ojpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFy
Q2FjaGVkQ3JlZGVudGlhbHMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkKLXsKLSAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklE
KSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
KCkKLXsKLSAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwotCi0gICAgaWYgKCFtX25ldHdv
cmtQcm9jZXNzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+
dGVybWluYXRlKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci19Ci0KIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQogewogICAg
IFZlY3RvcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzID0gbV9wcm9jZXNzZXM7
CkBAIC0xNzgxLDQwICsxNDMwLDE1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFs
bFdlYkNvbnRlbnRQcm9jZXNzZXMoKQogICAgICAgICBwcm9jZXNzLT50ZXJtaW5hdGUoKTsKIH0K
IAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVu
ZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQotewotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKCk7Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJlcGFyZVRvU3VzcGVu
ZChJc1N1c3BlbnNpb25JbW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5Rm9yVGVzdGluZygpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9y
VGVzdGluZygpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWUoKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpCiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQogICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpOwotICAgIHdoaWxl
IChtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKSkKLSAgICAgICAgbV9zZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzLmJlZ2luKCktPmRpc2FibGVTZXJ2aWNlV29ya2VycygpOworICAg
IHdoaWxlIChzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNpemUoKSkKKyAgICAgICAg
c2VydmljZVdvcmtlclByb2Nlc3NlcygpLmJlZ2luKCktPmRpc2FibGVTZXJ2aWNlV29ya2Vycygp
OwogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmZsdXNoQ29va2llcyhjb25zdCBQ
QUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5mbHVzaENvb2tp
ZXMoc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1dG9tYXRpb25DYXBhYmlsaXRpZXMoKSBjb25zdAogewogI2lm
IEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpAQCAtMjA4OSwxNSArMTcxMywyMSBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpyZXBvcnRXZWJDb250ZW50Q1BVVGltZShTZWNvbmRzIGNwdVRpbWUsIHVp
bnQ2NF90IGFjdGl2aXR5UwogI2VuZGlmCiB9CiAKK1dlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94
eT4mIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2Vz
OworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9CisKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0
ZVByb2Nlc3NBc3NlcnRpb25zKCkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnVwZGF0
ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0
ZURhdGFTdG9yZShbXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRh
dGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICB9
KTsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gQ2hlY2sgb24gbmV4dCBydW4g
bG9vcCBzaW5jZSB0aGUgd2ViIHByb2Nlc3MgcHJveHkgdG9rZW5zIGFyZSBwcm9iYWJseSBiZWlu
ZyB1cGRhdGVkLgotICAgIGNhbGxPbk1haW5SdW5Mb29wKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKHRoaXMpXSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VX
b3JrZXJQcm9jZXNzZXMpCisgICAgY2FsbE9uTWFpblJ1bkxvb3AoW10geworICAgICAgICBmb3Ig
KGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQog
ICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclByb2Nl
c3NBc3NlcnRpb24oKTsKICAgICB9KTsKICNlbmRpZgpAQCAtMjEwNyw3ICsxNzM3LDcgQEAgYm9v
bCBXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29ya2VyUGFnZUlEKFdlYlBhZ2VQcm94eUlkZW50
aWZpZXIgcGFnZUlEKSBjb25zdAogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICAv
LyBGSVhNRTogVGhpcyBpcyBpbmVmZmljaWVudC4KLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3Nl
cnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtwYWdlSURdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1
cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtwYWdlSURdKGF1dG8mIHBy
b2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlclBhZ2VQcm94
eShwYWdlSUQpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMzI5LDE0ICsxOTU5LDYgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKQogfQog
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0ZU5hdmlnYXRpb25E
YXRhVHJhbnNmZXI6OkZsYWc+IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIFdlYlBhZ2VQcm94eUlk
ZW50aWZpZXIgd2ViUGFnZVByb3h5SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCkKLXsKLSAg
ICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmV0d29y
a1Byb2Nlc3MtPmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25J
RCwgZnJvbURvbWFpbiwgdG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQ
cm94eUlELCB3ZWJQYWdlSUQpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5z
V2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYm
IGRvbWFpbnMpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpTZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihkb21haW5zKSk7CkBAIC0yMzg3LDI3ICsy
MDA5LDI3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1ZGlibGVNZWRpYUFzc2VydGlv
bnMoKQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKIHsKLSAgICBpZiAo
bV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID09IHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MpCisgICAgaWYgKHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9
PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9
JWQpIiwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAgV0VCUFJPQ0VTU1BP
T0xfUkVMRUFTRV9MT0dfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcz0lZCkiLCB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIAotICAgIG1fdXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7Ci0gICAg
dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKLSAgICB0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcygp
OworICAgIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3M7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nl
c3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0
ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiBib29s
IFdlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVz
dGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJv
Y2Vzc2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBw
cm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCk7CiAg
ICAgfSk7CiB9CiAKIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJCYWNrZ3Jv
dW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjphbnlPZiht
X3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4g
V1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8mIHByb2Nlc3MpIHsK
ICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0
eUZvclRlc3RpbmcoKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5oCmluZGV4IGQxZjFmZTk2MTUwNmExZTVmMTMyNWZhOTlhNTYwOGI5NTBiNmFiNzEu
LjdjMjU0ODkwMzY2ODljZjlmYWViODc4MTkwNjc5ZGFmMTExNmEzMGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApAQCAtODEsNyArODEsNiBAQCBPQkpDX0NMQVNT
IFdLUHJlZmVyZW5jZU9ic2VydmVyOwogCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEF1dG9tYXRp
b25DbGllbnQ7Ci1jbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiBjbGFzcyBEb3du
bG9hZENsaWVudDsKIGNsYXNzIEhUVFBDb29raWVTdG9yZTsKIGNsYXNzIEluamVjdGVkQnVuZGxl
Q2xpZW50OwpAQCAtMTgwLDcgKzE3OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhpc3RvcnlD
bGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+JiYp
OwogICAgIHZvaWQgc2V0RG93bmxvYWRDbGllbnQoVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGll
bnQ+JiYpOwogICAgIHZvaWQgc2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJ
OjpBdXRvbWF0aW9uQ2xpZW50PiYmKTsKLSAgICB2b2lkIHNldExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ+JiYpOwogCiAgICAgdm9pZCBzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlk
ZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250
ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPmN1
c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpOyB9CkBAIC0xOTEsMTcgKzE4
OSw5IEBAIHB1YmxpYzoKICAgICAvLyBudWxsIGNoZWNrcyBpbiBXZWJQYWdlUHJveHkuCiAgICAg
V2ViUHJvY2Vzc1Byb3h5KiBkdW1teVByb2Nlc3NQcm94eShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpIGNvbnN0IHsgcmV0dXJuIG1fZHVtbXlQcm9jZXNzUHJveGllcy5nZXQoc2Vzc2lvbklEKS5n
ZXQoKTsgfQogCi0gICAgLy8gV2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2VzcyBhcyBhcHByb3Bv
cmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4gVGhlIGNvbm5lY3Rpb24gbXVzdCBiZSBu
b24tbnVsbC4KLSAgICBJUEM6OkNvbm5lY3Rpb24qIG5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlv
bigpOwotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9BbGxQcm9jZXNzZXMo
Y29uc3QgVCYgbWVzc2FnZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9B
bGxQcm9jZXNzZXNGb3JTZXNzaW9uKGNvbnN0IFQmIG1lc3NhZ2UsIFBBTDo6U2Vzc2lvbklEKTsK
IAotICAgIC8vIFNlbmRzIHRoZSBtZXNzYWdlIHRvIFdlYlByb2Nlc3Mgb3IgTmV0d29ya1Byb2Nl
c3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9kZWwuCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSk7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gdm9pZCBzZW5kU3luY1RvTmV0
d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UsIFUmJiByZXBseSk7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3Nh
cnkoVCYmIG1lc3NhZ2UpOwotCiAgICAgdm9pZCBwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdl
YlByb2Nlc3NQcm94eSopOwogCiAgICAgV2ViUHJvY2Vzc0NhY2hlJiB3ZWJQcm9jZXNzQ2FjaGUo
KSB7IHJldHVybiBtX3dlYlByb2Nlc3NDYWNoZS5nZXQoKTsgfQpAQCAtMjA5LDkgKzE5OSw2IEBA
IHB1YmxpYzoKICAgICAvLyBEaXNjb25uZWN0IHRoZSBwcm9jZXNzIGZyb20gdGhlIGNvbnRleHQu
CiAgICAgdm9pZCBkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqKTsKIAotICAgIFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZSogd2Vic2l0ZURhdGFTdG9yZSgpIGNvbnN0IHsgcmV0dXJu
IG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0UHJpbWFyeURhdGFTdG9y
ZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeyBtX3dlYnNpdGVEYXRhU3Rv
cmUgPSAmZGF0YVN0b3JlOyB9Ci0KICAgICBSZWY8V2ViUGFnZVByb3h5PiBjcmVhdGVXZWJQYWdl
KFBhZ2VDbGllbnQmLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJik7CiAKICAgICB2b2lk
IHBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBX
ZWJzaXRlRGF0YVN0b3JlJik7CkBAIC0yNjIsMTAgKzI0OSw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGFkZFN1cHBvcnRlZFBsdWdpbihTdHJpbmcmJiBtYXRjaGluZ0RvbWFpbiwgU3RyaW5nJiYgbmFt
ZSwgSGFzaFNldDxTdHJpbmc+JiYgbWltZVR5cGVzLCBIYXNoU2V0PFN0cmluZz4gZXh0ZW5zaW9u
cyk7CiAgICAgdm9pZCBjbGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIAotICAgIFByb2Nlc3NJRCBu
ZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKICAgICBQcm9jZXNzSUQgcHJld2FybWVkUHJvY2Vz
c0lkZW50aWZpZXIoKTsKICAgICB2b2lkIGFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0Zv
clRlc3RpbmcoUHJvY2Vzc0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+
JiYpPiYmKTsKLSAgICBib29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5n
KGNvbnN0IFN0cmluZyYpOwogCiAgICAgV2ViUGFnZUdyb3VwJiBkZWZhdWx0UGFnZUdyb3VwKCkg
eyByZXR1cm4gbV9kZWZhdWx0UGFnZUdyb3VwLmdldCgpOyB9CiAKQEAgLTMwNyw4ICsyOTIsNiBA
QCBwdWJsaWM6CiAgICAgQVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudCYgaGlzdG9yeUNs
aWVudCgpIHsgcmV0dXJuICptX2hpc3RvcnlDbGllbnQ7IH0KICAgICBXZWJDb250ZXh0Q2xpZW50
JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCi0gICAgQVBJOjpDdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIGNvbnN0IHsgcmV0
dXJuICptX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsgfQotCiAgICAgc3RydWN0IFN0YXRp
c3RpY3MgewogICAgICAgICB1bnNpZ25lZCB3a1ZpZXdDb3VudDsKICAgICAgICAgdW5zaWduZWQg
d2tQYWdlQ291bnQ7CkBAIC0zMjQsOCArMzA3LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2VuZE5l
dHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7CiAgICAgdm9pZCB0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vy
cygpOwogCi0gICAgdm9pZCBmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCiAgICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dFdl
YlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhib29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5l
eHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQogICAgIGJvb2wgc2hv
dWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVy
biBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nOyB9CiAgICAg
dm9pZCBzZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmco
Ym9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9y
VGVzdGluZyA9IHZhbHVlOyB9CkBAIC0zODgsMTkgKzM2OSwxMyBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogICAgIC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50Ci0gICAgTmV0d29ya1Byb2Nlc3NQ
cm94eSYgZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVE
YXRhU3RvcmUgPSBudWxscHRyKTsKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJv
Y2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCk7IH0KICAgICB2b2lk
IG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAKLSAgICB2b2lk
IGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBNZXNzYWdlczo6
V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkm
Jik7Ci0KICAgICBib29sIGlzU2VydmljZVdvcmtlclBhZ2VJRChXZWJQYWdlUHJveHlJZGVudGlm
aWVyKSBjb25zdDsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgdm9pZCBlc3RhYmxp
c2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQ
cm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHN0YXRpYyB2b2lkIGVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5Jiwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCByZW1vdmVGcm9tU2VydmljZVdvcmtlclByb2Nl
c3NlcyhXZWJQcm9jZXNzUHJveHkmKTsKLSAgICBzaXplX3Qgc2VydmljZVdvcmtlclByb3hpZXND
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb21wdXRlU2l6
ZSgpOyB9Ci0gICAgdm9pZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXIoYm9vbCBhbGxvd3MpIHsgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXIgPSBhbGxvd3M7IH0KLSAgICBib29sIGFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vydmlj
ZVdvcmtlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2
aWNlV29ya2VyOyB9CisgICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQoKSBjb25z
dCB7IHJldHVybiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNpemUoKTsgfQogICAg
IHZvaWQgdXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25zdCBTdHJpbmcmIHVzZXJBZ2Vu
dCk7CiAgICAgY29uc3QgT3B0aW9uYWw8VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllcj4m
IHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpIGNvbnN0
IHsgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNlV29ya2VyOyB9CiAg
ICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpIGNv
bnN0OwpAQCAtNDU5LDggKzQzNCw2IEBAIHB1YmxpYzoKICAgICBib29sIGFsd2F5c1J1bnNBdEJh
Y2tncm91bmRQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx3YXlzUnVuc0F0QmFja2dyb3Vu
ZFByaW9yaXR5OyB9CiAgICAgYm9vbCBzaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uOyB9CiAKLSAg
ICB2b2lkIHN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKTsKLSAgICAK
ICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICB2b2lkIGdhbWVwYWRDb25uZWN0ZWQoY29uc3QgVUlH
YW1lcGFkJiwgV2ViQ29yZTo6RXZlbnRNYWtlc0dhbWVwYWRzVmlzaWJsZSk7CiAgICAgdm9pZCBn
YW1lcGFkRGlzY29ubmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYpOwpAQCAtNDk4LDcgKzQ3MSw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCk7
CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIHZvaWQgZGlkQ29t
bWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiYgdG9Eb21haW4sIE9wdGlvblNldDxXZWJDb3JlOjpDcm9zc1NpdGVOYXZp
Z2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiwgV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2ViQ29y
ZTo6UGFnZUlkZW50aWZpZXIpOwogICAgIHZvaWQgc2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rp
b24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJik7CiAgICAgdm9pZCBzZWVk
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRlc3RpbmcoY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4mIGZpcnN0UGFydHlEb21haW4sIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluJiB0aGlyZFBhcnR5RG9tYWluLCBib29sIHNob3VsZFNjaGVkdWxlTm90aWZpY2F0aW9uLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgc2VuZFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKQEAg
LTUyNSw4ICs0OTcsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgUGx1Z0luQXV0b1N0YXJ0UHJvdmlk
ZXImIHBsdWdJbkF1dG9TdGFydFByb3ZpZGVyKCkgeyByZXR1cm4gbV9wbHVnSW5BdXRvU3RhcnRQ
cm92aWRlcjsgfQogCi0gICAgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KGJvb2wpOwotICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIGNvbnN0
IHsgcmV0dXJuIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQorICAgIHN0YXRp
YyB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCk7CisgICAgc3Rh
dGljIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIHsgcmV0dXJuIHNfdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQogCiAjaWYgRU5BQkxFKENGUFJFRlNfRElS
RUNUX01PREUpCiAgICAgdm9pZCBub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQoY29uc3QgU3RyaW5n
JiBkb21haW4sIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBPcHRpb25hbDxTdHJpbmc+JiBlbmNv
ZGVkVmFsdWUpOwpAQCAtNTM4LDkgKzUxMCwxNSBAQCBwdWJsaWM6CiAgICAgaW50MzJfdCB1c2Vy
SWQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJJZDsgfQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShD
T0NPQSkKLSAgICBPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IHhwY0VuZHBvaW50TWVzc2FnZSgp
IGNvbnN0OwotICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nl
c3MoT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRwb2ludE1lc3NhZ2UpOworICAgIHN0YXRp
YyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNX
aXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMg
U3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgbmV0d29y
a2luZ0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hl
c0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0
b3J5KCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTU1Niw4ICs1MzQsNiBAQCBwcml2YXRlOgog
ICAgIFdlYlByb2Nlc3NQcm94eSYgY3JlYXRlTmV3V2ViUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3Jl
KiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3
YXJtZWQ6Ok5vKTsKICAgICB2b2lkIGluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQ
cm94eSYsIFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkID0g
V2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8pOwogCi0gICAgdm9pZCBwbGF0Zm9ybUlu
aXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYp
OwotCiAgICAgdm9pZCBoYW5kbGVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSk7CiAgICAgdm9pZCBo
YW5kbGVTeW5jaHJvbm91c01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5LCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFVzZXJEYXRhJiYpPiYmKTsKIApAQCAtNTgxLDE0ICs1NTcsNiBAQCBwcml2YXRlOgog
CiAgICAgYm9vbCB1c2VzU2luZ2xlV2ViUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uZmln
dXJhdGlvbi0+dXNlc1NpbmdsZVdlYlByb2Nlc3MoKTsgfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBz
dGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcg
bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVu
dENhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5
RGlyZWN0b3J5KCk7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcmVn
aXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKICAgICB2b2lkIHVucmVnaXN0ZXJOb3RpZmlj
YXRpb25PYnNlcnZlcnMoKTsKQEAgLTYzMCw5ICs1OTgsOCBAQCBwcml2YXRlOgogICAgIEhhc2hN
YXA8UEFMOjpTZXNzaW9uSUQsIFdlYWtQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4gbV9kdW1teVByb2Nl
c3NQcm94aWVzOyAvLyBMaWdodHdlaWdodCBXZWJQcm9jZXNzUHJveHkgb2JqZWN0cyB3aXRob3V0
IGJhY2tpbmcgcHJvY2Vzcy4KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWFr
SGFzaFNldDxXZWJQcm9jZXNzUHJveHk+IG1fc2VydmljZVdvcmtlclByb2Nlc3NlczsKKyAgICBz
dGF0aWMgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiYgc2VydmljZVdvcmtlclByb2Nlc3Nl
cygpOwogICAgIGJvb2wgbV93YWl0aW5nRm9yV29ya2VyQ29udGV4dFByb2Nlc3NDb25uZWN0aW9u
IHsgZmFsc2UgfTsKLSAgICBib29sIG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNl
V29ya2VyIHsgZmFsc2UgfTsKICAgICBTdHJpbmcgbV9zZXJ2aWNlV29ya2VyVXNlckFnZW50Owog
ICAgIE9wdGlvbmFsPFdlYlByZWZlcmVuY2VzU3RvcmU+IG1fc2VydmljZVdvcmtlclByZWZlcmVu
Y2VzOwogICAgIE9wdGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXI+IG1fdXNl
ckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNlV29ya2VyOwpAQCAtNjQ4LDcgKzYxNSw2IEBA
IHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4gbV9h
dXRvbWF0aW9uQ2xpZW50OwogICAgIFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PiBtX2Rv
d25sb2FkQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0
b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsK
IAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9uU2Vzc2lvbj4gbV9hdXRvbWF0aW9uU2Vzc2lvbjsK
IApAQCAtNjgwLDggKzY0Niw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21lbW9yeVNhbXBsZXJF
bmFibGVkIHsgZmFsc2UgfTsKICAgICBkb3VibGUgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWwgeyAx
NDAwLjAgfTsKIAotICAgIFJlZlB0cjxXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU+IG1fd2Vic2l0
ZURhdGFTdG9yZTsKLQogICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBjaGFyKiwgUmVmUHRyPFdl
YkNvbnRleHRTdXBwbGVtZW50PiwgUHRySGFzaDxjb25zdCBjaGFyKj4+IFdlYkNvbnRleHRTdXBw
bGVtZW50TWFwOwogICAgIFdlYkNvbnRleHRTdXBwbGVtZW50TWFwIG1fc3VwcGxlbWVudHM7CiAK
QEAgLTcxNCw4ICs2NzgsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3Byb2Nlc3NUZXJtaW5h
dGlvbkVuYWJsZWQgeyB0cnVlIH07CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Byb2Nl
c3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKLQogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0
cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+PiBtX2RpY3Rpb25hcnlDYWxsYmFja3M7CiAKICNpZiBVU0Uo
U09VUCkKQEAgLTgyMCwzMSArNzgyLDEzIEBAIHByaXZhdGU6CiAjZWxzZQogICAgIGJvb2wgbV9p
c0RlbGF5ZWRXZWJQcm9jZXNzTGF1bmNoRGlzYWJsZWQgeyBmYWxzZSB9OwogI2VuZGlmCi0gICAg
Ym9vbCBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgeyBmYWxzZSB9OworICAgIHN0
YXRpYyBib29sIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsKIAogI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbj4gbV9kb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbjsKICNlbmRpZgotCi0jaWYg
UExBVEZPUk0oQ09DT0EpCi0gICAgT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBtX2VuZHBvaW50
TWVzc2FnZTsKLSNlbmRpZgogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlKQotewotICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkp
Ci0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2Up
LCAwKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSkK
LXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNl
bmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb0FsbFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNz
YWdlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5k
ZXggZDY2MTAzMzhiNmNmNjBhMjdhNmY3NWRhZWMzNDlhOGY3MmFiM2I4NS4uNTQ5MmE5ZTllYzZl
Mjg4ZTBmYmM5MWQyNTQ5YWUwOWIyMmQ2ZjcwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC03MzgsNyArNzM4LDcgQEAgdm9pZCBXZWJQcm9jZXNz
UHJveHk6OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHVpbnQ2NF90IHBsdWdpblByb2Nlc3NU
b2tlbiwgTWUKIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbihNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQogewotICAgIG1fcHJvY2Vzc1Bvb2wtPmdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOworICAgIHdlYnNpdGVE
YXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigq
dGhpcywgV1RGTW92ZShyZXBseSkpOwogfQogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQpAQCAt
OTU1LDkgKzk1NSw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmco
UHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBDOjpDb25uZWN0CiAgICAgfQogCiAjaWYgUExB
VEZPUk0oQ09DT0EpCi0gICAgYXV0byBlbmRwb2ludE1lc3NhZ2UgPSBwcm9jZXNzUG9vbCgpLnhw
Y0VuZHBvaW50TWVzc2FnZSgpOworICAgIGF1dG8gZW5kcG9pbnRNZXNzYWdlID0gd2Vic2l0ZURh
dGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkueHBjRW5kcG9pbnRNZXNzYWdlKCk7CiAgICAgaWYg
KGVuZHBvaW50TWVzc2FnZSkKLSAgICAgICAgeHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNzYWdlKGNv
bm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbmRwb2ludE1lc3NhZ2UuZ2V0KCkpOworICAg
ICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbigpLT54cGNDb25uZWN0
aW9uKCksIGVuZHBvaW50TWVzc2FnZSk7CiAjZW5kaWYKIAogICAgIFJFTEVBU0VfQVNTRVJUKCFt
X3dlYkNvbm5lY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4
IDdjNDQwODUxNjc3MzY4YjVkZjg5YTg2ZmY0ZDNiNTE1MzRiOTBiYjcuLmY1ZDBiOTVmOTVkNzkw
YzFhMzczZGU4YmNlODRiM2U1MTFlMTQyOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3Jl
Q29jb2EubW0KQEAgLTI4LDEwICsyOCwxMiBAQAogCiAjaW1wb3J0ICJDb29raWVTdG9yYWdlVXRp
bHNDRi5oIgogI2ltcG9ydCAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNpbXBvcnQgIk5l
dHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIlNhbmRib3hVdGlsaXRpZXMuaCIKICNpbXBv
cnQgIlN0b3JhZ2VNYW5hZ2VyLmgiCiAjaW1wb3J0ICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJv
eHkuaCIKICNpbXBvcnQgIldlYlByZWZlcmVuY2VzS2V5cy5oIgorI2ltcG9ydCAiV2ViUHJvY2Vz
c1Byb3h5LmgiCiAjaW1wb3J0ICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKICNp
bXBvcnQgIldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL05l
dHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgpAQCAtNDQsNiArNDYsNyBAQAogI2ltcG9ydCA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgogI2ltcG9y
dCA8d3RmL1VSTC5oPgorI2ltcG9ydCA8d3RmL2NvY29hL0VudGl0bGVtZW50cy5oPgogI2ltcG9y
dCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
QEAgLTU2Miw0ICs1NjUsMjEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWluaXRpYWxpemVB
cHBCb3VuZERvbWFpbnMoKQogfQogI2VuZGlmCiAKK2Jvb2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxl
bWVudCkKK3sKKyAgICByZXR1cm4gV1RGOjpoYXNFbnRpdGxlbWVudChuZXR3b3JrUHJvY2Vzcygp
LmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgp
KTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRw
b2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVzc2Fn
ZSkKK3sKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgeworICAgICAgICBp
ZiAocHJvY2Vzcy5zdGF0ZSgpICE9IEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6U3RhdGU6OlJ1bm5p
bmcpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFwcm9jZXNzLmNvbm5lY3Rp
b24oKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBhdXRvIGNvbm5lY3Rpb24gPSBw
cm9jZXNzLmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpOworICAgICAgICB4cGNfY29ubmVj
dGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbiwgZW5kcG9pbnRNZXNzYWdlLmdldCgpKTsKKyAg
ICB9Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggMDgzMGNhNzVhN2ZjMzhlNjQ1Yjc3NWIz
OWIzMzc1ZDRjMjA1MDM3ZC4uM2QyOTE1OTA0ZDNlNTc0MmI4NjcyMjVkYTgzZWVmMTBjMDc3Mzg4
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEv
V2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJTaG91bGRH
cmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgi
CiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRDYWNoZS5oIgorI2luY2x1ZGUgIldlYkNvb2tpZU1h
bmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYktpdDJJbml0aWFsaXplLmgiCiAjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0NhY2hlLmgiCkBAIC03NSw2ICs3
NiwxMCBAQAogI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgiCiAjZW5kaWYK
IAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkRlZmF1bHRXZWJCcm93c2VyQ2hlY2tz
LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBib29sIGFsbG93c1dl
YnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnM7CkBAIC04MywxMyArODgsMTkgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjphbGxvd1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMoKQog
ICAgIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMgPSB0cnVlOwogfQogCi1z
dGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBub25EZWZh
dWx0RGF0YVN0b3JlcygpCitzdGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURh
dGFTdG9yZSo+JiBhbGxEYXRhU3RvcmVzKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1VJVGhy
ZWFkKCkpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFBBTDo6U2Vzc2lvbklE
LCBXZWJzaXRlRGF0YVN0b3JlKj4+IG1hcDsKICAgICByZXR1cm4gbWFwOwogfQogCit2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKEZ1bmN0aW9uPHZvaWQoV2Vi
c2l0ZURhdGFTdG9yZSYpPiYmIGZ1bmN0aW9uKQoreworICAgIGZvciAoYXV0byogZGF0YVN0b3Jl
IDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgICAgICBmdW5jdGlvbigqZGF0YVN0b3Jl
KTsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZU5v
blBlcnNpc3RlbnQoKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYnNpdGVEYXRhU3Rv
cmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb246OmNyZWF0ZShJc1BlcnNpc3RlbnQ6Ok5v
KSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlRXBoZW1lcmFsU2Vzc2lvbklEKCkpKTsKQEAgLTEx
NSw3ICsxMjYsNyBAQCBXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbj4mJiBjb25maWd1cgogI2VuZGlmCiB7CiAgICAgV1RG
OjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1heWJlUmVnaXN0
ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAg
ICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwpAQCAtMTI4LDE3ICsxMzksMTIgQEAgV2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3Rv
cmUoKQogCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0g
UEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBBU1NFUlQobm9u
RGVmYXVsdERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOwotICAgICAgICBu
b25EZWZhdWx0RGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7Ci0gICAgICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW1vdmVTZXNz
aW9uKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBBU1NFUlQoYWxsRGF0YVN0
b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7CisgICAgYWxsRGF0YVN0b3JlcygpLnJl
bW92ZShtX3Nlc3Npb25JRCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW1vdmVTZXNzaW9uKCp0
aGlzKTsKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0gICAgICAgIGlmIChhdXRvKiBncHVQcm9j
ZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQotICAgICAg
ICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKKyAgICBp
ZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNy
ZWF0ZWQoKSkKKyAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lv
bklEKTsKICNlbmRpZgogfQogCkBAIC0xNjksMTcgKzE3NSwzMyBAQCBib29sIFdlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKQogICAgIHJldHVybiAhIWdsb2JhbERlZmF1
bHREYXRhU3RvcmUoKTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVy
V2l0aFNlc3Npb25JRE1hcCgpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyV2l0aFNl
c3Npb25JRE1hcCgpCiB7Ci0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpk
ZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBub25EZWZhdWx0RGF0
YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQo
cmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0byByZXN1bHQgPSBhbGxEYXRhU3Rv
cmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwg
cmVzdWx0LmlzTmV3RW50cnkpOworfQorCitXZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0
b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCit7CisgICAgcmV0dXJuIGFsbERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklEKTsKK30KKwor
TmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3MoKQor
eworICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykgeworICAgICAgICBpZiAobV9zZXNzaW9uSUQu
aXNFcGhlbWVyYWwoKSB8fCBtX3Nlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKQorICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNz
UHJveHk6OmRlZmF1bHROZXR3b3JrUHJvY2VzcygpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlKCk7CisgICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOwogICAgIH0KKworICAgIHJl
dHVybiAqbV9uZXR3b3JrUHJvY2VzczsKIH0KIAotV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURh
dGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCkKK05ldHdvcmtQcm9jZXNzUHJveHkmIFdlYnNpdGVEYXRhU3RvcmU6
Om5ldHdvcmtQcm9jZXNzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc2Vzc2lvbklEICE9IFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgPyBub25EZWZhdWx0RGF0YVN0b3JlcygpLmdl
dChzZXNzaW9uSUQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxXZWJzaXRlRGF0
YVN0b3JlJj4oKnRoaXMpLm5ldHdvcmtQcm9jZXNzKCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6cmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKQEAgLTE5NSwx
MiArMjE3LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1bnJlZ2lzdGVyUHJvY2VzcyhXZWJQ
cm9jZXNzUHJveHkmIHByb2Nlc3MpCiAgICAgbV9wcm9jZXNzZXMucmVtb3ZlKHByb2Nlc3MpOwog
fQogCi1XZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucygpCi17Ci0gICAgYXV0byBwb29scyA9IHByb2Nlc3NQb29scygx
KTsKLSAgICByZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8gbnVsbHB0ciA6IHBvb2xzLmJlZ2luKCkt
PmdldCgpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc29sdmVEaXJlY3Rvcmllc0lm
TmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9oYXNSZXNvbHZlZERpcmVjdG9yaWVzKQpAQCAtNDQw
LDI4ICs0NTYsMjEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseShP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICNlbmRpZgogCiAgICAgYXV0
byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlTmV0d29ya1Byb2Nlc3NBY2Nlc3NU
eXBlRm9yRGF0YUZldGNoKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgpKTsKLSAgICBpZiAobmV0
d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lKSB7Ci0gICAg
ICAgIGF1dG8gcG9vbHMgPSBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPT0gUHJvY2Vzc0FjY2Vz
c1R5cGU6OkxhdW5jaCA/IGVuc3VyZVByb2Nlc3NQb29scygpIDogcHJvY2Vzc1Bvb2xzKCk7Ci0g
ICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewotICAgICAgICAgICAgc3dp
dGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgUHJvY2Vz
c0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NU
eXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKHRoaXMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNl
IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgfQotCisgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vz
c1R5cGUpIHsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6CisgICAgICAgIG5l
dHdvcmtQcm9jZXNzKCk7CisgICAgICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsKKyAgICAg
ICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNo
ZWQ6CisgICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7CiAgICAgICAgICAgICBjYWxsYmFj
a0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCktPmZldGNoV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFU
eXBlcywgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0oV2Vi
c2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmZl
dGNoV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRpb25zLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkgewogICAgICAgICAgICAg
ICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKFdURk1vdmUod2Vi
c2l0ZURhdGEpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CisgICAgICAgIGJyZWFrOwogICAgIH0K
IAogICAgIGF1dG8gd2ViUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlV2ViUHJvY2Vzc0FjY2Vz
c1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwpAQCAtNzI0LDMx
ICs3MzMsMjQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICAgICBib29sIGRpZE5vdGlmeU5l
dHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSA9IGZhbHNlOwogI2VuZGlmCiAgICAgYXV0
byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlTmV0d29ya1Byb2Nlc3NBY2Nlc3NU
eXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwotICAgIGlmIChu
ZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsKLSAg
ICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQcm9jZXNzQWNj
ZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNzUG9vbHMoKTsK
LSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7Ci0gICAgICAgICAgICBz
d2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBQcm9j
ZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vz
c1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3ModGhpcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNh
c2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNj
ZXNzVHlwZSkgeworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKKyAgICAgICAg
bmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOworICAg
ICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVu
Y2hlZDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAgICAgIGNhbGxi
YWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRh
dGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xd
IHsKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vz
c2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsK
ICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFj
aygpOwogICAgICAgICAgICAgfSk7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKICAgICAgICAgICAgIGRpZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0
YSA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFBy
b2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgorICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBhdXRv
IHdlYlByb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZVdlYlByb2Nlc3NBY2Nlc3NUeXBlRm9yRGF0
YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwpAQCAtODkzLDE0ICs4OTUsOSBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJ
U1RJQ1MpCiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3MpKSB7CiAgICAgICAgIGlmICghZGlkTm90aWZ5TmV0d29ya1Byb2Nl
c3NUb0RlbGV0ZVdlYnNpdGVEYXRhKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHByb2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMs
IG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQs
IGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geworICAgICAg
ICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7Cisg
ICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
YWRkUGVuZGluZ0NhbGxiYWNrKCk7CkBAIC05OTQsMTIgKzk5MSwxMCBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVz
LCBjb25zdCBWZQogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKICAg
ICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAg
ICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAg
ICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQ
cm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5l
bnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAgICAgICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NB
Y2Nlc3NUeXBlOjpOb25lOgpAQCAtMTAyMSw3ICsxMDE2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29u
c3QgVmUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5h
ZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRhdGFUeXBl
cywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJh
YmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKKyAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKG1fc2Vzc2lv
bklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1lcywgSFNUU0NhY2hlSG9zdE5h
bWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29s
XSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2Fs
bGJhY2soKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC0xMTgwLDE4ICsxMTc1LDEy
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKFNlY29uZHMgc2Vjb25kcykKIHsKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rp
bmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZl
dGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtl
ckZldGNoVGltZW91dEZvclRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JU
ZXN0aW5nKCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6
OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2Vy
RmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0
U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJl
cGx5KCksIDApOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAg
LTEyMDEsOCArMTE5MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGlj
c0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50LCBDb21wbGV0CiAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0
TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50cnlDb3VudCwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMTEsOCArMTE5OSw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVu
ZVRhcmdldENvdW50LCBDb21wbGV0aW9uCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rv
d25UbyhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNE
b3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1l
KFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTIyMSw4ICsxMjA4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRH
cmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjwKIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9j
ZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCku
c2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1pbmltdW1UaW1l
QmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMzEsMjAgKzEyMTcsMTMgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1Jl
bW92YWwoU2Vjb25kcyBzZWNvbmRzLAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2VlbkRh
dGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGlt
ZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAgICAgCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmR1bXBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5n
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgICAgICBwcm9jZXNzLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Np
b25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kdW1wUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xMjU2LDEyICsxMjM1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1By
ZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2kKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ByZXZhbGVudFJlc291
cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQo
Y29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjczLDEyICsxMjQ3LDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5p
c0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNHcmFuZGZhdGhlcmVkKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTEyOTIsOCArMTI2MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVu
dFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzA3LDEwICsxMjc1
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVn
TW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGkKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFByZXZhbGVudFJlc291cmNlRm9yRGVi
dWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzVmVyeVByZXZh
bGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzIyLDEyICsxMjg3LDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwg
Q29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAg
cHJvY2Vzcy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzNDEs
MTAgKzEzMDEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZQogICAgIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRW
ZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lm
eVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzUzLDggKzEzMTAsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3Jl
RGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAg
ICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRDbGFzc2lm
eVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFsdWUsIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwobV9z
ZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwm
IHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzY4LDIyICsxMzI0LDE0IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVS
TCYgc3ViRnJhbWVVUkwsIGNvCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIHByb2Nlc3MtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1l
VVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkws
IGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4o
Y29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM5NywyMyArMTM0
NSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVE
b21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3Vy
Y2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VV
bmRlcihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVn
aXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYg
dXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xNDI3LDEwICsxMzY2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwKIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJj
ZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkws
IGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NDIsMTIgKzEzNzgsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3Vi
cmVzb3VyY2VVUgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNv
dXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9t
IH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwmIHVybFJl
ZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTQ1OSwxMiArMTM5MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJh
bWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVk
VG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVV
UkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NzYsMjUgKzE0MDIsMTQgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRv
cEZyYW1lVVJMLCBjb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRp
cmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJh
bWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGly
ZWN0aW5nVG8oY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJMJiB1cmxSZWRp
cmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJv
Y2Vzcy0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9u
SGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1JlZGly
ZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVk
aXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVk
VG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE1MDYsNjAgKzE0MjEsNDEg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFVS
TCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclByZXZhbGVu
dFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFs
dWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMo
bV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyht
X3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25J
RCwgW10geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdWJtaXRUZWxlbWV0cnko
bV9zZXNzaW9uSUQsIFtdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1
bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBTaG91
bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCBt
b2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVDbGVh
ckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgc2hvdWxk
R3JhbmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpU
aGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIHN0cnVjdCBDYWxsYmFja0FnZ3JlZ2F0b3IgOiBSZWZD
b3VudGVkPENhbGxiYWNrQWdncmVnYXRvcj4gewotICAgICAgICBDYWxsYmFja0FnZ3JlZ2F0b3Io
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCisgICAgc3RydWN0
IExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yIDogUmVmQ291bnRlZDxMb2NhbENhbGxiYWNrQWdncmVn
YXRvcj4geworICAgICAgICBMb2NhbENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlE
YXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIDogbV9jb21wbGV0aW9u
SGFuZGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgewogICAgICAgICAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAgICAgfTsKIAotICAgICAgICB+Q2Fs
bGJhY2tBZ2dyZWdhdG9yKCkKKyAgICAgICAgfkxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yKCkKICAg
ICAgICAgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMTU3
NCwzOCArMTQ3MCwzMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgICAgICBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRo
aXJkUGFydHlEYXRhPiYmKT4gbV9jb21wbGV0aW9uSGFuZGxlcjsKICAgICAgICAgVmVjdG9yPFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IG1fcmVzdWx0czsK
ICAgICB9OwotCi0gICAgUmVmUHRyPENhbGxiYWNrQWdncmVnYXRvcj4gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gYWRvcHRSZWYobmV3IENhbGxiYWNrQWdncmVnYXRvcihXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFJbW1lZGlhdGVseShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Ci0gICAgICAgICAgICBwcm9jZXNzUG9v
bC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcykuZ2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0o
VmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYg
ZGF0YSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVzdWx0KFdU
Rk1vdmUoZGF0YSkpOwotICAgICAgICAgICAgfSk7CisgICAgCisgICAgYXV0byBsb2NhbENhbGxi
YWNrQWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBMb2NhbENhbGxiYWNrQWdncmVnYXRvcihXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworICAgIAorICAgIGF1dG8gd3RmQ2FsbGJhY2tBZ2dy
ZWdhdG9yID0gV1RGOjpDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBsb2NhbENhbGxiYWNrQWdncmVnYXRvcl0geworICAgICAg
ICBuZXR3b3JrUHJvY2VzcygpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeSht
X3Nlc3Npb25JRCwgW2xvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yXShWZWN0b3I8V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7CisgICAgICAgICAg
ICBsb2NhbENhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVzdWx0KFdURk1vdmUoZGF0YSkpOwogICAg
ICAgICB9KTsKLSAgICB9CisgICAgfSk7CisgICAgCisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bv
b2wtPnNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KFt3dGZDYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVD
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hv
dWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7
IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ29va2llQmxvY2tp
bmdVcGRhdGUobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ29va2llQmxvY2tpbmdV
cGRhdGUobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNz
aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2
MTQsMjQgKzE1MDMsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZVN0YXRpc3Rp
Y3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmQKICAgICAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlU3RhdGlz
dGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2No
ZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lvbklELCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN0YXRp
c3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgcHJvY2Vzcy0+c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lv
bklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjQzLDIyICsxNTIxLDE0
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1cmwsIFNl
Y29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldExhc3RTZWVu
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBzZWNvbmRz
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kb21haW5JREV4aXN0c0luRGF0YWJhc2Uo
bV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmRv
bWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRp
c3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwxLCBj
b25zdCBVUkwmIHRvcEZyYW1lVXJsMiwgU2Vjb25kcyBsYXN0U2VlbiwgYm9vbCBoYWRVc2VySW50
ZXJhY3Rpb24sIFNlY29uZHMgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc0dyYW5k
ZmF0aGVyZWQsIGJvb2wgaXNQcmV2YWxlbnQsIGJvb2wgaXNWZXJ5UHJldmFsZW50LCB1bnNpZ25l
ZCBkYXRhUmVjb3Jkc1JlbW92ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE2NzAsMTAgKzE1NDAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiB0b3BG
cgogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPm1lcmdl
U3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDEgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4sIGhh
ZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhl
cmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0
b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIg
fSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
biwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVj
b3Jkc1JlbW92ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1
cmwsIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2ODUsMTggKzE1NTIsMTQgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwm
IHVybCwgYm9vbCBoYWQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1Nj
aGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVs
ZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElz
UnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MDQsOCArMTU2Nyw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxlCiAgICAgdXNlRXhwbGljaXRJVFBTdGF0ZSgpOwogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9u
SUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1f
c2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJ
ZGVudGlmaWVyIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYm
IGRvbWFpbnMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcxNiw3ICsxNTc4LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJv
eHlJZGVudGlmaWVyIHBhZ2VJRCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdlYlBh
Z2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxs
U3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1f
c2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIApAQCAtMTcyNCw4
ICsxNTg2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVy
YWN0aW9uKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkgKIHsKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFRp
bWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTczOSwxMCArMTYwMCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlckludGVy
YWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkCiAgICAgCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmxvZ1VzZXJJbnRlcmFj
dGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5sb2dV
c2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc1NCwxMyArMTYxMiw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVS
TCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgICAgIHByb2Nlc3MtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRp
b25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0hhZFVzZXJJbnRlcmFj
dGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omlz
UmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25zdCBV
UkwmIHRvcFVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE3NzIsMTMgKzE2MjQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVs
YXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25zdAogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlbGF0aW9uc2hp
cE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3OTIsMTAgKzE2
MzgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclVzZXJJbnRlcmFj
dGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRH
cmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgwOSwxMCArMTY1
Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwm
IHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MjEsMTAg
KzE2NjEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wg
dmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJgogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0YWJhc2UobV9z
ZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRD
cm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGZyb21V
UkwsIGNvbnN0IFVSTCYgdG9VUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE4MzMsNjIgKzE2NzAsMzggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwm
IGYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRDcm9zc1NpdGVMb2FkV2l0
aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9VUkwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0
Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJl
c2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklE
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGluY2x1ZGVIdHRw
T25seUNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVs
ZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVz
dGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5o
YXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5nKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0lzb2xhdGVk
U2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGREb3duZ3Jh
ZGVSZWZlcnJlckZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZERvd25ncmFkZVJl
ZmVycmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVz
dGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgIVBMQVRG
T1JNKENPQ09BKQpAQCAtMTkxOSwxMCArMTczMiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2ll
CiAgICAgICAgICAgICB3ZWJQcm9jZXNzLnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUo
YmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0KIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1f
c2Vzc2lvbklELCBibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSht
X3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRF
bmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkzMCwxMCAr
MTc0MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlCiAgICAgYXV0byBmbGFnID0gZW5hYmxl
ZCA/IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZZXMgOiBXZWJD
b3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87CiAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxk
RW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxh
ZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURh
dGFSZW1vdmFsTW9kZUZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTQxLDIwICsxNzQ4LDE0IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgYXV0
byBtb2RlID0gZW5hYmxlZCA/IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlOjpBbGxCdXRDb29raWVzIDogV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGU6Ok5vbmU7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0Rmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEZp
cnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgbW9k
ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0
aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRvU2FtZVNp
dGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RD
TkFNRURvbWFpbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmaXJzdFBhcnR5VVJMLCBjb25zdCBVUkwm
IGNuYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xOTY2LDggKzE3NjcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdAogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LnNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJz
dFBhcnR5VVJMLmhvc3QoKS50b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwg
Zmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVE
b21haW5Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NzksMTggKzE3NzksMTMgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0eUNOQU1F
RG9tYWluRm9yVGVzdGluZygKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJM
IH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRU
aGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3JhZ2UoKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdl
Q2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk5OCw4ICsxNzkzLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNl
cyhTZWNvbmRzIHNlY29uZHMsIEMKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9z
ZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Np
b25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKHNlY29uZHMpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0yMDA5LDI2
ICsxODAzLDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQ
cmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxl
bnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJl
c291cmNlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogI2Vsc2UK
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogI2VuZGlmCiB9CiAKLWJvb2wgV2Vic2l0ZURhdGFT
dG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29s
KSBjb25zdAotewotICAgIGlmIChhdXRvKiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9IHByb2Nlc3NQ
b29sLndlYnNpdGVEYXRhU3RvcmUoKSkKLSAgICAgICAgcmV0dXJuIHByb2Nlc3NQb29sRGF0YVN0
b3JlID09IHRoaXM7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm9jZXNz
UG9vbC5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICByZXR1cm4gbmV0d29ya1Byb2Nlc3NQcm94
eS0+aGFzU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBIYXNo
U2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29s
cyhzaXplX3QgbGltaXQpIGNvbnN0CiB7CiAgICAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bv
b2w+PiBwcm9jZXNzUG9vbHM7CkBAIC0yMDQzLDkgKzE4MjMsNiBAQCBIYXNoU2V0PFJlZlB0cjxX
ZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyhzaXplX3QgbGlt
aXQpIGNvbgogICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIENo
ZWNrIGlmIHdlJ3JlIG9uZSBvZiB0aGUgbGVnYWN5IGRhdGEgc3RvcmVzLgogICAgICAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgICAgICBpZiAoIWlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKCpwcm9jZXNzUG9vbCkp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAgICAgIHByb2Nlc3NQb29scy5h
ZGQocHJvY2Vzc1Bvb2wpOwogICAgICAgICAgICAgaWYgKHByb2Nlc3NQb29scy5zaXplKCkgPT0g
bGltaXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDg0LDggKzE4NjEsNyBAQCBzdGF0
aWMgU3RyaW5nIGNvbXB1dGVNZWRpYUtleUZpbGUoY29uc3QgU3RyaW5nJiBtZWRpYUtleURpcmVj
dG9yeSkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZp
Y2F0ZUZvckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJbmZvKiBjZXJ0aWZpY2F0ZSwgY29uc3Qg
U3RyaW5nJiBob3N0KQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9y
SG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1NwZWNpZmlj
SFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRlSW5mbygpLCBo
b3N0KSwgMCk7CiB9CiAKIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IFdlYnNp
dGVEYXRhU3RvcmU6Om1lZGlhS2V5T3JpZ2lucyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3Jh
Z2VEaXJlY3RvcnkpCkBAIC0yMTQwLDYgKzE5MTYsMzAgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpyZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5
LAogICAgIH0KIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJv
Y2VzcygpCit7CisgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX25ldHdvcmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsKKyAgICBtX25ldHdvcmtQcm9jZXNz
ID0gbnVsbHB0cjsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nl
c3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJlcGFyZVRv
U3VzcGVuZChJc1N1c3BlbnNpb25JbW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxs
U3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
bmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworfQorCit2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpCit7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOworfQorCiBib29sIFdlYnNpdGVE
YXRhU3RvcmU6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgY29uc3QKIHsKICNpZiBF
TkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjE2OSwxNyArMTk2OSwxNSBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJv
b2wgZW5hYmxlZCkKICAgICAgICAgCiAgICAgICAgIHJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNz
YXJ5KCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJv
Y2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkKG1fc2Vzc2lvbklELCB0cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKG1fc2Vzc2lvbklELCB0cnVlKSwgMCk7CisgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQ
cm9jZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZCh0cnVlKSwgbV9zZXNzaW9uSUQpOwotICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
bV9zZXNzaW9uSUQsIGZhbHNlKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNz
aW9uSUQsIGZhbHNlKSwgMCk7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKQogICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lv
bihNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
ZmFsc2UpLCBtX3Nlc3Npb25JRCk7Ci0gICAgfQogCiAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZCA9IGZhbHNlOwogI2Vsc2UKQEAgLTIxOTEsOCArMTk4OSw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFi
bGVkKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNr
KEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKGNh
bGxiYWNrKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5n
RXZlbnQodHJ1ZSkpOworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRy
dWUpLCAwKTsKICAgICB9CiAgICAgCiAgICAgbV9zdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayk7CkBAIC0yMjExLDggKzIwMDgsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGVkLCBD
b21wbGV0aQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2Rl
KG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShtX3Nlc3Np
b25JRCwgZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKGVuYWJsZWQpOwogICAgIFVOVVNFRF9QQVJBTShjb21wbGV0aW9uSGFuZGxlcik7
CkBAIC0yMjI3LDIwICsyMDIzLDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5pc1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSNlbmRp
ZgorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFs
KG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisjZWxzZQogICAgIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShib29sIGVuYWJsZWQpCiB7Ci0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01v
ZGUoZW5hYmxlZCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0cmlidXRpb25E
ZWJ1Z01vZGUoZW5hYmxlZCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNU
SUNTKQpAQCAtMjI2Miw0OCArMjA1MywxOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFy
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0luV2ViUHJvY2Vzc2VzKENvbXBsZXRpb25IYW5kbAogfQog
I2VuZGlmCiAKLVZlY3RvcjxXZWJDb3JlOjpDb29raWU+IFdlYnNpdGVEYXRhU3RvcmU6OnBlbmRp
bmdDb29raWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29weVRvVmVjdG9yKG1fcGVuZGluZ0Nv
b2tpZXMpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFkZFBlbmRpbmdDb29raWUoY29u
c3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1v
dmVJZihbJmNvb2tpZV0oYXV0byYgcGVuZGluZ0Nvb2tpZSkgewotICAgICAgICByZXR1cm4gcGVu
ZGluZ0Nvb2tpZS5pc0tleUVxdWFsKGNvb2tpZSk7Ci0gICAgfSk7Ci0gICAgbV9wZW5kaW5nQ29v
a2llcy5hZGQoY29va2llKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5k
aW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1fcGVuZGlu
Z0Nvb2tpZXMucmVtb3ZlKGNvb2tpZSk7Ci19Ci0gICAgCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmNsZWFyUGVuZGluZ0Nvb2tpZXMoKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMuY2xlYXIoKTsK
LX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgIGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQ
cm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmZsdXNoQ29va2llcyhzZXNzaW9u
SUQoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmZs
dXNoQ29va2llcyhzZXNzaW9uSUQoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2Vi
U29ja2V0KGJvb2wgYWxsb3dzKQogewotICAgIGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlBy
b2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyksIE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQ6OlJlcGx5KCks
IDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dz
KSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZv
cldlYlNvY2tldDo6UmVwbHkoKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xl
YXJDYWNoZWRDcmVkZW50aWFscygpCiB7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+Y2xl
YXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9uSUQoKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNz
aW9uSUQoKSksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpc3BhdGNoT25RdWV1
ZShGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pCkBAIC0yMzI5LDggKzIwOTEsNiBAQCBXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKIAog
ICAgIHJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7CiAKLSAgICBwYXJhbWV0ZXJzLnBl
bmRpbmdDb29raWVzID0gcGVuZGluZ0Nvb2tpZXMoKTsKLQogICAgIGF1dG8gcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RpcmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+cmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RpcmVjdG9yeSgpOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSByZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGlyZWN0b3J5SGFuZGxlOwogICAgIGlmICghcmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCkBAIC0yNDM1LDcgKzIxOTUsMTAgQEAgV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAgICAgcGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMuZW5hYmxlZCA9IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ7CiAjZW5k
aWYKICAgICBwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwotCisjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
YXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uID0gaGFzUmVxdWVz
dGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7CisjZW5kaWYKKyAgICAKICAgICBy
ZXR1cm4gcGFyYW1ldGVyczsKIH0KIApAQCAtMjQ2NSwxMCArMjIyOCw2IEBAIEFQSTo6SFRUUENv
b2tpZVN0b3JlJiBXZWJzaXRlRGF0YVN0b3JlOjpjb29raWVTdG9yZSgpCiAgICAgcmV0dXJuICpt
X2Nvb2tpZVN0b3JlOwogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdv
cmtQcm9jZXNzKCkKLXsKLX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3Jh
Z2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tl
cjo6T3JpZ2luRGV0YWlscz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFp
c1BlcnNpc3RlbnQoKSkgewpAQCAtMjQ3NiwyMyArMjIzNSwxNSBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxT
dG9yYWdlRAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklE
LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYm
IGRldGFpbHMpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWls
cykpOwotICAgICAgICB9KTsKLSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgZmV0Y2hpbmcgZnJv
bSBtdWx0aXBsZSBwb29scy4KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIEFTU0VSVCghY29t
cGxldGlvbkhhbmRsZXIpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0TG9jYWxTdG9yYWdlRGV0
YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdU
Rk1vdmUoZGV0YWlscykpOworICAgIH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+cmVzZXRRdW90
YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpAQCAtMjUxOCw3ICsyMjY5LDEyIEBA
IGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6aHR0cDNFbmFibGVkKCkKIHsKICAgICByZXR1cm4gZmFs
c2U7CiB9Ci0jZW5kaWYKKworYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hh
c0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oQ09DT0EpCiAKICNpZiAhVVNFKEdMSUIpCiBXVEY6
OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdl
RGlyZWN0b3J5KCkKQEAgLTI1MzAsMzUgKzIyODYsMTggQEAgV1RGOjpTdHJpbmcgV2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpCiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiBvbGRO
YW1lLCBVUkwmJiBuZXdOYW1lLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigqdGhpcyk7Ci0gICAgICAgICAgICBuZXR3b3Jr
UHJvY2Vzcy0+cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgb2xkTmFtZSwg
bmV3TmFtZSwgZGF0YVR5cGVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgICAgICB9
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YSht
X3Nlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgZGF0YVR5cGVzLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPmhhc0FwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0Fw
cEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBwQm91bmRTZXNzaW9uKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jbGVhckFwcEJv
dW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJBcHBCb3VuZFNlc3Npb24o
bV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTI1ODAsNyAr
MjMxOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1Rv
SVRQSWZJbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlCiAKICAgICBwcm9wYWdhdGVBcHBCb3Vu
ZERvbWFpbnMoZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpLmdldCgpLCAqYXBwQm91bmREb21haW5z
KTsKIAotICAgIGZvciAoYXV0byogc3RvcmUgOiBub25EZWZhdWx0RGF0YVN0b3JlcygpLnZhbHVl
cygpKQorICAgIGZvciAoYXV0byogc3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkpCiAg
ICAgICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhzdG9yZSwgKmFwcEJvdW5kRG9tYWlucyk7
CiB9CiAKQEAgLTI1ODgsMTAgKzIzMjcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFw
cEJvdW5kRG9tYWluc0ZvcklUUChjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYgogewog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnNldEFwcEJvdW5kRG9tYWluc0ZvclJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9u
SUQsIGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0QXBwQm91bmREb21haW5zRm9yUmVzb3VyY2VMb2FkU3RhdGlzdGljcyht
X3Nlc3Npb25JRCwgZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRp
ZgogCkBAIC0yNTk5LDE2ICsyMzM1LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRl
QnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3QgU3RyaW5nJiBidW5kCiB7CiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoYnVuZGxlSWRlbnRpZmllciwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnVwZGF0ZUJ1bmRsZUlkZW50
aWZpZXIoYnVuZGxlSWRlbnRpZmllciwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9j
ZXNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlmaWVyKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4IDBkYzkxZjIzYzQxNTQzOTVjOGVi
Zjg5MGYzNWJkMDE4MGNkNTFhYWQuLmY2OTA5ZjlhMzAzNjBjZWRmYjZjNTQ1ZDUwYTkyNGI0YTg2
ZjQ5NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTUzLDYgKzUzLDcgQEAKIAogI2lmIFBMQVRGT1JNKENP
Q09BKQogI2luY2x1ZGUgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CisjaW5jbHVkZSA8d3Rm
L09TT2JqZWN0UHRyLmg+CiAjZW5kaWYKIAogI2lmIFVTRShDVVJMKQpAQCAtNzUsNiArNzYsNyBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOwogY2xhc3Mg
U2VjS2V5UHJveHlTdG9yZTsKIGNsYXNzIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOworY2xhc3Mg
TmV0d29ya1Byb2Nlc3NQcm94eTsKIGNsYXNzIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOwog
Y2xhc3MgV2ViQ2VydGlmaWNhdGVJbmZvOwogY2xhc3MgV2ViUGFnZVByb3h5OwpAQCAtMTA5LDcg
KzExMSwxMiBAQCBwdWJsaWM6CiAgICAgV2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURhdGFT
dG9yZUNvbmZpZ3VyYXRpb24+JiYsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB+V2Vic2l0ZURhdGFT
dG9yZSgpOwogCi0gICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nTm9uRGVmYXVs
dERhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CisgICAgc3RhdGljIHZvaWQg
Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0YVN0b3JlJik+
JiYpOworICAgIAorICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKCkgY29u
c3Q7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MoKTsKKworICAgIHN0
YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6
OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlzUGVyc2lzdGVudCgpIGNvbnN0IHsgcmV0dXJuICFt
X3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9CiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTExOSw2ICsxMjYsMTEgQEAgcHVi
bGljOgogICAgIAogICAgIGNvbnN0IFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIHByb2Nl
c3NlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc2VzOyB9CiAKKyAgICB2b2lkIHRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9T
dXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQg
c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworICAg
IHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7CisKICAgICBib29sIHJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZChib29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1Z01vZGUoKSBjb25zdDsKQEAgLTIzNSwxNSArMjQ3LDggQEAgcHVibGljOgogCiAgICAgRGV2
aWNlSWRIYXNoU2FsdFN0b3JhZ2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4g
bV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bvb2wq
IHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlzQXNz
b2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycyBwYXJhbWV0ZXJzKCk7CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiBwZW5kaW5nQ29va2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tp
ZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29raWUo
Y29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVzKCk7
CiAgICAgdm9pZCBmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAg
ICB2b2lkIGNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKIApAQCAtMjUxLDYgKzI1NiwxMCBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYpOwog
CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRw
b2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVzc2Fn
ZSk7CisjZW5kaWYKKwogI2lmIFVTRShDVVJMKQogICAgIHZvaWQgc2V0TmV0d29ya1Byb3h5U2V0
dGluZ3MoV2ViQ29yZTo6Q3VybFByb3h5U2V0dGluZ3MmJik7CiAgICAgY29uc3QgV2ViQ29yZTo6
Q3VybFByb3h5U2V0dGluZ3MmIG5ldHdvcmtQcm94eVNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4g
bV9wcm94eVNldHRpbmdzOyB9CkBAIC0yNzIsOCArMjgxLDYgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbihXZWJDb3JlOjpNb2NrV2ViQXV0
aGVudGljYXRpb25Db25maWd1cmF0aW9uJiYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGRpZENyZWF0
ZU5ldHdvcmtQcm9jZXNzKCk7Ci0KICAgICBjb25zdCBXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJh
dGlvbiYgY29uZmlndXJhdGlvbigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi5nZXQoKTsgfQog
CiAgICAgV2Vic2l0ZURhdGFTdG9yZUNsaWVudCYgY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQu
Z2V0KCk7IH0KQEAgLTI4Myw2ICsyOTAsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbmFtZU9y
aWdpbkluV2Vic2l0ZURhdGEoVVJMJiYsIFVSTCYmLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAgIGJvb2wgbmV0d29ya1Byb2Nl
c3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CisKICNpZiBFTkFCTEUo
REVWSUNFX09SSUVOVEFUSU9OKQogICAgIFdlYkRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNj
ZXNzQ29udHJvbGxlciYgZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVy
KCkgeyByZXR1cm4gbV9kZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXI7
IH0KICNlbmRpZgpAQCAtMzU5LDcgKzM2OCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQg
cmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwg
V2FsbFRpbWUgbW9kaWZpZWRTaW5jZSk7CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlz
KGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgY29uc3QgSGFzaFNldDxX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAKLSAgICB2b2lkIG1heWJlUmVnaXN0ZXJX
aXRoU2Vzc2lvbklETWFwKCk7CisgICAgdm9pZCByZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsK
IAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykKICAgICBzdGF0aWMgT3B0aW9uYWw8SGFz
aFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4+IGFwcEJvdW5kRG9tYWluc0lmSW5pdGlh
bGl6ZWQoKTsKQEAgLTM5Nyw4ICs0MDYsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wZXJzaXN0
ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkIHsgdHJ1ZSB9OwogI2VuZGlmCiAKLSAgICBIYXNo
U2V0PFdlYkNvcmU6OkNvb2tpZT4gbV9wZW5kaW5nQ29va2llczsKLSAgICAKICAgICBXZWFrSGFz
aFNldDxXZWJQcm9jZXNzUHJveHk+IG1fcHJvY2Vzc2VzOwogCiAgICAgYm9vbCBtX2lzSXRwU3Rh
dGVFeHBsaWNpdGx5U2V0IHsgZmFsc2UgfTsKQEAgLTQxOSw2ICs0MjYsNyBAQCBwcml2YXRlOgog
ICAgIFVuaXF1ZVJlZjxXZWJzaXRlRGF0YVN0b3JlQ2xpZW50PiBtX2NsaWVudDsKIAogICAgIFJl
ZlB0cjxBUEk6OkhUVFBDb29raWVTdG9yZT4gbV9jb29raWVTdG9yZTsKKyAgICBSZWZQdHI8TmV0
d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKIAogI2lmIEhBVkUoQVBQX1NTTykK
ICAgICBVbmlxdWVSZWY8U09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I+IG1fc29BdXRob3JpemF0
aW9uQ29vcmRpbmF0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCmluZGV4IDBl
MGMwNmUxZGVkNDJjMTRiODAyZTE1ODlmMzFkYzYyOTgyYWMzOTMuLjY0YjZjNzRkMDg2ZWM0NWJi
NjJkYTZlZTA4MjIzYjI4ZGI3M2E1N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwu
Y3BwCkBAIC00Miw4ICs0Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TmV0d29ya1By
b3h5U2V0dGluZ3MoV2ViQ29yZTo6Q3VybFByb3h5U2V0dGluZ3MmJiBwcm94CiB7CiAgICAgbV9w
cm94eVNldHRpbmdzID0gV1RGTW92ZShwcm94eVNldHRpbmdzKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRU
b05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1By
b3h5U2V0dGluZ3MobV9zZXNzaW9uSUQsIG1fcHJveHlTZXR0aW5ncykpOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNl
dHRpbmdzKG1fc2Vzc2lvbklELCBtX3Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0
YVN0b3JlU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3Vw
L1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcAppbmRleCAxMmY5Y2Q4MTliNmRjY2E4YWM1MDkyYTMw
ZGQ5M2M1M2I4ZWU5MzQyLi42Zjk2M2YxNDIxMDA0NzU4ZTJkNjVlZDk2MjZlMmE0OWEzZjRmOTEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dl
YnNpdGVEYXRhU3RvcmVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcApAQCAtMzksOCArMzksNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMoV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMmCiAgICAgYXV0byYgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
ID0gcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgbmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBtX3BlcnNp
c3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQ7CiAKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bv
b2wgPSBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHBy
b2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2ll
UGVyc2lzdGVudFN0b3JhZ2UobV9zZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5j
b29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFu
YWdlcigpLmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKQEAgLTUyLDggKzUxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJz
aXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gZW5hYmxl
ZDsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQobV9zZXNzaW9uSUQs
IG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCkpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFBlcnNpc3RlbnRDcmVkZW50
aWFsU3RvcmFnZUVuYWJsZWQobV9zZXNzaW9uSUQsIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9y
YWdlRW5hYmxlZCksIDApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCmluZGV4
IDBhODRhNzU5MGQ5YTk4NWJmYzk5Njg0YTQ4OTUxMzc0ZTViMjk0MjkuLjI3ZjIzZWEwNjVkYzc1
Y2U0YTgyNzBjNTc2ZWEyYWE1NWFiMGRjOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcApAQCAtNDQsNyArNDQsNyBAQCB2
b2lkIFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVu
Y2hlcjo6TGF1bmNoT3B0aW9ucyYgbAogICAgICAgICBpZiAoIWRhdGFTdG9yZSkgewogICAgICAg
ICAgICAgLy8gUHJld2FybWVkIHByb2Nlc3NlcyBkb24ndCBoYXZlIGEgV2Vic2l0ZURhdGFTdG9y
ZSB5ZXQsIHNvIHVzZSB0aGUgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlIGZyb20gdGhlIFdlYlBy
b2Nlc3NQb29sLgogICAgICAgICAgICAgLy8gVGhlIHByb2Nlc3Mgd29uJ3QgYmUgdXNlZCBpZiBj
dXJyZW50IFdlYnNpdGVEYXRhU3RvcmUgaXMgZGlmZmVyZW50IHRoYW4gdGhlIFdlYlByb2Nlc3NQ
b29sIHByaW1hcnkgb25lLgotICAgICAgICAgICAgZGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC0+
d2Vic2l0ZURhdGFTdG9yZSgpOworICAgICAgICAgICAgZGF0YVN0b3JlID0gV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwogICAgICAgICB9CiAKICAgICAgICAgQVNT
RVJUKGRhdGFTdG9yZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3Vw
L1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
c291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAppbmRleCA5ZjdiZTNjOTQxYjZjZDBh
MWI5NGNiMTM2MDk4ZjNhMDQxY2VmZjk5Li5hYzA0ZTM4YTU3YjIxNTliZWI0MmYzODQ3OWI0NGY1
ZTI2ZGVkYmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNv
b2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3Nv
dXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKIAorI2lu
Y2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2Vy
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogCkBAIC0zMyw4ICszNCw4
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0
Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBT
dHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlIHN0b3Jh
Z2VUeXBlKQogewotICAgIG1fY29va2llUGVyc2lzdGVudFN0b3JhZ2VNYXAuc2V0KHNlc3Npb25J
RCwgc3RkOjptYWtlX3BhaXIoc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSk7Ci0gICAgcHJvY2Vz
c1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFn
ZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0
b3JhZ2VUeXBlKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSwgMCk7CiB9
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVQZXJzaXN0ZW50U3RvcmFn
ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUmIHN0b3JhZ2VUeXBlKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCmluZGV4IGJm
YmJmOTY2NGU0ODM1MzA5NzA5NzExZGZkNmMxMzQxNTczMmJkYWMuLjdmZTRhY2EwYzVkMmQwZTdm
YzBkOWQ1YTRmYTI3ZWJjYzgwYTY3NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKQEAgLTM3LDMwICszNywyNCBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXpl
TmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRl
cnMpCiB7Ci0gICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmIGRlZmF1bHRTZXNz
aW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgIHN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclBy
b3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShkZWZhdWx0U2Vzc2lvblBhcmFtZXRl
cnMuc2Vzc2lvbklELCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0
b3JhZ2VQYXRoLCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3Jh
Z2VUeXBlKTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBkZWZhdWx0U2Vz
c2lvblBhcmFtZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fd2Vi
c2l0ZURhdGFTdG9yZS0+cGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpOworICAg
IC8vIEZJWE1FOiBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5IHNob3VsZCBiZSBtb3Zl
ZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KKyAgICAvLyBGSVhNRTogbV9pZ25vcmVUTFNFcnJv
cnMgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlIG9yIHJlbW92ZWQuCisg
ICAgLy8gRklYTUU6IG1fbmV0d29ya1Byb3h5U2V0dGluZ3Mgc2hvdWxkIGJlIG1vdmVkIHRvIHRo
ZSBXZWJzaXRlRGF0YVN0b3JlLgogCi0gICAgcGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kg
PSBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5OwotICAgIHBhcmFtZXRlcnMuaWdub3Jl
VExTRXJyb3JzID0gbV9pZ25vcmVUTFNFcnJvcnM7CiAgICAgcGFyYW1ldGVycy5sYW5ndWFnZXMg
PSB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCk7Ci0gICAgcGFyYW1ldGVycy5wcm94eVNldHRpbmdz
ID0gbV9uZXR3b3JrUHJveHlTZXR0aW5nczsKICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlU
UERhdGFiYXNlID0gdHJ1ZTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExT
RXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQogeworICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMg
dG8gV2Vic2l0ZURhdGFTdG9yZS4KICAgICBtX2lnbm9yZVRMU0Vycm9ycyA9IGlnbm9yZVRMU0Vy
cm9yczsKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgbmV0d29ya1Byb2Nlc3Mo
KS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX2ln
bm9yZVRMU0Vycm9ycyksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXROZXR3b3Jr
UHJveHlTZXR0aW5ncyhjb25zdCBXZWJDb3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3MmIHNl
dHRpbmdzKQogeworICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMgdG8gV2Vic2l0ZURhdGFTdG9yZS4K
ICAgICBtX25ldHdvcmtQcm94eVNldHRpbmdzID0gc2V0dGluZ3M7Ci0gICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRpbmdz
KSwgMCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCA5OGIzNmNjN2FkNzUxYWJhMTMwOTc3NzMyODQ2OWEwNjRiMWMxYWVkLi4yM2U0
ZDEzNmIxMWM3ODM1ZTE0ZWMxZWI0NWQ1MWI3NWU3NjA5OTdjIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMjAtMDkt
MjEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBNb3ZlIE5ldHdvcmtQcm9jZXNzUHJveHkgb3duZXJzaGlwIGZyb20gV2ViUHJvY2Vzc1Bvb2wg
dG8gV2Vic2l0ZURhdGFTdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE2MDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTW9zdCBjaGFuZ2VzIHRvIHRlc3RzIGFyZSBqdXN0IGNhbGxpbmcgYSBmdW5j
dGlvbiBvbiB0aGUgV0tXZWJzaXRlRGF0YVN0b3JlIGluc3RlYWQgb2YgdGhlIFdLUHJvY2Vzc1Bv
b2wKKyAgICAgICAgYmVjYXVzZSB3ZSB3YW50IHRvIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBuZXR3
b3JrIHByb2Nlc3MgYW5kIGl0IGhhcyBhIG5ldyBvd25lci4KKyAgICAgICAgRXhjZXB0aW9ucyBh
cmUgbm90ZWQgaW5saW5lLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQv
TmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvRG93bmxvYWQubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpkb3dubG9hZEF0UmF0
ZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3Bv
aW50V0FMLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9W
Mi5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW06CisgICAgICAgIChURVNU
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRh
dGFiYXNlUHJvY2Vzc0tpbGwubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbToKKyAgICAg
ICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5k
ZXhlZERCUGVyc2lzdGVuY2UubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tOgor
ICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JbmRleGVkREJUZW1wRmlsZVNpemUubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1t
OgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9OZXR3b3JrUHJvY2Vzcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3Rl
bnREYXRhU3RvcmUubW06CisgICAgICAgIChjaGVja1JlY292ZXJ5QWZ0ZXJDcmFzaCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdh
dGlvbi5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgVGhpcyB0ZXN0
IHdhcyBtYWtpbmcgYSBXS1dlYnNpdGVEYXRhU3RvcmUsIGdldHRpbmcgaXRzIHJlc291cmNlIGxv
YWQgc3RhdGlzdGljcyBkaXJlY3RvcnksCisgICAgICAgIHB1dHRpbmcgdGhpbmdzIGluIHRoYXQg
ZGlyZWN0b3J5LCB0aGVuIHN0YXJ0aW5nIHRoZSBuZXR3b3JrIHByb2Nlc3MgYW5kIG1ha2luZyBz
dXJlIGV2ZXJ5dGhpbmcKKyAgICAgICAgd29ya3Mgd2hlbiBpbml0aWFsaXppbmcgdGhlIG5ldHdv
cmsgcHJvY2Vzcy4gIE5vdywgbmV0d29yayBwcm9jZXNzIGluaXRpYWxpemF0aW9uIGhhcHBlbnMg
d2hlbiBhCisgICAgICAgIFdLV2Vic2l0ZURhdGFTdG9yZSBpcyBpbnN0YW50aWF0ZWQsIHNvIHdl
IG5lZWQgdG8gcHV0IHRoaW5ncyB0aGVyZSBiZWZvcmUgaW5zdGFudGlhdGluZyBhIFdLV2Vic2l0
ZURhdGFTdG9yZS4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Nl
cnZpY2VXb3JrZXJCYXNpYy5tbToKKyAgICAgICAgQmVmb3JlIHRoaXMgY2hhbmdlLCBlYWNoIFdL
UHJvY2Vzc1Bvb2wgaGFkIGl0cyBvd24gbmV0d29yayBwcm9jZXNzLCB3aGljaCBob2xkcyB0aGUg
c2VydmljZSB3b3JrZXIgcmVnaXN0cnkKKyAgICAgICAgZm9yIHRoZSBXZWJzaXRlRGF0YVN0b3Jl
cyB1c2VkIHdpdGggdGhhdCBwcm9jZXNzIHBvb2wuICBOb3csIHRoZSBuZXR3b3JrIHByb2Nlc3Mg
c3RpbGwgbmVlZHMgdG8gaGF2ZSBhIHNlcnZpY2UKKyAgICAgICAgd29ya2VyIHJlZ2lzdHJ5IGlu
IGl0LCBidXQgd2hlbiB3ZSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGl0IGxvb2tpbmcgZm9yIGEg
d2ViIHByb2Nlc3MgdG8gcnVuIHRoZSBzZXJ2aWNlCisgICAgICAgIHdvcmtlciwgd2UgZ28gYXJi
aXRyYXJpbHkgdG8gdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCB0aGF0IGhhcyBhIHByb2Nlc3Mgd2Ug
Y2FuIHVzZS4gIFRoaXMgbG9naWMgaXMgaW4gCisgICAgICAgIFdlYlByb2Nlc3NQb29sOjplc3Rh
Ymxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MuICBCZWNhdXNlIHdl
IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sIGVhY2gKKyAgICAgICAgdGltZSwgc2V0dGluZyB0
aGUgY3VzdG9tIHVzZXIgYWdlbnQgdG8gdHdvIGRpZmZlcmVudCB0aGluZ3MgaW4gdHdvIGRpZmZl
cmVudCBwcm9jZXNzIHBvb2xzIGNhdXNlcyBvbmx5IG9uZQorICAgICAgICB0byBiZSB1c2VkLiAg
VGhpcyBpcyBub3QgYSBwcm9ibGVtIGluIHByYWN0aWNlLCB0aG91Z2gsIGJlY2F1c2UgdGhlIG9u
bHkgYXBwbGljYXRpb24gdGhhdCB1c2VzIHRoZSBTUEkgdG8KKyAgICAgICAgc2V0IGEgc2Vydmlj
ZSB3b3JrZXIncyBjdXN0b20gdXNlciBhZ2VudCBpcyBTYWZhcmksIHdoaWNoIG9ubHkgaGFzIG9u
ZSBwcm9jZXNzIHBvb2wuICBUaGlzIHRlc3Qgc3RpbGwgdmVyaWZpZXMKKyAgICAgICAgdGhhdCBh
IHVzZXIgYWdlaW50IGlzIGNvcnJlY3RseSBzZW50LgorICAgICAgICBTaW1pbGFybHksIHRoZSB0
ZXN0cyB0aGF0IGNvdW50IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3NlcyBlaXRoZXIgaGF2ZSBkaWZm
ZXJlbnQgcmVzdWx0cyBvciBuZWVkIHRvIGJlIHJ1biB3aXRoCisgICAgICAgIG9uZSBwcm9jZXNz
IHBvb2wgcGVyIHBhcmVudCBwcm9jZXNzLiAgVG8ga2VlcCB0aGUgcmVzdWx0cyB0aGUgc2FtZSwg
SSBzZXBhcmF0ZWQgdGhlIHRlc3RzIGludG8gZGlmZmVyZW50CisgICAgICAgIFRFU1QoU2Vydmlj
ZVdvcmtlcnMsIC4uLikgbWFjcm9zIHdoaWNoIGFyZSBydW4gaW4gc2VwYXJhdGUgcGFyZW50IHBy
b2Nlc3Nlcy4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRU
UENvb2tpZVN0b3JlLm1tOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRl
IHdlYlZpZXc6cnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTppbml0aWF0ZWRCeUZy
YW1lOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVV
SURlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tp
ZVVJRGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAg
VGhpcyBpcyB0aGUgd2hvbGUgcG9pbnQgb2YgbWUgZG9pbmcgdGhpcy4KKyAgICAgICAgSSB0b29r
IGEgdGVzdCB0aGF0IHdhcyBmbGFreSBvbmx5IG9uIGlPUyAoYmVjYXVzZSBvZiBkaWZmZXJlbnQg
TlNIVFRQQ29va2llU3RvcmFnZSBzeW5jaW5nIGJlaGF2aW9yKSBhbmQgbWFkZQorICAgICAgICBp
dCBmbGFreSBub3doZXJlIChmaW5nZXJzIGNyb3NzZWQhKSBhbmQgYWRkZWQgYSB0ZXN0IHRoYXQg
Y29ycmVjdGx5IGhhbmRsZXMgc2Vzc2lvbiBjb29raWVzIGxpa2Ugd2UgY291bGQgbm90CisgICAg
ICAgIGJlZm9yZSB0aGlzIGNoYW5nZS4KKyAgICAgICAgSSBhbHNvIHJlLXVzZWQgc29tZSB0ZXN0
IGluZnJhc3RydWN0dXJlIGFuZCBtYWRlIGl0IHN0b3AgdXNpbmcgcHJvY2Vzcy1nbG9iYWwgc3Rh
dGljIHZhcmlhYmxlcyBmb3IgdGVzdCBzdGF0ZS4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbToKKyAgICAgICAgKFRF
U1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURh
dGFTdG9yZUN1c3RvbVBhdGhzLm1tOgorICAgICAgICAocnVuV2Vic2l0ZURhdGFTdG9yZUN1c3Rv
bVBhdGhzKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0
ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp0ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0
Zm9ybUFkanVzdENvbnRleHQpOgorICAgICAgICBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nIGlzIG5vdCBuZWVkZWQsIHNvIEkgcmVtb3Zl
ZCBpdC4KKyAgICAgICAgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUgaXNuJ3Qg
bmVlZGVkIGFueSBtb3JlIGJlY2F1c2UgV0tDb250ZXh0UmVmIChXZWJQcm9jZXNzUG9vbCkgZG9l
c24ndAorICAgICAgICBvd24gYSBuZXR3b3JrIHByb2Nlc3MgYW55IG1vcmUsIHNvIGl0IGRvZXNu
J3QgY2FyZSB3aGljaCBpcyB0aGUgZGVmYXVsdCBXZWJzaXRlRGF0YVN0b3JlLgorICAgICAgICBJ
biBmYWN0LCB0aGUgImRlZmF1bHQiIFdlYnNpdGVEYXRhU3RvcmUgaXNuJ3QgcmVhbGx5IGltcG9y
dGFudCBpbiB0aGUgbmV0d29yayBwcm9jZXNzIGFueSBtb3JlLgorCiAyMDIwLTA5LTIxICBLYXRl
IENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGFi
b3V0OmJsYW5rIHN1YmZyYW1lIGxvYWRzIGZvciBub24gYXBwLWJvdW5kIHRvcCBmcmFtZXMKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNz
Q3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCmluZGV4
IDk3Mzg5ZjAxZmYyZWU5OWI3ODNiMGI1MjEwODA3NGYxYTgxYjY5ODEuLjMzZjQ1NGM1Y2Q1OWI0
OGE3Njk4YWFiNTZlNjExY2Y2ZjA5YzlmNGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24u
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3ND
cmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8
V2ViS2l0L1dLUHJvY2Vzc0dyb3VwUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vz
c1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2lt
cG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktp
dC9XZWJLaXQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtMTQ2LDggKzE0Nyw4
IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc1JlbGF1bmNoT25MYXVuY2hGYWlsdXJlKQog
CiAgICAgLy8gQ29uc3R1Y3RpbmcgYSBXZWJWaWV3IHN0YXJ0cyBhIG5ldHdvcmsgcHJvY2VzcyBz
byB0ZXJtaW5hdGUgdGhpcyBvbmUuIFRoZSBwYWdlIGxvYWQgYmVsb3cgd2lsbCB0aGVuIHJlcXVl
c3QgYSBuZXR3b3JrIHByb2Nlc3MgYW5kIHdlCiAgICAgLy8gbWFrZSB0aGlzIG5ldyBuZXR3b3Jr
IHByb2Nlc3MgbGF1bmNoIGNyYXNoIG9uIHN0YXJ0dXAuCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgW3Byb2Nlc3NQb29sIF9tYWtlTmV4dE5ldHdvcmtQ
cm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmddOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gZGVs
ZWdhdGUgPSBhZG9wdE5TKFtbTW9uaXRvcldlYkNvbnRlbnRDcmFzaE5hdmlnYXRpb25EZWxlZ2F0
ZSBhbGxvY10gaW5pdF0pOwogICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxl
Z2F0ZS5nZXQoKV07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0Rvd25sb2FkLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9Eb3dubG9hZC5tbQppbmRleCBiN2VkOTk5MzlmZDU5ZjIyOGE3ZThiZDc0OTcxMmY1MzY2MDE1
NjE2Li4xODE5MTMxYzlhMGZlYjMwYjFhMmYwY2ZjZDg3YmYyMDQ1ZWJiM2Y0IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0KQEAgLTg4
OSw5ICs4ODksOSBAQCB2b2lkIGRvd25sb2FkQXRSYXRlKGRvdWJsZSBkZXNpcmVkS2JwcywgdW5z
aWduZWQgc3BlZWRNdWx0aXBsaWVyLCBBcHBSZXR1cm5zVG9GbwogICAgIHJlY2VpdmVkRGF0YSA9
IGZhbHNlOwogICAgIFV0aWw6OnJ1bigmcmVjZWl2ZWREYXRhKTsKICAgICAvLyBTdGFydCB0aGUg
RG93bmxvYWRNb25pdG9yJ3MgdGltZXIuCi0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnBy
b2Nlc3NQb29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOllFU107CisgICAgW1t3ZWJWaWV3
IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91
bmQ6WUVTXTsKICAgICBpZiAocmV0dXJuVG9Gb3JlZ3JvdW5kID09IEFwcFJldHVybnNUb0ZvcmVn
cm91bmQ6OlllcykKLSAgICAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29s
IF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOk5PXTsKKyAgICAgICAgW1t3ZWJWaWV3IGNvbmZp
Z3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9d
OwogICAgIGRpZENhbmNlbCA9IGZhbHNlOwogICAgIFV0aWw6OnJ1bigmZGlkQ2FuY2VsKTsKICAg
ICB0ZXJtaW5hdGVTZXJ2ZXIgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tCmluZGV4IDVjZDdhYmRh
MDFkMTk3NDdkY2VkNDVhYmVlOTllY2IxYzE0ZDYxNjAuLmQ3N2E2ZmQ5ODc5ZTQzZjcwMTFkZGFm
OTJjM2E3OTdmM2ZjMTM3MzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0KQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0
YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2Vi
S2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Vz
ZXJTdHlsZVNoZWV0Lmg+CkBAIC04Niw3ICs4Nyw3IEBAIFRFU1QoSW5kZXhlZERCLCBDaGVja3Bv
aW50c1dBTEF1dG9tYXRpY2FsbHkpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRp
b24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxv
Y10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFk
ZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07
CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZp
ZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3Qo
MCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0
ZVJlY292ZXJ5Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJE
ZWxldGVSZWNvdmVyeS5tbQppbmRleCBjOGFmMWQyNDNjNGZlYjU4YWM5ODRkYWYxNGQ4MTUzMWE3
Y2MzYzczLi5iYmYxYTE1MjE1ZGMxZmQyOGRmZGRiOWUzNDFiNjRmOWMwMDhmNGM0IDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292
ZXJ5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVs
ZXRlUmVjb3ZlcnkubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nl
c3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVy
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRl
Lmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmln
dXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01Nyw3
ICs1OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBEZWxldGVSZWNvdmVyeSkKICAgICBSZXRhaW5QdHI8
V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJD
b250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBu
YW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQ
b29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCku
d2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29w
eSB0aGUgaW5jb25zaXN0ZW50IGRhdGFiYXNlIGZpbGVzIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3Rv
cnkKICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3Vy
Y2U6QCJJREJEZWxldGVSZWNvdmVyeSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVj
dG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0gYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0K
aW5kZXggOTVjY2EwY2UyODE2ZmYxYTZhNDU1YWQwYmQyYzhhNGFhNGYyN2ZlZC4uODhhNTNmNjFk
OWQ5ODI2NTdiOTY1ZWY4YTZjZWJhNzkxZWZmMTc1NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5t
bQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2Vi
S2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAj
aW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU4LDcgKzU5LDcgQEAgVEVT
VChJbmRleGVkREIsIEluZGV4VXBncmFkZVRvVjIpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0Nv
bmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJh
dGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRy
b2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RI
YW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRh
U3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIENvcHkgdGhlIGluY29u
c2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAgTlNV
UkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiSW5kZXhV
cGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktp
dEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1Yy
Lm1tCmluZGV4IGZmYTVhNzg3OGE0NzMyYjhlYzI0NWM5MDUzZmQxN2VlNTk1NmZhM2QuLjQwM2Uw
ZmZhODIxMjM0NTFjNDY2ZmVlY2MzMjRmOWM2ZTc2MWQ0M2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRv
VjIubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmpl
Y3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2Vi
S2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVu
dENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJh
dGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQu
aD4KQEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJbmRleGVkREIsIElEQk9iamVjdFN0b3JlSW5mb1Vw
Z3JhZGVUb1YyKQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1
cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsK
ICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNz
YWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
KyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IGRhdGFiYXNlIGZpbGVzIHdpdGggb2xkIE9iamVj
dFN0b3JlSW5mbyBzY2hlbWEgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeS4KICAgICBOU1VSTCAq
dXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJPYmplY3RT
dG9yZUluZm9VcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAi
VGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9j
ZXNzS2lsbC5tbQppbmRleCA2ODc0NTI5ZWJiZjM3ODUxOGQ5M2UwYTA4MjFmNjMwMTJjZmE2ZDVm
Li43MzA3N2VjZGZkMzY1YjUyOTA1M2Q0N2NiYTJhMTRlZDA1MWVkNmVhIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJv
Y2Vzc0tpbGwubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0
IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJD
b250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25m
aWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQ
cm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KQEAg
LTkyLDcgKzkzLDcgQEAgVEVTVChJbmRleGVkREIsIERhdGFiYXNlUHJvY2Vzc0tpbGwpCiAgICAg
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAg
ICAgICAgaWYgKCFraWxsZWREQlByb2Nlc3MgJiYgb3BlblJlcXVlc3RVcGdyYWRlTmVlZGVkKSB7
CiAgICAgICAgICAgICBraWxsZWREQlByb2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAg
ICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJv
Y2Vzcy5tbQppbmRleCA3ZjYyNjQ1ZDk5NjBlZGU5NjBjMDAxYzI3MmI2NTAzOTM5MDExNjMyLi42
ZjY3ZGMyN2VkYzNkMjc0NWIxNzBlNDgyYmNkOTBlODQ5NGNiOTVhIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11
bHRpUHJvY2Vzcy5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNv
bnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZp
Z3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tV
c2VyU3R5bGVTaGVldC5oPgogI2ltcG9ydCA8d3RmL0RlcXVlLmg+CkBAIC02OSw3ICs3MCw3IEBA
IFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJNdWx0aVByb2Nlc3MpCiAgICAgUmV0YWluUHRyPFdL
V2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3
Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29u
dGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFt
ZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9v
bCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFJldGFpblB0
cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJh
dGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQppbmRleCBiMzJjZTRhNWY3
Mzg2M2FlZGRjYjkxOTBiNWI0MzcwZTM3NDQzYjVlLi5kNjIyMDMyMmU0NzhkMWRhYzc4ZjA2OTY3
YzNiNjQzYmZkNjJmOWJmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KQEAgLTc4LDcgKzc4
LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlBlcnNpc3RlbmNlKQogICAgIHdlYlZpZXcg
PSBuaWw7CiAKICAgICAvLyBUZXJtaW5hdGUgdGhlIG5ldHdvcmsgcHJvY2VzcwotICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107Cisg
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOwogCiAgICAgLy8gTWFrZSBhIG5ldyB3ZWIgdmlldyB0byBmaW5pc2ggdGhlIHRl
c3QKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24u
Z2V0KCldKTsKQEAgLTI2OCw3ICsyNjgsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCVGhp
cmRQYXJ0eUZyYW1lSGFzQWNjZXNzKQogCiAgICAgd2ViVmlldyA9IG5pbDsKICAgICBzZWNvbmRX
ZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURh
dGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gVGhpcmQtcGFydHkg
SURCIHN0b3JhZ2UgaXMgc3RvcmVkIGluIHRoZSBtZW1vcnkgb2YgbmV0d29yayBwcm9jZXNzLgog
ICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3Vy
YXRpb24uZ2V0KCldKTsKQEAgLTM4NSw3ICszODUsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhl
ZERCVGhpcmRQYXJ0eVdvcmtlckhhc0FjY2VzcykKIAogICAgIHdlYlZpZXcgPSBuaWw7CiAgICAg
c2Vjb25kV2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9v
bCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gdGhp
cmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01h
a2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCld
KTsKICAgICBsb2FkVGVzdFBhZ2VJbldlYlZpZXcodGhpcmRXZWJWaWV3LmdldCgpLCBAImRhdGFi
YXNlIGlzIGNyZWF0ZWQiKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tCmlu
ZGV4IDhlYzY1ZjBhM2JhOTM3MzZmZGI0ZjlkZGZlZjc1Y2U2MDAwNWZkMGQuLjUxMGIyNGY1Njlk
MjJiZDQwYTdhZGJlMjVlY2ZkMGVjZmM4YWM3MjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5k
SW1taW5lbnRseS5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vz
c1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC04OCw4ICs4OSw4IEBAIFRF
U1QoSW5kZXhlZERCLCBJbmRleGVkREJTdXNwZW5kSW1taW5lbnRseSkKIAogICAgIHJ1blRlc3RB
bmRDaGVja1Jlc3VsdChAIkNvbnRpbnVlIik7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5w
cm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKLSAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAK
ICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJFeHBlY3RlZCBBYm9ydCBGb3IgU3VzcGVuc2lv
biIpOwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkV4cGVjdGVkIFN1Y2Nlc3MgQWZ0ZXIg
UmVzdW1lIik7CkBAIC0xNTgsOCArMTU5LDggQEAgVEVTVChJbmRleGVkREIsIFN1c3BlbmRJbW1p
bmVudGx5Rm9yVGhpcmRQYXJ0eURhdGFiYXNlcykKICAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmlu
ZzptYWluRnJhbWVTdHJpbmcgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly93
ZWJraXQub3JnIl1dOwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAImRhdGFiYXNlIGlzIGNy
ZWF0ZWQiKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwotICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxT
dXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFT
dG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJ1blRlc3RBbmRDaGVj
a1Jlc3VsdChAInRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZCIpOwogfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUu
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBG
aWxlU2l6ZS5tbQppbmRleCA1MzY1NDFlM2IwZTVjZGEzYTNiNTUxYzFlODFlOTYzZjU5MmFlYjJm
Li5lN2I5OTIyOGNlODc2ZTQ0N2U2NDc4MmVmOWQ4N2YyNWFkYzliOWZhIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6
ZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QlRlbXBGaWxlU2l6ZS5tbQpAQCAtOTUsNyArOTUsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhl
ZERCVGVtcEZpbGVTaXplKQogCiAgICAgLy8gVGVybWluYXRlIG5ldHdvcmsgcHJvY2VzcyB0byBr
ZWVwIFdBTCBvbiBkaXNrLgogICAgIHdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVF
eGlzdHNBdFBhdGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aF0pOwogICAgIFJldGFpblB0cjxOU0Rp
Y3Rpb25hcnk+IGZpbGVBdHRyaWJ1dGVzID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2Vy
XSBhdHRyaWJ1dGVzT2ZJdGVtQXRQYXRoOndhbEZpbGVQYXRoLmdldCgpLnBhdGggZXJyb3I6bmls
XTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9j
YWxTdG9yYWdlUGVyc2lzdGVuY2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCmluZGV4IDQxMzNlZTdiM2RhZTQzZWMy
MDQ5Y2ZmYzA2M2MwZTQyOWMxN2M1ZWYuLjVmNzkxOTA5NDNjNzcxZTlkOWU0NDJhMGRhMjY2ZmY5
YTAzYmEyZjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQpAQCAtMzEsNiArMzEs
NyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQv
V0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgog
I2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8
V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC0xMDksNyArMTEwLDcgQEAgVEVTVChXS1dl
YlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NDcmFzaGVzKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJz
ZXNzaW9uOnN0b3JhZ2UiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCi0gICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CiAKICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CkBAIC0xNjIsNyAr
MTYzLDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5kcykKICAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAg
RVhQRUNUX1dLX1NUUkVRKEAidmFsdWUiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCi0g
ICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmRO
ZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CiAKICAgICByZWFkeVRvQ29udGlu
dWUgPSBmYWxzZTsKICAgICBbd2ViVmlldzEgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2luZG93Lmxv
Y2FsU3RvcmFnZS5zZXRJdGVtKCdrZXknLCAnbmV3VmFsdWUnKSIgY29tcGxldGlvbkhhbmRsZXI6
XihpZCwgTlNFcnJvciAqKSB7CkBAIC0xNzcsNyArMTc4LDcgQEAgVEVTVChXS1dlYlZpZXcsIExv
Y2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5kcykKICAgICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJnJlYWR5VG9Db250aW51ZSk7CiAgICAgCi0gICAgW3Byb2Nlc3NQb29sLmdldCgp
IF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBy
ZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQppbmRleCBlNjBmODgwMjVk
MDkzNzg5ZjY5NTYwZDliOTJiMjgyZjA3MTMwYThkLi4wZTIxZjkwOTUwMDE0ZjZjNDkwYjBlYjhl
NDYxZWM0YmE4NTBiYjgxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KQEAgLTI4LDcgKzI4LDcgQEAKICNpbXBv
cnQgIkhUVFBTZXJ2ZXIuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlV0
aWxpdGllcy5oIgotI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CisjaW1w
b3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL0Js
b2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9y
Lmg+CkBAIC0zNywxNCArMzcsMTQgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzRW50aXRs
ZW1lbnRzKQogewogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRp
b246W1tbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdXSk7
CiAgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAic2ltcGxlIl07
Ci0gICAgV0tQcm9jZXNzUG9vbCAqcG9vbCA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nl
c3NQb29sOwotICAgIGJvb2wgaGFzRW50aXRsZW1lbnQgPSBbcG9vbCBfbmV0d29ya1Byb2Nlc3NI
YXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Muc3RvcmFnZS5XZWJL
aXROZXR3b3JraW5nU2FuZGJveCJdOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZSAqc3RvcmUgPSBb
d2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlOworICAgIGJvb2wgaGFzRW50
aXRsZW1lbnQgPSBbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5n
OkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0TmV0d29ya2luZ1NhbmRib3giXTsK
ICNpZiBQTEFURk9STShNQUMpICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAgICAgRVhQRUNU
X1RSVUUoaGFzRW50aXRsZW1lbnQpOwogI2Vsc2UKICAgICBFWFBFQ1RfRkFMU0UoaGFzRW50aXRs
ZW1lbnQpOwogI2VuZGlmCi0gICAgRVhQRUNUX0ZBTFNFKFtwb29sIF9uZXR3b3JrUHJvY2Vzc0hh
c0VudGl0bGVtZW50Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVyZSBjYXNlIl0pOworICAgIEVYUEVD
VF9GQUxTRShbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAi
dGVzdCBmYWlsdXJlIGNhc2UiXSk7CiB9CiAKIFRFU1QoV2ViS2l0LCBIVFRQUmVmZXJlcikKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1By
b2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0
b3JlLm1tCmluZGV4IDYwOThlOGRhZDI1MmU1OWVjNDkxMjUwYjQyMTZkM2NkMDkzNmU4ZjcuLjJm
OGEyZTMzZmU4NzAzYmFiMmQ4ZTA1MTA4MzJiZWNkOWQ0ODkzNGIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBl
cnNpc3RlbnREYXRhU3RvcmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQpAQCAt
NzIsNyArNzIsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1JlY292ZXJ5QWZ0ZXJDcmFzaChXS1dlYnNp
dGVEYXRhU3RvcmUgKmRhdGFTdG9yZSkKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRv
bmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5w
cm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtbd2ViVmlldyBjb25m
aWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAg
ICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpzaW1w
bGUyXV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIH0KZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5h
dmlnYXRpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nl
c3NTd2FwT25OYXZpZ2F0aW9uLm1tCmluZGV4IDk1ZGM5ZDk4ZGYxM2IwNzA1ZTA4MTdkMDU4NzI2
NTEyMGMxODhkMjMuLmRmMzIwZDY0ZGFkYmRkMWVlMjgzZjg2NWMxNDQyM2YzYWM1NTY0YmYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3
YXBPbk5hdmlnYXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQpAQCAtNTM4NSw3ICs1Mzg1LDcgQEAgVEVT
VChQcm9jZXNzU3dhcCwgVXNlUHJld2FybWVkUHJvY2Vzc0FmdGVyVGVybWluYXRpbmdOZXR3b3Jr
UHJvY2VzcykKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0g
ICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW3dlYlZpZXdD
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246d2Vi
Vmlld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBbd2ViVmlldzIgc2V0TmF2aWdhdGlvbkRl
bGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQppbmRl
eCAwZTEwYzM0ZWVjODJjNmY2NTkyYmI3YzQyNzRkMGU0NTVlYWYxMWU4Li5hM2FiYTIzMWE5M2Iz
ZDVmMDBhMTkzYzQ3YzI3Njc4NjRiMzUwNTViIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Lm1tCkBAIC03MTksNyArNzE5LDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBOZXR3
b3JrUHJvY2Vzc1Jlc3RhcnQpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9v
cCgxKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9y
ZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MiA9IGFkb3B0
TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAs
IDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKQEAgLTc1Miw3ICs3
NTIsNyBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jZXNzUmVzdGFy
dCkKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
KyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXczID0gYWRvcHROUyhbW1dLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0
aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAtMTU1OCwxMCArMTU1OCw4IEBAIFRFU1Qo
UmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTWlncmF0ZURhdGFGcm9tTWlzc2luZ1RvcEZyYW1lVW5p
cXVlUmVkaXJlY3RTYW1lU2l0CiAKIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgQ2FuQWNj
ZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKIHsKKyAgICBOU1VSTCAqaXRwUm9vdFVS
TCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TVGVtcG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5n
QnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9j
ZXNzUG9vbFRlc3QiXSBpc0RpcmVjdG9yeTpZRVNdOwogICAgIGF1dG8gZGVmYXVsdEZpbGVNYW5h
Z2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgIF9XS1dlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tXZWJzaXRl
RGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKLSAgICBhdXRvICpkYXRh
U3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRp
b246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwotICAgIE5TVVJMICppdHBS
b290VVJMID0gW1tkYXRhU3RvcmUgX2NvbmZpZ3VyYXRpb25dIF9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5XTsKICAgICBOU1VSTCAqZmlsZVVSTCA9IFtpdHBSb290VVJMIFVSTEJ5QXBw
ZW5kaW5nUGF0aENvbXBvbmVudDpAIm9ic2VydmF0aW9ucy5kYiJdOwogICAgIFtkZWZhdWx0Rmls
ZU1hbmFnZXIgcmVtb3ZlSXRlbUF0UGF0aDppdHBSb290VVJMLnBhdGggZXJyb3I6bmlsXTsKICAg
ICBFWFBFQ1RfRkFMU0UoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOml0cFJv
b3RVUkwucGF0aF0pOwpAQCAtMTU3Miw2ICsxNTcwLDEwIEBAIFRFU1QoUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKICAgICBFWFBF
Q1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6bmV3RmlsZVVSTC5w
YXRoXSk7CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciBjb3B5SXRlbUF0UGF0aDpuZXdGaWxlVVJM
LnBhdGggdG9QYXRoOmZpbGVVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVDVF9UUlVFKFtk
ZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpmaWxlVVJMLnBhdGhdKTsKKworICAg
IF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9u
ID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsK
KyAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLl9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0
b3J5ID0gaXRwUm9vdFVSTDsKKyAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRh
U3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlv
bl0gYXV0b3JlbGVhc2VdOwogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkOllFU107CiAKICAgICBzdGF0aWMgYm9vbCBkb25lRmxhZyA9IGZhbHNlOwpAQCAt
MTYzMywxMiArMTYzNSwxMiBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIFN0b3JlU3Vz
cGVuc2lvbikKICAgICBbd2ViVmlldzIgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25d
OwogCiAgICAgZG9uZUZsYWcgPSBmYWxzZTsKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlbmRO
ZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6XnsKKyAgICBbZGF0YVN0b3JlMSBfc2VuZE5l
dHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeewogICAgICAgICBkb25lRmxhZyA9IHRydWU7
CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CiAKLSAg
ICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAg
W2RhdGFTdG9yZTEgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiB9CiAKIEBpbnRlcmZh
Y2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1NjaGVtZUhhbmRsZXIgOiBOU09iamVjdCA8V0tVUkxT
Y2hlbWVIYW5kbGVyPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQppbmRleCAzNGE0ZjVjNTM4YjliMGU5
ZmNiMDUwNzJiMTcwMjg4ZTllNGU5ZjhmLi4yZjhlMzRkYmE2ZGE0NzIzNTY1NWZmMGRiMmFkY2Ex
YmY4YzU2NzIwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpAQCAtNTU4LDcgKzU1OCw3IEBAIFRF
U1QoU2VydmljZVdvcmtlcnMsIFVzZXJBZ2VudE92ZXJyaWRlKQogCiAgICAgY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAKLSAg
ICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5kbGVyIGFs
bG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6IEJhciBD
dXN0b20gVXNlckFnZW50Il0pOworICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1NXVXNl
ckFnZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNzYWdlOkAiTWVz
c2FnZSBmcm9tIHdvcmtlcjogRm9vIEN1c3RvbSBVc2VyQWdlbnQiXSk7CiAgICAgW1tjb25maWd1
cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6bWVz
c2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07CiAKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhb
W1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAw
KSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTYzMyw4ICs2MzMsNiBA
QCBURVNUKFNlcnZpY2VXb3JrZXJzLCBDYWNoZVN0b3JhZ2VSZXN0b3JlRnJvbURpc2spCiAgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7CiAKLSAg
ICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9kZWxldGVEZWZhdWx0RGF0YVN0b3JlRm9yVGVzdGluZ107
Ci0KICAgICBTZXJ2aWNlV29ya2VyVENQU2VydmVyIHNlcnZlcih7CiAgICAgICAgIHsgInRleHQv
aHRtbCIsIG1haW5DYWNoZVN0b3JhZ2VCeXRlcyB9CiAgICAgfSwgewpAQCAtOTgyLDYgKzk4MCw3
IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRpb24pCiAK
ICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFk
b3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgc2V0Q29u
ZmlndXJhdGlvbkluamVjdGVkQnVuZGxlUGF0aChjb25maWd1cmF0aW9uLmdldCgpKTsKKyAgICBS
ZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gb3JpZ2luYWxQcm9jZXNzUG9vbCA9IGNvbmZpZ3VyYXRp
b24uZ2V0KCkucHJvY2Vzc1Bvb2w7CiAKICAgICBkb25lID0gZmFsc2U7CiAKQEAgLTEwMzUsNyAr
MTAzNCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRp
b24pCiAgICAgZG9uZSA9IGZhbHNlOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbG9hZGluZyB0
aGUgc2ltcGxlIHBhZ2UgZGlkIG5vdCBzdGFydCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vzcy4K
LSAgICBFWFBFQ1RfRVEoMHUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9v
bC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCB3ZWJWaWV3
LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291
bnQpOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpuZXdDb25maWd1
cmF0aW9uLmdldCgpXSk7CiAgICAgRVhQRUNUX0VRKDJ1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3Vy
YXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudElnbm9yaW5nUHJld2FybWVkKTsKQEAg
LTEwNDMsOSArMTA0Miw4IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9j
ZXNzQ3JlYXRpb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBk
b25lID0gZmFsc2U7CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5nIHRoaXMgcGFnZSBk
aWQgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCiAgICAgRVhQRUNUX0VRKDF1LCB3
ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzQ291bnQpOwotCisgICAgRVhQRUNUX0VRKDF1LCBvcmlnaW5hbFByb2Nlc3NQb29sLmdldCgp
Ll9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKICAgICBbW2NvbmZpZ3VyYXRpb24gd2Vic2l0
ZURhdGFTdG9yZV0gcmVtb3ZlRGF0YU9mVHlwZXM6W1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxXZWJz
aXRlRGF0YVR5cGVzXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNvbXBsZXRp
b25IYW5kbGVyOl4oKSB7CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH1dOwpAQCAtMTYxOCwy
MSArMTYxNiwzNSBAQCBzdGF0aWMgc2l6ZV90IGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKGJv
b2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgYgogICAgIHJldHVybiB3ZWJWaWV3
LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudElnbm9yaW5n
UHJld2FybWVkOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZkFuZEluUHJvY2Vzc1Nl
cnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZlByb2Nlc3NTZXJ2aWNlV29y
a2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7
CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgx
dSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RFU1QoU2VydmljZVdvcmtlcnMs
IEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVl
OworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykpOwogfQogCi1U
RVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdo
U2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5rQmVmb3Jl
TmF2aWdhdGluZ1Rocm91Z2hPdXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewogICAgIGJvb2wg
dXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9vbCBmaXJzdExv
YWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNoU2VydmljZVdv
cmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGZpcnN0TG9hZEFi
b3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZv
cmVOYXZpZ2F0aW5nVGhyb3VnaEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9h
ZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29y
a2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJzdExvYWRBYm91
dEJsYW5rKSk7CiB9CiAKQEAgLTE5NDQsMTEgKzE5NTYsMTEgQEAgVEVTVChTZXJ2aWNlV29ya2Vy
cywgU3VzcGVuZE5ldHdvcmtQcm9jZXNzKQogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5h
Z2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnN3REJQYXRoLnBhdGhdKTsKIAot
ICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF9zZW5kTmV0d29y
a1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFt3ZWJWaWV3LmdldCgpLmNvbmZp
Z3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5XTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFu
YWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAgICBbIHdlYlZpZXcu
Z2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVz
dW1lXTsKKyAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUg
X3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVz
dDpzZXJ2ZXIucmVxdWVzdCgpXTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUp
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hU
VFBDb29raWVTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V0tIVFRQQ29va2llU3RvcmUubW0KaW5kZXggYTM1ZjA1MzUwYWFiNGI0MmYzNmM0NmFlY2RlZWVl
NmNlNTQ0ZWY4Ni4uMzM3NjA5MmExOTViNTEyZGE2N2M0OTZlNDUyMTdiOTE0ZmUyYTU3OSAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29r
aWVTdG9yZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dL
SFRUUENvb2tpZVN0b3JlLm1tCkBAIC00NzksOCArNDc5LDYgQEAgc3RhdGljIGJvb2wgZmluaXNo
ZWQ7CiB9CiBAZW5kCiAKLS8vIEZJWE1FOiBvbiBpT1MsIFVJIHByb2Nlc3Mgc2hvdWxkIGJlIHVz
aW5nIHRoZSBzYW1lIGNvb2tpZSBmaWxlIGFzIHRoZSBuZXR3b3JrIHByb2Nlc3MgZm9yIGRlZmF1
bHQgc2Vzc2lvbi4KLSNpZiBQTEFURk9STShNQUMpCiBlbnVtIGNsYXNzIFNob3VsZEVuYWJsZVBy
b2Nlc3NQcmV3YXJtaW5nIHsgTm8sIFllcyB9Owogdm9pZCBydW5XS0hUVFBDb29raWVTdG9yZVdp
dGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRFbmFi
bGVQcm9jZXNzUHJld2FybWluZykKIHsKQEAgLTU4OSwyMCArNTg3LDY2IEBAIFRFU1QoV0tIVFRQ
Q29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbFdpdGhQcmV3YXJtaW5nKQogICAgIHJ1bldL
SFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3
YXJtaW5nOjpZZXMpOwogfQogCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCiBAaW50ZXJmYWNl
IENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVnYXRlPgor
LSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUw7CistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNz
YWdlOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0
ZQorQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgeworICAgIFJl
dGFpblB0cjxOU1N0cmluZz4gX21lc3NhZ2U7Cit9CisKIC0gKHZvaWQpd2ViVmlldzooV0tXZWJW
aWV3ICopd2ViVmlldyBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOihOU1N0cmlu
ZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBFWFBF
Q1RfU1RSRVEoIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIiwgbWVzc2FnZS5VVEY4U3Ry
aW5nKTsKKyAgICBfbWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgZmluaXNoZWQgPSB0cnVlOwogICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CisKKy0gKE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2UK
K3sKKyAgICB3aGlsZSAoIV9tZXNzYWdlKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpz
cGluUnVuTG9vcCgpOworICAgIHJldHVybiBfbWVzc2FnZS5hdXRvcmVsZWFzZSgpOworfQorCist
IChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTAoreworICAgIHJldHVybiBAIjxzY3JpcHQ+dmFy
IGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkg
PCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50cmltKCk7
IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsK
K30KKwogQGVuZAogCitURVNUKFdlYktpdCwgV0tIVFRQQ29va2llU3RvcmVNdWx0aXBsZVZpZXdz
KQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcxID0gW1tUZXN0V0tXZWJWaWV3IG5ld10g
YXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MSBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6
QCJzdGFydCBuZXR3b3JrIHByb2Nlc3MiXTsKKworICAgIE5TSFRUUENvb2tpZSAqc2Vzc2lvbkNv
b2tpZSA9IFtOU0hUVFBDb29raWUgY29va2llV2l0aFByb3BlcnRpZXM6QHsKKyAgICAgICAgTlNI
VFRQQ29va2llUGF0aDogQCIvIiwKKyAgICAgICAgTlNIVFRQQ29va2llTmFtZTogQCJTZXNzaW9u
Q29va2llTmFtZSIsCisgICAgICAgIE5TSFRUUENvb2tpZVZhbHVlOiBAIkNvb2tpZVZhbHVlIiwK
KyAgICAgICAgTlNIVFRQQ29va2llRG9tYWluOiBAIjEyNy4wLjAuMSIsCisgICAgfV07CisKKyAg
ICBfX2Jsb2NrIGJvb2wgc2V0Q29va2llRG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3MS5jb25m
aWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUuaHR0cENvb2tpZVN0b3JlIHNldENvb2tpZTpzZXNz
aW9uQ29va2llIGNvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIHNldENvb2tpZURvbmUgPSB0
cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmc2V0Q29va2llRG9u
ZSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbQ2hlY2tTZXNzaW9uQ29va2llVUlE
ZWxlZ2F0ZSBuZXddKTsKKyAgICBbd2ViVmlldzEgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQo
KV07CisKKyAgICBbd2ViVmlldzEgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2ll
SFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07
CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9u
Q29va2llTmFtZT1Db29raWVWYWx1ZSIpOworCisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzIg
PSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcyIHNldFVJ
RGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3MiBsb2FkSFRNTFN0cmluZzpb
ZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAi
aHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRG
b3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7Cit9CisKIFRFU1Qo
V0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Npb24pCiB7
CiAgICAgUmV0YWluUHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4gZXBoZW1lcmFsU3RvcmVXaXRoQ29v
a2llcyA9IFtXS1dlYnNpdGVEYXRhU3RvcmUgbm9uUGVyc2lzdGVudERhdGFTdG9yZV07CkBAIC02
MjcsOSArNjcxLDggQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQb29s
RXBoZW1lcmFsU2Vzc2lvbikKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVk
KTsKICAgICBmaW5pc2hlZCA9IGZhbHNlOwogICAgIAotICAgIE5TU3RyaW5nICphbGVydENvb2tp
ZUhUTUwgPSBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsn
KTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ld
ID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9p
bignOyAnKSk7PC9zY3JpcHQ+IjsKLSAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzphbGVydENv
b2tpZUhUTUwgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEi
XV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7CisgICAgW3dlYlZp
ZXcgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNV
UkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NU
UkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVW
YWx1ZSIpOwogfQogCiBzdGF0aWMgYm9vbCBhcmVDb29raWVzRXF1YWwoTlNIVFRQQ29va2llICpm
aXJzdCwgTlNIVFRQQ29va2llICpzZWNvbmQpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtz
Lm1tCmluZGV4IGFjN2RlNDE1MTJjNDUxMzhlYzVlNGMwOWU1MTE1ZDE2Y2QyM2IyMmUuLmFjMTY1
MzVkZmQ5Mzk5OWQyZWM1MGRjZmQ3MWMzYTU2ZDExM2VjN2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVI
YW5kbGVyLWxlYWtzLm1tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVUkxT
Y2hlbWVUYXNrUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRp
b25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9y
dCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
ZWJLaXQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3Iu
aD4KQEAgLTE1Miw3ICsxNTMsNyBAQCBURVNUKFVSTFNjaGVtZUhhbmRsZXIsIExlYWtzMykKIAog
ICAgIHJ1blVudGlsVGFza3NJbkZsaWdodCgyKTsKIAotICAgIFt3ZWJWaWV3MS5nZXQoKS5jb25m
aWd1cmF0aW9uLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW3dl
YlZpZXcxLmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwogCiAgICAgcnVuVW50aWxUYXNrc0luRmxpZ2h0KDApOwogfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0
b3JlQ3VzdG9tUGF0aHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQppbmRleCA5MmNmM2E2MTk4YTViOWQxNDU0
NDkwNWRiOWU5NDhmMTFjNzI1NmRlLi5iZjhiZGU4MzFhMjg1OWJjZjM0MTM4MDYxODhiNTkxZmNh
YTlkM2FiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQpAQCAtMjQ0
LDcgKzI0NCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocyhT
aG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRFCiAgICAgLy8gTm93LCB3aXRoIGJy
YW5kIG5ldyBXS1dlYnNpdGVEYXRhU3RvcmVzIHBvaW50aW5nIGF0IHRoZSBzYW1lIGN1c3RvbSBj
b29raWUgc3RvcmFnZSBsb2NhdGlvbiwKICAgICAvLyBpbiBuZXdseSBmaXJlZCB1cCBOZXR3b3Jr
UHJvY2Vzc2VzLCB2ZXJpZnkgdGhhdCB0aGUgZmV0Y2ggYW5kIGRlbGV0ZSBBUElzIHdvcmsgYXMg
ZXhwZWN0ZWQuCiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
KyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgYXV0byBuZXdD
dXN0b21EYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5p
dFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpXSk7
CiAKICAgICBbbmV3Q3VzdG9tRGF0YVN0b3JlIGZldGNoRGF0YVJlY29yZHNPZlR5cGVzOltOU1Nl
dCBzZXRXaXRoT2JqZWN0czpXS1dlYnNpdGVEYXRhVHlwZUNvb2tpZXMsIG5pbF0gY29tcGxldGlv
bkhhbmRsZXI6XihOU0FycmF5PFdLV2Vic2l0ZURhdGFSZWNvcmQgKj4gKiByZWNvcmRzKSB7CkBA
IC0yNTUsNyArMjU1LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBh
dGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEUKICAgICByZWNlaXZlZFNj
cmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2Vp
dmVkU2NyaXB0TWVzc2FnZSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAg
bmV3Q3VzdG9tRGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10g
X2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQo
KV0pOwogCiAgICAgW25ld0N1c3RvbURhdGFTdG9yZSByZW1vdmVEYXRhT2ZUeXBlczpbTlNTZXQg
c2V0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVDb29raWVzLCBuaWxdIG1vZGlmaWVkU2lu
Y2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XiB7CkBAIC01MzksNyAr
NTM5LDcgQEAgVEVTVChXZWJLaXQsIERvTG9hZFdpdGhOb25EZWZhdWx0RGF0YVN0b3JlQWZ0ZXJU
ZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNzKQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3Bp
blJ1bkxvb3AoMSk7CiAKLSAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAg
cmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVu
ZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJk
aXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKICAgICBbd2ViVmlldyBsb2Fk
UmVxdWVzdDpyZXF1ZXN0XTsKQEAgLTg1Nyw3ICs4NTcsNyBAQCBURVNUKFdlYktpdCwgTWVkaWFD
YWNoZSkKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwogCiAgICAgZG9uZSA9IHRydWU7Ci0gICAg
W1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRQ
YXRoOnBhdGggZXJyb3I6JmVycm9yXTsKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCA5ZDM3Y2NlZGRiODIxNTc0
NzVkODFmMTIyMGY0NTZiODY0YzNiMTcxLi42MzMyNmY2ODU2YmM2MDU5ZGM2Mzc5ZjJhYTVjMDA1
MGEwNzg0YWJkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApA
QCAtMTA2MSw4ICsxMDYxLDYgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29u
c2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKIAogICAgIHJlc2V0
UXVvdGEoKTsKIAotICAgIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vy
dmljZVdvcmtlclRlc3RpbmcocGxhdGZvcm1Db250ZXh0KCksIHRydWUpOwotCiAgICAgV0tDb250
ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLmNvbnRleHQoKSk7CiAKICAgICBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCksIGZh
bHNlKTsKQEAgLTMxMzYsNyArMzEzNCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldElnbm9y
ZXNWaWV3cG9ydFNjYWxlTGltaXRzKGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pCiAKIHZv
aWQgVGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKLSAgICBXS0Nv
bnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgV0tX
ZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3Mod2Vic2l0ZURhdGFTdG9yZSgp
KTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdvcmtlcnMoKQpA
QCAtMzE2Nyw5ICszMTY1LDggQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1DcmVhdGVPdGhlclBhZ2UoUGxhdGZvcm1XZWJWaWV3KiBwYXJlbnQKICAgICByZXR1cm4g
bmV3IFBsYXRmb3JtV2ViVmlldyhjb25maWd1cmF0aW9uLCBvcHRpb25zKTsKIH0KIAotV0tDb250
ZXh0UmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVm
IGNvbnRleHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29udGV4dENvbmZpZ3VyYXRpb24p
CitXS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0Nv
bnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZikKIHsKLSAgICBXS0Nv
bnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShjb250ZXh0LCBkZWZhdWx0V2Vic2l0ZURh
dGFTdG9yZSgpKTsKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409349</attachid>
            <date>2020-09-21 23:42:41 -0700</date>
            <delta_ts>2020-09-21 23:59:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200921234240.patch</filename>
            <type>text/plain</type>
            <size>339936</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRhZGZjMzM1NmEzMzk3NmU4
YmE5Mzk2YmJhOTM0ZThmNGMzODhmM2EuLjAxNTAwYTk4ZWM1ZGJmOTJlYTE2NzlhNzBiN2FmMmE3
NTMzMDE2ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzY0IEBACisyMDIwLTA5LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggbW92ZXMgdGhlIHRoaW5ncyBvbiBXZWJQcm9jZXNzUG9vbCBhc3NvY2lhdGVk
IHdpdGggTmV0d29ya1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgYW5kIG1vdmVzIHRoZW0KKyAgICAg
ICAgdG8gV2Vic2l0ZURhdGFTdG9yZS4gIEl0J3MgcHJldHR5IG1lY2hhbmljYWwsIGJ1dCBpdCBy
ZWFjaGVzIGl0cyBmaW5nZXJzIGludG8gYSBsb3Qgb2YgdGhpbmdzLiAgU29tZSBjb21tZW50cwor
ICAgICAgICBvbiBpbnRlcmVzdGluZyBwYXJ0cyBhcmUgYmVsb3cuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaDoKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZh
dWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdl
U2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cDoKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZXNGb3JVUkwpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNl
dENvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNlcnZlcik6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCk6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXIpOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyk6CisgICAgICAgIChXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZSk6
CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3Rp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3Mp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwOgorICAgICAgICAoV0tXZWJzaXRl
RGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2wubW06CisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6XSk6CisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wg
X25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQ
b29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3N5
bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vz
c1Bvb2wgX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxl
bWVudEZvclRlc3Rpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJzaXRlRGF0YVN0b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOgorICAgICAgICAoLVtXS1dl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXSk6CisgICAgICAgICgtW1dL
V2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpdKToK
KyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHldKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWVdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9z
eW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKF9XZWJLaXRDb29raWVNYW5h
Z2VyUHJpdmF0ZTo6Y29va2llTWFuYWdlciBjb25zdCk6CisgICAgICAgIChfV2ViS2l0Q29va2ll
TWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUpOgorICAgICAgICAo
d2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFn
ZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFn
ZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dl
dF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29v
a2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyk6CisgICAg
ICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAod2Via2l0V2Vi
Q29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNz
aW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNzL0F1eGlsaWFyeVBy
b2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vz
c1Bvb2xDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVBy
b2Nlc3NTdXBwcmVzc2lvblN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eTo6cHVibGlzaFByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWRQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdl
YktpdDo6RG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3lu
Yyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcCk6Cisg
ICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNr
Z3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25X
aWxsRW50ZXJGb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6
Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6
OmRvd25sb2FkRmluaXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpp
bnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlN
YXAuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAgKFdlYktp
dDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2Vz
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFy
YW1ldGVyc1RvTmV3UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OmRhdGFTdG9yZVBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9v
bEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSk6CisgICAgICAgIChXZWJLaXQ6OmFueVBy
b2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFz
aGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1l
c3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6
OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9u
VG9OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sSGFzRm9y
ZWdyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sSGFz
QmFja2dyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRsZXI6OmhhbmRsZVhQQ0V2ZW50IGNvbnN0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5h
Z2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdD
b29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vz
c0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6ZGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50
T3ZlcnJpZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnByZWNvbm5lY3RUbyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmlnYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRD
bGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGlu
Zyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVy
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlv
blRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVt
b3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1
cml0eVBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVS
TFNjaGVtZUFzTG9jYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0
ZXJVUkxTY2hlbWVBc05vQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hl
bWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb25zKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmlzU2VydmljZVdvcmtlclBhZ2VJRCBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZp
Y2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlG
b3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3Mp
OiBEZWxldGVkLgorICAgICAgICBUaGVyZSBzZWVtcyB0byBiZSBhIGxvdCBvZiBjb2RlIHJlbW92
YWwgaGVyZSwgYnV0IG1vc3Qgb2YgaXQgd2FzIGR1cGxpY2F0ZSBjb2RlIHdpdGgKKyAgICAgICAg
V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyB3aGljaCBpcyB1c2VkIGluc3RlYWQuICBUaGF0
IHdoaWNoIHdhcyBub3QgZHVwbGljYXRlIHdhcworICAgICAgICBtb3ZlZCB0byBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzLiAgVGhpcyB3YXMg
dGhlIGhhcmRlc3QgcGFydCBvZiB0aGlzIHBhdGNoLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNr
Z3JvdW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRT
eW5jVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmRGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdv
cmtQcm9jZXNzRGlkUmVzdW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OmZsdXNoQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlcik6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1
bmNoaW5nSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0Nv
Y29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNl
c3Npb25JRCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3Mg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRB
cHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGltZW91
dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFNl
cnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1v
dmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZh
bGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFu
ZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2
YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVj
b3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1Rv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNv
dXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1ldGVy
c1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN1
Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRl
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNz
QW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlw
T25seUluRGF0YWJhc2VPbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0VXNlSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29y
YXRpb25Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVs
ZXRlQ29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
aG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3Vs
ZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RD
b29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNh
cEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnByb2Nlc3NQb29scyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0
aXN0aWNzVGVzdGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEFkQ2xpY2tBdHRyaWJ1
dGlvbkRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZsdXNo
Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vzc2lvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBwQm91bmRTZXNzaW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWlu
c1RvSVRQSWZJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3Jr
UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0
ZXJXaXRoU2Vzc2lvbklETWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphZGRQZW5kaW5nQ29va2ll
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlUGVu
ZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmNsZWFyUGVuZGluZ0Nvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICog
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoT3B0aW9ucyk6
CisgICAgICAgICogVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVyc2lz
dGVudFN0b3JhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRJ
Z25vcmVUTFNFcnJvcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0TmV0
d29ya1Byb3h5U2V0dGluZ3MpOgorCiAyMDIwLTA5LTIxICBLYXRlIENoZW5leSAgPGthdGhlcmlu
ZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGFib3V0OmJsYW5rIHN1YmZyYW1l
IGxvYWRzIGZvciBub24gYXBwLWJvdW5kIHRvcCBmcmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAppbmRl
eCBmY2UyMzg5ODdhNzg1MGYxOGM5ZjMwNmM1MGU5OGNlOTg4ZDEyNWZkLi42YjQ1YzJiZDlmMjZh
NDY4NThkMTc3YjU3NzdiMzBmNjFkMDdlOGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9Db29raWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZVN0b3JhZ2UuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0hUVFBDb29raWVBY2NlcHRQb2xpY3kuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgpAQCAtMTQ5LDkgKzE1MCwxMiBAQCB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3ksCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAotdm9pZCBXZWJDb29raWVN
YW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYkNv
b2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5k
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgaWYgKGF1
dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkp
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5jb29raWVBY2NlcHRQ
b2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihIVFRQQ29va2ll
QWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5h
Z2VyLmgKaW5kZXggY2E3ZjU1ZTg2NmJkYWQ0YjFlMzUyZThmNjQwNTdiYWJjNDYyODMyZC4uZWI3
NDE4MjM1ZjU3MDkzMDM5NjAxOWJlNDQ3MjFkZGMwOWZhOThmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCkBA
IC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRDb29raWVzKFBBTDo6U2Vzc2lv
bklELCBjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiYpPiYmKTsKIAogICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpOwotICAgIHZvaWQgZ2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3kpPiYmKTsKKyAgICB2b2lkIGdldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SFRUUENvb2tp
ZUFjY2VwdFBvbGljeSk+JiYpOwogCiAgICAgdm9pZCBzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5n
ZXMoUEFMOjpTZXNzaW9uSUQpOwogICAgIHZvaWQgc3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMo
UEFMOjpTZXNzaW9uSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgppbmRleCBh
Y2Q3NTQ0MGQ4M2YzNDY2NTBjOWYzM2I3NWI1ZDVkMDkzNTIxM2JhLi42ZmRmNTc3MmFhNmFhZTM5
NDAyYTlhODlmNTZjODRmN2JkNDM1ODVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdl
cy5pbgpAQCAtMzYsNyArMzYsNyBAQCBtZXNzYWdlcyAtPiBXZWJDb29raWVNYW5hZ2VyIE5vdFJl
ZkNvdW50ZWQgewogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3luYwogCiAgICAgdm9p
ZCBTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJDb3JlOjpIVFRQQ29v
a2llQWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lkIEdldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBDb29raWVBY2Nl
cHRQb2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tpZUFjY2VwdFBvbGlj
eShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRU
UENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAgdm9pZCBTdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIHZvaWQg
U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCBi
ZThkOTY2NjJiZTZkY2Q4NWZhM2MzMjkyOWFlMGYwYjVkMTgyMzQzLi43ZjQ3NzcxMzJkNTI0NzU4
MTgyOTgxYWFmMGMxOGI3MmI3YmEzOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ3LDI5ICszNDcsMTkgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJh
bWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lv
bklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3Jr
U2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRT
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFTdG9yZVBhcmFtZXRl
cnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAgICAgYXV0byBzZXNz
aW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNz
aW9uSUQ7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShkYXRh
U3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Cisg
ICAgICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgZGF0YVN0b3Jl
UGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVy
VGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJ
bmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKKyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIGRhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKLQor
ICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1vdGVOZXR3b3JraW5n
Q29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUoZGF0
YVN0b3JlUGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBib29s
IHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgPSB0cnVlOwotICAg
IGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUo
cGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAg
ICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0
ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUo
ZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwg
ZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNl
c3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8qIGRlZmF1bHRTZXNz
aW9uID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7
Ci0gICAgYXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNlc3Npb24tPm5ldHdv
cmtTdG9yYWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAg
ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAgICB9CiAKICAgICBm
b3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBz
dXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNTA1LDggKzQ5NSw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNl
c3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9u
KGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVXNlVGVzdGluZ05l
dHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXJCYXNlKQogI2VuZGlmCiB7Ci0g
ICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmFkZChz
ZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTUyMSw3ICs1MDksNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1
cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQog
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gbWFrZVN0cmluZyhpZGVu
dGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmlu
ZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkK
ICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vz
c2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAoc2Vzc2lv
bklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgICAgIHN0b3Jh
Z2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVDRlN0b3Jh
Z2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkpOwogCiAgICAgaWYgKE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQSSgpKSB7CkBAIC01NDQs
MjEgKzUzMiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVBY2NlcHRQb2xpY3lDaGFu
Z2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9saWN5KQogCiBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6
OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0dXJuICZkZWZhdWx0
U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmdl
dChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdv
cmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIGlmICghbV9k
ZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1bHROZXR3b3JrU3Rv
cmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwotICAg
IHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQotCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZv
aWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9yKQogewotICAgIGZ1
bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0byYgc3RvcmFnZVNl
c3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAgICAgICAgIGZ1bmN0
b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaAppbmRleCBhYTczMzc3YjczMmY2MTBiODY3OTA1NmMzN2RmMjhhZWVh
MDdhZjgzLi5kYzg2ZjM5Njk3ZmM1MDNlYTRkYmQxYjA2YzMyMjk3NWIxZTY5ZDE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0xNzAsNyAr
MTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9u
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7
CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nlc3Npb24oY29uc3Qg
UEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIGVuc3VyZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3Jr
U2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4mJik7CkBAIC0zNzUsNyArMzc0LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBAIC01NDQsNyArNTQyLDYgQEAgcHJp
dmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9u
SUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiBtX25l
dHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247
CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggOTkwMWM1Y2I3M2M3NGZlM2Rh
NGViZjU3YmE4NTEyODZmZGExMDRiZi4uMDJkZGI5MjM0ZTk5OWMzZTZjZGNkY2YwYjg3OGI4NzI1
ODM2MzI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTU1LDcgKzU1
LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc1NES1ZlcnNp
b247CiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwog
I2VuZGlmCi0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBl
bmNvZGVyIDw8IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYgVVNFKFNPVVApCiAgICAgZW5jb2Rl
ciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5jb2RlciA8PCBpZ25vcmVUTFNFcnJvcnM7
CkBAIC02OCw5ICs2OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCB1cmxT
Y2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0
ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgZW5jb2Rl
ciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxkRGlzYWJsZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAgIGVuY29kZXIgPDwg
c2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFibGVBZENsaWNrQXR0
cmlidXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTYsMTEgKzExMywxMSBAQCBib29sIE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBO
ZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIE9wdGlvbmFs
PFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsK
LSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIGlmICghZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9yPFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBkZWNvZGVyID4+IGRh
dGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0ZXJzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzID0g
V1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJlc3VsdC5kYXRhU3Rv
cmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7CiAKICNpZiBVU0Uo
U09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVBY2NlcHRQb2xpY3kp
KQpAQCAtMTQyLDIwICsxMzksNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcykpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlvbmFsPFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVz
dWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBX
VEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERpc2FibGVTZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0j
ZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJsZUlUUERh
dGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmgKaW5kZXggMTFjYTVhMTk5ZmNmZmU4ODNmZmYwYTJmZjc5ZGZlNDIxMGQ5ZGFkMS4uNjc0
OWRhMGM0YTYzYzIwMjEwNzc4MzU4NDg0NmM5MGQwMTBhMDM0MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaApAQCAtNzEsNyArNzEsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMgewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG5ldHdvcmtBVFNDb250
ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBkZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVyczsKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+
IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAgICAgCiAjaWYgVVNFKFNPVVApCiAgICAgV2ViQ29yZTo6
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBXZWJDb3JlOjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsKQEAgLTg1LDEyICs4NSw3IEBAIHN0
cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgVmVjdG9yPFN0cmlu
Zz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNj
aGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
LSAgICBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeTsKLSAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSAgICBib29sIHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vz
c1Rlcm1pbmF0aW9uRGVsYXkgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgYm9vbCBzaG91bGRFbmFi
bGVJVFBEYXRhYmFzZSB7IGZhbHNlIH07CisgICAgYm9vbCBzaG91bGRFbmFibGVJVFBEYXRhYmFz
ZSB7IHRydWUgfTsKICAgICBib29sIGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSB7
IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXggZGE2MzU5MTI0MjIzZGI5NzAz
MGQxZWE3N2JjMDBjZWU1MWZiMDE3ZC4uNTAxMGY5YTg2OTAzOTBkZmZlOWEzNDRlOTkwNWIyNGU2
Njg1YzdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpAQCAtNzgsOSArNzgsNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5l
dHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNh
bmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvbnRhaW5lckNh
Y2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29u
c3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0j
ZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFUU0NvbnRleHQocGFyYW1ldGVycy5u
ZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMDUsMTEgKzEwMiw2IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29uc3QgTmV0
d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2FjaGU6dXJsQ2FjaGUu
Z2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24o
KSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIFJldGFp
blB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNzOjpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0
YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9BUFBMSUNBVElPTl9BVURJVF9EQVRBKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQyZGNjOGUzZjliOGYxNjkyOTk3ZjY3MTky
Li40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5M2UyMjU2YTM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJs
LmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKIHsKIH0KIAot
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1By
b2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNz
OjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQ2VydGlmaWNhdGVJ
bmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMv
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBjMjczNmUwMjZhNTVkM2Q0MDIw
Zjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0NjIwZjAyYTdkOWU5ZTg2OWVjODY0OTFi
N2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1v
dGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNTUsMTUgKzU1LDExIEBAIHZvaWQg
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKE5l
dHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJt
YW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAog
ICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nlc3NDb29raWVTdG9y
YWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQ
cm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAgIGlmICghc2Vzc2lv
bklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlk
ZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAg
ICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3RvcmFnZUZyb21JZGVudGlmeWluZ0Rh
dGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcik7CiAKICAgICBu
ZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBtYWtlU3Ry
aW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkpLCBXVEZNb3ZlKHVpUHJvY2Vzc0Nv
b2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrUHJvY2Vzcy5zdG9y
YWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFy
YW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0Q29va2llKGNvb2tp
ZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nl
c3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRleCA0MWFmZGNjNjFh
ZGM1ODNkY2YxOWYyZDQwYWEyODkxZjhhMDEzMjhiLi4wOTNkNTk5NTk2YTY4ODMwYWYwOTkzZmEz
NjgzMWUwYzMyNGJmYmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApAQCAtMTQwLDExICsxNDAsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25z
dCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNldElnbm9yZVRMU0Vycm9ycyhwYXJhbWV0ZXJz
Lmlnbm9yZVRMU0Vycm9ycyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsK
LX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3Jl
VExTRXJyb3JzKQogewogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0U2hvdWxkSWdub3JlVExT
RXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXggNmQwYzEyOWE3NDA1MTBkMzg2OTcz
NzA1YWQwOTJlZjEzMmNjMDc1YS4uMDQ4MTBiM2UxOWJlOTZjYWQxYWQ4MmE0NGRjZWRiMjZlZjc4
MjYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmNwcApAQCAtNDAsMTMgKzQwLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVy
IDw8IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc0Nv
b2tpZVN0b3JhZ2VJZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2llU3RvcmFnZVBhdGhF
eHRlbnNpb25IYW5kbGU7Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2llczsKIAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlVGVtcEJs
b2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpE
ZWMKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmNvb2tpZVN0
b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY29va2llU3RvcmFnZVBhdGhFeHRl
bnNpb25IYW5kbGUpOwogCi0gICAgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4+IHBl
bmRpbmdDb29raWVzOwotICAgIGRlY29kZXIgPj4gcGVuZGluZ0Nvb2tpZXM7Ci0gICAgaWYgKCFw
ZW5kaW5nQ29va2llcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0
ZXJzLnBlbmRpbmdDb29raWVzID0gV1RGTW92ZSgqcGVuZGluZ0Nvb2tpZXMpOwotCiAjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBpbmRleGVkRGF0YWJh
c2VEaXJlY3Rvcnk7CiAgICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CkBA
IC0xMDEsMTQgKzkxLDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAgICBpZiAoIWluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIE9wdGlvbmFsPFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZT4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGU7Ci0gICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIWluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHBhcmFt
ZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBX
VEZNb3ZlKCppbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKaW5kZXggZjI3
ZGY0ODk4MDlmMzE5NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQzOS4uZTFiMjMzNzAxOTlmZTM3MDMx
ZTlkYzVjMDU3ODE1NTAyMWUzNGQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCkBAIC01MSwxNSArNTEsMTEgQEAgc3RydWN0IFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKIAogICAgIFZlY3Rvcjx1aW50OF90PiB1aVByb2Nl
c3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUg
Y29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkNv
b2tpZT4gcGVuZGluZ0Nvb2tpZXM7CiAgICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRl
cnMgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAgICAgU3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGlu
ZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKaW5kZXggYmMwNzg2NmZiYzM5
NjhlNzZjYWE5YTM1NjgxMGM2YTJmYjA5ZGNmZC4uZmY5NTU4OTJiZGEwYjgzYzIzYTk2YTA4Mzll
ZjNiZDBkOTQ2OWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5jcHAKQEAgLTQ2LDggKzQ2LDYgQEAgbmFtZXNwYWNlIEFQSSB7CiBI
VFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUm
IHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0RhdGFTdG9yZSh3ZWJzaXRlRGF0YVN0
b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5v
dGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkK
QEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkKICAg
ICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoIW1fb2JzZXJ2ZWRD
b29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9jb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7
CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC04MSwz
MyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJvdW5kQ29va2llcyhj
b25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2kKIAogdm9pZCBIVFRQQ29va2llU3Rv
cmU6OmNvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293
bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwot
ICAgIGlmICghcG9vbCkgewotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBhbGxDb29r
aWVzOwotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgICAgICBhbGxDb29raWVzID0g
Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwotICAgICAgICBhbGxD
b29raWVzLmFwcGVuZFZlY3RvcihtX293bmluZ0RhdGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMoKSk7
Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlciksIGFsbENvb2tpZXNdICgpIG11dGFibGUgewotICAgICAgICAgICAgZmlsdGVyQXBw
Qm91bmRDb29raWVzKGFsbENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5h
Z2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsK
LSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcG9vbCA9IFdU
Rk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7Cisg
ICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vz
cygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldEFsbENvb2tpZXMobV9v
d25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFibGUgewogICAg
ICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0ZvclVS
TChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9v
d25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsK
LSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwot
Ci0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0Q29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYgY29va2llcykgbXV0YWJsZSB7CisgICAg
YXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vzcygp
LmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldENvb2tpZXMobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
IChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgewogICAgICAgICBm
aWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIH0pOwogfQpAQCAtMTE1LDc4ICs5NCwyOSBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
bwogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiBhcHBCb3VuZENvb2tpZXMpIG11dGFibGUgewot
ICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29v
a2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7Ci0gICAgICAgICAg
ICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vzc2lvbiBiZWNhdXNl
IHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3b3JrIFByb2Nlc3Mg
d2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAgICAgICAgICAgICBp
ZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAgICAgICAgICAgICBz
ZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9vd25pbmdEYXRhU3RvcmUtPmFkZFBl
bmRpbmdDb29raWUoY29va2llKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgICAg
ICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAgIGF1dG8mIGNvb2tp
ZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5h
Z2VyKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29va2llKGNv
bnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3Jl
LT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29s
KSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Npb24pCi0gICAgICAg
ICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvb2tpZSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5yZW1vdmVQZW5k
aW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBs
ZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdl
ci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBb
cG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0g
ICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNv
b2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29v
a2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0
b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBkZWxl
dGVDb29raWVzSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBh
dXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCku
Y29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxsQ29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBUaGUgQ29tcGxldGlv
bkhhbmRsZXIgc2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0
ZUFsbENvb2tpZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBw
b29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xpY3kpOwotICAgICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wt
PnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2ll
TWFuYWdlci0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAg
IH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29y
a1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5zZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpm
bHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMjI3LDIxICsxNTcsNyBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNl
cnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCiAKICAgICBtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2Vy
dmVyID0gbWFrZVVuaXF1ZTxBUElXZWJDb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcj4oKnRoaXMp
OwogCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNv
b2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgQVNT
RVJUKCFtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMpOwotCi0gICAgICAgIC8vIExpc3RlbiBm
b3IgY29va2llIG5vdGlmaWNhdGlvbnMgaW4gdGhlIFVJUHJvY2VzcyBpbiB0aGUgbWVhbnRpbWUu
Ci0gICAgICAgIHN0YXJ0T2JzZXJ2aW5nQ2hhbmdlc1RvRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0
b3JlKFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICBjb29raWVzRGlkQ2hhbmdlKCk7Ci0gICAgICAg
IH0pOwotCi0gICAgICAgIG1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyA9IHRydWU7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0g
cG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBt
X29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3Jr
UHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclBy
b3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1f
Y29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCkBAIC0yNzYsNDYgKzE5MiwxMCBAQCB2
b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0RpZENoYW5nZSgpCiB2b2lkIEhUVFBDb29raWVT
dG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCgpCiB7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1h
bmFnZXJQcm94eS0+dW5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgIG1fb2JzZXJ2ZWRDb29r
aWVNYW5hZ2VyUHJveHkgPSBudWxscHRyOwotCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0
YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBp
ZiAoIXBvb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2Vy
UHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Pigp
OworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmbV9vd25pbmdEYXRhU3RvcmUt
Pm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwogICAgIG1fb2JzZXJ2ZWRDb29raWVN
YW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKLXZvaWQgSFRUUENvb2tp
ZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAg
QVNTRVJUKCFtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAg
bV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gV2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKFt0aGlzXShXZWJQcm9jZXNzUG9v
bCYgbmV3UHJvY2Vzc1Bvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+aXNB
c3NvY2lhdGVkUHJvY2Vzc1Bvb2wobmV3UHJvY2Vzc1Bvb2wpKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIC8vIE5vdyB0aGF0IGFuIGFzc29jaWF0ZWQgcHJvY2VzcyBwb29sIGV4aXN0
cywgd2UgbmVlZCB0byBmbHVzaCB0aGUgVUkgcHJvY2VzcyBjb29raWUgc3RvcmUKLSAgICAgICAg
Ly8gdG8gbWFrZSBzdXJlIGFueSBjaGFuZ2VzIGFyZSByZWZsZWN0ZWQgd2l0aGluIHRoZSBuZXcg
cHJvY2VzcyBwb29sLgotICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgp
OwotICAgICAgICBuZXdQcm9jZXNzUG9vbC5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCi0gICAg
ICAgIGlmIChtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKSB7Ci0gICAgICAgICAgICBtX29i
c2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbmV3UHJvY2Vzc1Bvb2wuc3VwcGxlbWVudDxXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29r
aWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAgICAgIH0KLSAgICAg
ICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotICAgIH0pOwot
fQotCi12b2lkIEhUVFBDb29raWVTdG9yZTo6dW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucygpCi17Ci0gICAgaWYgKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRl
bnRpZmllcikKLSAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJQcm9jZXNzUG9vbENy
ZWF0aW9uTGlzdGVuZXIobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsK
LQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IDA7Ci19Ci0K
ICNpZiAhUExBVEZPUk0oQ09DT0EpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1c2hEZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmUoKSB7IH0KIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IEhUVFBD
b29raWVTdG9yZTo6Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpIHsg
cmV0dXJuIHsgfTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBD
b29raWVTdG9yZS5oCmluZGV4IGQ2MjBhZGRhNGU3Zjg5NDU2NjE4YTNlMjJlMWJmZDQzNTc3NzVi
MTkuLmEwNWY0MTQzMGRiMmIyM2Q0MTc4NDA3OWE0ZmI4NmM3NDYwYTc1NDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKQEAgLTgzLDkg
KzgzLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7Ci0KICAgICB2b2lkIGZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
KCk7CiAgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGdldEFsbERlZmF1bHRVSVBy
b2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKICAgICBzdGF0aWMgdm9pZCBzZXRDb29raWVJbkRl
ZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCmluZGV4IDU4YzU0NTNmNDg5
ODdmNWUxYWZhZmVmMzRjNDMzMzVmMWI0Y2M5OTAuLjM3YmFhNjhmOTI0Yjk1ODcyZjAxZjdlNGE4
MGQ1ZjQ5N2Q1ZmU5YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250
ZXh0LmNwcApAQCAtNDExLDExICs0MTEsNiBAQCB2b2lkIFdLQ29udGV4dFByZWNvbm5lY3RUb1Nl
cnZlcihXS0NvbnRleHRSZWYsIFdLVVJMUmVmKQogewogfQogCi1XS0Nvb2tpZU1hbmFnZXJSZWYg
V0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dFJlZikKLXsKLSAg
ICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c3VwcGxl
bWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSk7Ci19Ci0KIFdLV2Vic2l0ZURh
dGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZikKIHsK
ICAgICByZXR1cm4gV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSgpOwpAQCAt
NTI3LDEzICs1MjIsNiBAQCB2b2lkIFdLQ29udGV4dFNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVj
dG9yVGltZXJFbmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLAogICAgIFdlYktpdDo6dG9J
bXBsKGNvbnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxl
ZChlbmFibGUpOwogfQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRl
Rm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgYWxsb3dz
KQotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250
ZXh0KS0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7
Ci0jZW5kaWYKLX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQbHVnSW5BdXRvU3Rh
cnRPcmlnaW5IYXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdl
YktpdDo6dG9BUEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVnSW5BdXRvU3RhcnRP
cmlnaW5IYXNoZXMoKS5sZWFrUmVmKCkpOwpAQCAtNTc1LDIxICs1NjMsMTEgQEAgdm9pZCBXS0Nv
bnRleHRTZXRGb250QWxsb3dMaXN0KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS0FycmF5UmVm
IGFycmF5UmVmKQogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRGb250QWxsb3dM
aXN0KFdlYktpdDo6dG9JbXBsKGFycmF5UmVmKSk7CiB9CiAKLXZvaWQgV0tDb250ZXh0VGVybWlu
YXRlTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgV2ViS2l0Ojp0
b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0KIHZvaWQgV0tD
b250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAg
ICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9
CiAKLVByb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGNvbnRleHRS
ZWYpLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKLX0KLQogdm9pZCBXS0NvbnRleHRBZGRT
dXBwb3J0ZWRQbHVnaW4oV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5nUmVmIGRvbWFp
blJlZiwgV0tTdHJpbmdSZWYgbmFtZVJlZiwgV0tBcnJheVJlZiBtaW1lVHlwZXNSZWYsIFdLQXJy
YXlSZWYgZXh0ZW5zaW9uc1JlZikKIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
QEAgLTYxOSwxMiArNTk3LDExIEBAIHZvaWQgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJT
dGF0ZUZvclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiAgICAgV2ViS2l0Ojp0b0lt
cGwoY29udGV4dFJlZiktPmNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCk7CiB9
CiAKLXZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0Nv
bnRleHRSZWYgY29udGV4dFJlZiwgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KQordm9pZCBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFdLQ29u
dGV4dFJlZiwgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogewotICAgIFdl
YktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiB9CiAKLXZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNp
dGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiB3ZWJzaXRlRGF0YVN0b3JlKQordm9pZCBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFT
dG9yZShXS0NvbnRleHRSZWYsIFdLV2Vic2l0ZURhdGFTdG9yZVJlZikKIHsKLSAgICBXZWJLaXQ6
OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0UHJpbWFyeURhdGFTdG9yZSgqV2ViS2l0Ojp0b0ltcGwo
d2Vic2l0ZURhdGFTdG9yZSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0Nv
bnRleHQuaAppbmRleCAxZDhmYWI4YTE0ODZhYWRiNDk0MTQ0Yjk4ZjEwZTkzNjM4ZDBjNWU2Li4y
YWI2ZWY4NmY1MzBlNzdmNzRjYmQ1ZGY1ODYyYWM0ZDMwYjc5ODc2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaApAQCAtMTY4LDcgKzE2OCw2IEBAIFdLX0VYUE9S
VCB2b2lkIFdLQ29udGV4dFN0b3BNZW1vcnlTYW1wbGVyKFdLQ29udGV4dFJlZiBjb250ZXh0KTsK
IFdLX0VYUE9SVCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFT
dG9yZShXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExB
Q0VNRU5UKFdLV2Vic2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUpOwogCiBXS19FWFBP
UlQgV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclJlZiBXS0NvbnRleHRHZXRBcHBsaWNhdGlvbkNh
Y2hlTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRF9XSVRI
X1JFUExBQ0VNRU5UKFdLV2Vic2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUpOwotV0tf
RVhQT1JUIFdLQ29va2llTWFuYWdlclJlZiBXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKFdLQ29u
dGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEOwogV0tfRVhQT1JUIFdLR2VvbG9j
YXRpb25NYW5hZ2VyUmVmIFdLQ29udGV4dEdldEdlb2xvY2F0aW9uTWFuYWdlcihXS0NvbnRleHRS
ZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tJY29uRGF0YWJhc2VSZWYgV0tDb250ZXh0R2V0SWNv
bkRhdGFiYXNlKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIFdLX0VYUE9SVCBXS0tleVZhbHVlU3Rv
cmFnZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0S2V5VmFsdWVTdG9yYWdlTWFuYWdlcihXS0NvbnRl
eHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKFdLV2Vi
c2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCmluZGV4IGEwMjUwMTFmNzBjYzY1OWY1
ZmFhMDhhN2Q2Y2JiM2ZmNTZlZTZhMzguLjQ4YTI5YzQ1NjhhYjY3YjNiN2UxZWY5ODE1NmY2ZWZh
ODk2YjFkZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29u
dGV4dFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHRQcml2YXRlLmgKQEAgLTgzLDExICs4Myw4IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFdh
cm1Jbml0aWFsUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dCk7CiAvLyBBdCBzb21lIHBvaW50
IGl0IHNob3VsZCBiZSByZW1vdmVkLgogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0VXNlc05l
dHdvcmtQcm9jZXNzKFdLQ29udGV4dFJlZiwgYm9vbCk7CiAKLVdLX0VYUE9SVCB2b2lkIFdLQ29u
dGV4dFRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLQ29udGV4dFJlZik7CiBXS19FWFBPUlQgdm9p
ZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYpOwogCi1XS19F
WFBPUlQgdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VX
b3JrZXJUZXN0aW5nKFdLQ29udGV4dFJlZiwgYm9vbCk7Ci0KIHR5cGVkZWYgdm9pZCAoKldLQ29u
dGV4dEludmFsaWRNZXNzYWdlRnVuY3Rpb24pKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lKTsKIFdL
X0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEludmFsaWRNZXNzYWdlRnVuY3Rpb24oV0tDb250ZXh0
SW52YWxpZE1lc3NhZ2VGdW5jdGlvbiBpbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKTsKICAgICAKQEAg
LTk3LDggKzk0LDYgQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0Rm9udEFsbG93TGlzdChX
S0NvbnRleHRSZWYsIFdLQXJyYXlSZWYpOwogCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRQcmVj
b25uZWN0VG9TZXJ2ZXIoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLVVJMUmVmIHNlcnZlclVSTCkg
V0tfQ19BUElfREVQUkVDQVRFRDsKIAotV0tfRVhQT1JUIFdLUHJvY2Vzc0lEIFdLQ29udGV4dEdl
dE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihXS0NvbnRleHRSZWYgY29udGV4dCk7Ci0KIFdLX0VY
UE9SVCB2b2lkIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihXS0NvbnRleHRSZWYgY29udGV4
dCwgV0tTdHJpbmdSZWYgZG9tYWluLCBXS1N0cmluZ1JlZiBuYW1lLCBXS0FycmF5UmVmIG1pbWVU
eXBlcywgV0tBcnJheVJlZiBleHRlbnNpb25zKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dENs
ZWFyU3VwcG9ydGVkUGx1Z2lucyhXS0NvbnRleHRSZWYgY29udGV4dCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCmluZGV4IDY0OGYzMDA5NjFhNTA2MGM5Y2RmMDNl
M2NmODA0NThiZjJiYjUwZGQuLmI0NDczNDIxMjAwNjEzYzE5ZWMzYWM5YWQ2Njk5NzUzNGFiZWYx
OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcApAQCAtMzk4LDYg
KzM5OCwxMSBAQCB1aW50NjRfdCBXS1BhZ2VHZXRSZW5kZXJUcmVlU2l6ZShXS1BhZ2VSZWYgcGFn
ZSkKICAgICByZXR1cm4gdG9JbXBsKHBhZ2UpLT5yZW5kZXJUcmVlU2l6ZSgpOwogfQogCitXS1dl
YnNpdGVEYXRhU3RvcmVSZWYgV0tQYWdlR2V0V2Vic2l0ZURhdGFTdG9yZShXS1BhZ2VSZWYgcGFn
ZSkKK3sKKyAgICByZXR1cm4gdG9BUEkoJnRvSW1wbChwYWdlKS0+d2Vic2l0ZURhdGFTdG9yZSgp
KTsKK30KKwogV0tJbnNwZWN0b3JSZWYgV0tQYWdlR2V0SW5zcGVjdG9yKFdLUGFnZVJlZiBwYWdl
UmVmKQogewogICAgIHJldHVybiB0b0FQSSh0b0ltcGwocGFnZVJlZiktPmluc3BlY3RvcigpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgKaW5kZXggNjcwYjVlOWZkNGI0NTRh
MmI3ZWRmZDIyMzJhYWU5NTFjNDY3ZDA4My4uYzUxYjgxNjJjODk3MzRhYjE1MmJlZjBlOTkyMzM3
ZDU1ZjJkZThhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQ
YWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgKQEAgLTEx
OCw2ICsxMTgsOCBAQCBXS19FWFBPUlQgZG91YmxlIFdLUGFnZUdldEVzdGltYXRlZFByb2dyZXNz
KFdLUGFnZVJlZiBwYWdlKTsKIAogV0tfRVhQT1JUIHVpbnQ2NF90IFdLUGFnZUdldFJlbmRlclRy
ZWVTaXplKFdLUGFnZVJlZiBwYWdlKTsKIAorV0tfRVhQT1JUIFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiBXS1BhZ2VHZXRXZWJzaXRlRGF0YVN0b3JlKFdLUGFnZVJlZiBwYWdlKTsKKwogV0tfRVhQT1JU
IFdLSW5zcGVjdG9yUmVmIFdLUGFnZUdldEluc3BlY3RvcihXS1BhZ2VSZWYgcGFnZSk7CiAKIFdL
X0VYUE9SVCBXS1N0cmluZ1JlZiBXS1BhZ2VDb3B5VXNlckFnZW50KFdLUGFnZVJlZiBwYWdlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRh
U3RvcmVSZWYuY3BwCmluZGV4IDlkZGE1OTFjOTUxODlhYjBjMjVhYzU1NDY2YzBhMmJmYzM5Mjdl
YmMuLjY4NjExNGFhNWVkMGExMzE1ZTVhOWQ2MTk1MWI4ODAyYzc1ZjhhYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVm
LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRl
ICJBUElIVFRQQ29va2llU3RvcmUuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5Lmgi
CiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiV0tB
UElDYXN0LmgiCiAjaW5jbHVkZSAiV0tEaWN0aW9uYXJ5LmgiCkBAIC02OSw2ICs3MCwxNiBAQCBX
S1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tXZWJzaXRlRGF0YVN0b3JlQ3JlYXRlV2l0aENvbmZpZ3Vy
YXRpb24oV0tXZWJzaXRlRGF0YVN0bwogICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZSgqV2ViS2l0Ojp0b0ltcGwoY29uZmlndXJhdGlvbiks
IHNlc3Npb25JRCkubGVha1JlZigpKTsKIH0KIAordm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVUZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKQorewor
ICAgIFdlYktpdDo6dG9JbXBsKGRhdGFTdG9yZSktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7
Cit9CisKK1dLUHJvY2Vzc0lEIFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRl
bnRpZmllcihXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKQoreworICAgIHJldHVybiBX
ZWJLaXQ6OnRvSW1wbChkYXRhU3RvcmUpLT5uZXR3b3JrUHJvY2VzcygpLnByb2Nlc3NJZGVudGlm
aWVyKCk7Cit9CisKIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlUmVtb3ZlSVRQRGF0YUZvckRvbWFp
bihXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBXS1N0cmluZ1JlZiBob3N0LCB2
b2lkKiBjb250ZXh0LCBXS1dlYnNpdGVEYXRhU3RvcmVSZW1vdmVJVFBEYXRhRm9yRG9tYWluRnVu
Y3Rpb24gY2FsbGJhY2spCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0
b3JlUmVmLmgKaW5kZXggZTc3ZDA5YzEwN2QxZGEwNzgzZDA5YzA3ZTI4MDNkMDg3MTI1ZTQ4Yi4u
N2RhN2NjNTUzZmQ5ZmUzOGEwMDczYjdkYjg3OTA3MTMwN2FjMTFjZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKQEAg
LTUwLDYgKzUwLDExIEBAIFdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0VGVzdGluZyhXCiAKIFdLX0VYUE9SVCB2b2lk
IFdLV2Vic2l0ZURhdGFTdG9yZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tXZWJzaXRlRGF0YVN0
b3JlUmVmIGRhdGFTdG9yZVJlZik7CiAKK1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9y
ZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSk7
CitXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
cyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKKworV0tfRVhQT1JUIFdLUHJvY2Vz
c0lEIFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihXS1dlYnNp
dGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKKwogV0tfRVhQT1JUIGJvb2wgV0tXZWJzaXRlRGF0
YVN0b3JlR2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJzaXRlRGF0YVN0b3Jl
UmVmIGRhdGFTdG9yZVJlZik7CiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0
b3JlUmVmLCBib29sIGVuYWJsZSk7CiB0eXBlZGVmIHZvaWQgKCpXS1dlYnNpdGVEYXRhU3RvcmVT
dGF0aXN0aWNzRXBoZW1lcmFsRnVuY3Rpb24pKGJvb2wgaXNFcGhlbWVyYWwsIHZvaWQqIGZ1bmN0
aW9uQ29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sLm1tCmluZGV4IGZmMzA5NDk4NmMyNDNkMDQ3NGYyNTJkMzkxZTZjY2I3NGYx
ZmVkNWIuLmU3ZjhhZDQwYWU2NGE2YzIxNzY4ZWQzMmM2NTlmNjkzODNjYjAwMDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCkBA
IC00MDYsMjggKzQwNiw2IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRv
RGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAgICAgX3Byb2Nlc3NQ
b29sLT5jbGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIH0KIAotLSAodm9pZClfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3MKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
KCk7Ci19Ci0KLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRs
eQotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1p
bmVudGx5Rm9yVGVzdGluZygpOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVw
YXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgX3By
b2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhb
Y29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSB7Ci0g
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lKCk7Ci19Ci0KIC0gKHZvaWQpX3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
CiB7CiAgICAgX3Byb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwpAQCAtNDM1
LDEyICs0MTMsNyBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rp
b25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogCiAtICh2b2lkKV9zZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOihCT09MKXVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MKIHsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7Ci19Ci0KLS0gKHBpZF90
KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIKLXsKLSAgICByZXR1cm4gX3Byb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpz
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MpOwogfQogCiAtIChwaWRfdClfcHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIKQEAg
LTU2MCwxOCArNTMzLDYgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9E
aWN0aW9uYXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMKICAgICBfcHJvY2Vzc1Bv
b2wtPnNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKGVuYWJsZWQpOwogfQogCi0t
ICh2b2lkKV9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQKLXsKLSAg
ICBfcHJvY2Vzc1Bvb2wtPnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7Ci19
Ci0KLS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjoo
Qk9PTClhbGxvd3MKLXsKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgX3Byb2Nlc3NQ
b29sLT5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoYWxsb3dzKTsK
LSNlbmRpZgotfQotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIC0gKGlkIDxfV0tHZW9sb2Nh
dGlvbkNvcmVMb2NhdGlvblByb3ZpZGVyPilfY29yZUxvY2F0aW9uUHJvdmlkZXIKIHsKQEAgLTYw
NCwxMSArNTY1LDYgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0
aW9uYXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMKICAgICB9KTsKIH0KIAotLSAo
Qk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICop
ZW50aXRsZW1lbnQKLXsKLSAgICByZXR1cm4gX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0hh
c0VudGl0bGVtZW50Rm9yVGVzdGluZyhlbnRpdGxlbWVudCk7Ci19Ci0KIC0gKHZvaWQpX2NsZWFy
UGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNw
YWNlICopcHJvdGVjdGlvblNwYWNlCiB7CiAgICAgX3Byb2Nlc3NQb29sLT5jbGVhclBlcm1hbmVu
dENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNwYWNlKFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZShw
cm90ZWN0aW9uU3BhY2UpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgKaW5kZXggNjc2OTAxNWUwODU1ODk5NGNk
OGEyMTlhMTdhOWM2OGFkZTNiNTM4My4uOTI4NjQ4MThlZDA0MTk5YmMzNGU4MWQ2MDE1NzM4ODgy
NWRhZmMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
UHJvY2Vzc1Bvb2xQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgKQEAgLTg3LDE0ICs4Nyw5IEBACiAtIChfV0tEb3du
bG9hZCAqKV9yZXN1bWVEb3dubG9hZEZyb21EYXRhOihOU0RhdGEgKilyZXN1bWVEYXRhIHdlYnNp
dGVEYXRhU3RvcmU6KFdLV2Vic2l0ZURhdGFTdG9yZSAqKWRhdGFTdG9yZSAgcGF0aDooTlNTdHJp
bmcgKilwYXRoIG9yaWdpbmF0aW5nV2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBXS19BUElf
QVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCiAvLyBUZXN0
IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgb25seSB3aGlsZSBubyB3ZWIgY29udGVudCBwcm9jZXNz
ZXMgYXJlIHJ1bm5pbmcuCi0tICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKLS0gKHZvaWQpX3NlbmROZXR3b3Jr
UHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKLS0g
KHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseSBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJv
Y2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsK
IC0gKHZvaWQpX3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTQpLCBpb3MoMTIuMCkpOwogCiAvLyBUZXN0IG9ubHkuCi0tIChwaWRfdClfbmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMpLCBpb3MoMTEuMCkp
OwogLSAocGlkX3QpX3ByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogCiAvLyBUZXN0IG9ubHkuCkBAIC0xMjIsMTMgKzEx
NywxMCBAQAogLSAodm9pZClfcHJlY29ubmVjdFRvU2VydmVyOihOU1VSTCAqKXNlcnZlclVSTCBX
S19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKCJXS1dlYlZpZXcuX3ByZWNvbm5lY3RU
b1NlcnZlciIsIG1hY29zKDEwLjEzLjQsIFdLX01BQ19UQkEpLCBpb3MoMTEuMywgV0tfSU9TX1RC
QSkpOwogCiAvLyBUZXN0IG9ubHkuCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTMuNCksIGlvcygxMS4zKSk7CiAtICh2b2lkKV9nZXRBY3RpdmVQYWdlc09yaWdpbnNJbldlYlBy
b2Nlc3NGb3JUZXN0aW5nOihwaWRfdClwaWQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNB
cnJheTxOU1N0cmluZyAqPiAqKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwotLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50Q3Jl
ZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVj
dGlvblNwYWNlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogCiBA
cHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0Nvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdF
bmFibGVkLCBzZXR0ZXI9X3NldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkOikgQk9P
TCBfY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQgV0tfQVBJX0RFUFJFQ0FURUQoIlBh
cnRpdGlvbmVkIGNvb2tpZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQiLCBtYWNvcygxMC4xMi4z
LCAxMC4xNC40KSwgaW9zKDEwLjMsIDEyLjIpKTsKLS0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwg
aW9zKDEzLjApKTsKIAogLy8gVGVzdCBvbmx5LgogLSAodm9pZClfc2VlZFJlc291cmNlTG9hZFN0
YXRpc3RpY3NGb3JUZXN0aW5nV2l0aEZpcnN0UGFydHk6KE5TVVJMICopZmlyc3RQYXJ0eVVSTCB0
aGlyZFBhcnR5OihOU1VSTCAqKXRoaXJkUGFydHlVUkwgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRp
b246KEJPT0wpc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24gY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQppbmRleCAyOThkOWNlYzll
ODRkOGE1MTIyMDY1Y2M5OTIzM2VmNGYwYjk1Mzg5Li5kZTZkNWU2Mjg4N2I2NTRjNzQ2MDg4M2Fm
OGYzZTcyMDkzNjc1MjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KQEAgLTYxNyw2ICs2MTcsMTEgQEAgc3Rh
dGljIFZlY3RvcjxXZWJLaXQ6OldlYnNpdGVEYXRhUmVjb3JkPiB0b1dlYnNpdGVEYXRhUmVjb3Jk
cyhOU0FycmF5ICpkYXRhUmVjb3IKICAgICB9KTsKIH0KIAorLSAoQk9PTClfbmV0d29ya1Byb2Nl
c3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQKK3sKKyAg
ICByZXR1cm4gX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRG
b3JUZXN0aW5nKGVudGl0bGVtZW50KTsKK30KKwogLSAoaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVE
ZWxlZ2F0ZT4pX2RlbGVnYXRlCiB7CiAgICAgcmV0dXJuIF9kZWxlZ2F0ZS5nZXQoKS5nZXQoKTsK
QEAgLTY2OCw0ICs2NzMsMzcgQEAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6OldlYnNpdGVEYXRhUmVj
b3JkPiB0b1dlYnNpdGVEYXRhUmVjb3JkcyhOU0FycmF5ICpkYXRhUmVjb3IKICNlbmRpZgogfQog
CistICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcworeworICAgIF93ZWJzaXRlRGF0YVN0
b3JlLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworfQorCistICh2b2lkKV9zZW5kTmV0d29y
a1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVy
Cit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1
c3BlbmRGb3JUZXN0aW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0
aW9uSGFuZGxlcildIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9KTsKK30K
KworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Cit7Cisg
ICAgX3dlYnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseUZvclRlc3RpbmcoKTsKKworfQorCistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRS
ZXN1bWUKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVz
dW1lKCk7Cit9CisKKy0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFj
a2dyb3VuZAoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnN5bnRo
ZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7Cit9CisKKy0gKHBpZF90KV9uZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIKK3sKKyAgICByZXR1cm4gX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdv
cmtQcm9jZXNzKCkucHJvY2Vzc0lkZW50aWZpZXIoKTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3Rv
cmVQcml2YXRlLmgKaW5kZXggOTkzMjAxMDQ2YjU1MWMzZjI4ZGYyZGMwYTAzNDZkN2JjNzlhYzVm
NC4uODVmZDk5ODZlMjg2NmZmMzc4NjlmMmRjNzg1NTc5MTg0NGIzMWYzZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZh
dGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0
YVN0b3JlUHJpdmF0ZS5oCkBAIC04NSw5ICs4NSwxOCBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNV
SW50ZWdlciwgX1dLV2Vic2l0ZURhdGFTdG9yZUZldGNoT3B0aW9ucykgewogCiAtICh2b2lkKV9y
ZW5hbWVPcmlnaW46KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKiluZXdOYW1lIGZvckRhdGFP
ZlR5cGVzOihOU1NldDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9j
ZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9w
ZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVE
ZWxlZ2F0ZT4gX2RlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMu
MCkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0
YVN0b3JlQ29uZmlndXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5k
Oih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nl
c3NXaWxsU3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJB
KSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3Vt
ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwor
LSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistIChwaWRf
dClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBlbmQKIAogTlNfQVNTVU1FX05PTk5VTExfRU5E
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29r
aWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwCmluZGV4IDFlZTczZWJjMGVhMDM2Zjg2YjNmZTk0NDE0OTA3MmU2YWM0
ZGM3NjcuLjc3MDE0OTk4MzZlZTQ0ZjlhY2YwZTI3MGQ3MGM5NWQxNmJlNjc4ZDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1h
bmFnZXIuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0Q29va2llTWFuYWdlci5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94
eS5oIgogI2luY2x1ZGUgIlNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUuaCIKICNpbmNs
dWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXRDb29raWVNYW5h
Z2VyUHJpdmF0ZS5oIgpAQCAtNTYsNiArNTcsMTIgQEAgZW51bSB7CiB9OwogCiBzdHJ1Y3QgX1dl
YktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkmIGNv
b2tpZU1hbmFnZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGRhdGFNYW5hZ2VyKTsK
KyAgICAgICAgcmV0dXJuIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShkYXRh
TWFuYWdlcikubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgfQorCiAgICAg
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChk
YXRhTWFuYWdlcik7CkBAIC02NCw4ICs3MSw3IEBAIHN0cnVjdCBfV2ViS2l0Q29va2llTWFuYWdl
clByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSgpCiAgICAgewot
ICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
R2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5z
dXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxs
YmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CisgICAgICAgIGNvb2tpZU1hbmFnZXIoKS5zZXRD
b29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsKICAgICB9CiAKICAg
ICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW5hZ2VyOwpAQCAtMTM5LDExICsxNDUs
OSBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbgogewogICAgIFdlYktpdENvb2tpZU1hbmFnZXIq
IG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBF
X0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFn
ZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2Vy
KSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklE
KCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25h
bHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9CisgICAgbWFuYWdlci0+cHJpdi0+
Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2lnbmFsX2VtaXQobWFuYWdlciwg
c2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1hbmFnZXI7CiB9CiAK
QEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfcGVyc2lz
dGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsCiAgICAgaWYgKHNlc3Np
b25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8qIHBy
b2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFn
ZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8
V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNz
aW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50
U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIo
KS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgo
ZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOwog
fQogCiAvKioKQEAgLTE5Miw4ICsxOTUsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9z
ZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBXZWJLaQogewog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsK
IAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQotICAgICAgICBwcm9j
ZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFj
Y2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2ll
TWFuYWdlcigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lv
bklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CiB9CiAK
IC8qKgpAQCAtMjI0LDcgKzIyNiw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9h
Y2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIEdDYW5jCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29v
a2llTWFuYWdlclByb3h5PigpLT5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdl
cigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQoKSwgdG9XZWJLaXRD
b29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7CiB9CkBAIC0yNjksMTEgKzI3MSw3
IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUoV2ViS2l0Q29va2llTWFu
YWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7
CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdl
ciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBh
cmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sg
cmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNv
IGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vz
c1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXIt
PnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2Vi
Q29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25J
RCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0o
KSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZXMobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tpZSkgfSwgW3Rhc2sg
PSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2su
Z2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIwLDExICszMTgsNyBAQCB2b2lkIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2Vy
LCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAogICAgIEdSZWZQdHI8
R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwg
Y2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4g
ZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAg
Ly8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZp
cnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRX
ZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFn
ZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVSTChVUkwoKSwg
U3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25zdCBWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIG1hbmFnZXItPnByaXYtPmNvb2tp
ZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBVUkwoVVJM
KCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAgR0xpc3QqIGNvb2tp
ZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBjb29raWVzKQog
ICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29raWVzTGlzdCwgY29v
a2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzcyLDcgQEAgdm9pZCB3ZWJraXRfY29v
a2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBT
b3VwQ29va2kKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdU
YXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNh
bGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZy
b20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8v
IG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJz
dCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2Vy
KTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5
PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNv
b2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIG1hbmFnZXItPnBy
aXYtPmNvb2tpZU1hbmFnZXIoKS5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklE
KCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgewog
ICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJVRSk7CiAgICAgfSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRX
ZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdl
YkNvbnRleHQuY3BwCmluZGV4IDg5YmU1NmFkNzFkNzE1NjkxMmEyNjkxNTMwNTdkZjUyN2NkZDQ0
NjAuLmNmZjAzNTg2ZGY4YTFmYjk2YTYyYTAxN2EzYzQ2ZTVmNDBkZTJkMzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3Bw
CkBAIC00MDQsNyArNDA0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29udGV4dENvbnN0cnVj
dGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0g
YWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcoImxvY2FsLXN0b3JhZ2Ut
ZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEoKSwgbnVsbHB0cikp
OwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKGNvbmZp
Z3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRQcmltYXJ5RGF0YVN0b3JlKHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJzaXRlRGF0YU1hbmFn
ZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1lc3NhZ2VIYW5kbGVy
KFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgLy8gU2lu
ayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRyPFdlYktpdFVzZXJNZXNzYWdlPiB1
c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRlKFdURk1vdmUobWVzc2FnZSksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTE2MDMsOCArMTYwMiw4IEBAIHZvaWQgd2Vi
a2l0X3dlYl9jb250ZXh0X3ByZWZldGNoX2RucyhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBjaGFyKiBob3N0CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0NPTlRF
WFQoY29udGV4dCkpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoaG9zdG5hbWUpOwogCi0gICAgaWYg
KGNvbnRleHQtPnByaXYtPmRuc1ByZWZldGNoZWRIb3N0cy5hZGQoaG9zdG5hbWUpLmlzTmV3RW50
cnkpCi0gICAgICAgIGNvbnRleHQtPnByaXYtPnByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5n
UHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWZldGNoRE5TKFN0cmluZzo6ZnJv
bVVURjgoaG9zdG5hbWUpKSk7CisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IHdlYmtpdFdl
YnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShjb250ZXh0LT5wcml2LT53ZWJzaXRlRGF0YU1h
bmFnZXIuZ2V0KCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5nOjpmcm9tVVRGOCho
b3N0bmFtZSkpLCAwKTsKICAgICBjb250ZXh0LT5wcml2LT5kbnNQcmVmZXRjaEh5c3RlcmVyaXMu
aW1wdWxzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IDRhYjQ3ZmZmNTkxMWVl
YzM3ZTU2YmM1YmJiMzI5ZWJhZWE3ZDM4NjUuLjMwMDZmNGZhZTZjNDNjMjZiZjQwODIyYjZkZTg2
OGVmMmUwMmNmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0xMzkyLDggKzEzOTIsOCBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUoY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbgogCiAgICAgY29va2llLmh0dHBPbmx5ID0gKmh0dHBP
bmx5OwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9j
ZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2ll
TWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCks
IHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBj
b29raWVNYW5hZ2VyID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCku
Y29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhwYWdlLT53ZWJz
aXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CiAg
ICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAtMTQwOSw4ICsx
NDA5LDggQEAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygKIAogICAgIFN0cmluZyBob3N0ID0gYWN0
aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBj
b29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhw
YWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRp
bmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkm
IGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3Mo
KS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29raWVzRm9ySG9z
dG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21h
aW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOwogCiAgICAgcmV0dXJuIHsgfTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQ
cm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgK
aW5kZXggNDFjMGEwZmJmNTA2ZWZhMTQwOGJjZWY5YWY4YTkwYjg1YTFhZDA4YS4uNGYzOThiNTMw
ZjYwODU3NWM5NjdiODNjNzRmYTJmNDMyOGY2Y2UzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94eSgpOwogCiAgICAgdm9pZCBjb25u
ZWN0KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGVybWluYXRl
KCk7CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigpID0gMDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAppbmRleCBkYmU0NGY5NTk0MTA1MTEyMTUx
MjhkMjlkMjE0ZWVlMDc0YWFmODRjLi40Yzg0NWEwZWM3MjU2NTljZmU3OWNlYTM1ZDNjYmE5NjY4
MzQ2MTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaApAQCAtNDEsMTEgKzQx
LDExIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHk7CiAKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCBmaW5h
bCA6IHB1YmxpYyBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCB7Ci1wcml2YXRlOgor
cHVibGljOgogICAgIHZvaWQgc3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JikgZmluYWw7CiAgICAgdm9pZCBzdG9wTG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2Nv
bE1hbmFnZXJQcm94eSYsIExlZ2FjeUN1c3RvbVByb3RvY29sSUQpIGZpbmFsOwogICAgIHZvaWQg
aW52YWxpZGF0ZShMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYpIGZpbmFsOwotCitw
cml2YXRlOgogICAgIEhhc2hNYXA8TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgUmV0YWluUHRyPFdL
Q3VzdG9tUHJvdG9jb2xMb2FkZXI+PiBtX2xvYWRlck1hcDsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4IDc2
ZDdhNjQwNDFhMjkxZDVmMjk3MzUxNzZlMzFlYTcwZjVlZDU1NmMuLjE5ZWZjYTZhNjQwY2IyZjMx
YzJhODc1NTA2YjFkNjY5ZDZkYzc2YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtMTM0LDggKzEzNCw5IEBAIHN0
YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0gICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNldFByb2Nlc3NTdXBwcmVz
c2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAgICBXZWJzaXRlRGF0
YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbZW5hYmxlZCA9IHByb2Nlc3NTdXBwcmVz
c2lvbkVuYWJsZWQoKV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBk
YXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGVu
YWJsZWQpOworICAgIH0pOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAg
aWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkK
QEAgLTE2Niw4ICsxNjcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emUoKQogICAgIGlmICghW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9v
bEZvcktleTpAIldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyIl0pCiAgICAgICAg
IGluc3RhbGxNZW1vcnlQcmVzc3VyZUhhbmRsZXIoKTsKIAotICAgIHNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudD4oKSk7Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFD
Q0FUQUxZU1QpCiAgICAgaWYgKCFfTUdDYWNoZVZhbGlkKCkpIHsKICAgICAgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9E
RUZBVUxULCAwKSwgXnsKQEAgLTQ5MywyMiArNDkyLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmEKIAogICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFu
ZGFyZFVzZXJEZWZhdWx0c107CiAKLSAgICB7Ci0gICAgICAgIGJvb2wgaXNTYWZhcmkgPSBmYWxz
ZTsKLSAgICAgICAgYm9vbCBpc01pbmlCcm93c2VyID0gZmFsc2U7Ci0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNN
b2JpbGVTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6OklPU0FwcGxp
Y2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAgICAgIGlz
U2FmYXJpID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCk7Ci0gICAgICAgIGlz
TWluaUJyb3dzZXIgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNNaW5pQnJvd3NlcigpOwot
I2VuZGlmCi0gICAgICAgIGlmIChpc1NhZmFyaSB8fCBpc01pbmlCcm93c2VyKSB7Ci0gICAgICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5odHRwUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6
KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5odHRwc1Byb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0
cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgfQotICAgIH0K
LQogICAgIHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQgPSBhZG9wdENGKF9DRk5ldHdvcmtD
b3B5QVRTQ29udGV4dCgpKTsKIAogICAgIHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NNZW1vcnlQ
cmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpXZWJLaXRTdXBwcmVzc01lbW9y
eVByZXNzdXJlSGFuZGxlckRlZmF1bHRzS2V5XTsKQEAgLTUyMiwxMiArNTA1LDggQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmEKICAgICBOU051bWJlciAqZGF0YWJhc2VFbmFibGVkVmFsdWUgPSBb
ZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJu
YWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFibGVkS2V5KCku
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogICAgIGlmIChkYXRhYmFzZUVuYWJsZWRWYWx1ZSkK
ICAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IGRhdGFiYXNlRW5h
YmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIHBhcmFtZXRlcnMuc2hvdWxk
RW5hYmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuaXNJ
VFBEYXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJp
YnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5OjphZENsaWNrQXR0
cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwot
Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9u
ID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQoKQpAQCAtNjA2LDEx
ICs1ODUsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVk
KCkgY29uc3QKICAgICByZXR1cm4gIW1fdXNlck9ic2VydmFibGVQYWdlQ291bnRlci52YWx1ZSgp
ICYmICFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKTsK
IH0KIAotYm9vbCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZv
clRlc3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKLXsKLSAgICByZXR1cm4gV1RGOjpo
YXNFbnRpdGxlbWVudChlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+eHBjQ29u
bmVjdGlvbigpLCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKLX0KLQogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKIGZsb2F0IFdlYlByb2Nlc3NQ
b29sOjpkaXNwbGF5QnJpZ2h0bmVzcygpCiB7CkBAIC05NDcsMjMgKzkyMSw0IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVySGlnaER5bmFtaWNSYW5nZUNoYW5nZUNhbGxiYWNrKCkKIH0K
ICNlbmRpZgogCi1PU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IFdlYlByb2Nlc3NQb29sOjp4cGNF
bmRwb2ludE1lc3NhZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2VuZHBvaW50TWVzc2FnZTsK
LX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRU
b1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRwb2ludE1lc3NhZ2UpCi17
Ci0gICAgbV9lbmRwb2ludE1lc3NhZ2UgPSBlbmRwb2ludE1lc3NhZ2U7Ci0KLSAgICBmb3IgKGF1
dG8gcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7Ci0gICAgICAgIGlmIChwcm9jZXNzLT5zdGF0ZSgp
ICE9IEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6U3RhdGU6OlJ1bm5pbmcpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKCFwcm9jZXNzLT5jb25uZWN0aW9uKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgYXV0byBjb25uZWN0aW9uID0gcHJvY2Vzcy0+Y29ubmVjdGlv
bigpLT54cGNDb25uZWN0aW9uKCk7Ci0gICAgICAgIHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2Fn
ZShjb25uZWN0aW9uLCBlbmRwb2ludE1lc3NhZ2UuZ2V0KCkpOwotICAgIH0KLX0KLQogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRQcm94eS5jcHAKaW5kZXggYzVkZTRlN2QwZjU5MTk0ZjQzYTAyM2IwODllMzcy
YzU4Y2Y4ZWUwNi4uZjdjZmY4NTJmMGJhNmQwMTU1MTE2NWRkOGE5ZjdkNTc2M2IwMDdkMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
LmNwcApAQCAtNzUsOCArNzUsOCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmNhbmNlbCgpCiAgICAg
aWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoTmV0d29ya1By
b2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOworICAgIGlmIChtX2RhdGFTdG9y
ZSkKKyAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOwogfQogCiB2
b2lkIERvd25sb2FkUHJveHk6OmludmFsaWRhdGUoKQpAQCAtMTAzLDE1ICsxMDMsMTMgQEAgV2Vi
UGFnZVByb3h5KiBEb3dubG9hZFByb3h5OjpvcmlnaW5hdGluZ1BhZ2UoKSBjb25zdAogI2lmIFBM
QVRGT1JNKENPQ09BKQogdm9pZCBEb3dubG9hZFByb3h5OjpwdWJsaXNoUHJvZ3Jlc3MoY29uc3Qg
VVJMJiBVUkwpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgIGlmICghbV9kYXRhU3Rv
cmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1f
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOwotICAgICAgICBBU1NFUlRf
VU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbik7
Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwot
ICAgIH0KKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOworICAgIGJvb2wgY3Jl
YXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJM
LmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgaGFu
ZGxlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVk
U2FuZGJveEV4dGVuc2lvbik7CisgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKG1fZG93
bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKIH0KICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkK
IApAQCAtMTMxLDExICsxMjksMTAgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRTdGFydChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2UKIAogdm9pZCBE
b3dubG9hZFByb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmJiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgdWludDY0X3QgY2hhbGxl
bmdlSUQpCiB7Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgIGlmICghbV9wcm9jZXNzUG9v
bCB8fCAhbV9kYXRhU3RvcmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gYXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk6OmNyZWF0
ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgY2hhbGxlbmdlSUQsIG1ha2VSZWYo
Km1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpKSwgbnVsbHB0cik7
Ci0KKyAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkgPSBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSks
IGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb25u
ZWN0aW9uKCkpLCBudWxscHRyKTsKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgp
LmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgqdGhpcywgYXV0aGVudGljYXRpb25D
aGFsbGVuZ2VQcm94eS5nZXQoKSk7CiB9CiAKQEAgLTE0NiwxNSArMTQzLDEwIEBAIHZvaWQgRG93
bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmIHByb3Bvc2VkUmVx
dWVzdCwgY29uc3QgUmVzCiAKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLndp
bGxTZW5kUmVxdWVzdCgqdGhpcywgV1RGTW92ZShwcm9wb3NlZFJlcXVlc3QpLCByZWRpcmVjdFJl
c3BvbnNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXShSZXNvdXJjZVJl
cXVlc3QmJiBuZXdSZXF1ZXN0KSB7CiAgICAgICAgIG1fcmVkaXJlY3RDaGFpbi5hcHBlbmQobmV3
UmVxdWVzdC51cmwoKSk7Ci0KLSAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQ
b29sKQorICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fZGF0YVN0b3JlKQogICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0
ZWRUaGlzLT5tX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpOwotICAgICAgICBpZiAoIW5l
dHdvcmtQcm9jZXNzUHJveHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbmV0d29y
a1Byb2Nlc3NQcm94eS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2ls
bFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDAp
OworICAgICAgICBhdXRvJiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVjdGVkVGhpcy0+bV9k
YXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzUHJveHku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHBy
b3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOwogICAgIH0pOwogfQog
CkBAIC0xNzksMTYgKzE3MSwxNCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMoRG93bmxvYWRJRCBkb3dubAogICAgIGlmICgh
bV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fcHJvY2Vzc1Bvb2wt
PmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUo
KnRoaXMsIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzYW5pdGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1
Z2dlc3RlZEZpbGVuYW1lKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
ZG93bmxvYWRJRCA9IGRvd25sb2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwg
U3RyaW5nIGRlc3RpbmF0aW9uKSB7CisgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQo
KS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VS
ZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUp
LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBkb3dubG9hZElEXSAoQWxs
b3dPdmVyd3JpdGUgYWxsb3dPdmVyd3JpdGUsIFN0cmluZyBkZXN0aW5hdGlvbikgewogICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZTsKICAgICAg
ICAgaWYgKCFkZXN0aW5hdGlvbi5pc051bGwoKSkKICAgICAgICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZShkZXN0aW5hdGlvbiwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgICAgICBpZiAoIW1fcHJvY2Vz
c1Bvb2wpCisgICAgICAgIGlmICghbV9kYXRhU3RvcmUpCiAgICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihk
b3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVy
d3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDApOworICAgICAgICBtX2RhdGFTdG9yZS0+
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVE
ZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElELCBkZXN0aW5hdGlvbiwg
c2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6
OlllcyksIDApOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKaW5kZXggNzZhMDcxNTdiNTkxYWFj
ZTUwZjE1ZDE1MjVkYmNmYjhjNmE0YmJjOC4uZDc0YThmYTZjNjRjODg2MzVmOWViNzVjYTczZTcw
ZmQ5NDZjYTAyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkUHJveHlNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcApAQCAtNDQsNyArNDQsNyBAQAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIERvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlNYXAoTmV0d29ya1Byb2Nl
c3NQcm94eSYgcHJvY2VzcykKLSAgICA6IG1fcHJvY2VzcyhtYWtlV2Vha1B0cihwcm9jZXNzKSkK
KyAgICA6IG1fcHJvY2Vzcyhwcm9jZXNzKQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICwgbV9z
aG91bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJvY2Vzc0hhc0VudGl0bGVtZW50KCJjb20uYXBwbGUu
bXVsdGl0YXNraW5nLnN5c3RlbWFwcGFzc2VydGlvbnMiKSkKICNlbmRpZgpAQCAtNzAsMTQgKzcw
LDEyIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxhdGZvcm1EZXN0cm95KCkKIAogdm9pZCBE
b3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpCiB7Ci0gICAg
aWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7CisgICAgbV9wcm9j
ZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbkRpZEVudGVyQmFj
a2dyb3VuZCgpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbldp
bGxFbnRlckZvcmVncm91bmQoKQogewotICAgIGlmIChtX3Byb2Nlc3MpCi0gICAgICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVy
Rm9yZWdyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKIH0KIAogRG93bmxv
YWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0
YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0Rh
dGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCkBAIC05MiwxMyAr
OTAsMTIgQEAgRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQ
cm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUKICAgICAgICAgbV9kb3dubG9hZFVJQXNz
ZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihnZXRDdXJyZW50UHJvY2Vzc0lE
KCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVk
TmV0d29ya2luZyk7CiAKICAgICAgICAgQVNTRVJUKCFtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2Vy
dGlvbik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcHJvY2Vzcyk7Ci0gICAgICAgIG1fZG93
bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPiht
X3Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9j
ZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CisgICAgICAgIG1fZG93bmxv
YWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3By
b2Nlc3MucHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NB
c3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAogICAgICAgICBSRUxFQVNFX0xP
RyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyB0b29rICdXZWJLaXQgZG93bmxvYWRzJyBh
c3NlcnRpb25zIGZvciBVSVByb2Nlc3MgYW5kIE5ldHdvcmtQcm9jZXNzIik7CiAgICAgfQogCi0g
ICAgbV9wcm9jZXNzLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpLmRvd25s
b2FkSUQoKSwgZG93bmxvYWRQcm94eS5nZXQoKSk7CisgICAgbV9wcm9jZXNzLmFkZE1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBk
b3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3dubG9hZFByb3h5Lmdl
dCgpKTsKIAogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTA5LDEyICsxMDYsOSBA
QCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQoRG93bmxvYWRQcm94eSYg
ZG93bmxvYWRQcm94eSkKIAogICAgIFJFTEVBU0VfTE9HKExvYWRpbmcsICJSZW1vdmluZyBkb3du
bG9hZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIiwgZG93bmxv
YWRJRC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJveHkgbWF5IGJlIGhv
bGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCi0gICAgYXV0byBw
cm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgp
KTsKLQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CiAKLSAg
ICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CisgICAg
bV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CiAgICAgZG93
bmxvYWRQcm94eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9kb3dubG9hZHMucmVtb3ZlKGRvd25sb2Fk
SUQpOwogCkBAIC0xMzMsMTUgKzEyNywxMyBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmludmFs
aWRhdGUoKQogICAgIGZvciAoY29uc3QgYXV0byYgZG93bmxvYWQgOiBtX2Rvd25sb2Fkcy52YWx1
ZXMoKSkgewogICAgICAgICBkb3dubG9hZC0+cHJvY2Vzc0RpZENsb3NlKCk7CiAgICAgICAgIGRv
d25sb2FkLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRv
d25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKKyAgICAgICAgbV9wcm9jZXNzLnJl
bW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7CiAgICAgfQog
CiAgICAgbV9kb3dubG9hZHMuY2xlYXIoKTsKICAgICBtX2Rvd25sb2FkVUlBc3NlcnRpb24gPSBu
dWxscHRyOwogICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbnVsbHB0cjsKICAg
ICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyBEb3dubG9hZFByb3h5
TWFwIGludmFsaWRhdGVkIC0gUmVsZWFzZWQgJ1dlYktpdCBkb3dubG9hZHMnIGFzc2VydGlvbnMg
Zm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKLQotICAgIG1fcHJvY2VzcyA9IG51
bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKaW5kZXggM2JlMjA3OWEw
ZjJjNGI1MzcwNjJjZTEzMDBlMWNkNWRhNDQ0ZmZiZS4uNGZhMDAxYmQ3ZmFlMWNlZDAyNGQyYjkx
ZjIwMTcwZmY5OTQ1MjhiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZSgpOwogICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAK
LSAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fcHJvY2VzczsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5JiBtX3Byb2Nlc3M7CiAgICAgSGFzaE1hcDxEb3dubG9hZElELCBSZWZQdHI8
RG93bmxvYWRQcm94eT4+IG1fZG93bmxvYWRzOwogCiAgICAgYm9vbCBtX3Nob3VsZFRha2VBc3Nl
cnRpb24geyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDhjMjNiYmU4YzA2YTE1OTljYjli
OTE2YTBiMzJhZmIzNzc4M2YzMDUuLmQ2YzMzMjNkZDkzZTY5ZjU2YWRmNmJlMGQyYTFiMTRmMDgy
MjQ1MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9t
UHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJQcm94eS5jcHAKQEAgLTQ0LDE3ICs0NCwxNyBAQCBMZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJQcm94eTo6fkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5KCkK
IAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKExl
Z2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9j
ZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhp
cywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5
LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9t
UHJvdG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9j
b2xJRCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJ
RCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKIH0KIAogdm9pZCBMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgbV9uZXR3
b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
KCkuaW52YWxpZGF0ZSgqdGhpcyk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUoKnRoaXMpOwogfQogCiB2b2lkIExlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3YXNSZWRpcmVjdGVkVG9SZXF1ZXN0KExlZ2Fj
eUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRp
cmVjdFJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggYzFmNDcwOGI4MWNmYTUzYWIxMjJjMjk0
NDY3NWU3ODI1MTY3MTIxZi4uYzAxOThiZjViNjk1ZDc3NDExMjFmNDVkMzlkZTdmMjBkYTk0OTRj
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1By
b2Nlc3NQcm94eS5oIgogCiAjaW5jbHVkZSAiQVBJQ29udGVudFJ1bGVMaXN0LmgiCisjaW5jbHVk
ZSAiQVBJQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VQcm94eS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdlci5o
IgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHlNYXAuaCIKQEAgLTM1LDYgKzM2LDcgQEAKICNpbmNs
dWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkxl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNlbmRpZgorI2luY2x1
ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC00OCw2ICs1MCw3IEBACiAjaW5jbHVk
ZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vz
c1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmgiCisjaW5j
bHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3Nh
Z2VzLmgiCkBAIC02MCw2ICs2Myw3IEBACiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZUNsaWVu
dC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KIAogI2lmIEVOQUJMRShTRUNf
SVRFTV9TSElNKQpAQCAtNzAsMjAgKzc0LDExOCBAQAogI2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2lu
L1hQQ1NQSS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIKKyNlbmRpZgorCiAjZGVmaW5lIE1FU1NB
R0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0aW9uLCBjb25uZWN0
aW9uKCkpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
LU5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wm
IHByb2Nlc3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KHByb2Nlc3NQb29sLmFs
d2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQotICAgICwgbV9wcm9jZXNzUG9vbChwcm9j
ZXNzUG9vbCkKK3N0YXRpYyBIYXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkqPiYgbmV0d29ya1By
b2Nlc3Nlc1NldCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkqPj4g
c2V0OworICAgIHJldHVybiBzZXQ7Cit9CisKK1ZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94
eT4+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKQoreworICAgIFZl
Y3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICBwcm9jZXNzZXMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuc2l6ZSgpKTsKKyAg
ICBmb3IgKGF1dG8qIG5ldHdvcmtQcm9jZXNzIDogbmV0d29ya1Byb2Nlc3Nlc1NldCgpKQorICAg
ICAgICBwcm9jZXNzZXMudW5jaGVja2VkQXBwZW5kKCpuZXR3b3JrUHJvY2Vzcyk7CisgICAgcmV0
dXJuIHByb2Nlc3NlczsKK30KKworUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRlZmF1bHROZXR3b3JrUHJvY2VzcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gcHJvY2VzczsKKyAgICBpZiAoIXBy
b2Nlc3MuZ2V0KCkpCisgICAgICAgIHByb2Nlc3MuZ2V0KCkgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gKnByb2Nlc3MuZ2V0KCk7Cit9CisKK3ZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKCkKK3sKKyAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6
OnRlcm1pbmF0ZSgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlv
blBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBh
cHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KKyAgICAvLyBXZSBzaG91
bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sg
b24gb3VyIEFQSXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMDI0Ni4KKyAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7CisgICAgICAgIGNhbGxP
bk1haW5SdW5Mb29wQW5kV2FpdChbdGhpc10geworICAgICAgICAgICAgc2VuZENyZWF0aW9uUGFy
YW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBOZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0
aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJh
bWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xp
Y3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVt
ZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CisgICAgcGFy
YW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsK
KyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1Zl
Y3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJB
c05vQWNjZXNzKCkpOworICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7CisgICAgZm9yIChhdXRvJiBzY2hlbWUg
OiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkp
CisgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2Nv
bHMuYXBwZW5kKHNjaGVtZSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoU3Ry
aW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFn
ZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29r
aWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0g
V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsgIWNvbnRhaW5lckNh
Y2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBh
cmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBp
ZiAoU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRC
dW5kbGVEaXJlY3RvcnkoKTsgIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3Rvcnks
IFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRs
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisjZW5kaWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CisgICAgcGFyYW1l
dGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gZGF0YVN0b3JlUGFyYW1ldGVycygpOworICAgIHNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFy
YW1ldGVycyksIDApOworfQorCitWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IE5l
dHdvcmtQcm9jZXNzUHJveHk6OmRhdGFTdG9yZVBhcmFtZXRlcnMoKQoreworICAgIFZlY3RvcjxX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1ldGVyczsKKyAgICBmb3IgKGF1dG8mIHN0
b3JlIDogbV93ZWJzaXRlRGF0YVN0b3JlcykKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoc3Rv
cmUucGFyYW1ldGVycygpKTsKKyAgICByZXR1cm4gcGFyYW1ldGVyczsKK30KKworc3RhdGljIGJv
b2wgYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKQoreworICAg
IGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xz
KCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJp
b3JpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3Vu
ZEFzc2VydGlvbigpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNob3Vs
ZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdv
cmtQcm9jZXNzUHJveHkoKQorICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KGFueVByb2Nlc3NQ
b29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCiAjaWYgRU5BQkxFKExFR0FDWV9D
VVNUT01fUFJPVE9DT0xfTUFOQUdFUikKKyAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50KG1ha2VVbmlxdWVSZWY8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQog
ICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgqdGhpcykKKyNlbHNlCisgICAgLCBt
X2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogI2VuZGlmCi0gICAgLCBtX3Rocm90dGxlcigqdGhpcywg
cHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV90
aHJvdHRsZXIoKnRoaXMsIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2Vy
dGlvbigpKQorICAgICwgbV9jb29raWVNYW5hZ2VyKFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3Jl
YXRlKCp0aGlzKSkKIHsKICAgICBjb25uZWN0KCk7CisgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVy
c1RvTmV3UHJvY2VzcygpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5hZGQodGhpcyk7CiB9
CiAKIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1Byb3h5KCkKQEAgLTk4LDYg
KzIwMCw3IEBAIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1Byb3h5KCkKIAog
ICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+
aW52YWxpZGF0ZSgpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5yZW1vdmUodGhpcyk7CiB9
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1
bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMpCkBAIC0xMDUsMTUgKzIwOCwxMiBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5j
aGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuYwogICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1R5cGUg
PSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOwogICAgIEF1eGlsaWFyeVBy
b2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zKTsKIAotICAgIGlmIChw
cm9jZXNzUG9vbCgpLnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sKCkuc2V0U2hvdWxkTWFrZU5leHROZXR3b3Jr
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKLSAgICAgICAgbGF1bmNoT3B0aW9u
cy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKKyAgICBmb3Ig
KGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZXRTaG91
bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoZmFsc2UpOworICAg
ICAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KLQotI2lmIFBMQVRGT1JNKFBMQVlTVEFUSU9O
KQotICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1BhdGggPSBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQ
cm9jZXNzUGF0aCgpOwotICAgIGxhdW5jaE9wdGlvbnMudXNlcklkID0gbV9wcm9jZXNzUG9vbC51
c2VySWQoKTsKLSNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNvbm5lY3Rp
b25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCkBAIC0xNjYsMTIgKzI2Niwx
MiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQo
Ym9vbCBiYWNrZ3JvdW5kKQogICAgIH0KIH0KIAotRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nl
c3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9E
YXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQorRG93bmxvYWRQ
cm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0
YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1l
SW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAgICAgaWYgKCFtX2Rvd25s
b2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1ha2VVbmlxdWU8RG93
bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+
Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVx
dWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVybiBtX2Rvd25sb2Fk
UHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBwcm9jZXNzUG9vbCwgcmVz
b3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNp
dGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAo
V2Vic2l0ZURhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjM3LDggKzMzNywxMSBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpCiB7CiAgICAg
Y2xlYXJDYWxsYmFja1N0YXRlcygpOwogCi0gICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNz
IG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRoaXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlz
IHdpbGwgY2F1c2UgdXMgdG8gYmUgZGVsZXRlZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQ
cm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CisgICAgUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IHByb3Rl
Y3RlZFRoaXMoKnRoaXMpOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2Vzc0NyYXNoZWQoKnRoaXMpOworICAgIGZvciAoYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA6IG1f
d2Vic2l0ZURhdGFTdG9yZXMpCisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3NDcmFzaGVkKCp0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjbGVhckNh
bGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICszNjEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpE
ZQogICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChtX3Byb2Nlc3NQb29sLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZGlkUmVjZWl2ZU5ldHdvcmtQ
cm9jZXNzUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQogCkBAIC0yNzQsOCAr
Mzc0LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlU3luY01lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEMKIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewotICAgIGF1dG8gcHJvdGVjdGVkUHJv
Y2Vzc1Bvb2wgPSBtYWtlUmVmKG1fcHJvY2Vzc1Bvb2wpOwotCiAgICAgaWYgKG1fZG93bmxvYWRQ
cm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5pbnZhbGlkYXRlKCk7CiAjaWYg
RU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKQEAgLTMzMSwxMSArNDI5LDYg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2kKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nlc3NQb29sLmlzU2VydmljZVdvcmtlclBhZ2VJRChw
YWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShzZXNzaW9u
SUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6Zm9yTW9zdFZpc2libGVXZWJQYWdlSWZBbnkoc2Vz
c2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwg
c2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IFdURk1vdmUoYXV0aGVudGljYXRp
b25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVnYWN5VExTXShhdXRvKiBwYWdlKSBtdXRhYmxlIHsK
ICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM5MiwxMSAr
NDg1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcoUHJv
Y2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBDOjpDb24KICAgICAgICAgbmV0d29ya1Byb2Nlc3ND
cmFzaGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSNpZiBQTEFURk9STShDT0NPQSkK
LSAgICBpZiAobV9wcm9jZXNzUG9vbC5wcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpCi0gICAg
ICAgIHNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKICAgICAKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rp
b24gPSB0aGlzLT5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSkKQEAgLTEyMDUsNyArMTI5
Myw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWlu
Rm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzCiB9CiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLnNldERvbWFpbnNX
aXRoVXNlckludGVyYWN0aW9uKFdURk1vdmUoZG9tYWlucykpOworICAgIGZvciAoYXV0byogcHJv
Y2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHBy
b2Nlc3NQb29sLT5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluPiB7IGRvbWFpbnMgfSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKIApAQCAtMTI1Miw0NSArMTM0MSwzMSBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OmZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vz
c2lvbklELCBDb21wbGV0aQogICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkZsdXNoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihSZWY8V2Vi
c2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vz
c2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMuYWRkKHN0
b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5hZGQoc3RvcmUpOwog
CiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUtPnBhcmFtZXRlcnMoKSB9LCAw
KTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0b3JlLT5zZXNzaW9uSUQoKTsKKyAgICAgICAgc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS5w
YXJhbWV0ZXJzKCkgfSwgMCk7CisgICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS5zZXNzaW9uSUQo
KTsKICAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7CiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS0+
cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CisgICAgICAgIGNyZWF0ZVN5bUxp
bmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgp
KTsKICNlbmRpZgogICAgIH0KIH0KIAotYm9vbCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpoYXNTZXNz
aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zZXNz
aW9uSURzLmNvbnRhaW5zKHNlc3Npb25JRCk7Ci19Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURhdGFT
dG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMucmVtb3ZlKHNlc3Npb25JRCk7CisgICAgbV93ZWJz
aXRlRGF0YVN0b3Jlcy5yZW1vdmUod2Vic2l0ZURhdGFTdG9yZSk7CiAKICAgICBpZiAoY2FuU2Vu
ZE1lc3NhZ2UoKSkKLSAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRlc3Ry
b3lTZXNzaW9uIHsgc2Vzc2lvbklEIH0sIDApOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24geyB3ZWJzaXRlRGF0YVN0b3JlLnNlc3Npb25JRCgp
IH0sIDApOwogfQogCiBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJz
aXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0g
ICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7
Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygp
KSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC53
ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAgICAgICBpZiAod2Vic2l0ZURhdGFTdG9yZSAmJiB3
ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBzZXNzaW9uSUQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgIH0KLSAgICBy
ZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vz
c2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5n
RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3JhZ2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCkKQEAgLTEzMzcsNyArMTQxMiw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJDb250ZW50CiAj
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3Rh
Ymxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoUmVnaXN0cmFibGVE
b21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9wcm9j
ZXNzUG9vbC5lc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3Mo
KnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCBzZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyAgICBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBSZWdpc3RyYWJsZURvbWFpbiB7
cmVnaXN0cmFibGVEb21haW59LCBzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3b3JrZXJDb250ZXh0Q29ubmVjdGlv
bk5vTG9uZ2VyTmVlZGVkKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBA
IC0xNTAwLDE2ICsxNTc1LDM0IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cHJlY29ubmVj
dFRvKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2ViUGFnZVByb3h5SWRlCiAgICAgc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWNvbm5lY3RUbyhzZXNzaW9uSUQsIHdlYlBhZ2VQ
cm94eUlELCB3ZWJQYWdlSUQsIHVybCwgdXNlckFnZW50LCBzdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiksIDApOwogfQogCitzdGF0aWMgYm9vbCBh
bnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0
byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAg
ICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0
aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAg
IGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xz
KCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2Vz
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKQog
ewotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkgewor
ICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAg
ICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRGb3JlZ3JvdW5kQWN0aXZpdHkobV9h
Y3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdl
YlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmZvcmVncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBm
b3IgZm9yZWdyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvRm9yZWdyb3VuZCgpLCAwKTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhh
c0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0Jh
Y2tncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6
OmlzVmFsaWRCYWNrZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7
CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmJh
Y2tncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgYmFja2dyb3VuZCB2aWV3KHMpIl9zKTsK
ICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJh
bnNpdGlvblRvQmFja2dyb3VuZCgpLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKaW5kZXggYTBiNGMxZDg5MzhlMjA1
ZWMzNjFkZTVjMTA4MjVkMTgyNzc2NTNiNC4uMGJmY2Y0MzViNDdkODE1NWE0YTU5MTJmODlhOWJj
ODcyODgyZGY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTQ2LDEyICs0NiwxNyBAQAogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAjaW5jbHVkZSAiWFBDRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSA8d3RmL09T
T2JqZWN0UHRyLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBGb3JtRGF0YVJl
ZmVyZW5jZTsKIH0KIAorbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xhc3MgU2Vzc2lvbklEOwogfQpAQCAt
NzMsOCArNzgsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWRQcm94eTsK
IGNsYXNzIERvd25sb2FkUHJveHlNYXA7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHk7CiBj
bGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlclByb3h5OwogCiBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVyU3Rh
dGlzdGljcyA6IGJvb2w7CkBAIC04Niw4ICs5MSw5IEBAIHN0cnVjdCBGcmFtZUluZm9EYXRhOwog
c3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFJlc291cmNl
TG9hZEluZm87CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CitzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnM7CiAKLWNsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkgZmluYWwgOiBwdWJsaWMgQXV4
aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQsIHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CitjbGFzcyBOZXR3b3JrUHJv
Y2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQ
cm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nl
c3NQcm94eT4sIHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB1c2luZyBSZWdpc3RyYWJsZURv
bWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwpAQCAtMTAyLDEyICsxMDgsMTcgQEAg
cHVibGljOgogICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJQ
cm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gZGVmYXVs
dE5ldHdvcmtQcm9jZXNzKCk7CisgICAgc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtQcm9jZXNzUHJveHkpOyB9CiAg
ICAgfk5ldHdvcmtQcm9jZXNzUHJveHkoKTsKIAorICAgIHN0YXRpYyBWZWN0b3I8UmVmPE5ldHdv
cmtQcm9jZXNzUHJveHk+PiBhbGxOZXR3b3JrUHJvY2Vzc2VzKCk7CisgICAgCisgICAgdm9pZCB0
ZXJtaW5hdGUoKSBmaW5hbDsKKwogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
KFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKIAotICAgIERvd25sb2FkUHJveHkmIGNy
ZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0
aW5nUGFnZSk7CisgICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRl
RGF0YVN0b3JlJiwgV2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2Up
OwogCiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4mJik7CiAgICAgdm9pZCBkZWxldGVXZWJz
aXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxU
aW1lIG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcik7CkBAIC0yMDYsMTUgKzIxNywxMiBAQCBwdWJsaWM6CiAgICAgUHJvY2Vzc1Rocm90
dGxlciYgdGhyb3R0bGVyKCkgZmluYWwgeyByZXR1cm4gbV90aHJvdHRsZXI7IH0KICAgICB2b2lk
IHVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKIAotICAgIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNz
UG9vbCgpIHsgcmV0dXJuIG1fcHJvY2Vzc1Bvb2w7IH0KLQogI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCiAgICAgdm9pZCBkaWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHkoV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmKTsKICNlbmRpZgogCi0gICAgdm9pZCBh
ZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmKTsKLSAgICBib29sIGhhc1Nlc3Npb24o
UEFMOjpTZXNzaW9uSUQpIGNvbnN0OwotICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Np
b25JRCk7CisgICAgdm9pZCBhZGRTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmKTsKKyAgICB2b2lk
IHJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYpOwogICAgIAogI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQogICAgIHZvaWQgY3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKGNvbnN0
IFN0cmluZyYgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKQEAgLTIyOSw2ICsyMzcsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKGNv
bnN0IFN0cmluZyYpOwogICAgIHZvaWQgdW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVBy
b3RvY29sKGNvbnN0IFN0cmluZyYpOwogCisgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQo
KTsKKyAgICAKICAgICB2b2lkIHJlc2V0UXVvdGEoUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICB2b2lkIHJlc291cmNlTG9hZERpZFNlbmRSZXF1ZXN0
KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFJlc291cmNlTG9hZEluZm8mJiwgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiYsIE9wdGlvbmFsPElQQzo6Rm9ybURhdGFSZWZlcmVuY2U+JiYpOwpAQCAt
MjQ4LDcgKzI1OCwyMCBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVCdW5kbGVJZGVudGlmaWVy
KGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBj
bGVhckJ1bmRsZUlkZW50aWZpZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAg
IFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlcigpIHsgcmV0dXJuIG1fY29va2ll
TWFuYWdlci5nZXQoKTsgfQorCisgICAgQVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQm
IGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIHsgcmV0dXJuIG1fY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50LmdldCgpOyB9CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICB4cGNfb2Jq
ZWN0X3QgeHBjRW5kcG9pbnRNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lbmRwb2ludE1lc3Nh
Z2UuZ2V0KCk7IH0KKyNlbmRpZgorCiBwcml2YXRlOgorICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9j
ZXNzUHJveHkoKTsKKworICAgIHZvaWQgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vz
cygpOworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGF0YVN0b3JlUGFy
YW1ldGVycygpOworCiAgICAgLy8gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5CiAgICAgQVNDSUlMaXRl
cmFsIHByb2Nlc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIk5ldHdvcmtpbmciX3M7IH0K
IApAQCAtMjU2LDcgKzI3OSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb25uZWN0aW9uV2lsbE9w
ZW4oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwcm9jZXNzV2lsbFNodXRE
b3duKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBuZXR3b3JrUHJvY2Vz
c0NyYXNoZWQoKTsKICAgICB2b2lkIGNsZWFyQ2FsbGJhY2tTdGF0ZXMoKTsKIAogICAgIC8vIElQ
Qzo6Q29ubmVjdGlvbjo6Q2xpZW50CkBAIC0zMTIsMTYgKzMzNCwxNyBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQsIFJl
ZjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiYmKTsKIAotICAgIFdlYlByb2Nlc3NQb29s
JiBtX3Byb2Nlc3NQb29sOwotCiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4+IG1fcGVuZGluZ0ZldGNoV2Vic2l0ZURhdGFDYWxsYmFj
a3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+PiBt
X3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNr
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRh
Rm9yT3JpZ2luc0NhbGxiYWNrczsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEb3dubG9hZFByb3h5
TWFwPiBtX2Rvd25sb2FkUHJveHlNYXA7CisKKyAgICBVbmlxdWVSZWY8QVBJOjpDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogI2lmIEVO
QUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCiAgICAgTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHkgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTsKICNlbmRpZgor
CiAgICAgUHJvY2Vzc1Rocm90dGxlciBtX3Rocm90dGxlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UHJvY2Vzc1Rocm90dGxlcjo6QmFja2dyb3VuZEFjdGl2aXR5PiBtX2FjdGl2aXR5Rm9ySG9sZGlu
Z0xvY2tlZEZpbGVzOwogICAgIFByb2Nlc3NUaHJvdHRsZXI6OkFjdGl2aXR5VmFyaWFudCBtX2Fj
dGl2aXR5RnJvbVdlYlByb2Nlc3NlczsKQEAgLTM0Nyw5ICszNzAsMTEgQEAgcHJpdmF0ZToKICAg
ICBwcml2YXRlOgogICAgICAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29y
a1Byb2Nlc3M7CiAgICAgfTsKKyAgICBPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IG1fZW5kcG9p
bnRNZXNzYWdlOwogI2VuZGlmCiAKLSAgICBIYXNoU2V0PFBBTDo6U2Vzc2lvbklEPiBtX3Nlc3Np
b25JRHM7CisgICAgV2Vha0hhc2hTZXQ8V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRlRGF0YVN0
b3JlczsKKyAgICBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBtX2Nvb2tpZU1hbmFnZXI7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KaW5kZXggYjhk
YWVkZjdiZWJhMWNkODFmNmU1MjQ0OTYwMzEwZjEzMzEwYzExZS4uOTFjMTkzMWYyZTY1Y2YxYzk3
N2FkZjNhZTZjYWVkYjA2MDkwMGJkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAgLTUxLDgg
KzUxLDExIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5k
bGVYUENFdmVudCh4cGNfb2JqZWN0X3QgZXZlbnQpIGNvCiAgICAgaWYgKG1lc3NhZ2VOYW1lLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1lc3NhZ2VOYW1lID09
IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6OnhwY0xhdW5jaFNlcnZpY2VzRGF0
YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5w
cm9jZXNzUG9vbCgpLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2
ZW50KTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0Nv
bnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVzc2FnZU5hbWUp
IHsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+bV9lbmRwb2ludE1lc3NhZ2UgPSBldmVudDsK
KyAgICAgICAgZm9yIChhdXRvJiBkYXRhU3RvcmUgOiBtX25ldHdvcmtQcm9jZXNzLT5tX3dlYnNp
dGVEYXRhU3RvcmVzKQorICAgICAgICAgICAgZGF0YVN0b3JlLnNlbmROZXR3b3JrUHJvY2Vzc1hQ
Q0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
Y3BwCmluZGV4IGNjNTI2YWFmM2FhZmIxYzE0NmRhNGIyNDE5NDU5YjEwOTIwMWI2MTAuLjA4NWU3
ZDI2NWExMzczNWJlN2ExMjc4ZWMxZGZiNjNmZDVkZDVkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcApAQCAtMjksNiArMjksNyBA
QAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIK
ICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTmV0d29ya1By
b2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIk9wdGlvbmFsQ2FsbGJhY2tJRC5oIgogI2luY2x1ZGUg
IldlYkNvb2tpZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQ
cm94eU1lc3NhZ2VzLmgiCkBAIC0zOSwyNCArNDAsMTYgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLWNvbnN0IGNoYXIqIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c3VwcGxlbWVudE5hbWUoKQorV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVN
YW5hZ2VyUHJveHkoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MpCisgICAgOiBt
X25ldHdvcmtQcm9jZXNzKG1ha2VXZWFrUHRyKG5ldHdvcmtQcm9jZXNzKSkKIHsKLSAgICByZXR1
cm4gIldlYkNvb2tpZU1hbmFnZXJQcm94eSI7Ci19Ci0KLVJlZjxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlByb2Nlc3NQb29sKiBwcm9jZXNz
UG9vbCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb29raWVNYW5hZ2VyUHJveHko
cHJvY2Vzc1Bvb2wpKTsKLX0KLQotV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5h
Z2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQotICAgIDogV2ViQ29udGV4dFN1
cHBsZW1lbnQocHJvY2Vzc1Bvb2wpCi17Ci0gICAgV2ViQ29udGV4dFN1cHBsZW1lbnQ6OnByb2Nl
c3NQb29sKCktPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKKyAgICBuZXR3b3JrUHJvY2Vzcy5h
ZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiB9CiAKIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6fldl
YkNvb2tpZU1hbmFnZXJQcm94eSgpCiB7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpOwogICAgIEFTU0VSVCht
X2Nvb2tpZU9ic2VydmVycy5pc0VtcHR5KCkpOwogfQogCkBAIC02NSwxMDIgKzU4LDg0IEBAIHZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojppbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29va2ll
TWFuYWdlckNsaWVudEJhc2UqIGNsCiAgICAgbV9jbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOwog
fQogCi0vLyBXZWJDb250ZXh0U3VwcGxlbWVudAotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKQotewotICAgIFZlY3RvcjxPYnNlcnZlcio+IG9ic2Vy
dmVyczsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyU2V0IDogbV9jb29raWVPYnNlcnZlcnMudmFs
dWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVyU2V0KQotICAg
ICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChvYnNlcnZlcik7Ci0gICAgfQotCi0gICAgZm9yIChh
dXRvKiBvYnNlcnZlciA6IG9ic2VydmVycykKLSAgICAgICAgb2JzZXJ2ZXItPm1hbmFnZXJEZXN0
cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVycy5pc0VtcHR5KCkpOwotfQot
Ci12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQ
cm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xv
c2UoTmV0d29ya1Byb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OnJlZigp
OwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxl
bWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OmRlcmVmKCk7Ci19Ci0KIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYgY2FsbGJh
Y2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCkt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFtZXNXaXRoQ29va2ll
cyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhzZXNz
aW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNh
bGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRl
bGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQogewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcykp
OworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVz
KHNlc3Npb25JRCwgaG9zdG5hbWVzKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBw
cm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3Nh
cnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbklE
KSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lv
bklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDb29raWUmIGNvb2tpZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5l
dHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6RGVsZXRlQ29va2llKHNlc3Npb25JRCwgY29va2llKSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pXSgpIG11dGFibGUgeworICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSks
IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKICAgICAgICAgY2FsbGJhY2tG
dW5jdGlvbigpOwotICAgIH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVs
ZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxs
VGltZSB0aW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikK
IHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShzZXNz
aW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5j
ZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNl
CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8
Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVu
Y3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llKHNlc3Npb25JRCwgY29va2ll
cyksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNz
KQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24o
KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2llcywgY29uc3QgVVJM
JiB1cmwsIGNvbnN0IFVSTCYgbWFpbkRvY3VtZW50VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Mu
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVz
KHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWluRG9jdW1lbnRVUkwpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWluRG9jdW1lbnRVUkwpLCBX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVu
Y3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEFsbENvb2tpZXMo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxD
b29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQ
cm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0
QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRBbGxDb29raWVzKHNlc3Np
b25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2Fs
bGJhY2tGdW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0
Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7
Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3Jr
UHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFdURk1vdmUo
Y2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rp
b24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSk7CisgICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQp
LCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgp
LT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkp
OworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdl
cyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENv
b2tpZU9ic2VydmVyQ2FsbGJhY2soUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXVEY6OkZ1bmN0
aW9uPHZvaWQgKCk+JiYgY2FsbGJhY2spCkBAIC0yMTEsMTggKzE4NiwxOCBAQCB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Y29va2llc0RpZENoYW5nZShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KFBBTDo6U2Vzc2lvbklELCBIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0jaWYgVVNFKFNPVVAp
Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2V0SW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9s
aWN5KTsKLSNlbmRpZgotCi0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgp
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBv
bGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBv
bGljeSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2Fs
bGJhY2tGdW5jdGlvbigpOwogfQogCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQordm9pZCBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNz
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeSgpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAg
ICAgICAgY2FsbGJhY2tGdW5jdGlvbihIVFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaAppbmRleCAwYmRmYzBkNGU0N2M0MzZmNTg1Y2YyOWMwOWQ1
MWEyOWJjODExYTlkLi42ZjUxZjAzZTVjMGNhODk0MTIzMzQzNzdiNTU0M2Q4MjJjYzJmZWMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaApA
QCAtNTYsMTEgKzU2LDkgQEAgdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpBcnJheSo+IEFy
cmF5Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXZWJDb3JlOjpIVFRQQ29va2ll
QWNjZXB0UG9saWN5PiBIVFRQQ29va2llQWNjZXB0UG9saWN5Q2FsbGJhY2s7CiB0eXBlZGVmIEdl
bmVyaWNDYWxsYmFjazxjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiY+IEdldENvb2tpZXND
YWxsYmFjazsKIAotY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQSTo6T2Jq
ZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHB1YmxpYyBXZWJDb250
ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitjbGFzcyBXZWJD
b29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpU
eXBlOjpDb29raWVNYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7Ci0KLSAgICBzdGF0
aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlByb2Nlc3NQb29sKik7Cisg
ICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IGNyZWF0ZShOZXR3b3JrUHJvY2Vz
c1Byb3h5JiBuZXR3b3JrUHJvY2VzcykgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb29raWVN
YW5hZ2VyUHJveHkobmV0d29ya1Byb2Nlc3MpKTsgfQogICAgIHZpcnR1YWwgfldlYkNvb2tpZU1h
bmFnZXJQcm94eSgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29va2ll
TWFuYWdlckNsaWVudEJhc2UqKTsKQEAgLTEwNCwxNyArMTAyLDEwIEBAIHB1YmxpYzoKICAgICB1
c2luZyBBUEk6Ok9iamVjdDo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29va2llTWFuYWdl
clByb3h5KFdlYlByb2Nlc3NQb29sKik7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5KE5ldHdv
cmtQcm9jZXNzUHJveHkmKTsKIAogICAgIHZvaWQgY29va2llc0RpZENoYW5nZShQQUw6OlNlc3Np
b25JRCk7CiAKLSAgICAvLyBXZWJDb250ZXh0U3VwcGxlbWVudAotICAgIHZvaWQgcHJvY2Vzc1Bv
b2xEZXN0cm95ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShXZWJQcm9j
ZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShOZXR3b3JrUHJv
Y2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWZXZWJDb250ZXh0U3VwcGxlbWVudCgp
IG92ZXJyaWRlOwotICAgIHZvaWQgZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRl
OwotCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwogCkBAIC0xMjUs
NiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXVEY6OkZ1
bmN0aW9uPHZvaWQgKCk+PiBtX2xlZ2FjeUNvb2tpZU9ic2VydmVyczsKICAgICBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBIYXNoU2V0PE9ic2VydmVyKj4+IG1fY29va2llT2JzZXJ2ZXJzOwogCisg
ICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwogICAgIFdl
YkNvb2tpZU1hbmFnZXJQcm94eUNsaWVudCBtX2NsaWVudDsKIAogI2lmIFVTRShTT1VQKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggZDNiOGMzNTU0MGYzZjI0
NTZmNzEwNTVmNWI0ZDdhNzgyMjYwZDM4Ny4uNDljZWViMjI4OTJmMjQ1MTgxYTQ0ODA5NTlkYzgz
NGExNWVmOGQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBA
IC0xNzQ2LDcgKzE3NDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29udHJvbGxlZEJ5QXV0
b21hdGlvbihib29sIGNvbnRyb2xsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oY29udHJvbGxlZCkpOwot
ICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24o
bV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9sbGVkQnlBdXRvbWF0aW9u
KSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24obV93
ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9sbGVkQnlBdXRvbWF0aW9uKSwg
MCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjcmVhdGVJbnNwZWN0b3JUYXJnZXQoY29uc3Qg
U3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCkBA
IC0zMjEwLDExICszMjEwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmlzRm9yY2VkSW50b0FwcEJv
dW5kTW9kZVRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4KIHZvaWQgV2ViUGFn
ZVByb3h5OjpkaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50SW5OZXR3b3JrUHJvY2Vzcygp
CiB7CiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZ
U1QpCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9v
bCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2Fu
U2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVu
dGl0bGVtZW50KCksIDApOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3Jr
ZXJFbnRpdGxlbWVudCgpLCAwKTsKICNlbmRpZgogfQogCkBAIC0zMjIzLDEzICszMjE5LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpICYm
ICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkNsZWFyU2VydmljZVdvcmtl
ckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2Fn
ZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVu
dE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIHdlYnNp
dGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUo
KSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKICNlbmRpZgpAQCAtNDQyOSw3ICs0NDE5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnBy
ZWNvbm5lY3RUbyhjb25zdCBVUkwmIHVybCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBz
dG9yZWRDcmVkZW50aWFsc1BvbGljeSA9IG1fY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UgPyBXZWJD
b3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlIDogV2ViQ29yZTo6U3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3k6OkRvTm90VXNlOwotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigp
LCB3ZWJQYWdlSUQoKSwgdXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ks
IGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4oKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgp
Lm5ldHdvcmtQcm9jZXNzKCkucHJlY29ubmVjdFRvKHNlc3Npb25JRCgpLCBpZGVudGlmaWVyKCks
IHdlYlBhZ2VJRCgpLCB1cmwsIHVzZXJBZ2VudCgpLCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwg
aXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OnNldENhblVzZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wgY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2Up
CkBAIC00NzI1LDcgKzQ3MTUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZv
ckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUluZm9EYXRhJgogICAgICAgICAg
ICAgUmVnaXN0cmFibGVEb21haW4gY3VycmVudERvbWFpbiB7IGN1cnJlbnRSZXF1ZXN0LnVybCgp
IH07CiAgICAgICAgICAgICBVUkwgcmVxdWVzdGVyVVJMIHsgVVJMKCksIHJlcXVlc3Rlck9yaWdp
bi50b1N0cmluZygpIH07CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnREb21haW4ubWF0Y2hlcyhy
ZXF1ZXN0ZXJVUkwpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5k
aWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9LCBjdXJyZW50
RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50aWZpZXIsIG1fd2ViUGFnZUlE
KTsKKyAgICAgICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCku
ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwgY3VycmVu
dERvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dlYlBhZ2VJ
RCk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTQ3NjMsNyArNDc1Myw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUoRnJhbWVJZGVudGlmaWVyIGZyYW1l
SUQsIEZyYW1lSW5mb0RhdGEmCiAgICAgaWYgKG5hdmlnYXRpb24gJiYgZnJhbWUtPmlzTWFpbkZy
YW1lKCkpIHsKICAgICAgICAgaWYgKGF1dG8mIGFkQ2xpY2tBdHRyaWJ1dGlvbiA9IG5hdmlnYXRp
b24tPmFkQ2xpY2tBdHRyaWJ1dGlvbigpKSB7CiAgICAgICAgICAgICBpZiAoYWRDbGlja0F0dHJp
YnV0aW9uLT5kZXN0aW5hdGlvbigpLm1hdGNoZXMoZnJhbWUtPnVybCgpKSkKLSAgICAgICAgICAg
ICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yZUFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqYWRDbGlja0F0dHJpYnV0aW9uKSk7CisgICAgICAgICAg
ICAgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmlidXRpb24pLCAwKTsKICAgICAgICAgfQogICAg
IH0KIApAQCAtNTM3Nyw3ICs1MzY3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmxvZ0ZyYW1lTmF2
aWdhdGlvbihjb25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgY29uc3QgVVJMJiBwYWcKICAgICBp
ZiAodGFyZ2V0SG9zdC5pc0VtcHR5KCkgfHwgbWFpbkZyYW1lSG9zdC5pc0VtcHR5KCkgfHwgdGFy
Z2V0SG9zdCA9PSBzb3VyY2VVUkwuaG9zdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3By
b2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVEb21h
aW4geyBwYWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVkaXJl
Y3QsIGZyYW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRGaW5p
c2hEb2N1bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5pdGlh
dGVkQnlVc2VyKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1lTmF2aWdhdGlvbihtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHRhcmdldFVSTCB9LCBS
ZWdpc3RyYWJsZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBzb3VyY2VV
UkwgfSwgaXNSZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUoKSwgTW9ub3RvbmljVGltZTo6bm93
KCkgLSBtX2RpZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5GcmFtZVRpbWVzdGFtcCwgd2FzUG90
ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpLCAwKTsKIH0KICNlbmRpZgogCkBAIC0xMDAwMiw1OCAr
OTk5MiwyNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3lzdGVtUHJldmlld0FjdGlvblRyaWdnZXJl
ZChjb25zdCBXZWJDb3JlOjpTeXN0ZW1QcmV2aWV3SW5mbwogCiB2b2lkIFdlYlBhZ2VQcm94eTo6
ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmlu
ZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
cyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
IGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKGVtcHR5U3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFT
dG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQor
ICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0g
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRh
U3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0g
ZWxzZQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIHdlYnNpdGVEYXRhU3RvcmUo
KS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lv
bklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sIHZh
bHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1l
c3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3Zl
cnJpZGVUaW1lckZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFs
dWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRh
U3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5n
KG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0
aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGlu
ZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vz
cygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+
c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGlu
ZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3Nh
Z2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4
cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3
b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRh
U3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAj
aWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5jcHAKaW5kZXggZDkyNmIzM2NiZGYyYmI4YmI5ODBkNjNjNWRjNTJhZTUyNTA5
MjUyOS4uNzFmMWY2MzhkYzMzZjRlNDE4MjU2ZDY2ODFjZjg0NGY4MmI5NDFjMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtNDUsNyArNDUsNiBAQAog
I2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nSW5pdGlhbGl6
YXRpb24uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uSW5mby5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5l
dHdvcmtQcm9jZXNzUHJveHkuaCIKQEAgLTE0Myw4ICsxNDIsMTAgQEAKICNlbmRpZgogCiAjZGVm
aW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNF
X0xPRyhjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9B
UkdTX18pCisjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhjaGFubmVs
LCBmbXQsIC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwg
IyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1Io
Y2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIlcCAtIFdlYlBy
b2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VT
U1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9M
T0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAiJXAg
LSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIFdF
QlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5uZWwsIGZtdCwg
Li4uKSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCks
IGNoYW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIsNiArMjMzLDEx
IEBAIHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgZ2xv
YmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90CiAgICAgcmV0dXJuIHNldDsKIH0KIAorVmVjdG9y
PFN0cmluZz4gV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycygpCit7CisgICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihnbG9iYWxVUkxTY2hlbWVzV2l0aEN1
c3RvbVByb3RvY29sSGFuZGxlcnMoKSk7Cit9CisKIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNz
UG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICA6
IG1fY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uLmNvcHkoKSkKICAgICAsIG1fZGVmYXVsdFBh
Z2VHcm91cChXZWJQYWdlR3JvdXA6OmNyZWF0ZSgpKQpAQCAtMjM5LDcgKzI0NSw2IEBAIFdlYlBy
b2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYg
Y29uZmlndXJhdGlvbikKICAgICAsIG1fYXV0b21hdGlvbkNsaWVudChtYWtlVW5pcXVlPEFQSTo6
QXV0b21hdGlvbkNsaWVudD4oKSkKICAgICAsIG1fZG93bmxvYWRDbGllbnQobWFrZVVuaXF1ZVJl
ZjxBUEk6OkRvd25sb2FkQ2xpZW50PigpKQogICAgICwgbV9oaXN0b3J5Q2xpZW50KG1ha2VVbmlx
dWU8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4oKSkKLSAgICAsIG1fY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ+KCkpCiAgICAgLCBtX3Zpc2l0ZWRMaW5rU3RvcmUoVmlzaXRlZExpbmtTdG9yZTo6Y3Jl
YXRlKCkpCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICwgbV9oaWdoUGVyZm9ybWFuY2VHcmFwaGlj
c1VzYWdlU2FtcGxlcihtYWtlVW5pcXVlPEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1w
bGVyPigqdGhpcykpCkBAIC0yNjcsOSArMjcyLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nl
c3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogI2Vu
ZGlmCiAgICAgfSk7CiAKLSAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSAmJiBXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgbV93ZWJz
aXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3Jl
KCk7Ci0KICAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IG1fY29uZmlndXJhdGlvbi0+YWx3YXlzUmV2
YWxpZGF0ZWRVUkxTY2hlbWVzKCkpCiAgICAgICAgIG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0Fsd2F5
c1JldmFsaWRhdGVkLmFkZChzY2hlbWUpOwogCkBAIC0yODUsNyArMjg3LDYgQEAgV2ViUHJvY2Vz
c1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25m
aWd1cmF0aW9uKQogICAgIGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUHJvY2Vzc1Bv
b2w6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9URTogVGhlc2Ug
c3ViLW9iamVjdHMgbXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VSZWNlaXZlck1h
cC4uCi0gICAgYWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRk
U3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVt
ZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUoTUVESUFfU0VT
U0lPTikKQEAgLTM0Miw5ICszNDMsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29s
KCkKICAgICBwcm9jZXNzUG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAotICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zaHV0RG93blBy
b2Nlc3MoKTsKLQogI2lmIEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9jZXNzZXNVc2lu
Z0dhbWVwYWRzLmlzRW1wdHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRv
bigpLnByb2Nlc3NQb29sU3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAtNDAyLDE2ICs0
MDAsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JgogICAgICAgICBtX2F1dG9tYXRpb25DbGll
bnQgPSBXVEZNb3ZlKGF1dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29s
OjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQ
STo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCkKLXsKLSNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQotICAg
IGlmICghY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAgICBtX2N1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ+KCk7Ci0gICAgZWxzZQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCA9IFdURk1vdmUoY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsKLSNlbmRpZgotfQotCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50
aWZpZXIoY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZp
ZXIpCiB7CiAgICAgLy8gR3VhcmQgYWdhaW5zdCBBUEkgbWlzdXNlLgpAQCAtNDIxLDExICs0MDks
NiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRs
ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBjdQogICAgIG1fY29uZmlndXJhdGlvbi0+c2V0Q3Vz
dG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGN1c3RvbVdlYkNvbnRlbnRTZXJ2
aWNlQnVuZGxlSWRlbnRpZmllcik7CiB9CiAKLUlQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vzc1Bv
b2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fbmV0d29y
a1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3Vh
Z2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViUHJvY2Vzc1Bv
b2wqPihjb250ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7CkBAIC00MzUsOCArNDE4LDcgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9BbGxQcm9j
ZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2Vk
KCkpOwogI2lmIFVTRShTT1VQKQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZl
cnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CisgICAg
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5uZXR3b3JrUHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdl
ZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKICNlbmRpZgogfQogCkBAIC00NDksNyAr
NDMxLDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZnVsbEtleWJvYXJkQWNjZXNzTW9kZUNoYW5n
ZWQoYm9vbCBmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGUKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
bmRNZW1vcnlQcmVzc3VyZUV2ZW50KGJvb2wgaXNDcml0aWNhbCkKIHsKICAgICBzZW5kVG9BbGxQ
cm9jZXNzZXMoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVz
c3VyZUV2ZW50KGlzQ3JpdGljYWwpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXND
cml0aWNhbCkpOworICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNz
UHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2
ZW50KGlzQ3JpdGljYWwpLCAwKTsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAg
ICBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuc2VuZE1lbW9yeVByZXNzdXJlRXZl
bnQoaXNDcml0aWNhbCk7CiAjZW5kaWYKQEAgLTQ3NCwyNzUgKzQ1Nyw4IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNjcmVlblByb3BlcnRpZXNTdGF0ZUNoYW5nZWQoKQogI2VuZGlmCiB9CiAKLU5l
dHdvcmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhX
ZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKLXsKLSAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5
IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRz
LgotICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5n
IHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkp
IHsKLSAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7
Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQot
Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgaWYgKHdpdGhXZWJzaXRlRGF0
YVN0b3JlKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VS
ZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICB3aXRoV2Vic2l0ZURhdGFT
dG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAq
bV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBhdXRvIG5ldHdvcmtQcm9jZXNzID0gbWFr
ZVVuaXF1ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7Ci0KLSAgICBOZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFT
dG9yZSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBl
bmRpbmdDb29raWVzID0gY29weVRvVmVjdG9yKG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVuZGluZ0Nv
b2tpZXMoKSk7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2ll
cygpOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlv
bkJ1bmRsZUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24oKS5z
b3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNl
QXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5jb25m
aWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKCk7Ci0jZW5k
aWYKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0
aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotCi0gICAgZm9yIChhdXRvJiBzY2hlbWUg
OiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAgICAg
cGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQo
c2NoZW1lKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU3RyaW5nIGNvb2tpZVN0
b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgp
OwotICAgIGlmICghY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVT
dG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwotCi0gICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdlYlBy
b2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb250YWlu
ZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5
LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0K
LSAgICBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVu
dEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1w
dHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRs
ZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMu
cGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBv
cmFyeUZpbGUoZW1wdHlTdHJpbmcoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRl
LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRl
bXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAgICBw
YXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9WZWN0b3IoTGVn
YWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmUo
KSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29udGVu
dFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5n
bGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5
KCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRv
VmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3Rl
ckFzTG9jYWwoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nl
c3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVt
ZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotICAgIC8vICoqKioqKioqKgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNoYW5nZSB0aGUg
ZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlzayB3aXRob3V0
IGZpcnN0IGNvbnN1bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjovL3Byb2JsZW0v
MTc0NTQ3MTI+KQotICAgIC8vICoqKioqKioqKgotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUp
Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y3JlYXRl
U3ltTGlua0ZvckZpbGVVcGdyYWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVOQUJM
RShTRVJWSUNFX1dPUktFUikKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBw
YXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBtX3dlYnNpdGVE
YXRhU3RvcmUtPnJlc29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwot
ICAgIGlmICghcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KQot
ICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSAg
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSgpOwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbV93
ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExvY2FsU3RvcmFn
ZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0
b3J5KQotICAgICAgICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2FsU3Rv
cmFnZURpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFk
V3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0KLSAgICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/
IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5n
KCk7Ci0gICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjYWNo
ZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBXVEZN
b3ZlKGNhY2hlU3RvcmFnZURpcmVjdG9yeSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKG1f
d2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rv
cnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1l
dGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFy
YW1ldGVycy5kaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnks
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAg
Ym9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAgYm9vbCBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAgYm9v
bCBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQotICAgIFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUg
dGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVC
bG9ja2luZ01vZGU6OkFsbDsKLSAgICBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50
RW5hYmxlZCBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IFdlYkNvcmU6OlNhbWVT
aXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKLSNlbmRpZgotICAgIFdlYkNvcmU6OkZp
cnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92
YWxNb2RlID0gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1
dENvb2tpZXM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gc3RhbmRhbG9uZUFwcGxp
Y2F0aW9uRG9tYWluOwotICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IGFw
cEJvdW5kRG9tYWluczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBtYW51YWxQcmV2
YWxlbnRSZXNvdXJjZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fdGNjUHJlZmVyZW5j
ZUVuYWJsZWQgPSBkb2VzQXBwSGF2ZUlUUEVuYWJsZWQoKTsKLSAgICBpZiAod2l0aFdlYnNpdGVE
YXRhU3RvcmUgJiYgIXdpdGhXZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRseVNl
dCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZl
cmVuY2VFbmFibGVkOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAg
fSBlbHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUgJiYgIW1fd2Vic2l0ZURhdGFTdG9yZS0+aXNJ
dHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0
b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmVFeGlzdHMoKSAmJiAhV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5p
c0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVk
KGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZQotICAgICAgICBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSNlbmRp
ZgotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQot
ICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gd2l0
aFdlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNlbmRp
ZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICAg
ICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+
cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3Vs
ZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAgICAg
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdNb2Rl
OwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0aGly
ZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7
Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1lU2l0
ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9u
ZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJv
dW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVh
bFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0
ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90
YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3Rh
KCk7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnkg
PSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsK
LSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsK
LSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVE
aXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29y
a0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNv
bnN0IGF1dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJl
c29sdmVkSFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURp
cmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3Rv
cnkgPSBoc3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlw
ZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAg
ICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5n
RXZlbnQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2so
KTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewot
ICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dlYnNpdGVEYXRh
U3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAg
ICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3Q7Ci0gICAg
ICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZURl
YnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICAg
ICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
c2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZp
cnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlOwotICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluID0gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnN0
YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5kRG9tYWlucyA9
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5hcHBCb3VuZERvbWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5tYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFn
ZVF1b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1
b3RhKCk7Ci0KLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAg
ICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9y
eSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgYXV0
byYgaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSFNU
U1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURpcmVjdG9yeS5p
c051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBoc3Rz
U3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdy
aXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZUV4aXN0cygpKQotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBX
ZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9y
eSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lmIEhBVkUoQ0ZORVRXT1JLX0FM
VEVSTkFUSVZFX1NFUlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6Omh0dHAzRW5hYmxl
ZCgpKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeSA9IFdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2VzRGlyZWN0b3J5KCk7Ci0gICAg
ICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVj
dG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZl
U2VydmljZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHAzRW5h
YmxlZCA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBpc0l0cFN0YXRlRXhwbGljaXRs
eVNldCA9IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
ID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewotICAgICAgICBXVEZNb3ZlKHJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAgICBXVEZNb3ZlKHJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpLAotICAgICAgICBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0YXRlRXhwbGljaXRseVNldCwK
LSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCwKLSAg
ICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RlYnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQotICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlLAotICAgICAgICBzYW1lU2l0
ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJzdFBhcnR5V2Vi
c2l0ZURhdGFSZW1vdmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWlu
LAotICAgICAgICBhcHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291
cmNlLAotICAgIH07Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmljIHBhcmFtZXRl
cnMKLSAgICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKLQot
ICAgIC8vIEluaXRpYWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3b3JrUHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2Vz
cyhwYXJhbWV0ZXJzKSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3b3JrUHJvY2Vz
c0xhdGVuY3lRT1MoKSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAwKTsKLSNlbmRp
ZgotCi0gICAgbmV0d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKLQotICAg
IGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRk
U2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICB3aXRoV2Vi
c2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQotICAgIC8vIE1h
a2Ugc3VyZSB0aGUgbmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUgc2Vzc2lvbnMg
dGhhdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAgICBmb3IgKGF1
dG8mIHNlc3Npb25JRCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05v
bkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICB9Ci0KLSAg
ICBtX25ldHdvcmtQcm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0gICAgcmV0dXJu
ICptX25ldHdvcmtQcm9jZXNzOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJv
Y2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSkKIHsK
LSAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJvY2Vz
c1Byb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChhdXRvJiBzdXBw
bGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+cHJv
Y2Vzc0RpZENsb3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzUxLDkgKzQ2Nyw2IEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vz
c1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1ByCiAgICAgaWYgKG1fYXV0b21hdGlvblNlc3Npb24pCiAg
ICAgICAgIG1fYXV0b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAgLy8gTGVhdmUg
dGhlIHByb2Nlc3MgcHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28gdGhhdCB0aGUg
Y2xpZW50IGNvdWxkIHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAgbV9uZXR3b3Jr
UHJvY2VzcyA9IG51bGxwdHI7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQog
CkBAIC03NjQsMjAgKzQ3Nyw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQ
cm9jZXNzQ3Jhc2hlZChXZWJQcm9jZXNzUHJveHkmIHByb3h5KQogI2VuZGlmCiB9CiAKLXZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJv
eHkmIHdlYlByb2Nlc3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAgICBlbnN1cmVO
ZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KCp0aGlzKSwgd2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwg
cmVwbHkgPSBXVEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsK
LSAgICAgICAgaWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc1ZhbGlk
KGNvbm5lY3Rpb25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5ICYmIHdlYWtU
aGlzKSkgewotICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoUHJv
Y2VzcywgImdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0IGF0dGVtcHQs
IHJldHJ5aW5nIik7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAg
ICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3ZWJQ
cm9jZXNzUHJveHksIFdURk1vdmUocmVwbHkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7Ci0gICAgfSk7Ci19Ci0KICNpZiBF
TkFCTEUoR1BVX1BST0NFU1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpncHVQcm9jZXNzQ3Jhc2hl
ZChQcm9jZXNzSUQgaWRlbnRpZmllcikKIHsKQEAgLTgwMSwyMyArNTAwLDI2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OmdldEdQVVByb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2Vi
UHJvY2Vzc1Byb3h5LCBNCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJQcm9jZXNzUG9vbDo6c191c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gZmFsc2U7CisKICNpZiBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29u
bmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJveHksIFJlZ2lz
dHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IEFTU0VSVF9VTlVTRUQocHJveHksICZwcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsK
KyAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdE
YXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXdlYnNpdGVEYXRhU3Rv
cmUpCisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGF0YVN0b3JlKCkucHRyKCk7CisgICAgaWYgKCFwcm9jZXNzUG9vbHMoKS5zaXplKCkpCisgICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWY8V2ViUHJvY2Vzc1Bvb2w+PiBzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShBUEk6OlByb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbjo6Y3JlYXRlKCkuZ2V0KCkpKTsKIAotICAgIGF1dG8qIHdlYnNpdGVEYXRhU3Rv
cmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNz
aW9uSUQoc2Vzc2lvbklEKTsKLQotICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAg
ICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9y
ZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwot
ICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlID0gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOwotICAg
IH0KKyAgICAvLyBBcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCB0byBo
b3N0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgorICAgIGF1dG8qIHByb2Nlc3NQb29sID0g
cHJvY2Vzc1Bvb2xzKClbMF07CisgICAgQVNTRVJUKHByb2Nlc3NQb29sKTsKIAogICAgIFdlYlBy
b2Nlc3NQcm94eSogc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSB7IG51bGxwdHIgfTsKLSAgICBp
ZiAoIW1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgewotICAgICAgICBmb3IgKGF1
dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAgICAgICAgaWYgKHByb2Nlc3MgPT0g
bV9wcmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkKKwor
ICAgIGlmICghc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7CisgICAgICAgIGZv
ciAoYXV0byYgcHJvY2VzcyA6IHByb2Nlc3NQb29sLT5tX3Byb2Nlc3NlcykgeworICAgICAgICAg
ICAgaWYgKHByb2Nlc3MgPT0gcHJvY2Vzc1Bvb2wtPm1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9j
ZXNzLT5pc0R1bW15UHJvY2Vzc1Byb3h5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICBpZiAoJnByb2Nlc3MtPndlYnNpdGVEYXRhU3RvcmUoKSAhPSB3ZWJzaXRlRGF0
YVN0b3JlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODI1LDM1ICs1MjcsMzUgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05l
dHdvcmtQcm9jZXNzKE5ldHdvcmtQcm8KICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9IHByb2Nlc3MuZ2V0KCk7Ci0gICAg
ICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyh1
c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CisgICAg
ICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyhw
cm9jZXNzUG9vbC0+dXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3Jr
ZXJzKCkpOwogCi0gICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExP
V0VEKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0
d29ya1Byb2Nlc3MgcmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0lcCwg
UElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNz
UHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xf
UkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdv
cmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5n
IHdlYiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghc2VydmljZVdv
cmtlclByb2Nlc3NQcm94eSkgewotICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlBy
b2Nlc3NQcm94eTo6Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMoKnRoaXMsIFdURk1vdmUocmVnaXN0
cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CisgICAgICAgIGF1dG8gbmV3UHJvY2Vz
c1Byb3h5ID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2VycygqcHJvY2Vz
c1Bvb2wsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CiAg
ICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgPSBuZXdQcm9jZXNzUHJveHkucHRyKCk7
CiAKLSAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNl
V29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
IGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVk
KSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkt
PnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xP
R19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2Vy
IHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHks
IHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCi0gICAg
ICAgIGluaXRpYWxpemVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFT
dG9yZSk7Ci0gICAgICAgIG1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94
eSkpOworICAgICAgICBwcm9jZXNzUG9vbC0+aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJv
Y2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm1fcHJv
Y2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOwogICAgIH0KIAotICAgIEFT
U0VSVCghbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Byb3h5KSk7Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmFkZCgqc2VydmljZVdv
cmtlclByb2Nlc3NQcm94eSk7CisgICAgQVNTRVJUKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCku
Y29udGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpKTsKKyAgICBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzKCkuYWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKIAotICAgIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KG1fc2Vy
dmljZVdvcmtlclByZWZlcmVuY2VzID8gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUo
KSA6IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNO
dWxsKCkpCi0gICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3Jr
ZXJVc2VyQWdlbnQobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKKyAgICBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5LT5lc3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4dChwcm9jZXNzUG9vbC0+
bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMgPyBwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2Vy
UHJlZmVyZW5jZXMudmFsdWUoKSA6IHByb2Nlc3NQb29sLT5tX2RlZmF1bHRQYWdlR3JvdXAtPnBy
ZWZlcmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlm
ICghcHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkKKyAgICAg
ICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChw
cm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6cmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5
JiBwcm9jZXNzKQogewotICAgIEFTU0VSVChtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFp
bnMocHJvY2VzcykpOwotICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5yZW1vdmUocHJvY2Vz
cyk7CisgICAgQVNTRVJUKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlucyhwcm9jZXNz
KSk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLnJlbW92ZShwcm9jZXNzKTsKIH0KICNl
bmRpZgogCkBAIC05MjIsNyArNjI0LDcgQEAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJv
Y2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUKICNpZiBQ
TEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICAvLyBJbiBwbGF0Zm9ybXMgdXNpbmcg
QnViYmxld3JhcCBmb3Igc2FuZGJveGluZywgcHJld2FybWVkIHByb2Nlc3MgaXMgbGF1bmNoZWQg
dXNpbmcgdGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSwKICAgICAv
LyBzbyB3ZSBkb24ndCB1c2UgaXQgaW4gY2FzZSBvZiB1c2luZyBhIGRpZmZlcmVudCBXZWJzaXRl
RGF0YVN0b3JlLgotICAgIGlmIChtX3NhbmRib3hFbmFibGVkICYmIG1fd2Vic2l0ZURhdGFTdG9y
ZSAmJiBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCkgIT0gJndlYnNpdGVEYXRhU3RvcmUpCisgICAg
aWYgKG1fc2FuZGJveEVuYWJsZWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogI2VuZGlmCiAK
QEAgLTEwMzIsOCArNzM0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dl
YlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzLCBXZWJzaXRlRGEKICAgICAgICAgcHJv
Y2Vzcy5pc1Jlc3BvbnNpdmUoW2luaXRpYWxpemF0aW9uQWN0aXZpdHkgPSBXVEZNb3ZlKGluaXRp
YWxpemF0aW9uQWN0aXZpdHkpXSAoYm9vbCkgeyB9KTsKICAgICB9KTsKIAotICAgIGVuc3VyZU5l
dHdvcmtQcm9jZXNzKCk7Ci0KICAgICBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFt
ZXRlcnM7CiAKICAgICBwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aCA9IG1fcmVzb2x2ZWRQ
YXRocy5pbmplY3RlZEJ1bmRsZVBhdGg7CkBAIC0xMTk4LDkgKzg5OCw2IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5KiBwcm9j
ZXNzKQogICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPmlnbm9yZVRpbWVvdXRzRm9yVGVz
dGluZygpOwogCiAgICAgbV9jb25uZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5lY3Rpb24odGhp
cywgcHJvY2Vzcy0+d2ViQ29ubmVjdGlvbigpKTsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3Rv
cmUpCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3Mo
KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vz
c1Byb3h5KiBwcm9jZXNzKQpAQCAtMTI5NSwxMCArOTkyLDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4g
V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVm
PEFQSToKICAgICBpZiAoIXBhZ2VDb25maWd1cmF0aW9uLT53ZWJzaXRlRGF0YVN0b3JlKCkpIHsK
ICAgICAgICAgLy8gV2UgdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBkZWZhdWx0IGRhdGEgc3Rv
cmUgYXMgbG9uZyBhcyBwb3NzaWJsZS4KICAgICAgICAgLy8gQnV0IGlmIHRoZXJlIGlzIGFuIGF0
dGVtcHQgdG8gY3JlYXRlIGEgd2ViIHBhZ2Ugd2l0aG91dCBhbnkgc3BlY2lmaWVkIGRhdGEgc3Rv
cmUsIHRoZW4gd2UgaGF2ZSB0byBjcmVhdGUgaXQuCi0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0
YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0KLSAgICAgICAgcGFnZUNvbmZp
Z3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsK
KyAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCkpOwogICAgIH0KIAogICAg
IFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IHByb2Nlc3M7CkBAIC0xMzI5LDcgKzEwMjMsNyBAQCBS
ZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50
JiBwYWdlQ2xpZW50LCBSZWY8QVBJOgogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBp
ZiAoIW1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKSB7CiAgICAgICAgIG1fc2VydmljZVdvcmtl
clByZWZlcmVuY2VzID0gcGFnZS0+cHJlZmVyZW5jZXNTdG9yZSgpOwotICAgICAgICBmb3IgKGF1
dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAg
ICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nl
c3NlcygpKQogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdv
cmtlclByZWZlcmVuY2VzU3RvcmUoKm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKTsKICAgICB9
CiAgICAgaWYgKHVzZXJDb250ZW50Q29udHJvbGxlcikKQEAgLTEzNTYsNyArMTA1MCw3IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3QgU3Ry
aW5nJiB1c2VyQWdlbnQpCiAgICAgaWYgKG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9PSB1c2Vy
QWdlbnQpCiAgICAgICAgIHJldHVybjsKICAgICBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQgPSB1
c2VyQWdlbnQ7Ci0gICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcykKKyAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDog
c2VydmljZVdvcmtlclByb2Nlc3NlcygpKQogICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy5z
ZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CiB9CiAj
ZW5kaWYKQEAgLTEzNjUsMTUgKzEwNTksNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdlQmVn
aW5Vc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSQogewog
ICAgIGF1dG8gcmVzdWx0ID0gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmFkZChkYXRhU3RvcmUuc2Vz
c2lvbklEKCksIEhhc2hTZXQ8V2ViUGFnZVByb3h5SWRlbnRpZmllcj4oKSkuaXRlcmF0b3ItPnZh
bHVlLmFkZChwYWdlSUQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdF
bnRyeSk7Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKLSAg
ICBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsK
LSAgICAgICAgQVNTRVJUKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRhU3RvcmUucGFy
YW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0gc2Vzc2lvbklE
KTsKLSAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIGRh
dGFTdG9yZS5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VFbmRVc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVBy
b3h5SWRlbnRpZmllciBwYWdlSUQsIFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKQEAgLTE0
MDEsNyArMTA4Niw2IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1BhZ2VzVXNpbmdXZWJzaXRl
RGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKIERvd25sb2FkUHJveHkmIFdl
YlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBh
Z2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKIHsKICAgICBhdXRvJiBkb3dubG9hZFBy
b3h5ID0gY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGluaXRpYXRpbmdQ
YWdlLCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNz
aW9uSUQoKTsKIAogICAgIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc0Fw
cEJvdW5kID0gTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46Ok5vOwogICAgIGlmIChpbml0aWF0
aW5nUGFnZSkgewpAQCAtMTQxMSwyNiArMTA5NSwyMyBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9j
ZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJv
eAogI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
UmVzb3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICAvLyBSZXF1
ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBv
ZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KLSAgICAgICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0
b3AgbGV2ZWwgZG9jdW1lbnQncyBVUkwuCi0gICAgICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewot
ICAgICAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlh
dGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OwotICAgICAgICAgICAgdXBkYXRlZFJl
cXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwpOwotICAgICAg
ICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNF
cXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOwotICAgICAgICAgICAgaWYg
KCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJB
Z2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChp
bml0aWF0aW5nUGFnZS0+dXNlckFnZW50Rm9yVVJMKHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29r
aWVzKFVSTCgpKTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFs
c2UpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQo
SFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVl
c3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwot
ICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0g
ICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpE
b3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBk
YXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAgICAg
IHJldHVybiBkb3dubG9hZFByb3h5OworICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVz
dChyZXF1ZXN0KTsKKyAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBi
ZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KKyAgICAvLyBX
ZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KKyAgICBpZiAoaW5p
dGlhdGluZ1BhZ2UpIHsKKyAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJM
IHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OworICAgICAgICB1
cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7
CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21h
aW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKKyAgICAgICAgaWYg
KCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJB
Z2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRp
YXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsK
KyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7CisgICAgICAgIGlm
ICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2Vy
QWdlbnQpKQorICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQ
YWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwogICAgIH0KKyAgICB1cGRhdGVkUmVxdWVz
dC5zZXRJc1RvcFNpdGUoZmFsc2UpOworICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3QoZGF0YVN0b3JlLnNl
c3Npb25JRCgpLCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlz
QXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7CiAKICAgICByZXR1cm4gZG93bmxvYWRQ
cm94eTsKIH0KQEAgLTE0MzgsMTcgKzExMTksMTIgQEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vz
c1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3gK
IERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZChXZWJzaXRlRGF0
YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IEFQ
STo6RGF0YSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIGF1dG8mIGRv
d25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgUmVzb3VyY2VSZXF1
ZXN0KCksIGluaXRpYXRpbmdQYWdlLCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKIAogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAgIGlmICghcGF0aC5pc0VtcHR5KCkpCiAgICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBTYW5kYm94RXh0ZW5zaW9u
OjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgaWYgKG5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93bmxvYWRQcm94
eS5kb3dubG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94
RXh0ZW5zaW9uSGFuZGxlKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5OwotICAg
IH0KLQorICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIGRvd25sb2Fk
UHJveHkuZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2Fu
ZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOwogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQog
CkBAIC0xNTE3LDExICsxMTkzLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVmcmVzaFBsdWdp
bnMoKQogCiAjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAKLVByb2Nlc3NJ
RCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCkKLXsKLSAgICByZXR1
cm4gbV9uZXR3b3JrUHJvY2VzcyA/IG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVy
KCkgOiAwOwotfQotCiBQcm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6OnByZXdhcm1lZFByb2Nlc3NJ
ZGVudGlmaWVyKCkKIHsKICAgICByZXR1cm4gbV9wcmV3YXJtZWRQcm9jZXNzID8gbV9wcmV3YXJt
ZWRQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpIDogMDsKQEAgLTE1NTgsMTQgKzEyMjksMTgg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZShjb25zdCBT
dHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9u
KCkucmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFBy
b2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1
cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7CisgICAgV2Vi
c2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1Nl
Y3VyZSh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeShjb25zdCBT
dHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9u
KCkucmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxT
Y2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVn
aXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUp
KTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2No
ZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3Vy
bFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3Rv
cmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0
ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpLCAw
KTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluUmVsYXhhdGlv
bkZvcmJpZGRlbkZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE1Nzgs
MTQgKzEyNTMsMTggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0xv
Y2FsKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdz
OjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKTsKICAgICBz
ZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1l
QXNMb2NhbCh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpKTsK
KyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1l
XSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3
b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNj
aGVtZUFzTG9jYWwodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmIHVybFNjaGVt
ZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxT
Y2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7
Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpS
ZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFT
dG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3Rv
cmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVy
bFNjaGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3Rl
clVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAt
MTYwNiwxMCArMTI4NSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJM
U2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0CiAgICAgICAgIHJldHVy
bjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLmFk
ZCh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdpc3RlclNj
aGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAo
YXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9j
ZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5
Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5y
ZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25z
dCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MTgsMTAgKzEyOTUsOCBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhh
bmRsZXJzKGNvbgogICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1
c3RvbVByb3RvY29sSGFuZGxlcnMoKS5yZW1vdmUodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1dG8q
IHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29s
KHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdv
cmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1By
b2Nlc3MtPnVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUp
OwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0
aXRpb25lZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2NTUsMTYgKzEzMzAsMTggQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwp
CiAKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldENhY2hl
TW9kZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNo
ZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vi
c2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkg
eworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAgfSk7CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGlu
ZyhDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB7CiAgICAgdXBkYXRlQmFja0ZvcndhcmRDYWNoZUNh
cGFjaXR5KCk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVs
U3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsKKyAgICBXZWJz
aXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5j
aHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCAwKTsKKyAgICB9KTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91
YmxlIHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE2NzQsMTIgKzEzNTEsNyBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dElu
dGVydmFsKQogCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQ
cm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UsIGNvbnN0IEZyYW1lSW5mb0Rh
dGEmIGZyYW1lSW5mbykKIHsKLSAgICByZXR1cm4gZW5zdXJlTmV0d29ya1Byb2Nlc3MoJmRhdGFT
dG9yZSkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGZyYW1lSW5mbywg
b3JpZ2luYXRpbmdQYWdlKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFw
cElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOworICAgIHJldHVybiBk
YXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwg
KnRoaXMsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6YWRkTWVzc2FnZVJlY2VpdmVyKElQQzo6UmVjZWl2ZXJOYW1lIG1lc3Nh
Z2VSZWNlaXZlck5hbWUsIElQQzo6TWVzc2FnZVJlY2VpdmVyJiBtZXNzYWdlUmVjZWl2ZXIpCkBA
IC0xNzUwLDMwICsxNDIyLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3RvcE1lbW9yeVNhbXBs
ZXIoKQogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U3RvcE1l
bW9yeVNhbXBsZXIoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci12
b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3Nh
Z2UsIFUmJiByZXBseSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQ
cm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
U3luYyhzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIHN0ZDo6Zm9yd2FyZDxVPihyZXBseSksIDAp
OwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKGNvbnN0
IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
Ci0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCksIDApOwotfQotCi12b2lkIFdlYlBy
b2Nlc3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCi17Ci0gICAgdGVybWluYXRlU2Vy
dmljZVdvcmtlcnMoKTsKLQotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOwotICAgIG1fbmV0
d29ya1Byb2Nlc3MgPSBudWxscHRyOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5h
dGVBbGxXZWJDb250ZW50UHJvY2Vzc2VzKCkKIHsKICAgICBWZWN0b3I8UmVmUHRyPFdlYlByb2Nl
c3NQcm94eT4+IHByb2Nlc3NlcyA9IG1fcHJvY2Vzc2VzOwpAQCAtMTc4MSw0MCArMTQyOSwxNSBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250ZW50UHJvY2Vzc2VzKCkK
ICAgICAgICAgcHJvY2Vzcy0+dGVybWluYXRlKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1fbmV0d29y
a1Byb2Nlc3MpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0gICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5lbnQ6
Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKQot
ewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0KLQotdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkKLXsKLSAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NE
aWRSZXN1bWUoKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdv
cmtlcnMoKQogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBhdXRvIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICB3aGlsZSAobV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzLmNvbXB1dGVTaXplKCkpCi0gICAgICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5iZWdp
bigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKKyAgICB3aGlsZSAoc2VydmljZVdvcmtlclBy
b2Nlc3NlcygpLmNvbXB1dGVTaXplKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMo
KS5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKICNlbmRpZgogfQogCi12b2lkIFdl
YlByb2Nlc3NQb29sOjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAg
IGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVBdXRv
bWF0aW9uQ2FwYWJpbGl0aWVzKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKQEAgLTIwODksMTUgKzE3MTIsMjEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVwb3J0V2Vi
Q29udGVudENQVVRpbWUoU2Vjb25kcyBjcHVUaW1lLCB1aW50NjRfdCBhY3Rpdml0eVMKICNlbmRp
ZgogfQogCitXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBXZWJQcm9jZXNzUG9vbDo6c2Vy
dmljZVdvcmtlclByb2Nlc3NlcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYWtI
YXNoU2V0PFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICByZXR1cm4gcHJvY2Vzc2Vz
OworfQorCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucygpCiB7
Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7Cisg
ICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW10gKFdlYnNpdGVE
YXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3Mo
KS51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7CisgICAgfSk7CiAjaWYgRU5BQkxFKFNFUlZJQ0Vf
V09SS0VSKQogICAgIC8vIENoZWNrIG9uIG5leHQgcnVuIGxvb3Agc2luY2UgdGhlIHdlYiBwcm9j
ZXNzIHByb3h5IHRva2VucyBhcmUgcHJvYmFibHkgYmVpbmcgdXBkYXRlZC4KLSAgICBjYWxsT25N
YWluUnVuTG9vcChbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0gewotICAgICAg
ICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBmb3IgKGF1dG8m
IHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgIGNh
bGxPbk1haW5SdW5Mb29wKFtdIHsKKyAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJv
Y2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgICAgIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzLnVwZGF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzQXNzZXJ0aW9uKCk7CiAgICAgfSk7
CiAjZW5kaWYKQEAgLTIxMDcsNyArMTczNiw3IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6OmlzU2Vy
dmljZVdvcmtlclBhZ2VJRChXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCkgY29uc3QKIHsK
ICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgaW5lZmZp
Y2llbnQuCi0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLCBb
cGFnZUlEXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2VydmljZVdv
cmtlclByb2Nlc3NlcygpLCBbcGFnZUlEXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVy
biBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJQYWdlUHJveHkocGFnZUlEKTsKICAgICB9KTsKICNl
bmRpZgpAQCAtMjMyOSwxNCArMTk1OCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ3Vy
cmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCkKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCi12b2lkIFdlYlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVM
b2FkV2l0aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21h
aW4sIE9wdGlvblNldDxDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiBuYXZp
Z2F0aW9uRGF0YVRyYW5zZmVyLCBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlE
LCBQYWdlSWRlbnRpZmllciB3ZWJQYWdlSUQpCi17Ci0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNz
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5kaWRDb21taXRDcm9z
c1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihzZXNzaW9uSUQsIGZyb21Eb21haW4sIHRvRG9tYWlu
LCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlEKTsKLX0K
LQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFz
aFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zKQogewogICAgIHNlbmRU
b0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0RG9tYWluc1dpdGhVc2VySW50
ZXJhY3Rpb24oZG9tYWlucykpOwpAQCAtMjM4NywyNyArMjAwOCwyNyBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjp1cGRhdGVBdWRpYmxlTWVkaWFBc3NlcnRpb25zKCkKIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sIHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgaWYgKG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQorICAgIGlmIChz
X3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFT
RV9MT0coU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6
ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpOworICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhT
ZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczogKHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyk7CiAKLSAgICBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwotICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
KCk7Ci0gICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBzX3VzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOworICAg
IGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xz
KCkpCisgICAgICAgIHByb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzU2Vy
dmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdAogewotICAgIHJl
dHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10oYXV0byYgcHJvY2Vz
cykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW10o
YXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2Vy
Rm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQogCiBib29sIFdlYlBy
b2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
LCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2VydmljZVdvcmtl
clByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBwcm9jZXNz
Lmhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCk7CiAgICAgfSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRleCBkMWYxZmU5
NjE1MDZhMWU1ZjEzMjVmYTk5YTU2MDhiOTUwYjZhYjcxLi43YzI1NDg5MDM2Njg5Y2Y5ZmFlYjg3
ODE5MDY3OWRhZjExMTZhMzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmgKQEAgLTgxLDcgKzgxLDYgQEAgT0JKQ19DTEFTUyBXS1ByZWZlcmVuY2VPYnNlcnZlcjsK
IAogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBBdXRvbWF0aW9uQ2xpZW50OwotY2xhc3MgQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogY2xhc3MgRG93bmxvYWRDbGllbnQ7CiBjbGFzcyBIVFRQ
Q29va2llU3RvcmU7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZUNsaWVudDsKQEAgLTE4MCw3ICsxNzks
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIaXN0b3J5Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxB
UEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiYmKTsKICAgICB2b2lkIHNldERvd25sb2Fk
Q2xpZW50KFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PiYmKTsKICAgICB2b2lkIHNldEF1
dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4mJik7
Ci0gICAgdm9pZCBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlx
dWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmKTsKIAogICAgIHZvaWQg
c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYp
OwogICAgIGNvbnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlm
aWVyKCkgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT5jdXN0b21XZWJDb250ZW50U2VydmljZUJ1
bmRsZUlkZW50aWZpZXIoKTsgfQpAQCAtMTkxLDE3ICsxODksOSBAQCBwdWJsaWM6CiAgICAgLy8g
bnVsbCBjaGVja3MgaW4gV2ViUGFnZVByb3h5LgogICAgIFdlYlByb2Nlc3NQcm94eSogZHVtbXlQ
cm9jZXNzUHJveHkoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSBjb25zdCB7IHJldHVybiBtX2R1
bW15UHJvY2Vzc1Byb3hpZXMuZ2V0KHNlc3Npb25JRCkuZ2V0KCk7IH0KIAotICAgIC8vIFdlYlBy
b2Nlc3Mgb3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJyZW50IHByb2Nl
c3MgbW9kZWwuIFRoZSBjb25uZWN0aW9uIG11c3QgYmUgbm9uLW51bGwuCi0gICAgSVBDOjpDb25u
ZWN0aW9uKiBuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKLQogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1lc3NhZ2UpOwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihj
b25zdCBUJiBtZXNzYWdlLCBQQUw6OlNlc3Npb25JRCk7CiAKLSAgICAvLyBTZW5kcyB0aGUgbWVz
c2FnZSB0byBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNzIGFzIGFwcHJvcG9yaWF0ZSBmb3Ig
Y3VycmVudCBwcm9jZXNzIG1vZGVsLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2Vu
ZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IHZvaWQgc2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNz
YWdlLCBVJiYgcmVwbHkpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvTmV0
d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKTsKLQogICAg
IHZvaWQgcHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkqKTsKIAogICAg
IFdlYlByb2Nlc3NDYWNoZSYgd2ViUHJvY2Vzc0NhY2hlKCkgeyByZXR1cm4gbV93ZWJQcm9jZXNz
Q2FjaGUuZ2V0KCk7IH0KQEAgLTIwOSw5ICsxOTksNiBAQCBwdWJsaWM6CiAgICAgLy8gRGlzY29u
bmVjdCB0aGUgcHJvY2VzcyBmcm9tIHRoZSBjb250ZXh0LgogICAgIHZvaWQgZGlzY29ubmVjdFBy
b2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKLSAgICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUq
IHdlYnNpdGVEYXRhU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0
KCk7IH0KLSAgICB2b2lkIHNldFByaW1hcnlEYXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlJiBkYXRhU3RvcmUpIHsgbV93ZWJzaXRlRGF0YVN0b3JlID0gJmRhdGFTdG9yZTsgfQotCiAg
ICAgUmVmPFdlYlBhZ2VQcm94eT4gY3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiwgUmVmPEFQSTo6
UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogCiAgICAgdm9pZCBwYWdlQmVnaW5Vc2luZ1dlYnNpdGVE
YXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2Vic2l0ZURhdGFTdG9yZSYpOwpAQCAt
MjYyLDEwICsyNDksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRTdXBwb3J0ZWRQbHVnaW4oU3Ry
aW5nJiYgbWF0Y2hpbmdEb21haW4sIFN0cmluZyYmIG5hbWUsIEhhc2hTZXQ8U3RyaW5nPiYmIG1p
bWVUeXBlcywgSGFzaFNldDxTdHJpbmc+IGV4dGVuc2lvbnMpOwogICAgIHZvaWQgY2xlYXJTdXBw
b3J0ZWRQbHVnaW5zKCk7CiAKLSAgICBQcm9jZXNzSUQgbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVy
KCk7CiAgICAgUHJvY2Vzc0lEIHByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyKCk7CiAgICAgdm9p
ZCBhY3RpdmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JUZXN0aW5nKFByb2Nlc3NJRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJik7Ci0gICAgYm9vbCBuZXR3
b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKTsKIAogICAg
IFdlYlBhZ2VHcm91cCYgZGVmYXVsdFBhZ2VHcm91cCgpIHsgcmV0dXJuIG1fZGVmYXVsdFBhZ2VH
cm91cC5nZXQoKTsgfQogCkBAIC0zMDcsOCArMjkyLDYgQEAgcHVibGljOgogICAgIEFQSTo6TGVn
YWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlDbGllbnQoKSB7IHJldHVybiAqbV9oaXN0
b3J5Q2xpZW50OyB9CiAgICAgV2ViQ29udGV4dENsaWVudCYgY2xpZW50KCkgeyByZXR1cm4gbV9j
bGllbnQ7IH0KIAotICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBjdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVybiAqbV9jdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQ7IH0KLQogICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKICAgICAgICAgdW5zaWdu
ZWQgd2tWaWV3Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHdrUGFnZUNvdW50OwpAQCAtMzI0LDgg
KzMwNyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgp
OwogICAgIHZvaWQgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIAotICAgIHZvaWQgZmx1c2hD
b29raWVzKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKLQogICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRl
c3RpbmcoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxG
b3JUZXN0aW5nID0gdmFsdWU7IH0KICAgICBib29sIHNob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRNYWtlTmV4dFdlYlBy
b2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZzsgfQogICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHRO
ZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRN
YWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQpAQCAt
Mzg4LDE5ICszNjksMTMgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICAvLyBOZXR3b3JrIFByb2Nl
c3MgTWFuYWdlbWVudAotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIGVuc3VyZU5ldHdvcmtQcm9j
ZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3JlID0gbnVsbHB0cik7Ci0g
ICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MoKSBjb25zdCB7IHJldHVybiBt
X25ldHdvcmtQcm9jZXNzLmdldCgpOyB9CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQo
TmV0d29ya1Byb2Nlc3NQcm94eSYpOwogCi0gICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwotCiAgICAgYm9vbCBpc1NlcnZp
Y2VXb3JrZXJQYWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmllcikgY29uc3Q7CiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQotICAgIHZvaWQgZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmLCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKKyAgICBzdGF0aWMgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0
d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluJiYsIFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAg
IHZvaWQgcmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5Jik7
Ci0gICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBt
X3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKTsgfQotICAgIHZvaWQgc2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGJvb2wgYWxsb3dzKSB7IG1fYWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyID0gYWxsb3dzOyB9Ci0gICAgYm9v
bCBhbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoKSBjb25zdCB7IHJldHVy
biBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjsgfQorICAgIHNpemVf
dCBzZXJ2aWNlV29ya2VyUHJveGllc0NvdW50KCkgY29uc3QgeyByZXR1cm4gc2VydmljZVdvcmtl
clByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCk7IH0KICAgICB2b2lkIHVwZGF0ZVNlcnZpY2VXb3Jr
ZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpOwogICAgIGNvbnN0IE9wdGlvbmFs
PFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXI+JiB1c2VyQ29udGVudENvbnRyb2xsZXJJ
ZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJDb250ZW50
Q29udHJvbGxlcklERm9yU2VydmljZVdvcmtlcjsgfQogICAgIGJvb2wgaGFzU2VydmljZVdvcmtl
ckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdDsKQEAgLTQ1OSw4ICs0MzQsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBhbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSBjb25z
dCB7IHJldHVybiBtX2Fsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eTsgfQogICAgIGJvb2wg
c2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxk
VGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbjsgfQogCi0gICAgdm9pZCBzeW50aGVzaXplQXBwSXNC
YWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCk7Ci0gICAgCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAg
ICAgdm9pZCBnYW1lcGFkQ29ubmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYsIFdlYkNvcmU6OkV2ZW50
TWFrZXNHYW1lcGFkc1Zpc2libGUpOwogICAgIHZvaWQgZ2FtZXBhZERpc2Nvbm5lY3RlZChjb25z
dCBVSUdhbWVwYWQmKTsKQEAgLTQ5OCw3ICs0NzEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVh
ckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpOwogCiAjaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKLSAgICB2b2lkIGRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0
YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biYgZnJvbURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIHRvRG9tYWlu
LCBPcHRpb25TZXQ8V2ViQ29yZTo6Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6Rmxh
Zz4sIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsKICAg
ICB2b2lkIHNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4+JiYpOwogICAgIHZvaWQgc2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NG
b3JUZXN0aW5nKGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5RG9t
YWluLCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdGhpcmRQYXJ0eURvbWFpbiwg
Ym9vbCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKICAgICB2b2lkIHNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CkBAIC01MjUsOCArNDk3LDggQEAgcHVibGlj
OgogICAgIAogICAgIFBsdWdJbkF1dG9TdGFydFByb3ZpZGVyJiBwbHVnSW5BdXRvU3RhcnRQcm92
aWRlcigpIHsgcmV0dXJuIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI7IH0KIAotICAgIHZvaWQg
c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKLSAgICBib29sIHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3VzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3M7IH0KKyAgICBzdGF0aWMgdm9pZCBzZXRVc2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOworICAgIHN0YXRpYyBib29sIHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MoKSB7IHJldHVybiBzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3M7IH0KIAogI2lmIEVOQUJMRShDRlBSRUZTX0RJUkVDVF9NT0RFKQogICAgIHZvaWQgbm90
aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcm
IGtleSwgY29uc3QgT3B0aW9uYWw8U3RyaW5nPiYgZW5jb2RlZFZhbHVlKTsKQEAgLTUzOCw5ICs1
MTAsMTUgQEAgcHVibGljOgogICAgIGludDMyX3QgdXNlcklkKCkgY29uc3QgeyByZXR1cm4gbV91
c2VySWQ7IH0KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgT1NPYmplY3RQdHI8
eHBjX29iamVjdF90PiB4cGNFbmRwb2ludE1lc3NhZ2UoKSBjb25zdDsKLSAgICB2b2lkIHNlbmRO
ZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKE9TT2JqZWN0UHRyPHhwY19vYmpl
Y3RfdD4gZW5kcG9pbnRNZXNzYWdlKTsKKyAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOworICAg
IHN0YXRpYyBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxl
cnMoKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgc3RhdGljIFN0cmluZyBjb29r
aWVTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJl
Y3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsK
KyAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKKyAgICBzdGF0
aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwogI2VuZGlmCiAKIHByaXZh
dGU6CkBAIC01NTYsOCArNTM0LDYgQEAgcHJpdmF0ZToKICAgICBXZWJQcm9jZXNzUHJveHkmIGNy
ZWF0ZU5ld1dlYlByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQ
cmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkOjpObyk7CiAgICAgdm9pZCBp
bml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmLCBXZWJzaXRlRGF0YVN0b3Jl
KiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3
YXJtZWQ6Ok5vKTsKIAotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3Mo
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLQogICAgIHZvaWQgaGFuZGxlTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBV
c2VyRGF0YSYgbWVzc2FnZUJvZHkpOwogICAgIHZvaWQgaGFuZGxlU3luY2hyb25vdXNNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJE
YXRhJiBtZXNzYWdlQm9keSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyRGF0YSYmKT4mJik7
CiAKQEAgLTU4MSwxNCArNTU3LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdXNlc1NpbmdsZVdl
YlByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPnVzZXNTaW5nbGVXZWJQ
cm9jZXNzKCk7IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3RhdGljIFN0cmlu
ZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5k
bGVEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3Rv
cnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKLSAg
ICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwotI2VuZGlmCi0K
ICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2
ZXJzKCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CkBAIC02
MzAsOSArNTk4LDggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWFr
UHRyPFdlYlByb2Nlc3NQcm94eT4+IG1fZHVtbXlQcm9jZXNzUHJveGllczsgLy8gTGlnaHR3ZWln
aHQgV2ViUHJvY2Vzc1Byb3h5IG9iamVjdHMgd2l0aG91dCBiYWNraW5nIHByb2Nlc3MuCiAKICNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5
PiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXM7CisgICAgc3RhdGljIFdlYWtIYXNoU2V0PFdlYlBy
b2Nlc3NQcm94eT4mIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKTsKICAgICBib29sIG1fd2FpdGlu
Z0ZvcldvcmtlckNvbnRleHRQcm9jZXNzQ29ubmVjdGlvbiB7IGZhbHNlIH07Ci0gICAgYm9vbCBt
X2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlciB7IGZhbHNlIH07CiAgICAg
U3RyaW5nIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudDsKICAgICBPcHRpb25hbDxXZWJQcmVmZXJl
bmNlc1N0b3JlPiBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlczsKICAgICBPcHRpb25hbDxVc2Vy
Q29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyPiBtX3VzZXJDb250ZW50Q29udHJvbGxlcklERm9y
U2VydmljZVdvcmtlcjsKQEAgLTY0OCw3ICs2MTUsNiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+IG1fYXV0b21hdGlvbkNsaWVudDsKICAgICBV
bmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4gbV9kb3dubG9hZENsaWVudDsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4gbV9oaXN0b3J5Q2xp
ZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiAKICAgICBSZWZQdHI8V2ViQXV0b21h
dGlvblNlc3Npb24+IG1fYXV0b21hdGlvblNlc3Npb247CiAKQEAgLTY4MCw4ICs2NDYsNiBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9tZW1vcnlTYW1wbGVyRW5hYmxlZCB7IGZhbHNlIH07CiAgICAg
ZG91YmxlIG1fbWVtb3J5U2FtcGxlckludGVydmFsIHsgMTQwMC4wIH07CiAKLSAgICBSZWZQdHI8
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmU7Ci0KICAgICB0eXBl
ZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIFJlZlB0cjxXZWJDb250ZXh0U3VwcGxlbWVudD4sIFB0
ckhhc2g8Y29uc3QgY2hhcio+PiBXZWJDb250ZXh0U3VwcGxlbWVudE1hcDsKICAgICBXZWJDb250
ZXh0U3VwcGxlbWVudE1hcCBtX3N1cHBsZW1lbnRzOwogCkBAIC03MTQsOCArNjc4LDYgQEAgcHJp
dmF0ZToKIAogICAgIGJvb2wgbV9wcm9jZXNzVGVybWluYXRpb25FbmFibGVkIHsgdHJ1ZSB9Owog
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nl
c3M7Ci0KICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8RGljdGlvbmFyeUNhbGxiYWNrPj4g
bV9kaWN0aW9uYXJ5Q2FsbGJhY2tzOwogCiAjaWYgVVNFKFNPVVApCkBAIC04MjAsMzEgKzc4Miwx
MyBAQCBwcml2YXRlOgogI2Vsc2UKICAgICBib29sIG1faXNEZWxheWVkV2ViUHJvY2Vzc0xhdW5j
aERpc2FibGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgbV91c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzIHsgZmFsc2UgfTsKKyAgICBzdGF0aWMgYm9vbCBzX3VzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3M7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNU
SUNTKQogICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IG1fZG9tYWluc1dp
dGhVc2VySW50ZXJhY3Rpb247CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIE9T
T2JqZWN0UHRyPHhwY19vYmplY3RfdD4gbV9lbmRwb2ludE1lc3NhZ2U7Ci0jZW5kaWYKIH07CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3Jr
aW5nUHJvY2VzcyhUJiYgbWVzc2FnZSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBt
X25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1Jl
bGF1bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpCi17Ci0gICAgZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNz
YWdlKSwgMCk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpzZW5kVG9BbGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSkKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCmluZGV4IGQ2NjEwMzM4YjZjZjYwYTI3YTZm
NzVkYWVjMzQ5YThmNzJhYjNiODUuLjFmZmVkM2QxYmY1ZDRjYTc3ZTdlNTFiMDIyNWNmOTMzOWZi
NGFlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApA
QCAtNzM4LDcgKzczOCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXRQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbih1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4sIE1lCiAKIHZvaWQgV2ViUHJv
Y2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oTWVzc2FnZXM6OldlYlByb2Nl
c3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBs
eSkKIHsKLSAgICBtX3Byb2Nlc3NQb29sLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKnRo
aXMsIFdURk1vdmUocmVwbHkpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkuZ2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CiB9CiAKICNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCkBAIC05NTUsOSArOTU1LDkgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OmRp
ZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqIGxhdW5jaGVyLCBJUEM6OkNvbm5lY3QK
ICAgICB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBhdXRvIGVuZHBvaW50TWVzc2FnZSA9
IHByb2Nlc3NQb29sKCkueHBjRW5kcG9pbnRNZXNzYWdlKCk7CisgICAgYXV0byBlbmRwb2ludE1l
c3NhZ2UgPSB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS54cGNFbmRwb2ludE1l
c3NhZ2UoKTsKICAgICBpZiAoZW5kcG9pbnRNZXNzYWdlKQotICAgICAgICB4cGNfY29ubmVjdGlv
bl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVuZHBvaW50TWVz
c2FnZS5nZXQoKSk7CisgICAgICAgIHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2FnZShjb25uZWN0
aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwgZW5kcG9pbnRNZXNzYWdlKTsKICNlbmRpZgogCiAgICAg
UkVMRUFTRV9BU1NFUlQoIW1fd2ViQ29ubmVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0
b3JlQ29jb2EubW0KaW5kZXggN2M0NDA4NTE2NzczNjhiNWRmODlhODZmZjRkM2I1MTUzNGI5MGJi
Ny4uZjVkMGI5NWY5NWQ3OTBjMWEzNzNkZThiY2U4NGIzZTUxMWUxNDI4ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9y
ZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29h
L1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAtMjgsMTAgKzI4LDEyIEBACiAKICNpbXBvcnQg
IkNvb2tpZVN0b3JhZ2VVdGlsc0NGLmgiCiAjaW1wb3J0ICJEZWZhdWx0V2ViQnJvd3NlckNoZWNr
cy5oIgorI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2ltcG9ydCAiU2FuZGJveFV0
aWxpdGllcy5oIgogI2ltcG9ydCAiU3RvcmFnZU1hbmFnZXIuaCIKICNpbXBvcnQgIldlYkZyYW1l
UG9saWN5TGlzdGVuZXJQcm94eS5oIgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNLZXlzLmgiCisj
aW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oIgogI2ltcG9ydCAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKICNp
bXBvcnQgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CkBAIC00NCw2ICs0Niw3IEBA
CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJp
dmlsZWdlLmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvRW50aXRs
ZW1lbnRzLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQpAQCAtNTYyLDQgKzU2NSwyMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlaW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlucygpCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJz
aXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25z
dCBTdHJpbmcmIGVudGl0bGVtZW50KQoreworICAgIHJldHVybiBXVEY6Omhhc0VudGl0bGVtZW50
KG5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVudGl0bGVt
ZW50LnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3
b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKE9TT2JqZWN0UHRyPHhwY19vYmplY3Rf
dD4gZW5kcG9pbnRNZXNzYWdlKQoreworICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vz
c2VzKSB7CisgICAgICAgIGlmIChwcm9jZXNzLnN0YXRlKCkgIT0gQXV4aWxpYXJ5UHJvY2Vzc1By
b3h5OjpTdGF0ZTo6UnVubmluZykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
IXByb2Nlc3MuY29ubmVjdGlvbigpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGF1
dG8gY29ubmVjdGlvbiA9IHByb2Nlc3MuY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCk7Cisg
ICAgICAgIHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2FnZShjb25uZWN0aW9uLCBlbmRwb2ludE1l
c3NhZ2UuZ2V0KCkpOworICAgIH0KK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCAwODMwY2E3
NWE3ZmMzOGU2NDViNzc1YjM5YjMzNzVkNGMyMDUwMzdkLi5kYzk3ZWFmZGI2YjEzNmQwOTA2Yjkw
OWZmZWY3YWNiYjQwOTA2Zjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMzIsMTEgKzMyLDE0IEBA
CiAjaW5jbHVkZSAiQXV0aGVudGljYXRvck1hbmFnZXIuaCIKICNpbmNsdWRlICJEZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZS5oIgogI2luY2x1ZGUgIkdQVVByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNb2NrQXV0aGVudGljYXRvck1hbmFnZXIuaCIKKyNpbmNs
dWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCiAjaW5jbHVkZSAiTmV0d29ya1By
b2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5o
IgogI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNsdWRlICJXZWJCYWNrRm9y
d2FyZENhY2hlLmgiCisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVk
ZSAiV2ViS2l0MkluaXRpYWxpemUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNs
dWRlICJXZWJQcm9jZXNzQ2FjaGUuaCIKQEAgLTc1LDYgKzc4LDEwIEBACiAjaW5jbHVkZSAiU09B
dXRob3JpemF0aW9uQ29vcmRpbmF0b3IuaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0Ep
CisjaW5jbHVkZSAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNlbmRpZgorCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogc3RhdGljIGJvb2wgYWxsb3dzV2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxs
T3JpZ2luczsKQEAgLTgzLDEzICs5MCwxOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFsbG93
V2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2lucygpCiAgICAgYWxsb3dzV2Vic2l0ZURhdGFS
ZWNvcmRzRm9yQWxsT3JpZ2lucyA9IHRydWU7CiB9CiAKLXN0YXRpYyBIYXNoTWFwPFBBTDo6U2Vz
c2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4mIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkKK3N0YXRp
YyBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4mIGFsbERhdGFTdG9y
ZXMoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPj4g
bWFwOwogICAgIHJldHVybiBtYXA7CiB9CiAKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFj
aFdlYnNpdGVEYXRhU3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0YVN0b3JlJik+JiYgZnVu
Y3Rpb24pCit7CisgICAgZm9yIChhdXRvKiBkYXRhU3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFs
dWVzKCkpCisgICAgICAgIGZ1bmN0aW9uKCpkYXRhU3RvcmUpOworfQorCiBSZWY8V2Vic2l0ZURh
dGFTdG9yZT4gV2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlTm9uUGVyc2lzdGVudCgpCiB7CiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvbjo6Y3JlYXRlKElzUGVyc2lzdGVudDo6Tm8pLCBQQUw6OlNlc3Npb25JRDo6Z2Vu
ZXJhdGVFcGhlbWVyYWxTZXNzaW9uSUQoKSkpOwpAQCAtMTE1LDcgKzEyOCw3IEBAIFdlYnNpdGVE
YXRhU3RvcmU6OldlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uPiYmIGNvbmZpZ3VyCiAjZW5kaWYKIHsKICAgICBXVEY6OnNldFByb2Nlc3NQcml2aWxlZ2Vz
KGFsbFByaXZpbGVnZXMoKSk7Ci0gICAgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsK
KyAgICByZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKICAgICBwbGF0Zm9ybUluaXRpYWxpemUo
KTsKIAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CkBAIC0xMjgsMTcgKzE0MSwxMiBA
QCBXZWJzaXRlRGF0YVN0b3JlOjp+V2Vic2l0ZURhdGFTdG9yZSgpCiAKICAgICBwbGF0Zm9ybURl
c3Ryb3koKTsKIAotICAgIGlmIChtX3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIEFTU0VSVChub25EZWZhdWx0RGF0YVN0b3JlcygpLmdl
dChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7Ci0gICAgICAgIG5vbkRlZmF1bHREYXRhU3RvcmVzKCku
cmVtb3ZlKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdl
YlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwotICAg
ICAgICB9Ci0gICAgfQorICAgIEFTU0VSVChhbGxEYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklE
KSA9PSB0aGlzKTsKKyAgICBhbGxEYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnJlbW92ZVNlc3Npb24oKnRoaXMpOwogI2lmIEVOQUJMRShHUFVf
UFJPQ0VTUykKLSAgICAgICAgaWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94eSA9IEdQVVByb2Nlc3NQ
cm94eTo6c2luZ2xldG9uSWZDcmVhdGVkKCkpCi0gICAgICAgICAgICBncHVQcm9jZXNzUHJveHkt
PnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOworICAgIGlmIChhdXRvKiBncHVQcm9jZXNzUHJv
eHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQorICAgICAgICBncHVQ
cm9jZXNzUHJveHktPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwogI2VuZGlmCiB9CiAKQEAg
LTE2OSwxNyArMTc3LDMzIEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9y
ZUV4aXN0cygpCiAgICAgcmV0dXJuICEhZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpOwogfQogCi12
b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKK3Zv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKIHsKLSAgICBp
ZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewot
ICAgICAgICBhdXRvIHJlc3VsdCA9IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lv
bklELCB0aGlzKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0Vu
dHJ5KTsKKyAgICBhdXRvIHJlc3VsdCA9IGFsbERhdGFTdG9yZXMoKS5hZGQobV9zZXNzaW9uSUQs
IHRoaXMpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Cit9
CisKK1dlYnNpdGVEYXRhU3RvcmUqIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3Jl
Rm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK3sKKyAgICByZXR1cm4gYWxs
RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpOworfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBX
ZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2VzcygpCit7CisgICAgaWYgKCFtX25ldHdvcmtQ
cm9jZXNzKSB7CisgICAgICAgIGlmIChtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IG1fc2Vz
c2lvbklEID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCisgICAgICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQ
cm9jZXNzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGUoKTsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
YWRkU2Vzc2lvbigqdGhpcyk7CiAgICAgfQorCisgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNz
OwogfQogCi1XZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRl
ZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQorTmV0
d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3MoKSBjb25z
dAogewotICAgIHJldHVybiBzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSA/IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCkgOiBudWxscHRy
OworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYnNpdGVEYXRhU3RvcmUmPigqdGhpcykubmV0d29y
a1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlclByb2Nlc3Mo
V2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQpAQCAtMTk1LDEyICsyMTksNiBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnVucmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykK
ICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CiB9CiAKLVdlYlByb2Nlc3NQb29sKiBX
ZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkK
LXsKLSAgICBhdXRvIHBvb2xzID0gcHJvY2Vzc1Bvb2xzKDEpOwotICAgIHJldHVybiBwb29scy5p
c0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVnaW4oKS0+Z2V0KCk7Ci19Ci0KIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKQogewogICAgIGlm
IChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBAIC00NDAsMjggKzQ1OCwyMSBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+IGRhdGFUeXBlcywgTwogI2VuZGlmCiAKICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNz
VHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5
cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwotICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUg
IT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsKLSAgICAgICAgYXV0byBwb29scyA9IG5ldHdv
cmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJl
UHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNzUG9vbHMoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHBvb2xzKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNj
ZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1
bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAg
ICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5v
bmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9
Ci0KKyAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgeworICAgIGNhc2UgUHJv
Y2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKKyAgICAg
ICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBj
YXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKKyAgICAgICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpIHsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGlu
Z0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+
ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkg
eworICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Np
b25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKFdlYnNp
dGVEYXRhIHdlYnNpdGVEYXRhKSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9y
LT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNz
VHlwZTo6Tm9uZToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgYXV0byB3ZWJQcm9jZXNz
QWNjZXNzVHlwZSA9IGNvbXB1dGVXZWJQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFGZXRjaChkYXRh
VHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CkBAIC03MjQsMzEgKzczNSwyNCBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5
cGVzLCBXYWxsVGltZQogICAgIGJvb2wgZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdl
YnNpdGVEYXRhID0gZmFsc2U7CiAjZW5kaWYKICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNz
VHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVtb3ZhbChkYXRh
VHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7Ci0gICAgaWYgKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlw
ZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkgewotICAgICAgICBhdXRvIHBvb2xzID0gbmV0
d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09IFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2ggPyBlbnN1
cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nlc3NQb29scygpOwotICAgICAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcG9vbHMpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NB
Y2Nlc3NUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZM
YXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAg
ICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6
Tm9uZToKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IH0KLQorICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBQ
cm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgorICAgICAgICBuZXR3b3JrUHJvY2VzcygpOworICAg
ICAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAg
IGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgorICAgICAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykgewogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5k
aW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
LT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAgICAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9k
aWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewogICAgICAgICAgICAgICAgIGNhbGxi
YWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsK
ICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgICAgICAgICAgZGlkTm90
aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhID0gdHJ1ZTsKICNlbmRpZgogICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6
CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGF1dG8gd2ViUHJvY2Vzc0FjY2Vzc1R5cGUg
PSBjb21wdXRlV2ViUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFp
c1BlcnNpc3RlbnQoKSk7CkBAIC04OTMsMTQgKzg5Nyw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxU
aW1lCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBpZiAoZGF0YVR5
cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcykpIHsK
ICAgICAgICAgaWYgKCFkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEp
IHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5h
ZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy0+ZGVsZXRl
V2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdh
dG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MoKS5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNp
bmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0pOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsK
QEAgLTk5NCwxMiArOTkzLDEwIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3
b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5
cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVu
Y2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRo
aXMpOworICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CkBAIC0x
MDIxLDcgKzEwMTgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwot
ICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmRlbGV0ZVdlYnNpdGVE
YXRhRm9yT3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBvcmlnaW5zLCBjb29raWVIb3N0
TmFtZXMsIEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0cmFibGVEb21haW5zLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5k
ZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgb3JpZ2lu
cywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJhYmxlRG9tYWlu
cywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAgICAgICAgICAgICBj
YWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0KQEAgLTExODAsMTggKzExNzcsMTIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29u
c3QgVmUKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZv
clRlc3RpbmcoU2Vjb25kcyBzZWNvbmRzKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhzZWNvbmRzKSwgTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6
UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGlu
ZyhzZWNvbmRzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0
Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoKQogewotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5n
KCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1l
b3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRj
aFRpbWVvdXRGb3JUZXN0aW5nKCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2
aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7CiB9CiAKICNpZiBF
TkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMTIwMSw4ICsxMTkyLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11
bUVudHJ5Q291bnQsIENvbXBsZXQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyht
X3Nlc3Npb25JRCwgbWF4aW11bUVudHJ5Q291bnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJp
ZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25Ubyhz
aXplX3QgcHJ1bmVUYXJnZXRDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTIxMSw4ICsxMjAxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBsZXRp
b24KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1fc2Vzc2lvbklELCBwcnVu
ZVRhcmdldENvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1
bmVUYXJnZXRDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjIxLDggKzEy
MTAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNv
bmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVy
aW5nVGltZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUo
bV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1v
dmFsKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTIzMSwyMCArMTIxOSwxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMs
CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vz
c2lvbklELCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVt
b3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
ICAgICAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3Mo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3Mt
PmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sIGlzUHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyNTYsMTIgKzEy
MzcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgICAgIHByb2Nlc3MtPmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuaXNQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sIGlzUHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTEyNzMsMTIgKzEyNDksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRo
ZXJlZChjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChibwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzR3JhbmRmYXRoZXJlZChtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwm
IHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTI5Miw4ICsxMjYzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm8KICAgICAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1
cmVQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGUoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTEzMDcsMTAgKzEyNzcsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVu
dFJlc291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNWZXJ5UHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTEzMjIsMTIgKzEyODksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzVmVy
eVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcgogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZl
cnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM0MSwxMCArMTMwMyw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2V0VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJl
Y29yZHNSZW1vdmFsKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTEzNTMsOCArMTMxMiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9v
bCB2CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJl
Y29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvbnN0IFVS
TCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTEzNjgsMjIgKzEzMjYsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY28KIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9w
RnJhbWVVUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1
YkZyYW1lVW5kZXIoY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVS
TCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVn
aXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZy
YW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNT
dWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1
YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNl
VVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzk3LDIzICsxMzQ3LDE0IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3Vi
cmVzb3VyY2VVCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3MtPnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZy
YW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFVSTCYgc3VicmVz
b3VyY2VVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVu
ZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNl
VVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29u
c3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0MjcsMTAgKzEz
NjgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RUbyhjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VV
UkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVj
dGVkRnJvbSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTQ0MiwxMiArMTM4MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0
IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDU5LDEyICsxMzkyLDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29u
c3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJh
bWVVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJl
Y3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlx
dWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRp
cmVjdGVkRnJvbSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTQ3NiwyNSArMTQwNCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbgogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVk
aXJlY3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBVUkwmIHVy
bFJlZGlyZWN0ZWRGcm9tLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1Jl
ZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
UmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVj
dGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTUwNiw2MCArMTQyMyw0MSBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFyUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyUHJl
dmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkucmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3VibWl0VGVs
ZW1ldHJ5KCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7IH0pOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25JRCwgW10geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJz
aXN0ZW50KFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGlj
cyBzaG91bGRHcmFuZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJ
bk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UsIHNob3VsZEdy
YW5kZmF0aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50
KG1fc2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0g
ICAgc3RydWN0IENhbGxiYWNrQWdncmVnYXRvciA6IFJlZkNvdW50ZWQ8Q2FsbGJhY2tBZ2dyZWdh
dG9yPiB7Ci0gICAgICAgIENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICBzdHJ1Y3QgTG9jYWxDYWxsYmFja0FnZ3JlZ2F0
b3IgOiBSZWZDb3VudGVkPExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yPiB7CisgICAgICAgIExvY2Fs
Q2FsbGJhY2tBZ2dyZWdhdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogICAgICAgICAgICAgOiBtX2NvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogICAgICAgICB9OwogCi0gICAgICAgIH5DYWxsYmFja0FnZ3JlZ2F0b3IoKQorICAg
ICAgICB+TG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IoKQogICAgICAgICB7CiAgICAgICAgICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC0xNTc0LDM4ICsxNDcyLDMxIEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KENv
bXBsZXRpb25IYW5kbGVyPHZvCiAgICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9y
PFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiBtX2Nv
bXBsZXRpb25IYW5kbGVyOwogICAgICAgICBWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4gbV9yZXN1bHRzOwogICAgIH07Ci0KLSAgICBSZWZQdHI8
Q2FsbGJhY2tBZ2dyZWdhdG9yPiBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBhZG9wdFJlZihuZXcgQ2Fs
bGJhY2tBZ2dyZWdhdG9yKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7Ci0KLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPnNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHByb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cyh0aGlzKS5nZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXShWZWN0b3I8V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7Ci0gICAgICAgICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRSZXN1bHQoV1RGTW92ZShkYXRhKSk7Ci0gICAgICAg
ICAgICB9KTsKKyAgICAKKyAgICBhdXRvIGxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yID0gYWRvcHRS
ZWYobmV3IExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KSk7CisgICAgCisgICAgYXV0byB3dGZDYWxsYmFja0FnZ3JlZ2F0b3IgPSBXVEY6OkNhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IGxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbbG9jYWxDYWxs
YmFja0FnZ3JlZ2F0b3JdKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRo
aXJkUGFydHlEYXRhPiYmIGRhdGEpIHsKKyAgICAgICAgICAgIGxvY2FsQ2FsbGJhY2tBZ2dyZWdh
dG9yLT5hZGRSZXN1bHQoV1RGTW92ZShkYXRhKSk7CiAgICAgICAgIH0pOwotICAgIH0KKyAgICB9
KTsKKyAgICAKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFs
bFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoW3d0ZkNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50KFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyBzaG91bGRHcmFuZGZhdGhlciwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0K
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNz
aW9uSUQsIHsgfSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ2xlYXJJ
bk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIHsgfSwgc2hvdWxkR3JhbmRmYXRoZXIs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShtX3Nlc3Npb25JRCwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShtX3Nlc3Npb25JRCwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hl
ZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTYxNCwyNCArMTUwNSwxMyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vz
c2luZyhDb21wbGV0aW9uSGFuZAogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9j
ZXNzaW5nKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRh
UmVjb3Jkc1Byb2Nlc3NpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFi
bGVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5zdGF0
aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnN0YXRpc3Rp
Y3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFVS
TCYgdXJsLCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTE2NDMsMjIgKzE1MjMsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0
aW9uSGEKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5z
ZXRMYXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFi
YXNlKGludCBkb21haW5JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAg
IHByb2Nlc3MtPmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZG9tYWluSURFeGlzdHNJbkRhdGFiYXNl
KG1fc2Vzc2lvbklELCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBV
UkwmIHVybCwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDEsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwy
LCBTZWNvbmRzIGxhc3RTZWVuLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgU2Vjb25kcyBtb3N0
UmVjZW50VXNlckludGVyYWN0aW9uLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgYm9vbCBpc1ByZXZh
bGVudCwgYm9vbCBpc1ZlcnlQcmV2YWxlbnQsIHVuc2lnbmVkIGRhdGFSZWNvcmRzUmVtb3ZlZCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY3MCwx
MCArMTU0Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0
aW5nKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHRvcEZyCiAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0
UmVjZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1Zl
cnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkubWVyZ2VTdGF0aXN0
aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlcklu
dGVyYWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlz
UHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBp
cmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBoYWRVc2VySW50ZXJh
Y3Rpb24sIGJvb2wgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgYm9vbCBp
c1ByZXZhbGVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTY4NSwxOCArMTU1NCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4
cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGhhZAogCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmluc2VydEV4cGlyZWRT
dGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWwsIGlzUHJldmFsZW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pbnNlcnRFeHBpcmVkU3RhdGlz
dGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFS
ZW1vdmFsLCBpc1ByZXZhbGVudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2Fu
bmVkKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5l
ZChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTcwNCw4ICsxNTY5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChib29sIHZhbHVlLCBDb21w
bGUKICAgICB1c2VFeHBsaWNpdElUUFN0YXRlKCk7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0SXNS
dW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFs
bFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucyk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xNzE2LDcgKzE1ODAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omdl
dEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgd2ViUGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQ
b29sKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyht
X3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogCkBAIC0xNzI0LDggKzE1ODgsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyBzZWNvbmRz
LCBDb21wbGV0aW9uSAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vz
c1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bihtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQs
IHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzM5LDEwICsxNjAyLDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+bG9nVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmxvZ1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJh
Y3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xNzU0LDEzICsxNjE0LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aGFz
SGFkVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuaGFzSGFkVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRh
YmFzZU9uY2UoY29uc3QgVVJMJiBzdWJVcmwsIGNvbnN0IFVSTCYgdG9wVXJsLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc3MiwxMyArMTYy
Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFz
ZU9uY2UoY29uc3QgVVJMJiBzdWJVcmwsIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWxhdGlvbnNoaXBPbmx5
SW5EYXRhYmFzZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
c3ViVXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclVz
ZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc5MiwxMCArMTY0MCw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3MtPmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJM
JiB1cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODA5LDEwICsxNjU0LDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRo
ZXJlZCwgQ28KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNldEdyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0aGVy
ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgyMSwxMCArMTY2Myw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zZXRVc2VJVFBEYXRhYmFzZShtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VXNl
SVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0Rl
Y29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZnJvbVVSTCwgY29uc3QgVVJMJiB0b1VSTCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgzMyw2
MiArMTY3MiwzOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRo
TGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZgogICAgIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0Q3Jvc3NTaXRlTG9hZFdp
dGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvVVJM
IH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0
aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNX
aXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5r
RGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhM
aW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGVsZXRlQ29va2llc0ZvclRlc3Rp
bmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5kZWxldGVD
b29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVDb29raWVzRm9yVGVzdGluZyht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5jbHVkZUh0
dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAog
ewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0xvY2FsU3RvcmFnZShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAg
IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0xvY2Fs
U3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxl
dGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzSXNvbGF0ZWRTZXNz
aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhi
b29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJs
ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0xOTE5LDEw
ICsxNzM0LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxv
Y2tpbmdNb2RlKFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWUKICAgICAgICAgICAgIHdlYlByb2Nl
c3Muc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShibG9ja2luZ01vZGUsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9k
ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lvbklELCBibG9ja2luZ01v
ZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudEZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTMwLDEwICsxNzQyLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0
cmljdEVuZm9yY2UKICAgICBhdXRvIGZsYWcgPSBlbmFibGVkID8gV2ViQ29yZTo6U2FtZVNpdGVT
dHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6OlllcyA6IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRFbmFibGVkOjpObzsKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZEVuYmxlU2FtZVNp
dGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZsYWcsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGlu
Zyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE5NDEsMjAgKzE3NTAsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBhdXRvIG1vZGUgPSBlbmFibGVkID8gV2Vi
Q29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tpZXMgOiBX
ZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6Tm9uZTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZUZvclRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVt
b3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRU
b1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0
aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhj
b25zdCBVUkwmIGZpcnN0UGFydHlVUkwsIGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NjYsOCArMTc2OSw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFy
dHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAg
cHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eUhvc3RDTkFN
RURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZpcnN0UGFydHlVUkwuaG9zdCgpLnRvU3Ry
aW5nKCksIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFydHlIb3N0
Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJzdFBhcnR5VVJMLmhvc3QoKS50
b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcoY29uc3Qg
VVJMJiBjbmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTk3OSwxOCArMTc4MSwxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKAogCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZv
clRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVV
UkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoUkVT
T1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN5bmNMb2Nh
bFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5jTG9j
YWxTdG9yYWdlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U3luY0xvY2FsU3RvcmFnZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJj
ZXMoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xOTk4LDggKzE3OTUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQwog
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNo
ZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENhY2hlTWF4
QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Vjb25kcyk7CiAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTIwMDksMjYgKzE4MDUsMTIgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhTZWNv
bmRzIHNlY29uZHMsIEMKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNh
cEZvclByZXZhbGVudFJlc291cmNlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25J
RCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5yZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CiAjZW5kaWYKIH0KIAotYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjppc0Fzc29jaWF0ZWRQcm9j
ZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpIGNvbnN0Ci17Ci0gICAgaWYgKGF1
dG8qIHByb2Nlc3NQb29sRGF0YVN0b3JlID0gcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgp
KQotICAgICAgICByZXR1cm4gcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPT0gdGhpczsKLSAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgIHJldHVybiBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5oYXNTZXNzaW9uKG1fc2Vzc2lv
bklEKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQ
b29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uc3QK
IHsKICAgICBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IHByb2Nlc3NQb29sczsKQEAg
LTIwNDMsOSArMTgyNSw2IEBAIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0
ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uCiAgICAgaWYgKHByb2Nl
c3NQb29scy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgb25lIG9mIHRo
ZSBsZWdhY3kgZGF0YSBzdG9yZXMuCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBX
ZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmICghaXNB
c3NvY2lhdGVkUHJvY2Vzc1Bvb2woKnByb2Nlc3NQb29sKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQogICAgICAgICAgICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9jZXNzUG9vbCk7CiAgICAg
ICAgICAgICBpZiAocHJvY2Vzc1Bvb2xzLnNpemUoKSA9PSBsaW1pdCkKICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTIwODQsOCArMTg2Myw3IEBAIHN0YXRpYyBTdHJpbmcgY29tcHV0ZU1lZGlh
S2V5RmlsZShjb25zdCBTdHJpbmcmIG1lZGlhS2V5RGlyZWN0b3J5KQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJD
ZXJ0aWZpY2F0ZUluZm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7Ci0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0
aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9z
dChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKIH0KIAogVmVjdG9y
PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gV2Vic2l0ZURhdGFTdG9yZTo6bWVkaWFLZXlP
cmlnaW5zKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSkKQEAgLTIxNDAs
NiArMTkxOCw0NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZU1lZGlhS2V5cyhjb25z
dCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksCiAgICAgfQogfQogCit2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJv
eHkmIHdlYlByb2Nlc3NQcm94eSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBOZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb25JbmZvJik+JiYgcmVwbHkpCit7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1Byb3h5LCBbdGhpcywgd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHdlYlByb2Nlc3NQcm94eSA9IG1ha2VXZWFrUHRy
KHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0gV1RGTW92ZShyZXBseSldIChhdXRvJiBjb25uZWN0
aW9uSW5mbykgbXV0YWJsZSB7CisgICAgICAgIGlmIChVTkxJS0VMWSghSVBDOjpDb25uZWN0aW9u
OjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSW5mby5pZGVudGlmaWVyKCkpICYmIHdlYlBy
b2Nlc3NQcm94eSAmJiB3ZWFrVGhpcykpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lGKGlz
UGVyc2lzdGVudCgpLCBQcm9jZXNzLCAiZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOiBGYWls
ZWQgZmlyc3QgYXR0ZW1wdCwgcmV0cnlpbmciKTsKKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
KCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3ZWJQcm9jZXNzUHJveHksIFdURk1vdmUo
cmVwbHkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICByZXBseShj
b25uZWN0aW9uSW5mbyk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bmV0
d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKQoreworICAgIG1fbmV0d29y
a1Byb2Nlc3MgPSBudWxscHRyOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOworICAgIG1fbmV0
d29ya1Byb2Nlc3MgPSBudWxscHRyOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmRO
ZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
bmRQcmVwYXJlVG9TdXNwZW5kKElzU3VzcGVuc2lvbkltbWluZW50OjpObywgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3Jr
UHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKQoreworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7Cit9
CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkK
K3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7Cit9CisKIGJv
b2wgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSBjb25z
dAogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMTY5LDE3ICsx
OTg4LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgICAgICAKICAgICAgICAgcmVzb2x2ZURpcmVjdG9y
aWVzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpKTsKKyAgICAgICAgbmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpLCAwKTsKKyAgICAgICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAgICAgICAgICAgcHJvY2Vzc1Bvb2wt
PnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHRydWUpLCBtX3Nlc3Npb25JRCk7Ci0gICAgICAg
IH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpLCAwKTsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNz
ZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZChmYWxzZSksIG1fc2Vzc2lvbklEKTsKLSAgICB9CiAKICAgICBtX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkID0gZmFsc2U7CiAjZWxzZQpAQCAtMjE5MSw4ICsyMDA4LDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZChib29sIGVuYWJsZWQpCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0
aW5nQ2FsbGJhY2soRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjYWxsYmFjaykKIHsK
ICAgICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKQotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQ
cm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0
aW5nRXZlbnQodHJ1ZSksIDApOwogICAgIH0KICAgICAKICAgICBtX3N0YXRpc3RpY3NUZXN0aW5n
Q2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKQEAgLTIyMTEsOCArMjAyNyw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29s
IGVuYWJsZWQsIENvbXBsZXRpCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdN
b2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CiAgICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRp
b25IYW5kbGVyKTsKQEAgLTIyMjcsMjAgKzIwNDIsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotI2VuZGlmCisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyNl
bHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworI2VuZGlmCiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEFkQ2xpY2tBdHRyaWJ1
dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEFkQ2xpY2tB
dHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCkBAIC0yMjYyLDQ4ICsyMDcyLDE5IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6Y2xlYXJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzSW5XZWJQcm9jZXNzZXMoQ29tcGxldGlv
bkhhbmRsCiB9CiAjZW5kaWYKIAotVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gV2Vic2l0ZURhdGFT
dG9yZTo6cGVuZGluZ0Nvb2tpZXMoKSBjb25zdAotewotICAgIHJldHVybiBjb3B5VG9WZWN0b3Io
bV9wZW5kaW5nQ29va2llcyk7Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGlu
Z0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSkKLXsKLSAgICBtX3BlbmRpbmdD
b29raWVzLnJlbW92ZUlmKFsmY29va2llXShhdXRvJiBwZW5kaW5nQ29va2llKSB7Ci0gICAgICAg
IHJldHVybiBwZW5kaW5nQ29va2llLmlzS2V5RXF1YWwoY29va2llKTsKLSAgICB9KTsKLSAgICBt
X3BlbmRpbmdDb29raWVzLmFkZChjb29raWUpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0g
ICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmUoY29va2llKTsKLX0KLSAgICAKLXZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcygpCi17Ci0gICAgbV9wZW5kaW5nQ29va2ll
cy5jbGVhcigpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZsdXNoQ29va2llcyhDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vz
c1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+Zmx1c2hDb29r
aWVzKHNlc3Npb25JRCgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWxsb3dzQW55U1NMQ2VydGlm
aWNhdGVGb3JXZWJTb2NrZXQoYm9vbCBhbGxvd3MpCiB7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQ
b29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwgTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tl
dDo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNv
Y2tldChhbGxvd3MpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENl
cnRpZmljYXRlRm9yV2ViU29ja2V0OjpSZXBseSgpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKCkKIHsKLSAgICBmb3IgKGF1dG8gcHJvY2Vz
c1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nl
c3NQb29sLT5jbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCgpKTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckNhY2hlZENyZWRl
bnRpYWxzKHNlc3Npb25JRCgpKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGlz
cGF0Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKQEAgLTIzMjksOCArMjEx
MCw2IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFt
ZXRlcnMoKQogCiAgICAgcmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsKIAotICAgIHBh
cmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBwZW5kaW5nQ29va2llcygpOwotCiAgICAgYXV0byBy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlIYW5kbGU7CiAgICAgaWYgKCFyZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKQEAgLTI0MzUsNyArMjIxNCwxMCBA
QCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJz
KCkKICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVkID0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZDsKICNlbmRpZgogICAgIHBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMocGFyYW1ldGVy
cyk7Ci0KKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24g
PSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKKyNlbmRpZgor
ICAgIAogICAgIHJldHVybiBwYXJhbWV0ZXJzOwogfQogCkBAIC0yNDY1LDEwICsyMjQ3LDYgQEAg
QVBJOjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6OmNvb2tpZVN0b3JlKCkKICAg
ICByZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGlk
Q3JlYXRlTmV0d29ya1Byb2Nlc3MoKQotewotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omdl
dExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0
YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBpZiAoIWlzUGVyc2lzdGVudCgpKSB7CkBAIC0yNDc2LDIzICsyMjU0LDE1IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZl
Y3RvcjxMb2NhbFN0b3JhZ2VECiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJvY2Vz
c1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpLmdldExvY2FsU3RvcmFnZURldGFpbHMo
bV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShhdXRvJiYgZGV0YWlscykgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZShkZXRhaWxzKSk7Ci0gICAgICAgIH0pOwotICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBm
ZXRjaGluZyBmcm9tIG11bHRpcGxlIHBvb2xzLgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
QVNTRVJUKCFjb21wbGV0aW9uSGFuZGxlcik7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRMb2Nh
bFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMpIHsKKyAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6cmVzZXRRdW90YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNz
LT5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UXVvdGEobV9zZXNzaW9uSUQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0yNTE4LDcg
KzIyODgsMTIgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpodHRwM0VuYWJsZWQoKQogewogICAg
IHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZgorCitib29sIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdv
cmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpCit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorI2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkKIAogI2lmICFVU0Uo
R0xJQikKIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREZXZpY2VJZEhhc2hT
YWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQpAQCAtMjUzMCwzNSArMjMwNSwxOCBAQCBXVEY6OlN0cmlu
ZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0
b3J5KCkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRh
KFVSTCYmIG9sZE5hbWUsIFVSTCYmIG5ld05hbWUsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IGRhdGFUeXBlcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp0aGlzKTsKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5yZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklE
LCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW5hbWVPcmlnaW5Jbldl
YnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlO
UykKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzQXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuaGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJBcHBCb3VuZFNlc3Np
b24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhckFwcEJv
dW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5p
dGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMjU4MCw3ICsyMzM4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3J3YXJkQXBwQm91
bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGUKIAogICAgIHByb3Bh
Z2F0ZUFwcEJvdW5kRG9tYWlucyhnbG9iYWxEZWZhdWx0RGF0YVN0b3JlKCkuZ2V0KCksICphcHBC
b3VuZERvbWFpbnMpOwogCi0gICAgZm9yIChhdXRvKiBzdG9yZSA6IG5vbkRlZmF1bHREYXRhU3Rv
cmVzKCkudmFsdWVzKCkpCisgICAgZm9yIChhdXRvKiBzdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52
YWx1ZXMoKSkKICAgICAgICAgcHJvcGFnYXRlQXBwQm91bmREb21haW5zKHN0b3JlLCAqYXBwQm91
bmREb21haW5zKTsKIH0KIApAQCAtMjU4OCwxMCArMjM0Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKGNvbnN0IEhhc2hTZXQ8V2ViQ29yZTo6UmVn
aXN0cmFiCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2V0QXBwQm91bmREb21haW5zRm9yUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyhtX3Nlc3Npb25JRCwgZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogI2VuZGlmCiAKQEAgLTI1OTksMTYgKzIzNTQsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25zdCBTdHJpbmcm
IGJ1bmQKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVy
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkudXBkYXRl
QnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRpZmllcklu
TmV0d29ya1Byb2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXggMGRjOTFmMjNj
NDE1NDM5NWM4ZWJmODkwZjM1YmQwMTgwY2Q1MWFhZC4uNDVkZDk3YTFjZmYxY2QwMjE1NDBjYjJm
NjBjMjJmZTE2MDc4NThkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaApAQCAtNTMsNiArNTMsOCBAQAogCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KKyNp
bmNsdWRlIDx3dGYvT1NPYmplY3RQdHIuaD4KKyNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9YUENT
UEkuaD4KICNlbmRpZgogCiAjaWYgVVNFKENVUkwpCkBAIC03NSw2ICs3Nyw3IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7CiBjbGFzcyBTZWNLZXlQcm94
eVN0b3JlOwogY2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CitjbGFzcyBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OwogY2xhc3MgU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBXZWJD
ZXJ0aWZpY2F0ZUluZm87CiBjbGFzcyBXZWJQYWdlUHJveHk7CkBAIC04NCw2ICs4Nyw4IEBAIGNs
YXNzIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKIGVudW0gY2xhc3MgQ2FjaGVNb2Rl
bCA6IHVpbnQ4X3Q7CiBlbnVtIGNsYXNzIFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24gOiB1aW50OF90
OwogZW51bSBjbGFzcyBXZWJzaXRlRGF0YVR5cGUgOiB1aW50MzJfdDsKKworc3RydWN0IE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbkluZm87CiBzdHJ1Y3QgV2Vic2l0ZURhdGFSZWNvcmQ7CiBzdHJ1
Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM7CiAKQEAgLTEwOSw3ICsxMTQsMTIgQEAgcHVi
bGljOgogICAgIFdlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uPiYmLCBQQUw6OlNlc3Npb25JRCk7CiAgICAgfldlYnNpdGVEYXRhU3RvcmUoKTsKIAotICAg
IHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JT
ZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOworICAgIHN0YXRpYyB2b2lkIGZvckVhY2hXZWJzaXRl
RGF0YVN0b3JlKEZ1bmN0aW9uPHZvaWQoV2Vic2l0ZURhdGFTdG9yZSYpPiYmKTsKKyAgICAKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0OworICAgIE5ldHdv
cmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKCk7CisKKyAgICBzdGF0aWMgV2Vic2l0ZURh
dGFTdG9yZSogZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOwog
CiAgICAgYm9vbCBpc1BlcnNpc3RlbnQoKSBjb25zdCB7IHJldHVybiAhbV9zZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKTsgfQogICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2Vzc2lvbklEOyB9CkBAIC0xMTksNiArMTI5LDEzIEBAIHB1YmxpYzoKICAgICAKICAg
ICBjb25zdCBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBwcm9jZXNzZXMoKSBjb25zdCB7
IHJldHVybiBtX3Byb2Nlc3NlczsgfQogCisgICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBOZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvJik+JiYpOworICAgIHZvaWQgdGVybWluYXRlTmV0d29y
a1Byb2Nlc3MoKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRG
b3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7CisgICAgdm9pZCBz
ZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jh
c2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CisKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZChib29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUo
KSBjb25zdDsKQEAgLTIzNSwxNSArMjUyLDggQEAgcHVibGljOgogCiAgICAgRGV2aWNlSWRIYXNo
U2FsdFN0b3JhZ2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4gbV9kZXZpY2VJ
ZEhhc2hTYWx0U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQ
b29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlzQXNzb2NpYXRlZFBy
b2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycyBwYXJhbWV0ZXJzKCk7CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBw
ZW5kaW5nQ29va2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShjb25zdCBX
ZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2Vi
Q29yZTo6Q29va2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVzKCk7CiAgICAgdm9p
ZCBmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNs
ZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKIApAQCAtMjUxLDYgKzI2MSwxMCBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYpOwogCisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2Vi
UHJvY2VzcyhPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSk7CisjZW5k
aWYKKwogI2lmIFVTRShDVVJMKQogICAgIHZvaWQgc2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoV2Vi
Q29yZTo6Q3VybFByb3h5U2V0dGluZ3MmJik7CiAgICAgY29uc3QgV2ViQ29yZTo6Q3VybFByb3h5
U2V0dGluZ3MmIG5ldHdvcmtQcm94eVNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9wcm94eVNl
dHRpbmdzOyB9CkBAIC0yNzIsOCArMjg2LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TW9ja1dl
YkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbihXZWJDb3JlOjpNb2NrV2ViQXV0aGVudGljYXRp
b25Db25maWd1cmF0aW9uJiYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQ
cm9jZXNzKCk7Ci0KICAgICBjb25zdCBXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiYgY29u
ZmlndXJhdGlvbigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi5nZXQoKTsgfQogCiAgICAgV2Vi
c2l0ZURhdGFTdG9yZUNsaWVudCYgY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQuZ2V0KCk7IH0K
QEAgLTI4Myw2ICsyOTUsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbmFtZU9yaWdpbkluV2Vi
c2l0ZURhdGEoVVJMJiYsIFVSTCYmLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAgIGJvb2wgbmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CisKICNpZiBFTkFCTEUoREVWSUNFX09S
SUVOVEFUSU9OKQogICAgIFdlYkRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJv
bGxlciYgZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyKCkgeyByZXR1
cm4gbV9kZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXI7IH0KICNlbmRp
ZgpAQCAtMzU5LDcgKzM3Myw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVk
aWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgV2FsbFRpbWUg
bW9kaWZpZWRTaW5jZSk7CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0
cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgY29uc3QgSGFzaFNldDxXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAKLSAgICB2b2lkIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lv
bklETWFwKCk7CisgICAgdm9pZCByZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKIAogI2lmIEVO
QUJMRShBUFBfQk9VTkRfRE9NQUlOUykKICAgICBzdGF0aWMgT3B0aW9uYWw8SGFzaFNldDxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbj4+IGFwcEJvdW5kRG9tYWluc0lmSW5pdGlhbGl6ZWQoKTsK
QEAgLTM5Nyw4ICs0MTEsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wZXJzaXN0ZW50Q3JlZGVu
dGlhbFN0b3JhZ2VFbmFibGVkIHsgdHJ1ZSB9OwogI2VuZGlmCiAKLSAgICBIYXNoU2V0PFdlYkNv
cmU6OkNvb2tpZT4gbV9wZW5kaW5nQ29va2llczsKLSAgICAKICAgICBXZWFrSGFzaFNldDxXZWJQ
cm9jZXNzUHJveHk+IG1fcHJvY2Vzc2VzOwogCiAgICAgYm9vbCBtX2lzSXRwU3RhdGVFeHBsaWNp
dGx5U2V0IHsgZmFsc2UgfTsKQEAgLTQxOSw2ICs0MzEsNyBAQCBwcml2YXRlOgogICAgIFVuaXF1
ZVJlZjxXZWJzaXRlRGF0YVN0b3JlQ2xpZW50PiBtX2NsaWVudDsKIAogICAgIFJlZlB0cjxBUEk6
OkhUVFBDb29raWVTdG9yZT4gbV9jb29raWVTdG9yZTsKKyAgICBSZWZQdHI8TmV0d29ya1Byb2Nl
c3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKIAogI2lmIEhBVkUoQVBQX1NTTykKICAgICBVbmlx
dWVSZWY8U09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I+IG1fc29BdXRob3JpemF0aW9uQ29vcmRp
bmF0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9j
dXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCmluZGV4IDBlMGMwNmUxZGVk
NDJjMTRiODAyZTE1ODlmMzFkYzYyOTgyYWMzOTMuLjY0YjZjNzRkMDg2ZWM0NWJiNjJkYTZlZTA4
MjIzYjI4ZGI3M2E1N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCkBAIC00
Miw4ICs0Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TmV0d29ya1Byb3h5U2V0dGlu
Z3MoV2ViQ29yZTo6Q3VybFByb3h5U2V0dGluZ3MmJiBwcm94CiB7CiAgICAgbV9wcm94eVNldHRp
bmdzID0gV1RGTW92ZShwcm94eVNldHRpbmdzKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtp
bmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGlu
Z3MobV9zZXNzaW9uSUQsIG1fcHJveHlTZXR0aW5ncykpOworICAgIG5ldHdvcmtQcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1f
c2Vzc2lvbklELCBtX3Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291
cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVE
YXRhU3RvcmVTb3VwLmNwcAppbmRleCAxMmY5Y2Q4MTliNmRjY2E4YWM1MDkyYTMwZGQ5M2M1M2I4
ZWU5MzQyLi42Zjk2M2YxNDIxMDA0NzU4ZTJkNjVlZDk2MjZlMmE0OWEzZjRmOTEwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRh
U3RvcmVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9z
b3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcApAQCAtMzksOCArMzksNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMoV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMmCiAgICAgYXV0byYgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBtX3BlcnNpc3RlbnRDcmVk
ZW50aWFsU3RvcmFnZUVuYWJsZWQ7CiAKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVu
dFN0b3JhZ2UobV9zZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJz
aXN0ZW50U3RvcmFnZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0
ZW50U3RvcmFnZVR5cGUpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpLmdl
dENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCkK
QEAgLTUyLDggKzUxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3Jl
ZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gZW5hYmxlZDsKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQobV9zZXNzaW9uSUQsIG1fcGVyc2lz
dGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFn
ZUVuYWJsZWQobV9zZXNzaW9uSUQsIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxl
ZCksIDApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCmluZGV4IDBhODRhNzU5
MGQ5YTk4NWJmYzk5Njg0YTQ4OTUxMzc0ZTViMjk0MjkuLjI3ZjIzZWEwNjVkYzc1Y2U0YTgyNzBj
NTc2ZWEyYWE1NWFiMGRjOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2ds
aWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcApAQCAtNDQsNyArNDQsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQcm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1
bmNoT3B0aW9ucyYgbAogICAgICAgICBpZiAoIWRhdGFTdG9yZSkgewogICAgICAgICAgICAgLy8g
UHJld2FybWVkIHByb2Nlc3NlcyBkb24ndCBoYXZlIGEgV2Vic2l0ZURhdGFTdG9yZSB5ZXQsIHNv
IHVzZSB0aGUgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlIGZyb20gdGhlIFdlYlByb2Nlc3NQb29s
LgogICAgICAgICAgICAgLy8gVGhlIHByb2Nlc3Mgd29uJ3QgYmUgdXNlZCBpZiBjdXJyZW50IFdl
YnNpdGVEYXRhU3RvcmUgaXMgZGlmZmVyZW50IHRoYW4gdGhlIFdlYlByb2Nlc3NQb29sIHByaW1h
cnkgb25lLgotICAgICAgICAgICAgZGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC0+d2Vic2l0ZURh
dGFTdG9yZSgpOworICAgICAgICAgICAgZGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZSgpLnB0cigpOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKGRhdGFT
dG9yZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tp
ZU1hbmFnZXJQcm94eVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJD
b29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAppbmRleCA5ZjdiZTNjOTQxYjZjZDBhMWI5NGNiMTM2
MDk4ZjNhMDQxY2VmZjk5Li5hYzA0ZTM4YTU3YjIxNTliZWI0MmYzODQ3OWI0NGY1ZTI2ZGVkYmIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29v
a2llTWFuYWdlclByb3h5U291cC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKIAorI2luY2x1ZGUgIk5l
dHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMu
aCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogCkBAIC0zMyw4ICszNCw4IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVy
c2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN0
b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKQog
ewotICAgIG1fY29va2llUGVyc2lzdGVudFN0b3JhZ2VNYXAuc2V0KHNlc3Npb25JRCwgc3RkOjpt
YWtlX3BhaXIoc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSk7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBl
KSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSwgMCk7CiB9CiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0
ZW50U3RvcmFnZVR5cGUmIHN0b3JhZ2VUeXBlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCmluZGV4IGJmYmJmOTY2NGU0
ODM1MzA5NzA5NzExZGZkNmMxMzQxNTczMmJkYWMuLjdmZTRhY2EwYzVkMmQwZTdmYzBkOWQ1YTRm
YTI3ZWJjYzgwYTY3NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAv
V2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3Vw
L1dlYlByb2Nlc3NQb29sU291cC5jcHAKQEAgLTM3LDMwICszNywyNCBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1By
b2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0g
ICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmIGRlZmF1bHRTZXNzaW9uUGFyYW1l
dGVycyA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzOwotICAgIHN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5n
ZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lv
bklELCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRo
LCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsK
LSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBkZWZhdWx0U2Vzc2lvblBhcmFt
ZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+cGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpOworICAgIC8vIEZJWE1F
OiBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5IHNob3VsZCBiZSBtb3ZlZCB0byB0aGUg
V2Vic2l0ZURhdGFTdG9yZS4KKyAgICAvLyBGSVhNRTogbV9pZ25vcmVUTFNFcnJvcnMgc2hvdWxk
IGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlIG9yIHJlbW92ZWQuCisgICAgLy8gRklY
TUU6IG1fbmV0d29ya1Byb3h5U2V0dGluZ3Mgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRl
RGF0YVN0b3JlLgogCi0gICAgcGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kgPSBtX2luaXRp
YWxIVFRQQ29va2llQWNjZXB0UG9saWN5OwotICAgIHBhcmFtZXRlcnMuaWdub3JlVExTRXJyb3Jz
ID0gbV9pZ25vcmVUTFNFcnJvcnM7CiAgICAgcGFyYW1ldGVycy5sYW5ndWFnZXMgPSB1c2VyUHJl
ZmVycmVkTGFuZ3VhZ2VzKCk7Ci0gICAgcGFyYW1ldGVycy5wcm94eVNldHRpbmdzID0gbV9uZXR3
b3JrUHJveHlTZXR0aW5nczsKICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNl
ID0gdHJ1ZTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3JzKGJv
b2wgaWdub3JlVExTRXJyb3JzKQogeworICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMgdG8gV2Vic2l0
ZURhdGFTdG9yZS4KICAgICBtX2lnbm9yZVRMU0Vycm9ycyA9IGlnbm9yZVRMU0Vycm9yczsKLSAg
ICBpZiAobmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vy
cm9ycyksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0
aW5ncyhjb25zdCBXZWJDb3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3MmIHNldHRpbmdzKQog
eworICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMgdG8gV2Vic2l0ZURhdGFTdG9yZS4KICAgICBtX25l
dHdvcmtQcm94eVNldHRpbmdzID0gc2V0dGluZ3M7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
Ci0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCA5OGIzNmNjN2FkNzUxYWJhMTMwOTc3NzMyODQ2OWEwNjRiMWMxYWVkLi4yM2U0ZDEzNmIxMWM3
ODM1ZTE0ZWMxZWI0NWQ1MWI3NWU3NjA5OTdjIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMjAtMDktMjEgIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBNb3ZlIE5l
dHdvcmtQcm9jZXNzUHJveHkgb3duZXJzaGlwIGZyb20gV2ViUHJvY2Vzc1Bvb2wgdG8gV2Vic2l0
ZURhdGFTdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE2MDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTW9zdCBjaGFuZ2VzIHRvIHRlc3RzIGFyZSBqdXN0IGNhbGxpbmcgYSBmdW5jdGlvbiBvbiB0
aGUgV0tXZWJzaXRlRGF0YVN0b3JlIGluc3RlYWQgb2YgdGhlIFdLUHJvY2Vzc1Bvb2wKKyAgICAg
ICAgYmVjYXVzZSB3ZSB3YW50IHRvIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBuZXR3b3JrIHByb2Nl
c3MgYW5kIGl0IGhhcyBhIG5ldyBvd25lci4KKyAgICAgICAgRXhjZXB0aW9ucyBhcmUgbm90ZWQg
aW5saW5lLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1By
b2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93
bmxvYWQubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpkb3dubG9hZEF0UmF0ZSk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1t
OgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbToKKyAg
ICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW06CisgICAgICAgIChURVNUKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJv
Y2Vzc0tpbGwubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbToKKyAgICAgICAgKFRFU1Qp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVy
c2lzdGVuY2UubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tOgorICAgICAgICAo
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJUZW1wRmlsZVNpemUubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tOgorICAgICAg
ICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3
b3JrUHJvY2Vzcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3Rv
cmUubW06CisgICAgICAgIChjaGVja1JlY292ZXJ5QWZ0ZXJDcmFzaCk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgVGhpcyB0ZXN0IHdhcyBtYWtp
bmcgYSBXS1dlYnNpdGVEYXRhU3RvcmUsIGdldHRpbmcgaXRzIHJlc291cmNlIGxvYWQgc3RhdGlz
dGljcyBkaXJlY3RvcnksCisgICAgICAgIHB1dHRpbmcgdGhpbmdzIGluIHRoYXQgZGlyZWN0b3J5
LCB0aGVuIHN0YXJ0aW5nIHRoZSBuZXR3b3JrIHByb2Nlc3MgYW5kIG1ha2luZyBzdXJlIGV2ZXJ5
dGhpbmcKKyAgICAgICAgd29ya3Mgd2hlbiBpbml0aWFsaXppbmcgdGhlIG5ldHdvcmsgcHJvY2Vz
cy4gIE5vdywgbmV0d29yayBwcm9jZXNzIGluaXRpYWxpemF0aW9uIGhhcHBlbnMgd2hlbiBhCisg
ICAgICAgIFdLV2Vic2l0ZURhdGFTdG9yZSBpcyBpbnN0YW50aWF0ZWQsIHNvIHdlIG5lZWQgdG8g
cHV0IHRoaW5ncyB0aGVyZSBiZWZvcmUgaW5zdGFudGlhdGluZyBhIFdLV2Vic2l0ZURhdGFTdG9y
ZS4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3Jr
ZXJCYXNpYy5tbToKKyAgICAgICAgQmVmb3JlIHRoaXMgY2hhbmdlLCBlYWNoIFdLUHJvY2Vzc1Bv
b2wgaGFkIGl0cyBvd24gbmV0d29yayBwcm9jZXNzLCB3aGljaCBob2xkcyB0aGUgc2VydmljZSB3
b3JrZXIgcmVnaXN0cnkKKyAgICAgICAgZm9yIHRoZSBXZWJzaXRlRGF0YVN0b3JlcyB1c2VkIHdp
dGggdGhhdCBwcm9jZXNzIHBvb2wuICBOb3csIHRoZSBuZXR3b3JrIHByb2Nlc3Mgc3RpbGwgbmVl
ZHMgdG8gaGF2ZSBhIHNlcnZpY2UKKyAgICAgICAgd29ya2VyIHJlZ2lzdHJ5IGluIGl0LCBidXQg
d2hlbiB3ZSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGl0IGxvb2tpbmcgZm9yIGEgd2ViIHByb2Nl
c3MgdG8gcnVuIHRoZSBzZXJ2aWNlCisgICAgICAgIHdvcmtlciwgd2UgZ28gYXJiaXRyYXJpbHkg
dG8gdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCB0aGF0IGhhcyBhIHByb2Nlc3Mgd2UgY2FuIHVzZS4g
IFRoaXMgbG9naWMgaXMgaW4gCisgICAgICAgIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3Jr
ZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MuICBCZWNhdXNlIHdlIHVzZSB0aGUg
Zmlyc3QgcHJvY2VzcyBwb29sIGVhY2gKKyAgICAgICAgdGltZSwgc2V0dGluZyB0aGUgY3VzdG9t
IHVzZXIgYWdlbnQgdG8gdHdvIGRpZmZlcmVudCB0aGluZ3MgaW4gdHdvIGRpZmZlcmVudCBwcm9j
ZXNzIHBvb2xzIGNhdXNlcyBvbmx5IG9uZQorICAgICAgICB0byBiZSB1c2VkLiAgVGhpcyBpcyBu
b3QgYSBwcm9ibGVtIGluIHByYWN0aWNlLCB0aG91Z2gsIGJlY2F1c2UgdGhlIG9ubHkgYXBwbGlj
YXRpb24gdGhhdCB1c2VzIHRoZSBTUEkgdG8KKyAgICAgICAgc2V0IGEgc2VydmljZSB3b3JrZXIn
cyBjdXN0b20gdXNlciBhZ2VudCBpcyBTYWZhcmksIHdoaWNoIG9ubHkgaGFzIG9uZSBwcm9jZXNz
IHBvb2wuICBUaGlzIHRlc3Qgc3RpbGwgdmVyaWZpZXMKKyAgICAgICAgdGhhdCBhIHVzZXIgYWdl
aW50IGlzIGNvcnJlY3RseSBzZW50LgorICAgICAgICBTaW1pbGFybHksIHRoZSB0ZXN0cyB0aGF0
IGNvdW50IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3NlcyBlaXRoZXIgaGF2ZSBkaWZmZXJlbnQgcmVz
dWx0cyBvciBuZWVkIHRvIGJlIHJ1biB3aXRoCisgICAgICAgIG9uZSBwcm9jZXNzIHBvb2wgcGVy
IHBhcmVudCBwcm9jZXNzLiAgVG8ga2VlcCB0aGUgcmVzdWx0cyB0aGUgc2FtZSwgSSBzZXBhcmF0
ZWQgdGhlIHRlc3RzIGludG8gZGlmZmVyZW50CisgICAgICAgIFRFU1QoU2VydmljZVdvcmtlcnMs
IC4uLikgbWFjcm9zIHdoaWNoIGFyZSBydW4gaW4gc2VwYXJhdGUgcGFyZW50IHByb2Nlc3Nlcy4K
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0
b3JlLm1tOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdlYlZpZXc6
cnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBs
ZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRl
IHdhaXRGb3JNZXNzYWdlXSk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdh
dGUgYWxlcnRDb29raWVIVE1MXSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgVGhpcyBpcyB0
aGUgd2hvbGUgcG9pbnQgb2YgbWUgZG9pbmcgdGhpcy4KKyAgICAgICAgSSB0b29rIGEgdGVzdCB0
aGF0IHdhcyBmbGFreSBvbmx5IG9uIGlPUyAoYmVjYXVzZSBvZiBkaWZmZXJlbnQgTlNIVFRQQ29v
a2llU3RvcmFnZSBzeW5jaW5nIGJlaGF2aW9yKSBhbmQgbWFkZQorICAgICAgICBpdCBmbGFreSBu
b3doZXJlIChmaW5nZXJzIGNyb3NzZWQhKSBhbmQgYWRkZWQgYSB0ZXN0IHRoYXQgY29ycmVjdGx5
IGhhbmRsZXMgc2Vzc2lvbiBjb29raWVzIGxpa2Ugd2UgY291bGQgbm90CisgICAgICAgIGJlZm9y
ZSB0aGlzIGNoYW5nZS4KKyAgICAgICAgSSBhbHNvIHJlLXVzZWQgc29tZSB0ZXN0IGluZnJhc3Ry
dWN0dXJlIGFuZCBtYWRlIGl0IHN0b3AgdXNpbmcgcHJvY2Vzcy1nbG9iYWwgc3RhdGljIHZhcmlh
YmxlcyBmb3IgdGVzdCBzdGF0ZS4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1
c3RvbVBhdGhzLm1tOgorICAgICAgICAocnVuV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzKToK
KyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lz
dGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp0ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVz
dENvbnRleHQpOgorICAgICAgICBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZv
clNlcnZpY2VXb3JrZXJUZXN0aW5nIGlzIG5vdCBuZWVkZWQsIHNvIEkgcmVtb3ZlZCBpdC4KKyAg
ICAgICAgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUgaXNuJ3QgbmVlZGVkIGFu
eSBtb3JlIGJlY2F1c2UgV0tDb250ZXh0UmVmIChXZWJQcm9jZXNzUG9vbCkgZG9lc24ndAorICAg
ICAgICBvd24gYSBuZXR3b3JrIHByb2Nlc3MgYW55IG1vcmUsIHNvIGl0IGRvZXNuJ3QgY2FyZSB3
aGljaCBpcyB0aGUgZGVmYXVsdCBXZWJzaXRlRGF0YVN0b3JlLgorICAgICAgICBJbiBmYWN0LCB0
aGUgImRlZmF1bHQiIFdlYnNpdGVEYXRhU3RvcmUgaXNuJ3QgcmVhbGx5IGltcG9ydGFudCBpbiB0
aGUgbmV0d29yayBwcm9jZXNzIGFueSBtb3JlLgorCiAyMDIwLTA5LTIxICBLYXRlIENoZW5leSAg
PGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGFib3V0OmJsYW5r
IHN1YmZyYW1lIGxvYWRzIGZvciBub24gYXBwLWJvdW5kIHRvcCBmcmFtZXMKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRo
UGVuZGluZ0Nvbm5lY3Rpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCmluZGV4IDk3Mzg5ZjAx
ZmYyZWU5OWI3ODNiMGI1MjEwODA3NGYxYTgxYjY5ODEuLjUzNzk4NGRlN2UzZTU2NjkwZTU2YmI0
YmQ2MzllMmZlZWRjNTkxYzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQ
ZW5kaW5nQ29ubmVjdGlvbi5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dL
UHJvY2Vzc0dyb3VwUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQu
aD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtODcsNyArODgsNyBAQCBURVNUKFdl
YktpdCwgTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbikKICAgICBwaWRf
dCB3ZWJWaWV3MlBJRCA9IFt3ZWJWaWV3Mi5nZXQoKSBfd2ViUHJvY2Vzc0lkZW50aWZpZXJdOwog
ICAgIEVYUEVDVF9ORSh3ZWJWaWV3MVBJRCwgd2ViVmlldzJQSUQpOwogCi0gICAgcGlkX3QgaW5p
dGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlmZXIgPSBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX25ldHdv
cmtQcm9jZXNzSWRlbnRpZmllcl07CisgICAgcGlkX3QgaW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRl
bnRpZmlmZXIgPSBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9uZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXJdOwogICAgIEVYUEVDVF9ORShpbml0aWFsTmV0d29ya1Byb2Nlc3NJ
ZGVudGlmaWZlciwgMCk7CiAgICAga2lsbChpbml0aWFsTmV0d29ya1Byb2Nlc3NJZGVudGlmaWZl
ciwgU0lHS0lMTCk7CiAgICAgVXRpbDo6cnVuKCZuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOwpAQCAt
OTYsNyArOTcsNyBAQCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5n
Q29ubmVjdGlvbikKICAgICBbd2ViVmlldzEuZ2V0KCkgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVz
dCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAi
c2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQ
SS5yZXNvdXJjZXMiXV1dOwogICAgIFt3ZWJWaWV3MS5nZXQoKSBfdGVzdF93YWl0Rm9yRGlkRmlu
aXNoTmF2aWdhdGlvbl07CiAKLSAgICBwaWRfdCByZWxhdW5jaGVkTmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyID0gW3Byb2Nlc3NQb29sLmdldCgpIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdOwor
ICAgIHBpZF90IHJlbGF1bmNoZWROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIgPSBbY29uZmlndXJh
dGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdOwog
ICAgIEVYUEVDVF9ORShpbml0aWFsTmV0d29ya1Byb2Nlc3NJZGVudGlmaWZlciwgcmVsYXVuY2hl
ZE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik7CiAgICAgRVhQRUNUX0ZBTFNFKG5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZCk7CiAKQEAgLTE0Niw4ICsxNDcsOCBAQCBURVNUKFdlYktpdCwgTmV0d29ya1By
b2Nlc3NSZWxhdW5jaE9uTGF1bmNoRmFpbHVyZSkKIAogICAgIC8vIENvbnN0dWN0aW5nIGEgV2Vi
VmlldyBzdGFydHMgYSBuZXR3b3JrIHByb2Nlc3Mgc28gdGVybWluYXRlIHRoaXMgb25lLiBUaGUg
cGFnZSBsb2FkIGJlbG93IHdpbGwgdGhlbiByZXF1ZXN0IGEgbmV0d29yayBwcm9jZXNzIGFuZCB3
ZQogICAgIC8vIG1ha2UgdGhpcyBuZXcgbmV0d29yayBwcm9jZXNzIGxhdW5jaCBjcmFzaCBvbiBz
dGFydHVwLgotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAg
IFtwcm9jZXNzUG9vbCBfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW01vbml0b3JX
ZWJDb250ZW50Q3Jhc2hOYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKICAgICBbd2Vi
VmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwpAQCAtMTU4LDcgKzE1
OSw3IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc1JlbGF1bmNoT25MYXVuY2hGYWlsdXJl
KQogICAgIEVYUEVDVF9UUlVFKG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk7CiAgICAgRVhQRUNUX0ZB
TFNFKHdlYlByb2Nlc3NDcmFzaGVkKTsKICAgICBFWFBFQ1RfR1QoW3dlYlZpZXcgX3dlYlByb2Nl
c3NJZGVudGlmaWVyXSwgMCk7Ci0gICAgRVhQRUNUX0dUKFtwcm9jZXNzUG9vbC5nZXQoKSBfbmV0
d29ya1Byb2Nlc3NJZGVudGlmaWVyXSwgMCk7CisgICAgRVhQRUNUX0dUKFtjb25maWd1cmF0aW9u
LmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0sIDApOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQppbmRleCBiN2VkOTk5MzlmZDU5ZjIy
OGE3ZThiZDc0OTcxMmY1MzY2MDE1NjE2Li4xODE5MTMxYzlhMGZlYjMwYjFhMmYwY2ZjZDg3YmYy
MDQ1ZWJiM2Y0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0Rvd25sb2FkLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvRG93bmxvYWQubW0KQEAgLTg4OSw5ICs4ODksOSBAQCB2b2lkIGRvd25sb2FkQXRSYXRlKGRv
dWJsZSBkZXNpcmVkS2JwcywgdW5zaWduZWQgc3BlZWRNdWx0aXBsaWVyLCBBcHBSZXR1cm5zVG9G
bwogICAgIHJlY2VpdmVkRGF0YSA9IGZhbHNlOwogICAgIFV0aWw6OnJ1bigmcmVjZWl2ZWREYXRh
KTsKICAgICAvLyBTdGFydCB0aGUgRG93bmxvYWRNb25pdG9yJ3MgdGltZXIuCi0gICAgW1t3ZWJW
aWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5k
OllFU107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3N5
bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKICAgICBpZiAocmV0dXJuVG9Gb3JlZ3JvdW5k
ID09IEFwcFJldHVybnNUb0ZvcmVncm91bmQ6OlllcykKLSAgICAgICAgW1t3ZWJWaWV3IGNvbmZp
Z3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOk5PXTsKKyAg
ICAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNp
emVBcHBJc0JhY2tncm91bmQ6Tk9dOwogICAgIGRpZENhbmNlbCA9IGZhbHNlOwogICAgIFV0aWw6
OnJ1bigmZGlkQ2FuY2VsKTsKICAgICB0ZXJtaW5hdGVTZXJ2ZXIgPSB0cnVlOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FM
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50
V0FMLm1tCmluZGV4IDVjZDdhYmRhMDFkMTk3NDdkY2VkNDVhYmVlOTllY2IxYzE0ZDYxNjAuLmQ3
N2E2ZmQ5ODc5ZTQzZjcwMTFkZGFmOTJjM2E3OTdmM2ZjMTM3MzQgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbQorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwu
bW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0
IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dl
YktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgog
I2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC04Niw3ICs4Nyw3IEBAIFRF
U1QoSW5kZXhlZERCLCBDaGVja3BvaW50c1dBTEF1dG9tYXRpY2FsbHkpCiAgICAgUmV0YWluUHRy
PFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2Vy
Q29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkg
bmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFJldGFp
blB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQppbmRleCBjOGFmMWQyNDNjNGZl
YjU4YWM5ODRkYWYxNGQ4MTUzMWE3Y2MzYzczLi5iYmYxYTE1MjE1ZGMxZmQyOGRmZGRiOWUzNDFi
NjRmOWMwMDhmNGM0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNp
bXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
VXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0
b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0
L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJT
dHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBEZWxldGVSZWNv
dmVyeSkKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAg
W1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhh
bmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5jb25zaXN0ZW50IGRhdGFiYXNlIGZpbGVzIHRv
IHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFp
bkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJEZWxldGVSZWNvdmVyeSIgd2l0aEV4dGVuc2lv
bjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4
VXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lE
QkluZGV4VXBncmFkZVRvVjIubW0KaW5kZXggOTVjY2EwY2UyODE2ZmYxYTZhNDU1YWQwYmQyYzhh
NGFhNGYyN2ZlZC4uODhhNTNmNjFkOWQ5ODI2NTdiOTY1ZWY4YTZjZWJhNzkxZWZmMTc1NSAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVw
Z3JhZGVUb1YyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SURCSW5kZXhVcGdyYWRlVG9WMi5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0
L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENv
bnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlv
blByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bv
b2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4K
QEAgLTU4LDcgKzU5LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4VXBncmFkZVRvVjIpCiAgICAg
UmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJh
dGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRs
ZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAog
ICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0aGUgZGF0YWJh
c2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVS
TEZvclJlc291cmNlOkAiSW5kZXhVcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3Vi
ZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFk
ZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVj
dFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCmluZGV4IGZmYTVhNzg3OGE0NzMyYjhlYzI0NWM5MDUz
ZmQxN2VlNTk1NmZhM2QuLjQwM2UwZmZhODIxMjM0NTFjNDY2ZmVlY2MzMjRmOWM2ZTc2MWQ0M2Qg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2Jq
ZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQpAQCAtMzEsNiAr
MzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1w
b3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJL
aXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJbmRleGVkREIs
IElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyKQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdD
b25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250
cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0
SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0
YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IGRhdGFiYXNl
IGZpbGVzIHdpdGggb2xkIE9iamVjdFN0b3JlSW5mbyBzY2hlbWEgdG8gdGhlIGRhdGFiYXNlIGRp
cmVjdG9yeS4KICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9y
UmVzb3VyY2U6QCJJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3Fs
aXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJh
c2VQcm9jZXNzS2lsbC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQppbmRleCA2ODc0NTI5ZWJiZjM3ODUxOGQ5
M2UwYTA4MjFmNjMwMTJjZmE2ZDVmLi43MzA3N2VjZGZkMzY1YjUyOTA1M2Q0N2NiYTJhMTRlZDA1
MWVkNmVhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tCkBAIC0z
MSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0
L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4K
ICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTkyLDcgKzkzLDcgQEAgVEVTVChJbmRleGVkREIsIERhdGFi
YXNlUHJvY2Vzc0tpbGwpCiAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2
ZWRTY3JpcHRNZXNzYWdlKTsKICAgICAgICAgaWYgKCFraWxsZWREQlByb2Nlc3MgJiYgb3BlblJl
cXVlc3RVcGdyYWRlTmVlZGVkKSB7CiAgICAgICAgICAgICBraWxsZWREQlByb2Nlc3MgPSB0cnVl
OwotICAgICAgICAgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNp
dGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICAgICAgfQogICAgIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eGVkREJNdWx0aVByb2Nlc3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbQppbmRleCA3ZjYyNjQ1ZDk5NjBlZGU5NjBjMDAx
YzI3MmI2NTAzOTM5MDExNjMyLi42ZjY3ZGMyN2VkYzNkMjc0NWIxNzBlNDgyYmNkOTBlODQ5NGNi
OTVhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4ZWREQk11bHRpUHJvY2Vzcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2lt
cG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4K
ICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgogI2ltcG9ydCA8d3RmL0RlcXVl
Lmg+CkBAIC02OSw3ICs3MCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJNdWx0aVByb2Nl
c3MpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtb
Y29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5k
bGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5j
ZS5tbQppbmRleCBiMzJjZTRhNWY3Mzg2M2FlZGRjYjkxOTBiNWI0MzcwZTM3NDQzYjVlLi5kNjIy
MDMyMmU0NzhkMWRhYzc4ZjA2OTY3YzNiNjQzYmZkNjJmOWJmIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lz
dGVuY2UubW0KQEAgLTc4LDcgKzc4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlBlcnNp
c3RlbmNlKQogICAgIHdlYlZpZXcgPSBuaWw7CiAKICAgICAvLyBUZXJtaW5hdGUgdGhlIG5ldHdv
cmsgcHJvY2VzcwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFT
dG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gTWFrZSBhIG5ldyB3ZWIg
dmlldyB0byBmaW5pc2ggdGhlIHRlc3QKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1
cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTI2OCw3ICsyNjgsNyBAQCBURVNUKElu
ZGV4ZWREQiwgSW5kZXhlZERCVGhpcmRQYXJ0eUZyYW1lSGFzQWNjZXNzKQogCiAgICAgd2ViVmll
dyA9IG5pbDsKICAgICBzZWNvbmRXZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwog
CiAgICAgLy8gVGhpcmQtcGFydHkgSURCIHN0b3JhZ2UgaXMgc3RvcmVkIGluIHRoZSBtZW1vcnkg
b2YgbmV0d29yayBwcm9jZXNzLgogICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBj
b25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTM4NSw3ICszODUsNyBAQCBU
RVNUKEluZGV4ZWREQiwgSW5kZXhlZERCVGhpcmRQYXJ0eVdvcmtlckhhc0FjY2VzcykKIAogICAg
IHdlYlZpZXcgPSBuaWw7CiAgICAgc2Vjb25kV2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKIAogICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9u
OmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBsb2FkVGVzdFBhZ2VJbldlYlZpZXcodGhpcmRX
ZWJWaWV3LmdldCgpLCBAImRhdGFiYXNlIGlzIGNyZWF0ZWQiKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50
bHkubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1
c3BlbmRJbW1pbmVudGx5Lm1tCmluZGV4IDhlYzY1ZjBhM2JhOTM3MzZmZGI0ZjlkZGZlZjc1Y2U2
MDAwNWZkMGQuLjUxMGIyNGY1NjlkMjJiZDQwYTdhZGJlMjVlY2ZkMGVjZmM4YWM3MjYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3Vz
cGVuZEltbWluZW50bHkubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2lt
cG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tV
c2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3
Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3Rv
cmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQv
X1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CkBAIC04OCw4ICs4OSw4IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJTdXNwZW5kSW1taW5l
bnRseSkKIAogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkNvbnRpbnVlIik7CiAKLSAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1
c3BlbmRJbW1pbmVudGx5XTsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHld
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3Jr
UHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJFeHBlY3Rl
ZCBBYm9ydCBGb3IgU3VzcGVuc2lvbiIpOwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkV4
cGVjdGVkIFN1Y2Nlc3MgQWZ0ZXIgUmVzdW1lIik7CkBAIC0xNTgsOCArMTU5LDggQEAgVEVTVChJ
bmRleGVkREIsIFN1c3BlbmRJbW1pbmVudGx5Rm9yVGhpcmRQYXJ0eURhdGFiYXNlcykKICAgICBb
d2ViVmlldyBsb2FkSFRNTFN0cmluZzptYWluRnJhbWVTdHJpbmcgYmFzZVVSTDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpAImh0dHA6Ly93ZWJraXQub3JnIl1dOwogICAgIHJ1blRlc3RBbmRDaGVja1Jl
c3VsdChAImRhdGFiYXNlIGlzIGNyZWF0ZWQiKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwot
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWVdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Nl
bmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3VyYXRp
b24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsK
IAogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAInRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZCIp
OwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bmRleGVkREJUZW1wRmlsZVNpemUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQppbmRleCA1MzY1NDFlM2IwZTVjZGEzYTNi
NTUxYzFlODFlOTYzZjU5MmFlYjJmLi5lN2I5OTIyOGNlODc2ZTQ0N2U2NDc4MmVmOWQ4N2YyNWFk
YzliOWZhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQpAQCAtOTUsNyArOTUsNyBAQCBU
RVNUKEluZGV4ZWREQiwgSW5kZXhlZERCVGVtcEZpbGVTaXplKQogCiAgICAgLy8gVGVybWluYXRl
IG5ldHdvcmsgcHJvY2VzcyB0byBrZWVwIFdBTCBvbiBkaXNrLgogICAgIHdlYlZpZXcgPSBuaWw7
Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIg
ZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aF0p
OwogICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGZpbGVBdHRyaWJ1dGVzID0gW1tOU0ZpbGVN
YW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBhdHRyaWJ1dGVzT2ZJdGVtQXRQYXRoOndhbEZpbGVQYXRo
LmdldCgpLnBhdGggZXJyb3I6bmlsXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCmlu
ZGV4IDQxMzNlZTdiM2RhZTQzZWMyMDQ5Y2ZmYzA2M2MwZTQyOWMxN2M1ZWYuLjVmNzkxOTA5NDNj
NzcxZTlkOWU0NDJhMGRhMjY2ZmY5YTAzYmEyZjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0
ZW5jZS5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRD
b250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRp
b25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRl
Lmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmln
dXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC0xMDks
NyArMTEwLDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NDcmFzaGVzKQog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAg
ICBFWFBFQ1RfV0tfU1RSRVEoQCJzZXNzaW9uOnN0b3JhZ2UiLCBbbGFzdFNjcmlwdE1lc3NhZ2Ug
Ym9keV0pOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0
b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICByZWNlaXZlZFNjcmlwdE1lc3Nh
Z2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0
TWVzc2FnZSk7CkBAIC0xNjIsNyArMTYzLDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFn
ZVByb2Nlc3NTdXNwZW5kcykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVk
U2NyaXB0TWVzc2FnZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAidmFsdWUiLCBbbGFzdFNjcmlw
dE1lc3NhZ2UgYm9keV0pOwogCi0gICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29ya1By
b2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndl
YnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07
CiAKICAgICByZWFkeVRvQ29udGludWUgPSBmYWxzZTsKICAgICBbd2ViVmlldzEgZXZhbHVhdGVK
YXZhU2NyaXB0OkAid2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdrZXknLCAnbmV3VmFsdWUn
KSIgY29tcGxldGlvbkhhbmRsZXI6XihpZCwgTlNFcnJvciAqKSB7CkBAIC0xNzcsNyArMTc4LDcg
QEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5kcykKICAgICB9XTsK
ICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlYWR5VG9Db250aW51ZSk7CiAgICAgCi0g
ICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vz
c0RpZFJlc3VtZV07CiAKICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNz
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vz
cy5tbQppbmRleCBlNjBmODgwMjVkMDkzNzg5ZjY5NTYwZDliOTJiMjgyZjA3MTMwYThkLi4wZTIx
ZjkwOTUwMDE0ZjZjNDkwYjBlYjhlNDYxZWM0YmE4NTBiYjgxIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KQEAg
LTI4LDcgKzI4LDcgQEAKICNpbXBvcnQgIkhUVFBTZXJ2ZXIuaCIKICNpbXBvcnQgIlRlc3RXS1dl
YlZpZXcuaCIKICNpbXBvcnQgIlV0aWxpdGllcy5oIgotI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vz
c1Bvb2xQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0
ZS5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0zNywxNCArMzcsMTQgQEAgVEVTVChXZWJLaXQs
IE5ldHdvcmtQcm9jZXNzRW50aXRsZW1lbnRzKQogewogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIGNvbmZpZ3VyYXRpb246W1tbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10g
aW5pdF0gYXV0b3JlbGVhc2VdXSk7CiAgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0
UGFnZU5hbWVkOkAic2ltcGxlIl07Ci0gICAgV0tQcm9jZXNzUG9vbCAqcG9vbCA9IFt3ZWJWaWV3
IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sOwotICAgIGJvb2wgaGFzRW50aXRsZW1lbnQgPSBb
cG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUu
cm9vdGxlc3Muc3RvcmFnZS5XZWJLaXROZXR3b3JraW5nU2FuZGJveCJdOworICAgIFdLV2Vic2l0
ZURhdGFTdG9yZSAqc3RvcmUgPSBbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0
b3JlOworICAgIGJvb2wgaGFzRW50aXRsZW1lbnQgPSBbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0
TmV0d29ya2luZ1NhbmRib3giXTsKICNpZiBQTEFURk9STShNQUMpICYmIFVTRShBUFBMRV9JTlRF
Uk5BTF9TREspCiAgICAgRVhQRUNUX1RSVUUoaGFzRW50aXRsZW1lbnQpOwogI2Vsc2UKICAgICBF
WFBFQ1RfRkFMU0UoaGFzRW50aXRsZW1lbnQpOwogI2VuZGlmCi0gICAgRVhQRUNUX0ZBTFNFKFtw
b29sIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVy
ZSBjYXNlIl0pOworICAgIEVYUEVDVF9GQUxTRShbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nOkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7CiB9CiAKIFRFU1QoV2Vi
S2l0LCBIVFRQUmVmZXJlcikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jh
c2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCmluZGV4IDYwOThlOGRhZDI1MmU1OWVjNDkxMjUw
YjQyMTZkM2NkMDkzNmU4ZjcuLjJmOGEyZTMzZmU4NzAzYmFiMmQ4ZTA1MTA4MzJiZWNkOWQ0ODkz
NGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0
d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lz
dGVudERhdGFTdG9yZS5tbQpAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1JlY292
ZXJ5QWZ0ZXJDcmFzaChXS1dlYnNpdGVEYXRhU3RvcmUgKmRhdGFTdG9yZSkKICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtbd2Vi
VmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OworICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVz
dCByZXF1ZXN0V2l0aFVSTDpzaW1wbGUyXV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCmluZGV4IDk1ZGM5ZDk4
ZGYxM2IwNzA1ZTA4MTdkMDU4NzI2NTEyMGMxODhkMjMuLmRmMzIwZDY0ZGFkYmRkMWVlMjgzZjg2
NWMxNDQyM2YzYWM1NTY0YmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQpAQCAt
NTM4NSw3ICs1Mzg1LDcgQEAgVEVTVChQcm9jZXNzU3dhcCwgVXNlUHJld2FybWVkUHJvY2Vzc0Fm
dGVyVGVybWluYXRpbmdOZXR3b3JrUHJvY2VzcykKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CisgICAgW3dlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9wdE5T
KFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2
MDApIGNvbmZpZ3VyYXRpb246d2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBbd2Vi
VmlldzIgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlz
dGljcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VM
b2FkU3RhdGlzdGljcy5tbQppbmRleCAwZTEwYzM0ZWVjODJjNmY2NTkyYmI3YzQyNzRkMGU0NTVl
YWYxMWU4Li5hM2FiYTIzMWE5M2IzZDVmMDBhMTkzYzQ3YzI3Njc4NjRiMzUwNTViIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCkBAIC03MTksNyArNzE5LDcgQEAgVEVTVChSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLCBOZXR3b3JrUHJvY2Vzc1Jlc3RhcnQpCiAKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnBy
b2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAg
YXV0byB3ZWJWaWV3MiA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdl
dCgpXSk7CiAKQEAgLTc1Miw3ICs3NTIsNyBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3Ms
IE5ldHdvcmtQcm9jZXNzUmVzdGFydCkKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5S
dW5Mb29wKDEpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0
YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXczID0g
YWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAs
IDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAtMTU1
OCwxMCArMTU1OCw4IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTWlncmF0ZURhdGFG
cm9tTWlzc2luZ1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RTYW1lU2l0CiAKIFRFU1QoUmVzb3VyY2VM
b2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKIHsK
KyAgICBOU1VSTCAqaXRwUm9vdFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TVGVtcG9y
YXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQ2FuQWNjZXNz
RGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbFRlc3QiXSBpc0RpcmVjdG9yeTpZRVNdOwogICAg
IGF1dG8gZGVmYXVsdEZpbGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
OwotICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1
cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxl
YXNlXTsKLSAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2Nd
IF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVh
c2VdOwotICAgIE5TVVJMICppdHBSb290VVJMID0gW1tkYXRhU3RvcmUgX2NvbmZpZ3VyYXRpb25d
IF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5XTsKICAgICBOU1VSTCAqZmlsZVVSTCA9
IFtpdHBSb290VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIm9ic2VydmF0aW9ucy5k
YiJdOwogICAgIFtkZWZhdWx0RmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0UGF0aDppdHBSb290VVJM
LnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfRkFMU0UoW2RlZmF1bHRGaWxlTWFuYWdlciBm
aWxlRXhpc3RzQXRQYXRoOml0cFJvb3RVUkwucGF0aF0pOwpAQCAtMTU3Miw2ICsxNTcwLDEwIEBA
IFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Q
cm9jZXNzUG9vbCkKICAgICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlz
dHNBdFBhdGg6bmV3RmlsZVVSTC5wYXRoXSk7CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciBjb3B5
SXRlbUF0UGF0aDpuZXdGaWxlVVJMLnBhdGggdG9QYXRoOmZpbGVVUkwucGF0aCBlcnJvcjpuaWxd
OwogICAgIEVYUEVDVF9UUlVFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpm
aWxlVVJMLnBhdGhdKTsKKworICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpk
YXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlv
biBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLl9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gaXRwUm9vdFVSTDsKKyAgICBhdXRvICpkYXRhU3Rv
cmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246
ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwogICAgIFtkYXRhU3RvcmUgX3Nl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOllFU107CiAKICAgICBzdGF0aWMgYm9vbCBk
b25lRmxhZyA9IGZhbHNlOwpAQCAtMTYzMywxMiArMTYzNSwxMiBAQCBURVNUKFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MsIFN0b3JlU3VzcGVuc2lvbikKICAgICBbd2ViVmlldzIgX3Rlc3Rfd2FpdEZv
ckRpZEZpbmlzaE5hdmlnYXRpb25dOwogCiAgICAgZG9uZUZsYWcgPSBmYWxzZTsKLSAgICBbc2hh
cmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6XnsKKyAg
ICBbZGF0YVN0b3JlMSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeewogICAg
ICAgICBkb25lRmxhZyA9IHRydWU7CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZkb25lRmxhZyk7CiAKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJv
Y2Vzc0RpZFJlc3VtZV07CisgICAgW2RhdGFTdG9yZTEgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJl
c3VtZV07CiB9CiAKIEBpbnRlcmZhY2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1NjaGVtZUhhbmRs
ZXIgOiBOU09iamVjdCA8V0tVUkxTY2hlbWVIYW5kbGVyPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0gYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpp
bmRleCAzNGE0ZjVjNTM4YjliMGU5ZmNiMDUwNzJiMTcwMjg4ZTllNGU5ZjhmLi4yZjhlMzRkYmE2
ZGE0NzIzNTY1NWZmMGRiMmFkY2ExYmY4YzU2NzIwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpA
QCAtNTU4LDcgKzU1OCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFVzZXJBZ2VudE92ZXJyaWRl
KQogCiAgICAgY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9u
IGFsbG9jXSBpbml0XSk7CiAKLSAgICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJB
Z2VudE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3Nh
Z2UgZnJvbSB3b3JrZXI6IEJhciBDdXN0b20gVXNlckFnZW50Il0pOworICAgIG1lc3NhZ2VIYW5k
bGVyID0gYWRvcHROUyhbW1NXVXNlckFnZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRo
RXhwZWN0ZWRNZXNzYWdlOkAiTWVzc2FnZSBmcm9tIHdvcmtlcjogRm9vIEN1c3RvbSBVc2VyQWdl
bnQiXSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2Ny
aXB0TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07CiAKICAg
ICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01h
a2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCld
KTsKQEAgLTYzMyw4ICs2MzMsNiBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBDYWNoZVN0b3JhZ2VS
ZXN0b3JlRnJvbURpc2spCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAg
ICBkb25lID0gZmFsc2U7CiAKLSAgICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9kZWxldGVEZWZhdWx0
RGF0YVN0b3JlRm9yVGVzdGluZ107Ci0KICAgICBTZXJ2aWNlV29ya2VyVENQU2VydmVyIHNlcnZl
cih7CiAgICAgICAgIHsgInRleHQvaHRtbCIsIG1haW5DYWNoZVN0b3JhZ2VCeXRlcyB9CiAgICAg
fSwgewpAQCAtOTgyLDYgKzk4MCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3Jr
ZXJQcm9jZXNzQ3JlYXRpb24pCiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlv
bj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9j
XSBpbml0XSk7CiAgICAgc2V0Q29uZmlndXJhdGlvbkluamVjdGVkQnVuZGxlUGF0aChjb25maWd1
cmF0aW9uLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gb3JpZ2luYWxQcm9j
ZXNzUG9vbCA9IGNvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2w7CiAKICAgICBkb25lID0g
ZmFsc2U7CiAKQEAgLTEwMzUsNyArMTAzNCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZp
Y2VXb3JrZXJQcm9jZXNzQ3JlYXRpb24pCiAgICAgZG9uZSA9IGZhbHNlOwogCiAgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgbG9hZGluZyB0aGUgc2ltcGxlIHBhZ2UgZGlkIG5vdCBzdGFydCB0aGUgc2Vy
dmljZSB3b3JrZXIgcHJvY2Vzcy4KLSAgICBFWFBFQ1RfRVEoMHUsIHdlYlZpZXcuZ2V0KCkuY29u
ZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CisgICAg
RVhQRUNUX0VRKDF1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3Nl
cnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29u
ZmlndXJhdGlvbjpuZXdDb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgRVhQRUNUX0VRKDJ1LCB3
ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudEln
bm9yaW5nUHJld2FybWVkKTsKQEAgLTEwNDMsOSArMTA0Miw4IEBAIFRFU1QoU2VydmljZVdvcmtl
cnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRpb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhh
dCBsb2FkaW5nIHRoaXMgcGFnZSBkaWQgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3Mu
CiAgICAgRVhQRUNUX0VRKDF1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bv
b2wuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwotCisgICAgRVhQRUNUX0VRKDF1LCBvcmln
aW5hbFByb2Nlc3NQb29sLmdldCgpLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKICAgICBb
W2NvbmZpZ3VyYXRpb24gd2Vic2l0ZURhdGFTdG9yZV0gcmVtb3ZlRGF0YU9mVHlwZXM6W1dLV2Vi
c2l0ZURhdGFTdG9yZSBhbGxXZWJzaXRlRGF0YVR5cGVzXSBtb2RpZmllZFNpbmNlOltOU0RhdGUg
ZGlzdGFudFBhc3RdIGNvbXBsZXRpb25IYW5kbGVyOl4oKSB7CiAgICAgICAgIGRvbmUgPSB0cnVl
OwogICAgIH1dOwpAQCAtMTYxOCwyMSArMTYxNiwzNSBAQCBzdGF0aWMgc2l6ZV90IGxhdW5jaFNl
cnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcywg
YgogICAgIHJldHVybiB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dl
YlByb2Nlc3NDb3VudElnbm9yaW5nUHJld2FybWVkOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJz
LCBPdXRPZkFuZEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBP
dXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1
ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisK
K1RFU1QoU2VydmljZVdvcmtlcnMsIEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9v
bCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0
TG9hZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNl
V29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2Fk
QWJvdXRCbGFuaykpOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0Jl
Zm9yZU5hdmlnYXRpbmdUaHJvdWdoU2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMs
IExvYWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hPdXRPZlByb2Nlc3NTZXJ2aWNl
V29ya2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRy
dWU7CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9F
USgxdSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MsIGZpcnN0TG9hZEFib3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2Vy
cywgTG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaEluUHJvY2Vzc1NlcnZpY2VX
b3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1
ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VR
KDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzLCBmaXJzdExvYWRBYm91dEJsYW5rKSk7CiB9CiAKQEAgLTE5NDQsMTEgKzE5NTYsMTEg
QEAgVEVTVChTZXJ2aWNlV29ya2VycywgU3VzcGVuZE5ldHdvcmtQcm9jZXNzKQogCiAgICAgRVhQ
RUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRo
OnN3REJQYXRoLnBhdGhdKTsKIAotICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnBy
b2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAg
IFt3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdv
cmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNG
aWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRo
XSk7CiAKLSAgICBbIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2Vu
ZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0
aW9uLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAg
ICBbd2ViVmlldyBsb2FkUmVxdWVzdDpzZXJ2ZXIucmVxdWVzdCgpXTsKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KaW5kZXggYTM1ZjA1MzUw
YWFiNGI0MmYzNmM0NmFlY2RlZWVlNmNlNTQ0ZWY4Ni4uMzM3NjA5MmExOTViNTEyZGE2N2M0OTZl
NDUyMTdiOTE0ZmUyYTU3OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCkBAIC00NzksOCArNDc5LDYg
QEAgc3RhdGljIGJvb2wgZmluaXNoZWQ7CiB9CiBAZW5kCiAKLS8vIEZJWE1FOiBvbiBpT1MsIFVJ
IHByb2Nlc3Mgc2hvdWxkIGJlIHVzaW5nIHRoZSBzYW1lIGNvb2tpZSBmaWxlIGFzIHRoZSBuZXR3
b3JrIHByb2Nlc3MgZm9yIGRlZmF1bHQgc2Vzc2lvbi4KLSNpZiBQTEFURk9STShNQUMpCiBlbnVt
IGNsYXNzIFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHsgTm8sIFllcyB9Owogdm9pZCBy
dW5XS0hUVFBDb29raWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNz
UHJld2FybWluZyBzaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZykKIHsKQEAgLTU4OSwyMCAr
NTg3LDY2IEBAIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbFdpdGhQ
cmV3YXJtaW5nKQogICAgIHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNo
b3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nOjpZZXMpOwogfQogCi0jZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQotCiBAaW50ZXJmYWNlIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgOiBOU09i
amVjdCA8V0tVSURlbGVnYXRlPgorLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUw7CistIChO
U1N0cmluZyAqKXdhaXRGb3JNZXNzYWdlOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gQ2hlY2tT
ZXNzaW9uQ29va2llVUlEZWxlZ2F0ZQorQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tp
ZVVJRGVsZWdhdGUgeworICAgIFJldGFpblB0cjxOU1N0cmluZz4gX21lc3NhZ2U7Cit9CisKIC0g
KHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZhU2NyaXB0QWxlcnRQYW5l
bFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFt
ZUluZm8gKilmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlv
bkhhbmRsZXIKIHsKLSAgICBFWFBFQ1RfU1RSRVEoIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZh
bHVlIiwgbWVzc2FnZS5VVEY4U3RyaW5nKTsKKyAgICBfbWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAg
ZmluaXNoZWQgPSB0cnVlOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CisKKy0gKE5TU3Ry
aW5nICopd2FpdEZvck1lc3NhZ2UKK3sKKyAgICB3aGlsZSAoIV9tZXNzYWdlKQorICAgICAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOworICAgIHJldHVybiBfbWVzc2FnZS5h
dXRvcmVsZWFzZSgpOworfQorCistIChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTAoreworICAg
IHJldHVybiBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsn
KTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ld
ID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9p
bignOyAnKSk7PC9zY3JpcHQ+IjsKK30KKwogQGVuZAogCitURVNUKFdlYktpdCwgV0tIVFRQQ29v
a2llU3RvcmVNdWx0aXBsZVZpZXdzKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcxID0g
W1tUZXN0V0tXZWJWaWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MSBzeW5jaHJv
bm91c2x5TG9hZEhUTUxTdHJpbmc6QCJzdGFydCBuZXR3b3JrIHByb2Nlc3MiXTsKKworICAgIE5T
SFRUUENvb2tpZSAqc2Vzc2lvbkNvb2tpZSA9IFtOU0hUVFBDb29raWUgY29va2llV2l0aFByb3Bl
cnRpZXM6QHsKKyAgICAgICAgTlNIVFRQQ29va2llUGF0aDogQCIvIiwKKyAgICAgICAgTlNIVFRQ
Q29va2llTmFtZTogQCJTZXNzaW9uQ29va2llTmFtZSIsCisgICAgICAgIE5TSFRUUENvb2tpZVZh
bHVlOiBAIkNvb2tpZVZhbHVlIiwKKyAgICAgICAgTlNIVFRQQ29va2llRG9tYWluOiBAIjEyNy4w
LjAuMSIsCisgICAgfV07CisKKyAgICBfX2Jsb2NrIGJvb2wgc2V0Q29va2llRG9uZSA9IGZhbHNl
OworICAgIFt3ZWJWaWV3MS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUuaHR0cENvb2tp
ZVN0b3JlIHNldENvb2tpZTpzZXNzaW9uQ29va2llIGNvbXBsZXRpb25IYW5kbGVyOl57CisgICAg
ICAgIHNldENvb2tpZURvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmc2V0Q29va2llRG9uZSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhb
Q2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBuZXddKTsKKyAgICBbd2ViVmlldzEgc2V0VUlE
ZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldzEgbG9hZEhUTUxTdHJpbmc6
W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpA
Imh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0
Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworCisgICAgVGVz
dFdLV2ViVmlldyAqd2ViVmlldzIgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07
CisgICAgW3dlYlZpZXcyIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJW
aWV3MiBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltO
U1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tf
U1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tp
ZVZhbHVlIik7Cit9CisKIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9v
bEVwaGVtZXJhbFNlc3Npb24pCiB7CiAgICAgUmV0YWluUHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4g
ZXBoZW1lcmFsU3RvcmVXaXRoQ29va2llcyA9IFtXS1dlYnNpdGVEYXRhU3RvcmUgbm9uUGVyc2lz
dGVudERhdGFTdG9yZV07CkBAIC02MjcsOSArNjcxLDggQEAgVEVTVChXS0hUVFBDb29raWVTdG9y
ZSwgV2l0aG91dFByb2Nlc3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKICAgICBmaW5pc2hlZCA9IGZhbHNlOwogICAgIAotICAg
IE5TU3RyaW5nICphbGVydENvb2tpZUhUTUwgPSBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1
bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0
aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2llcy5zb3J0
KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsKLSAgICBbd2ViVmlldyBs
b2FkSFRNTFN0cmluZzphbGVydENvb2tpZUhUTUwgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZm
aW5pc2hlZCk7CisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29v
a2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEi
XV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNz
aW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOwogfQogCiBzdGF0aWMgYm9vbCBhcmVDb29raWVz
RXF1YWwoTlNIVFRQQ29va2llICpmaXJzdCwgTlNIVFRQQ29va2llICpzZWNvbmQpCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFu
ZGxlci1sZWFrcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tV
UkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tCmluZGV4IGFjN2RlNDE1MTJjNDUxMzhlYzVlNGMwOWU1
MTE1ZDE2Y2QyM2IyMmUuLmFjMTY1MzVkZmQ5Mzk5OWQyZWM1MGRjZmQ3MWMzYTU2ZDExM2VjN2Eg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxT
Y2hlbWVIYW5kbGVyLWxlYWtzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tCkBAIC0zNSw2ICszNSw3IEBACiAj
aW1wb3J0IDxXZWJLaXQvV0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4K
ICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KQEAgLTE1Miw3ICsxNTMsNyBAQCBURVNUKFVSTFNjaGVt
ZUhhbmRsZXIsIExlYWtzMykKIAogICAgIHJ1blVudGlsVGFza3NJbkZsaWdodCgyKTsKIAotICAg
IFt3ZWJWaWV3MS5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CisgICAgW3dlYlZpZXcxLmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURh
dGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgcnVuVW50aWxUYXNrc0lu
RmxpZ2h0KDApOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQppbmRl
eCA5MmNmM2E2MTk4YTViOWQxNDU0NDkwNWRiOWU5NDhmMTFjNzI1NmRlLi44MTc3OWUyODFjNjA3
NTQ3NTVhY2UxZDgwMWUyNjgxZDE0ZTViYzMwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVD
dXN0b21QYXRocy5tbQpAQCAtMjQ0LDcgKzI0NCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVE
YXRhU3RvcmVDdXN0b21QYXRocyhTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRF
CiAgICAgLy8gTm93LCB3aXRoIGJyYW5kIG5ldyBXS1dlYnNpdGVEYXRhU3RvcmVzIHBvaW50aW5n
IGF0IHRoZSBzYW1lIGN1c3RvbSBjb29raWUgc3RvcmFnZSBsb2NhdGlvbiwKICAgICAvLyBpbiBu
ZXdseSBmaXJlZCB1cCBOZXR3b3JrUHJvY2Vzc2VzLCB2ZXJpZnkgdGhhdCB0aGUgZmV0Y2ggYW5k
IGRlbGV0ZSBBUElzIHdvcmsgYXMgZXhwZWN0ZWQuCiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CiAgICAgYXV0byBuZXdDdXN0b21EYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRl
RGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVD
b25maWd1cmF0aW9uLmdldCgpXSk7CiAKICAgICBbbmV3Q3VzdG9tRGF0YVN0b3JlIGZldGNoRGF0
YVJlY29yZHNPZlR5cGVzOltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dlYnNpdGVEYXRhVHlwZUNv
b2tpZXMsIG5pbF0gY29tcGxldGlvbkhhbmRsZXI6XihOU0FycmF5PFdLV2Vic2l0ZURhdGFSZWNv
cmQgKj4gKiByZWNvcmRzKSB7CkBAIC0yNTUsNyArMjU1LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vi
c2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNo
b3VsZEUKICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAKLSAgICBbcHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CiAgICAgbmV3Q3VzdG9tRGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vi
c2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0
b3JlQ29uZmlndXJhdGlvbi5nZXQoKV0pOwogCiAgICAgW25ld0N1c3RvbURhdGFTdG9yZSByZW1v
dmVEYXRhT2ZUeXBlczpbTlNTZXQgc2V0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVDb29r
aWVzLCBuaWxdIG1vZGlmaWVkU2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhh
bmRsZXI6XiB7CkBAIC0zODUsMTEgKzM4NSwxMCBAQCBURVNUKFdlYktpdCwgQ3VzdG9tRGF0YVN0
b3JlRGVzdHJveVdoaWxlRmV0Y2hpbmdOZXR3b3JrUHJvY2Vzc0RhdGEpCiAKICAgICAgICAgLy8g
VGVybWluYXRlIHRoZSBuZXR3b3JrIHByb2Nlc3Mgd2hpbGUgYSBxdWVyeSBpcyBwZW5kaW5nLgog
ICAgICAgICBhdXRvKiBhbGxQcm9jZXNzUG9vbHMgPSBbV0tQcm9jZXNzUG9vbCBfYWxsUHJvY2Vz
c1Bvb2xzRm9yVGVzdGluZ107Ci0gICAgICAgIEFTU0VSVF9FUSgxVSwgW2FsbFByb2Nlc3NQb29s
cyBjb3VudF0pOwotICAgICAgICBhdXRvKiBwcm9jZXNzUG9vbCA9IGFsbFByb2Nlc3NQb29sc1sw
XTsKLSAgICAgICAgd2hpbGUgKCFbcHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmll
cl0pCisgICAgICAgIEFTU0VSVF9FUSgwVSwgW2FsbFByb2Nlc3NQb29scyBjb3VudF0pOworICAg
ICAgICB3aGlsZSAoIVtkYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pCiAgICAg
ICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzbGVlcCgwLjAxKTsKLSAgICAgICAga2lsbChb
cHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0sIFNJR0tJTEwpOworICAgICAg
ICBraWxsKFtkYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0sIFNJR0tJTEwpOwog
ICAgICAgICBhbGxQcm9jZXNzUG9vbHMgPSBuaWw7CiAgICAgICAgIGRhdGFTdG9yZSA9IG5pbDsK
ICAgICB9CkBAIC01MzksNyArNTM4LDcgQEAgVEVTVChXZWJLaXQsIERvTG9hZFdpdGhOb25EZWZh
dWx0RGF0YVN0b3JlQWZ0ZXJUZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNzKQogCiAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbd2ViVmlld0NvbmZpZ3VyYXRp
b24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2Vi
Vmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOwogCiAgICAgcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6
W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRl
bnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsK
ICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKQEAgLTg1Nyw3ICs4NTYsNyBAQCBU
RVNUKFdlYktpdCwgTWVkaWFDYWNoZSkKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwogCiAgICAg
ZG9uZSA9IHRydWU7Ci0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFtmaWxlTWFu
YWdlciByZW1vdmVJdGVtQXRQYXRoOnBhdGggZXJyb3I6JmVycm9yXTsKICAgICBFWFBFQ1RfRkFM
U0UoZXJyb3IpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRP
YmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdE9iakMvQ3VzdG9tUHJvdG9jb2xzVGVzdC5tbQppbmRleCAyMmUxYTBhOWU4ZTI2ODA0NWU2
YjE3YzMwNmIwMDE0ZDViYzkxMjY4Li43Yjg0NzhiNTk3OWZhNzRiOWNkNTlkMDYyZWFkZDBkM2M1
MTUxZmQ3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdE9iakMv
Q3VzdG9tUHJvdG9jb2xzVGVzdC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdE9iakMvQ3VzdG9tUHJvdG9jb2xzVGVzdC5tbQpAQCAtMzQsNiArMzQsOCBAQAogI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tDb250ZXh0UHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc0dyb3VwUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0
L1dLVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVSZWYu
aD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogc3RhdGljIGJvb2wgdGVzdEZpbmlzaGVk
OwpAQCAtNzIsNiArNzQsOCBAQCBzdGF0aWMgV0tQcm9jZXNzR3JvdXAgKnByb2Nlc3NHcm91cCgp
CiAgICAgcmV0dXJuIHByb2Nlc3NHcm91cDsKIH0KIAorc3RhdGljIFJldGFpblB0cjxXS1ZpZXc+
IHdrVmlldzsKKwogQGludGVyZmFjZSBDbG9zZVdoaWxlU3RhcnRpbmdQcm90b2NvbCA6IFRlc3RQ
cm90b2NvbAogQGVuZAogCkBAIC04OSw3ICs5Myw3IEBAIHN0YXRpYyBXS1Byb2Nlc3NHcm91cCAq
cHJvY2Vzc0dyb3VwKCkKICAgICAgICAgfTsKICAgICAgICAgV0tDb250ZXh0U2V0Q2xpZW50KFtw
cm9jZXNzR3JvdXAoKSBfY29udGV4dFJlZl0sICZjbGllbnQuYmFzZSk7CiAKLSAgICAgICAga2ls
bChXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoW3Byb2Nlc3NHcm91cCgpIF9j
b250ZXh0UmVmXSksIFNJR0tJTEwpOworICAgICAgICBraWxsKFdLV2Vic2l0ZURhdGFTdG9yZUdl
dE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihXS1BhZ2VHZXRXZWJzaXRlRGF0YVN0b3JlKFt3a1Zp
ZXcgcGFnZVJlZl0pKSwgU0lHS0lMTCk7CiAgICAgICAgIFtzZWxmLmNsaWVudCBVUkxQcm90b2Nv
bDpzZWxmIGRpZEZhaWxXaXRoRXJyb3I6W05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOk5TQ29jb2FF
cnJvckRvbWFpbiBjb2RlOjAgdXNlckluZm86bmlsXV07CiAgICAgfSk7CiB9CkBAIC0xNDIsNyAr
MTQ2LDcgQEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogc3RhdGljIHZvaWQgcnVuVGVzdCgp
CiB7CiAgICAgUmV0YWluUHRyPFdLQnJvd3NpbmdDb250ZXh0R3JvdXA+IGJyb3dzaW5nQ29udGV4
dEdyb3VwID0gYWRvcHROUyhbW1dLQnJvd3NpbmdDb250ZXh0R3JvdXAgYWxsb2NdIGluaXRXaXRo
SWRlbnRpZmllcjpAIlRlc3RJZGVudGlmaWVyIl0pOwotICAgIFJldGFpblB0cjxXS1ZpZXc+IHdr
VmlldyA9IGFkb3B0TlMoW1tXS1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgcHJvY2Vzc0dyb3VwOnByb2Nlc3NHcm91cCgpIGJyb3dzaW5nQ29udGV4
dEdyb3VwOmJyb3dzaW5nQ29udGV4dEdyb3VwLmdldCgpXSk7CisgICAgd2tWaWV3ID0gYWRvcHRO
UyhbW1dLVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAw
KSBwcm9jZXNzR3JvdXA6cHJvY2Vzc0dyb3VwKCkgYnJvd3NpbmdDb250ZXh0R3JvdXA6YnJvd3Np
bmdDb250ZXh0R3JvdXAuZ2V0KCldKTsKICAgICBSZXRhaW5QdHI8Q3VzdG9tUHJvdG9jb2xzTG9h
ZERlbGVnYXRlPiBsb2FkRGVsZWdhdGUgPSBhZG9wdE5TKFtbQ3VzdG9tUHJvdG9jb2xzTG9hZERl
bGVnYXRlIGFsbG9jXSBpbml0XSk7CiAgICAgW3drVmlldyBicm93c2luZ0NvbnRleHRDb250cm9s
bGVyXS5sb2FkRGVsZWdhdGUgPSBsb2FkRGVsZWdhdGUuZ2V0KCk7CiAgICAgW1t3a1ZpZXcgYnJv
d3NpbmdDb250ZXh0Q29udHJvbGxlcl0gbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0
V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IiVAOi8vcmVkaXJlY3Q/dGVzdCIsIFtUZXN0UHJvdG9jb2wgc2NoZW1lXV1dXV07CmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDlkMzdjY2VkZGI4MjE1NzQ3
NWQ4MWYxMjIwZjQ1NmI4NjRjM2IxNzEuLjNhYzkzYTZkNjNlYTVmMjQxYjQ3NThlNzZiNWY3OWQw
NDI1NDI5NTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBA
IC0xMDYxLDggKzEwNjEsNiBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25z
aXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zLCBSZQogCiAgICAgcmVzZXRR
dW90YSgpOwogCi0gICAgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2
aWNlV29ya2VyVGVzdGluZyhwbGF0Zm9ybUNvbnRleHQoKSwgdHJ1ZSk7Ci0KICAgICBXS0NvbnRl
eHRDbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZyhUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuY29udGV4dCgpKTsKIAogICAgIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgZmFs
c2UpOwpAQCAtMTIzNyw3ICsxMjM1LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZmluZEFuZER1
bXBXZWJLaXRQcm9jZXNzSWRlbnRpZmllcnMoKQogICAgIGR1bXBSZXNwb25zZShtYWtlU3RyaW5n
KFRlc3RDb250cm9sbGVyOjp3ZWJQcm9jZXNzTmFtZSgpLCAiOiAiLAogICAgICAgICBXS1BhZ2VH
ZXRQcm9jZXNzSWRlbnRpZmllcihUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZp
ZXcoKS0+cGFnZSgpKSwgJ1xuJywKICAgICAgICAgVGVzdENvbnRyb2xsZXI6Om5ldHdvcmtQcm9j
ZXNzTmFtZSgpLCAiOiAiLAotICAgICAgICBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50
aWZpZXIobV9jb250ZXh0LmdldCgpKSwgJ1xuJykpOworICAgICAgICBXS1dlYnNpdGVEYXRhU3Rv
cmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIod2Vic2l0ZURhdGFTdG9yZSgpKSwgJ1xuJykp
OwogI2Vsc2UKICAgICBkdW1wUmVzcG9uc2UoIlxuIl9zKTsKICNlbmRpZgpAQCAtMjI5Nyw3ICsy
Mjk1LDcgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0Q29udHJvbGxlcjo6Z2V0SW5qZWN0
ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhKCkKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6
bmV0d29ya1Byb2Nlc3NEaWRDcmFzaCgpCiB7Ci0gICAgcGlkX3QgcGlkID0gV0tDb250ZXh0R2V0
TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKG1fY29udGV4dC5nZXQoKSk7CisgICAgcGlkX3QgcGlk
ID0gV0tXZWJzaXRlRGF0YVN0b3JlR2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKHdlYnNpdGVE
YXRhU3RvcmUoKSk7CiAgICAgZnByaW50ZihzdGRlcnIsICIjQ1JBU0hFRCAtICVzIChwaWQgJWxk
KVxuIiwgbmV0d29ya1Byb2Nlc3NOYW1lKCksIHN0YXRpY19jYXN0PGxvbmc+KHBpZCkpOwogICAg
IGV4aXQoMSk7CiB9CkBAIC0zMTM2LDcgKzMxMzQsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpz
ZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyhib29sIGlnbm9yZXNWaWV3cG9ydFNjYWxlTGlt
aQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCiB7Ci0g
ICAgV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3MocGxhdGZvcm1Db250ZXh0KCkpOwor
ICAgIFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKHdlYnNpdGVEYXRh
U3RvcmUoKSk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZVNlcnZpY2VXb3Jr
ZXJzKCkKQEAgLTMxNjcsOSArMzE2NSw4IEBAIFBsYXRmb3JtV2ViVmlldyogVGVzdENvbnRyb2xs
ZXI6OnBsYXRmb3JtQ3JlYXRlT3RoZXJQYWdlKFBsYXRmb3JtV2ViVmlldyogcGFyZW50CiAgICAg
cmV0dXJuIG5ldyBQbGF0Zm9ybVdlYlZpZXcoY29uZmlndXJhdGlvbiwgb3B0aW9ucyk7CiB9CiAK
LVdLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KFdLQ29u
dGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmIGNvbnRleHRDb25maWd1
cmF0aW9uKQorV0tDb250ZXh0UmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRl
eHQoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYpCiB7Ci0g
ICAgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUoY29udGV4dCwgZGVmYXVsdFdl
YnNpdGVEYXRhU3RvcmUoKSk7CiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAK
</data>
<flag name="commit-queue"
          id="425027"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409350</attachid>
            <date>2020-09-21 23:56:20 -0700</date>
            <delta_ts>2020-09-22 09:21:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200921235619.patch</filename>
            <type>text/plain</type>
            <size>340192</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRhZGZjMzM1NmEzMzk3NmU4
YmE5Mzk2YmJhOTM0ZThmNGMzODhmM2EuLjAxNTAwYTk4ZWM1ZGJmOTJlYTE2NzlhNzBiN2FmMmE3
NTMzMDE2ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzY0IEBACisyMDIwLTA5LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggbW92ZXMgdGhlIHRoaW5ncyBvbiBXZWJQcm9jZXNzUG9vbCBhc3NvY2lhdGVk
IHdpdGggTmV0d29ya1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgYW5kIG1vdmVzIHRoZW0KKyAgICAg
ICAgdG8gV2Vic2l0ZURhdGFTdG9yZS4gIEl0J3MgcHJldHR5IG1lY2hhbmljYWwsIGJ1dCBpdCBy
ZWFjaGVzIGl0cyBmaW5nZXJzIGludG8gYSBsb3Qgb2YgdGhpbmdzLiAgU29tZSBjb21tZW50cwor
ICAgICAgICBvbiBpbnRlcmVzdGluZyBwYXJ0cyBhcmUgYmVsb3cuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaDoKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZh
dWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdl
U2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cDoKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZXNGb3JVUkwpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNl
dENvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNlcnZlcik6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCk6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXIpOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyk6CisgICAgICAgIChXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZSk6
CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3Rp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3Mp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwOgorICAgICAgICAoV0tXZWJzaXRl
RGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2wubW06CisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6XSk6CisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wg
X25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQ
b29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3N5
bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vz
c1Bvb2wgX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxl
bWVudEZvclRlc3Rpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJzaXRlRGF0YVN0b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOgorICAgICAgICAoLVtXS1dl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXSk6CisgICAgICAgICgtW1dL
V2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpdKToK
KyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHldKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWVdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9z
eW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKF9XZWJLaXRDb29raWVNYW5h
Z2VyUHJpdmF0ZTo6Y29va2llTWFuYWdlciBjb25zdCk6CisgICAgICAgIChfV2ViS2l0Q29va2ll
TWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUpOgorICAgICAgICAo
d2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFn
ZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFn
ZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dl
dF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29v
a2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyk6CisgICAg
ICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAod2Via2l0V2Vi
Q29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNz
aW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNzL0F1eGlsaWFyeVBy
b2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vz
c1Bvb2xDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVBy
b2Nlc3NTdXBwcmVzc2lvblN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eTo6cHVibGlzaFByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWRQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdl
YktpdDo6RG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3lu
Yyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcCk6Cisg
ICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNr
Z3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25X
aWxsRW50ZXJGb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6
Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6
OmRvd25sb2FkRmluaXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpp
bnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlN
YXAuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAgKFdlYktp
dDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2Vz
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFy
YW1ldGVyc1RvTmV3UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OmRhdGFTdG9yZVBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9v
bEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSk6CisgICAgICAgIChXZWJLaXQ6OmFueVBy
b2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFz
aGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1l
c3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6
OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9u
VG9OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sSGFzRm9y
ZWdyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sSGFz
QmFja2dyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRsZXI6OmhhbmRsZVhQQ0V2ZW50IGNvbnN0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5h
Z2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdD
b29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vz
c0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6ZGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50
T3ZlcnJpZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnByZWNvbm5lY3RUbyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmlnYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRD
bGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGlu
Zyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVy
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlv
blRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVt
b3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1
cml0eVBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVS
TFNjaGVtZUFzTG9jYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0
ZXJVUkxTY2hlbWVBc05vQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hl
bWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb25zKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmlzU2VydmljZVdvcmtlclBhZ2VJRCBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZp
Y2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlG
b3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3Mp
OiBEZWxldGVkLgorICAgICAgICBUaGVyZSBzZWVtcyB0byBiZSBhIGxvdCBvZiBjb2RlIHJlbW92
YWwgaGVyZSwgYnV0IG1vc3Qgb2YgaXQgd2FzIGR1cGxpY2F0ZSBjb2RlIHdpdGgKKyAgICAgICAg
V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyB3aGljaCBpcyB1c2VkIGluc3RlYWQuICBUaGF0
IHdoaWNoIHdhcyBub3QgZHVwbGljYXRlIHdhcworICAgICAgICBtb3ZlZCB0byBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzLiAgVGhpcyB3YXMg
dGhlIGhhcmRlc3QgcGFydCBvZiB0aGlzIHBhdGNoLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNr
Z3JvdW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRT
eW5jVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmRGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdv
cmtQcm9jZXNzRGlkUmVzdW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OmZsdXNoQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlcik6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1
bmNoaW5nSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0Nv
Y29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNl
c3Npb25JRCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3Mg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRB
cHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGltZW91
dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFNl
cnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1v
dmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZh
bGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFu
ZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2
YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVj
b3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1Rv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNv
dXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1ldGVy
c1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN1
Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRl
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNz
QW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlw
T25seUluRGF0YWJhc2VPbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0VXNlSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29y
YXRpb25Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVs
ZXRlQ29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
aG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3Vs
ZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RD
b29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNh
cEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnByb2Nlc3NQb29scyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0
aXN0aWNzVGVzdGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEFkQ2xpY2tBdHRyaWJ1
dGlvbkRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZsdXNo
Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vzc2lvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBwQm91bmRTZXNzaW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWlu
c1RvSVRQSWZJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3Jr
UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0
ZXJXaXRoU2Vzc2lvbklETWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphZGRQZW5kaW5nQ29va2ll
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlUGVu
ZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmNsZWFyUGVuZGluZ0Nvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICog
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoT3B0aW9ucyk6
CisgICAgICAgICogVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVyc2lz
dGVudFN0b3JhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRJ
Z25vcmVUTFNFcnJvcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0TmV0
d29ya1Byb3h5U2V0dGluZ3MpOgorCiAyMDIwLTA5LTIxICBLYXRlIENoZW5leSAgPGthdGhlcmlu
ZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGFib3V0OmJsYW5rIHN1YmZyYW1l
IGxvYWRzIGZvciBub24gYXBwLWJvdW5kIHRvcCBmcmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAppbmRl
eCBmY2UyMzg5ODdhNzg1MGYxOGM5ZjMwNmM1MGU5OGNlOTg4ZDEyNWZkLi42YjQ1YzJiZDlmMjZh
NDY4NThkMTc3YjU3NzdiMzBmNjFkMDdlOGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9Db29raWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZVN0b3JhZ2UuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0hUVFBDb29raWVBY2NlcHRQb2xpY3kuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgpAQCAtMTQ5LDkgKzE1MCwxMiBAQCB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3ksCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAotdm9pZCBXZWJDb29raWVN
YW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYkNv
b2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5k
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgaWYgKGF1
dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkp
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5jb29raWVBY2NlcHRQ
b2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihIVFRQQ29va2ll
QWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5h
Z2VyLmgKaW5kZXggY2E3ZjU1ZTg2NmJkYWQ0YjFlMzUyZThmNjQwNTdiYWJjNDYyODMyZC4uZWI3
NDE4MjM1ZjU3MDkzMDM5NjAxOWJlNDQ3MjFkZGMwOWZhOThmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCkBA
IC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRDb29raWVzKFBBTDo6U2Vzc2lv
bklELCBjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiYpPiYmKTsKIAogICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpOwotICAgIHZvaWQgZ2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3kpPiYmKTsKKyAgICB2b2lkIGdldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SFRUUENvb2tp
ZUFjY2VwdFBvbGljeSk+JiYpOwogCiAgICAgdm9pZCBzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5n
ZXMoUEFMOjpTZXNzaW9uSUQpOwogICAgIHZvaWQgc3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMo
UEFMOjpTZXNzaW9uSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgppbmRleCBh
Y2Q3NTQ0MGQ4M2YzNDY2NTBjOWYzM2I3NWI1ZDVkMDkzNTIxM2JhLi42ZmRmNTc3MmFhNmFhZTM5
NDAyYTlhODlmNTZjODRmN2JkNDM1ODVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdl
cy5pbgpAQCAtMzYsNyArMzYsNyBAQCBtZXNzYWdlcyAtPiBXZWJDb29raWVNYW5hZ2VyIE5vdFJl
ZkNvdW50ZWQgewogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3luYwogCiAgICAgdm9p
ZCBTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJDb3JlOjpIVFRQQ29v
a2llQWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lkIEdldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBDb29raWVBY2Nl
cHRQb2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tpZUFjY2VwdFBvbGlj
eShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRU
UENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAgdm9pZCBTdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIHZvaWQg
U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCBi
ZThkOTY2NjJiZTZkY2Q4NWZhM2MzMjkyOWFlMGYwYjVkMTgyMzQzLi43ZjQ3NzcxMzJkNTI0NzU4
MTgyOTgxYWFmMGMxOGI3MmI3YmEzOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ3LDI5ICszNDcsMTkgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJh
bWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lv
bklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3Jr
U2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRT
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFTdG9yZVBhcmFtZXRl
cnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAgICAgYXV0byBzZXNz
aW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNz
aW9uSUQ7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShkYXRh
U3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Cisg
ICAgICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgZGF0YVN0b3Jl
UGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVy
VGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJ
bmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKKyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIGRhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKLQor
ICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1vdGVOZXR3b3JraW5n
Q29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUoZGF0
YVN0b3JlUGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBib29s
IHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgPSB0cnVlOwotICAg
IGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUo
cGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAg
ICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0
ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUo
ZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwg
ZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNl
c3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8qIGRlZmF1bHRTZXNz
aW9uID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7
Ci0gICAgYXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNlc3Npb24tPm5ldHdv
cmtTdG9yYWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAg
ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAgICB9CiAKICAgICBm
b3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBz
dXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNTA1LDggKzQ5NSw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNl
c3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9u
KGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVXNlVGVzdGluZ05l
dHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXJCYXNlKQogI2VuZGlmCiB7Ci0g
ICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmFkZChz
ZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTUyMSw3ICs1MDksNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1
cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQog
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gbWFrZVN0cmluZyhpZGVu
dGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmlu
ZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkK
ICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vz
c2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAoc2Vzc2lv
bklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgICAgIHN0b3Jh
Z2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVDRlN0b3Jh
Z2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkpOwogCiAgICAgaWYgKE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQSSgpKSB7CkBAIC01NDQs
MjEgKzUzMiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVBY2NlcHRQb2xpY3lDaGFu
Z2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9saWN5KQogCiBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6
OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0dXJuICZkZWZhdWx0
U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmdl
dChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdv
cmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIGlmICghbV9k
ZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1bHROZXR3b3JrU3Rv
cmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwotICAg
IHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQotCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZv
aWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9yKQogewotICAgIGZ1
bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0byYgc3RvcmFnZVNl
c3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAgICAgICAgIGZ1bmN0
b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaAppbmRleCBhYTczMzc3YjczMmY2MTBiODY3OTA1NmMzN2RmMjhhZWVh
MDdhZjgzLi5kYzg2ZjM5Njk3ZmM1MDNlYTRkYmQxYjA2YzMyMjk3NWIxZTY5ZDE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0xNzAsNyAr
MTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9u
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7
CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nlc3Npb24oY29uc3Qg
UEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIGVuc3VyZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3Jr
U2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4mJik7CkBAIC0zNzUsNyArMzc0LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBAIC01NDQsNyArNTQyLDYgQEAgcHJp
dmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9u
SUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiBtX25l
dHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247
CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggOTkwMWM1Y2I3M2M3NGZlM2Rh
NGViZjU3YmE4NTEyODZmZGExMDRiZi4uMDJkZGI5MjM0ZTk5OWMzZTZjZGNkY2YwYjg3OGI4NzI1
ODM2MzI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTU1LDcgKzU1
LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc1NES1ZlcnNp
b247CiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwog
I2VuZGlmCi0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBl
bmNvZGVyIDw8IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYgVVNFKFNPVVApCiAgICAgZW5jb2Rl
ciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5jb2RlciA8PCBpZ25vcmVUTFNFcnJvcnM7
CkBAIC02OCw5ICs2OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCB1cmxT
Y2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0
ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgZW5jb2Rl
ciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxkRGlzYWJsZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAgIGVuY29kZXIgPDwg
c2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFibGVBZENsaWNrQXR0
cmlidXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTYsMTEgKzExMywxMSBAQCBib29sIE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBO
ZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIE9wdGlvbmFs
PFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsK
LSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIGlmICghZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9yPFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBkZWNvZGVyID4+IGRh
dGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0ZXJzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzID0g
V1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJlc3VsdC5kYXRhU3Rv
cmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7CiAKICNpZiBVU0Uo
U09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVBY2NlcHRQb2xpY3kp
KQpAQCAtMTQyLDIwICsxMzksNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcykpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlvbmFsPFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVz
dWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBX
VEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERpc2FibGVTZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0j
ZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJsZUlUUERh
dGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmgKaW5kZXggMTFjYTVhMTk5ZmNmZmU4ODNmZmYwYTJmZjc5ZGZlNDIxMGQ5ZGFkMS4uNjc0
OWRhMGM0YTYzYzIwMjEwNzc4MzU4NDg0NmM5MGQwMTBhMDM0MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaApAQCAtNzEsNyArNzEsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMgewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG5ldHdvcmtBVFNDb250
ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBkZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVyczsKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+
IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAgICAgCiAjaWYgVVNFKFNPVVApCiAgICAgV2ViQ29yZTo6
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBXZWJDb3JlOjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsKQEAgLTg1LDEyICs4NSw3IEBAIHN0
cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgVmVjdG9yPFN0cmlu
Zz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNj
aGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
LSAgICBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeTsKLSAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSAgICBib29sIHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vz
c1Rlcm1pbmF0aW9uRGVsYXkgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgYm9vbCBzaG91bGRFbmFi
bGVJVFBEYXRhYmFzZSB7IGZhbHNlIH07CisgICAgYm9vbCBzaG91bGRFbmFibGVJVFBEYXRhYmFz
ZSB7IHRydWUgfTsKICAgICBib29sIGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSB7
IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXggZGE2MzU5MTI0MjIzZGI5NzAz
MGQxZWE3N2JjMDBjZWU1MWZiMDE3ZC4uNTAxMGY5YTg2OTAzOTBkZmZlOWEzNDRlOTkwNWIyNGU2
Njg1YzdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpAQCAtNzgsOSArNzgsNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5l
dHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNh
bmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvbnRhaW5lckNh
Y2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29u
c3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0j
ZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFUU0NvbnRleHQocGFyYW1ldGVycy5u
ZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMDUsMTEgKzEwMiw2IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29uc3QgTmV0
d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2FjaGU6dXJsQ2FjaGUu
Z2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24o
KSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIFJldGFp
blB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNzOjpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0
YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9BUFBMSUNBVElPTl9BVURJVF9EQVRBKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQyZGNjOGUzZjliOGYxNjkyOTk3ZjY3MTky
Li40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5M2UyMjU2YTM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJs
LmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKIHsKIH0KIAot
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1By
b2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNz
OjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQ2VydGlmaWNhdGVJ
bmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMv
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBjMjczNmUwMjZhNTVkM2Q0MDIw
Zjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0NjIwZjAyYTdkOWU5ZTg2OWVjODY0OTFi
N2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1v
dGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNTUsMTUgKzU1LDExIEBAIHZvaWQg
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKE5l
dHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJt
YW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAog
ICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nlc3NDb29raWVTdG9y
YWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQ
cm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAgIGlmICghc2Vzc2lv
bklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlk
ZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAg
ICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3RvcmFnZUZyb21JZGVudGlmeWluZ0Rh
dGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcik7CiAKICAgICBu
ZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBtYWtlU3Ry
aW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkpLCBXVEZNb3ZlKHVpUHJvY2Vzc0Nv
b2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrUHJvY2Vzcy5zdG9y
YWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFy
YW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0Q29va2llKGNvb2tp
ZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nl
c3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRleCA0MWFmZGNjNjFh
ZGM1ODNkY2YxOWYyZDQwYWEyODkxZjhhMDEzMjhiLi4wOTNkNTk5NTk2YTY4ODMwYWYwOTkzZmEz
NjgzMWUwYzMyNGJmYmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApAQCAtMTQwLDExICsxNDAsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25z
dCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNldElnbm9yZVRMU0Vycm9ycyhwYXJhbWV0ZXJz
Lmlnbm9yZVRMU0Vycm9ycyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsK
LX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3Jl
VExTRXJyb3JzKQogewogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0U2hvdWxkSWdub3JlVExT
RXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXggNmQwYzEyOWE3NDA1MTBkMzg2OTcz
NzA1YWQwOTJlZjEzMmNjMDc1YS4uMDQ4MTBiM2UxOWJlOTZjYWQxYWQ4MmE0NGRjZWRiMjZlZjc4
MjYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmNwcApAQCAtNDAsMTMgKzQwLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVy
IDw8IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc0Nv
b2tpZVN0b3JhZ2VJZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2llU3RvcmFnZVBhdGhF
eHRlbnNpb25IYW5kbGU7Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2llczsKIAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlVGVtcEJs
b2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpE
ZWMKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmNvb2tpZVN0
b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY29va2llU3RvcmFnZVBhdGhFeHRl
bnNpb25IYW5kbGUpOwogCi0gICAgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4+IHBl
bmRpbmdDb29raWVzOwotICAgIGRlY29kZXIgPj4gcGVuZGluZ0Nvb2tpZXM7Ci0gICAgaWYgKCFw
ZW5kaW5nQ29va2llcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0
ZXJzLnBlbmRpbmdDb29raWVzID0gV1RGTW92ZSgqcGVuZGluZ0Nvb2tpZXMpOwotCiAjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBpbmRleGVkRGF0YWJh
c2VEaXJlY3Rvcnk7CiAgICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CkBA
IC0xMDEsMTQgKzkxLDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAgICBpZiAoIWluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIE9wdGlvbmFsPFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZT4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGU7Ci0gICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIWluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHBhcmFt
ZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBX
VEZNb3ZlKCppbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKaW5kZXggZjI3
ZGY0ODk4MDlmMzE5NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQzOS4uZTFiMjMzNzAxOTlmZTM3MDMx
ZTlkYzVjMDU3ODE1NTAyMWUzNGQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCkBAIC01MSwxNSArNTEsMTEgQEAgc3RydWN0IFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKIAogICAgIFZlY3Rvcjx1aW50OF90PiB1aVByb2Nl
c3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUg
Y29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkNv
b2tpZT4gcGVuZGluZ0Nvb2tpZXM7CiAgICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRl
cnMgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAgICAgU3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGlu
ZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKaW5kZXggYmMwNzg2NmZiYzM5
NjhlNzZjYWE5YTM1NjgxMGM2YTJmYjA5ZGNmZC4uZmY5NTU4OTJiZGEwYjgzYzIzYTk2YTA4Mzll
ZjNiZDBkOTQ2OWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5jcHAKQEAgLTQ2LDggKzQ2LDYgQEAgbmFtZXNwYWNlIEFQSSB7CiBI
VFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUm
IHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0RhdGFTdG9yZSh3ZWJzaXRlRGF0YVN0
b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5v
dGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkK
QEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkKICAg
ICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoIW1fb2JzZXJ2ZWRD
b29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9jb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7
CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC04MSwz
MyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJvdW5kQ29va2llcyhj
b25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2kKIAogdm9pZCBIVFRQQ29va2llU3Rv
cmU6OmNvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293
bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwot
ICAgIGlmICghcG9vbCkgewotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBhbGxDb29r
aWVzOwotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgICAgICBhbGxDb29raWVzID0g
Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwotICAgICAgICBhbGxD
b29raWVzLmFwcGVuZFZlY3RvcihtX293bmluZ0RhdGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMoKSk7
Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlciksIGFsbENvb2tpZXNdICgpIG11dGFibGUgewotICAgICAgICAgICAgZmlsdGVyQXBw
Qm91bmRDb29raWVzKGFsbENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5h
Z2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsK
LSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcG9vbCA9IFdU
Rk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7Cisg
ICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vz
cygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldEFsbENvb2tpZXMobV9v
d25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFibGUgewogICAg
ICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0ZvclVS
TChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9v
d25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsK
LSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwot
Ci0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0Q29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYgY29va2llcykgbXV0YWJsZSB7CisgICAg
YXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vzcygp
LmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldENvb2tpZXMobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
IChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgewogICAgICAgICBm
aWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIH0pOwogfQpAQCAtMTE1LDc4ICs5NCwyOSBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
bwogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiBhcHBCb3VuZENvb2tpZXMpIG11dGFibGUgewot
ICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29v
a2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7Ci0gICAgICAgICAg
ICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vzc2lvbiBiZWNhdXNl
IHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3b3JrIFByb2Nlc3Mg
d2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAgICAgICAgICAgICBp
ZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAgICAgICAgICAgICBz
ZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9vd25pbmdEYXRhU3RvcmUtPmFkZFBl
bmRpbmdDb29raWUoY29va2llKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgICAg
ICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAgIGF1dG8mIGNvb2tp
ZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5h
Z2VyKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29va2llKGNv
bnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3Jl
LT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29s
KSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Npb24pCi0gICAgICAg
ICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvb2tpZSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5yZW1vdmVQZW5k
aW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBs
ZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdl
ci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBb
cG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0g
ICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNv
b2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29v
a2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0
b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBkZWxl
dGVDb29raWVzSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBh
dXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCku
Y29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxsQ29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBUaGUgQ29tcGxldGlv
bkhhbmRsZXIgc2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0
ZUFsbENvb2tpZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBw
b29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xpY3kpOwotICAgICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wt
PnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2ll
TWFuYWdlci0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAg
IH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29y
a1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5zZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpm
bHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMjI3LDIxICsxNTcsNyBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNl
cnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCiAKICAgICBtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2Vy
dmVyID0gbWFrZVVuaXF1ZTxBUElXZWJDb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcj4oKnRoaXMp
OwogCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNv
b2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgQVNT
RVJUKCFtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMpOwotCi0gICAgICAgIC8vIExpc3RlbiBm
b3IgY29va2llIG5vdGlmaWNhdGlvbnMgaW4gdGhlIFVJUHJvY2VzcyBpbiB0aGUgbWVhbnRpbWUu
Ci0gICAgICAgIHN0YXJ0T2JzZXJ2aW5nQ2hhbmdlc1RvRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0
b3JlKFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICBjb29raWVzRGlkQ2hhbmdlKCk7Ci0gICAgICAg
IH0pOwotCi0gICAgICAgIG1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyA9IHRydWU7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0g
cG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBt
X29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3Jr
UHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclBy
b3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1f
Y29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCkBAIC0yNzYsNDYgKzE5MiwxMCBAQCB2
b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0RpZENoYW5nZSgpCiB2b2lkIEhUVFBDb29raWVT
dG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCgpCiB7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1h
bmFnZXJQcm94eS0+dW5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgIG1fb2JzZXJ2ZWRDb29r
aWVNYW5hZ2VyUHJveHkgPSBudWxscHRyOwotCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0
YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBp
ZiAoIXBvb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2Vy
UHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Pigp
OworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmbV9vd25pbmdEYXRhU3RvcmUt
Pm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwogICAgIG1fb2JzZXJ2ZWRDb29raWVN
YW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKLXZvaWQgSFRUUENvb2tp
ZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAg
QVNTRVJUKCFtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAg
bV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gV2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKFt0aGlzXShXZWJQcm9jZXNzUG9v
bCYgbmV3UHJvY2Vzc1Bvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+aXNB
c3NvY2lhdGVkUHJvY2Vzc1Bvb2wobmV3UHJvY2Vzc1Bvb2wpKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIC8vIE5vdyB0aGF0IGFuIGFzc29jaWF0ZWQgcHJvY2VzcyBwb29sIGV4aXN0
cywgd2UgbmVlZCB0byBmbHVzaCB0aGUgVUkgcHJvY2VzcyBjb29raWUgc3RvcmUKLSAgICAgICAg
Ly8gdG8gbWFrZSBzdXJlIGFueSBjaGFuZ2VzIGFyZSByZWZsZWN0ZWQgd2l0aGluIHRoZSBuZXcg
cHJvY2VzcyBwb29sLgotICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgp
OwotICAgICAgICBuZXdQcm9jZXNzUG9vbC5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCi0gICAg
ICAgIGlmIChtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKSB7Ci0gICAgICAgICAgICBtX29i
c2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbmV3UHJvY2Vzc1Bvb2wuc3VwcGxlbWVudDxXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29r
aWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAgICAgIH0KLSAgICAg
ICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotICAgIH0pOwot
fQotCi12b2lkIEhUVFBDb29raWVTdG9yZTo6dW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucygpCi17Ci0gICAgaWYgKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRl
bnRpZmllcikKLSAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJQcm9jZXNzUG9vbENy
ZWF0aW9uTGlzdGVuZXIobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsK
LQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IDA7Ci19Ci0K
ICNpZiAhUExBVEZPUk0oQ09DT0EpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1c2hEZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmUoKSB7IH0KIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IEhUVFBD
b29raWVTdG9yZTo6Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpIHsg
cmV0dXJuIHsgfTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBD
b29raWVTdG9yZS5oCmluZGV4IGQ2MjBhZGRhNGU3Zjg5NDU2NjE4YTNlMjJlMWJmZDQzNTc3NzVi
MTkuLmEwNWY0MTQzMGRiMmIyM2Q0MTc4NDA3OWE0ZmI4NmM3NDYwYTc1NDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKQEAgLTgzLDkg
KzgzLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7Ci0KICAgICB2b2lkIGZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
KCk7CiAgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGdldEFsbERlZmF1bHRVSVBy
b2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKICAgICBzdGF0aWMgdm9pZCBzZXRDb29raWVJbkRl
ZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCmluZGV4IDU4YzU0NTNmNDg5
ODdmNWUxYWZhZmVmMzRjNDMzMzVmMWI0Y2M5OTAuLjM3YmFhNjhmOTI0Yjk1ODcyZjAxZjdlNGE4
MGQ1ZjQ5N2Q1ZmU5YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250
ZXh0LmNwcApAQCAtNDExLDExICs0MTEsNiBAQCB2b2lkIFdLQ29udGV4dFByZWNvbm5lY3RUb1Nl
cnZlcihXS0NvbnRleHRSZWYsIFdLVVJMUmVmKQogewogfQogCi1XS0Nvb2tpZU1hbmFnZXJSZWYg
V0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dFJlZikKLXsKLSAg
ICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c3VwcGxl
bWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSk7Ci19Ci0KIFdLV2Vic2l0ZURh
dGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZikKIHsK
ICAgICByZXR1cm4gV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSgpOwpAQCAt
NTI3LDEzICs1MjIsNiBAQCB2b2lkIFdLQ29udGV4dFNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVj
dG9yVGltZXJFbmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLAogICAgIFdlYktpdDo6dG9J
bXBsKGNvbnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxl
ZChlbmFibGUpOwogfQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRl
Rm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgYWxsb3dz
KQotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250
ZXh0KS0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7
Ci0jZW5kaWYKLX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQbHVnSW5BdXRvU3Rh
cnRPcmlnaW5IYXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdl
YktpdDo6dG9BUEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVnSW5BdXRvU3RhcnRP
cmlnaW5IYXNoZXMoKS5sZWFrUmVmKCkpOwpAQCAtNTc1LDIxICs1NjMsMTEgQEAgdm9pZCBXS0Nv
bnRleHRTZXRGb250QWxsb3dMaXN0KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS0FycmF5UmVm
IGFycmF5UmVmKQogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRGb250QWxsb3dM
aXN0KFdlYktpdDo6dG9JbXBsKGFycmF5UmVmKSk7CiB9CiAKLXZvaWQgV0tDb250ZXh0VGVybWlu
YXRlTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgV2ViS2l0Ojp0
b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0KIHZvaWQgV0tD
b250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAg
ICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9
CiAKLVByb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGNvbnRleHRS
ZWYpLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKLX0KLQogdm9pZCBXS0NvbnRleHRBZGRT
dXBwb3J0ZWRQbHVnaW4oV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5nUmVmIGRvbWFp
blJlZiwgV0tTdHJpbmdSZWYgbmFtZVJlZiwgV0tBcnJheVJlZiBtaW1lVHlwZXNSZWYsIFdLQXJy
YXlSZWYgZXh0ZW5zaW9uc1JlZikKIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
QEAgLTYxOSwxMiArNTk3LDExIEBAIHZvaWQgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJT
dGF0ZUZvclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiAgICAgV2ViS2l0Ojp0b0lt
cGwoY29udGV4dFJlZiktPmNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCk7CiB9
CiAKLXZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0Nv
bnRleHRSZWYgY29udGV4dFJlZiwgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KQordm9pZCBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFdLQ29u
dGV4dFJlZiwgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogewotICAgIFdl
YktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiB9CiAKLXZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNp
dGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiB3ZWJzaXRlRGF0YVN0b3JlKQordm9pZCBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFT
dG9yZShXS0NvbnRleHRSZWYsIFdLV2Vic2l0ZURhdGFTdG9yZVJlZikKIHsKLSAgICBXZWJLaXQ6
OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0UHJpbWFyeURhdGFTdG9yZSgqV2ViS2l0Ojp0b0ltcGwo
d2Vic2l0ZURhdGFTdG9yZSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0Nv
bnRleHQuaAppbmRleCAxZDhmYWI4YTE0ODZhYWRiNDk0MTQ0Yjk4ZjEwZTkzNjM4ZDBjNWU2Li4y
YWI2ZWY4NmY1MzBlNzdmNzRjYmQ1ZGY1ODYyYWM0ZDMwYjc5ODc2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaApAQCAtMTY4LDcgKzE2OCw2IEBAIFdLX0VYUE9S
VCB2b2lkIFdLQ29udGV4dFN0b3BNZW1vcnlTYW1wbGVyKFdLQ29udGV4dFJlZiBjb250ZXh0KTsK
IFdLX0VYUE9SVCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFT
dG9yZShXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExB
Q0VNRU5UKFdLV2Vic2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUpOwogCiBXS19FWFBP
UlQgV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclJlZiBXS0NvbnRleHRHZXRBcHBsaWNhdGlvbkNh
Y2hlTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRF9XSVRI
X1JFUExBQ0VNRU5UKFdLV2Vic2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUpOwotV0tf
RVhQT1JUIFdLQ29va2llTWFuYWdlclJlZiBXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKFdLQ29u
dGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEOwogV0tfRVhQT1JUIFdLR2VvbG9j
YXRpb25NYW5hZ2VyUmVmIFdLQ29udGV4dEdldEdlb2xvY2F0aW9uTWFuYWdlcihXS0NvbnRleHRS
ZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tJY29uRGF0YWJhc2VSZWYgV0tDb250ZXh0R2V0SWNv
bkRhdGFiYXNlKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIFdLX0VYUE9SVCBXS0tleVZhbHVlU3Rv
cmFnZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0S2V5VmFsdWVTdG9yYWdlTWFuYWdlcihXS0NvbnRl
eHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKFdLV2Vi
c2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCmluZGV4IGEwMjUwMTFmNzBjYzY1OWY1
ZmFhMDhhN2Q2Y2JiM2ZmNTZlZTZhMzguLjQ4YTI5YzQ1NjhhYjY3YjNiN2UxZWY5ODE1NmY2ZWZh
ODk2YjFkZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29u
dGV4dFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHRQcml2YXRlLmgKQEAgLTgzLDExICs4Myw4IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFdh
cm1Jbml0aWFsUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dCk7CiAvLyBBdCBzb21lIHBvaW50
IGl0IHNob3VsZCBiZSByZW1vdmVkLgogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0VXNlc05l
dHdvcmtQcm9jZXNzKFdLQ29udGV4dFJlZiwgYm9vbCk7CiAKLVdLX0VYUE9SVCB2b2lkIFdLQ29u
dGV4dFRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLQ29udGV4dFJlZik7CiBXS19FWFBPUlQgdm9p
ZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYpOwogCi1XS19F
WFBPUlQgdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VX
b3JrZXJUZXN0aW5nKFdLQ29udGV4dFJlZiwgYm9vbCk7Ci0KIHR5cGVkZWYgdm9pZCAoKldLQ29u
dGV4dEludmFsaWRNZXNzYWdlRnVuY3Rpb24pKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lKTsKIFdL
X0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEludmFsaWRNZXNzYWdlRnVuY3Rpb24oV0tDb250ZXh0
SW52YWxpZE1lc3NhZ2VGdW5jdGlvbiBpbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKTsKICAgICAKQEAg
LTk3LDggKzk0LDYgQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0Rm9udEFsbG93TGlzdChX
S0NvbnRleHRSZWYsIFdLQXJyYXlSZWYpOwogCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRQcmVj
b25uZWN0VG9TZXJ2ZXIoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLVVJMUmVmIHNlcnZlclVSTCkg
V0tfQ19BUElfREVQUkVDQVRFRDsKIAotV0tfRVhQT1JUIFdLUHJvY2Vzc0lEIFdLQ29udGV4dEdl
dE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihXS0NvbnRleHRSZWYgY29udGV4dCk7Ci0KIFdLX0VY
UE9SVCB2b2lkIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihXS0NvbnRleHRSZWYgY29udGV4
dCwgV0tTdHJpbmdSZWYgZG9tYWluLCBXS1N0cmluZ1JlZiBuYW1lLCBXS0FycmF5UmVmIG1pbWVU
eXBlcywgV0tBcnJheVJlZiBleHRlbnNpb25zKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dENs
ZWFyU3VwcG9ydGVkUGx1Z2lucyhXS0NvbnRleHRSZWYgY29udGV4dCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCmluZGV4IDY0OGYzMDA5NjFhNTA2MGM5Y2RmMDNl
M2NmODA0NThiZjJiYjUwZGQuLmI0NDczNDIxMjAwNjEzYzE5ZWMzYWM5YWQ2Njk5NzUzNGFiZWYx
OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcApAQCAtMzk4LDYg
KzM5OCwxMSBAQCB1aW50NjRfdCBXS1BhZ2VHZXRSZW5kZXJUcmVlU2l6ZShXS1BhZ2VSZWYgcGFn
ZSkKICAgICByZXR1cm4gdG9JbXBsKHBhZ2UpLT5yZW5kZXJUcmVlU2l6ZSgpOwogfQogCitXS1dl
YnNpdGVEYXRhU3RvcmVSZWYgV0tQYWdlR2V0V2Vic2l0ZURhdGFTdG9yZShXS1BhZ2VSZWYgcGFn
ZSkKK3sKKyAgICByZXR1cm4gdG9BUEkoJnRvSW1wbChwYWdlKS0+d2Vic2l0ZURhdGFTdG9yZSgp
KTsKK30KKwogV0tJbnNwZWN0b3JSZWYgV0tQYWdlR2V0SW5zcGVjdG9yKFdLUGFnZVJlZiBwYWdl
UmVmKQogewogICAgIHJldHVybiB0b0FQSSh0b0ltcGwocGFnZVJlZiktPmluc3BlY3RvcigpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgKaW5kZXggNjcwYjVlOWZkNGI0NTRh
MmI3ZWRmZDIyMzJhYWU5NTFjNDY3ZDA4My4uYzUxYjgxNjJjODk3MzRhYjE1MmJlZjBlOTkyMzM3
ZDU1ZjJkZThhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQ
YWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgKQEAgLTEx
OCw2ICsxMTgsOCBAQCBXS19FWFBPUlQgZG91YmxlIFdLUGFnZUdldEVzdGltYXRlZFByb2dyZXNz
KFdLUGFnZVJlZiBwYWdlKTsKIAogV0tfRVhQT1JUIHVpbnQ2NF90IFdLUGFnZUdldFJlbmRlclRy
ZWVTaXplKFdLUGFnZVJlZiBwYWdlKTsKIAorV0tfRVhQT1JUIFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiBXS1BhZ2VHZXRXZWJzaXRlRGF0YVN0b3JlKFdLUGFnZVJlZiBwYWdlKTsKKwogV0tfRVhQT1JU
IFdLSW5zcGVjdG9yUmVmIFdLUGFnZUdldEluc3BlY3RvcihXS1BhZ2VSZWYgcGFnZSk7CiAKIFdL
X0VYUE9SVCBXS1N0cmluZ1JlZiBXS1BhZ2VDb3B5VXNlckFnZW50KFdLUGFnZVJlZiBwYWdlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRh
U3RvcmVSZWYuY3BwCmluZGV4IDlkZGE1OTFjOTUxODlhYjBjMjVhYzU1NDY2YzBhMmJmYzM5Mjdl
YmMuLjY4NjExNGFhNWVkMGExMzE1ZTVhOWQ2MTk1MWI4ODAyYzc1ZjhhYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVm
LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRl
ICJBUElIVFRQQ29va2llU3RvcmUuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5Lmgi
CiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiV0tB
UElDYXN0LmgiCiAjaW5jbHVkZSAiV0tEaWN0aW9uYXJ5LmgiCkBAIC02OSw2ICs3MCwxNiBAQCBX
S1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tXZWJzaXRlRGF0YVN0b3JlQ3JlYXRlV2l0aENvbmZpZ3Vy
YXRpb24oV0tXZWJzaXRlRGF0YVN0bwogICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZSgqV2ViS2l0Ojp0b0ltcGwoY29uZmlndXJhdGlvbiks
IHNlc3Npb25JRCkubGVha1JlZigpKTsKIH0KIAordm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVUZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKQorewor
ICAgIFdlYktpdDo6dG9JbXBsKGRhdGFTdG9yZSktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7
Cit9CisKK1dLUHJvY2Vzc0lEIFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRl
bnRpZmllcihXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKQoreworICAgIHJldHVybiBX
ZWJLaXQ6OnRvSW1wbChkYXRhU3RvcmUpLT5uZXR3b3JrUHJvY2VzcygpLnByb2Nlc3NJZGVudGlm
aWVyKCk7Cit9CisKIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlUmVtb3ZlSVRQRGF0YUZvckRvbWFp
bihXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBXS1N0cmluZ1JlZiBob3N0LCB2
b2lkKiBjb250ZXh0LCBXS1dlYnNpdGVEYXRhU3RvcmVSZW1vdmVJVFBEYXRhRm9yRG9tYWluRnVu
Y3Rpb24gY2FsbGJhY2spCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0
b3JlUmVmLmgKaW5kZXggZTc3ZDA5YzEwN2QxZGEwNzgzZDA5YzA3ZTI4MDNkMDg3MTI1ZTQ4Yi4u
YWIyNjc3NDZiZTgwNzViMDE0YzlmZDgyMzM2MjJmYzU4ZjJlMjZiNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKQEAg
LTI5LDYgKzI5LDEzIEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLQmFzZS5oPgogI2luY2x1ZGUgPFdl
YktpdC9XS0RlcHJlY2F0ZWQuaD4KIAorI2lmIGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX1dJ
TjMyKQordHlwZWRlZiBpbnQgV0tQcm9jZXNzSUQ7CisjZWxzZQorI2luY2x1ZGUgPHVuaXN0ZC5o
PgordHlwZWRlZiBwaWRfdCBXS1Byb2Nlc3NJRDsKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3Bs
dXMKIGV4dGVybiAiQyIgewogI2VuZGlmCkBAIC01MCw2ICs1NywxMSBAQCBXS19FWFBPUlQgdm9p
ZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tl
dFRlc3RpbmcoVwogCiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hl
ZENyZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogCitXS19F
WFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0
YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFT
dG9yZSk7CisKK1dLX0VYUE9SVCBXS1Byb2Nlc3NJRCBXS1dlYnNpdGVEYXRhU3RvcmVHZXROZXR3
b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSk7CisK
IFdLX0VYUE9SVCBib29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogV0tfRVhQT1JU
IHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
V0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUpOwogdHlwZWRl
ZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0VwaGVtZXJhbEZ1bmN0aW9uKShi
b29sIGlzRXBoZW1lcmFsLCB2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQppbmRleCBmZjMwOTQ5
ODZjMjQzZDA0NzRmMjUyZDM5MWU2Y2NiNzRmMWZlZDViLi5lN2Y4YWQ0MGFlNjRhNmMyMTc2OGVk
MzJjNjU5ZjY5MzgzY2IwMDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQpAQCAtNDA2LDI4ICs0MDYsNiBAQCBzdGF0aWMgTlNE
aWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJp
bmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJTdXBwb3J0ZWRQbHVnaW5zKCk7
CiB9CiAKLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCi17Ci0gICAgX3Byb2Nlc3NQ
b29sLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29y
a1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmRO
ZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0KLQotLSAo
dm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSlj
b21wbGV0aW9uSGFuZGxlcgotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNz
UHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2Nr
UHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwot
ICAgIH0pOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUKLXsKLSAg
ICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQotCiAtICh2
b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29ya2VycwogewogICAgIF9wcm9jZXNzUG9vbC0+dGVybWlu
YXRlU2VydmljZVdvcmtlcnMoKTsKQEAgLTQzNSwxMiArNDEzLDcgQEAgc3RhdGljIE5TRGljdGlv
bmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBI
YXNoTWFwPFMKIAogLSAodm9pZClfc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzczoo
Qk9PTCl1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzCiB7Ci0gICAgX3Byb2Nlc3NQb29s
LT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MpOwotfQotCi0tIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCi17
Ci0gICAgcmV0dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7Cisg
ICAgV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIH0KIAogLSAocGlkX3QpX3By
ZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyCkBAIC01NjAsMTggKzUzMyw2IEBAIHN0YXRpYyBOU0Rp
Y3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmlu
ZywgSGFzaE1hcDxTCiAgICAgX3Byb2Nlc3NQb29sLT5zZXRDb29raWVTdG9yYWdlUGFydGl0aW9u
aW5nRW5hYmxlZChlbmFibGVkKTsKIH0KIAotLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dy
b3VuZDooQk9PTCliYWNrZ3JvdW5kCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zeW50aGVzaXplQXBw
SXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOwotfQotCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xD
ZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzCi17Ci0jaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQotICAgIF9wcm9jZXNzUG9vbC0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiAtIChpZCA8X1dLR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRlcj4pX2Nv
cmVMb2NhdGlvblByb3ZpZGVyCiB7CkBAIC02MDQsMTEgKzU2NSw2IEBAIHN0YXRpYyBOU0RpY3Rp
b25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmluZywg
SGFzaE1hcDxTCiAgICAgfSk7CiB9CiAKLS0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50Ci17Ci0gICAgcmV0dXJuIF9w
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoZW50aXRs
ZW1lbnQpOwotfQotCiAtICh2b2lkKV9jbGVhclBlcm1hbmVudENyZWRlbnRpYWxzRm9yUHJvdGVj
dGlvblNwYWNlOihOU1VSTFByb3RlY3Rpb25TcGFjZSAqKXByb3RlY3Rpb25TcGFjZQogewogICAg
IF9wcm9jZXNzUG9vbC0+Y2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25TcGFj
ZShXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UocHJvdGVjdGlvblNwYWNlKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0
ZS5oCmluZGV4IDY3NjkwMTVlMDg1NTg5OTRjZDhhMjE5YTE3YTljNjhhZGUzYjUzODMuLjkyODY0
ODE4ZWQwNDE5OWJjMzRlODFkNjAxNTczODg4MjVkYWZjMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oCkBA
IC04NywxNCArODcsOSBAQAogLSAoX1dLRG93bmxvYWQgKilfcmVzdW1lRG93bmxvYWRGcm9tRGF0
YTooTlNEYXRhICopcmVzdW1lRGF0YSB3ZWJzaXRlRGF0YVN0b3JlOihXS1dlYnNpdGVEYXRhU3Rv
cmUgKilkYXRhU3RvcmUgIHBhdGg6KE5TU3RyaW5nICopcGF0aCBvcmlnaW5hdGluZ1dlYlZpZXc6
KFdLV2ViVmlldyAqKXdlYlZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKTsKIAogLy8gVGVzdCBvbmx5LiBTaG91bGQgYmUgY2FsbGVkIG9ubHkg
d2hpbGUgbm8gd2ViIGNvbnRlbnQgcHJvY2Vzc2VzIGFyZSBydW5uaW5nLgotLSAodm9pZClfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygx
My4wKSk7Ci0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lk
KF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Ci0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxs
U3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4w
KSk7Ci0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAtICh2b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSwgaW9zKDEyLjApKTsKIAogLy8gVGVz
dCBvbmx5LgotLSAocGlkX3QpX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllciBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjEzKSwgaW9zKDExLjApKTsKIC0gKHBpZF90KV9wcmV3YXJtZWRQcm9jZXNz
SWRlbnRpZmllciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIAog
Ly8gVGVzdCBvbmx5LgpAQCAtMTIyLDEzICsxMTcsMTAgQEAKIC0gKHZvaWQpX3ByZWNvbm5lY3RU
b1NlcnZlcjooTlNVUkwgKilzZXJ2ZXJVUkwgV0tfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNF
TUVOVCgiV0tXZWJWaWV3Ll9wcmVjb25uZWN0VG9TZXJ2ZXIiLCBtYWNvcygxMC4xMy40LCBXS19N
QUNfVEJBKSwgaW9zKDExLjMsIFdLX0lPU19UQkEpKTsKIAogLy8gVGVzdCBvbmx5LgotLSAodm9p
ZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFsbG93
cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykpOwogLSAodm9pZClf
Z2V0QWN0aXZlUGFnZXNPcmlnaW5zSW5XZWJQcm9jZXNzRm9yVGVzdGluZzoocGlkX3QpcGlkIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TQXJyYXk8TlNTdHJpbmcgKj4gKikpY29tcGxldGlv
bkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKLS0g
KEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAq
KWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7
CiAtICh2b2lkKV9jbGVhclBlcm1hbmVudENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNwYWNlOihO
U1VSTFByb3RlY3Rpb25TcGFjZSAqKXByb3RlY3Rpb25TcGFjZSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIAogQHByb3BlcnR5IChub25hdG9taWMsIGdldHRlcj1f
aXNDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZCwgc2V0dGVyPV9zZXRDb29raWVTdG9y
YWdlUGFydGl0aW9uaW5nRW5hYmxlZDopIEJPT0wgX2Nvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdF
bmFibGVkIFdLX0FQSV9ERVBSRUNBVEVEKCJQYXJ0aXRpb25lZCBjb29raWVzIGFyZSBubyBsb25n
ZXIgc3VwcG9ydGVkIiwgbWFjb3MoMTAuMTIuMywgMTAuMTQuNCksIGlvcygxMC4zLCAxMi4yKSk7
Ci0tICh2b2lkKV9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIC8vIFRlc3Qgb25seS4K
IC0gKHZvaWQpX3NlZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRm9yVGVzdGluZ1dpdGhGaXJzdFBh
cnR5OihOU1VSTCAqKWZpcnN0UGFydHlVUkwgdGhpcmRQYXJ0eTooTlNVUkwgKil0aGlyZFBhcnR5
VVJMIHNob3VsZFNjaGVkdWxlTm90aWZpY2F0aW9uOihCT09MKXNob3VsZFNjaGVkdWxlTm90aWZp
Y2F0aW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVy
ICBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURh
dGFTdG9yZS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVE
YXRhU3RvcmUubW0KaW5kZXggMjk4ZDljZWM5ZTg0ZDhhNTEyMjA2NWNjOTkyMzNlZjRmMGI5NTM4
OS4uZGU2ZDVlNjI4ODdiNjU0Yzc0NjA4ODNhZjhmM2U3MjA5MzY3NTIyMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3Jl
Lm1tCkBAIC02MTcsNiArNjE3LDExIEBAIHN0YXRpYyBWZWN0b3I8V2ViS2l0OjpXZWJzaXRlRGF0
YVJlY29yZD4gdG9XZWJzaXRlRGF0YVJlY29yZHMoTlNBcnJheSAqZGF0YVJlY29yCiAgICAgfSk7
CiB9CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihO
U1N0cmluZyAqKWVudGl0bGVtZW50Cit7CisgICAgcmV0dXJuIF93ZWJzaXRlRGF0YVN0b3JlLT5u
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhlbnRpdGxlbWVudCk7Cit9CisK
IC0gKGlkIDxfV0tXZWJzaXRlRGF0YVN0b3JlRGVsZWdhdGU+KV9kZWxlZ2F0ZQogewogICAgIHJl
dHVybiBfZGVsZWdhdGUuZ2V0KCkuZ2V0KCk7CkBAIC02NjgsNCArNjczLDM3IEBAIHN0YXRpYyBW
ZWN0b3I8V2ViS2l0OjpXZWJzaXRlRGF0YVJlY29yZD4gdG9XZWJzaXRlRGF0YVJlY29yZHMoTlNB
cnJheSAqZGF0YVJlY29yCiAjZW5kaWYKIH0KIAorLSAodm9pZClfdGVybWluYXRlTmV0d29ya1By
b2Nlc3MKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3Mo
KTsKK30KKworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9p
ZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5z
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhbY29tcGxldGlvbkhh
bmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseQoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7CisKK30KKworLSAo
dm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lCit7CisgICAgX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOworfQorCistICh2b2lkKV9zeW50aGVz
aXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQKK3sKKyAgICBfd2Vic2l0ZURhdGFT
dG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91
bmQpOworfQorCistIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCit7CisgICAgcmV0
dXJuIF93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnByb2Nlc3NJZGVudGlmaWVy
KCk7Cit9CisKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCmluZGV4IDk5MzIwMTA0NmI1
NTFjM2YyOGRmMmRjMGEwMzQ2ZDdiYzc5YWM1ZjQuLjg1ZmQ5OTg2ZTI4NjZmZjM3ODY5ZjJkYzc4
NTU3OTE4NDRiMzFmM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaApAQCAtODUsOSArODUs
MTggQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dlYnNpdGVEYXRhU3RvcmVG
ZXRjaE9wdGlvbnMpIHsKIAogLSAodm9pZClfcmVuYW1lT3JpZ2luOihOU1VSTCAqKW9sZE5hbWUg
dG86KE5TVVJMICopbmV3TmFtZSBmb3JEYXRhT2ZUeXBlczooTlNTZXQ8TlNTdHJpbmcgKj4gKilk
YXRhVHlwZXMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5k
bGVyOwogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzoo
TlNTdHJpbmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOworCiBAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHdl
YWspIGlkIDxfV0tXZWJzaXRlRGF0YVN0b3JlRGVsZWdhdGU+IF9kZWxlZ2F0ZSBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZWFkb25seSwgY29weSkgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKl9jb25maWd1
cmF0aW9uOwogCistICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyBXS19BUElfQVZBSUxB
QkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc2VuZE5l
dHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFu
ZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lk
KV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19N
QUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tn
cm91bmQ6KEJPT0wpYmFja2dyb3VuZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOworLSAocGlkX3QpX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllciBX
S19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCiBA
ZW5kCiAKIE5TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAppbmRleCAxZWU3M2Vi
YzBlYTAzNmY4NmIzZmU5NDQxNDkwNzJlNmFjNGRjNzY3Li43NzAxNDk5ODM2ZWU0NGY5YWNmMGUy
NzBkNzBjOTVkMTZiZTY3OGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcApAQCAtMjEsNiArMjEsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdENvb2tpZU1hbmFnZXIuaCIKIAor
I2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJTb3VwQ29va2llUGVy
c2lzdGVudFN0b3JhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5Lmgi
CiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUuaCIKQEAgLTU2LDYgKzU3LDEy
IEBAIGVudW0gewogfTsKIAogc3RydWN0IF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSB7Cisg
ICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChkYXRhTWFuYWdlcik7CisgICAgICAgIHJldHVybiB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoZGF0YU1hbmFnZXIpLm5ldHdvcmtQcm9jZXNzKCkuY29v
a2llTWFuYWdlcigpOworICAgIH0KKwogICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQoZGF0YU1hbmFnZXIpOwpAQCAtNjQsOCArNzEsNyBA
QCBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKIAogICAgIH5fV2ViS2l0Q29v
a2llTWFuYWdlclByaXZhdGUoKQogICAgIHsKLSAgICAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhkYXRhTWFuYWdlcikp
Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOwor
ICAgICAgICBjb29raWVNYW5hZ2VyKCkuc2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9u
SUQoKSwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBk
YXRhTWFuYWdlcjsKQEAgLTEzOSwxMSArMTQ1LDkgQEAgV2ViS2l0Q29va2llTWFuYWdlciogd2Vi
a2l0Q29va2llTWFuYWdlckNyZWF0ZShXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW4K
IHsKICAgICBXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyID0gV0VCS0lUX0NPT0tJRV9NQU5B
R0VSKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT09LSUVfTUFOQUdFUiwgbnVsbHB0cikpOwog
ICAgIG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyID0gZGF0YU1hbmFnZXI7Ci0gICAgZm9yIChh
dXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29s
cyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1
cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVPYnNlcnZlckNhbGxi
YWNrKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbbWFuYWdlcl0gewotICAgICAgICAgICAg
Z19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxzW0NIQU5HRURdLCAwKTsKLSAgICAgICAgfSk7
Ci0gICAgfQorICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVPYnNl
cnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbbWFuYWdlcl0geworICAg
ICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOworICAgIH0p
OwogICAgIHJldHVybiBtYW5hZ2VyOwogfQogCkBAIC0xNzMsOCArMTc3LDcgQEAgdm9pZCB3ZWJr
aXRfY29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZShXZWJLaXRDb29raWVNYW5h
Z2VyKiBtYW5hZ2VyLAogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRh
TWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0
Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6OmZyb21VVEY4KGZpbGVu
YW1lKSwgdG9Tb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0b3JhZ2UpKTsKKyAgICBt
YW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuc2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uo
c2Vzc2lvbklELCBTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2llUGVyc2lz
dGVudFN0b3JhZ2VUeXBlKHN0b3JhZ2UpKTsKIH0KIAogLyoqCkBAIC0xOTIsOCArMTk1LDcgQEAg
dm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3koV2ViS2l0Q29va2ll
TWFuYWdlciogbWFuYWdlciwgV2ViS2kKIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9J
U19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSk7CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpLT5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYt
PnNlc3Npb25JRCgpLCB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0p
OworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB0b0hUVFBDb29raWVBY2NlcHRQb2xp
Y3kocG9saWN5KSwgW10oKSB7IH0pOwogfQogCiAvKioKQEAgLTIyNCw3ICsyMjYsNyBAQCB2b2lk
IHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5h
Z2VyKiBtYW5hZ2VyLCBHQ2FuYwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcHJvY2Vz
c1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZN
b3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgeworICAg
IG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CiAgICAgICAgIGdfdGFza19yZXR1
cm5faW50KHRhc2suZ2V0KCksIHRvV2ViS2l0Q29va2llQWNjZXB0UG9saWN5KHBvbGljeSkpOwog
ICAgIH0pOwogfQpAQCAtMjY5LDExICsyNzEsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9hZGRfY29va2llKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIFNvdXBDb29raWUqCiAg
ICAgZ19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9
IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNl
ckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBz
YW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJv
Y2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBw
b29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJv
Y2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29v
a2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgeyBXZWJDb3JlOjpDb29raWUoY29va2ll
KSB9LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIG1hbmFnZXItPnByaXYtPmNvb2tp
ZU1hbmFnZXIoKS5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNv
cmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAg
IGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KQEAg
LTMyMCwxMSArMzE4LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMo
V2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgY29uc3QgZ2NoYXIKICAgICBnX3JldHVybl9p
Zl9mYWlsKHVyaSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFz
a19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAg
Ly8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFi
YXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0
aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3Qg
YXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bv
b2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1
cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVzKG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNr
ID0gV1RGTW92ZSh0YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMp
IHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llcyhtYW5hZ2Vy
LT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpLCBb
dGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29r
aWVzKSB7CiAgICAgICAgIEdMaXN0KiBjb29raWVzTGlzdCA9IG51bGxwdHI7CiAgICAgICAgIGZv
ciAoYXV0byYgY29va2llIDogY29va2llcykKICAgICAgICAgICAgIGNvb2tpZXNMaXN0ID0gZ19s
aXN0X3ByZXBlbmQoY29va2llc0xpc3QsIGNvb2tpZS50b1NvdXBDb29raWUoKSk7CkBAIC0zNzgs
MTEgKzM3Miw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUoV2Vi
S2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpCiAgICAgZ19yZXR1cm5faWZfZmFp
bChjb29raWUpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tf
bmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8v
IENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFz
ZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhl
bSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1
dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29s
cyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBw
bGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+ZGVsZXRlQ29va2llKG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCBXZWJDb3JlOjpDb29raWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3Zl
KHRhc2spXSgpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuZGVsZXRlQ29v
a2llKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBXZWJDb3JlOjpDb29raWUoY29va2llKSwg
W3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFu
KHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcAppbmRleCA4OWJlNTZhZDcx
ZDcxNTY5MTJhMjY5MTUzMDU3ZGY1MjdjZGQ0NDYwLi5jZmYwMzU4NmRmOGExZmI5NmE2MmEwMTdh
M2M0NmU1ZjQwZGUyZDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtNDA0LDcgKzQwNCw2IEBAIHN0YXRpYyB2
b2lkIHdlYmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgICAg
IHByaXYtPndlYnNpdGVEYXRhTWFuYWdlciA9IGFkb3B0R1JlZih3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfbmV3KCJsb2NhbC1zdG9yYWdlLWRpcmVjdG9yeSIsIHByaXYtPmxvY2FsU3RvcmFn
ZURpcmVjdG9yeS5kYXRhKCksIG51bGxwdHIpKTsKIAogICAgIHByaXYtPnByb2Nlc3NQb29sID0g
V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShjb25maWd1cmF0aW9uKTsKLSAgICBwcml2LT5wcm9jZXNz
UG9vbC0+c2V0UHJpbWFyeURhdGFTdG9yZSh3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRh
U3RvcmUocHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKSk7CiAgICAgcHJpdi0+cHJvY2Vz
c1Bvb2wtPnNldFVzZXJNZXNzYWdlSGFuZGxlcihbd2ViQ29udGV4dF0oVXNlck1lc3NhZ2UmJiBt
ZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJNZXNzYWdlJiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKSB7CiAgICAgICAgIC8vIFNpbmsgdGhlIGZsb2F0aW5nIHJlZi4KICAgICAgICAg
R1JlZlB0cjxXZWJLaXRVc2VyTWVzc2FnZT4gdXNlck1lc3NhZ2UgPSB3ZWJraXRVc2VyTWVzc2Fn
ZUNyZWF0ZShXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CkBA
IC0xNjAzLDggKzE2MDIsOCBAQCB2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9wcmVmZXRjaF9kbnMo
V2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogaG9zdAogICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpKTsKICAgICBnX3JldHVybl9p
Zl9mYWlsKGhvc3RuYW1lKTsKIAotICAgIGlmIChjb250ZXh0LT5wcml2LT5kbnNQcmVmZXRjaGVk
SG9zdHMuYWRkKGhvc3RuYW1lKS5pc05ld0VudHJ5KQotICAgICAgICBjb250ZXh0LT5wcml2LT5w
cm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpQcmVmZXRjaEROUyhTdHJpbmc6OmZyb21VVEY4KGhvc3RuYW1lKSkpOworICAgIGF1dG8m
IHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUo
Y29udGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKKyAgICB3ZWJzaXRlRGF0
YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlBy
ZWZldGNoRE5TKFN0cmluZzo6ZnJvbVVURjgoaG9zdG5hbWUpKSwgMCk7CiAgICAgY29udGV4dC0+
cHJpdi0+ZG5zUHJlZmV0Y2hIeXN0ZXJlcmlzLmltcHVsc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNz
aW9uLmNwcAppbmRleCA0YWI0N2ZmZjU5MTFlZWMzN2U1NmJjNWJiYjMyOWViYWVhN2QzODY1Li4z
MDA2ZjRmYWU2YzQzYzI2YmY0MDgyMmI2ZGU4NjhlZjJlMDJjZmJiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNz
aW9uLmNwcApAQCAtMTM5Miw4ICsxMzkyLDggQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
YWRkU2luZ2xlQ29va2llKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb24KIAog
ICAgIGNvb2tpZS5odHRwT25seSA9ICpodHRwT25seTsKIAotICAgIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldENvb2tpZXMocGFnZS0+d2Vi
c2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBbY2FsbGJhY2tdKCkgewor
ICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlciA9IHBhZ2UtPndlYnNpdGVE
YXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVN
YW5hZ2VyLnNldENvb2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7
IGNvb2tpZSB9LCBbY2FsbGJhY2tdKCkgewogICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3Mo
KTsKICAgICB9KTsKIH0KQEAgLTE0MDksOCArMTQwOSw4IEBAIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tp
ZXMoCiAKICAgICBTdHJpbmcgaG9zdCA9IGFjdGl2ZVVSTC5ob3N0KCkudG9TdHJpbmcoKTsKIAot
ICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wt
PnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Np
b25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoaG9zdCkgfSk7
CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyID0gcGFnZS0+d2Vic2l0
ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tp
ZU1hbmFnZXIuZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3Jl
KCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZCho
b3N0KSB9KTsKIAogICAgIHJldHVybiB7IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oCmluZGV4IDQxYzBhMGZiZjUwNmVmYTE0MDhiY2Vm
OWFmOGE5MGI4NWExYWQwOGEuLjRmMzk4YjUzMGY2MDg1NzVjOTY3YjgzYzc0ZmEyZjQzMjhmNmNl
M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQ
cm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94
eS5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BdXhpbGlhcnlQcm9j
ZXNzUHJveHkoKTsKIAogICAgIHZvaWQgY29ubmVjdCgpOwotICAgIHZvaWQgdGVybWluYXRlKCk7
CisgICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZSgpOwogCiAgICAgdmlydHVhbCBQcm9jZXNzVGhy
b3R0bGVyJiB0aHJvdHRsZXIoKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
LmgKaW5kZXggZGJlNDRmOTU5NDEwNTExMjE1MTI4ZDI5ZDIxNGVlZTA3NGFhZjg0Yy4uNGM4NDVh
MGVjNzI1NjU5Y2ZlNzljZWEzNWQzY2JhOTY2ODM0NjE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50LmgKQEAgLTQxLDExICs0MSwxMSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNs
YXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OwogCiBjbGFzcyBMZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgZmluYWwgOiBwdWJsaWMgQVBJOjpDdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQgewotcHJpdmF0ZToKK3B1YmxpYzoKICAgICB2b2lkIHN0YXJ0TG9hZGlu
ZyhMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYsIExlZ2FjeUN1c3RvbVByb3RvY29s
SUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGZpbmFsOwogICAgIHZvaWQgc3Rv
cExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkmLCBMZWdhY3lDdXN0b21Q
cm90b2NvbElEKSBmaW5hbDsKICAgICB2b2lkIGludmFsaWRhdGUoTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHkmKSBmaW5hbDsKLQorcHJpdmF0ZToKICAgICBIYXNoTWFwPExlZ2FjeUN1
c3RvbVByb3RvY29sSUQsIFJldGFpblB0cjxXS0N1c3RvbVByb3RvY29sTG9hZGVyPj4gbV9sb2Fk
ZXJNYXA7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJQcm9jZXNzUG9vbENvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
UHJvY2Vzc1Bvb2xDb2NvYS5tbQppbmRleCA3NmQ3YTY0MDQxYTI5MWQ1ZjI5NzM1MTc2ZTMxZWE3
MGY1ZWQ1NTZjLi4xOWVmY2E2YTY0MGNiMmYzMWMyYTg3NTUwNmIxZDY2OWQ2ZGM3NmE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29j
b2EubW0KQEAgLTEzNCw4ICsxMzQsOSBAQCBzdGF0aWMgdm9pZCByZWdpc3RlclVzZXJEZWZhdWx0
c0lmTmVlZGVkKCkKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNz
aW9uU3RhdGUoKQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByb2Nlc3NTdXBwcmVzc2lv
bkVuYWJsZWQoKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3Rv
cmUoW2VuYWJsZWQgPSBwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCldIChXZWJzaXRlRGF0YVN0
b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2V0
UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChlbmFibGVkKTsKKyAgICB9KTsKIAogI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIGlmICghbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNh
YmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCkpCkBAIC0xNjYsOCArMTY3LDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplKCkKICAgICBpZiAoIVtbTlNVc2VyRGVmYXVs
dHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJXZWJLaXRTdXBwcmVzc01lbW9y
eVByZXNzdXJlSGFuZGxlciJdKQogICAgICAgICBpbnN0YWxsTWVtb3J5UHJlc3N1cmVIYW5kbGVy
KCk7CiAKLSAgICBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1
ZTxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkpOwotCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogICAgIGlmICghX01HQ2FjaGVW
YWxpZCgpKSB7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9nbG9iYWxfcXVl
dWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIF57CkBAIC00OTMsMjIgKzQ5
Miw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhCiAKICAgICBOU1VzZXJEZWZhdWx0cyAqZGVm
YXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwogCi0gICAgewot
ICAgICAgICBib29sIGlzU2FmYXJpID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgaXNNaW5pQnJvd3Nl
ciA9IGZhbHNlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIGlzU2FmYXJpID0g
V2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTW9iaWxlU2FmYXJpKCk7Ci0gICAgICAgIGlzTWlu
aUJyb3dzZXIgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNNaW5pQnJvd3NlcigpOwotI2Vs
aWYgUExBVEZPUk0oTUFDKQotICAgICAgICBpc1NhZmFyaSA9IFdlYkNvcmU6Ok1hY0FwcGxpY2F0
aW9uOjppc1NhZmFyaSgpOwotICAgICAgICBpc01pbmlCcm93c2VyID0gV2ViQ29yZTo6TWFjQXBw
bGljYXRpb246OmlzTWluaUJyb3dzZXIoKTsKLSNlbmRpZgotICAgICAgICBpZiAoaXNTYWZhcmkg
fHwgaXNNaW5pQnJvd3NlcikgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cFByb3h5ID0gVVJMKFVS
TCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0cmluZyAqKVdlYktpdDJIVFRQUHJveHlE
ZWZhdWx0c0tleV0pOwotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cHNQcm94eSA9IFVSTChVUkwoKSwg
W2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcgKilXZWJLaXQySFRUUFNQcm94eURlZmF1
bHRzS2V5XSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtBVFND
b250ZXh0ID0gYWRvcHRDRihfQ0ZOZXR3b3JrQ29weUFUU0NvbnRleHQoKSk7CiAKICAgICBwYXJh
bWV0ZXJzLnNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyID0gW2RlZmF1bHRzIGJv
b2xGb3JLZXk6V2ViS2l0U3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXJEZWZhdWx0c0tleV07
CkBAIC01MjIsMTIgKzUwNSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhCiAgICAgTlNOdW1i
ZXIgKmRhdGFiYXNlRW5hYmxlZFZhbHVlID0gW2RlZmF1bHRzIG9iamVjdEZvcktleTpbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIkludGVybmFsRGVidWclQCIsIFdlYlByZWZlcmVuY2VzS2V5
Ojppc0lUUERhdGFiYXNlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKICAg
ICBpZiAoZGF0YWJhc2VFbmFibGVkVmFsdWUpCiAgICAgICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5h
YmxlSVRQRGF0YWJhc2UgPSBkYXRhYmFzZUVuYWJsZWRWYWx1ZS5ib29sVmFsdWU7Ci0gICAgZWxz
ZQotICAgICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gbV9kZWZhdWx0
UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLmlzSVRQRGF0YWJhc2VFbmFibGVkKCk7CiAKICAgICBw
YXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSA9IFtkZWZhdWx0cyBi
b29sRm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRXhwZXJpbWVudGFsJUAiLCBX
ZWJQcmVmZXJlbmNlc0tleTo6YWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlRW5hYmxlZEtleSgp
LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKLQotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFwcEhhc1JlcXVlc3RlZENy
b3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbiA9IGhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRy
YWNraW5nUGVybWlzc2lvbigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUlu
dmFsaWRhdGVDb250ZXh0KCkKQEAgLTYwNiwxMSArNTg1LDYgQEAgYm9vbCBXZWJQcm9jZXNzUG9v
bDo6cHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX3VzZXJP
YnNlcnZhYmxlUGFnZUNvdW50ZXIudmFsdWUoKSAmJiAhbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNh
YmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCk7CiB9CiAKLWJvb2wgV2ViUHJvY2Vzc1Bvb2w6Om5l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYgZW50aXRs
ZW1lbnQpCi17Ci0gICAgcmV0dXJuIFdURjo6aGFzRW50aXRsZW1lbnQoZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwgZW50aXRsZW1lbnQudXRmOCgp
LmRhdGEoKSk7Ci19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFD
Q0FUQUxZU1QpCiBmbG9hdCBXZWJQcm9jZXNzUG9vbDo6ZGlzcGxheUJyaWdodG5lc3MoKQogewpA
QCAtOTQ3LDIzICs5MjEsNCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlckhpZ2hEeW5h
bWljUmFuZ2VDaGFuZ2VDYWxsYmFjaygpCiB9CiAjZW5kaWYKIAotT1NPYmplY3RQdHI8eHBjX29i
amVjdF90PiBXZWJQcm9jZXNzUG9vbDo6eHBjRW5kcG9pbnRNZXNzYWdlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9lbmRwb2ludE1lc3NhZ2U7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
bmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKE9TT2JqZWN0UHRyPHhwY19v
YmplY3RfdD4gZW5kcG9pbnRNZXNzYWdlKQotewotICAgIG1fZW5kcG9pbnRNZXNzYWdlID0gZW5k
cG9pbnRNZXNzYWdlOwotCi0gICAgZm9yIChhdXRvIHByb2Nlc3MgOiBtX3Byb2Nlc3Nlcykgewot
ICAgICAgICBpZiAocHJvY2Vzcy0+c3RhdGUoKSAhPSBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OlN0
YXRlOjpSdW5uaW5nKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcHJvY2Vz
cy0+Y29ubmVjdGlvbigpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8gY29u
bmVjdGlvbiA9IHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpOwotICAgICAg
ICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbiwgZW5kcG9pbnRNZXNzYWdl
LmdldCgpKTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCmluZGV4IGM1
ZGU0ZTdkMGY1OTE5NGY0M2EwMjNiMDg5ZTM3MmM1OGNmOGVlMDYuLmY3Y2ZmODUyZjBiYTZkMDE1
NTExNjVkZDhhOWY3ZDU3NjNiMDA3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAKQEAgLTc1LDggKzc1LDggQEAgdm9pZCBE
b3dubG9hZFByb3h5OjpjYW5jZWwoKQogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzID0g
bV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2Fk
SUQpLCAwKTsKKyAgICBpZiAobV9kYXRhU3RvcmUpCisgICAgICAgIG1fZGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9h
ZChtX2Rvd25sb2FkSUQpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5OjppbnZhbGlkYXRl
KCkKQEAgLTEwMywxNSArMTAzLDEzIEBAIFdlYlBhZ2VQcm94eSogRG93bmxvYWRQcm94eTo6b3Jp
Z2luYXRpbmdQYWdlKCkgY29uc3QKICNpZiBQTEFURk9STShDT0NPQSkKIHZvaWQgRG93bmxvYWRQ
cm94eTo6cHVibGlzaFByb2dyZXNzKGNvbnN0IFVSTCYgVVJMKQogewotICAgIGlmICghbV9wcm9j
ZXNzUG9vbCkKKyAgICBpZiAoIW1fZGF0YVN0b3JlKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7Ci0gICAgICAgIGJv
b2wgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGUoVVJMLmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0
ZSwgaGFuZGxlKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkU2FuZGJveEV4dGVuc2lv
biwgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24pOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKG1fZG93
bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKLSAgICB9CisgICAgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlIGhhbmRsZTsKKyAgICBib29sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKFVSTC5maWxlU3lzdGVtUGF0aCgpLCBTYW5kYm94RXh0
ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIGhhbmRsZSk7CisgICAgQVNTRVJUX1VOVVNFRChjcmVh
dGVkU2FuZGJveEV4dGVuc2lvbiwgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24pOworICAgIG1fZGF0
YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQ
dWJsaXNoRG93bmxvYWRQcm9ncmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFuZGxlKSwgMCk7CiB9
CiAjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCiAKQEAgLTEzMSwxMSArMTI5LDEwIEBAIHZvaWQg
RG93bmxvYWRQcm94eTo6ZGlkU3RhcnQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBTdHJpbmcmIHN1Z2dlCiAKIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYgYXV0aGVudGljYXRp
b25DaGFsbGVuZ2UsIHVpbnQ2NF90IGNoYWxsZW5nZUlEKQogewotICAgIGlmICghbV9wcm9jZXNz
UG9vbCkKKyAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wgfHwgIW1fZGF0YVN0b3JlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkgPSBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSksIGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX3Byb2Nlc3NQb29sLT5uZXR3b3JraW5nUHJv
Y2Vzc0Nvbm5lY3Rpb24oKSksIG51bGxwdHIpOwotCisgICAgYXV0byBhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZVByb3h5ID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eTo6Y3JlYXRlKFdURk1v
dmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBjaGFsbGVuZ2VJRCwgbWFrZVJlZigqbV9kYXRh
U3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpKSwgbnVsbHB0cik7CiAgICAgbV9w
cm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UoKnRoaXMsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuZ2V0KCkpOwogfQogCkBA
IC0xNDYsMTUgKzE0MywxMCBAQCB2b2lkIERvd25sb2FkUHJveHk6OndpbGxTZW5kUmVxdWVzdChS
ZXNvdXJjZVJlcXVlc3QmJiBwcm9wb3NlZFJlcXVlc3QsIGNvbnN0IFJlcwogCiAgICAgbV9wcm9j
ZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS53aWxsU2VuZFJlcXVlc3QoKnRoaXMsIFdURk1vdmUo
cHJvcG9zZWRSZXF1ZXN0KSwgcmVkaXJlY3RSZXNwb25zZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKV0oUmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVxdWVzdCkgewogICAgICAg
ICBtX3JlZGlyZWN0Q2hhaW4uYXBwZW5kKG5ld1JlcXVlc3QudXJsKCkpOwotCi0gICAgICAgIGlm
ICghcHJvdGVjdGVkVGhpcy0+bV9wcm9jZXNzUG9vbCkKKyAgICAgICAgaWYgKCFwcm90ZWN0ZWRU
aGlzLT5tX2RhdGFTdG9yZSkKICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBhdXRvKiBu
ZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVjdGVkVGhpcy0+bV9wcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzc1Byb3h5KQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzUHJveHktPnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZVdpbGxTZW5kUmVxdWVzdChwcm90ZWN0ZWRUaGlzLT5t
X2Rvd25sb2FkSUQsIG5ld1JlcXVlc3QpLCAwKTsKKyAgICAgICAgYXV0byYgbmV0d29ya1Byb2Nl
c3NQcm94eSA9IHByb3RlY3RlZFRoaXMtPm1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpOwor
ICAgICAgICBuZXR3b3JrUHJvY2Vzc1Byb3h5LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpDb250aW51ZVdpbGxTZW5kUmVxdWVzdChwcm90ZWN0ZWRUaGlzLT5tX2Rvd25sb2FkSUQsIG5l
d1JlcXVlc3QpLCAwKTsKICAgICB9KTsKIH0KIApAQCAtMTc5LDE2ICsxNzEsMTQgQEAgdm9pZCBE
b3dubG9hZFByb3h5OjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZUFzeW5j
KERvd25sb2FkSUQgZG93bmwKICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRlY2lkZURlc3Rp
bmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKCp0aGlzLCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
c2FuaXRpemVTdWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSksIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRvd25sb2FkSUQgPSBkb3dubG9hZElEXSAoQWxs
b3dPdmVyd3JpdGUgYWxsb3dPdmVyd3JpdGUsIFN0cmluZyBkZXN0aW5hdGlvbikgeworICAgIG1f
cHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2Vz
dGVkRmlsZW5hbWUoKnRoaXMsIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzYW5pdGl6ZVN1Z2dlc3Rl
ZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKSwgZG93bmxvYWRJRF0gKEFsbG93T3ZlcndyaXRlIGFsbG93T3ZlcndyaXRlLCBT
dHJpbmcgZGVzdGluYXRpb24pIHsKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNh
bmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgICAgIGlmICghZGVzdGluYXRpb24uaXNOdWxsKCkp
CiAgICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoZGVzdGluYXRpb24s
IFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZSk7CiAKLSAgICAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgICAgICBpZiAoIW1fZGF0YVN0
b3JlKQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlRGVjaWRl
UGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oZG93bmxvYWRJRCwgZGVzdGluYXRpb24sIHNhbmRi
b3hFeHRlbnNpb25IYW5kbGUsIGFsbG93T3ZlcndyaXRlID09IEFsbG93T3ZlcndyaXRlOjpZZXMp
LCAwKTsKKyAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRp
b24oZG93bmxvYWRJRCwgZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGFsbG93
T3ZlcndyaXRlID09IEFsbG93T3ZlcndyaXRlOjpZZXMpLCAwKTsKICAgICB9KTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlN
YXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlN
YXAuY3BwCmluZGV4IDc2YTA3MTU3YjU5MWFhY2U1MGYxNWQxNTI1ZGJjZmI4YzZhNGJiYzguLmQ3
NGE4ZmE2YzY0Yzg4NjM1ZjllYjc1Y2E3M2U3MGZkOTQ2Y2EwMmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKQEAg
LTQ0LDcgKzQ0LDcgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBEb3dubG9hZFByb3h5TWFwOjpE
b3dubG9hZFByb3h5TWFwKE5ldHdvcmtQcm9jZXNzUHJveHkmIHByb2Nlc3MpCi0gICAgOiBtX3By
b2Nlc3MobWFrZVdlYWtQdHIocHJvY2VzcykpCisgICAgOiBtX3Byb2Nlc3MocHJvY2VzcykKICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICAsIG1fc2hvdWxkVGFrZUFzc2VydGlvbihXVEY6OnByb2Nl
c3NIYXNFbnRpdGxlbWVudCgiY29tLmFwcGxlLm11bHRpdGFza2luZy5zeXN0ZW1hcHBhc3NlcnRp
b25zIikpCiAjZW5kaWYKQEAgLTcwLDE0ICs3MCwxMiBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6
OnBsYXRmb3JtRGVzdHJveSgpCiAKIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25E
aWRFbnRlckJhY2tncm91bmQoKQogewotICAgIGlmIChtX3Byb2Nlc3MpCi0gICAgICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uRGlkRW50ZXJC
YWNrZ3JvdW5kKCksIDApOworICAgIG1fcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7CiB9CiAKIHZvaWQgRG93
bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkKIHsKLSAgICBp
ZiAobV9wcm9jZXNzKQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpBcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKSwgMCk7CisgICAgbV9wcm9j
ZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbldpbGxFbnRlckZv
cmVncm91bmQoKSwgMCk7CiB9CiAKIERvd25sb2FkUHJveHkmIERvd25sb2FkUHJveHlNYXA6OmNy
ZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQcm9jZXNz
UG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3Vy
Y2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSog
b3JpZ2luYXRpbmdQYWdlKQpAQCAtOTIsMTMgKzkwLDEyIEBAIERvd25sb2FkUHJveHkmIERvd25s
b2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0
b3JlCiAgICAgICAgIG1fZG93bmxvYWRVSUFzc2VydGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fz
c2VydGlvbj4oZ2V0Q3VycmVudFByb2Nlc3NJRCgpLCAiV2ViS2l0IGRvd25sb2FkcyJfcywgUHJv
Y2Vzc0Fzc2VydGlvblR5cGU6OlVuYm91bmRlZE5ldHdvcmtpbmcpOwogCiAgICAgICAgIEFTU0VS
VCghbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24pOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VChtX3Byb2Nlc3MpOwotICAgICAgICBtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbiA9IG1h
a2VVbmlxdWU8UHJvY2Vzc0Fzc2VydGlvbj4obV9wcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigp
LCAiV2ViS2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVuYm91bmRlZE5l
dHdvcmtpbmcpOworICAgICAgICBtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbiA9IG1ha2VV
bmlxdWU8UHJvY2Vzc0Fzc2VydGlvbj4obV9wcm9jZXNzLnByb2Nlc3NJZGVudGlmaWVyKCksICJX
ZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29y
a2luZyk7CiAKICAgICAgICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICJVSVByb2Nl
c3MgdG9vayAnV2ViS2l0IGRvd25sb2FkcycgYXNzZXJ0aW9ucyBmb3IgVUlQcm9jZXNzIGFuZCBO
ZXR3b3JrUHJvY2VzcyIpOwogICAgIH0KIAotICAgIG1fcHJvY2Vzcy0+YWRkTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25s
b2FkUHJveHktPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCksIGRvd25sb2FkUHJveHkuZ2V0KCkp
OworICAgIG1fcHJvY2Vzcy5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJv
eHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpLmRv
d25sb2FkSUQoKSwgZG93bmxvYWRQcm94eS5nZXQoKSk7CiAKICAgICByZXR1cm4gZG93bmxvYWRQ
cm94eTsKIH0KQEAgLTEwOSwxMiArMTA2LDkgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFwOjpkb3du
bG9hZEZpbmlzaGVkKERvd25sb2FkUHJveHkmIGRvd25sb2FkUHJveHkpCiAKICAgICBSRUxFQVNF
X0xPRyhMb2FkaW5nLCAiUmVtb3ZpbmcgZG93bmxvYWQgJSIgUFJJdTY0ICIgZnJvbSBVSVByb2Nl
c3MgRG93bmxvYWRQcm94eU1hcCIsIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKIAotICAgIC8v
IFRoZSBEb3dubG9hZFByb3h5IG1heSBiZSBob2xkaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0
aGUgcHJvY2VzcyBwb29sLgotICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVm
UHRyKG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKSk7Ci0KICAgICBBU1NFUlQobV9kb3dubG9hZHMu
Y29udGFpbnMoZG93bmxvYWRJRCkpOwogCi0gICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93
bmxvYWRJRC5kb3dubG9hZElEKCkpOworICAgIG1fcHJvY2Vzcy5yZW1vdmVNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxv
YWRJRC5kb3dubG9hZElEKCkpOwogICAgIGRvd25sb2FkUHJveHkuaW52YWxpZGF0ZSgpOwogICAg
IG1fZG93bmxvYWRzLnJlbW92ZShkb3dubG9hZElEKTsKIApAQCAtMTMzLDE1ICsxMjcsMTMgQEAg
dm9pZCBEb3dubG9hZFByb3h5TWFwOjppbnZhbGlkYXRlKCkKICAgICBmb3IgKGNvbnN0IGF1dG8m
IGRvd25sb2FkIDogbV9kb3dubG9hZHMudmFsdWVzKCkpIHsKICAgICAgICAgZG93bmxvYWQtPnBy
b2Nlc3NEaWRDbG9zZSgpOwogICAgICAgICBkb3dubG9hZC0+aW52YWxpZGF0ZSgpOwotICAgICAg
ICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25sb2Fk
SUQoKSk7CisgICAgICAgIG1fcHJvY2Vzcy5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWQtPmRvd25sb2Fk
SUQoKS5kb3dubG9hZElEKCkpOwogICAgIH0KIAogICAgIG1fZG93bmxvYWRzLmNsZWFyKCk7CiAg
ICAgbV9kb3dubG9hZFVJQXNzZXJ0aW9uID0gbnVsbHB0cjsKICAgICBtX2Rvd25sb2FkTmV0d29y
a2luZ0Fzc2VydGlvbiA9IG51bGxwdHI7CiAgICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNp
b24sICJVSVByb2Nlc3MgRG93bmxvYWRQcm94eU1hcCBpbnZhbGlkYXRlZCAtIFJlbGVhc2VkICdX
ZWJLaXQgZG93bmxvYWRzJyBhc3NlcnRpb25zIGZvciBVSVByb2Nlc3MgYW5kIE5ldHdvcmtQcm9j
ZXNzIik7Ci0KLSAgICBtX3Byb2Nlc3MgPSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZFByb3h5TWFwLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRQcm94eU1hcC5oCmluZGV4IDNiZTIwNzlhMGYyYzRiNTM3MDYyY2UxMzAwZTFjZDVkYTQ0NGZm
YmUuLjRmYTAwMWJkN2ZhZTFjZWQwMjRkMmI5MWYyMDE3MGZmOTk0NTI4YmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaApA
QCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1DcmVhdGUoKTsKICAg
ICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOwogCi0gICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1By
b3h5PiBtX3Byb2Nlc3M7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbV9wcm9jZXNzOwogICAg
IEhhc2hNYXA8RG93bmxvYWRJRCwgUmVmUHRyPERvd25sb2FkUHJveHk+PiBtX2Rvd25sb2FkczsK
IAogICAgIGJvb2wgbV9zaG91bGRUYWtlQXNzZXJ0aW9uIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNw
cAppbmRleCA4YzIzYmJlOGMwNmExNTk5Y2I5YjkxNmEwYjMyYWZiMzc3ODNmMzA1Li5kNmMzMzIz
ZGQ5M2U2OWY1NmFkZjZiZTBkMmExYjE0ZjA4MjI0NTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2Nv
bE1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9D
dXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCkBAIC00
NCwxNyArNDQsMTcgQEAgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6On5MZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgpCiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1c3RvbVBy
b3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAg
ICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQoKS5zdGFydExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3Qp
OworICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQo
KS5zdGFydExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3QpOwogfQogCiB2
b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyhMZWdhY3lD
dXN0b21Qcm90b2NvbElEIGN1c3RvbVByb3RvY29sSUQpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vz
c1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RvcExv
YWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOworICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94
eS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9t
UHJvdG9jb2xJRCk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6
OmludmFsaWRhdGUoKQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgp
LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUoKnRoaXMpOworICAgIG1f
bmV0d29ya1Byb2Nlc3NQcm94eS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5pbnZhbGlk
YXRlKCp0aGlzKTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6
d2FzUmVkaXJlY3RlZFRvUmVxdWVzdChMZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1c3RvbVByb3Rv
Y29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmlu
ZGV4IGMxZjQ3MDhiODFjZmE1M2FiMTIyYzI5NDQ2NzVlNzgyNTE2NzEyMWYuLmMwMTk4YmY1YjY5
NWQ3NzQxMTIxZjQ1ZDM5ZGU3ZjIwZGE5NDk0YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKIAogI2luY2x1ZGUgIkFQ
SUNvbnRlbnRSdWxlTGlzdC5oIgorI2luY2x1ZGUgIkFQSUN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudC5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCIKICNpbmNs
dWRlICJBdXRoZW50aWNhdGlvbk1hbmFnZXIuaCIKICNpbmNsdWRlICJEb3dubG9hZFByb3h5TWFw
LmgiCkBAIC0zNSw2ICszNiw3IEBACiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94
eU1lc3NhZ2VzLmgiCiAjZW5kaWYKKyNpbmNsdWRlICJMZWdhY3lHbG9iYWxTZXR0aW5ncy5oIgog
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFu
YWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mby5o
IgpAQCAtNDgsNiArNTAsNyBAQAogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGlj
cy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNsdWRlICJXZWJDb21w
aWxlZENvbnRlbnRSdWxlTGlzdC5oIgorI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5o
IgogI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5o
IgogI2luY2x1ZGUgIldlYlByb2Nlc3NNZXNzYWdlcy5oIgpAQCAtNjAsNiArNjMsNyBAQAogI2lu
Y2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVDbGllbnQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVu
dE9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KKyNpbmNs
dWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25I
YW5kbGVyLmg+CiAKICNpZiBFTkFCTEUoU0VDX0lURU1fU0hJTSkKQEAgLTcwLDIwICs3NCwxMTgg
QEAKICNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KICNlbmRpZgogCisjaWYgUExB
VEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
LmgiCisjZW5kaWYKKwogI2RlZmluZSBNRVNTQUdFX0NIRUNLKGFzc2VydGlvbikgTUVTU0FHRV9D
SEVDS19CQVNFKGFzc2VydGlvbiwgY29ubmVjdGlvbigpKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLSAgICA6IEF1eGlsaWFy
eVByb2Nlc3NQcm94eShwcm9jZXNzUG9vbC5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHko
KSkKLSAgICAsIG1fcHJvY2Vzc1Bvb2wocHJvY2Vzc1Bvb2wpCitzdGF0aWMgSGFzaFNldDxOZXR3
b3JrUHJvY2Vzc1Byb3h5Kj4mIG5ldHdvcmtQcm9jZXNzZXNTZXQoKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFz
aFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5Kj4+IHNldDsKKyAgICByZXR1cm4gc2V0OworfQorCitW
ZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxO
ZXR3b3JrUHJvY2Vzc2VzKCkKK3sKKyAgICBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+
PiBwcm9jZXNzZXM7CisgICAgcHJvY2Vzc2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobmV0d29y
a1Byb2Nlc3Nlc1NldCgpLnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA6
IG5ldHdvcmtQcm9jZXNzZXNTZXQoKSkKKyAgICAgICAgcHJvY2Vzc2VzLnVuY2hlY2tlZEFwcGVu
ZCgqbmV0d29ya1Byb2Nlc3MpOworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9CisKK1JlZjxOZXR3
b3JrUHJvY2Vzc1Byb3h5PiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkZWZhdWx0TmV0d29ya1Byb2Nl
c3MoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8TmV0d29ya1Byb2Nlc3NQ
cm94eT4+IHByb2Nlc3M7CisgICAgaWYgKCFwcm9jZXNzLmdldCgpKQorICAgICAgICBwcm9jZXNz
LmdldCgpID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlKCk7CisgICAgcmV0dXJuICpwcm9j
ZXNzLmdldCgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpCit7
CisgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Ojp0ZXJtaW5hdGUoKTsKK30KKwordm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCkKK3sK
KyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgLy8gRklYTUU6IFRoaXMgaXMg
YSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1t
YWluIHRocmVhZHMuCisgICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3Jj
ZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91ciBBUElzLgorICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYuCisgICAgaWYgKCFSdW5Mb29w
Ojppc01haW4oKSkgeworICAgICAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXNdIHsK
KyAgICAgICAgICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFy
YW1ldGVyczsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBj
b3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1Jl
Z2lzdGVyQXNTZWN1cmUoKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFz
QnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2Jh
bFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVu
dFNlY3VyaXR5UG9saWN5KCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRB
c0xvY2FsID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5z
Y2hlbWVzVG9SZWdpc3RlckFzTG9jYWwoKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVn
aXN0ZXJlZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNp
bmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKKyAgICBwYXJhbWV0ZXJz
LmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2Rl
bCgpOworICAgIGZvciAoYXV0byYgc2NoZW1lIDogV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNX
aXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQorICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVt
ZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOworI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCisgICAgaWYgKFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5ID0g
V2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsgIWNvb2tpZVN0b3JhZ2VE
aXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVy
cy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5n
IGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2Fj
aGVzRGlyZWN0b3J5KCk7ICFjb250YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rvcnko
Y29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgaWYgKFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3Rv
cnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7ICFwYXJlbnRCdW5k
bGVEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFk
T25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwor
I2VuZGlmCisgICAgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzKHBhcmFtZXRlcnMpOworICAgIHBhcmFtZXRlcnMuZGF0YVN0b3JlUGFyYW1ldGVycyA9IGRh
dGFTdG9yZVBhcmFtZXRlcnMoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKK30KKworVmVjdG9yPFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkYXRhU3RvcmVQ
YXJhbWV0ZXJzKCkKK3sKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IHBh
cmFtZXRlcnM7CisgICAgZm9yIChhdXRvJiBzdG9yZSA6IG1fd2Vic2l0ZURhdGFTdG9yZXMpCisg
ICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHN0b3JlLnBhcmFtZXRlcnMoKSk7CisgICAgcmV0dXJu
IHBhcmFtZXRlcnM7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0
QmFja2dyb3VuZFByaW9yaXR5KCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9v
bC0+YWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9j
ZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKQoreworICAgIGZvciAoYXV0
byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAg
ICAgICAgaWYgKHByb2Nlc3NQb29sLT5zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KCkKKyAgICA6IEF1eGls
aWFyeVByb2Nlc3NQcm94eShhbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlv
cml0eSgpKQogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCisgICAg
LCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlUmVmPExlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHkoKnRoaXMpCisjZWxzZQorICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQo
bWFrZVVuaXF1ZVJlZjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICNlbmRp
ZgotICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNob3VsZFRha2VVSUJhY2tn
cm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBhbnlQcm9jZXNzUG9v
bFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fY29va2llTWFuYWdl
cihXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcykpCiB7CiAgICAgY29ubmVjdCgp
OworICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICBuZXR3b3Jr
UHJvY2Vzc2VzU2V0KCkuYWRkKHRoaXMpOwogfQogCiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0
d29ya1Byb2Nlc3NQcm94eSgpCkBAIC05OCw2ICsyMDAsNyBAQCBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgpCiAKICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQog
ICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAtPmludmFsaWRhdGUoKTsKKyAgICBuZXR3b3JrUHJv
Y2Vzc2VzU2V0KCkucmVtb3ZlKHRoaXMpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuY2hP
cHRpb25zKQpAQCAtMTA1LDE1ICsyMDgsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpn
ZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1bmMKICAg
ICBsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID0gUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlw
ZTo6TmV0d29yazsKICAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMo
bGF1bmNoT3B0aW9ucyk7CiAKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5zaG91bGRNYWtlTmV4dE5l
dHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkgewotICAgICAgICBwcm9jZXNzUG9v
bCgpLnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhm
YWxzZSk7Ci0gICAgICAgIGxhdW5jaE9wdGlvbnMuc2hvdWxkTWFrZVByb2Nlc3NMYXVuY2hGYWls
Rm9yVGVzdGluZyA9IHRydWU7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nl
c3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNo
b3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpKSB7CisgICAg
ICAgICAgICBwcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5j
aEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKKyAgICAgICAgICAgIGxhdW5jaE9wdGlvbnMuc2hvdWxk
TWFrZVByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7CisgICAgICAgIH0KICAgICB9
Ci0KLSNpZiBQTEFURk9STShQTEFZU1RBVElPTikKLSAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NQ
YXRoID0gbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc1BhdGgoKTsKLSAgICBsYXVuY2hPcHRp
b25zLnVzZXJJZCA9IG1fcHJvY2Vzc1Bvb2wudXNlcklkKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uKQpAQCAtMTY2LDEyICsyNjYsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKICAgICB9CiB9CiAK
LURvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHko
V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291
cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkq
IG9yaWdpbmF0aW5nUGFnZSkKK0Rvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNy
ZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQcm9jZXNz
UG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0
LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRp
bmdQYWdlKQogewogICAgIGlmICghbV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25s
b2FkUHJveHlNYXAgPSBtYWtlVW5pcXVlPERvd25sb2FkUHJveHlNYXA+KCp0aGlzKTsKIAotICAg
IHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3Jl
LCBtX3Byb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQ
YWdlKTsKKyAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9hZFByb3h5
KGRhdGFTdG9yZSwgcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBvcmln
aW5hdGluZ1BhZ2UpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZldGNoV2Vic2l0
ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiBkYXRhVHlwZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlv
bnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKFdlYnNpdGVEYXRhKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTIzNyw4ICszMzcsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpuZXR3
b3JrUHJvY2Vzc0NyYXNoZWQoKQogewogICAgIGNsZWFyQ2FsbGJhY2tTdGF0ZXMoKTsKIAotICAg
IC8vIFRlbGwgdGhlIG5ldHdvcmsgcHJvY2VzcyBtYW5hZ2VyIHRvIGZvcmdldCBhYm91dCB0aGlz
IG5ldHdvcmsgcHJvY2VzcyBwcm94eS4gVGhpcyB3aWxsIGNhdXNlIHVzIHRvIGJlIGRlbGV0ZWQu
Ci0gICAgbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMpOworICAgIFJl
ZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKKyAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAg
ICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKKyAgICBmb3Ig
KGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgOiBtX3dlYnNpdGVEYXRhU3RvcmVzKQorICAgICAgICB3
ZWJzaXRlRGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CiB9CiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6Y2xlYXJDYWxsYmFja1N0YXRlcygpCkBAIC0yNTgsOSArMzYx
LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGUKICAgICBpZiAoZGlzcGF0Y2hNZXNzYWdlKGNv
bm5lY3Rpb24sIGRlY29kZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9wcm9jZXNz
UG9vbC5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCi0gICAgICAgIHJldHVy
bjsKLQogICAgIGRpZFJlY2VpdmVOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZShjb25uZWN0aW9u
LCBkZWNvZGVyKTsKIH0KIApAQCAtMjc0LDggKzM3NCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
SVBDCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9u
JikKIHsKLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZihtX3Byb2Nlc3NQ
b29sKTsKLQogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQ
cm94eU1hcC0+aW52YWxpZGF0ZSgpOwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09M
X01BTkFHRVIpCkBAIC0zMzEsMTEgKzQyOSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3NpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXRvcE9yaWdpbiB8fCAhbV9wcm9jZXNz
UG9vbC5pc1NlcnZpY2VXb3JrZXJQYWdlSUQocGFnZUlEKSkgewotICAgICAgICBwcm9jZXNzQXV0
aGVudGljYXRpb25DaGFsbGVuZ2Uoc2Vzc2lvbklELCBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBXZWJQYWdlUHJveHk6OmZv
ck1vc3RWaXNpYmxlV2ViUGFnZUlmQW55KHNlc3Npb25JRCwgKnRvcE9yaWdpbiwgW3RoaXMsIHdl
YWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRCwgYXV0aGVudGljYXRpb25DaGFs
bGVuZ2UgPSBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgbmVnb3RpYXRlZExlZ2Fj
eVRMU10oYXV0byogcGFnZSkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0zOTIsMTEgKzQ4NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hlciogbGF1bmNoZXIsIElQQzo6
Q29uCiAgICAgICAgIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wucHJvY2Vz
c1N1cHByZXNzaW9uRW5hYmxlZCgpKQotICAgICAgICBzZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFi
bGVkKHRydWUpOwotI2VuZGlmCiAgICAgCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBp
ZiAoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uID0gdGhpcy0+Y29ubmVjdGlvbigpLT54cGND
b25uZWN0aW9uKCkpCkBAIC0xMjA1LDcgKzEyOTMsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vz
cwogfQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFj
dGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7Ci0g
ICAgcHJvY2Vzc1Bvb2woKS5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihXVEZNb3ZlKGRv
bWFpbnMpKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFs
bFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2V0RG9tYWluc1dpdGhVc2Vy
SW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4geyBkb21haW5z
IH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKQEAg
LTEyNTIsNDUgKzEzNDEsMzEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpmbHVzaENvb2tp
ZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgQ29tcGxldGkKICAgICBzZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpGbHVzaENvb2tpZXMoc2Vzc2lv
bklEKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCi12b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYgc3RvcmUpCit2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYgc3RvcmUp
CiB7Ci0gICAgbV9zZXNzaW9uSURzLmFkZChzdG9yZS0+c2Vzc2lvbklEKCkpOworICAgIG1fd2Vi
c2l0ZURhdGFTdG9yZXMuYWRkKHN0b3JlKTsKIAogICAgIGlmIChjYW5TZW5kTWVzc2FnZSgpKQot
ICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWRkV2Vic2l0ZURhdGFTdG9y
ZSB7IHN0b3JlLT5wYXJhbWV0ZXJzKCkgfSwgMCk7Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBzdG9y
ZS0+c2Vzc2lvbklEKCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpB
ZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUucGFyYW1ldGVycygpIH0sIDApOworICAgIGF1dG8g
c2Vzc2lvbklEID0gc3RvcmUuc2Vzc2lvbklEKCk7CiAgICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhl
bWVyYWwoKSkgewogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgICAgICBjcmVhdGVT
eW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5KCkpOworICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUucmVzb2x2
ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CiAjZW5kaWYKICAgICB9CiB9CiAKLWJvb2wg
TmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2Vzc2lvbklEcy5jb250YWlucyhzZXNzaW9uSUQpOwot
fQotCi12b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklEKQordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKFdl
YnNpdGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiB7Ci0gICAgbV9zZXNzaW9uSURzLnJl
bW92ZShzZXNzaW9uSUQpOworICAgIG1fd2Vic2l0ZURhdGFTdG9yZXMucmVtb3ZlKHdlYnNpdGVE
YXRhU3RvcmUpOwogCiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEZXN0cm95U2Vzc2lvbiB7IHNlc3Npb25JRCB9LCAwKTsK
KyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRlc3Ryb3lTZXNzaW9uIHsg
d2Vic2l0ZURhdGFTdG9yZS5zZXNzaW9uSUQoKSB9LCAwKTsKIH0KIAogV2Vic2l0ZURhdGFTdG9y
ZSogTmV0d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBpZiAoIVdlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkgewotICAgICAgICAgICAgYXV0byogd2Vic2l0
ZURhdGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpOwotICAgICAgICAg
ICAgaWYgKHdlYnNpdGVEYXRhU3RvcmUgJiYgd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkg
PT0gc2Vzc2lvbklEKQotICAgICAgICAgICAgICAgIHJldHVybiB3ZWJzaXRlRGF0YVN0b3JlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKS5wdHIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0
aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIHJldHVy
biBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9u
SUQpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJldHJpZXZlQ2FjaGVTdG9yYWdl
UGFyYW1ldGVycyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCkBAIC0xMzM3LDcgKzE0MTIsNyBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eShXZWJVc2VyQ29udGVudAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25U
b05ldHdvcmtQcm9jZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIG1fcHJvY2Vzc1Bvb2wuZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9t
YWluKSwgc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgV2ViUHJv
Y2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vz
cygqdGhpcywgUmVnaXN0cmFibGVEb21haW4ge3JlZ2lzdHJhYmxlRG9tYWlufSwgc2Vzc2lvbklE
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6d29ya2VyQ29udGV4dENvbm5lY3Rpb25Ob0xvbmdlck5lZWRlZChXZWJDb3JlOjpQcm9j
ZXNzSWRlbnRpZmllciBpZGVudGlmaWVyKQpAQCAtMTUwMCwxNiArMTU3NSwzNCBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnByZWNvbm5lY3RUbyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IFdlYlBhZ2VQcm94eUlkZQogICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVj
b25uZWN0VG8oc2Vzc2lvbklELCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlELCB1cmwsIHVzZXJB
Z2VudCwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21h
aW4pLCAwKTsKIH0KIAorc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2Vi
UHJvY2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bv
b2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzRm9y
ZWdyb3VuZFdlYlByb2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNCYWNr
Z3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9v
bC0+aGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCkKIHsKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNG
b3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNGb3Jl
Z3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjpp
c1ZhbGlkRm9yZWdyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewog
ICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5mb3Jl
Z3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGZvcmVncm91bmQgdmlldyhzKSJfcyk7CiAg
ICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5z
aXRpb25Ub0ZvcmVncm91bmQoKSwgMCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsK
KyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAg
ICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkQmFja2dyb3VuZEFjdGl2aXR5KG1f
YWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21X
ZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcg
Zm9yIGJhY2tncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0JhY2tncm91bmQoKSwgMCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQ
cm94eS5oCmluZGV4IGEwYjRjMWQ4OTM4ZTIwNWVjMzYxZGU1YzEwODI1ZDE4Mjc3NjUzYjQuLjBi
ZmNmNDM1YjQ3ZDgxNTVhNGE1OTEyZjg5YTliYzg3Mjg4MmRmNWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC00
NiwxMiArNDYsMTcgQEAKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIlhQQ0V2ZW50
SGFuZGxlci5oIgorI2luY2x1ZGUgPHd0Zi9PU09iamVjdFB0ci5oPgogI2VuZGlmCiAKIG5hbWVz
cGFjZSBJUEMgewogY2xhc3MgRm9ybURhdGFSZWZlcmVuY2U7CiB9CiAKK25hbWVzcGFjZSBBUEkg
eworY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OworfQorCiBuYW1lc3BhY2UgUEFM
IHsKIGNsYXNzIFNlc3Npb25JRDsKIH0KQEAgLTczLDggKzc4LDggQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIERvd25sb2FkUHJveHk7CiBjbGFzcyBEb3dubG9hZFByb3h5TWFwOworY2xh
c3MgV2ViQ29va2llTWFuYWdlclByb3h5OwogY2xhc3MgV2ViUGFnZVByb3h5OwotY2xhc3MgV2Vi
UHJvY2Vzc1Bvb2w7CiBjbGFzcyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTsKIAogZW51
bSBjbGFzcyBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MgOiBib29sOwpAQCAtODYsOCArOTEs
OSBAQCBzdHJ1Y3QgRnJhbWVJbmZvRGF0YTsKIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczsKIHN0cnVjdCBSZXNvdXJjZUxvYWRJbmZvOwogc3RydWN0IFdlYnNpdGVEYXRh
Oworc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOwogCi1jbGFzcyBOZXR3b3JrUHJv
Y2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQ
cm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nl
c3NQcm94eT4geworY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94eSBmaW5hbCA6IHB1YmxpYyBBdXhp
bGlhcnlQcm9jZXNzUHJveHksIHByaXZhdGUgUHJvY2Vzc1Rocm90dGxlckNsaWVudCwgcHVibGlj
IENhbk1ha2VXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+LCBwdWJsaWMgUmVmQ291bnRlZDxO
ZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgdXNpbmcgUmVnaXN0cmFibGVEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbjsKQEAgLTEwMiwxMiArMTA4LDE3IEBAIHB1YmxpYzoKICAgICB1c2luZyBEb21haW5Jbk5l
ZWRPZlN0b3JhZ2VBY2Nlc3MgPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKICAgICB1c2lu
ZyBPcGVuZXJEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKIAotICAgIGV4cGxp
Y2l0IE5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmKTsKKyAgICBzdGF0aWMgUmVm
PE5ldHdvcmtQcm9jZXNzUHJveHk+IGRlZmF1bHROZXR3b3JrUHJvY2VzcygpOworICAgIHN0YXRp
YyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYoKm5l
dyBOZXR3b3JrUHJvY2Vzc1Byb3h5KTsgfQogICAgIH5OZXR3b3JrUHJvY2Vzc1Byb3h5KCk7CiAK
KyAgICBzdGF0aWMgVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gYWxsTmV0d29ya1By
b2Nlc3NlcygpOworICAgIAorICAgIHZvaWQgdGVybWluYXRlKCkgZmluYWw7CisKICAgICB2b2lk
IGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBNZXNzYWdlczo6
V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkm
Jik7CiAKLSAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRh
U3RvcmUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBGcmFtZUluZm9E
YXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpOworICAgIERvd25sb2FkUHJveHkm
IGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIFdlYlByb2Nlc3NQb29sJiwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIFdl
YlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsKIAogICAgIHZvaWQgZmV0Y2hXZWJzaXRlRGF0
YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxX
ZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJzaXRlRGF0
YSk+JiYpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMjA2LDE1ICsyMTcsMTIg
QEAgcHVibGljOgogICAgIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigpIGZpbmFsIHsgcmV0
dXJuIG1fdGhyb3R0bGVyOyB9CiAgICAgdm9pZCB1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7CiAK
LSAgICBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2woKSB7IHJldHVybiBtX3Byb2Nlc3NQb29s
OyB9Ci0KICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIHZvaWQgZGlkRGVzdHJv
eVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgYWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9y
ZT4mJik7Ci0gICAgYm9vbCBoYXNTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKSBjb25zdDsKLSAgICB2
b2lkIHJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQpOworICAgIHZvaWQgYWRkU2Vzc2lvbihX
ZWJzaXRlRGF0YVN0b3JlJik7CisgICAgdm9pZCByZW1vdmVTZXNzaW9uKFdlYnNpdGVEYXRhU3Rv
cmUmKTsKICAgICAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICB2b2lkIGNyZWF0
ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShjb25zdCBTdHJpbmcmIGluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeSk7CkBAIC0yMjksNiArMjM3LDggQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJTY2hl
bWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHVucmVn
aXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsKIAorICAg
IHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CisgICAgCiAgICAgdm9pZCByZXNldFF1b3Rh
KFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiAgICAgdm9p
ZCByZXNvdXJjZUxvYWREaWRTZW5kUmVxdWVzdChXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBSZXNv
dXJjZUxvYWRJbmZvJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBPcHRpb25hbDxJUEM6
OkZvcm1EYXRhUmVmZXJlbmNlPiYmKTsKQEAgLTI0OCw3ICsyNTgsMjAgQEAgcHVibGljOgogICAg
IHZvaWQgdXBkYXRlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJCdW5kbGVJZGVudGlmaWVyKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkmIGNvb2tp
ZU1hbmFnZXIoKSB7IHJldHVybiBtX2Nvb2tpZU1hbmFnZXIuZ2V0KCk7IH0KKworICAgIEFQSTo6
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50JiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQo
KSB7IHJldHVybiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5nZXQoKTsgfQorCisjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgeHBjX29iamVjdF90IHhwY0VuZHBvaW50TWVzc2FnZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZW5kcG9pbnRNZXNzYWdlLmdldCgpOyB9CisjZW5kaWYKKwogcHJpdmF0
ZToKKyAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KCk7CisKKyAgICB2b2lkIHNlbmRD
cmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM+IGRhdGFTdG9yZVBhcmFtZXRlcnMoKTsKKwogICAgIC8vIEF1eGlsaWFy
eVByb2Nlc3NQcm94eQogICAgIEFTQ0lJTGl0ZXJhbCBwcm9jZXNzTmFtZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuICJOZXR3b3JraW5nIl9zOyB9CiAKQEAgLTI1Niw3ICsyNzksNiBAQCBwcml2YXRl
OgogICAgIHZvaWQgY29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRl
OwogICAgIHZvaWQgcHJvY2Vzc1dpbGxTaHV0RG93bihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlk
ZTsKIAotICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgdm9pZCBjbGVhckNh
bGxiYWNrU3RhdGVzKCk7CiAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudApAQCAtMzEy
LDE2ICszMzQsMTcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHJvY2Vzc0F1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklELCBSZWY8QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94
eT4mJik7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgbV9wcm9jZXNzUG9vbDsKLQogICAgIEhhc2hN
YXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJzaXRlRGF0YSk+PiBtX3Bl
bmRpbmdGZXRjaFdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFDYWxs
YmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnNDYWxsYmFja3M7CiAKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8RG93bmxvYWRQcm94eU1hcD4gbV9kb3dubG9hZFByb3h5TWFwOworCisg
ICAgVW5pcXVlUmVmPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudDsKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9N
QU5BR0VSKQogICAgIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5IG1fY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHk7CiAjZW5kaWYKKwogICAgIFByb2Nlc3NUaHJvdHRsZXIgbV90aHJv
dHRsZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByb2Nlc3NUaHJvdHRsZXI6OkJhY2tncm91bmRB
Y3Rpdml0eT4gbV9hY3Rpdml0eUZvckhvbGRpbmdMb2NrZWRGaWxlczsKICAgICBQcm9jZXNzVGhy
b3R0bGVyOjpBY3Rpdml0eVZhcmlhbnQgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXM7CkBAIC0z
NDcsOSArMzcwLDExIEBAIHByaXZhdGU6CiAgICAgcHJpdmF0ZToKICAgICAgICAgV2Vha1B0cjxO
ZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwogICAgIH07CisgICAgT1NPYmpl
Y3RQdHI8eHBjX29iamVjdF90PiBtX2VuZHBvaW50TWVzc2FnZTsKICNlbmRpZgogCi0gICAgSGFz
aFNldDxQQUw6OlNlc3Npb25JRD4gbV9zZXNzaW9uSURzOworICAgIFdlYWtIYXNoU2V0PFdlYnNp
dGVEYXRhU3RvcmU+IG1fd2Vic2l0ZURhdGFTdG9yZXM7CisgICAgUmVmPFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4gbV9jb29raWVNYW5hZ2VyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eUNvY29hLm1tCmluZGV4IGI4ZGFlZGY3YmViYTFjZDgxZjZlNTI0NDk2MDMxMGYx
MzMxMGMxMWUuLjkxYzE5MzFmMmU2NWNmMWM5NzdhZGYzYWU2Y2FlZGIwNjA5MDBiZGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eUNvY29hLm1tCkBAIC01MSw4ICs1MSwxMSBAQCBib29sIE5ldHdvcmtQcm9jZXNz
UHJveHk6OlhQQ0V2ZW50SGFuZGxlcjo6aGFuZGxlWFBDRXZlbnQoeHBjX29iamVjdF90IGV2ZW50
KSBjbwogICAgIGlmIChtZXNzYWdlTmFtZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDQ29u
c3RhbnRzOjp4cGNMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDRW5kcG9pbnRNZXNzYWdlTmFtZSkK
LSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kTmV0d29ya1Byb2Nl
c3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhldmVudCk7CisgICAgaWYgKG1lc3NhZ2VOYW1lID09
IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6OnhwY0xhdW5jaFNlcnZpY2VzRGF0
YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKSB7CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
Pm1fZW5kcG9pbnRNZXNzYWdlID0gZXZlbnQ7CisgICAgICAgIGZvciAoYXV0byYgZGF0YVN0b3Jl
IDogbV9uZXR3b3JrUHJvY2Vzcy0+bV93ZWJzaXRlRGF0YVN0b3JlcykKKyAgICAgICAgICAgIGRh
dGFTdG9yZS5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhldmVudCk7
CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAppbmRleCBjYzUyNmFhZjNhYWZiMWMxNDZk
YTRiMjQxOTQ1OWIxMDkyMDFiNjEwLi4wODVlN2QyNjVhMTM3MzViZTdhMTI3OGVjMWRmYjYzZmQ1
ZGQ1ZDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5h
Z2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2lu
Y2x1ZGUgIkFQSVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJPcHRp
b25hbENhbGxiYWNrSUQuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgpAQCAtMzksMjQgKzQw
LDE2IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1j
b25zdCBjaGFyKiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN1cHBsZW1lbnROYW1lKCkKK1dlYkNv
b2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KE5ldHdvcmtQcm9jZXNzUHJv
eHkmIG5ldHdvcmtQcm9jZXNzKQorICAgIDogbV9uZXR3b3JrUHJvY2VzcyhtYWtlV2Vha1B0cihu
ZXR3b3JrUHJvY2VzcykpCiB7Ci0gICAgcmV0dXJuICJXZWJDb29raWVNYW5hZ2VyUHJveHkiOwot
fQotCi1SZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNy
ZWF0ZShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KHByb2Nlc3NQb29sKSk7Ci19Ci0KLVdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKiBwcm9j
ZXNzUG9vbCkKLSAgICA6IFdlYkNvbnRleHRTdXBwbGVtZW50KHByb2Nlc3NQb29sKQotewotICAg
IFdlYkNvbnRleHRTdXBwbGVtZW50Ojpwcm9jZXNzUG9vbCgpLT5hZGRNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAq
dGhpcyk7CisgICAgbmV0d29ya1Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogfQog
CiBXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5hZ2VyUHJveHkoKQogeworICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5yZW1vdmVN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpKTsKICAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsK
IH0KIApAQCAtNjUsMTAyICs1OCw4NCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6aW5p
dGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKiBjbAogICAgIG1f
Y2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKIH0KIAotLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQK
LQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NQb29sRGVzdHJveWVkKCkKLXsK
LSAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnM7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZl
clNldCA6IG1fY29va2llT2JzZXJ2ZXJzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byog
b2JzZXJ2ZXIgOiBvYnNlcnZlclNldCkKLSAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQob2Jz
ZXJ2ZXIpOwotICAgIH0KLQotICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlcnMpCi0g
ICAgICAgIG9ic2VydmVyLT5tYW5hZ2VyRGVzdHJveWVkKCk7Ci0KLSAgICBBU1NFUlQobV9jb29r
aWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKQotewot
fQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQo
KQotewotICAgIEFQSTo6T2JqZWN0OjpyZWYoKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0Ojpk
ZXJlZigpOwotfQotCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzV2l0
aENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0
d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAg
IG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFu
YWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0
aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKIHsK
LSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZO
ZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0
bmFtZXMoc2Vzc2lvbklELCBob3N0bmFtZXMpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
KyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyksIDApOwog
fQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNz
KQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgQ29va2llJiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNv
b2tpZSksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKV0oKSBt
dXRhYmxlIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxl
dGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsK
KyAgICBlbHNlCiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKLSAgICB9KTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2FsbFRpbWUgdGltZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9j
ZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRl
QWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7
CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3
b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6
OlNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24p
KTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUo
c2Vzc2lvbklELCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxz
ZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9y
PENvb2tpZT4mIGNvb2tpZXMsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIG1haW5Eb2N1bWVu
dFVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0g
ICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFp
bkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tp
ZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7Cisg
ICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9u
KQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92
ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rp
b24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2ll
PiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vz
cy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tp
ZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwg
dXJsKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxs
YmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFy
dE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAg
IHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vz
c2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFu
Z2VzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25l
dHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2Vy
dmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxh
dW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2
aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
KyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmIGNhbGxiYWNrKQpAQCAt
MjExLDE4ICsxODYsMTggQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNvb2tpZXNEaWRD
aGFuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFj
a0Z1bmN0aW9uKQogewotI2lmIFVTRShTT1VQKQotICAgIHByb2Nlc3NQb29sKCktPnNldEluaXRp
YWxIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAgIGF1dG8mIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAg
ICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rp
b24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAotdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNz
aW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYg
Y2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewot
ICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwgV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFu
YWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oSFRUUENv
b2tpZUFjY2VwdFBvbGljeTo6TmV2ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKaW5kZXgg
MGJkZmMwZDRlNDdjNDM2ZjU4NWNmMjljMDlkNTFhMjliYzgxMWE5ZC4uNmY1MWYwM2U1YzBjYTg5
NDEyMzM0Mzc3YjU1NDNkODIyY2MyZmVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKQEAgLTU2LDExICs1Niw5IEBAIHR5cGVkZWYgR2Vu
ZXJpY0NhbGxiYWNrPEFQSTo6QXJyYXkqPiBBcnJheUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmlj
Q2FsbGJhY2s8V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeT4gSFRUUENvb2tpZUFjY2Vw
dFBvbGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7CiAKLWNsYXNzIFdlYkNvb2tpZU1h
bmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNv
b2tpZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1lbnQsIHByaXZhdGUgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQ
STo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHByaXZhdGUg
SVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBz
dXBwbGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+
IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRpYyBSZWY8V2ViQ29va2llTWFuYWdl
clByb3h5PiBjcmVhdGUoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KG5ldHdvcmtQcm9jZXNzKSk7
IH0KICAgICB2aXJ0dWFsIH5XZWJDb29raWVNYW5hZ2VyUHJveHkoKTsKIAogICAgIHZvaWQgaW5p
dGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKik7CkBAIC0xMDQs
MTcgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQVBJOjpPYmplY3Q6OmRlcmVmOwogCiBw
cml2YXRlOgotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCopOworICAg
IFdlYkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAKICAgICB2b2lk
IGNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gV2ViQ29udGV4dFN1
cHBsZW1lbnQKLSAgICB2b2lkIHByb2Nlc3NQb29sRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZv
aWQgcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlcmVmV2Vi
Q29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLQogICAgIC8vIElQQzo6TWVzc2FnZVJlY2Vp
dmVyCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKSBvdmVycmlkZTsKIApAQCAtMTI1LDYgKzExNiw3IEBAIHByaXZhdGU6CiAgICAgSGFz
aE1hcDxQQUw6OlNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPj4gbV9sZWdhY3lDb29r
aWVPYnNlcnZlcnM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgSGFzaFNldDxPYnNlcnZl
cio+PiBtX2Nvb2tpZU9ic2VydmVyczsKIAorICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94
eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHlDbGllbnQgbV9j
bGllbnQ7CiAKICNpZiBVU0UoU09VUCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCmluZGV4IGQzYjhjMzU1NDBmM2YyNDU2ZjcxMDU1ZjViNGQ3YTc4MjI2MGQzODcuLjQ5
Y2VlYjIyODkyZjI0NTE4MWE0NDgwOTU5ZGM4MzRhMTVlZjhkNWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTc0Niw3ICsxNzQ2LDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oYm9vbCBjb250cm9sbGVkKQogICAg
ICAgICByZXR1cm47CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb250cm9sbGVk
QnlBdXRvbWF0aW9uKGNvbnRyb2xsZWQpKTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCku
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXNz
aW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbikpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5u
ZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXNzaW9u
SXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbiksIDApOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6
Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQpAQCAtMzIxMCwxMSArMzIxMCw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5Ojppc0ZvcmNlZEludG9BcHBCb3VuZE1vZGVUZXN0aW5nKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+CiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlzYWJsZVNlcnZpY2VXb3JrZXJF
bnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MoKQogewogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9N
QUlOUykgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCAwKTsKLSAgICB9CisgICAg
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnQoKSwgMCk7CiAjZW5kaWYK
IH0KIApAQCAtMzIyMywxMyArMzIxOSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjbGVhclNlcnZp
Y2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoCiAjaWYg
RU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJQYWdlOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9w
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFu
ZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3Mo
KS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZp
Y2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAjZW5kaWYKQEAgLTQ0MjksNyArNDQx
OSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8oY29uc3QgVVJMJiB1cmwpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPSBtX2Nh
blVzZUNyZWRlbnRpYWxTdG9yYWdlID8gV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6
OlVzZSA6IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZTsKLSAgICBt
X3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5wcmVjb25uZWN0
VG8oc2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlEKCksIHVybCwgdXNlckFnZW50
KCksIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWlu
KCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnByZWNvbm5lY3RU
byhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQoKSwgdXJsLCB1c2VyQWdlbnQo
KSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4o
KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDYW5Vc2VDcmVkZW50aWFsU3RvcmFnZShi
b29sIGNhblVzZUNyZWRlbnRpYWxTdG9yYWdlKQpAQCAtNDcyNSw3ICs0NzE1LDcgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZShGcmFtZUlkZW50aWZpZXIgZnJhbWVJ
RCwgRnJhbWVJbmZvRGF0YSYKICAgICAgICAgICAgIFJlZ2lzdHJhYmxlRG9tYWluIGN1cnJlbnRE
b21haW4geyBjdXJyZW50UmVxdWVzdC51cmwoKSB9OwogICAgICAgICAgICAgVVJMIHJlcXVlc3Rl
clVSTCB7IFVSTCgpLCByZXF1ZXN0ZXJPcmlnaW4udG9TdHJpbmcoKSB9OwogICAgICAgICAgICAg
aWYgKCFjdXJyZW50RG9tYWluLm1hdGNoZXMocmVxdWVzdGVyVVJMKSkKLSAgICAgICAgICAgICAg
ICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRh
VHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21h
aW4geyByZXF1ZXN0ZXJVUkwgfSwgY3VycmVudERvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zl
ciwgbV9pZGVudGlmaWVyLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgICAgICAgICAgbV93ZWJzaXRl
RGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0
YVRyYW5zZmVyKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxlRG9t
YWluIHsgcmVxdWVzdGVyVVJMIH0sIGN1cnJlbnREb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNm
ZXIsIG1faWRlbnRpZmllciwgbV93ZWJQYWdlSUQpOwogICAgICAgICB9CiAjZW5kaWYKICAgICB9
CkBAIC00NzYzLDcgKzQ3NTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZv
ckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUluZm9EYXRhJgogICAgIGlmIChu
YXZpZ2F0aW9uICYmIGZyYW1lLT5pc01haW5GcmFtZSgpKSB7CiAgICAgICAgIGlmIChhdXRvJiBh
ZENsaWNrQXR0cmlidXRpb24gPSBuYXZpZ2F0aW9uLT5hZENsaWNrQXR0cmlidXRpb24oKSkgewog
ICAgICAgICAgICAgaWYgKGFkQ2xpY2tBdHRyaWJ1dGlvbi0+ZGVzdGluYXRpb24oKS5tYXRjaGVz
KGZyYW1lLT51cmwoKSkpCi0gICAgICAgICAgICAgICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgp
LnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3RvcmVB
ZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKmFkQ2xp
Y2tBdHRyaWJ1dGlvbikpOworICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3
b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yZUFkQ2xpY2tB
dHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqYWRDbGlja0F0dHJp
YnV0aW9uKSwgMCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUzNzcsNyArNTM2Nyw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgV2ViRnJhbWVQcm94eSYg
ZnJhbWUsIGNvbnN0IFVSTCYgcGFnCiAgICAgaWYgKHRhcmdldEhvc3QuaXNFbXB0eSgpIHx8IG1h
aW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3QgPT0gc291cmNlVVJMLmhvc3QoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TG9nRnJhbWVOYXZpZ2F0
aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxlRG9tYWluIHsg
dGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVSTCB9LCBSZWdpc3RyYWJsZURv
bWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5pc01haW5GcmFtZSgpLCBNb25v
dG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yTWFpbkZyYW1lVGlt
ZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlcikpOworICAgIHdlYnNpdGVEYXRh
U3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpM
b2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0
cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBwYWdlVVJMIH0s
IFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVkaXJlY3QsIGZyYW1lLmlzTWFp
bkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRGaW5pc2hEb2N1bWVudExvYWRG
b3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyKSwgMCk7
CiB9CiAjZW5kaWYKIApAQCAtMTAwMDIsNTggKzk5OTIsMjcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OnN5c3RlbVByZXZpZXdBY3Rpb25UcmlnZ2VyZWQoY29uc3QgV2ViQ29yZTo6U3lzdGVtUHJldmll
d0luZm8KIAogdm9pZCBXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24oQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCku
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5k
TWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihlbXB0eVN0cmluZygp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xp
Y2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29y
a1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpE
dW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjbGVh
ckFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5w
cm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJv
Y2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJBZENs
aWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlv
bihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3Zl
cnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlm
ICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vic2l0
ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmli
dXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQ
YWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNz
UG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+
Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJp
YnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJz
aXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9y
VGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0
dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1f
cHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICgh
bmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRh
U3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0K
KyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhw
aXJlZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IGQ5MjZiMzNj
YmRmMmJiOGJiOTgwZDYzYzVkYzUyYWU1MjUwOTI1MjkuLjcxZjFmNjM4ZGMzM2Y0ZTQxODI1NmQ2
NjgxY2Y4NDRmODJiOTQxYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5jcHAKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlICJMZWdhY3lHbG9iYWxTZXR0aW5n
cy5oIgogI2luY2x1ZGUgIkxvZ0luaXRpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgotI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKICNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9j
ZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCkBAIC0xNDMs
OCArMTQyLDEwIEBACiAjZW5kaWYKIAogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xP
RyhjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIiVwIC0gV2ViUHJvY2Vz
c1Bvb2w6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBXRUJQUk9DRVNTUE9P
TF9SRUxFQVNFX0xPR19TVEFUSUMoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HKGNoYW5u
ZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIFdFQlBS
T0NFU1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xP
R19FUlJPUihjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19W
QV9BUkdTX18pCiAjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQo
Y2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lGKHNlc3Npb25JRC5pc0Fsd2F5c09uTG9n
Z2luZ0FsbG93ZWQoKSwgY2hhbm5lbCwgIiVwIC0gV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlz
LCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9B
TExPV0VEX1NUQVRJQyhjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfSUYoc2Vzc2lvbklE
LmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAiV2ViUHJvY2Vzc1Bvb2w6OiIg
Zm10LCAjI19fVkFfQVJHU19fKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwpAQCAtMjMyLDYgKzIzMywxMSBAQCBzdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFT
Q0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdAog
ICAgIHJldHVybiBzZXQ7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IFdlYlByb2Nlc3NQb29sOjp1cmxT
Y2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQoreworICAgIHJldHVybiBjb3B5VG9W
ZWN0b3IoZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpOworfQor
CiBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgOiBtX2NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlv
bi5jb3B5KCkpCiAgICAgLCBtX2RlZmF1bHRQYWdlR3JvdXAoV2ViUGFnZUdyb3VwOjpjcmVhdGUo
KSkKQEAgLTIzOSw3ICsyNDUsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJ
OjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgLCBtX2F1dG9t
YXRpb25DbGllbnQobWFrZVVuaXF1ZTxBUEk6OkF1dG9tYXRpb25DbGllbnQ+KCkpCiAgICAgLCBt
X2Rvd25sb2FkQ2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSkKICAg
ICAsIG1faGlzdG9yeUNsaWVudChtYWtlVW5pcXVlPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlD
bGllbnQ+KCkpCi0gICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVl
PEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogICAgICwgbV92aXNpdGVkTGlu
a1N0b3JlKFZpc2l0ZWRMaW5rU3RvcmU6OmNyZWF0ZSgpKQogI2lmIFBMQVRGT1JNKE1BQykKICAg
ICAsIG1faGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXIobWFrZVVuaXF1ZTxIaWdo
UGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlcj4oKnRoaXMpKQpAQCAtMjY3LDkgKzI3Miw2
IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmln
dXJhdGlvbiYgY29uZmlndXJhdGlvbikKICNlbmRpZgogICAgIH0pOwogCi0gICAgaWYgKCFtX3dl
YnNpdGVEYXRhU3RvcmUgJiYgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlRXhpc3RzKCkpCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpOwotCiAgICAgZm9yIChhdXRvJiBzY2hlbWUg
OiBtX2NvbmZpZ3VyYXRpb24tPmFsd2F5c1JldmFsaWRhdGVkVVJMU2NoZW1lcygpKQogICAgICAg
ICBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNBbHdheXNSZXZhbGlkYXRlZC5hZGQoc2NoZW1lKTsKIApA
QCAtMjg1LDcgKzI4Nyw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlBy
b2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICBhZGRNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0
aGlzKTsKIAogICAgIC8vIE5PVEU6IFRoZXNlIHN1Yi1vYmplY3RzIG11c3QgYmUgaW5pdGlhbGl6
ZWQgYWZ0ZXIgbV9tZXNzYWdlUmVjZWl2ZXJNYXAuLgotICAgIGFkZFN1cHBsZW1lbnQ8V2ViQ29v
a2llTWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5h
Z2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJv
eHk+KCk7CiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCkBAIC0zNDIsOSArMzQzLDYgQEAgV2Vi
UHJvY2Vzc1Bvb2w6On5XZWJQcm9jZXNzUG9vbCgpCiAgICAgcHJvY2Vzc1Bvb2xDb3VudGVyLmRl
Y3JlbWVudCgpOwogI2VuZGlmCiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2h1dERvd25Qcm9jZXNzKCk7Ci0KICNpZiBFTkFCTEUoR0FNRVBB
RCkKICAgICBpZiAoIW1fcHJvY2Vzc2VzVXNpbmdHYW1lcGFkcy5pc0VtcHR5KCkpCiAgICAgICAg
IFVJR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5wcm9jZXNzUG9vbFN0b3BwZWRVc2luZ0dh
bWVwYWRzKCp0aGlzKTsKQEAgLTQwMiwxNiArNDAwLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50
PiYKICAgICAgICAgbV9hdXRvbWF0aW9uQ2xpZW50ID0gV1RGTW92ZShhdXRvbWF0aW9uQ2xpZW50
KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dD4mJiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi17Ci0jaWYgRU5BQkxFKExFR0FDWV9D
VVNUT01fUFJPVE9DT0xfTUFOQUdFUikKLSAgICBpZiAoIWN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCkKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBtYWtlVW5pcXVl
PEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpOwotICAgIGVsc2UKLSAgICAgICAg
bV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBXVEZNb3ZlKGN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q3VzdG9t
V2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgY3VzdG9tV2Vi
Q29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKQogewogICAgIC8vIEd1YXJkIGFnYWluc3Qg
QVBJIG1pc3VzZS4KQEAgLTQyMSwxMSArNDA5LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0
Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgY3UK
ICAgICBtX2NvbmZpZ3VyYXRpb24tPnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRl
bnRpZmllcihjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIpOwogfQogCi1J
UEM6OkNvbm5lY3Rpb24qIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rp
b24oKQotewotICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzLT5jb25uZWN0aW9uKCk7Ci19Ci0K
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCh2b2lkKiBjb250ZXh0KQogewog
ICAgIHN0YXRpY19jYXN0PFdlYlByb2Nlc3NQb29sKj4oY29udGV4dCktPmxhbmd1YWdlQ2hhbmdl
ZCgpOwpAQCAtNDM1LDggKzQxOCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hh
bmdlZCgpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpV
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCgpKTsKICNpZiBVU0UoU09VUCkKLSAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKHVzZXJQcmVm
ZXJyZWRMYW5ndWFnZXMoKSksIDApOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwg
MCk7CiAjZW5kaWYKIH0KIApAQCAtNDQ5LDcgKzQzMSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OmZ1bGxLZXlib2FyZEFjY2Vzc01vZGVDaGFuZ2VkKGJvb2wgZnVsbEtleWJvYXJkQWNjZXNzRW5h
YmxlCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudChib29sIGlz
Q3JpdGljYWwpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpBdXhpbGlhcnlQ
cm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSk7Ci0gICAg
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJl
Y2VpdmVNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpKTsKKyAgICBmb3IgKGF1dG8gbmV0
d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkp
CisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNz
OjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSwgMCk7CiAjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmds
ZXRvbigpLnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpOwogI2VuZGlmCkBAIC00
NzQsMjc1ICs0NTcsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzY3JlZW5Qcm9wZXJ0aWVzU3Rh
dGVDaGFuZ2VkKCkKICNlbmRpZgogfQogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNz
UG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVE
YXRhU3RvcmUpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICAv
LyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdl
YktpdCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KLSAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRo
aXMgb25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMu
Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4K
LSAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7Ci0gICAgICAgIGNhbGxPbk1haW5SdW5Mb29w
QW5kV2FpdChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAg
ICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJu
ICptX25ldHdvcmtQcm9jZXNzOwotICAgIH0KLQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7
Ci0gICAgICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwot
ICAgICAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0g
ICAgYXV0byBuZXR3b3JrUHJvY2VzcyA9IG1ha2VVbmlxdWU8TmV0d29ya1Byb2Nlc3NQcm94eT4o
KnRoaXMpOwotCi0gICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVy
czsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IGNvcHlUb1ZlY3Rvciht
X3dlYnNpdGVEYXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwotICAgICAgICBtX3dlYnNpdGVE
YXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0gbV93ZWJzaXRl
RGF0YVN0b3JlLT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlm
aWVyKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmll
ciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxpY2F0aW9u
U2Vjb25kYXJ5SWRlbnRpZmllcigpOwotI2VuZGlmCi0gICAgfQotCi0gICAgcGFyYW1ldGVycy5j
YWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwo
KTsKLQotICAgIGZvciAoYXV0byYgc2NoZW1lIDogZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Q
cm90b2NvbEhhbmRsZXJzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVy
ZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7Ci0KLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotICAgIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bv
b2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvb2tpZVN0b3JhZ2VEaXJl
Y3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5j
b29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBjb250
YWluZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ0NhY2hlc0Rp
cmVjdG9yeSgpOwotICAgIGlmICghY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1wdHkoKSkK
LSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVj
dG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBpZiAo
IXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246
OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxlKGVtcHR5U3RyaW5nKCksIFNhbmRi
b3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzU2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24o
KS5zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1l
c1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3Rv
cihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5
cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVt
ZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6
c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOwotICAgIHBhcmFtZXRlcnMu
dXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2Jh
bFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7Ci0K
LSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAvLyAqKioqKioqKioKLSAgICAvLyBJ
TVBPUlRBTlQ6IERvIG5vdCBjaGFuZ2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGluZGV4
ZWQgZGF0YWJhc2VzIG9uIGRpc2sgd2l0aG91dCBmaXJzdCBjb25zdWx0aW5nIGEgcmV2aWV3ZXIg
ZnJvbSBBcHBsZSAoPHJkYXI6Ly9wcm9ibGVtLzE3NDU0NzEyPikKLSAgICAvLyAqKioqKioqKioK
LSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURh
dGFTdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlm
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAg
ICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS0+cGFyYW1ldGVycygpLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAo
IXBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5LmlzRW1wdHkoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPmNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7
Ci0gICAgfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgaWYgKG1f
d2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29y
a2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5zZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBhdXRv
IGxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURh
dGFTdG9yZS0+cmVzb2x2ZWRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsK
LSAgICBpZiAoIWxvY2FsU3RvcmFnZURpcmVjdG9yeSkKLSAgICAgICAgbG9jYWxTdG9yYWdlRGly
ZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TG9jYWxTdG9yYWdlRGly
ZWN0b3J5KCk7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2Nh
bFN0b3JhZ2VEaXJlY3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURp
cmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0byBjYWNoZVN0b3JhZ2VEaXJl
Y3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPmNhY2hlU3Rv
cmFnZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghY2FjaGVTdG9yYWdlRGly
ZWN0b3J5LmlzRW1wdHkoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gV1RGTW92ZShjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOwot
ICAgIH0KLQotICAgIFN0cmluZyByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5OwotICAg
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29s
dmVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5OwotICAgIAotICAg
IGlmICghcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShyZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyA9IGZhbHNlOwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rl
c3RpbmdFdmVudCA9IGZhbHNlOwotICAgIGJvb2wgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IHRy
dWU7Ci0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gZmFs
c2U7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBXZWJDb3JlOjpU
aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUg
PSBXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpBbGw7Ci0gICAgV2ViQ29y
ZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgc2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudEVuYWJsZWQgPSBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6
Tm87Ci0jZW5kaWYKLSAgICBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZSBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IFdlYkNvcmU6OkZpcnN0UGFydHlX
ZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzOwotICAgIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICBIYXNoU2V0PFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBhcHBCb3VuZERvbWFpbnM7Ci0gICAgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4gbWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0KLSNpZiBQTEFURk9S
TShDT0NPQSkKLSAgICBtX3RjY1ByZWZlcmVuY2VFbmFibGVkID0gZG9lc0FwcEhhdmVJVFBFbmFi
bGVkKCk7Ci0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlICYmICF3aXRoV2Vic2l0ZURhdGFT
dG9yZS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgd2l0aFdl
YnNpdGVEYXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJl
c291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0YVN0b3Jl
ICYmICFtX3dlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAg
ICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJs
ZWQ7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlIGlmIChX
ZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkgJiYgIVdlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewot
ICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5h
YmxlZDsKLSAgICAgICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5zZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1f
dGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0jZW5kaWYKLQotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFT
dG9yZSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gd2l0aFdlYnNp
dGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5oYXNTdGF0aXN0
aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZElu
Y2x1ZGVMb2NhbGhvc3Q7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGVidWdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQYXJhbWV0ZXJzLmVuYWJsZURlYnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQotICAgICAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50
aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudEVuYWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BhcmFtZXRlcnMuc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0j
ZW5kaWYKLSAgICAgICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZp
cnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOwotICAgICAgICAgICAgc3RhbmRhbG9uZUFw
cGxpY2F0aW9uRG9tYWluID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NQYXJhbWV0ZXJzLnN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICAgICAg
ICAgIGFwcEJvdW5kRG9tYWlucyA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGFyYW1ldGVycy5hcHBCb3VuZERvbWFpbnM7Ci0gICAgICAgICAgICBtYW51
YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGFyYW1ldGVycy5tYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAg
fQotCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3Jp
Z2luU3RvcmFnZVF1b3RhID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VR
dW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBl
clRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGVy
VGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICAKLSAgICAgICAgY29uc3Qg
YXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc29s
dmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0NhY2hlRGly
ZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3Rv
cnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpU
eXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBhdXRvJiBoc3RzU3RvcmFnZURpcmVjdG9y
eSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEhTVFNTdG9yYWdlRGlyZWN0b3J5KCk7
Ci0gICAgICAgIGlmICghaHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7Ci0g
ICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoaHN0c1N0b3JhZ2VEaXJl
Y3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICht
X3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsK
LSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5o
YXNTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5z
aG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFt
ZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAgIHNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFi
bGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAgICAgIHN0YW5k
YWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0g
ICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91bmREb21haW5zOwotICAgICAgICAg
ICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0g
ICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
LnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3Rv
cmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+
cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotCi0gICAgICAgIGNvbnN0IGF1dG8m
IG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3
b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3Rvcnku
aXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5l
dHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJl
YWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNvbnN0IGF1dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEhTVFNTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgICAg
IGlmICghaHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoaHN0c1N0b3JhZ2VEaXJlY3RvcnksIFNh
bmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYg
KFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgICAg
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGF0YVN0b3JlKCktPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0gICAgICAgIGF1
dG8gbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdE5ldHdv
cmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3Rvcnkg
PSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJl
YWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAg
ICB9Ci0KLSNpZiBIQVZFKENGTkVUV09SS19BTFRFUk5BVElWRV9TRVJWSUNFKQotICAgIGlmIChX
ZWJzaXRlRGF0YVN0b3JlOjpodHRwM0VuYWJsZWQoKSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5h
dGl2ZVNlcnZpY2VEaXJlY3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0QWx0ZXJuYXRp
dmVTZXJ2aWNlc0RpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIXBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2Vy
dmljZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNl
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5odHRwM0VuYWJsZWQgPSB0cnVlOwotICAgIH0KLSNlbmRpZgot
ICAgIGJvb2wgaXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQgPSBmYWxzZTsKLSAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycyA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJh
bWV0ZXJzIHsKLSAgICAgICAgV1RGTW92ZShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
KSwKLSAgICAgICAgV1RGTW92ZShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKSwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcywKLSAgICAg
ICAgaXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQsCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQsCi0gICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3Qs
Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUsCi0jaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJs
b2NraW5nTW9kZSwKLSAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQsCi0j
ZW5kaWYKLSAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUsCi0gICAgICAg
IHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiwKLSAgICAgICAgYXBwQm91bmREb21haW5zLAot
ICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSwKLSAgICB9OwotCi0gICAgLy8gQWRkIGFu
eSBwbGF0Zm9ybSBzcGVjaWZpYyBwYXJhbWV0ZXJzCi0gICAgcGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBuZXR3b3Jr
IHByb2Nlc3MuCi0gICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpJbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyksIDApOwotCi0jaWYgUExB
VEZPUk0oQ09DT0EpCi0gICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRRT1MobmV0d29ya1Byb2Nlc3NMYXRlbmN5UU9TKCksIG5ldHdvcmtQcm9jZXNz
VGhyb3VnaHB1dFFPUygpKSwgMCk7Ci0jZW5kaWYKLQotICAgIG5ldHdvcmtQcm9jZXNzLT51cGRh
dGVQcm9jZXNzQXNzZXJ0aW9uKCk7Ci0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsK
LSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdlYnNpdGVE
YXRhU3RvcmUpKTsKLSAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nv
b2tpZXMoKTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIG5ldHdvcmsgcHJvY2VzcyBr
bm93cyBhYm91dCBhbGwgdGhlIHNlc3Npb25zIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgYmVm
b3JlIGl0IHN0YXJ0ZWQuCi0gICAgZm9yIChhdXRvJiBzZXNzaW9uSUQgOiBtX3Nlc3Npb25Ub1Bh
Z2VJRHNNYXAua2V5cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0g
V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklE
KHNlc3Npb25JRCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigqd2Vi
c2l0ZURhdGFTdG9yZSk7Ci0gICAgfQotCi0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IFdURk1vdmUo
bmV0d29ya1Byb2Nlc3MpOwotICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLX0KLQogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJv
eHkmIG5ldHdvcmtQcm9jZXNzUHJveHkpCiB7Ci0gICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3Mp
OwotICAgIEFTU0VSVCgmbmV0d29ya1Byb2Nlc3NQcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdl
dCgpKTsKLQogICAgIGZvciAoYXV0byYgc3VwcGxlbWVudCA6IG1fc3VwcGxlbWVudHMudmFsdWVz
KCkpCiAgICAgICAgIHN1cHBsZW1lbnQtPnByb2Nlc3NEaWRDbG9zZSgmbmV0d29ya1Byb2Nlc3NQ
cm94eSk7CiAKQEAgLTc1MSw5ICs0NjcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcgogICAg
IGlmIChtX2F1dG9tYXRpb25TZXNzaW9uKQogICAgICAgICBtX2F1dG9tYXRpb25TZXNzaW9uLT50
ZXJtaW5hdGUoKTsKIAotICAgIC8vIExlYXZlIHRoZSBwcm9jZXNzIHByb3h5IGFyb3VuZCBkdXJp
bmcgY2xpZW50IGNhbGwsIHNvIHRoYXQgdGhlIGNsaWVudCBjb3VsZCBxdWVyeSB0aGUgcHJvY2Vz
cyBpZGVudGlmaWVyLgotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOwotCiAgICAgdGVy
bWluYXRlU2VydmljZVdvcmtlcnMoKTsKIH0KIApAQCAtNzY0LDIwICs0NzcsNiBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc0NyYXNoZWQoV2ViUHJvY2Vzc1Byb3h5
JiBwcm94eSkKICNlbmRpZgogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJl
cGx5JiYgcmVwbHkpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdv
cmtQcm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1Byb3h5LCBb
dGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHdlYlByb2Nlc3NQcm94eSA9IG1h
a2VXZWFrUHRyKHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0gV1RGTW92ZShyZXBseSldIChhdXRv
JiBjb25uZWN0aW9uSW5mbykgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghSVBDOjpD
b25uZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSW5mby5pZGVudGlmaWVyKCkp
ICYmIHdlYlByb2Nlc3NQcm94eSAmJiB3ZWFrVGhpcykpIHsKLSAgICAgICAgICAgIFdFQlBST0NF
U1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKFByb2Nlc3MsICJnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb246IEZhaWxlZCBmaXJzdCBhdHRlbXB0LCByZXRyeWluZyIpOwotICAgICAgICAgICAgZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqd2ViUHJvY2Vzc1Byb3h5LCBXVEZNb3ZlKHJlcGx5KSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcmVwbHkoY29ubmVjdGlv
bkluZm8pOwotICAgIH0pOwotfQotCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6Z3B1UHJvY2Vzc0NyYXNoZWQoUHJvY2Vzc0lEIGlkZW50aWZpZXIpCiB7CkBA
IC04MDEsMjMgKzUwMCwyNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpnZXRHUFVQcm9jZXNzQ29u
bmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwgTQogfQogI2VuZGlmCiAK
K2Jvb2wgV2ViUHJvY2Vzc1Bvb2w6OnNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9
IGZhbHNlOworCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdv
cmtQcm9jZXNzUHJveHkmIHByb3h5LCBSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9t
YWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHByb3h5LCAmcHJveHkg
PT0gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKSk7CisgICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9
IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25J
RCk7CisgICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKQorICAgICAgICB3ZWJzaXRlRGF0YVN0b3Jl
ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOworICAgIGlmICgh
cHJvY2Vzc1Bvb2xzKCkuc2l6ZSgpKQorICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVm
PFdlYlByb2Nlc3NQb29sPj4gc2VydmljZVdvcmtlclByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29s
OjpjcmVhdGUoQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OmNyZWF0ZSgpLmdldCgpKSk7
CiAKLSAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3Rp
bmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7Ci0KLSAgICBpZiAo
IXdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUpCi0g
ICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLSAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSA9IG1f
d2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsKLSAgICB9CisgICAgLy8gQXJiaXRyYXJpbHkgY2hvb3Nl
IHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wgdG8gaG9zdCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vz
cy4KKyAgICBhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29scygpWzBdOworICAgIEFTU0VS
VChwcm9jZXNzUG9vbCk7CiAKICAgICBXZWJQcm9jZXNzUHJveHkqIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHkgeyBudWxscHRyIH07Ci0gICAgaWYgKCFtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MpIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsK
LSAgICAgICAgICAgIGlmIChwcm9jZXNzID09IG1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9jZXNz
LT5pc0R1bW15UHJvY2Vzc1Byb3h5KCkpCisKKyAgICBpZiAoIXNfdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcykgeworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBwcm9jZXNzUG9v
bC0+bV9wcm9jZXNzZXMpIHsKKyAgICAgICAgICAgIGlmIChwcm9jZXNzID09IHByb2Nlc3NQb29s
LT5tX3ByZXdhcm1lZFByb2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94eSgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCZwcm9jZXNzLT53ZWJz
aXRlRGF0YVN0b3JlKCkgIT0gd2Vic2l0ZURhdGFTdG9yZSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKQEAgLTgyNSwzNSArNTI3LDM1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlz
aFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNz
UHJveHkgPSBwcm9jZXNzLmdldCgpOwotICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eS0+ZW5hYmxlU2VydmljZVdvcmtlcnModXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmll
ckZvclNlcnZpY2VXb3JrZXJzKCkpOworICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eS0+ZW5hYmxlU2VydmljZVdvcmtlcnMocHJvY2Vzc1Bvb2wtPnVzZXJDb250ZW50Q29udHJv
bGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpKTsKIAotICAgICAgICAgICAgV0VCUFJP
Q0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNo
V29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIHJldXNpbmcgYW4gZXhpc3Rp
bmcgd2ViIHByb2Nlc3MgKHByb2Nlc3M9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsK
KyAgICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElD
KFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29y
a1Byb2Nlc3MgcmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0lcCwgUElE
PSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJv
eHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICB9CiAKICAgICBpZiAoIXNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpIHsKLSAgICAgICAg
YXV0byBuZXdQcm9jZXNzUHJveHkgPSBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZUZvclNlcnZpY2VX
b3JrZXJzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgKndlYnNpdGVEYXRhU3Rv
cmUpOworICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6Y3Jl
YXRlRm9yU2VydmljZVdvcmtlcnMoKnByb2Nlc3NQb29sLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9t
YWluKSwgKndlYnNpdGVEYXRhU3RvcmUpOwogICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1By
b3h5ID0gbmV3UHJvY2Vzc1Byb3h5LnB0cigpOwogCi0gICAgICAgIFdFQlBST0NFU1NQT09MX1JF
TEVBU0VfTE9HX0lGX0FMTE9XRUQoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRl
eHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyBjcmVhdGluZyBhIG5ldyBzZXJ2aWNlIHdvcmtl
ciBwcm9jZXNzIChwcm9jZXM9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5
LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKKyAgICAg
ICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoU2VydmljZVdv
cmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyBj
cmVhdGluZyBhIG5ldyBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzIChwcm9jZXM9JXAsIFBJRD0lZCki
LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5w
cm9jZXNzSWRlbnRpZmllcigpKTsKIAotICAgICAgICBpbml0aWFsaXplTmV3V2ViUHJvY2Vzcyhu
ZXdQcm9jZXNzUHJveHksIHdlYnNpdGVEYXRhU3RvcmUpOwotICAgICAgICBtX3Byb2Nlc3Nlcy5h
cHBlbmQoV1RGTW92ZShuZXdQcm9jZXNzUHJveHkpKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPmlu
aXRpYWxpemVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFTdG9yZSk7
CisgICAgICAgIHByb2Nlc3NQb29sLT5tX3Byb2Nlc3Nlcy5hcHBlbmQoV1RGTW92ZShuZXdQcm9j
ZXNzUHJveHkpKTsKICAgICB9CiAKLSAgICBBU1NFUlQoIW1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cy5jb250YWlucygqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkpOwotICAgIG1fc2VydmljZVdv
cmtlclByb2Nlc3Nlcy5hZGQoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpOworICAgIEFTU0VS
VCghc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5KSk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmFkZCgqc2VydmljZVdvcmtl
clByb2Nlc3NQcm94eSk7CiAKLSAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lc3RhYmxp
c2hTZXJ2aWNlV29ya2VyQ29udGV4dChtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA/IG1fc2Vy
dmljZVdvcmtlclByZWZlcmVuY2VzLnZhbHVlKCkgOiBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZl
cmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGlmICgh
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50LmlzTnVsbCgpKQotICAgICAgICBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KG1fc2VydmljZVdvcmtlclVz
ZXJBZ2VudCk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZXN0YWJsaXNoU2Vydmlj
ZVdvcmtlckNvbnRleHQocHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzID8g
cHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzLnZhbHVlKCkgOiBwcm9jZXNz
UG9vbC0+bV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLnN0b3JlKCksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBpZiAoIXByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3Jr
ZXJVc2VyQWdlbnQuaXNOdWxsKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkt
PnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQocHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclVz
ZXJBZ2VudCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKIHsKLSAgICBBU1NFUlQobV9z
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKHByb2Nlc3MpKTsKLSAgICBtX3NlcnZpY2VX
b3JrZXJQcm9jZXNzZXMucmVtb3ZlKHByb2Nlc3MpOworICAgIEFTU0VSVChzZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzKCkuY29udGFpbnMocHJvY2VzcykpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMoKS5yZW1vdmUocHJvY2Vzcyk7CiB9CiAjZW5kaWYKIApAQCAtOTIyLDcgKzYyNCw3IEBAIFJl
ZlB0cjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2FybWVkUHJv
Y2VzcyhXZWJzaXRlRGF0YVN0b3JlCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUp
CiAgICAgLy8gSW4gcGxhdGZvcm1zIHVzaW5nIEJ1YmJsZXdyYXAgZm9yIHNhbmRib3hpbmcsIHBy
ZXdhcm1lZCBwcm9jZXNzIGlzIGxhdW5jaGVkIHVzaW5nIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmlt
YXJ5IFdlYnNpdGVEYXRhU3RvcmUsCiAgICAgLy8gc28gd2UgZG9uJ3QgdXNlIGl0IGluIGNhc2Ug
b2YgdXNpbmcgYSBkaWZmZXJlbnQgV2Vic2l0ZURhdGFTdG9yZS4KLSAgICBpZiAobV9zYW5kYm94
RW5hYmxlZCAmJiBtX3dlYnNpdGVEYXRhU3RvcmUgJiYgbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgp
ICE9ICZ3ZWJzaXRlRGF0YVN0b3JlKQorICAgIGlmIChtX3NhbmRib3hFbmFibGVkKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICNlbmRpZgogCkBAIC0xMDMyLDggKzczNCw2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJv
Y2VzcywgV2Vic2l0ZURhCiAgICAgICAgIHByb2Nlc3MuaXNSZXNwb25zaXZlKFtpbml0aWFsaXph
dGlvbkFjdGl2aXR5ID0gV1RGTW92ZShpbml0aWFsaXphdGlvbkFjdGl2aXR5KV0gKGJvb2wpIHsg
fSk7CiAgICAgfSk7CiAKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAgV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwogCiAgICAgcGFyYW1ldGVycy5pbmpl
Y3RlZEJ1bmRsZVBhdGggPSBtX3Jlc29sdmVkUGF0aHMuaW5qZWN0ZWRCdW5kbGVQYXRoOwpAQCAt
MTE5OCw5ICs4OTgsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1
bmNoaW5nKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKICAgICAgICAgcHJvY2Vzcy0+Y29ubmVj
dGlvbigpLT5pZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcoKTsKIAogICAgIG1fY29ubmVjdGlvbkNs
aWVudC5kaWRDcmVhdGVDb25uZWN0aW9uKHRoaXMsIHByb2Nlc3MtPndlYkNvbm5lY3Rpb24oKSk7
Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBtX3dlYnNpdGVEYXRhU3Rv
cmUtPmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OmRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKQEAgLTEyOTUsMTAg
Kzk5Miw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdl
KFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAgICAgaWYgKCFwYWdlQ29uZmlndXJh
dGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpKSB7CiAgICAgICAgIC8vIFdlIHRyeSB0byBhdm9pZCBj
cmVhdGluZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxvbmcgYXMgcG9zc2libGUuCiAgICAg
ICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRvIGNyZWF0ZSBhIHdlYiBwYWdlIHdp
dGhvdXQgYW55IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVuIHdlIGhhdmUgdG8gY3JlYXRlIGl0
LgotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0
ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgp
LnB0cigpOwotCi0gICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3Jl
KG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5z
ZXRXZWJzaXRlRGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZSgpLnB0cigpKTsKICAgICB9CiAKICAgICBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBwcm9j
ZXNzOwpAQCAtMTMyOSw3ICsxMDIzLDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJvY2Vzc1Bv
b2w6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSToKICNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNl
cykgewogICAgICAgICBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA9IHBhZ2UtPnByZWZlcmVu
Y2VzU3RvcmUoKTsKLSAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1f
c2VydmljZVdvcmtlclByb2Nlc3NlcykKKyAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2Vy
UHJvY2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgICAgIHNlcnZpY2VX
b3JrZXJQcm9jZXNzLnVwZGF0ZVNlcnZpY2VXb3JrZXJQcmVmZXJlbmNlc1N0b3JlKCptX3NlcnZp
Y2VXb3JrZXJQcmVmZXJlbmNlcyk7CiAgICAgfQogICAgIGlmICh1c2VyQ29udGVudENvbnRyb2xs
ZXIpCkBAIC0xMzU2LDcgKzEwNTAsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2
aWNlV29ya2VyVXNlckFnZW50KGNvbnN0IFN0cmluZyYgdXNlckFnZW50KQogICAgIGlmIChtX3Nl
cnZpY2VXb3JrZXJVc2VyQWdlbnQgPT0gdXNlckFnZW50KQogICAgICAgICByZXR1cm47CiAgICAg
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50ID0gdXNlckFnZW50OwotICAgIGZvciAoYXV0byYgc2Vy
dmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMpCisgICAgZm9yIChh
dXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAg
ICAgICAgc2VydmljZVdvcmtlclByb2Nlc3Muc2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChtX3Nl
cnZpY2VXb3JrZXJVc2VyQWdlbnQpOwogfQogI2VuZGlmCkBAIC0xMzY1LDE1ICsxMDU5LDYgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBh
Z2VQcm94eUlkZW50aWZpZXIgcGFnZUkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1fc2Vzc2lvblRv
UGFnZUlEc01hcC5hZGQoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBIYXNoU2V0PFdlYlBhZ2VQcm94
eUlkZW50aWZpZXI+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQocGFnZUlEKTsKICAgICBBU1NFUlRf
VU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwotCi0gICAgYXV0byBzZXNzaW9uSUQg
PSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7Ci0gICAgaWYgKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIEFTU0VSVCghc2Vzc2lvbklELmlz
RXBoZW1lcmFsKCkgfHwgZGF0YVN0b3JlLnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuc2Vzc2lvbklEID09IHNlc3Npb25JRCk7Ci0gICAgICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYo
ZGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICBkYXRhU3RvcmUuY2xlYXJQZW5kaW5nQ29va2llcygp
OwotICAgICAgICB9Ci0gICAgfQogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdlRW5kVXNp
bmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBXZWJzaXRl
RGF0YVN0b3JlJiBkYXRhU3RvcmUpCkBAIC0xNDAxLDcgKzEwODYsNiBAQCBib29sIFdlYlByb2Nl
c3NQb29sOjpoYXNQYWdlc1VzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlJiBk
YXRhU3RvcmUpCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0
ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5h
bWUpCiB7CiAgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0
YVN0b3JlLCByZXF1ZXN0LCBpbml0aWF0aW5nUGFnZSwgeyB9KTsKLSAgICBQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7CiAKICAgICBPcHRpb25hbDxOYXZp
Z2F0aW5nVG9BcHBCb3VuZERvbWFpbj4gaXNBcHBCb3VuZCA9IE5hdmlnYXRpbmdUb0FwcEJvdW5k
RG9tYWluOjpObzsKICAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKQEAgLTE0MTEsMjYgKzEwOTUs
MjMgQEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRh
U3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3gKICNlbmRpZgogICAgIH0KIAotICAgIGlmIChu
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVz
dChyZXF1ZXN0KTsKLSAgICAgICAgLy8gUmVxdWVzdCdzIGZpcnN0UGFydHlGb3JDb29raWVzIHdp
bGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwgb2YgdGhlIGRvd25sb2FkIHJlcXVlc3QuCi0gICAg
ICAgIC8vIFdlIHNldCB0aGUgdmFsdWUgdG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJMLgotICAg
ICAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKLSAgICAgICAgICAgIFVSTCBpbml0aWF0aW5nUGFn
ZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGluaXRpYXRpbmdQYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJs
KCkgfTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVz
KGluaXRpYXRpbmdQYWdlVVJMKTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2Ft
ZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVl
c3QudXJsKCkpKTsKLSAgICAgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQotICAgICAgICAgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2VudEZvclVS
TChyZXF1ZXN0LnVybCgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1cGRhdGVk
UmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhVUkwoKSk7Ci0gICAgICAgICAgICB1cGRh
dGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKLSAgICAgICAgICAgIGlmICghdXBkYXRl
ZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQot
ICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoV2ViUGFnZVBy
b3h5OjpzdGFuZGFyZFVzZXJBZ2VudCgpKTsKLSAgICAgICAgfQotICAgICAgICB1cGRhdGVkUmVx
dWVzdC5zZXRJc1RvcFNpdGUoZmFsc2UpOwotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RG93bmxvYWRSZXF1ZXN0KHNlc3Npb25JRCwgZG93
bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0LCBpc0FwcEJvdW5kLCBzdWdn
ZXN0ZWRGaWxlbmFtZSksIDApOwotICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKKyAgICBS
ZXNvdXJjZVJlcXVlc3QgdXBkYXRlZFJlcXVlc3QocmVxdWVzdCk7CisgICAgLy8gUmVxdWVzdCdz
IGZpcnN0UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwgb2YgdGhl
IGRvd25sb2FkIHJlcXVlc3QuCisgICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3AgbGV2ZWwg
ZG9jdW1lbnQncyBVUkwuCisgICAgaWYgKGluaXRpYXRpbmdQYWdlKSB7CisgICAgICAgIFVSTCBp
bml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGluaXRpYXRpbmdQYWdlLT5wYWdlTG9h
ZFN0YXRlKCkudXJsKCkgfTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZv
ckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwpOworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJ
c1NhbWVTaXRlKGFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGluaXRpYXRpbmdQYWdlVVJMLCBy
ZXF1ZXN0LnVybCgpKSk7CisgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQorICAgICAgICAgICAgdXBkYXRlZFJl
cXVlc3Quc2V0SFRUUFVzZXJBZ2VudChpbml0aWF0aW5nUGFnZS0+dXNlckFnZW50Rm9yVVJMKHJl
cXVlc3QudXJsKCkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRG
aXJzdFBhcnR5Rm9yQ29va2llcyhVUkwoKSk7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElz
U2FtZVNpdGUoZmFsc2UpOworICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFk
ZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKKyAgICAgICAgICAgIHVwZGF0ZWRS
ZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudCgp
KTsKICAgICB9CisgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZhbHNlKTsKKyAgICBk
YXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
RG93bmxvYWRSZXF1ZXN0KGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgZG93bmxvYWRQcm94eS5kb3du
bG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0LCBpc0FwcEJvdW5kLCBzdWdnZXN0ZWRGaWxlbmFtZSks
IDApOwogCiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CkBAIC0xNDM4LDE3ICsxMTE5LDEy
IEBAIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0
b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94CiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9v
bDo6cmVzdW1lRG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJv
eHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBBUEk6OkRhdGEmIHJlc3VtZURhdGEsIGNvbnN0IFN0
cmluZyYgcGF0aCkKIHsKICAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0gY3JlYXRlRG93bmxvYWRQ
cm94eShkYXRhU3RvcmUsIFJlc291cmNlUmVxdWVzdCgpLCBpbml0aWF0aW5nUGFnZSwgeyB9KTsK
LSAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7CiAK
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZTsKICAg
ICBpZiAoIXBhdGguaXNFbXB0eSgpKQogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGUocGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlKTsKIAotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIG5l
dHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXN1bWVEb3du
bG9hZChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLmRh
dGFSZWZlcmVuY2UoKSwgcGF0aCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOwotICAgICAg
ICByZXR1cm4gZG93bmxvYWRQcm94eTsKLSAgICB9Ci0KKyAgICBkYXRhU3RvcmUubmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoZGF0
YVN0b3JlLnNlc3Npb25JRCgpLCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0
YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKICAg
ICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KIApAQCAtMTUxNywxMSArMTE5Myw2IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnJlZnJlc2hQbHVnaW5zKCkKIAogI2VuZGlmIC8vIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQogCi1Qcm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9j
ZXNzSWRlbnRpZmllcigpCi17Ci0gICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MgPyBtX25ldHdv
cmtQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpIDogMDsKLX0KLQogUHJvY2Vzc0lEIFdlYlBy
b2Nlc3NQb29sOjpwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcigpCiB7CiAgICAgcmV0dXJuIG1f
cHJld2FybWVkUHJvY2VzcyA/IG1fcHJld2FybWVkUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIo
KSA6IDA7CkBAIC0xNTU4LDE0ICsxMjI5LDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lz
dGVyVVJMU2NoZW1lQXNTZWN1cmUoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVn
YWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUo
dXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6
OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFz
U2VjdXJlKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRl
RGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAg
ICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdD
b250ZW50U2VjdXJpdHlQb2xpY3koY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVn
YWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3Np
bmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNz
ZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250
ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5n
Q29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6
OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBk
YXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50
U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoY29uc3Qg
U3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNTc4LDE0ICsxMjUzLDE4IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkK
IHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxTY2hl
bWVBc0xvY2FsKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7Ci0gICAgc2Vu
ZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVS
TFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFj
aFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9y
ZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSksIDApOwor
ICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzTm9B
Y2Nlc3MoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGlu
Z3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpOwog
ICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxT
Y2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNz
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVy
bFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3Jl
KFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0
YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJl
Z2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3BsYXlJc29sYXRlZChj
b25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MDYsMTAgKzEyODUsOCBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyhjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0
aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5hZGQodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1dG8q
IHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1
cmxTY2hlbWUpOwotICAgIH0KKyAgICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7CiB9
CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmlu
Z0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNjE4
LDEwICsxMjk1LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2JhbFVSTFNj
aGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb24KICAgICAgICAgcmV0dXJuOwog
CiAgICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkucmVtb3Zl
KHVybFNjaGVtZSk7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnVucmVnaXN0ZXJT
Y2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwotICAgIH0KKyAgICBmb3Ig
KGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJv
Y2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1lRm9yTGVn
YWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQoY29uc3QgU3RyaW5nJiB1cmxTY2hl
bWUpCkBAIC0xNjU1LDE2ICsxMzMwLDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hl
TW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpKTsKIAotICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAg
V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW2NhY2hlTW9kZWxdIChX
ZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQ
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2Fj
aGVNb2RlbCksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDYWNo
ZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogewog
ICAgIHVwZGF0ZUJhY2tGb3J3YXJkQ2FjaGVDYXBhY2l0eSgpOwogCi0gICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKGNhY2hl
TW9kZWwpLCB7IH0sIHsgfSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVE
YXRhU3RvcmUoW2NhY2hlTW9kZWxdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAg
ICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2Rl
bCksIHsgfSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1
bHRSZXF1ZXN0VGltZW91dEludGVydmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCkBAIC0xNjc0
LDEyICsxMzUxLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1l
b3V0SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKIAogRG93bmxvYWRQcm94eSYgV2Vi
UHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0
b3JlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYlBhZ2VQcm94eSogb3JpZ2lu
YXRpbmdQYWdlLCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8pCiB7Ci0gICAgcmV0dXJu
IGVuc3VyZU5ldHdvcmtQcm9jZXNzKCZkYXRhU3RvcmUpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0
YVN0b3JlLCByZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7Ci19Ci0KLXZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5k
KQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFja2dyb3Vu
ZChiYWNrZ3JvdW5kKTsKKyAgICByZXR1cm4gZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuY3Jl
YXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsICp0aGlzLCByZXF1ZXN0LCBmcmFtZUluZm8sIG9y
aWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFkZE1lc3NhZ2VSZWNl
aXZlcihJUEM6OlJlY2VpdmVyTmFtZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQpAQCAtMTc1MCwzMCArMTQyMiw2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnN0b3BNZW1vcnlTYW1wbGVyKCkKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMo
TWVzc2FnZXM6OldlYlByb2Nlc3M6OlN0b3BNZW1vcnlTYW1wbGVyKCkpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFN5bmNU
b05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBVJiYgcmVwbHkpCi17Ci0gICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAg
ICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2Up
LCBzdGQ6OmZvcndhcmQ8VT4ocmVwbHkpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6
Y2xlYXJDYWNoZWRDcmVkZW50aWFscyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKQot
ewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNz
aW9uSUQpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0d29ya1By
b2Nlc3MoKQotewotICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7Ci0KLSAgICBpZiAoIW1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX25ldHdvcmtQcm9j
ZXNzLT50ZXJtaW5hdGUoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKLX0KLQog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlQWxsV2ViQ29udGVudFByb2Nlc3NlcygpCiB7
CiAgICAgVmVjdG9yPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXMgPSBtX3Byb2Nl
c3NlczsKQEAgLTE3ODEsNDAgKzE0MjksMTUgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWlu
YXRlQWxsV2ViQ29udGVudFByb2Nlc3NlcygpCiAgICAgICAgIHByb2Nlc3MtPnRlcm1pbmF0ZSgp
OwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9T
dXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCi17Ci0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIoKTsKLQotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcmVwYXJlVG9T
dXNwZW5kKElzU3VzcGVuc2lvbkltbWluZW50OjpObywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
LSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHlGb3JUZXN0aW5nKCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJv
Y2Vzc0RpZFJlc3VtZSgpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7Ci19Ci0KIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCkKIHsKICNpZiBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCiAgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7Ci0gICAg
d2hpbGUgKG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb21wdXRlU2l6ZSgpKQotICAgICAgICBt
X3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYmVnaW4oKS0+ZGlzYWJsZVNlcnZpY2VXb3JrZXJzKCk7
CisgICAgd2hpbGUgKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb21wdXRlU2l6ZSgpKQorICAg
ICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuYmVnaW4oKS0+ZGlzYWJsZVNlcnZpY2VXb3Jr
ZXJzKCk7CiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Zmx1c2hDb29raWVzKGNv
bnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmZsdXNo
Q29va2llcyhzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlQXV0b21hdGlvbkNhcGFiaWxpdGllcygpIGNvbnN0CiB7
CiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCkBAIC0yMDg5LDE1ICsxNzEyLDIxIEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnJlcG9ydFdlYkNvbnRlbnRDUFVUaW1lKFNlY29uZHMgY3B1VGlt
ZSwgdWludDY0X3QgYWN0aXZpdHlTCiAjZW5kaWYKIH0KIAorV2Vha0hhc2hTZXQ8V2ViUHJvY2Vz
c1Byb3h5PiYgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKQoreworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+PiBwcm9j
ZXNzZXM7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKwogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbnMoKQogewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hX
ZWJzaXRlRGF0YVN0b3JlKFtdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAg
ICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkudXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwor
ICAgIH0pOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICAvLyBDaGVjayBvbiBuZXh0
IHJ1biBsb29wIHNpbmNlIHRoZSB3ZWIgcHJvY2VzcyBwcm94eSB0b2tlbnMgYXJlIHByb2JhYmx5
IGJlaW5nIHVwZGF0ZWQuCi0gICAgY2FsbE9uTWFpblJ1bkxvb3AoW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIodGhpcyldIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2Vy
dmljZVdvcmtlclByb2Nlc3NlcykKKyAgICBjYWxsT25NYWluUnVuTG9vcChbXSB7CisgICAgICAg
IGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
KCkpCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzc0Fzc2VydGlvbigpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMTA3LDcgKzE3MzYsNyBA
QCBib29sIFdlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFnZVByb3h5
SWRlbnRpZmllciBwYWdlSUQpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQog
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluZWZmaWNpZW50LgotICAgIHJldHVybiBXVEY6OmFueU9m
KG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW3BhZ2VJRF0oYXV0byYgcHJvY2VzcykgeworICAg
IHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW3BhZ2VJRF0oYXV0
byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyUGFn
ZVByb3h5KHBhZ2VJRCk7CiAgICAgfSk7CiAjZW5kaWYKQEAgLTIzMjksMTQgKzE5NTgsNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygp
CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIHRvRG9tYWluLCBPcHRpb25TZXQ8Q3Jvc3NTaXRlTmF2aWdh
dGlvbkRhdGFUcmFuc2Zlcjo6RmxhZz4gbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgV2ViUGFnZVBy
b3h5SWRlbnRpZmllciB3ZWJQYWdlUHJveHlJRCwgUGFnZUlkZW50aWZpZXIgd2ViUGFnZUlEKQot
ewotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vz
c2lvbklELCBmcm9tRG9tYWluLCB0b0RvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2Vi
UGFnZVByb3h5SUQsIHdlYlBhZ2VJRCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERv
bWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4+JiYgZG9tYWlucykKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKGRvbWFpbnMpKTsKQEAgLTIzODcs
MjcgKzIwMDgsMjcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlQXVkaWJsZU1lZGlhQXNz
ZXJ0aW9ucygpCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MoYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogewotICAg
IGlmIChtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcykKKyAgICBpZiAoc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzID09IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2Vzcz0lZCkiLCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXRUJQUk9D
RVNTUE9PTF9SRUxFQVNFX0xPR19TVEFUSUMoU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3M6ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVk
KSIsIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogCi0gICAgbV91c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsK
LSAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwotICAgIHRlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzKCk7CisgICAgc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzczsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+dGVy
bWluYXRlU2VydmljZVdvcmtlcnMoKTsKIH0KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
IGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlG
b3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3Jr
ZXJQcm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihz
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0
dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3Rpbmco
KTsKICAgICB9KTsKIH0KIAogYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckJh
Y2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdAogewotICAgIHJldHVybiBXVEY6OmFu
eU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10oYXV0byYgcHJvY2VzcykgeworICAgIHJl
dHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW10oYXV0byYgcHJvY2Vz
cykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFj
dGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmgKaW5kZXggZDFmMWZlOTYxNTA2YTFlNWYxMzI1ZmE5OWE1NjA4Yjk1MGI2
YWI3MS4uN2MyNTQ4OTAzNjY4OWNmOWZhZWI4NzgxOTA2NzlkYWYxMTE2YTMwYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCkBAIC04MSw3ICs4MSw2IEBAIE9CSkNf
Q0xBU1MgV0tQcmVmZXJlbmNlT2JzZXJ2ZXI7CiAKIG5hbWVzcGFjZSBBUEkgewogY2xhc3MgQXV0
b21hdGlvbkNsaWVudDsKLWNsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKIGNsYXNz
IERvd25sb2FkQ2xpZW50OwogY2xhc3MgSFRUUENvb2tpZVN0b3JlOwogY2xhc3MgSW5qZWN0ZWRC
dW5kbGVDbGllbnQ7CkBAIC0xODAsNyArMTc5LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGlz
dG9yeUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVu
dD4mJik7CiAgICAgdm9pZCBzZXREb3dubG9hZENsaWVudChVbmlxdWVSZWY8QVBJOjpEb3dubG9h
ZENsaWVudD4mJik7CiAgICAgdm9pZCBzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0
cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JiYpOwotICAgIHZvaWQgc2V0TGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudD4mJik7CiAKICAgICB2b2lkIHNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVu
ZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKICAgICBjb25zdCBTdHJpbmcmIGN1c3RvbVdl
YkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlv
bi0+Y3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCk7IH0KQEAgLTE5MSwx
NyArMTg5LDkgQEAgcHVibGljOgogICAgIC8vIG51bGwgY2hlY2tzIGluIFdlYlBhZ2VQcm94eS4K
ICAgICBXZWJQcm9jZXNzUHJveHkqIGR1bW15UHJvY2Vzc1Byb3h5KFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCkgY29uc3QgeyByZXR1cm4gbV9kdW1teVByb2Nlc3NQcm94aWVzLmdldChzZXNzaW9u
SUQpLmdldCgpOyB9CiAKLSAgICAvLyBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNzIGFzIGFw
cHJvcG9yaWF0ZSBmb3IgY3VycmVudCBwcm9jZXNzIG1vZGVsLiBUaGUgY29ubmVjdGlvbiBtdXN0
IGJlIG5vbi1udWxsLgotICAgIElQQzo6Q29ubmVjdGlvbiogbmV0d29ya2luZ1Byb2Nlc3NDb25u
ZWN0aW9uKCk7Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0FsbFByb2Nl
c3Nlcyhjb25zdCBUJiBtZXNzYWdlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNl
bmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oY29uc3QgVCYgbWVzc2FnZSwgUEFMOjpTZXNzaW9u
SUQpOwogCi0gICAgLy8gU2VuZHMgdGhlIG1lc3NhZ2UgdG8gV2ViUHJvY2VzcyBvciBOZXR3b3Jr
UHJvY2VzcyBhcyBhcHByb3BvcmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNz
YWdlKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiB2b2lkIHNlbmRTeW5j
VG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KTsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5l
Y2Vzc2FyeShUJiYgbWVzc2FnZSk7Ci0KICAgICB2b2lkIHByb2Nlc3NEaWRGaW5pc2hMYXVuY2hp
bmcoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKICAgICBXZWJQcm9jZXNzQ2FjaGUmIHdlYlByb2Nlc3ND
YWNoZSgpIHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0NhY2hlLmdldCgpOyB9CkBAIC0yMDksOSArMTk5
LDYgQEAgcHVibGljOgogICAgIC8vIERpc2Nvbm5lY3QgdGhlIHByb2Nlc3MgZnJvbSB0aGUgY29u
dGV4dC4KICAgICB2b2lkIGRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSopOwogCi0g
ICAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlKiB3ZWJzaXRlRGF0YVN0b3JlKCkgY29uc3QgeyBy
ZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRQcmltYXJ5RGF0
YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7IG1fd2Vic2l0ZURh
dGFTdG9yZSA9ICZkYXRhU3RvcmU7IH0KLQogICAgIFJlZjxXZWJQYWdlUHJveHk+IGNyZWF0ZVdl
YlBhZ2UoUGFnZUNsaWVudCYsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsKIAogICAg
IHZvaWQgcGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZp
ZXIsIFdlYnNpdGVEYXRhU3RvcmUmKTsKQEAgLTI2MiwxMCArMjQ5LDggQEAgcHVibGljOgogICAg
IHZvaWQgYWRkU3VwcG9ydGVkUGx1Z2luKFN0cmluZyYmIG1hdGNoaW5nRG9tYWluLCBTdHJpbmcm
JiBuYW1lLCBIYXNoU2V0PFN0cmluZz4mJiBtaW1lVHlwZXMsIEhhc2hTZXQ8U3RyaW5nPiBleHRl
bnNpb25zKTsKICAgICB2b2lkIGNsZWFyU3VwcG9ydGVkUGx1Z2lucygpOwogCi0gICAgUHJvY2Vz
c0lEIG5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpOwogICAgIFByb2Nlc3NJRCBwcmV3YXJtZWRQ
cm9jZXNzSWRlbnRpZmllcigpOwogICAgIHZvaWQgYWN0aXZlUGFnZXNPcmlnaW5zSW5XZWJQcm9j
ZXNzRm9yVGVzdGluZyhQcm9jZXNzSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0
cmluZz4mJik+JiYpOwotICAgIGJvb2wgbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcoY29uc3QgU3RyaW5nJik7CiAKICAgICBXZWJQYWdlR3JvdXAmIGRlZmF1bHRQYWdlR3Jv
dXAoKSB7IHJldHVybiBtX2RlZmF1bHRQYWdlR3JvdXAuZ2V0KCk7IH0KIApAQCAtMzA3LDggKzI5
Miw2IEBAIHB1YmxpYzoKICAgICBBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50JiBoaXN0
b3J5Q2xpZW50KCkgeyByZXR1cm4gKm1faGlzdG9yeUNsaWVudDsgfQogICAgIFdlYkNvbnRleHRD
bGllbnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKLSAgICBBUEk6OkN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgY29uc3Qg
eyByZXR1cm4gKm1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OyB9Ci0KICAgICBzdHJ1Y3Qg
U3RhdGlzdGljcyB7CiAgICAgICAgIHVuc2lnbmVkIHdrVmlld0NvdW50OwogICAgICAgICB1bnNp
Z25lZCB3a1BhZ2VDb3VudDsKQEAgLTMyNCw4ICszMDcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKICAgICB2b2lkIHRlcm1pbmF0ZVNlcnZpY2VX
b3JrZXJzKCk7CiAKLSAgICB2b2lkIGZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0KICAgICB2b2lkIHNldFNob3VsZE1ha2VO
ZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRN
YWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9CiAgICAgYm9v
bCBzaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpIGNvbnN0IHsg
cmV0dXJuIG1fc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmc7IH0K
ICAgICB2b2lkIHNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZyhib29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZh
aWxGb3JUZXN0aW5nID0gdmFsdWU7IH0KQEAgLTM4OCwxOSArMzY5LDEzIEBAIHB1YmxpYzoKICNl
bmRpZgogCiAgICAgLy8gTmV0d29yayBQcm9jZXNzIE1hbmFnZW1lbnQKLSAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiBlbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vi
c2l0ZURhdGFTdG9yZSA9IG51bGxwdHIpOwotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdv
cmtQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKTsgfQogICAg
IHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKTsKIAotICAg
IHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRS
ZXBseSYmKTsKLQogICAgIGJvb2wgaXNTZXJ2aWNlV29ya2VyUGFnZUlEKFdlYlBhZ2VQcm94eUlk
ZW50aWZpZXIpIGNvbnN0OwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICB2b2lkIGVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNzaW9uSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgc3RhdGljIHZvaWQgZXN0YWJsaXNo
V29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJv
eHkmLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIHJlbW92ZUZyb21TZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzKFdlYlByb2Nlc3NQcm94eSYpOwotICAgIHNpemVfdCBzZXJ2aWNlV29ya2VyUHJv
eGllc0NvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbXB1
dGVTaXplKCk7IH0KLSAgICB2b2lkIHNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vydmlj
ZVdvcmtlcihib29sIGFsbG93cykgeyBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vydmlj
ZVdvcmtlciA9IGFsbG93czsgfQotICAgIGJvb2wgYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JT
ZXJ2aWNlV29ya2VyKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZv
clNlcnZpY2VXb3JrZXI7IH0KKyAgICBzaXplX3Qgc2VydmljZVdvcmtlclByb3hpZXNDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb21wdXRlU2l6ZSgpOyB9
CiAgICAgdm9pZCB1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KGNvbnN0IFN0cmluZyYgdXNl
ckFnZW50KTsKICAgICBjb25zdCBPcHRpb25hbDxVc2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlm
aWVyPiYgdXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV91c2VyQ29udGVudENvbnRyb2xsZXJJREZvclNlcnZpY2VXb3JrZXI7
IH0KICAgICBib29sIGhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5n
KCkgY29uc3Q7CkBAIC00NTksOCArNDM0LDYgQEAgcHVibGljOgogICAgIGJvb2wgYWx3YXlzUnVu
c0F0QmFja2dyb3VuZFByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gbV9hbHdheXNSdW5zQXRCYWNr
Z3JvdW5kUHJpb3JpdHk7IH0KICAgICBib29sIHNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRp
b24oKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb247IH0K
IAotICAgIHZvaWQgc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpOwot
ICAgIAogI2lmIEVOQUJMRShHQU1FUEFEKQogICAgIHZvaWQgZ2FtZXBhZENvbm5lY3RlZChjb25z
dCBVSUdhbWVwYWQmLCBXZWJDb3JlOjpFdmVudE1ha2VzR2FtZXBhZHNWaXNpYmxlKTsKICAgICB2
b2lkIGdhbWVwYWREaXNjb25uZWN0ZWQoY29uc3QgVUlHYW1lcGFkJik7CkBAIC00OTgsNyArNDcx
LDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3Rp
bmcoKTsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgdm9pZCBk
aWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25JRCwgY29u
c3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwgT3B0aW9uU2V0PFdlYkNvcmU6OkNyb3NzU2l0
ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6OkZsYWc+LCBXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBX
ZWJDb3JlOjpQYWdlSWRlbnRpZmllcik7CiAgICAgdm9pZCBzZXREb21haW5zV2l0aFVzZXJJbnRl
cmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmKTsKICAgICB2b2lk
IHNlZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRm9yVGVzdGluZyhjb25zdCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiYgZmlyc3RQYXJ0eURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4mIHRoaXJkUGFydHlEb21haW4sIGJvb2wgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRp
b24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBzZW5kUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
OwpAQCAtNTI1LDggKzQ5Nyw4IEBAIHB1YmxpYzoKICAgICAKICAgICBQbHVnSW5BdXRvU3RhcnRQ
cm92aWRlciYgcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIoKSB7IHJldHVybiBtX3BsdWdJbkF1dG9T
dGFydFByb3ZpZGVyOyB9CiAKLSAgICB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MoYm9vbCk7Ci0gICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkg
Y29uc3QgeyByZXR1cm4gbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOyB9CisgICAg
c3RhdGljIHZvaWQgc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKKyAg
ICBzdGF0aWMgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkgeyByZXR1cm4g
c191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOyB9CiAKICNpZiBFTkFCTEUoQ0ZQUkVG
U19ESVJFQ1RfTU9ERSkKICAgICB2b2lkIG5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZChjb25zdCBT
dHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IE9wdGlvbmFsPFN0cmluZz4m
IGVuY29kZWRWYWx1ZSk7CkBAIC01MzgsOSArNTEwLDE1IEBAIHB1YmxpYzoKICAgICBpbnQzMl90
IHVzZXJJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlcklkOyB9CiAjZW5kaWYKIAotI2lmIFBMQVRG
T1JNKENPQ09BKQotICAgIE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4geHBjRW5kcG9pbnRNZXNz
YWdlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2Vi
UHJvY2VzcyhPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSk7CisgICAg
c3RhdGljIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKKyAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gdXJsU2No
ZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorICAgIHN0YXRpYyBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSgpOworICAgIHN0
YXRpYyBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBu
ZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50
Q2FjaGVzRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlE
aXJlY3RvcnkoKTsKICNlbmRpZgogCiBwcml2YXRlOgpAQCAtNTU2LDggKzUzNCw2IEBAIHByaXZh
dGU6CiAgICAgV2ViUHJvY2Vzc1Byb3h5JiBjcmVhdGVOZXdXZWJQcm9jZXNzKFdlYnNpdGVEYXRh
U3RvcmUqLCBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJ
c1ByZXdhcm1lZDo6Tm8pOwogICAgIHZvaWQgaW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MoV2ViUHJv
Y2Vzc1Byb3h5JiwgV2Vic2l0ZURhdGFTdG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJt
ZWQgPSBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkOjpObyk7CiAKLSAgICB2b2lkIHBsYXRm
b3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzJik7Ci0KICAgICB2b2lkIGhhbmRsZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5KTsKICAgICB2
b2lkIGhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHksIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVXNlckRhdGEmJik+JiYpOwogCkBAIC01ODEsMTQgKzU1Nyw2IEBAIHByaXZh
dGU6CiAKICAgICBib29sIHVzZXNTaW5nbGVXZWJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9j
b25maWd1cmF0aW9uLT51c2VzU2luZ2xlV2ViUHJvY2VzcygpOyB9CiAKLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIHN0YXRpYyBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSgpOwot
ICAgIHN0YXRpYyBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0
cmluZyBuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyB3ZWJD
b250ZW50Q2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBjb250YWluZXJUZW1w
b3JhcnlEaXJlY3RvcnkoKTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9p
ZCByZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpOwogICAgIHZvaWQgdW5yZWdpc3Rlck5v
dGlmaWNhdGlvbk9ic2VydmVycygpOwpAQCAtNjMwLDkgKzU5OCw4IEBAIHByaXZhdGU6CiAgICAg
SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vha1B0cjxXZWJQcm9jZXNzUHJveHk+PiBtX2R1bW15
UHJvY2Vzc1Byb3hpZXM7IC8vIExpZ2h0d2VpZ2h0IFdlYlByb2Nlc3NQcm94eSBvYmplY3RzIHdp
dGhvdXQgYmFja2luZyBwcm9jZXNzLgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAg
IFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzOwor
ICAgIHN0YXRpYyBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc2VzKCk7CiAgICAgYm9vbCBtX3dhaXRpbmdGb3JXb3JrZXJDb250ZXh0UHJvY2Vzc0Nvbm5l
Y3Rpb24geyBmYWxzZSB9OwotICAgIGJvb2wgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNl
cnZpY2VXb3JrZXIgeyBmYWxzZSB9OwogICAgIFN0cmluZyBtX3NlcnZpY2VXb3JrZXJVc2VyQWdl
bnQ7CiAgICAgT3B0aW9uYWw8V2ViUHJlZmVyZW5jZXNTdG9yZT4gbV9zZXJ2aWNlV29ya2VyUHJl
ZmVyZW5jZXM7CiAgICAgT3B0aW9uYWw8VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllcj4g
bV91c2VyQ29udGVudENvbnRyb2xsZXJJREZvclNlcnZpY2VXb3JrZXI7CkBAIC02NDgsNyArNjE1
LDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50
PiBtX2F1dG9tYXRpb25DbGllbnQ7CiAgICAgVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+
IG1fZG93bmxvYWRDbGllbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4
dEhpc3RvcnlDbGllbnQ+IG1faGlzdG9yeUNsaWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJ
OjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50OwogCiAgICAgUmVmUHRyPFdlYkF1dG9tYXRpb25TZXNzaW9uPiBtX2F1dG9tYXRpb25TZXNz
aW9uOwogCkBAIC02ODAsOCArNjQ2LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbWVtb3J5U2Ft
cGxlckVuYWJsZWQgeyBmYWxzZSB9OwogICAgIGRvdWJsZSBtX21lbW9yeVNhbXBsZXJJbnRlcnZh
bCB7IDE0MDAuMCB9OwogCi0gICAgUmVmUHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZT4gbV93
ZWJzaXRlRGF0YVN0b3JlOwotCiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIqLCBSZWZQ
dHI8V2ViQ29udGV4dFN1cHBsZW1lbnQ+LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4gV2ViQ29udGV4
dFN1cHBsZW1lbnRNYXA7CiAgICAgV2ViQ29udGV4dFN1cHBsZW1lbnRNYXAgbV9zdXBwbGVtZW50
czsKIApAQCAtNzE0LDggKzY3OCw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fcHJvY2Vzc1Rl
cm1pbmF0aW9uRW5hYmxlZCB7IHRydWUgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3Jr
UHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwotCiAgICAgSGFzaE1hcDx1aW50NjRfdCwg
UmVmUHRyPERpY3Rpb25hcnlDYWxsYmFjaz4+IG1fZGljdGlvbmFyeUNhbGxiYWNrczsKIAogI2lm
IFVTRShTT1VQKQpAQCAtODIwLDMxICs3ODIsMTMgQEAgcHJpdmF0ZToKICNlbHNlCiAgICAgYm9v
bCBtX2lzRGVsYXllZFdlYlByb2Nlc3NMYXVuY2hEaXNhYmxlZCB7IGZhbHNlIH07CiAjZW5kaWYK
LSAgICBib29sIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyB7IGZhbHNlIH07Cisg
ICAgc3RhdGljIGJvb2wgc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwogCiAjaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBIYXNoU2V0PFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluPiBtX2RvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uOwogI2VuZGlmCi0K
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IG1fZW5k
cG9pbnRNZXNzYWdlOwotI2VuZGlmCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpCi17Ci0g
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3Nh
Z2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVz
c2FnZSksIDApOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNz
YWdlKQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vz
cy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotfQotCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQm
IG1lc3NhZ2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cAppbmRleCBkNjYxMDMzOGI2Y2Y2MGEyN2E2Zjc1ZGFlYzM0OWE4ZjcyYWIzYjg1Li4xZmZlZDNk
MWJmNWQ0Y2E3N2U3ZTUxYjAyMjVjZjkzMzlmYjRhZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTczOCw3ICs3MzgsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQcm94eTo6Z2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24odWludDY0X3QgcGx1Z2luUHJv
Y2Vzc1Rva2VuLCBNZQogCiB2b2lkIFdlYlByb2Nlc3NQcm94eTo6Z2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC0+Z2V0
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CisgICAgd2Vi
c2l0ZURhdGFTdG9yZSgpLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92
ZShyZXBseSkpOwogfQogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQpAQCAtOTU1LDkgKzk1NSw5
IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5j
aGVyKiBsYXVuY2hlciwgSVBDOjpDb25uZWN0CiAgICAgfQogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgYXV0byBlbmRwb2ludE1lc3NhZ2UgPSBwcm9jZXNzUG9vbCgpLnhwY0VuZHBvaW50TWVz
c2FnZSgpOworICAgIGF1dG8gZW5kcG9pbnRNZXNzYWdlID0gd2Vic2l0ZURhdGFTdG9yZSgpLm5l
dHdvcmtQcm9jZXNzKCkueHBjRW5kcG9pbnRNZXNzYWdlKCk7CiAgICAgaWYgKGVuZHBvaW50TWVz
c2FnZSkKLSAgICAgICAgeHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNzYWdlKGNvbm5lY3Rpb24oKS0+
eHBjQ29ubmVjdGlvbigpLCBlbmRwb2ludE1lc3NhZ2UuZ2V0KCkpOworICAgICAgICB4cGNfY29u
bmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVuZHBv
aW50TWVzc2FnZSk7CiAjZW5kaWYKIAogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3dlYkNvbm5lY3Rp
b24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29j
b2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4IDdjNDQwODUxNjc3
MzY4YjVkZjg5YTg2ZmY0ZDNiNTE1MzRiOTBiYjcuLmY1ZDBiOTVmOTVkNzkwYzFhMzczZGU4YmNl
ODRiM2U1MTFlMTQyOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KQEAg
LTI4LDEwICsyOCwxMiBAQAogCiAjaW1wb3J0ICJDb29raWVTdG9yYWdlVXRpbHNDRi5oIgogI2lt
cG9ydCAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNz
UHJveHkuaCIKICNpbXBvcnQgIlNhbmRib3hVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlN0b3JhZ2VN
YW5hZ2VyLmgiCiAjaW1wb3J0ICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKICNpbXBv
cnQgIldlYlByZWZlcmVuY2VzS2V5cy5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAj
aW1wb3J0ICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKICNpbXBvcnQgIldlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5oPgpAQCAtNDQsNiArNDYsNyBAQAogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgogI2ltcG9ydCA8d3RmL1VSTC5o
PgorI2ltcG9ydCA8d3RmL2NvY29hL0VudGl0bGVtZW50cy5oPgogI2ltcG9ydCA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTU2Miw0ICs1
NjUsMjEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWluaXRpYWxpemVBcHBCb3VuZERvbWFp
bnMoKQogfQogI2VuZGlmCiAKK2Jvb2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NI
YXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKK3sKKyAg
ICByZXR1cm4gV1RGOjpoYXNFbnRpdGxlbWVudChuZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24o
KS0+eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKK30KKwordm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJv
Y2VzcyhPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSkKK3sKKyAgICBm
b3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgeworICAgICAgICBpZiAocHJvY2Vzcy5z
dGF0ZSgpICE9IEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6U3RhdGU6OlJ1bm5pbmcpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFwcm9jZXNzLmNvbm5lY3Rpb24oKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBhdXRvIGNvbm5lY3Rpb24gPSBwcm9jZXNzLmNvbm5l
Y3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpOworICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21l
c3NhZ2UoY29ubmVjdGlvbiwgZW5kcG9pbnRNZXNzYWdlLmdldCgpKTsKKyAgICB9Cit9CisKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5jcHAKaW5kZXggMDgzMGNhNzVhN2ZjMzhlNjQ1Yjc3NWIzOWIzMzc1ZDRjMjA1
MDM3ZC4uZGM5N2VhZmRiNmIxMzZkMDkwNmI5MDlmZmVmN2FjYmI0MDkwNmY5NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5jcHAKQEAgLTMyLDExICszMiwxNCBAQAogI2luY2x1ZGUgIkF1dGhlbnRpY2F0b3JNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCIKICNpbmNsdWRlICJH
UFVQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTW9ja0F1
dGhlbnRpY2F0b3JNYW5hZ2VyLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
SW5mby5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJT
aG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJTdG9yYWdlQWNjZXNzU3Rh
dHVzLmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRDYWNoZS5oIgorI2luY2x1ZGUgIldlYkNv
b2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYktpdDJJbml0aWFsaXplLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0NhY2hlLmgiCkBAIC03
NSw2ICs3OCwxMCBAQAogI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgiCiAj
ZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkRlZmF1bHRXZWJCcm93c2Vy
Q2hlY2tzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBib29sIGFs
bG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnM7CkBAIC04MywxMyArOTAsMTkgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdp
bnMoKQogICAgIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMgPSB0cnVlOwog
fQogCi1zdGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBu
b25EZWZhdWx0RGF0YVN0b3JlcygpCitzdGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vi
c2l0ZURhdGFTdG9yZSo+JiBhbGxEYXRhU3RvcmVzKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChp
c1VJVGhyZWFkKCkpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFBBTDo6U2Vz
c2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4+IG1hcDsKICAgICByZXR1cm4gbWFwOwogfQogCit2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKEZ1bmN0aW9uPHZv
aWQoV2Vic2l0ZURhdGFTdG9yZSYpPiYmIGZ1bmN0aW9uKQoreworICAgIGZvciAoYXV0byogZGF0
YVN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgICAgICBmdW5jdGlvbigqZGF0
YVN0b3JlKTsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVEYXRhU3RvcmU6OmNy
ZWF0ZU5vblBlcnNpc3RlbnQoKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYnNpdGVE
YXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb246OmNyZWF0ZShJc1BlcnNpc3Rl
bnQ6Ok5vKSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlRXBoZW1lcmFsU2Vzc2lvbklEKCkpKTsK
QEAgLTExNSw3ICsxMjgsNyBAQCBXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKFJl
ZjxXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbj4mJiBjb25maWd1cgogI2VuZGlmCiB7CiAg
ICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1heWJl
UmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwpAQCAtMTI4LDE3ICsxNDEsMTIgQEAgV2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVE
YXRhU3RvcmUoKQogCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBpZiAobV9zZXNzaW9u
SUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBBU1NF
UlQobm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOwotICAg
ICAgICBub25EZWZhdWx0RGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7Ci0gICAgICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW1v
dmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBBU1NFUlQoYWxs
RGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7CisgICAgYWxsRGF0YVN0b3Jl
cygpLnJlbW92ZShtX3Nlc3Npb25JRCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW1vdmVTZXNz
aW9uKCp0aGlzKTsKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0gICAgICAgIGlmIChhdXRvKiBn
cHVQcm9jZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQot
ICAgICAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsK
KyAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b25JZkNyZWF0ZWQoKSkKKyAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1f
c2Vzc2lvbklEKTsKICNlbmRpZgogfQogCkBAIC0xNjksMTcgKzE3NywzMyBAQCBib29sIFdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKQogICAgIHJldHVybiAhIWdsb2Jh
bERlZmF1bHREYXRhU3RvcmUoKTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJl
Z2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVy
V2l0aFNlc3Npb25JRE1hcCgpCiB7Ci0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBub25EZWZh
dWx0RGF0YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7Ci0gICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0byByZXN1bHQgPSBhbGxE
YXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJl
c3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworfQorCitXZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRl
RGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQpCit7CisgICAgcmV0dXJuIGFsbERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklEKTsK
K30KKworTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nl
c3MoKQoreworICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykgeworICAgICAgICBpZiAobV9zZXNz
aW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBtX3Nlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKQorICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmRlZmF1bHROZXR3b3JrUHJvY2VzcygpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlKCk7
CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOwogICAgIH0KKwor
ICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKIH0KIAotV2Vic2l0ZURhdGFTdG9yZSogV2Vi
c2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK05ldHdvcmtQcm9jZXNzUHJveHkmIFdlYnNpdGVEYXRh
U3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc2Vzc2lvbklEICE9
IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgPyBub25EZWZhdWx0RGF0YVN0b3Jl
cygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxXZWJz
aXRlRGF0YVN0b3JlJj4oKnRoaXMpLm5ldHdvcmtQcm9jZXNzKCk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6cmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKQEAg
LTE5NSwxMiArMjE5LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1bnJlZ2lzdGVyUHJvY2Vz
cyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiAgICAgbV9wcm9jZXNzZXMucmVtb3ZlKHByb2Nl
c3MpOwogfQogCi1XZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xG
b3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpCi17Ci0gICAgYXV0byBwb29scyA9IHByb2Nlc3NQ
b29scygxKTsKLSAgICByZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8gbnVsbHB0ciA6IHBvb2xzLmJl
Z2luKCktPmdldCgpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc29sdmVEaXJlY3Rv
cmllc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9oYXNSZXNvbHZlZERpcmVjdG9yaWVzKQpA
QCAtNDQwLDI4ICs0NTgsMjEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRB
cHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICNlbmRpZgogCiAg
ICAgYXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlTmV0d29ya1Byb2Nlc3NB
Y2Nlc3NUeXBlRm9yRGF0YUZldGNoKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgpKTsKLSAgICBp
ZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lKSB7
Ci0gICAgICAgIGF1dG8gcG9vbHMgPSBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPT0gUHJvY2Vz
c0FjY2Vzc1R5cGU6OkxhdW5jaCA/IGVuc3VyZVByb2Nlc3NQb29scygpIDogcHJvY2Vzc1Bvb2xz
KCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewotICAgICAgICAg
ICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKLSAgICAgICAgICAgIGNhc2Ug
UHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICgh
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFByb2Nlc3NB
Y2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKHRoaXMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgotICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotCisgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vz
c0FjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6CisgICAg
ICAgIG5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsK
KyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlm
TGF1bmNoZWQ6CisgICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7CiAgICAgICAgICAgICBj
YWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmZldGNoV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQs
IGRhdGFUeXBlcywgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9v
bF0oV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPmZldGNoV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRpb25z
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkgewogICAgICAg
ICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKFdURk1v
dmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CisgICAgICAgIGJyZWFrOwog
ICAgIH0KIAogICAgIGF1dG8gd2ViUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlV2ViUHJvY2Vz
c0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwpAQCAt
NzI0LDMxICs3MzUsMjQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICAgICBib29sIGRpZE5v
dGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSA9IGZhbHNlOwogI2VuZGlmCiAg
ICAgYXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlTmV0d29ya1Byb2Nlc3NB
Y2Nlc3NUeXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwotICAg
IGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUp
IHsKLSAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQcm9j
ZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNzUG9v
bHMoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2Fz
ZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYg
KCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vz
c0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3ModGhpcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICBzd2l0Y2ggKG5ldHdvcmtQcm9j
ZXNzQWNjZXNzVHlwZSkgeworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKKyAg
ICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3Mp
OworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5
SWZMYXVuY2hlZDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAgICAg
IGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9u
SUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vz
c1Bvb2xdIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRh
KG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdD
YWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKICAgICAgICAgICAgIGRpZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJz
aXRlRGF0YSA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgorICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBhdXRvIHdlYlByb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZVdlYlByb2Nlc3NBY2Nlc3NUeXBl
Rm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwpAQCAtODkzLDE0ICs4
OTcsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3MpKSB7CiAgICAgICAgIGlmICghZGlkTm90aWZ5TmV0d29y
a1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHByb2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRh
VHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNz
aW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewor
ICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNr
KCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhbGxiYWNrQWdncmVn
YXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CkBAIC05OTQsMTIgKzk5MywxMCBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0
YVR5cGVzLCBjb25zdCBWZQogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMp
IHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CiAgICAg
ICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAg
ICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAg
Y2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQ
b29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAgICAgICAgICAgICAgICBuZXR3b3Jr
UHJvY2VzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFBy
b2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgpAQCAtMTAyMSw3ICsxMDE4LDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBl
cywgY29uc3QgVmUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdh
dG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRh
dGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJl
Z2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKKyAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKG1f
c2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1lcywgSFNUU0NhY2hl
SG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nl
c3NQb29sXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5k
aW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC0xMTgwLDE4ICsx
MTc3LDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKFNlY29uZHMgc2Vjb25kcykKIHsK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5j
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZv
clRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdv
cmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vydmlj
ZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCks
IDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0U2VydmljZVdvcmtlclRpbWVv
dXRGb3JUZXN0aW5nKCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vz
c1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNl
V29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rp
bmc6OlJlcGx5KCksIDApOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKQEAgLTEyMDEsOCArMTE5Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3Rh
dGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50LCBDb21wbGV0CiAKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50cnlD
b3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMTEsOCArMTIw
MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVf
dCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50
cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVuZUVu
dHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJp
bmdUaW1lKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTIyMSw4ICsxMjEwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxl
cjwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQsIHNlY29uZHMs
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1pbmlt
dW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMzEsMjAgKzEyMTks
MTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVj
b3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0
d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5p
bXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAgICAgCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
U3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyht
X3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kdW1wUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJM
JiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xMjU2LDEyICsxMjM3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2kKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ByZXZhbGVu
dFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUHJldmFsZW50UmVzb3VyY2UobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0
aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZh
bGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjczLDEyICsxMjQ5LDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9j
ZXNzLT5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNHcmFuZGZhdGhl
cmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyOTIsOCArMTI2Myw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNlKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bv
b2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFBy
ZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzA3LDEw
ICsxMjc3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZv
ckRlYnVnTW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGkKICAgICAKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFByZXZhbGVudFJlc291cmNl
Rm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzVmVy
eVByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzIyLDEyICsxMjg5LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwm
IHVybCwgQ29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICAgICAgcHJvY2Vzcy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJM
JiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTEzNDEsMTAgKzEzMDMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZQogICAgIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRD
bGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzUzLDggKzEz
MTIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2Vz
QmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRD
bGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFs
dWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92
YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25z
dCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzY4LDIyICsxMzI2LDE0IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNv
bnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRv
cEZyYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYgc3ViRnJh
bWVVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVE
b21haW4oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM5Nywy
MyArMTM0NywxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVQogCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3Vi
cmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVz
b3VyY2VVbmRlcihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1l
VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3Mt
PmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VV
UkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0
IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xNDI3LDEwICsxMzY4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVS
TCwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJy
ZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRU
byB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVzb3Vy
Y2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NDIsMTIgKzEzODAsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVS
TCYgc3VicmVzb3VyY2VVUgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBz
dWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0
ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwm
IHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTQ1OSwxMiArMTM5Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRp
cmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9w
RnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NzYsMjUgKzE0MDQsMTQgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBV
UkwmIHRvcEZyYW1lVVJMLCBjb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlx
dWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVk
RnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8oY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJMJiB1
cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAg
ICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21w
bGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRp
cmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE1MDYsNjAgKzE0
MjMsNDEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclBy
ZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZh
dWx0VmFsdWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRW
YWx1ZXMobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZh
bHVlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnN1Ym1pdFRlbGVtZXRyeShtX3Nl
c3Npb25JRCwgW10geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdWJtaXRUZWxl
bWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2RpZmllZFNpbmNl
LCBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lv
bklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1
bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwg
c2hvdWxkR3JhbmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnko
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIHN0cnVjdCBDYWxsYmFja0FnZ3JlZ2F0b3Ig
OiBSZWZDb3VudGVkPENhbGxiYWNrQWdncmVnYXRvcj4gewotICAgICAgICBDYWxsYmFja0FnZ3Jl
Z2F0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCisgICAg
c3RydWN0IExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yIDogUmVmQ291bnRlZDxMb2NhbENhbGxiYWNr
QWdncmVnYXRvcj4geworICAgICAgICBMb2NhbENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJk
UGFydHlEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIDogbV9jb21w
bGV0aW9uSGFuZGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgewogICAg
ICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAgICAgfTsKIAotICAgICAg
ICB+Q2FsbGJhY2tBZ2dyZWdhdG9yKCkKKyAgICAgICAgfkxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9y
KCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIApA
QCAtMTU3NCwzOCArMTQ3MiwzMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgICAgICBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OlRoaXJkUGFydHlEYXRhPiYmKT4gbV9jb21wbGV0aW9uSGFuZGxlcjsKICAgICAgICAgVmVj
dG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IG1fcmVz
dWx0czsKICAgICB9OwotCi0gICAgUmVmUHRyPENhbGxiYWNrQWdncmVnYXRvcj4gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gYWRvcHRSZWYobmV3IENhbGxiYWNrQWdncmVnYXRvcihXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFJbW1lZGlhdGVseShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Ci0gICAgICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcykuZ2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNz
UG9vbF0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURh
dGE+JiYgZGF0YSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVz
dWx0KFdURk1vdmUoZGF0YSkpOwotICAgICAgICAgICAgfSk7CisgICAgCisgICAgYXV0byBsb2Nh
bENhbGxiYWNrQWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBMb2NhbENhbGxiYWNrQWdncmVnYXRv
cihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworICAgIAorICAgIGF1dG8gd3RmQ2FsbGJh
Y2tBZ2dyZWdhdG9yID0gV1RGOjpDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBsb2NhbENhbGxiYWNrQWdncmVnYXRvcl0gewor
ICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3Vt
bWFyeShtX3Nlc3Npb25JRCwgW2xvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yXShWZWN0b3I8V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7CisgICAg
ICAgICAgICBsb2NhbENhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVzdWx0KFdURk1vdmUoZGF0YSkp
OwogICAgICAgICB9KTsKLSAgICB9CisgICAgfSk7CisgICAgCisgICAgZm9yIChhdXRvKiBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJv
Y2Vzc1Bvb2wtPnNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KFt3dGZD
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2No
ZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlclN0YXRpc3Rp
Y3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVy
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lv
bklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0
ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ29va2ll
QmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ29va2llQmxv
Y2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQ
cm9jZXNzaW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTE2MTQsMjQgKzE1MDUsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZVN0
YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmQKICAgICAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxl
U3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lvbklE
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICAgICAgcHJvY2Vzcy0+c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKG1f
c2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNz
aW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjQzLDIyICsx
NTIzLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1
cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhCiAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldExh
c3RTZWVuKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBz
ZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kb21haW5JREV4aXN0c0luRGF0
YWJhc2UobV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJn
ZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9wRnJhbWVV
cmwxLCBjb25zdCBVUkwmIHRvcEZyYW1lVXJsMiwgU2Vjb25kcyBsYXN0U2VlbiwgYm9vbCBoYWRV
c2VySW50ZXJhY3Rpb24sIFNlY29uZHMgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgYm9vbCBp
c0dyYW5kZmF0aGVyZWQsIGJvb2wgaXNQcmV2YWxlbnQsIGJvb2wgaXNWZXJ5UHJldmFsZW50LCB1
bnNpZ25lZCBkYXRhUmVjb3Jkc1JlbW92ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE2NzAsMTAgKzE1NDIsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29uc3QgVVJM
JiB0b3BGcgogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
Pm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVy
bDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFzdFNl
ZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFu
ZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92
ZWQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRl
cmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBk
YXRhUmVjb3Jkc1JlbW92ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3Qg
VVJMJiB1cmwsIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxs
QnV0Q29va2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2ODUsMTggKzE1NTQsMTQgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25z
dCBVUkwmIHVybCwgYm9vbCBoYWQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0aW9u
LCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNT
Y2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MDQsOCArMTU2
OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxlCiAgICAgdXNlRXhwbGljaXRJVFBTdGF0ZSgp
OwogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9z
ZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZXN0KG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdl
UHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3Ry
aW5nPiYmIGRvbWFpbnMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcxNiw3ICsxNTgwLDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQ
YWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IHdlYlBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRy
aWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIApAQCAt
MTcyNCw4ICsxNTg4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNl
ckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkgKIHsKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTczOSwxMCArMTYwMiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNl
ckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkCiAgICAg
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmxvZ1VzZXJJ
bnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc1NCwxMyAr
MTYxNCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
IHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0hhZFVzZXJJ
bnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBj
b25zdCBVUkwmIHRvcFVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE3NzIsMTMgKzE2MjYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25z
dAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlbGF0
aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3OTIs
MTAgKzE2NDAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9u
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclVzZXJJbnRlcmFjdGlvbiht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclVzZXJJ
bnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJlZCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgwOSwx
MCArMTY1NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25z
dCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvCiAgICAgCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRHcmFuZGZhdGhlcmVkKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0
aGVyZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFs
dWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4
MjEsMTAgKzE2NjMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNl
KGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJgogICAgIAogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0YWJh
c2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1
ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwm
IGZyb21VUkwsIGNvbnN0IFVSTCYgdG9VUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MzMsNjIgKzE2NzIsMzggQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25z
dCBVUkwmIGYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRDcm9zc1NpdGVM
b2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9VUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGluY2x1
ZGVIdHRwT25seUNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tp
ZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9yYWdl
Rm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5n
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0lz
b2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRE
b3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZERvd25n
cmFkZVJlZmVycmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZERvd25ncmFkZVJlZmVycmVy
Rm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYg
IVBMQVRGT1JNKENPQ09BKQpAQCAtMTkxOSwxMCArMTczNCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShXZWJDb3JlOjpUaGlyZFBhcnR5
Q29va2llCiAgICAgICAgICAgICB3ZWJQcm9jZXNzLnNldFRoaXJkUGFydHlDb29raWVCbG9ja2lu
Z01vZGUoYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0KIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdN
b2RlKG1fc2Vzc2lvbklELCBibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5n
TW9kZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
aG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKGJvb2wgZW5hYmxl
ZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkz
MCwxMCArMTc0Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlCiAgICAgYXV0byBmbGFnID0g
ZW5hYmxlZCA/IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZZXMg
OiBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87CiAKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0
U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25J
RCwgZmxhZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5n
KG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vi
c2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTQxLDIwICsxNzUwLDE0IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFy
dHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgYXV0byBtb2RlID0gZW5hYmxlZCA/IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlOjpBbGxCdXRDb29raWVzIDogV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGU6Ok5vbmU7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0Rmly
c3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2Rl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25J
RCwgbW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tpZXNG
b3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0
aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRv
U2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0
eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmaXJzdFBhcnR5VVJMLCBjb25z
dCBVUkwmIGNuYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xOTY2LDggKzE3NjksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdAogCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklE
LCBmaXJzdFBhcnR5VVJMLmhvc3QoKS50b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgZmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5
Q05BTUVEb21haW5Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NzksMTggKzE3ODEsMTMgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0
eUNOQU1FRG9tYWluRm9yVGVzdGluZygKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVEb21h
aW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNu
YW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZSgpLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3JhZ2UoKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hl
TWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk5OCw4ICsxNzk1LDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJl
c291cmNlcyhTZWNvbmRzIHNlY29uZHMsIEMKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVu
c3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJj
ZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyht
X3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKHNlY29uZHMpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0y
MDA5LDI2ICsxODA1LDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VD
YXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQ
cmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZh
bGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
I2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogI2VuZGlmCiB9CiAKLWJvb2wgV2Vic2l0
ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmIHByb2Nl
c3NQb29sKSBjb25zdAotewotICAgIGlmIChhdXRvKiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9IHBy
b2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUoKSkKLSAgICAgICAgcmV0dXJuIHByb2Nlc3NQb29s
RGF0YVN0b3JlID09IHRoaXM7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBw
cm9jZXNzUG9vbC5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICByZXR1cm4gbmV0d29ya1Byb2Nl
c3NQcm94eS0+aGFzU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
CiBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nl
c3NQb29scyhzaXplX3QgbGltaXQpIGNvbnN0CiB7CiAgICAgSGFzaFNldDxSZWZQdHI8V2ViUHJv
Y2Vzc1Bvb2w+PiBwcm9jZXNzUG9vbHM7CkBAIC0yMDQzLDkgKzE4MjUsNiBAQCBIYXNoU2V0PFJl
ZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyhzaXpl
X3QgbGltaXQpIGNvbgogICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgpKSB7CiAgICAgICAg
IC8vIENoZWNrIGlmIHdlJ3JlIG9uZSBvZiB0aGUgbGVnYWN5IGRhdGEgc3RvcmVzLgogICAgICAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKCpwcm9jZXNz
UG9vbCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAgICAgIHByb2Nlc3NQ
b29scy5hZGQocHJvY2Vzc1Bvb2wpOwogICAgICAgICAgICAgaWYgKHByb2Nlc3NQb29scy5zaXpl
KCkgPT0gbGltaXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDg0LDggKzE4NjMsNyBA
QCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVNZWRpYUtleUZpbGUoY29uc3QgU3RyaW5nJiBtZWRpYUtl
eURpcmVjdG9yeSkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1NwZWNpZmljSFRUUFND
ZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJbmZvKiBjZXJ0aWZpY2F0ZSwg
Y29uc3QgU3RyaW5nJiBob3N0KQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmlj
YXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1Nw
ZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRlSW5m
bygpLCBob3N0KSwgMCk7CiB9CiAKIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+
IFdlYnNpdGVEYXRhU3RvcmU6Om1lZGlhS2V5T3JpZ2lucyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5
c1N0b3JhZ2VEaXJlY3RvcnkpCkBAIC0yMTQwLDYgKzE5MTgsNDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpyZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGly
ZWN0b3J5LAogICAgIH0KIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXROZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoY29uc3QgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mbyYpPiYmIHJl
cGx5KQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
KHdlYlByb2Nlc3NQcm94eSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB3
ZWJQcm9jZXNzUHJveHkgPSBtYWtlV2Vha1B0cih3ZWJQcm9jZXNzUHJveHkpLCByZXBseSA9IFdU
Rk1vdmUocmVwbHkpXSAoYXV0byYgY29ubmVjdGlvbkluZm8pIG11dGFibGUgeworICAgICAgICBp
ZiAoVU5MSUtFTFkoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVjdGlv
bkluZm8uaWRlbnRpZmllcigpKSAmJiB3ZWJQcm9jZXNzUHJveHkgJiYgd2Vha1RoaXMpKSB7Cisg
ICAgICAgICAgICBSRUxFQVNFX0xPR19JRihpc1BlcnNpc3RlbnQoKSwgUHJvY2VzcywgImdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0IGF0dGVtcHQsIHJldHJ5aW5nIik7
CisgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bigqd2ViUHJvY2Vzc1Byb3h5LCBXVEZNb3ZlKHJlcGx5KSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgcmVwbHkoY29ubmVjdGlvbkluZm8pOworICAgIH0pOworfQor
Cit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJv
Y2Vzc1Byb3h5JikKK3sKKyAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKK30KKwordm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCit7CisgICAgaWYg
KCFtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBtX25ldHdvcmtQcm9j
ZXNzLT50ZXJtaW5hdGUoKTsKKyAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKK30KKwor
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5k
Rm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJlcGFyZVRvU3VzcGVuZChJc1N1c3BlbnNp
b25JbW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlG
b3JUZXN0aW5nKCkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
bmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5k
UHJvY2Vzc0RpZFJlc3VtZSgpOworfQorCiBib29sIFdlYnNpdGVEYXRhU3RvcmU6OnJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQpAQCAtMjE2OSwxNyArMTk4OCwxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICAg
ICAgCiAgICAgICAgIHJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7CiAgICAgICAgIAot
ICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklE
LCB0cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCB0
cnVlKSwgMCk7CisgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkKICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9u
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCh0
cnVlKSwgbV9zZXNzaW9uSUQpOwotICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
cHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIGZhbHNl
KSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIGZhbHNlKSwgMCk7
CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAgICAgICBw
cm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihNZXNzYWdlczo6V2ViUHJv
Y2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZmFsc2UpLCBtX3Nlc3Npb25J
RCk7Ci0gICAgfQogCiAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCA9IGZhbHNl
OwogI2Vsc2UKQEAgLTIxOTEsOCArMjAwOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKEZ1bmN0aW9uPHZvaWQoY29u
c3QgU3RyaW5nJik+JiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKGNhbGxiYWNrKSB7Ci0gICAgICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQodHJ1ZSkpOworICAg
ICAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpLCAwKTsKICAgICB9CiAg
ICAgCiAgICAgbV9zdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7
CkBAIC0yMjExLDggKzIwMjcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGVkLCBDb21wbGV0aQogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKG1fc2Vzc2lvbklELCBlbmFi
bGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShtX3Nlc3Npb25JRCwgZW5hYmxlZCwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQp
OwogICAgIFVOVVNFRF9QQVJBTShjb21wbGV0aW9uSGFuZGxlcik7CkBAIC0yMjI3LDIwICsyMDQy
LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBo
ZW1lcmFsKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
IHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5pc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NF
cGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuaXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vzc2lvbklELCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKGZh
bHNlKTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFkQ2xpY2tBdHRy
aWJ1dGlvbkRlYnVnTW9kZShib29sIGVuYWJsZWQpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoZW5hYmxlZCk7CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoZW5hYmxlZCk7
CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjI2Miw0OCAr
MjA3MiwxOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0luV2ViUHJvY2Vzc2VzKENvbXBsZXRpb25IYW5kbAogfQogI2VuZGlmCiAKLVZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+IFdlYnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gY29weVRvVmVjdG9yKG1fcGVuZGluZ0Nvb2tpZXMpOwotfQotCi12b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmFkZFBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2ll
JiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmVJZihbJmNvb2tpZV0oYXV0
byYgcGVuZGluZ0Nvb2tpZSkgewotICAgICAgICByZXR1cm4gcGVuZGluZ0Nvb2tpZS5pc0tleUVx
dWFsKGNvb2tpZSk7Ci0gICAgfSk7Ci0gICAgbV9wZW5kaW5nQ29va2llcy5hZGQoY29va2llKTsK
LX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKGNvbnN0IFdl
YkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMucmVtb3ZlKGNv
b2tpZSk7Ci19Ci0gICAgCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tp
ZXMoKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMuY2xlYXIoKTsKLX0KLQogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAo
YXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmZsdXNoQ29va2llcyhzZXNzaW9uSUQoKSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmZsdXNoQ29va2llcyhzZXNzaW9u
SUQoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJvb2wgYWxsb3dz
KQogewotICAgIGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5k
U3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRl
Rm9yV2ViU29ja2V0KGFsbG93cyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dz
QW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQ6OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwgTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldDo6UmVwbHko
KSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFs
cygpCiB7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFBy
b2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+Y2xlYXJDYWNoZWRDcmVkZW50aWFs
cyhzZXNzaW9uSUQoKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9uSUQoKSksIDApOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+
JiYgZnVuY3Rpb24pCkBAIC0yMzI5LDggKzIxMTAsNiBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKIAogICAgIHJlc29sdmVEaXJlY3Rv
cmllc0lmTmVjZXNzYXJ5KCk7CiAKLSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gcGVu
ZGluZ0Nvb2tpZXMoKTsKLQogICAgIGF1dG8gcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eSA9IG1fY29uZmlndXJhdGlvbi0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwog
ICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0
b3J5SGFuZGxlOwogICAgIGlmICghcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc0Vt
cHR5KCkpCkBAIC0yNDM1LDcgKzIyMTQsMTAgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMg
V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAgICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlZCA9
IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ7CiAjZW5kaWYKICAgICBwbGF0Zm9ybVNl
dE5ldHdvcmtQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwotCisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jv
c3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJh
Y2tpbmdQZXJtaXNzaW9uKCk7CisjZW5kaWYKKyAgICAKICAgICByZXR1cm4gcGFyYW1ldGVyczsK
IH0KIApAQCAtMjQ2NSwxMCArMjI0Nyw2IEBAIEFQSTo6SFRUUENvb2tpZVN0b3JlJiBXZWJzaXRl
RGF0YVN0b3JlOjpjb29raWVTdG9yZSgpCiAgICAgcmV0dXJuICptX2Nvb2tpZVN0b3JlOwogfQog
Ci12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCkKLXsKLX0K
LQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9u
PHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4m
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFpc1BlcnNpc3RlbnQoKSkgewpA
QCAtMjQ3NiwyMyArMjI1NCwxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3Rv
cmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0
aGlzKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMpIHsKLSAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWlscykpOwotICAgICAgICB9KTsK
LSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgZmV0Y2hpbmcgZnJvbSBtdWx0aXBsZSBwb29scy4K
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIEFTU0VSVCghY29tcGxldGlvbkhhbmRsZXIpOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0TG9jYWxTdG9yYWdlRGV0YWlscyhtX3Nlc3Npb25JRCwg
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBk
ZXRhaWxzKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWlscykpOwor
ICAgIH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UXVvdGEoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+cmVzZXRRdW90YShtX3Nlc3Npb25JRCwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNl
dFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYg
IVBMQVRGT1JNKENPQ09BKQpAQCAtMjUxOCw3ICsyMjg4LDEyIEBAIGJvb2wgV2Vic2l0ZURhdGFT
dG9yZTo6aHR0cDNFbmFibGVkKCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9Ci0jZW5kaWYKKwor
Ym9vbCBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVz
dGluZyhjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZiAvLyAh
UExBVEZPUk0oQ09DT0EpCiAKICNpZiAhVVNFKEdMSUIpCiBXVEY6OlN0cmluZyBXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkKQEAgLTI1
MzAsMzUgKzIzMDUsMTggQEAgV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERl
dmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiBvbGROYW1lLCBVUkwmJiBuZXdOYW1l
LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
YWRkU2Vzc2lvbigqdGhpcyk7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVuYW1lT3Jp
Z2luSW5XZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgZGF0YVR5cGVz
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkucmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgb2xkTmFt
ZSwgbmV3TmFtZSwgZGF0YVR5cGVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
ICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhh
c0FwcEJvdW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0Fw
cEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5k
bGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0FwcEJvdW5kU2Vzc2lvbihtX3Nl
c3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmNsZWFyQXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jbGVhckFwcEJvdW5kU2Vzc2lvbihtX3Nlc3Np
b25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3J3
YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTI1ODAsNyArMjMzOCw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZChD
b21wbGV0aW9uSGFuZGxlCiAKICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoZ2xvYmFsRGVm
YXVsdERhdGFTdG9yZSgpLmdldCgpLCAqYXBwQm91bmREb21haW5zKTsKIAotICAgIGZvciAoYXV0
byogc3RvcmUgOiBub25EZWZhdWx0RGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgIGZvciAoYXV0
byogc3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkpCiAgICAgICAgIHByb3BhZ2F0ZUFw
cEJvdW5kRG9tYWlucyhzdG9yZSwgKmFwcEJvdW5kRG9tYWlucyk7CiB9CiAKQEAgLTI1ODgsMTAg
KzIzNDYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluc0ZvcklU
UChjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYgogewogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEFwcEJvdW5kRG9t
YWluc0ZvclJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0QXBw
Qm91bmREb21haW5zRm9yUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgZG9tYWlu
cywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRpZgogCkBAIC0yNTk5LDE2ICsy
MzU0LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRpZmllcklu
TmV0d29ya1Byb2Nlc3MoY29uc3QgU3RyaW5nJiBidW5kCiB7CiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnVwZGF0ZUJ1bmRs
ZUlkZW50aWZpZXIoYnVuZGxlSWRlbnRpZmllciwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoYnVuZGxlSWRlbnRp
ZmllciwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpjbGVhckJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkK
LSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJ
ZGVudGlmaWVyKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5oCmluZGV4IDBkYzkxZjIzYzQxNTQzOTVjOGViZjg5MGYzNWJkMDE4MGNkNTFh
YWQuLjQ1ZGQ5N2ExY2ZmMWNkMDIxNTQwY2IyZjYwYzIyZmUxNjA3ODU4ZGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmgKQEAgLTUzLDYgKzUzLDggQEAKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgPHBh
bC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRyLmg+Cisj
aW5jbHVkZSA8d3RmL3NwaS9kYXJ3aW4vWFBDU1BJLmg+CiAjZW5kaWYKIAogI2lmIFVTRShDVVJM
KQpAQCAtNzUsNiArNzcsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEF1dGhlbnRpY2F0
b3JNYW5hZ2VyOwogY2xhc3MgU2VjS2V5UHJveHlTdG9yZTsKIGNsYXNzIERldmljZUlkSGFzaFNh
bHRTdG9yYWdlOworY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94eTsKIGNsYXNzIFNPQXV0aG9yaXph
dGlvbkNvb3JkaW5hdG9yOwogY2xhc3MgV2ViQ2VydGlmaWNhdGVJbmZvOwogY2xhc3MgV2ViUGFn
ZVByb3h5OwpAQCAtODQsNiArODcsOCBAQCBjbGFzcyBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU7CiBlbnVtIGNsYXNzIENhY2hlTW9kZWwgOiB1aW50OF90OwogZW51bSBjbGFzcyBXZWJz
aXRlRGF0YUZldGNoT3B0aW9uIDogdWludDhfdDsKIGVudW0gY2xhc3MgV2Vic2l0ZURhdGFUeXBl
IDogdWludDMyX3Q7CisKK3N0cnVjdCBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvOwogc3Ry
dWN0IFdlYnNpdGVEYXRhUmVjb3JkOwogc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
OwogCkBAIC0xMDksNyArMTE0LDEyIEBAIHB1YmxpYzoKICAgICBXZWJzaXRlRGF0YVN0b3JlKFJl
ZjxXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbj4mJiwgUEFMOjpTZXNzaW9uSUQpOwogICAg
IH5XZWJzaXRlRGF0YVN0b3JlKCk7CiAKLSAgICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhp
c3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEKTsKKyAg
ICBzdGF0aWMgdm9pZCBmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lkKFdlYnNp
dGVEYXRhU3RvcmUmKT4mJik7CisgICAgCisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29y
a1Byb2Nlc3MoKSBjb25zdDsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vz
cygpOworCisgICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nRGF0YVN0b3JlRm9y
U2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEKTsKIAogICAgIGJvb2wgaXNQZXJzaXN0ZW50KCkgY29u
c3QgeyByZXR1cm4gIW1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCk7IH0KICAgICBQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQpAQCAtMTE5LDYg
KzEyOSwxMyBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vz
c1Byb3h5PiYgcHJvY2Vzc2VzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzZXM7IH0KIAorICAg
IHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mbyYpPiYm
KTsKKyAgICB2b2lkIHRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgdm9pZCBzZW5kTmV0
d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOworICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVu
dGx5Rm9yVGVzdGluZygpOworICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7
CisgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwor
CiAgICAgYm9vbCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpIGNvbnN0OwogICAgIHZv
aWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCk7CiAgICAgYm9vbCByZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKCkgY29uc3Q7CkBAIC0yMzUsMTUgKzI1Miw4IEBA
IHB1YmxpYzoKIAogICAgIERldmljZUlkSGFzaFNhbHRTdG9yYWdlJiBkZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZSgpIHsgcmV0dXJuIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuZ2V0KCk7IH0KIAot
ICAgIFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25z
KCk7Ci0gICAgYm9vbCBpc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYpIGNv
bnN0OwotCiAgICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgcGFyYW1ldGVycygpOwogCi0g
ICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXMoKSBjb25zdDsKLSAgICB2
b2lkIGFkZFBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCBy
ZW1vdmVQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwotICAgIHZvaWQgY2xl
YXJQZW5kaW5nQ29va2llcygpOwogICAgIHZvaWQgZmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBjbGVhckNhY2hlZENyZWRlbnRpYWxzKCk7CiAKQEAg
LTI1MSw2ICsyNjEsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaXNwYXRjaE9uUXVldWUoRnVu
Y3Rpb248dm9pZCgpPiYmKTsKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZvaWQgc2VuZE5l
dHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8eHBjX29iamVj
dF90PiBlbmRwb2ludE1lc3NhZ2UpOworI2VuZGlmCisKICNpZiBVU0UoQ1VSTCkKICAgICB2b2lk
IHNldE5ldHdvcmtQcm94eVNldHRpbmdzKFdlYkNvcmU6OkN1cmxQcm94eVNldHRpbmdzJiYpOwog
ICAgIGNvbnN0IFdlYkNvcmU6OkN1cmxQcm94eVNldHRpbmdzJiBuZXR3b3JrUHJveHlTZXR0aW5n
cygpIGNvbnN0IHsgcmV0dXJuIG1fcHJveHlTZXR0aW5nczsgfQpAQCAtMjcyLDggKzI4Niw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldE1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24o
V2ViQ29yZTo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbiYmKTsKICNlbmRpZgog
Ci0gICAgdm9pZCBkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAgY29uc3QgV2Vic2l0
ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24oKSB7IHJldHVybiBtX2NvbmZp
Z3VyYXRpb24uZ2V0KCk7IH0KIAogICAgIFdlYnNpdGVEYXRhU3RvcmVDbGllbnQmIGNsaWVudCgp
IHsgcmV0dXJuIG1fY2xpZW50LmdldCgpOyB9CkBAIC0yODMsNiArMjk1LDggQEAgcHVibGljOgog
CiAgICAgdm9pZCByZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFVSTCYmLCBVUkwmJiwgT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAg
ICBib29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmlu
ZyYpOworCiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICAgICBXZWJEZXZpY2VPcmll
bnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXImIGRldmljZU9yaWVudGF0aW9uQW5kTW90
aW9uQWNjZXNzQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rp
b25BY2Nlc3NDb250cm9sbGVyOyB9CiAjZW5kaWYKQEAgLTM1OSw3ICszNzMsNyBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5
c1N0b3JhZ2VEaXJlY3RvcnksIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UpOwogICAgIHN0YXRpYyB2
b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rv
cnksIGNvbnN0IEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYpOwogCi0gICAg
dm9pZCBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOworICAgIHZvaWQgcmVnaXN0ZXJX
aXRoU2Vzc2lvbklETWFwKCk7CiAKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpCiAgICAg
c3RhdGljIE9wdGlvbmFsPEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+PiBhcHBC
b3VuZERvbWFpbnNJZkluaXRpYWxpemVkKCk7CkBAIC0zOTcsOCArNDExLDYgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCB7IHRydWUgfTsK
ICNlbmRpZgogCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1fcGVuZGluZ0Nvb2tpZXM7
Ci0gICAgCiAgICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3NlczsKIAog
ICAgIGJvb2wgbV9pc0l0cFN0YXRlRXhwbGljaXRseVNldCB7IGZhbHNlIH07CkBAIC00MTksNiAr
NDMxLDcgQEAgcHJpdmF0ZToKICAgICBVbmlxdWVSZWY8V2Vic2l0ZURhdGFTdG9yZUNsaWVudD4g
bV9jbGllbnQ7CiAKICAgICBSZWZQdHI8QVBJOjpIVFRQQ29va2llU3RvcmU+IG1fY29va2llU3Rv
cmU7CisgICAgUmVmUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAK
ICNpZiBIQVZFKEFQUF9TU08pCiAgICAgVW5pcXVlUmVmPFNPQXV0aG9yaXphdGlvbkNvb3JkaW5h
dG9yPiBtX3NvQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3Rv
cmVDdXJsLmNwcAppbmRleCAwZTBjMDZlMWRlZDQyYzE0YjgwMmUxNTg5ZjMxZGM2Mjk4MmFjMzkz
Li42NGI2Yzc0ZDA4NmVjNDViYjYyZGE2ZWUwODIyM2IyOGRiNzNhNTdjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVD
dXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dl
YnNpdGVEYXRhU3RvcmVDdXJsLmNwcApAQCAtNDIsOCArNDIsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKFdlYkNvcmU6OkN1cmxQcm94eVNldHRpbmdz
JiYgcHJveAogewogICAgIG1fcHJveHlTZXR0aW5ncyA9IFdURk1vdmUocHJveHlTZXR0aW5ncyk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fc2Vzc2lvbklELCBtX3Byb3h5U2V0dGlu
Z3MpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX3Nlc3Npb25JRCwgbV9wcm94eVNldHRpbmdzKSwg
MCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKaW5kZXggMTJmOWNk
ODE5YjZkY2NhOGFjNTA5MmEzMGRkOTNjNTNiOGVlOTM0Mi4uNmY5NjNmMTQyMTAwNDc1OGUyZDY1
ZWQ5NjI2ZTJhNDlhM2Y0ZjkxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAK
QEAgLTM5LDggKzM5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdv
cmtQYXJhbWV0ZXJzKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJgogICAgIGF1dG8mIG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
OwogICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3Jh
Z2VFbmFibGVkID0gbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkOwogCi0gICAg
aWYgKGF1dG8qIHByb2Nlc3NQb29sID0gcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0
aW9ucygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nl
c3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
UGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlw
ZSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxT
dG9yYWdlRW5hYmxlZChib29sIGVuYWJsZWQpCkBAIC01Miw4ICs1MSw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChib29sIGVu
YWJsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9y
YWdlRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3Mo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VF
bmFibGVkKG1fc2Vzc2lvbklELCBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQp
KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKG1fc2Vzc2lvbklELCBtX3BlcnNp
c3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQpLCAwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nl
c3NQcm94eUdMaWIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNz
UHJveHlHTGliLmNwcAppbmRleCAwYTg0YTc1OTBkOWE5ODViZmM5OTY4NGE0ODk1MTM3NGU1YjI5
NDI5Li4yN2YyM2VhMDY1ZGM3NWNlNGE4MjcwYzU3NmVhMmFhNTVhYjBkYzhmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAK
QEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNo
T3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGwKICAgICAgICAgaWYgKCFk
YXRhU3RvcmUpIHsKICAgICAgICAgICAgIC8vIFByZXdhcm1lZCBwcm9jZXNzZXMgZG9uJ3QgaGF2
ZSBhIFdlYnNpdGVEYXRhU3RvcmUgeWV0LCBzbyB1c2UgdGhlIHByaW1hcnkgV2Vic2l0ZURhdGFT
dG9yZSBmcm9tIHRoZSBXZWJQcm9jZXNzUG9vbC4KICAgICAgICAgICAgIC8vIFRoZSBwcm9jZXNz
IHdvbid0IGJlIHVzZWQgaWYgY3VycmVudCBXZWJzaXRlRGF0YVN0b3JlIGlzIGRpZmZlcmVudCB0
aGFuIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IG9uZS4KLSAgICAgICAgICAgIGRhdGFTdG9y
ZSA9IG1fcHJvY2Vzc1Bvb2wtPndlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICAgICAgICAgIGRhdGFT
dG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKICAgICAg
ICAgfQogCiAgICAgICAgIEFTU0VSVChkYXRhU3RvcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKaW5k
ZXggOWY3YmUzYzk0MWI2Y2QwYTFiOTRjYjEzNjA5OGYzYTA0MWNlZmY5OS4uYWMwNGUzOGE1N2Iy
MTU5YmViNDJmMzg0NzliNDRmNWUyNmRlZGJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCkBAIC0y
Niw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFu
YWdlclByb3h5LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVk
ZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wu
aCIKIApAQCAtMzMsOCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKLSAgICBtX2Nvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlTWFwLnNldChzZXNzaW9uSUQsIHN0ZDo6bWFrZV9wYWlyKHN0b3JhZ2VQYXRoLCBzdG9yYWdl
VHlwZSkpOwotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9u
SUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNz
KQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBz
dG9yYWdlVHlwZSksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29v
a2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmIHN0
b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlJiBzdG9yYWdlVHlwZSkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vz
c1Bvb2xTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bv
b2xTb3VwLmNwcAppbmRleCBiZmJiZjk2NjRlNDgzNTMwOTcwOTcxMWRmZDZjMTM0MTU3MzJiZGFj
Li43ZmU0YWNhMGM1ZDJkMGU3ZmMwZDlkNWE0ZmEyN2ViY2M4MGE2NzVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCkBAIC0z
NywzMCArMzcsMjQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewotICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJh
bWV0ZXJzJiBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICBzdXBwbGVtZW50
PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoZGVm
YXVsdFNlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJz
LmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLmNv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7Ci0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkK
LSAgICAgICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQoKTsKKyAgICAvLyBGSVhNRTogbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBv
bGljeSBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCisgICAgLy8gRklY
TUU6IG1faWdub3JlVExTRXJyb3JzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFT
dG9yZSBvciByZW1vdmVkLgorICAgIC8vIEZJWE1FOiBtX25ldHdvcmtQcm94eVNldHRpbmdzIHNo
b3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KIAotICAgIHBhcmFtZXRlcnMu
Y29va2llQWNjZXB0UG9saWN5ID0gbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeTsKLSAg
ICBwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyA9IG1faWdub3JlVExTRXJyb3JzOwogICAgIHBh
cmFtZXRlcnMubGFuZ3VhZ2VzID0gdXNlclByZWZlcnJlZExhbmd1YWdlcygpOwotICAgIHBhcmFt
ZXRlcnMucHJveHlTZXR0aW5ncyA9IG1fbmV0d29ya1Byb3h5U2V0dGluZ3M7CiAgICAgcGFyYW1l
dGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IHRydWU7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKKyAgICAv
LyBGSVhNRTogTW92ZSB0aGlzIHRvIFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgbV9pZ25vcmVUTFNF
cnJvcnMgPSBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRJ
Z25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoY29uc3QgV2ViQ29yZTo6U291cE5ldHdv
cmtQcm94eVNldHRpbmdzJiBzZXR0aW5ncykKIHsKKyAgICAvLyBGSVhNRTogTW92ZSB0aGlzIHRv
IFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgbV9uZXR3b3JrUHJveHlTZXR0aW5ncyA9IHNldHRpbmdz
OwotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9u
ZXR3b3JrUHJveHlTZXR0aW5ncyksIDApOwogfQogCiB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOThiMzZjYzdhZDc1MWFiYTEzMDk3NzczMjg0
NjlhMDY0YjFjMWFlZC4uMjNlNGQxMzZiMTFjNzgzNWUxNGVjMWViNDVkNTFiNzVlNzYwOTk3YyAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDg2IEBACisyMDIwLTA5LTIxICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBm
cm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVEYXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjA0MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vc3QgY2hhbmdlcyB0byB0ZXN0cyBhcmUg
anVzdCBjYWxsaW5nIGEgZnVuY3Rpb24gb24gdGhlIFdLV2Vic2l0ZURhdGFTdG9yZSBpbnN0ZWFk
IG9mIHRoZSBXS1Byb2Nlc3NQb29sCisgICAgICAgIGJlY2F1c2Ugd2Ugd2FudCB0byBkbyBzb21l
dGhpbmcgd2l0aCB0aGUgbmV0d29yayBwcm9jZXNzIGFuZCBpdCBoYXMgYSBuZXcgb3duZXIuCisg
ICAgICAgIEV4Y2VwdGlvbnMgYXJlIG5vdGVkIGlubGluZS4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rp
b24ubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6ZG93bmxvYWRBdFJhdGUpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW06Cisg
ICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0lEQkluZGV4VXBncmFkZVRvVjIubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1Yy
Lm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tOgorICAgICAgICAoVEVTVCk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0
aVByb2Nlc3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tOgorICAgICAgICAoVEVTVCk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNw
ZW5kSW1taW5lbnRseS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tOgorICAgICAgICAo
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0
b3JhZ2VQZXJzaXN0ZW5jZS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW06CisgICAgICAgIChURVNU
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9j
ZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tOgorICAgICAgICAoY2hlY2tSZWNvdmVy
eUFmdGVyQ3Jhc2gpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tOgorICAgICAgICAoVEVTVCk6
CisgICAgICAgIFRoaXMgdGVzdCB3YXMgbWFraW5nIGEgV0tXZWJzaXRlRGF0YVN0b3JlLCBnZXR0
aW5nIGl0cyByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3MgZGlyZWN0b3J5LAorICAgICAgICBwdXR0
aW5nIHRoaW5ncyBpbiB0aGF0IGRpcmVjdG9yeSwgdGhlbiBzdGFydGluZyB0aGUgbmV0d29yayBw
cm9jZXNzIGFuZCBtYWtpbmcgc3VyZSBldmVyeXRoaW5nCisgICAgICAgIHdvcmtzIHdoZW4gaW5p
dGlhbGl6aW5nIHRoZSBuZXR3b3JrIHByb2Nlc3MuICBOb3csIG5ldHdvcmsgcHJvY2VzcyBpbml0
aWFsaXphdGlvbiBoYXBwZW5zIHdoZW4gYQorICAgICAgICBXS1dlYnNpdGVEYXRhU3RvcmUgaXMg
aW5zdGFudGlhdGVkLCBzbyB3ZSBuZWVkIHRvIHB1dCB0aGluZ3MgdGhlcmUgYmVmb3JlIGluc3Rh
bnRpYXRpbmcgYSBXS1dlYnNpdGVEYXRhU3RvcmUuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW06CisgICAgICAgIEJlZm9yZSB0
aGlzIGNoYW5nZSwgZWFjaCBXS1Byb2Nlc3NQb29sIGhhZCBpdHMgb3duIG5ldHdvcmsgcHJvY2Vz
cywgd2hpY2ggaG9sZHMgdGhlIHNlcnZpY2Ugd29ya2VyIHJlZ2lzdHJ5CisgICAgICAgIGZvciB0
aGUgV2Vic2l0ZURhdGFTdG9yZXMgdXNlZCB3aXRoIHRoYXQgcHJvY2VzcyBwb29sLiAgTm93LCB0
aGUgbmV0d29yayBwcm9jZXNzIHN0aWxsIG5lZWRzIHRvIGhhdmUgYSBzZXJ2aWNlCisgICAgICAg
IHdvcmtlciByZWdpc3RyeSBpbiBpdCwgYnV0IHdoZW4gd2UgcmVjZWl2ZSBhIG1lc3NhZ2UgZnJv
bSBpdCBsb29raW5nIGZvciBhIHdlYiBwcm9jZXNzIHRvIHJ1biB0aGUgc2VydmljZQorICAgICAg
ICB3b3JrZXIsIHdlIGdvIGFyYml0cmFyaWx5IHRvIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wgdGhh
dCBoYXMgYSBwcm9jZXNzIHdlIGNhbiB1c2UuICBUaGlzIGxvZ2ljIGlzIGluIAorICAgICAgICBX
ZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQ
cm9jZXNzLiAgQmVjYXVzZSB3ZSB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCBlYWNoCisgICAg
ICAgIHRpbWUsIHNldHRpbmcgdGhlIGN1c3RvbSB1c2VyIGFnZW50IHRvIHR3byBkaWZmZXJlbnQg
dGhpbmdzIGluIHR3byBkaWZmZXJlbnQgcHJvY2VzcyBwb29scyBjYXVzZXMgb25seSBvbmUKKyAg
ICAgICAgdG8gYmUgdXNlZC4gIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBpbiBwcmFjdGljZSwgdGhv
dWdoLCBiZWNhdXNlIHRoZSBvbmx5IGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgU1BJIHRvCisg
ICAgICAgIHNldCBhIHNlcnZpY2Ugd29ya2VyJ3MgY3VzdG9tIHVzZXIgYWdlbnQgaXMgU2FmYXJp
LCB3aGljaCBvbmx5IGhhcyBvbmUgcHJvY2VzcyBwb29sLiAgVGhpcyB0ZXN0IHN0aWxsIHZlcmlm
aWVzCisgICAgICAgIHRoYXQgYSB1c2VyIGFnZWludCBpcyBjb3JyZWN0bHkgc2VudC4KKyAgICAg
ICAgU2ltaWxhcmx5LCB0aGUgdGVzdHMgdGhhdCBjb3VudCBzZXJ2aWNlIHdvcmtlciBwcm9jZXNz
ZXMgZWl0aGVyIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMgb3IgbmVlZCB0byBiZSBydW4gd2l0aAor
ICAgICAgICBvbmUgcHJvY2VzcyBwb29sIHBlciBwYXJlbnQgcHJvY2Vzcy4gIFRvIGtlZXAgdGhl
IHJlc3VsdHMgdGhlIHNhbWUsIEkgc2VwYXJhdGVkIHRoZSB0ZXN0cyBpbnRvIGRpZmZlcmVudAor
ICAgICAgICBURVNUKFNlcnZpY2VXb3JrZXJzLCAuLi4pIG1hY3JvcyB3aGljaCBhcmUgcnVuIGlu
IHNlcGFyYXRlIHBhcmVudCBwcm9jZXNzZXMuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbToKKyAgICAgICAgKC1bQ2hlY2tTZXNz
aW9uQ29va2llVUlEZWxlZ2F0ZSB3ZWJWaWV3OnJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1l
c3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1b
Q2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0pOgorICAgICAgICAo
LVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0pOgorICAgICAg
ICAoVEVTVCk6CisgICAgICAgIFRoaXMgaXMgdGhlIHdob2xlIHBvaW50IG9mIG1lIGRvaW5nIHRo
aXMuCisgICAgICAgIEkgdG9vayBhIHRlc3QgdGhhdCB3YXMgZmxha3kgb25seSBvbiBpT1MgKGJl
Y2F1c2Ugb2YgZGlmZmVyZW50IE5TSFRUUENvb2tpZVN0b3JhZ2Ugc3luY2luZyBiZWhhdmlvcikg
YW5kIG1hZGUKKyAgICAgICAgaXQgZmxha3kgbm93aGVyZSAoZmluZ2VycyBjcm9zc2VkISkgYW5k
IGFkZGVkIGEgdGVzdCB0aGF0IGNvcnJlY3RseSBoYW5kbGVzIHNlc3Npb24gY29va2llcyBsaWtl
IHdlIGNvdWxkIG5vdAorICAgICAgICBiZWZvcmUgdGhpcyBjaGFuZ2UuCisgICAgICAgIEkgYWxz
byByZS11c2VkIHNvbWUgdGVzdCBpbmZyYXN0cnVjdHVyZSBhbmQgbWFkZSBpdCBzdG9wIHVzaW5n
IHByb2Nlc3MtZ2xvYmFsIHN0YXRpYyB2YXJpYWJsZXMgZm9yIHRlc3Qgc3RhdGUuCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVh
a3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbToKKyAgICAgICAgKHJ1bldl
YnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocyk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENv
bnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KToKKyAgICAgICAgV0tDb250ZXh0
U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyBpcyBub3Qg
bmVlZGVkLCBzbyBJIHJlbW92ZWQgaXQuCisgICAgICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJz
aXRlRGF0YVN0b3JlIGlzbid0IG5lZWRlZCBhbnkgbW9yZSBiZWNhdXNlIFdLQ29udGV4dFJlZiAo
V2ViUHJvY2Vzc1Bvb2wpIGRvZXNuJ3QKKyAgICAgICAgb3duIGEgbmV0d29yayBwcm9jZXNzIGFu
eSBtb3JlLCBzbyBpdCBkb2Vzbid0IGNhcmUgd2hpY2ggaXMgdGhlIGRlZmF1bHQgV2Vic2l0ZURh
dGFTdG9yZS4KKyAgICAgICAgSW4gZmFjdCwgdGhlICJkZWZhdWx0IiBXZWJzaXRlRGF0YVN0b3Jl
IGlzbid0IHJlYWxseSBpbXBvcnRhbnQgaW4gdGhlIG5ldHdvcmsgcHJvY2VzcyBhbnkgbW9yZS4K
KwogMjAyMC0wOS0yMSAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxlLmNvbT4K
IAogICAgICAgICBBbGxvdyBhYm91dDpibGFuayBzdWJmcmFtZSBsb2FkcyBmb3Igbm9uIGFwcC1i
b3VuZCB0b3AgZnJhbWVzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5n
Q29ubmVjdGlvbi5tbQppbmRleCA5NzM4OWYwMWZmMmVlOTliNzgzYjBiNTIxMDgwNzRmMWE4MWI2
OTgxLi41Mzc5ODRkZTdlM2U1NjY5MGU1NmJiNGJkNjM5ZTJmZWVkYzU5MWMwIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0
aFBlbmRpbmdDb25uZWN0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KQEAgLTMyLDYg
KzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NHcm91cFByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CiAKQEAgLTg3LDcgKzg4LDcgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRo
UGVuZGluZ0Nvbm5lY3Rpb24pCiAgICAgcGlkX3Qgd2ViVmlldzJQSUQgPSBbd2ViVmlldzIuZ2V0
KCkgX3dlYlByb2Nlc3NJZGVudGlmaWVyXTsKICAgICBFWFBFQ1RfTkUod2ViVmlldzFQSUQsIHdl
YlZpZXcyUElEKTsKIAotICAgIHBpZF90IGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVy
ID0gW3Byb2Nlc3NQb29sLmdldCgpIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdOworICAgIHBp
ZF90IGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVyID0gW2NvbmZpZ3VyYXRpb24uZ2V0
KCkud2Vic2l0ZURhdGFTdG9yZSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXTsKICAgICBFWFBF
Q1RfTkUoaW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlmZXIsIDApOwogICAgIGtpbGwoaW5p
dGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlmZXIsIFNJR0tJTEwpOwogICAgIFV0aWw6OnJ1bigm
bmV0d29ya1Byb2Nlc3NDcmFzaGVkKTsKQEAgLTk2LDcgKzk3LDcgQEAgVEVTVChXZWJLaXQsIE5l
dHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24pCiAgICAgW3dlYlZpZXcxLmdl
dCgpIGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBt
YWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwi
IHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dXTsKICAgICBbd2ViVmll
dzEuZ2V0KCkgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOwogCi0gICAgcGlkX3Qg
cmVsYXVuY2hlZE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllciA9IFtwcm9jZXNzUG9vbC5nZXQoKSBf
bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXTsKKyAgICBwaWRfdCByZWxhdW5jaGVkTmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyID0gW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBf
bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXTsKICAgICBFWFBFQ1RfTkUoaW5pdGlhbE5ldHdvcmtQ
cm9jZXNzSWRlbnRpZmlmZXIsIHJlbGF1bmNoZWROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIpOwog
ICAgIEVYUEVDVF9GQUxTRShuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOwogCkBAIC0xNDYsOCArMTQ3
LDggQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzUmVsYXVuY2hPbkxhdW5jaEZhaWx1cmUp
CiAKICAgICAvLyBDb25zdHVjdGluZyBhIFdlYlZpZXcgc3RhcnRzIGEgbmV0d29yayBwcm9jZXNz
IHNvIHRlcm1pbmF0ZSB0aGlzIG9uZS4gVGhlIHBhZ2UgbG9hZCBiZWxvdyB3aWxsIHRoZW4gcmVx
dWVzdCBhIG5ldHdvcmsgcHJvY2VzcyBhbmQgd2UKICAgICAvLyBtYWtlIHRoaXMgbmV3IG5ldHdv
cmsgcHJvY2VzcyBsYXVuY2ggY3Jhc2ggb24gc3RhcnR1cC4KLSAgICBbcHJvY2Vzc1Bvb2wgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBbcHJvY2Vzc1Bvb2wgX21ha2VOZXh0TmV0d29y
a1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZ107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCku
d2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byBk
ZWxlZ2F0ZSA9IGFkb3B0TlMoW1tNb25pdG9yV2ViQ29udGVudENyYXNoTmF2aWdhdGlvbkRlbGVn
YXRlIGFsbG9jXSBpbml0XSk7CiAgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRl
bGVnYXRlLmdldCgpXTsKQEAgLTE1OCw3ICsxNTksNyBAQCBURVNUKFdlYktpdCwgTmV0d29ya1By
b2Nlc3NSZWxhdW5jaE9uTGF1bmNoRmFpbHVyZSkKICAgICBFWFBFQ1RfVFJVRShuZXR3b3JrUHJv
Y2Vzc0NyYXNoZWQpOwogICAgIEVYUEVDVF9GQUxTRSh3ZWJQcm9jZXNzQ3Jhc2hlZCk7CiAgICAg
RVhQRUNUX0dUKFt3ZWJWaWV3IF93ZWJQcm9jZXNzSWRlbnRpZmllcl0sIDApOwotICAgIEVYUEVD
VF9HVChbcHJvY2Vzc1Bvb2wuZ2V0KCkgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0sIDApOwor
ICAgIEVYUEVDVF9HVChbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9uZXR3
b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCAwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktp
dEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9E
b3dubG9hZC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxv
YWQubW0KaW5kZXggYjdlZDk5OTM5ZmQ1OWYyMjhhN2U4YmQ3NDk3MTJmNTM2NjAxNTYxNi4uMTgx
OTEzMWM5YTBmZWIzMGIxYTJmMGNmY2Q4N2JmMjA0NWViYjNmNCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCkBAIC04ODksOSArODg5
LDkgQEAgdm9pZCBkb3dubG9hZEF0UmF0ZShkb3VibGUgZGVzaXJlZEticHMsIHVuc2lnbmVkIHNw
ZWVkTXVsdGlwbGllciwgQXBwUmV0dXJuc1RvRm8KICAgICByZWNlaXZlZERhdGEgPSBmYWxzZTsK
ICAgICBVdGlsOjpydW4oJnJlY2VpdmVkRGF0YSk7CiAgICAgLy8gU3RhcnQgdGhlIERvd25sb2Fk
TW9uaXRvcidzIHRpbWVyLgotICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9v
bCBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpZRVNdOworICAgIFtbd2ViVmlldyBjb25maWd1
cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOllFU107
CiAgICAgaWYgKHJldHVyblRvRm9yZWdyb3VuZCA9PSBBcHBSZXR1cm5zVG9Gb3JlZ3JvdW5kOjpZ
ZXMpCi0gICAgICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfc3ludGhl
c2l6ZUFwcElzQmFja2dyb3VuZDpOT107CisgICAgICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9u
XS53ZWJzaXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOk5PXTsKICAgICBk
aWRDYW5jZWwgPSBmYWxzZTsKICAgICBVdGlsOjpydW4oJmRpZENhbmNlbCk7CiAgICAgdGVybWlu
YXRlU2VydmVyID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbQppbmRleCA1Y2Q3YWJkYTAxZDE5NzQ3
ZGNlZDQ1YWJlZTk5ZWNiMWMxNGQ2MTYwLi5kNzdhNmZkOTg3OWU0M2Y3MDExZGRhZjkyYzNhNzk3
ZjNmYzEzNzM0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0lEQkNoZWNrcG9pbnRXQUwubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0
IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJD
b250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25m
aWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQ
cm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVT
aGVldC5oPgpAQCAtODYsNyArODcsNyBAQCBURVNUKEluZGV4ZWREQiwgQ2hlY2twb2ludHNXQUxB
dXRvbWF0aWNhbGx5KQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25m
aWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRd
KTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRN
ZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRv
cHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgw
MCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVy
eS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVj
b3ZlcnkubW0KaW5kZXggYzhhZjFkMjQzYzRmZWI1OGFjOTg0ZGFmMTRkODE1MzFhN2NjM2M3My4u
YmJmMWExNTIxNWRjMWZkMjhkZmRkYjllMzQxYjY0ZjljMDA4ZjRjNCAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292
ZXJ5Lm1tCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2lt
cG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktp
dC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24u
aD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtNTcsNyArNTgsNyBA
QCBURVNUKEluZGV4ZWREQiwgRGVsZXRlUmVjb3ZlcnkpCiAgICAgUmV0YWluUHRyPFdLV2ViVmll
d0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmln
dXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENv
bnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRl
c3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVE
YXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIENvcHkgdGhlIGlu
Y29uc2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAg
TlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiSURC
RGVsZXRlUmVjb3ZlcnkiIHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJU
ZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tCmluZGV4IDk1
Y2NhMGNlMjgxNmZmMWE2YTQ1NWFkMGJkMmM4YTRhYTRmMjdmZWQuLjg4YTUzZjYxZDlkOTgyNjU3
Yjk2NWVmOGE2Y2ViYTc5MWVmZjE3NTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbQorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KQEAgLTMx
LDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQv
V0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgog
I2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8
V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01OCw3ICs1OSw3IEBAIFRFU1QoSW5kZXhl
ZERCLCBJbmRleFVwZ3JhZGVUb1YyKQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0
aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxs
b2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBh
ZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJd
OwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IHRoZSBpbmNvbnNpc3RlbnQg
ZGF0YWJhc2UgZmlsZXMgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeQogICAgIE5TVVJMICp1cmwx
ID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIkluZGV4VXBncmFkZSIg
d2l0aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVz
b3VyY2VzIl07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQppbmRl
eCBmZmE1YTc4NzhhNDczMmI4ZWMyNDVjOTA1M2ZkMTdlZTU5NTZmYTNkLi40MDNlMGZmYTgyMTIz
NDUxYzQ2NmZlZWNjMzI0ZjljNmU3NjFkNDNkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJ
bmZvVXBncmFkZVRvVjIubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1By
b2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9s
bGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01
Nyw3ICs1OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9W
MikKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tj
b25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRs
ZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdOwogCiAgICAgLy8gQ29weSBkYXRhYmFzZSBmaWxlcyB3aXRoIG9sZCBPYmplY3RTdG9yZUlu
Zm8gc2NoZW1hIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkuCiAgICAgTlNVUkwgKnVybDEgPSBb
W05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiSURCT2JqZWN0U3RvcmVJbmZv
VXBncmFkZSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJL
aXRBUEkucmVzb3VyY2VzIl07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwu
bW0KaW5kZXggNjg3NDUyOWViYmYzNzg1MThkOTNlMGEwODIxZjYzMDEyY2ZhNmQ1Zi4uNzMwNzdl
Y2RmZDM2NWI1MjkwNTNkNDdjYmEyYTE0ZWQwNTFlZDZlYSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxs
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERC
RGF0YWJhc2VQcm9jZXNzS2lsbC5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0
L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENv
bnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlv
blByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bv
b2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC05Miw3ICs5
Myw3IEBAIFRFU1QoSW5kZXhlZERCLCBEYXRhYmFzZVByb2Nlc3NLaWxsKQogICAgICAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgICAgIGlm
ICgha2lsbGVkREJQcm9jZXNzICYmIG9wZW5SZXF1ZXN0VXBncmFkZU5lZWRlZCkgewogICAgICAg
ICAgICAga2lsbGVkREJQcm9jZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgICAgICAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0K
aW5kZXggN2Y2MjY0NWQ5OTYwZWRlOTYwYzAwMWMyNzJiNjUwMzkzOTAxMTYzMi4uNmY2N2RjMjdl
ZGMzZDI3NDViMTcwZTQ4MmJjZDkwZTg0OTRjYjk1YSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nl
c3MubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29u
dHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9u
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxl
U2hlZXQuaD4KICNpbXBvcnQgPHd0Zi9EZXF1ZS5oPgpAQCAtNjksNyArNzAsNyBAQCBURVNUKElu
ZGV4ZWREQiwgSW5kZXhlZERCTXVsdGlQcm9jZXNzKQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdD
b25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250
cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0
SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0
YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBSZXRhaW5QdHI8V0tXZWJW
aWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0
KCldKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KaW5kZXggYjMyY2U0YTVmNzM4NjNhZWRk
Y2I5MTkwYjViNDM3MGUzNzQ0M2I1ZS4uZDYyMjAzMjJlNDc4ZDFkYWM3OGYwNjk2N2MzYjY0M2Jm
ZDYyZjliZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCkBAIC03OCw3ICs3OCw3IEBAIFRF
U1QoSW5kZXhlZERCLCBJbmRleGVkREJQZXJzaXN0ZW5jZSkKICAgICB3ZWJWaWV3ID0gbmlsOwog
CiAgICAgLy8gVGVybWluYXRlIHRoZSBuZXR3b3JrIHByb2Nlc3MKLSAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKIAogICAgIC8vIE1ha2UgYSBuZXcgd2ViIHZpZXcgdG8gZmluaXNoIHRoZSB0ZXN0CiAgICAg
d2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7
CkBAIC0yNjgsNyArMjY4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlRoaXJkUGFydHlG
cmFtZUhhc0FjY2VzcykKIAogICAgIHdlYlZpZXcgPSBuaWw7CiAgICAgc2Vjb25kV2ViVmlldyA9
IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIFRoaXJkLXBhcnR5IElEQiBzdG9y
YWdlIGlzIHN0b3JlZCBpbiB0aGUgbWVtb3J5IG9mIG5ldHdvcmsgcHJvY2Vzcy4KICAgICBhdXRv
IHRoaXJkV2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdl
dCgpXSk7CkBAIC0zODUsNyArMzg1LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlRoaXJk
UGFydHlXb3JrZXJIYXNBY2Nlc3MpCiAKICAgICB3ZWJWaWV3ID0gbmlsOwogICAgIHNlY29uZFdl
YlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0
YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHRoaXJkV2ViVmll
dyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAg
bG9hZFRlc3RQYWdlSW5XZWJWaWV3KHRoaXJkV2ViVmlldy5nZXQoKSwgQCJkYXRhYmFzZSBpcyBj
cmVhdGVkIik7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbQppbmRleCA4ZWM2
NWYwYTNiYTkzNzM2ZmRiNGY5ZGRmZWY3NWNlNjAwMDVmZDBkLi41MTBiMjRmNTY5ZDIyYmQ0MGE3
YWRiZTI1ZWNmZDBlY2ZjOGFjNzI2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50
bHkubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1w
b3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5o
PgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpAQCAtODgsOCArODksOCBAQCBURVNUKEluZGV4
ZWREQiwgSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkpCiAKICAgICBydW5UZXN0QW5kQ2hlY2tS
ZXN1bHQoQCJDb250aW51ZSIpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07Ci0gICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07
CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQ
cm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgcnVu
VGVzdEFuZENoZWNrUmVzdWx0KEAiRXhwZWN0ZWQgQWJvcnQgRm9yIFN1c3BlbnNpb24iKTsKICAg
ICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJFeHBlY3RlZCBTdWNjZXNzIEFmdGVyIFJlc3VtZSIp
OwpAQCAtMTU4LDggKzE1OSw4IEBAIFRFU1QoSW5kZXhlZERCLCBTdXNwZW5kSW1taW5lbnRseUZv
clRoaXJkUGFydHlEYXRhYmFzZXMpCiAgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6bWFpbkZy
YW1lU3RyaW5nIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vd2Via2l0Lm9y
ZyJdXTsKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJkYXRhYmFzZSBpcyBjcmVhdGVkIik7
CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9j
ZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9j
ZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZElt
bWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Nl
bmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQo
QCJ0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZWQiKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUu
bW0KaW5kZXggNTM2NTQxZTNiMGU1Y2RhM2EzYjU1MWMxZTgxZTk2M2Y1OTJhZWIyZi4uZTdiOTky
MjhjZTg3NmU0NDdlNjQ3ODJlZjlkODdmMjVhZGM5YjlmYSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmls
ZVNpemUubW0KQEAgLTk1LDcgKzk1LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlRlbXBG
aWxlU2l6ZSkKIAogICAgIC8vIFRlcm1pbmF0ZSBuZXR3b3JrIHByb2Nlc3MgdG8ga2VlcCBXQUwg
b24gZGlzay4KICAgICB3ZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnBy
b2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAg
RVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQ
YXRoOndhbEZpbGVQYXRoLmdldCgpLnBhdGhdKTsKICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5
PiBmaWxlQXR0cmlidXRlcyA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gYXR0cmli
dXRlc09mSXRlbUF0UGF0aDp3YWxGaWxlUGF0aC5nZXQoKS5wYXRoIGVycm9yOm5pbF07CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFn
ZVBlcnNpc3RlbmNlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9M
b2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQppbmRleCA0MTMzZWU3YjNkYWU0M2VjMjA0OWNmZmMw
NjNjMGU0MjljMTdjNWVmLi41Zjc5MTkwOTQzYzc3MWU5ZDllNDQyYTBkYTI2NmZmOWEwM2JhMmYy
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2Fs
U3RvcmFnZVBlcnNpc3RlbmNlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNp
bXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLV2VicGFnZVByZWZlcmVuY2VzUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQg
PFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9f
V0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtMTA5LDcgKzExMCw3IEBAIFRFU1QoV0tXZWJWaWV3LCBM
b2NhbFN0b3JhZ2VQcm9jZXNzQ3Jhc2hlcykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAic2Vzc2lvbjpz
dG9yYWdlIiwgW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHldKTsKIAotICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OwogCiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwpAQCAtMTYyLDcgKzE2Myw3IEBA
IFRFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzU3VzcGVuZHMpCiAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAgIEVYUEVDVF9X
S19TVFJFUShAInZhbHVlIiwgW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHldKTsKIAotICAgIFtwcm9j
ZXNzUG9vbC5nZXQoKSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsK
KyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1By
b2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwogCiAgICAgcmVhZHlUb0NvbnRpbnVlID0gZmFs
c2U7CiAgICAgW3dlYlZpZXcxIGV2YWx1YXRlSmF2YVNjcmlwdDpAIndpbmRvdy5sb2NhbFN0b3Jh
Z2Uuc2V0SXRlbSgna2V5JywgJ25ld1ZhbHVlJykiIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQsIE5T
RXJyb3IgKikgewpAQCAtMTc3LDcgKzE3OCw3IEBAIFRFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3Jh
Z2VQcm9jZXNzU3VzcGVuZHMpCiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZyZWFkeVRvQ29udGludWUpOwogICAgIAotICAgIFtwcm9jZXNzUG9vbC5nZXQoKSBfc2VuZE5l
dHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRl
RGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgcmVjZWl2ZWRT
Y3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNl
aXZlZFNjcmlwdE1lc3NhZ2UpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KaW5kZXggZTYwZjg4MDI1ZDA5Mzc4OWY2
OTU2MGQ5YjkyYjI4MmYwNzEzMGE4ZC4uMGUyMWY5MDk1MDAxNGY2YzQ5MGIwZWI4ZTQ2MWVjNGJh
ODUwYmI4MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9OZXR3b3JrUHJvY2Vzcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL05ldHdvcmtQcm9jZXNzLm1tCkBAIC0yOCw3ICsyOCw3IEBACiAjaW1wb3J0ICJIVFRQ
U2VydmVyLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVdGlsaXRpZXMu
aCIKLSNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5o
PgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgpAQCAt
MzcsMTQgKzM3LDE0IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc0VudGl0bGVtZW50cykK
IHsKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOltbW1dL
V2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXV0pOwogICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBsZSJdOwotICAgIFdL
UHJvY2Vzc1Bvb2wgKnBvb2wgPSBbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbDsK
LSAgICBib29sIGhhc0VudGl0bGVtZW50ID0gW3Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nOkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0TmV0d29y
a2luZ1NhbmRib3giXTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmUgKnN0b3JlID0gW3dlYlZpZXcg
Y29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZTsKKyAgICBib29sIGhhc0VudGl0bGVtZW50
ID0gW3N0b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAImNvbS5h
cHBsZS5yb290bGVzcy5zdG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94Il07CiAjaWYgUExB
VEZPUk0oTUFDKSAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogICAgIEVYUEVDVF9UUlVFKGhh
c0VudGl0bGVtZW50KTsKICNlbHNlCiAgICAgRVhQRUNUX0ZBTFNFKGhhc0VudGl0bGVtZW50KTsK
ICNlbmRpZgotICAgIEVYUEVDVF9GQUxTRShbcG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxl
bWVudEZvclRlc3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJdKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
W3N0b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAInRlc3QgZmFp
bHVyZSBjYXNlIl0pOwogfQogCiBURVNUKFdlYktpdCwgSFRUUFJlZmVyZXIpCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jh
c2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQpp
bmRleCA2MDk4ZThkYWQyNTJlNTllYzQ5MTI1MGI0MjE2ZDNjZDA5MzZlOGY3Li4yZjhhMmUzM2Zl
ODcwM2JhYjJkOGUwNTEwODMyYmVjZDlkNDg5MzRiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50
RGF0YVN0b3JlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
TmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KQEAgLTcyLDcgKzcy
LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tSZWNvdmVyeUFmdGVyQ3Jhc2goV0tXZWJzaXRlRGF0YVN0
b3JlICpkYXRhU3RvcmUpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAg
ICBkb25lID0gZmFsc2U7CiAKLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlv
bl0ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIFt3ZWJW
aWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6c2ltcGxlMl1dOwog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiB9CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9u
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9u
TmF2aWdhdGlvbi5tbQppbmRleCA5NWRjOWQ5OGRmMTNiMDcwNWUwODE3ZDA1ODcyNjUxMjBjMTg4
ZDIzLi5kZjMyMGQ2NGRhZGJkZDFlZTI4M2Y4NjVjMTQ0MjNmM2FjNTU2NGJmIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZp
Z2F0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJv
Y2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KQEAgLTUzODUsNyArNTM4NSw3IEBAIFRFU1QoUHJvY2Vz
c1N3YXAsIFVzZVByZXdhcm1lZFByb2Nlc3NBZnRlclRlcm1pbmF0aW5nTmV0d29ya1Byb2Nlc3Mp
CiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFtwcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3Q29uZmlndXJh
dGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAK
ICAgICBhdXRvIHdlYlZpZXcyID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOndlYlZpZXdDb25m
aWd1cmF0aW9uLmdldCgpXSk7CiAgICAgW3dlYlZpZXcyIHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpk
ZWxlZ2F0ZS5nZXQoKV07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KaW5kZXggMGUxMGMz
NGVlYzgyYzZmNjU5MmJiN2M0Mjc0ZDBlNDU1ZWFmMTFlOC4uYTNhYmEyMzFhOTNiM2Q1ZjAwYTE5
M2M0N2MyNzY3ODY0YjM1MDU1YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQpAQCAt
NzE5LDcgKzcxOSw3IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTmV0d29ya1Byb2Nl
c3NSZXN0YXJ0KQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAK
LSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkBAIC03NTIsNyArNzUyLDcgQEAg
VEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBOZXR3b3JrUHJvY2Vzc1Jlc3RhcnQpCiAKICAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uLmdldCgpXSk7CiAKQEAgLTE1NTgsMTAgKzE1NTgsOCBAQCBURVNUKFJlc291cmNl
TG9hZFN0YXRpc3RpY3MsIE1pZ3JhdGVEYXRhRnJvbU1pc3NpbmdUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0U2FtZVNpdAogCiBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0RhdGFT
dW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2wpCiB7CisgICAgTlNVUkwgKml0cFJvb3RVUkwgPSBbTlNV
UkwgZmlsZVVSTFdpdGhQYXRoOltOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5k
aW5nUGF0aENvbXBvbmVudDpAIkNhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2xU
ZXN0Il0gaXNEaXJlY3Rvcnk6WUVTXTsKICAgICBhdXRvIGRlZmF1bHRGaWxlTWFuYWdlciA9IFtO
U0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKLSAgICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFTdG9y
ZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07Ci0gICAgYXV0byAqZGF0YVN0b3JlID0g
W1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFT
dG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKLSAgICBOU1VSTCAqaXRwUm9vdFVSTCA9
IFtbZGF0YVN0b3JlIF9jb25maWd1cmF0aW9uXSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVj
dG9yeV07CiAgICAgTlNVUkwgKmZpbGVVUkwgPSBbaXRwUm9vdFVSTCBVUkxCeUFwcGVuZGluZ1Bh
dGhDb21wb25lbnQ6QCJvYnNlcnZhdGlvbnMuZGIiXTsKICAgICBbZGVmYXVsdEZpbGVNYW5hZ2Vy
IHJlbW92ZUl0ZW1BdFBhdGg6aXRwUm9vdFVSTC5wYXRoIGVycm9yOm5pbF07CiAgICAgRVhQRUNU
X0ZBTFNFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDppdHBSb290VVJMLnBh
dGhdKTsKQEAgLTE1NzIsNiArMTU3MCwxMCBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3Ms
IENhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2wpCiAgICAgRVhQRUNUX1RSVUUo
W2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOm5ld0ZpbGVVUkwucGF0aF0pOwog
ICAgIFtkZWZhdWx0RmlsZU1hbmFnZXIgY29weUl0ZW1BdFBhdGg6bmV3RmlsZVVSTC5wYXRoIHRv
UGF0aDpmaWxlVVJMLnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZp
bGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6ZmlsZVVSTC5wYXRoXSk7CisKKyAgICBfV0tXZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dL
V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgZGF0
YVN0b3JlQ29uZmlndXJhdGlvbi5fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IGl0
cFJvb3RVUkw7CisgICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFs
bG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9y
ZWxlYXNlXTsKICAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZDpZRVNdOwogCiAgICAgc3RhdGljIGJvb2wgZG9uZUZsYWcgPSBmYWxzZTsKQEAgLTE2MzMsMTIg
KzE2MzUsMTIgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBTdG9yZVN1c3BlbnNpb24p
CiAgICAgW3dlYlZpZXcyIF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKIAogICAg
IGRvbmVGbGFnID0gZmFsc2U7Ci0gICAgW3NoYXJlZFByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1By
b2Nlc3NQcmVwYXJlVG9TdXNwZW5kOl57CisgICAgW2RhdGFTdG9yZTEgX3NlbmROZXR3b3JrUHJv
Y2Vzc1ByZXBhcmVUb1N1c3BlbmQ6XnsKICAgICAgICAgZG9uZUZsYWcgPSB0cnVlOwogICAgIH1d
OwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcpOwogCi0gICAgW3NoYXJl
ZFByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtkYXRhU3Rv
cmUxIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogfQogCiBAaW50ZXJmYWNlIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTY2hlbWVIYW5kbGVyIDogTlNPYmplY3QgPFdLVVJMU2NoZW1lSGFu
ZGxlcj4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
U2VydmljZVdvcmtlckJhc2ljLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0KaW5kZXggMzRhNGY1YzUzOGI5YjBlOWZjYjA1MDcy
YjE3MDI4OGU5ZTRlOWY4Zi4uMmY4ZTM0ZGJhNmRhNDcyMzU2NTVmZjBkYjJhZGNhMWJmOGM1Njcy
MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2
aWNlV29ya2VyQmFzaWMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0KQEAgLTU1OCw3ICs1NTgsNyBAQCBURVNUKFNlcnZp
Y2VXb3JrZXJzLCBVc2VyQWdlbnRPdmVycmlkZSkKIAogICAgIGNvbmZpZ3VyYXRpb24gPSBhZG9w
dE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogCi0gICAgbWVzc2Fn
ZUhhbmRsZXIgPSBhZG9wdE5TKFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5p
dFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBCYXIgQ3VzdG9tIFVz
ZXJBZ2VudCJdKTsKKyAgICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1l
c3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJv
bSB3b3JrZXI6IEZvbyBDdXN0b20gVXNlckFnZW50Il0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1
c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1lc3NhZ2VIYW5k
bGVyLmdldCgpIG5hbWU6QCJzdyJdOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CkBAIC02MzMsOCArNjMzLDYgQEAgVEVTVChT
ZXJ2aWNlV29ya2VycywgQ2FjaGVTdG9yYWdlUmVzdG9yZUZyb21EaXNrKQogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwogCi0gICAgW1dLV2Vi
c2l0ZURhdGFTdG9yZSBfZGVsZXRlRGVmYXVsdERhdGFTdG9yZUZvclRlc3RpbmddOwotCiAgICAg
U2VydmljZVdvcmtlclRDUFNlcnZlciBzZXJ2ZXIoewogICAgICAgICB7ICJ0ZXh0L2h0bWwiLCBt
YWluQ2FjaGVTdG9yYWdlQnl0ZXMgfQogICAgIH0sIHsKQEAgLTk4Miw2ICs5ODAsNyBAQCBURVNU
KFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9uKQogCiAgICAgUmV0
YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtb
V0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIHNldENvbmZpZ3VyYXRp
b25JbmplY3RlZEJ1bmRsZVBhdGgoY29uZmlndXJhdGlvbi5nZXQoKSk7CisgICAgUmV0YWluUHRy
PFdLUHJvY2Vzc1Bvb2w+IG9yaWdpbmFsUHJvY2Vzc1Bvb2wgPSBjb25maWd1cmF0aW9uLmdldCgp
LnByb2Nlc3NQb29sOwogCiAgICAgZG9uZSA9IGZhbHNlOwogCkBAIC0xMDM1LDcgKzEwMzQsNyBA
QCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9uKQogICAg
IGRvbmUgPSBmYWxzZTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGxvYWRpbmcgdGhlIHNpbXBs
ZSBwYWdlIGRpZCBub3Qgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCi0gICAgRVhQ
RUNUX0VRKDB1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZp
Y2VXb3JrZXJQcm9jZXNzQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgd2ViVmlldy5nZXQoKS5j
b25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKIAog
ICAgIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5T
TWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246bmV3Q29uZmlndXJhdGlvbi5n
ZXQoKV0pOwogICAgIEVYUEVDVF9FUSgydSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnBy
b2Nlc3NQb29sLl93ZWJQcm9jZXNzQ291bnRJZ25vcmluZ1ByZXdhcm1lZCk7CkBAIC0xMDQzLDkg
KzEwNDIsOCBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0
aW9uKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZh
bHNlOwogCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgbG9hZGluZyB0aGlzIHBhZ2UgZGlkIHN0YXJ0
IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgogICAgIEVYUEVDVF9FUSgxdSwgd2ViVmlldy5n
ZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50
KTsKLQorICAgIEVYUEVDVF9FUSgxdSwgb3JpZ2luYWxQcm9jZXNzUG9vbC5nZXQoKS5fc2Vydmlj
ZVdvcmtlclByb2Nlc3NDb3VudCk7CiAgICAgW1tjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3Rv
cmVdIHJlbW92ZURhdGFPZlR5cGVzOltXS1dlYnNpdGVEYXRhU3RvcmUgYWxsV2Vic2l0ZURhdGFU
eXBlc10gbW9kaWZpZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQYXN0XSBjb21wbGV0aW9uSGFuZGxl
cjpeKCkgewogICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9XTsKQEAgLTE2MTgsMjEgKzE2MTYs
MzUgQEAgc3RhdGljIHNpemVfdCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sIHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGIKICAgICByZXR1cm4gd2ViVmlldy5nZXQoKS5j
b25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl93ZWJQcm9jZXNzQ291bnRJZ25vcmluZ1ByZXdhcm1l
ZDsKIH0KIAotVEVTVChTZXJ2aWNlV29ya2VycywgT3V0T2ZBbmRJblByb2Nlc3NTZXJ2aWNlV29y
a2VyKQorVEVTVChTZXJ2aWNlV29ya2VycywgT3V0T2ZQcm9jZXNzU2VydmljZVdvcmtlcikKIHsK
ICAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOwogICAgIGJv
b2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CiAKICAgICBFWFBFQ1RfRVEoMXUsIGxhdW5j
aFNlcnZpY2VXb3JrZXJQcm9jZXNzKCF1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAh
Zmlyc3RMb2FkQWJvdXRCbGFuaykpOworfQorCitURVNUKFNlcnZpY2VXb3JrZXJzLCBJblByb2Nl
c3NTZXJ2aWNlV29ya2VyKQoreworICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcyA9IHRydWU7CisgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKKwogICAg
IEVYUEVDVF9FUSgydSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcywgIWZpcnN0TG9hZEFib3V0QmxhbmspKTsKIH0KIAotVEVTVChTZXJ2
aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaFNlcnZpY2VX
b3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRp
bmdUaHJvdWdoT3V0T2ZQcm9jZXNzU2VydmljZVdvcmtlcikKIHsKICAgICBib29sIHVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOwogICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRC
bGFuayA9IHRydWU7CiAKICAgICBFWFBFQ1RfRVEoMXUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9j
ZXNzKCF1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJzdExvYWRBYm91dEJsYW5r
KSk7Cit9CisKK1RFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5rQmVmb3JlTmF2aWdh
dGluZ1Rocm91Z2hJblByb2Nlc3NTZXJ2aWNlV29ya2VyKQoreworICAgIGJvb2wgdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CisgICAgYm9vbCBmaXJzdExvYWRBYm91dEJs
YW5rID0gdHJ1ZTsKKwogICAgIEVYUEVDVF9FUSgydSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nl
c3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgZmlyc3RMb2FkQWJvdXRCbGFuaykp
OwogfQogCkBAIC0xOTQ0LDExICsxOTU2LDExIEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFN1c3Bl
bmROZXR3b3JrUHJvY2VzcykKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZh
dWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAgICBbIHdl
YlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9u
LndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRs
eV07CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZp
bGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0aF0pOwogCi0gICAgWyB3ZWJWaWV3LmdldCgpLmNv
bmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07Cisg
ICAgW3dlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6c2VydmVy
LnJlcXVlc3QoKV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2ll
U3RvcmUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENv
b2tpZVN0b3JlLm1tCmluZGV4IGEzNWYwNTM1MGFhYjRiNDJmMzZjNDZhZWNkZWVlZTZjZTU0NGVm
ODYuLjMzNzYwOTJhMTk1YjUxMmRhNjdjNDk2ZTQ1MjE3YjkxNGZlMmE1NzkgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUu
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29r
aWVTdG9yZS5tbQpAQCAtNDc5LDggKzQ3OSw2IEBAIHN0YXRpYyBib29sIGZpbmlzaGVkOwogfQog
QGVuZAogCi0vLyBGSVhNRTogb24gaU9TLCBVSSBwcm9jZXNzIHNob3VsZCBiZSB1c2luZyB0aGUg
c2FtZSBjb29raWUgZmlsZSBhcyB0aGUgbmV0d29yayBwcm9jZXNzIGZvciBkZWZhdWx0IHNlc3Np
b24uCi0jaWYgUExBVEZPUk0oTUFDKQogZW51bSBjbGFzcyBTaG91bGRFbmFibGVQcm9jZXNzUHJl
d2FybWluZyB7IE5vLCBZZXMgfTsKIHZvaWQgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJv
Y2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxkRW5hYmxlUHJvY2Vz
c1ByZXdhcm1pbmcpCiB7CkBAIC01ODksMjAgKzU4Nyw2NiBAQCBURVNUKFdLSFRUUENvb2tpZVN0
b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xXaXRoUHJld2FybWluZykKICAgICBydW5XS0hUVFBDb29r
aWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZzo6
WWVzKTsKIH0KIAotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQogQGludGVyZmFjZSBDaGVja1Nl
c3Npb25Db29raWVVSURlbGVnYXRlIDogTlNPYmplY3QgPFdLVUlEZWxlZ2F0ZT4KKy0gKE5TU3Ry
aW5nICopYWxlcnRDb29raWVIVE1MOworLSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZTsKIEBl
bmQKIAotQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUKK0BpbXBs
ZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHsKKyAgICBSZXRhaW5QdHI8
TlNTdHJpbmc+IF9tZXNzYWdlOworfQorCiAtICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdl
YlZpZXcgcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNz
YWdlIGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgRVhQRUNUX1NUUkVR
KCJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIsIG1lc3NhZ2UuVVRGOFN0cmluZyk7Cisg
ICAgX21lc3NhZ2UgPSBtZXNzYWdlOwogICAgIGZpbmlzaGVkID0gdHJ1ZTsKICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwogfQorCistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNzYWdlCit7CisgICAg
d2hpbGUgKCFfbWVzc2FnZSkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxv
b3AoKTsKKyAgICByZXR1cm4gX21lc3NhZ2UuYXV0b3JlbGVhc2UoKTsKK30KKworLSAoTlNTdHJp
bmcgKilhbGVydENvb2tpZUhUTUwKK3sKKyAgICByZXR1cm4gQCI8c2NyaXB0PnZhciBjb29raWVz
ID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2ll
cy5sZW5ndGg7IGkgKyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tp
ZXMuc29ydCgpOyBhbGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Cit9CisKIEBl
bmQKIAorVEVTVChXZWJLaXQsIFdLSFRUUENvb2tpZVN0b3JlTXVsdGlwbGVWaWV3cykKK3sKKyAg
ICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MSA9IFtbVGVzdFdLV2ViVmlldyBuZXddIGF1dG9yZWxl
YXNlXTsKKyAgICBbd2ViVmlldzEgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAic3RhcnQg
bmV0d29yayBwcm9jZXNzIl07CisKKyAgICBOU0hUVFBDb29raWUgKnNlc3Npb25Db29raWUgPSBb
TlNIVFRQQ29va2llIGNvb2tpZVdpdGhQcm9wZXJ0aWVzOkB7CisgICAgICAgIE5TSFRUUENvb2tp
ZVBhdGg6IEAiLyIsCisgICAgICAgIE5TSFRUUENvb2tpZU5hbWU6IEAiU2Vzc2lvbkNvb2tpZU5h
bWUiLAorICAgICAgICBOU0hUVFBDb29raWVWYWx1ZTogQCJDb29raWVWYWx1ZSIsCisgICAgICAg
IE5TSFRUUENvb2tpZURvbWFpbjogQCIxMjcuMC4wLjEiLAorICAgIH1dOworCisgICAgX19ibG9j
ayBib29sIHNldENvb2tpZURvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldzEuY29uZmlndXJhdGlv
bi53ZWJzaXRlRGF0YVN0b3JlLmh0dHBDb29raWVTdG9yZSBzZXRDb29raWU6c2Vzc2lvbkNvb2tp
ZSBjb21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBzZXRDb29raWVEb25lID0gdHJ1ZTsKKyAg
ICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnNldENvb2tpZURvbmUpOworCisg
ICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUg
bmV3XSk7CisgICAgW3dlYlZpZXcxIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisg
ICAgW3dlYlZpZXcxIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJh
c2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVY
UEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5h
bWU9Q29va2llVmFsdWUiKTsKKworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcyID0gW1tUZXN0
V0tXZWJWaWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MiBzZXRVSURlbGVnYXRl
OmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzIgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRl
IGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8x
MjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2Fn
ZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworfQorCiBURVNUKFdLSFRUUENv
b2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQogewogICAgIFJl
dGFpblB0cjxXS1dlYnNpdGVEYXRhU3RvcmU+IGVwaGVtZXJhbFN0b3JlV2l0aENvb2tpZXMgPSBb
V0tXZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdOwpAQCAtNjI3LDkgKzY3
MSw4IEBAIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJh
bFNlc3Npb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7CiAgICAg
ZmluaXNoZWQgPSBmYWxzZTsKICAgICAKLSAgICBOU1N0cmluZyAqYWxlcnRDb29raWVIVE1MID0g
QCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7IGZvciAo
bGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkgKyspIHsgY29va2llc1tpXSA9IGNvb2tp
ZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgpOyBhbGVydChjb29raWVzLmpvaW4oJzsgJykp
Ozwvc2NyaXB0PiI7Ci0gICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6YWxlcnRDb29raWVIVE1M
IGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOwotICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOworICAgIFt3ZWJWaWV3IGxvYWRI
VE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdp
dGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVs
ZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsK
IH0KIAogc3RhdGljIGJvb2wgYXJlQ29va2llc0VxdWFsKE5TSFRUUENvb2tpZSAqZmlyc3QsIE5T
SFRUUENvb2tpZSAqc2Vjb25kKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbQppbmRl
eCBhYzdkZTQxNTEyYzQ1MTM4ZWM1ZTRjMDllNTExNWQxNmNkMjNiMjJlLi5hYzE2NTM1ZGZkOTM5
OTlkMmVjNTBkY2ZkNzFjM2E1NmQxMTNlYzdhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbQorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1s
ZWFrcy5tbQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVVJMU2NoZW1lVGFz
a1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktp
dC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+
CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0x
NTIsNyArMTUzLDcgQEAgVEVTVChVUkxTY2hlbWVIYW5kbGVyLCBMZWFrczMpCiAKICAgICBydW5V
bnRpbFRhc2tzSW5GbGlnaHQoMik7CiAKLSAgICBbd2ViVmlldzEuZ2V0KCkuY29uZmlndXJhdGlv
bi5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3MS5n
ZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKIAogICAgIHJ1blVudGlsVGFza3NJbkZsaWdodCgwKTsKIH0KZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3Rv
bVBhdGhzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0KaW5kZXggOTJjZjNhNjE5OGE1YjlkMTQ1NDQ5MDVkYjll
OTQ4ZjExYzcyNTZkZS4uODE3NzllMjgxYzYwNzU0NzU1YWNlMWQ4MDFlMjY4MWQxNGU1YmMzMCAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0KQEAgLTI0NCw3ICsyNDQs
NyBAQCBzdGF0aWMgdm9pZCBydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMoU2hvdWxkRW5h
YmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxkRQogICAgIC8vIE5vdywgd2l0aCBicmFuZCBuZXcg
V0tXZWJzaXRlRGF0YVN0b3JlcyBwb2ludGluZyBhdCB0aGUgc2FtZSBjdXN0b20gY29va2llIHN0
b3JhZ2UgbG9jYXRpb24sCiAgICAgLy8gaW4gbmV3bHkgZmlyZWQgdXAgTmV0d29ya1Byb2Nlc3Nl
cywgdmVyaWZ5IHRoYXQgdGhlIGZldGNoIGFuZCBkZWxldGUgQVBJcyB3b3JrIGFzIGV4cGVjdGVk
LgogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2Rh
dGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIGF1dG8gbmV3Q3VzdG9tRGF0
YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29u
ZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKV0pOwogCiAgICAg
W25ld0N1c3RvbURhdGFTdG9yZSBmZXRjaERhdGFSZWNvcmRzT2ZUeXBlczpbTlNTZXQgc2V0V2l0
aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVDb29raWVzLCBuaWxdIGNvbXBsZXRpb25IYW5kbGVy
Ol4oTlNBcnJheTxXS1dlYnNpdGVEYXRhUmVjb3JkICo+ICogcmVjb3JkcykgewpAQCAtMjU1LDcg
KzI1NSw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocyhTaG91
bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRFCiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNz
YWdlID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlw
dE1lc3NhZ2UpOwogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CisgICAgW2RhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIG5ld0N1c3Rv
bURhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0
aENvbmZpZ3VyYXRpb246d2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAog
ICAgIFtuZXdDdXN0b21EYXRhU3RvcmUgcmVtb3ZlRGF0YU9mVHlwZXM6W05TU2V0IHNldFdpdGhP
YmplY3RzOldLV2Vic2l0ZURhdGFUeXBlQ29va2llcywgbmlsXSBtb2RpZmllZFNpbmNlOltOU0Rh
dGUgZGlzdGFudFBhc3RdIGNvbXBsZXRpb25IYW5kbGVyOl4gewpAQCAtMzg1LDExICszODUsMTAg
QEAgVEVTVChXZWJLaXQsIEN1c3RvbURhdGFTdG9yZURlc3Ryb3lXaGlsZUZldGNoaW5nTmV0d29y
a1Byb2Nlc3NEYXRhKQogCiAgICAgICAgIC8vIFRlcm1pbmF0ZSB0aGUgbmV0d29yayBwcm9jZXNz
IHdoaWxlIGEgcXVlcnkgaXMgcGVuZGluZy4KICAgICAgICAgYXV0byogYWxsUHJvY2Vzc1Bvb2xz
ID0gW1dLUHJvY2Vzc1Bvb2wgX2FsbFByb2Nlc3NQb29sc0ZvclRlc3RpbmddOwotICAgICAgICBB
U1NFUlRfRVEoMVUsIFthbGxQcm9jZXNzUG9vbHMgY291bnRdKTsKLSAgICAgICAgYXV0byogcHJv
Y2Vzc1Bvb2wgPSBhbGxQcm9jZXNzUG9vbHNbMF07Ci0gICAgICAgIHdoaWxlICghW3Byb2Nlc3NQ
b29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKQorICAgICAgICBBU1NFUlRfRVEoMFUsIFth
bGxQcm9jZXNzUG9vbHMgY291bnRdKTsKKyAgICAgICAgd2hpbGUgKCFbZGF0YVN0b3JlIF9uZXR3
b3JrUHJvY2Vzc0lkZW50aWZpZXJdKQogICAgICAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
c2xlZXAoMC4wMSk7Ci0gICAgICAgIGtpbGwoW3Byb2Nlc3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXJdLCBTSUdLSUxMKTsKKyAgICAgICAga2lsbChbZGF0YVN0b3JlIF9uZXR3b3JrUHJv
Y2Vzc0lkZW50aWZpZXJdLCBTSUdLSUxMKTsKICAgICAgICAgYWxsUHJvY2Vzc1Bvb2xzID0gbmls
OwogICAgICAgICBkYXRhU3RvcmUgPSBuaWw7CiAgICAgfQpAQCAtNTM5LDcgKzUzOCw3IEBAIFRF
U1QoV2ViS2l0LCBEb0xvYWRXaXRoTm9uRGVmYXVsdERhdGFTdG9yZUFmdGVyVGVybWluYXRpbmdO
ZXR3b3JrUHJvY2VzcykKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEp
OwogCi0gICAgW3dlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CisgICAgW3dlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpLndlYnNp
dGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJlcXVlc3QgPSBb
TlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9y
UmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAi
VGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVx
dWVzdF07CkBAIC04NTcsNyArODU2LDcgQEAgVEVTVChXZWJLaXQsIE1lZGlhQ2FjaGUpCiAgICAg
RVhQRUNUX0ZBTFNFKGVycm9yKTsKIAogICAgIGRvbmUgPSB0cnVlOwotICAgIFtbd2ViVmlldyBj
b25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAg
IFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CiAKICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0UGF0aDpwYXRoIGVy
cm9yOiZlcnJvcl07CiAgICAgRVhQRUNUX0ZBTFNFKGVycm9yKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2JqQy9DdXN0b21Qcm90b2NvbHNUZXN0Lm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVByb3RvY29sc1Rlc3Qu
bW0KaW5kZXggMjJlMWEwYTllOGUyNjgwNDVlNmIxN2MzMDZiMDAxNGQ1YmM5MTI2OC4uN2I4NDc4
YjU5NzlmYTc0YjljZDU5ZDA2MmVhZGQwZDNjNTE1MWZkNyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVByb3RvY29sc1Rlc3Qu
bW0KQEAgLTM0LDYgKzM0LDggQEAKICNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgogI2ltcG9ydCA8
V2ViS2l0L1dLQ29udGV4dFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NHcm91
cFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1ZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CiAKIHN0YXRpYyBib29sIHRlc3RGaW5pc2hlZDsKQEAgLTcyLDYgKzc0LDggQEAgc3RhdGljIFdL
UHJvY2Vzc0dyb3VwICpwcm9jZXNzR3JvdXAoKQogICAgIHJldHVybiBwcm9jZXNzR3JvdXA7CiB9
CiAKK3N0YXRpYyBSZXRhaW5QdHI8V0tWaWV3PiB3a1ZpZXc7CisKIEBpbnRlcmZhY2UgQ2xvc2VX
aGlsZVN0YXJ0aW5nUHJvdG9jb2wgOiBUZXN0UHJvdG9jb2wKIEBlbmQKIApAQCAtODksNyArOTMs
NyBAQCBzdGF0aWMgV0tQcm9jZXNzR3JvdXAgKnByb2Nlc3NHcm91cCgpCiAgICAgICAgIH07CiAg
ICAgICAgIFdLQ29udGV4dFNldENsaWVudChbcHJvY2Vzc0dyb3VwKCkgX2NvbnRleHRSZWZdLCAm
Y2xpZW50LmJhc2UpOwogCi0gICAgICAgIGtpbGwoV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJ
ZGVudGlmaWVyKFtwcm9jZXNzR3JvdXAoKSBfY29udGV4dFJlZl0pLCBTSUdLSUxMKTsKKyAgICAg
ICAga2lsbChXS1dlYnNpdGVEYXRhU3RvcmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tQ
YWdlR2V0V2Vic2l0ZURhdGFTdG9yZShbd2tWaWV3IHBhZ2VSZWZdKSksIFNJR0tJTEwpOwogICAg
ICAgICBbc2VsZi5jbGllbnQgVVJMUHJvdG9jb2w6c2VsZiBkaWRGYWlsV2l0aEVycm9yOltOU0Vy
cm9yIGVycm9yV2l0aERvbWFpbjpOU0NvY29hRXJyb3JEb21haW4gY29kZTowIHVzZXJJbmZvOm5p
bF1dOwogICAgIH0pOwogfQpAQCAtMTQyLDcgKzE0Niw3IEBAIG5hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJIHsKIHN0YXRpYyB2b2lkIHJ1blRlc3QoKQogewogICAgIFJldGFpblB0cjxXS0Jyb3dzaW5n
Q29udGV4dEdyb3VwPiBicm93c2luZ0NvbnRleHRHcm91cCA9IGFkb3B0TlMoW1tXS0Jyb3dzaW5n
Q29udGV4dEdyb3VwIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6QCJUZXN0SWRlbnRpZmllciJd
KTsKLSAgICBSZXRhaW5QdHI8V0tWaWV3PiB3a1ZpZXcgPSBhZG9wdE5TKFtbV0tWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIHByb2Nlc3NHcm91cDpw
cm9jZXNzR3JvdXAoKSBicm93c2luZ0NvbnRleHRHcm91cDpicm93c2luZ0NvbnRleHRHcm91cC5n
ZXQoKV0pOworICAgIHdrVmlldyA9IGFkb3B0TlMoW1tXS1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgcHJvY2Vzc0dyb3VwOnByb2Nlc3NHcm91cCgp
IGJyb3dzaW5nQ29udGV4dEdyb3VwOmJyb3dzaW5nQ29udGV4dEdyb3VwLmdldCgpXSk7CiAgICAg
UmV0YWluUHRyPEN1c3RvbVByb3RvY29sc0xvYWREZWxlZ2F0ZT4gbG9hZERlbGVnYXRlID0gYWRv
cHROUyhbW0N1c3RvbVByb3RvY29sc0xvYWREZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwogICAgIFt3
a1ZpZXcgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcl0ubG9hZERlbGVnYXRlID0gbG9hZERlbGVn
YXRlLmdldCgpOwogICAgIFtbd2tWaWV3IGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJdIGxvYWRS
ZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDovL3JlZGlyZWN0P3Rlc3QiLCBbVGVzdFBy
b3RvY29sIHNjaGVtZV1dXV1dOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcAppbmRleCA5ZDM3Y2NlZGRiODIxNTc0NzVkODFmMTIyMGY0NTZiODY0YzNiMTcxLi4zYWM5
M2E2ZDYzZWE1ZjI0MWI0NzU4ZTc2YjVmNzlkMDQyNTQyOTUyIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtMTA2MSw4ICsxMDYxLDYgQEAgYm9vbCBUZXN0
Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9u
cyYgb3B0aW9ucywgUmUKIAogICAgIHJlc2V0UXVvdGEoKTsKIAotICAgIFdLQ29udGV4dFNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcocGxhdGZvcm1Db250
ZXh0KCksIHRydWUpOwotCiAgICAgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZv
clRlc3RpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSk7CiAKICAgICBX
S0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5jb250ZXh0KCksIGZhbHNlKTsKQEAgLTEyMzcsNyArMTIzNSw3IEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OmZpbmRBbmREdW1wV2ViS2l0UHJvY2Vzc0lkZW50aWZpZXJzKCkK
ICAgICBkdW1wUmVzcG9uc2UobWFrZVN0cmluZyhUZXN0Q29udHJvbGxlcjo6d2ViUHJvY2Vzc05h
bWUoKSwgIjogIiwKICAgICAgICAgV0tQYWdlR2V0UHJvY2Vzc0lkZW50aWZpZXIoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSksICdcbicsCiAgICAgICAg
IFRlc3RDb250cm9sbGVyOjpuZXR3b3JrUHJvY2Vzc05hbWUoKSwgIjogIiwKLSAgICAgICAgV0tD
b250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKG1fY29udGV4dC5nZXQoKSksICdcbicp
KTsKKyAgICAgICAgV0tXZWJzaXRlRGF0YVN0b3JlR2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVy
KHdlYnNpdGVEYXRhU3RvcmUoKSksICdcbicpKTsKICNlbHNlCiAgICAgZHVtcFJlc3BvbnNlKCJc
biJfcyk7CiAjZW5kaWYKQEAgLTIyOTcsNyArMjI5NSw3IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4gVGVzdENvbnRyb2xsZXI6OmdldEluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0
YSgpCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6Om5ldHdvcmtQcm9jZXNzRGlkQ3Jhc2goKQogewot
ICAgIHBpZF90IHBpZCA9IFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihtX2Nv
bnRleHQuZ2V0KCkpOworICAgIHBpZF90IHBpZCA9IFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdv
cmtQcm9jZXNzSWRlbnRpZmllcih3ZWJzaXRlRGF0YVN0b3JlKCkpOwogICAgIGZwcmludGYoc3Rk
ZXJyLCAiI0NSQVNIRUQgLSAlcyAocGlkICVsZClcbiIsIG5ldHdvcmtQcm9jZXNzTmFtZSgpLCBz
dGF0aWNfY2FzdDxsb25nPihwaWQpKTsKICAgICBleGl0KDEpOwogfQpAQCAtMzEzNiw3ICszMTM0
LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMo
Ym9vbCBpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWkKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVy
bWluYXRlTmV0d29ya1Byb2Nlc3MoKQogewotICAgIFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzcyh3ZWJzaXRlRGF0YVN0b3JlKCkpOwogfQogCiB2b2lkIFRlc3RDb250
cm9sbGVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpCkBAIC0zMTY3LDkgKzMxNjUsOCBAQCBQ
bGF0Zm9ybVdlYlZpZXcqIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNyZWF0ZU90aGVyUGFnZShQ
bGF0Zm9ybVdlYlZpZXcqIHBhcmVudAogICAgIHJldHVybiBuZXcgUGxhdGZvcm1XZWJWaWV3KGNv
bmZpZ3VyYXRpb24sIG9wdGlvbnMpOwogfQogCi1XS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29u
ZmlndXJhdGlvblJlZiBjb250ZXh0Q29uZmlndXJhdGlvbikKK1dLQ29udGV4dFJlZiBUZXN0Q29u
dHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0Nv
bnRleHRDb25maWd1cmF0aW9uUmVmKQogewotICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRl
RGF0YVN0b3JlKGNvbnRleHQsIGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCkpOwogICAgIHJldHVy
biBjb250ZXh0OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409367</attachid>
            <date>2020-09-22 09:21:48 -0700</date>
            <delta_ts>2020-09-22 10:44:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200922092147.patch</filename>
            <type>text/plain</type>
            <size>344206</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRhZGZjMzM1NmEzMzk3NmU4
YmE5Mzk2YmJhOTM0ZThmNGMzODhmM2EuLjAxNTAwYTk4ZWM1ZGJmOTJlYTE2NzlhNzBiN2FmMmE3
NTMzMDE2ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzY0IEBACisyMDIwLTA5LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggbW92ZXMgdGhlIHRoaW5ncyBvbiBXZWJQcm9jZXNzUG9vbCBhc3NvY2lhdGVk
IHdpdGggTmV0d29ya1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgYW5kIG1vdmVzIHRoZW0KKyAgICAg
ICAgdG8gV2Vic2l0ZURhdGFTdG9yZS4gIEl0J3MgcHJldHR5IG1lY2hhbmljYWwsIGJ1dCBpdCBy
ZWFjaGVzIGl0cyBmaW5nZXJzIGludG8gYSBsb3Qgb2YgdGhpbmdzLiAgU29tZSBjb21tZW50cwor
ICAgICAgICBvbiBpbnRlcmVzdGluZyBwYXJ0cyBhcmUgYmVsb3cuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaDoKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZh
dWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdl
U2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cDoKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZXNGb3JVUkwpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNl
dENvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNlcnZlcik6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCk6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXIpOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyk6CisgICAgICAgIChXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZSk6
CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3Rp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3Mp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwOgorICAgICAgICAoV0tXZWJzaXRl
RGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2wubW06CisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6XSk6CisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wg
X25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQ
b29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3N5
bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vz
c1Bvb2wgX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxl
bWVudEZvclRlc3Rpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJzaXRlRGF0YVN0b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOgorICAgICAgICAoLVtXS1dl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXSk6CisgICAgICAgICgtW1dL
V2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpdKToK
KyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHldKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWVdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9z
eW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKF9XZWJLaXRDb29raWVNYW5h
Z2VyUHJpdmF0ZTo6Y29va2llTWFuYWdlciBjb25zdCk6CisgICAgICAgIChfV2ViS2l0Q29va2ll
TWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUpOgorICAgICAgICAo
d2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFn
ZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFn
ZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dl
dF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29v
a2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyk6CisgICAg
ICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAod2Via2l0V2Vi
Q29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNz
aW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNzL0F1eGlsaWFyeVBy
b2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vz
c1Bvb2xDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVBy
b2Nlc3NTdXBwcmVzc2lvblN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eTo6cHVibGlzaFByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWRQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdl
YktpdDo6RG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3lu
Yyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcCk6Cisg
ICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNr
Z3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25X
aWxsRW50ZXJGb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6
Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6
OmRvd25sb2FkRmluaXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpp
bnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlN
YXAuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAgKFdlYktp
dDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2Vz
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFy
YW1ldGVyc1RvTmV3UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OmRhdGFTdG9yZVBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9v
bEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSk6CisgICAgICAgIChXZWJLaXQ6OmFueVBy
b2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFz
aGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1l
c3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6
OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9u
VG9OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sSGFzRm9y
ZWdyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sSGFz
QmFja2dyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRsZXI6OmhhbmRsZVhQQ0V2ZW50IGNvbnN0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5h
Z2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdD
b29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vz
c0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6ZGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50
T3ZlcnJpZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnByZWNvbm5lY3RUbyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmlnYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRD
bGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGlu
Zyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVy
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlv
blRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVt
b3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1
cml0eVBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVS
TFNjaGVtZUFzTG9jYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0
ZXJVUkxTY2hlbWVBc05vQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hl
bWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb25zKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmlzU2VydmljZVdvcmtlclBhZ2VJRCBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZp
Y2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlG
b3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3Mp
OiBEZWxldGVkLgorICAgICAgICBUaGVyZSBzZWVtcyB0byBiZSBhIGxvdCBvZiBjb2RlIHJlbW92
YWwgaGVyZSwgYnV0IG1vc3Qgb2YgaXQgd2FzIGR1cGxpY2F0ZSBjb2RlIHdpdGgKKyAgICAgICAg
V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyB3aGljaCBpcyB1c2VkIGluc3RlYWQuICBUaGF0
IHdoaWNoIHdhcyBub3QgZHVwbGljYXRlIHdhcworICAgICAgICBtb3ZlZCB0byBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzLiAgVGhpcyB3YXMg
dGhlIGhhcmRlc3QgcGFydCBvZiB0aGlzIHBhdGNoLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNr
Z3JvdW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRT
eW5jVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmRGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdv
cmtQcm9jZXNzRGlkUmVzdW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OmZsdXNoQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlcik6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1
bmNoaW5nSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0Nv
Y29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNl
c3Npb25JRCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3Mg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRB
cHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGltZW91
dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFNl
cnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1v
dmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZh
bGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFu
ZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2
YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVj
b3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1Rv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNv
dXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1ldGVy
c1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN1
Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRl
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNz
QW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlw
T25seUluRGF0YWJhc2VPbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0VXNlSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29y
YXRpb25Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVs
ZXRlQ29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
aG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3Vs
ZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RD
b29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNh
cEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnByb2Nlc3NQb29scyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0
aXN0aWNzVGVzdGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEFkQ2xpY2tBdHRyaWJ1
dGlvbkRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZsdXNo
Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vzc2lvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBwQm91bmRTZXNzaW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWlu
c1RvSVRQSWZJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3Jr
UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0
ZXJXaXRoU2Vzc2lvbklETWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphZGRQZW5kaW5nQ29va2ll
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlUGVu
ZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmNsZWFyUGVuZGluZ0Nvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICog
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoT3B0aW9ucyk6
CisgICAgICAgICogVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVyc2lz
dGVudFN0b3JhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRJ
Z25vcmVUTFNFcnJvcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0TmV0
d29ya1Byb3h5U2V0dGluZ3MpOgorCiAyMDIwLTA5LTIxICBLYXRlIENoZW5leSAgPGthdGhlcmlu
ZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGFib3V0OmJsYW5rIHN1YmZyYW1l
IGxvYWRzIGZvciBub24gYXBwLWJvdW5kIHRvcCBmcmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAppbmRl
eCBmY2UyMzg5ODdhNzg1MGYxOGM5ZjMwNmM1MGU5OGNlOTg4ZDEyNWZkLi42YjQ1YzJiZDlmMjZh
NDY4NThkMTc3YjU3NzdiMzBmNjFkMDdlOGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9Db29raWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZVN0b3JhZ2UuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0hUVFBDb29raWVBY2NlcHRQb2xpY3kuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgpAQCAtMTQ5LDkgKzE1MCwxMiBAQCB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3ksCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAotdm9pZCBXZWJDb29raWVN
YW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYkNv
b2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5k
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgaWYgKGF1
dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkp
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5jb29raWVBY2NlcHRQ
b2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihIVFRQQ29va2ll
QWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5h
Z2VyLmgKaW5kZXggY2E3ZjU1ZTg2NmJkYWQ0YjFlMzUyZThmNjQwNTdiYWJjNDYyODMyZC4uZWI3
NDE4MjM1ZjU3MDkzMDM5NjAxOWJlNDQ3MjFkZGMwOWZhOThmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCkBA
IC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRDb29raWVzKFBBTDo6U2Vzc2lv
bklELCBjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiYpPiYmKTsKIAogICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpOwotICAgIHZvaWQgZ2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3kpPiYmKTsKKyAgICB2b2lkIGdldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SFRUUENvb2tp
ZUFjY2VwdFBvbGljeSk+JiYpOwogCiAgICAgdm9pZCBzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5n
ZXMoUEFMOjpTZXNzaW9uSUQpOwogICAgIHZvaWQgc3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMo
UEFMOjpTZXNzaW9uSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgppbmRleCBh
Y2Q3NTQ0MGQ4M2YzNDY2NTBjOWYzM2I3NWI1ZDVkMDkzNTIxM2JhLi42ZmRmNTc3MmFhNmFhZTM5
NDAyYTlhODlmNTZjODRmN2JkNDM1ODVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdl
cy5pbgpAQCAtMzYsNyArMzYsNyBAQCBtZXNzYWdlcyAtPiBXZWJDb29raWVNYW5hZ2VyIE5vdFJl
ZkNvdW50ZWQgewogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3luYwogCiAgICAgdm9p
ZCBTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJDb3JlOjpIVFRQQ29v
a2llQWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lkIEdldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBDb29raWVBY2Nl
cHRQb2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tpZUFjY2VwdFBvbGlj
eShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRU
UENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAgdm9pZCBTdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIHZvaWQg
U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCBi
ZThkOTY2NjJiZTZkY2Q4NWZhM2MzMjkyOWFlMGYwYjVkMTgyMzQzLi43ZjQ3NzcxMzJkNTI0NzU4
MTgyOTgxYWFmMGMxOGI3MmI3YmEzOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ3LDI5ICszNDcsMTkgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJh
bWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lv
bklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3Jr
U2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRT
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFTdG9yZVBhcmFtZXRl
cnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAgICAgYXV0byBzZXNz
aW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNz
aW9uSUQ7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShkYXRh
U3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Cisg
ICAgICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgZGF0YVN0b3Jl
UGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVy
VGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJ
bmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKKyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIGRhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKLQor
ICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1vdGVOZXR3b3JraW5n
Q29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUoZGF0
YVN0b3JlUGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBib29s
IHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgPSB0cnVlOwotICAg
IGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUo
cGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAg
ICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0
ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUo
ZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwg
ZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNl
c3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8qIGRlZmF1bHRTZXNz
aW9uID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7
Ci0gICAgYXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNlc3Npb24tPm5ldHdv
cmtTdG9yYWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAg
ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAgICB9CiAKICAgICBm
b3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBz
dXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNTA1LDggKzQ5NSw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNl
c3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9u
KGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVXNlVGVzdGluZ05l
dHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXJCYXNlKQogI2VuZGlmCiB7Ci0g
ICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmFkZChz
ZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTUyMSw3ICs1MDksNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1
cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQog
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gbWFrZVN0cmluZyhpZGVu
dGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmlu
ZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkK
ICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vz
c2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAoc2Vzc2lv
bklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgICAgIHN0b3Jh
Z2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVDRlN0b3Jh
Z2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkpOwogCiAgICAgaWYgKE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQSSgpKSB7CkBAIC01NDQs
MjEgKzUzMiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVBY2NlcHRQb2xpY3lDaGFu
Z2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9saWN5KQogCiBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6
OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0dXJuICZkZWZhdWx0
U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmdl
dChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdv
cmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIGlmICghbV9k
ZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1bHROZXR3b3JrU3Rv
cmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwotICAg
IHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQotCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZv
aWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9yKQogewotICAgIGZ1
bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0byYgc3RvcmFnZVNl
c3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAgICAgICAgIGZ1bmN0
b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaAppbmRleCBhYTczMzc3YjczMmY2MTBiODY3OTA1NmMzN2RmMjhhZWVh
MDdhZjgzLi5kYzg2ZjM5Njk3ZmM1MDNlYTRkYmQxYjA2YzMyMjk3NWIxZTY5ZDE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0xNzAsNyAr
MTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9u
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7
CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nlc3Npb24oY29uc3Qg
UEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIGVuc3VyZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3Jr
U2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4mJik7CkBAIC0zNzUsNyArMzc0LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBAIC01NDQsNyArNTQyLDYgQEAgcHJp
dmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9u
SUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiBtX25l
dHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247
CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggOTkwMWM1Y2I3M2M3NGZlM2Rh
NGViZjU3YmE4NTEyODZmZGExMDRiZi4uMDJkZGI5MjM0ZTk5OWMzZTZjZGNkY2YwYjg3OGI4NzI1
ODM2MzI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTU1LDcgKzU1
LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc1NES1ZlcnNp
b247CiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwog
I2VuZGlmCi0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBl
bmNvZGVyIDw8IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYgVVNFKFNPVVApCiAgICAgZW5jb2Rl
ciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5jb2RlciA8PCBpZ25vcmVUTFNFcnJvcnM7
CkBAIC02OCw5ICs2OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCB1cmxT
Y2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0
ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgZW5jb2Rl
ciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxkRGlzYWJsZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAgIGVuY29kZXIgPDwg
c2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFibGVBZENsaWNrQXR0
cmlidXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTYsMTEgKzExMywxMSBAQCBib29sIE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBO
ZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIE9wdGlvbmFs
PFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsK
LSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIGlmICghZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9yPFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBkZWNvZGVyID4+IGRh
dGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0ZXJzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzID0g
V1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJlc3VsdC5kYXRhU3Rv
cmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7CiAKICNpZiBVU0Uo
U09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVBY2NlcHRQb2xpY3kp
KQpAQCAtMTQyLDIwICsxMzksNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcykpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlvbmFsPFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVz
dWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBX
VEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERpc2FibGVTZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0j
ZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJsZUlUUERh
dGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmgKaW5kZXggMTFjYTVhMTk5ZmNmZmU4ODNmZmYwYTJmZjc5ZGZlNDIxMGQ5ZGFkMS4uNjc0
OWRhMGM0YTYzYzIwMjEwNzc4MzU4NDg0NmM5MGQwMTBhMDM0MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaApAQCAtNzEsNyArNzEsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMgewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG5ldHdvcmtBVFNDb250
ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBkZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVyczsKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+
IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAgICAgCiAjaWYgVVNFKFNPVVApCiAgICAgV2ViQ29yZTo6
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBXZWJDb3JlOjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsKQEAgLTg1LDEyICs4NSw3IEBAIHN0
cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgVmVjdG9yPFN0cmlu
Zz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNj
aGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
LSAgICBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeTsKLSAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSAgICBib29sIHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vz
c1Rlcm1pbmF0aW9uRGVsYXkgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgYm9vbCBzaG91bGRFbmFi
bGVJVFBEYXRhYmFzZSB7IGZhbHNlIH07CisgICAgYm9vbCBzaG91bGRFbmFibGVJVFBEYXRhYmFz
ZSB7IHRydWUgfTsKICAgICBib29sIGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSB7
IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXggZGE2MzU5MTI0MjIzZGI5NzAz
MGQxZWE3N2JjMDBjZWU1MWZiMDE3ZC4uNTAxMGY5YTg2OTAzOTBkZmZlOWEzNDRlOTkwNWIyNGU2
Njg1YzdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpAQCAtNzgsOSArNzgsNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5l
dHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNh
bmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvbnRhaW5lckNh
Y2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29u
c3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0j
ZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFUU0NvbnRleHQocGFyYW1ldGVycy5u
ZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMDUsMTEgKzEwMiw2IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29uc3QgTmV0
d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2FjaGU6dXJsQ2FjaGUu
Z2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24o
KSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIFJldGFp
blB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNzOjpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0
YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9BUFBMSUNBVElPTl9BVURJVF9EQVRBKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQyZGNjOGUzZjliOGYxNjkyOTk3ZjY3MTky
Li40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5M2UyMjU2YTM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJs
LmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKIHsKIH0KIAot
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1By
b2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNz
OjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQ2VydGlmaWNhdGVJ
bmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMv
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBjMjczNmUwMjZhNTVkM2Q0MDIw
Zjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0NjIwZjAyYTdkOWU5ZTg2OWVjODY0OTFi
N2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1v
dGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNTUsMTUgKzU1LDExIEBAIHZvaWQg
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKE5l
dHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJt
YW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAog
ICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nlc3NDb29raWVTdG9y
YWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQ
cm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAgIGlmICghc2Vzc2lv
bklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlk
ZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAg
ICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3RvcmFnZUZyb21JZGVudGlmeWluZ0Rh
dGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcik7CiAKICAgICBu
ZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBtYWtlU3Ry
aW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkpLCBXVEZNb3ZlKHVpUHJvY2Vzc0Nv
b2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrUHJvY2Vzcy5zdG9y
YWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFy
YW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0Q29va2llKGNvb2tp
ZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nl
c3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRleCA0MWFmZGNjNjFh
ZGM1ODNkY2YxOWYyZDQwYWEyODkxZjhhMDEzMjhiLi4wOTNkNTk5NTk2YTY4ODMwYWYwOTkzZmEz
NjgzMWUwYzMyNGJmYmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApAQCAtMTQwLDExICsxNDAsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25z
dCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNldElnbm9yZVRMU0Vycm9ycyhwYXJhbWV0ZXJz
Lmlnbm9yZVRMU0Vycm9ycyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsK
LX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3Jl
VExTRXJyb3JzKQogewogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0U2hvdWxkSWdub3JlVExT
RXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXggNmQwYzEyOWE3NDA1MTBkMzg2OTcz
NzA1YWQwOTJlZjEzMmNjMDc1YS4uMDQ4MTBiM2UxOWJlOTZjYWQxYWQ4MmE0NGRjZWRiMjZlZjc4
MjYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmNwcApAQCAtNDAsMTMgKzQwLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVy
IDw8IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc0Nv
b2tpZVN0b3JhZ2VJZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2llU3RvcmFnZVBhdGhF
eHRlbnNpb25IYW5kbGU7Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2llczsKIAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlVGVtcEJs
b2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpE
ZWMKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmNvb2tpZVN0
b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY29va2llU3RvcmFnZVBhdGhFeHRl
bnNpb25IYW5kbGUpOwogCi0gICAgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4+IHBl
bmRpbmdDb29raWVzOwotICAgIGRlY29kZXIgPj4gcGVuZGluZ0Nvb2tpZXM7Ci0gICAgaWYgKCFw
ZW5kaW5nQ29va2llcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0
ZXJzLnBlbmRpbmdDb29raWVzID0gV1RGTW92ZSgqcGVuZGluZ0Nvb2tpZXMpOwotCiAjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBpbmRleGVkRGF0YWJh
c2VEaXJlY3Rvcnk7CiAgICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CkBA
IC0xMDEsMTQgKzkxLDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAgICBpZiAoIWluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIE9wdGlvbmFsPFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZT4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGU7Ci0gICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIWluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHBhcmFt
ZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBX
VEZNb3ZlKCppbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKaW5kZXggZjI3
ZGY0ODk4MDlmMzE5NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQzOS4uZTFiMjMzNzAxOTlmZTM3MDMx
ZTlkYzVjMDU3ODE1NTAyMWUzNGQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCkBAIC01MSwxNSArNTEsMTEgQEAgc3RydWN0IFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKIAogICAgIFZlY3Rvcjx1aW50OF90PiB1aVByb2Nl
c3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUg
Y29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkNv
b2tpZT4gcGVuZGluZ0Nvb2tpZXM7CiAgICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRl
cnMgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAgICAgU3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGlu
ZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKaW5kZXggYmMwNzg2NmZiYzM5
NjhlNzZjYWE5YTM1NjgxMGM2YTJmYjA5ZGNmZC4uZmY5NTU4OTJiZGEwYjgzYzIzYTk2YTA4Mzll
ZjNiZDBkOTQ2OWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5jcHAKQEAgLTQ2LDggKzQ2LDYgQEAgbmFtZXNwYWNlIEFQSSB7CiBI
VFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUm
IHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0RhdGFTdG9yZSh3ZWJzaXRlRGF0YVN0
b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5v
dGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkK
QEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkKICAg
ICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoIW1fb2JzZXJ2ZWRD
b29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9jb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7
CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC04MSwz
MyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJvdW5kQ29va2llcyhj
b25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2kKIAogdm9pZCBIVFRQQ29va2llU3Rv
cmU6OmNvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293
bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwot
ICAgIGlmICghcG9vbCkgewotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBhbGxDb29r
aWVzOwotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgICAgICBhbGxDb29raWVzID0g
Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwotICAgICAgICBhbGxD
b29raWVzLmFwcGVuZFZlY3RvcihtX293bmluZ0RhdGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMoKSk7
Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlciksIGFsbENvb2tpZXNdICgpIG11dGFibGUgewotICAgICAgICAgICAgZmlsdGVyQXBw
Qm91bmRDb29raWVzKGFsbENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5h
Z2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsK
LSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcG9vbCA9IFdU
Rk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7Cisg
ICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vz
cygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldEFsbENvb2tpZXMobV9v
d25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFibGUgewogICAg
ICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0ZvclVS
TChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9v
d25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsK
LSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwot
Ci0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0Q29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYgY29va2llcykgbXV0YWJsZSB7CisgICAg
YXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vzcygp
LmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldENvb2tpZXMobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
IChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgewogICAgICAgICBm
aWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIH0pOwogfQpAQCAtMTE1LDc4ICs5NCwyOSBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
bwogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiBhcHBCb3VuZENvb2tpZXMpIG11dGFibGUgewot
ICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29v
a2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7Ci0gICAgICAgICAg
ICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vzc2lvbiBiZWNhdXNl
IHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3b3JrIFByb2Nlc3Mg
d2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAgICAgICAgICAgICBp
ZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAgICAgICAgICAgICBz
ZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9vd25pbmdEYXRhU3RvcmUtPmFkZFBl
bmRpbmdDb29raWUoY29va2llKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgICAg
ICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAgIGF1dG8mIGNvb2tp
ZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5h
Z2VyKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29va2llKGNv
bnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3Jl
LT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29s
KSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Npb24pCi0gICAgICAg
ICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvb2tpZSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5yZW1vdmVQZW5k
aW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBs
ZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdl
ci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBb
cG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0g
ICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNv
b2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29v
a2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0
b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBkZWxl
dGVDb29raWVzSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBh
dXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCku
Y29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxsQ29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBUaGUgQ29tcGxldGlv
bkhhbmRsZXIgc2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0
ZUFsbENvb2tpZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBw
b29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xpY3kpOwotICAgICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wt
PnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2ll
TWFuYWdlci0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAg
IH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29y
a1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5zZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpm
bHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMjI3LDIxICsxNTcsNyBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNl
cnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCiAKICAgICBtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2Vy
dmVyID0gbWFrZVVuaXF1ZTxBUElXZWJDb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcj4oKnRoaXMp
OwogCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNv
b2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgQVNT
RVJUKCFtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMpOwotCi0gICAgICAgIC8vIExpc3RlbiBm
b3IgY29va2llIG5vdGlmaWNhdGlvbnMgaW4gdGhlIFVJUHJvY2VzcyBpbiB0aGUgbWVhbnRpbWUu
Ci0gICAgICAgIHN0YXJ0T2JzZXJ2aW5nQ2hhbmdlc1RvRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0
b3JlKFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICBjb29raWVzRGlkQ2hhbmdlKCk7Ci0gICAgICAg
IH0pOwotCi0gICAgICAgIG1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyA9IHRydWU7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0g
cG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBt
X29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3Jr
UHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclBy
b3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1f
Y29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCkBAIC0yNzYsNDYgKzE5MiwxMCBAQCB2
b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0RpZENoYW5nZSgpCiB2b2lkIEhUVFBDb29raWVT
dG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCgpCiB7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1h
bmFnZXJQcm94eS0+dW5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgIG1fb2JzZXJ2ZWRDb29r
aWVNYW5hZ2VyUHJveHkgPSBudWxscHRyOwotCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0
YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBp
ZiAoIXBvb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2Vy
UHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Pigp
OworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmbV9vd25pbmdEYXRhU3RvcmUt
Pm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwogICAgIG1fb2JzZXJ2ZWRDb29raWVN
YW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKLXZvaWQgSFRUUENvb2tp
ZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAg
QVNTRVJUKCFtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAg
bV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gV2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKFt0aGlzXShXZWJQcm9jZXNzUG9v
bCYgbmV3UHJvY2Vzc1Bvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+aXNB
c3NvY2lhdGVkUHJvY2Vzc1Bvb2wobmV3UHJvY2Vzc1Bvb2wpKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIC8vIE5vdyB0aGF0IGFuIGFzc29jaWF0ZWQgcHJvY2VzcyBwb29sIGV4aXN0
cywgd2UgbmVlZCB0byBmbHVzaCB0aGUgVUkgcHJvY2VzcyBjb29raWUgc3RvcmUKLSAgICAgICAg
Ly8gdG8gbWFrZSBzdXJlIGFueSBjaGFuZ2VzIGFyZSByZWZsZWN0ZWQgd2l0aGluIHRoZSBuZXcg
cHJvY2VzcyBwb29sLgotICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgp
OwotICAgICAgICBuZXdQcm9jZXNzUG9vbC5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCi0gICAg
ICAgIGlmIChtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKSB7Ci0gICAgICAgICAgICBtX29i
c2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbmV3UHJvY2Vzc1Bvb2wuc3VwcGxlbWVudDxXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29r
aWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAgICAgIH0KLSAgICAg
ICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotICAgIH0pOwot
fQotCi12b2lkIEhUVFBDb29raWVTdG9yZTo6dW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucygpCi17Ci0gICAgaWYgKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRl
bnRpZmllcikKLSAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJQcm9jZXNzUG9vbENy
ZWF0aW9uTGlzdGVuZXIobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsK
LQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IDA7Ci19Ci0K
ICNpZiAhUExBVEZPUk0oQ09DT0EpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1c2hEZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmUoKSB7IH0KIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IEhUVFBD
b29raWVTdG9yZTo6Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpIHsg
cmV0dXJuIHsgfTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBD
b29raWVTdG9yZS5oCmluZGV4IGQ2MjBhZGRhNGU3Zjg5NDU2NjE4YTNlMjJlMWJmZDQzNTc3NzVi
MTkuLmEwNWY0MTQzMGRiMmIyM2Q0MTc4NDA3OWE0ZmI4NmM3NDYwYTc1NDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKQEAgLTgzLDkg
KzgzLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7Ci0KICAgICB2b2lkIGZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
KCk7CiAgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGdldEFsbERlZmF1bHRVSVBy
b2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKICAgICBzdGF0aWMgdm9pZCBzZXRDb29raWVJbkRl
ZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCmluZGV4IDU4YzU0NTNmNDg5
ODdmNWUxYWZhZmVmMzRjNDMzMzVmMWI0Y2M5OTAuLjM3YmFhNjhmOTI0Yjk1ODcyZjAxZjdlNGE4
MGQ1ZjQ5N2Q1ZmU5YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250
ZXh0LmNwcApAQCAtNDExLDExICs0MTEsNiBAQCB2b2lkIFdLQ29udGV4dFByZWNvbm5lY3RUb1Nl
cnZlcihXS0NvbnRleHRSZWYsIFdLVVJMUmVmKQogewogfQogCi1XS0Nvb2tpZU1hbmFnZXJSZWYg
V0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dFJlZikKLXsKLSAg
ICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c3VwcGxl
bWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSk7Ci19Ci0KIFdLV2Vic2l0ZURh
dGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZikKIHsK
ICAgICByZXR1cm4gV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSgpOwpAQCAt
NTI3LDEzICs1MjIsNiBAQCB2b2lkIFdLQ29udGV4dFNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVj
dG9yVGltZXJFbmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLAogICAgIFdlYktpdDo6dG9J
bXBsKGNvbnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxl
ZChlbmFibGUpOwogfQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRl
Rm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgYWxsb3dz
KQotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250
ZXh0KS0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7
Ci0jZW5kaWYKLX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQbHVnSW5BdXRvU3Rh
cnRPcmlnaW5IYXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdl
YktpdDo6dG9BUEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVnSW5BdXRvU3RhcnRP
cmlnaW5IYXNoZXMoKS5sZWFrUmVmKCkpOwpAQCAtNTc1LDIxICs1NjMsMTEgQEAgdm9pZCBXS0Nv
bnRleHRTZXRGb250QWxsb3dMaXN0KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS0FycmF5UmVm
IGFycmF5UmVmKQogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRGb250QWxsb3dM
aXN0KFdlYktpdDo6dG9JbXBsKGFycmF5UmVmKSk7CiB9CiAKLXZvaWQgV0tDb250ZXh0VGVybWlu
YXRlTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgV2ViS2l0Ojp0
b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0KIHZvaWQgV0tD
b250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAg
ICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9
CiAKLVByb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGNvbnRleHRS
ZWYpLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKLX0KLQogdm9pZCBXS0NvbnRleHRBZGRT
dXBwb3J0ZWRQbHVnaW4oV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5nUmVmIGRvbWFp
blJlZiwgV0tTdHJpbmdSZWYgbmFtZVJlZiwgV0tBcnJheVJlZiBtaW1lVHlwZXNSZWYsIFdLQXJy
YXlSZWYgZXh0ZW5zaW9uc1JlZikKIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
QEAgLTYxOSwxMiArNTk3LDExIEBAIHZvaWQgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJT
dGF0ZUZvclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiAgICAgV2ViS2l0Ojp0b0lt
cGwoY29udGV4dFJlZiktPmNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCk7CiB9
CiAKLXZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0Nv
bnRleHRSZWYgY29udGV4dFJlZiwgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KQordm9pZCBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFdLQ29u
dGV4dFJlZiwgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogewotICAgIFdl
YktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiB9CiAKLXZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNp
dGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiB3ZWJzaXRlRGF0YVN0b3JlKQordm9pZCBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFT
dG9yZShXS0NvbnRleHRSZWYsIFdLV2Vic2l0ZURhdGFTdG9yZVJlZikKIHsKLSAgICBXZWJLaXQ6
OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0UHJpbWFyeURhdGFTdG9yZSgqV2ViS2l0Ojp0b0ltcGwo
d2Vic2l0ZURhdGFTdG9yZSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0Nv
bnRleHQuaAppbmRleCAxZDhmYWI4YTE0ODZhYWRiNDk0MTQ0Yjk4ZjEwZTkzNjM4ZDBjNWU2Li4y
YWI2ZWY4NmY1MzBlNzdmNzRjYmQ1ZGY1ODYyYWM0ZDMwYjc5ODc2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaApAQCAtMTY4LDcgKzE2OCw2IEBAIFdLX0VYUE9S
VCB2b2lkIFdLQ29udGV4dFN0b3BNZW1vcnlTYW1wbGVyKFdLQ29udGV4dFJlZiBjb250ZXh0KTsK
IFdLX0VYUE9SVCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFT
dG9yZShXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExB
Q0VNRU5UKFdLV2Vic2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUpOwogCiBXS19FWFBP
UlQgV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclJlZiBXS0NvbnRleHRHZXRBcHBsaWNhdGlvbkNh
Y2hlTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRF9XSVRI
X1JFUExBQ0VNRU5UKFdLV2Vic2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUpOwotV0tf
RVhQT1JUIFdLQ29va2llTWFuYWdlclJlZiBXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKFdLQ29u
dGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEOwogV0tfRVhQT1JUIFdLR2VvbG9j
YXRpb25NYW5hZ2VyUmVmIFdLQ29udGV4dEdldEdlb2xvY2F0aW9uTWFuYWdlcihXS0NvbnRleHRS
ZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tJY29uRGF0YWJhc2VSZWYgV0tDb250ZXh0R2V0SWNv
bkRhdGFiYXNlKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIFdLX0VYUE9SVCBXS0tleVZhbHVlU3Rv
cmFnZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0S2V5VmFsdWVTdG9yYWdlTWFuYWdlcihXS0NvbnRl
eHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKFdLV2Vi
c2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCmluZGV4IGEwMjUwMTFmNzBjYzY1OWY1
ZmFhMDhhN2Q2Y2JiM2ZmNTZlZTZhMzguLjQ4YTI5YzQ1NjhhYjY3YjNiN2UxZWY5ODE1NmY2ZWZh
ODk2YjFkZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29u
dGV4dFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHRQcml2YXRlLmgKQEAgLTgzLDExICs4Myw4IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFdh
cm1Jbml0aWFsUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dCk7CiAvLyBBdCBzb21lIHBvaW50
IGl0IHNob3VsZCBiZSByZW1vdmVkLgogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0VXNlc05l
dHdvcmtQcm9jZXNzKFdLQ29udGV4dFJlZiwgYm9vbCk7CiAKLVdLX0VYUE9SVCB2b2lkIFdLQ29u
dGV4dFRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLQ29udGV4dFJlZik7CiBXS19FWFBPUlQgdm9p
ZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYpOwogCi1XS19F
WFBPUlQgdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VX
b3JrZXJUZXN0aW5nKFdLQ29udGV4dFJlZiwgYm9vbCk7Ci0KIHR5cGVkZWYgdm9pZCAoKldLQ29u
dGV4dEludmFsaWRNZXNzYWdlRnVuY3Rpb24pKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lKTsKIFdL
X0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEludmFsaWRNZXNzYWdlRnVuY3Rpb24oV0tDb250ZXh0
SW52YWxpZE1lc3NhZ2VGdW5jdGlvbiBpbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKTsKICAgICAKQEAg
LTk3LDggKzk0LDYgQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0Rm9udEFsbG93TGlzdChX
S0NvbnRleHRSZWYsIFdLQXJyYXlSZWYpOwogCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRQcmVj
b25uZWN0VG9TZXJ2ZXIoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLVVJMUmVmIHNlcnZlclVSTCkg
V0tfQ19BUElfREVQUkVDQVRFRDsKIAotV0tfRVhQT1JUIFdLUHJvY2Vzc0lEIFdLQ29udGV4dEdl
dE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihXS0NvbnRleHRSZWYgY29udGV4dCk7Ci0KIFdLX0VY
UE9SVCB2b2lkIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihXS0NvbnRleHRSZWYgY29udGV4
dCwgV0tTdHJpbmdSZWYgZG9tYWluLCBXS1N0cmluZ1JlZiBuYW1lLCBXS0FycmF5UmVmIG1pbWVU
eXBlcywgV0tBcnJheVJlZiBleHRlbnNpb25zKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dENs
ZWFyU3VwcG9ydGVkUGx1Z2lucyhXS0NvbnRleHRSZWYgY29udGV4dCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCmluZGV4IDY0OGYzMDA5NjFhNTA2MGM5Y2RmMDNl
M2NmODA0NThiZjJiYjUwZGQuLmI0NDczNDIxMjAwNjEzYzE5ZWMzYWM5YWQ2Njk5NzUzNGFiZWYx
OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcApAQCAtMzk4LDYg
KzM5OCwxMSBAQCB1aW50NjRfdCBXS1BhZ2VHZXRSZW5kZXJUcmVlU2l6ZShXS1BhZ2VSZWYgcGFn
ZSkKICAgICByZXR1cm4gdG9JbXBsKHBhZ2UpLT5yZW5kZXJUcmVlU2l6ZSgpOwogfQogCitXS1dl
YnNpdGVEYXRhU3RvcmVSZWYgV0tQYWdlR2V0V2Vic2l0ZURhdGFTdG9yZShXS1BhZ2VSZWYgcGFn
ZSkKK3sKKyAgICByZXR1cm4gdG9BUEkoJnRvSW1wbChwYWdlKS0+d2Vic2l0ZURhdGFTdG9yZSgp
KTsKK30KKwogV0tJbnNwZWN0b3JSZWYgV0tQYWdlR2V0SW5zcGVjdG9yKFdLUGFnZVJlZiBwYWdl
UmVmKQogewogICAgIHJldHVybiB0b0FQSSh0b0ltcGwocGFnZVJlZiktPmluc3BlY3RvcigpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgKaW5kZXggNjcwYjVlOWZkNGI0NTRh
MmI3ZWRmZDIyMzJhYWU5NTFjNDY3ZDA4My4uYzUxYjgxNjJjODk3MzRhYjE1MmJlZjBlOTkyMzM3
ZDU1ZjJkZThhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQ
YWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgKQEAgLTEx
OCw2ICsxMTgsOCBAQCBXS19FWFBPUlQgZG91YmxlIFdLUGFnZUdldEVzdGltYXRlZFByb2dyZXNz
KFdLUGFnZVJlZiBwYWdlKTsKIAogV0tfRVhQT1JUIHVpbnQ2NF90IFdLUGFnZUdldFJlbmRlclRy
ZWVTaXplKFdLUGFnZVJlZiBwYWdlKTsKIAorV0tfRVhQT1JUIFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiBXS1BhZ2VHZXRXZWJzaXRlRGF0YVN0b3JlKFdLUGFnZVJlZiBwYWdlKTsKKwogV0tfRVhQT1JU
IFdLSW5zcGVjdG9yUmVmIFdLUGFnZUdldEluc3BlY3RvcihXS1BhZ2VSZWYgcGFnZSk7CiAKIFdL
X0VYUE9SVCBXS1N0cmluZ1JlZiBXS1BhZ2VDb3B5VXNlckFnZW50KFdLUGFnZVJlZiBwYWdlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRh
U3RvcmVSZWYuY3BwCmluZGV4IDlkZGE1OTFjOTUxODlhYjBjMjVhYzU1NDY2YzBhMmJmYzM5Mjdl
YmMuLjY4NjExNGFhNWVkMGExMzE1ZTVhOWQ2MTk1MWI4ODAyYzc1ZjhhYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVm
LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRl
ICJBUElIVFRQQ29va2llU3RvcmUuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5Lmgi
CiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiV0tB
UElDYXN0LmgiCiAjaW5jbHVkZSAiV0tEaWN0aW9uYXJ5LmgiCkBAIC02OSw2ICs3MCwxNiBAQCBX
S1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tXZWJzaXRlRGF0YVN0b3JlQ3JlYXRlV2l0aENvbmZpZ3Vy
YXRpb24oV0tXZWJzaXRlRGF0YVN0bwogICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZSgqV2ViS2l0Ojp0b0ltcGwoY29uZmlndXJhdGlvbiks
IHNlc3Npb25JRCkubGVha1JlZigpKTsKIH0KIAordm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVUZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKQorewor
ICAgIFdlYktpdDo6dG9JbXBsKGRhdGFTdG9yZSktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7
Cit9CisKK1dLUHJvY2Vzc0lEIFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRl
bnRpZmllcihXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKQoreworICAgIHJldHVybiBX
ZWJLaXQ6OnRvSW1wbChkYXRhU3RvcmUpLT5uZXR3b3JrUHJvY2VzcygpLnByb2Nlc3NJZGVudGlm
aWVyKCk7Cit9CisKIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlUmVtb3ZlSVRQRGF0YUZvckRvbWFp
bihXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBXS1N0cmluZ1JlZiBob3N0LCB2
b2lkKiBjb250ZXh0LCBXS1dlYnNpdGVEYXRhU3RvcmVSZW1vdmVJVFBEYXRhRm9yRG9tYWluRnVu
Y3Rpb24gY2FsbGJhY2spCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0
b3JlUmVmLmgKaW5kZXggZTc3ZDA5YzEwN2QxZGEwNzgzZDA5YzA3ZTI4MDNkMDg3MTI1ZTQ4Yi4u
YWIyNjc3NDZiZTgwNzViMDE0YzlmZDgyMzM2MjJmYzU4ZjJlMjZiNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKQEAg
LTI5LDYgKzI5LDEzIEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLQmFzZS5oPgogI2luY2x1ZGUgPFdl
YktpdC9XS0RlcHJlY2F0ZWQuaD4KIAorI2lmIGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX1dJ
TjMyKQordHlwZWRlZiBpbnQgV0tQcm9jZXNzSUQ7CisjZWxzZQorI2luY2x1ZGUgPHVuaXN0ZC5o
PgordHlwZWRlZiBwaWRfdCBXS1Byb2Nlc3NJRDsKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3Bs
dXMKIGV4dGVybiAiQyIgewogI2VuZGlmCkBAIC01MCw2ICs1NywxMSBAQCBXS19FWFBPUlQgdm9p
ZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tl
dFRlc3RpbmcoVwogCiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hl
ZENyZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogCitXS19F
WFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0
YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFT
dG9yZSk7CisKK1dLX0VYUE9SVCBXS1Byb2Nlc3NJRCBXS1dlYnNpdGVEYXRhU3RvcmVHZXROZXR3
b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSk7CisK
IFdLX0VYUE9SVCBib29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogV0tfRVhQT1JU
IHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
V0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUpOwogdHlwZWRl
ZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0VwaGVtZXJhbEZ1bmN0aW9uKShi
b29sIGlzRXBoZW1lcmFsLCB2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQppbmRleCBmZjMwOTQ5
ODZjMjQzZDA0NzRmMjUyZDM5MWU2Y2NiNzRmMWZlZDViLi4xZjU2ZmJmYjY3OTUxNjQ4ZGYwYjRi
YmRjYmYyYTU5OWRjMDBiZGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQpAQCAtNDA2LDI4ICs0MDYsNiBAQCBzdGF0aWMgTlNE
aWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJp
bmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJTdXBwb3J0ZWRQbHVnaW5zKCk7
CiB9CiAKLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCi17Ci0gICAgX3Byb2Nlc3NQ
b29sLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29y
a1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmRO
ZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0KLQotLSAo
dm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSlj
b21wbGV0aW9uSGFuZGxlcgotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNz
UHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2Nr
UHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwot
ICAgIH0pOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUKLXsKLSAg
ICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQotCiAtICh2
b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29ya2VycwogewogICAgIF9wcm9jZXNzUG9vbC0+dGVybWlu
YXRlU2VydmljZVdvcmtlcnMoKTsKQEAgLTQzNSwxMiArNDEzLDcgQEAgc3RhdGljIE5TRGljdGlv
bmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBI
YXNoTWFwPFMKIAogLSAodm9pZClfc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzczoo
Qk9PTCl1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzCiB7Ci0gICAgX3Byb2Nlc3NQb29s
LT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MpOwotfQotCi0tIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCi17
Ci0gICAgcmV0dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7Cisg
ICAgV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIH0KIAogLSAocGlkX3QpX3By
ZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyCkBAIC00NjcsMTEgKzQ0MCw2IEBAIHN0YXRpYyBOU0Rp
Y3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmlu
ZywgSGFzaE1hcDxTCiAgICAgX3Byb2Nlc3NQb29sLT5zZXRTaG91bGRNYWtlTmV4dFdlYlByb2Nl
c3NMYXVuY2hGYWlsRm9yVGVzdGluZyh0cnVlKTsKIH0KIAotLSAodm9pZClfbWFrZU5leHROZXR3
b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZXRT
aG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcodHJ1ZSk7Ci19
Ci0KIC0gKEJPT0wpX2hhc1ByZXdhcm1lZFdlYlByb2Nlc3MKIHsKICAgICBmb3IgKGF1dG8mIHBy
b2Nlc3MgOiBfcHJvY2Vzc1Bvb2wtPnByb2Nlc3NlcygpKSB7CkBAIC01NjAsMTggKzUyOCw2IEBA
IHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBI
YXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAgICAgX3Byb2Nlc3NQb29sLT5zZXRDb29raWVTdG9y
YWdlUGFydGl0aW9uaW5nRW5hYmxlZChlbmFibGVkKTsKIH0KIAotLSAodm9pZClfc3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5z
eW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOwotfQotCi0tICh2b2lkKV9zZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzCi17Ci0j
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIF9wcm9jZXNzUG9vbC0+c2V0QWxsb3dzQW55
U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAtIChpZCA8X1dLR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Q
cm92aWRlcj4pX2NvcmVMb2NhdGlvblByb3ZpZGVyCiB7CkBAIC02MDQsMTEgKzU2MCw2IEBAIHN0
YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNo
TWFwPFN0cmluZywgSGFzaE1hcDxTCiAgICAgfSk7CiB9CiAKLS0gKEJPT0wpX25ldHdvcmtQcm9j
ZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50Ci17Ci0g
ICAgcmV0dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcoZW50aXRsZW1lbnQpOwotfQotCiAtICh2b2lkKV9jbGVhclBlcm1hbmVudENyZWRlbnRp
YWxzRm9yUHJvdGVjdGlvblNwYWNlOihOU1VSTFByb3RlY3Rpb25TcGFjZSAqKXByb3RlY3Rpb25T
cGFjZQogewogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclBy
b3RlY3Rpb25TcGFjZShXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UocHJvdGVjdGlvblNwYWNlKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNz
UG9vbFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nl
c3NQb29sUHJpdmF0ZS5oCmluZGV4IDY3NjkwMTVlMDg1NTg5OTRjZDhhMjE5YTE3YTljNjhhZGUz
YjUzODMuLjNiOTMxNDA0YThlMmU0MzJkNTFjNTQ5NjVlMmRlZjVmOGVjZGMxMGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29s
UHJpdmF0ZS5oCkBAIC04NywxNCArODcsOSBAQAogLSAoX1dLRG93bmxvYWQgKilfcmVzdW1lRG93
bmxvYWRGcm9tRGF0YTooTlNEYXRhICopcmVzdW1lRGF0YSB3ZWJzaXRlRGF0YVN0b3JlOihXS1dl
YnNpdGVEYXRhU3RvcmUgKilkYXRhU3RvcmUgIHBhdGg6KE5TU3RyaW5nICopcGF0aCBvcmlnaW5h
dGluZ1dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAogLy8gVGVzdCBvbmx5LiBTaG91bGQgYmUg
Y2FsbGVkIG9ubHkgd2hpbGUgbm8gd2ViIGNvbnRlbnQgcHJvY2Vzc2VzIGFyZSBydW5uaW5nLgot
LSAodm9pZClfdGVybWluYXRlTmV0d29ya1Byb2Nlc3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygx
MC4xNSksIGlvcygxMy4wKSk7Ci0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9T
dXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Ci0tICh2b2lkKV9zZW5kTmV0d29y
a1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4x
NSksIGlvcygxMy4wKSk7Ci0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAtICh2b2lkKV90ZXJtaW5h
dGVTZXJ2aWNlV29ya2VycyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSwgaW9zKDEyLjAp
KTsKIAogLy8gVGVzdCBvbmx5LgotLSAocGlkX3QpX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllciBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzKSwgaW9zKDExLjApKTsKIC0gKHBpZF90KV9wcmV3
YXJtZWRQcm9jZXNzSWRlbnRpZmllciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9z
KDEzLjApKTsKIAogLy8gVGVzdCBvbmx5LgpAQCAtMTA2LDcgKzEwMSw2IEBACiAtIChzaXplX3Qp
X3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCks
IGlvcygxMi4wKSk7CiAtICh2b2lkKV9zeW5jTmV0d29ya1Byb2Nlc3NDb29raWVzIFdLX0FQSV9E
RVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1FTlQoIldLSFRUUENvb2tpZVN0b3JlLl9mbHVzaENvb2tp
ZXNUb0Rpc2tXaXRoQ29tcGxldGlvbkhhbmRsZXI6IiwgbWFjb3MoMTAuMTMsIFdLX01BQ19UQkEp
LCBpb3MoMTEuMCwgV0tfSU9TX1RCQSkpOwogLSAodm9pZClfbWFrZU5leHRXZWJQcm9jZXNzTGF1
bmNoRmFpbEZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4w
KSk7Ci0tICh2b2lkKV9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmcg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4wKSk7CiAtIChOU1VJbnRlZ2Vy
KV9tYXhpbXVtU3VzcGVuZGVkUGFnZUNvdW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQu
NCksIGlvcygxMi4yKSk7CiAtIChOU1VJbnRlZ2VyKV9wcm9jZXNzQ2FjaGVDYXBhY2l0eSBXS19B
UElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogLSAoTlNVSW50ZWdlcilf
cHJvY2Vzc0NhY2hlU2l6ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjAp
KTsKQEAgLTEyMiwxMyArMTE2LDEwIEBACiAtICh2b2lkKV9wcmVjb25uZWN0VG9TZXJ2ZXI6KE5T
VVJMICopc2VydmVyVVJMIFdLX0FQSV9ERVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1FTlQoIldLV2Vi
Vmlldy5fcHJlY29ubmVjdFRvU2VydmVyIiwgbWFjb3MoMTAuMTMuNCwgV0tfTUFDX1RCQSksIGlv
cygxMS4zLCBXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4KLS0gKHZvaWQpX3NldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjooQk9PTClhbGxvd3MgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMpKTsKIC0gKHZvaWQpX2dldEFjdGl2ZVBh
Z2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3Rpbmc6KHBpZF90KXBpZCBjb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCheKShOU0FycmF5PE5TU3RyaW5nICo+ICopKWNvbXBsZXRpb25IYW5kbGVyIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7Ci0tIChCT09MKV9uZXR3
b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVu
dCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogLSAodm9pZClf
Y2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0
aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSks
IGlvcygxMy4wKSk7CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9X2lzQ29va2llU3Rv
cmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQsIHNldHRlcj1fc2V0Q29va2llU3RvcmFnZVBhcnRpdGlv
bmluZ0VuYWJsZWQ6KSBCT09MIF9jb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZCBXS19B
UElfREVQUkVDQVRFRCgiUGFydGl0aW9uZWQgY29va2llcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRl
ZCIsIG1hY29zKDEwLjEyLjMsIDEwLjE0LjQpLCBpb3MoMTAuMywgMTIuMikpOwotLSAodm9pZClf
c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogCiAvLyBUZXN0IG9ubHkuCiAtICh2b2lkKV9z
ZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRlc3RpbmdXaXRoRmlyc3RQYXJ0eTooTlNVUkwg
KilmaXJzdFBhcnR5VVJMIHRoaXJkUGFydHk6KE5TVVJMICopdGhpcmRQYXJ0eVVSTCBzaG91bGRT
Y2hlZHVsZU5vdGlmaWNhdGlvbjooQk9PTClzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciAgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1t
CmluZGV4IDI5OGQ5Y2VjOWU4NGQ4YTUxMjIwNjVjYzk5MjMzZWY0ZjBiOTUzODkuLjkyMzRkYjg5
NGU3NGU2MWVhNzFmNWRlNGQ3OWYwN2EzMzU5NDFlYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQpAQCAtNjE3
LDYgKzYxNywxMSBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRv
V2Vic2l0ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogICAgIH0pOwogfQogCistIChC
T09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKill
bnRpdGxlbWVudAoreworICAgIHJldHVybiBfd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nl
c3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoZW50aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dL
V2Vic2l0ZURhdGFTdG9yZURlbGVnYXRlPilfZGVsZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVn
YXRlLmdldCgpLmdldCgpOwpAQCAtNjY4LDQgKzY3Myw0MiBAQCBzdGF0aWMgVmVjdG9yPFdlYktp
dDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFS
ZWNvcgogI2VuZGlmCiB9CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCit7Cisg
ICAgX3dlYnNpdGVEYXRhU3RvcmUtPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Cit9CisKKy0g
KHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkp
Y29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQ
cm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFr
ZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOworICAgIH0pOworfQorCistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVu
ZEltbWluZW50bHkKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworCit9CisKKy0gKHZvaWQpX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKK30KKworLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdv
cmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKK30KKwor
LSAocGlkX3QpX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcgoreworICAgIHJldHVybiBfd2Vic2l0
ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5wcm9jZXNzSWRlbnRpZmllcigpOworfQorCist
ICh2b2lkKV9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcKK3sKKyAg
ICBfd2Vic2l0ZURhdGFTdG9yZS0+c2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5j
aEZhaWxGb3JUZXN0aW5nKHRydWUpOworfQorCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUu
aAppbmRleCA5OTMyMDEwNDZiNTUxYzNmMjhkZjJkYzBhMDM0NmQ3YmM3OWFjNWY0Li5iZjIwYThj
ODVjNDk3N2IzNWQ3YzY0MzEzZDExNDAxYjViZGFkNzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2
YXRlLmgKQEAgLTg1LDkgKzg1LDE5IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBf
V0tXZWJzaXRlRGF0YVN0b3JlRmV0Y2hPcHRpb25zKSB7CiAKIC0gKHZvaWQpX3JlbmFtZU9yaWdp
bjooTlNVUkwgKilvbGROYW1lIHRvOihOU1VSTCAqKW5ld05hbWUgZm9yRGF0YU9mVHlwZXM6KE5T
U2V0PE5TU3RyaW5nICo+ICopZGF0YVR5cGVzIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlcjsKIAorLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwogQHByb3BlcnR5IChudWxs
YWJsZSwgbm9uYXRvbWljLCB3ZWFrKSBpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVnYXRlPiBf
ZGVsZWdhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiBAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25m
aWd1cmF0aW9uICpfY29uZmlndXJhdGlvbjsKIAorLSAodm9pZClfdGVybWluYXRlTmV0d29ya1By
b2Nlc3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXiko
dm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJB
KSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNw
ZW5kSW1taW5lbnRseSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9z
eW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHBpZF90KV9uZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9z
KFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWls
Rm9yVGVzdGluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9T
X1RCQSkpOworCiBAZW5kCiAKIE5TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcApp
bmRleCAxZWU3M2ViYzBlYTAzNmY4NmIzZmU5NDQxNDkwNzJlNmFjNGRjNzY3Li43NzAxNDk5ODM2
ZWU0NGY5YWNmMGUyNzBkNzBjOTVkMTZiZTY3OGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcApAQCAtMjEs
NiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdENvb2tpZU1h
bmFnZXIuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJT
b3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFu
YWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUuaCIKQEAg
LTU2LDYgKzU3LDEyIEBAIGVudW0gewogfTsKIAogc3RydWN0IF9XZWJLaXRDb29raWVNYW5hZ2Vy
UHJpdmF0ZSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChkYXRhTWFuYWdlcik7CisgICAgICAgIHJldHVybiB3
ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoZGF0YU1hbmFnZXIpLm5ldHdvcmtQ
cm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIH0KKwogICAgIFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoZGF0YU1hbmFnZXIpOwpAQCAt
NjQsOCArNzEsNyBAQCBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKIAogICAg
IH5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUoKQogICAgIHsKLSAgICAgICAgZm9yIChhdXRv
KiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhk
YXRhTWFuYWdlcikpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklEKCks
IG51bGxwdHIpOworICAgICAgICBjb29raWVNYW5hZ2VyKCkuc2V0Q29va2llT2JzZXJ2ZXJDYWxs
YmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyKiBkYXRhTWFuYWdlcjsKQEAgLTEzOSwxMSArMTQ1LDkgQEAgV2ViS2l0Q29va2ll
TWFuYWdlciogd2Via2l0Q29va2llTWFuYWdlckNyZWF0ZShXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIqIGRhdGFNYW4KIHsKICAgICBXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyID0gV0VCS0lU
X0NPT0tJRV9NQU5BR0VSKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT09LSUVfTUFOQUdFUiwg
bnVsbHB0cikpOwogICAgIG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyID0gZGF0YU1hbmFnZXI7
Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdl
dFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpIHsKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVP
YnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbbWFuYWdlcl0gewot
ICAgICAgICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxzW0NIQU5HRURdLCAwKTsK
LSAgICAgICAgfSk7Ci0gICAgfQorICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5z
ZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbbWFu
YWdlcl0geworICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0s
IDApOworICAgIH0pOwogICAgIHJldHVybiBtYW5hZ2VyOwogfQogCkBAIC0xNzMsOCArMTc3LDcg
QEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZShXZWJL
aXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLAogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFu
YWdlcikpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQ
cm94eT4oKS0+c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6OmZy
b21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0b3Jh
Z2UpKTsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuc2V0Q29va2llUGVyc2lz
dGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3Vw
Q29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0b3JhZ2UpKTsKIH0KIAogLyoqCkBAIC0xOTIs
OCArMTk1LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3ko
V2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgV2ViS2kKIHsKICAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSk7CiAKLSAgICBmb3IgKGF1dG8q
IHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1h
bmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1l
bnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1h
bmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5
KSwgW10oKSB7IH0pOworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRIVFRQ
Q29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB0b0hUVFBDb29r
aWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0pOwogfQogCiAvKioKQEAgLTIyNCw3ICsy
MjYsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeShXZWJL
aXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBHQ2FuYwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwg
W3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBv
bGljeSkgeworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUo
dGFzayldKFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CiAgICAgICAg
IGdfdGFza19yZXR1cm5faW50KHRhc2suZ2V0KCksIHRvV2ViS2l0Q29va2llQWNjZXB0UG9saWN5
KHBvbGljeSkpOwogICAgIH0pOwogfQpAQCAtMjY5LDExICsyNzEsNyBAQCB2b2lkIHdlYmtpdF9j
b29raWVfbWFuYWdlcl9hZGRfY29va2llKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIFNv
dXBDb29raWUqCiAgICAgZ19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAgICAgR1JlZlB0cjxH
VGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBj
YWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBm
cm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAv
LyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmly
c3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdl
YnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdl
cik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKS0+c2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgeyBXZWJDb3JlOjpD
b29raWUoY29va2llKSB9LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIG1hbmFnZXIt
PnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25J
RCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0o
KSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAg
ICB9KTsKIH0KQEAgLTMyMCwxMSArMzE4LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJf
Z2V0X2Nvb2tpZXMoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgY29uc3QgZ2NoYXIKICAg
ICBnX3JldHVybl9pZl9mYWlsKHVyaSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRv
cHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0
YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUg
U1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNz
IHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wu
Ci0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
R2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNz
UG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVz
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgo
dXJpKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tp
ZT4mIGNvb2tpZXMpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuZ2V0Q29v
a2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21V
VEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiBjb29raWVzKSB7CiAgICAgICAgIEdMaXN0KiBjb29raWVzTGlzdCA9IG51bGxwdHI7
CiAgICAgICAgIGZvciAoYXV0byYgY29va2llIDogY29va2llcykKICAgICAgICAgICAgIGNvb2tp
ZXNMaXN0ID0gZ19saXN0X3ByZXBlbmQoY29va2llc0xpc3QsIGNvb2tpZS50b1NvdXBDb29raWUo
KSk7CkBAIC0zNzgsMTEgKzM3Miw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0
ZV9jb29raWUoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpCiAgICAgZ19y
ZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0
R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEp
KTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNR
TGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3
ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgot
ICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdl
dFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bv
b2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+ZGVsZXRlQ29va2ll
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBXZWJDb3JlOjpDb29raWUoY29va2llKSwgW3Rh
c2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2Vy
KCkuZGVsZXRlQ29va2llKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBXZWJDb3JlOjpDb29r
aWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3Jl
dHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcAppbmRl
eCA4OWJlNTZhZDcxZDcxNTY5MTJhMjY5MTUzMDU3ZGY1MjdjZGQ0NDYwLi5jZmYwMzU4NmRmOGEx
ZmI5NmE2MmEwMTdhM2M0NmU1ZjQwZGUyZDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtNDA0LDcgKzQwNCw2
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmpl
Y3QpCiAgICAgICAgIHByaXYtPndlYnNpdGVEYXRhTWFuYWdlciA9IGFkb3B0R1JlZih3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3KCJsb2NhbC1zdG9yYWdlLWRpcmVjdG9yeSIsIHByaXYt
PmxvY2FsU3RvcmFnZURpcmVjdG9yeS5kYXRhKCksIG51bGxwdHIpKTsKIAogICAgIHByaXYtPnBy
b2Nlc3NQb29sID0gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShjb25maWd1cmF0aW9uKTsKLSAgICBw
cml2LT5wcm9jZXNzUG9vbC0+c2V0UHJpbWFyeURhdGFTdG9yZSh3ZWJraXRXZWJzaXRlRGF0YU1h
bmFnZXJHZXREYXRhU3RvcmUocHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKSk7CiAgICAg
cHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFVzZXJNZXNzYWdlSGFuZGxlcihbd2ViQ29udGV4dF0oVXNl
ck1lc3NhZ2UmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJNZXNzYWdlJiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAgIC8vIFNpbmsgdGhlIGZsb2F0aW5nIHJl
Zi4KICAgICAgICAgR1JlZlB0cjxXZWJLaXRVc2VyTWVzc2FnZT4gdXNlck1lc3NhZ2UgPSB3ZWJr
aXRVc2VyTWVzc2FnZUNyZWF0ZShXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CkBAIC0xNjAzLDggKzE2MDIsOCBAQCB2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9w
cmVmZXRjaF9kbnMoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogaG9zdAog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpKTsKICAg
ICBnX3JldHVybl9pZl9mYWlsKGhvc3RuYW1lKTsKIAotICAgIGlmIChjb250ZXh0LT5wcml2LT5k
bnNQcmVmZXRjaGVkSG9zdHMuYWRkKGhvc3RuYW1lKS5pc05ld0VudHJ5KQotICAgICAgICBjb250
ZXh0LT5wcml2LT5wcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpQcmVmZXRjaEROUyhTdHJpbmc6OmZyb21VVEY4KGhvc3RuYW1lKSkp
OworICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXREYXRhU3RvcmUoY29udGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKKyAg
ICB3ZWJzaXRlRGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlByZWZldGNoRE5TKFN0cmluZzo6ZnJvbVVURjgoaG9zdG5hbWUpKSwgMCk7CiAg
ICAgY29udGV4dC0+cHJpdi0+ZG5zUHJlZmV0Y2hIeXN0ZXJlcmlzLmltcHVsc2UoKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0
aW9uU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1
dG9tYXRpb25TZXNzaW9uLmNwcAppbmRleCA0YWI0N2ZmZjU5MTFlZWMzN2U1NmJjNWJiYjMyOWVi
YWVhN2QzODY1Li4zMDA2ZjRmYWU2YzQzYzI2YmY0MDgyMmI2ZGU4NjhlZjJlMDJjZmJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25T
ZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1
dG9tYXRpb25TZXNzaW9uLmNwcApAQCAtMTM5Miw4ICsxMzkyLDggQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb24KIAogICAgIGNvb2tpZS5odHRwT25seSA9ICpodHRwT25seTsKIAotICAgIFdlYkNv
b2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1l
bnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldENvb2tp
ZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBbY2Fs
bGJhY2tdKCkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlciA9IHBh
Z2UtPndlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsK
KyAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNl
c3Npb25JRCgpLCB7IGNvb2tpZSB9LCBbY2FsbGJhY2tdKCkgewogICAgICAgICBjYWxsYmFjay0+
c2VuZFN1Y2Nlc3MoKTsKICAgICB9KTsKIH0KQEAgLTE0MDksOCArMTQwOSw4IEBAIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246OmRl
bGV0ZUFsbENvb2tpZXMoCiAKICAgICBTdHJpbmcgaG9zdCA9IGFjdGl2ZVVSTC5ob3N0KCkudG9T
dHJpbmcoKTsKIAotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9IG1f
cHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNv
b2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFT
dG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVk
ZWQoaG9zdCkgfSk7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyID0g
cGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigp
OworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhwYWdlLT53ZWJz
aXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQcmVm
aXhJZk5lZWRlZChob3N0KSB9KTsKIAogICAgIHJldHVybiB7IH07CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oCmluZGV4IDQxYzBhMGZiZjUw
NmVmYTE0MDhiY2VmOWFmOGE5MGI4NWExYWQwOGEuLjRmMzk4YjUzMGY2MDg1NzVjOTY3YjgzYzc0
ZmEyZjQzMjhmNmNlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGls
aWFyeVByb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFy
eVByb2Nlc3NQcm94eS5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5B
dXhpbGlhcnlQcm9jZXNzUHJveHkoKTsKIAogICAgIHZvaWQgY29ubmVjdCgpOwotICAgIHZvaWQg
dGVybWluYXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZSgpOwogCiAgICAgdmlydHVh
bCBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50LmgKaW5kZXggZGJlNDRmOTU5NDEwNTExMjE1MTI4ZDI5ZDIxNGVlZTA3NGFh
Zjg0Yy4uNGM4NDVhMGVjNzI1NjU5Y2ZlNzljZWEzNWQzY2JhOTY2ODM0NjE0NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgKQEAgLTQxLDExICs0MSwxMSBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OwogCiBjbGFz
cyBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgZmluYWwgOiBwdWJsaWMgQVBJOjpD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgewotcHJpdmF0ZToKK3B1YmxpYzoKICAgICB2b2lk
IHN0YXJ0TG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYsIExlZ2FjeUN1
c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGZpbmFsOwog
ICAgIHZvaWQgc3RvcExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkmLCBM
ZWdhY3lDdXN0b21Qcm90b2NvbElEKSBmaW5hbDsKICAgICB2b2lkIGludmFsaWRhdGUoTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkmKSBmaW5hbDsKLQorcHJpdmF0ZToKICAgICBIYXNo
TWFwPExlZ2FjeUN1c3RvbVByb3RvY29sSUQsIFJldGFpblB0cjxXS0N1c3RvbVByb3RvY29sTG9h
ZGVyPj4gbV9sb2FkZXJNYXA7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQppbmRleCA3NmQ3YTY0MDQxYTI5MWQ1ZjI5
NzM1MTc2ZTMxZWE3MGY1ZWQ1NTZjLi4xOWVmY2E2YTY0MGNiMmYzMWMyYTg3NTUwNmIxZDY2OWQ2
ZGM3NmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9j
ZXNzUG9vbENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBy
b2Nlc3NQb29sQ29jb2EubW0KQEAgLTEzNCw4ICsxMzQsOSBAQCBzdGF0aWMgdm9pZCByZWdpc3Rl
clVzZXJEZWZhdWx0c0lmTmVlZGVkKCkKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJv
Y2Vzc1N1cHByZXNzaW9uU3RhdGUoKQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByb2Nl
c3NTdXBwcmVzc2lvbkVuYWJsZWQoKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdl
YnNpdGVEYXRhU3RvcmUoW2VuYWJsZWQgPSBwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCldIChX
ZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQ
cm9jZXNzKCkuc2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChlbmFibGVkKTsKKyAgICB9KTsK
IAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIGlmICghbV9wcm9jZXNzU3Vw
cHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCkpCkBAIC0xNjYsOCArMTY3LDYg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplKCkKICAgICBpZiAoIVtb
TlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJXZWJLaXRT
dXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciJdKQogICAgICAgICBpbnN0YWxsTWVtb3J5UHJl
c3N1cmVIYW5kbGVyKCk7CiAKLSAgICBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQobWFrZVVuaXF1ZTxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkpOwotCiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogICAgIGlm
ICghX01HQ2FjaGVWYWxpZCgpKSB7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIF57CkBA
IC00OTMsMjIgKzQ5Miw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6
ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhCiAKICAgICBOU1VzZXJE
ZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNd
OwogCi0gICAgewotICAgICAgICBib29sIGlzU2FmYXJpID0gZmFsc2U7Ci0gICAgICAgIGJvb2wg
aXNNaW5pQnJvd3NlciA9IGZhbHNlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAg
IGlzU2FmYXJpID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTW9iaWxlU2FmYXJpKCk7Ci0g
ICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNNaW5pQnJv
d3NlcigpOwotI2VsaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBpc1NhZmFyaSA9IFdlYkNvcmU6
Ok1hY0FwcGxpY2F0aW9uOjppc1NhZmFyaSgpOwotICAgICAgICBpc01pbmlCcm93c2VyID0gV2Vi
Q29yZTo6TWFjQXBwbGljYXRpb246OmlzTWluaUJyb3dzZXIoKTsKLSNlbmRpZgotICAgICAgICBp
ZiAoaXNTYWZhcmkgfHwgaXNNaW5pQnJvd3NlcikgewotICAgICAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cFBy
b3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0cmluZyAqKVdlYktp
dDJIVFRQUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cHNQcm94eSA9
IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcgKilXZWJLaXQySFRU
UFNQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBwYXJhbWV0ZXJz
Lm5ldHdvcmtBVFNDb250ZXh0ID0gYWRvcHRDRihfQ0ZOZXR3b3JrQ29weUFUU0NvbnRleHQoKSk7
CiAKICAgICBwYXJhbWV0ZXJzLnNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyID0g
W2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0U3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXJE
ZWZhdWx0c0tleV07CkBAIC01MjIsMTIgKzUwNSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBs
YXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
CiAgICAgTlNOdW1iZXIgKmRhdGFiYXNlRW5hYmxlZFZhbHVlID0gW2RlZmF1bHRzIG9iamVjdEZv
cktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkludGVybmFsRGVidWclQCIsIFdlYlBy
ZWZlcmVuY2VzS2V5Ojppc0lUUERhdGFiYXNlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCku
Z2V0KCldXTsKICAgICBpZiAoZGF0YWJhc2VFbmFibGVkVmFsdWUpCiAgICAgICAgIHBhcmFtZXRl
cnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBkYXRhYmFzZUVuYWJsZWRWYWx1ZS5ib29sVmFs
dWU7Ci0gICAgZWxzZQotICAgICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNl
ID0gbV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLmlzSVRQRGF0YWJhc2VFbmFibGVk
KCk7CiAKICAgICBwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSA9
IFtkZWZhdWx0cyBib29sRm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRXhwZXJp
bWVudGFsJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6YWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2Rl
RW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKLQotICAgIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFwcEhh
c1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbiA9IGhhc1JlcXVlc3RlZENy
b3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpwbGF0Zm9ybUludmFsaWRhdGVDb250ZXh0KCkKQEAgLTYwNiwxMSArNTg1LDYgQEAgYm9vbCBX
ZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpIGNvbnN0CiAgICAgcmV0
dXJuICFtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIudmFsdWUoKSAmJiAhbV9wcm9jZXNzU3Vw
cHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCk7CiB9CiAKLWJvb2wgV2ViUHJv
Y2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0
cmluZyYgZW50aXRsZW1lbnQpCi17Ci0gICAgcmV0dXJuIFdURjo6aGFzRW50aXRsZW1lbnQoZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwgZW50aXRs
ZW1lbnQudXRmOCgpLmRhdGEoKSk7Ci19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAh
UExBVEZPUk0oTUFDQ0FUQUxZU1QpCiBmbG9hdCBXZWJQcm9jZXNzUG9vbDo6ZGlzcGxheUJyaWdo
dG5lc3MoKQogewpAQCAtOTQ3LDIzICs5MjEsNCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdp
c3RlckhpZ2hEeW5hbWljUmFuZ2VDaGFuZ2VDYWxsYmFjaygpCiB9CiAjZW5kaWYKIAotT1NPYmpl
Y3RQdHI8eHBjX29iamVjdF90PiBXZWJQcm9jZXNzUG9vbDo6eHBjRW5kcG9pbnRNZXNzYWdlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9lbmRwb2ludE1lc3NhZ2U7Ci19Ci0KLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKE9TT2Jq
ZWN0UHRyPHhwY19vYmplY3RfdD4gZW5kcG9pbnRNZXNzYWdlKQotewotICAgIG1fZW5kcG9pbnRN
ZXNzYWdlID0gZW5kcG9pbnRNZXNzYWdlOwotCi0gICAgZm9yIChhdXRvIHByb2Nlc3MgOiBtX3By
b2Nlc3NlcykgewotICAgICAgICBpZiAocHJvY2Vzcy0+c3RhdGUoKSAhPSBBdXhpbGlhcnlQcm9j
ZXNzUHJveHk6OlN0YXRlOjpSdW5uaW5nKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGlmICghcHJvY2Vzcy0+Y29ubmVjdGlvbigpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGF1dG8gY29ubmVjdGlvbiA9IHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlv
bigpOwotICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbiwgZW5k
cG9pbnRNZXNzYWdlLmdldCgpKTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHku
Y3BwCmluZGV4IGM1ZGU0ZTdkMGY1OTE5NGY0M2EwMjNiMDg5ZTM3MmM1OGNmOGVlMDYuLmY3Y2Zm
ODUyZjBiYTZkMDE1NTExNjVkZDhhOWY3ZDU3NjNiMDA3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAKQEAgLTc1LDggKzc1
LDggQEAgdm9pZCBEb3dubG9hZFByb3h5OjpjYW5jZWwoKQogICAgIGlmICghbV9wcm9jZXNzUG9v
bCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdv
cmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9h
ZChtX2Rvd25sb2FkSUQpLCAwKTsKKyAgICBpZiAobV9kYXRhU3RvcmUpCisgICAgICAgIG1fZGF0
YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpD
YW5jZWxEb3dubG9hZChtX2Rvd25sb2FkSUQpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5
OjppbnZhbGlkYXRlKCkKQEAgLTEwMywxNSArMTAzLDEzIEBAIFdlYlBhZ2VQcm94eSogRG93bmxv
YWRQcm94eTo6b3JpZ2luYXRpbmdQYWdlKCkgY29uc3QKICNpZiBQTEFURk9STShDT0NPQSkKIHZv
aWQgRG93bmxvYWRQcm94eTo6cHVibGlzaFByb2dyZXNzKGNvbnN0IFVSTCYgVVJMKQogewotICAg
IGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICBpZiAoIW1fZGF0YVN0b3JlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7
Ci0gICAgICAgIGJvb2wgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNpb246OlR5
cGU6OlJlYWRXcml0ZSwgaGFuZGxlKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkU2Fu
ZGJveEV4dGVuc2lvbiwgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24pOwotICAgICAgICBuZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxpc2hEb3dubG9hZFBy
b2dyZXNzKG1fZG93bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKLSAgICB9CisgICAgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZTsKKyAgICBib29sIGNyZWF0ZWRTYW5kYm94RXh0ZW5z
aW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKFVSTC5maWxlU3lzdGVtUGF0aCgp
LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIGhhbmRsZSk7CisgICAgQVNTRVJU
X1VOVVNFRChjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiwgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24p
OworICAgIG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9ncmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFu
ZGxlKSwgMCk7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCiAKQEAgLTEzMSwxMSArMTI5
LDEwIEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkU3RhcnQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dlCiAKIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYg
YXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIHVpbnQ2NF90IGNoYWxsZW5nZUlEKQogewotICAgIGlm
ICghbV9wcm9jZXNzUG9vbCkKKyAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wgfHwgIW1fZGF0YVN0b3Jl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJv
eHkgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShhdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX3Byb2Nlc3NQb29sLT5u
ZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKSksIG51bGxwdHIpOwotCisgICAgYXV0byBhdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eTo6
Y3JlYXRlKFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBjaGFsbGVuZ2VJRCwgbWFr
ZVJlZigqbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpKSwgbnVsbHB0
cik7CiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoKnRoaXMsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuZ2V0
KCkpOwogfQogCkBAIC0xNDYsMTUgKzE0MywxMCBAQCB2b2lkIERvd25sb2FkUHJveHk6OndpbGxT
ZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiBwcm9wb3NlZFJlcXVlc3QsIGNvbnN0IFJlcwog
CiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS53aWxsU2VuZFJlcXVlc3QoKnRo
aXMsIFdURk1vdmUocHJvcG9zZWRSZXF1ZXN0KSwgcmVkaXJlY3RSZXNwb25zZSwgW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oUmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVxdWVz
dCkgewogICAgICAgICBtX3JlZGlyZWN0Q2hhaW4uYXBwZW5kKG5ld1JlcXVlc3QudXJsKCkpOwot
Ci0gICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9wcm9jZXNzUG9vbCkKKyAgICAgICAgaWYg
KCFwcm90ZWN0ZWRUaGlzLT5tX2RhdGFTdG9yZSkKICAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBhdXRvKiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVjdGVkVGhpcy0+bV9wcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzc1Byb3h5
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzUHJveHktPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZVdpbGxTZW5kUmVxdWVzdChwcm90
ZWN0ZWRUaGlzLT5tX2Rvd25sb2FkSUQsIG5ld1JlcXVlc3QpLCAwKTsKKyAgICAgICAgYXV0byYg
bmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb3RlY3RlZFRoaXMtPm1fZGF0YVN0b3JlLT5uZXR3b3Jr
UHJvY2VzcygpOworICAgICAgICBuZXR3b3JrUHJvY2Vzc1Byb3h5LnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpDb250aW51ZVdpbGxTZW5kUmVxdWVzdChwcm90ZWN0ZWRUaGlzLT5tX2Rv
d25sb2FkSUQsIG5ld1JlcXVlc3QpLCAwKTsKICAgICB9KTsKIH0KIApAQCAtMTc5LDE2ICsxNzEs
MTQgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRG
aWxlbmFtZUFzeW5jKERvd25sb2FkSUQgZG93bmwKICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgp
LmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKCp0aGlzLCBSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSks
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRvd25sb2FkSUQgPSBkb3du
bG9hZElEXSAoQWxsb3dPdmVyd3JpdGUgYWxsb3dPdmVyd3JpdGUsIFN0cmluZyBkZXN0aW5hdGlv
bikgeworICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzYW5p
dGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKSwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxvYWRJRF0gKEFsbG93T3ZlcndyaXRlIGFsbG93
T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsKICAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgICAgIGlmICghZGVzdGluYXRp
b24uaXNOdWxsKCkpCiAgICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUo
ZGVzdGluYXRpb24sIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4
dGVuc2lvbkhhbmRsZSk7CiAKLSAgICAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgICAgICBp
ZiAoIW1fZGF0YVN0b3JlKQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNv
bnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oZG93bmxvYWRJRCwgZGVzdGlu
YXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGFsbG93T3ZlcndyaXRlID09IEFsbG93T3Zl
cndyaXRlOjpZZXMpLCAwKTsKKyAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25s
b2FkRGVzdGluYXRpb24oZG93bmxvYWRJRCwgZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25I
YW5kbGUsIGFsbG93T3ZlcndyaXRlID09IEFsbG93T3ZlcndyaXRlOjpZZXMpLCAwKTsKICAgICB9
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkUHJveHlNYXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkUHJveHlNYXAuY3BwCmluZGV4IDc2YTA3MTU3YjU5MWFhY2U1MGYxNWQxNTI1ZGJjZmI4
YzZhNGJiYzguLmQ3NGE4ZmE2YzY0Yzg4NjM1ZjllYjc1Y2E3M2U3MGZkOTQ2Y2EwMmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFw
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94
eU1hcC5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBEb3dubG9h
ZFByb3h5TWFwOjpEb3dubG9hZFByb3h5TWFwKE5ldHdvcmtQcm9jZXNzUHJveHkmIHByb2Nlc3Mp
Ci0gICAgOiBtX3Byb2Nlc3MobWFrZVdlYWtQdHIocHJvY2VzcykpCisgICAgOiBtX3Byb2Nlc3Mo
cHJvY2VzcykKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAsIG1fc2hvdWxkVGFrZUFzc2VydGlv
bihXVEY6OnByb2Nlc3NIYXNFbnRpdGxlbWVudCgiY29tLmFwcGxlLm11bHRpdGFza2luZy5zeXN0
ZW1hcHBhc3NlcnRpb25zIikpCiAjZW5kaWYKQEAgLTcwLDE0ICs3MCwxMiBAQCB2b2lkIERvd25s
b2FkUHJveHlNYXA6OnBsYXRmb3JtRGVzdHJveSgpCiAKIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6
YXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKQogewotICAgIGlmIChtX3Byb2Nlc3MpCi0g
ICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0
aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCksIDApOworICAgIG1fcHJvY2Vzcy5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7CiB9
CiAKIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5k
KCkKIHsKLSAgICBpZiAobV9wcm9jZXNzKQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKSwgMCk7
CisgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlv
bldpbGxFbnRlckZvcmVncm91bmQoKSwgMCk7CiB9CiAKIERvd25sb2FkUHJveHkmIERvd25sb2Fk
UHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3Jl
LCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdl
YlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQpAQCAtOTIsMTMgKzkwLDEyIEBAIERvd25sb2Fk
UHJveHkmIERvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFT
dG9yZSYgZGF0YVN0b3JlCiAgICAgICAgIG1fZG93bmxvYWRVSUFzc2VydGlvbiA9IG1ha2VVbmlx
dWU8UHJvY2Vzc0Fzc2VydGlvbj4oZ2V0Q3VycmVudFByb2Nlc3NJRCgpLCAiV2ViS2l0IGRvd25s
b2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVuYm91bmRlZE5ldHdvcmtpbmcpOwogCiAg
ICAgICAgIEFTU0VSVCghbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24pOwotICAgICAgICBS
RUxFQVNFX0FTU0VSVChtX3Byb2Nlc3MpOwotICAgICAgICBtX2Rvd25sb2FkTmV0d29ya2luZ0Fz
c2VydGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fzc2VydGlvbj4obV9wcm9jZXNzLT5wcm9jZXNz
SWRlbnRpZmllcigpLCAiV2ViS2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6
OlVuYm91bmRlZE5ldHdvcmtpbmcpOworICAgICAgICBtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2Vy
dGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fzc2VydGlvbj4obV9wcm9jZXNzLnByb2Nlc3NJZGVu
dGlmaWVyKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5i
b3VuZGVkTmV0d29ya2luZyk7CiAKICAgICAgICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNp
b24sICJVSVByb2Nlc3MgdG9vayAnV2ViS2l0IGRvd25sb2FkcycgYXNzZXJ0aW9ucyBmb3IgVUlQ
cm9jZXNzIGFuZCBOZXR3b3JrUHJvY2VzcyIpOwogICAgIH0KIAotICAgIG1fcHJvY2Vzcy0+YWRk
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCksIGRvd25sb2Fk
UHJveHkuZ2V0KCkpOworICAgIG1fcHJvY2Vzcy5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRQcm94eS0+ZG93
bmxvYWRJRCgpLmRvd25sb2FkSUQoKSwgZG93bmxvYWRQcm94eS5nZXQoKSk7CiAKICAgICByZXR1
cm4gZG93bmxvYWRQcm94eTsKIH0KQEAgLTEwOSwxMiArMTA2LDkgQEAgdm9pZCBEb3dubG9hZFBy
b3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKERvd25sb2FkUHJveHkmIGRvd25sb2FkUHJveHkpCiAK
ICAgICBSRUxFQVNFX0xPRyhMb2FkaW5nLCAiUmVtb3ZpbmcgZG93bmxvYWQgJSIgUFJJdTY0ICIg
ZnJvbSBVSVByb2Nlc3MgRG93bmxvYWRQcm94eU1hcCIsIGRvd25sb2FkSUQuZG93bmxvYWRJRCgp
KTsKIAotICAgIC8vIFRoZSBEb3dubG9hZFByb3h5IG1heSBiZSBob2xkaW5nIHRoZSBsYXN0IHJl
ZmVyZW5jZSB0byB0aGUgcHJvY2VzcyBwb29sLgotICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bv
b2wgPSBtYWtlUmVmUHRyKG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKSk7Ci0KICAgICBBU1NFUlQo
bV9kb3dubG9hZHMuY29udGFpbnMoZG93bmxvYWRJRCkpOwogCi0gICAgbV9wcm9jZXNzLT5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOworICAgIG1fcHJvY2Vzcy5yZW1vdmVN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogICAgIGRvd25sb2FkUHJveHkuaW52YWxp
ZGF0ZSgpOwogICAgIG1fZG93bmxvYWRzLnJlbW92ZShkb3dubG9hZElEKTsKIApAQCAtMTMzLDE1
ICsxMjcsMTMgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFwOjppbnZhbGlkYXRlKCkKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGRvd25sb2FkIDogbV9kb3dubG9hZHMudmFsdWVzKCkpIHsKICAgICAgICAg
ZG93bmxvYWQtPnByb2Nlc3NEaWRDbG9zZSgpOwogICAgICAgICBkb3dubG9hZC0+aW52YWxpZGF0
ZSgpOwotICAgICAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJ
RCgpLmRvd25sb2FkSUQoKSk7CisgICAgICAgIG1fcHJvY2Vzcy5yZW1vdmVNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxv
YWQtPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOwogICAgIH0KIAogICAgIG1fZG93bmxvYWRz
LmNsZWFyKCk7CiAgICAgbV9kb3dubG9hZFVJQXNzZXJ0aW9uID0gbnVsbHB0cjsKICAgICBtX2Rv
d25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbiA9IG51bGxwdHI7CiAgICAgUkVMRUFTRV9MT0coUHJv
Y2Vzc1N1c3BlbnNpb24sICJVSVByb2Nlc3MgRG93bmxvYWRQcm94eU1hcCBpbnZhbGlkYXRlZCAt
IFJlbGVhc2VkICdXZWJLaXQgZG93bmxvYWRzJyBhc3NlcnRpb25zIGZvciBVSVByb2Nlc3MgYW5k
IE5ldHdvcmtQcm9jZXNzIik7Ci0KLSAgICBtX3Byb2Nlc3MgPSBudWxscHRyOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCmluZGV4IDNiZTIwNzlhMGYyYzRiNTM3MDYyY2UxMzAw
ZTFjZDVkYTQ0NGZmYmUuLjRmYTAwMWJkN2ZhZTFjZWQwMjRkMmI5MWYyMDE3MGZmOTk0NTI4YmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFBy
b3h5TWFwLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
UHJveHlNYXAuaApAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1D
cmVhdGUoKTsKICAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOwogCi0gICAgV2Vha1B0cjxOZXR3
b3JrUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3M7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbV9w
cm9jZXNzOwogICAgIEhhc2hNYXA8RG93bmxvYWRJRCwgUmVmUHRyPERvd25sb2FkUHJveHk+PiBt
X2Rvd25sb2FkczsKIAogICAgIGJvb2wgbV9zaG91bGRUYWtlQXNzZXJ0aW9uIHsgZmFsc2UgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9j
b2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5LmNwcAppbmRleCA4YzIzYmJlOGMwNmExNTk5Y2I5YjkxNmEwYjMyYWZiMzc3ODNm
MzA1Li5kNmMzMzIzZGQ5M2U2OWY1NmFkZjZiZTBkMmExYjE0ZjA4MjI0NTEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJv
eHkuY3BwCkBAIC00NCwxNyArNDQsMTcgQEAgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJv
eHk6On5MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgpCiAKIHZvaWQgTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2Nv
bElEIGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdGFydExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29s
SUQsIHJlcXVlc3QpOworICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5jdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQoKS5zdGFydExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVl
c3QpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9h
ZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1c3RvbVByb3RvY29sSUQpCiB7Ci0gICAgbV9u
ZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50KCkuc3RvcExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOworICAgIG1fbmV0d29y
a1Byb2Nlc3NQcm94eS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGluZygq
dGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5w
cm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUoKnRo
aXMpOworICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQoKS5pbnZhbGlkYXRlKCp0aGlzKTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eTo6d2FzUmVkaXJlY3RlZFRvUmVxdWVzdChMZWdhY3lDdXN0b21Qcm90b2NvbElE
IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuY3BwCmluZGV4IGMxZjQ3MDhiODFjZmE1M2FiMTIyYzI5NDQ2NzVlNzgyNTE2NzEyMWYu
LjhmMDEyMTUzYjJkM2ZkNzc1MWRlMDYwYjg4YTE0NzgzNDRmNmE2NDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNw
cApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKIAog
I2luY2x1ZGUgIkFQSUNvbnRlbnRSdWxlTGlzdC5oIgorI2luY2x1ZGUgIkFQSUN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudC5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJv
eHkuaCIKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbk1hbmFnZXIuaCIKICNpbmNsdWRlICJEb3du
bG9hZFByb3h5TWFwLmgiCkBAIC0zNSw2ICszNiw3IEBACiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2Nv
bE1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjZW5kaWYKKyNpbmNsdWRlICJMZWdhY3lHbG9iYWxT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29udGVu
dFJ1bGVMaXN0TWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uSW5mby5oIgpAQCAtNDgsNiArNTAsNyBAQAogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0
aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNs
dWRlICJXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5oIgorI2luY2x1ZGUgIldlYkNvb2tpZU1h
bmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NNZXNzYWdlcy5oIgpAQCAtNjAsNiAr
NjMsNyBAQAogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVDbGllbnQuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21h
aW4uaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CiAjaW5jbHVkZSA8d3Rm
L0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKICNpZiBFTkFCTEUoU0VDX0lURU1fU0hJTSkKQEAgLTcw
LDIwICs3NCwxMjYgQEAKICNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KICNlbmRp
ZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwogI2RlZmluZSBNRVNTQUdFX0NIRUNLKGFzc2VydGlv
bikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlvbiwgY29ubmVjdGlvbigpKQogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1OZXR3b3JrUHJvY2Vzc1By
b3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLSAg
ICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShwcm9jZXNzUG9vbC5hbHdheXNSdW5zQXRCYWNrZ3Jv
dW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJvY2Vzc1Bvb2wocHJvY2Vzc1Bvb2wpCitzdGF0aWMg
SGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5Kj4mIG5ldHdvcmtQcm9jZXNzZXNTZXQoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8SGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5Kj4+IHNldDsKKyAgICByZXR1cm4g
c2V0OworfQorCitWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkKK3sKKyAgICBWZWN0b3I8UmVmPE5ldHdvcmtQ
cm9jZXNzUHJveHk+PiBwcm9jZXNzZXM7CisgICAgcHJvY2Vzc2VzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobmV0d29ya1Byb2Nlc3Nlc1NldCgpLnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA6IG5ldHdvcmtQcm9jZXNzZXNTZXQoKSkKKyAgICAgICAgcHJvY2Vzc2VzLnVu
Y2hlY2tlZEFwcGVuZCgqbmV0d29ya1Byb2Nlc3MpOworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9
CisKK3N0YXRpYyBSZWZQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4mIGRlZmF1bHRQcm9jZXNzKCkK
K3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+
PiBwcm9jZXNzOworICAgIHJldHVybiBwcm9jZXNzLmdldCgpOworfQorCitSZWY8TmV0d29ya1By
b2Nlc3NQcm94eT4gTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQcm9jZXNzKFdl
YnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKK3sKKyAgICBpZiAoIWRlZmF1bHRQcm9jZXNzKCkp
CisgICAgICAgIGRlZmF1bHRQcm9jZXNzKCkgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGUo
ZGF0YVN0b3JlKTsKKyAgICByZXR1cm4gKmRlZmF1bHRQcm9jZXNzKCk7Cit9CisKK3ZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKCkKK3sKKyAgICBBdXhpbGlhcnlQcm9jZXNzUHJv
eHk6OnRlcm1pbmF0ZSgpOworICAgIGlmICh0aGlzID09IGRlZmF1bHRQcm9jZXNzKCkuZ2V0KCkp
CisgICAgICAgIGRlZmF1bHRQcm9jZXNzKCkgPSBudWxscHRyOworfQorCit2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKQoreworICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRl
bXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4g
dGhyZWFkcy4KKyAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRo
cmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCisgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KKyAgICBpZiAoIVJ1bkxvb3A6Omlz
TWFpbigpKSB7CisgICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpc10geworICAg
ICAgICAgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgICAgICB9
KTsKKyAgICB9CisKKyAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0
ZXJzOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlU
b1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0
ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBh
c3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0
dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2Vj
dXJpdHlQb2xpY3koKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9j
YWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVt
ZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3Rl
cmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xl
dG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOworICAgIHBhcmFtZXRlcnMuY2Fj
aGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7
CisgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhD
dXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCisgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1Jl
Z2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7CisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKyAgICBpZiAoU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQ
cm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURpcmVj
dG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZv
clJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNv
b2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgY29u
dGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNE
aXJlY3RvcnkoKTsgIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250
YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9
IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsgIXBhcmVudEJ1bmRsZURp
cmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5
LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisjZW5k
aWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3Mo
cGFyYW1ldGVycyk7CisgICAgcGFyYW1ldGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gZGF0YVN0
b3JlUGFyYW1ldGVycygpOworICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyksIDApOworfQorCitWZWN0b3I8V2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRhdGFTdG9yZVBhcmFt
ZXRlcnMoKQoreworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1l
dGVyczsKKyAgICBmb3IgKGF1dG8mIHN0b3JlIDogbV93ZWJzaXRlRGF0YVN0b3JlcykKKyAgICAg
ICAgcGFyYW1ldGVycy5hcHBlbmQoc3RvcmUucGFyYW1ldGVycygpKTsKKyAgICByZXR1cm4gcGFy
YW1ldGVyczsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNr
Z3JvdW5kUHJpb3JpdHkoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9j
ZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5h
bHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQ
b29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpCit7CisgICAgZm9yIChhdXRvKiBw
cm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAg
ICBpZiAocHJvY2Vzc1Bvb2wtPnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK05l
dHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYg
ZGF0YVN0b3JlKQorICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KGFueVByb2Nlc3NQb29sQWx3
YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01f
UFJPVE9DT0xfTUFOQUdFUikKKyAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1h
a2VVbmlxdWVSZWY8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogICAgICwg
bV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgqdGhpcykKKyNlbHNlCisgICAgLCBtX2N1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50PigpKQogI2VuZGlmCi0gICAgLCBtX3Rocm90dGxlcigqdGhpcywgcHJvY2Vz
c1Bvb2wuc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV90aHJvdHRs
ZXIoKnRoaXMsIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigp
KQorICAgICwgbV9jb29raWVNYW5hZ2VyKFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0
aGlzKSkKIHsKKyAgICBtX3dlYnNpdGVEYXRhU3RvcmVzLmFkZChkYXRhU3RvcmUpOwogICAgIGNv
bm5lY3QoKTsKKyAgICBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAg
bmV0d29ya1Byb2Nlc3Nlc1NldCgpLmFkZCh0aGlzKTsKIH0KIAogTmV0d29ya1Byb2Nlc3NQcm94
eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkoKQpAQCAtOTgsNiArMjA4LDcgQEAgTmV0d29ya1Byb2Nl
c3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkoKQogCiAgICAgaWYgKG1fZG93bmxvYWRQcm94
eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5pbnZhbGlkYXRlKCk7CisgICAgbmV0
d29ya1Byb2Nlc3Nlc1NldCgpLnJlbW92ZSh0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYg
bGF1bmNoT3B0aW9ucykKQEAgLTEwNSwxNSArMjE2LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxh
dW5jCiAgICAgbGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSA9IFByb2Nlc3NMYXVuY2hlcjo6UHJv
Y2Vzc1R5cGU6Ok5ldHdvcms7CiAgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hP
cHRpb25zKGxhdW5jaE9wdGlvbnMpOwogCi0gICAgaWYgKHByb2Nlc3NQb29sKCkuc2hvdWxkTWFr
ZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKLSAgICAgICAgcHJv
Y2Vzc1Bvb2woKS5zZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRl
c3RpbmcoZmFsc2UpOwotICAgICAgICBsYXVuY2hPcHRpb25zLnNob3VsZE1ha2VQcm9jZXNzTGF1
bmNoRmFpbEZvclRlc3RpbmcgPSB0cnVlOworICAgIGZvciAoYXV0byYgZGF0YVN0b3JlIDogbV93
ZWJzaXRlRGF0YVN0b3JlcykgeworICAgICAgICBpZiAoZGF0YVN0b3JlLnNob3VsZE1ha2VOZXh0
TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpKSB7CisgICAgICAgICAgICBkYXRh
U3RvcmUuc2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
KGZhbHNlKTsKKyAgICAgICAgICAgIGxhdW5jaE9wdGlvbnMuc2hvdWxkTWFrZVByb2Nlc3NMYXVu
Y2hGYWlsRm9yVGVzdGluZyA9IHRydWU7CisgICAgICAgIH0KICAgICB9Ci0KLSNpZiBQTEFURk9S
TShQTEFZU1RBVElPTikKLSAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NQYXRoID0gbV9wcm9jZXNz
UG9vbC5uZXR3b3JrUHJvY2Vzc1BhdGgoKTsKLSAgICBsYXVuY2hPcHRpb25zLnVzZXJJZCA9IG1f
cHJvY2Vzc1Bvb2wudXNlcklkKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAt
MTY2LDEyICsyNzQsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBw
SXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKICAgICB9CiB9CiAKLURvd25sb2FkUHJveHkm
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9y
ZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29u
c3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFn
ZSkKK0Rvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJv
eHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bv
b2wsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUlu
Zm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQogewogICAg
IGlmICghbV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAgPSBt
YWtlVW5pcXVlPERvd25sb2FkUHJveHlNYXA+KCp0aGlzKTsKIAotICAgIHJldHVybiBtX2Rvd25s
b2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBtX3Byb2Nlc3NQb29s
LCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKKyAgICByZXR1
cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcHJv
Y2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwog
fQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE9w
dGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQgKFdlYnNpdGVEYXRhKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIzNyw4
ICszNDUsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpuZXR3b3JrUHJvY2Vzc0NyYXNo
ZWQoKQogewogICAgIGNsZWFyQ2FsbGJhY2tTdGF0ZXMoKTsKIAotICAgIC8vIFRlbGwgdGhlIG5l
dHdvcmsgcHJvY2VzcyBtYW5hZ2VyIHRvIGZvcmdldCBhYm91dCB0aGlzIG5ldHdvcmsgcHJvY2Vz
cyBwcm94eS4gVGhpcyB3aWxsIGNhdXNlIHVzIHRvIGJlIGRlbGV0ZWQuCi0gICAgbV9wcm9jZXNz
UG9vbC5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMpOworICAgIFJlZjxOZXR3b3JrUHJvY2Vz
c1Byb3h5PiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKKyAgICBmb3IgKGF1dG8mIHdlYnNpdGVE
YXRhU3RvcmUgOiBtX3dlYnNpdGVEYXRhU3RvcmVzKQorICAgICAgICB3ZWJzaXRlRGF0YVN0b3Jl
Lm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6Y2xlYXJDYWxsYmFja1N0YXRlcygpCkBAIC0yNTgsOSArMzY5LDYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIElQQzo6RGUKICAgICBpZiAoZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29k
ZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5kaXNwYXRjaE1l
c3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCi0gICAgICAgIHJldHVybjsKLQogICAgIGRpZFJl
Y2VpdmVOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKIH0K
IApAQCAtMjc0LDggKzM4Miw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2
ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDCiAKIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKLSAgICBhdXRv
IHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZihtX3Byb2Nlc3NQb29sKTsKLQogICAgIGlm
IChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+aW52YWxp
ZGF0ZSgpOwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCkBAIC0z
MzEsMTEgKzQzNyw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3NpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAoIXRvcE9yaWdpbiB8fCAhbV9wcm9jZXNzUG9vbC5pc1NlcnZpY2VX
b3JrZXJQYWdlSUQocGFnZUlEKSkgewotICAgICAgICBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFs
bGVuZ2Uoc2Vzc2lvbklELCBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBXZWJQYWdlUHJveHk6OmZvck1vc3RWaXNpYmxlV2Vi
UGFnZUlmQW55KHNlc3Npb25JRCwgKnRvcE9yaWdpbiwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdl
YWtQdHIodGhpcyksIHNlc3Npb25JRCwgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSBXVEZNb3Zl
KGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgbmVnb3RpYXRlZExlZ2FjeVRMU10oYXV0byogcGFn
ZSkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47
CkBAIC0zOTIsMTEgKzQ5Myw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRmluaXNo
TGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hlciogbGF1bmNoZXIsIElQQzo6Q29uCiAgICAgICAgIG5l
dHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0jaWYgUExB
VEZPUk0oQ09DT0EpCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wucHJvY2Vzc1N1cHByZXNzaW9uRW5h
YmxlZCgpKQotICAgICAgICBzZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHRydWUpOwotI2Vu
ZGlmCiAgICAgCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoeHBjX2Nvbm5lY3Rp
b25fdCBjb25uZWN0aW9uID0gdGhpcy0+Y29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCkpCkBA
IC0xMjA1LDcgKzEzMDEsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNldFRoaXJkUGFy
dHlDTkFNRURvbWFpbkZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2VzcwogfQogdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2wo
KS5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihXVEZNb3ZlKGRvbWFpbnMpKTsKKyAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygp
KQorICAgICAgICBwcm9jZXNzUG9vbC0+c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFz
aFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4geyBkb21haW5zIH0pOwogfQogI2VuZGlm
IC8vIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKQEAgLTEyNTIsNDUgKzEzNDks
MzEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpT
ZXNzaW9uSUQmIHNlc3Npb25JRCwgQ29tcGxldGkKICAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpGbHVzaENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCi12b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNl
c3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYgc3RvcmUpCit2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYgc3RvcmUpCiB7Ci0gICAgbV9zZXNz
aW9uSURzLmFkZChzdG9yZS0+c2Vzc2lvbklEKCkpOworICAgIG1fd2Vic2l0ZURhdGFTdG9yZXMu
YWRkKHN0b3JlKTsKIAogICAgIGlmIChjYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBzZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWRkV2Vic2l0ZURhdGFTdG9yZSB7IHN0b3JlLT5wYXJh
bWV0ZXJzKCkgfSwgMCk7Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS0+c2Vzc2lvbklEKCk7
CisgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0
b3JlIHsgc3RvcmUucGFyYW1ldGVycygpIH0sIDApOworICAgIGF1dG8gc2Vzc2lvbklEID0gc3Rv
cmUuc2Vzc2lvbklEKCk7CiAgICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgewogI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVw
Z3JhZGUoc3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCkpOworICAgICAg
ICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUucmVzb2x2ZWRJbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnkoKSk7CiAjZW5kaWYKICAgICB9CiB9CiAKLWJvb2wgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6aGFzU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fc2Vzc2lvbklEcy5jb250YWlucyhzZXNzaW9uSUQpOwotfQotCi12b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQor
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUm
IHdlYnNpdGVEYXRhU3RvcmUpCiB7Ci0gICAgbV9zZXNzaW9uSURzLnJlbW92ZShzZXNzaW9uSUQp
OworICAgIG1fd2Vic2l0ZURhdGFTdG9yZXMucmVtb3ZlKHdlYnNpdGVEYXRhU3RvcmUpOwogCiAg
ICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpEZXN0cm95U2Vzc2lvbiB7IHNlc3Npb25JRCB9LCAwKTsKKyAgICAgICAgc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRlc3Ryb3lTZXNzaW9uIHsgd2Vic2l0ZURhdGFTdG9y
ZS5zZXNzaW9uSUQoKSB9LCAwKTsKIH0KIAogV2Vic2l0ZURhdGFTdG9yZSogTmV0d29ya1Byb2Nl
c3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSkgewotICAgICAgICBpZiAoIVdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmVFeGlzdHMoKSkgewotICAgICAgICAgICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IG1f
cHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpOwotICAgICAgICAgICAgaWYgKHdlYnNpdGVE
YXRhU3RvcmUgJiYgd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gc2Vzc2lvbklEKQot
ICAgICAgICAgICAgICAgIHJldHVybiB3ZWJzaXRlRGF0YVN0b3JlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERh
dGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIHJldHVybiBXZWJzaXRlRGF0YVN0
b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwogfQogCiB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnJldHJpZXZlQ2FjaGVTdG9yYWdlUGFyYW1ldGVycyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQpCkBAIC0xMzM3LDcgKzE0MjAsNyBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJV
c2VyQ29udGVudAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
KFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIG1fcHJvY2Vzc1Bvb2wuZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05l
dHdvcmtQcm9jZXNzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgc2Vzc2lvbklE
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFi
bGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgUmVnaXN0
cmFibGVEb21haW4ge3JlZ2lzdHJhYmxlRG9tYWlufSwgc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6d29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ob0xvbmdlck5lZWRlZChXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBp
ZGVudGlmaWVyKQpAQCAtMTUwMCwxNiArMTU4MywzNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnByZWNvbm5lY3RUbyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYlBhZ2VQcm94eUlk
ZQogICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vzc2lv
bklELCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0KIAor
c3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sK
KyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQ
b29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlByb2Nl
c3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vz
c2VzKCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFs
bFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dyb3Vu
ZFdlYlByb2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNz
QXNzZXJ0aW9uKCkKIHsKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2ViUHJv
Y2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vz
c2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdyb3Vu
ZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9h
Y3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHko
Ik5ldHdvcmtpbmcgZm9yIGZvcmVncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91
bmQoKSwgMCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAocHJv
Y2Vzc1Bvb2woKS5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJv
Y2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9j
ZXNzVGhyb3R0bGVyOjppc1ZhbGlkQmFja2dyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2Vi
UHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0
aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91bmQg
dmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0JhY2tncm91bmQoKSwgMCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IGEw
YjRjMWQ4OTM4ZTIwNWVjMzYxZGU1YzEwODI1ZDE4Mjc3NjUzYjQuLmI2NWRiYWJhN2IxNTJmODY1
NjA1MGRmN2E3MGZkMjNhNTZkYTNlZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC00NiwxMiArNDYsMTcgQEAK
IAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIlhQQ0V2ZW50SGFuZGxlci5oIgorI2lu
Y2x1ZGUgPHd0Zi9PU09iamVjdFB0ci5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBJUEMgewogY2xh
c3MgRm9ybURhdGFSZWZlcmVuY2U7CiB9CiAKK25hbWVzcGFjZSBBUEkgeworY2xhc3MgQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50OworfQorCiBuYW1lc3BhY2UgUEFMIHsKIGNsYXNzIFNlc3Np
b25JRDsKIH0KQEAgLTczLDggKzc4LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERv
d25sb2FkUHJveHk7CiBjbGFzcyBEb3dubG9hZFByb3h5TWFwOworY2xhc3MgV2ViQ29va2llTWFu
YWdlclByb3h5OwogY2xhc3MgV2ViUGFnZVByb3h5OwotY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBj
bGFzcyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTsKIAogZW51bSBjbGFzcyBTaG91bGRH
cmFuZGZhdGhlclN0YXRpc3RpY3MgOiBib29sOwpAQCAtODYsOCArOTEsOSBAQCBzdHJ1Y3QgRnJh
bWVJbmZvRGF0YTsKIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIHN0
cnVjdCBSZXNvdXJjZUxvYWRJbmZvOwogc3RydWN0IFdlYnNpdGVEYXRhOworc3RydWN0IFdlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzOwogCi1jbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFs
IDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVy
Q2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4geworY2xh
c3MgTmV0d29ya1Byb2Nlc3NQcm94eSBmaW5hbCA6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJv
eHksIHByaXZhdGUgUHJvY2Vzc1Rocm90dGxlckNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRy
PE5ldHdvcmtQcm9jZXNzUHJveHk+LCBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrUHJvY2Vzc1By
b3h5PiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgdXNpbmcg
UmVnaXN0cmFibGVEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKQEAgLTEwMiwx
MiArMTA4LDE3IEBAIHB1YmxpYzoKICAgICB1c2luZyBEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nl
c3MgPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKICAgICB1c2luZyBPcGVuZXJEb21haW4g
PSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKIAotICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9j
ZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmKTsKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtQcm9jZXNz
UHJveHk+IGRlZmF1bHROZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlJik7CisgICAgc3Rh
dGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBjcmVhdGUoV2Vic2l0ZURhdGFTdG9yZSYgZGF0
YVN0b3JlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtQcm9jZXNzUHJveHkoZGF0YVN0
b3JlKSk7IH0KICAgICB+TmV0d29ya1Byb2Nlc3NQcm94eSgpOwogCisgICAgc3RhdGljIFZlY3Rv
cjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IGFsbE5ldHdvcmtQcm9jZXNzZXMoKTsKKyAgICAK
KyAgICB2b2lkIHRlcm1pbmF0ZSgpIGZpbmFsOworCiAgICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6
R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwogCi0gICAgRG93bmxv
YWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQcm94
eSogb3JpZ2luYXRpbmdQYWdlKTsKKyAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFBy
b3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBXZWJQcm9jZXNzUG9vbCYsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9yaWdp
bmF0aW5nUGFnZSk7CiAKICAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQs
IE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9w
dGlvbj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPiYmKTsKICAgICB2b2lk
IGRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIwNiwxNSArMjE3LDEyIEBAIHB1YmxpYzoKICAgICBQ
cm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSBmaW5hbCB7IHJldHVybiBtX3Rocm90dGxlcjsg
fQogICAgIHZvaWQgdXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwogCi0gICAgV2ViUHJvY2Vzc1Bv
b2wmIHByb2Nlc3NQb29sKCkgeyByZXR1cm4gbV9wcm9jZXNzUG9vbDsgfQotCiAjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKICAgICB2b2lkIGRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYpOwogI2VuZGlmCiAK
LSAgICB2b2lkIGFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYpOwotICAgIGJvb2wg
aGFzU2Vzc2lvbihQQUw6OlNlc3Npb25JRCkgY29uc3Q7Ci0gICAgdm9pZCByZW1vdmVTZXNzaW9u
KFBBTDo6U2Vzc2lvbklEKTsKKyAgICB2b2lkIGFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYp
OworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CiAgICAgCiAjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgdm9pZCBjcmVhdGVTeW1MaW5rRm9yRmlsZVVw
Z3JhZGUoY29uc3QgU3RyaW5nJiBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwpAQCAtMjI5LDYg
KzIzNyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9t
UHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9yTGVn
YWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAKKyAgICB2b2lkIG5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIHZvaWQgcmVzb3VyY2VMb2FkRGlk
U2VuZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVzb3VyY2VMb2FkSW5mbyYmLCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgT3B0aW9uYWw8SVBDOjpGb3JtRGF0YVJlZmVyZW5j
ZT4mJik7CkBAIC0yNDgsNyArMjU4LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUJ1bmRs
ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
ICAgICB2b2lkIGNsZWFyQnVuZGxlSWRlbnRpZmllcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwogCisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyKCkgeyByZXR1
cm4gbV9jb29raWVNYW5hZ2VyLmdldCgpOyB9CisKKyAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgeyByZXR1cm4gbV9jdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuZ2V0KCk7IH0KKworI2lmIFBMQVRGT1JNKENPQ09BKQor
ICAgIHhwY19vYmplY3RfdCB4cGNFbmRwb2ludE1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2Vu
ZHBvaW50TWVzc2FnZS5nZXQoKTsgfQorI2VuZGlmCisKIHByaXZhdGU6CisgICAgZXhwbGljaXQg
TmV0d29ya1Byb2Nlc3NQcm94eShXZWJzaXRlRGF0YVN0b3JlJik7CisKKyAgICB2b2lkIHNlbmRD
cmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM+IGRhdGFTdG9yZVBhcmFtZXRlcnMoKTsKKwogICAgIC8vIEF1eGlsaWFy
eVByb2Nlc3NQcm94eQogICAgIEFTQ0lJTGl0ZXJhbCBwcm9jZXNzTmFtZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuICJOZXR3b3JraW5nIl9zOyB9CiAKQEAgLTI1Niw3ICsyNzksNiBAQCBwcml2YXRl
OgogICAgIHZvaWQgY29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRl
OwogICAgIHZvaWQgcHJvY2Vzc1dpbGxTaHV0RG93bihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlk
ZTsKIAotICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgdm9pZCBjbGVhckNh
bGxiYWNrU3RhdGVzKCk7CiAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudApAQCAtMzEy
LDE2ICszMzQsMTcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHJvY2Vzc0F1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklELCBSZWY8QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94
eT4mJik7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgbV9wcm9jZXNzUG9vbDsKLQogICAgIEhhc2hN
YXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJzaXRlRGF0YSk+PiBtX3Bl
bmRpbmdGZXRjaFdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFDYWxs
YmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnNDYWxsYmFja3M7CiAKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8RG93bmxvYWRQcm94eU1hcD4gbV9kb3dubG9hZFByb3h5TWFwOworCisg
ICAgVW5pcXVlUmVmPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudDsKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9N
QU5BR0VSKQogICAgIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5IG1fY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHk7CiAjZW5kaWYKKwogICAgIFByb2Nlc3NUaHJvdHRsZXIgbV90aHJv
dHRsZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByb2Nlc3NUaHJvdHRsZXI6OkJhY2tncm91bmRB
Y3Rpdml0eT4gbV9hY3Rpdml0eUZvckhvbGRpbmdMb2NrZWRGaWxlczsKICAgICBQcm9jZXNzVGhy
b3R0bGVyOjpBY3Rpdml0eVZhcmlhbnQgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXM7CkBAIC0z
NDcsOSArMzcwLDExIEBAIHByaXZhdGU6CiAgICAgcHJpdmF0ZToKICAgICAgICAgV2Vha1B0cjxO
ZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwogICAgIH07CisgICAgT1NPYmpl
Y3RQdHI8eHBjX29iamVjdF90PiBtX2VuZHBvaW50TWVzc2FnZTsKICNlbmRpZgogCi0gICAgSGFz
aFNldDxQQUw6OlNlc3Npb25JRD4gbV9zZXNzaW9uSURzOworICAgIFdlYWtIYXNoU2V0PFdlYnNp
dGVEYXRhU3RvcmU+IG1fd2Vic2l0ZURhdGFTdG9yZXM7CisgICAgUmVmPFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4gbV9jb29raWVNYW5hZ2VyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eUNvY29hLm1tCmluZGV4IGI4ZGFlZGY3YmViYTFjZDgxZjZlNTI0NDk2MDMxMGYx
MzMxMGMxMWUuLjBlNWZhZWMxYjNhYWU3OTI0NTRhODk5MDEyYzk2NzRjM2MyZTg0MTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eUNvY29hLm1tCkBAIC01MSw4ICs1MSwxMSBAQCBib29sIE5ldHdvcmtQcm9jZXNz
UHJveHk6OlhQQ0V2ZW50SGFuZGxlcjo6aGFuZGxlWFBDRXZlbnQoeHBjX29iamVjdF90IGV2ZW50
KSBjbwogICAgIGlmIChtZXNzYWdlTmFtZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDQ29u
c3RhbnRzOjp4cGNMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDRW5kcG9pbnRNZXNzYWdlTmFtZSkK
LSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kTmV0d29ya1Byb2Nl
c3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhldmVudCk7CisgICAgaWYgKG1lc3NhZ2VOYW1lID09
IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6OnhwY0xhdW5jaFNlcnZpY2VzRGF0
YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKSB7CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
Pm1fZW5kcG9pbnRNZXNzYWdlID0gZXZlbnQ7CisgICAgICAgIGZvciAoYXV0byYgZGF0YVN0b3Jl
IDogbV9uZXR3b3JrUHJvY2Vzcy0+bV93ZWJzaXRlRGF0YVN0b3JlcykKKyAgICAgICAgICAgIGRh
dGFTdG9yZS5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvQWxsV2ViUHJvY2Vzc2VzKCk7
CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAppbmRleCBjYzUyNmFhZjNhYWZiMWMxNDZk
YTRiMjQxOTQ1OWIxMDkyMDFiNjEwLi4wODVlN2QyNjVhMTM3MzViZTdhMTI3OGVjMWRmYjYzZmQ1
ZGQ1ZDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5h
Z2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2lu
Y2x1ZGUgIkFQSVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJPcHRp
b25hbENhbGxiYWNrSUQuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgpAQCAtMzksMjQgKzQw
LDE2IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1j
b25zdCBjaGFyKiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN1cHBsZW1lbnROYW1lKCkKK1dlYkNv
b2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KE5ldHdvcmtQcm9jZXNzUHJv
eHkmIG5ldHdvcmtQcm9jZXNzKQorICAgIDogbV9uZXR3b3JrUHJvY2VzcyhtYWtlV2Vha1B0cihu
ZXR3b3JrUHJvY2VzcykpCiB7Ci0gICAgcmV0dXJuICJXZWJDb29raWVNYW5hZ2VyUHJveHkiOwot
fQotCi1SZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNy
ZWF0ZShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KHByb2Nlc3NQb29sKSk7Ci19Ci0KLVdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKiBwcm9j
ZXNzUG9vbCkKLSAgICA6IFdlYkNvbnRleHRTdXBwbGVtZW50KHByb2Nlc3NQb29sKQotewotICAg
IFdlYkNvbnRleHRTdXBwbGVtZW50Ojpwcm9jZXNzUG9vbCgpLT5hZGRNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAq
dGhpcyk7CisgICAgbmV0d29ya1Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogfQog
CiBXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5hZ2VyUHJveHkoKQogeworICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5yZW1vdmVN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpKTsKICAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsK
IH0KIApAQCAtNjUsMTAyICs1OCw4NCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6aW5p
dGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKiBjbAogICAgIG1f
Y2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKIH0KIAotLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQK
LQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NQb29sRGVzdHJveWVkKCkKLXsK
LSAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnM7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZl
clNldCA6IG1fY29va2llT2JzZXJ2ZXJzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byog
b2JzZXJ2ZXIgOiBvYnNlcnZlclNldCkKLSAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQob2Jz
ZXJ2ZXIpOwotICAgIH0KLQotICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlcnMpCi0g
ICAgICAgIG9ic2VydmVyLT5tYW5hZ2VyRGVzdHJveWVkKCk7Ci0KLSAgICBBU1NFUlQobV9jb29r
aWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKQotewot
fQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQo
KQotewotICAgIEFQSTo6T2JqZWN0OjpyZWYoKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0Ojpk
ZXJlZigpOwotfQotCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzV2l0
aENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0
d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAg
IG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFu
YWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0
aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKIHsK
LSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZO
ZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0
bmFtZXMoc2Vzc2lvbklELCBob3N0bmFtZXMpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
KyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyksIDApOwog
fQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNz
KQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgQ29va2llJiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNv
b2tpZSksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKV0oKSBt
dXRhYmxlIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxl
dGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsK
KyAgICBlbHNlCiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKLSAgICB9KTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2FsbFRpbWUgdGltZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9j
ZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRl
QWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7
CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3
b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6
OlNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24p
KTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUo
c2Vzc2lvbklELCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxz
ZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9y
PENvb2tpZT4mIGNvb2tpZXMsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIG1haW5Eb2N1bWVu
dFVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0g
ICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFp
bkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tp
ZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7Cisg
ICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9u
KQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92
ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rp
b24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2ll
PiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vz
cy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tp
ZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwg
dXJsKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxs
YmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFy
dE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAg
IHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vz
c2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFu
Z2VzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25l
dHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2Vy
dmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxh
dW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2
aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
KyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmIGNhbGxiYWNrKQpAQCAt
MjExLDE4ICsxODYsMTggQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNvb2tpZXNEaWRD
aGFuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFj
a0Z1bmN0aW9uKQogewotI2lmIFVTRShTT1VQKQotICAgIHByb2Nlc3NQb29sKCktPnNldEluaXRp
YWxIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAgIGF1dG8mIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAg
ICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rp
b24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAotdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNz
aW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYg
Y2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewot
ICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwgV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFu
YWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oSFRUUENv
b2tpZUFjY2VwdFBvbGljeTo6TmV2ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKaW5kZXgg
MGJkZmMwZDRlNDdjNDM2ZjU4NWNmMjljMDlkNTFhMjliYzgxMWE5ZC4uNmY1MWYwM2U1YzBjYTg5
NDEyMzM0Mzc3YjU1NDNkODIyY2MyZmVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKQEAgLTU2LDExICs1Niw5IEBAIHR5cGVkZWYgR2Vu
ZXJpY0NhbGxiYWNrPEFQSTo6QXJyYXkqPiBBcnJheUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmlj
Q2FsbGJhY2s8V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeT4gSFRUUENvb2tpZUFjY2Vw
dFBvbGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7CiAKLWNsYXNzIFdlYkNvb2tpZU1h
bmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNv
b2tpZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1lbnQsIHByaXZhdGUgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQ
STo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHByaXZhdGUg
SVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBz
dXBwbGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+
IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRpYyBSZWY8V2ViQ29va2llTWFuYWdl
clByb3h5PiBjcmVhdGUoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KG5ldHdvcmtQcm9jZXNzKSk7
IH0KICAgICB2aXJ0dWFsIH5XZWJDb29raWVNYW5hZ2VyUHJveHkoKTsKIAogICAgIHZvaWQgaW5p
dGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKik7CkBAIC0xMDQs
MTcgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQVBJOjpPYmplY3Q6OmRlcmVmOwogCiBw
cml2YXRlOgotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCopOworICAg
IFdlYkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAKICAgICB2b2lk
IGNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gV2ViQ29udGV4dFN1
cHBsZW1lbnQKLSAgICB2b2lkIHByb2Nlc3NQb29sRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZv
aWQgcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlcmVmV2Vi
Q29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLQogICAgIC8vIElQQzo6TWVzc2FnZVJlY2Vp
dmVyCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKSBvdmVycmlkZTsKIApAQCAtMTI1LDYgKzExNiw3IEBAIHByaXZhdGU6CiAgICAgSGFz
aE1hcDxQQUw6OlNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPj4gbV9sZWdhY3lDb29r
aWVPYnNlcnZlcnM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgSGFzaFNldDxPYnNlcnZl
cio+PiBtX2Nvb2tpZU9ic2VydmVyczsKIAorICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94
eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHlDbGllbnQgbV9j
bGllbnQ7CiAKICNpZiBVU0UoU09VUCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCmluZGV4IGQzYjhjMzU1NDBmM2YyNDU2ZjcxMDU1ZjViNGQ3YTc4MjI2MGQzODcuLjQ5
Y2VlYjIyODkyZjI0NTE4MWE0NDgwOTU5ZGM4MzRhMTVlZjhkNWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTc0Niw3ICsxNzQ2LDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oYm9vbCBjb250cm9sbGVkKQogICAg
ICAgICByZXR1cm47CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb250cm9sbGVk
QnlBdXRvbWF0aW9uKGNvbnRyb2xsZWQpKTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCku
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXNz
aW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbikpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5u
ZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXNzaW9u
SXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbiksIDApOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6
Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQpAQCAtMzIxMCwxMSArMzIxMCw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5Ojppc0ZvcmNlZEludG9BcHBCb3VuZE1vZGVUZXN0aW5nKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+CiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlzYWJsZVNlcnZpY2VXb3JrZXJF
bnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MoKQogewogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9N
QUlOUykgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCAwKTsKLSAgICB9CisgICAg
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnQoKSwgMCk7CiAjZW5kaWYK
IH0KIApAQCAtMzIyMywxMyArMzIxOSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjbGVhclNlcnZp
Y2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoCiAjaWYg
RU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJQYWdlOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9w
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFu
ZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3Mo
KS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZp
Y2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAjZW5kaWYKQEAgLTQ0MjksNyArNDQx
OSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8oY29uc3QgVVJMJiB1cmwpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPSBtX2Nh
blVzZUNyZWRlbnRpYWxTdG9yYWdlID8gV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6
OlVzZSA6IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZTsKLSAgICBt
X3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5wcmVjb25uZWN0
VG8oc2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlEKCksIHVybCwgdXNlckFnZW50
KCksIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWlu
KCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnByZWNvbm5lY3RU
byhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQoKSwgdXJsLCB1c2VyQWdlbnQo
KSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4o
KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDYW5Vc2VDcmVkZW50aWFsU3RvcmFnZShi
b29sIGNhblVzZUNyZWRlbnRpYWxTdG9yYWdlKQpAQCAtNDcyNSw3ICs0NzE1LDcgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZShGcmFtZUlkZW50aWZpZXIgZnJhbWVJ
RCwgRnJhbWVJbmZvRGF0YSYKICAgICAgICAgICAgIFJlZ2lzdHJhYmxlRG9tYWluIGN1cnJlbnRE
b21haW4geyBjdXJyZW50UmVxdWVzdC51cmwoKSB9OwogICAgICAgICAgICAgVVJMIHJlcXVlc3Rl
clVSTCB7IFVSTCgpLCByZXF1ZXN0ZXJPcmlnaW4udG9TdHJpbmcoKSB9OwogICAgICAgICAgICAg
aWYgKCFjdXJyZW50RG9tYWluLm1hdGNoZXMocmVxdWVzdGVyVVJMKSkKLSAgICAgICAgICAgICAg
ICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRh
VHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21h
aW4geyByZXF1ZXN0ZXJVUkwgfSwgY3VycmVudERvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zl
ciwgbV9pZGVudGlmaWVyLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgICAgICAgICAgbV93ZWJzaXRl
RGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0
YVRyYW5zZmVyKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxlRG9t
YWluIHsgcmVxdWVzdGVyVVJMIH0sIGN1cnJlbnREb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNm
ZXIsIG1faWRlbnRpZmllciwgbV93ZWJQYWdlSUQpOwogICAgICAgICB9CiAjZW5kaWYKICAgICB9
CkBAIC00NzYzLDcgKzQ3NTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZv
ckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUluZm9EYXRhJgogICAgIGlmIChu
YXZpZ2F0aW9uICYmIGZyYW1lLT5pc01haW5GcmFtZSgpKSB7CiAgICAgICAgIGlmIChhdXRvJiBh
ZENsaWNrQXR0cmlidXRpb24gPSBuYXZpZ2F0aW9uLT5hZENsaWNrQXR0cmlidXRpb24oKSkgewog
ICAgICAgICAgICAgaWYgKGFkQ2xpY2tBdHRyaWJ1dGlvbi0+ZGVzdGluYXRpb24oKS5tYXRjaGVz
KGZyYW1lLT51cmwoKSkpCi0gICAgICAgICAgICAgICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgp
LnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3RvcmVB
ZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKmFkQ2xp
Y2tBdHRyaWJ1dGlvbikpOworICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3
b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yZUFkQ2xpY2tB
dHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqYWRDbGlja0F0dHJp
YnV0aW9uKSwgMCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUzNzcsNyArNTM2Nyw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgV2ViRnJhbWVQcm94eSYg
ZnJhbWUsIGNvbnN0IFVSTCYgcGFnCiAgICAgaWYgKHRhcmdldEhvc3QuaXNFbXB0eSgpIHx8IG1h
aW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3QgPT0gc291cmNlVVJMLmhvc3QoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TG9nRnJhbWVOYXZpZ2F0
aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxlRG9tYWluIHsg
dGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVSTCB9LCBSZWdpc3RyYWJsZURv
bWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5pc01haW5GcmFtZSgpLCBNb25v
dG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yTWFpbkZyYW1lVGlt
ZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlcikpOworICAgIHdlYnNpdGVEYXRh
U3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpM
b2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0
cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBwYWdlVVJMIH0s
IFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVkaXJlY3QsIGZyYW1lLmlzTWFp
bkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRGaW5pc2hEb2N1bWVudExvYWRG
b3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyKSwgMCk7
CiB9CiAjZW5kaWYKIApAQCAtMTAwMDIsNTggKzk5OTIsMjcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OnN5c3RlbVByZXZpZXdBY3Rpb25UcmlnZ2VyZWQoY29uc3QgV2ViQ29yZTo6U3lzdGVtUHJldmll
d0luZm8KIAogdm9pZCBXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24oQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCku
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5k
TWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihlbXB0eVN0cmluZygp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xp
Y2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29y
a1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpE
dW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjbGVh
ckFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5w
cm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJv
Y2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJBZENs
aWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlv
bihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3Zl
cnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlm
ICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vic2l0
ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmli
dXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQ
YWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNz
UG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+
Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJp
YnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJz
aXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9y
VGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0
dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1f
cHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICgh
bmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRh
U3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0K
KyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhw
aXJlZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IGQ5MjZiMzNj
YmRmMmJiOGJiOTgwZDYzYzVkYzUyYWU1MjUwOTI1MjkuLjcxZjFmNjM4ZGMzM2Y0ZTQxODI1NmQ2
NjgxY2Y4NDRmODJiOTQxYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5jcHAKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlICJMZWdhY3lHbG9iYWxTZXR0aW5n
cy5oIgogI2luY2x1ZGUgIkxvZ0luaXRpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgotI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKICNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9j
ZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCkBAIC0xNDMs
OCArMTQyLDEwIEBACiAjZW5kaWYKIAogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xP
RyhjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIiVwIC0gV2ViUHJvY2Vz
c1Bvb2w6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBXRUJQUk9DRVNTUE9P
TF9SRUxFQVNFX0xPR19TVEFUSUMoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HKGNoYW5u
ZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIFdFQlBS
T0NFU1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xP
R19FUlJPUihjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19W
QV9BUkdTX18pCiAjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQo
Y2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lGKHNlc3Npb25JRC5pc0Fsd2F5c09uTG9n
Z2luZ0FsbG93ZWQoKSwgY2hhbm5lbCwgIiVwIC0gV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlz
LCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9B
TExPV0VEX1NUQVRJQyhjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfSUYoc2Vzc2lvbklE
LmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAiV2ViUHJvY2Vzc1Bvb2w6OiIg
Zm10LCAjI19fVkFfQVJHU19fKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwpAQCAtMjMyLDYgKzIzMywxMSBAQCBzdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFT
Q0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdAog
ICAgIHJldHVybiBzZXQ7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IFdlYlByb2Nlc3NQb29sOjp1cmxT
Y2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQoreworICAgIHJldHVybiBjb3B5VG9W
ZWN0b3IoZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpOworfQor
CiBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgOiBtX2NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlv
bi5jb3B5KCkpCiAgICAgLCBtX2RlZmF1bHRQYWdlR3JvdXAoV2ViUGFnZUdyb3VwOjpjcmVhdGUo
KSkKQEAgLTIzOSw3ICsyNDUsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJ
OjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgLCBtX2F1dG9t
YXRpb25DbGllbnQobWFrZVVuaXF1ZTxBUEk6OkF1dG9tYXRpb25DbGllbnQ+KCkpCiAgICAgLCBt
X2Rvd25sb2FkQ2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSkKICAg
ICAsIG1faGlzdG9yeUNsaWVudChtYWtlVW5pcXVlPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlD
bGllbnQ+KCkpCi0gICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVl
PEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogICAgICwgbV92aXNpdGVkTGlu
a1N0b3JlKFZpc2l0ZWRMaW5rU3RvcmU6OmNyZWF0ZSgpKQogI2lmIFBMQVRGT1JNKE1BQykKICAg
ICAsIG1faGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXIobWFrZVVuaXF1ZTxIaWdo
UGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlcj4oKnRoaXMpKQpAQCAtMjY3LDkgKzI3Miw2
IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmln
dXJhdGlvbiYgY29uZmlndXJhdGlvbikKICNlbmRpZgogICAgIH0pOwogCi0gICAgaWYgKCFtX3dl
YnNpdGVEYXRhU3RvcmUgJiYgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlRXhpc3RzKCkpCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpOwotCiAgICAgZm9yIChhdXRvJiBzY2hlbWUg
OiBtX2NvbmZpZ3VyYXRpb24tPmFsd2F5c1JldmFsaWRhdGVkVVJMU2NoZW1lcygpKQogICAgICAg
ICBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNBbHdheXNSZXZhbGlkYXRlZC5hZGQoc2NoZW1lKTsKIApA
QCAtMjg1LDcgKzI4Nyw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlBy
b2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICBhZGRNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0
aGlzKTsKIAogICAgIC8vIE5PVEU6IFRoZXNlIHN1Yi1vYmplY3RzIG11c3QgYmUgaW5pdGlhbGl6
ZWQgYWZ0ZXIgbV9tZXNzYWdlUmVjZWl2ZXJNYXAuLgotICAgIGFkZFN1cHBsZW1lbnQ8V2ViQ29v
a2llTWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5h
Z2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJv
eHk+KCk7CiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCkBAIC0zNDIsOSArMzQzLDYgQEAgV2Vi
UHJvY2Vzc1Bvb2w6On5XZWJQcm9jZXNzUG9vbCgpCiAgICAgcHJvY2Vzc1Bvb2xDb3VudGVyLmRl
Y3JlbWVudCgpOwogI2VuZGlmCiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2h1dERvd25Qcm9jZXNzKCk7Ci0KICNpZiBFTkFCTEUoR0FNRVBB
RCkKICAgICBpZiAoIW1fcHJvY2Vzc2VzVXNpbmdHYW1lcGFkcy5pc0VtcHR5KCkpCiAgICAgICAg
IFVJR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5wcm9jZXNzUG9vbFN0b3BwZWRVc2luZ0dh
bWVwYWRzKCp0aGlzKTsKQEAgLTQwMiwxNiArNDAwLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50
PiYKICAgICAgICAgbV9hdXRvbWF0aW9uQ2xpZW50ID0gV1RGTW92ZShhdXRvbWF0aW9uQ2xpZW50
KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dD4mJiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi17Ci0jaWYgRU5BQkxFKExFR0FDWV9D
VVNUT01fUFJPVE9DT0xfTUFOQUdFUikKLSAgICBpZiAoIWN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCkKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBtYWtlVW5pcXVl
PEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpOwotICAgIGVsc2UKLSAgICAgICAg
bV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBXVEZNb3ZlKGN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q3VzdG9t
V2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgY3VzdG9tV2Vi
Q29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKQogewogICAgIC8vIEd1YXJkIGFnYWluc3Qg
QVBJIG1pc3VzZS4KQEAgLTQyMSwxMSArNDA5LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0
Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgY3UK
ICAgICBtX2NvbmZpZ3VyYXRpb24tPnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRl
bnRpZmllcihjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIpOwogfQogCi1J
UEM6OkNvbm5lY3Rpb24qIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rp
b24oKQotewotICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzLT5jb25uZWN0aW9uKCk7Ci19Ci0K
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCh2b2lkKiBjb250ZXh0KQogewog
ICAgIHN0YXRpY19jYXN0PFdlYlByb2Nlc3NQb29sKj4oY29udGV4dCktPmxhbmd1YWdlQ2hhbmdl
ZCgpOwpAQCAtNDM1LDggKzQxOCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hh
bmdlZCgpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpV
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCgpKTsKICNpZiBVU0UoU09VUCkKLSAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKHVzZXJQcmVm
ZXJyZWRMYW5ndWFnZXMoKSksIDApOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwg
MCk7CiAjZW5kaWYKIH0KIApAQCAtNDQ5LDcgKzQzMSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OmZ1bGxLZXlib2FyZEFjY2Vzc01vZGVDaGFuZ2VkKGJvb2wgZnVsbEtleWJvYXJkQWNjZXNzRW5h
YmxlCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudChib29sIGlz
Q3JpdGljYWwpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpBdXhpbGlhcnlQ
cm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSk7Ci0gICAg
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJl
Y2VpdmVNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpKTsKKyAgICBmb3IgKGF1dG8gbmV0
d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkp
CisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNz
OjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSwgMCk7CiAjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmds
ZXRvbigpLnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpOwogI2VuZGlmCkBAIC00
NzQsMjc1ICs0NTcsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzY3JlZW5Qcm9wZXJ0aWVzU3Rh
dGVDaGFuZ2VkKCkKICNlbmRpZgogfQogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNz
UG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVE
YXRhU3RvcmUpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICAv
LyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdl
YktpdCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KLSAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRo
aXMgb25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMu
Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4K
LSAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7Ci0gICAgICAgIGNhbGxPbk1haW5SdW5Mb29w
QW5kV2FpdChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAg
ICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJu
ICptX25ldHdvcmtQcm9jZXNzOwotICAgIH0KLQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7
Ci0gICAgICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwot
ICAgICAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0g
ICAgYXV0byBuZXR3b3JrUHJvY2VzcyA9IG1ha2VVbmlxdWU8TmV0d29ya1Byb2Nlc3NQcm94eT4o
KnRoaXMpOwotCi0gICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVy
czsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IGNvcHlUb1ZlY3Rvciht
X3dlYnNpdGVEYXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwotICAgICAgICBtX3dlYnNpdGVE
YXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0gbV93ZWJzaXRl
RGF0YVN0b3JlLT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlm
aWVyKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmll
ciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxpY2F0aW9u
U2Vjb25kYXJ5SWRlbnRpZmllcigpOwotI2VuZGlmCi0gICAgfQotCi0gICAgcGFyYW1ldGVycy5j
YWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwo
KTsKLQotICAgIGZvciAoYXV0byYgc2NoZW1lIDogZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Q
cm90b2NvbEhhbmRsZXJzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVy
ZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7Ci0KLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotICAgIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bv
b2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvb2tpZVN0b3JhZ2VEaXJl
Y3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5j
b29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBjb250
YWluZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ0NhY2hlc0Rp
cmVjdG9yeSgpOwotICAgIGlmICghY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1wdHkoKSkK
LSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVj
dG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBpZiAo
IXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246
OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxlKGVtcHR5U3RyaW5nKCksIFNhbmRi
b3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzU2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24o
KS5zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1l
c1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3Rv
cihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5
cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVt
ZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6
c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOwotICAgIHBhcmFtZXRlcnMu
dXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2Jh
bFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7Ci0K
LSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAvLyAqKioqKioqKioKLSAgICAvLyBJ
TVBPUlRBTlQ6IERvIG5vdCBjaGFuZ2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGluZGV4
ZWQgZGF0YWJhc2VzIG9uIGRpc2sgd2l0aG91dCBmaXJzdCBjb25zdWx0aW5nIGEgcmV2aWV3ZXIg
ZnJvbSBBcHBsZSAoPHJkYXI6Ly9wcm9ibGVtLzE3NDU0NzEyPikKLSAgICAvLyAqKioqKioqKioK
LSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURh
dGFTdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlm
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAg
ICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS0+cGFyYW1ldGVycygpLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAo
IXBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5LmlzRW1wdHkoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPmNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7
Ci0gICAgfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgaWYgKG1f
d2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29y
a2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5zZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBhdXRv
IGxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURh
dGFTdG9yZS0+cmVzb2x2ZWRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsK
LSAgICBpZiAoIWxvY2FsU3RvcmFnZURpcmVjdG9yeSkKLSAgICAgICAgbG9jYWxTdG9yYWdlRGly
ZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TG9jYWxTdG9yYWdlRGly
ZWN0b3J5KCk7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2Nh
bFN0b3JhZ2VEaXJlY3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURp
cmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0byBjYWNoZVN0b3JhZ2VEaXJl
Y3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPmNhY2hlU3Rv
cmFnZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghY2FjaGVTdG9yYWdlRGly
ZWN0b3J5LmlzRW1wdHkoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gV1RGTW92ZShjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOwot
ICAgIH0KLQotICAgIFN0cmluZyByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5OwotICAg
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29s
dmVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5OwotICAgIAotICAg
IGlmICghcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShyZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyA9IGZhbHNlOwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rl
c3RpbmdFdmVudCA9IGZhbHNlOwotICAgIGJvb2wgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IHRy
dWU7Ci0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gZmFs
c2U7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBXZWJDb3JlOjpU
aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUg
PSBXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpBbGw7Ci0gICAgV2ViQ29y
ZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgc2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudEVuYWJsZWQgPSBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6
Tm87Ci0jZW5kaWYKLSAgICBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZSBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IFdlYkNvcmU6OkZpcnN0UGFydHlX
ZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzOwotICAgIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICBIYXNoU2V0PFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBhcHBCb3VuZERvbWFpbnM7Ci0gICAgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4gbWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0KLSNpZiBQTEFURk9S
TShDT0NPQSkKLSAgICBtX3RjY1ByZWZlcmVuY2VFbmFibGVkID0gZG9lc0FwcEhhdmVJVFBFbmFi
bGVkKCk7Ci0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlICYmICF3aXRoV2Vic2l0ZURhdGFT
dG9yZS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgd2l0aFdl
YnNpdGVEYXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJl
c291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0YVN0b3Jl
ICYmICFtX3dlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAg
ICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJs
ZWQ7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlIGlmIChX
ZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkgJiYgIVdlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewot
ICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5h
YmxlZDsKLSAgICAgICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5zZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1f
dGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0jZW5kaWYKLQotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFT
dG9yZSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gd2l0aFdlYnNp
dGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5oYXNTdGF0aXN0
aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZElu
Y2x1ZGVMb2NhbGhvc3Q7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGVidWdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQYXJhbWV0ZXJzLmVuYWJsZURlYnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQotICAgICAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50
aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudEVuYWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BhcmFtZXRlcnMuc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0j
ZW5kaWYKLSAgICAgICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZp
cnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOwotICAgICAgICAgICAgc3RhbmRhbG9uZUFw
cGxpY2F0aW9uRG9tYWluID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NQYXJhbWV0ZXJzLnN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICAgICAg
ICAgIGFwcEJvdW5kRG9tYWlucyA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGFyYW1ldGVycy5hcHBCb3VuZERvbWFpbnM7Ci0gICAgICAgICAgICBtYW51
YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGFyYW1ldGVycy5tYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAg
fQotCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3Jp
Z2luU3RvcmFnZVF1b3RhID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VR
dW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBl
clRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGVy
VGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICAKLSAgICAgICAgY29uc3Qg
YXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc29s
dmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0NhY2hlRGly
ZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3Rv
cnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpU
eXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBhdXRvJiBoc3RzU3RvcmFnZURpcmVjdG9y
eSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEhTVFNTdG9yYWdlRGlyZWN0b3J5KCk7
Ci0gICAgICAgIGlmICghaHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7Ci0g
ICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoaHN0c1N0b3JhZ2VEaXJl
Y3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICht
X3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsK
LSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5o
YXNTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5z
aG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFt
ZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAgIHNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFi
bGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAgICAgIHN0YW5k
YWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0g
ICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91bmREb21haW5zOwotICAgICAgICAg
ICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0g
ICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
LnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3Rv
cmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+
cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotCi0gICAgICAgIGNvbnN0IGF1dG8m
IG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3
b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3Rvcnku
aXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5l
dHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJl
YWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNvbnN0IGF1dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEhTVFNTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgICAg
IGlmICghaHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoaHN0c1N0b3JhZ2VEaXJlY3RvcnksIFNh
bmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYg
KFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgICAg
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGF0YVN0b3JlKCktPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0gICAgICAgIGF1
dG8gbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdE5ldHdv
cmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3Rvcnkg
PSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJl
YWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAg
ICB9Ci0KLSNpZiBIQVZFKENGTkVUV09SS19BTFRFUk5BVElWRV9TRVJWSUNFKQotICAgIGlmIChX
ZWJzaXRlRGF0YVN0b3JlOjpodHRwM0VuYWJsZWQoKSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5h
dGl2ZVNlcnZpY2VEaXJlY3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0QWx0ZXJuYXRp
dmVTZXJ2aWNlc0RpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIXBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2Vy
dmljZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNl
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5odHRwM0VuYWJsZWQgPSB0cnVlOwotICAgIH0KLSNlbmRpZgot
ICAgIGJvb2wgaXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQgPSBmYWxzZTsKLSAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycyA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJh
bWV0ZXJzIHsKLSAgICAgICAgV1RGTW92ZShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
KSwKLSAgICAgICAgV1RGTW92ZShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKSwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcywKLSAgICAg
ICAgaXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQsCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQsCi0gICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3Qs
Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUsCi0jaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJs
b2NraW5nTW9kZSwKLSAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQsCi0j
ZW5kaWYKLSAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUsCi0gICAgICAg
IHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiwKLSAgICAgICAgYXBwQm91bmREb21haW5zLAot
ICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSwKLSAgICB9OwotCi0gICAgLy8gQWRkIGFu
eSBwbGF0Zm9ybSBzcGVjaWZpYyBwYXJhbWV0ZXJzCi0gICAgcGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBuZXR3b3Jr
IHByb2Nlc3MuCi0gICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpJbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyksIDApOwotCi0jaWYgUExB
VEZPUk0oQ09DT0EpCi0gICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRRT1MobmV0d29ya1Byb2Nlc3NMYXRlbmN5UU9TKCksIG5ldHdvcmtQcm9jZXNz
VGhyb3VnaHB1dFFPUygpKSwgMCk7Ci0jZW5kaWYKLQotICAgIG5ldHdvcmtQcm9jZXNzLT51cGRh
dGVQcm9jZXNzQXNzZXJ0aW9uKCk7Ci0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsK
LSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdlYnNpdGVE
YXRhU3RvcmUpKTsKLSAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nv
b2tpZXMoKTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIG5ldHdvcmsgcHJvY2VzcyBr
bm93cyBhYm91dCBhbGwgdGhlIHNlc3Npb25zIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgYmVm
b3JlIGl0IHN0YXJ0ZWQuCi0gICAgZm9yIChhdXRvJiBzZXNzaW9uSUQgOiBtX3Nlc3Npb25Ub1Bh
Z2VJRHNNYXAua2V5cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0g
V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklE
KHNlc3Npb25JRCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigqd2Vi
c2l0ZURhdGFTdG9yZSk7Ci0gICAgfQotCi0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IFdURk1vdmUo
bmV0d29ya1Byb2Nlc3MpOwotICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLX0KLQogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJv
eHkmIG5ldHdvcmtQcm9jZXNzUHJveHkpCiB7Ci0gICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3Mp
OwotICAgIEFTU0VSVCgmbmV0d29ya1Byb2Nlc3NQcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdl
dCgpKTsKLQogICAgIGZvciAoYXV0byYgc3VwcGxlbWVudCA6IG1fc3VwcGxlbWVudHMudmFsdWVz
KCkpCiAgICAgICAgIHN1cHBsZW1lbnQtPnByb2Nlc3NEaWRDbG9zZSgmbmV0d29ya1Byb2Nlc3NQ
cm94eSk7CiAKQEAgLTc1MSw5ICs0NjcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcgogICAg
IGlmIChtX2F1dG9tYXRpb25TZXNzaW9uKQogICAgICAgICBtX2F1dG9tYXRpb25TZXNzaW9uLT50
ZXJtaW5hdGUoKTsKIAotICAgIC8vIExlYXZlIHRoZSBwcm9jZXNzIHByb3h5IGFyb3VuZCBkdXJp
bmcgY2xpZW50IGNhbGwsIHNvIHRoYXQgdGhlIGNsaWVudCBjb3VsZCBxdWVyeSB0aGUgcHJvY2Vz
cyBpZGVudGlmaWVyLgotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOwotCiAgICAgdGVy
bWluYXRlU2VydmljZVdvcmtlcnMoKTsKIH0KIApAQCAtNzY0LDIwICs0NzcsNiBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc0NyYXNoZWQoV2ViUHJvY2Vzc1Byb3h5
JiBwcm94eSkKICNlbmRpZgogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJl
cGx5JiYgcmVwbHkpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdv
cmtQcm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1Byb3h5LCBb
dGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHdlYlByb2Nlc3NQcm94eSA9IG1h
a2VXZWFrUHRyKHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0gV1RGTW92ZShyZXBseSldIChhdXRv
JiBjb25uZWN0aW9uSW5mbykgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghSVBDOjpD
b25uZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSW5mby5pZGVudGlmaWVyKCkp
ICYmIHdlYlByb2Nlc3NQcm94eSAmJiB3ZWFrVGhpcykpIHsKLSAgICAgICAgICAgIFdFQlBST0NF
U1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKFByb2Nlc3MsICJnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb246IEZhaWxlZCBmaXJzdCBhdHRlbXB0LCByZXRyeWluZyIpOwotICAgICAgICAgICAgZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqd2ViUHJvY2Vzc1Byb3h5LCBXVEZNb3ZlKHJlcGx5KSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcmVwbHkoY29ubmVjdGlv
bkluZm8pOwotICAgIH0pOwotfQotCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6Z3B1UHJvY2Vzc0NyYXNoZWQoUHJvY2Vzc0lEIGlkZW50aWZpZXIpCiB7CkBA
IC04MDEsMjMgKzUwMCwyNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpnZXRHUFVQcm9jZXNzQ29u
bmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwgTQogfQogI2VuZGlmCiAK
K2Jvb2wgV2ViUHJvY2Vzc1Bvb2w6OnNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9
IGZhbHNlOworCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdv
cmtQcm9jZXNzUHJveHkmIHByb3h5LCBSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9t
YWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHByb3h5LCAmcHJveHkg
PT0gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKSk7CisgICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9
IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25J
RCk7CisgICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKQorICAgICAgICB3ZWJzaXRlRGF0YVN0b3Jl
ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOworICAgIGlmICgh
cHJvY2Vzc1Bvb2xzKCkuc2l6ZSgpKQorICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVm
PFdlYlByb2Nlc3NQb29sPj4gc2VydmljZVdvcmtlclByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29s
OjpjcmVhdGUoQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OmNyZWF0ZSgpLmdldCgpKSk7
CiAKLSAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3Rp
bmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7Ci0KLSAgICBpZiAo
IXdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUpCi0g
ICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLSAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSA9IG1f
d2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsKLSAgICB9CisgICAgLy8gQXJiaXRyYXJpbHkgY2hvb3Nl
IHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wgdG8gaG9zdCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vz
cy4KKyAgICBhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29scygpWzBdOworICAgIEFTU0VS
VChwcm9jZXNzUG9vbCk7CiAKICAgICBXZWJQcm9jZXNzUHJveHkqIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHkgeyBudWxscHRyIH07Ci0gICAgaWYgKCFtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MpIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsK
LSAgICAgICAgICAgIGlmIChwcm9jZXNzID09IG1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9jZXNz
LT5pc0R1bW15UHJvY2Vzc1Byb3h5KCkpCisKKyAgICBpZiAoIXNfdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcykgeworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBwcm9jZXNzUG9v
bC0+bV9wcm9jZXNzZXMpIHsKKyAgICAgICAgICAgIGlmIChwcm9jZXNzID09IHByb2Nlc3NQb29s
LT5tX3ByZXdhcm1lZFByb2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94eSgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCZwcm9jZXNzLT53ZWJz
aXRlRGF0YVN0b3JlKCkgIT0gd2Vic2l0ZURhdGFTdG9yZSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKQEAgLTgyNSwzNSArNTI3LDM1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlz
aFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNz
UHJveHkgPSBwcm9jZXNzLmdldCgpOwotICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eS0+ZW5hYmxlU2VydmljZVdvcmtlcnModXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmll
ckZvclNlcnZpY2VXb3JrZXJzKCkpOworICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eS0+ZW5hYmxlU2VydmljZVdvcmtlcnMocHJvY2Vzc1Bvb2wtPnVzZXJDb250ZW50Q29udHJv
bGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpKTsKIAotICAgICAgICAgICAgV0VCUFJP
Q0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNo
V29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIHJldXNpbmcgYW4gZXhpc3Rp
bmcgd2ViIHByb2Nlc3MgKHByb2Nlc3M9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsK
KyAgICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElD
KFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29y
a1Byb2Nlc3MgcmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0lcCwgUElE
PSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJv
eHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICB9CiAKICAgICBpZiAoIXNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpIHsKLSAgICAgICAg
YXV0byBuZXdQcm9jZXNzUHJveHkgPSBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZUZvclNlcnZpY2VX
b3JrZXJzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgKndlYnNpdGVEYXRhU3Rv
cmUpOworICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6Y3Jl
YXRlRm9yU2VydmljZVdvcmtlcnMoKnByb2Nlc3NQb29sLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9t
YWluKSwgKndlYnNpdGVEYXRhU3RvcmUpOwogICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1By
b3h5ID0gbmV3UHJvY2Vzc1Byb3h5LnB0cigpOwogCi0gICAgICAgIFdFQlBST0NFU1NQT09MX1JF
TEVBU0VfTE9HX0lGX0FMTE9XRUQoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRl
eHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyBjcmVhdGluZyBhIG5ldyBzZXJ2aWNlIHdvcmtl
ciBwcm9jZXNzIChwcm9jZXM9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5
LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKKyAgICAg
ICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoU2VydmljZVdv
cmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyBj
cmVhdGluZyBhIG5ldyBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzIChwcm9jZXM9JXAsIFBJRD0lZCki
LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5w
cm9jZXNzSWRlbnRpZmllcigpKTsKIAotICAgICAgICBpbml0aWFsaXplTmV3V2ViUHJvY2Vzcyhu
ZXdQcm9jZXNzUHJveHksIHdlYnNpdGVEYXRhU3RvcmUpOwotICAgICAgICBtX3Byb2Nlc3Nlcy5h
cHBlbmQoV1RGTW92ZShuZXdQcm9jZXNzUHJveHkpKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPmlu
aXRpYWxpemVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFTdG9yZSk7
CisgICAgICAgIHByb2Nlc3NQb29sLT5tX3Byb2Nlc3Nlcy5hcHBlbmQoV1RGTW92ZShuZXdQcm9j
ZXNzUHJveHkpKTsKICAgICB9CiAKLSAgICBBU1NFUlQoIW1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cy5jb250YWlucygqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkpOwotICAgIG1fc2VydmljZVdv
cmtlclByb2Nlc3Nlcy5hZGQoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpOworICAgIEFTU0VS
VCghc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5KSk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmFkZCgqc2VydmljZVdvcmtl
clByb2Nlc3NQcm94eSk7CiAKLSAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lc3RhYmxp
c2hTZXJ2aWNlV29ya2VyQ29udGV4dChtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA/IG1fc2Vy
dmljZVdvcmtlclByZWZlcmVuY2VzLnZhbHVlKCkgOiBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZl
cmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGlmICgh
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50LmlzTnVsbCgpKQotICAgICAgICBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KG1fc2VydmljZVdvcmtlclVz
ZXJBZ2VudCk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZXN0YWJsaXNoU2Vydmlj
ZVdvcmtlckNvbnRleHQocHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzID8g
cHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzLnZhbHVlKCkgOiBwcm9jZXNz
UG9vbC0+bV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLnN0b3JlKCksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBpZiAoIXByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3Jr
ZXJVc2VyQWdlbnQuaXNOdWxsKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkt
PnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQocHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclVz
ZXJBZ2VudCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKIHsKLSAgICBBU1NFUlQobV9z
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKHByb2Nlc3MpKTsKLSAgICBtX3NlcnZpY2VX
b3JrZXJQcm9jZXNzZXMucmVtb3ZlKHByb2Nlc3MpOworICAgIEFTU0VSVChzZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzKCkuY29udGFpbnMocHJvY2VzcykpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMoKS5yZW1vdmUocHJvY2Vzcyk7CiB9CiAjZW5kaWYKIApAQCAtOTIyLDcgKzYyNCw3IEBAIFJl
ZlB0cjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2FybWVkUHJv
Y2VzcyhXZWJzaXRlRGF0YVN0b3JlCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUp
CiAgICAgLy8gSW4gcGxhdGZvcm1zIHVzaW5nIEJ1YmJsZXdyYXAgZm9yIHNhbmRib3hpbmcsIHBy
ZXdhcm1lZCBwcm9jZXNzIGlzIGxhdW5jaGVkIHVzaW5nIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmlt
YXJ5IFdlYnNpdGVEYXRhU3RvcmUsCiAgICAgLy8gc28gd2UgZG9uJ3QgdXNlIGl0IGluIGNhc2Ug
b2YgdXNpbmcgYSBkaWZmZXJlbnQgV2Vic2l0ZURhdGFTdG9yZS4KLSAgICBpZiAobV9zYW5kYm94
RW5hYmxlZCAmJiBtX3dlYnNpdGVEYXRhU3RvcmUgJiYgbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgp
ICE9ICZ3ZWJzaXRlRGF0YVN0b3JlKQorICAgIGlmIChtX3NhbmRib3hFbmFibGVkKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICNlbmRpZgogCkBAIC0xMDMyLDggKzczNCw2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJv
Y2VzcywgV2Vic2l0ZURhCiAgICAgICAgIHByb2Nlc3MuaXNSZXNwb25zaXZlKFtpbml0aWFsaXph
dGlvbkFjdGl2aXR5ID0gV1RGTW92ZShpbml0aWFsaXphdGlvbkFjdGl2aXR5KV0gKGJvb2wpIHsg
fSk7CiAgICAgfSk7CiAKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAgV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwogCiAgICAgcGFyYW1ldGVycy5pbmpl
Y3RlZEJ1bmRsZVBhdGggPSBtX3Jlc29sdmVkUGF0aHMuaW5qZWN0ZWRCdW5kbGVQYXRoOwpAQCAt
MTE5OCw5ICs4OTgsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1
bmNoaW5nKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKICAgICAgICAgcHJvY2Vzcy0+Y29ubmVj
dGlvbigpLT5pZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcoKTsKIAogICAgIG1fY29ubmVjdGlvbkNs
aWVudC5kaWRDcmVhdGVDb25uZWN0aW9uKHRoaXMsIHByb2Nlc3MtPndlYkNvbm5lY3Rpb24oKSk7
Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBtX3dlYnNpdGVEYXRhU3Rv
cmUtPmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OmRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKQEAgLTEyOTUsMTAg
Kzk5Miw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdl
KFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAgICAgaWYgKCFwYWdlQ29uZmlndXJh
dGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpKSB7CiAgICAgICAgIC8vIFdlIHRyeSB0byBhdm9pZCBj
cmVhdGluZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxvbmcgYXMgcG9zc2libGUuCiAgICAg
ICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRvIGNyZWF0ZSBhIHdlYiBwYWdlIHdp
dGhvdXQgYW55IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVuIHdlIGhhdmUgdG8gY3JlYXRlIGl0
LgotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0
ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgp
LnB0cigpOwotCi0gICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3Jl
KG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5z
ZXRXZWJzaXRlRGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZSgpLnB0cigpKTsKICAgICB9CiAKICAgICBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBwcm9j
ZXNzOwpAQCAtMTMyOSw3ICsxMDIzLDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJvY2Vzc1Bv
b2w6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSToKICNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNl
cykgewogICAgICAgICBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA9IHBhZ2UtPnByZWZlcmVu
Y2VzU3RvcmUoKTsKLSAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1f
c2VydmljZVdvcmtlclByb2Nlc3NlcykKKyAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2Vy
UHJvY2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgICAgIHNlcnZpY2VX
b3JrZXJQcm9jZXNzLnVwZGF0ZVNlcnZpY2VXb3JrZXJQcmVmZXJlbmNlc1N0b3JlKCptX3NlcnZp
Y2VXb3JrZXJQcmVmZXJlbmNlcyk7CiAgICAgfQogICAgIGlmICh1c2VyQ29udGVudENvbnRyb2xs
ZXIpCkBAIC0xMzU2LDcgKzEwNTAsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2
aWNlV29ya2VyVXNlckFnZW50KGNvbnN0IFN0cmluZyYgdXNlckFnZW50KQogICAgIGlmIChtX3Nl
cnZpY2VXb3JrZXJVc2VyQWdlbnQgPT0gdXNlckFnZW50KQogICAgICAgICByZXR1cm47CiAgICAg
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50ID0gdXNlckFnZW50OwotICAgIGZvciAoYXV0byYgc2Vy
dmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMpCisgICAgZm9yIChh
dXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAg
ICAgICAgc2VydmljZVdvcmtlclByb2Nlc3Muc2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChtX3Nl
cnZpY2VXb3JrZXJVc2VyQWdlbnQpOwogfQogI2VuZGlmCkBAIC0xMzY1LDE1ICsxMDU5LDYgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBh
Z2VQcm94eUlkZW50aWZpZXIgcGFnZUkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1fc2Vzc2lvblRv
UGFnZUlEc01hcC5hZGQoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBIYXNoU2V0PFdlYlBhZ2VQcm94
eUlkZW50aWZpZXI+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQocGFnZUlEKTsKICAgICBBU1NFUlRf
VU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwotCi0gICAgYXV0byBzZXNzaW9uSUQg
PSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7Ci0gICAgaWYgKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIEFTU0VSVCghc2Vzc2lvbklELmlz
RXBoZW1lcmFsKCkgfHwgZGF0YVN0b3JlLnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuc2Vzc2lvbklEID09IHNlc3Npb25JRCk7Ci0gICAgICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYo
ZGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICBkYXRhU3RvcmUuY2xlYXJQZW5kaW5nQ29va2llcygp
OwotICAgICAgICB9Ci0gICAgfQogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdlRW5kVXNp
bmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBXZWJzaXRl
RGF0YVN0b3JlJiBkYXRhU3RvcmUpCkBAIC0xNDAxLDcgKzEwODYsNiBAQCBib29sIFdlYlByb2Nl
c3NQb29sOjpoYXNQYWdlc1VzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlJiBk
YXRhU3RvcmUpCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0
ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5h
bWUpCiB7CiAgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0
YVN0b3JlLCByZXF1ZXN0LCBpbml0aWF0aW5nUGFnZSwgeyB9KTsKLSAgICBQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7CiAKICAgICBPcHRpb25hbDxOYXZp
Z2F0aW5nVG9BcHBCb3VuZERvbWFpbj4gaXNBcHBCb3VuZCA9IE5hdmlnYXRpbmdUb0FwcEJvdW5k
RG9tYWluOjpObzsKICAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKQEAgLTE0MTEsMjYgKzEwOTUs
MjMgQEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRh
U3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3gKICNlbmRpZgogICAgIH0KIAotICAgIGlmIChu
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVz
dChyZXF1ZXN0KTsKLSAgICAgICAgLy8gUmVxdWVzdCdzIGZpcnN0UGFydHlGb3JDb29raWVzIHdp
bGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwgb2YgdGhlIGRvd25sb2FkIHJlcXVlc3QuCi0gICAg
ICAgIC8vIFdlIHNldCB0aGUgdmFsdWUgdG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJMLgotICAg
ICAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKLSAgICAgICAgICAgIFVSTCBpbml0aWF0aW5nUGFn
ZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGluaXRpYXRpbmdQYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJs
KCkgfTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVz
KGluaXRpYXRpbmdQYWdlVVJMKTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2Ft
ZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVl
c3QudXJsKCkpKTsKLSAgICAgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQotICAgICAgICAgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2VudEZvclVS
TChyZXF1ZXN0LnVybCgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1cGRhdGVk
UmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhVUkwoKSk7Ci0gICAgICAgICAgICB1cGRh
dGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKLSAgICAgICAgICAgIGlmICghdXBkYXRl
ZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQot
ICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoV2ViUGFnZVBy
b3h5OjpzdGFuZGFyZFVzZXJBZ2VudCgpKTsKLSAgICAgICAgfQotICAgICAgICB1cGRhdGVkUmVx
dWVzdC5zZXRJc1RvcFNpdGUoZmFsc2UpOwotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RG93bmxvYWRSZXF1ZXN0KHNlc3Npb25JRCwgZG93
bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0LCBpc0FwcEJvdW5kLCBzdWdn
ZXN0ZWRGaWxlbmFtZSksIDApOwotICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKKyAgICBS
ZXNvdXJjZVJlcXVlc3QgdXBkYXRlZFJlcXVlc3QocmVxdWVzdCk7CisgICAgLy8gUmVxdWVzdCdz
IGZpcnN0UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwgb2YgdGhl
IGRvd25sb2FkIHJlcXVlc3QuCisgICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3AgbGV2ZWwg
ZG9jdW1lbnQncyBVUkwuCisgICAgaWYgKGluaXRpYXRpbmdQYWdlKSB7CisgICAgICAgIFVSTCBp
bml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGluaXRpYXRpbmdQYWdlLT5wYWdlTG9h
ZFN0YXRlKCkudXJsKCkgfTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZv
ckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwpOworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJ
c1NhbWVTaXRlKGFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGluaXRpYXRpbmdQYWdlVVJMLCBy
ZXF1ZXN0LnVybCgpKSk7CisgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQorICAgICAgICAgICAgdXBkYXRlZFJl
cXVlc3Quc2V0SFRUUFVzZXJBZ2VudChpbml0aWF0aW5nUGFnZS0+dXNlckFnZW50Rm9yVVJMKHJl
cXVlc3QudXJsKCkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRG
aXJzdFBhcnR5Rm9yQ29va2llcyhVUkwoKSk7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElz
U2FtZVNpdGUoZmFsc2UpOworICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFk
ZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKKyAgICAgICAgICAgIHVwZGF0ZWRS
ZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudCgp
KTsKICAgICB9CisgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZhbHNlKTsKKyAgICBk
YXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
RG93bmxvYWRSZXF1ZXN0KGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgZG93bmxvYWRQcm94eS5kb3du
bG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0LCBpc0FwcEJvdW5kLCBzdWdnZXN0ZWRGaWxlbmFtZSks
IDApOwogCiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CkBAIC0xNDM4LDE3ICsxMTE5LDEy
IEBAIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0
b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94CiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9v
bDo6cmVzdW1lRG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJv
eHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBBUEk6OkRhdGEmIHJlc3VtZURhdGEsIGNvbnN0IFN0
cmluZyYgcGF0aCkKIHsKICAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0gY3JlYXRlRG93bmxvYWRQ
cm94eShkYXRhU3RvcmUsIFJlc291cmNlUmVxdWVzdCgpLCBpbml0aWF0aW5nUGFnZSwgeyB9KTsK
LSAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7CiAK
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZTsKICAg
ICBpZiAoIXBhdGguaXNFbXB0eSgpKQogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGUocGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlKTsKIAotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIG5l
dHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXN1bWVEb3du
bG9hZChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLmRh
dGFSZWZlcmVuY2UoKSwgcGF0aCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOwotICAgICAg
ICByZXR1cm4gZG93bmxvYWRQcm94eTsKLSAgICB9Ci0KKyAgICBkYXRhU3RvcmUubmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoZGF0
YVN0b3JlLnNlc3Npb25JRCgpLCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0
YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKICAg
ICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KIApAQCAtMTUxNywxMSArMTE5Myw2IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnJlZnJlc2hQbHVnaW5zKCkKIAogI2VuZGlmIC8vIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQogCi1Qcm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9j
ZXNzSWRlbnRpZmllcigpCi17Ci0gICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MgPyBtX25ldHdv
cmtQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpIDogMDsKLX0KLQogUHJvY2Vzc0lEIFdlYlBy
b2Nlc3NQb29sOjpwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcigpCiB7CiAgICAgcmV0dXJuIG1f
cHJld2FybWVkUHJvY2VzcyA/IG1fcHJld2FybWVkUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIo
KSA6IDA7CkBAIC0xNTU4LDE0ICsxMjI5LDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lz
dGVyVVJMU2NoZW1lQXNTZWN1cmUoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVn
YWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUo
dXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6
OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFz
U2VjdXJlKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRl
RGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAg
ICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdD
b250ZW50U2VjdXJpdHlQb2xpY3koY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVn
YWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3Np
bmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNz
ZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250
ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5n
Q29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6
OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBk
YXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50
U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoY29uc3Qg
U3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNTc4LDE0ICsxMjUzLDE4IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkK
IHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxTY2hl
bWVBc0xvY2FsKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7Ci0gICAgc2Vu
ZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVS
TFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFj
aFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9y
ZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSksIDApOwor
ICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzTm9B
Y2Nlc3MoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGlu
Z3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpOwog
ICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxT
Y2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNz
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVy
bFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3Jl
KFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0
YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJl
Z2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3BsYXlJc29sYXRlZChj
b25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MDYsMTAgKzEyODUsOCBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyhjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0
aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5hZGQodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1dG8q
IHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1
cmxTY2hlbWUpOwotICAgIH0KKyAgICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7CiB9
CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmlu
Z0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNjE4
LDEwICsxMjk1LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2JhbFVSTFNj
aGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb24KICAgICAgICAgcmV0dXJuOwog
CiAgICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkucmVtb3Zl
KHVybFNjaGVtZSk7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnVucmVnaXN0ZXJT
Y2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwotICAgIH0KKyAgICBmb3Ig
KGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJv
Y2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1lRm9yTGVn
YWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQoY29uc3QgU3RyaW5nJiB1cmxTY2hl
bWUpCkBAIC0xNjU1LDE2ICsxMzMwLDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hl
TW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpKTsKIAotICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAg
V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW2NhY2hlTW9kZWxdIChX
ZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQ
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2Fj
aGVNb2RlbCksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDYWNo
ZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogewog
ICAgIHVwZGF0ZUJhY2tGb3J3YXJkQ2FjaGVDYXBhY2l0eSgpOwogCi0gICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKGNhY2hl
TW9kZWwpLCB7IH0sIHsgfSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVE
YXRhU3RvcmUoW2NhY2hlTW9kZWxdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAg
ICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2Rl
bCksIHsgfSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1
bHRSZXF1ZXN0VGltZW91dEludGVydmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCkBAIC0xNjc0
LDEyICsxMzUxLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1l
b3V0SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKIAogRG93bmxvYWRQcm94eSYgV2Vi
UHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0
b3JlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYlBhZ2VQcm94eSogb3JpZ2lu
YXRpbmdQYWdlLCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8pCiB7Ci0gICAgcmV0dXJu
IGVuc3VyZU5ldHdvcmtQcm9jZXNzKCZkYXRhU3RvcmUpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0
YVN0b3JlLCByZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7Ci19Ci0KLXZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5k
KQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFja2dyb3Vu
ZChiYWNrZ3JvdW5kKTsKKyAgICByZXR1cm4gZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuY3Jl
YXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsICp0aGlzLCByZXF1ZXN0LCBmcmFtZUluZm8sIG9y
aWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFkZE1lc3NhZ2VSZWNl
aXZlcihJUEM6OlJlY2VpdmVyTmFtZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQpAQCAtMTc1MCwzMCArMTQyMiw2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnN0b3BNZW1vcnlTYW1wbGVyKCkKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMo
TWVzc2FnZXM6OldlYlByb2Nlc3M6OlN0b3BNZW1vcnlTYW1wbGVyKCkpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFN5bmNU
b05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBVJiYgcmVwbHkpCi17Ci0gICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAg
ICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2Up
LCBzdGQ6OmZvcndhcmQ8VT4ocmVwbHkpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6
Y2xlYXJDYWNoZWRDcmVkZW50aWFscyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKQot
ewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNz
aW9uSUQpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0d29ya1By
b2Nlc3MoKQotewotICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7Ci0KLSAgICBpZiAoIW1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX25ldHdvcmtQcm9j
ZXNzLT50ZXJtaW5hdGUoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKLX0KLQog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlQWxsV2ViQ29udGVudFByb2Nlc3NlcygpCiB7
CiAgICAgVmVjdG9yPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXMgPSBtX3Byb2Nl
c3NlczsKQEAgLTE3ODEsNDAgKzE0MjksMTUgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWlu
YXRlQWxsV2ViQ29udGVudFByb2Nlc3NlcygpCiAgICAgICAgIHByb2Nlc3MtPnRlcm1pbmF0ZSgp
OwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9T
dXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCi17Ci0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIoKTsKLQotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcmVwYXJlVG9T
dXNwZW5kKElzU3VzcGVuc2lvbkltbWluZW50OjpObywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
LSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHlGb3JUZXN0aW5nKCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJv
Y2Vzc0RpZFJlc3VtZSgpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7Ci19Ci0KIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCkKIHsKICNpZiBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCiAgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7Ci0gICAg
d2hpbGUgKG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb21wdXRlU2l6ZSgpKQotICAgICAgICBt
X3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYmVnaW4oKS0+ZGlzYWJsZVNlcnZpY2VXb3JrZXJzKCk7
CisgICAgd2hpbGUgKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb21wdXRlU2l6ZSgpKQorICAg
ICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuYmVnaW4oKS0+ZGlzYWJsZVNlcnZpY2VXb3Jr
ZXJzKCk7CiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Zmx1c2hDb29raWVzKGNv
bnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmZsdXNo
Q29va2llcyhzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlQXV0b21hdGlvbkNhcGFiaWxpdGllcygpIGNvbnN0CiB7
CiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCkBAIC0yMDg5LDE1ICsxNzEyLDIxIEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnJlcG9ydFdlYkNvbnRlbnRDUFVUaW1lKFNlY29uZHMgY3B1VGlt
ZSwgdWludDY0X3QgYWN0aXZpdHlTCiAjZW5kaWYKIH0KIAorV2Vha0hhc2hTZXQ8V2ViUHJvY2Vz
c1Byb3h5PiYgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKQoreworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+PiBwcm9j
ZXNzZXM7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKwogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbnMoKQogewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hX
ZWJzaXRlRGF0YVN0b3JlKFtdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAg
ICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkudXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwor
ICAgIH0pOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICAvLyBDaGVjayBvbiBuZXh0
IHJ1biBsb29wIHNpbmNlIHRoZSB3ZWIgcHJvY2VzcyBwcm94eSB0b2tlbnMgYXJlIHByb2JhYmx5
IGJlaW5nIHVwZGF0ZWQuCi0gICAgY2FsbE9uTWFpblJ1bkxvb3AoW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIodGhpcyldIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2Vy
dmljZVdvcmtlclByb2Nlc3NlcykKKyAgICBjYWxsT25NYWluUnVuTG9vcChbXSB7CisgICAgICAg
IGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
KCkpCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzc0Fzc2VydGlvbigpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMTA3LDcgKzE3MzYsNyBA
QCBib29sIFdlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFnZVByb3h5
SWRlbnRpZmllciBwYWdlSUQpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQog
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluZWZmaWNpZW50LgotICAgIHJldHVybiBXVEY6OmFueU9m
KG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW3BhZ2VJRF0oYXV0byYgcHJvY2VzcykgeworICAg
IHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW3BhZ2VJRF0oYXV0
byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyUGFn
ZVByb3h5KHBhZ2VJRCk7CiAgICAgfSk7CiAjZW5kaWYKQEAgLTIzMjksMTQgKzE5NTgsNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygp
CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIHRvRG9tYWluLCBPcHRpb25TZXQ8Q3Jvc3NTaXRlTmF2aWdh
dGlvbkRhdGFUcmFuc2Zlcjo6RmxhZz4gbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgV2ViUGFnZVBy
b3h5SWRlbnRpZmllciB3ZWJQYWdlUHJveHlJRCwgUGFnZUlkZW50aWZpZXIgd2ViUGFnZUlEKQot
ewotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vz
c2lvbklELCBmcm9tRG9tYWluLCB0b0RvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2Vi
UGFnZVByb3h5SUQsIHdlYlBhZ2VJRCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERv
bWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4+JiYgZG9tYWlucykKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKGRvbWFpbnMpKTsKQEAgLTIzODcs
MjcgKzIwMDgsMjcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlQXVkaWJsZU1lZGlhQXNz
ZXJ0aW9ucygpCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MoYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogewotICAg
IGlmIChtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcykKKyAgICBpZiAoc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzID09IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2Vzcz0lZCkiLCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXRUJQUk9D
RVNTUE9PTF9SRUxFQVNFX0xPR19TVEFUSUMoU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3M6ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVk
KSIsIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogCi0gICAgbV91c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsK
LSAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwotICAgIHRlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzKCk7CisgICAgc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzczsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+dGVy
bWluYXRlU2VydmljZVdvcmtlcnMoKTsKIH0KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
IGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlG
b3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3Jr
ZXJQcm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihz
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0
dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3Rpbmco
KTsKICAgICB9KTsKIH0KIAogYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckJh
Y2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdAogewotICAgIHJldHVybiBXVEY6OmFu
eU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10oYXV0byYgcHJvY2VzcykgeworICAgIHJl
dHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW10oYXV0byYgcHJvY2Vz
cykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFj
dGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmgKaW5kZXggZDFmMWZlOTYxNTA2YTFlNWYxMzI1ZmE5OWE1NjA4Yjk1MGI2
YWI3MS4uNmM4MWI4NmIxM2U5MmM0NjFkYjI2ZDEyODRmMWZhOWZjM2JhNTY1ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCkBAIC04MSw3ICs4MSw2IEBAIE9CSkNf
Q0xBU1MgV0tQcmVmZXJlbmNlT2JzZXJ2ZXI7CiAKIG5hbWVzcGFjZSBBUEkgewogY2xhc3MgQXV0
b21hdGlvbkNsaWVudDsKLWNsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKIGNsYXNz
IERvd25sb2FkQ2xpZW50OwogY2xhc3MgSFRUUENvb2tpZVN0b3JlOwogY2xhc3MgSW5qZWN0ZWRC
dW5kbGVDbGllbnQ7CkBAIC0xODAsNyArMTc5LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGlz
dG9yeUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVu
dD4mJik7CiAgICAgdm9pZCBzZXREb3dubG9hZENsaWVudChVbmlxdWVSZWY8QVBJOjpEb3dubG9h
ZENsaWVudD4mJik7CiAgICAgdm9pZCBzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0
cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JiYpOwotICAgIHZvaWQgc2V0TGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudD4mJik7CiAKICAgICB2b2lkIHNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVu
ZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKICAgICBjb25zdCBTdHJpbmcmIGN1c3RvbVdl
YkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlv
bi0+Y3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCk7IH0KQEAgLTE5MSwx
NyArMTg5LDkgQEAgcHVibGljOgogICAgIC8vIG51bGwgY2hlY2tzIGluIFdlYlBhZ2VQcm94eS4K
ICAgICBXZWJQcm9jZXNzUHJveHkqIGR1bW15UHJvY2Vzc1Byb3h5KFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCkgY29uc3QgeyByZXR1cm4gbV9kdW1teVByb2Nlc3NQcm94aWVzLmdldChzZXNzaW9u
SUQpLmdldCgpOyB9CiAKLSAgICAvLyBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNzIGFzIGFw
cHJvcG9yaWF0ZSBmb3IgY3VycmVudCBwcm9jZXNzIG1vZGVsLiBUaGUgY29ubmVjdGlvbiBtdXN0
IGJlIG5vbi1udWxsLgotICAgIElQQzo6Q29ubmVjdGlvbiogbmV0d29ya2luZ1Byb2Nlc3NDb25u
ZWN0aW9uKCk7Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0FsbFByb2Nl
c3Nlcyhjb25zdCBUJiBtZXNzYWdlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNl
bmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oY29uc3QgVCYgbWVzc2FnZSwgUEFMOjpTZXNzaW9u
SUQpOwogCi0gICAgLy8gU2VuZHMgdGhlIG1lc3NhZ2UgdG8gV2ViUHJvY2VzcyBvciBOZXR3b3Jr
UHJvY2VzcyBhcyBhcHByb3BvcmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNz
YWdlKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiB2b2lkIHNlbmRTeW5j
VG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KTsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5l
Y2Vzc2FyeShUJiYgbWVzc2FnZSk7Ci0KICAgICB2b2lkIHByb2Nlc3NEaWRGaW5pc2hMYXVuY2hp
bmcoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKICAgICBXZWJQcm9jZXNzQ2FjaGUmIHdlYlByb2Nlc3ND
YWNoZSgpIHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0NhY2hlLmdldCgpOyB9CkBAIC0yMDksOSArMTk5
LDYgQEAgcHVibGljOgogICAgIC8vIERpc2Nvbm5lY3QgdGhlIHByb2Nlc3MgZnJvbSB0aGUgY29u
dGV4dC4KICAgICB2b2lkIGRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSopOwogCi0g
ICAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlKiB3ZWJzaXRlRGF0YVN0b3JlKCkgY29uc3QgeyBy
ZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRQcmltYXJ5RGF0
YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7IG1fd2Vic2l0ZURh
dGFTdG9yZSA9ICZkYXRhU3RvcmU7IH0KLQogICAgIFJlZjxXZWJQYWdlUHJveHk+IGNyZWF0ZVdl
YlBhZ2UoUGFnZUNsaWVudCYsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsKIAogICAg
IHZvaWQgcGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZp
ZXIsIFdlYnNpdGVEYXRhU3RvcmUmKTsKQEAgLTI2MiwxMCArMjQ5LDggQEAgcHVibGljOgogICAg
IHZvaWQgYWRkU3VwcG9ydGVkUGx1Z2luKFN0cmluZyYmIG1hdGNoaW5nRG9tYWluLCBTdHJpbmcm
JiBuYW1lLCBIYXNoU2V0PFN0cmluZz4mJiBtaW1lVHlwZXMsIEhhc2hTZXQ8U3RyaW5nPiBleHRl
bnNpb25zKTsKICAgICB2b2lkIGNsZWFyU3VwcG9ydGVkUGx1Z2lucygpOwogCi0gICAgUHJvY2Vz
c0lEIG5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpOwogICAgIFByb2Nlc3NJRCBwcmV3YXJtZWRQ
cm9jZXNzSWRlbnRpZmllcigpOwogICAgIHZvaWQgYWN0aXZlUGFnZXNPcmlnaW5zSW5XZWJQcm9j
ZXNzRm9yVGVzdGluZyhQcm9jZXNzSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0
cmluZz4mJik+JiYpOwotICAgIGJvb2wgbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcoY29uc3QgU3RyaW5nJik7CiAKICAgICBXZWJQYWdlR3JvdXAmIGRlZmF1bHRQYWdlR3Jv
dXAoKSB7IHJldHVybiBtX2RlZmF1bHRQYWdlR3JvdXAuZ2V0KCk7IH0KIApAQCAtMzA3LDggKzI5
Miw2IEBAIHB1YmxpYzoKICAgICBBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50JiBoaXN0
b3J5Q2xpZW50KCkgeyByZXR1cm4gKm1faGlzdG9yeUNsaWVudDsgfQogICAgIFdlYkNvbnRleHRD
bGllbnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKLSAgICBBUEk6OkN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgY29uc3Qg
eyByZXR1cm4gKm1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OyB9Ci0KICAgICBzdHJ1Y3Qg
U3RhdGlzdGljcyB7CiAgICAgICAgIHVuc2lnbmVkIHdrVmlld0NvdW50OwogICAgICAgICB1bnNp
Z25lZCB3a1BhZ2VDb3VudDsKQEAgLTMyNCwxMiArMzA3LDggQEAgcHVibGljOgogICAgIHZvaWQg
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7CiAgICAgdm9pZCB0ZXJtaW5hdGVTZXJ2aWNl
V29ya2VycygpOwogCi0gICAgdm9pZCBmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQm
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCiAgICAgdm9pZCBzZXRTaG91bGRNYWtl
TmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhib29sIHZhbHVlKSB7IG1fc2hvdWxk
TWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQogICAgIGJv
b2wgc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSBjb25zdCB7
IHJldHVybiBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nOyB9
Ci0gICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRl
c3RpbmcoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hG
YWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9Ci0gICAgYm9vbCBzaG91bGRNYWtlTmV4dE5ldHdvcmtQ
cm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE1ha2VO
ZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZzsgfQogCiAgICAgdm9pZCByZXBv
cnRXZWJDb250ZW50Q1BVVGltZShTZWNvbmRzIGNwdVRpbWUsIHVpbnQ2NF90IGFjdGl2aXR5U3Rh
dGUpOwogCkBAIC0zODgsMTkgKzM2NywxMyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIC8vIE5l
dHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgZW5zdXJl
TmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUgPSBu
dWxscHRyKTsKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0
IHsgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCk7IH0KICAgICB2b2lkIG5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAKLSAgICB2b2lkIGdldE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1By
b3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkmJik7Ci0KICAgICBi
b29sIGlzU2VydmljZVdvcmtlclBhZ2VJRChXZWJQYWdlUHJveHlJZGVudGlmaWVyKSBjb25zdDsK
ICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250
ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOworICAgIHN0YXRpYyB2b2lkIGVzdGFibGlzaFdvcmtlckNvbnRleHRDb25u
ZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CiAgICAgdm9pZCByZW1vdmVGcm9tU2VydmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9j
ZXNzUHJveHkmKTsKLSAgICBzaXplX3Qgc2VydmljZVdvcmtlclByb3hpZXNDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb21wdXRlU2l6ZSgpOyB9Ci0gICAg
dm9pZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoYm9vbCBhbGxv
d3MpIHsgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIgPSBhbGxvd3M7
IH0KLSAgICBib29sIGFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOyB9
CisgICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBz
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNpemUoKTsgfQogICAgIHZvaWQgdXBkYXRl
U2VydmljZVdvcmtlclVzZXJBZ2VudChjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCk7CiAgICAgY29u
c3QgT3B0aW9uYWw8VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllcj4mIHVzZXJDb250ZW50
Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNlV29ya2VyOyB9CiAgICAgYm9vbCBoYXNT
ZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpIGNvbnN0OwpAQCAtNDU5
LDggKzQzMiw2IEBAIHB1YmxpYzoKICAgICBib29sIGFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlv
cml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5OyB9
CiAgICAgYm9vbCBzaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uOyB9CiAKLSAgICB2b2lkIHN5bnRo
ZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKTsKLSAgICAKICNpZiBFTkFCTEUo
R0FNRVBBRCkKICAgICB2b2lkIGdhbWVwYWRDb25uZWN0ZWQoY29uc3QgVUlHYW1lcGFkJiwgV2Vi
Q29yZTo6RXZlbnRNYWtlc0dhbWVwYWRzVmlzaWJsZSk7CiAgICAgdm9pZCBnYW1lcGFkRGlzY29u
bmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYpOwpAQCAtNDk4LDcgKzQ2OSw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCk7CiAKICNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIHZvaWQgZGlkQ29tbWl0Q3Jvc3NTaXRl
TG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biYgdG9Eb21haW4sIE9wdGlvblNldDxXZWJDb3JlOjpDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRy
YW5zZmVyOjpGbGFnPiwgV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2ViQ29yZTo6UGFnZUlkZW50
aWZpZXIpOwogICAgIHZvaWQgc2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJik7CiAgICAgdm9pZCBzZWVkUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0ZvclRlc3RpbmcoY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIGZp
cnN0UGFydHlEb21haW4sIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiB0aGlyZFBh
cnR5RG9tYWluLCBib29sIHNob3VsZFNjaGVkdWxlTm90aWZpY2F0aW9uLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgc2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
SW1tZWRpYXRlbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKQEAgLTUyNSw4ICs0OTUs
OCBAQCBwdWJsaWM6CiAgICAgCiAgICAgUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXImIHBsdWdJbkF1
dG9TdGFydFByb3ZpZGVyKCkgeyByZXR1cm4gbV9wbHVnSW5BdXRvU3RhcnRQcm92aWRlcjsgfQog
Ci0gICAgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOwotICAg
IGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQorICAgIHN0YXRpYyB2b2lkIHNldFVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCk7CisgICAgc3RhdGljIGJvb2wgdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIHsgcmV0dXJuIHNfdXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzczsgfQogCiAjaWYgRU5BQkxFKENGUFJFRlNfRElSRUNUX01PREUpCiAg
ICAgdm9pZCBub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQoY29uc3QgU3RyaW5nJiBkb21haW4sIGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBPcHRpb25hbDxTdHJpbmc+JiBlbmNvZGVkVmFsdWUpOwpA
QCAtNTM4LDkgKzUwOCwxNSBAQCBwdWJsaWM6CiAgICAgaW50MzJfdCB1c2VySWQoKSBjb25zdCB7
IHJldHVybiBtX3VzZXJJZDsgfQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBP
U09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IHhwY0VuZHBvaW50TWVzc2FnZSgpIGNvbnN0OwotICAg
IHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoT1NPYmplY3RQ
dHI8eHBjX29iamVjdF90PiBlbmRwb2ludE1lc3NhZ2UpOworICAgIHN0YXRpYyB2b2lkIHBsYXRm
b3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzJik7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNXaXRoQ3VzdG9tUHJv
dG9jb2xIYW5kbGVycygpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBzdGF0aWMg
U3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhcmVu
dEJ1bmRsZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0Rp
cmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgp
OworICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CiAjZW5k
aWYKIAogcHJpdmF0ZToKQEAgLTU1Niw4ICs1MzIsNiBAQCBwcml2YXRlOgogICAgIFdlYlByb2Nl
c3NQcm94eSYgY3JlYXRlTmV3V2ViUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiwgV2ViUHJvY2Vz
c1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQ6Ok5vKTsK
ICAgICB2b2lkIGluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYsIFdlYnNp
dGVEYXRhU3RvcmUqLCBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkID0gV2ViUHJvY2Vzc1By
b3h5OjpJc1ByZXdhcm1lZDo6Tm8pOwogCi0gICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3
b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwotCiAgICAgdm9p
ZCBoYW5kbGVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5h
bWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSk7CiAgICAgdm9pZCBoYW5kbGVTeW5jaHJv
bm91c01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwg
Y29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJE
YXRhJiYpPiYmKTsKIApAQCAtNTgxLDE0ICs1NTUsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB1
c2VzU2luZ2xlV2ViUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi0+dXNl
c1NpbmdsZVdlYlByb2Nlc3MoKTsgfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBz
dGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5n
IHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0Nh
Y2hlc0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVj
dG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7
Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcmVnaXN0ZXJOb3RpZmlj
YXRpb25PYnNlcnZlcnMoKTsKICAgICB2b2lkIHVucmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZl
cnMoKTsKQEAgLTYzMCw5ICs1OTYsOCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8UEFMOjpTZXNz
aW9uSUQsIFdlYWtQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4gbV9kdW1teVByb2Nlc3NQcm94aWVzOyAv
LyBMaWdodHdlaWdodCBXZWJQcm9jZXNzUHJveHkgb2JqZWN0cyB3aXRob3V0IGJhY2tpbmcgcHJv
Y2Vzcy4KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWFrSGFzaFNldDxXZWJQ
cm9jZXNzUHJveHk+IG1fc2VydmljZVdvcmtlclByb2Nlc3NlczsKKyAgICBzdGF0aWMgV2Vha0hh
c2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiYgc2VydmljZVdvcmtlclByb2Nlc3NlcygpOwogICAgIGJv
b2wgbV93YWl0aW5nRm9yV29ya2VyQ29udGV4dFByb2Nlc3NDb25uZWN0aW9uIHsgZmFsc2UgfTsK
LSAgICBib29sIG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyIHsgZmFs
c2UgfTsKICAgICBTdHJpbmcgbV9zZXJ2aWNlV29ya2VyVXNlckFnZW50OwogICAgIE9wdGlvbmFs
PFdlYlByZWZlcmVuY2VzU3RvcmU+IG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzOwogICAgIE9w
dGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXI+IG1fdXNlckNvbnRlbnRDb250
cm9sbGVySURGb3JTZXJ2aWNlV29ya2VyOwpAQCAtNjQ4LDcgKzYxMyw2IEBAIHByaXZhdGU6CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4gbV9hdXRvbWF0aW9uQ2xp
ZW50OwogICAgIFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PiBtX2Rvd25sb2FkQ2xpZW50
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiBt
X2hpc3RvcnlDbGllbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50PiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKIAogICAgIFJlZlB0
cjxXZWJBdXRvbWF0aW9uU2Vzc2lvbj4gbV9hdXRvbWF0aW9uU2Vzc2lvbjsKIApAQCAtNjgwLDgg
KzY0NCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21lbW9yeVNhbXBsZXJFbmFibGVkIHsgZmFs
c2UgfTsKICAgICBkb3VibGUgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWwgeyAxNDAwLjAgfTsKIAot
ICAgIFJlZlB0cjxXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU+IG1fd2Vic2l0ZURhdGFTdG9yZTsK
LQogICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBjaGFyKiwgUmVmUHRyPFdlYkNvbnRleHRTdXBw
bGVtZW50PiwgUHRySGFzaDxjb25zdCBjaGFyKj4+IFdlYkNvbnRleHRTdXBwbGVtZW50TWFwOwog
ICAgIFdlYkNvbnRleHRTdXBwbGVtZW50TWFwIG1fc3VwcGxlbWVudHM7CiAKQEAgLTcxNCw4ICs2
NzYsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3Byb2Nlc3NUZXJtaW5hdGlvbkVuYWJsZWQg
eyB0cnVlIH07CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9u
ZXR3b3JrUHJvY2VzczsKLQogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxEaWN0aW9uYXJ5
Q2FsbGJhY2s+PiBtX2RpY3Rpb25hcnlDYWxsYmFja3M7CiAKICNpZiBVU0UoU09VUCkKQEAgLTcy
OCw3ICs2ODgsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9hbHdheXNSdW5zQXRCYWNrZ3JvdW5k
UHJpb3JpdHk7CiAgICAgYm9vbCBtX3Nob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb247CiAg
ICAgYm9vbCBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZh
aWxGb3JUZXN0aW5nIHsgZmFsc2UgfTsKICAgICBib29sIG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQg
eyBmYWxzZSB9OwogCiAgICAgVXNlck9ic2VydmFibGVQYWdlQ291bnRlciBtX3VzZXJPYnNlcnZh
YmxlUGFnZUNvdW50ZXI7CkBAIC04MjAsMzEgKzc3OSwxMyBAQCBwcml2YXRlOgogI2Vsc2UKICAg
ICBib29sIG1faXNEZWxheWVkV2ViUHJvY2Vzc0xhdW5jaERpc2FibGVkIHsgZmFsc2UgfTsKICNl
bmRpZgotICAgIGJvb2wgbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzIHsgZmFsc2Ug
fTsKKyAgICBzdGF0aWMgYm9vbCBzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7CiAK
ICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIEhhc2hTZXQ8V2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4+IG1fZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb247CiAjZW5k
aWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4g
bV9lbmRwb2ludE1lc3NhZ2U7Ci0jZW5kaWYKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12
b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSkK
LXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5TZW5k
TWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxU
PihtZXNzYWdlKSwgMCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFdlYlByb2Nl
c3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoVCYm
IG1lc3NhZ2UpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci19Ci0KIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9BbGxQcm9jZXNzZXMoY29u
c3QgVCYgbWVzc2FnZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuY3BwCmluZGV4IGQ2NjEwMzM4YjZjZjYwYTI3YTZmNzVkYWVjMzQ5YThmNzJhYjNiODUuLjVl
MmM3MDhmMjJmOTdiZWFmMzcwOTM1MmNiNjllM2Q0YzI4ZTFkOWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtMjY4LDYgKzI2OCw5IEBAIHZvaWQg
V2ViUHJvY2Vzc1Byb3h5OjpzZXRXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmUmIGRh
dGFTdG9yZSkKIHsKICAgICBBU1NFUlQoIW1fd2Vic2l0ZURhdGFTdG9yZSk7CiAgICAgbV93ZWJz
aXRlRGF0YVN0b3JlID0gJmRhdGFTdG9yZTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBkYXRh
U3RvcmUuc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoKnRoaXMpOwor
I2VuZGlmCiAgICAgdXBkYXRlUmVnaXN0cmF0aW9uV2l0aERhdGFTdG9yZSgpOwogICAgIHNlbmQo
TWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzKHByb2Nl
c3NQb29sKCkud2ViUHJvY2Vzc0RhdGFTdG9yZVBhcmFtZXRlcnMoKnRoaXMsIGRhdGFTdG9yZSkp
LCAwKTsKIH0KQEAgLTczOCw3ICs3NDEsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6Z2V0UGx1
Z2luUHJvY2Vzc0Nvbm5lY3Rpb24odWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuLCBNZQogCiB2
b2lkIFdlYlByb2Nlc3NQcm94eTo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJl
cGx5JiYgcmVwbHkpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC0+Z2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLmdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOwogfQogCiAj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQpAQCAtOTU1LDkgKzk1OCw4IEBAIHZvaWQgV2ViUHJvY2Vz
c1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBD
OjpDb25uZWN0CiAgICAgfQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgYXV0byBlbmRwb2lu
dE1lc3NhZ2UgPSBwcm9jZXNzUG9vbCgpLnhwY0VuZHBvaW50TWVzc2FnZSgpOwotICAgIGlmIChl
bmRwb2ludE1lc3NhZ2UpCi0gICAgICAgIHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2FnZShjb25u
ZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwgZW5kcG9pbnRNZXNzYWdlLmdldCgpKTsKKyAgICBp
ZiAobV93ZWJzaXRlRGF0YVN0b3JlKQorICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPnNlbmRO
ZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKCp0aGlzKTsKICNlbmRpZgogCiAg
ICAgUkVMRUFTRV9BU1NFUlQoIW1fd2ViQ29ubmVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0
YVN0b3JlQ29jb2EubW0KaW5kZXggN2M0NDA4NTE2NzczNjhiNWRmODlhODZmZjRkM2I1MTUzNGI5
MGJiNy4uY2I4YjNiYWE0YWQwYjU2ODE1NTE1YzA1ZTE4MTM2YjMyNGYzYTJmZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFT
dG9yZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0Nv
Y29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAtMjgsMTAgKzI4LDEyIEBACiAKICNpbXBv
cnQgIkNvb2tpZVN0b3JhZ2VVdGlsc0NGLmgiCiAjaW1wb3J0ICJEZWZhdWx0V2ViQnJvd3NlckNo
ZWNrcy5oIgorI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2ltcG9ydCAiU2FuZGJv
eFV0aWxpdGllcy5oIgogI2ltcG9ydCAiU3RvcmFnZU1hbmFnZXIuaCIKICNpbXBvcnQgIldlYkZy
YW1lUG9saWN5TGlzdGVuZXJQcm94eS5oIgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNLZXlzLmgi
CisjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oIgogI2ltcG9ydCAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIK
ICNpbXBvcnQgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CkBAIC00NCw2ICs0Niw3
IEBACiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNz
UHJpdmlsZWdlLmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvRW50
aXRsZW1lbnRzLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQpAQCAtNTYyLDQgKzU2NSwyOCBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnJlaW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlucygpCiB9CiAjZW5kaWYKIAorYm9vbCBX
ZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhj
b25zdCBTdHJpbmcmIGVudGl0bGVtZW50KQoreworICAgIHJldHVybiBXVEY6Omhhc0VudGl0bGVt
ZW50KG5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVudGl0
bGVtZW50LnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmRO
ZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJv
Y2VzcykKK3sKKyAgICBpZiAocHJvY2Vzcy5zdGF0ZSgpICE9IEF1eGlsaWFyeVByb2Nlc3NQcm94
eTo6U3RhdGU6OlJ1bm5pbmcpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBjb25uZWN0aW9u
ID0gcHJvY2Vzcy5jb25uZWN0aW9uKCk7CisgICAgaWYgKCFjb25uZWN0aW9uKQorICAgICAgICBy
ZXR1cm47CisgICAgYXV0byBtZXNzYWdlID0gbmV0d29ya1Byb2Nlc3MoKS54cGNFbmRwb2ludE1l
c3NhZ2UoKTsKKyAgICBpZiAoIW1lc3NhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICB4cGNfY29u
bmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbi0+eHBjQ29ubmVjdGlvbigpLCBtZXNzYWdl
KTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRw
b2ludFRvQWxsV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBtX3By
b2Nlc3NlcykKKyAgICAgICAgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nl
c3MocHJvY2Vzcyk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggMDgzMGNhNzVhN2ZjMzhl
NjQ1Yjc3NWIzOWIzMzc1ZDRjMjA1MDM3ZC4uZGM5MTlhNjgyNzdjYTg4MjkzMGNjZDY4ODEzM2Iz
M2ViNjVhYTkzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTMyLDExICszMiwxNCBAQAogI2luY2x1
ZGUgIkF1dGhlbnRpY2F0b3JNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2UuaCIKICNpbmNsdWRlICJHUFVQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJMb2dnaW5n
LmgiCiAjaW5jbHVkZSAiTW9ja0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmgiCisjaW5jbHVkZSAiTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mby5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVz
c2FnZXMuaCIKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNs
dWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRDYWNo
ZS5oIgorI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYktp
dDJJbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2Vi
UHJvY2Vzc0NhY2hlLmgiCkBAIC03NSw2ICs3OCwxMCBAQAogI2luY2x1ZGUgIlNPQXV0aG9yaXph
dGlvbkNvb3JkaW5hdG9yLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1
ZGUgIkRlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktp
dCB7CiAKIHN0YXRpYyBib29sIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnM7
CkBAIC04MywxMyArOTAsMTkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1dlYnNpdGVE
YXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMoKQogICAgIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0Zv
ckFsbE9yaWdpbnMgPSB0cnVlOwogfQogCi1zdGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwg
V2Vic2l0ZURhdGFTdG9yZSo+JiBub25EZWZhdWx0RGF0YVN0b3JlcygpCitzdGF0aWMgSGFzaE1h
cDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBhbGxEYXRhU3RvcmVzKCkKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4+IG1hcDsKICAg
ICByZXR1cm4gbWFwOwogfQogCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRl
RGF0YVN0b3JlKEZ1bmN0aW9uPHZvaWQoV2Vic2l0ZURhdGFTdG9yZSYpPiYmIGZ1bmN0aW9uKQor
eworICAgIGZvciAoYXV0byogZGF0YVN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQor
ICAgICAgICBmdW5jdGlvbigqZGF0YVN0b3JlKTsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3RvcmU+
IFdlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZU5vblBlcnNpc3RlbnQoKQogewogICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRp
b246OmNyZWF0ZShJc1BlcnNpc3RlbnQ6Ok5vKSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlRXBo
ZW1lcmFsU2Vzc2lvbklEKCkpKTsKQEAgLTExNSw3ICsxMjgsNyBAQCBXZWJzaXRlRGF0YVN0b3Jl
OjpXZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbj4mJiBj
b25maWd1cgogI2VuZGlmCiB7CiAgICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2
aWxlZ2VzKCkpOwotICAgIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVn
aXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMTI4LDE3ICsxNDEsMTIgQEAgV2Vic2l0
ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUoKQogCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7
CiAKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSkgewotICAgICAgICBBU1NFUlQobm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQobV9zZXNz
aW9uSUQpID09IHRoaXMpOwotICAgICAgICBub25EZWZhdWx0RGF0YVN0b3JlcygpLnJlbW92ZSht
X3Nlc3Npb25JRCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQot
ICAgIH0KKyAgICBBU1NFUlQoYWxsRGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhp
cyk7CisgICAgYWxsRGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5yZW1vdmVTZXNzaW9uKCp0aGlzKTsKICNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
Ci0gICAgICAgIGlmIChhdXRvKiBncHVQcm9jZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbklmQ3JlYXRlZCgpKQotICAgICAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVT
ZXNzaW9uKG1fc2Vzc2lvbklEKTsKKyAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BV
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkKKyAgICAgICAgZ3B1UHJvY2Vzc1By
b3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKICNlbmRpZgogfQogCkBAIC0xNjksMTcg
KzE3NywzNSBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMo
KQogICAgIHJldHVybiAhIWdsb2JhbERlZmF1bHREYXRhU3RvcmUoKTsKIH0KIAotdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpCit2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpCiB7Ci0gICAgaWYgKG1fc2Vz
c2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAg
YXV0byByZXN1bHQgPSBub25EZWZhdWx0RGF0YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhp
cyk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Cisg
ICAgYXV0byByZXN1bHQgPSBhbGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworfQorCitXZWJz
aXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Np
b25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgcmV0dXJuIGFsbERhdGFTdG9y
ZXMoKS5nZXQoc2Vzc2lvbklEKTsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURh
dGFTdG9yZTo6bmV0d29ya1Byb2Nlc3MoKQoreworICAgIGlmICghbV9uZXR3b3JrUHJvY2Vzcykg
eworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAgICBpZiAobV9zZXNzaW9uSUQuaXNFcGhlbWVy
YWwoKSB8fCBtX3Nlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KQorICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRl
ZmF1bHROZXR3b3JrUHJvY2VzcygqdGhpcyk7CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAg
ICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZSgqdGhp
cyk7CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOwogICAgIH0K
KworICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKIH0KIAotV2Vic2l0ZURhdGFTdG9yZSog
V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklE
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK05ldHdvcmtQcm9jZXNzUHJveHkmIFdlYnNpdGVE
YXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc2Vzc2lvbklE
ICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgPyBub25EZWZhdWx0RGF0YVN0
b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxX
ZWJzaXRlRGF0YVN0b3JlJj4oKnRoaXMpLm5ldHdvcmtQcm9jZXNzKCk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykK
QEAgLTE5NSwxMiArMjIxLDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1bnJlZ2lzdGVyUHJv
Y2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiAgICAgbV9wcm9jZXNzZXMucmVtb3ZlKHBy
b2Nlc3MpOwogfQogCi1XZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bv
b2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpCi17Ci0gICAgYXV0byBwb29scyA9IHByb2Nl
c3NQb29scygxKTsKLSAgICByZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8gbnVsbHB0ciA6IHBvb2xz
LmJlZ2luKCktPmdldCgpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc29sdmVEaXJl
Y3Rvcmllc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9oYXNSZXNvbHZlZERpcmVjdG9yaWVz
KQpAQCAtNDQwLDI4ICs0NjAsMjEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFB
bmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICNlbmRpZgog
CiAgICAgYXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlTmV0d29ya1Byb2Nl
c3NBY2Nlc3NUeXBlRm9yRGF0YUZldGNoKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgpKTsKLSAg
ICBpZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25l
KSB7Ci0gICAgICAgIGF1dG8gcG9vbHMgPSBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPT0gUHJv
Y2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaCA/IGVuc3VyZVByb2Nlc3NQb29scygpIDogcHJvY2Vzc1Bv
b2xzKCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewotICAgICAg
ICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKLSAgICAgICAgICAgIGNh
c2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlm
ICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFByb2Nl
c3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKHRoaXMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgotICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotCisgICAgc3dpdGNoIChuZXR3b3JrUHJv
Y2Vzc0FjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Cisg
ICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNz
KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25s
eUlmTGF1bmNoZWQ6CisgICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7CiAgICAgICAgICAg
ICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAg
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmZldGNoV2Vic2l0ZURhdGEobV9zZXNzaW9u
SUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNz
UG9vbF0oV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPmZldGNoV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRp
b25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkgewogICAg
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKFdU
Rk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CisgICAgICAgIGJyZWFr
OwogICAgIH0KIAogICAgIGF1dG8gd2ViUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlV2ViUHJv
Y2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwpA
QCAtNzI0LDMxICs3MzcsMjQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICAgICBib29sIGRp
ZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSA9IGZhbHNlOwogI2VuZGlm
CiAgICAgYXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlTmV0d29ya1Byb2Nl
c3NBY2Nlc3NUeXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwot
ICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5v
bmUpIHsKLSAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQ
cm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNz
UG9vbHMoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewotICAgICAgICAgICAg
Y2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAg
aWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJv
Y2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6Ci0gICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICBzd2l0Y2ggKG5ldHdvcmtQ
cm9jZXNzQWNjZXNzVHlwZSkgeworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoK
KyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nl
c3MpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpP
bmx5SWZMYXVuY2hlZDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAg
ICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAg
ICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNz
aW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJv
Y2Vzc1Bvb2xdIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRlbGV0ZVdlYnNpdGVE
YXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRp
bmdDYWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKICAgICAgICAgICAgIGRpZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVX
ZWJzaXRlRGF0YSA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgorICAgICAgICBicmVhazsKICAgICB9CiAK
ICAgICBhdXRvIHdlYlByb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZVdlYlByb2Nlc3NBY2Nlc3NU
eXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwpAQCAtODkzLDE0
ICs4OTksOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MpKSB7CiAgICAgICAgIGlmICghZGlkTm90aWZ5TmV0
d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHByb2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBk
YXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNr
KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGEobV9z
ZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eworICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxi
YWNrKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhbGxiYWNrQWdn
cmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CkBAIC05OTQsMTIgKzk5NSwxMCBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4g
ZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9v
bHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CiAg
ICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAg
ICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAg
ICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nl
c3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAgICAgICAgICAgICAgICBuZXR3
b3JrUHJvY2VzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNl
IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgpAQCAtMTAyMSw3ICsxMDIwLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFU
eXBlcywgY29uc3QgVmUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQs
IGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMs
IHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsK
KyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5z
KG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1lcywgSFNUU0Nh
Y2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHBy
b2Nlc3NQb29sXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQ
ZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC0xMTgwLDE4
ICsxMTc5LDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKFNlY29uZHMgc2Vjb25kcykK
IHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRT
eW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91
dEZvclRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vydmlj
ZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vy
dmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5
KCksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0U2VydmljZVdvcmtlclRp
bWVvdXRGb3JUZXN0aW5nKCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJv
Y2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2
aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDAp
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRl
c3Rpbmc6OlJlcGx5KCksIDApOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKQEAgLTEyMDEsOCArMTE5NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4
U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50LCBDb21wbGV0CiAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNv
dW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50
cnlDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMTEsOCAr
MTIwMyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNp
emVfdCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uCiAgICAgCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFBydW5l
RW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVu
ZUVudHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRo
ZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTIyMSw4ICsxMjEyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFu
ZGxlcjwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQsIHNlY29u
ZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMzEsMjAgKzEy
MjEsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRh
UmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1l
QmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRN
aW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAgICAgCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kdW1wUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xMjU2LDEyICsxMjM5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2kKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ByZXZh
bGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUHJldmFsZW50UmVzb3VyY2Uo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5k
ZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1By
ZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjczLDEyICsxMjUxLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBw
cm9jZXNzLT5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNHcmFuZGZh
dGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyOTIsOCArMTI2NSw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNl
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzA3
LDEwICsxMjc5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJj
ZUZvckRlYnVnTW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGkKICAgICAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFByZXZhbGVudFJlc291
cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlz
VmVyeVByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzIyLDEyICsxMjkxLDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgcHJvY2Vzcy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTEzNDEsMTAgKzEzMDUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZQogICAgIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91
bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzUzLDgg
KzEzMTQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdgogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91
bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwg
dmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1Jl
bW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihj
b25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzY4LDIyICsxMzI4LDE0
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
KGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbiht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvcEZyYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYgc3Vi
RnJhbWVVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW4oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVS
TCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM5
NywyMyArMTM0OSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVQogCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
c3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVS
TCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3Vi
cmVzb3VyY2VVbmRlcihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZy
YW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nl
c3MtPmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxl
cihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3Vy
Y2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNv
bnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xNDI3LDEwICsxMzcwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJj
ZVVSTCwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBz
dWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0
ZWRUbyB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVz
b3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NDIsMTIgKzEzODIsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0
IFVSTCYgc3VicmVzb3VyY2VVUgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGly
ZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9t
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJM
IH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBV
UkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTQ1OSwxMiArMTM5NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxS
ZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYg
dG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NzYsMjUgKzE0MDYsMTQgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25z
dCBVUkwmIHRvcEZyYW1lVVJMLCBjb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVj
dGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVy
ZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJM
JiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
b21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVy
ZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxS
ZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE1MDYsNjAg
KzE0MjUsNDEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNl
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVh
clByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9E
ZWZhdWx0VmFsdWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1
bHRWYWx1ZXMobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVs
dFZhbHVlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSgpCiB7CiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnN1Ym1pdFRlbGVtZXRyeSht
X3Nlc3Npb25JRCwgW10geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdWJtaXRU
ZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2RpZmllZFNp
bmNlLCBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vz
c2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2No
ZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5j
ZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1h
cnkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIHN0cnVjdCBDYWxsYmFja0FnZ3JlZ2F0
b3IgOiBSZWZDb3VudGVkPENhbGxiYWNrQWdncmVnYXRvcj4gewotICAgICAgICBDYWxsYmFja0Fn
Z3JlZ2F0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCisg
ICAgc3RydWN0IExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yIDogUmVmQ291bnRlZDxMb2NhbENhbGxi
YWNrQWdncmVnYXRvcj4geworICAgICAgICBMb2NhbENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRo
aXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIDogbV9j
b21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgewog
ICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAgICAgfTsKIAotICAg
ICAgICB+Q2FsbGJhY2tBZ2dyZWdhdG9yKCkKKyAgICAgICAgfkxvY2FsQ2FsbGJhY2tBZ2dyZWdh
dG9yKCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
IApAQCAtMTU3NCwzOCArMTQ3NCwzMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgICAg
ICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4gbV9jb21wbGV0aW9uSGFuZGxlcjsKICAgICAgICAg
VmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IG1f
cmVzdWx0czsKICAgICB9OwotCi0gICAgUmVmUHRyPENhbGxiYWNrQWdncmVnYXRvcj4gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gYWRvcHRSZWYobmV3IENhbGxiYWNrQWdncmVnYXRvcihXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3Vy
ZVByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Ci0gICAgICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcykuZ2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9j
ZXNzUG9vbF0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0
eURhdGE+JiYgZGF0YSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRk
UmVzdWx0KFdURk1vdmUoZGF0YSkpOwotICAgICAgICAgICAgfSk7CisgICAgCisgICAgYXV0byBs
b2NhbENhbGxiYWNrQWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBMb2NhbENhbGxiYWNrQWdncmVn
YXRvcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworICAgIAorICAgIGF1dG8gd3RmQ2Fs
bGJhY2tBZ2dyZWdhdG9yID0gV1RGOjpDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBsb2NhbENhbGxiYWNrQWdncmVnYXRvcl0g
eworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
U3VtbWFyeShtX3Nlc3Npb25JRCwgW2xvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yXShWZWN0b3I8V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7Cisg
ICAgICAgICAgICBsb2NhbENhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVzdWx0KFdURk1vdmUoZGF0
YSkpOwogICAgICAgICB9KTsKLSAgICB9CisgICAgfSk7CisgICAgCisgICAgZm9yIChhdXRvKiBw
cm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAg
cHJvY2Vzc1Bvb2wtPnNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KFt3
dGZDYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlclN0YXRp
c3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAot
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNs
ZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0
aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vz
c2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1Vw
ZGF0ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ29v
a2llQmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ29va2ll
QmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29y
ZHNQcm9jZXNzaW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE2MTQsMjQgKzE1MDcsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVs
ZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmQKICAgICAK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVk
dWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lv
bklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVz
KG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9z
ZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjQzLDIy
ICsxNTI1LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJM
JiB1cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhCiAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dExhc3RTZWVuKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kb21haW5JREV4aXN0c0lu
RGF0YWJhc2UobV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpt
ZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9wRnJh
bWVVcmwxLCBjb25zdCBVUkwmIHRvcEZyYW1lVXJsMiwgU2Vjb25kcyBsYXN0U2VlbiwgYm9vbCBo
YWRVc2VySW50ZXJhY3Rpb24sIFNlY29uZHMgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgYm9v
bCBpc0dyYW5kZmF0aGVyZWQsIGJvb2wgaXNQcmV2YWxlbnQsIGJvb2wgaXNWZXJ5UHJldmFsZW50
LCB1bnNpZ25lZCBkYXRhUmVjb3Jkc1JlbW92ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2NzAsMTAgKzE1NDQsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29uc3Qg
VVJMJiB0b3BGcgogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFz
dFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNH
cmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1Jl
bW92ZWQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BG
cmFtZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50
LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29u
c3QgVVJMJiB1cmwsIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9y
QWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2ODUsMTggKzE1NTYsMTQgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhj
b25zdCBVUkwmIHVybCwgYm9vbCBoYWQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0
aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwg
aXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZh
bHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MDQsOCAr
MTU3MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxlCiAgICAgdXNlRXhwbGljaXRJVFBTdGF0
ZSgpOwogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3Qo
bV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZXN0KG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQ
YWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8
U3RyaW5nPiYmIGRvbWFpbnMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcxNiw3ICsxNTgy
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhX
ZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIHdlYlBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NF
bnRyaWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIApA
QCAtMTcyNCw4ICsxNTkwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkgKIHsKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9M
aXZlVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlv
bihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTczOSwxMCArMTYwNCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9n
VXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkCiAg
ICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmxvZ1Vz
ZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc1NCwx
MyArMTYxNiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9u
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAg
IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0hhZFVz
ZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJs
LCBjb25zdCBVUkwmIHRvcFVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTE3NzIsMTMgKzE2MjgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBj
b25zdAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1Jl
bGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BV
cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3
OTIsMTAgKzE2NDIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0
aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclVzZXJJbnRlcmFjdGlv
bihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclVz
ZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJl
ZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgw
OSwxMCArMTY1Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChj
b25zdCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvCiAgICAgCiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRHcmFuZGZhdGhlcmVk
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5k
ZmF0aGVyZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wg
dmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTE4MjEsMTAgKzE2NjUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFi
YXNlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJgogICAgIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0
YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2
YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBV
UkwmIGZyb21VUkwsIGNvbnN0IFVSTCYgdG9VUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MzMsNjIgKzE2NzQsMzggQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhj
b25zdCBVUkwmIGYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3MtPnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5n
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRDcm9zc1Np
dGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdG9VUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGlu
ZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1f
c2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGlu
Y2x1ZGVIdHRwT25seUNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNv
b2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9y
YWdlRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0
aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhh
c0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91
bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZERv
d25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZERvd25ncmFkZVJlZmVy
cmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAj
aWYgIVBMQVRGT1JNKENPQ09BKQpAQCAtMTkxOSwxMCArMTczNiw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShXZWJDb3JlOjpUaGlyZFBh
cnR5Q29va2llCiAgICAgICAgICAgICB3ZWJQcm9jZXNzLnNldFRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGUoYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0K
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlKG1fc2Vzc2lvbklELCBibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2Nr
aW5nTW9kZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKGJvb2wgZW5h
YmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTkzMCwxMCArMTc0NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlCiAgICAgYXV0byBmbGFn
ID0gZW5hYmxlZCA/IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZ
ZXMgOiBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87CiAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
c2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgZmxhZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0
aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTQxLDIwICsxNzUyLDE0
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgYXV0byBtb2RlID0gZW5hYmxlZCA/IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzIDogV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGU6Ok5vbmU7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0
Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBt
b2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgbW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tp
ZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFRvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQ
YXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmaXJzdFBhcnR5VVJMLCBj
b25zdCBVUkwmIGNuYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xOTY2LDggKzE3NzEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdAog
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3Jr
UHJvY2VzcygpLnNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBmaXJzdFBhcnR5VVJMLmhvc3QoKS50b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nl
c3Npb25JRCwgZmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBh
cnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NzksMTggKzE3ODMsMTMg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQ
YXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZygKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVE
b21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZSgpLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3JhZ2UoKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENh
Y2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk5OCw4ICsxNzk3
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVu
dFJlc291cmNlcyhTZWNvbmRzIHNlY29uZHMsIEMKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNv
dXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNl
cyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKHNlY29uZHMpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CkBA
IC0yMDA5LDI2ICsxODA3LDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhB
Z2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q2FjaGVNYXhBZ2VDYXBG
b3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogI2VuZGlmCiB9CiAKLWJvb2wgV2Vi
c2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmIHBy
b2Nlc3NQb29sKSBjb25zdAotewotICAgIGlmIChhdXRvKiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9
IHByb2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUoKSkKLSAgICAgICAgcmV0dXJuIHByb2Nlc3NQ
b29sRGF0YVN0b3JlID09IHRoaXM7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkg
PSBwcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICByZXR1cm4gbmV0d29ya1By
b2Nlc3NQcm94eS0+aGFzU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCiBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnBy
b2Nlc3NQb29scyhzaXplX3QgbGltaXQpIGNvbnN0CiB7CiAgICAgSGFzaFNldDxSZWZQdHI8V2Vi
UHJvY2Vzc1Bvb2w+PiBwcm9jZXNzUG9vbHM7CkBAIC0yMDQzLDkgKzE4MjcsNiBAQCBIYXNoU2V0
PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyhz
aXplX3QgbGltaXQpIGNvbgogICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9uZSBvZiB0aGUgbGVnYWN5IGRhdGEgc3RvcmVzLgogICAg
ICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKCpwcm9j
ZXNzUG9vbCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAgICAgIHByb2Nl
c3NQb29scy5hZGQocHJvY2Vzc1Bvb2wpOwogICAgICAgICAgICAgaWYgKHByb2Nlc3NQb29scy5z
aXplKCkgPT0gbGltaXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDg0LDggKzE4NjUs
NyBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVNZWRpYUtleUZpbGUoY29uc3QgU3RyaW5nJiBtZWRp
YUtleURpcmVjdG9yeSkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1NwZWNpZmljSFRU
UFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJbmZvKiBjZXJ0aWZpY2F0
ZSwgY29uc3QgU3RyaW5nJiBob3N0KQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRp
ZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxv
d1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRl
SW5mbygpLCBob3N0KSwgMCk7CiB9CiAKIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+IFdlYnNpdGVEYXRhU3RvcmU6Om1lZGlhS2V5T3JpZ2lucyhjb25zdCBTdHJpbmcmIG1lZGlh
S2V5c1N0b3JhZ2VEaXJlY3RvcnkpCkBAIC0yMTQwLDYgKzE5MjAsNDYgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdl
RGlyZWN0b3J5LAogICAgIH0KIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXROZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mbyYpPiYm
IHJlcGx5KQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uKHdlYlByb2Nlc3NQcm94eSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMp
LCB3ZWJQcm9jZXNzUHJveHkgPSBtYWtlV2Vha1B0cih3ZWJQcm9jZXNzUHJveHkpLCByZXBseSA9
IFdURk1vdmUocmVwbHkpXSAoYXV0byYgY29ubmVjdGlvbkluZm8pIG11dGFibGUgeworICAgICAg
ICBpZiAoVU5MSUtFTFkoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVj
dGlvbkluZm8uaWRlbnRpZmllcigpKSAmJiB3ZWJQcm9jZXNzUHJveHkgJiYgd2Vha1RoaXMpKSB7
CisgICAgICAgICAgICBSRUxFQVNFX0xPR19JRihpc1BlcnNpc3RlbnQoKSwgUHJvY2VzcywgImdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0IGF0dGVtcHQsIHJldHJ5aW5n
Iik7CisgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbigqd2ViUHJvY2Vzc1Byb3h5LCBXVEZNb3ZlKHJlcGx5KSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgcmVwbHkoY29ubmVjdGlvbkluZm8pOworICAgIH0pOwor
fQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3Jr
UHJvY2Vzc1Byb3h5JikKK3sKKyAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKK30KKwor
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCit7CisgICAg
aWYgKCFtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICByZXR1cm47CisgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+dGVybWluYXRlKCk7CisgICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Cit9CisK
K3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVu
ZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5z
aW9uSW1taW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5
Rm9yVGVzdGluZygpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc1dpbGxTdXNw
ZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZFByb2Nlc3NEaWRSZXN1bWUoKTsKK30KKwogYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xP
QURfU1RBVElTVElDUykKQEAgLTIxNjksMTcgKzE5ODksMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAg
ICAgIAogICAgICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwogICAgICAgICAK
LSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25J
RCwgdHJ1ZSkpOworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwg
dHJ1ZSksIDApOworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCiAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lv
bihNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
dHJ1ZSksIG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxz
ZSkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSksIDAp
OworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAgICAg
cHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGZhbHNlKSwgbV9zZXNzaW9u
SUQpOwotICAgIH0KIAogICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgPSBmYWxz
ZTsKICNlbHNlCkBAIC0yMTkxLDggKzIwMDksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0U3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjayhGdW5jdGlvbjx2b2lkKGNv
bnN0IFN0cmluZyYpPiYmIGNhbGxiYWNrKQogewogICAgIGlmIChjYWxsYmFjaykgewotICAgICAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpKTsKKyAg
ICAgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSwgMCk7CiAgICAgfQog
ICAgIAogICAgIG1fc3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
OwpAQCAtMjIxMSw4ICsyMDI4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgZW5hYmxlZCwgQ29tcGxldGkKIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShtX3Nlc3Npb25JRCwgZW5h
YmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbmFibGVk
KTsKICAgICBVTlVTRURfUEFSQU0oY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMjIyNywyMCArMjA0
MywxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vw
aGVtZXJhbChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKAogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RXBoZW1lcmFsKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CisjZW5kaWYKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0
cmlidXRpb25EZWJ1Z01vZGUoYm9vbCBlbmFibGVkKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQp
OwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIyNjIsNDgg
KzIwNzMsMTkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZFN0YXRp
c3RpY3NJbldlYlByb2Nlc3NlcyhDb21wbGV0aW9uSGFuZGwKIH0KICNlbmRpZgogCi1WZWN0b3I8
V2ViQ29yZTo6Q29va2llPiBXZWJzaXRlRGF0YVN0b3JlOjpwZW5kaW5nQ29va2llcygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihtX3BlbmRpbmdDb29raWVzKTsKLX0KLQotdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjphZGRQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tp
ZSYgY29va2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMucmVtb3ZlSWYoWyZjb29raWVdKGF1
dG8mIHBlbmRpbmdDb29raWUpIHsKLSAgICAgICAgcmV0dXJuIHBlbmRpbmdDb29raWUuaXNLZXlF
cXVhbChjb29raWUpOwotICAgIH0pOwotICAgIG1fcGVuZGluZ0Nvb2tpZXMuYWRkKGNvb2tpZSk7
Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBX
ZWJDb3JlOjpDb29raWUmIGNvb2tpZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZShj
b29raWUpOwotfQotICAgIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdDb29r
aWVzKCkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6Zmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3Ig
KGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5mbHVzaENvb2tpZXMoc2Vzc2lvbklEKCksIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5mbHVzaENvb2tpZXMoc2Vzc2lv
bklEKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93
cykKIHsKLSAgICBmb3IgKGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvcldlYlNvY2tldChhbGxvd3MpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0OjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyksIE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQ6OlJlcGx5
KCksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMoKQogewotICAgIGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQ
cm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMoc2Vzc2lvbklEKCkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKCkpLCAwKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkaXNwYXRjaE9uUXVldWUoRnVuY3Rpb248dm9pZCgp
PiYmIGZ1bmN0aW9uKQpAQCAtMjMyOSw4ICsyMTExLDYgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAKICAgICByZXNvbHZlRGlyZWN0
b3JpZXNJZk5lY2Vzc2FyeSgpOwogCi0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBl
bmRpbmdDb29raWVzKCk7Ci0KICAgICBhdXRvIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rv
cnkgPSBtX2NvbmZpZ3VyYXRpb24tPnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsK
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVj
dG9yeUhhbmRsZTsKICAgICBpZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNF
bXB0eSgpKQpAQCAtMjQzNSw3ICsyMjE1LDEwIEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
IFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMoKQogICAgIHBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZWQg
PSBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOwogI2VuZGlmCiAgICAgcGxhdGZvcm1T
ZXROZXR3b3JrUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKLQorI2lmIFBMQVRGT1JNKENPQ09BKQor
ICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFwcEhhc1JlcXVlc3RlZENy
b3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbiA9IGhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRy
YWNraW5nUGVybWlzc2lvbigpOworI2VuZGlmCisgICAgCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7
CiB9CiAKQEAgLTI0NjUsMTAgKzIyNDgsNiBAQCBBUEk6OkhUVFBDb29raWVTdG9yZSYgV2Vic2l0
ZURhdGFTdG9yZTo6Y29va2llU3RvcmUoKQogICAgIHJldHVybiAqbV9jb29raWVTdG9yZTsKIH0K
IAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpCi17Ci19
Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlv
bjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghaXNQZXJzaXN0ZW50KCkpIHsK
QEAgLTI0NzYsMjMgKzIyNTUsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0
b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZUQKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
dGhpcykuZ2V0TG9jYWxTdG9yYWdlRGV0YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7Ci0gICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGRldGFpbHMpKTsKLSAgICAgICAgfSk7
Ci0gICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGZldGNoaW5nIGZyb20gbXVsdGlwbGUgcG9vbHMu
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBBU1NFUlQoIWNvbXBsZXRpb25IYW5kbGVyKTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLmdldExvY2FsU3RvcmFnZURldGFpbHMobV9zZXNzaW9uSUQs
IFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYg
ZGV0YWlscykgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGRldGFpbHMpKTsK
KyAgICB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnJlc2V0UXVvdGEobV9zZXNzaW9uSUQsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVz
ZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogI2lm
ICFQTEFURk9STShDT0NPQSkKQEAgLTI1MTgsNyArMjI4OSwxMiBAQCBib29sIFdlYnNpdGVEYXRh
U3RvcmU6Omh0dHAzRW5hYmxlZCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQotI2VuZGlmCisK
K2Jvb2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYgLy8g
IVBMQVRGT1JNKENPQ09BKQogCiAjaWYgIVVTRShHTElCKQogV1RGOjpTdHJpbmcgV2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpCkBAIC0y
NTMwLDM1ICsyMzA2LDE4IEBAIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
ZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEoVVJMJiYgb2xkTmFtZSwgVVJMJiYgbmV3TmFt
ZSwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQ
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PmFkZFNlc3Npb24oKnRoaXMpOwotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbmFtZU9y
aWdpbkluV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBl
cywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5h
bWUsIG5ld05hbWUsIGRhdGFUeXBlcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpo
YXNBcHBCb3VuZFNlc3Npb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNB
cHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFu
ZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNBcHBCb3VuZFNlc3Npb24obV9z
ZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0K
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNz
aW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9y
d2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yNTgwLDcgKzIzMzksNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlhbGl6ZWQo
Q29tcGxldGlvbkhhbmRsZQogCiAgICAgcHJvcGFnYXRlQXBwQm91bmREb21haW5zKGdsb2JhbERl
ZmF1bHREYXRhU3RvcmUoKS5nZXQoKSwgKmFwcEJvdW5kRG9tYWlucyk7CiAKLSAgICBmb3IgKGF1
dG8qIHN0b3JlIDogbm9uRGVmYXVsdERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICBmb3IgKGF1
dG8qIHN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQogICAgICAgICBwcm9wYWdhdGVB
cHBCb3VuZERvbWFpbnMoc3RvcmUsICphcHBCb3VuZERvbWFpbnMpOwogfQogCkBAIC0yNTg4LDEw
ICsyMzQ3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBcHBCb3VuZERvbWFpbnNGb3JJ
VFAoY29uc3QgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWIKIHsKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRBcHBCb3VuZERv
bWFpbnNGb3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEFw
cEJvdW5kRG9tYWluc0ZvclJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFp
bnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAjZW5kaWYKIApAQCAtMjU5OSwxNiAr
MjM1NSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJ
bk5ldHdvcmtQcm9jZXNzKGNvbnN0IFN0cmluZyYgYnVuZAogewogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5k
bGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50
aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxl
SWRlbnRpZmllcihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNz
KCkuY2xlYXJCdW5kbGVJZGVudGlmaWVyKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuaAppbmRleCAwZGM5MWYyM2M0MTU0Mzk1YzhlYmY4OTBmMzViZDAxODBjZDUx
YWFkLi40MTBiZTFjOTcyMTgyOWVkZmVhY2RiN2Y0MzI2YTZhZGQ4ODRmODRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5oCkBAIC01Myw2ICs1Myw4IEBACiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxw
YWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgorI2luY2x1ZGUgPHd0Zi9PU09iamVjdFB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogI2VuZGlmCiAKICNpZiBVU0UoQ1VS
TCkKQEAgLTc1LDYgKzc3LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBBdXRoZW50aWNh
dG9yTWFuYWdlcjsKIGNsYXNzIFNlY0tleVByb3h5U3RvcmU7CiBjbGFzcyBEZXZpY2VJZEhhc2hT
YWx0U3RvcmFnZTsKK2NsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHk7CiBjbGFzcyBTT0F1dGhvcml6
YXRpb25Db29yZGluYXRvcjsKIGNsYXNzIFdlYkNlcnRpZmljYXRlSW5mbzsKIGNsYXNzIFdlYlBh
Z2VQcm94eTsKQEAgLTg0LDYgKzg3LDggQEAgY2xhc3MgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOwogZW51bSBjbGFzcyBDYWNoZU1vZGVsIDogdWludDhfdDsKIGVudW0gY2xhc3MgV2Vi
c2l0ZURhdGFGZXRjaE9wdGlvbiA6IHVpbnQ4X3Q7CiBlbnVtIGNsYXNzIFdlYnNpdGVEYXRhVHlw
ZSA6IHVpbnQzMl90OworCitzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mbzsKIHN0
cnVjdCBXZWJzaXRlRGF0YVJlY29yZDsKIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
czsKIApAQCAtMTA5LDcgKzExNCwxMiBAQCBwdWJsaWM6CiAgICAgV2Vic2l0ZURhdGFTdG9yZShS
ZWY8V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYsIFBBTDo6U2Vzc2lvbklEKTsKICAg
ICB+V2Vic2l0ZURhdGFTdG9yZSgpOwogCi0gICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4
aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7Cisg
ICAgc3RhdGljIHZvaWQgZm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoRnVuY3Rpb248dm9pZChXZWJz
aXRlRGF0YVN0b3JlJik+JiYpOworICAgIAorICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdv
cmtQcm9jZXNzKCkgY29uc3Q7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nl
c3MoKTsKKworICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ0RhdGFTdG9yZUZv
clNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlzUGVyc2lzdGVudCgpIGNv
bnN0IHsgcmV0dXJuICFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9CiAgICAgUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTExOSw2
ICsxMjksMTUgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IFdlYWtIYXNoU2V0PFdlYlByb2Nl
c3NQcm94eT4mIHByb2Nlc3NlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc2VzOyB9CiAKKyAg
ICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8mKT4m
Jik7CisgICAgdm9pZCB0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworICAgIHZvaWQgc2VuZE5l
dHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseUZvclRlc3RpbmcoKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgp
OworICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKTsK
KyAgICB2b2lkIHNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZyhib29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZh
aWxGb3JUZXN0aW5nID0gdmFsdWU7IH0KKyAgICBib29sIHNob3VsZE1ha2VOZXh0TmV0d29ya1By
b2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkTWFrZU5l
eHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nOyB9CisKICAgICBib29sIHJlc291
cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZChib29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUoKSBjb25zdDsKQEAgLTIzNSwxNSArMjU0LDggQEAgcHVibGljOgogCiAgICAg
RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1
cm4gbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bv
b2wqIHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlz
QXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycyBwYXJhbWV0ZXJzKCk7CiAKLSAgICBWZWN0b3I8V2ViQ29y
ZTo6Q29va2llPiBwZW5kaW5nQ29va2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nv
b2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29r
aWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVz
KCk7CiAgICAgdm9pZCBmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
ICAgICB2b2lkIGNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKIApAQCAtMjUxLDYgKzI2MywxMSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYp
OwogCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENF
bmRwb2ludFRvV2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmKTsKKyAgICB2b2lkIHNlbmROZXR3
b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMoKTsKKyNlbmRpZgorCiAjaWYg
VVNFKENVUkwpCiAgICAgdm9pZCBzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXZWJDb3JlOjpDdXJs
UHJveHlTZXR0aW5ncyYmKTsKICAgICBjb25zdCBXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5ncyYg
bmV0d29ya1Byb3h5U2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX3Byb3h5U2V0dGluZ3M7IH0K
QEAgLTI3Miw4ICsyODksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNb2NrV2ViQXV0aGVudGlj
YXRpb25Db25maWd1cmF0aW9uKFdlYkNvcmU6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3Vy
YXRpb24mJik7CiAjZW5kaWYKIAotICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsK
LQogICAgIGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9u
KCkgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLmdldCgpOyB9CiAKICAgICBXZWJzaXRlRGF0YVN0
b3JlQ2xpZW50JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQpAQCAtMjgzLDYg
KzI5OCw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShV
UkwmJiwgVVJMJiYsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOwogCisgICAgYm9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9y
VGVzdGluZyhjb25zdCBTdHJpbmcmKTsKKwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04p
CiAgICAgV2ViRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyJiBkZXZp
Y2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXIoKSB7IHJldHVybiBtX2Rldmlj
ZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcjsgfQogI2VuZGlmCkBAIC0zNTks
NyArMzc2LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29u
c3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNp
bmNlKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRp
YUtleXNTdG9yYWdlRGlyZWN0b3J5LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luRGF0YT4mKTsKIAotICAgIHZvaWQgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsK
KyAgICB2b2lkIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogCiAjaWYgRU5BQkxFKEFQUF9C
T1VORF9ET01BSU5TKQogICAgIHN0YXRpYyBPcHRpb25hbDxIYXNoU2V0PFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluPj4gYXBwQm91bmREb21haW5zSWZJbml0aWFsaXplZCgpOwpAQCAtMzgxLDYg
KzM5OCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkIHsgZmFsc2UgfTsKICAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+IG1f
c3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjazsKICNlbmRpZgorICAgIGJvb2wgbV9zaG91bGRNYWtl
TmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgeyBmYWxzZSB9OwogCiAgICAg
UmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKIApAQCAtMzk3LDggKzQxNSw2IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgeyB0cnVlIH07CiAj
ZW5kaWYKIAotICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29va2llPiBtX3BlbmRpbmdDb29raWVzOwot
ICAgIAogICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4gbV9wcm9jZXNzZXM7CiAKICAg
ICBib29sIG1faXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQgeyBmYWxzZSB9OwpAQCAtNDE5LDYgKzQz
NSw3IEBAIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPFdlYnNpdGVEYXRhU3RvcmVDbGllbnQ+IG1f
Y2xpZW50OwogCiAgICAgUmVmUHRyPEFQSTo6SFRUUENvb2tpZVN0b3JlPiBtX2Nvb2tpZVN0b3Jl
OworICAgIFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwogCiAj
aWYgSEFWRShBUFBfU1NPKQogICAgIFVuaXF1ZVJlZjxTT0F1dGhvcml6YXRpb25Db29yZGluYXRv
cj4gbV9zb0F1dGhvcml6YXRpb25Db29yZGluYXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3Jl
Q3VybC5jcHAKaW5kZXggMGUwYzA2ZTFkZWQ0MmMxNGI4MDJlMTU4OWYzMWRjNjI5ODJhYzM5My4u
NjRiNmM3NGQwODZlYzQ1YmI2MmRhNmVlMDgyMjNiMjhkYjczYTU3YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3Vy
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJz
aXRlRGF0YVN0b3JlQ3VybC5jcHAKQEAgLTQyLDggKzQyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5ncyYm
IHByb3gKIHsKICAgICBtX3Byb3h5U2V0dGluZ3MgPSBXVEZNb3ZlKHByb3h5U2V0dGluZ3MpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX3Nlc3Npb25JRCwgbV9wcm94eVNldHRpbmdz
KSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9zZXNzaW9uSUQsIG1fcHJveHlTZXR0aW5ncyksIDAp
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCmluZGV4IDEyZjljZDgx
OWI2ZGNjYThhYzUwOTJhMzBkZDkzYzUzYjhlZTkzNDIuLjZmOTYzZjE0MjEwMDQ3NThlMmQ2NWVk
OTYyNmUyYTQ5YTNmNGY5MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCkBA
IC0zOSw4ICszOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3b3Jr
UGFyYW1ldGVycyhXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYKICAgICBhdXRvJiBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsK
ICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdl
RW5hYmxlZCA9IG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZDsKIAotICAgIGlm
IChhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlv
bnMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclBy
b3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5jb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9zZXNz
aW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBh
dGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQoYm9vbCBlbmFibGVkKQpAQCAtNTIsOCArNTEsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoYm9vbCBlbmFi
bGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFn
ZUVuYWJsZWQgPSBlbmFibGVkOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5h
YmxlZChtX3Nlc3Npb25JRCwgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChtX3Nlc3Npb25JRCwgbV9wZXJzaXN0
ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKSwgMCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNz
UHJveHlHTGliLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1By
b3h5R0xpYi5jcHAKaW5kZXggMGE4NGE3NTkwZDlhOTg1YmZjOTk2ODRhNDg5NTEzNzRlNWIyOTQy
OS4uMjdmMjNlYTA2NWRjNzVjZTRhODI3MGM1NzZlYTJhYTU1YWIwZGM4ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCkBA
IC00NCw3ICs0NCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9w
dGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsCiAgICAgICAgIGlmICghZGF0
YVN0b3JlKSB7CiAgICAgICAgICAgICAvLyBQcmV3YXJtZWQgcHJvY2Vzc2VzIGRvbid0IGhhdmUg
YSBXZWJzaXRlRGF0YVN0b3JlIHlldCwgc28gdXNlIHRoZSBwcmltYXJ5IFdlYnNpdGVEYXRhU3Rv
cmUgZnJvbSB0aGUgV2ViUHJvY2Vzc1Bvb2wuCiAgICAgICAgICAgICAvLyBUaGUgcHJvY2VzcyB3
b24ndCBiZSB1c2VkIGlmIGN1cnJlbnQgV2Vic2l0ZURhdGFTdG9yZSBpcyBkaWZmZXJlbnQgdGhh
biB0aGUgV2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBvbmUuCi0gICAgICAgICAgICBkYXRhU3RvcmUg
PSBtX3Byb2Nlc3NQb29sLT53ZWJzaXRlRGF0YVN0b3JlKCk7CisgICAgICAgICAgICBkYXRhU3Rv
cmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7CiAgICAgICAg
IH0KIAogICAgICAgICBBU1NFUlQoZGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCmluZGV4
IDlmN2JlM2M5NDFiNmNkMGExYjk0Y2IxMzYwOThmM2EwNDFjZWZmOTkuLmFjMDRlMzhhNTdiMjE1
OWJlYjQyZjM4NDc5YjQ0ZjVlMjZkZWRiYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcApAQCAtMjYs
NiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFn
ZXJQcm94eS5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUg
IldlYkNvb2tpZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgi
CiAKQEAgLTMzLDggKzM0LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50
U3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUpCiB7Ci0gICAgbV9jb29raWVQZXJzaXN0ZW50U3RvcmFn
ZU1hcC5zZXQoc2Vzc2lvbklELCBzdGQ6Om1ha2VfcGFpcihzdG9yYWdlUGF0aCwgc3RvcmFnZVR5
cGUpKTsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklE
LCBzdG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
KyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBzdG9yYWdlUGF0aCwgc3Rv
cmFnZVR5cGUpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tp
ZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nJiBzdG9y
YWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSYgc3RvcmFnZVR5cGUpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQ
b29sU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29s
U291cC5jcHAKaW5kZXggYmZiYmY5NjY0ZTQ4MzUzMDk3MDk3MTFkZmQ2YzEzNDE1NzMyYmRhYy4u
N2ZlNGFjYTBjNWQyZDBlN2ZjMGQ5ZDVhNGZhMjdlYmNjODBhNjc1ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcApAQCAtMzcs
MzAgKzM3LDI0IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycyYgcGFyYW1ldGVycykKIHsKLSAgICBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1l
dGVycyYgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgc3VwcGxlbWVudDxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKGRlZmF1
bHRTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5j
b29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5jb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOwotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0g
ICAgICAgIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3Jh
Z2VFbmFibGVkID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3Jh
Z2VFbmFibGVkKCk7CisgICAgLy8gRklYTUU6IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgorICAgIC8vIEZJWE1F
OiBtX2lnbm9yZVRMU0Vycm9ycyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3Rv
cmUgb3IgcmVtb3ZlZC4KKyAgICAvLyBGSVhNRTogbV9uZXR3b3JrUHJveHlTZXR0aW5ncyBzaG91
bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCiAKLSAgICBwYXJhbWV0ZXJzLmNv
b2tpZUFjY2VwdFBvbGljeSA9IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3k7Ci0gICAg
cGFyYW1ldGVycy5pZ25vcmVUTFNFcnJvcnMgPSBtX2lnbm9yZVRMU0Vycm9yczsKICAgICBwYXJh
bWV0ZXJzLmxhbmd1YWdlcyA9IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKTsKLSAgICBwYXJhbWV0
ZXJzLnByb3h5U2V0dGluZ3MgPSBtX25ldHdvcmtQcm94eVNldHRpbmdzOwogICAgIHBhcmFtZXRl
cnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSB0cnVlOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMpCiB7CisgICAgLy8g
RklYTUU6IE1vdmUgdGhpcyB0byBXZWJzaXRlRGF0YVN0b3JlLgogICAgIG1faWdub3JlVExTRXJy
b3JzID0gaWdub3JlVExTRXJyb3JzOwotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0SWdu
b3JlVExTRXJyb3JzKG1faWdub3JlVExTRXJyb3JzKSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKGNvbnN0IFdlYkNvcmU6OlNvdXBOZXR3b3Jr
UHJveHlTZXR0aW5ncyYgc2V0dGluZ3MpCiB7CisgICAgLy8gRklYTUU6IE1vdmUgdGhpcyB0byBX
ZWJzaXRlRGF0YVN0b3JlLgogICAgIG1fbmV0d29ya1Byb3h5U2V0dGluZ3MgPSBzZXR0aW5nczsK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fbmV0
d29ya1Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mby5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5m
by5oCmluZGV4IDgzNTBkYmFjZjhkNTU3ZTU3YzhiY2ZjM2U5M2QwOTdiODk0NmFiYjguLjlmNDY4
NWQxM2FiZDJiNGFjOGM1Mzc4YjhlNTEyZjljMDI5ZGIzYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb25JbmZvLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRl
ICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQQ29va2llQWNjZXB0UG9saWN5
Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDk4YjM2Y2M3YWQ3NTFhYmExMzA5Nzc3MzI4NDY5YTA2NGIx
YzFhZWQuLjIzZTRkMTM2YjExYzc4MzVlMTRlYzFlYjQ1ZDUxYjc1ZTc2MDk5N2MgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NiBA
QAorMjAyMC0wOS0yMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgorCisgICAgICAgIE1vdmUgTmV0d29ya1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgZnJvbSBXZWJQ
cm9jZXNzUG9vbCB0byBXZWJzaXRlRGF0YVN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYwNDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNb3N0IGNoYW5nZXMgdG8gdGVzdHMgYXJlIGp1c3QgY2Fs
bGluZyBhIGZ1bmN0aW9uIG9uIHRoZSBXS1dlYnNpdGVEYXRhU3RvcmUgaW5zdGVhZCBvZiB0aGUg
V0tQcm9jZXNzUG9vbAorICAgICAgICBiZWNhdXNlIHdlIHdhbnQgdG8gZG8gc29tZXRoaW5nIHdp
dGggdGhlIG5ldHdvcmsgcHJvY2VzcyBhbmQgaXQgaGFzIGEgbmV3IG93bmVyLgorICAgICAgICBF
eGNlcHRpb25zIGFyZSBub3RlZCBpbmxpbmUuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRv
d25sb2FkQXRSYXRlKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0lEQkNoZWNrcG9pbnRXQUwubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tOgorICAgICAgICAo
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRl
eFVwZ3JhZGVUb1YyLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbToKKyAg
ICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNz
Lm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWlu
ZW50bHkubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbToKKyAgICAgICAgKFRFU1QpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVy
c2lzdGVuY2UubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNo
Tm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbToKKyAgICAgICAgKGNoZWNrUmVjb3ZlcnlBZnRlckNy
YXNoKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NT
d2FwT25OYXZpZ2F0aW9uLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAg
ICBUaGlzIHRlc3Qgd2FzIG1ha2luZyBhIFdLV2Vic2l0ZURhdGFTdG9yZSwgZ2V0dGluZyBpdHMg
cmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNzIGRpcmVjdG9yeSwKKyAgICAgICAgcHV0dGluZyB0aGlu
Z3MgaW4gdGhhdCBkaXJlY3RvcnksIHRoZW4gc3RhcnRpbmcgdGhlIG5ldHdvcmsgcHJvY2VzcyBh
bmQgbWFraW5nIHN1cmUgZXZlcnl0aGluZworICAgICAgICB3b3JrcyB3aGVuIGluaXRpYWxpemlu
ZyB0aGUgbmV0d29yayBwcm9jZXNzLiAgTm93LCBuZXR3b3JrIHByb2Nlc3MgaW5pdGlhbGl6YXRp
b24gaGFwcGVucyB3aGVuIGEKKyAgICAgICAgV0tXZWJzaXRlRGF0YVN0b3JlIGlzIGluc3RhbnRp
YXRlZCwgc28gd2UgbmVlZCB0byBwdXQgdGhpbmdzIHRoZXJlIGJlZm9yZSBpbnN0YW50aWF0aW5n
IGEgV0tXZWJzaXRlRGF0YVN0b3JlLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tOgorICAgICAgICBCZWZvcmUgdGhpcyBjaGFu
Z2UsIGVhY2ggV0tQcm9jZXNzUG9vbCBoYWQgaXRzIG93biBuZXR3b3JrIHByb2Nlc3MsIHdoaWNo
IGhvbGRzIHRoZSBzZXJ2aWNlIHdvcmtlciByZWdpc3RyeQorICAgICAgICBmb3IgdGhlIFdlYnNp
dGVEYXRhU3RvcmVzIHVzZWQgd2l0aCB0aGF0IHByb2Nlc3MgcG9vbC4gIE5vdywgdGhlIG5ldHdv
cmsgcHJvY2VzcyBzdGlsbCBuZWVkcyB0byBoYXZlIGEgc2VydmljZQorICAgICAgICB3b3JrZXIg
cmVnaXN0cnkgaW4gaXQsIGJ1dCB3aGVuIHdlIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gaXQgbG9v
a2luZyBmb3IgYSB3ZWIgcHJvY2VzcyB0byBydW4gdGhlIHNlcnZpY2UKKyAgICAgICAgd29ya2Vy
LCB3ZSBnbyBhcmJpdHJhcmlseSB0byB0aGUgZmlyc3QgcHJvY2VzcyBwb29sIHRoYXQgaGFzIGEg
cHJvY2VzcyB3ZSBjYW4gdXNlLiAgVGhpcyBsb2dpYyBpcyBpbiAKKyAgICAgICAgV2ViUHJvY2Vz
c1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vzcy4g
IEJlY2F1c2Ugd2UgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wgZWFjaAorICAgICAgICB0aW1l
LCBzZXR0aW5nIHRoZSBjdXN0b20gdXNlciBhZ2VudCB0byB0d28gZGlmZmVyZW50IHRoaW5ncyBp
biB0d28gZGlmZmVyZW50IHByb2Nlc3MgcG9vbHMgY2F1c2VzIG9ubHkgb25lCisgICAgICAgIHRv
IGJlIHVzZWQuICBUaGlzIGlzIG5vdCBhIHByb2JsZW0gaW4gcHJhY3RpY2UsIHRob3VnaCwgYmVj
YXVzZSB0aGUgb25seSBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgdGhlIFNQSSB0bworICAgICAgICBz
ZXQgYSBzZXJ2aWNlIHdvcmtlcidzIGN1c3RvbSB1c2VyIGFnZW50IGlzIFNhZmFyaSwgd2hpY2gg
b25seSBoYXMgb25lIHByb2Nlc3MgcG9vbC4gIFRoaXMgdGVzdCBzdGlsbCB2ZXJpZmllcworICAg
ICAgICB0aGF0IGEgdXNlciBhZ2VpbnQgaXMgY29ycmVjdGx5IHNlbnQuCisgICAgICAgIFNpbWls
YXJseSwgdGhlIHRlc3RzIHRoYXQgY291bnQgc2VydmljZSB3b3JrZXIgcHJvY2Vzc2VzIGVpdGhl
ciBoYXZlIGRpZmZlcmVudCByZXN1bHRzIG9yIG5lZWQgdG8gYmUgcnVuIHdpdGgKKyAgICAgICAg
b25lIHByb2Nlc3MgcG9vbCBwZXIgcGFyZW50IHByb2Nlc3MuICBUbyBrZWVwIHRoZSByZXN1bHRz
IHRoZSBzYW1lLCBJIHNlcGFyYXRlZCB0aGUgdGVzdHMgaW50byBkaWZmZXJlbnQKKyAgICAgICAg
VEVTVChTZXJ2aWNlV29ya2VycywgLi4uKSBtYWNyb3Mgd2hpY2ggYXJlIHJ1biBpbiBzZXBhcmF0
ZSBwYXJlbnQgcHJvY2Vzc2VzLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW06CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tp
ZVVJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmlu
aXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW0NoZWNrU2Vz
c2lvbkNvb2tpZVVJRGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdKToKKyAgICAgICAgKC1bQ2hlY2tT
ZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdKToKKyAgICAgICAgKFRFU1Qp
OgorICAgICAgICBUaGlzIGlzIHRoZSB3aG9sZSBwb2ludCBvZiBtZSBkb2luZyB0aGlzLgorICAg
ICAgICBJIHRvb2sgYSB0ZXN0IHRoYXQgd2FzIGZsYWt5IG9ubHkgb24gaU9TIChiZWNhdXNlIG9m
IGRpZmZlcmVudCBOU0hUVFBDb29raWVTdG9yYWdlIHN5bmNpbmcgYmVoYXZpb3IpIGFuZCBtYWRl
CisgICAgICAgIGl0IGZsYWt5IG5vd2hlcmUgKGZpbmdlcnMgY3Jvc3NlZCEpIGFuZCBhZGRlZCBh
IHRlc3QgdGhhdCBjb3JyZWN0bHkgaGFuZGxlcyBzZXNzaW9uIGNvb2tpZXMgbGlrZSB3ZSBjb3Vs
ZCBub3QKKyAgICAgICAgYmVmb3JlIHRoaXMgY2hhbmdlLgorICAgICAgICBJIGFsc28gcmUtdXNl
ZCBzb21lIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgYW5kIG1hZGUgaXQgc3RvcCB1c2luZyBwcm9jZXNz
LWdsb2JhbCBzdGF0aWMgdmFyaWFibGVzIGZvciB0ZXN0IHN0YXRlLgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tOgor
ICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW06CisgICAgICAgIChydW5XZWJzaXRlRGF0
YVN0b3JlQ3VzdG9tUGF0aHMpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVy
OjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dCk6CisgICAgICAgIFdLQ29udGV4dFNldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcgaXMgbm90IG5lZWRlZCwg
c28gSSByZW1vdmVkIGl0LgorICAgICAgICBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFT
dG9yZSBpc24ndCBuZWVkZWQgYW55IG1vcmUgYmVjYXVzZSBXS0NvbnRleHRSZWYgKFdlYlByb2Nl
c3NQb29sKSBkb2Vzbid0CisgICAgICAgIG93biBhIG5ldHdvcmsgcHJvY2VzcyBhbnkgbW9yZSwg
c28gaXQgZG9lc24ndCBjYXJlIHdoaWNoIGlzIHRoZSBkZWZhdWx0IFdlYnNpdGVEYXRhU3RvcmUu
CisgICAgICAgIEluIGZhY3QsIHRoZSAiZGVmYXVsdCIgV2Vic2l0ZURhdGFTdG9yZSBpc24ndCBy
ZWFsbHkgaW1wb3J0YW50IGluIHRoZSBuZXR3b3JrIHByb2Nlc3MgYW55IG1vcmUuCisKIDIwMjAt
MDktMjEgIEthdGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CiAKICAgICAg
ICAgQWxsb3cgYWJvdXQ6Ymxhbmsgc3ViZnJhbWUgbG9hZHMgZm9yIG5vbiBhcHAtYm91bmQgdG9w
IGZyYW1lcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0
d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rp
b24ubW0KaW5kZXggOTczODlmMDFmZjJlZTk5Yjc4M2IwYjUyMTA4MDc0ZjFhODFiNjk4MS4uOTIy
ZGRlMzZlYjE1OGEzMzA4YzU2YTA0MDBkYWU1ZTEzMDY0ZWE2ZiAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5n
Q29ubmVjdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3
b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzR3JvdXBQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCkBAIC04
Nyw3ICs4OCw3IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdD
b25uZWN0aW9uKQogICAgIHBpZF90IHdlYlZpZXcyUElEID0gW3dlYlZpZXcyLmdldCgpIF93ZWJQ
cm9jZXNzSWRlbnRpZmllcl07CiAgICAgRVhQRUNUX05FKHdlYlZpZXcxUElELCB3ZWJWaWV3MlBJ
RCk7CiAKLSAgICBwaWRfdCBpbml0aWFsTmV0d29ya1Byb2Nlc3NJZGVudGlmaWZlciA9IFtwcm9j
ZXNzUG9vbC5nZXQoKSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXTsKKyAgICBwaWRfdCBpbml0
aWFsTmV0d29ya1Byb2Nlc3NJZGVudGlmaWZlciA9IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNp
dGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl07CiAgICAgRVhQRUNUX05FKGlu
aXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVyLCAwKTsKICAgICBraWxsKGluaXRpYWxOZXR3
b3JrUHJvY2Vzc0lkZW50aWZpZmVyLCBTSUdLSUxMKTsKICAgICBVdGlsOjpydW4oJm5ldHdvcmtQ
cm9jZXNzQ3Jhc2hlZCk7CkBAIC05Niw3ICs5Nyw3IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJv
Y2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uKQogICAgIFt3ZWJWaWV3MS5nZXQoKSBsb2Fk
UmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRs
ZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJl
Y3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXV07CiAgICAgW3dlYlZpZXcxLmdldCgp
IF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKIAotICAgIHBpZF90IHJlbGF1bmNo
ZWROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIgPSBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX25ldHdvcmtQ
cm9jZXNzSWRlbnRpZmllcl07CisgICAgcGlkX3QgcmVsYXVuY2hlZE5ldHdvcmtQcm9jZXNzSWRl
bnRpZmllciA9IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQ
cm9jZXNzSWRlbnRpZmllcl07CiAgICAgRVhQRUNUX05FKGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZmVyLCByZWxhdW5jaGVkTmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKTsKICAgICBFWFBF
Q1RfRkFMU0UobmV0d29ya1Byb2Nlc3NDcmFzaGVkKTsKIApAQCAtMTQ2LDggKzE0Nyw4IEBAIFRF
U1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc1JlbGF1bmNoT25MYXVuY2hGYWlsdXJlKQogCiAgICAg
Ly8gQ29uc3R1Y3RpbmcgYSBXZWJWaWV3IHN0YXJ0cyBhIG5ldHdvcmsgcHJvY2VzcyBzbyB0ZXJt
aW5hdGUgdGhpcyBvbmUuIFRoZSBwYWdlIGxvYWQgYmVsb3cgd2lsbCB0aGVuIHJlcXVlc3QgYSBu
ZXR3b3JrIHByb2Nlc3MgYW5kIHdlCiAgICAgLy8gbWFrZSB0aGlzIG5ldyBuZXR3b3JrIHByb2Nl
c3MgbGF1bmNoIGNyYXNoIG9uIHN0YXJ0dXAuCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107Ci0gICAgW3Byb2Nlc3NQb29sIF9tYWtlTmV4dE5ldHdvcmtQcm9jZXNz
TGF1bmNoRmFpbEZvclRlc3RpbmddOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVE
YXRhU3RvcmUgX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZ107Cisg
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOwogCiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tNb25pdG9yV2ViQ29u
dGVudENyYXNoTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CiAgICAgW3dlYlZpZXcg
c2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKQEAgLTE1OCw3ICsxNTksNyBA
QCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NSZWxhdW5jaE9uTGF1bmNoRmFpbHVyZSkKICAg
ICBFWFBFQ1RfVFJVRShuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOwogICAgIEVYUEVDVF9GQUxTRSh3
ZWJQcm9jZXNzQ3Jhc2hlZCk7CiAgICAgRVhQRUNUX0dUKFt3ZWJWaWV3IF93ZWJQcm9jZXNzSWRl
bnRpZmllcl0sIDApOwotICAgIEVYUEVDVF9HVChbcHJvY2Vzc1Bvb2wuZ2V0KCkgX25ldHdvcmtQ
cm9jZXNzSWRlbnRpZmllcl0sIDApOworICAgIEVYUEVDVF9HVChbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCAwKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0KaW5kZXggYjdlZDk5OTM5ZmQ1OWYyMjhhN2U4
YmQ3NDk3MTJmNTM2NjAxNTYxNi4uMTgxOTEzMWM5YTBmZWIzMGIxYTJmMGNmY2Q4N2JmMjA0NWVi
YjNmNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9E
b3dubG9hZC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rv
d25sb2FkLm1tCkBAIC04ODksOSArODg5LDkgQEAgdm9pZCBkb3dubG9hZEF0UmF0ZShkb3VibGUg
ZGVzaXJlZEticHMsIHVuc2lnbmVkIHNwZWVkTXVsdGlwbGllciwgQXBwUmV0dXJuc1RvRm8KICAg
ICByZWNlaXZlZERhdGEgPSBmYWxzZTsKICAgICBVdGlsOjpydW4oJnJlY2VpdmVkRGF0YSk7CiAg
ICAgLy8gU3RhcnQgdGhlIERvd25sb2FkTW9uaXRvcidzIHRpbWVyLgotICAgIFtbd2ViVmlldyBj
b25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpZRVNd
OworICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF9zeW50aGVz
aXplQXBwSXNCYWNrZ3JvdW5kOllFU107CiAgICAgaWYgKHJldHVyblRvRm9yZWdyb3VuZCA9PSBB
cHBSZXR1cm5zVG9Gb3JlZ3JvdW5kOjpZZXMpCi0gICAgICAgIFtbd2ViVmlldyBjb25maWd1cmF0
aW9uXS5wcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpOT107CisgICAgICAg
IFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBw
SXNCYWNrZ3JvdW5kOk5PXTsKICAgICBkaWRDYW5jZWwgPSBmYWxzZTsKICAgICBVdGlsOjpydW4o
JmRpZENhbmNlbCk7CiAgICAgdGVybWluYXRlU2VydmVyID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5t
bQppbmRleCA1Y2Q3YWJkYTAxZDE5NzQ3ZGNlZDQ1YWJlZTk5ZWNiMWMxNGQ2MTYwLi5kNzdhNmZk
OTg3OWU0M2Y3MDExZGRhZjkyYzNhNzk3ZjNmYzEzNzM0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tCkBA
IC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQu
aD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBv
cnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtODYsNyArODcsNyBAQCBURVNUKElu
ZGV4ZWREQiwgQ2hlY2twb2ludHNXQUxBdXRvbWF0aWNhbGx5KQogICAgIFJldGFpblB0cjxXS1dl
YlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRl
bnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6
QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJz
aXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBSZXRhaW5QdHI8
V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRp
b24uZ2V0KCldKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KaW5kZXggYzhhZjFkMjQzYzRmZWI1OGFj
OTg0ZGFmMTRkODE1MzFhN2NjM2M3My4uYmJmMWExNTIxNWRjMWZkMjhkZmRkYjllMzQxYjY0Zjlj
MDA4ZjRjNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JREJEZWxldGVSZWNvdmVyeS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0
IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJD
b250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25m
aWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQ
cm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVT
aGVldC5oPgpAQCAtNTcsNyArNTgsNyBAQCBURVNUKEluZGV4ZWREQiwgRGVsZXRlUmVjb3Zlcnkp
CiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29u
ZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVy
OmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKIAogICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0aGUg
ZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5k
bGVdIFVSTEZvclJlc291cmNlOkAiSURCRGVsZXRlUmVjb3ZlcnkiIHdpdGhFeHRlbnNpb246QCJz
cWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3Jh
ZGVUb1YyLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRl
eFVwZ3JhZGVUb1YyLm1tCmluZGV4IDk1Y2NhMGNlMjgxNmZmMWE2YTQ1NWFkMGJkMmM4YTRhYTRm
MjdmZWQuLjg4YTUzZjYxZDlkOTgyNjU3Yjk2NWVmOGE2Y2ViYTc5MWVmZjE3NTUgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRl
VG9WMi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQklu
ZGV4VXBncmFkZVRvVjIubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1By
b2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9s
bGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01
OCw3ICs1OSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleFVwZ3JhZGVUb1YyKQogICAgIFJldGFp
blB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dL
V2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24g
dXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdl
dCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJv
Y2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5n
ZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAv
LyBDb3B5IHRoZSBpbmNvbnNpc3RlbnQgZGF0YWJhc2UgZmlsZXMgdG8gdGhlIGRhdGFiYXNlIGRp
cmVjdG9yeQogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JS
ZXNvdXJjZTpAIkluZGV4VXBncmFkZSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVj
dG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1Yy
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9y
ZUluZm9VcGdyYWRlVG9WMi5tbQppbmRleCBmZmE1YTc4NzhhNDczMmI4ZWMyNDVjOTA1M2ZkMTdl
ZTU5NTZmYTNkLi40MDNlMGZmYTgyMTIzNDUxYzQ2NmZlZWNjMzI0ZjljNmU3NjFkNDNkIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0
b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KQEAgLTMxLDYgKzMxLDcg
QEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
V2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRl
RGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8
V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19X
S1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJREJP
YmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMikKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmln
dXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9u
IGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxl
cl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRs
ZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9y
ZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSBkYXRhYmFzZSBmaWxl
cyB3aXRoIG9sZCBPYmplY3RTdG9yZUluZm8gc2NoZW1hIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3Rv
cnkuCiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291
cmNlOkAiSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0ZTMi
IHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJv
Y2Vzc0tpbGwubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4
ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KaW5kZXggNjg3NDUyOWViYmYzNzg1MThkOTNlMGEw
ODIxZjYzMDEyY2ZhNmQ1Zi4uNzMwNzdlY2RmZDM2NWI1MjkwNTNkNDdjYmEyYTE0ZWQwNTFlZDZl
YSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQpAQCAtMzEsNiAr
MzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1w
b3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYv
UmV0YWluUHRyLmg+CkBAIC05Miw3ICs5Myw3IEBAIFRFU1QoSW5kZXhlZERCLCBEYXRhYmFzZVBy
b2Nlc3NLaWxsKQogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2Ny
aXB0TWVzc2FnZSk7CiAgICAgICAgIGlmICgha2lsbGVkREJQcm9jZXNzICYmIG9wZW5SZXF1ZXN0
VXBncmFkZU5lZWRlZCkgewogICAgICAgICAgICAga2lsbGVkREJQcm9jZXNzID0gdHJ1ZTsKLSAg
ICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CisgICAgICAgICAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0
YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgICAgIH0KICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERC
TXVsdGlQcm9jZXNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bmRleGVkREJNdWx0aVByb2Nlc3MubW0KaW5kZXggN2Y2MjY0NWQ5OTYwZWRlOTYwYzAwMWMyNzJi
NjUwMzkzOTAxMTYzMi4uNmY2N2RjMjdlZGMzZDI3NDViMTcwZTQ4MmJjZDkwZTg0OTRjYjk1YSAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJNdWx0aVByb2Nlc3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQg
PFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1w
b3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KICNpbXBvcnQgPHd0Zi9EZXF1ZS5oPgpA
QCAtNjksNyArNzAsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCTXVsdGlQcm9jZXNzKQog
ICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRv
cHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZp
Z3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpo
YW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1
cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0K
aW5kZXggYjMyY2U0YTVmNzM4NjNhZWRkY2I5MTkwYjViNDM3MGUzNzQ0M2I1ZS4uZDYyMjAzMjJl
NDc4ZDFkYWM3OGYwNjk2N2MzYjY0M2JmZDYyZjliZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNl
Lm1tCkBAIC03OCw3ICs3OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJQZXJzaXN0ZW5j
ZSkKICAgICB3ZWJWaWV3ID0gbmlsOwogCiAgICAgLy8gVGVybWluYXRlIHRoZSBuZXR3b3JrIHBy
b2Nlc3MKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIE1ha2UgYSBuZXcgd2ViIHZpZXcg
dG8gZmluaXNoIHRoZSB0ZXN0CiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlv
bjpjb25maWd1cmF0aW9uLmdldCgpXSk7CkBAIC0yNjgsNyArMjY4LDcgQEAgVEVTVChJbmRleGVk
REIsIEluZGV4ZWREQlRoaXJkUGFydHlGcmFtZUhhc0FjY2VzcykKIAogICAgIHdlYlZpZXcgPSBu
aWw7CiAgICAgc2Vjb25kV2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5w
cm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAg
IC8vIFRoaXJkLXBhcnR5IElEQiBzdG9yYWdlIGlzIHN0b3JlZCBpbiB0aGUgbWVtb3J5IG9mIG5l
dHdvcmsgcHJvY2Vzcy4KICAgICBhdXRvIHRoaXJkV2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CkBAIC0zODUsNyArMzg1LDcgQEAgVEVTVChJ
bmRleGVkREIsIEluZGV4ZWREQlRoaXJkUGFydHlXb3JrZXJIYXNBY2Nlc3MpCiAKICAgICB3ZWJW
aWV3ID0gbmlsOwogICAgIHNlY29uZFdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CiAKICAgICBhdXRvIHRoaXJkV2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uLmdldCgpXSk7CiAgICAgbG9hZFRlc3RQYWdlSW5XZWJWaWV3KHRoaXJkV2ViVmll
dy5nZXQoKSwgQCJkYXRhYmFzZSBpcyBjcmVhdGVkIik7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5k
SW1taW5lbnRseS5tbQppbmRleCA4ZWM2NWYwYTNiYTkzNzM2ZmRiNGY5ZGRmZWY3NWNlNjAwMDVm
ZDBkLi41MTBiMjRmNTY5ZDIyYmQ0MGE3YWRiZTI1ZWNmZDBlY2ZjOGFjNzI2IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJ
bW1pbmVudGx5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQg
PFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNv
bnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZp
Z3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1By
b2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpAQCAt
ODgsOCArODksOCBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkp
CiAKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJDb250aW51ZSIpOwogCi0gICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5k
SW1taW5lbnRseV07Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0
ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nl
c3NEaWRSZXN1bWVdOwogCiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiRXhwZWN0ZWQgQWJv
cnQgRm9yIFN1c3BlbnNpb24iKTsKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJFeHBlY3Rl
ZCBTdWNjZXNzIEFmdGVyIFJlc3VtZSIpOwpAQCAtMTU4LDggKzE1OSw4IEBAIFRFU1QoSW5kZXhl
ZERCLCBTdXNwZW5kSW1taW5lbnRseUZvclRoaXJkUGFydHlEYXRhYmFzZXMpCiAgICAgW3dlYlZp
ZXcgbG9hZEhUTUxTdHJpbmc6bWFpbkZyYW1lU3RyaW5nIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhT
dHJpbmc6QCJodHRwOi8vd2Via2l0Lm9yZyJdXTsKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQo
QCJkYXRhYmFzZSBpcyBjcmVhdGVkIik7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9j
ZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKLSAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVz
dW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAg
ICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJ0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZWQiKTsKIH0K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhl
ZERCVGVtcEZpbGVTaXplLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0KaW5kZXggNTM2NTQxZTNiMGU1Y2RhM2EzYjU1MWMx
ZTgxZTk2M2Y1OTJhZWIyZi4uZTdiOTkyMjhjZTg3NmU0NDdlNjQ3ODJlZjlkODdmMjVhZGM5Yjlm
YSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eGVkREJUZW1wRmlsZVNpemUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0KQEAgLTk1LDcgKzk1LDcgQEAgVEVTVChJ
bmRleGVkREIsIEluZGV4ZWREQlRlbXBGaWxlU2l6ZSkKIAogICAgIC8vIFRlcm1pbmF0ZSBuZXR3
b3JrIHByb2Nlc3MgdG8ga2VlcCBXQUwgb24gZGlzay4KICAgICB3ZWJWaWV3ID0gbmlsOwotICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1
bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOndhbEZpbGVQYXRoLmdldCgpLnBhdGhdKTsKICAg
ICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBmaWxlQXR0cmlidXRlcyA9IFtbTlNGaWxlTWFuYWdl
ciBkZWZhdWx0TWFuYWdlcl0gYXR0cmlidXRlc09mSXRlbUF0UGF0aDp3YWxGaWxlUGF0aC5nZXQo
KS5wYXRoIGVycm9yOm5pbF07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQppbmRleCA0
MTMzZWU3YjNkYWU0M2VjMjA0OWNmZmMwNjNjMGU0MjljMTdjNWVmLi41Zjc5MTkwOTQzYzc3MWU5
ZDllNDQyYTBkYTI2NmZmOWEwM2JhMmYyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2Uu
bW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJv
bGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2VicGFnZVByZWZlcmVuY2VzUHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtMTA5LDcgKzEx
MCw3IEBAIFRFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzQ3Jhc2hlcykKICAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgRVhQ
RUNUX1dLX1NUUkVRKEAic2Vzc2lvbjpzdG9yYWdlIiwgW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHld
KTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0g
ZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3Nh
Z2UpOwpAQCAtMTYyLDcgKzE2Myw3IEBAIFRFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQcm9j
ZXNzU3VzcGVuZHMpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlw
dE1lc3NhZ2UpOwogICAgIEVYUEVDVF9XS19TVFJFUShAInZhbHVlIiwgW2xhc3RTY3JpcHRNZXNz
YWdlIGJvZHldKTsKIAotICAgIFtwcm9jZXNzUG9vbC5nZXQoKSBfc2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRl
RGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwogCiAg
ICAgcmVhZHlUb0NvbnRpbnVlID0gZmFsc2U7CiAgICAgW3dlYlZpZXcxIGV2YWx1YXRlSmF2YVNj
cmlwdDpAIndpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgna2V5JywgJ25ld1ZhbHVlJykiIGNv
bXBsZXRpb25IYW5kbGVyOl4oaWQsIE5TRXJyb3IgKikgewpAQCAtMTc3LDcgKzE3OCw3IEBAIFRF
U1QoV0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzU3VzcGVuZHMpCiAgICAgfV07CiAgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWFkeVRvQ29udGludWUpOwogICAgIAotICAgIFtw
cm9jZXNzUG9vbC5nZXQoKSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbY29u
ZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRS
ZXN1bWVdOwogCiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0K
aW5kZXggZTYwZjg4MDI1ZDA5Mzc4OWY2OTU2MGQ5YjkyYjI4MmYwNzEzMGE4ZC4uMGUyMWY5MDk1
MDAxNGY2YzQ5MGIwZWI4ZTQ2MWVjNGJhODUwYmI4MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCkBAIC0yOCw3
ICsyOCw3IEBACiAjaW1wb3J0ICJIVFRQU2VydmVyLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3
LmgiCiAjaW1wb3J0ICJVdGlsaXRpZXMuaCIKLSNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29s
UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4K
ICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2lt
cG9ydCA8d3RmL1ZlY3Rvci5oPgpAQCAtMzcsMTQgKzM3LDE0IEBAIFRFU1QoV2ViS2l0LCBOZXR3
b3JrUHJvY2Vzc0VudGl0bGVtZW50cykKIHsKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwg
NjAwKSBjb25maWd1cmF0aW9uOltbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRd
IGF1dG9yZWxlYXNlXV0pOwogICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VO
YW1lZDpAInNpbXBsZSJdOwotICAgIFdLUHJvY2Vzc1Bvb2wgKnBvb2wgPSBbd2ViVmlldyBjb25m
aWd1cmF0aW9uXS5wcm9jZXNzUG9vbDsKLSAgICBib29sIGhhc0VudGl0bGVtZW50ID0gW3Bvb2wg
X25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAiY29tLmFwcGxlLnJvb3Rs
ZXNzLnN0b3JhZ2UuV2ViS2l0TmV0d29ya2luZ1NhbmRib3giXTsKKyAgICBXS1dlYnNpdGVEYXRh
U3RvcmUgKnN0b3JlID0gW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZTsK
KyAgICBib29sIGhhc0VudGl0bGVtZW50ID0gW3N0b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0
bGVtZW50Rm9yVGVzdGluZzpAImNvbS5hcHBsZS5yb290bGVzcy5zdG9yYWdlLldlYktpdE5ldHdv
cmtpbmdTYW5kYm94Il07CiAjaWYgUExBVEZPUk0oTUFDKSAmJiBVU0UoQVBQTEVfSU5URVJOQUxf
U0RLKQogICAgIEVYUEVDVF9UUlVFKGhhc0VudGl0bGVtZW50KTsKICNlbHNlCiAgICAgRVhQRUNU
X0ZBTFNFKGhhc0VudGl0bGVtZW50KTsKICNlbmRpZgotICAgIEVYUEVDVF9GQUxTRShbcG9vbCBf
bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2Fz
ZSJdKTsKKyAgICBFWFBFQ1RfRkFMU0UoW3N0b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVt
ZW50Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVyZSBjYXNlIl0pOwogfQogCiBURVNUKFdlYktpdCwg
SFRUUFJlZmVyZXIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9u
UGVyc2lzdGVudERhdGFTdG9yZS5tbQppbmRleCA2MDk4ZThkYWQyNTJlNTllYzQ5MTI1MGI0MjE2
ZDNjZDA5MzZlOGY3Li4yZjhhMmUzM2ZlODcwM2JhYjJkOGUwNTEwODMyYmVjZDlkNDg5MzRiIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQ
cm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnRE
YXRhU3RvcmUubW0KQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIHZvaWQgY2hlY2tSZWNvdmVyeUFm
dGVyQ3Jhc2goV0tXZWJzaXRlRGF0YVN0b3JlICpkYXRhU3RvcmUpCiAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7CiAKLSAgICBbW3dlYlZpZXcg
Y29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAg
ICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVx
dWVzdFdpdGhVUkw6c2ltcGxlMl1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZSk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQppbmRleCA5NWRjOWQ5OGRmMTNi
MDcwNWUwODE3ZDA1ODcyNjUxMjBjMTg4ZDIzLi5kZjMyMGQ2NGRhZGJkZDFlZTI4M2Y4NjVjMTQ0
MjNmM2FjNTU2NGJmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KQEAgLTUzODUs
NyArNTM4NSw3IEBAIFRFU1QoUHJvY2Vzc1N3YXAsIFVzZVByZXdhcm1lZFByb2Nlc3NBZnRlclRl
cm1pbmF0aW5nTmV0d29ya1Byb2Nlc3MpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGlu
UnVuTG9vcCgxKTsKIAotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OworICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXcyID0gYWRvcHROUyhbW1dL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBj
b25maWd1cmF0aW9uOndlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgW3dlYlZpZXcy
IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3Mu
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MubW0KaW5kZXggMGUxMGMzNGVlYzgyYzZmNjU5MmJiN2M0Mjc0ZDBlNDU1ZWFmMTFl
OC4uYTNhYmEyMzFhOTNiM2Q1ZjAwYTE5M2M0N2MyNzY3ODY0YjM1MDU1YiAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy5tbQpAQCAtNzE5LDcgKzcxOSw3IEBAIFRFU1QoUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcywgTmV0d29ya1Byb2Nlc3NSZXN0YXJ0KQogCiAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8g
d2ViVmlldzIgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFr
ZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0p
OwogCkBAIC03NTIsNyArNzUyLDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBOZXR3
b3JrUHJvY2Vzc1Jlc3RhcnQpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9v
cCgxKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9y
ZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MyA9IGFkb3B0
TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAs
IDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKQEAgLTE1NTgsMTAg
KzE1NTgsOCBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE1pZ3JhdGVEYXRhRnJvbU1p
c3NpbmdUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0U2FtZVNpdAogCiBURVNUKFJlc291cmNlTG9hZFN0
YXRpc3RpY3MsIENhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2wpCiB7CisgICAg
TlNVUkwgKml0cFJvb3RVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1RlbXBvcmFyeURp
cmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkNhbkFjY2Vzc0RhdGFT
dW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2xUZXN0Il0gaXNEaXJlY3Rvcnk6WUVTXTsKICAgICBhdXRv
IGRlZmF1bHRGaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKLSAg
ICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlv
biA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07
Ci0gICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5p
dFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsK
LSAgICBOU1VSTCAqaXRwUm9vdFVSTCA9IFtbZGF0YVN0b3JlIF9jb25maWd1cmF0aW9uXSBfcmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeV07CiAgICAgTlNVUkwgKmZpbGVVUkwgPSBbaXRw
Um9vdFVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJvYnNlcnZhdGlvbnMuZGIiXTsK
ICAgICBbZGVmYXVsdEZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFBhdGg6aXRwUm9vdFVSTC5wYXRo
IGVycm9yOm5pbF07CiAgICAgRVhQRUNUX0ZBTFNFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4
aXN0c0F0UGF0aDppdHBSb290VVJMLnBhdGhdKTsKQEAgLTE1NzIsNiArMTU3MCwxMCBAQCBURVNU
KFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vz
c1Bvb2wpCiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQ
YXRoOm5ld0ZpbGVVUkwucGF0aF0pOwogICAgIFtkZWZhdWx0RmlsZU1hbmFnZXIgY29weUl0ZW1B
dFBhdGg6bmV3RmlsZVVSTC5wYXRoIHRvUGF0aDpmaWxlVVJMLnBhdGggZXJyb3I6bmlsXTsKICAg
ICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6ZmlsZVVS
TC5wYXRoXSk7CisKKyAgICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0
b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3
XSBhdXRvcmVsZWFzZV07CisgICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5fcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RpcmVjdG9yeSA9IGl0cFJvb3RVUkw7CisgICAgYXV0byAqZGF0YVN0b3JlID0g
W1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFT
dG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKICAgICBbZGF0YVN0b3JlIF9zZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZRVNdOwogCiAgICAgc3RhdGljIGJvb2wgZG9uZUZs
YWcgPSBmYWxzZTsKQEAgLTE2MzMsMTIgKzE2MzUsMTIgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLCBTdG9yZVN1c3BlbnNpb24pCiAgICAgW3dlYlZpZXcyIF90ZXN0X3dhaXRGb3JEaWRG
aW5pc2hOYXZpZ2F0aW9uXTsKIAogICAgIGRvbmVGbGFnID0gZmFsc2U7Ci0gICAgW3NoYXJlZFBy
b2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOl57CisgICAgW2Rh
dGFTdG9yZTEgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6XnsKICAgICAgICAg
ZG9uZUZsYWcgPSB0cnVlOwogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
ZG9uZUZsYWcpOwogCi0gICAgW3NoYXJlZFByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWVdOworICAgIFtkYXRhU3RvcmUxIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVd
OwogfQogCiBAaW50ZXJmYWNlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTY2hlbWVIYW5kbGVyIDog
TlNPYmplY3QgPFdLVVJMU2NoZW1lSGFuZGxlcj4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0KaW5kZXgg
MzRhNGY1YzUzOGI5YjBlOWZjYjA1MDcyYjE3MDI4OGU5ZTRlOWY4Zi4uMmY4ZTM0ZGJhNmRhNDcy
MzU2NTVmZjBkYjJhZGNhMWJmOGM1NjcyMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0KQEAgLTU1
OCw3ICs1NTgsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBVc2VyQWdlbnRPdmVycmlkZSkKIAog
ICAgIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxv
Y10gaW5pdF0pOwogCi0gICAgbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbU1dVc2VyQWdlbnRN
ZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJNZXNzYWdlIGZy
b20gd29ya2VyOiBCYXIgQ3VzdG9tIFVzZXJBZ2VudCJdKTsKKyAgICBtZXNzYWdlSGFuZGxlciA9
IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0aEV4cGVj
dGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6IEZvbyBDdXN0b20gVXNlckFnZW50Il0p
OwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1l
c3NhZ2VIYW5kbGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJzdyJdOwogCiAgICAgd2Vi
VmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVj
dCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CkBA
IC02MzMsOCArNjMzLDYgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgQ2FjaGVTdG9yYWdlUmVzdG9y
ZUZyb21EaXNrKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9u
ZSA9IGZhbHNlOwogCi0gICAgW1dLV2Vic2l0ZURhdGFTdG9yZSBfZGVsZXRlRGVmYXVsdERhdGFT
dG9yZUZvclRlc3RpbmddOwotCiAgICAgU2VydmljZVdvcmtlclRDUFNlcnZlciBzZXJ2ZXIoewog
ICAgICAgICB7ICJ0ZXh0L2h0bWwiLCBtYWluQ2FjaGVTdG9yYWdlQnl0ZXMgfQogICAgIH0sIHsK
QEAgLTk4Miw2ICs5ODAsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJv
Y2Vzc0NyZWF0aW9uKQogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNv
bmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5p
dF0pOwogICAgIHNldENvbmZpZ3VyYXRpb25JbmplY3RlZEJ1bmRsZVBhdGgoY29uZmlndXJhdGlv
bi5nZXQoKSk7CisgICAgUmV0YWluUHRyPFdLUHJvY2Vzc1Bvb2w+IG9yaWdpbmFsUHJvY2Vzc1Bv
b2wgPSBjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sOwogCiAgICAgZG9uZSA9IGZhbHNl
OwogCkBAIC0xMDM1LDcgKzEwMzQsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29y
a2VyUHJvY2Vzc0NyZWF0aW9uKQogICAgIGRvbmUgPSBmYWxzZTsKIAogICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IGxvYWRpbmcgdGhlIHNpbXBsZSBwYWdlIGRpZCBub3Qgc3RhcnQgdGhlIHNlcnZpY2Ug
d29ya2VyIHByb2Nlc3MuCi0gICAgRVhQRUNUX0VRKDB1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3Vy
YXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOworICAgIEVYUEVD
VF9FUSgxdSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNl
V29ya2VyUHJvY2Vzc0NvdW50KTsKIAogICAgIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3Vy
YXRpb246bmV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIEVYUEVDVF9FUSgydSwgd2ViVmll
dy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl93ZWJQcm9jZXNzQ291bnRJZ25vcmlu
Z1ByZXdhcm1lZCk7CkBAIC0xMDQzLDkgKzEwNDIsOCBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBT
ZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9uKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwogCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgbG9h
ZGluZyB0aGlzIHBhZ2UgZGlkIHN0YXJ0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgogICAg
IEVYUEVDVF9FUSgxdSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9z
ZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKLQorICAgIEVYUEVDVF9FUSgxdSwgb3JpZ2luYWxQ
cm9jZXNzUG9vbC5nZXQoKS5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CiAgICAgW1tjb25m
aWd1cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVdIHJlbW92ZURhdGFPZlR5cGVzOltXS1dlYnNpdGVE
YXRhU3RvcmUgYWxsV2Vic2l0ZURhdGFUeXBlc10gbW9kaWZpZWRTaW5jZTpbTlNEYXRlIGRpc3Rh
bnRQYXN0XSBjb21wbGV0aW9uSGFuZGxlcjpeKCkgewogICAgICAgICBkb25lID0gdHJ1ZTsKICAg
ICB9XTsKQEAgLTE2MTgsMjEgKzE2MTYsMzUgQEAgc3RhdGljIHNpemVfdCBsYXVuY2hTZXJ2aWNl
V29ya2VyUHJvY2Vzcyhib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGIKICAg
ICByZXR1cm4gd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl93ZWJQcm9j
ZXNzQ291bnRJZ25vcmluZ1ByZXdhcm1lZDsKIH0KIAotVEVTVChTZXJ2aWNlV29ya2VycywgT3V0
T2ZBbmRJblByb2Nlc3NTZXJ2aWNlV29ya2VyKQorVEVTVChTZXJ2aWNlV29ya2VycywgT3V0T2ZQ
cm9jZXNzU2VydmljZVdvcmtlcikKIHsKICAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MgPSB0cnVlOwogICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CiAK
ICAgICBFWFBFQ1RfRVEoMXUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKCF1c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykpOworfQorCitURVNU
KFNlcnZpY2VXb3JrZXJzLCBJblByb2Nlc3NTZXJ2aWNlV29ya2VyKQoreworICAgIGJvb2wgdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CisgICAgYm9vbCBmaXJzdExvYWRB
Ym91dEJsYW5rID0gdHJ1ZTsKKwogICAgIEVYUEVDVF9FUSgydSwgbGF1bmNoU2VydmljZVdvcmtl
clByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgIWZpcnN0TG9hZEFib3V0
QmxhbmspKTsKIH0KIAotVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZvcmVO
YXZpZ2F0aW5nVGhyb3VnaFNlcnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBMb2Fk
QWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoT3V0T2ZQcm9jZXNzU2VydmljZVdvcmtl
cikKIHsKICAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOwog
ICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CiAKICAgICBFWFBFQ1RfRVEoMXUs
IGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKCF1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzLCBmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RFU1QoU2VydmljZVdvcmtlcnMsIExv
YWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hJblByb2Nlc3NTZXJ2aWNlV29ya2Vy
KQoreworICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7Cisg
ICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKKwogICAgIEVYUEVDVF9FUSgydSwg
bGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cywgZmlyc3RMb2FkQWJvdXRCbGFuaykpOwogfQogCkBAIC0xOTQ0LDExICsxOTU2LDExIEBAIFRF
U1QoU2VydmljZVdvcmtlcnMsIFN1c3BlbmROZXR3b3JrUHJvY2VzcykKIAogICAgIEVYUEVDVF9U
UlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RC
UGF0aC5wYXRoXSk7CiAKLSAgICBbIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNz
UG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbd2Vi
Vmlldy5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJv
Y2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0aF0pOwog
Ci0gICAgWyB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3NlbmROZXR3
b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW3dlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi53
ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgW3dl
YlZpZXcgbG9hZFJlcXVlc3Q6c2VydmVyLnJlcXVlc3QoKV07CiAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCmluZGV4IGEzNWYwNTM1MGFhYjRi
NDJmMzZjNDZhZWNkZWVlZTZjZTU0NGVmODYuLjMzNzYwOTJhMTk1YjUxMmRhNjdjNDk2ZTQ1MjE3
YjkxNGZlMmE1NzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQpAQCAtNDc5LDggKzQ3OSw2IEBAIHN0
YXRpYyBib29sIGZpbmlzaGVkOwogfQogQGVuZAogCi0vLyBGSVhNRTogb24gaU9TLCBVSSBwcm9j
ZXNzIHNob3VsZCBiZSB1c2luZyB0aGUgc2FtZSBjb29raWUgZmlsZSBhcyB0aGUgbmV0d29yayBw
cm9jZXNzIGZvciBkZWZhdWx0IHNlc3Npb24uCi0jaWYgUExBVEZPUk0oTUFDKQogZW51bSBjbGFz
cyBTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyB7IE5vLCBZZXMgfTsKIHZvaWQgcnVuV0tI
VFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdh
cm1pbmcgc2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcpCiB7CkBAIC01ODksMjAgKzU4Nyw2
NiBAQCBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xXaXRoUHJld2Fy
bWluZykKICAgICBydW5XS0hUVFBDb29raWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRF
bmFibGVQcm9jZXNzUHJld2FybWluZzo6WWVzKTsKIH0KIAotI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykKLQogQGludGVyZmFjZSBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIDogTlNPYmplY3Qg
PFdLVUlEZWxlZ2F0ZT4KKy0gKE5TU3RyaW5nICopYWxlcnRDb29raWVIVE1MOworLSAoTlNTdHJp
bmcgKil3YWl0Rm9yTWVzc2FnZTsKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lv
bkNvb2tpZVVJRGVsZWdhdGUKK0BpbXBsZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURl
bGVnYXRlIHsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9tZXNzYWdlOworfQorCiAtICh2b2lk
KXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRo
TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZv
ICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5k
bGVyCiB7Ci0gICAgRVhQRUNUX1NUUkVRKCJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIs
IG1lc3NhZ2UuVVRGOFN0cmluZyk7CisgICAgX21lc3NhZ2UgPSBtZXNzYWdlOwogICAgIGZpbmlz
aGVkID0gdHJ1ZTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQorCistIChOU1N0cmluZyAq
KXdhaXRGb3JNZXNzYWdlCit7CisgICAgd2hpbGUgKCFfbWVzc2FnZSkKKyAgICAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAgICByZXR1cm4gX21lc3NhZ2UuYXV0b3Jl
bGVhc2UoKTsKK30KKworLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUwKK3sKKyAgICByZXR1
cm4gQCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7IGZv
ciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkgKyspIHsgY29va2llc1tpXSA9IGNv
b2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgpOyBhbGVydChjb29raWVzLmpvaW4oJzsg
JykpOzwvc2NyaXB0PiI7Cit9CisKIEBlbmQKIAorVEVTVChXZWJLaXQsIFdLSFRUUENvb2tpZVN0
b3JlTXVsdGlwbGVWaWV3cykKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MSA9IFtbVGVz
dFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzEgc3luY2hyb25vdXNs
eUxvYWRIVE1MU3RyaW5nOkAic3RhcnQgbmV0d29yayBwcm9jZXNzIl07CisKKyAgICBOU0hUVFBD
b29raWUgKnNlc3Npb25Db29raWUgPSBbTlNIVFRQQ29va2llIGNvb2tpZVdpdGhQcm9wZXJ0aWVz
OkB7CisgICAgICAgIE5TSFRUUENvb2tpZVBhdGg6IEAiLyIsCisgICAgICAgIE5TSFRUUENvb2tp
ZU5hbWU6IEAiU2Vzc2lvbkNvb2tpZU5hbWUiLAorICAgICAgICBOU0hUVFBDb29raWVWYWx1ZTog
QCJDb29raWVWYWx1ZSIsCisgICAgICAgIE5TSFRUUENvb2tpZURvbWFpbjogQCIxMjcuMC4wLjEi
LAorICAgIH1dOworCisgICAgX19ibG9jayBib29sIHNldENvb2tpZURvbmUgPSBmYWxzZTsKKyAg
ICBbd2ViVmlldzEuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlLmh0dHBDb29raWVTdG9y
ZSBzZXRDb29raWU6c2Vzc2lvbkNvb2tpZSBjb21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBz
ZXRDb29raWVEb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJnNldENvb2tpZURvbmUpOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW0NoZWNr
U2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgbmV3XSk7CisgICAgW3dlYlZpZXcxIHNldFVJRGVsZWdh
dGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcxIGxvYWRIVE1MU3RyaW5nOltkZWxl
Z2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRw
Oi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1l
c3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKKworICAgIFRlc3RXS1dl
YlZpZXcgKndlYlZpZXcyID0gW1tUZXN0V0tXZWJWaWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAg
IFt3ZWJWaWV3MiBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzIg
bG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwg
VVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVR
KFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1
ZSIpOworfQorCiBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhl
bWVyYWxTZXNzaW9uKQogewogICAgIFJldGFpblB0cjxXS1dlYnNpdGVEYXRhU3RvcmU+IGVwaGVt
ZXJhbFN0b3JlV2l0aENvb2tpZXMgPSBbV0tXZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNpc3RlbnRE
YXRhU3RvcmVdOwpAQCAtNjI3LDkgKzY3MSw4IEBAIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdp
dGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Npb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZmaW5pc2hlZCk7CiAgICAgZmluaXNoZWQgPSBmYWxzZTsKICAgICAKLSAgICBOU1N0
cmluZyAqYWxlcnRDb29raWVIVE1MID0gQCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1lbnQu
Y29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkg
KyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgpOyBh
bGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Ci0gICAgW3dlYlZpZXcgbG9hZEhU
TUxTdHJpbmc6YWxlcnRDb29raWVIVE1MIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJo
dHRwOi8vMTI3LjAuMC4xIl1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNo
ZWQpOworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhU
TUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOwor
ICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNv
b2tpZU5hbWU9Q29va2llVmFsdWUiKTsKIH0KIAogc3RhdGljIGJvb2wgYXJlQ29va2llc0VxdWFs
KE5TSFRUUENvb2tpZSAqZmlyc3QsIE5TSFRUUENvb2tpZSAqc2Vjb25kKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXIt
bGVha3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2No
ZW1lSGFuZGxlci1sZWFrcy5tbQppbmRleCBhYzdkZTQxNTEyYzQ1MTM4ZWM1ZTRjMDllNTExNWQx
NmNkMjNiMjJlLi5hYzE2NTM1ZGZkOTM5OTlkMmVjNTBkY2ZkNzFjM2E1NmQxMTNlYzdhIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1l
SGFuZGxlci1sZWFrcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9y
dCA8V2ViS2l0L1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dl
YlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1By
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1w
b3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0xNTIsNyArMTUzLDcgQEAgVEVTVChVUkxTY2hlbWVIYW5k
bGVyLCBMZWFrczMpCiAKICAgICBydW5VbnRpbFRhc2tzSW5GbGlnaHQoMik7CiAKLSAgICBbd2Vi
VmlldzEuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOworICAgIFt3ZWJWaWV3MS5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3Rv
cmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJ1blVudGlsVGFza3NJbkZsaWdo
dCgwKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0KaW5kZXggOTJj
ZjNhNjE5OGE1YjlkMTQ1NDQ5MDVkYjllOTQ4ZjExYzcyNTZkZS4uODE3NzllMjgxYzYwNzU0NzU1
YWNlMWQ4MDFlMjY4MWQxNGU1YmMzMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9t
UGF0aHMubW0KQEAgLTI0NCw3ICsyNDQsNyBAQCBzdGF0aWMgdm9pZCBydW5XZWJzaXRlRGF0YVN0
b3JlQ3VzdG9tUGF0aHMoU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxkRQogICAg
IC8vIE5vdywgd2l0aCBicmFuZCBuZXcgV0tXZWJzaXRlRGF0YVN0b3JlcyBwb2ludGluZyBhdCB0
aGUgc2FtZSBjdXN0b20gY29va2llIHN0b3JhZ2UgbG9jYXRpb24sCiAgICAgLy8gaW4gbmV3bHkg
ZmlyZWQgdXAgTmV0d29ya1Byb2Nlc3NlcywgdmVyaWZ5IHRoYXQgdGhlIGZldGNoIGFuZCBkZWxl
dGUgQVBJcyB3b3JrIGFzIGV4cGVjdGVkLgogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CisgICAgW2RhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OwogICAgIGF1dG8gbmV3Q3VzdG9tRGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFT
dG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbi5nZXQoKV0pOwogCiAgICAgW25ld0N1c3RvbURhdGFTdG9yZSBmZXRjaERhdGFSZWNv
cmRzT2ZUeXBlczpbTlNTZXQgc2V0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVDb29raWVz
LCBuaWxdIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNBcnJheTxXS1dlYnNpdGVEYXRhUmVjb3JkICo+
ICogcmVjb3JkcykgewpAQCAtMjU1LDcgKzI1NSw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVE
YXRhU3RvcmVDdXN0b21QYXRocyhTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRF
CiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogCi0gICAgW3Byb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2RhdGFTdG9yZSBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOwogICAgIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVE
YXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0ZURhdGFTdG9yZUNv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21EYXRhU3RvcmUgcmVtb3ZlRGF0
YU9mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldLV2Vic2l0ZURhdGFUeXBlQ29va2llcywg
bmlsXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNvbXBsZXRpb25IYW5kbGVy
Ol4gewpAQCAtMzg1LDExICszODUsMTAgQEAgVEVTVChXZWJLaXQsIEN1c3RvbURhdGFTdG9yZURl
c3Ryb3lXaGlsZUZldGNoaW5nTmV0d29ya1Byb2Nlc3NEYXRhKQogCiAgICAgICAgIC8vIFRlcm1p
bmF0ZSB0aGUgbmV0d29yayBwcm9jZXNzIHdoaWxlIGEgcXVlcnkgaXMgcGVuZGluZy4KICAgICAg
ICAgYXV0byogYWxsUHJvY2Vzc1Bvb2xzID0gW1dLUHJvY2Vzc1Bvb2wgX2FsbFByb2Nlc3NQb29s
c0ZvclRlc3RpbmddOwotICAgICAgICBBU1NFUlRfRVEoMVUsIFthbGxQcm9jZXNzUG9vbHMgY291
bnRdKTsKLSAgICAgICAgYXV0byogcHJvY2Vzc1Bvb2wgPSBhbGxQcm9jZXNzUG9vbHNbMF07Ci0g
ICAgICAgIHdoaWxlICghW3Byb2Nlc3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKQor
ICAgICAgICBBU1NFUlRfRVEoMFUsIFthbGxQcm9jZXNzUG9vbHMgY291bnRdKTsKKyAgICAgICAg
d2hpbGUgKCFbZGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKQogICAgICAgICAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c2xlZXAoMC4wMSk7Ci0gICAgICAgIGtpbGwoW3Byb2Nl
c3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCBTSUdLSUxMKTsKKyAgICAgICAga2ls
bChbZGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCBTSUdLSUxMKTsKICAgICAg
ICAgYWxsUHJvY2Vzc1Bvb2xzID0gbmlsOwogICAgICAgICBkYXRhU3RvcmUgPSBuaWw7CiAgICAg
fQpAQCAtNTM5LDcgKzUzOCw3IEBAIFRFU1QoV2ViS2l0LCBEb0xvYWRXaXRoTm9uRGVmYXVsdERh
dGFTdG9yZUFmdGVyVGVybWluYXRpbmdOZXR3b3JrUHJvY2VzcykKIAogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW3dlYlZpZXdDb25maWd1cmF0aW9uLmdl
dCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW3dlYlZpZXdD
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKIAogICAgIHJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNC
dW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9u
OkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07CiAgICAg
W3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07CkBAIC04NTcsNyArODU2LDcgQEAgVEVTVChX
ZWJLaXQsIE1lZGlhQ2FjaGUpCiAgICAgRVhQRUNUX0ZBTFNFKGVycm9yKTsKIAogICAgIGRvbmUg
PSB0cnVlOwotICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRl
RGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBbZmlsZU1hbmFnZXIg
cmVtb3ZlSXRlbUF0UGF0aDpwYXRoIGVycm9yOiZlcnJvcl07CiAgICAgRVhQRUNUX0ZBTFNFKGVy
cm9yKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2JqQy9D
dXN0b21Qcm90b2NvbHNUZXN0Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRP
YmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW0KaW5kZXggMjJlMWEwYTllOGUyNjgwNDVlNmIxN2Mz
MDZiMDAxNGQ1YmM5MTI2OC4uN2I4NDc4YjU5NzlmYTc0YjljZDU5ZDA2MmVhZGQwZDNjNTE1MWZk
NyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRPYmpDL0N1c3Rv
bVByb3RvY29sc1Rlc3QubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRP
YmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW0KQEAgLTM0LDYgKzM0LDggQEAKICNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgogI2ltcG9ydCA8V2ViS2l0L1dLQ29udGV4dFByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1Byb2Nlc3NHcm91cFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1Zp
ZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIHN0YXRpYyBib29sIHRlc3RGaW5pc2hlZDsKQEAg
LTcyLDYgKzc0LDggQEAgc3RhdGljIFdLUHJvY2Vzc0dyb3VwICpwcm9jZXNzR3JvdXAoKQogICAg
IHJldHVybiBwcm9jZXNzR3JvdXA7CiB9CiAKK3N0YXRpYyBSZXRhaW5QdHI8V0tWaWV3PiB3a1Zp
ZXc7CisKIEBpbnRlcmZhY2UgQ2xvc2VXaGlsZVN0YXJ0aW5nUHJvdG9jb2wgOiBUZXN0UHJvdG9j
b2wKIEBlbmQKIApAQCAtODksNyArOTMsNyBAQCBzdGF0aWMgV0tQcm9jZXNzR3JvdXAgKnByb2Nl
c3NHcm91cCgpCiAgICAgICAgIH07CiAgICAgICAgIFdLQ29udGV4dFNldENsaWVudChbcHJvY2Vz
c0dyb3VwKCkgX2NvbnRleHRSZWZdLCAmY2xpZW50LmJhc2UpOwogCi0gICAgICAgIGtpbGwoV0tD
b250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFtwcm9jZXNzR3JvdXAoKSBfY29udGV4
dFJlZl0pLCBTSUdLSUxMKTsKKyAgICAgICAga2lsbChXS1dlYnNpdGVEYXRhU3RvcmVHZXROZXR3
b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tQYWdlR2V0V2Vic2l0ZURhdGFTdG9yZShbd2tWaWV3IHBh
Z2VSZWZdKSksIFNJR0tJTEwpOwogICAgICAgICBbc2VsZi5jbGllbnQgVVJMUHJvdG9jb2w6c2Vs
ZiBkaWRGYWlsV2l0aEVycm9yOltOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpOU0NvY29hRXJyb3JE
b21haW4gY29kZTowIHVzZXJJbmZvOm5pbF1dOwogICAgIH0pOwogfQpAQCAtMTQyLDcgKzE0Niw3
IEBAIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIHN0YXRpYyB2b2lkIHJ1blRlc3QoKQogewog
ICAgIFJldGFpblB0cjxXS0Jyb3dzaW5nQ29udGV4dEdyb3VwPiBicm93c2luZ0NvbnRleHRHcm91
cCA9IGFkb3B0TlMoW1tXS0Jyb3dzaW5nQ29udGV4dEdyb3VwIGFsbG9jXSBpbml0V2l0aElkZW50
aWZpZXI6QCJUZXN0SWRlbnRpZmllciJdKTsKLSAgICBSZXRhaW5QdHI8V0tWaWV3PiB3a1ZpZXcg
PSBhZG9wdE5TKFtbV0tWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIHByb2Nlc3NHcm91cDpwcm9jZXNzR3JvdXAoKSBicm93c2luZ0NvbnRleHRHcm91
cDpicm93c2luZ0NvbnRleHRHcm91cC5nZXQoKV0pOworICAgIHdrVmlldyA9IGFkb3B0TlMoW1tX
S1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgcHJv
Y2Vzc0dyb3VwOnByb2Nlc3NHcm91cCgpIGJyb3dzaW5nQ29udGV4dEdyb3VwOmJyb3dzaW5nQ29u
dGV4dEdyb3VwLmdldCgpXSk7CiAgICAgUmV0YWluUHRyPEN1c3RvbVByb3RvY29sc0xvYWREZWxl
Z2F0ZT4gbG9hZERlbGVnYXRlID0gYWRvcHROUyhbW0N1c3RvbVByb3RvY29sc0xvYWREZWxlZ2F0
ZSBhbGxvY10gaW5pdF0pOwogICAgIFt3a1ZpZXcgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcl0u
bG9hZERlbGVnYXRlID0gbG9hZERlbGVnYXRlLmdldCgpOwogICAgIFtbd2tWaWV3IGJyb3dzaW5n
Q29udGV4dENvbnRyb2xsZXJdIGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhV
Ukw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDov
L3JlZGlyZWN0P3Rlc3QiLCBbVGVzdFByb3RvY29sIHNjaGVtZV1dXV1dOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCA5ZDM3Y2NlZGRiODIxNTc0NzVkODFm
MTIyMGY0NTZiODY0YzNiMTcxLi4zYWM5M2E2ZDYzZWE1ZjI0MWI0NzU4ZTc2YjVmNzlkMDQyNTQy
OTUyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNw
cAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtMTA2
MSw4ICsxMDYxLDYgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVu
dFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKIAogICAgIHJlc2V0UXVvdGEo
KTsKIAotICAgIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdv
cmtlclRlc3RpbmcocGxhdGZvcm1Db250ZXh0KCksIHRydWUpOwotCiAgICAgV0tDb250ZXh0Q2xl
YXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLmNvbnRleHQoKSk7CiAKICAgICBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCksIGZhbHNlKTsK
QEAgLTEyMzcsNyArMTIzNSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmZpbmRBbmREdW1wV2Vi
S2l0UHJvY2Vzc0lkZW50aWZpZXJzKCkKICAgICBkdW1wUmVzcG9uc2UobWFrZVN0cmluZyhUZXN0
Q29udHJvbGxlcjo6d2ViUHJvY2Vzc05hbWUoKSwgIjogIiwKICAgICAgICAgV0tQYWdlR2V0UHJv
Y2Vzc0lkZW50aWZpZXIoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCkt
PnBhZ2UoKSksICdcbicsCiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpuZXR3b3JrUHJvY2Vzc05h
bWUoKSwgIjogIiwKLSAgICAgICAgV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVy
KG1fY29udGV4dC5nZXQoKSksICdcbicpKTsKKyAgICAgICAgV0tXZWJzaXRlRGF0YVN0b3JlR2V0
TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKHdlYnNpdGVEYXRhU3RvcmUoKSksICdcbicpKTsKICNl
bHNlCiAgICAgZHVtcFJlc3BvbnNlKCJcbiJfcyk7CiAjZW5kaWYKQEAgLTIyOTcsNyArMjI5NSw3
IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdENvbnRyb2xsZXI6OmdldEluamVjdGVkQnVu
ZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0YSgpCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6Om5ldHdv
cmtQcm9jZXNzRGlkQ3Jhc2goKQogewotICAgIHBpZF90IHBpZCA9IFdLQ29udGV4dEdldE5ldHdv
cmtQcm9jZXNzSWRlbnRpZmllcihtX2NvbnRleHQuZ2V0KCkpOworICAgIHBpZF90IHBpZCA9IFdL
V2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcih3ZWJzaXRlRGF0YVN0
b3JlKCkpOwogICAgIGZwcmludGYoc3RkZXJyLCAiI0NSQVNIRUQgLSAlcyAocGlkICVsZClcbiIs
IG5ldHdvcmtQcm9jZXNzTmFtZSgpLCBzdGF0aWNfY2FzdDxsb25nPihwaWQpKTsKICAgICBleGl0
KDEpOwogfQpAQCAtMzEzNiw3ICszMTM0LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0SWdu
b3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoYm9vbCBpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWkKIAog
dm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQogewotICAgIFdL
Q29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBX
S1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyh3ZWJzaXRlRGF0YVN0b3Jl
KCkpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycygp
CkBAIC0zMTY3LDkgKzMxNjUsOCBAQCBQbGF0Zm9ybVdlYlZpZXcqIFRlc3RDb250cm9sbGVyOjpw
bGF0Zm9ybUNyZWF0ZU90aGVyUGFnZShQbGF0Zm9ybVdlYlZpZXcqIHBhcmVudAogICAgIHJldHVy
biBuZXcgUGxhdGZvcm1XZWJWaWV3KGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpOwogfQogCi1XS0Nv
bnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0NvbnRleHRS
ZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBjb250ZXh0Q29uZmlndXJhdGlv
bikKK1dLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KFdL
Q29udGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmKQogewotICAgIFdL
Q29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKGNvbnRleHQsIGRlZmF1bHRXZWJzaXRl
RGF0YVN0b3JlKCkpOwogICAgIHJldHVybiBjb250ZXh0OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409378</attachid>
            <date>2020-09-22 10:44:57 -0700</date>
            <delta_ts>2020-09-22 23:00:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200922104456.patch</filename>
            <type>text/plain</type>
            <size>352186</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRhZGZjMzM1NmEzMzk3NmU4
YmE5Mzk2YmJhOTM0ZThmNGMzODhmM2EuLjAxNTAwYTk4ZWM1ZGJmOTJlYTE2NzlhNzBiN2FmMmE3
NTMzMDE2ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzY0IEBACisyMDIwLTA5LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggbW92ZXMgdGhlIHRoaW5ncyBvbiBXZWJQcm9jZXNzUG9vbCBhc3NvY2lhdGVk
IHdpdGggTmV0d29ya1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgYW5kIG1vdmVzIHRoZW0KKyAgICAg
ICAgdG8gV2Vic2l0ZURhdGFTdG9yZS4gIEl0J3MgcHJldHR5IG1lY2hhbmljYWwsIGJ1dCBpdCBy
ZWFjaGVzIGl0cyBmaW5nZXJzIGludG8gYSBsb3Qgb2YgdGhpbmdzLiAgU29tZSBjb21tZW50cwor
ICAgICAgICBvbiBpbnRlcmVzdGluZyBwYXJ0cyBhcmUgYmVsb3cuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaDoKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZh
dWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdl
U2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cDoKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZXNGb3JVUkwpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNl
dENvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNlcnZlcik6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCk6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXIpOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyk6CisgICAgICAgIChXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZSk6
CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3Rp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3Mp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwOgorICAgICAgICAoV0tXZWJzaXRl
RGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2wubW06CisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6XSk6CisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wg
X25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQ
b29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3N5
bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vz
c1Bvb2wgX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxl
bWVudEZvclRlc3Rpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJzaXRlRGF0YVN0b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOgorICAgICAgICAoLVtXS1dl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXSk6CisgICAgICAgICgtW1dL
V2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpdKToK
KyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHldKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWVdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9z
eW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKF9XZWJLaXRDb29raWVNYW5h
Z2VyUHJpdmF0ZTo6Y29va2llTWFuYWdlciBjb25zdCk6CisgICAgICAgIChfV2ViS2l0Q29va2ll
TWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUpOgorICAgICAgICAo
d2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFn
ZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFn
ZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dl
dF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29v
a2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyk6CisgICAg
ICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAod2Via2l0V2Vi
Q29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNz
aW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNzL0F1eGlsaWFyeVBy
b2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vz
c1Bvb2xDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVBy
b2Nlc3NTdXBwcmVzc2lvblN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eTo6cHVibGlzaFByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWRQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdl
YktpdDo6RG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3lu
Yyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcCk6Cisg
ICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNr
Z3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25X
aWxsRW50ZXJGb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6
Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6
OmRvd25sb2FkRmluaXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpp
bnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlN
YXAuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAgKFdlYktp
dDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2Vz
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFy
YW1ldGVyc1RvTmV3UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OmRhdGFTdG9yZVBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9v
bEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSk6CisgICAgICAgIChXZWJLaXQ6OmFueVBy
b2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3NDcmFz
aGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1l
c3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6
OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9u
VG9OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sSGFzRm9y
ZWdyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sSGFz
QmFja2dyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRsZXI6OmhhbmRsZVhQQ0V2ZW50IGNvbnN0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5h
Z2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdD
b29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vz
c0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6ZGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50
T3ZlcnJpZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnByZWNvbm5lY3RUbyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmlnYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRD
bGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGlu
Zyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVy
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlv
blRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVt
b3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1
cml0eVBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVS
TFNjaGVtZUFzTG9jYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0
ZXJVUkxTY2hlbWVBc05vQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hl
bWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb25zKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmlzU2VydmljZVdvcmtlclBhZ2VJRCBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZp
Y2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlG
b3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3Mp
OiBEZWxldGVkLgorICAgICAgICBUaGVyZSBzZWVtcyB0byBiZSBhIGxvdCBvZiBjb2RlIHJlbW92
YWwgaGVyZSwgYnV0IG1vc3Qgb2YgaXQgd2FzIGR1cGxpY2F0ZSBjb2RlIHdpdGgKKyAgICAgICAg
V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyB3aGljaCBpcyB1c2VkIGluc3RlYWQuICBUaGF0
IHdoaWNoIHdhcyBub3QgZHVwbGljYXRlIHdhcworICAgICAgICBtb3ZlZCB0byBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzLiAgVGhpcyB3YXMg
dGhlIGhhcmRlc3QgcGFydCBvZiB0aGlzIHBhdGNoLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNr
Z3JvdW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRT
eW5jVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmRGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdv
cmtQcm9jZXNzRGlkUmVzdW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OmZsdXNoQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlcik6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1
bmNoaW5nSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0Nv
Y29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNl
c3Npb25JRCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3Mg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRB
cHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGltZW91
dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFNl
cnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1v
dmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZh
bGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFu
ZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2
YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVj
b3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1Rv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNv
dXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1ldGVy
c1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN1
Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRl
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNz
QW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlw
T25seUluRGF0YWJhc2VPbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0VXNlSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29y
YXRpb25Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVs
ZXRlQ29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
aG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3Vs
ZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RD
b29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNh
cEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnByb2Nlc3NQb29scyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0
aXN0aWNzVGVzdGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEFkQ2xpY2tBdHRyaWJ1
dGlvbkRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZsdXNo
Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vzc2lvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBwQm91bmRTZXNzaW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWlu
c1RvSVRQSWZJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3Jr
UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0
ZXJXaXRoU2Vzc2lvbklETWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphZGRQZW5kaW5nQ29va2ll
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlUGVu
ZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmNsZWFyUGVuZGluZ0Nvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICog
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoT3B0aW9ucyk6
CisgICAgICAgICogVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVyc2lz
dGVudFN0b3JhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRJ
Z25vcmVUTFNFcnJvcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0TmV0
d29ya1Byb3h5U2V0dGluZ3MpOgorCiAyMDIwLTA5LTIxICBLYXRlIENoZW5leSAgPGthdGhlcmlu
ZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGFib3V0OmJsYW5rIHN1YmZyYW1l
IGxvYWRzIGZvciBub24gYXBwLWJvdW5kIHRvcCBmcmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAppbmRl
eCBmY2UyMzg5ODdhNzg1MGYxOGM5ZjMwNmM1MGU5OGNlOTg4ZDEyNWZkLi42YjQ1YzJiZDlmMjZh
NDY4NThkMTc3YjU3NzdiMzBmNjFkMDdlOGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9Db29raWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZVN0b3JhZ2UuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0hUVFBDb29raWVBY2NlcHRQb2xpY3kuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgpAQCAtMTQ5LDkgKzE1MCwxMiBAQCB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3ksCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAotdm9pZCBXZWJDb29raWVN
YW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYkNv
b2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5k
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgaWYgKGF1
dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkp
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5jb29raWVBY2NlcHRQ
b2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihIVFRQQ29va2ll
QWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5h
Z2VyLmgKaW5kZXggY2E3ZjU1ZTg2NmJkYWQ0YjFlMzUyZThmNjQwNTdiYWJjNDYyODMyZC4uZWI3
NDE4MjM1ZjU3MDkzMDM5NjAxOWJlNDQ3MjFkZGMwOWZhOThmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCkBA
IC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRDb29raWVzKFBBTDo6U2Vzc2lv
bklELCBjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiYpPiYmKTsKIAogICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpOwotICAgIHZvaWQgZ2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3kpPiYmKTsKKyAgICB2b2lkIGdldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SFRUUENvb2tp
ZUFjY2VwdFBvbGljeSk+JiYpOwogCiAgICAgdm9pZCBzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5n
ZXMoUEFMOjpTZXNzaW9uSUQpOwogICAgIHZvaWQgc3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMo
UEFMOjpTZXNzaW9uSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgppbmRleCBh
Y2Q3NTQ0MGQ4M2YzNDY2NTBjOWYzM2I3NWI1ZDVkMDkzNTIxM2JhLi42ZmRmNTc3MmFhNmFhZTM5
NDAyYTlhODlmNTZjODRmN2JkNDM1ODVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdl
cy5pbgpAQCAtMzYsNyArMzYsNyBAQCBtZXNzYWdlcyAtPiBXZWJDb29raWVNYW5hZ2VyIE5vdFJl
ZkNvdW50ZWQgewogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3luYwogCiAgICAgdm9p
ZCBTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJDb3JlOjpIVFRQQ29v
a2llQWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lkIEdldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBDb29raWVBY2Nl
cHRQb2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tpZUFjY2VwdFBvbGlj
eShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRU
UENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAgdm9pZCBTdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIHZvaWQg
U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCBi
ZThkOTY2NjJiZTZkY2Q4NWZhM2MzMjkyOWFlMGYwYjVkMTgyMzQzLi43ZjQ3NzcxMzJkNTI0NzU4
MTgyOTgxYWFmMGMxOGI3MmI3YmEzOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ3LDI5ICszNDcsMTkgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJh
bWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lv
bklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3Jr
U2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRT
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFTdG9yZVBhcmFtZXRl
cnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAgICAgYXV0byBzZXNz
aW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNz
aW9uSUQ7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShkYXRh
U3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Cisg
ICAgICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgZGF0YVN0b3Jl
UGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVy
VGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJ
bmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKKyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIGRhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKLQor
ICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1vdGVOZXR3b3JraW5n
Q29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUoZGF0
YVN0b3JlUGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBib29s
IHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgPSB0cnVlOwotICAg
IGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUo
cGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAg
ICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0
ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUo
ZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwg
ZGF0YVN0b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNl
c3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8qIGRlZmF1bHRTZXNz
aW9uID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7
Ci0gICAgYXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNlc3Npb24tPm5ldHdv
cmtTdG9yYWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAg
ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAgICB9CiAKICAgICBm
b3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBz
dXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNTA1LDggKzQ5NSw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNl
c3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9u
KGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVXNlVGVzdGluZ05l
dHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXJCYXNlKQogI2VuZGlmCiB7Ci0g
ICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmFkZChz
ZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTUyMSw3ICs1MDksNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1
cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQog
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gbWFrZVN0cmluZyhpZGVu
dGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmlu
ZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkK
ICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vz
c2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAoc2Vzc2lv
bklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgICAgIHN0b3Jh
Z2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVDRlN0b3Jh
Z2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkpOwogCiAgICAgaWYgKE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQSSgpKSB7CkBAIC01NDQs
MjEgKzUzMiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVBY2NlcHRQb2xpY3lDaGFu
Z2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9saWN5KQogCiBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6
OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0dXJuICZkZWZhdWx0
U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmdl
dChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdv
cmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIGlmICghbV9k
ZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1bHROZXR3b3JrU3Rv
cmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwotICAg
IHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQotCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZv
aWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9yKQogewotICAgIGZ1
bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0byYgc3RvcmFnZVNl
c3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAgICAgICAgIGZ1bmN0
b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaAppbmRleCBhYTczMzc3YjczMmY2MTBiODY3OTA1NmMzN2RmMjhhZWVh
MDdhZjgzLi5kYzg2ZjM5Njk3ZmM1MDNlYTRkYmQxYjA2YzMyMjk3NWIxZTY5ZDE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0xNzAsNyAr
MTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9u
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7
CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nlc3Npb24oY29uc3Qg
UEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIGVuc3VyZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3Jr
U2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4mJik7CkBAIC0zNzUsNyArMzc0LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBAIC01NDQsNyArNTQyLDYgQEAgcHJp
dmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9u
SUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiBtX25l
dHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247
CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggOTkwMWM1Y2I3M2M3NGZlM2Rh
NGViZjU3YmE4NTEyODZmZGExMDRiZi4uMDJkZGI5MjM0ZTk5OWMzZTZjZGNkY2YwYjg3OGI4NzI1
ODM2MzI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTU1LDcgKzU1
LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc1NES1ZlcnNp
b247CiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwog
I2VuZGlmCi0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBl
bmNvZGVyIDw8IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYgVVNFKFNPVVApCiAgICAgZW5jb2Rl
ciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5jb2RlciA8PCBpZ25vcmVUTFNFcnJvcnM7
CkBAIC02OCw5ICs2OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCB1cmxT
Y2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0
ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgZW5jb2Rl
ciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxkRGlzYWJsZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAgIGVuY29kZXIgPDwg
c2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFibGVBZENsaWNrQXR0
cmlidXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTYsMTEgKzExMywxMSBAQCBib29sIE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBO
ZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIE9wdGlvbmFs
PFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsK
LSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIGlmICghZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9yPFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBkZWNvZGVyID4+IGRh
dGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0ZXJzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzID0g
V1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJlc3VsdC5kYXRhU3Rv
cmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7CiAKICNpZiBVU0Uo
U09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVBY2NlcHRQb2xpY3kp
KQpAQCAtMTQyLDIwICsxMzksNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcykpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlvbmFsPFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVz
dWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBX
VEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERpc2FibGVTZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0j
ZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJsZUlUUERh
dGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmgKaW5kZXggMTFjYTVhMTk5ZmNmZmU4ODNmZmYwYTJmZjc5ZGZlNDIxMGQ5ZGFkMS4uNjc0
OWRhMGM0YTYzYzIwMjEwNzc4MzU4NDg0NmM5MGQwMTBhMDM0MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaApAQCAtNzEsNyArNzEsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMgewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG5ldHdvcmtBVFNDb250
ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBkZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVyczsKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+
IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAgICAgCiAjaWYgVVNFKFNPVVApCiAgICAgV2ViQ29yZTo6
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBXZWJDb3JlOjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsKQEAgLTg1LDEyICs4NSw3IEBAIHN0
cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgVmVjdG9yPFN0cmlu
Zz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNj
aGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
LSAgICBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeTsKLSAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSAgICBib29sIHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vz
c1Rlcm1pbmF0aW9uRGVsYXkgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgYm9vbCBzaG91bGRFbmFi
bGVJVFBEYXRhYmFzZSB7IGZhbHNlIH07CisgICAgYm9vbCBzaG91bGRFbmFibGVJVFBEYXRhYmFz
ZSB7IHRydWUgfTsKICAgICBib29sIGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSB7
IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcAppbmRleCBmOTk1
ZTAxZDQ3ZDhiZGQ5NjlmMmM4MGU2NzlhZGFlMTdjOWQ1YjcyLi4wMmM4NjczZDM5YjFiNjgyNjYy
YTc3ZWQxYzYxNjZkOTcxYTYyZjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAK
QEAgLTIxNCw3ICsyMTQsOCBAQCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpjbGVhcigpCiAK
IHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3NlKCkKIHsKLSAgICBBU1NFUlQoIW1faXND
bG9zZWQpOworICAgIGlmIChtX2lzQ2xvc2VkKQorICAgICAgICByZXR1cm47CiAgICAgbV9pc0Ns
b3NlZCA9IHRydWU7CiAKICAgICBpZiAobV9kaWRTY2hlZHVsZURhdGFiYXNlVXBkYXRlKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9j
ZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQ
cm9jZXNzQ29jb2EubW0KaW5kZXggZGE2MzU5MTI0MjIzZGI5NzAzMGQxZWE3N2JjMDBjZWU1MWZi
MDE3ZC4uNTAxMGY5YTg2OTAzOTBkZmZlOWEzNDRlOTkwNWIyNGU2Njg1YzdhYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nl
c3NDb2NvYS5tbQpAQCAtNzgsOSArNzgsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAg
IFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNv
bnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBh
cmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAg
ICAgX0NGTmV0d29ya1NldEFUU0NvbnRleHQocGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dC5n
ZXQoKSk7CkBAIC0xMDUsMTEgKzEwMiw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3Jt
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAg
W05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vz
czo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJl
dHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5l
dHdvcmtQcm9jZXNzOjpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYg
VVNFKFNPVVJDRV9BUFBMSUNBVElPTl9BVURJVF9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAppbmRleCBk
OTlmOWRkNjRiYWQ2ZTQyZGNjOGUzZjliOGYxNjkyOTk3ZjY3MTkyLi40OTUzODExYjIxNjRlODk4
NDZmOTI3OWU2MjI5ZDU5M2UyMjU2YTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcApAQCAtMzksMTEgKzM5
LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1
ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRU
UFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUlu
Zm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3Jr
aW5nQ29udGV4dC5tbQppbmRleCBjMjczNmUwMjZhNTVkM2Q0MDIwZjg0ZjRkNjkzZDE2YjQ2NTJl
ZDIzLi4xZTE4NDg5Zjk0NjIwZjAyYTdkOWU5ZTg2OWVjODY0OTFiN2JiZDRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4
dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3Jr
aW5nQ29udGV4dC5tbQpAQCAtNTUsMTUgKzU1LDExIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3
CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJz
LmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAogICAgIFJldGFpblB0cjxDRkhU
VFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nlc3NDb29raWVTdG9yYWdlOwotICAgIGlmICghc2Vz
c2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFn
ZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkg
JiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgp
ICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCAhPSBQQUw6
OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAgICB1aVByb2Nlc3NDb29raWVT
dG9yYWdlID0gY29va2llU3RvcmFnZUZyb21JZGVudGlmeWluZ0RhdGEocGFyYW1ldGVycy51aVBy
b2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcik7CiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1
cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
c2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vz
c2lvbklELnRvVUludDY0KCkpLCBXVEZNb3ZlKHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAot
ICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrUHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9u
SUQpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29v
a2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3Jr
UHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3
b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykp
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05l
dHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAv
TmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRleCA0MWFmZGNjNjFhZGM1ODNkY2YxOWYyZDQwYWEy
ODkxZjhhMDEzMjhiLi4wOTNkNTk5NTk2YTY4ODMwYWYwOTkzZmEzNjgzMWUwYzMyNGJmYmU4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nl
c3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29y
a1Byb2Nlc3NTb3VwLmNwcApAQCAtMTQwLDExICsxNDAsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
OjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0Ny
ZWF0aQogICAgIHNldElnbm9yZVRMU0Vycm9ycyhwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyk7
CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5l
dHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
PihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAg
IFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0U2hvdWxkSWdub3JlVExTRXJyb3JzKGlnbm9yZVRMU0Vy
cm9ycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BdHRhY2htZW50
LmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BdHRhY2htZW50LmgKaW5kZXggMTc0M2Mz
Yjc4MzBhMDMwZjU3NTczY2IwZWFlODI3ZDQxOTU5NGJhZS4uZDZmZjNjMTdlYmEwZDA0ZTA3ZGU4
YmNhMWFhNzJjNTQzN2RjNWEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvQXR0YWNobWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0F0dGFjaG1l
bnQuaApAQCAtOTUsOCArOTUsOCBAQCBwcml2YXRlOgogICAgIGludCBtX2ZpbGVEZXNjcmlwdG9y
IHsgLTEgfTsKICAgICBzaXplX3QgbV9zaXplOwogI2VsaWYgT1MoREFSV0lOKQotICAgIG1hY2hf
cG9ydF9uYW1lX3QgbV9wb3J0OwotICAgIG1hY2hfbXNnX3R5cGVfbmFtZV90IG1fZGlzcG9zaXRp
b247CisgICAgbWFjaF9wb3J0X25hbWVfdCBtX3BvcnQgeyAwIH07CisgICAgbWFjaF9tc2dfdHlw
ZV9uYW1lX3QgbV9kaXNwb3NpdGlvbiB7IDAgfTsKICNlbGlmIE9TKFdJTkRPV1MpCiAgICAgSEFO
RExFIG1faGFuZGxlIHsgSU5WQUxJRF9IQU5ETEVfVkFMVUUgfTsKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCmluZGV4
IDZkMGMxMjlhNzQwNTEwZDM4Njk3MzcwNWFkMDkyZWYxMzJjYzA3NWEuLjA0ODEwYjNlMTliZTk2
Y2FkMWFkODJhNDRkY2VkYjI2ZWY3ODI2MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKQEAgLTQwLDEzICs0MCw5IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAg
ZW5jb2RlciA8PCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBlbmNvZGVy
IDw8IGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIGVuY29kZXIgPDwgcGVu
ZGluZ0Nvb2tpZXM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBlbmNvZGVy
IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBlbmNvZGVyIDw8
IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlm
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTgzLDEyICs3OSw2IEBA
IE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUo
KmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIE9wdGlvbmFsPFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+PiBwZW5kaW5nQ29va2llczsKLSAgICBkZWNvZGVyID4+IHBlbmRp
bmdDb29raWVzOwotICAgIGlmICghcGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IFdURk1vdmUoKnBlbmRp
bmdDb29raWVzKTsKLQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIE9wdGlvbmFs
PFN0cmluZz4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIGRlY29kZXIgPj4gaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5OwpAQCAtMTAxLDE0ICs5MSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQ
Qzo6RGVjCiAgICAgaWYgKCFpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICBPcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGluZGV4ZWREYXRhYmFzZVRlbXBC
bG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFi
YXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFpbmRleGVkRGF0
YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycy5oCmluZGV4IGYyN2RmNDg5ODA5ZjMxOTYwOGI2ODBjYjJhOGExYzE0YjcwMTg0
MzkuLmUxYjIzMzcwMTk5ZmUzNzAzMWU5ZGM1YzA1NzgxNTUwMjFlMzRkNmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaApAQCAtNTEs
MTUgKzUxLDExIEBAIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyB7CiAKICAgICBW
ZWN0b3I8dWludDhfdD4gdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlIGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwot
ICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29raWVzOwogICAgIE5ldHdvcmtT
ZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKIAogI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIFN0cmluZyBpbmRleGVkRGF0YWJhc2VEaXJl
Y3Rvcnk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0
b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUu
Y3BwCmluZGV4IGJjMDc4NjZmYmMzOTY4ZTc2Y2FhOWEzNTY4MTBjNmEyZmIwOWRjZmQuLmZmOTU1
ODkyYmRhMGI4M2MyM2E5NmEwODM5ZWYzYmQwZDk0NjljMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCkBAIC00Niw4ICs0Niw2
IEBAIG5hbWVzcGFjZSBBUEkgewogSFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQogICAgIDogbV9vd25pbmdE
YXRhU3RvcmUod2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3Jl
LT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHJlZ2lz
dGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIEhUVFBDb29raWVTdG9y
ZTo6fkhUVFBDb29raWVTdG9yZSgpCkBAIC01NSw4ICs1Myw2IEBAIEhUVFBDb29raWVTdG9yZTo6
fkhUVFBDb29raWVTdG9yZSgpCiAgICAgQVNTRVJUKG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiAg
ICAgQVNTRVJUKCFtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5KTsKICAgICBBU1NFUlQoIW1f
Y29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotCi0gICAgdW5yZWdpc3RlckZvck5ld1Byb2Nl
c3NQb29sTm90aWZpY2F0aW9ucygpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZmlsdGVy
QXBwQm91bmRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtODEsMzMgKzc3LDE2IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpm
aWx0ZXJBcHBCb3VuZENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tp
CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4gYWxsQ29va2llczsKLSAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAg
ICAgICAgICAgYWxsQ29va2llcyA9IGdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNv
b2tpZXMoKTsKLSAgICAgICAgYWxsQ29va2llcy5hcHBlbmRWZWN0b3IobV9vd25pbmdEYXRhU3Rv
cmUtPnBlbmRpbmdDb29raWVzKCkpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBhbGxDb29raWVzXSAoKSBtdXRhYmxlIHsK
LSAgICAgICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2llcyhhbGxDb29raWVzLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0QWxsQ29va2llcyht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIHBvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4m
IGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0Rh
dGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFu
YWdlci5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBj
b29raWVzKSBtdXRhYmxlIHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29v
a2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tp
ZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIoeyB9KTsKLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5z
dXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1h
bmFnZXItPmdldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNv
b2tpZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFT
dG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdl
ci5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsLCBbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJiBjb29raWVz
KSBtdXRhYmxlIHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTExNSw3OCArOTQsMjkgQEAg
dm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG8KIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVz
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91bmRDb29r
aWVzKGNvb2tpZXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgYXBwQm91
bmRDb29raWVzKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0
b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgICAgIGlm
ICghcG9vbCkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBhcHBCb3VuZENvb2tp
ZXMpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogcGVuZGluZ0Nvb2tpZXMgdXNlZCBmb3Ig
ZGVmYXVsdFNlc3Npb24gYmVjYXVzZSBzZXNzaW9uIGNvb2tpZXMgY2Fubm90IGJlIHByb3BhZ2F0
ZWQgdG8gTmV0d29yayBQcm9jZXNzIHdpdGggdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZp
ZXIuCi0gICAgICAgICAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9
PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikK
LSAgICAgICAgICAgICAgICAgICAgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3Rv
cmUoY29va2llKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1f
b3duaW5nRGF0YVN0b3JlLT5hZGRQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBh
dXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKTsKLSAgICAgICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhtX293bmlu
Z0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgW3Bvb2wgPSBXVEZNb3Zl
KHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAo
KSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0p
OworICAgICAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdv
cmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgICAgICBjb29raWVNYW5hZ2VyLnNldENv
b2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBhcHBCb3VuZENvb2tpZXMsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2ll
U3RvcmU6OmRlbGV0ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBv
b2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0
aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNv
b2tpZS5zZXNzaW9uKQotICAgICAgICAgICAgZGVsZXRlQ29va2llRnJvbURlZmF1bHRVSVByb2Nl
c3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX293bmlu
Z0RhdGFTdG9yZS0+cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb29raWUpOwotCi0gICAgICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tp
ZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+
c2Vzc2lvbklEKCksIGNvb2tpZSwgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBt
X293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAg
Y29va2llTWFuYWdlci5kZWxldGVDb29raWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCBjb29raWUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29v
a2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+
cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkg
ewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJh
bCgpKQotICAgICAgICAgICAgZGVsZXRlQ29va2llc0luRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0
b3JlKCk7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVN
YW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0
b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2Vy
LmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKICAgICAv
LyBGSVhNRTogVGhlIENvbXBsZXRpb25IYW5kbGVyIHNob3VsZCBiZSBwYXNzZWQgdG8gV2ViQ29v
a2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzLgogICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tp
ZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2Nl
cHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9v
bEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAg
IGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAg
ICAgICAgICBzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5SW5EZWZhdWx0VUlQcm9jZXNzQ29va2ll
U3RvcmUocG9saWN5KTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8q
IGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9v
d25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNv
b2tpZU1hbmFnZXIuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+
c2Vzc2lvbklEKCksIHBvbGljeSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIyNywyMSArMTU3LDcgQEAgdm9pZCBIVFRQQ29v
a2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQogCiAgICAgbV9j
b29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA9IG1ha2VVbmlxdWU8QVBJV2ViQ29va2llTWFuYWdl
clByb3h5T2JzZXJ2ZXI+KCp0aGlzKTsKIAotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFT
dG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYg
KCFwb29sKSB7Ci0gICAgICAgIEFTU0VSVCghbV9vYnNlcnZpbmdVSVByb2Nlc3NDb29raWVzKTsK
LQotICAgICAgICAvLyBMaXN0ZW4gZm9yIGNvb2tpZSBub3RpZmljYXRpb25zIGluIHRoZSBVSVBy
b2Nlc3MgaW4gdGhlIG1lYW50aW1lLgotICAgICAgICBzdGFydE9ic2VydmluZ0NoYW5nZXNUb0Rl
ZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShbdGhpc10gKCkgewotICAgICAgICAgICAgY29va2ll
c0RpZENoYW5nZSgpOwotICAgICAgICB9KTsKLQotICAgICAgICBtX29ic2VydmluZ1VJUHJvY2Vz
c0Nvb2tpZXMgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9vYnNlcnZl
ZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVN
YW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9ICZtX293
bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CiAgICAgbV9v
YnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFT
dG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0KIApA
QCAtMjc2LDQ2ICsxOTIsMTAgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNEaWRDaGFu
Z2UoKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQoKQogewog
ICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnVucmVnaXN0ZXJPYnNlcnZlcihtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVy
KTsKLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbnVsbHB0cjsKLQotICAgIGF1
dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdl
T3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5
ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsK
ICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3du
aW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIp
OwogfQogCi12b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5v
dGlmaWNhdGlvbnMoKQotewotICAgIEFTU0VSVCghbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVu
ZXJJZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRp
ZmllciA9IFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5l
cihbdGhpc10oV2ViUHJvY2Vzc1Bvb2wmIG5ld1Byb2Nlc3NQb29sKSB7Ci0gICAgICAgIGlmICgh
bV9vd25pbmdEYXRhU3RvcmUtPmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKG5ld1Byb2Nlc3NQb29s
KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBOb3cgdGhhdCBhbiBhc3NvY2lh
dGVkIHByb2Nlc3MgcG9vbCBleGlzdHMsIHdlIG5lZWQgdG8gZmx1c2ggdGhlIFVJIHByb2Nlc3Mg
Y29va2llIHN0b3JlCi0gICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBhbnkgY2hhbmdlcyBhcmUgcmVm
bGVjdGVkIHdpdGhpbiB0aGUgbmV3IHByb2Nlc3MgcG9vbC4KLSAgICAgICAgZmx1c2hEZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgbmV3UHJvY2Vzc1Bvb2wuZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKTsKLQotICAgICAgICBpZiAobV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZl
cikgewotICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG5ld1Byb2Nl
c3NQb29sLnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAg
ICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1f
b3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2
ZXIpOwotICAgICAgICB9Ci0gICAgICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlm
aWNhdGlvbnMoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIGlmIChtX3Byb2Nlc3NQ
b29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpCi0gICAgICAgIFdlYlByb2Nlc3NQb29sOjp1
bnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKG1fcHJvY2Vzc1Bvb2xDcmVhdGlv
bkxpc3RlbmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5l
cklkZW50aWZpZXIgPSAwOwotfQotCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogdm9pZCBIVFRQQ29v
a2llU3RvcmU6OmZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCkgeyB9CiBWZWN0b3I8
V2ViQ29yZTo6Q29va2llPiBIVFRQQ29va2llU3RvcmU6OmdldEFsbERlZmF1bHRVSVByb2Nlc3ND
b29raWVTdG9yZUNvb2tpZXMoKSB7IHJldHVybiB7IH07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAppbmRleCBkNjIwYWRkYTRlN2Y4OTQ1
NjYxOGEzZTIyZTFiZmQ0MzU3Nzc1YjE5Li5hMDVmNDE0MzBkYjJiMjNkNDE3ODQwNzlhNGZiODZj
NzQ2MGE3NTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRU
UENvb2tpZVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBD
b29raWVTdG9yZS5oCkBAIC04Myw5ICs4Myw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSFRU
UENvb2tpZVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYpOwogCi0gICAgdm9pZCByZWdp
c3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotICAgIHZvaWQgdW5yZWdpc3Rl
ckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotCiAgICAgdm9pZCBmbHVzaERlZmF1
bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpOwogICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiBnZXRBbGxEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7CiAgICAgc3Rh
dGljIHZvaWQgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29uc3QgV2Vi
Q29yZTo6Q29va2llJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS0NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0
LmNwcAppbmRleCA1OGM1NDUzZjQ4OTg3ZjVlMWFmYWZlZjM0YzQzMzM1ZjFiNGNjOTkwLi4zN2Jh
YTY4ZjkyNGI5NTg3MmYwMWY3ZTRhODBkNWY0OTdkNWZlOWI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKQEAgLTQxMSwxMSArNDExLDYgQEAgdm9pZCBX
S0NvbnRleHRQcmVjb25uZWN0VG9TZXJ2ZXIoV0tDb250ZXh0UmVmLCBXS1VSTFJlZikKIHsKIH0K
IAotV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0
UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0lt
cGwoY29udGV4dFJlZiktPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+
KCkpOwotfQotCiBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFT
dG9yZShXS0NvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdLV2Vic2l0ZURhdGFTdG9yZUdldERl
ZmF1bHREYXRhU3RvcmUoKTsKQEAgLTUyNywxMyArNTIyLDYgQEAgdm9pZCBXS0NvbnRleHRTZXRK
YXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChXS0NvbnRleHRSZWYgY29udGV4
dFJlZiwKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0SmF2YVNjcmlwdEdhcmJh
Z2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoZW5hYmxlKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKFdLQ29udGV4dFJl
ZiBjb250ZXh0LCBib29sIGFsbG93cykKLXsKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0g
ICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9y
U2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlmCi19Ci0KIFdLRGljdGlvbmFyeVJlZiBXS0Nv
bnRleHRDb3B5UGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzKFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmKQogewogICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6OnRvSW1wbChjb250ZXh0
UmVmKS0+cGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzKCkubGVha1JlZigpKTsKQEAgLTU3NSwy
MSArNTYzLDExIEBAIHZvaWQgV0tDb250ZXh0U2V0Rm9udEFsbG93TGlzdChXS0NvbnRleHRSZWYg
Y29udGV4dFJlZiwgV0tBcnJheVJlZiBhcnJheVJlZikKICAgICBXZWJLaXQ6OnRvSW1wbChjb250
ZXh0UmVmKS0+c2V0Rm9udEFsbG93TGlzdChXZWJLaXQ6OnRvSW1wbChhcnJheVJlZikpOwogfQog
Ci12b2lkIFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250
ZXh0KQotewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT50ZXJtaW5hdGVOZXR3b3JrUHJv
Y2VzcygpOwotfQotCiB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29u
dGV4dFJlZiBjb250ZXh0KQogewogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT50ZXJtaW5h
dGVTZXJ2aWNlV29ya2VycygpOwogfQogCi1Qcm9jZXNzSUQgV0tDb250ZXh0R2V0TmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQotewotICAgIHJldHVybiBX
ZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7Ci19
Ci0KIHZvaWQgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmLCBXS1N0cmluZ1JlZiBkb21haW5SZWYsIFdLU3RyaW5nUmVmIG5hbWVSZWYsIFdLQXJyYXlS
ZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5UmVmIGV4dGVuc2lvbnNSZWYpCiB7CiAjaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBAIC02MTksMTIgKzU5NywxMSBAQCB2b2lkIFdLQ29udGV4
dENsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmKQogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5jbGVhckN1cnJlbnRNb2RpZmll
clN0YXRlRm9yVGVzdGluZygpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKK3ZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcykKIHsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdL
Q29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVm
LCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgd2Vic2l0ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0
U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3Rv
cmVSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFByaW1hcnlEYXRh
U3RvcmUoKldlYktpdDo6dG9JbXBsKHdlYnNpdGVEYXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKaW5kZXggMWQ4ZmFiOGExNDg2YWFkYjQ5NDE0
NGI5OGYxMGU5MzYzOGQwYzVlNi4uMmFiNmVmODZmNTMwZTc3Zjc0Y2JkNWRmNTg2MmFjNGQzMGI3
OTg3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0
LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2
OCw3ICsxNjgsNiBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihX
S0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdL
Q29udGV4dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJ
X0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0
RGF0YVN0b3JlKTsKIAogV0tfRVhQT1JUIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tD
b250ZXh0R2V0QXBwbGljYXRpb25DYWNoZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdL
X0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXRE
ZWZhdWx0RGF0YVN0b3JlKTsKLVdLX0VYUE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0
R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRF
RDsKIFdLX0VYUE9SVCBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2Nh
dGlvbk1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFi
YXNlUmVmIFdLQ29udGV4dEdldEljb25EYXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBX
S19FWFBPUlQgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVl
U3RvcmFnZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURf
V0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaApp
bmRleCBhMDI1MDExZjcwY2M2NTlmNWZhYTA4YTdkNmNiYjNmZjU2ZWU2YTM4Li40OGEyOWM0NTY4
YWI2N2IzYjdlMWVmOTgxNTZmNmVmYTg5NmIxZGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCkBAIC04MywxMSArODMsOCBAQCBXS19F
WFBPUlQgdm9pZCBXS0NvbnRleHRXYXJtSW5pdGlhbFByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRl
eHQpOwogLy8gQXQgc29tZSBwb2ludCBpdCBzaG91bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2
b2lkIFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwog
Ci1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRl
eHRSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMo
V0tDb250ZXh0UmVmKTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwot
CiB0eXBlZGVmIHZvaWQgKCpXS0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmlu
Z1JlZiBtZXNzYWdlTmFtZSk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVz
c2FnZUZ1bmN0aW9uKFdLQ29udGV4dEludmFsaWRNZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3Nh
Z2VGdW5jdGlvbik7CiAgICAgCkBAIC05Nyw4ICs5NCw2IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29u
dGV4dFNldEZvbnRBbGxvd0xpc3QoV0tDb250ZXh0UmVmLCBXS0FycmF5UmVmKTsKIAogV0tfRVhQ
T1JUIHZvaWQgV0tDb250ZXh0UHJlY29ubmVjdFRvU2VydmVyKFdLQ29udGV4dFJlZiBjb250ZXh0
LCBXS1VSTFJlZiBzZXJ2ZXJVUkwpIFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiAKLVdLX0VYUE9SVCBX
S1Byb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tDb250ZXh0
UmVmIGNvbnRleHQpOwotCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVn
aW4oV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLU3RyaW5nUmVmIGRvbWFpbiwgV0tTdHJpbmdSZWYg
bmFtZSwgV0tBcnJheVJlZiBtaW1lVHlwZXMsIFdLQXJyYXlSZWYgZXh0ZW5zaW9ucyk7CiBXS19F
WFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhclN1cHBvcnRlZFBsdWdpbnMoV0tDb250ZXh0UmVmIGNv
bnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1Bh
Z2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAppbmRleCA2
NDhmMzAwOTYxYTUwNjBjOWNkZjAzZTNjZjgwNDU4YmYyYmI1MGRkLi5iNDQ3MzQyMTIwMDYxM2Mx
OWVjM2FjOWFkNjY5OTc1MzRhYmVmMTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLUGFnZS5jcHAKQEAgLTM5OCw2ICszOTgsMTEgQEAgdWludDY0X3QgV0tQYWdlR2V0UmVuZGVy
VHJlZVNpemUoV0tQYWdlUmVmIHBhZ2UpCiAgICAgcmV0dXJuIHRvSW1wbChwYWdlKS0+cmVuZGVy
VHJlZVNpemUoKTsKIH0KIAorV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLUGFnZUdldFdlYnNpdGVE
YXRhU3RvcmUoV0tQYWdlUmVmIHBhZ2UpCit7CisgICAgcmV0dXJuIHRvQVBJKCZ0b0ltcGwocGFn
ZSktPndlYnNpdGVEYXRhU3RvcmUoKSk7Cit9CisKIFdLSW5zcGVjdG9yUmVmIFdLUGFnZUdldElu
c3BlY3RvcihXS1BhZ2VSZWYgcGFnZVJlZikKIHsKICAgICByZXR1cm4gdG9BUEkodG9JbXBsKHBh
Z2VSZWYpLT5pbnNwZWN0b3IoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1BhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5o
CmluZGV4IDY3MGI1ZTlmZDRiNDU0YTJiN2VkZmQyMjMyYWFlOTUxYzQ2N2QwODMuLmM1MWI4MTYy
Yzg5NzM0YWIxNTJiZWYwZTk5MjMzN2Q1NWYyZGU4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLUGFnZS5oCkBAIC0xMTgsNiArMTE4LDggQEAgV0tfRVhQT1JUIGRvdWJsZSBXS1Bh
Z2VHZXRFc3RpbWF0ZWRQcm9ncmVzcyhXS1BhZ2VSZWYgcGFnZSk7CiAKIFdLX0VYUE9SVCB1aW50
NjRfdCBXS1BhZ2VHZXRSZW5kZXJUcmVlU2l6ZShXS1BhZ2VSZWYgcGFnZSk7CiAKK1dLX0VYUE9S
VCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tQYWdlR2V0V2Vic2l0ZURhdGFTdG9yZShXS1BhZ2VS
ZWYgcGFnZSk7CisKIFdLX0VYUE9SVCBXS0luc3BlY3RvclJlZiBXS1BhZ2VHZXRJbnNwZWN0b3Io
V0tQYWdlUmVmIHBhZ2UpOwogCiBXS19FWFBPUlQgV0tTdHJpbmdSZWYgV0tQYWdlQ29weVVzZXJB
Z2VudChXS1BhZ2VSZWYgcGFnZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcAppbmRleCA5ZGRhNTkxYzk1MTg5YWIw
YzI1YWM1NTQ2NmMwYTJiZmMzOTI3ZWJjLi42ODYxMTRhYTVlZDBhMTMxNWU1YTlkNjE5NTFiODgw
MmM3NWY4YWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dl
YnNpdGVEYXRhU3RvcmVSZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUg
IkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiQVBJSFRUUENvb2tpZVN0b3JlLmgiCisjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlz
dGljcy5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldLRGljdGlvbmFyeS5o
IgpAQCAtNjksNiArNzAsMTYgQEAgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLV2Vic2l0ZURhdGFT
dG9yZUNyZWF0ZVdpdGhDb25maWd1cmF0aW9uKFdLV2Vic2l0ZURhdGFTdG8KICAgICByZXR1cm4g
V2ViS2l0Ojp0b0FQSSgmV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoKldlYktpdDo6
dG9JbXBsKGNvbmZpZ3VyYXRpb24pLCBzZXNzaW9uSUQpLmxlYWtSZWYoKSk7CiB9CiAKK3ZvaWQg
V0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0
b3JlUmVmIGRhdGFTdG9yZSkKK3sKKyAgICBXZWJLaXQ6OnRvSW1wbChkYXRhU3RvcmUpLT50ZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcygpOworfQorCitXS1Byb2Nlc3NJRCBXS1dlYnNpdGVEYXRhU3Rv
cmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFT
dG9yZSkKK3sKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoZGF0YVN0b3JlKS0+bmV0d29ya1By
b2Nlc3MoKS5wcm9jZXNzSWRlbnRpZmllcigpOworfQorCiB2b2lkIFdLV2Vic2l0ZURhdGFTdG9y
ZVJlbW92ZUlUUERhdGFGb3JEb21haW4oV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJl
ZiwgV0tTdHJpbmdSZWYgaG9zdCwgdm9pZCogY29udGV4dCwgV0tXZWJzaXRlRGF0YVN0b3JlUmVt
b3ZlSVRQRGF0YUZvckRvbWFpbkZ1bmN0aW9uIGNhbGxiYWNrKQogewogI2lmIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCmluZGV4IGU3N2QwOWMxMDdkMWRhMDc4M2Qw
OWMwN2UyODAzZDA4NzEyNWU0OGIuLmFiMjY3NzQ2YmU4MDc1YjAxNGM5ZmQ4MjMzNjIyZmM1OGYy
ZTI2YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0
ZURhdGFTdG9yZVJlZi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vi
c2l0ZURhdGFTdG9yZVJlZi5oCkBAIC0yOSw2ICsyOSwxMyBAQAogI2luY2x1ZGUgPFdlYktpdC9X
S0Jhc2UuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tEZXByZWNhdGVkLmg+CiAKKyNpZiBkZWZpbmVk
KFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMikKK3R5cGVkZWYgaW50IFdLUHJvY2Vzc0lEOworI2Vs
c2UKKyNpbmNsdWRlIDx1bmlzdGQuaD4KK3R5cGVkZWYgcGlkX3QgV0tQcm9jZXNzSUQ7CisjZW5k
aWYKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgpAQCAtNTAsNiAr
NTcsMTEgQEAgV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0QWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0aW5nKFcKIAogV0tfRVhQT1JUIHZvaWQgV0tXZWJz
aXRlRGF0YVN0b3JlQ2xlYXJDYWNoZWRDcmVkZW50aWFscyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYg
ZGF0YVN0b3JlUmVmKTsKIAorV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlQ2xlYXJD
YWNoZWRDcmVkZW50aWFscyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKK1dLX0VY
UE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworCitXS19FWFBPUlQgV0tQcm9jZXNzSUQgV0tX
ZWJzaXRlRGF0YVN0b3JlR2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLV2Vic2l0ZURhdGFT
dG9yZVJlZiBkYXRhU3RvcmUpOworCiBXS19FWFBPUlQgYm9vbCBXS1dlYnNpdGVEYXRhU3RvcmVH
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0
YVN0b3JlUmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYs
IGJvb2wgZW5hYmxlKTsKIHR5cGVkZWYgdm9pZCAoKldLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3Rp
Y3NFcGhlbWVyYWxGdW5jdGlvbikoYm9vbCBpc0VwaGVtZXJhbCwgdm9pZCogZnVuY3Rpb25Db250
ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1By
b2Nlc3NQb29sLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vz
c1Bvb2wubW0KaW5kZXggZmYzMDk0OTg2YzI0M2QwNDc0ZjI1MmQzOTFlNmNjYjc0ZjFmZWQ1Yi4u
MWY1NmZiZmI2Nzk1MTY0OGRmMGI0YmJkY2JmMmE1OTlkYzAwYmRhNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KQEAgLTQwNiwy
OCArNDA2LDYgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9u
YXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMKICAgICBfcHJvY2Vzc1Bvb2wtPmNs
ZWFyU3VwcG9ydGVkUGx1Z2lucygpOwogfQogCi0tICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2VzcwotewotICAgIF9wcm9jZXNzUG9vbC0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0K
LQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Ci17Ci0g
ICAgX3Byb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlG
b3JUZXN0aW5nKCk7Ci19Ci0KLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1
c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBfcHJvY2Vzc1Bv
b2wtPnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKFtjb21wbGV0
aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClfc2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWUoKTsKLX0KLQogLSAodm9pZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMKIHsKICAg
ICBfcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CkBAIC00MzUsMTIgKzQx
Myw3IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShj
b25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAKIC0gKHZvaWQpX3NldFVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3M6KEJPT0wpdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cwogewotICAgIF9wcm9jZXNzUG9vbC0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKLX0KLQotLSAocGlkX3QpX25ldHdv
cmtQcm9jZXNzSWRlbnRpZmllcgotewotICAgIHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzSWRlbnRpZmllcigpOworICAgIFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyk7CiB9CiAKIC0gKHBpZF90KV9wcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcgpAQCAtNDY3LDEx
ICs0NDAsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25h
cnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0
U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcodHJ1ZSk7CiB9CiAK
LS0gKHZvaWQpX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZwotewot
ICAgIF9wcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZh
aWxGb3JUZXN0aW5nKHRydWUpOwotfQotCiAtIChCT09MKV9oYXNQcmV3YXJtZWRXZWJQcm9jZXNz
CiB7CiAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogX3Byb2Nlc3NQb29sLT5wcm9jZXNzZXMoKSkg
ewpAQCAtNTYwLDE4ICs1MjgsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hN
YXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9j
ZXNzUG9vbC0+c2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9
CiAKLS0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAot
ewotICAgIF9wcm9jZXNzUG9vbC0+c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5k
KTsKLX0KLQotLSAodm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyOihCT09MKWFsbG93cwotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBfcHJv
Y2Vzc1Bvb2wtPnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxv
d3MpOwotI2VuZGlmCi19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogLSAoaWQgPF9XS0dl
b2xvY2F0aW9uQ29yZUxvY2F0aW9uUHJvdmlkZXI+KV9jb3JlTG9jYXRpb25Qcm92aWRlcgogewpA
QCAtNjA0LDExICs1NjAsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBU
b0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIH0pOwogfQog
Ci0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJp
bmcgKillbnRpdGxlbWVudAotewotICAgIHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGVudGl0bGVtZW50KTsKLX0KLQogLSAodm9pZClf
Y2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0
aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyUGVy
bWFuZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2UoV2ViQ29yZTo6UHJvdGVjdGlvblNw
YWNlKHByb3RlY3Rpb25TcGFjZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAppbmRleCA2NzY5MDE1ZTA4NTU4
OTk0Y2Q4YTIxOWExN2E5YzY4YWRlM2I1MzgzLi4zYjkzMTQwNGE4ZTJlNDMyZDUxYzU0OTY1ZTJk
ZWY1ZjhlY2RjMTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaApAQCAtODcsMTQgKzg3LDkgQEAKIC0gKF9X
S0Rvd25sb2FkICopX3Jlc3VtZURvd25sb2FkRnJvbURhdGE6KE5TRGF0YSAqKXJlc3VtZURhdGEg
d2Vic2l0ZURhdGFTdG9yZTooV0tXZWJzaXRlRGF0YVN0b3JlICopZGF0YVN0b3JlICBwYXRoOihO
U1N0cmluZyAqKXBhdGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC8v
IFRlc3Qgb25seS4gU2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoaWxlIG5vIHdlYiBjb250ZW50IHBy
b2Nlc3NlcyBhcmUgcnVubmluZy4KLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5l
dHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFu
ZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdv
cmtQcm9jZXNzRGlkUmVzdW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMu
MCkpOwogLSAodm9pZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xNCksIGlvcygxMi4wKSk7CiAKIC8vIFRlc3Qgb25seS4KLS0gKHBpZF90KV9uZXR3
b3JrUHJvY2Vzc0lkZW50aWZpZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMyksIGlvcygx
MS4wKSk7CiAtIChwaWRfdClfcHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIC8vIFRlc3Qgb25seS4KQEAgLTEwNiw3
ICsxMDEsNiBAQAogLSAoc2l6ZV90KV9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50IFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogLSAodm9pZClfc3luY05ldHdvcmtQ
cm9jZXNzQ29va2llcyBXS19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKCJXS0hUVFBD
b29raWVTdG9yZS5fZmx1c2hDb29raWVzVG9EaXNrV2l0aENvbXBsZXRpb25IYW5kbGVyOiIsIG1h
Y29zKDEwLjEzLCBXS19NQUNfVEJBKSwgaW9zKDExLjAsIFdLX0lPU19UQkEpKTsKIC0gKHZvaWQp
X21ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwotLSAodm9pZClfbWFrZU5leHROZXR3b3JrUHJvY2Vz
c0xhdW5jaEZhaWxGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3Mo
MTIuMCkpOwogLSAoTlNVSW50ZWdlcilfbWF4aW11bVN1c3BlbmRlZFBhZ2VDb3VudCBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogLSAoTlNVSW50ZWdlcilfcHJv
Y2Vzc0NhY2hlQ2FwYWNpdHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEy
LjIpKTsKIC0gKE5TVUludGVnZXIpX3Byb2Nlc3NDYWNoZVNpemUgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xNSksIGlvcygxMy4wKSk7CkBAIC0xMjIsMTMgKzExNiwxMCBAQAogLSAodm9pZClf
cHJlY29ubmVjdFRvU2VydmVyOihOU1VSTCAqKXNlcnZlclVSTCBXS19BUElfREVQUkVDQVRFRF9X
SVRIX1JFUExBQ0VNRU5UKCJXS1dlYlZpZXcuX3ByZWNvbm5lY3RUb1NlcnZlciIsIG1hY29zKDEw
LjEzLjQsIFdLX01BQ19UQkEpLCBpb3MoMTEuMywgV0tfSU9TX1RCQSkpOwogCiAvLyBUZXN0IG9u
bHkuCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6
KEJPT0wpYWxsb3dzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSk7
CiAtICh2b2lkKV9nZXRBY3RpdmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JUZXN0aW5nOihw
aWRfdClwaWQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNBcnJheTxOU1N0cmluZyAqPiAq
KSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3Mo
MTIuMikpOwotLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6
KE5TU3RyaW5nICopZW50aXRsZW1lbnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwg
aW9zKDEyLjIpKTsKIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0
aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVjdGlvblNwYWNlIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogCiBAcHJvcGVydHkgKG5vbmF0b21p
YywgZ2V0dGVyPV9pc0Nvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkLCBzZXR0ZXI9X3Nl
dENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkOikgQk9PTCBfY29va2llU3RvcmFnZVBh
cnRpdGlvbmluZ0VuYWJsZWQgV0tfQVBJX0RFUFJFQ0FURUQoIlBhcnRpdGlvbmVkIGNvb2tpZXMg
YXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQiLCBtYWNvcygxMC4xMi4zLCAxMC4xNC40KSwgaW9zKDEw
LjMsIDEyLjIpKTsKLS0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFj
a2dyb3VuZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIAogLy8g
VGVzdCBvbmx5LgogLSAodm9pZClfc2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0aW5n
V2l0aEZpcnN0UGFydHk6KE5TVVJMICopZmlyc3RQYXJ0eVVSTCB0aGlyZFBhcnR5OihOU1VSTCAq
KXRoaXJkUGFydHlVUkwgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb246KEJPT0wpc2hvdWxkU2No
ZWR1bGVOb3RpZmljYXRpb24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29tcGxl
dGlvbkhhbmRsZXIgIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19J
T1NfVEJBKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJzaXRlRGF0YVN0b3JlLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2Vic2l0ZURhdGFTdG9yZS5tbQppbmRleCAyOThkOWNlYzllODRkOGE1MTIyMDY1Y2M5OTIz
M2VmNGYwYjk1Mzg5Li45MjM0ZGI4OTRlNzRlNjFlYTcxZjVkZTRkNzlmMDdhMzM1OTQxZWI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0
YVN0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhU3RvcmUubW0KQEAgLTYxNyw2ICs2MTcsMTEgQEAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6
OldlYnNpdGVEYXRhUmVjb3JkPiB0b1dlYnNpdGVEYXRhUmVjb3JkcyhOU0FycmF5ICpkYXRhUmVj
b3IKICAgICB9KTsKIH0KIAorLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZv
clRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQKK3sKKyAgICByZXR1cm4gX3dlYnNpdGVE
YXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGVudGl0bGVt
ZW50KTsKK30KKwogLSAoaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4pX2RlbGVnYXRl
CiB7CiAgICAgcmV0dXJuIF9kZWxlZ2F0ZS5nZXQoKS5nZXQoKTsKQEAgLTY2OCw0ICs2NzMsNDIg
QEAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6OldlYnNpdGVEYXRhUmVjb3JkPiB0b1dlYnNpdGVEYXRh
UmVjb3JkcyhOU0FycmF5ICpkYXRhUmVjb3IKICNlbmRpZgogfQogCistICh2b2lkKV90ZXJtaW5h
dGVOZXR3b3JrUHJvY2VzcworeworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT50ZXJtaW5hdGVOZXR3
b3JrUHJvY2VzcygpOworfQorCistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9T
dXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgX3dlYnNpdGVE
YXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKFtj
b21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsKKyAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9KTsKK30KKworLSAodm9pZClfc2VuZE5l
dHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Cit7CisgICAgX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsK
KworfQorCistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUKK3sKKyAgICBfd2Vi
c2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7Cit9CisKKy0gKHZv
aWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAoreworICAgIF93
ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0JhY2tncm91
bmQoYmFja2dyb3VuZCk7Cit9CisKKy0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIK
K3sKKyAgICByZXR1cm4gX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkucHJvY2Vz
c0lkZW50aWZpZXIoKTsKK30KKworLSAodm9pZClfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5j
aEZhaWxGb3JUZXN0aW5nCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnNldFNob3VsZE1ha2VO
ZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyh0cnVlKTsKK30KKwogQGVuZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURh
dGFTdG9yZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKaW5kZXggOTkzMjAxMDQ2YjU1MWMzZjI4ZGYyZGMwYTAz
NDZkN2JjNzlhYzVmNC4uYmYyMGE4Yzg1YzQ5NzdiMzVkN2M2NDMxM2QxMTQwMWI1YmRhZDc4OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURh
dGFTdG9yZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCkBAIC04NSw5ICs4NSwxOSBAQCB0eXBlZGVmIE5T
X09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0ZURhdGFTdG9yZUZldGNoT3B0aW9ucykgewog
CiAtICh2b2lkKV9yZW5hbWVPcmlnaW46KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKiluZXdO
YW1lIGZvckRhdGFPZlR5cGVzOihOU1NldDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJPT0wp
X25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0
bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSk7CisKIEBwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYnNp
dGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2RlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTUpLCBpb3MoMTMuMCkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBf
V0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0gKHZv
aWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVw
YXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJv
Y2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOworLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNr
Z3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSk7CistIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9tYWtlTmV4dE5l
dHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwogQGVuZAogCiBOU19BU1NVTUVfTk9OTlVM
TF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dENvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0Q29va2llTWFuYWdlci5jcHAKaW5kZXggMWVlNzNlYmMwZWEwMzZmODZiM2ZlOTQ0MTQ5MDcy
ZTZhYzRkYzc2Ny4uNzcwMTQ5OTgzNmVlNDRmOWFjZjBlMjcwZDcwYzk1ZDE2YmU2NzhkNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFu
YWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29v
a2llTWFuYWdlci5jcHAKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJXZWJLaXRDb29raWVNYW5hZ2VyLmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vz
c1Byb3h5LmgiCiAjaW5jbHVkZSAiU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZS5oIgog
I2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYktpdENvb2tp
ZU1hbmFnZXJQcml2YXRlLmgiCkBAIC01Niw2ICs1NywxMiBAQCBlbnVtIHsKIH07CiAKIHN0cnVj
dCBfV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94
eSYgY29va2llTWFuYWdlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoZGF0YU1hbmFn
ZXIpOworICAgICAgICByZXR1cm4gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3Jl
KGRhdGFNYW5hZ2VyKS5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICB9CisK
ICAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKGRhdGFNYW5hZ2VyKTsKQEAgLTY0LDggKzcxLDcgQEAgc3RydWN0IF9XZWJLaXRDb29raWVN
YW5hZ2VyUHJpdmF0ZSB7CiAKICAgICB+X1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlKCkKICAg
ICB7Ci0gICAgICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1h
bmFnZXJHZXRQcm9jZXNzUG9vbHMoZGF0YU1hbmFnZXIpKQotICAgICAgICAgICAgcHJvY2Vzc1Bv
b2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVPYnNlcnZl
ckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsKKyAgICAgICAgY29va2llTWFuYWdlcigp
LnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOwogICAgIH0K
IAogICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbmFnZXI7CkBAIC0xMzksMTEg
KzE0NSw5IEBAIFdlYktpdENvb2tpZU1hbmFnZXIqIHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUo
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuCiB7CiAgICAgV2ViS2l0Q29va2llTWFu
YWdlciogbWFuYWdlciA9IFdFQktJVF9DT09LSUVfTUFOQUdFUihnX29iamVjdF9uZXcoV0VCS0lU
X1RZUEVfQ09PS0lFX01BTkFHRVIsIG51bGxwdHIpKTsKICAgICBtYW5hZ2VyLT5wcml2LT5kYXRh
TWFuYWdlciA9IGRhdGFNYW5hZ2VyOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJr
aXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1h
bmFnZXIpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhtYW5hZ2VyLT5wcml2LT5zZXNz
aW9uSUQoKSwgW21hbmFnZXJdIHsKLSAgICAgICAgICAgIGdfc2lnbmFsX2VtaXQobWFuYWdlciwg
c2lnbmFsc1tDSEFOR0VEXSwgMCk7Ci0gICAgICAgIH0pOwotICAgIH0KKyAgICBtYW5hZ2VyLT5w
cml2LT5jb29raWVNYW5hZ2VyKCkuc2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhtYW5hZ2VyLT5w
cml2LT5zZXNzaW9uSUQoKSwgW21hbmFnZXJdIHsKKyAgICAgICAgZ19zaWduYWxfZW1pdChtYW5h
Z2VyLCBzaWduYWxzW0NIQU5HRURdLCAwKTsKKyAgICB9KTsKICAgICByZXR1cm4gbWFuYWdlcjsK
IH0KIApAQCAtMTczLDggKzE3Nyw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9w
ZXJzaXN0ZW50X3N0b3JhZ2UoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwKICAgICBpZiAo
c2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoYXV0
byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMo
bWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxl
bWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
KHNlc3Npb25JRCwgU3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZSksIHRvU291cENvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlVHlwZShzdG9yYWdlKSk7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFu
YWdlcigpLnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgU3RyaW5nOjpmcm9t
VVRGOChmaWxlbmFtZSksIHRvU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZShzdG9yYWdl
KSk7CiB9CiAKIC8qKgpAQCAtMTkyLDggKzE5NSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX3NldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIFdlYktp
CiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdl
cikpOwogCi0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29v
a2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKKyAgICBtYW5hZ2VyLT5wcml2LT5j
b29raWVNYW5hZ2VyKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5z
ZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsK
IH0KIAogLyoqCkBAIC0yMjQsNyArMjI2LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJf
Z2V0X2FjY2VwdF9wb2xpY3koV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgR0NhbmMKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRU
UENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVN
YW5hZ2VyKCkuZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9u
SUQoKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9s
aWN5IHBvbGljeSkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2ludCh0YXNrLmdldCgpLCB0b1dl
YktpdENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKICAgICB9KTsKIH0KQEAgLTI2OSwxMSAr
MjcxLDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZShXZWJLaXRDb29r
aWVNYW5hZ2VyKiBtYW5hZ2VyLCBTb3VwQ29va2llKgogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29v
a2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyht
YW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29r
aWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24g
ZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJv
bSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBw
cm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFu
YWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vz
c2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tpZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRh
c2spXSgpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuc2V0Q29va2llcyht
YW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgeyBXZWJDb3JlOjpDb29raWUoY29va2llKSB9LCBb
dGFzayA9IFdURk1vdmUodGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4o
dGFzay5nZXQoKSwgVFJVRSk7CiAgICAgfSk7CiB9CkBAIC0zMjAsMTEgKzMxOCw3IEBAIHZvaWQg
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzKFdlYktpdENvb2tpZU1hbmFnZXIqIG1h
bmFnZXIsIGNvbnN0IGdjaGFyCiAgICAgZ19yZXR1cm5faWZfZmFpbCh1cmkpOwogCiAgICAgR1Jl
ZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxh
YmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3Jp
dHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MK
LSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0
aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRh
TWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKS0+Z2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVS
TCgpLCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSB7CisgICAgbWFuYWdlci0+cHJpdi0+
Y29va2llTWFuYWdlcigpLmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVS
TChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShj
b25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgewogICAgICAgICBHTGlzdCog
Y29va2llc0xpc3QgPSBudWxscHRyOwogICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGNvb2tp
ZXMpCiAgICAgICAgICAgICBjb29raWVzTGlzdCA9IGdfbGlzdF9wcmVwZW5kKGNvb2tpZXNMaXN0
LCBjb29raWUudG9Tb3VwQ29va2llKCkpOwpAQCAtMzc4LDExICszNzIsNyBAQCB2b2lkIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFn
ZXIsIFNvdXBDb29raQogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29va2llKTsKIAogICAgIEdSZWZQ
dHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJs
ZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0
ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0g
ICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhl
IGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJr
aXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1h
bmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCktPmRlbGV0ZUNvb2tpZShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29y
ZTo6Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CisgICAgbWFuYWdl
ci0+cHJpdi0+Y29va2llTWFuYWdlcigpLmRlbGV0ZUNvb2tpZShtYW5hZ2VyLT5wcml2LT5zZXNz
aW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0o
KSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAg
ICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYkNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0V2ViQ29udGV4dC5jcHAKaW5kZXggODliZTU2YWQ3MWQ3MTU2OTEyYTI2OTE1MzA1N2RmNTI3
Y2RkNDQ2MC4uY2ZmMDM1ODZkZjhhMWZiOTZhNjJhMDE3YTNjNDZlNWY0MGRlMmQzNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4
dC5jcHAKQEAgLTQwNCw3ICs0MDQsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0Q29u
c3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogICAgICAgICBwcml2LT53ZWJzaXRlRGF0YU1hbmFn
ZXIgPSBhZG9wdEdSZWYod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldygibG9jYWwtc3Rv
cmFnZS1kaXJlY3RvcnkiLCBwcml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkuZGF0YSgpLCBudWxs
cHRyKSk7CiAKICAgICBwcml2LT5wcm9jZXNzUG9vbCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUo
Y29uZmlndXJhdGlvbik7Ci0gICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFByaW1hcnlEYXRhU3Rv
cmUod2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHByaXYtPndlYnNpdGVEYXRh
TWFuYWdlci5nZXQoKSkpOwogICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRVc2VyTWVzc2FnZUhh
bmRsZXIoW3dlYkNvbnRleHRdKFVzZXJNZXNzYWdlJiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChVc2VyTWVzc2FnZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgewogICAgICAgICAv
LyBTaW5rIHRoZSBmbG9hdGluZyByZWYuCiAgICAgICAgIEdSZWZQdHI8V2ViS2l0VXNlck1lc3Nh
Z2U+IHVzZXJNZXNzYWdlID0gd2Via2l0VXNlck1lc3NhZ2VDcmVhdGUoV1RGTW92ZShtZXNzYWdl
KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpAQCAtMTYwMyw4ICsxNjAyLDggQEAgdm9p
ZCB3ZWJraXRfd2ViX2NvbnRleHRfcHJlZmV0Y2hfZG5zKFdlYktpdFdlYkNvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IGNoYXIqIGhvc3QKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJf
Q09OVEVYVChjb250ZXh0KSk7CiAgICAgZ19yZXR1cm5faWZfZmFpbChob3N0bmFtZSk7CiAKLSAg
ICBpZiAoY29udGV4dC0+cHJpdi0+ZG5zUHJlZmV0Y2hlZEhvc3RzLmFkZChob3N0bmFtZSkuaXNO
ZXdFbnRyeSkKLSAgICAgICAgY29udGV4dC0+cHJpdi0+cHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5n
Ojpmcm9tVVRGOChob3N0bmFtZSkpKTsKKyAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gd2Vi
a2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGNvbnRleHQtPnByaXYtPndlYnNpdGVE
YXRhTWFuYWdlci5nZXQoKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZS5uZXR3b3JrUHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVmZXRjaEROUyhTdHJpbmc6OmZyb21V
VEY4KGhvc3RuYW1lKSksIDApOwogICAgIGNvbnRleHQtPnByaXYtPmRuc1ByZWZldGNoSHlzdGVy
ZXJpcy5pbXB1bHNlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKaW5kZXggNGFiNDdmZmY1
OTExZWVjMzdlNTZiYzViYmIzMjllYmFlYTdkMzg2NS4uMzAwNmY0ZmFlNmM0M2MyNmJmNDA4MjJi
NmRlODY4ZWYyZTAyY2ZiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKQEAgLTEzOTIsOCArMTM5
Miw4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZShjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uCiAKICAgICBjb29raWUuaHR0cE9ubHkgPSAq
aHR0cE9ubHk7CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBt
X3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBj
b29raWVNYW5hZ2VyLT5zZXRDb29raWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9u
SUQoKSwgeyBjb29raWUgfSwgW2NhbGxiYWNrXSgpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHkmIGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nl
c3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5zZXRDb29raWVzKHBhZ2Ut
PndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2NhbGxiYWNrXSgp
IHsKICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAgICAgfSk7CiB9CkBAIC0xNDA5
LDggKzE0MDksOCBAQCBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKAogCiAgICAgU3RyaW5nIGhvc3Qg
PSBhY3RpdmVVUkwuaG9zdCgpLnRvU3RyaW5nKCk7CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVDb29raWVzRm9ySG9zdG5h
bWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5C
eUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOworICAgIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eSYgY29va2llTWFuYWdlciA9IHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJv
Y2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3Qs
IGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoaG9zdCkgfSk7CiAKICAgICByZXR1cm4g
eyB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJv
eHkuaAppbmRleCA0MWMwYTBmYmY1MDZlZmExNDA4YmNlZjlhZjhhOTBiODVhMWFkMDhhLi40ZjM5
OGI1MzBmNjA4NTc1Yzk2N2I4M2M3NGZhMmY0MzI4ZjZjZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaApAQCAtNDgsNyArNDgsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KCk7CiAKICAgICB2b2lk
IGNvbm5lY3QoKTsKLSAgICB2b2lkIHRlcm1pbmF0ZSgpOworICAgIHZpcnR1YWwgdm9pZCB0ZXJt
aW5hdGUoKTsKIAogICAgIHZpcnR1YWwgUHJvY2Vzc1Rocm90dGxlciYgdGhyb3R0bGVyKCkgPSAw
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oCmluZGV4IGRiZTQ0Zjk1OTQxMDUx
MTIxNTEyOGQyOWQyMTRlZWUwNzRhYWY4NGMuLjRjODQ1YTBlYzcyNTY1OWNmZTc5Y2VhMzVkM2Ni
YTk2NjgzNDYxNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oCkBAIC00MSwx
MSArNDEsMTEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBMZWdhY3lDdXN0b21Qcm90b2Nv
bE1hbmFnZXJQcm94eTsKIAogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
IGZpbmFsIDogcHVibGljIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IHsKLXByaXZh
dGU6CitwdWJsaWM6CiAgICAgdm9pZCBzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHkmLCBMZWdhY3lDdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmKSBmaW5hbDsKICAgICB2b2lkIHN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCkgZmluYWw7CiAgICAg
dm9pZCBpbnZhbGlkYXRlKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5JikgZmluYWw7
Ci0KK3ByaXZhdGU6CiAgICAgSGFzaE1hcDxMZWdhY3lDdXN0b21Qcm90b2NvbElELCBSZXRhaW5Q
dHI8V0tDdXN0b21Qcm90b2NvbExvYWRlcj4+IG1fbG9hZGVyTWFwOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KaW5k
ZXggNzZkN2E2NDA0MWEyOTFkNWYyOTczNTE3NmUzMWVhNzBmNWVkNTU2Yy4uMTllZmNhNmE2NDBj
YjJmMzFjMmE4NzU1MDZiMWQ2NjlkNmRjNzZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCkBAIC0xMzQsOCArMTM0LDkg
QEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpCiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCkKIHsKLSAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2V0UHJvY2Vzc1N1
cHByZXNzaW9uRW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpOworICAgIFdlYnNp
dGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtlbmFibGVkID0gcHJvY2Vzc1N1
cHByZXNzaW9uRW5hYmxlZCgpXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAg
ICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJs
ZWQoZW5hYmxlZCk7CisgICAgfSk7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
ICAgICBpZiAoIW1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1
ZSgpKQpAQCAtMTY2LDggKzE2Nyw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5p
dGlhbGl6ZSgpCiAgICAgaWYgKCFbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRz
XSBib29sRm9yS2V5OkAiV2ViS2l0U3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIiXSkKICAg
ICAgICAgaW5zdGFsbE1lbW9yeVByZXNzdXJlSGFuZGxlcigpOwogCi0gICAgc2V0TGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8TGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50PigpKTsKLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9S
TShNQUNDQVRBTFlTVCkKICAgICBpZiAoIV9NR0NhY2hlVmFsaWQoKSkgewogICAgICAgICBkaXNw
YXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9S
SVRZX0RFRkFVTFQsIDApLCBeewpAQCAtNDkzLDIyICs0OTIsNiBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYQogCiAgICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRz
IHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKIAotICAgIHsKLSAgICAgICAgYm9vbCBpc1NhZmFyaSA9
IGZhbHNlOwotICAgICAgICBib29sIGlzTWluaUJyb3dzZXIgPSBmYWxzZTsKLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgICAgICBpc1NhZmFyaSA9IFdlYkNvcmU6OklPU0FwcGxpY2F0aW9u
Ojppc01vYmlsZVNhZmFyaSgpOwotICAgICAgICBpc01pbmlCcm93c2VyID0gV2ViQ29yZTo6SU9T
QXBwbGljYXRpb246OmlzTWluaUJyb3dzZXIoKTsKLSNlbGlmIFBMQVRGT1JNKE1BQykKLSAgICAg
ICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNTYWZhcmkoKTsKLSAgICAg
ICAgaXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6Ok1hY0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2Vy
KCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGlzU2FmYXJpIHx8IGlzTWluaUJyb3dzZXIpIHsKLSAg
ICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLmh0dHBQcm94eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0Zv
cktleTooTlNTdHJpbmcgKilXZWJLaXQySFRUUFByb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmh0dHBzUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6
KE5TU3RyaW5nICopV2ViS2l0MkhUVFBTUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICB9Ci0g
ICAgfQotCiAgICAgcGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dCA9IGFkb3B0Q0YoX0NGTmV0
d29ya0NvcHlBVFNDb250ZXh0KCkpOwogCiAgICAgcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01l
bW9yeVByZXNzdXJlSGFuZGxlciA9IFtkZWZhdWx0cyBib29sRm9yS2V5OldlYktpdFN1cHByZXNz
TWVtb3J5UHJlc3N1cmVIYW5kbGVyRGVmYXVsdHNLZXldOwpAQCAtNTIyLDEyICs1MDUsOCBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYQogICAgIE5TTnVtYmVyICpkYXRhYmFzZUVuYWJsZWRWYWx1
ZSA9IFtkZWZhdWx0cyBvYmplY3RGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJ
bnRlcm5hbERlYnVnJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6aXNJVFBEYXRhYmFzZUVuYWJsZWRL
ZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07CiAgICAgaWYgKGRhdGFiYXNlRW5hYmxlZFZh
bHVlKQogICAgICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gZGF0YWJh
c2VFbmFibGVkVmFsdWUuYm9vbFZhbHVlOwotICAgIGVsc2UKLSAgICAgICAgcGFyYW1ldGVycy5z
aG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMo
KS5pc0lUUERhdGFiYXNlRW5hYmxlZCgpOwogCiAgICAgcGFyYW1ldGVycy5lbmFibGVBZENsaWNr
QXR0cmlidXRpb25EZWJ1Z01vZGUgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIkV4cGVyaW1lbnRhbCVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmFkQ2xp
Y2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgp
XV07Ci0KLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1p
c3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1JbnZhbGlkYXRlQ29udGV4dCgpCkBAIC02
MDYsMTEgKzU4NSw2IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NTdXBwcmVzc2lvbkVu
YWJsZWQoKSBjb25zdAogICAgIHJldHVybiAhbV91c2VyT2JzZXJ2YWJsZVBhZ2VDb3VudGVyLnZh
bHVlKCkgJiYgIW1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1
ZSgpOwogfQogCi1ib29sIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVt
ZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmIGVudGl0bGVtZW50KQotewotICAgIHJldHVybiBX
VEY6Omhhc0VudGl0bGVtZW50KGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpLT54
cGNDb25uZWN0aW9uKCksIGVudGl0bGVtZW50LnV0ZjgoKS5kYXRhKCkpOwotfQotCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogZmxvYXQgV2ViUHJv
Y2Vzc1Bvb2w6OmRpc3BsYXlCcmlnaHRuZXNzKCkKIHsKQEAgLTk0NywyMyArOTIxLDQgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJIaWdoRHluYW1pY1JhbmdlQ2hhbmdlQ2FsbGJhY2so
KQogfQogI2VuZGlmCiAKLU9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4gV2ViUHJvY2Vzc1Bvb2w6
OnhwY0VuZHBvaW50TWVzc2FnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZW5kcG9pbnRNZXNz
YWdlOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRw
b2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVzc2Fn
ZSkKLXsKLSAgICBtX2VuZHBvaW50TWVzc2FnZSA9IGVuZHBvaW50TWVzc2FnZTsKLQotICAgIGZv
ciAoYXV0byBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsKLSAgICAgICAgaWYgKHByb2Nlc3MtPnN0
YXRlKCkgIT0gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpTdGF0ZTo6UnVubmluZykKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIXByb2Nlc3MtPmNvbm5lY3Rpb24oKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvIGNvbm5lY3Rpb24gPSBwcm9jZXNzLT5jb25u
ZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKTsKLSAgICAgICAgeHBjX2Nvbm5lY3Rpb25fc2VuZF9t
ZXNzYWdlKGNvbm5lY3Rpb24sIGVuZHBvaW50TWVzc2FnZS5nZXQoKSk7Ci0gICAgfQotfQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAppbmRleCBjNWRlNGU3ZDBmNTkxOTRmNDNhMDIzYjA4
OWUzNzJjNThjZjhlZTA2Li5mN2NmZjg1MmYwYmE2ZDAxNTUxMTY1ZGQ4YTlmN2Q1NzYzYjAwN2Qz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
UHJveHkuY3BwCkBAIC03NSw4ICs3NSw4IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6Y2FuY2VsKCkK
ICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChOZXR3
b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CisgICAgaWYgKG1fZGF0
YVN0b3JlKQorICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CiB9
CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6aW52YWxpZGF0ZSgpCkBAIC0xMDMsMTUgKzEwMywxMyBA
QCBXZWJQYWdlUHJveHkqIERvd25sb2FkUHJveHk6Om9yaWdpbmF0aW5nUGFnZSgpIGNvbnN0CiAj
aWYgUExBVEZPUk0oQ09DT0EpCiB2b2lkIERvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVzcyhj
b25zdCBVUkwmIFVSTCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFtX2Rh
dGFTdG9yZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOwotICAgICAgICBib29sIGNyZWF0ZWRTYW5kYm94RXh0ZW5z
aW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKFVSTC5maWxlU3lzdGVtUGF0aCgp
LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIGhhbmRsZSk7Ci0gICAgICAgIEFT
U0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5z
aW9uKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9ncmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFuZGxlKSwg
MCk7Ci0gICAgfQorICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7CisgICAgYm9v
bCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRl
LCBoYW5kbGUpOworICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNy
ZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsKKyAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3Mo
KS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2FkUHJvZ3Jlc3Mo
bV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKENP
Q09BKQogCkBAIC0xMzEsMTEgKzEyOSwxMCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRpZFN0YXJ0
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBzdWdnZQogCiB2
b2lkIERvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCB1aW50NjRfdCBj
aGFsbGVuZ2VJRCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFtX3Byb2Nl
c3NQb29sIHx8ICFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBhdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eTo6
Y3JlYXRlKFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBjaGFsbGVuZ2VJRCwgbWFr
ZVJlZigqbV9wcm9jZXNzUG9vbC0+bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkpLCBudWxs
cHRyKTsKLQorICAgIGF1dG8gYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlUHJveHk6OmNyZWF0ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKSwgY2hhbGxlbmdlSUQsIG1ha2VSZWYoKm1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vzcygp
LmNvbm5lY3Rpb24oKSksIG51bGxwdHIpOwogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xp
ZW50KCkuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCp0aGlzLCBhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZVByb3h5LmdldCgpKTsKIH0KIApAQCAtMTQ2LDE1ICsxNDMsMTAgQEAgdm9p
ZCBEb3dubG9hZFByb3h5Ojp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYgcHJvcG9z
ZWRSZXF1ZXN0LCBjb25zdCBSZXMKIAogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50
KCkud2lsbFNlbmRSZXF1ZXN0KCp0aGlzLCBXVEZNb3ZlKHByb3Bvc2VkUmVxdWVzdCksIHJlZGly
ZWN0UmVzcG9uc2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKFJlc291
cmNlUmVxdWVzdCYmIG5ld1JlcXVlc3QpIHsKICAgICAgICAgbV9yZWRpcmVjdENoYWluLmFwcGVu
ZChuZXdSZXF1ZXN0LnVybCgpKTsKLQotICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fcHJv
Y2Vzc1Bvb2wpCisgICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9kYXRhU3RvcmUpCiAgICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYXV0byogbmV0d29ya1Byb2Nlc3NQcm94eSA9IHBy
b3RlY3RlZFRoaXMtPm1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgIGlm
ICghbmV0d29ya1Byb2Nlc3NQcm94eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBu
ZXR3b3JrUHJvY2Vzc1Byb3h5LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGlu
dWVXaWxsU2VuZFJlcXVlc3QocHJvdGVjdGVkVGhpcy0+bV9kb3dubG9hZElELCBuZXdSZXF1ZXN0
KSwgMCk7CisgICAgICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRUaGlz
LT5tX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3NQ
cm94eS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVXaWxsU2VuZFJlcXVl
c3QocHJvdGVjdGVkVGhpcy0+bV9kb3dubG9hZElELCBuZXdSZXF1ZXN0KSwgMCk7CiAgICAgfSk7
CiB9CiAKQEAgLTE3OSwxNiArMTcxLDE0IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGVjaWRlRGVz
dGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyhEb3dubG9hZElEIGRvd25sCiAgICAg
aWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9wcm9jZXNz
UG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxl
bmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5h
bWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBkb3dubG9hZElEID0gZG93bmxvYWRJRF0gKEFsbG93T3ZlcndyaXRlIGFsbG93T3Zlcndy
aXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsKKyAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENs
aWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKCp0aGlzLCBSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxl
bmFtZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRvd25sb2FkSURd
IChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CiAg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwog
ICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGRlc3RpbmF0aW9uLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBl
OjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgICAgIGlmICghbV9w
cm9jZXNzUG9vbCkKKyAgICAgICAgaWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0
aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxv
d092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CisgICAgICAgIG1fZGF0YVN0
b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250
aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0
aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3
cml0ZTo6WWVzKSwgMCk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAppbmRleCA3NmEwNzE1N2I1
OTFhYWNlNTBmMTVkMTUyNWRiY2ZiOGM2YTRiYmM4Li5kNzRhOGZhNmM2NGM4ODYzNWY5ZWI3NWNh
NzNlNzBmZDk0NmNhMDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCkBAIC00NCw3ICs0NCw3IEBACiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogRG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcChOZXR3b3Jr
UHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQotICAgIDogbV9wcm9jZXNzKG1ha2VXZWFrUHRyKHByb2Nl
c3MpKQorICAgIDogbV9wcm9jZXNzKHByb2Nlc3MpCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAg
LCBtX3Nob3VsZFRha2VBc3NlcnRpb24oV1RGOjpwcm9jZXNzSGFzRW50aXRsZW1lbnQoImNvbS5h
cHBsZS5tdWx0aXRhc2tpbmcuc3lzdGVtYXBwYXNzZXJ0aW9ucyIpKQogI2VuZGlmCkBAIC03MCwx
NCArNzAsMTIgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9ybURlc3Ryb3koKQogCiB2
b2lkIERvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCkKIHsK
LSAgICBpZiAobV9wcm9jZXNzKQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKKyAgICBt
X3Byb2Nlc3Muc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uRGlkRW50
ZXJCYWNrZ3JvdW5kKCksIDApOwogfQogCiB2b2lkIERvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0
aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25XaWxs
RW50ZXJGb3JlZ3JvdW5kKCksIDApOworICAgIG1fcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6QXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCksIDApOwogfQogCiBE
b3dubG9hZFByb3h5JiBEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJ
bmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKQEAgLTky
LDEzICs5MCwxMiBAQCBEb3dubG9hZFByb3h5JiBEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVEb3du
bG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZQogICAgICAgICBtX2Rvd25sb2Fk
VUlBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KGdldEN1cnJlbnRQcm9j
ZXNzSUQoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJv
dW5kZWROZXR3b3JraW5nKTsKIAogICAgICAgICBBU1NFUlQoIW1fZG93bmxvYWROZXR3b3JraW5n
QXNzZXJ0aW9uKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9wcm9jZXNzKTsKLSAgICAgICAg
bV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRp
b24+KG1fcHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMiX3Ms
IFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKKyAgICAgICAgbV9k
b3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+
KG1fcHJvY2Vzcy5wcm9jZXNzSWRlbnRpZmllcigpLCAiV2ViS2l0IGRvd25sb2FkcyJfcywgUHJv
Y2Vzc0Fzc2VydGlvblR5cGU6OlVuYm91bmRlZE5ldHdvcmtpbmcpOwogCiAgICAgICAgIFJFTEVB
U0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiVUlQcm9jZXNzIHRvb2sgJ1dlYktpdCBkb3dubG9h
ZHMnIGFzc2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKICAgICB9
CiAKLSAgICBtX3Byb2Nlc3MtPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQ
cm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCku
ZG93bmxvYWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsKKyAgICBtX3Byb2Nlc3MuYWRkTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCksIGRvd25sb2FkUHJv
eHkuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CkBAIC0xMDksMTIgKzEw
Niw5IEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5pc2hlZChEb3dubG9hZFBy
b3h5JiBkb3dubG9hZFByb3h5KQogCiAgICAgUkVMRUFTRV9MT0coTG9hZGluZywgIlJlbW92aW5n
IGRvd25sb2FkICUiIFBSSXU2NCAiIGZyb20gVUlQcm9jZXNzIERvd25sb2FkUHJveHlNYXAiLCBk
b3dubG9hZElELmRvd25sb2FkSUQoKSk7CiAKLSAgICAvLyBUaGUgRG93bmxvYWRQcm94eSBtYXkg
YmUgaG9sZGluZyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIHByb2Nlc3MgcG9vbC4KLSAgICBh
dXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZlB0cihtX3Byb2Nlc3MtPnByb2Nlc3NQ
b29sKCkpOwotCiAgICAgQVNTRVJUKG1fZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsK
IAotICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9h
ZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsK
KyAgICBtX3Byb2Nlc3MucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFBy
b3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKICAg
ICBkb3dubG9hZFByb3h5LmludmFsaWRhdGUoKTsKICAgICBtX2Rvd25sb2Fkcy5yZW1vdmUoZG93
bmxvYWRJRCk7CiAKQEAgLTEzMywxNSArMTI3LDEzIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6
aW52YWxpZGF0ZSgpCiAgICAgZm9yIChjb25zdCBhdXRvJiBkb3dubG9hZCA6IG1fZG93bmxvYWRz
LnZhbHVlcygpKSB7CiAgICAgICAgIGRvd25sb2FkLT5wcm9jZXNzRGlkQ2xvc2UoKTsKICAgICAg
ICAgZG93bmxvYWQtPmludmFsaWRhdGUoKTsKLSAgICAgICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgZG93bmxvYWQtPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgICAgICBtX3Byb2Nl
c3MucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKICAg
ICB9CiAKICAgICBtX2Rvd25sb2Fkcy5jbGVhcigpOwogICAgIG1fZG93bmxvYWRVSUFzc2VydGlv
biA9IG51bGxwdHI7CiAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBudWxscHRy
OwogICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiVUlQcm9jZXNzIERvd25sb2Fk
UHJveHlNYXAgaW52YWxpZGF0ZWQgLSBSZWxlYXNlZCAnV2ViS2l0IGRvd25sb2FkcycgYXNzZXJ0
aW9ucyBmb3IgVUlQcm9jZXNzIGFuZCBOZXR3b3JrUHJvY2VzcyIpOwotCi0gICAgbV9wcm9jZXNz
ID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAppbmRleCAzYmUy
MDc5YTBmMmM0YjUzNzA2MmNlMTMwMGUxY2Q1ZGE0NDRmZmJlLi40ZmEwMDFiZDdmYWUxY2VkMDI0
ZDJiOTFmMjAxNzBmZjk5NDUyOGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHBsYXRmb3JtQ3JlYXRlKCk7CiAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3ko
KTsKIAotICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9wcm9jZXNzOworICAgIE5l
dHdvcmtQcm9jZXNzUHJveHkmIG1fcHJvY2VzczsKICAgICBIYXNoTWFwPERvd25sb2FkSUQsIFJl
ZlB0cjxEb3dubG9hZFByb3h5Pj4gbV9kb3dubG9hZHM7CiAKICAgICBib29sIG1fc2hvdWxkVGFr
ZUFzc2VydGlvbiB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9M
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKaW5kZXggOGMyM2JiZThjMDZhMTU5
OWNiOWI5MTZhMGIzMmFmYjM3NzgzZjMwNS4uZDZjMzMyM2RkOTNlNjlmNTZhZGY2YmUwZDJhMWIx
NGYwODIyNDUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9D
dXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcApAQCAtNDQsMTcgKzQ0LDE3IEBAIExlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp+TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJv
eHkoKQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdGFydExvYWRp
bmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5
LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RhcnRMb2FkaW5n
KCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKKyAgICBtX25ldHdvcmtQcm9jZXNz
UHJveHkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RhcnRMb2FkaW5nKCp0aGlzLCBj
dXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2Nv
bE1hbmFnZXJQcm94eTo6c3RvcExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Q
cm90b2NvbElEKQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90
b2NvbElEKTsKKyAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkuY3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50KCkuc3RvcExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOwogfQogCiB2b2lk
IExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBt
X25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQoKS5pbnZhbGlkYXRlKCp0aGlzKTsKKyAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkuY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuaW52YWxpZGF0ZSgqdGhpcyk7CiB9CiAKIHZvaWQg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3Qo
TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
IHJlZGlyZWN0UmVzcG9uc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBjMWY0NzA4YjgxY2ZhNTNhYjEy
MmMyOTQ0Njc1ZTc4MjUxNjcxMjFmLi44ZjAxMjE1M2IyZDNmZDc3NTFkZTA2MGI4OGExNDc4MzQ0
ZjZhNjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJOZXR3
b3JrUHJvY2Vzc1Byb3h5LmgiCiAKICNpbmNsdWRlICJBUElDb250ZW50UnVsZUxpc3QuaCIKKyNp
bmNsdWRlICJBUElDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIKICNpbmNsdWRlICJBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25NYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1hcC5oIgpAQCAtMzUsNiArMzYsNyBAQAog
I2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2VuZGlmCisj
aW5jbHVkZSAiTGVnYWN5R2xvYmFsU2V0dGluZ3MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAj
aW5jbHVkZSAiTmV0d29ya0NvbnRlbnRSdWxlTGlzdE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1
ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKQEAgLTQ4LDYgKzUwLDcgQEAKICNp
bmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJTdG9yYWdl
QWNjZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QuaCIK
KyNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJQYWdlTWVz
c2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNz
TWVzc2FnZXMuaCIKQEAgLTYwLDYgKzYzLDcgQEAKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3Jl
Q2xpZW50LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1JlZ2lzdHJhYmxlRG9tYWluLmg+CisjaW5jbHVkZSA8d3RmL0NhbGxiYWNrQWdncmVn
YXRvci5oPgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogCiAjaWYgRU5BQkxF
KFNFQ19JVEVNX1NISU0pCkBAIC03MCwyMCArNzQsMTI2IEBACiAjaW5jbHVkZSA8d3RmL3NwaS9k
YXJ3aW4vWFBDU1BJLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUg
IkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oIgorI2VuZGlmCisKICNkZWZpbmUg
TUVTU0FHRV9DSEVDSyhhc3NlcnRpb24pIE1FU1NBR0VfQ0hFQ0tfQkFTRShhc3NlcnRpb24sIGNv
bm5lY3Rpb24oKSkKIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAotTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNz
UG9vbCYgcHJvY2Vzc1Bvb2wpCi0gICAgOiBBdXhpbGlhcnlQcm9jZXNzUHJveHkocHJvY2Vzc1Bv
b2wuYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCi0gICAgLCBtX3Byb2Nlc3NQb29s
KHByb2Nlc3NQb29sKQorc3RhdGljIEhhc2hTZXQ8TmV0d29ya1Byb2Nlc3NQcm94eSo+JiBuZXR3
b3JrUHJvY2Vzc2VzU2V0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8TmV0d29ya1Byb2Nlc3NQcm94
eSo+PiBzZXQ7CisgICAgcmV0dXJuIHNldDsKK30KKworVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vz
c1Byb3h5Pj4gTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpCit7Cisg
ICAgVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzOworICAgIHByb2Nl
c3Nlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5zaXplKCkp
OworICAgIGZvciAoYXV0byogbmV0d29ya1Byb2Nlc3MgOiBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkp
CisgICAgICAgIHByb2Nlc3Nlcy51bmNoZWNrZWRBcHBlbmQoKm5ldHdvcmtQcm9jZXNzKTsKKyAg
ICByZXR1cm4gcHJvY2Vzc2VzOworfQorCitzdGF0aWMgUmVmUHRyPE5ldHdvcmtQcm9jZXNzUHJv
eHk+JiBkZWZhdWx0UHJvY2VzcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0
cjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gcHJvY2VzczsKKyAgICByZXR1cm4gcHJvY2Vzcy5nZXQo
KTsKK30KKworUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRl
ZmF1bHROZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpCit7CisgICAg
aWYgKCFkZWZhdWx0UHJvY2VzcygpKQorICAgICAgICBkZWZhdWx0UHJvY2VzcygpID0gTmV0d29y
a1Byb2Nlc3NQcm94eTo6Y3JlYXRlKGRhdGFTdG9yZSk7CisgICAgcmV0dXJuICpkZWZhdWx0UHJv
Y2VzcygpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpCit7Cisg
ICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Ojp0ZXJtaW5hdGUoKTsKKyAgICBpZiAodGhpcyA9PSBk
ZWZhdWx0UHJvY2VzcygpLmdldCgpKQorICAgICAgICBkZWZhdWx0UHJvY2VzcygpID0gbnVsbHB0
cjsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJz
VG9OZXdQcm9jZXNzKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
Ly8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBX
ZWJLaXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCisgICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0
aGlzIG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91ciBBUElz
LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYu
CisgICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgeworICAgICAgICBjYWxsT25NYWluUnVuTG9v
cEFuZFdhaXQoW3RoaXNdIHsKKyAgICAgICAgICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05l
d1Byb2Nlc3MoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdp
c3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmUoKSk7CisgICAgcGFyYW1ldGVycy51cmxT
Y2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRv
VmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3Rl
ckFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KCkpOworICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRp
bmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTG9jYWwoKSk7CisgICAgcGFyYW1l
dGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2Vzcygp
KTsKKyAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2lu
Z2xldG9uKCkuY2FjaGVNb2RlbCgpOworICAgIGZvciAoYXV0byYgc2NoZW1lIDogV2ViUHJvY2Vz
c1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQorICAgICAgICBw
YXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChz
Y2hlbWUpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKFN0cmluZyBjb29raWVT
dG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnko
KTsgIWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURp
cmVjdG9yeSwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKKyAgICBpZiAoU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nlc3NQ
b29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7ICFjb250YWluZXJDYWNoZXNEaXJlY3Rv
cnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JS
ZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNv
bnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgaWYgKFN0cmluZyBw
YXJlbnRCdW5kbGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0
b3J5KCk7ICFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0
ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOworI2VuZGlmCisgICAgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5p
dGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOworICAgIHBhcmFtZXRlcnMuZGF0YVN0
b3JlUGFyYW1ldGVycyA9IGRhdGFTdG9yZVBhcmFtZXRlcnMoKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAw
KTsKK30KKworVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkYXRhU3RvcmVQYXJhbWV0ZXJzKCkKK3sKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM+IHBhcmFtZXRlcnM7CisgICAgZm9yIChhdXRvJiBzdG9yZSA6IG1fd2Vi
c2l0ZURhdGFTdG9yZXMpCisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHN0b3JlLnBhcmFtZXRl
cnMoKSk7CisgICAgcmV0dXJuIHBhcmFtZXRlcnM7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nl
c3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkKK3sKKyAgICBmb3IgKGF1dG8q
IHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAg
ICAgIGlmIChwcm9jZXNzUG9vbC0+YWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitz
dGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24o
KQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJv
Y2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5zaG91bGRUYWtlVUlCYWNr
Z3JvdW5kQXNzZXJ0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1By
b3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKKyAgICA6IEF1eGlsaWFyeVByb2Nlc3NQ
cm94eShhbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQogI2lm
IEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCisgICAgLCBtX2N1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlUmVmPExlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudD4oKSkKICAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKnRoaXMp
CisjZWxzZQorICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZVJl
ZjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICNlbmRpZgotICAgICwgbV90
aHJvdHRsZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRp
b24oKSkKKyAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBhbnlQcm9jZXNzUG9vbFNob3VsZFRha2VV
SUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fY29va2llTWFuYWdlcihXZWJDb29raWVN
YW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcykpCiB7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5h
ZGQoZGF0YVN0b3JlKTsKICAgICBjb25uZWN0KCk7CisgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVy
c1RvTmV3UHJvY2VzcygpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5hZGQodGhpcyk7CiB9
CiAKIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1Byb3h5KCkKQEAgLTk4LDYg
KzIwOCw3IEBAIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1Byb3h5KCkKIAog
ICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+
aW52YWxpZGF0ZSgpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5yZW1vdmUodGhpcyk7CiB9
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1
bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMpCkBAIC0xMDUsMTUgKzIxNiwxMiBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5j
aGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuYwogICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1R5cGUg
PSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOwogICAgIEF1eGlsaWFyeVBy
b2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zKTsKIAotICAgIGlmIChw
cm9jZXNzUG9vbCgpLnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sKCkuc2V0U2hvdWxkTWFrZU5leHROZXR3b3Jr
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKLSAgICAgICAgbGF1bmNoT3B0aW9u
cy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKKyAgICBmb3Ig
KGF1dG8mIGRhdGFTdG9yZSA6IG1fd2Vic2l0ZURhdGFTdG9yZXMpIHsKKyAgICAgICAgaWYgKGRh
dGFTdG9yZS5zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmco
KSkgeworICAgICAgICAgICAgZGF0YVN0b3JlLnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nl
c3NMYXVuY2hGYWlsRm9yVGVzdGluZyhmYWxzZSk7CisgICAgICAgICAgICBsYXVuY2hPcHRpb25z
LnNob3VsZE1ha2VQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB0cnVlOworICAgICAgICB9
CiAgICAgfQotCi0jaWYgUExBVEZPUk0oUExBWVNUQVRJT04pCi0gICAgbGF1bmNoT3B0aW9ucy5w
cm9jZXNzUGF0aCA9IG1fcHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3NQYXRoKCk7Ci0gICAgbGF1
bmNoT3B0aW9ucy51c2VySWQgPSBtX3Byb2Nlc3NQb29sLnVzZXJJZCgpOwotI2VuZGlmCiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbikKQEAgLTE2NiwxMiArMjc0LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCiAgICAg
fQogfQogCi1Eb3dubG9hZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFn
ZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCitEb3dubG9hZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2Vi
UHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNl
UmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkqIG9y
aWdpbmF0aW5nUGFnZSkKIHsKICAgICBpZiAoIW1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAg
bV9kb3dubG9hZFByb3h5TWFwID0gbWFrZVVuaXF1ZTxEb3dubG9hZFByb3h5TWFwPigqdGhpcyk7
CiAKLSAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9hZFByb3h5KGRh
dGFTdG9yZSwgbV9wcm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdp
bmF0aW5nUGFnZSk7CisgICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxv
YWRQcm94eShkYXRhU3RvcmUsIHByb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5m
bywgb3JpZ2luYXRpbmdQYWdlKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpmZXRj
aFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gZGF0YVR5cGVzLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0
Y2hPcHRpb25zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChXZWJzaXRlRGF0YSk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0yMzcsOCArMzQ1LDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCkKIHsKICAgICBjbGVhckNhbGxiYWNrU3RhdGVzKCk7
CiAKLSAgICAvLyBUZWxsIHRoZSBuZXR3b3JrIHByb2Nlc3MgbWFuYWdlciB0byBmb3JnZXQgYWJv
dXQgdGhpcyBuZXR3b3JrIHByb2Nlc3MgcHJveHkuIFRoaXMgd2lsbCBjYXVzZSB1cyB0byBiZSBk
ZWxldGVkLgotICAgIG1fcHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsK
KyAgICBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CisgICAg
Zm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMo
KSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7Cisg
ICAgZm9yIChhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlIDogbV93ZWJzaXRlRGF0YVN0b3JlcykKKyAg
ICAgICAgd2Vic2l0ZURhdGFTdG9yZS5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMpOwogfQog
CiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNsZWFyQ2FsbGJhY2tTdGF0ZXMoKQpAQCAtMjU4
LDkgKzM2OSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlCiAgICAgaWYgKGRpc3BhdGNoTWVz
c2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1f
cHJvY2Vzc1Bvb2wuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQotICAgICAg
ICByZXR1cm47Ci0KICAgICBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2UoY29u
bmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAKQEAgLTI3NCw4ICszODIsNiBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIElQQwogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZENsb3NlKElQQzo6Q29u
bmVjdGlvbiYpCiB7Ci0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWYobV9w
cm9jZXNzUG9vbCk7Ci0KICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rv
d25sb2FkUHJveHlNYXAtPmludmFsaWRhdGUoKTsKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9Q
Uk9UT0NPTF9NQU5BR0VSKQpAQCAtMzMxLDExICs0MzcsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCBz
ZXNzaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF0b3BPcmlnaW4gfHwgIW1f
cHJvY2Vzc1Bvb2wuaXNTZXJ2aWNlV29ya2VyUGFnZUlEKHBhZ2VJRCkpIHsKLSAgICAgICAgcHJv
Y2Vzc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHNlc3Npb25JRCwgV1RGTW92ZShhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgV2ViUGFnZVBy
b3h5Ojpmb3JNb3N0VmlzaWJsZVdlYlBhZ2VJZkFueShzZXNzaW9uSUQsICp0b3BPcmlnaW4sIFt0
aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSUQsIGF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlID0gV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIG5lZ290aWF0
ZWRMZWdhY3lUTFNdKGF1dG8qIHBhZ2UpIG11dGFibGUgewogICAgICAgICBpZiAoIXdlYWtUaGlz
KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzkyLDExICs0OTMsNiBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqIGxhdW5jaGVy
LCBJUEM6OkNvbgogICAgICAgICBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChtX3Byb2Nlc3NQb29s
LnByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSkKLSAgICAgICAgc2V0UHJvY2Vzc1N1cHByZXNz
aW9uRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgogICAgIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgaWYgKHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiA9IHRoaXMtPmNvbm5lY3Rpb24o
KS0+eHBjQ29ubmVjdGlvbigpKQpAQCAtMTIwNSw3ICsxMzAxLDggQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKFBBTDo6U2Vzc2lv
bklEIHNlc3MKIH0KIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0RG9tYWluc1dpdGhVc2Vy
SW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5z
KQogewotICAgIHByb2Nlc3NQb29sKCkuc2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oV1RG
TW92ZShkb21haW5zKSk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnNldERvbWFpbnNX
aXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHsg
ZG9tYWlucyB9KTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQogCkBAIC0xMjUyLDQ1ICsxMzQ5LDMxIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Zmx1
c2hDb29raWVzKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIENvbXBsZXRpCiAgICAg
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Rmx1c2hDb29raWVz
KHNlc3Npb25JRCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjphZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmIHN0b3Jl
KQordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphZGRTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUm
IHN0b3JlKQogewotICAgIG1fc2Vzc2lvbklEcy5hZGQoc3RvcmUtPnNlc3Npb25JRCgpKTsKKyAg
ICBtX3dlYnNpdGVEYXRhU3RvcmVzLmFkZChzdG9yZSk7CiAKICAgICBpZiAoY2FuU2VuZE1lc3Nh
Z2UoKSkKLSAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVE
YXRhU3RvcmUgeyBzdG9yZS0+cGFyYW1ldGVycygpIH0sIDApOwotICAgIGF1dG8gc2Vzc2lvbklE
ID0gc3RvcmUtPnNlc3Npb25JRCgpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6QWRkV2Vic2l0ZURhdGFTdG9yZSB7IHN0b3JlLnBhcmFtZXRlcnMoKSB9LCAwKTsKKyAg
ICBhdXRvIHNlc3Npb25JRCA9IHN0b3JlLnNlc3Npb25JRCgpOwogICAgIGlmICghc2Vzc2lvbklE
LmlzRXBoZW1lcmFsKCkpIHsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAgICAg
Y3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHN0b3JlLT5yZXNvbHZlZEluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeSgpKTsKKyAgICAgICAgY3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHN0b3Jl
LnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCkpOwogI2VuZGlmCiAgICAgfQogfQog
Ci1ib29sIE5ldHdvcmtQcm9jZXNzUHJveHk6Omhhc1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKSBjb25zdAotewotICAgIHJldHVybiBtX3Nlc3Npb25JRHMuY29udGFpbnMoc2Vzc2lv
bklEKTsKLX0KLQotdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCkKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vz
c2lvbihXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIG1fc2Vzc2lv
bklEcy5yZW1vdmUoc2Vzc2lvbklEKTsKKyAgICBtX3dlYnNpdGVEYXRhU3RvcmVzLnJlbW92ZSh3
ZWJzaXRlRGF0YVN0b3JlKTsKIAogICAgIGlmIChjYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24geyBzZXNzaW9uSUQg
fSwgMCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEZXN0cm95U2Vz
c2lvbiB7IHdlYnNpdGVEYXRhU3RvcmUuc2Vzc2lvbklEKCkgfSwgMCk7CiB9CiAKIFdlYnNpdGVE
YXRhU3RvcmUqIE5ldHdvcmtQcm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lv
bklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBpZiAoc2Vzc2lvbklEID09IFBB
TDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgaWYgKCFXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpIHsKLSAgICAgICAgICAgIGF1dG8q
IHdlYnNpdGVEYXRhU3RvcmUgPSBtX3Byb2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUoKTsKLSAg
ICAgICAgICAgIGlmICh3ZWJzaXRlRGF0YVN0b3JlICYmIHdlYnNpdGVEYXRhU3RvcmUtPnNlc3Np
b25JRCgpID09IHNlc3Npb25JRCkKLSAgICAgICAgICAgICAgICByZXR1cm4gd2Vic2l0ZURhdGFT
dG9yZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0gICAgfQotICAgIHJldHVybiBXZWJzaXRlRGF0YVN0b3Jl
OjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAg
ICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQo
c2Vzc2lvbklEKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZXRyaWV2ZUNhY2hl
U3RvcmFnZVBhcmFtZXRlcnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpAQCAtMTMzNyw3ICsx
NDIwLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWREZXN0cm95V2ViVXNlckNvbnRl
bnRDb250cm9sbGVyUHJveHkoV2ViVXNlckNvbnRlbnQKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25u
ZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9t
YWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX3Byb2Nlc3NQb29sLmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgV1RGTW92ZShyZWdpc3Ry
YWJsZURvbWFpbiksIHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
IFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29y
a1Byb2Nlc3MoKnRoaXMsIFJlZ2lzdHJhYmxlRG9tYWluIHtyZWdpc3RyYWJsZURvbWFpbn0sIHNl
c3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OndvcmtlckNvbnRleHRDb25uZWN0aW9uTm9Mb25nZXJOZWVkZWQoV2ViQ29y
ZTo6UHJvY2Vzc0lkZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTE1MDAsMTYgKzE1ODMsMzQgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpwcmVjb25uZWN0VG8oUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBXZWJQYWdlUHJveHlJZGUKICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6UHJlY29ubmVjdFRvKHNlc3Npb25JRCwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJRCwgdXJs
LCB1c2VyQWdlbnQsIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRpbmdUb0FwcEJv
dW5kRG9tYWluKSwgMCk7CiB9CiAKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sSGFzRm9yZWdy
b3VuZFdlYlByb2Nlc3NlcygpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlBy
b2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wt
Pmhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29s
SGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJv
Y2Vzc1Bvb2wtPmhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpCiB7Ci0gICAgaWYgKHByb2Nlc3NQb29s
KCkuaGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKSB7CisgICAgaWYgKGFueVByb2Nlc3NQb29s
SGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKSB7CiAgICAgICAgIGlmICghUHJvY2Vzc1Rocm90
dGxlcjo6aXNWYWxpZEZvcmVncm91bmRBY3Rpdml0eShtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3Nl
cykpIHsKICAgICAgICAgICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzID0gdGhyb3R0bGVy
KCkuZm9yZWdyb3VuZEFjdGl2aXR5KCJOZXR3b3JraW5nIGZvciBmb3JlZ3JvdW5kIHZpZXcocyki
X3MpOwogICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NE
aWRUcmFuc2l0aW9uVG9Gb3JlZ3JvdW5kKCksIDApOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgaWYgKHByb2Nlc3NQb29sKCkuaGFzQmFja2dyb3VuZFdlYlByb2Nlc3Nl
cygpKSB7CisgICAgaWYgKGFueVByb2Nlc3NQb29sSGFzQmFja2dyb3VuZFdlYlByb2Nlc3Nlcygp
KSB7CiAgICAgICAgIGlmICghUHJvY2Vzc1Rocm90dGxlcjo6aXNWYWxpZEJhY2tncm91bmRBY3Rp
dml0eShtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcykpIHsKICAgICAgICAgICAgIG1fYWN0aXZp
dHlGcm9tV2ViUHJvY2Vzc2VzID0gdGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJOZXR3
b3JraW5nIGZvciBiYWNrZ3JvdW5kIHZpZXcocykiX3MpOwogICAgICAgICAgICAgc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NEaWRUcmFuc2l0aW9uVG9CYWNrZ3JvdW5kKCks
IDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkuaAppbmRleCBhMGI0YzFkODkzOGUyMDVlYzM2MWRlNWMxMDgyNWQxODI3NzY1
M2I0Li5iNjVkYmFiYTdiMTUyZjg2NTYwNTBkZjdhNzBmZDIzYTU2ZGEzZWY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHku
aApAQCAtNDYsMTIgKzQ2LDE3IEBACiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlICJY
UENFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlIDx3dGYvT1NPYmplY3RQdHIuaD4KICNlbmRpZgog
CiBuYW1lc3BhY2UgSVBDIHsKIGNsYXNzIEZvcm1EYXRhUmVmZXJlbmNlOwogfQogCituYW1lc3Bh
Y2UgQVBJIHsKK2NsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKK30KKwogbmFtZXNw
YWNlIFBBTCB7CiBjbGFzcyBTZXNzaW9uSUQ7CiB9CkBAIC03Myw4ICs3OCw4IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBjbGFzcyBEb3dubG9hZFByb3h5OwogY2xhc3MgRG93bmxvYWRQcm94eU1h
cDsKK2NsYXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKLWNs
YXNzIFdlYlByb2Nlc3NQb29sOwogY2xhc3MgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk7
CiAKIGVudW0gY2xhc3MgU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIDogYm9vbDsKQEAgLTg2
LDggKzkxLDkgQEAgc3RydWN0IEZyYW1lSW5mb0RhdGE7CiBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnM7CiBzdHJ1Y3QgUmVzb3VyY2VMb2FkSW5mbzsKIHN0cnVjdCBXZWJz
aXRlRGF0YTsKK3N0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczsKIAotY2xhc3MgTmV0
d29ya1Byb2Nlc3NQcm94eSBmaW5hbCA6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHBy
aXZhdGUgUHJvY2Vzc1Rocm90dGxlckNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRyPE5ldHdv
cmtQcm9jZXNzUHJveHk+IHsKK2NsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkgZmluYWwgOiBwdWJs
aWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQs
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiwgcHVibGljIFJlZkNv
dW50ZWQ8TmV0d29ya1Byb2Nlc3NQcm94eT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIHVzaW5nIFJlZ2lzdHJhYmxlRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW47CkBAIC0xMDIsMTIgKzEwOCwxNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgRG9t
YWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CiAg
ICAgdXNpbmcgT3BlbmVyRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CiAKLSAg
ICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJik7CisgICAgc3Rh
dGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBkZWZhdWx0TmV0d29ya1Byb2Nlc3MoV2Vic2l0
ZURhdGFTdG9yZSYpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gY3JlYXRl
KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3
b3JrUHJvY2Vzc1Byb3h5KGRhdGFTdG9yZSkpOyB9CiAgICAgfk5ldHdvcmtQcm9jZXNzUHJveHko
KTsKIAorICAgIHN0YXRpYyBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBhbGxOZXR3
b3JrUHJvY2Vzc2VzKCk7CisgICAgCisgICAgdm9pZCB0ZXJtaW5hdGUoKSBmaW5hbDsKKwogICAg
IHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRS
ZXBseSYmKTsKIAotICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0
ZURhdGFTdG9yZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1l
SW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSk7CisgICAgRG93bmxvYWRQ
cm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgV2ViUHJvY2Vzc1Bv
b2wmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBGcmFtZUluZm9EYXRh
JiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpOwogCiAgICAgdm9pZCBmZXRjaFdlYnNp
dGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9u
U2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNp
dGVEYXRhKT4mJik7CiAgICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwg
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CkBAIC0yMDYsMTUgKzIx
NywxMiBAQCBwdWJsaWM6CiAgICAgUHJvY2Vzc1Rocm90dGxlciYgdGhyb3R0bGVyKCkgZmluYWwg
eyByZXR1cm4gbV90aHJvdHRsZXI7IH0KICAgICB2b2lkIHVwZGF0ZVByb2Nlc3NBc3NlcnRpb24o
KTsKIAotICAgIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCgpIHsgcmV0dXJuIG1fcHJvY2Vz
c1Bvb2w7IH0KLQogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgdm9pZCBkaWRE
ZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkoV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyUHJveHkmKTsKICNlbmRpZgogCi0gICAgdm9pZCBhZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0
YVN0b3JlPiYmKTsKLSAgICBib29sIGhhc1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQpIGNvbnN0Owot
ICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCk7CisgICAgdm9pZCBhZGRTZXNz
aW9uKFdlYnNpdGVEYXRhU3RvcmUmKTsKKyAgICB2b2lkIHJlbW92ZVNlc3Npb24oV2Vic2l0ZURh
dGFTdG9yZSYpOwogICAgIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIHZvaWQg
Y3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKGNvbnN0IFN0cmluZyYgaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5KTsKQEAgLTIyOSw2ICsyMzcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3Rl
clNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQg
dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYpOwog
CisgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsKKyAgICAKICAgICB2b2lkIHJlc2V0
UXVvdGEoUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKICAg
ICB2b2lkIHJlc291cmNlTG9hZERpZFNlbmRSZXF1ZXN0KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIs
IFJlc291cmNlTG9hZEluZm8mJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIE9wdGlvbmFs
PElQQzo6Rm9ybURhdGFSZWZlcmVuY2U+JiYpOwpAQCAtMjQ4LDcgKzI1OCwyMCBAQCBwdWJsaWM6
CiAgICAgdm9pZCB1cGRhdGVCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBjbGVhckJ1bmRsZUlkZW50aWZpZXIoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYg
Y29va2llTWFuYWdlcigpIHsgcmV0dXJuIG1fY29va2llTWFuYWdlci5nZXQoKTsgfQorCisgICAg
QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQmIGN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCgpIHsgcmV0dXJuIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmdldCgpOyB9CisK
KyNpZiBQTEFURk9STShDT0NPQSkKKyAgICB4cGNfb2JqZWN0X3QgeHBjRW5kcG9pbnRNZXNzYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9lbmRwb2ludE1lc3NhZ2UuZ2V0KCk7IH0KKyNlbmRpZgorCiBw
cml2YXRlOgorICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9jZXNzUHJveHkoV2Vic2l0ZURhdGFTdG9y
ZSYpOworCisgICAgdm9pZCBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7Cisg
ICAgVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkYXRhU3RvcmVQYXJhbWV0ZXJz
KCk7CisKICAgICAvLyBBdXhpbGlhcnlQcm9jZXNzUHJveHkKICAgICBBU0NJSUxpdGVyYWwgcHJv
Y2Vzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiTmV0d29ya2luZyJfczsgfQogCkBAIC0y
NTYsNyArMjc5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbm5lY3Rpb25XaWxsT3BlbihJUEM6
OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHByb2Nlc3NXaWxsU2h1dERvd24oSVBD
OjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hl
ZCgpOwogICAgIHZvaWQgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCiAgICAgLy8gSVBDOjpDb25u
ZWN0aW9uOjpDbGllbnQKQEAgLTMxMiwxNiArMzM0LDE3IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCwgUmVmPEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+JiYpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIG1fcHJv
Y2Vzc1Bvb2w7Ci0KICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoV2Vic2l0ZURhdGEpPj4gbV9wZW5kaW5nRmV0Y2hXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAg
ICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGlu
Z0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmln
aW5zQ2FsbGJhY2tzOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkUHJveHlNYXA+IG1f
ZG93bmxvYWRQcm94eU1hcDsKKworICAgIFVuaXF1ZVJlZjxBUEk6OkN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiAjaWYgRU5BQkxFKExF
R0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKICAgICBMZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eSBtX2N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OwogI2VuZGlmCisKICAgICBQ
cm9jZXNzVGhyb3R0bGVyIG1fdGhyb3R0bGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9jZXNz
VGhyb3R0bGVyOjpCYWNrZ3JvdW5kQWN0aXZpdHk+IG1fYWN0aXZpdHlGb3JIb2xkaW5nTG9ja2Vk
RmlsZXM7CiAgICAgUHJvY2Vzc1Rocm90dGxlcjo6QWN0aXZpdHlWYXJpYW50IG1fYWN0aXZpdHlG
cm9tV2ViUHJvY2Vzc2VzOwpAQCAtMzQ3LDkgKzM3MCwxMSBAQCBwcml2YXRlOgogICAgIHByaXZh
dGU6CiAgICAgICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2Vz
czsKICAgICB9OworICAgIE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4gbV9lbmRwb2ludE1lc3Nh
Z2U7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8UEFMOjpTZXNzaW9uSUQ+IG1fc2Vzc2lvbklEczsK
KyAgICBXZWFrSGFzaFNldDxXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmVzOwor
ICAgIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IG1fY29va2llTWFuYWdlcjsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQppbmRleCBiOGRhZWRmN2Jl
YmExY2Q4MWY2ZTUyNDQ5NjAzMTBmMTMzMTBjMTFlLi4wZTVmYWVjMWIzYWFlNzkyNDU0YTg5OTAx
MmM5Njc0YzNjMmU4NDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQpAQCAtNTEsOCArNTEsMTEg
QEAgYm9vbCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRsZXI6OmhhbmRsZVhQQ0V2
ZW50KHhwY19vYmplY3RfdCBldmVudCkgY28KICAgICBpZiAobWVzc2FnZU5hbWUuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNo
U2VydmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQ
Q0VuZHBvaW50TWVzc2FnZU5hbWUpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NQ
b29sKCkuc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoZXZlbnQpOwor
ICAgIGlmIChtZXNzYWdlTmFtZSA9PSBMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDQ29uc3RhbnRz
Ojp4cGNMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDRW5kcG9pbnRNZXNzYWdlTmFtZSkgeworICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5tX2VuZHBvaW50TWVzc2FnZSA9IGV2ZW50OworICAgICAg
ICBmb3IgKGF1dG8mIGRhdGFTdG9yZSA6IG1fbmV0d29ya1Byb2Nlc3MtPm1fd2Vic2l0ZURhdGFT
dG9yZXMpCisgICAgICAgICAgICBkYXRhU3RvcmUuc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9p
bnRUb0FsbFdlYlByb2Nlc3NlcygpOworICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKaW5k
ZXggY2M1MjZhYWYzYWFmYjFjMTQ2ZGE0YjI0MTk0NTliMTA5MjAxYjYxMC4uMDg1ZTdkMjY1YTEz
NzM1YmU3YTEyNzhlYzFkZmI2M2ZkNWRkNWQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1
ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1By
b3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgiCiAjaW5jbHVkZSAiV2ViQ29v
a2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5TWVz
c2FnZXMuaCIKQEAgLTM5LDI0ICs0MCwxNiBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAotY29uc3QgY2hhciogV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
dXBwbGVtZW50TmFtZSgpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykKKyAgICA6IG1fbmV0d29y
a1Byb2Nlc3MobWFrZVdlYWtQdHIobmV0d29ya1Byb2Nlc3MpKQogewotICAgIHJldHVybiAiV2Vi
Q29va2llTWFuYWdlclByb3h5IjsKLX0KLQotUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gV2Vi
Q29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94eShwcm9jZXNz
UG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQcm94
eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi0gICAgOiBXZWJDb250ZXh0U3VwcGxlbWVu
dChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250ZXh0U3VwcGxlbWVudDo6cHJvY2Vzc1Bvb2wo
KS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIG5ldHdvcmtQcm9jZXNzLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksICp0aGlzKTsKIH0KIAogV2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2ll
TWFuYWdlclByb3h5KCkKIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CiAgICAgQVNTRVJUKG1fY29va2ll
T2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiB9CiAKQEAgLTY1LDEwMiArNTgsODQgQEAgdm9pZCBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmluaXRpYWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5hZ2Vy
Q2xpZW50QmFzZSogY2wKICAgICBtX2NsaWVudC5pbml0aWFsaXplKGNsaWVudCk7CiB9CiAKLS8v
IFdlYkNvbnRleHRTdXBwbGVtZW50Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9j
ZXNzUG9vbERlc3Ryb3llZCgpCi17Ci0gICAgVmVjdG9yPE9ic2VydmVyKj4gb2JzZXJ2ZXJzOwot
ICAgIGZvciAoYXV0byYgb2JzZXJ2ZXJTZXQgOiBtX2Nvb2tpZU9ic2VydmVycy52YWx1ZXMoKSkg
ewotICAgICAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJTZXQpCi0gICAgICAgICAg
ICBvYnNlcnZlcnMuYXBwZW5kKG9ic2VydmVyKTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8qIG9i
c2VydmVyIDogb2JzZXJ2ZXJzKQotICAgICAgICBvYnNlcnZlci0+bWFuYWdlckRlc3Ryb3llZCgp
OwotCi0gICAgQVNTRVJUKG1fY29va2llT2JzZXJ2ZXJzLmlzRW1wdHkoKSk7Ci19Ci0KLXZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5KikK
LXsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShOZXR3
b3JrUHJvY2Vzc1Byb3h5KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnJl
ZldlYkNvbnRleHRTdXBwbGVtZW50KCkKLXsKLSAgICBBUEk6Ok9iamVjdDo6cmVmKCk7Ci19Ci0K
LXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZXJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkK
LXsKLSAgICBBUEk6Ok9iamVjdDo6ZGVyZWYoKTsKLX0KLQogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBjYWxsYmFja0Z1bmN0
aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhvc3RuYW1lc1dpdGhDb29raWVzKHNlc3Np
b25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhvc3RuYW1lc1dpdGhDb29raWVzKHNlc3Npb25JRCks
IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tG
dW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBob3N0bmFtZXMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSk7CisgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lv
bklELCBob3N0bmFtZXMpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRl
bGV0ZUFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQ
b29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhzZXNzaW9uSUQpKTsKKyAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhzZXNzaW9uSUQpLCAw
KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1By
b2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxl
dGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUo
Y2FsbGJhY2tGdW5jdGlvbildKCkgbXV0YWJsZSB7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llKHNlc3Npb25JRCwgY29va2llKSwgV1RGTW92
ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQogICAgICAgICBjYWxsYmFja0Z1bmN0aW9u
KCk7Ci0gICAgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxD
b29raWVzTW9kaWZpZWRTaW5jZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdhbGxUaW1lIHRp
bWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAg
IGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKHNlc3Npb25JRCwg
dGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKHNlc3Np
b25JRCwgdGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAg
ICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
c2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxDb29raWU+
JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikK
IHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBjb29raWVzKSwgV1RG
TW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6U2V0Q29va2llKHNlc3Npb25JRCwgY29va2llcyksIFdURk1vdmUoY2FsbGJh
Y2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQog
CiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBjb25zdCBVUkwmIHVybCwg
Y29uc3QgVVJMJiBtYWluRG9jdW1lbnRVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
YWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZXMoc2Vzc2lv
bklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVudFVSTCksIFdURk1vdmUoY2FsbGJhY2tGdW5j
dGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENv
b2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVudFVSTCksIFdURk1vdmUo
Y2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigp
OwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENvb2tpZT4m
Jik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Mu
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRBbGxDb29r
aWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25l
dHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1
bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBh
dXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJD
b29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwor
ICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJv
Y2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0
YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCksIDApOwog
fQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5n
ZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRU
b05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSk7CisgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Np
b25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llT2Jz
ZXJ2ZXJDYWxsYmFjayhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9p
ZCAoKT4mJiBjYWxsYmFjaykKQEAgLTIxMSwxOCArMTg2LDE4IEBAIHZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5Ojpjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIAog
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFM
OjpTZXNzaW9uSUQsIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSNpZiBVU0UoU09VUCkKLSAgICBw
cm9jZXNzUG9vbCgpLT5zZXRJbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpOwot
I2VuZGlmCi0KLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBv
bGljeSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1
bmN0aW9uKCk7CiB9CiAKLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBD
b29raWVBY2NlcHRQb2xpY3kpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCit2b2lkIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYg
Y2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdv
cmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koc2Vz
c2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBj
YWxsYmFja0Z1bmN0aW9uKEhUVFBDb29raWVBY2NlcHRQb2xpY3k6Ok5ldmVyKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tp
ZU1hbmFnZXJQcm94eS5oCmluZGV4IDBiZGZjMGQ0ZTQ3YzQzNmY1ODVjZjI5YzA5ZDUxYTI5YmM4
MTFhOWQuLjZmNTFmMDNlNWMwY2E4OTQxMjMzNDM3N2I1NTQzZDgyMmNjMmZlYzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCkBAIC01Niwx
MSArNTYsOSBAQCB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJyYXlDYWxs
YmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQ
b2xpY3k+IEhUVFBDb29raWVBY2NlcHRQb2xpY3lDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0Nh
bGxiYWNrPGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jj4gR2V0Q29va2llc0NhbGxiYWNr
OwogCi1jbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBs
PEFQSTo6T2JqZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHVibGljIFdlYkNvbnRleHRTdXBw
bGVtZW50LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIFdlYkNvb2tpZU1h
bmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNv
b2tpZU1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKLQotICAgIHN0YXRpYyBSZWY8
V2ViQ29va2llTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBzdGF0
aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKE5ldHdvcmtQcm9jZXNzUHJveHkm
IG5ldHdvcmtQcm9jZXNzKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQ
cm94eShuZXR3b3JrUHJvY2VzcykpOyB9CiAgICAgdmlydHVhbCB+V2ViQ29va2llTWFuYWdlclBy
b3h5KCk7CiAKICAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5hZ2Vy
Q2xpZW50QmFzZSopOwpAQCAtMTA0LDE3ICsxMDIsMTAgQEAgcHVibGljOgogICAgIHVzaW5nIEFQ
STo6T2JqZWN0OjpkZXJlZjsKIAogcHJpdmF0ZToKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHko
V2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoTmV0d29ya1Byb2Nl
c3NQcm94eSYpOwogCiAgICAgdm9pZCBjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEKTsK
IAotICAgIC8vIFdlYkNvbnRleHRTdXBwbGVtZW50Ci0gICAgdm9pZCBwcm9jZXNzUG9vbERlc3Ry
b3llZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgcHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94
eSopIG92ZXJyaWRlOwotICAgIHZvaWQgcHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJv
eHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkZXJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0KICAg
ICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAKQEAgLTEyNSw2ICsxMTYs
NyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248
dm9pZCAoKT4+IG1fbGVnYWN5Q29va2llT2JzZXJ2ZXJzOwogICAgIEhhc2hNYXA8UEFMOjpTZXNz
aW9uSUQsIEhhc2hTZXQ8T2JzZXJ2ZXIqPj4gbV9jb29raWVPYnNlcnZlcnM7CiAKKyAgICBXZWFr
UHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAgICAgV2ViQ29va2ll
TWFuYWdlclByb3h5Q2xpZW50IG1fY2xpZW50OwogCiAjaWYgVVNFKFNPVVApCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCBkM2I4YzM1NTQwZjNmMjQ1NmY3MTA1
NWY1YjRkN2E3ODIyNjBkMzg3Li40OWNlZWIyMjg5MmYyNDUxODFhNDQ4MDk1OWRjODM0YTE1ZWY4
ZDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE3NDYs
NyArMTc0Niw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDb250cm9sbGVkQnlBdXRvbWF0aW9u
KGJvb2wgY29udHJvbGxlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6U2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbihjb250cm9sbGVkKSk7Ci0gICAgbV9w
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0U2Vzc2lvbklzQ29udHJvbGxlZEJ5QXV0b21hdGlvbihtX3dlYnNp
dGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBtX2NvbnRyb2xsZWRCeUF1dG9tYXRpb24pKTsKKyAg
ICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0U2Vzc2lvbklzQ29udHJvbGxlZEJ5QXV0b21hdGlvbihtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCBtX2NvbnRyb2xsZWRCeUF1dG9tYXRpb24pLCAwKTsKIH0K
IAogdm9pZCBXZWJQYWdlUHJveHk6OmNyZWF0ZUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcm
IHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSkKQEAgLTMyMTAs
MTEgKzMyMTAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aXNGb3JjZWRJbnRvQXBwQm91bmRNb2Rl
VGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPgogdm9pZCBXZWJQYWdlUHJveHk6
OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKCkKIHsKICNp
ZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKLSAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVz
c2FnZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1l
bnQoKSwgMCk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0
bGVtZW50KCksIDApOwogI2VuZGlmCiB9CiAKQEAgLTMyMjMsMTMgKzMyMTksNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6Y2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZShDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykgJiYgIVBMQVRG
T1JNKE1BQ0NBVEFMWVNUKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIHNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRs
ZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJp
ZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFT
dG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwog
I2VuZGlmCkBAIC00NDI5LDcgKzQ0MTksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cHJlY29ubmVj
dFRvKGNvbnN0IFVSTCYgdXJsKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5ID0gbV9jYW5Vc2VDcmVkZW50aWFsU3RvcmFnZSA/IFdlYkNvcmU6OlN0
b3JlZENyZWRlbnRpYWxzUG9saWN5OjpVc2UgOiBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1Bv
bGljeTo6RG9Ob3RVc2U7Ci0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkucHJlY29ubmVjdFRvKHNlc3Npb25JRCgpLCBpZGVudGlmaWVyKCksIHdlYlBh
Z2VJRCgpLCB1cmwsIHVzZXJBZ2VudCgpLCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZp
Z2F0aW5nVG9BcHBCb3VuZERvbWFpbigpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29y
a1Byb2Nlc3MoKS5wcmVjb25uZWN0VG8oc2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFn
ZUlEKCksIHVybCwgdXNlckFnZW50KCksIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmln
YXRpbmdUb0FwcEJvdW5kRG9tYWluKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q2Fu
VXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCBjYW5Vc2VDcmVkZW50aWFsU3RvcmFnZSkKQEAgLTQ3
MjUsNyArNDcxNSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUo
RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIEZyYW1lSW5mb0RhdGEmCiAgICAgICAgICAgICBSZWdp
c3RyYWJsZURvbWFpbiBjdXJyZW50RG9tYWluIHsgY3VycmVudFJlcXVlc3QudXJsKCkgfTsKICAg
ICAgICAgICAgIFVSTCByZXF1ZXN0ZXJVUkwgeyBVUkwoKSwgcmVxdWVzdGVyT3JpZ2luLnRvU3Ry
aW5nKCkgfTsKICAgICAgICAgICAgIGlmICghY3VycmVudERvbWFpbi5tYXRjaGVzKHJlcXVlc3Rl
clVSTCkpCi0gICAgICAgICAgICAgICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLmRpZENvbW1p
dENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lv
bklEKCksIFJlZ2lzdHJhYmxlRG9tYWluIHsgcmVxdWVzdGVyVVJMIH0sIGN1cnJlbnREb21haW4s
IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIG1faWRlbnRpZmllciwgbV93ZWJQYWdlSUQpOworICAg
ICAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5kaWRDb21t
aXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9LCBjdXJyZW50RG9tYWlu
LCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50aWZpZXIsIG1fd2ViUGFnZUlEKTsKICAg
ICAgICAgfQogI2VuZGlmCiAgICAgfQpAQCAtNDc2Myw3ICs0NzUzLDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZShGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgRnJh
bWVJbmZvRGF0YSYKICAgICBpZiAobmF2aWdhdGlvbiAmJiBmcmFtZS0+aXNNYWluRnJhbWUoKSkg
ewogICAgICAgICBpZiAoYXV0byYgYWRDbGlja0F0dHJpYnV0aW9uID0gbmF2aWdhdGlvbi0+YWRD
bGlja0F0dHJpYnV0aW9uKCkpIHsKICAgICAgICAgICAgIGlmIChhZENsaWNrQXR0cmlidXRpb24t
PmRlc3RpbmF0aW9uKCkubWF0Y2hlcyhmcmFtZS0+dXJsKCkpKQotICAgICAgICAgICAgICAgIG1f
cHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmlidXRpb24pKTsKKyAgICAgICAgICAgICAgICB3
ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U3RvcmVBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgKmFkQ2xpY2tBdHRyaWJ1dGlvbiksIDApOwogICAgICAgICB9CiAgICAgfQogCkBA
IC01Mzc3LDcgKzUzNjcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9u
KGNvbnN0IFdlYkZyYW1lUHJveHkmIGZyYW1lLCBjb25zdCBVUkwmIHBhZwogICAgIGlmICh0YXJn
ZXRIb3N0LmlzRW1wdHkoKSB8fCBtYWluRnJhbWVIb3N0LmlzRW1wdHkoKSB8fCB0YXJnZXRIb3N0
ID09IHNvdXJjZVVSTC5ob3N0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+
cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkxvZ0ZyYW1lTmF2aWdhdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCBSZWdpc3RyYWJsZURvbWFpbiB7IHRhcmdldFVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHBh
Z2VVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBzb3VyY2VVUkwgfSwgaXNSZWRpcmVjdCwgZnJh
bWUuaXNNYWluRnJhbWUoKSwgTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2RpZEZpbmlzaERvY3Vt
ZW50TG9hZEZvck1haW5GcmFtZVRpbWVzdGFtcCwgd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVz
ZXIpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6TG9nRnJhbWVOYXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxlRG9tYWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJh
YmxlRG9tYWluIHsgcGFnZVVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBp
c1JlZGlyZWN0LCBmcmFtZS5pc01haW5GcmFtZSgpLCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1f
ZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yTWFpbkZyYW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxs
eUluaXRpYXRlZEJ5VXNlciksIDApOwogfQogI2VuZGlmCiAKQEAgLTEwMDAyLDU4ICs5OTkyLDI3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzeXN0ZW1QcmV2aWV3QWN0aW9uVHJpZ2dlcmVkKGNvbnN0
IFdlYkNvcmU6OlN5c3RlbVByZXZpZXdJbmZvCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkdW1wQWRD
bGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9w
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFu
ZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vi
c2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRh
U3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+
c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdv
cmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgp
KSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRp
bWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1ZSksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgp
Lm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcobV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFsdWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25Db252
ZXJzaW9uVVJMRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
cyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
IGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1fd2Vi
c2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJp
YnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBh
Z2VQcm94eTo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7
Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZv
clRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9j
ZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFya0Fk
Q2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+
c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKICNpZiBFTkFC
TEUoU1BFRUNIX1NZTlRIRVNJUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmNwcAppbmRleCBkOTI2YjMzY2JkZjJiYjhiYjk4MGQ2M2M1ZGM1MmFlNTI1MDkyNTI5Li43
MWYxZjYzOGRjMzNmNGU0MTgyNTZkNjY4MWNmODQ0ZjgyYjk0MWMwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVk
ZSAiTGVnYWN5R2xvYmFsU2V0dGluZ3MuaCIKICNpbmNsdWRlICJMb2dJbml0aWFsaXphdGlvbi5o
IgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b25JbmZvLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIK
ICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1By
b2Nlc3NQcm94eS5oIgpAQCAtMTQzLDggKzE0MiwxMCBAQAogI2VuZGlmCiAKICNkZWZpbmUgV0VC
UFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0coY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HKGNo
YW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykK
KyNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfU1RBVElDKGNoYW5uZWwsIGZtdCwg
Li4uKSBSRUxFQVNFX0xPRyhjaGFubmVsLCAiV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCAjI19fVkFf
QVJHU19fKQogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19FUlJPUihjaGFubmVs
LCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfRVJST1IoY2hhbm5lbCwgIiVwIC0gV2ViUHJvY2Vzc1Bv
b2w6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9S
RUxFQVNFX0xPR19JRl9BTExPV0VEKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRihz
ZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIGNoYW5uZWwsICIlcCAtIFdlYlBy
b2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgV0VCUFJPQ0VT
U1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoY2hhbm5lbCwgZm10LCAuLi4pIFJF
TEVBU0VfTE9HX0lGKHNlc3Npb25JRC5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgY2hhbm5l
bCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwgIyNfX1ZBX0FSR1NfXykKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTIzMiw2ICsyMzMsMTEgQEAgc3Rh
dGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBnbG9iYWxVUkxT
Y2hlbWVzV2l0aEN1c3RvbVByb3QKICAgICByZXR1cm4gc2V0OwogfQogCitWZWN0b3I8U3RyaW5n
PiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkK
K3sKKyAgICByZXR1cm4gY29weVRvVmVjdG9yKGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJv
dG9jb2xIYW5kbGVycygpKTsKK30KKwogV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQ
STo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogICAgIDogbV9jb25m
aWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24uY29weSgpKQogICAgICwgbV9kZWZhdWx0UGFnZUdyb3Vw
KFdlYlBhZ2VHcm91cDo6Y3JlYXRlKCkpCkBAIC0yMzksNyArMjQ1LDYgQEAgV2ViUHJvY2Vzc1Bv
b2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1
cmF0aW9uKQogICAgICwgbV9hdXRvbWF0aW9uQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpBdXRvbWF0
aW9uQ2xpZW50PigpKQogICAgICwgbV9kb3dubG9hZENsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6
RG93bmxvYWRDbGllbnQ+KCkpCiAgICAgLCBtX2hpc3RvcnlDbGllbnQobWFrZVVuaXF1ZTxBUEk6
OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PigpKQotICAgICwgbV9jdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQobWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4o
KSkKICAgICAsIG1fdmlzaXRlZExpbmtTdG9yZShWaXNpdGVkTGlua1N0b3JlOjpjcmVhdGUoKSkK
ICNpZiBQTEFURk9STShNQUMpCiAgICAgLCBtX2hpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VT
YW1wbGVyKG1ha2VVbmlxdWU8SGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXI+KCp0
aGlzKSkKQEAgLTI2Nyw5ICsyNzIsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2wo
QVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAjZW5kaWYKICAg
ICB9KTsKIAotICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlICYmIFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBtX3dlYnNpdGVEYXRh
U3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKTsKLQog
ICAgIGZvciAoYXV0byYgc2NoZW1lIDogbV9jb25maWd1cmF0aW9uLT5hbHdheXNSZXZhbGlkYXRl
ZFVSTFNjaGVtZXMoKSkKICAgICAgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFzQWx3YXlzUmV2YWxp
ZGF0ZWQuYWRkKHNjaGVtZSk7CiAKQEAgLTI4NSw3ICsyODcsNiBAQCBXZWJQcm9jZXNzUG9vbDo6
V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRp
b24pCiAgICAgYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiAKICAgICAvLyBOT1RFOiBUaGVzZSBzdWItb2Jq
ZWN0cyBtdXN0IGJlIGluaXRpYWxpemVkIGFmdGVyIG1fbWVzc2FnZVJlY2VpdmVyTWFwLi4KLSAg
ICBhZGRTdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVt
ZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2Vi
Tm90aWZpY2F0aW9uTWFuYWdlclByb3h5PigpOwogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQpA
QCAtMzQyLDkgKzM0Myw2IEBAIFdlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2woKQogICAg
IHByb2Nlc3NQb29sQ291bnRlci5kZWNyZW1lbnQoKTsKICNlbmRpZgogCi0gICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNodXREb3duUHJvY2Vzcygp
OwotCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAgICAgaWYgKCFtX3Byb2Nlc3Nlc1VzaW5nR2FtZXBh
ZHMuaXNFbXB0eSgpKQogICAgICAgICBVSUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkucHJv
Y2Vzc1Bvb2xTdG9wcGVkVXNpbmdHYW1lcGFkcygqdGhpcyk7CkBAIC00MDIsMTYgKzQwMCw2IEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEF1dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRy
PEFQSTo6QXV0b21hdGlvbkNsaWVudD4mCiAgICAgICAgIG1fYXV0b21hdGlvbkNsaWVudCA9IFdU
Rk1vdmUoYXV0b21hdGlvbkNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQot
ewotI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCi0gICAgaWYgKCFj
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi0gICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50ID0gbWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4o
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gV1RG
TW92ZShjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOwotI2VuZGlmCi19Ci0KIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihj
b25zdCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcikKIHsK
ICAgICAvLyBHdWFyZCBhZ2FpbnN0IEFQSSBtaXN1c2UuCkBAIC00MjEsMTEgKzQwOSw2IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRp
Zmllcihjb25zdCBTdHJpbmcmIGN1CiAgICAgbV9jb25maWd1cmF0aW9uLT5zZXRDdXN0b21XZWJD
b250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5k
bGVJZGVudGlmaWVyKTsKIH0KIAotSVBDOjpDb25uZWN0aW9uKiBXZWJQcm9jZXNzUG9vbDo6bmV0
d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkKLXsKLSAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2Vz
cy0+Y29ubmVjdGlvbigpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5n
ZWQodm9pZCogY29udGV4dCkKIHsKICAgICBzdGF0aWNfY2FzdDxXZWJQcm9jZXNzUG9vbCo+KGNv
bnRleHQpLT5sYW5ndWFnZUNoYW5nZWQoKTsKQEAgLTQzNSw4ICs0MTgsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQoKQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhN
ZXNzYWdlczo6V2ViUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQoKSk7CiAj
aWYgVVNFKFNPVVApCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFu
Z3VhZ2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKKyAgICBXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKHVzZXJQ
cmVmZXJyZWRMYW5ndWFnZXMoKSksIDApOwogI2VuZGlmCiB9CiAKQEAgLTQ0OSw3ICs0MzEsOCBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpmdWxsS2V5Ym9hcmRBY2Nlc3NNb2RlQ2hhbmdlZChib29s
IGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE1lbW9y
eVByZXNzdXJlRXZlbnQoYm9vbCBpc0NyaXRpY2FsKQogewogICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZl
bnQoaXNDcml0aWNhbCkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpB
dXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2Fs
KSk7CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6
YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXND
cml0aWNhbCksIDApOwogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIFBsdWdp
blByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5zZW5kTWVtb3J5UHJlc3N1cmVFdmVudChpc0Ny
aXRpY2FsKTsKICNlbmRpZgpAQCAtNDc0LDI3NSArNDU3LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9v
bDo6c2NyZWVuUHJvcGVydGllc1N0YXRlQ2hhbmdlZCgpCiAjZW5kaWYKIH0KIAotTmV0d29ya1By
b2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVE
YXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3JlKQotewotICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7Ci0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fy
b3VuZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCi0gICAg
Ly8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0
aW9uIGNoZWNrIG9uIG91ciBBUElzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDAyNDYuCi0gICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgewotICAg
ICAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKV0gewotICAgICAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAg
ICAgfSk7Ci0gICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUp
IHsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0
aFdlYnNpdGVEYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5j
bGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICptX25ldHdv
cmtQcm9jZXNzOwotICAgIH0KLQotICAgIGF1dG8gbmV0d29ya1Byb2Nlc3MgPSBtYWtlVW5pcXVl
PE5ldHdvcmtQcm9jZXNzUHJveHk+KCp0aGlzKTsKLQotICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7
Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nv
b2tpZXMgPSBjb3B5VG9WZWN0b3IobV93ZWJzaXRlRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygp
KTsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0j
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxl
SWRlbnRpZmllciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFw
cGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNh
dGlvblNlY29uZGFyeUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRp
b24oKS5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoKTsKLSNlbmRpZgotICAg
IH0KLQotICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpz
aW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7Ci0KLSAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IGdsb2Jh
bFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQotICAgICAgICBwYXJhbWV0
ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUp
OwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBTdHJpbmcgY29va2llU3RvcmFnZURp
cmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAg
aWYgKCFjb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VE
aXJlY3RvcnksIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0KLSAgICBTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bv
b2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvbnRhaW5lckNhY2hl
c0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFt
ZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0
cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxl
RGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQot
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0
b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRC
dW5kbGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5Rmls
ZShlbXB0eVN0cmluZygpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHBhcmFtZXRl
cnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9i
YWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKLSAg
ICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJp
dHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigp
LnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0g
ICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3Io
TGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2Nh
bCgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNv
cHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVn
aXN0ZXJBc05vQWNjZXNzKCkpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAg
Ly8gKioqKioqKioqCi0gICAgLy8gSU1QT1JUQU5UOiBEbyBub3QgY2hhbmdlIHRoZSBkaXJlY3Rv
cnkgc3RydWN0dXJlIGZvciBpbmRleGVkIGRhdGFiYXNlcyBvbiBkaXNrIHdpdGhvdXQgZmlyc3Qg
Y29uc3VsdGluZyBhIHJldmlld2VyIGZyb20gQXBwbGUgKDxyZGFyOi8vcHJvYmxlbS8xNzQ1NDcx
Mj4pCi0gICAgLy8gKioqKioqKioqCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAg
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5pbmRleGVkRGF0YWJhc2VEaXJl
Y3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jcmVhdGVTeW1MaW5r
Rm9yRmlsZVVwZ3JhZGUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnkpOwotICAgIH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNFUlZJ
Q0VfV09SS0VSKQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRl
cnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9y
ZS0+cmVzb2x2ZWRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgaWYg
KCFwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpCi0gICAgICAg
IHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9ICBXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5KCk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGly
ZWN0b3J5KHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSwgcGFy
YW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLSNlbmRpZgotCi0gICAgYXV0byBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVE
YXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTG9jYWxTdG9yYWdlRGlyZWN0
b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpCi0g
ICAgICAgIGxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdExvY2FsU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbG9jYWxTdG9yYWdlRGly
ZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURp
cmVjdG9yeShsb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAg
IGF1dG8gY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJz
aXRlRGF0YVN0b3JlLT5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKLSAg
ICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNhY2hlU3RvcmFn
ZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IFdURk1vdmUoY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5KTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAobV93ZWJzaXRl
RGF0YVN0b3JlKQotICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnko
KTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3Rv
cmVFeGlzdHMoKSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCku
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
LmRpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rv
cnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JS
ZWFkV3JpdGVEaXJlY3RvcnkocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSwgcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBib29sIGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBmYWxzZTsKLSAgICBib29sIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBmYWxzZTsKLSAgICBib29sIHNob3Vs
ZEluY2x1ZGVMb2NhbGhvc3QgPSB0cnVlOwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZSA9IGZhbHNlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJ
U1RJQ1MpCi0gICAgV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSB0aGlyZFBh
cnR5Q29va2llQmxvY2tpbmdNb2RlID0gV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5n
TW9kZTo6QWxsOwotICAgIFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVk
IHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gV2ViQ29yZTo6U2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudEVuYWJsZWQ6Ok5vOwotI2VuZGlmCi0gICAgV2ViQ29yZTo6Rmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUg
PSBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2ll
czsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBzdGFuZGFsb25lQXBwbGljYXRpb25E
b21haW47Ci0gICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gYXBwQm91bmRE
b21haW5zOwotICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIG1hbnVhbFByZXZhbGVudFJl
c291cmNlOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbV90Y2NQcmVmZXJlbmNlRW5hYmxl
ZCA9IGRvZXNBcHBIYXZlSVRQRW5hYmxlZCgpOwotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9y
ZSAmJiAhd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsK
LSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVu
YWJsZWQ7Ci0gICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2Ug
aWYgKG1fd2Vic2l0ZURhdGFTdG9yZSAmJiAhbV93ZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRl
RXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3Mg
PSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MpOwotICAgIH0gZWxzZSBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4
aXN0cygpICYmICFXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPmlzSXRwU3Rh
dGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmUoKS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxl
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotI2VuZGlmCi0KLSAg
ICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAg
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSB3aXRoV2Vic2l0
ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAg
ICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRv
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0
ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVk
ZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUGFyYW1ldGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAgICAgICAgICAgZW5hYmxl
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0jaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlD
b29raWVCbG9ja2luZ01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BhcmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAgICAg
ICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3RyaWN0
RW5mb3JjZW1lbnRFbmFibGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vic2l0
ZURhdGFSZW1vdmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsKLSAg
ICAgICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25lQXBwbGlj
YXRpb25Eb21haW47Ci0gICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91bmREb21h
aW5zOwotICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFsUHJldmFs
ZW50UmVzb3VyY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0
b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0
aFdlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAg
ICAgICAgCi0gICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IHdpdGhX
ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAg
ICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9y
eSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgYXV0
byYgaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRI
U1RTU3RvcmFnZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIWhzdHNTdG9yYWdlRGlyZWN0b3J5
LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IGhz
dHNTdG9yYWdlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlKGhzdHNTdG9yYWdlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFk
V3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9
IG1fd2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygpOwotI2Vu
ZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAg
ICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+
cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3Vs
ZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAgICAg
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdNb2Rl
OwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0aGly
ZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7
Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1lU2l0
ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9u
ZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJv
dW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVh
bFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVE
YXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEg
PSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsK
LQotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBtX3dlYnNpdGVE
YXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICgh
bmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3
b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5k
Ym94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBhdXRvJiBoc3Rz
U3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRIU1RTU3RvcmFn
ZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIWhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgp
KSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IGhzdHNTdG9yYWdl
RGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGhz
dHNTdG9yYWdlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3Jl
RXhpc3RzKCkpCi0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gV2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZCgpOwotICAgICAgICBhdXRvIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IFdlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
bmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5k
Ym94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgfQotCi0jaWYgSEFWRShDRk5FVFdPUktfQUxURVJOQVRJ
VkVfU0VSVklDRSkKLSAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6aHR0cDNFbmFibGVkKCkpIHsK
LSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdEFsdGVybmF0aXZlU2VydmljZXNEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYg
KCFwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cDNFbmFibGVkID0g
dHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLSAgICBib29sIGlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0ID0g
ZmFsc2U7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgPSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycyB7Ci0gICAgICAgIFdURk1vdmUocmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeSksCi0gICAgICAgIFdURk1vdmUocmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSksCi0gICAgICAgIGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3MsCi0gICAgICAgIGlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0LAotICAgICAg
ICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50LAotICAgICAgICBz
aG91bGRJbmNsdWRlTG9jYWxob3N0LAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlLAotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAg
ICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUsCi0gICAgICAgIHNhbWVTaXRlU3RyaWN0
RW5mb3JjZW1lbnRFbmFibGVkLAotI2VuZGlmCi0gICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlLAotICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4sCi0gICAg
ICAgIGFwcEJvdW5kRG9tYWlucywKLSAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UsCi0g
ICAgfTsKLQotICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgcGFyYW1ldGVycwotICAg
IHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOwotCi0gICAgLy8g
SW5pdGlhbGl6ZSB0aGUgbmV0d29yayBwcm9jZXNzLgotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFt
ZXRlcnMpLCAwKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG5ldHdvcmtQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UU9TKG5ldHdvcmtQcm9jZXNzTGF0ZW5j
eVFPUygpLCBuZXR3b3JrUHJvY2Vzc1Rocm91Z2hwdXRRT1MoKSksIDApOwotI2VuZGlmCi0KLSAg
ICBuZXR3b3JrUHJvY2Vzcy0+dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwotCi0gICAgaWYgKHdp
dGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9u
KG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgIHdpdGhXZWJzaXRlRGF0
YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJl
IHRoZSBuZXR3b3JrIHByb2Nlc3Mga25vd3MgYWJvdXQgYWxsIHRoZSBzZXNzaW9ucyB0aGF0IGhh
dmUgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSBpdCBzdGFydGVkLgotICAgIGZvciAoYXV0byYgc2Vz
c2lvbklEIDogbV9zZXNzaW9uVG9QYWdlSURzTWFwLmtleXMoKSkgewotICAgICAgICBpZiAoYXV0
byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVs
dERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpKQotICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MtPmFkZFNlc3Npb24oKndlYnNpdGVEYXRhU3RvcmUpOwotICAgIH0KLQotICAgIG1fbmV0
d29ya1Byb2Nlc3MgPSBXVEZNb3ZlKG5ldHdvcmtQcm9jZXNzKTsKLSAgICByZXR1cm4gKm1fbmV0
d29ya1Byb2Nlc3M7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jh
c2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1Byb3h5KQogewotICAgIEFT
U0VSVChtX25ldHdvcmtQcm9jZXNzKTsKLSAgICBBU1NFUlQoJm5ldHdvcmtQcm9jZXNzUHJveHkg
PT0gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKSk7Ci0KICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQg
OiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBzdXBwbGVtZW50LT5wcm9jZXNzRGlk
Q2xvc2UoJm5ldHdvcmtQcm9jZXNzUHJveHkpOwogCkBAIC03NTEsOSArNDY3LDYgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkm
IG5ldHdvcmtQcm9jZXNzUHIKICAgICBpZiAobV9hdXRvbWF0aW9uU2Vzc2lvbikKICAgICAgICAg
bV9hdXRvbWF0aW9uU2Vzc2lvbi0+dGVybWluYXRlKCk7CiAKLSAgICAvLyBMZWF2ZSB0aGUgcHJv
Y2VzcyBwcm94eSBhcm91bmQgZHVyaW5nIGNsaWVudCBjYWxsLCBzbyB0aGF0IHRoZSBjbGllbnQg
Y291bGQgcXVlcnkgdGhlIHByb2Nlc3MgaWRlbnRpZmllci4KLSAgICBtX25ldHdvcmtQcm9jZXNz
ID0gbnVsbHB0cjsKLQogICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKQEAgLTc2
NCwyMCArNDc3LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3ND
cmFzaGVkKFdlYlByb2Nlc3NQcm94eSYgcHJveHkpCiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2Vi
UHJvY2Vzc1Byb3h5LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQotewotICAgIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uKHdlYlByb2Nlc3NQcm94eSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMp
LCB3ZWJQcm9jZXNzUHJveHkgPSBtYWtlV2Vha1B0cih3ZWJQcm9jZXNzUHJveHkpLCByZXBseSA9
IFdURk1vdmUocmVwbHkpXSAoYXV0byYgY29ubmVjdGlvbkluZm8pIG11dGFibGUgewotICAgICAg
ICBpZiAoVU5MSUtFTFkoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVj
dGlvbkluZm8uaWRlbnRpZmllcigpKSAmJiB3ZWJQcm9jZXNzUHJveHkgJiYgd2Vha1RoaXMpKSB7
Ci0gICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19FUlJPUihQcm9jZXNzLCAi
Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOiBGYWlsZWQgZmlyc3QgYXR0ZW1wdCwgcmV0cnlp
bmciKTsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKndlYlByb2Nlc3NQ
cm94eSwgV1RGTW92ZShyZXBseSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIHJlcGx5KGNvbm5lY3Rpb25JbmZvKTsKLSAgICB9KTsKLX0KLQogI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdwdVByb2Nlc3NDcmFzaGVkKFByb2Nl
c3NJRCBpZGVudGlmaWVyKQogewpAQCAtODAxLDIzICs1MDAsMjYgQEAgdm9pZCBXZWJQcm9jZXNz
UG9vbDo6Z2V0R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNz
UHJveHksIE0KIH0KICNlbmRpZgogCitib29sIFdlYlByb2Nlc3NQb29sOjpzX3VzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MgPSBmYWxzZTsKKwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9u
VG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm94eSwgUmVnaXN0cmFibGVE
b21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNTRVJU
X1VOVVNFRChwcm94eSwgJnByb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOworICAgIGF1
dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9y
ZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkKKyAg
ICAgICAgd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3Rv
cmUoKS5wdHIoKTsKKyAgICBpZiAoIXByb2Nlc3NQb29scygpLnNpemUoKSkKKyAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFJlZjxXZWJQcm9jZXNzUG9vbD4+IHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUG9vbChXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uOjpjcmVhdGUoKS5nZXQoKSkpOwogCi0gICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdl
YnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChz
ZXNzaW9uSUQpOwotCi0gICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGlmICgh
bV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0gICAgICAg
IHdlYnNpdGVEYXRhU3RvcmUgPSBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7Ci0gICAgfQorICAg
IC8vIEFyYml0cmFyaWx5IGNob29zZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sIHRvIGhvc3QgdGhl
IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCisgICAgYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9jZXNz
UG9vbHMoKVswXTsKKyAgICBBU1NFUlQocHJvY2Vzc1Bvb2wpOwogCiAgICAgV2ViUHJvY2Vzc1By
b3h5KiBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5IHsgbnVsbHB0ciB9OwotICAgIGlmICghbV91
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJv
Y2VzcyA6IG1fcHJvY2Vzc2VzKSB7Ci0gICAgICAgICAgICBpZiAocHJvY2VzcyA9PSBtX3ByZXdh
cm1lZFByb2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94eSgpKQorCisgICAgaWYg
KCFzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKKyAgICAgICAgZm9yIChhdXRv
JiBwcm9jZXNzIDogcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2VzKSB7CisgICAgICAgICAgICBpZiAo
cHJvY2VzcyA9PSBwcm9jZXNzUG9vbC0+bV9wcmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlz
RHVtbXlQcm9jZXNzUHJveHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIGlmICgmcHJvY2Vzcy0+d2Vic2l0ZURhdGFTdG9yZSgpICE9IHdlYnNpdGVEYXRhU3RvcmUp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC04MjUsMzUgKzUyNywzNSBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1By
b2Nlc3MoTmV0d29ya1BybwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAg
ICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5ID0gcHJvY2Vzcy5nZXQoKTsKLSAgICAgICAgICAg
IHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VXb3JrZXJzKHVzZXJDb250
ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpKTsKKyAgICAgICAgICAg
IHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VXb3JrZXJzKHByb2Nlc3NQ
b29sLT51c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSk7
CiAKLSAgICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQoU2Vy
dmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJv
Y2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdlYiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQSUQ9JWQp
Iiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+
cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNF
X0xPR19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIHJldXNpbmcgYW4gZXhpc3Rpbmcgd2ViIHBy
b2Nlc3MgKHByb2Nlc3M9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBz
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFzZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Byb3h5KSB7Ci0gICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5ID0gV2ViUHJvY2Vzc1By
b3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2VycygqdGhpcywgV1RGTW92ZShyZWdpc3RyYWJsZURv
bWFpbiksICp3ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgYXV0byBuZXdQcm9jZXNzUHJveHkg
PSBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZUZvclNlcnZpY2VXb3JrZXJzKCpwcm9jZXNzUG9vbCwg
V1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksICp3ZWJzaXRlRGF0YVN0b3JlKTsKICAgICAgICAg
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9IG5ld1Byb2Nlc3NQcm94eS5wdHIoKTsKIAotICAg
ICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFNlcnZpY2VXb3JrZXIs
ICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgY3JlYXRp
bmcgYSBuZXcgc2VydmljZSB3b3JrZXIgcHJvY2VzcyAocHJvY2VzPSVwLCBQSUQ9JWQpIiwgc2Vy
dmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vz
c0lkZW50aWZpZXIoKSk7CisgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FM
TE9XRURfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVj
dGlvblRvTmV0d29ya1Byb2Nlc3MgY3JlYXRpbmcgYSBuZXcgc2VydmljZSB3b3JrZXIgcHJvY2Vz
cyAocHJvY2VzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAKLSAgICAgICAgaW5p
dGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJvY2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3JlKTsK
LSAgICAgICAgbV9wcm9jZXNzZXMuYXBwZW5kKFdURk1vdmUobmV3UHJvY2Vzc1Byb3h5KSk7Cisg
ICAgICAgIHByb2Nlc3NQb29sLT5pbml0aWFsaXplTmV3V2ViUHJvY2VzcyhuZXdQcm9jZXNzUHJv
eHksIHdlYnNpdGVEYXRhU3RvcmUpOworICAgICAgICBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMu
YXBwZW5kKFdURk1vdmUobmV3UHJvY2Vzc1Byb3h5KSk7CiAgICAgfQogCi0gICAgQVNTRVJUKCFt
X3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJv
eHkpKTsKLSAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYWRkKCpzZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Byb3h5KTsKKyAgICBBU1NFUlQoIXNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlu
cygqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMoKS5hZGQoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpOwogCi0gICAgc2VydmljZVdvcmtl
clByb2Nlc3NQcm94eS0+ZXN0YWJsaXNoU2VydmljZVdvcmtlckNvbnRleHQobV9zZXJ2aWNlV29y
a2VyUHJlZmVyZW5jZXMgPyBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcy52YWx1ZSgpIDogbV9k
ZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLnN0b3JlKCksIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICBpZiAoIW1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkK
LSAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVzZXJB
Z2VudChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNz
UHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KHByb2Nlc3NQb29sLT5tX3NlcnZp
Y2VXb3JrZXJQcmVmZXJlbmNlcyA/IHByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJQcmVmZXJl
bmNlcy52YWx1ZSgpIDogcHJvY2Vzc1Bvb2wtPm1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5j
ZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgaWYgKCFwcm9j
ZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50LmlzTnVsbCgpKQorICAgICAgICBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KHByb2Nlc3NQ
b29sLT5tX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpyZW1vdmVGcm9tU2VydmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nl
c3MpCiB7Ci0gICAgQVNTRVJUKG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb250YWlucyhwcm9j
ZXNzKSk7Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLnJlbW92ZShwcm9jZXNzKTsKKyAg
ICBBU1NFUlQoc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5zKHByb2Nlc3MpKTsKKyAg
ICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkucmVtb3ZlKHByb2Nlc3MpOwogfQogI2VuZGlmCiAK
QEAgLTkyMiw3ICs2MjQsNyBAQCBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBXZWJQcm9jZXNzUG9v
bDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZQogI2lmIFBMQVRGT1JN
KEdUSykgfHwgUExBVEZPUk0oV1BFKQogICAgIC8vIEluIHBsYXRmb3JtcyB1c2luZyBCdWJibGV3
cmFwIGZvciBzYW5kYm94aW5nLCBwcmV3YXJtZWQgcHJvY2VzcyBpcyBsYXVuY2hlZCB1c2luZyB0
aGUgV2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlLAogICAgIC8vIHNvIHdl
IGRvbid0IHVzZSBpdCBpbiBjYXNlIG9mIHVzaW5nIGEgZGlmZmVyZW50IFdlYnNpdGVEYXRhU3Rv
cmUuCi0gICAgaWYgKG1fc2FuZGJveEVuYWJsZWQgJiYgbV93ZWJzaXRlRGF0YVN0b3JlICYmIG1f
d2Vic2l0ZURhdGFTdG9yZS5nZXQoKSAhPSAmd2Vic2l0ZURhdGFTdG9yZSkKKyAgICBpZiAobV9z
YW5kYm94RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIApAQCAtMTAz
Miw4ICs3MzQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjppbml0aWFsaXplTmV3V2ViUHJvY2Vz
cyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIFdlYnNpdGVEYQogICAgICAgICBwcm9jZXNzLmlz
UmVzcG9uc2l2ZShbaW5pdGlhbGl6YXRpb25BY3Rpdml0eSA9IFdURk1vdmUoaW5pdGlhbGl6YXRp
b25BY3Rpdml0eSldIChib29sKSB7IH0pOwogICAgIH0pOwogCi0gICAgZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLQogICAgIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsK
IAogICAgIHBhcmFtZXRlcnMuaW5qZWN0ZWRCdW5kbGVQYXRoID0gbV9yZXNvbHZlZFBhdGhzLmlu
amVjdGVkQnVuZGxlUGF0aDsKQEAgLTExOTgsOSArODk4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCiAg
ICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+aWdub3JlVGltZW91dHNGb3JUZXN0aW5nKCk7
CiAKICAgICBtX2Nvbm5lY3Rpb25DbGllbnQuZGlkQ3JlYXRlQ29ubmVjdGlvbih0aGlzLCBwcm9j
ZXNzLT53ZWJDb25uZWN0aW9uKCkpOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAg
ICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5kaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwogfQog
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkq
IHByb2Nlc3MpCkBAIC0xMjk1LDEwICs5OTIsNyBAQCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9j
ZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBSZWY8QVBJOgog
ICAgIGlmICghcGFnZUNvbmZpZ3VyYXRpb24tPndlYnNpdGVEYXRhU3RvcmUoKSkgewogICAgICAg
ICAvLyBXZSB0cnkgdG8gYXZvaWQgY3JlYXRpbmcgdGhlIGRlZmF1bHQgZGF0YSBzdG9yZSBhcyBs
b25nIGFzIHBvc3NpYmxlLgogICAgICAgICAvLyBCdXQgaWYgdGhlcmUgaXMgYW4gYXR0ZW1wdCB0
byBjcmVhdGUgYSB3ZWIgcGFnZSB3aXRob3V0IGFueSBzcGVjaWZpZWQgZGF0YSBzdG9yZSwgdGhl
biB3ZSBoYXZlIHRvIGNyZWF0ZSBpdC4KLSAgICAgICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUp
Ci0gICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLQotICAgICAgICBwYWdlQ29uZmlndXJhdGlv
bi0+c2V0V2Vic2l0ZURhdGFTdG9yZShtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCkpOworICAgICAg
ICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZShXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKSk7CiAgICAgfQogCiAgICAgUmVmUHRy
PFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzczsKQEAgLTEzMjksNyArMTAyMyw3IEBAIFJlZjxXZWJQ
YWdlUHJveHk+IFdlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VD
bGllbnQsIFJlZjxBUEk6CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIGlmICghbV9z
ZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMpIHsKICAgICAgICAgbV9zZXJ2aWNlV29ya2VyUHJlZmVy
ZW5jZXMgPSBwYWdlLT5wcmVmZXJlbmNlc1N0b3JlKCk7Ci0gICAgICAgIGZvciAoYXV0byYgc2Vy
dmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMpCisgICAgICAgIGZv
ciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkp
CiAgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVTZXJ2aWNlV29ya2VyUHJl
ZmVyZW5jZXNTdG9yZSgqbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMpOwogICAgIH0KICAgICBp
ZiAodXNlckNvbnRlbnRDb250cm9sbGVyKQpAQCAtMTM1Niw3ICsxMDUwLDcgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6dXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25zdCBTdHJpbmcmIHVz
ZXJBZ2VudCkKICAgICBpZiAobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50ID09IHVzZXJBZ2VudCkK
ICAgICAgICAgcmV0dXJuOwogICAgIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9IHVzZXJBZ2Vu
dDsKLSAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzKQorICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNl
V29ya2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzLnNldFNlcnZp
Y2VXb3JrZXJVc2VyQWdlbnQobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KICNlbmRpZgpA
QCAtMTM2NSwxNSArMTA1OSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5n
V2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJCiB7CiAgICAgYXV0
byByZXN1bHQgPSBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAuYWRkKGRhdGFTdG9yZS5zZXNzaW9uSUQo
KSwgSGFzaFNldDxXZWJQYWdlUHJveHlJZGVudGlmaWVyPigpKS5pdGVyYXRvci0+dmFsdWUuYWRk
KHBhZ2VJRCk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsK
LQotICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwotICAgIGlmIChz
ZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAg
ICBBU1NFUlQoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IGRhdGFTdG9yZS5wYXJhbWV0ZXJz
KCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCA9PSBzZXNzaW9uSUQpOwotICAg
ICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+YWRkU2Vzc2lvbihtYWtlUmVmKGRhdGFTdG9yZSkpOwotICAgICAgICAgICAgZGF0YVN0b3Jl
LmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgIH0KIH0KIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cGFnZUVuZFVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVu
dGlmaWVyIHBhZ2VJRCwgV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKQpAQCAtMTQwMSw3ICsx
MDg2LDYgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzUGFnZXNVc2luZ1dlYnNpdGVEYXRhU3Rv
cmUoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKQogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vz
c1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3h5
KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBT
dHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQogewogICAgIGF1dG8mIGRvd25sb2FkUHJveHkgPSBj
cmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcmVxdWVzdCwgaW5pdGlhdGluZ1BhZ2UsIHsg
fSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgp
OwogCiAgICAgT3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+IGlzQXBwQm91bmQg
PSBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbjo6Tm87CiAgICAgaWYgKGluaXRpYXRpbmdQYWdl
KSB7CkBAIC0xNDExLDI2ICsxMDk1LDIzIEBAIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29s
Ojpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94CiAjZW5k
aWYKICAgICB9CiAKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBSZXNvdXJj
ZVJlcXVlc3QgdXBkYXRlZFJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAgIC8vIFJlcXVlc3QncyBm
aXJzdFBhcnR5Rm9yQ29va2llcyB3aWxsIGJlIHVzZWQgYXMgT3JpZ2luYWwgVVJMIG9mIHRoZSBk
b3dubG9hZCByZXF1ZXN0LgotICAgICAgICAvLyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZl
bCBkb2N1bWVudCdzIFVSTC4KLSAgICAgICAgaWYgKGluaXRpYXRpbmdQYWdlKSB7Ci0gICAgICAg
ICAgICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwgPSBVUkwgeyBVUkwgeyB9LCBpbml0aWF0aW5nUGFn
ZS0+cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5z
ZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7Ci0gICAgICAgICAgICB1
cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGlu
aXRpYXRpbmdQYWdlVVJMLCByZXF1ZXN0LnVybCgpKSk7Ci0gICAgICAgICAgICBpZiAoIXVwZGF0
ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkK
LSAgICAgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRp
bmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoVVJM
KCkpOwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7Ci0g
ICAgICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVh
ZGVyTmFtZTo6VXNlckFnZW50KSkKLSAgICAgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRI
VFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZhbHNlKTsKLSAgICAgICAg
bmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25sb2Fk
UmVxdWVzdChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1cGRhdGVkUmVx
dWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsKLSAgICAgICAgcmV0dXJu
IGRvd25sb2FkUHJveHk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJlcXVl
c3QpOworICAgIC8vIFJlcXVlc3QncyBmaXJzdFBhcnR5Rm9yQ29va2llcyB3aWxsIGJlIHVzZWQg
YXMgT3JpZ2luYWwgVVJMIG9mIHRoZSBkb3dubG9hZCByZXF1ZXN0LgorICAgIC8vIFdlIHNldCB0
aGUgdmFsdWUgdG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJMLgorICAgIGlmIChpbml0aWF0aW5n
UGFnZSkgeworICAgICAgICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwgPSBVUkwgeyBVUkwgeyB9LCBp
bml0aWF0aW5nUGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07CisgICAgICAgIHVwZGF0ZWRS
ZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKKyAgICAg
ICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVh
bChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOworICAgICAgICBpZiAoIXVwZGF0
ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkK
KyAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlhdGluZ1Bh
Z2UtPnVzZXJBZ2VudEZvclVSTChyZXF1ZXN0LnVybCgpKSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoVVJMKCkpOworICAgICAg
ICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKKyAgICAgICAgaWYgKCF1cGRh
dGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkp
CisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94
eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7CiAgICAgfQorICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElz
VG9wU2l0ZShmYWxzZSk7CisgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25sb2FkUmVxdWVzdChkYXRhU3RvcmUuc2Vzc2lvbklE
KCksIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3Vu
ZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsKIAogICAgIHJldHVybiBkb3dubG9hZFByb3h5Owog
fQpAQCAtMTQzOCwxNyArMTExOSwxMiBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6
ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveAogRG93bmxv
YWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUm
IGRhdGFTdG9yZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgQVBJOjpEYXRh
JiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgYXV0byYgZG93bmxvYWRQ
cm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBSZXNvdXJjZVJlcXVlc3QoKSwg
aW5pdGlhdGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0
YVN0b3JlLnNlc3Npb25JRCgpOwogCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRi
b3hFeHRlbnNpb25IYW5kbGU7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6
OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAobmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25s
b2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNp
b25IYW5kbGUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7Ci0gICAgfQotCisg
ICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlJlc3VtZURvd25sb2FkKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgZG93bmxvYWRQcm94eS5k
b3dubG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlKSwgMCk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CiAKQEAgLTE1
MTcsMTEgKzExOTMsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWZyZXNoUGx1Z2lucygpCiAK
ICNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAotUHJvY2Vzc0lEIFdlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQotewotICAgIHJldHVybiBtX25l
dHdvcmtQcm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7
Ci19Ci0KIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6cHJld2FybWVkUHJvY2Vzc0lkZW50aWZp
ZXIoKQogewogICAgIHJldHVybiBtX3ByZXdhcm1lZFByb2Nlc3MgPyBtX3ByZXdhcm1lZFByb2Nl
c3MtPnByb2Nlc3NJZGVudGlmaWVyKCkgOiAwOwpAQCAtMTU1OCwxNCArMTIyOSwxOCBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKGNvbnN0IFN0cmluZyYg
dXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdp
c3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2Vz
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVt
ZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0
YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFT
dG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVy
bFNjaGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3Rl
clVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KGNvbnN0IFN0cmluZyYg
dXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdp
c3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSk7
CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVS
TFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOwotICAg
IHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0
ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpKTsK
KyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1l
XSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3
b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNj
aGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSksIDApOworICAg
IH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlk
ZGVuRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTU3OCwxNCArMTI1
MywxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwoY29u
c3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0Fs
bFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2Fs
KHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSkpOworICAgIFdl
YnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJz
aXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNM
b2NhbCh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewog
ICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFz
Tm9BY2Nlc3ModXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6Oldl
YlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpKTsKLSAgICBz
ZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVy
VVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpm
b3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0
YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1l
KSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2No
ZW1lQXNEaXNwbGF5SXNvbGF0ZWQoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNjA2LDEw
ICsxMjg1LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVB
c0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkuYWRkKHVybFNj
aGVtZSk7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9y
TGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRvIG5l
dHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3Nlcygp
KQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Q
cm90b2NvbCh1cmxTY2hlbWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVy
R2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmlu
ZyYgdXJsU2NoZW1lKQpAQCAtMTYxOCwxMCArMTI5NSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMo
Y29uCiAgICAgICAgIHJldHVybjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJv
dG9jb2xIYW5kbGVycygpLnJlbW92ZSh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vz
c1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2No
ZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nl
c3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVk
KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTY1NSwxNiArMTMzMCwxOCBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIAogICAg
IHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChj
YWNoZU1vZGVsKSk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwo
Y2FjaGVNb2RlbCksIDApOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0
YVN0b3JlKFtjYWNoZU1vZGVsXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAg
ICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKENhY2hl
TW9kZWwgY2FjaGVNb2RlbCkKIHsKICAgICB1cGRhdGVCYWNrRm9yd2FyZENhY2hlQ2FwYWNpdHko
KTsKIAotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJv
bm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCB7IH0pOworICAgIFdlYnNpdGVEYXRh
U3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtjYWNoZU1vZGVsXSAoV2Vic2l0ZURhdGFT
dG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNl
bmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNocm9ub3Vz
bHlGb3JUZXN0aW5nKGNhY2hlTW9kZWwpLCB7IH0sIDApOworICAgIH0pOwogfQogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGlt
ZW91dEludGVydmFsKQpAQCAtMTY3NCwxMiArMTM1MSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwp
CiAKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KFdl
YnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJh
bWVJbmZvKQogewotICAgIHJldHVybiBlbnN1cmVOZXR3b3JrUHJvY2VzcygmZGF0YVN0b3JlKS5j
cmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5h
dGluZ1BhZ2UpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNr
Z3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKLXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5
bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7CisgICAgcmV0dXJuIGRhdGFTdG9y
ZS5uZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCAqdGhpcywg
cmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwogfQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIoSVBDOjpSZWNlaXZlck5hbWUgbWVzc2FnZVJlY2Vp
dmVyTmFtZSwgSVBDOjpNZXNzYWdlUmVjZWl2ZXImIG1lc3NhZ2VSZWNlaXZlcikKQEAgLTE3NTAs
MzAgKzE0MjIsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAg
ICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2Ft
cGxlcigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLXZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYm
IHJlcGx5KQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3Mt
PmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKHN0
ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7Ci19Ci0K
LXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoY29uc3QgUEFMOjpT
ZXNzaW9uSUQmIHNlc3Npb25JRCkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAg
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFy
Q2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKLXsKLSAgICB0ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycygpOwotCi0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Ci0gICAgbV9uZXR3b3JrUHJv
Y2VzcyA9IG51bGxwdHI7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdl
YkNvbnRlbnRQcm9jZXNzZXMoKQogewogICAgIFZlY3RvcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5
Pj4gcHJvY2Vzc2VzID0gbV9wcm9jZXNzZXM7CkBAIC0xNzgxLDQwICsxNDI5LDE1IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQogICAgICAg
ICBwcm9jZXNzLT50ZXJtaW5hdGUoKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5l
dHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICghbV9uZXR3b3JrUHJvY2Vz
cykKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0KLSAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kUHJlcGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25JbW1pbmVudDo6Tm8sIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2Vu
ZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpCi17Ci0gICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9j
ZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOwotfQotCi12b2lkIFdlYlByb2Nl
c3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQotewotICAgIGlmIChtX25ldHdv
cmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJvY2Vzc0RpZFJlc3Vt
ZSgpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycygp
CiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpOwotICAgIHdoaWxlIChtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29t
cHV0ZVNpemUoKSkKLSAgICAgICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmJlZ2luKCktPmRp
c2FibGVTZXJ2aWNlV29ya2VycygpOworICAgIHdoaWxlIChzZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
KCkuY29tcHV0ZVNpemUoKSkKKyAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmJlZ2lu
KCktPmRpc2FibGVTZXJ2aWNlV29ya2VycygpOwogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS5mbHVzaENvb2tpZXMoc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1dG9tYXRpb25D
YXBhYmlsaXRpZXMoKSBjb25zdAogewogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpAQCAt
MjA4OSwxNSArMTcxMiwyMSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZXBvcnRXZWJDb250ZW50
Q1BVVGltZShTZWNvbmRzIGNwdVRpbWUsIHVpbnQ2NF90IGFjdGl2aXR5UwogI2VuZGlmCiB9CiAK
K1dlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2Vha0hhc2hTZXQ8
V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzOworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9CisK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb25zKCkKIHsKLSAgICBl
bnN1cmVOZXR3b3JrUHJvY2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICBXZWJz
aXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbXSAoV2Vic2l0ZURhdGFTdG9y
ZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnVwZGF0
ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICB9KTsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
CiAgICAgLy8gQ2hlY2sgb24gbmV4dCBydW4gbG9vcCBzaW5jZSB0aGUgd2ViIHByb2Nlc3MgcHJv
eHkgdG9rZW5zIGFyZSBwcm9iYWJseSBiZWluZyB1cGRhdGVkLgotICAgIGNhbGxPbk1haW5SdW5M
b29wKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXSB7Ci0gICAgICAgIGlmICgh
d2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGZvciAoYXV0byYgc2Vydmlj
ZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMpCisgICAgY2FsbE9uTWFp
blJ1bkxvb3AoW10geworICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDog
c2VydmljZVdvcmtlclByb2Nlc3NlcygpKQogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nl
c3MudXBkYXRlU2VydmljZVdvcmtlclByb2Nlc3NBc3NlcnRpb24oKTsKICAgICB9KTsKICNlbmRp
ZgpAQCAtMjEwNyw3ICsxNzM2LDcgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29y
a2VyUGFnZUlEKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlEKSBjb25zdAogewogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmVmZmljaWVudC4K
LSAgICByZXR1cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtwYWdlSURd
KGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJv
Y2Vzc2VzKCksIFtwYWdlSURdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nl
c3MuaGFzU2VydmljZVdvcmtlclBhZ2VQcm94eShwYWdlSUQpOwogICAgIH0pOwogI2VuZGlmCkBA
IC0yMzI5LDE0ICsxOTU4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDdXJyZW50TW9k
aWZpZXJTdGF0ZUZvclRlc3RpbmcoKQogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRo
RGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIGZyb21Eb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwgT3B0
aW9uU2V0PENyb3NzU2l0ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6OkZsYWc+IG5hdmlnYXRpb25E
YXRhVHJhbnNmZXIsIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgd2ViUGFnZVByb3h5SUQsIFBhZ2VJ
ZGVudGlmaWVyIHdlYlBhZ2VJRCkKLXsKLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRpZENvbW1pdENyb3NzU2l0ZUxv
YWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25JRCwgZnJvbURvbWFpbiwgdG9Eb21haW4sIG5hdmln
YXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQpOwotfQotCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7CiAgICAgc2VuZFRvQWxsUHJv
Y2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlv
bihkb21haW5zKSk7CkBAIC0yMzg3LDI3ICsyMDA4LDI3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnVwZGF0ZUF1ZGlibGVNZWRpYUFzc2VydGlvbnMoKQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcykKIHsKLSAgICBpZiAobV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzID09IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCisgICAgaWYgKHNfdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKQogICAgICAgICByZXR1cm47CiAKLSAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPRyhT
ZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczogKHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyk7CisgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfU1RBVElDKFNlcnZpY2VX
b3JrZXIsICJzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOiAodXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcz0lZCkiLCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KTsKIAotICAgIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3M7Ci0gICAgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKLSAg
ICB0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworICAgIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7CisgICAgZm9yIChh
dXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAg
ICAgICAgcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKICNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCiBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29y
a2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdU
Rjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7Cisg
ICAgcmV0dXJuIFdURjo6YW55T2Yoc2VydmljZVdvcmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBw
cm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJGb3JlZ3Jv
dW5kQWN0aXZpdHlGb3JUZXN0aW5nKCk7CiAgICAgfSk7CiB9CiAKIGJvb2wgV2ViUHJvY2Vzc1Bv
b2w6Omhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1
dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzKCksIFtdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2Vy
dmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKTsKICAgICB9KTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4IGQxZjFmZTk2MTUwNmEx
ZTVmMTMyNWZhOTlhNTYwOGI5NTBiNmFiNzEuLjZjODFiODZiMTNlOTJjNDYxZGIyNmQxMjg0ZjFm
YTlmYzNiYTU2NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApA
QCAtODEsNyArODEsNiBAQCBPQkpDX0NMQVNTIFdLUHJlZmVyZW5jZU9ic2VydmVyOwogCiBuYW1l
c3BhY2UgQVBJIHsKIGNsYXNzIEF1dG9tYXRpb25DbGllbnQ7Ci1jbGFzcyBDdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQ7CiBjbGFzcyBEb3dubG9hZENsaWVudDsKIGNsYXNzIEhUVFBDb29raWVT
dG9yZTsKIGNsYXNzIEluamVjdGVkQnVuZGxlQ2xpZW50OwpAQCAtMTgwLDcgKzE3OSw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVn
YWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0RG93bmxvYWRDbGllbnQo
VW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0QXV0b21hdGlv
bkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYmKTsKLSAgICB2
b2lkIHNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8
QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYpOwogCiAgICAgdm9pZCBzZXRDdXN0
b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CiAgICAg
Y29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKSB7
IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPmN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRl
bnRpZmllcigpOyB9CkBAIC0xOTEsMTcgKzE4OSw5IEBAIHB1YmxpYzoKICAgICAvLyBudWxsIGNo
ZWNrcyBpbiBXZWJQYWdlUHJveHkuCiAgICAgV2ViUHJvY2Vzc1Byb3h5KiBkdW1teVByb2Nlc3NQ
cm94eShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIGNvbnN0IHsgcmV0dXJuIG1fZHVtbXlQcm9j
ZXNzUHJveGllcy5nZXQoc2Vzc2lvbklEKS5nZXQoKTsgfQogCi0gICAgLy8gV2ViUHJvY2VzcyBv
ciBOZXR3b3JrUHJvY2VzcyBhcyBhcHByb3BvcmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2Rl
bC4gVGhlIGNvbm5lY3Rpb24gbXVzdCBiZSBub24tbnVsbC4KLSAgICBJUEM6OkNvbm5lY3Rpb24q
IG5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpOwotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gdm9pZCBzZW5kVG9BbGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSk7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKGNvbnN0IFQm
IG1lc3NhZ2UsIFBBTDo6U2Vzc2lvbklEKTsKIAotICAgIC8vIFNlbmRzIHRoZSBtZXNzYWdlIHRv
IFdlYlByb2Nlc3Mgb3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJyZW50
IHByb2Nlc3MgbW9kZWwuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3
b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gdm9pZCBzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UsIFUm
JiByZXBseSk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5n
UHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpOwotCiAgICAgdm9pZCBw
cm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSopOwogCiAgICAgV2ViUHJv
Y2Vzc0NhY2hlJiB3ZWJQcm9jZXNzQ2FjaGUoKSB7IHJldHVybiBtX3dlYlByb2Nlc3NDYWNoZS5n
ZXQoKTsgfQpAQCAtMjA5LDkgKzE5OSw2IEBAIHB1YmxpYzoKICAgICAvLyBEaXNjb25uZWN0IHRo
ZSBwcm9jZXNzIGZyb20gdGhlIGNvbnRleHQuCiAgICAgdm9pZCBkaXNjb25uZWN0UHJvY2VzcyhX
ZWJQcm9jZXNzUHJveHkqKTsKIAotICAgIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSogd2Vic2l0
ZURhdGFTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsgfQot
ICAgIHZvaWQgc2V0UHJpbWFyeURhdGFTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIGRh
dGFTdG9yZSkgeyBtX3dlYnNpdGVEYXRhU3RvcmUgPSAmZGF0YVN0b3JlOyB9Ci0KICAgICBSZWY8
V2ViUGFnZVByb3h5PiBjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmLCBSZWY8QVBJOjpQYWdlQ29u
ZmlndXJhdGlvbj4mJik7CiAKICAgICB2b2lkIHBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9y
ZShXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBXZWJzaXRlRGF0YVN0b3JlJik7CkBAIC0yNjIsMTAg
KzI0OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFN1cHBvcnRlZFBsdWdpbihTdHJpbmcmJiBt
YXRjaGluZ0RvbWFpbiwgU3RyaW5nJiYgbmFtZSwgSGFzaFNldDxTdHJpbmc+JiYgbWltZVR5cGVz
LCBIYXNoU2V0PFN0cmluZz4gZXh0ZW5zaW9ucyk7CiAgICAgdm9pZCBjbGVhclN1cHBvcnRlZFBs
dWdpbnMoKTsKIAotICAgIFByb2Nlc3NJRCBuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKICAg
ICBQcm9jZXNzSUQgcHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKTsKICAgICB2b2lkIGFjdGl2
ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3RpbmcoUHJvY2Vzc0lELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmKTsKLSAgICBib29sIG5ldHdvcmtQcm9j
ZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpOwogCiAgICAgV2ViUGFn
ZUdyb3VwJiBkZWZhdWx0UGFnZUdyb3VwKCkgeyByZXR1cm4gbV9kZWZhdWx0UGFnZUdyb3VwLmdl
dCgpOyB9CiAKQEAgLTMwNyw4ICsyOTIsNiBAQCBwdWJsaWM6CiAgICAgQVBJOjpMZWdhY3lDb250
ZXh0SGlzdG9yeUNsaWVudCYgaGlzdG9yeUNsaWVudCgpIHsgcmV0dXJuICptX2hpc3RvcnlDbGll
bnQ7IH0KICAgICBXZWJDb250ZXh0Q2xpZW50JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsg
fQogCi0gICAgQVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQmIGN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudCgpIGNvbnN0IHsgcmV0dXJuICptX2N1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudDsgfQotCiAgICAgc3RydWN0IFN0YXRpc3RpY3MgewogICAgICAgICB1bnNpZ25lZCB3a1Zp
ZXdDb3VudDsKICAgICAgICAgdW5zaWduZWQgd2tQYWdlQ291bnQ7CkBAIC0zMjQsMTIgKzMwNyw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwogICAg
IHZvaWQgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIAotICAgIHZvaWQgZmx1c2hDb29raWVz
KGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLQog
ICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmco
Ym9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nID0gdmFsdWU7IH0KICAgICBib29sIHNob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZh
aWxGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZzsgfQotICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHROZXR3b3Jr
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRNYWtlTmV4
dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQotICAgIGJvb2wg
c2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmc7IH0KIAogICAgIHZvaWQgcmVwb3J0V2ViQ29udGVudENQVVRpbWUoU2Vjb25kcyBjcHVUaW1l
LCB1aW50NjRfdCBhY3Rpdml0eVN0YXRlKTsKIApAQCAtMzg4LDE5ICszNjcsMTMgQEAgcHVibGlj
OgogI2VuZGlmCiAKICAgICAvLyBOZXR3b3JrIFByb2Nlc3MgTWFuYWdlbWVudAotICAgIE5ldHdv
cmtQcm9jZXNzUHJveHkmIGVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdp
dGhXZWJzaXRlRGF0YVN0b3JlID0gbnVsbHB0cik7Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSog
bmV0d29ya1Byb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX25ldHdvcmtQcm9jZXNzLmdldCgpOyB9
CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwog
Ci0gICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5Jiwg
TWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVs
YXllZFJlcGx5JiYpOwotCiAgICAgYm9vbCBpc1NlcnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFnZVBy
b3h5SWRlbnRpZmllcikgY29uc3Q7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIHZv
aWQgZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdv
cmtQcm9jZXNzUHJveHkmLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYmLCBQQUw6OlNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICBzdGF0aWMgdm9pZCBlc3Rh
Ymxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nl
c3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vzc2lvbklELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgcmVtb3ZlRnJvbVNlcnZpY2VX
b3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5Jik7Ci0gICAgc2l6ZV90IHNlcnZpY2VXb3Jr
ZXJQcm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMu
Y29tcHV0ZVNpemUoKTsgfQotICAgIHZvaWQgc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JT
ZXJ2aWNlV29ya2VyKGJvb2wgYWxsb3dzKSB7IG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JT
ZXJ2aWNlV29ya2VyID0gYWxsb3dzOyB9Ci0gICAgYm9vbCBhbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvclNlcnZpY2VXb3JrZXIoKSBjb25zdCB7IHJldHVybiBtX2FsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yU2VydmljZVdvcmtlcjsgfQorICAgIHNpemVfdCBzZXJ2aWNlV29ya2VyUHJveGllc0Nv
dW50KCkgY29uc3QgeyByZXR1cm4gc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXpl
KCk7IH0KICAgICB2b2lkIHVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5n
JiB1c2VyQWdlbnQpOwogICAgIGNvbnN0IE9wdGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlcklk
ZW50aWZpZXI+JiB1c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtl
cnMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJDb250ZW50Q29udHJvbGxlcklERm9yU2VydmljZVdv
cmtlcjsgfQogICAgIGJvb2wgaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRl
c3RpbmcoKSBjb25zdDsKQEAgLTQ1OSw4ICs0MzIsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbHdh
eXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiBtX2Fsd2F5c1J1bnNB
dEJhY2tncm91bmRQcmlvcml0eTsgfQogICAgIGJvb2wgc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFz
c2VydGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlv
bjsgfQogCi0gICAgdm9pZCBzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3Vu
ZCk7Ci0gICAgCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAgICAgdm9pZCBnYW1lcGFkQ29ubmVjdGVk
KGNvbnN0IFVJR2FtZXBhZCYsIFdlYkNvcmU6OkV2ZW50TWFrZXNHYW1lcGFkc1Zpc2libGUpOwog
ICAgIHZvaWQgZ2FtZXBhZERpc2Nvbm5lY3RlZChjb25zdCBVSUdhbWVwYWQmKTsKQEAgLTQ5OCw3
ICs0NjksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9y
VGVzdGluZygpOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICB2
b2lkIGRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklE
LCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4mIHRvRG9tYWluLCBPcHRpb25TZXQ8V2ViQ29yZTo6Q3Jv
c3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6RmxhZz4sIFdlYlBhZ2VQcm94eUlkZW50aWZp
ZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsKICAgICB2b2lkIHNldERvbWFpbnNXaXRoVXNl
ckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYpOwogICAg
IHZvaWQgc2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0aW5nKGNvbnN0IFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5RG9tYWluLCBjb25zdCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiYgdGhpcmRQYXJ0eURvbWFpbiwgYm9vbCBzaG91bGRTY2hlZHVsZU5vdGlm
aWNhdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIHNlbmRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CkBAIC01MjUsOCArNDk1LDggQEAgcHVibGljOgogICAgIAogICAgIFBsdWdJbkF1dG9T
dGFydFByb3ZpZGVyJiBwbHVnSW5BdXRvU3RhcnRQcm92aWRlcigpIHsgcmV0dXJuIG1fcGx1Z0lu
QXV0b1N0YXJ0UHJvdmlkZXI7IH0KIAotICAgIHZvaWQgc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2Vzcyhib29sKTsKLSAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MoKSBjb25zdCB7IHJldHVybiBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7IH0K
KyAgICBzdGF0aWMgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wp
OworICAgIHN0YXRpYyBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKSB7IHJl
dHVybiBzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7IH0KIAogI2lmIEVOQUJMRShD
RlBSRUZTX0RJUkVDVF9NT0RFKQogICAgIHZvaWQgbm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKGNv
bnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgT3B0aW9uYWw8U3Ry
aW5nPiYgZW5jb2RlZFZhbHVlKTsKQEAgLTUzOCw5ICs1MDgsMTUgQEAgcHVibGljOgogICAgIGlu
dDMyX3QgdXNlcklkKCkgY29uc3QgeyByZXR1cm4gbV91c2VySWQ7IH0KICNlbmRpZgogCi0jaWYg
UExBVEZPUk0oQ09DT0EpCi0gICAgT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiB4cGNFbmRwb2lu
dE1lc3NhZ2UoKSBjb25zdDsKLSAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50
VG9XZWJQcm9jZXNzKE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4gZW5kcG9pbnRNZXNzYWdlKTsK
KyAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOworICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiB1
cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKTsKKworI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCisgICAgc3RhdGljIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Cisg
ICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3Ry
aW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHdlYkNv
bnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBv
cmFyeURpcmVjdG9yeSgpOwogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC01NTYsOCArNTMyLDYgQEAg
cHJpdmF0ZToKICAgICBXZWJQcm9jZXNzUHJveHkmIGNyZWF0ZU5ld1dlYlByb2Nlc3MoV2Vic2l0
ZURhdGFTdG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJv
eHk6OklzUHJld2FybWVkOjpObyk7CiAgICAgdm9pZCBpbml0aWFsaXplTmV3V2ViUHJvY2VzcyhX
ZWJQcm9jZXNzUHJveHkmLCBXZWJzaXRlRGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1By
ZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKIAotICAgIHZvaWQg
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMmKTsKLQogICAgIHZvaWQgaGFuZGxlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHkpOwog
ICAgIHZvaWQgaGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChVc2VyRGF0YSYmKT4mJik7CiAKQEAgLTU4MSwxNCArNTU1LDYgQEAg
cHJpdmF0ZToKIAogICAgIGJvb2wgdXNlc1NpbmdsZVdlYlByb2Nlc3MoKSBjb25zdCB7IHJldHVy
biBtX2NvbmZpZ3VyYXRpb24tPnVzZXNTaW5nbGVXZWJQcm9jZXNzKCk7IH0KIAotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgc3RhdGljIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5
KCk7Ci0gICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBzdGF0
aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5n
IHdlYkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5l
clRlbXBvcmFyeURpcmVjdG9yeSgpOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShDT0NPQSkKICAg
ICB2b2lkIHJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CiAgICAgdm9pZCB1bnJlZ2lz
dGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CkBAIC02MzAsOSArNTk2LDggQEAgcHJpdmF0ZToK
ICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWFrUHRyPFdlYlByb2Nlc3NQcm94eT4+IG1f
ZHVtbXlQcm9jZXNzUHJveGllczsgLy8gTGlnaHR3ZWlnaHQgV2ViUHJvY2Vzc1Byb3h5IG9iamVj
dHMgd2l0aG91dCBiYWNraW5nIHByb2Nlc3MuCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
Ci0gICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNz
ZXM7CisgICAgc3RhdGljIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzZXMoKTsKICAgICBib29sIG1fd2FpdGluZ0ZvcldvcmtlckNvbnRleHRQcm9jZXNz
Q29ubmVjdGlvbiB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2FsbG93c0FueVNTTENlcnRpZmljYXRl
Rm9yU2VydmljZVdvcmtlciB7IGZhbHNlIH07CiAgICAgU3RyaW5nIG1fc2VydmljZVdvcmtlclVz
ZXJBZ2VudDsKICAgICBPcHRpb25hbDxXZWJQcmVmZXJlbmNlc1N0b3JlPiBtX3NlcnZpY2VXb3Jr
ZXJQcmVmZXJlbmNlczsKICAgICBPcHRpb25hbDxVc2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlm
aWVyPiBtX3VzZXJDb250ZW50Q29udHJvbGxlcklERm9yU2VydmljZVdvcmtlcjsKQEAgLTY0OCw3
ICs2MTMsNiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25D
bGllbnQ+IG1fYXV0b21hdGlvbkNsaWVudDsKICAgICBVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENs
aWVudD4gbV9kb3dubG9hZENsaWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lD
b250ZXh0SGlzdG9yeUNsaWVudD4gbV9oaXN0b3J5Q2xpZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQ7CiAKICAgICBSZWZQdHI8V2ViQXV0b21hdGlvblNlc3Npb24+IG1fYXV0b21hdGlv
blNlc3Npb247CiAKQEAgLTY4MCw4ICs2NDQsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9tZW1v
cnlTYW1wbGVyRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgZG91YmxlIG1fbWVtb3J5U2FtcGxlcklu
dGVydmFsIHsgMTQwMC4wIH07CiAKLSAgICBSZWZQdHI8V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
PiBtX3dlYnNpdGVEYXRhU3RvcmU7Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhcios
IFJlZlB0cjxXZWJDb250ZXh0U3VwcGxlbWVudD4sIFB0ckhhc2g8Y29uc3QgY2hhcio+PiBXZWJD
b250ZXh0U3VwcGxlbWVudE1hcDsKICAgICBXZWJDb250ZXh0U3VwcGxlbWVudE1hcCBtX3N1cHBs
ZW1lbnRzOwogCkBAIC03MTQsOCArNjc2LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9wcm9j
ZXNzVGVybWluYXRpb25FbmFibGVkIHsgdHJ1ZSB9OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE5l
dHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7Ci0KICAgICBIYXNoTWFwPHVpbnQ2
NF90LCBSZWZQdHI8RGljdGlvbmFyeUNhbGxiYWNrPj4gbV9kaWN0aW9uYXJ5Q2FsbGJhY2tzOwog
CiAjaWYgVVNFKFNPVVApCkBAIC03MjgsNyArNjg4LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
YWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5OwogICAgIGJvb2wgbV9zaG91bGRUYWtlVUlC
YWNrZ3JvdW5kQXNzZXJ0aW9uOwogICAgIGJvb2wgbV9zaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nob3VsZE1ha2VOZXh0
TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyB7IGZhbHNlIH07CiAgICAgYm9vbCBt
X3RjY1ByZWZlcmVuY2VFbmFibGVkIHsgZmFsc2UgfTsKIAogICAgIFVzZXJPYnNlcnZhYmxlUGFn
ZUNvdW50ZXIgbV91c2VyT2JzZXJ2YWJsZVBhZ2VDb3VudGVyOwpAQCAtODIwLDMxICs3NzksMTMg
QEAgcHJpdmF0ZToKICNlbHNlCiAgICAgYm9vbCBtX2lzRGVsYXllZFdlYlByb2Nlc3NMYXVuY2hE
aXNhYmxlZCB7IGZhbHNlIH07CiAjZW5kaWYKLSAgICBib29sIG1fdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcyB7IGZhbHNlIH07CisgICAgc3RhdGljIGJvb2wgc191c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKICAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBtX2RvbWFpbnNXaXRo
VXNlckludGVyYWN0aW9uOwogI2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBPU09i
amVjdFB0cjx4cGNfb2JqZWN0X3Q+IG1fZW5kcG9pbnRNZXNzYWdlOwotI2VuZGlmCiB9OwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3MoVCYmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9u
ZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxh
dW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2Fn
ZSksIDApOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1lc3NhZ2UpCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBkNjYxMDMzOGI2Y2Y2MGEyN2E2Zjc1
ZGFlYzM0OWE4ZjcyYWIzYjg1Li41ZTJjNzA4ZjIyZjk3YmVhZjM3MDkzNTJjYjY5ZTNkNGMyOGUx
ZDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAg
LTI2OCw2ICsyNjgsOSBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6c2V0V2Vic2l0ZURhdGFTdG9y
ZShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpCiB7CiAgICAgQVNTRVJUKCFtX3dlYnNpdGVE
YXRhU3RvcmUpOwogICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9ICZkYXRhU3RvcmU7CisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgZGF0YVN0b3JlLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50
VG9XZWJQcm9jZXNzKCp0aGlzKTsKKyNlbmRpZgogICAgIHVwZGF0ZVJlZ2lzdHJhdGlvbldpdGhE
YXRhU3RvcmUoKTsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycyhwcm9jZXNzUG9vbCgpLndlYlByb2Nlc3NEYXRhU3RvcmVQYXJhbWV0
ZXJzKCp0aGlzLCBkYXRhU3RvcmUpKSwgMCk7CiB9CkBAIC03MzgsNyArNzQxLDcgQEAgdm9pZCBX
ZWJQcm9jZXNzUHJveHk6OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHVpbnQ2NF90IHBsdWdp
blByb2Nlc3NUb2tlbiwgTWUKIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbihNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQogewotICAgIG1fcHJvY2Vzc1Bvb2wt
PmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOworICAg
IHdlYnNpdGVEYXRhU3RvcmUoKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKnRoaXMsIFdU
Rk1vdmUocmVwbHkpKTsKIH0KIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKQEAgLTk1NSw5ICs5
NTgsOCBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NM
YXVuY2hlciogbGF1bmNoZXIsIElQQzo6Q29ubmVjdAogICAgIH0KIAogI2lmIFBMQVRGT1JNKENP
Q09BKQotICAgIGF1dG8gZW5kcG9pbnRNZXNzYWdlID0gcHJvY2Vzc1Bvb2woKS54cGNFbmRwb2lu
dE1lc3NhZ2UoKTsKLSAgICBpZiAoZW5kcG9pbnRNZXNzYWdlKQotICAgICAgICB4cGNfY29ubmVj
dGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVuZHBvaW50
TWVzc2FnZS5nZXQoKSk7CisgICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAgbV93
ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vz
cygqdGhpcyk7CiAjZW5kaWYKIAogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3dlYkNvbm5lY3Rpb24p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2Ev
V2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4IDdjNDQwODUxNjc3MzY4
YjVkZjg5YTg2ZmY0ZDNiNTE1MzRiOTBiYjcuLmNiOGIzYmFhNGFkMGI1NjgxNTUxNWMwNWUxODEz
NmIzMjRmM2EyZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KQEAgLTI4
LDEwICsyOCwxMiBAQAogCiAjaW1wb3J0ICJDb29raWVTdG9yYWdlVXRpbHNDRi5oIgogI2ltcG9y
dCAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzUHJv
eHkuaCIKICNpbXBvcnQgIlNhbmRib3hVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlN0b3JhZ2VNYW5h
Z2VyLmgiCiAjaW1wb3J0ICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKICNpbXBvcnQg
IldlYlByZWZlcmVuY2VzS2V5cy5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1w
b3J0ICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKICNpbXBvcnQgIldlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vz
c2lvbi5oPgpAQCAtNDQsNiArNDYsNyBAQAogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgor
I2ltcG9ydCA8d3RmL2NvY29hL0VudGl0bGVtZW50cy5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTU2Miw0ICs1NjUs
MjggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWluaXRpYWxpemVBcHBCb3VuZERvbWFpbnMo
KQogfQogI2VuZGlmCiAKK2Jvb2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKK3sKKyAgICBy
ZXR1cm4gV1RGOjpoYXNFbnRpdGxlbWVudChuZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+
eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vz
cyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCit7CisgICAgaWYgKHByb2Nlc3Muc3RhdGUoKSAh
PSBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OlN0YXRlOjpSdW5uaW5nKQorICAgICAgICByZXR1cm47
CisgICAgYXV0byogY29ubmVjdGlvbiA9IHByb2Nlc3MuY29ubmVjdGlvbigpOworICAgIGlmICgh
Y29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gbWVzc2FnZSA9IG5ldHdvcmtQ
cm9jZXNzKCkueHBjRW5kcG9pbnRNZXNzYWdlKCk7CisgICAgaWYgKCFtZXNzYWdlKQorICAgICAg
ICByZXR1cm47CisgICAgeHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNzYWdlKGNvbm5lY3Rpb24tPnhw
Y0Nvbm5lY3Rpb24oKSwgbWVzc2FnZSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2Vu
ZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb0FsbFdlYlByb2Nlc3NlcygpCit7CisgICAgZm9y
IChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCisgICAgICAgIHNlbmROZXR3b3JrUHJvY2Vz
c1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKHByb2Nlc3MpOworfQorCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3Bw
CmluZGV4IDA4MzBjYTc1YTdmYzM4ZTY0NWI3NzViMzliMzM3NWQ0YzIwNTAzN2QuLmUxYmUxOWI3
MWYyNGM0MWNkOWZhMTJhZTg1NGI5ZjM5YTE3MzJlODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0z
MiwxMSArMzIsMTQgQEAKICNpbmNsdWRlICJBdXRoZW50aWNhdG9yTWFuYWdlci5oIgogI2luY2x1
ZGUgIkRldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzc1Byb3h5
LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1vY2tBdXRoZW50aWNhdG9yTWFu
YWdlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKICNpbmNs
dWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRo
ZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1
ZGUgIldlYkJhY2tGb3J3YXJkQ2FjaGUuaCIKKyNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJv
eHkuaCIKICNpbmNsdWRlICJXZWJLaXQySW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQ
cm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDYWNoZS5oIgpAQCAtNzUsNiArNzgsMTAgQEAK
ICNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oIgogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJEZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5oIgorI2Vu
ZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgYm9vbCBhbGxvd3NXZWJzaXRlRGF0
YVJlY29yZHNGb3JBbGxPcmlnaW5zOwpAQCAtODMsMTMgKzkwLDE5IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6YWxsb3dXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zKCkKICAgICBhbGxv
d3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zID0gdHJ1ZTsKIH0KIAotc3RhdGljIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgbm9uRGVmYXVsdERhdGFT
dG9yZXMoKQorc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUq
PiYgYWxsRGF0YVN0b3JlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNVSVRocmVhZCgpKTsK
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0
ZURhdGFTdG9yZSo+PiBtYXA7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAordm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRh
U3RvcmUmKT4mJiBmdW5jdGlvbikKK3sKKyAgICBmb3IgKGF1dG8qIGRhdGFTdG9yZSA6IGFsbERh
dGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICAgICAgZnVuY3Rpb24oKmRhdGFTdG9yZSk7Cit9CisK
IFJlZjxXZWJzaXRlRGF0YVN0b3JlPiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGVOb25QZXJzaXN0
ZW50KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNp
dGVEYXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpObyksIFBBTDo6
U2Vzc2lvbklEOjpnZW5lcmF0ZUVwaGVtZXJhbFNlc3Npb25JRCgpKSk7CkBAIC0xMTUsNyArMTI4
LDcgQEAgV2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURhdGFT
dG9yZUNvbmZpZ3VyYXRpb24+JiYgY29uZmlndXIKICNlbmRpZgogewogICAgIFdURjo6c2V0UHJv
Y2Vzc1ByaXZpbGVnZXMoYWxsUHJpdmlsZWdlcygpKTsKLSAgICBtYXliZVJlZ2lzdGVyV2l0aFNl
c3Npb25JRE1hcCgpOworICAgIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogICAgIHBsYXRm
b3JtSW5pdGlhbGl6ZSgpOwogCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTEy
OCwxNyArMTQxLDEyIEBAIFdlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKCkKIAog
ICAgIHBsYXRmb3JtRGVzdHJveSgpOwogCi0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgQVNTRVJUKG5vbkRlZmF1bHRE
YXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsKLSAgICAgICAgbm9uRGVmYXVs
dERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOwotICAgICAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlU2Vzc2lvbihtX3Nl
c3Npb25JRCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgQVNTRVJUKGFsbERhdGFTdG9yZXMoKS5n
ZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOworICAgIGFsbERhdGFTdG9yZXMoKS5yZW1vdmUobV9z
ZXNzaW9uSUQpOworICAgIG5ldHdvcmtQcm9jZXNzKCkucmVtb3ZlU2Vzc2lvbigqdGhpcyk7CiAj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQotICAgICAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5
ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkKLSAgICAgICAgICAgIGdw
dVByb2Nlc3NQcm94eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgaWYgKGF1dG8q
IGdwdVByb2Nlc3NQcm94eSA9IEdQVVByb2Nlc3NQcm94eTo6c2luZ2xldG9uSWZDcmVhdGVkKCkp
CisgICAgICAgIGdwdVByb2Nlc3NQcm94eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAj
ZW5kaWYKIH0KIApAQCAtMTY5LDE3ICsxNzcsMzUgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkKICAgICByZXR1cm4gISFnbG9iYWxEZWZhdWx0RGF0YVN0
b3JlKCk7CiB9CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNz
aW9uSURNYXAoKQordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURN
YXAoKQogewotICAgIGlmIChtX3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKSB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gbm9uRGVmYXVsdERhdGFTdG9yZXMo
KS5hZGQobV9zZXNzaW9uSUQsIHRoaXMpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwg
cmVzdWx0LmlzTmV3RW50cnkpOworICAgIGF1dG8gcmVzdWx0ID0gYWxsRGF0YVN0b3JlcygpLmFk
ZChtX3Nlc3Npb25JRCwgdGhpcyk7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5p
c05ld0VudHJ5KTsKK30KKworV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhp
c3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQorewor
ICAgIHJldHVybiBhbGxEYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCk7Cit9CisKK05ldHdvcmtQ
cm9jZXNzUHJveHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBp
ZiAoIW1fbmV0d29ya1Byb2Nlc3MpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgaWYg
KG1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgfHwgbV9zZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9u
SUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpkZWZhdWx0TmV0d29ya1Byb2Nlc3MoKnRoaXMpOworICAgICAg
ICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpjcmVhdGUoKnRoaXMpOworICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRT
ZXNzaW9uKCp0aGlzKTsKICAgICB9CisKKyAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7CiB9
CiAKLVdlYnNpdGVEYXRhU3RvcmUqIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVs
dERhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCitOZXR3b3Jr
UHJvY2Vzc1Byb3h5JiBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2VzcygpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25J
RCgpID8gbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklEKSA6IG51bGxwdHI7Cisg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8V2Vic2l0ZURhdGFTdG9yZSY+KCp0aGlzKS5uZXR3b3JrUHJv
Y2VzcygpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyUHJvY2VzcyhXZWJQ
cm9jZXNzUHJveHkmIHByb2Nlc3MpCkBAIC0xOTUsMTIgKzIyMSw2IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6dW5yZWdpc3RlclByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogICAg
IG1fcHJvY2Vzc2VzLnJlbW92ZShwcm9jZXNzKTsKIH0KIAotV2ViUHJvY2Vzc1Bvb2wqIFdlYnNp
dGVEYXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKQotewot
ICAgIGF1dG8gcG9vbHMgPSBwcm9jZXNzUG9vbHMoMSk7Ci0gICAgcmV0dXJuIHBvb2xzLmlzRW1w
dHkoKSA/IG51bGxwdHIgOiBwb29scy5iZWdpbigpLT5nZXQoKTsKLX0KLQogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpCiB7CiAgICAgaWYgKG1f
aGFzUmVzb2x2ZWREaXJlY3RvcmllcykKQEAgLTQ0MCwyOCArNDYwLDIxIEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4g
ZGF0YVR5cGVzLCBPCiAjZW5kaWYKIAogICAgIGF1dG8gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBl
ID0gY29tcHV0ZU5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFGZXRjaChkYXRhVHlwZXMs
ICFpc1BlcnNpc3RlbnQoKSk7Ci0gICAgaWYgKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSAhPSBQ
cm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkgewotICAgICAgICBhdXRvIHBvb2xzID0gbmV0d29ya1By
b2Nlc3NBY2Nlc3NUeXBlID09IFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2ggPyBlbnN1cmVQcm9j
ZXNzUG9vbHMoKSA6IHByb2Nlc3NQb29scygpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcG9vbHMpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NU
eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hl
ZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToK
LSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLQor
ICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBQcm9jZXNz
QWNjZXNzVHlwZTo6TGF1bmNoOgorICAgICAgICBuZXR3b3JrUHJvY2VzcygpOworICAgICAgICBB
U1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2Ug
UHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgorICAgICAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykgewogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2Fs
bGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5mZXRj
aFdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgW2NhbGxi
YWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7Cisg
ICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5mZXRjaFdlYnNpdGVEYXRhKG1fc2Vzc2lvbklE
LCBkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvcl0oV2Vic2l0ZURh
dGEgd2Vic2l0ZURhdGEpIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJl
bW92ZVBlbmRpbmdDYWxsYmFjayhXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgICAgICB9
KTsKICAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBl
OjpOb25lOgorICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBhdXRvIHdlYlByb2Nlc3NBY2Nl
c3NUeXBlID0gY29tcHV0ZVdlYlByb2Nlc3NBY2Nlc3NUeXBlRm9yRGF0YUZldGNoKGRhdGFUeXBl
cywgIWlzUGVyc2lzdGVudCgpKTsKQEAgLTcyNCwzMSArNzM3LDI0IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMs
IFdhbGxUaW1lCiAgICAgYm9vbCBkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0
ZURhdGEgPSBmYWxzZTsKICNlbmRpZgogICAgIGF1dG8gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBl
ID0gY29tcHV0ZU5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFSZW1vdmFsKGRhdGFUeXBl
cywgIWlzUGVyc2lzdGVudCgpKTsKLSAgICBpZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9
IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lKSB7Ci0gICAgICAgIGF1dG8gcG9vbHMgPSBuZXR3b3Jr
UHJvY2Vzc0FjY2Vzc1R5cGUgPT0gUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaCA/IGVuc3VyZVBy
b2Nlc3NQb29scygpIDogcHJvY2Vzc1Bvb2xzKCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwb29scykgewotICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vz
c1R5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5j
aGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25l
OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQot
CisgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIFByb2Nl
c3NBY2Nlc3NUeXBlOjpMYXVuY2g6CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAg
IEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2Fz
ZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6CisgICAgICAgIGlmIChtX25ldHdv
cmtQcm9jZXNzKSB7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdD
YWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmRl
bGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtj
YWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CisgICAgICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmll
ZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwogI2lm
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgICAgICAgICBkaWROb3RpZnlO
ZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEgPSB0cnVlOwogI2VuZGlmCiAgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKKyAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgYXV0byB3ZWJQcm9jZXNzQWNjZXNzVHlwZSA9IGNv
bXB1dGVXZWJQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFSZW1vdmFsKGRhdGFUeXBlcywgIWlzUGVy
c2lzdGVudCgpKTsKQEAgLTg5MywxNCArODk5LDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUK
ICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIGlmIChkYXRhVHlwZXMu
Y29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSkgewogICAg
ICAgICBpZiAoIWRpZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSkgewot
ICAgICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBl
bmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLT5kZWxldGVXZWJz
aXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3It
PnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcygp
LmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2Us
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0
b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0K
IAogICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwpAQCAt
OTk0LDEyICs5OTUsMTAgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3QgVmUKICAgICAgICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQ
cm9jZXNzQWNjZXNzVHlwZSkgewogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6
T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoK
LSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7
CisgICAgICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKICAgICAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKQEAgLTEwMjEs
NyArMTAyMCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAg
ICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGFG
b3JPcmlnaW5zKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1l
cywgSFNUU0NhY2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3IsIHByb2Nlc3NQb29sXSB7CisgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmRlbGV0
ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBvcmlnaW5zLCBj
b29raWVIb3N0TmFtZXMsIEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0cmFibGVEb21haW5zLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0gewogICAgICAgICAgICAgICAgIGNhbGxi
YWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgfQpAQCAtMTE4MCwxOCArMTE3OSwxMiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBW
ZQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVz
dGluZyhTZWNvbmRzIHNlY29uZHMpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdl
YlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNl
cnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKHNlY29uZHMpLCBNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBs
eSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKHNl
Y29uZHMpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRp
bWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpyZXNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZygpCiB7Ci0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSwg
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRG
b3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5k
U3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGlt
ZW91dEZvclRlc3RpbmcoKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VX
b3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKIH0KIAogI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0xMjAxLDggKzExOTQsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBtYXhpbXVtRW50
cnlDb3VudCwgQ29tcGxldAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vz
c2lvbklELCBtYXhpbXVtRW50cnlDb3VudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyht
X3Nlc3Npb25JRCwgbWF4aW11bUVudHJ5Q291bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVf
dCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xMjExLDggKzEyMDMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCwgQ29tcGxldGlvbgog
ICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFy
Z2V0Q291bnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1fc2Vzc2lvbklELCBwcnVuZVRh
cmdldENvdW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMjEsOCArMTIxMiw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMg
c2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdU
aW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyaW5nVGltZShtX3Nl
c3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwo
U2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xMjMxLDIwICsxMjIxLDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcywKIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5zZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9u
SUQsIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFs
KG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogICAg
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+ZHVt
cFJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1By
ZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wgaXNQcmV2YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI1NiwxMiArMTIzOSw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwm
IHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICAgICAgcHJvY2Vzcy0+aXNQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5pc1ByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wgaXNQcmV2YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTI3MywxMiArMTI1MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVk
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLmlzR3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjky
LDggKzEyNjUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNl
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVBy
b2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KS5zZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRl
YnVnTW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTMwNywxMCArMTI3OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9j
ZXNzLT5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVz
b3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCBpc1ZlcnlQcmV2YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTMyMiwxMiArMTI5MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzVmVyeVByZXZhbGVudFJl
c291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzVmVyeVByZXZhbGVudFJlc291cmNlKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVBy
ZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzQxLDEwICsxMzA1LDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGUKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jk
c1JlbW92YWwoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTM1Myw4ICsxMzE0LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHYK
ICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jk
c1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3QgVVJMJiB0
b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTM2OCwyMiArMTMyOCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZy
YW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjbwogCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJh
bWVVbmRlcihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVV
UkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YkZy
YW1lVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJh
bWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkws
IGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTEzOTcsMjMgKzEzNDksMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJyZXNv
dXJjZVUKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVV
UkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgVVJMJiBzdWJyZXNvdXJj
ZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwg
fSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNS
ZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBV
UkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQyNywxMCArMTM3MCw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRv
KGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
RnJvbShjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRG
cm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
NDQyLDEyICsxMzgyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJlc291cmNlVVIKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJv
Y2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJM
JiB0b3BGcmFtZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NTksMTIgKzEzOTQsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBV
UkwmIHRvcEZyYW1lVVJMLCBjb25zdAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVk
VG8gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0
ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xNDc2LDI1ICsxNDA2LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVj
dGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFVSTCYgdXJsUmVk
aXJlY3RlZEZyb20sIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzUmVkaXJl
Y3RpbmdUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRp
cmVjdGVkRnJvbSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRU
byB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291
cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xNTA2LDYwICsxNDI1LDQxIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgcHJvY2Vzcy0+Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJQcmV2YWxl
bnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5y
ZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0
cnkoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9j
ZXNzLT5zdWJtaXRUZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkuc3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3Rl
bnQoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIHNo
b3VsZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDbGVhckluTWVt
b3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRm
YXRoZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9z
ZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UsIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBz
dHJ1Y3QgQ2FsbGJhY2tBZ2dyZWdhdG9yIDogUmVmQ291bnRlZDxDYWxsYmFja0FnZ3JlZ2F0b3I+
IHsKLSAgICAgICAgQ2FsbGJhY2tBZ2dyZWdhdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVj
dG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQorICAgIHN0cnVjdCBMb2NhbENhbGxiYWNrQWdncmVnYXRvciA6
IFJlZkNvdW50ZWQ8TG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3I+IHsKKyAgICAgICAgTG9jYWxDYWxs
YmFja0FnZ3JlZ2F0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiAgICAgICAgICAgICA6IG1fY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CiAgICAgICAgIH07CiAKLSAgICAgICAgfkNhbGxiYWNrQWdncmVnYXRvcigpCisgICAgICAg
IH5Mb2NhbENhbGxiYWNrQWdncmVnYXRvcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTE1NzQsMzggKzE0NzQsMzEgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkoQ29tcGxl
dGlvbkhhbmRsZXI8dm8KICAgICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+IG1fY29tcGxl
dGlvbkhhbmRsZXI7CiAgICAgICAgIFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OlRoaXJkUGFydHlEYXRhPiBtX3Jlc3VsdHM7CiAgICAgfTsKLQotICAgIFJlZlB0cjxDYWxs
YmFja0FnZ3JlZ2F0b3I+IGNhbGxiYWNrQWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBDYWxsYmFj
a0FnZ3JlZ2F0b3IoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKLQotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNz
UG9vbC0+c2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvcl0gewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRo
aXMpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShtX3Nlc3Npb25JRCwgW2Nh
bGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmIGRhdGEpIHsKLSAgICAgICAgICAgICAgICBj
YWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFJlc3VsdChXVEZNb3ZlKGRhdGEpKTsKLSAgICAgICAgICAg
IH0pOworICAgIAorICAgIGF1dG8gbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IgPSBhZG9wdFJlZihu
ZXcgTG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsK
KyAgICAKKyAgICBhdXRvIHd0ZkNhbGxiYWNrQWdncmVnYXRvciA9IFdURjo6Q2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgbG9j
YWxDYWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQsIFtsb2NhbENhbGxiYWNr
QWdncmVnYXRvcl0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQ
YXJ0eURhdGE+JiYgZGF0YSkgeworICAgICAgICAgICAgbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3It
PmFkZFJlc3VsdChXVEZNb3ZlKGRhdGEpKTsKICAgICAgICAgfSk7Ci0gICAgfQorICAgIH0pOwor
ICAgIAorICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJv
Y2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFJbW1lZGlhdGVseShbd3RmQ2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQo
U2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIHNob3VsZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgcHJvY2Vzcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25J
RCwgeyB9LCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVDbGVhckluTWVt
b3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgeyB9LCBzaG91bGRHcmFuZGZhdGhlciwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNj
aGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBwcm9jZXNzLT5zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKG1fc2Vzc2lvbklELCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKG1fc2Vzc2lvbklELCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxl
U3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjE0LDI0ICsxNTA3LDEzIEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5n
KENvbXBsZXRpb25IYW5kCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3Np
bmcobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNv
cmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPnN0YXRpc3Rp
Y3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29t
cGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc3RhdGlzdGljc0Rh
dGFiYXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1
cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTY0MywyMiArMTUyNSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldExhc3RTZWVuKGNvbnN0IFVSTCYgdXJsLCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25I
YQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldExh
c3RTZWVuKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBz
ZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRMYXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2Uo
aW50IGRvbWFpbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJv
Y2Vzcy0+ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKG1fc2Vzc2lvbklELCBkb21haW5JRCwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kb21haW5JREV4aXN0c0luRGF0YWJhc2UobV9z
ZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYg
dXJsLCBjb25zdCBVUkwmIHRvcEZyYW1lVXJsMSwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDIsIFNl
Y29uZHMgbGFzdFNlZW4sIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBTZWNvbmRzIG1vc3RSZWNl
bnRVc2VySW50ZXJhY3Rpb24sIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBib29sIGlzUHJldmFsZW50
LCBib29sIGlzVmVyeVByZXZhbGVudCwgdW5zaWduZWQgZGF0YVJlY29yZHNSZW1vdmVkLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjcwLDEwICsx
NTQ0LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3Rpbmco
Y29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9wRnIKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5tZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwxIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNl
bnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVBy
ZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5tZXJnZVN0YXRpc3RpY0Zv
clRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwxIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJh
Y3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQcmV2
YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRT
dGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGhhZFVzZXJJbnRlcmFjdGlv
biwgYm9vbCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBib29sIGlzUHJl
dmFsZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xNjg1LDE4ICsxNTU2LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJl
ZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaGFkCiAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+aW5zZXJ0RXhwaXJlZFN0YXRp
c3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmluc2VydEV4cGlyZWRTdGF0aXN0aWNG
b3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWwsIGlzUHJldmFsZW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQo
Ym9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKS5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKG1f
c2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVGVzdChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xNzA0LDggKzE1NzEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBsZQog
ICAgIHVzZUV4cGxpY2l0SVRQU3RhdGUoKTsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5p
bmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3Rv
cmFnZUFjY2Vzc0VudHJpZXMoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJiBkb21haW5zKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE3MTYsNyArMTU4Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxs
U3RvcmFnZUFjY2Vzc0VudHJpZXMoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQsCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICB3ZWJQYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2wo
KS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1fc2Vz
c2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiAKQEAgLTE3MjQsOCArMTU5MCw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzIHNlY29uZHMsIENv
bXBsZXRpb25ICiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKG1f
c2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgc2Vj
b25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MzksMTAgKzE2MDQsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZAogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkubG9nVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlv
bihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE3NTQsMTMgKzE2MTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5oYXNIYWRV
c2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNl
T25jZShjb25zdCBVUkwmIHN1YlVybCwgY29uc3QgVVJMJiB0b3BVcmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzcyLDEzICsxNjI4LDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25j
ZShjb25zdCBVUkwmIHN1YlVybCwgY29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgcHJvY2Vzcy0+aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFu
ZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlbGF0aW9uc2hpcE9ubHlJbkRh
dGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJV
cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlcklu
dGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xNzkyLDEwICsxNjQyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm8KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+Y2xlYXJVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkuY2xlYXJVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVy
bCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTE4MDksMTAgKzE2NTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVk
LCBDbwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJv
Y2Vzcy0+c2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyZWQobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODIxLDEwICsxNjY1LDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRVc2VJVFBE
YXRhYmFzZShtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3Jh
dGlvbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmcm9tVVJMLCBjb25zdCBVUkwmIHRvVVJMLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODMzLDYyICsx
Njc0LDM4IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5r
RGVjb3JhdGlvbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmCiAgICAgCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRDcm9zc1NpdGVMb2FkV2l0aExp
bmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9VUkwgfSwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3Rpbmco
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhM
aW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNv
cmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtE
ZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyhj
b25zdCBVUkwmIHVybCwgYm9vbCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmRlbGV0ZUNvb2tp
ZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpbmNsdWRlSHR0cE9u
bHlDb29raWVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzTG9jYWxTdG9yYWdlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29t
cGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzTG9jYWxTdG9y
YWdlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFz
SXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNJc29sYXRlZFNlc3Npb24obV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9u
SGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNJc29sYXRlZFNlc3Npb24o
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGJvb2wg
ZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5zZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoZW5hYmxlZCwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoZW5hYmxlZCwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKQEAgLTE5MTksMTAgKzE3
MzYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9ja2lu
Z01vZGUoV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZQogICAgICAgICAgICAgd2ViUHJvY2Vzcy5z
ZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0
VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50Rm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE5MzAsMTAgKzE3NDQsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0
RW5mb3JjZQogICAgIGF1dG8gZmxhZyA9IGVuYWJsZWQgPyBXZWJDb3JlOjpTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50RW5hYmxlZDo6WWVzIDogV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudEVuYWJsZWQ6Ok5vOwogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudEZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZsYWcsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0
cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKGJv
b2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTk0MSwyMCArMTc1MiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZQogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIGF1dG8gbW9kZSA9IGVuYWJsZWQgPyBXZWJDb3Jl
OjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llcyA6IFdlYkNv
cmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpOb25lOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9y
VGVzdGluZyhtX3Nlc3Npb25JRCwgbW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFs
TW9kZUZvclRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFRvU2Ft
ZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3Rpbmco
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKGNvbnN0
IFVSTCYgZmlyc3RQYXJ0eVVSTCwgY29uc3QgVVJMJiBjbmFtZVVSTCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk2Niw4ICsxNzcxLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eUhv
c3RDTkFNRURvbWFpbkZvclRlc3QKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9t
YWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmco
KSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eUhvc3RDTkFN
RURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZpcnN0UGFydHlVUkwuaG9zdCgpLnRvU3Ry
aW5nKCksIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhjb25zdCBVUkwm
IGNuYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xOTc5LDE4ICsxNzgzLDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcoCiAKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCkuc2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVz
dGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3Rv
cmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0
b3JhZ2UoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5j
TG9jYWxTdG9yYWdlKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhT
ZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE5OTgsOCArMTc5Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2Fj
aGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDCiAjaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldENhY2hlTWF4
QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VD
YXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzZWNvbmRzKTsKICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMjAwOSwyNiArMTgwNywxMiBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMg
c2Vjb25kcywgQwogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENhY2hlTWF4QWdlQ2FwRm9y
UHJldmFsZW50UmVzb3VyY2VzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5yZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJl
c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
ICNlbmRpZgogfQogCi1ib29sIFdlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQ
b29sKFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byog
cHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPSBwcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCkpCi0g
ICAgICAgIHJldHVybiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9PSB0aGlzOwotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgcmV0dXJuIG5ldHdvcmtQcm9jZXNzUHJveHktPmhhc1Nlc3Npb24obV9zZXNzaW9uSUQp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+
PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBjb25zdAogewog
ICAgIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gcHJvY2Vzc1Bvb2xzOwpAQCAtMjA0
Myw5ICsxODI3LDYgQEAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0
YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBjb24KICAgICBpZiAocHJvY2Vzc1Bv
b2xzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBvbmUgb2YgdGhlIGxl
Z2FjeSBkYXRhIHN0b3Jlcy4KICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlBy
b2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYgKCFpc0Fzc29j
aWF0ZWRQcm9jZXNzUG9vbCgqcHJvY2Vzc1Bvb2wpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotCiAgICAgICAgICAgICBwcm9jZXNzUG9vbHMuYWRkKHByb2Nlc3NQb29sKTsKICAgICAgICAg
ICAgIGlmIChwcm9jZXNzUG9vbHMuc2l6ZSgpID09IGxpbWl0KQogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMjA4NCw4ICsxODY1LDcgQEAgc3RhdGljIFN0cmluZyBjb21wdXRlTWVkaWFLZXlG
aWxlKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlEaXJlY3RvcnkpCiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNlcnRp
ZmljYXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpB
bGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmlj
YXRlSW5mbygpLCBob3N0KSwgMCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNl
cnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOwogfQogCiBWZWN0b3I8V2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBXZWJzaXRlRGF0YVN0b3JlOjptZWRpYUtleU9yaWdp
bnMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KQpAQCAtMjE0MCw2ICsx
OTIwLDQ3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0
cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwKICAgICB9CiB9CiAKK3ZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYg
d2ViUHJvY2Vzc1Byb3h5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbkluZm8mKT4mJiByZXBseSkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgd2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2Vi
UHJvY2Vzc1Byb3h5KSwgcmVwbHkgPSBXVEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25J
bmZvKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246Omlk
ZW50aWZpZXJJc1ZhbGlkKGNvbm5lY3Rpb25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vz
c1Byb3h5ICYmIHdlYWtUaGlzKSkgeworICAgICAgICAgICAgdGVybWluYXRlTmV0d29ya1Byb2Nl
c3MoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lGKGlzUGVyc2lzdGVudCgpLCBQcm9jZXNz
LCAiZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOiBGYWlsZWQgZmlyc3QgYXR0ZW1wdCwgcmV0
cnlpbmciKTsKKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKCp3ZWJQcm9jZXNzUHJveHksIFdURk1vdmUocmVwbHkpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7CisgICAg
fSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5l
dHdvcmtQcm9jZXNzUHJveHkmKQoreworICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOwor
fQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKK3sK
KyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIHJldHVybjsKKyAgICBtX25ldHdv
cmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsKKyAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsK
K30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9T
dXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJlcGFyZVRvU3VzcGVuZChJc1N1
c3BlbnNpb25JbW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwor
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHlGb3JUZXN0aW5nKCkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcm9jZXNzV2ls
bFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpCit7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOworfQorCiBib29sIFdlYnNpdGVEYXRhU3RvcmU6OnJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjE2OSwxNyArMTk5MCwxNSBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkK
ICAgICAgICAgCiAgICAgICAgIHJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7CiAgICAg
ICAgIAotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vz
c2lvbklELCB0cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lv
bklELCB0cnVlKSwgMCk7CisgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkKICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXNGb3JT
ZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZCh0cnVlKSwgbV9zZXNzaW9uSUQpOwotICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQs
IGZhbHNlKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIGZhbHNl
KSwgMCk7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAg
ICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihNZXNzYWdlczo6
V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZmFsc2UpLCBtX3Nl
c3Npb25JRCk7Ci0gICAgfQogCiAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCA9
IGZhbHNlOwogI2Vsc2UKQEAgLTIxOTEsOCArMjAxMCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKEZ1bmN0aW9uPHZv
aWQoY29uc3QgU3RyaW5nJik+JiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKGNhbGxiYWNrKSB7Ci0g
ICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQodHJ1ZSkp
OworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpLCAwKTsKICAg
ICB9CiAgICAgCiAgICAgbV9zdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayk7CkBAIC0yMjExLDggKzIwMjksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGVkLCBDb21wbGV0aQogCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKG1fc2Vzc2lvbklE
LCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShtX3Nlc3Npb25JRCwgZW5hYmxl
ZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGVu
YWJsZWQpOwogICAgIFVOVVNFRF9QQVJBTShjb21wbGV0aW9uSGFuZGxlcik7CkBAIC0yMjI3LDIw
ICsyMDQ0LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRXBoZW1lcmFsKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5pc1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgorICAgIG5ldHdv
cmtQcm9jZXNzKCkuaXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vzc2lvbklE
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisjZWxzZQogICAgIGNvbXBsZXRpb25IYW5k
bGVyKGZhbHNlKTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShib29sIGVuYWJsZWQpCiB7Ci0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoZW5hYmxlZCk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoZW5h
YmxlZCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjI2
Miw0OCArMjA3NCwxOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0luV2ViUHJvY2Vzc2VzKENvbXBsZXRpb25IYW5kbAogfQogI2VuZGlmCiAKLVZl
Y3RvcjxXZWJDb3JlOjpDb29raWU+IFdlYnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gY29weVRvVmVjdG9yKG1fcGVuZGluZ0Nvb2tpZXMpOwotfQot
Ci12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFkZFBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6
Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmVJZihbJmNvb2tp
ZV0oYXV0byYgcGVuZGluZ0Nvb2tpZSkgewotICAgICAgICByZXR1cm4gcGVuZGluZ0Nvb2tpZS5p
c0tleUVxdWFsKGNvb2tpZSk7Ci0gICAgfSk7Ci0gICAgbV9wZW5kaW5nQ29va2llcy5hZGQoY29v
a2llKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKGNv
bnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMucmVt
b3ZlKGNvb2tpZSk7Ci19Ci0gICAgCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUGVuZGlu
Z0Nvb2tpZXMoKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMuY2xlYXIoKTsKLX0KLQogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
IGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMo
KSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmZsdXNoQ29va2llcyhzZXNzaW9uSUQoKSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmZsdXNoQ29va2llcyhz
ZXNzaW9uSUQoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJvb2wg
YWxsb3dzKQogewotICAgIGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjph
bGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRp
ZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQ6OlJlcGx5KCksIDApOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwgTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldDo6
UmVwbHkoKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVk
ZW50aWFscygpCiB7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6
OmFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+Y2xlYXJDYWNoZWRDcmVk
ZW50aWFscyhzZXNzaW9uSUQoKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9uSUQoKSksIDAp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2
b2lkKCk+JiYgZnVuY3Rpb24pCkBAIC0yMzI5LDggKzIxMTIsNiBAQCBXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKIAogICAgIHJlc29sdmVE
aXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7CiAKLSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVz
ID0gcGVuZGluZ0Nvb2tpZXMoKTsKLQogICAgIGF1dG8gcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eSgpOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5SGFuZGxlOwogICAgIGlmICghcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eS5pc0VtcHR5KCkpCkBAIC0yNDM1LDcgKzIyMTYsMTAgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAgICAgcGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5h
YmxlZCA9IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ7CiAjZW5kaWYKICAgICBwbGF0
Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwotCisjaWYgUExBVEZPUk0oQ09D
T0EpCisgICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVz
dGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJz
aXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7CisjZW5kaWYKKyAgICAKICAgICByZXR1cm4gcGFyYW1l
dGVyczsKIH0KIApAQCAtMjQ2NSwxMCArMjI0OSw2IEBAIEFQSTo6SFRUUENvb2tpZVN0b3JlJiBX
ZWJzaXRlRGF0YVN0b3JlOjpjb29raWVTdG9yZSgpCiAgICAgcmV0dXJuICptX2Nvb2tpZVN0b3Jl
OwogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCkK
LXsKLX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1
bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0
YWlscz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFpc1BlcnNpc3RlbnQo
KSkgewpAQCAtMjQ3NiwyMyArMjI1NiwxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldExv
Y2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3Vy
ZVByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2Vzcyh0aGlzKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWlscykpOwotICAgICAg
ICB9KTsKLSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgZmV0Y2hpbmcgZnJvbSBtdWx0aXBsZSBw
b29scy4KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIEFTU0VSVCghY29tcGxldGlvbkhhbmRs
ZXIpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0TG9jYWxTdG9yYWdlRGV0YWlscyhtX3Nlc3Np
b25JRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1
dG8mJiBkZXRhaWxzKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWls
cykpOworICAgIH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UXVvdGEoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+cmVzZXRRdW90YShtX3Nlc3Npb25J
RCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiAjaWYgIVBMQVRGT1JNKENPQ09BKQpAQCAtMjUxOCw3ICsyMjkwLDEyIEBAIGJvb2wgV2Vic2l0
ZURhdGFTdG9yZTo6aHR0cDNFbmFibGVkKCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9Ci0jZW5k
aWYKKworYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50
Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRp
ZiAvLyAhUExBVEZPUk0oQ09DT0EpCiAKICNpZiAhVVNFKEdMSUIpCiBXVEY6OlN0cmluZyBXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkK
QEAgLTI1MzAsMzUgKzIzMDcsMTggQEAgV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpCiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiBvbGROYW1lLCBVUkwmJiBu
ZXdOYW1lLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6
OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+YWRkU2Vzc2lvbigqdGhpcyk7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVu
YW1lT3JpZ2luSW5XZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgZGF0
YVR5cGVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgICAgICB9Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkucmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwg
b2xkTmFtZSwgbmV3TmFtZSwgZGF0YVR5cGVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6Omhhc0FwcEJvdW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
Pmhhc0FwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRp
b25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0FwcEJvdW5kU2Vzc2lv
bihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jbGVhckFwcEJvdW5kU2Vzc2lvbiht
X3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTI1ODAsNyArMjM0MCw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFs
aXplZChDb21wbGV0aW9uSGFuZGxlCiAKICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoZ2xv
YmFsRGVmYXVsdERhdGFTdG9yZSgpLmdldCgpLCAqYXBwQm91bmREb21haW5zKTsKIAotICAgIGZv
ciAoYXV0byogc3RvcmUgOiBub25EZWZhdWx0RGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgIGZv
ciAoYXV0byogc3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkpCiAgICAgICAgIHByb3Bh
Z2F0ZUFwcEJvdW5kRG9tYWlucyhzdG9yZSwgKmFwcEJvdW5kRG9tYWlucyk7CiB9CiAKQEAgLTI1
ODgsMTAgKzIzNDgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWlu
c0ZvcklUUChjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYgogewogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEFwcEJv
dW5kRG9tYWluc0ZvclJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2V0QXBwQm91bmREb21haW5zRm9yUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwg
ZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRpZgogCkBAIC0yNTk5
LDE2ICsyMzU2LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRp
ZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3QgU3RyaW5nJiBidW5kCiB7CiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnVwZGF0
ZUJ1bmRsZUlkZW50aWZpZXIoYnVuZGxlSWRlbnRpZmllciwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoYnVuZGxl
SWRlbnRpZmllciwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpjbGVhckJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY2xlYXJC
dW5kbGVJZGVudGlmaWVyKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEv
V2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEv
V2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4IDBkYzkxZjIzYzQxNTQzOTVjOGViZjg5MGYzNWJkMDE4
MGNkNTFhYWQuLjQxMGJlMWM5NzIxODI5ZWRmZWFjZGI3ZjQzMjZhNmFkZDg4NGY4NGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmgKQEAgLTUzLDYgKzUzLDggQEAKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1
ZGUgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRy
Lmg+CisjaW5jbHVkZSA8d3RmL3NwaS9kYXJ3aW4vWFBDU1BJLmg+CiAjZW5kaWYKIAogI2lmIFVT
RShDVVJMKQpAQCAtNzUsNiArNzcsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEF1dGhl
bnRpY2F0b3JNYW5hZ2VyOwogY2xhc3MgU2VjS2V5UHJveHlTdG9yZTsKIGNsYXNzIERldmljZUlk
SGFzaFNhbHRTdG9yYWdlOworY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94eTsKIGNsYXNzIFNPQXV0
aG9yaXphdGlvbkNvb3JkaW5hdG9yOwogY2xhc3MgV2ViQ2VydGlmaWNhdGVJbmZvOwogY2xhc3Mg
V2ViUGFnZVByb3h5OwpAQCAtODQsNiArODcsOCBAQCBjbGFzcyBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU7CiBlbnVtIGNsYXNzIENhY2hlTW9kZWwgOiB1aW50OF90OwogZW51bSBjbGFz
cyBXZWJzaXRlRGF0YUZldGNoT3B0aW9uIDogdWludDhfdDsKIGVudW0gY2xhc3MgV2Vic2l0ZURh
dGFUeXBlIDogdWludDMyX3Q7CisKK3N0cnVjdCBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZv
Owogc3RydWN0IFdlYnNpdGVEYXRhUmVjb3JkOwogc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzOwogCkBAIC0xMDksNyArMTE0LDEyIEBAIHB1YmxpYzoKICAgICBXZWJzaXRlRGF0YVN0
b3JlKFJlZjxXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbj4mJiwgUEFMOjpTZXNzaW9uSUQp
OwogICAgIH5XZWJzaXRlRGF0YVN0b3JlKCk7CiAKLSAgICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9y
ZSogZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklE
KTsKKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lk
KFdlYnNpdGVEYXRhU3RvcmUmKT4mJik7CisgICAgCisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYg
bmV0d29ya1Byb2Nlc3MoKSBjb25zdDsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3Jr
UHJvY2VzcygpOworCisgICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nRGF0YVN0
b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEKTsKIAogICAgIGJvb2wgaXNQZXJzaXN0ZW50
KCkgY29uc3QgeyByZXR1cm4gIW1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCk7IH0KICAgICBQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQpAQCAt
MTE5LDYgKzEyOSwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgV2Vha0hhc2hTZXQ8V2Vi
UHJvY2Vzc1Byb3h5PiYgcHJvY2Vzc2VzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzZXM7IH0K
IAorICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5m
byYpPiYmKTsKKyAgICB2b2lkIHRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgdm9pZCBz
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5Rm9yVGVzdGluZygpOworICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVz
dW1lKCk7CisgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94
eSYpOworICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxG
b3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1
bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQorICAgIGJvb2wgc2hvdWxkTWFrZU5leHROZXR3
b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRN
YWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmc7IH0KKwogICAgIGJvb2wg
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wpOwogICAgIGJvb2wgcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZSgpIGNvbnN0OwpAQCAtMjM1LDE1ICsyNTQsOCBAQCBwdWJsaWM6CiAK
ICAgICBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSYgZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKSB7
IHJldHVybiBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlLmdldCgpOyB9CiAKLSAgICBXZWJQcm9j
ZXNzUG9vbCogcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGJv
b2wgaXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmKSBjb25zdDsKLQogICAg
IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHBhcmFtZXRlcnMoKTsKIAotICAgIFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29raWVzKCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRQZW5k
aW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwotICAgIHZvaWQgcmVtb3ZlUGVuZGlu
Z0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIGNsZWFyUGVuZGluZ0Nv
b2tpZXMoKTsKICAgICB2b2lkIGZsdXNoQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwogICAgIHZvaWQgY2xlYXJDYWNoZWRDcmVkZW50aWFscygpOwogCkBAIC0yNTEsNiArMjYz
LDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQo
KT4mJik7CiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vz
c1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYpOworICAgIHZvaWQgc2Vu
ZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb0FsbFdlYlByb2Nlc3NlcygpOworI2VuZGlmCisK
ICNpZiBVU0UoQ1VSTCkKICAgICB2b2lkIHNldE5ldHdvcmtQcm94eVNldHRpbmdzKFdlYkNvcmU6
OkN1cmxQcm94eVNldHRpbmdzJiYpOwogICAgIGNvbnN0IFdlYkNvcmU6OkN1cmxQcm94eVNldHRp
bmdzJiBuZXR3b3JrUHJveHlTZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fcHJveHlTZXR0aW5n
czsgfQpAQCAtMjcyLDggKzI4OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1vY2tXZWJBdXRo
ZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24oV2ViQ29yZTo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29u
ZmlndXJhdGlvbiYmKTsKICNlbmRpZgogCi0gICAgdm9pZCBkaWRDcmVhdGVOZXR3b3JrUHJvY2Vz
cygpOwotCiAgICAgY29uc3QgV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3Vy
YXRpb24oKSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24uZ2V0KCk7IH0KIAogICAgIFdlYnNpdGVE
YXRhU3RvcmVDbGllbnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50LmdldCgpOyB9CkBAIC0y
ODMsNiArMjk4LDggQEAgcHVibGljOgogCiAgICAgdm9pZCByZW5hbWVPcmlnaW5JbldlYnNpdGVE
YXRhKFVSTCYmLCBVUkwmJiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBib29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1l
bnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpOworCiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRB
VElPTikKICAgICBXZWJEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXIm
IGRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcigpIHsgcmV0dXJuIG1f
ZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyOyB9CiAjZW5kaWYKQEAg
LTM1OSw3ICszNzYsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5
cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksIFdhbGxUaW1lIG1vZGlm
aWVkU2luY2UpOwogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcm
IG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksIGNvbnN0IEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhPiYpOwogCi0gICAgdm9pZCBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1h
cCgpOworICAgIHZvaWQgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAKICNpZiBFTkFCTEUo
QVBQX0JPVU5EX0RPTUFJTlMpCiAgICAgc3RhdGljIE9wdGlvbmFsPEhhc2hTZXQ8V2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4+PiBhcHBCb3VuZERvbWFpbnNJZkluaXRpYWxpemVkKCk7CkBAIC0z
ODEsNiArMzk4LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQgeyBmYWxzZSB9OwogICAgIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcm
KT4gbV9zdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrOwogI2VuZGlmCisgICAgYm9vbCBtX3Nob3Vs
ZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyB7IGZhbHNlIH07CiAK
ICAgICBSZWY8V29ya1F1ZXVlPiBtX3F1ZXVlOwogCkBAIC0zOTcsOCArNDE1LDYgQEAgcHJpdmF0
ZToKICAgICBib29sIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCB7IHRydWUg
fTsKICNlbmRpZgogCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1fcGVuZGluZ0Nvb2tp
ZXM7Ci0gICAgCiAgICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3NlczsK
IAogICAgIGJvb2wgbV9pc0l0cFN0YXRlRXhwbGljaXRseVNldCB7IGZhbHNlIH07CkBAIC00MTks
NiArNDM1LDcgQEAgcHJpdmF0ZToKICAgICBVbmlxdWVSZWY8V2Vic2l0ZURhdGFTdG9yZUNsaWVu
dD4gbV9jbGllbnQ7CiAKICAgICBSZWZQdHI8QVBJOjpIVFRQQ29va2llU3RvcmU+IG1fY29va2ll
U3RvcmU7CisgICAgUmVmUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7
CiAKICNpZiBIQVZFKEFQUF9TU08pCiAgICAgVW5pcXVlUmVmPFNPQXV0aG9yaXphdGlvbkNvb3Jk
aW5hdG9yPiBtX3NvQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRh
U3RvcmVDdXJsLmNwcAppbmRleCAwZTBjMDZlMWRlZDQyYzE0YjgwMmUxNTg5ZjMxZGM2Mjk4MmFj
MzkzLi42NGI2Yzc0ZDA4NmVjNDViYjYyZGE2ZWUwODIyM2IyOGRiNzNhNTdjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3Rv
cmVDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJs
L1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcApAQCAtNDIsOCArNDIsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKFdlYkNvcmU6OkN1cmxQcm94eVNldHRp
bmdzJiYgcHJveAogewogICAgIG1fcHJveHlTZXR0aW5ncyA9IFdURk1vdmUocHJveHlTZXR0aW5n
cyk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fc2Vzc2lvbklELCBtX3Byb3h5U2V0
dGluZ3MpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX3Nlc3Npb25JRCwgbV9wcm94eVNldHRpbmdz
KSwgMCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKaW5kZXggMTJm
OWNkODE5YjZkY2NhOGFjNTA5MmEzMGRkOTNjNTNiOGVlOTM0Mi4uNmY5NjNmMTQyMTAwNDc1OGUy
ZDY1ZWQ5NjI2ZTJhNDlhM2Y0ZjkxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5j
cHAKQEAgLTM5LDggKzM5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5l
dHdvcmtQYXJhbWV0ZXJzKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJgogICAgIGF1dG8mIG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzOwogICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0
b3JhZ2VFbmFibGVkID0gbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkOwogCi0g
ICAgaWYgKGF1dG8qIHByb2Nlc3NQb29sID0gcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5h
Z2VyUHJveHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSht
X3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlUGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
VHlwZSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRp
YWxTdG9yYWdlRW5hYmxlZChib29sIGVuYWJsZWQpCkBAIC01Miw4ICs1MSw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChib29s
IGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcGVyc2lzdGVudENyZWRlbnRpYWxT
dG9yYWdlRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3Jh
Z2VFbmFibGVkKG1fc2Vzc2lvbklELCBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJs
ZWQpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKG1fc2Vzc2lvbklELCBtX3Bl
cnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQpLCAwKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlBy
b2Nlc3NQcm94eUdMaWIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9j
ZXNzUHJveHlHTGliLmNwcAppbmRleCAwYTg0YTc1OTBkOWE5ODViZmM5OTY4NGE0ODk1MTM3NGU1
YjI5NDI5Li4yN2YyM2VhMDY1ZGM3NWNlNGE4MjcwYzU3NmVhMmFhNTVhYjBkYzhmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5j
cHAKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1
bmNoT3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGwKICAgICAgICAgaWYg
KCFkYXRhU3RvcmUpIHsKICAgICAgICAgICAgIC8vIFByZXdhcm1lZCBwcm9jZXNzZXMgZG9uJ3Qg
aGF2ZSBhIFdlYnNpdGVEYXRhU3RvcmUgeWV0LCBzbyB1c2UgdGhlIHByaW1hcnkgV2Vic2l0ZURh
dGFTdG9yZSBmcm9tIHRoZSBXZWJQcm9jZXNzUG9vbC4KICAgICAgICAgICAgIC8vIFRoZSBwcm9j
ZXNzIHdvbid0IGJlIHVzZWQgaWYgY3VycmVudCBXZWJzaXRlRGF0YVN0b3JlIGlzIGRpZmZlcmVu
dCB0aGFuIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IG9uZS4KLSAgICAgICAgICAgIGRhdGFT
dG9yZSA9IG1fcHJvY2Vzc1Bvb2wtPndlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICAgICAgICAgIGRh
dGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIEFTU0VSVChkYXRhU3RvcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAK
aW5kZXggOWY3YmUzYzk0MWI2Y2QwYTFiOTRjYjEzNjA5OGYzYTA0MWNlZmY5OS4uYWMwNGUzOGE1
N2IyMTU5YmViNDJmMzg0NzliNDRmNWUyNmRlZGJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCkBA
IC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29va2ll
TWFuYWdlclByb3h5LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5j
bHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bv
b2wuaCIKIApAQCAtMzMsOCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKLSAgICBtX2Nvb2tpZVBlcnNpc3RlbnRT
dG9yYWdlTWFwLnNldChzZXNzaW9uSUQsIHN0ZDo6bWFrZV9wYWlyKHN0b3JhZ2VQYXRoLCBzdG9y
YWdlVHlwZSkpOwotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNz
aW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOworICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRo
LCBzdG9yYWdlVHlwZSksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0
Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcm
IHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlJiBzdG9yYWdlVHlw
ZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJv
Y2Vzc1Bvb2xTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vz
c1Bvb2xTb3VwLmNwcAppbmRleCBiZmJiZjk2NjRlNDgzNTMwOTcwOTcxMWRmZDZjMTM0MTU3MzJi
ZGFjLi43ZmU0YWNhMGM1ZDJkMGU3ZmMwZDlkNWE0ZmEyN2ViY2M4MGE2NzVkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCkBA
IC0zNywzMCArMzcsMjQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewotICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25Q
YXJhbWV0ZXJzJiBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICBzdXBwbGVt
ZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uo
ZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0
ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJz
LmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7Ci0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9y
ZSkKLSAgICAgICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFs
U3RvcmFnZUVuYWJsZWQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlcnNpc3RlbnRDcmVkZW50aWFs
U3RvcmFnZUVuYWJsZWQoKTsKKyAgICAvLyBGSVhNRTogbV9pbml0aWFsSFRUUENvb2tpZUFjY2Vw
dFBvbGljeSBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCisgICAgLy8g
RklYTUU6IG1faWdub3JlVExTRXJyb3JzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURh
dGFTdG9yZSBvciByZW1vdmVkLgorICAgIC8vIEZJWE1FOiBtX25ldHdvcmtQcm94eVNldHRpbmdz
IHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KIAotICAgIHBhcmFtZXRl
cnMuY29va2llQWNjZXB0UG9saWN5ID0gbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeTsK
LSAgICBwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyA9IG1faWdub3JlVExTRXJyb3JzOwogICAg
IHBhcmFtZXRlcnMubGFuZ3VhZ2VzID0gdXNlclByZWZlcnJlZExhbmd1YWdlcygpOwotICAgIHBh
cmFtZXRlcnMucHJveHlTZXR0aW5ncyA9IG1fbmV0d29ya1Byb3h5U2V0dGluZ3M7CiAgICAgcGFy
YW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IHRydWU7CiB9CiAKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKKyAg
ICAvLyBGSVhNRTogTW92ZSB0aGlzIHRvIFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgbV9pZ25vcmVU
TFNFcnJvcnMgPSBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRJZ25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsKIH0KIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoY29uc3QgV2ViQ29yZTo6U291cE5l
dHdvcmtQcm94eVNldHRpbmdzJiBzZXR0aW5ncykKIHsKKyAgICAvLyBGSVhNRTogTW92ZSB0aGlz
IHRvIFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgbV9uZXR3b3JrUHJveHlTZXR0aW5ncyA9IHNldHRp
bmdzOwotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3Mo
bV9uZXR3b3JrUHJveHlTZXR0aW5ncyksIDApOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b25JbmZvLmgKaW5kZXggODM1MGRiYWNmOGQ1NTdlNTdjOGJjZmMzZTkzZDA5N2I4OTQ2YWJiOC4u
OWY0Njg1ZDEzYWJkMmI0YWM4YzUzNzhiOGU1MTJmOWMwMjlkYjNiMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5m
by5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbkluZm8uaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0hUVFBDb29raWVBY2NlcHRQ
b2xpY3kuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOThiMzZjYzdhZDc1MWFiYTEzMDk3NzczMjg0Njlh
MDY0YjFjMWFlZC4uMjNlNGQxMzZiMTFjNzgzNWUxNGVjMWViNDVkNTFiNzVlNzYwOTk3YyAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDg2IEBACisyMDIwLTA5LTIxICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9t
IFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVEYXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vc3QgY2hhbmdlcyB0byB0ZXN0cyBhcmUganVz
dCBjYWxsaW5nIGEgZnVuY3Rpb24gb24gdGhlIFdLV2Vic2l0ZURhdGFTdG9yZSBpbnN0ZWFkIG9m
IHRoZSBXS1Byb2Nlc3NQb29sCisgICAgICAgIGJlY2F1c2Ugd2Ugd2FudCB0byBkbyBzb21ldGhp
bmcgd2l0aCB0aGUgbmV0d29yayBwcm9jZXNzIGFuZCBpdCBoYXMgYSBuZXcgb3duZXIuCisgICAg
ICAgIEV4Y2VwdGlvbnMgYXJlIG5vdGVkIGlubGluZS4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24u
bW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6ZG93bmxvYWRBdFJhdGUpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW06CisgICAg
ICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lE
QkluZGV4VXBncmFkZVRvVjIubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1t
OgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVBy
b2Nlc3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5k
SW1taW5lbnRseS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tOgorICAgICAgICAoVEVT
VCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3Jh
Z2VQZXJzaXN0ZW5jZS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW06CisgICAgICAgIChURVNUKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNz
Q3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tOgorICAgICAgICAoY2hlY2tSZWNvdmVyeUFm
dGVyQ3Jhc2gpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJv
Y2Vzc1N3YXBPbk5hdmlnYXRpb24ubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgIFRoaXMgdGVzdCB3YXMgbWFraW5nIGEgV0tXZWJzaXRlRGF0YVN0b3JlLCBnZXR0aW5n
IGl0cyByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3MgZGlyZWN0b3J5LAorICAgICAgICBwdXR0aW5n
IHRoaW5ncyBpbiB0aGF0IGRpcmVjdG9yeSwgdGhlbiBzdGFydGluZyB0aGUgbmV0d29yayBwcm9j
ZXNzIGFuZCBtYWtpbmcgc3VyZSBldmVyeXRoaW5nCisgICAgICAgIHdvcmtzIHdoZW4gaW5pdGlh
bGl6aW5nIHRoZSBuZXR3b3JrIHByb2Nlc3MuICBOb3csIG5ldHdvcmsgcHJvY2VzcyBpbml0aWFs
aXphdGlvbiBoYXBwZW5zIHdoZW4gYQorICAgICAgICBXS1dlYnNpdGVEYXRhU3RvcmUgaXMgaW5z
dGFudGlhdGVkLCBzbyB3ZSBuZWVkIHRvIHB1dCB0aGluZ3MgdGhlcmUgYmVmb3JlIGluc3RhbnRp
YXRpbmcgYSBXS1dlYnNpdGVEYXRhU3RvcmUuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW06CisgICAgICAgIEJlZm9yZSB0aGlz
IGNoYW5nZSwgZWFjaCBXS1Byb2Nlc3NQb29sIGhhZCBpdHMgb3duIG5ldHdvcmsgcHJvY2Vzcywg
d2hpY2ggaG9sZHMgdGhlIHNlcnZpY2Ugd29ya2VyIHJlZ2lzdHJ5CisgICAgICAgIGZvciB0aGUg
V2Vic2l0ZURhdGFTdG9yZXMgdXNlZCB3aXRoIHRoYXQgcHJvY2VzcyBwb29sLiAgTm93LCB0aGUg
bmV0d29yayBwcm9jZXNzIHN0aWxsIG5lZWRzIHRvIGhhdmUgYSBzZXJ2aWNlCisgICAgICAgIHdv
cmtlciByZWdpc3RyeSBpbiBpdCwgYnV0IHdoZW4gd2UgcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBp
dCBsb29raW5nIGZvciBhIHdlYiBwcm9jZXNzIHRvIHJ1biB0aGUgc2VydmljZQorICAgICAgICB3
b3JrZXIsIHdlIGdvIGFyYml0cmFyaWx5IHRvIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wgdGhhdCBo
YXMgYSBwcm9jZXNzIHdlIGNhbiB1c2UuICBUaGlzIGxvZ2ljIGlzIGluIAorICAgICAgICBXZWJQ
cm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzLiAgQmVjYXVzZSB3ZSB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCBlYWNoCisgICAgICAg
IHRpbWUsIHNldHRpbmcgdGhlIGN1c3RvbSB1c2VyIGFnZW50IHRvIHR3byBkaWZmZXJlbnQgdGhp
bmdzIGluIHR3byBkaWZmZXJlbnQgcHJvY2VzcyBwb29scyBjYXVzZXMgb25seSBvbmUKKyAgICAg
ICAgdG8gYmUgdXNlZC4gIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBpbiBwcmFjdGljZSwgdGhvdWdo
LCBiZWNhdXNlIHRoZSBvbmx5IGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgU1BJIHRvCisgICAg
ICAgIHNldCBhIHNlcnZpY2Ugd29ya2VyJ3MgY3VzdG9tIHVzZXIgYWdlbnQgaXMgU2FmYXJpLCB3
aGljaCBvbmx5IGhhcyBvbmUgcHJvY2VzcyBwb29sLiAgVGhpcyB0ZXN0IHN0aWxsIHZlcmlmaWVz
CisgICAgICAgIHRoYXQgYSB1c2VyIGFnZWludCBpcyBjb3JyZWN0bHkgc2VudC4KKyAgICAgICAg
U2ltaWxhcmx5LCB0aGUgdGVzdHMgdGhhdCBjb3VudCBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzZXMg
ZWl0aGVyIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMgb3IgbmVlZCB0byBiZSBydW4gd2l0aAorICAg
ICAgICBvbmUgcHJvY2VzcyBwb29sIHBlciBwYXJlbnQgcHJvY2Vzcy4gIFRvIGtlZXAgdGhlIHJl
c3VsdHMgdGhlIHNhbWUsIEkgc2VwYXJhdGVkIHRoZSB0ZXN0cyBpbnRvIGRpZmZlcmVudAorICAg
ICAgICBURVNUKFNlcnZpY2VXb3JrZXJzLCAuLi4pIG1hY3JvcyB3aGljaCBhcmUgcnVuIGluIHNl
cGFyYXRlIHBhcmVudCBwcm9jZXNzZXMuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9u
Q29va2llVUlEZWxlZ2F0ZSB3ZWJWaWV3OnJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3Nh
Z2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bQ2hl
Y2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0pOgorICAgICAgICAoLVtD
aGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0pOgorICAgICAgICAo
VEVTVCk6CisgICAgICAgIFRoaXMgaXMgdGhlIHdob2xlIHBvaW50IG9mIG1lIGRvaW5nIHRoaXMu
CisgICAgICAgIEkgdG9vayBhIHRlc3QgdGhhdCB3YXMgZmxha3kgb25seSBvbiBpT1MgKGJlY2F1
c2Ugb2YgZGlmZmVyZW50IE5TSFRUUENvb2tpZVN0b3JhZ2Ugc3luY2luZyBiZWhhdmlvcikgYW5k
IG1hZGUKKyAgICAgICAgaXQgZmxha3kgbm93aGVyZSAoZmluZ2VycyBjcm9zc2VkISkgYW5kIGFk
ZGVkIGEgdGVzdCB0aGF0IGNvcnJlY3RseSBoYW5kbGVzIHNlc3Npb24gY29va2llcyBsaWtlIHdl
IGNvdWxkIG5vdAorICAgICAgICBiZWZvcmUgdGhpcyBjaGFuZ2UuCisgICAgICAgIEkgYWxzbyBy
ZS11c2VkIHNvbWUgdGVzdCBpbmZyYXN0cnVjdHVyZSBhbmQgbWFkZSBpdCBzdG9wIHVzaW5nIHBy
b2Nlc3MtZ2xvYmFsIHN0YXRpYyB2YXJpYWJsZXMgZm9yIHRlc3Qgc3RhdGUuCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3Mu
bW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbToKKyAgICAgICAgKHJ1bldlYnNp
dGVEYXRhU3RvcmVDdXN0b21QYXRocyk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpUZXN0
Q29udHJvbGxlcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV1RSOjpUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KToKKyAgICAgICAgV0tDb250ZXh0U2V0
QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyBpcyBub3QgbmVl
ZGVkLCBzbyBJIHJlbW92ZWQgaXQuCisgICAgICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRl
RGF0YVN0b3JlIGlzbid0IG5lZWRlZCBhbnkgbW9yZSBiZWNhdXNlIFdLQ29udGV4dFJlZiAoV2Vi
UHJvY2Vzc1Bvb2wpIGRvZXNuJ3QKKyAgICAgICAgb3duIGEgbmV0d29yayBwcm9jZXNzIGFueSBt
b3JlLCBzbyBpdCBkb2Vzbid0IGNhcmUgd2hpY2ggaXMgdGhlIGRlZmF1bHQgV2Vic2l0ZURhdGFT
dG9yZS4KKyAgICAgICAgSW4gZmFjdCwgdGhlICJkZWZhdWx0IiBXZWJzaXRlRGF0YVN0b3JlIGlz
bid0IHJlYWxseSBpbXBvcnRhbnQgaW4gdGhlIG5ldHdvcmsgcHJvY2VzcyBhbnkgbW9yZS4KKwog
MjAyMC0wOS0yMSAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxlLmNvbT4KIAog
ICAgICAgICBBbGxvdyBhYm91dDpibGFuayBzdWJmcmFtZSBsb2FkcyBmb3Igbm9uIGFwcC1ib3Vu
ZCB0b3AgZnJhbWVzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29u
bmVjdGlvbi5tbQppbmRleCA5NzM4OWYwMWZmMmVlOTliNzgzYjBiNTIxMDgwNzRmMWE4MWI2OTgx
Li45MjJkZGUzNmViMTU4YTMzMDhjNTZhMDQwMGRhZTVlMTMwNjRlYTZmIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBl
bmRpbmdDb25uZWN0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KQEAgLTMyLDYgKzMy
LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NHcm91cFByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAK
QEAgLTg3LDcgKzg4LDcgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVu
ZGluZ0Nvbm5lY3Rpb24pCiAgICAgcGlkX3Qgd2ViVmlldzJQSUQgPSBbd2ViVmlldzIuZ2V0KCkg
X3dlYlByb2Nlc3NJZGVudGlmaWVyXTsKICAgICBFWFBFQ1RfTkUod2ViVmlldzFQSUQsIHdlYlZp
ZXcyUElEKTsKIAotICAgIHBpZF90IGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVyID0g
W3Byb2Nlc3NQb29sLmdldCgpIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdOworICAgIHBpZF90
IGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVyID0gW2NvbmZpZ3VyYXRpb24uZ2V0KCku
d2Vic2l0ZURhdGFTdG9yZSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXTsKICAgICBFWFBFQ1Rf
TkUoaW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlmZXIsIDApOwogICAgIGtpbGwoaW5pdGlh
bE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlmZXIsIFNJR0tJTEwpOwogICAgIFV0aWw6OnJ1bigmbmV0
d29ya1Byb2Nlc3NDcmFzaGVkKTsKQEAgLTk2LDcgKzk3LDcgQEAgVEVTVChXZWJLaXQsIE5ldHdv
cmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24pCiAgICAgW3dlYlZpZXcxLmdldCgp
IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWlu
QnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1
YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dXTsKICAgICBbd2ViVmlldzEu
Z2V0KCkgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOwogCi0gICAgcGlkX3QgcmVs
YXVuY2hlZE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllciA9IFtwcm9jZXNzUG9vbC5nZXQoKSBfbmV0
d29ya1Byb2Nlc3NJZGVudGlmaWVyXTsKKyAgICBwaWRfdCByZWxhdW5jaGVkTmV0d29ya1Byb2Nl
c3NJZGVudGlmaWVyID0gW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfbmV0
d29ya1Byb2Nlc3NJZGVudGlmaWVyXTsKICAgICBFWFBFQ1RfTkUoaW5pdGlhbE5ldHdvcmtQcm9j
ZXNzSWRlbnRpZmlmZXIsIHJlbGF1bmNoZWROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIpOwogICAg
IEVYUEVDVF9GQUxTRShuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOwogCkBAIC0xNDYsOCArMTQ3LDgg
QEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzUmVsYXVuY2hPbkxhdW5jaEZhaWx1cmUpCiAK
ICAgICAvLyBDb25zdHVjdGluZyBhIFdlYlZpZXcgc3RhcnRzIGEgbmV0d29yayBwcm9jZXNzIHNv
IHRlcm1pbmF0ZSB0aGlzIG9uZS4gVGhlIHBhZ2UgbG9hZCBiZWxvdyB3aWxsIHRoZW4gcmVxdWVz
dCBhIG5ldHdvcmsgcHJvY2VzcyBhbmQgd2UKICAgICAvLyBtYWtlIHRoaXMgbmV3IG5ldHdvcmsg
cHJvY2VzcyBsYXVuY2ggY3Jhc2ggb24gc3RhcnR1cC4KLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKLSAgICBbcHJvY2Vzc1Bvb2wgX21ha2VOZXh0TmV0d29ya1By
b2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZ107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSBfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW01vbml0b3JX
ZWJDb250ZW50Q3Jhc2hOYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKICAgICBbd2Vi
VmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwpAQCAtMTU4LDcgKzE1
OSw3IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc1JlbGF1bmNoT25MYXVuY2hGYWlsdXJl
KQogICAgIEVYUEVDVF9UUlVFKG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk7CiAgICAgRVhQRUNUX0ZB
TFNFKHdlYlByb2Nlc3NDcmFzaGVkKTsKICAgICBFWFBFQ1RfR1QoW3dlYlZpZXcgX3dlYlByb2Nl
c3NJZGVudGlmaWVyXSwgMCk7Ci0gICAgRVhQRUNUX0dUKFtwcm9jZXNzUG9vbC5nZXQoKSBfbmV0
d29ya1Byb2Nlc3NJZGVudGlmaWVyXSwgMCk7CisgICAgRVhQRUNUX0dUKFtjb25maWd1cmF0aW9u
LmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0sIDApOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQppbmRleCBiN2VkOTk5MzlmZDU5ZjIy
OGE3ZThiZDc0OTcxMmY1MzY2MDE1NjE2Li4xODE5MTMxYzlhMGZlYjMwYjFhMmYwY2ZjZDg3YmYy
MDQ1ZWJiM2Y0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0Rvd25sb2FkLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvRG93bmxvYWQubW0KQEAgLTg4OSw5ICs4ODksOSBAQCB2b2lkIGRvd25sb2FkQXRSYXRlKGRv
dWJsZSBkZXNpcmVkS2JwcywgdW5zaWduZWQgc3BlZWRNdWx0aXBsaWVyLCBBcHBSZXR1cm5zVG9G
bwogICAgIHJlY2VpdmVkRGF0YSA9IGZhbHNlOwogICAgIFV0aWw6OnJ1bigmcmVjZWl2ZWREYXRh
KTsKICAgICAvLyBTdGFydCB0aGUgRG93bmxvYWRNb25pdG9yJ3MgdGltZXIuCi0gICAgW1t3ZWJW
aWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5k
OllFU107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3N5
bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKICAgICBpZiAocmV0dXJuVG9Gb3JlZ3JvdW5k
ID09IEFwcFJldHVybnNUb0ZvcmVncm91bmQ6OlllcykKLSAgICAgICAgW1t3ZWJWaWV3IGNvbmZp
Z3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOk5PXTsKKyAg
ICAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNp
emVBcHBJc0JhY2tncm91bmQ6Tk9dOwogICAgIGRpZENhbmNlbCA9IGZhbHNlOwogICAgIFV0aWw6
OnJ1bigmZGlkQ2FuY2VsKTsKICAgICB0ZXJtaW5hdGVTZXJ2ZXIgPSB0cnVlOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FM
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50
V0FMLm1tCmluZGV4IDVjZDdhYmRhMDFkMTk3NDdkY2VkNDVhYmVlOTllY2IxYzE0ZDYxNjAuLmQ3
N2E2ZmQ5ODc5ZTQzZjcwMTFkZGFmOTJjM2E3OTdmM2ZjMTM3MzQgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbQorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwu
bW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0
IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dl
YktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgog
I2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC04Niw3ICs4Nyw3IEBAIFRF
U1QoSW5kZXhlZERCLCBDaGVja3BvaW50c1dBTEF1dG9tYXRpY2FsbHkpCiAgICAgUmV0YWluUHRy
PFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2Vy
Q29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkg
bmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFJldGFp
blB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQppbmRleCBjOGFmMWQyNDNjNGZl
YjU4YWM5ODRkYWYxNGQ4MTUzMWE3Y2MzYzczLi5iYmYxYTE1MjE1ZGMxZmQyOGRmZGRiOWUzNDFi
NjRmOWMwMDhmNGM0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNp
bXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
VXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0
b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0
L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJT
dHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBEZWxldGVSZWNv
dmVyeSkKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAg
W1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhh
bmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5jb25zaXN0ZW50IGRhdGFiYXNlIGZpbGVzIHRv
IHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFp
bkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJEZWxldGVSZWNvdmVyeSIgd2l0aEV4dGVuc2lv
bjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4
VXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lE
QkluZGV4VXBncmFkZVRvVjIubW0KaW5kZXggOTVjY2EwY2UyODE2ZmYxYTZhNDU1YWQwYmQyYzhh
NGFhNGYyN2ZlZC4uODhhNTNmNjFkOWQ5ODI2NTdiOTY1ZWY4YTZjZWJhNzkxZWZmMTc1NSAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVw
Z3JhZGVUb1YyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SURCSW5kZXhVcGdyYWRlVG9WMi5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0
L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENv
bnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlv
blByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bv
b2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4K
QEAgLTU4LDcgKzU5LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4VXBncmFkZVRvVjIpCiAgICAg
UmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJh
dGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRs
ZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAog
ICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0aGUgZGF0YWJh
c2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVS
TEZvclJlc291cmNlOkAiSW5kZXhVcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3Vi
ZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFk
ZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVj
dFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCmluZGV4IGZmYTVhNzg3OGE0NzMyYjhlYzI0NWM5MDUz
ZmQxN2VlNTk1NmZhM2QuLjQwM2UwZmZhODIxMjM0NTFjNDY2ZmVlY2MzMjRmOWM2ZTc2MWQ0M2Qg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2Jq
ZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQpAQCAtMzEsNiAr
MzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1w
b3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJL
aXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJbmRleGVkREIs
IElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyKQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdD
b25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250
cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0
SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0
YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IGRhdGFiYXNl
IGZpbGVzIHdpdGggb2xkIE9iamVjdFN0b3JlSW5mbyBzY2hlbWEgdG8gdGhlIGRhdGFiYXNlIGRp
cmVjdG9yeS4KICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9y
UmVzb3VyY2U6QCJJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3Fs
aXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJh
c2VQcm9jZXNzS2lsbC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQppbmRleCA2ODc0NTI5ZWJiZjM3ODUxOGQ5
M2UwYTA4MjFmNjMwMTJjZmE2ZDVmLi43MzA3N2VjZGZkMzY1YjUyOTA1M2Q0N2NiYTJhMTRlZDA1
MWVkNmVhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tCkBAIC0z
MSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0
L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4K
ICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTkyLDcgKzkzLDcgQEAgVEVTVChJbmRleGVkREIsIERhdGFi
YXNlUHJvY2Vzc0tpbGwpCiAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2
ZWRTY3JpcHRNZXNzYWdlKTsKICAgICAgICAgaWYgKCFraWxsZWREQlByb2Nlc3MgJiYgb3BlblJl
cXVlc3RVcGdyYWRlTmVlZGVkKSB7CiAgICAgICAgICAgICBraWxsZWREQlByb2Nlc3MgPSB0cnVl
OwotICAgICAgICAgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNp
dGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICAgICAgfQogICAgIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eGVkREJNdWx0aVByb2Nlc3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbQppbmRleCA3ZjYyNjQ1ZDk5NjBlZGU5NjBjMDAx
YzI3MmI2NTAzOTM5MDExNjMyLi42ZjY3ZGMyN2VkYzNkMjc0NWIxNzBlNDgyYmNkOTBlODQ5NGNi
OTVhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4ZWREQk11bHRpUHJvY2Vzcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2lt
cG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4K
ICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgogI2ltcG9ydCA8d3RmL0RlcXVl
Lmg+CkBAIC02OSw3ICs3MCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJNdWx0aVByb2Nl
c3MpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtb
Y29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5k
bGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5j
ZS5tbQppbmRleCBiMzJjZTRhNWY3Mzg2M2FlZGRjYjkxOTBiNWI0MzcwZTM3NDQzYjVlLi5kNjIy
MDMyMmU0NzhkMWRhYzc4ZjA2OTY3YzNiNjQzYmZkNjJmOWJmIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lz
dGVuY2UubW0KQEAgLTc4LDcgKzc4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlBlcnNp
c3RlbmNlKQogICAgIHdlYlZpZXcgPSBuaWw7CiAKICAgICAvLyBUZXJtaW5hdGUgdGhlIG5ldHdv
cmsgcHJvY2VzcwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFT
dG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gTWFrZSBhIG5ldyB3ZWIg
dmlldyB0byBmaW5pc2ggdGhlIHRlc3QKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1
cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTI2OCw3ICsyNjgsNyBAQCBURVNUKElu
ZGV4ZWREQiwgSW5kZXhlZERCVGhpcmRQYXJ0eUZyYW1lSGFzQWNjZXNzKQogCiAgICAgd2ViVmll
dyA9IG5pbDsKICAgICBzZWNvbmRXZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwog
CiAgICAgLy8gVGhpcmQtcGFydHkgSURCIHN0b3JhZ2UgaXMgc3RvcmVkIGluIHRoZSBtZW1vcnkg
b2YgbmV0d29yayBwcm9jZXNzLgogICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBj
b25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTM4NSw3ICszODUsNyBAQCBU
RVNUKEluZGV4ZWREQiwgSW5kZXhlZERCVGhpcmRQYXJ0eVdvcmtlckhhc0FjY2VzcykKIAogICAg
IHdlYlZpZXcgPSBuaWw7CiAgICAgc2Vjb25kV2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKIAogICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9u
OmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBsb2FkVGVzdFBhZ2VJbldlYlZpZXcodGhpcmRX
ZWJWaWV3LmdldCgpLCBAImRhdGFiYXNlIGlzIGNyZWF0ZWQiKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50
bHkubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1
c3BlbmRJbW1pbmVudGx5Lm1tCmluZGV4IDhlYzY1ZjBhM2JhOTM3MzZmZGI0ZjlkZGZlZjc1Y2U2
MDAwNWZkMGQuLjUxMGIyNGY1NjlkMjJiZDQwYTdhZGJlMjVlY2ZkMGVjZmM4YWM3MjYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3Vz
cGVuZEltbWluZW50bHkubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2lt
cG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tV
c2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3
Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3Rv
cmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQv
X1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CkBAIC04OCw4ICs4OSw4IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJTdXNwZW5kSW1taW5l
bnRseSkKIAogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkNvbnRpbnVlIik7CiAKLSAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1
c3BlbmRJbW1pbmVudGx5XTsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHld
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3Jr
UHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJFeHBlY3Rl
ZCBBYm9ydCBGb3IgU3VzcGVuc2lvbiIpOwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkV4
cGVjdGVkIFN1Y2Nlc3MgQWZ0ZXIgUmVzdW1lIik7CkBAIC0xNTgsOCArMTU5LDggQEAgVEVTVChJ
bmRleGVkREIsIFN1c3BlbmRJbW1pbmVudGx5Rm9yVGhpcmRQYXJ0eURhdGFiYXNlcykKICAgICBb
d2ViVmlldyBsb2FkSFRNTFN0cmluZzptYWluRnJhbWVTdHJpbmcgYmFzZVVSTDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpAImh0dHA6Ly93ZWJraXQub3JnIl1dOwogICAgIHJ1blRlc3RBbmRDaGVja1Jl
c3VsdChAImRhdGFiYXNlIGlzIGNyZWF0ZWQiKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwot
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWVdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Nl
bmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3VyYXRp
b24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsK
IAogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAInRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZCIp
OwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bmRleGVkREJUZW1wRmlsZVNpemUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQppbmRleCA1MzY1NDFlM2IwZTVjZGEzYTNi
NTUxYzFlODFlOTYzZjU5MmFlYjJmLi5lN2I5OTIyOGNlODc2ZTQ0N2U2NDc4MmVmOWQ4N2YyNWFk
YzliOWZhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQpAQCAtOTUsNyArOTUsNyBAQCBU
RVNUKEluZGV4ZWREQiwgSW5kZXhlZERCVGVtcEZpbGVTaXplKQogCiAgICAgLy8gVGVybWluYXRl
IG5ldHdvcmsgcHJvY2VzcyB0byBrZWVwIFdBTCBvbiBkaXNrLgogICAgIHdlYlZpZXcgPSBuaWw7
Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIg
ZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aF0p
OwogICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGZpbGVBdHRyaWJ1dGVzID0gW1tOU0ZpbGVN
YW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBhdHRyaWJ1dGVzT2ZJdGVtQXRQYXRoOndhbEZpbGVQYXRo
LmdldCgpLnBhdGggZXJyb3I6bmlsXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCmlu
ZGV4IDQxMzNlZTdiM2RhZTQzZWMyMDQ5Y2ZmYzA2M2MwZTQyOWMxN2M1ZWYuLjVmNzkxOTA5NDNj
NzcxZTlkOWU0NDJhMGRhMjY2ZmY5YTAzYmEyZjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0
ZW5jZS5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRD
b250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRp
b25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRl
Lmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmln
dXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC0xMDks
NyArMTEwLDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NDcmFzaGVzKQog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAg
ICBFWFBFQ1RfV0tfU1RSRVEoQCJzZXNzaW9uOnN0b3JhZ2UiLCBbbGFzdFNjcmlwdE1lc3NhZ2Ug
Ym9keV0pOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0
b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICByZWNlaXZlZFNjcmlwdE1lc3Nh
Z2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0
TWVzc2FnZSk7CkBAIC0xNjIsNyArMTYzLDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFn
ZVByb2Nlc3NTdXNwZW5kcykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVk
U2NyaXB0TWVzc2FnZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAidmFsdWUiLCBbbGFzdFNjcmlw
dE1lc3NhZ2UgYm9keV0pOwogCi0gICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29ya1By
b2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndl
YnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07
CiAKICAgICByZWFkeVRvQ29udGludWUgPSBmYWxzZTsKICAgICBbd2ViVmlldzEgZXZhbHVhdGVK
YXZhU2NyaXB0OkAid2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdrZXknLCAnbmV3VmFsdWUn
KSIgY29tcGxldGlvbkhhbmRsZXI6XihpZCwgTlNFcnJvciAqKSB7CkBAIC0xNzcsNyArMTc4LDcg
QEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5kcykKICAgICB9XTsK
ICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlYWR5VG9Db250aW51ZSk7CiAgICAgCi0g
ICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vz
c0RpZFJlc3VtZV07CiAKICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNz
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vz
cy5tbQppbmRleCBlNjBmODgwMjVkMDkzNzg5ZjY5NTYwZDliOTJiMjgyZjA3MTMwYThkLi4wZTIx
ZjkwOTUwMDE0ZjZjNDkwYjBlYjhlNDYxZWM0YmE4NTBiYjgxIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KQEAg
LTI4LDcgKzI4LDcgQEAKICNpbXBvcnQgIkhUVFBTZXJ2ZXIuaCIKICNpbXBvcnQgIlRlc3RXS1dl
YlZpZXcuaCIKICNpbXBvcnQgIlV0aWxpdGllcy5oIgotI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vz
c1Bvb2xQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0
ZS5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0zNywxNCArMzcsMTQgQEAgVEVTVChXZWJLaXQs
IE5ldHdvcmtQcm9jZXNzRW50aXRsZW1lbnRzKQogewogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIGNvbmZpZ3VyYXRpb246W1tbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10g
aW5pdF0gYXV0b3JlbGVhc2VdXSk7CiAgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0
UGFnZU5hbWVkOkAic2ltcGxlIl07Ci0gICAgV0tQcm9jZXNzUG9vbCAqcG9vbCA9IFt3ZWJWaWV3
IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sOwotICAgIGJvb2wgaGFzRW50aXRsZW1lbnQgPSBb
cG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUu
cm9vdGxlc3Muc3RvcmFnZS5XZWJLaXROZXR3b3JraW5nU2FuZGJveCJdOworICAgIFdLV2Vic2l0
ZURhdGFTdG9yZSAqc3RvcmUgPSBbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0
b3JlOworICAgIGJvb2wgaGFzRW50aXRsZW1lbnQgPSBbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0
TmV0d29ya2luZ1NhbmRib3giXTsKICNpZiBQTEFURk9STShNQUMpICYmIFVTRShBUFBMRV9JTlRF
Uk5BTF9TREspCiAgICAgRVhQRUNUX1RSVUUoaGFzRW50aXRsZW1lbnQpOwogI2Vsc2UKICAgICBF
WFBFQ1RfRkFMU0UoaGFzRW50aXRsZW1lbnQpOwogI2VuZGlmCi0gICAgRVhQRUNUX0ZBTFNFKFtw
b29sIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVy
ZSBjYXNlIl0pOworICAgIEVYUEVDVF9GQUxTRShbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nOkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7CiB9CiAKIFRFU1QoV2Vi
S2l0LCBIVFRQUmVmZXJlcikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jh
c2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCmluZGV4IDYwOThlOGRhZDI1MmU1OWVjNDkxMjUw
YjQyMTZkM2NkMDkzNmU4ZjcuLjJmOGEyZTMzZmU4NzAzYmFiMmQ4ZTA1MTA4MzJiZWNkOWQ0ODkz
NGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0
d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lz
dGVudERhdGFTdG9yZS5tbQpAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1JlY292
ZXJ5QWZ0ZXJDcmFzaChXS1dlYnNpdGVEYXRhU3RvcmUgKmRhdGFTdG9yZSkKICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtbd2Vi
VmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OworICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVz
dCByZXF1ZXN0V2l0aFVSTDpzaW1wbGUyXV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCmluZGV4IDk1ZGM5ZDk4
ZGYxM2IwNzA1ZTA4MTdkMDU4NzI2NTEyMGMxODhkMjMuLmRmMzIwZDY0ZGFkYmRkMWVlMjgzZjg2
NWMxNDQyM2YzYWM1NTY0YmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQpAQCAt
NTM4NSw3ICs1Mzg1LDcgQEAgVEVTVChQcm9jZXNzU3dhcCwgVXNlUHJld2FybWVkUHJvY2Vzc0Fm
dGVyVGVybWluYXRpbmdOZXR3b3JrUHJvY2VzcykKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CisgICAgW3dlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9wdE5T
KFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2
MDApIGNvbmZpZ3VyYXRpb246d2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBbd2Vi
VmlldzIgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlz
dGljcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VM
b2FkU3RhdGlzdGljcy5tbQppbmRleCAwZTEwYzM0ZWVjODJjNmY2NTkyYmI3YzQyNzRkMGU0NTVl
YWYxMWU4Li5hM2FiYTIzMWE5M2IzZDVmMDBhMTkzYzQ3YzI3Njc4NjRiMzUwNTViIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCkBAIC03MTksNyArNzE5LDcgQEAgVEVTVChSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLCBOZXR3b3JrUHJvY2Vzc1Jlc3RhcnQpCiAKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnBy
b2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAg
YXV0byB3ZWJWaWV3MiA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdl
dCgpXSk7CiAKQEAgLTc1Miw3ICs3NTIsNyBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3Ms
IE5ldHdvcmtQcm9jZXNzUmVzdGFydCkKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5S
dW5Mb29wKDEpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0
YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXczID0g
YWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAs
IDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAtMTU1
OCwxMCArMTU1OCw4IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTWlncmF0ZURhdGFG
cm9tTWlzc2luZ1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RTYW1lU2l0CiAKIFRFU1QoUmVzb3VyY2VM
b2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKIHsK
KyAgICBOU1VSTCAqaXRwUm9vdFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TVGVtcG9y
YXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQ2FuQWNjZXNz
RGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbFRlc3QiXSBpc0RpcmVjdG9yeTpZRVNdOwogICAg
IGF1dG8gZGVmYXVsdEZpbGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
OwotICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1
cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxl
YXNlXTsKLSAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2Nd
IF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVh
c2VdOwotICAgIE5TVVJMICppdHBSb290VVJMID0gW1tkYXRhU3RvcmUgX2NvbmZpZ3VyYXRpb25d
IF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5XTsKICAgICBOU1VSTCAqZmlsZVVSTCA9
IFtpdHBSb290VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIm9ic2VydmF0aW9ucy5k
YiJdOwogICAgIFtkZWZhdWx0RmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0UGF0aDppdHBSb290VVJM
LnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfRkFMU0UoW2RlZmF1bHRGaWxlTWFuYWdlciBm
aWxlRXhpc3RzQXRQYXRoOml0cFJvb3RVUkwucGF0aF0pOwpAQCAtMTU3Miw2ICsxNTcwLDEwIEBA
IFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Q
cm9jZXNzUG9vbCkKICAgICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlz
dHNBdFBhdGg6bmV3RmlsZVVSTC5wYXRoXSk7CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciBjb3B5
SXRlbUF0UGF0aDpuZXdGaWxlVVJMLnBhdGggdG9QYXRoOmZpbGVVUkwucGF0aCBlcnJvcjpuaWxd
OwogICAgIEVYUEVDVF9UUlVFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpm
aWxlVVJMLnBhdGhdKTsKKworICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpk
YXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlv
biBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLl9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gaXRwUm9vdFVSTDsKKyAgICBhdXRvICpkYXRhU3Rv
cmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246
ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwogICAgIFtkYXRhU3RvcmUgX3Nl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOllFU107CiAKICAgICBzdGF0aWMgYm9vbCBk
b25lRmxhZyA9IGZhbHNlOwpAQCAtMTYzMywxMiArMTYzNSwxMiBAQCBURVNUKFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MsIFN0b3JlU3VzcGVuc2lvbikKICAgICBbd2ViVmlldzIgX3Rlc3Rfd2FpdEZv
ckRpZEZpbmlzaE5hdmlnYXRpb25dOwogCiAgICAgZG9uZUZsYWcgPSBmYWxzZTsKLSAgICBbc2hh
cmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6XnsKKyAg
ICBbZGF0YVN0b3JlMSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeewogICAg
ICAgICBkb25lRmxhZyA9IHRydWU7CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZkb25lRmxhZyk7CiAKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJv
Y2Vzc0RpZFJlc3VtZV07CisgICAgW2RhdGFTdG9yZTEgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJl
c3VtZV07CiB9CiAKIEBpbnRlcmZhY2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1NjaGVtZUhhbmRs
ZXIgOiBOU09iamVjdCA8V0tVUkxTY2hlbWVIYW5kbGVyPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0gYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpp
bmRleCAzNGE0ZjVjNTM4YjliMGU5ZmNiMDUwNzJiMTcwMjg4ZTllNGU5ZjhmLi4yZjhlMzRkYmE2
ZGE0NzIzNTY1NWZmMGRiMmFkY2ExYmY4YzU2NzIwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpA
QCAtNTU4LDcgKzU1OCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFVzZXJBZ2VudE92ZXJyaWRl
KQogCiAgICAgY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9u
IGFsbG9jXSBpbml0XSk7CiAKLSAgICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJB
Z2VudE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3Nh
Z2UgZnJvbSB3b3JrZXI6IEJhciBDdXN0b20gVXNlckFnZW50Il0pOworICAgIG1lc3NhZ2VIYW5k
bGVyID0gYWRvcHROUyhbW1NXVXNlckFnZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRo
RXhwZWN0ZWRNZXNzYWdlOkAiTWVzc2FnZSBmcm9tIHdvcmtlcjogRm9vIEN1c3RvbSBVc2VyQWdl
bnQiXSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2Ny
aXB0TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07CiAKICAg
ICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01h
a2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCld
KTsKQEAgLTYzMyw4ICs2MzMsNiBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBDYWNoZVN0b3JhZ2VS
ZXN0b3JlRnJvbURpc2spCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAg
ICBkb25lID0gZmFsc2U7CiAKLSAgICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9kZWxldGVEZWZhdWx0
RGF0YVN0b3JlRm9yVGVzdGluZ107Ci0KICAgICBTZXJ2aWNlV29ya2VyVENQU2VydmVyIHNlcnZl
cih7CiAgICAgICAgIHsgInRleHQvaHRtbCIsIG1haW5DYWNoZVN0b3JhZ2VCeXRlcyB9CiAgICAg
fSwgewpAQCAtOTgyLDYgKzk4MCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3Jr
ZXJQcm9jZXNzQ3JlYXRpb24pCiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlv
bj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9j
XSBpbml0XSk7CiAgICAgc2V0Q29uZmlndXJhdGlvbkluamVjdGVkQnVuZGxlUGF0aChjb25maWd1
cmF0aW9uLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gb3JpZ2luYWxQcm9j
ZXNzUG9vbCA9IGNvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2w7CiAKICAgICBkb25lID0g
ZmFsc2U7CiAKQEAgLTEwMzUsNyArMTAzNCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZp
Y2VXb3JrZXJQcm9jZXNzQ3JlYXRpb24pCiAgICAgZG9uZSA9IGZhbHNlOwogCiAgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgbG9hZGluZyB0aGUgc2ltcGxlIHBhZ2UgZGlkIG5vdCBzdGFydCB0aGUgc2Vy
dmljZSB3b3JrZXIgcHJvY2Vzcy4KLSAgICBFWFBFQ1RfRVEoMHUsIHdlYlZpZXcuZ2V0KCkuY29u
ZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CisgICAg
RVhQRUNUX0VRKDF1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3Nl
cnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29u
ZmlndXJhdGlvbjpuZXdDb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgRVhQRUNUX0VRKDJ1LCB3
ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudEln
bm9yaW5nUHJld2FybWVkKTsKQEAgLTEwNDMsOSArMTA0Miw4IEBAIFRFU1QoU2VydmljZVdvcmtl
cnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRpb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhh
dCBsb2FkaW5nIHRoaXMgcGFnZSBkaWQgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3Mu
CiAgICAgRVhQRUNUX0VRKDF1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bv
b2wuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwotCisgICAgRVhQRUNUX0VRKDF1LCBvcmln
aW5hbFByb2Nlc3NQb29sLmdldCgpLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKICAgICBb
W2NvbmZpZ3VyYXRpb24gd2Vic2l0ZURhdGFTdG9yZV0gcmVtb3ZlRGF0YU9mVHlwZXM6W1dLV2Vi
c2l0ZURhdGFTdG9yZSBhbGxXZWJzaXRlRGF0YVR5cGVzXSBtb2RpZmllZFNpbmNlOltOU0RhdGUg
ZGlzdGFudFBhc3RdIGNvbXBsZXRpb25IYW5kbGVyOl4oKSB7CiAgICAgICAgIGRvbmUgPSB0cnVl
OwogICAgIH1dOwpAQCAtMTYxOCwyMSArMTYxNiwzNSBAQCBzdGF0aWMgc2l6ZV90IGxhdW5jaFNl
cnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcywg
YgogICAgIHJldHVybiB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dl
YlByb2Nlc3NDb3VudElnbm9yaW5nUHJld2FybWVkOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJz
LCBPdXRPZkFuZEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBP
dXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1
ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisK
K1RFU1QoU2VydmljZVdvcmtlcnMsIEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9v
bCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0
TG9hZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNl
V29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2Fk
QWJvdXRCbGFuaykpOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0Jl
Zm9yZU5hdmlnYXRpbmdUaHJvdWdoU2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMs
IExvYWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hPdXRPZlByb2Nlc3NTZXJ2aWNl
V29ya2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRy
dWU7CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9F
USgxdSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MsIGZpcnN0TG9hZEFib3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2Vy
cywgTG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaEluUHJvY2Vzc1NlcnZpY2VX
b3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1
ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VR
KDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzLCBmaXJzdExvYWRBYm91dEJsYW5rKSk7CiB9CiAKQEAgLTE5NDQsMTEgKzE5NTYsMTEg
QEAgVEVTVChTZXJ2aWNlV29ya2VycywgU3VzcGVuZE5ldHdvcmtQcm9jZXNzKQogCiAgICAgRVhQ
RUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRo
OnN3REJQYXRoLnBhdGhdKTsKIAotICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnBy
b2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAg
IFt3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdv
cmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNG
aWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRo
XSk7CiAKLSAgICBbIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2Vu
ZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0
aW9uLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAg
ICBbd2ViVmlldyBsb2FkUmVxdWVzdDpzZXJ2ZXIucmVxdWVzdCgpXTsKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9UTFNEZXByZWNhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvVExTRGVwcmVjYXRpb24ubW0KaW5kZXggNmIzOTIyMmY0MzE0MTBi
YjVkMzBhNmJiNzM0MzA1NmEzOTVmNmIwMC4uMjNkYmNmZTRjNGYxNTIzY2Q3OTNhYTExMTFjNGRh
NGYyMTMzMjA5NiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9UTFNEZXByZWNhdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1RMU0RlcHJlY2F0aW9uLm1tCkBAIC0xNDAsNyArMTQwLDYgQEAKIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJIHsKIAogY29uc3QgdWludDE2X3QgdGxzMV8xID0gMHgwMzAyOwotc3Rh
dGljIE5TU3RyaW5nICpkZWZhdWx0c0tleSA9IEAiV2ViS2l0RW5hYmxlTGVnYWN5VExTIjsKIAog
I2lmIEhBVkUoVExTX1BST1RPQ09MX1ZFUlNJT05fVCkKIApAQCAtMTYyLDI4ICsxNjEsMzAgQEAg
VEVTVChUTFNWZXJzaW9uLCBEZWZhdWx0QmVoYXZpb3IpCiAKICNpZiBIQVZFKFRMU19WRVJTSU9O
X0RVUklOR19DSEFMTEVOR0UpCiAKK1JldGFpblB0cjxXS1dlYlZpZXc+IG1ha2VXZWJWaWV3V2l0
aChXS1dlYnNpdGVEYXRhU3RvcmUgKnN0b3JlLCBSZXRhaW5QdHI8VGVzdE5hdmlnYXRpb25EZWxl
Z2F0ZT4gZGVsZWdhdGUpCit7CisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJh
dGlvbiA9IFtbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNl
XTsKKyAgICBjb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgPSBzdG9yZTsKKyAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFr
ZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0pOworICAg
IFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW2Rl
bGVnYXRlIHNldERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTpeKFdLV2ViVmlldyAq
LCBOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICpjaGFsbGVuZ2UsIHZvaWQgKF5jYWxsYmFj
aykoTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZURpc3Bvc2l0aW9uLCBOU1VSTENyZWRlbnRpYWwg
KikpIHsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2Uu
YXV0aGVudGljYXRpb25NZXRob2QsIE5TVVJMQXV0aGVudGljYXRpb25NZXRob2RTZXJ2ZXJUcnVz
dCk7CisgICAgICAgIGNhbGxiYWNrKE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VVc2VDcmVkZW50
aWFsLCBbTlNVUkxDcmVkZW50aWFsIGNyZWRlbnRpYWxGb3JUcnVzdDpjaGFsbGVuZ2UucHJvdGVj
dGlvblNwYWNlLnNlcnZlclRydXN0XSk7CisgICAgfV07CisgICAgcmV0dXJuIHdlYlZpZXc7Cit9
OworCiBURVNUKFRMU1ZlcnNpb24sIE5ldHdvcmtTZXNzaW9uKQogewogICAgIEhUVFBTZXJ2ZXIg
c2VydmVyKEhUVFBTZXJ2ZXI6OnJlc3BvbmRXaXRoT0ssIEhUVFBTZXJ2ZXI6OlByb3RvY29sOjpI
dHRwc1dpdGhMZWdhY3lUTFMpOwotICAgIHN0YXRpYyBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhb
VGVzdE5hdmlnYXRpb25EZWxlZ2F0ZSBuZXddKTsKLSAgICBhdXRvIG1ha2VXZWJWaWV3V2l0aCA9
IFsmXSAoV0tXZWJzaXRlRGF0YVN0b3JlICpzdG9yZSkgewotICAgICAgICBXS1dlYlZpZXdDb25m
aWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1tbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxv
Y10gaW5pdF0gYXV0b3JlbGVhc2VdOwotICAgICAgICBjb25maWd1cmF0aW9uLndlYnNpdGVEYXRh
U3RvcmUgPSBzdG9yZTsKLSAgICAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1
cmF0aW9uOmNvbmZpZ3VyYXRpb25dKTsKLSAgICAgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRl
bGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKLSAgICAgICAgW2RlbGVnYXRlIHNldERpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZTpeKFdLV2ViVmlldyAqLCBOU1VSTEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlICpjaGFsbGVuZ2UsIHZvaWQgKF5jYWxsYmFjaykoTlNVUkxTZXNzaW9uQXV0aENo
YWxsZW5nZURpc3Bvc2l0aW9uLCBOU1VSTENyZWRlbnRpYWwgKikpIHsKLSAgICAgICAgICAgIEVY
UEVDVF9XS19TVFJFUShjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlLmF1dGhlbnRpY2F0aW9uTWV0
aG9kLCBOU1VSTEF1dGhlbnRpY2F0aW9uTWV0aG9kU2VydmVyVHJ1c3QpOwotICAgICAgICAgICAg
Y2FsbGJhY2soTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZVVzZUNyZWRlbnRpYWwsIFtOU1VSTENy
ZWRlbnRpYWwgY3JlZGVudGlhbEZvclRydXN0OmNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2Uuc2Vy
dmVyVHJ1c3RdKTsKLSAgICAgICAgfV07Ci0gICAgICAgIHJldHVybiB3ZWJWaWV3OwotICAgIH07
CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUgbmV3
XSk7CiAgICAgewotICAgICAgICBhdXRvIHdlYlZpZXcgPSBtYWtlV2ViVmlld1dpdGgoW1dLV2Vi
c2l0ZURhdGFTdG9yZSBkZWZhdWx0RGF0YVN0b3JlXSk7CisgICAgICAgIGF1dG8gd2ViVmlldyA9
IG1ha2VXZWJWaWV3V2l0aChbV0tXZWJzaXRlRGF0YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdLCBk
ZWxlZ2F0ZSk7CiAgICAgICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVx
dWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCJodHRwczovLzEyNy4wLjAuMTolZC8iLCBzZXJ2ZXIucG9ydCgpXV1dXTsKICAgICAgICAg
W2RlbGVnYXRlIHdhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKICAgICB9CiAgICAgewotICAg
ICAgICBhdXRvIHdlYlZpZXcgPSBtYWtlV2ViVmlld1dpdGgoW1dLV2Vic2l0ZURhdGFTdG9yZSBu
b25QZXJzaXN0ZW50RGF0YVN0b3JlXSk7CisgICAgICAgIGF1dG8gd2ViVmlldyA9IG1ha2VXZWJW
aWV3V2l0aChbV0tXZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdLCBkZWxl
Z2F0ZSk7CiAgICAgICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVz
dFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCJodHRwczovLzEyNy4wLjAuMTolZC8iLCBzZXJ2ZXIucG9ydCgpXV1dXTsKICAgICAgICAgW2Rl
bGVnYXRlIHdhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKICAgICB9CkBAIC0xOTEsMTggKzE5
MiwyNiBAQCBURVNUKFRMU1ZlcnNpb24sIE5ldHdvcmtTZXNzaW9uKQogICAgICAgICBhdXRvIGNv
bmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24g
YWxsb2NdIGluaXROb25QZXJzaXN0ZW50Q29uZmlndXJhdGlvbl0pOwogICAgICAgICBbY29uZmln
dXJhdGlvbiBzZXRMZWdhY3lUTFNFbmFibGVkOk5PXTsKICAgICAgICAgYXV0byBkYXRhU3RvcmUg
PSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0
aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKLSAgICAgICAgYXV0byB3ZWJWaWV3ID0gbWFrZVdl
YlZpZXdXaXRoKGRhdGFTdG9yZS5nZXQoKSk7CisgICAgICAgIGF1dG8gd2ViVmlldyA9IG1ha2VX
ZWJWaWV3V2l0aChkYXRhU3RvcmUuZ2V0KCksIGRlbGVnYXRlKTsKICAgICAgICAgW3dlYlZpZXcg
bG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0
cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImh0dHBzOi8vMTI3LjAuMC4xOiVkLyIs
IHNlcnZlci5wb3J0KCldXV1dOwogICAgICAgICBbZGVsZWdhdGUgd2FpdEZvckRpZEZhaWxQcm92
aXNpb25hbE5hdmlnYXRpb25dOwogICAgIH0KK30KKworVEVTVChUTFNWZXJzaW9uLCBOZXR3b3Jr
U2Vzc2lvbk5TVXNlckRlZmF1bHRzKQoreworICAgIE5TU3RyaW5nICpkZWZhdWx0c0tleSA9IEAi
V2ViS2l0RW5hYmxlTGVnYWN5VExTIjsKICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNl
ckRlZmF1bHRzXSBzZXRCb29sOk5PIGZvcktleTpkZWZhdWx0c0tleV07CisKKyAgICBIVFRQU2Vy
dmVyIHNlcnZlcihIVFRQU2VydmVyOjpyZXNwb25kV2l0aE9LLCBIVFRQU2VydmVyOjpQcm90b2Nv
bDo6SHR0cHNXaXRoTGVnYWN5VExTKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbVGVz
dE5hdmlnYXRpb25EZWxlZ2F0ZSBuZXddKTsKICAgICB7Ci0gICAgICAgIGF1dG8gd2ViVmlldyA9
IG1ha2VXZWJWaWV3V2l0aChbV0tXZWJzaXRlRGF0YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdKTsK
KyAgICAgICAgYXV0byB3ZWJWaWV3ID0gbWFrZVdlYlZpZXdXaXRoKFtXS1dlYnNpdGVEYXRhU3Rv
cmUgZGVmYXVsdERhdGFTdG9yZV0sIGRlbGVnYXRlKTsKICAgICAgICAgW3dlYlZpZXcgbG9hZFJl
cXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImh0dHBzOi8vMTI3LjAuMC4xOiVkLyIsIHNlcnZl
ci5wb3J0KCldXV1dOwogICAgICAgICBbZGVsZWdhdGUgd2FpdEZvckRpZEZhaWxQcm92aXNpb25h
bE5hdmlnYXRpb25dOwogICAgIH0KICAgICB7Ci0gICAgICAgIGF1dG8gd2ViVmlldyA9IG1ha2VX
ZWJWaWV3V2l0aChbV0tXZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdKTsK
KyAgICAgICAgYXV0byB3ZWJWaWV3ID0gbWFrZVdlYlZpZXdXaXRoKFtXS1dlYnNpdGVEYXRhU3Rv
cmUgbm9uUGVyc2lzdGVudERhdGFTdG9yZV0sIGRlbGVnYXRlKTsKICAgICAgICAgW3dlYlZpZXcg
bG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0
cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImh0dHBzOi8vMTI3LjAuMC4xOiVkLyIs
IHNlcnZlci5wb3J0KCldXV1dOwogICAgICAgICBbZGVsZWdhdGUgd2FpdEZvckRpZEZhaWxQcm92
aXNpb25hbE5hdmlnYXRpb25dOwogICAgIH0KQEAgLTIxMSwyNCArMjIwLDIxIEBAIFRFU1QoVExT
VmVyc2lvbiwgTmV0d29ya1Nlc3Npb24pCiAKIFRFU1QoVExTVmVyc2lvbiwgU2hvdWxkQWxsb3dE
ZXByZWNhdGVkVExTKQogeworICAgIEhUVFBTZXJ2ZXIgc2VydmVyKEhUVFBTZXJ2ZXI6OnJlc3Bv
bmRXaXRoT0ssIEhUVFBTZXJ2ZXI6OlByb3RvY29sOjpIdHRwc1dpdGhMZWdhY3lUTFMpOwogICAg
IHsKICAgICAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1RMU05hdmlnYXRpb25EZWxlZ2F0
ZSBuZXddKTsKLSAgICAgICAgVENQU2VydmVyIHNlcnZlcihUQ1BTZXJ2ZXI6OlByb3RvY29sOjpI
VFRQUywgW10oU1NMICpzc2wpIHsKLSAgICAgICAgICAgIEVYUEVDVF9GQUxTRShzc2wpOwotICAg
ICAgICB9LCB0bHMxXzEpOwogICAgICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtXS1dlYlZp
ZXcgbmV3XSk7CiAgICAgICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0
ZS5nZXQoKV07Ci0gICAgICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVx
dWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCJodHRwczovLzEyNy4wLjAuMTolZC8iLCBzZXJ2ZXIucG9ydCgpXV1dXTsKKyAgICAgICAg
W3dlYlZpZXcgbG9hZFJlcXVlc3Q6c2VydmVyLnJlcXVlc3QoKV07CiAgICAgICAgIFtkZWxlZ2F0
ZSB3YWl0Rm9yRGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbl07CiAgICAgICAgIEVYUEVDVF9U
UlVFKFtkZWxlZ2F0ZSByZWNlaXZlZFNob3VsZEFsbG93RGVwcmVjYXRlZFRMU10pOwogICAgIH0K
ICAgICB7CiAgICAgICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtUTFNOYXZpZ2F0aW9uRGVs
ZWdhdGUgbmV3XSk7CiAgICAgICAgIGRlbGVnYXRlLmdldCgpLnNob3VsZEFsbG93RGVwcmVjYXRl
ZFRMUyA9IFlFUzsKLSAgICAgICAgVENQU2VydmVyIHNlcnZlcihUQ1BTZXJ2ZXI6OlByb3RvY29s
OjpIVFRQUywgVENQU2VydmVyOjpyZXNwb25kV2l0aE9LLCB0bHMxXzEpOwogICAgICAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtXS1dlYlZpZXcgbmV3XSk7CiAgICAgICAgIFt3ZWJWaWV3IHNl
dE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07Ci0gICAgICAgIFt3ZWJWaWV3IGxv
YWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJp
bmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJodHRwczovLzEyNy4wLjAuMTolZC8iLCBz
ZXJ2ZXIucG9ydCgpXV1dXTsKKyAgICAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6c2VydmVyLnJl
cXVlc3QoKV07CiAgICAgICAgIFtkZWxlZ2F0ZSB3YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07
CiAgICAgICAgIEVYUEVDVF9UUlVFKFtkZWxlZ2F0ZSByZWNlaXZlZFNob3VsZEFsbG93RGVwcmVj
YXRlZFRMU10pOwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCmluZGV4IGEzNWYwNTM1MGFhYjRi
NDJmMzZjNDZhZWNkZWVlZTZjZTU0NGVmODYuLjMzNzYwOTJhMTk1YjUxMmRhNjdjNDk2ZTQ1MjE3
YjkxNGZlMmE1NzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQpAQCAtNDc5LDggKzQ3OSw2IEBAIHN0
YXRpYyBib29sIGZpbmlzaGVkOwogfQogQGVuZAogCi0vLyBGSVhNRTogb24gaU9TLCBVSSBwcm9j
ZXNzIHNob3VsZCBiZSB1c2luZyB0aGUgc2FtZSBjb29raWUgZmlsZSBhcyB0aGUgbmV0d29yayBw
cm9jZXNzIGZvciBkZWZhdWx0IHNlc3Npb24uCi0jaWYgUExBVEZPUk0oTUFDKQogZW51bSBjbGFz
cyBTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyB7IE5vLCBZZXMgfTsKIHZvaWQgcnVuV0tI
VFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdh
cm1pbmcgc2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcpCiB7CkBAIC01ODksMjAgKzU4Nyw2
NiBAQCBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xXaXRoUHJld2Fy
bWluZykKICAgICBydW5XS0hUVFBDb29raWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRF
bmFibGVQcm9jZXNzUHJld2FybWluZzo6WWVzKTsKIH0KIAotI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykKLQogQGludGVyZmFjZSBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIDogTlNPYmplY3Qg
PFdLVUlEZWxlZ2F0ZT4KKy0gKE5TU3RyaW5nICopYWxlcnRDb29raWVIVE1MOworLSAoTlNTdHJp
bmcgKil3YWl0Rm9yTWVzc2FnZTsKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lv
bkNvb2tpZVVJRGVsZWdhdGUKK0BpbXBsZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURl
bGVnYXRlIHsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9tZXNzYWdlOworfQorCiAtICh2b2lk
KXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRo
TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZv
ICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5k
bGVyCiB7Ci0gICAgRVhQRUNUX1NUUkVRKCJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIs
IG1lc3NhZ2UuVVRGOFN0cmluZyk7CisgICAgX21lc3NhZ2UgPSBtZXNzYWdlOwogICAgIGZpbmlz
aGVkID0gdHJ1ZTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQorCistIChOU1N0cmluZyAq
KXdhaXRGb3JNZXNzYWdlCit7CisgICAgd2hpbGUgKCFfbWVzc2FnZSkKKyAgICAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAgICByZXR1cm4gX21lc3NhZ2UuYXV0b3Jl
bGVhc2UoKTsKK30KKworLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUwKK3sKKyAgICByZXR1
cm4gQCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7IGZv
ciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkgKyspIHsgY29va2llc1tpXSA9IGNv
b2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgpOyBhbGVydChjb29raWVzLmpvaW4oJzsg
JykpOzwvc2NyaXB0PiI7Cit9CisKIEBlbmQKIAorVEVTVChXZWJLaXQsIFdLSFRUUENvb2tpZVN0
b3JlTXVsdGlwbGVWaWV3cykKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MSA9IFtbVGVz
dFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzEgc3luY2hyb25vdXNs
eUxvYWRIVE1MU3RyaW5nOkAic3RhcnQgbmV0d29yayBwcm9jZXNzIl07CisKKyAgICBOU0hUVFBD
b29raWUgKnNlc3Npb25Db29raWUgPSBbTlNIVFRQQ29va2llIGNvb2tpZVdpdGhQcm9wZXJ0aWVz
OkB7CisgICAgICAgIE5TSFRUUENvb2tpZVBhdGg6IEAiLyIsCisgICAgICAgIE5TSFRUUENvb2tp
ZU5hbWU6IEAiU2Vzc2lvbkNvb2tpZU5hbWUiLAorICAgICAgICBOU0hUVFBDb29raWVWYWx1ZTog
QCJDb29raWVWYWx1ZSIsCisgICAgICAgIE5TSFRUUENvb2tpZURvbWFpbjogQCIxMjcuMC4wLjEi
LAorICAgIH1dOworCisgICAgX19ibG9jayBib29sIHNldENvb2tpZURvbmUgPSBmYWxzZTsKKyAg
ICBbd2ViVmlldzEuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlLmh0dHBDb29raWVTdG9y
ZSBzZXRDb29raWU6c2Vzc2lvbkNvb2tpZSBjb21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBz
ZXRDb29raWVEb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJnNldENvb2tpZURvbmUpOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW0NoZWNr
U2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgbmV3XSk7CisgICAgW3dlYlZpZXcxIHNldFVJRGVsZWdh
dGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcxIGxvYWRIVE1MU3RyaW5nOltkZWxl
Z2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRw
Oi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1l
c3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKKworICAgIFRlc3RXS1dl
YlZpZXcgKndlYlZpZXcyID0gW1tUZXN0V0tXZWJWaWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAg
IFt3ZWJWaWV3MiBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzIg
bG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwg
VVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVR
KFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1
ZSIpOworfQorCiBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhl
bWVyYWxTZXNzaW9uKQogewogICAgIFJldGFpblB0cjxXS1dlYnNpdGVEYXRhU3RvcmU+IGVwaGVt
ZXJhbFN0b3JlV2l0aENvb2tpZXMgPSBbV0tXZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNpc3RlbnRE
YXRhU3RvcmVdOwpAQCAtNjI3LDkgKzY3MSw4IEBAIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdp
dGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Npb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZmaW5pc2hlZCk7CiAgICAgZmluaXNoZWQgPSBmYWxzZTsKICAgICAKLSAgICBOU1N0
cmluZyAqYWxlcnRDb29raWVIVE1MID0gQCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1lbnQu
Y29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkg
KyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgpOyBh
bGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Ci0gICAgW3dlYlZpZXcgbG9hZEhU
TUxTdHJpbmc6YWxlcnRDb29raWVIVE1MIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJo
dHRwOi8vMTI3LjAuMC4xIl1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNo
ZWQpOworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhU
TUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOwor
ICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNv
b2tpZU5hbWU9Q29va2llVmFsdWUiKTsKIH0KIAogc3RhdGljIGJvb2wgYXJlQ29va2llc0VxdWFs
KE5TSFRUUENvb2tpZSAqZmlyc3QsIE5TSFRUUENvb2tpZSAqc2Vjb25kKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXIt
bGVha3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2No
ZW1lSGFuZGxlci1sZWFrcy5tbQppbmRleCBhYzdkZTQxNTEyYzQ1MTM4ZWM1ZTRjMDllNTExNWQx
NmNkMjNiMjJlLi5hYzE2NTM1ZGZkOTM5OTlkMmVjNTBkY2ZkNzFjM2E1NmQxMTNlYzdhIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1l
SGFuZGxlci1sZWFrcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9y
dCA8V2ViS2l0L1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dl
YlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1By
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1w
b3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0xNTIsNyArMTUzLDcgQEAgVEVTVChVUkxTY2hlbWVIYW5k
bGVyLCBMZWFrczMpCiAKICAgICBydW5VbnRpbFRhc2tzSW5GbGlnaHQoMik7CiAKLSAgICBbd2Vi
VmlldzEuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOworICAgIFt3ZWJWaWV3MS5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3Rv
cmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJ1blVudGlsVGFza3NJbkZsaWdo
dCgwKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0KaW5kZXggOTJj
ZjNhNjE5OGE1YjlkMTQ1NDQ5MDVkYjllOTQ4ZjExYzcyNTZkZS4uODE3NzllMjgxYzYwNzU0NzU1
YWNlMWQ4MDFlMjY4MWQxNGU1YmMzMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9t
UGF0aHMubW0KQEAgLTI0NCw3ICsyNDQsNyBAQCBzdGF0aWMgdm9pZCBydW5XZWJzaXRlRGF0YVN0
b3JlQ3VzdG9tUGF0aHMoU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxkRQogICAg
IC8vIE5vdywgd2l0aCBicmFuZCBuZXcgV0tXZWJzaXRlRGF0YVN0b3JlcyBwb2ludGluZyBhdCB0
aGUgc2FtZSBjdXN0b20gY29va2llIHN0b3JhZ2UgbG9jYXRpb24sCiAgICAgLy8gaW4gbmV3bHkg
ZmlyZWQgdXAgTmV0d29ya1Byb2Nlc3NlcywgdmVyaWZ5IHRoYXQgdGhlIGZldGNoIGFuZCBkZWxl
dGUgQVBJcyB3b3JrIGFzIGV4cGVjdGVkLgogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CisgICAgW2RhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OwogICAgIGF1dG8gbmV3Q3VzdG9tRGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFT
dG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbi5nZXQoKV0pOwogCiAgICAgW25ld0N1c3RvbURhdGFTdG9yZSBmZXRjaERhdGFSZWNv
cmRzT2ZUeXBlczpbTlNTZXQgc2V0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVDb29raWVz
LCBuaWxdIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNBcnJheTxXS1dlYnNpdGVEYXRhUmVjb3JkICo+
ICogcmVjb3JkcykgewpAQCAtMjU1LDcgKzI1NSw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVE
YXRhU3RvcmVDdXN0b21QYXRocyhTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRF
CiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogCi0gICAgW3Byb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2RhdGFTdG9yZSBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOwogICAgIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVE
YXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0ZURhdGFTdG9yZUNv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21EYXRhU3RvcmUgcmVtb3ZlRGF0
YU9mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldLV2Vic2l0ZURhdGFUeXBlQ29va2llcywg
bmlsXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNvbXBsZXRpb25IYW5kbGVy
Ol4gewpAQCAtMzg1LDExICszODUsMTAgQEAgVEVTVChXZWJLaXQsIEN1c3RvbURhdGFTdG9yZURl
c3Ryb3lXaGlsZUZldGNoaW5nTmV0d29ya1Byb2Nlc3NEYXRhKQogCiAgICAgICAgIC8vIFRlcm1p
bmF0ZSB0aGUgbmV0d29yayBwcm9jZXNzIHdoaWxlIGEgcXVlcnkgaXMgcGVuZGluZy4KICAgICAg
ICAgYXV0byogYWxsUHJvY2Vzc1Bvb2xzID0gW1dLUHJvY2Vzc1Bvb2wgX2FsbFByb2Nlc3NQb29s
c0ZvclRlc3RpbmddOwotICAgICAgICBBU1NFUlRfRVEoMVUsIFthbGxQcm9jZXNzUG9vbHMgY291
bnRdKTsKLSAgICAgICAgYXV0byogcHJvY2Vzc1Bvb2wgPSBhbGxQcm9jZXNzUG9vbHNbMF07Ci0g
ICAgICAgIHdoaWxlICghW3Byb2Nlc3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKQor
ICAgICAgICBBU1NFUlRfRVEoMFUsIFthbGxQcm9jZXNzUG9vbHMgY291bnRdKTsKKyAgICAgICAg
d2hpbGUgKCFbZGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKQogICAgICAgICAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c2xlZXAoMC4wMSk7Ci0gICAgICAgIGtpbGwoW3Byb2Nl
c3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCBTSUdLSUxMKTsKKyAgICAgICAga2ls
bChbZGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCBTSUdLSUxMKTsKICAgICAg
ICAgYWxsUHJvY2Vzc1Bvb2xzID0gbmlsOwogICAgICAgICBkYXRhU3RvcmUgPSBuaWw7CiAgICAg
fQpAQCAtNTM5LDcgKzUzOCw3IEBAIFRFU1QoV2ViS2l0LCBEb0xvYWRXaXRoTm9uRGVmYXVsdERh
dGFTdG9yZUFmdGVyVGVybWluYXRpbmdOZXR3b3JrUHJvY2VzcykKIAogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW3dlYlZpZXdDb25maWd1cmF0aW9uLmdl
dCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW3dlYlZpZXdD
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKIAogICAgIHJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNC
dW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9u
OkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07CiAgICAg
W3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07CkBAIC04NTcsNyArODU2LDcgQEAgVEVTVChX
ZWJLaXQsIE1lZGlhQ2FjaGUpCiAgICAgRVhQRUNUX0ZBTFNFKGVycm9yKTsKIAogICAgIGRvbmUg
PSB0cnVlOwotICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRl
RGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBbZmlsZU1hbmFnZXIg
cmVtb3ZlSXRlbUF0UGF0aDpwYXRoIGVycm9yOiZlcnJvcl07CiAgICAgRVhQRUNUX0ZBTFNFKGVy
cm9yKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2JqQy9D
dXN0b21Qcm90b2NvbHNUZXN0Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRP
YmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW0KaW5kZXggMjJlMWEwYTllOGUyNjgwNDVlNmIxN2Mz
MDZiMDAxNGQ1YmM5MTI2OC4uN2I4NDc4YjU5NzlmYTc0YjljZDU5ZDA2MmVhZGQwZDNjNTE1MWZk
NyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRPYmpDL0N1c3Rv
bVByb3RvY29sc1Rlc3QubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRP
YmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW0KQEAgLTM0LDYgKzM0LDggQEAKICNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgogI2ltcG9ydCA8V2ViS2l0L1dLQ29udGV4dFByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1Byb2Nlc3NHcm91cFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1Zp
ZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIHN0YXRpYyBib29sIHRlc3RGaW5pc2hlZDsKQEAg
LTcyLDYgKzc0LDggQEAgc3RhdGljIFdLUHJvY2Vzc0dyb3VwICpwcm9jZXNzR3JvdXAoKQogICAg
IHJldHVybiBwcm9jZXNzR3JvdXA7CiB9CiAKK3N0YXRpYyBSZXRhaW5QdHI8V0tWaWV3PiB3a1Zp
ZXc7CisKIEBpbnRlcmZhY2UgQ2xvc2VXaGlsZVN0YXJ0aW5nUHJvdG9jb2wgOiBUZXN0UHJvdG9j
b2wKIEBlbmQKIApAQCAtODksNyArOTMsNyBAQCBzdGF0aWMgV0tQcm9jZXNzR3JvdXAgKnByb2Nl
c3NHcm91cCgpCiAgICAgICAgIH07CiAgICAgICAgIFdLQ29udGV4dFNldENsaWVudChbcHJvY2Vz
c0dyb3VwKCkgX2NvbnRleHRSZWZdLCAmY2xpZW50LmJhc2UpOwogCi0gICAgICAgIGtpbGwoV0tD
b250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFtwcm9jZXNzR3JvdXAoKSBfY29udGV4
dFJlZl0pLCBTSUdLSUxMKTsKKyAgICAgICAga2lsbChXS1dlYnNpdGVEYXRhU3RvcmVHZXROZXR3
b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tQYWdlR2V0V2Vic2l0ZURhdGFTdG9yZShbd2tWaWV3IHBh
Z2VSZWZdKSksIFNJR0tJTEwpOwogICAgICAgICBbc2VsZi5jbGllbnQgVVJMUHJvdG9jb2w6c2Vs
ZiBkaWRGYWlsV2l0aEVycm9yOltOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpOU0NvY29hRXJyb3JE
b21haW4gY29kZTowIHVzZXJJbmZvOm5pbF1dOwogICAgIH0pOwogfQpAQCAtMTQyLDcgKzE0Niw3
IEBAIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIHN0YXRpYyB2b2lkIHJ1blRlc3QoKQogewog
ICAgIFJldGFpblB0cjxXS0Jyb3dzaW5nQ29udGV4dEdyb3VwPiBicm93c2luZ0NvbnRleHRHcm91
cCA9IGFkb3B0TlMoW1tXS0Jyb3dzaW5nQ29udGV4dEdyb3VwIGFsbG9jXSBpbml0V2l0aElkZW50
aWZpZXI6QCJUZXN0SWRlbnRpZmllciJdKTsKLSAgICBSZXRhaW5QdHI8V0tWaWV3PiB3a1ZpZXcg
PSBhZG9wdE5TKFtbV0tWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIHByb2Nlc3NHcm91cDpwcm9jZXNzR3JvdXAoKSBicm93c2luZ0NvbnRleHRHcm91
cDpicm93c2luZ0NvbnRleHRHcm91cC5nZXQoKV0pOworICAgIHdrVmlldyA9IGFkb3B0TlMoW1tX
S1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgcHJv
Y2Vzc0dyb3VwOnByb2Nlc3NHcm91cCgpIGJyb3dzaW5nQ29udGV4dEdyb3VwOmJyb3dzaW5nQ29u
dGV4dEdyb3VwLmdldCgpXSk7CiAgICAgUmV0YWluUHRyPEN1c3RvbVByb3RvY29sc0xvYWREZWxl
Z2F0ZT4gbG9hZERlbGVnYXRlID0gYWRvcHROUyhbW0N1c3RvbVByb3RvY29sc0xvYWREZWxlZ2F0
ZSBhbGxvY10gaW5pdF0pOwogICAgIFt3a1ZpZXcgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcl0u
bG9hZERlbGVnYXRlID0gbG9hZERlbGVnYXRlLmdldCgpOwogICAgIFtbd2tWaWV3IGJyb3dzaW5n
Q29udGV4dENvbnRyb2xsZXJdIGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhV
Ukw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDov
L3JlZGlyZWN0P3Rlc3QiLCBbVGVzdFByb3RvY29sIHNjaGVtZV1dXV1dOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCA5ZDM3Y2NlZGRiODIxNTc0NzVkODFm
MTIyMGY0NTZiODY0YzNiMTcxLi4zYWM5M2E2ZDYzZWE1ZjI0MWI0NzU4ZTc2YjVmNzlkMDQyNTQy
OTUyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNw
cAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtMTA2
MSw4ICsxMDYxLDYgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVu
dFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKIAogICAgIHJlc2V0UXVvdGEo
KTsKIAotICAgIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdv
cmtlclRlc3RpbmcocGxhdGZvcm1Db250ZXh0KCksIHRydWUpOwotCiAgICAgV0tDb250ZXh0Q2xl
YXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLmNvbnRleHQoKSk7CiAKICAgICBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCksIGZhbHNlKTsK
QEAgLTEyMzcsNyArMTIzNSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmZpbmRBbmREdW1wV2Vi
S2l0UHJvY2Vzc0lkZW50aWZpZXJzKCkKICAgICBkdW1wUmVzcG9uc2UobWFrZVN0cmluZyhUZXN0
Q29udHJvbGxlcjo6d2ViUHJvY2Vzc05hbWUoKSwgIjogIiwKICAgICAgICAgV0tQYWdlR2V0UHJv
Y2Vzc0lkZW50aWZpZXIoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCkt
PnBhZ2UoKSksICdcbicsCiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpuZXR3b3JrUHJvY2Vzc05h
bWUoKSwgIjogIiwKLSAgICAgICAgV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVy
KG1fY29udGV4dC5nZXQoKSksICdcbicpKTsKKyAgICAgICAgV0tXZWJzaXRlRGF0YVN0b3JlR2V0
TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKHdlYnNpdGVEYXRhU3RvcmUoKSksICdcbicpKTsKICNl
bHNlCiAgICAgZHVtcFJlc3BvbnNlKCJcbiJfcyk7CiAjZW5kaWYKQEAgLTIyOTcsNyArMjI5NSw3
IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdENvbnRyb2xsZXI6OmdldEluamVjdGVkQnVu
ZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0YSgpCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6Om5ldHdv
cmtQcm9jZXNzRGlkQ3Jhc2goKQogewotICAgIHBpZF90IHBpZCA9IFdLQ29udGV4dEdldE5ldHdv
cmtQcm9jZXNzSWRlbnRpZmllcihtX2NvbnRleHQuZ2V0KCkpOworICAgIHBpZF90IHBpZCA9IFdL
V2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcih3ZWJzaXRlRGF0YVN0
b3JlKCkpOwogICAgIGZwcmludGYoc3RkZXJyLCAiI0NSQVNIRUQgLSAlcyAocGlkICVsZClcbiIs
IG5ldHdvcmtQcm9jZXNzTmFtZSgpLCBzdGF0aWNfY2FzdDxsb25nPihwaWQpKTsKICAgICBleGl0
KDEpOwogfQpAQCAtMzEzNiw3ICszMTM0LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0SWdu
b3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoYm9vbCBpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWkKIAog
dm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQogewotICAgIFdL
Q29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBX
S1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyh3ZWJzaXRlRGF0YVN0b3Jl
KCkpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycygp
CkBAIC0zMTY3LDkgKzMxNjUsOCBAQCBQbGF0Zm9ybVdlYlZpZXcqIFRlc3RDb250cm9sbGVyOjpw
bGF0Zm9ybUNyZWF0ZU90aGVyUGFnZShQbGF0Zm9ybVdlYlZpZXcqIHBhcmVudAogICAgIHJldHVy
biBuZXcgUGxhdGZvcm1XZWJWaWV3KGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpOwogfQogCi1XS0Nv
bnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0NvbnRleHRS
ZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBjb250ZXh0Q29uZmlndXJhdGlv
bikKK1dLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KFdL
Q29udGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmKQogewotICAgIFdL
Q29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKGNvbnRleHQsIGRlZmF1bHRXZWJzaXRl
RGF0YVN0b3JlKCkpOwogICAgIHJldHVybiBjb250ZXh0OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409451</attachid>
            <date>2020-09-22 23:01:02 -0700</date>
            <delta_ts>2020-09-23 00:19:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200922230100.patch</filename>
            <type>text/plain</type>
            <size>352583</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NDQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDVlM2FkYmI0MTMzZTI1NDRm
NmMxY2M5YTBlMmMwYTBlNTVlOGQwNTUuLmE4MDFiZWFhNDA4MDhmYzk1ODZiZGIzN2I4ZGZlM2Iz
NDQ0ZTYyMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzg0IEBACisyMDIwLTA5LTIyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggbW92ZXMgdGhlIHRoaW5ncyBvbiBXZWJQcm9jZXNzUG9vbCBhc3NvY2lhdGVk
IHdpdGggTmV0d29ya1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgYW5kIG1vdmVzIHRoZW0KKyAgICAg
ICAgdG8gV2Vic2l0ZURhdGFTdG9yZS4gIEl0J3MgcHJldHR5IG1lY2hhbmljYWwsIGJ1dCBpdCBy
ZWFjaGVzIGl0cyBmaW5nZXJzIGludG8gYSBsb3Qgb2YgdGhpbmdzLiAgU29tZSBjb21tZW50cwor
ICAgICAgICBvbiBpbnRlcmVzdGluZyBwYXJ0cyBhcmUgYmVsb3cuCisKKyAgICAgICAgV2h5IGFt
IEkgZG9pbmcgdGhpcz8gIEknbSBnbGFkIHlvdSBhc2tlZC4KKworICAgICAgICBXS1dlYlZpZXcg
aGFkIGEgZnVuZGFtZW50YWwgY29va2llIHByb2JsZW0gYmVmb3JlIHRoaXMgY2hhbmdlLiAgSXQg
aGFkIGEgV0tXZWJzaXRlRGF0YVN0b3JlIHRoYXQgY291bGQgcG9pbnQgdG8gYSBjb29raWUgc3Rv
cmUgb24gZGlzaworICAgICAgICB0aGF0IGNvdWxkIGJlIHVzZWQgaW4gbXVsdGlwbGUgbmV0d29y
ayBwcm9jZXNzZXMgYXQgdGhlIHNhbWUgdGltZS4gIFRoaXMgbGVkIHRvIHByb2JsZW1zIHdpdGgg
Y29va2llcyBiZWluZyByZWNlaXZlZCBvdmVyIHRoZSBuZXR3b3JrCisgICAgICAgIGluIHRob3Nl
IGRpZmZlcmVudCBwcm9jZXNzZXMgYmVpbmcgdW5hYmxlIHRvIGJlIHNoYXJlZCB1bnRpbCB0aGV5
IHdlcmUgd3JpdHRlbiB0byBkaXNrLCBzb21ldGhpbmcgdGhhdCBkb2VzIG5vdCBoYXBwZW4gaW1t
ZWRpYXRlbHksIGVzcGVjaWFsbHkKKyAgICAgICAgb24gaU9TLiAgVGhpcyBwcm9ibGVtIGlzIGV2
ZW4gd29yc2Ugd2l0aCBzZXNzaW9uIGNvb2tpZXMsIHdoaWNoIHNob3VsZCBiZSBrZXB0IGluIG1l
bW9yeSBhbmQgbmV2ZXIgYmUgd3JpdHRlbiB0byBkaXNrLiAgVGhvc2UgcHJvY2Vzc2VzCisgICAg
ICAgIGRpZCBub3QgdXNlIHNoYXJlZCBtZW1vcnkgdG8gc2hhcmUgdGhlIGNvb2tpZXMuICBUaGV5
IGp1c3QgZGlkbid0IHNoYXJlIHRoZW0sIHdoaWNoIGxlZCB0byBjb29raWUgaW5jb3JyZWN0bmVz
cy4gIFRoaXMgd2FzIHVuZm9ydHVuYXRlbHkKKyAgICAgICAgdGhlIGRlZmF1bHQgY29uZmlndXJh
dGlvbiBpZiB5b3UgY2FsbCBbW1dLV2ViVmlldyBhbGxvY10gaW5pdF0gbW9yZSB0aGFuIG9uY2Us
IHdoaWNoIG1hbnkgZGV2ZWxvcGVycyBkby4gIFRoZXJlIHdhcyBhbHNvIG9jY2FzaW9uYWwgY29v
a2llCisgICAgICAgIGNvcnJ1cHRpb24gYW5kIGxvc3MgZnJvbSBtdWx0aXBsZSBwcm9jZXNzZXMg
d3JpdGluZyBjb29raWVzIHRvIHRoZSBzYW1lIGZpbGUuICBBbGwgdGhlc2UgcHJvYmxlbXMgY2Fu
IGJlIHdvcmtlZCBhcm91bmQgYnkgZG9pbmcgd2hhdCBTYWZhcmkgZG9lczoKKyAgICAgICAgbWFu
dWFsbHkgc2V0dGluZyB0aGUgV0tQcm9jZXNzUG9vbCBvZiBhbGwgV0tXZWJWaWV3Q29uZmlndXJh
dGlvbnMgdG8gdGhlIHNhbWUgcHJvY2VzcyBwb29sIHRvIG9ubHkgdXNlIG9uZSBuZXR3b3JrIHBy
b2Nlc3MuICBUaGlzIGlzIG5vdCBpbnR1aXRpdmUKKyAgICAgICAgb3Igd2VsbCBkb2N1bWVudGVk
LCBhbmQgZXZlbiB0aG91Z2ggSSBoYXZlIHNwZW50IHRoZSBtYWpvcml0eSBvZiBXV0RDIGxhYnMg
Zm9yIHRoZSBsYXN0IDMgeWVhcnMgdGVsbGluZyBkZXZlbG9wZXJzIHRvIGRvIGl0LCBtb3N0IGRv
IG5vdC4KKyAgICAgICAgVGhlIGRlZmF1bHQgYmVoYXZpb3Igc2hvdWxkIG5vdCBsZWFkIHRvIGNv
b2tpZSBpbmNvcnJlY3RuZXNzLCBjb3JydXB0aW9uLCBvciBsb3NzLiAgVGhpcyBhY2NvbXBsaXNo
ZXMgdGhhdC4KKworICAgICAgICBBIGJpZ2dlciBwcm9ibGVtIHRoYXQgY2FuJ3QgcmVhbGx5IGJl
IHdvcmtlZCBhcm91bmQgd2VsbCBpcyB3aGF0IHdlIHdlcmUgZG9pbmcgaW4gb3VyIFdLSFRUUENv
b2tpZVN0b3JlIEFQSS4gIE1hbnkgZGV2ZWxvcGVycyBjYWxsIHNldENvb2tpZTpjb21wbGV0aW9u
SGFuZGxlcjoKKyAgICAgICAgdG8gImxvZyBpbiIgdGhlIHVzZXIgYnkgc2V0dGluZyBhIGNvb2tp
ZSwgdGhlbiBpbiB0aGUgY29tcGxldGlvbiBoYW5kbGVyLCB0aGV5IG9wZW4gYSBXS1dlYlZpZXcg
dG8gdGhlaXIgcGFnZSBhbmQgZXhwZWN0IHRoZSBjb29raWUgdG8gYmUgc2VudC4gIEJlZm9yZSB0
aGlzCisgICAgICAgIGNoYW5nZSwgd2Ugd291bGQgbm90IGtub3cgd2hpY2ggcHJvY2VzcyBwb29s
IHRvIHNldCB0aGUgY29va2llIGluIHNvIHdlIHdvdWxkIGd1ZXNzLiAgSWYgdGhlcmUgd2VyZSBu
byBwcm9jZXNzIHBvb2xzLCB3ZSB3b3VsZCBzdGFydCB3cml0aW5nIHRvIGRpc2sgYW5kIGhvcGUK
KyAgICAgICAgaXQgd3JpdGVzIGZhc3QgZW5vdWdoLiAgV2UgY2FuJ3Qgd2FpdCBmb3IgaXQgdG8g
Y29tcGxldGUgYmVjYXVzZSBpdCBjYXVzZXMgaGFuZ3MgbGlrZSByZGFyOi8vcHJvYmxlbS82Njk2
MTA2Ni4gIFRoaXMgc29sdXRpb24gYWxsb3dzIHRvIHN0YXJ0IHRoZSBuZXR3b3JrCisgICAgICAg
IHByb2Nlc3Mgb2YgdGhhdCBXZWJzaXRlRGF0YVN0b3JlIGFuZCBzZXQgdGhlIGNvb2tpZSBpbiB0
aGF0IHByb2Nlc3MuICBXZSBub3cga25vdyB0aGF0IGlzIHRoZSBvbmx5IHByb2Nlc3MgdGhpcyBX
ZWJzaXRlRGF0YVN0b3JlIHdpbGwgZXZlciB1c2UuICBOb3csIHVzZXJzCisgICAgICAgIHdpbGwg
YmUgYWJsZSB0byBhY3R1YWxseSBiZSBsb2dnZWQgaW4gYWxsIHRoZSB0aW1lIGluIHN1Y2ggYXBw
cy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFu
YWdlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdl
ci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbik6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdl
U2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3Jh
Z2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJs
L05ldHdvcmtQcm9jZXNzQ3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
OjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURh
dGFTdG9yZVNlc3Npb24pOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1By
b2Nlc3NTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3Jt
Q3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBT
aGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVk
L1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9B
UElIVFRQQ29va2llU3RvcmUuY3BwOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OkhU
VFBDb29raWVTdG9yZSk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29r
aWVTdG9yZSk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llcyk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llc0ZvclVSTCk6CisgICAgICAgIChBUEk6
OkhUVFBDb29raWVTdG9yZTo6c2V0Q29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVT
dG9yZTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxl
dGVBbGxDb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rl
ck9ic2VydmVyKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2Vy
RGVzdHJveWVkKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5l
d1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkhUVFBD
b29raWVTdG9yZTo6dW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucyk6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcDoKKyAgICAgICAgKFdLQ29udGV4
dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgIChXS0NvbnRleHRTZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdLQ29udGV4dFNldFByaW1h
cnlXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIp
OiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVG
b3JTZXJ2aWNlV29ya2VyVGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXS0NvbnRleHRUZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRl
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHA6
CisgICAgICAgIChXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbToKKyAgICAgICAgKC1bV0tQ
cm9jZXNzUG9vbCBfc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczpdKToKKyAgICAg
ICAgKC1bV0tQcm9jZXNzUG9vbCBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXSk6CisgICAgICAg
ICgtW1dLUHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1t
aW5lbnRseV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9zZW5kTmV0d29y
a1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tQcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JT
ZXJ2aWNlV29ya2VyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9uZXR3
b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpdKTogRGVsZXRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW06CisgICAgICAgICgtW1dL
V2Vic2l0ZURhdGFTdG9yZSBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6
XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NQ
cmVwYXJlVG9TdXNwZW5kOl0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3NlbmRO
ZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV0pOgorICAgICAgICAoLVtXS1dlYnNp
dGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV0pOgorICAgICAgICAoLVtX
S1dlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6XSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwOgorICAgICAg
ICAoX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlOjpjb29raWVNYW5hZ2VyIGNvbnN0KToKKyAg
ICAgICAgKF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZTo6fl9XZWJLaXRDb29raWVNYW5hZ2Vy
UHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKToKKyAgICAgICAg
KHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKToKKyAgICAgICAg
KHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeSk6CisgICAgICAgICh3ZWJr
aXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nv
b2tpZV9tYW5hZ2VyX2FkZF9jb29raWUpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X2dldF9jb29raWVzKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29v
a2llKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHA6
CisgICAgICAgICh3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0Nv
Y29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1l
bnRGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5OjpjYW5jZWwp
OgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5OjpwdWJsaXNoUHJvZ3Jlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5Ojp3aWxsU2VuZFJlcXVlc3Qp
OgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5OjpkZWNpZGVEZXN0aW5hdGlvbldpdGhT
dWdnZXN0ZWRGaWxlbmFtZUFzeW5jKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkUHJveHlNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpE
b3dubG9hZFByb3h5TWFwKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6YXBw
bGljYXRpb25EaWRFbnRlckJhY2tncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFBy
b3h5TWFwOjphcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQpOgorICAgICAgICAoV2ViS2l0
OjpEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAgICAgKFdlYktp
dDo6RG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5pc2hlZCk6CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkUHJveHlNYXA6OmludmFsaWRhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eU1hcC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL0N1
c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdGFydExvYWRp
bmcpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6
c3RvcExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6
OmFsbE5ldHdvcmtQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1By
b3h5OjpkZWZhdWx0TmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp0ZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGF0YVN0b3JlUGFyYW1ldGVycyk6CisgICAgICAgIChX
ZWJLaXQ6OmFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KToKKyAg
ICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xTaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nl
c3NQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3Jr
UHJvY2Vzc1Byb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0
TGF1bmNoT3B0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmNy
ZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZENsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24pOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjphZGRTZXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbik6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lv
bklEKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29y
a2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6
YW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktp
dDo6YW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Omhhc1Nlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW06
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OlhQQ0V2ZW50SGFuZGxlcjo6
aGFuZGxlWFBDRXZlbnQgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5h
Z2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6fldlYkNvb2tpZU1hbmFnZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llc01v
ZGlmaWVkU2luY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNl
dENvb2tpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEFs
bENvb2tpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENv
b2tpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0YXJ0T2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN1cHBsZW1lbnROYW1l
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnBy
b2Nlc3NQb29sRGVzdHJveWVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2ll
TWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xvc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnJlZldlYkNvbnRleHRTdXBwbGVtZW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZXJlZldlYkNvbnRl
eHRTdXBwbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29va2llTWFu
YWdlclByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3Jl
YXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50SW5O
ZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2xlYXJTZXJ2
aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6cHJlY29ubmVjdFRvKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRD
b21taXRMb2FkRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmxvZ0Zy
YW1lTmF2aWdhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZHVtcEFkQ2xp
Y2tBdHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2xlYXJBZENs
aWNrQXR0cmlidXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlv
bnNBc0V4cGlyZWRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhD
dXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OldlYlByb2Nlc3NQb29sKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6On5XZWJQ
cm9jZXNzUG9vbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNo
YW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE1lbW9yeVByZXNz
dXJlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nl
c3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdv
cmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpyZW1vdmVGcm9tU2VydmljZVdvcmtlclByb2Nlc3Nlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2FybWVkUHJvY2Vzcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppbml0aWFsaXplTmV3V2ViUHJvY2Vzcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1bmNo
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlU2VydmljZVdvcmtlclVzZXJB
Z2VudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwYWdlQmVnaW5Vc2luZ1dl
YnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZG93bmxv
YWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVzdW1lRG93bmxvYWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3Vy
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFz
QnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3Rv
bVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dW5y
ZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVz
dGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFBy
b3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZVNlcnZpY2VX
b3JrZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQ
cm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vz
c0Fzc2VydGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNl
V29ya2VyUGFnZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNl
dFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3Rpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtl
ckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNz
Q29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpl
bnN1cmVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIFRoZXJlIHNlZW1zIHRvIGJl
IGEgbG90IG9mIGNvZGUgcmVtb3ZhbCBoZXJlLCBidXQgbW9zdCBvZiBpdCB3YXMgZHVwbGljYXRl
IGNvZGUgd2l0aAorICAgICAgICBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzIHdoaWNoIGlz
IHVzZWQgaW5zdGVhZC4gIFRoYXQgd2hpY2ggd2FzIG5vdCBkdXBsaWNhdGUgd2FzCisgICAgICAg
IG1vdmVkIHRvIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05l
d1Byb2Nlc3MuICBUaGlzIHdhcyB0aGUgaGFyZGVzdCBwYXJ0IG9mIHRoaXMgcGF0Y2guCisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24p
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nl
c3NJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0d29y
a1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2Vu
ZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5Rm9yVGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Zmx1c2hDb29raWVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0
YVRyYW5zZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb05ldHdvcmtpbmdQcm9j
ZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQcm94eTo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50
Rm9yVGVzdGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRh
U3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vi
c2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OldlYnNp
dGVEYXRhU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjp+V2Vic2l0
ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVy
V2l0aFNlc3Npb25JRE1hcCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmV4
aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6bmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpuZXR3b3JrUHJvY2VzcyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6cmVtb3ZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnJlc2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8p
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1Rp
bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJl
dHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZURvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0
ZXJlZEFzU3VicmVzb3VyY2VVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRv
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lz
dGVyZWRBc1JlZGlyZWN0aW5nVG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpjbGVhclByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c3VibWl0VGVsZW1ldHJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhU3VtbWFyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxl
Q29va2llQmxvY2tpbmdVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVz
dGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRT
dGF0aXN0aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFj
Y2Vzc0VudHJpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1l
VG9MaXZlVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bG9nVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JU
ZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1Np
dGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JU
ZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVz
dGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0
Q05BTUVEb21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzeW5jTG9jYWxTdG9yYWdl
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBG
b3JQcmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpyZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dGVybWluYXRlTmV0d29y
a1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29y
a1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZv
clRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29y
a1Byb2Nlc3NEaWRSZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2Rl
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6Zmx1c2hDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW5hbWVPcmlnaW5Jbldl
YnNpdGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFzQXBwQm91
bmRTZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xl
YXJBcHBCb3VuZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpm
b3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29y
a1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1bmRs
ZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVG
b3JTZXNzaW9uSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
Ojpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwZW5kaW5n
Q29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmFkZFBlbmRpbmdDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3Rv
cmVTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1T
ZXROZXR3b3JrUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vz
c1Byb3h5R0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cGxhdGZv
cm1HZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJDb29raWVN
YW5hZ2VyUHJveHlTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL3Nv
dXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyk6CisKIDIwMjAtMDktMjIgIExh
dXJvIE1vdXJhICA8bG1vdXJhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gUkVHUkVTU0lP
TihyMjY3Mzk4KTogc2V2ZXJhbCBoaWRwaSB0ZXN0cyBhcmUgZmFpbGluZwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIu
Y3BwCmluZGV4IGZjZTIzODk4N2E3ODUwZjE4YzlmMzA2YzUwZTk4Y2U5ODhkMTI1ZmQuLjVjOWI3
NzE4NmZiMTgxMGNiMjg1NzE0YmM1Mzc1MDkxYTQ4NTdlMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0Nvb2tpZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llU3RvcmFn
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRUUENvb2tpZUFjY2VwdFBvbGljeS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CkBAIC0xNDMsMTUgKzE0NCwxOCBAQCB2b2lk
IFdlYkNvb2tpZU1hbmFnZXI6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCkKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgcGxhdGZvcm1TZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0gICAgbV9wcm9jZXNzLmNvb2tpZUFjY2VwdFBvbGlj
eUNoYW5nZWQocG9saWN5KTsKLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgcGxhdGZv
cm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSwgW3BvbGljeSwgcHJvY2VzcyA9IG1h
a2VSZWYobV9wcm9jZXNzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIHByb2Nlc3MtPmNvb2tpZUFjY2VwdFBvbGlj
eUNoYW5nZWQocG9saWN5KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9KTsK
IH0KIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBD
b29raWVBY2NlcHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRp
b25IYW5kbGVyKG1fcHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQ
b2xpY3koKSk7CisgICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3Jh
Z2VTZXNzaW9uKHNlc3Npb25JRCkpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VT
ZXNzaW9uLT5jb29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihIVFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
b29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9XZWJDb29raWVNYW5hZ2VyLmgKaW5kZXggY2E3ZjU1ZTg2NmJkYWQ0YjFlMzUyZThm
NjQwNTdiYWJjNDYyODMyZC4uMzVjZThhOWVjZmMyOTRjZDZkZTFlN2ZmOTMxMGUwYTU3ZWE0OWQ3
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNv
b2tpZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMv
V2ViQ29va2llTWFuYWdlci5oCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAiU291cENvb2tp
ZVBlcnNpc3RlbnRTdG9yYWdlVHlwZS5oIgogI2VuZGlmCiAKK09CSkNfQ0xBU1MgTlNIVFRQQ29v
a2llU3RvcmFnZTsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IENvb2tpZTsKIGVudW0g
Y2xhc3MgSFRUUENvb2tpZUFjY2VwdFBvbGljeSA6IHVpbnQ4X3Q7CkBAIC03OSw4ICs4MSw4IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBnZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmKTsKICAgICB2b2lk
IGdldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYpOwogCi0gICAgdm9pZCBwbGF0Zm9y
bVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGlj
eSk7Ci0gICAgdm9pZCBnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYpOworICAgIHZvaWQgcGxh
dGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQ
b2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBnZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdl
YkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmKTsKIAogICAgIHZvaWQgc3RhcnRPYnNl
cnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEKTsKICAgICB2b2lkIHN0b3BPYnNlcnZp
bmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEKTsKQEAgLTg4LDQgKzkwLDggQEAgcHJpdmF0
ZToKICAgICBOZXR3b3JrUHJvY2VzcyYgbV9wcm9jZXNzOwogfTsKIAorI2lmIFBMQVRGT1JNKENP
Q09BKQordm9pZCBzYXZlQ29va2llcyhOU0hUVFBDb29raWVTdG9yYWdlICosIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFu
YWdlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9X
ZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmluCmluZGV4IGFjZDc1NDQwZDgzZjM0NjY1MGM5ZjMz
Yjc1YjVkNWQwOTM1MjEzYmEuLjZmZGY1NzcyYWE2YWFlMzk0MDJhOWE4OWY1NmM4NGY3YmQ0MzU4
NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJD
b29raWVNYW5hZ2VyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0zNiw3ICszNiw3IEBA
IG1lc3NhZ2VzIC0+IFdlYkNvb2tpZU1hbmFnZXIgTm90UmVmQ291bnRlZCB7CiAgICAgdm9pZCBE
ZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdh
bGxUaW1lIHRpbWUpIC0+ICgpIEFzeW5jCiAKICAgICB2b2lkIFNldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3koZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5
KSAtPiAoKSBBc3luYwotICAgIHZvaWQgR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSgpIC0+IChl
bnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5j
CisgICAgdm9pZCBHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCkgLT4gKGVudW06dWludDhfdCBXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBv
bGljeSkgQXN5bmMKICAgICAKICAgICB2b2lkIFN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgdm9pZCBTdG9wT2JzZXJ2aW5nQ29va2llQ2hh
bmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvY3VybC9XZWJDb29raWVNYW5hZ2VyQ3VybC5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvY3VybC9XZWJDb29raWVNYW5hZ2Vy
Q3VybC5jcHAKaW5kZXggYzJlZjE1Njg0NTA0MjAwZjk4ZWU0ZmU2MGUzNWFkZGEyNWMxOWQ2ZC4u
ZmFhZGE1MGY5YzQzZDQ0M2Q0OTM4ODhjOWJkNjZjNGY3MDkyMDNkOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFuYWdlckN1
cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9jdXJsL1dl
YkNvb2tpZU1hbmFnZXJDdXJsLmNwcApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLXZvaWQgV2ViQ29va2llTWFuYWdlcjo6
cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kg
cG9saWN5KQordm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBDb29raWVBY2NlcHRQb2xpY3kg
Y3VybFBvbGljeSA9IENvb2tpZUFjY2VwdFBvbGljeTo6T25seUZyb21NYWluRG9jdW1lbnREb21h
aW47CiAgICAgc3dpdGNoIChwb2xpY3kpIHsKQEAgLTU1LDYgKzU1LDcgQEAgdm9pZCBXZWJDb29r
aWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFj
Y2VwdFBvbGljeQogICAgIG1fcHJvY2Vzcy5mb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtj
dXJsUG9saWN5XSAoY29uc3QgYXV0byYgbmV0d29ya1N0b3JhZ2VTZXNzaW9uKSB7CiAgICAgICAg
IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5zZXRDb29raWVBY2NlcHRQb2xpY3koY3VybFBvbGljeSk7
CiAgICAgfSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMv
bWFjL1dlYkNvb2tpZU1hbmFnZXJNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0Nvb2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJNYWMubW0KaW5kZXggMTlmNTg3OGQ2NjJjMzZi
YmQ3ZmM2Mzg0N2JjZDc4YWM5YmJjMmI5Ni4uN2Y5MTIwY2EyZTFmYzA4YjI1ZDU4ZjBlYTVjMDgz
ZDI2NGYwZWI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29r
aWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ29va2llcy9tYWMvV2ViQ29va2llTWFuYWdlck1hYy5tbQpAQCAtMzEsNiArMzEs
NyBAQAogI2ltcG9ydCA8V2ViQ29yZS9IVFRQQ29va2llQWNjZXB0UG9saWN5Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9ydCA8cGFsL3NwaS9jZi9D
Rk5ldHdvcmtTUEkuaD4KKyNpbXBvcnQgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KICNpbXBv
cnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNTMs
MTUgKzU0LDE5IEBAIHN0YXRpYyBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5IHRvQ0ZI
VFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeShIVFRQQ29vCiAgICAgcmV0dXJuIENGSFRUUENv
b2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lBbHdheXM7CiB9CiAKLXZvaWQgV2ViQ29va2llTWFuYWdl
cjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kgcG9saWN5KQordm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoaGFzUHJvY2Vz
c1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7CiAKKyAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBbW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hh
cmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZUFjY2VwdFBvbGljeTpzdGF0aWNfY2FzdDxO
U0hUVFBDb29raWVBY2NlcHRQb2xpY3k+KHBvbGljeSldOworICAgIHNhdmVDb29raWVzKFtOU0hU
VFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIAogICAgIG1fcHJvY2Vzcy5mb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9u
KFsmXSAoY29uc3QgYXV0byYgbmV0d29ya1N0b3JhZ2VTZXNzaW9uKSB7CiAgICAgICAgIGlmIChh
dXRvIGNvb2tpZVN0b3JhZ2UgPSBuZXR3b3JrU3RvcmFnZVNlc3Npb24uY29va2llU3RvcmFnZSgp
KQogICAgICAgICAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZUFjY2VwdFBvbGljeShj
b29raWVTdG9yYWdlLmdldCgpLCB0b0NGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kocG9s
aWN5KSk7CisgICAgICAgIGlmIChhdXRvICpzdG9yYWdlID0gbmV0d29ya1N0b3JhZ2VTZXNzaW9u
Lm5zQ29va2llU3RvcmFnZSgpKQorICAgICAgICAgICAgc2F2ZUNvb2tpZXMoc3RvcmFnZSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAu
Y3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2ll
TWFuYWdlclNvdXAuY3BwCmluZGV4IDc1NGQwYmJjNmI0ZmU3MjdmMGViZWE0MWZiMThjOGE2YmFh
YjE2NjMuLmQ1NzZhZmRlNDJmOGI1MTJmMzRiN2FlMzQxYzlkNzUxYWU5NDQ4NmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1h
bmFnZXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMv
c291cC9XZWJDb29raWVNYW5hZ2VyU291cC5jcHAKQEAgLTM3LDExICszNywxMiBAQAogbmFtZXNw
YWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotdm9pZCBXZWJDb29raWVN
YW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2Vw
dFBvbGljeSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fcHJvY2Vzcy5m
b3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtwb2xpY3ldIChhdXRvJiBzZXNzaW9uKSB7CiAg
ICAgICAgIHNlc3Npb24uc2V0Q29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7CiAgICAgfSk7Cisg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRD
b29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0
cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUgc3RvcmFn
ZVR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCmluZGV4IGJlOGQ5NjY2MmJlNmRjZDg1ZmEzYzMyOTI5YWUwZjBiNWQxODIzNDMuLjViYTEy
MjM0MTgzN2FmNmE4YzhjZTZkZWQ3M2ZjNDkxMWE5YjVlODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0zNDcsMzAgKzM0Nyw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiAKICAgICBzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1
Z01vZGUocGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUpOwogCi0g
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBh
dXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRDsKLSAgICBzZXRTZXNzaW9uKHNlc3Npb25J
RCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKLQotICAg
IFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0gICAgYWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFn
ZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFn
ZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCi0gICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKLSAgICBib29sIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQg
PSB0cnVlOwotICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQsIFdURk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
KSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLSNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25J
RCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJl
Y3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8qIGRlZmF1bHRTZXNzaW9uID0g
bmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0gICAg
YXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNlc3Npb24tPm5ldHdvcmtTdG9y
YWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgZGVmYXVs
dFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKLQogICAgIGZvciAoYXV0byYgc3Vw
cGxlbWVudCA6IG1fc3VwcGxlbWVudHMudmFsdWVzKCkpCiAgICAgICAgIHN1cHBsZW1lbnQtPmlu
aXRpYWxpemUocGFyYW1ldGVycyk7CiAKQEAgLTUwNSw4ICs0ODEsNiBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJv
b2wgc2hvdWxkVQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6
OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lv
biwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFzZSkKICNlbmRpZgogewotICAgIEFTU0VSVChz
ZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0KICAgICBh
dXRvIGFkZFJlc3VsdCA9IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy5hZGQoc2Vzc2lvbklELCBu
dWxscHRyKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm47
CkBAIC01MjEsNyArNDk1LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihj
b25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNob3VsZFUKICAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllciA9IG1ha2VTdHJpbmcoaWRlbnRpZmllckJhc2Us
ICIuUHJpdmF0ZUJyb3dzaW5nLiIsIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSkuY3JlYXRl
Q0ZTdHJpbmcoKTsKICAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHN0
b3JhZ2VTZXNzaW9uID0gYWRvcHRDRihjcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oY2ZJZGVu
dGlmaWVyLmdldCgpKSk7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKHNlc3Npb25JRCAhPSBQQUw6
OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAgICBzdG9yYWdlU2Vzc2lvbiA9
IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlQ0ZTdG9yYWdlU2Vzc2lvbkZv
cklkZW50aWZpZXIoY2ZJZGVudGlmaWVyLmdldCgpKTsKIAogICAgIGlmIChOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OnByb2Nlc3NNYXlVc2VDb29raWVBUEkoKSkgewpAQCAtNTQ0LDIxICs1MTgsMTEg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y29va2llQWNjZXB0UG9saWN5Q2hhbmdlZChIVFRQQ29v
a2llQWNjZXB0UG9saWN5IG5ld1BvbGljeSkKIAogV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uKiBOZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQm
IHNlc3Npb25JRCkgY29uc3QKIHsKLSAgICBpZiAoc2Vzc2lvbklEID09IFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgIHJldHVybiAmZGVmYXVsdFN0b3JhZ2VTZXNz
aW9uKCk7CiAgICAgcmV0dXJuIG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy5nZXQoc2Vzc2lvbklE
KTsKIH0KIAotV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrUHJvY2Vzczo6
ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVmYXVsdE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbikKLSAgICAgICAgbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9u
ID0gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKLSAgICByZXR1cm4gKm1f
ZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6
Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYpPiYgZnVuY3RvcikKIHsKLSAgICBmdW5jdG9yKGRlZmF1
bHRTdG9yYWdlU2Vzc2lvbigpKTsKICAgICBmb3IgKGF1dG8mIHN0b3JhZ2VTZXNzaW9uIDogbV9u
ZXR3b3JrU3RvcmFnZVNlc3Npb25zLnZhbHVlcygpKQogICAgICAgICBmdW5jdG9yKCpzdG9yYWdl
U2Vzc2lvbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmgKaW5kZXggYWE3MzM3N2I3MzJmNjEwYjg2NzkwNTZjMzdkZjI4YWVlYTA3YWY4My4uZGM4
NmYzOTY5N2ZjNTAzZWE0ZGJkMWIwNmMzMjI5NzViMWU2OWQxNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMTcwLDcgKzE3MCw2IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgZm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBGdW5j
dGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYpPiYpOwogICAgIFdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Npb24oY29uc3QgUEFMOjpTZXNz
aW9uSUQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIGRlZmF1
bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5ld1Rlc3RpbmdTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lv
bklEJik7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBlbnN1cmVTZXNzaW9uKGNvbnN0
IFBBTDo6U2Vzc2lvbklEJiwgYm9vbCBzaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIGNv
bnN0IFN0cmluZyYgaWRlbnRpZmllciwgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+
JiYpOwpAQCAtMzc1LDcgKzM3NCw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIHBs
YXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbj4gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdDsK
IAogICAgIHZvaWQgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OkRlY29kZXImKTsKIApAQCAtNTQ0LDcgKzU0Miw2IEBAIHByaXZhdGU6CiAKICAg
ICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+
PiBtX25ldHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4gbV9uZXR3b3JrU3RvcmFn
ZVNlc3Npb25zOwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbj4gbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwogCiAgICAgUmVm
UHRyPFN0b3JhZ2VNYW5hZ2VyU2V0PiBtX3N0b3JhZ2VNYW5hZ2VyU2V0OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuY3BwCmluZGV4IDk5MDFjNWNiNzNjNzRmZTNkYTRlYmY1N2JhODUx
Mjg2ZmRhMTA0YmYuLmRkOTZiNGMzMmM0MzBiZDMwZjNkOTRhM2RlZGY4MTc5ZDc1YjA3Y2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC01NSw3ICs1NSw2IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVu
Y29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCB1aVByb2Nlc3NTREtWZXJzaW9uOwogICAgIElQ
Qzo6ZW5jb2RlKGVuY29kZXIsIG5ldHdvcmtBVFNDb250ZXh0LmdldCgpKTsKICNlbmRpZgotICAg
IGVuY29kZXIgPDwgZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYgVVNFKFNPVVApCiAg
ICAgZW5jb2RlciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5jb2RlciA8PCBpZ25vcmVU
TFNFcnJvcnM7CkBAIC02OCw5ICs2Nyw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2Rl
ciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxTY2hl
bWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0g
ICAgZW5jb2RlciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxkRGlz
YWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAgIGVu
Y29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFibGVB
ZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTYsMTIgKzExMiw2IEBAIGJvb2wg
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRl
Y29kZXIsIE5ldHdvcmtQcm9jCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCi0gICAg
T3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IGRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzOwotICAgIGRlY29kZXIgPj4gZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAg
aWYgKCFkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJlc3VsdC5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzKTsKLQogI2lmIFVTRShTT1VQKQogICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LmNvb2tpZUFjY2VwdFBvbGljeSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTE0MiwyMCArMTMyLDYgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
czo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Byb2MKICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3MpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBPcHRpb25hbDxTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGU+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGU7Ci0gICAgZGVjb2RlciA+PiBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlmICghc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3Vs
dC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RG
TW92ZSgqc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGREaXNhYmxlU2VydmljZVdv
cmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2Vu
ZGlmCi0KICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRFbmFibGVJVFBEYXRh
YmFzZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5oCmluZGV4IDExY2E1YTE5OWZjZmZlODgzZmZmMGEyZmY3OWRmZTQyMTBkOWRhZDEuLmViYTQ5
Y2QxNTM1OGJlOTZjMGM1ODc0YzMzOGUxZTVhY2ZjOTJlYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmgKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIkNhY2hlTW9kZWwuaCIK
ICNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCi0jaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZS5oPgogI2luY2x1ZGUgPHd0
Zi9Qcm9jZXNzSUQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC03MSw4ICs3MCw2IEBA
IHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgUmV0YWluUHRy
PENGRGF0YVJlZj4gbmV0d29ya0FUU0NvbnRleHQ7CiAjZW5kaWYKIAotICAgIFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzIGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIAogI2lmIFVT
RShTT1VQKQogICAgIFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0
UG9saWN5IHsgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeTo6QWx3YXlzQWNjZXB0IH07
CiAgICAgYm9vbCBpZ25vcmVUTFNFcnJvcnMgeyBmYWxzZSB9OwpAQCAtODUsMTIgKzgyLDcgQEAg
c3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBWZWN0b3I8U3Ry
aW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQotICAgIFN0cmluZyBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5OwotICAgIFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlOwotICAgIGJvb2wgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzVGVybWluYXRpb25EZWxheSB7IGZhbHNlIH07Ci0jZW5kaWYKLSAgICBib29sIHNob3VsZEVu
YWJsZUlUUERhdGFiYXNlIHsgZmFsc2UgfTsKKyAgICBib29sIHNob3VsZEVuYWJsZUlUUERhdGFi
YXNlIHsgdHJ1ZSB9OwogICAgIGJvb2wgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2Rl
IHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCmluZGV4IGY5
OTVlMDFkNDdkOGJkZDk2OWYyYzgwZTY3OWFkYWUxN2M5ZDViNzIuLjAyYzg2NzNkMzliMWI2ODI2
NjJhNzdlZDFjNjE2NmQ5NzFhNjJmNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNw
cApAQCAtMjE0LDcgKzIxNCw4IEBAIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsZWFyKCkK
IAogdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y2xvc2UoKQogewotICAgIEFTU0VSVCghbV9p
c0Nsb3NlZCk7CisgICAgaWYgKG1faXNDbG9zZWQpCisgICAgICAgIHJldHVybjsKICAgICBtX2lz
Q2xvc2VkID0gdHJ1ZTsKIAogICAgIGlmIChtX2RpZFNjaGVkdWxlRGF0YWJhc2VVcGRhdGUpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1By
b2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a1Byb2Nlc3NDb2NvYS5tbQppbmRleCBkYTYzNTkxMjQyMjNkYjk3MDMwZDFlYTc3YmMwMGNlZTUx
ZmIwMTdkLi44MmQ0NDIwYWNmYmI3ZWQyMjEzOTMxMGIyMmIxN2MyZGIyMGNiZjM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29j
b2EubW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJv
Y2Vzc0NvY29hLm1tCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJOZXR3b3JrUmVzb3VyY2VM
b2FkZXIuaCIKICNpbXBvcnQgIk5ldHdvcmtTZXNzaW9uQ29jb2EuaCIKICNpbXBvcnQgIlNhbmRi
b3hFeHRlbnNpb24uaCIKKyNpbXBvcnQgIldlYkNvb2tpZU1hbmFnZXIuaCIKICNpbXBvcnQgPFdl
YkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY1N1
ZmZpeC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3RDRk5ldC5oPgpAQCAtNzgs
OSArNzksNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVu
ZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFU
U0NvbnRleHQocGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMDUsMTEg
KzEwMyw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzQ29jb2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUgc2V0U2hh
cmVkVVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVE
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSk7Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNzOjpzb3Vy
Y2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9BUFBMSUNB
VElPTl9BVURJVF9EQVRBKQpAQCAtMjIxLDcgKzIxNCw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OmZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21wbGV0aW9u
SGFuCiAgICAgcGxhdGZvcm1GbHVzaENvb2tpZXMoc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNhdmVDb29raWVzKE5TSFRUUENvb2tpZVN0
b3JhZ2UgKmNvb2tpZVN0b3JhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3ZvaWQgc2F2ZUNvb2tpZXMoTlNIVFRQQ29va2llU3RvcmFnZSAqY29va2ll
U3RvcmFnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgQVNTRVJUKGNvb2tpZVN0b3Jh
Z2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdv
cmtQcm9jZXNzQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0
d29ya1Byb2Nlc3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQyZGNjOGUzZjliOGYxNjky
OTk3ZjY3MTkyLi40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5M2UyMjU2YTM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3ND
dXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1By
b2Nlc3NDdXJsLmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkK
IHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4g
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQ2Vy
dGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBjMjczNmUwMjZh
NTVkM2Q0MDIwZjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0NjIwZjAyYTdkOWU5ZTg2
OWVjODY0OTFiN2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNTUsMTUgKzU1LDEx
IEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVT
ZXNzaW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNv
bnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFu
ZGxlKTsKIAogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nlc3ND
b29raWVTdG9yYWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFt
ZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAgIGlm
ICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2ll
U3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KQogICAgICAgICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3RvcmFnZUZyb21JZGVu
dGlmeWluZ0RhdGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcik7
CiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9u
LCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkpLCBXVEZNb3ZlKHVp
UHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrUHJv
Y2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29v
a2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0Q29v
a2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25JRCwg
TmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRleCA0
MWFmZGNjNjFhZGM1ODNkY2YxOWYyZDQwYWEyODkxZjhhMDEzMjhiLi4wOTNkNTk5NTk2YTY4ODMw
YWYwOTkzZmEzNjgzMWUwYzMyNGJmYmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApAQCAtMTQwLDExICsx
NDAsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJv
Y2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNldElnbm9yZVRMU0Vycm9ycyhw
YXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURl
ZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3JzKGJv
b2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0U2hvdWxk
SWdub3JlVExTRXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9BdHRhY2htZW50LmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9BdHRhY2htZW50LmgKaW5kZXggMTc0M2MzYjc4MzBhMDMwZjU3NTczY2IwZWFlODI3ZDQxOTU5
NGJhZS4uZDZmZjNjMTdlYmEwZDA0ZTA3ZGU4YmNhMWFhNzJjNTQzN2RjNWEzNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0F0dGFjaG1lbnQuaApAQCAtOTUsOCArOTUsOCBAQCBwcml2YXRl
OgogICAgIGludCBtX2ZpbGVEZXNjcmlwdG9yIHsgLTEgfTsKICAgICBzaXplX3QgbV9zaXplOwog
I2VsaWYgT1MoREFSV0lOKQotICAgIG1hY2hfcG9ydF9uYW1lX3QgbV9wb3J0OwotICAgIG1hY2hf
bXNnX3R5cGVfbmFtZV90IG1fZGlzcG9zaXRpb247CisgICAgbWFjaF9wb3J0X25hbWVfdCBtX3Bv
cnQgeyAwIH07CisgICAgbWFjaF9tc2dfdHlwZV9uYW1lX3QgbV9kaXNwb3NpdGlvbiB7IDAgfTsK
ICNlbGlmIE9TKFdJTkRPV1MpCiAgICAgSEFORExFIG1faGFuZGxlIHsgSU5WQUxJRF9IQU5ETEVf
VkFMVUUgfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuY3BwCmluZGV4IDZkMGMxMjlhNzQwNTEwZDM4Njk3MzcwNWFkMDky
ZWYxMzJjYzA3NWEuLjA0ODEwYjNlMTliZTk2Y2FkMWFkODJhNDRkY2VkYjI2ZWY3ODI2MWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cy5jcHAKQEAgLTQwLDEzICs0MCw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6
OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgZW5jb2RlciA8PCB1aVByb2Nlc3NDb29raWVTdG9y
YWdlSWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9u
SGFuZGxlOwotICAgIGVuY29kZXIgPDwgcGVuZGluZ0Nvb2tpZXM7CiAKICNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKICAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA8
PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNF
X1dPUktFUikKQEAgLTgzLDEyICs3OSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0
aEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFu
ZGxlKTsKIAotICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpDb29raWU+PiBwZW5kaW5nQ29v
a2llczsKLSAgICBkZWNvZGVyID4+IHBlbmRpbmdDb29raWVzOwotICAgIGlmICghcGVuZGluZ0Nv
b2tpZXMpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5wZW5k
aW5nQ29va2llcyA9IFdURk1vdmUoKnBlbmRpbmdDb29raWVzKTsKLQogI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQogICAgIE9wdGlvbmFsPFN0cmluZz4gaW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5OwogICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwpAQCAtMTAxLDE0
ICs5MSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgaWYgKCFpbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUg
PSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBPcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGU+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwot
ICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGU7Ci0gICAgaWYgKCFpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmlu
ZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgq
aW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlm
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCmluZGV4IGYyN2RmNDg5ODA5
ZjMxOTYwOGI2ODBjYjJhOGExYzE0YjcwMTg0MzkuLmUxYjIzMzcwMTk5ZmUzNzAzMWU5ZGM1YzA1
NzgxNTUwMjFlMzRkNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuaApAQCAtNTEsMTUgKzUxLDExIEBAIHN0cnVjdCBXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycyB7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdWlQcm9jZXNzQ29va2ll
U3RvcmFnZUlkZW50aWZpZXI7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGNvb2tpZVN0
b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBl
bmRpbmdDb29raWVzOwogICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzIG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVyczsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAg
IFN0cmluZyBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBpbmRleGVkRGF0
YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCmluZGV4IGJjMDc4NjZmYmMzOTY4ZTc2Y2Fh
OWEzNTY4MTBjNmEyZmIwOWRjZmQuLmZmOTU1ODkyYmRhMGI4M2MyM2E5NmEwODM5ZWYzYmQwZDk0
NjljMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29v
a2llU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29v
a2llU3RvcmUuY3BwCkBAIC00Niw4ICs0Niw2IEBAIG5hbWVzcGFjZSBBUEkgewogSFRUUENvb2tp
ZVN0b3JlOjpIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRl
RGF0YVN0b3JlKQogICAgIDogbV9vd25pbmdEYXRhU3RvcmUod2Vic2l0ZURhdGFTdG9yZSkKIHsK
LSAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VP
cGVyYXRpb25zKCkpCi0gICAgICAgIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRp
b25zKCk7CiB9CiAKIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCkBAIC01NSw4
ICs1Myw2IEBAIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCiAgICAgQVNTRVJU
KG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFtX29ic2VydmVkQ29va2llTWFu
YWdlclByb3h5KTsKICAgICBBU1NFUlQoIW1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwot
Ci0gICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwogfQogCiB2
b2lkIEhUVFBDb29raWVTdG9yZTo6ZmlsdGVyQXBwQm91bmRDb29raWVzKGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtODEsMzMgKzc3LDE2
IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpCiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29r
aWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4m
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRh
U3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAo
IXBvb2wpIHsKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gYWxsQ29va2llczsKLSAg
ICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICAgICAgYWxsQ29va2llcyA9IGdldEFsbERl
ZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKLSAgICAgICAgYWxsQ29va2llcy5h
cHBlbmRWZWN0b3IobV9vd25pbmdEYXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwotCi0gICAg
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCBhbGxDb29raWVzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGZpbHRlckFwcEJvdW5kQ29v
a2llcyhhbGxDb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIH0p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBv
b2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29v
a2llTWFuYWdlci0+Z2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHBvb2wgPSBXVEZNb3ZlKHBv
b2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoY29u
c3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8m
IGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29r
aWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKICAgICAgICAgZmls
dGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpV
UkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4m
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0
YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYg
KCFwb29sKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLQotICAgIGF1
dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmdldENvb2tpZXMobV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChW
ZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNv
b2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVN
YW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsKICAgICAgICAgZmlsdGVyQXBw
Qm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9
KTsKIH0KQEAgLTExNSw3OCArOTQsMjkgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNG
b3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG8KIHZvaWQg
SFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+
JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildIChhdXRvJiYgYXBwQm91bmRDb29raWVzKSBtdXRhYmxlIHsKLSAgICAgICAg
YXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3Jh
Z2VPcGVyYXRpb25zKCk7Ci0gICAgICAgIGlmICghcG9vbCkgewotICAgICAgICAgICAgZm9yIChh
dXRvJiBjb29raWUgOiBhcHBCb3VuZENvb2tpZXMpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhN
RTogcGVuZGluZ0Nvb2tpZXMgdXNlZCBmb3IgZGVmYXVsdFNlc3Npb24gYmVjYXVzZSBzZXNzaW9u
IGNvb2tpZXMgY2Fubm90IGJlIHByb3BhZ2F0ZWQgdG8gTmV0d29yayBQcm9jZXNzIHdpdGggdWlQ
cm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuCi0gICAgICAgICAgICAgICAgaWYgKG1fb3du
aW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgICAgICAgICAgc2V0Q29va2ll
SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5hZGRQZW5kaW5nQ29v
a2llKGNvb2tpZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3Vw
cGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgY29va2ll
TWFuYWdlci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFwcEJv
dW5kQ29va2llcywgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOworICAgICAgICBhdXRvJiBjb29raWVNYW5hZ2Vy
ID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwor
ICAgICAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCBhcHBCb3VuZENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZShjb25zdCBXZWJD
b3JlOjpDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vz
c1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAg
ICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAgICAgZGVs
ZXRlQ29va2llRnJvbURlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+cmVtb3ZlUGVuZGluZ0Nvb2tp
ZShjb29raWUpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0
ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgW3Bvb2wgPSBX
VEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0pOwor
ICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nl
c3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29raWUobV9v
d25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8q
IHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAgZGVsZXRlQ29va2ll
c0luRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVB
bGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgYXV0byYgY29v
a2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1h
bmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpKTsKICAgICAvLyBGSVhNRTogVGhlIENvbXBsZXRpb25IYW5kbGVy
IHNob3VsZCBiZSBwYXNzZWQgdG8gV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29r
aWVzLgogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1f
b3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7
Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBzZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUocG9saWN5KTsKLSAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKKyAg
ICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNz
KCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0SFRUUENvb2tpZUFjY2Vw
dFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1c2hDb29r
aWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIy
NywyMSArMTU3LDcgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIoT2Jz
ZXJ2ZXImIG9ic2VydmVyKQogCiAgICAgbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA9IG1h
a2VVbmlxdWU8QVBJV2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI+KCp0aGlzKTsKIAotICAg
IGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9y
YWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIEFTU0VSVCghbV9v
YnNlcnZpbmdVSVByb2Nlc3NDb29raWVzKTsKLQotICAgICAgICAvLyBMaXN0ZW4gZm9yIGNvb2tp
ZSBub3RpZmljYXRpb25zIGluIHRoZSBVSVByb2Nlc3MgaW4gdGhlIG1lYW50aW1lLgotICAgICAg
ICBzdGFydE9ic2VydmluZ0NoYW5nZXNUb0RlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShbdGhp
c10gKCkgewotICAgICAgICAgICAgY29va2llc0RpZENoYW5nZSgpOwotICAgICAgICB9KTsKLQot
ICAgICAgICBtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMgPSB0cnVlOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1
cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZl
ZENvb2tpZU1hbmFnZXJQcm94eSA9ICZtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3Mo
KS5jb29raWVNYW5hZ2VyKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVn
aXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1h
bmFnZXJQcm94eU9ic2VydmVyKTsKIH0KIApAQCAtMjc2LDQ2ICsxOTIsMTAgQEAgdm9pZCBIVFRQ
Q29va2llU3RvcmU6OmNvb2tpZXNEaWRDaGFuZ2UoKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNv
b2tpZU1hbmFnZXJEZXN0cm95ZWQoKQogewogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJv
eHktPnVucmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICpt
X2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdl
clByb3h5ID0gbnVsbHB0cjsKLQotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+
cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29s
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0g
cG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBt
X29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3Jr
UHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclBy
b3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1f
Y29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCi12b2lkIEhUVFBDb29raWVTdG9yZTo6
cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIEFTU0VSVCgh
bV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vz
c1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IFdlYlByb2Nlc3NQb29sOjpyZWdpc3Rl
clByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihbdGhpc10oV2ViUHJvY2Vzc1Bvb2wmIG5ld1By
b2Nlc3NQb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPmlzQXNzb2NpYXRl
ZFByb2Nlc3NQb29sKG5ld1Byb2Nlc3NQb29sKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICAvLyBOb3cgdGhhdCBhbiBhc3NvY2lhdGVkIHByb2Nlc3MgcG9vbCBleGlzdHMsIHdlIG5l
ZWQgdG8gZmx1c2ggdGhlIFVJIHByb2Nlc3MgY29va2llIHN0b3JlCi0gICAgICAgIC8vIHRvIG1h
a2Ugc3VyZSBhbnkgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIHdpdGhpbiB0aGUgbmV3IHByb2Nlc3Mg
cG9vbC4KLSAgICAgICAgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAg
ICAgbmV3UHJvY2Vzc1Bvb2wuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQotICAgICAgICBpZiAo
bV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcikgewotICAgICAgICAgICAgbV9vYnNlcnZlZENv
b2tpZU1hbmFnZXJQcm94eSA9IG5ld1Byb2Nlc3NQb29sLnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdl
clByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwg
Km1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgICAgICB9Ci0gICAgICAgIHVucmVn
aXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlv
bnMoKQotewotICAgIGlmIChtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIp
Ci0gICAgICAgIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxp
c3RlbmVyKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7Ci0KLSAgICBt
X3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSAwOwotfQotCiAjaWYgIVBM
QVRGT1JNKENPQ09BKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmZsdXNoRGVmYXVsdFVJUHJvY2Vz
c0Nvb2tpZVN0b3JlKCkgeyB9CiBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBIVFRQQ29va2llU3Rv
cmU6OmdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKSB7IHJldHVybiB7
IH07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29v
a2llU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuaAppbmRleCBkNjIwYWRkYTRlN2Y4OTQ1NjYxOGEzZTIyZTFiZmQ0MzU3Nzc1YjE5Li5hMDVm
NDE0MzBkYjJiMjNkNDE3ODQwNzlhNGZiODZjNzQ2MGE3NTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCkBAIC04Myw5ICs4Myw2IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSFRUUENvb2tpZVN0b3JlKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZSYpOwogCi0gICAgdm9pZCByZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0
aW9ucygpOwotICAgIHZvaWQgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9u
cygpOwotCiAgICAgdm9pZCBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpOwogICAg
IHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBnZXRBbGxEZWZhdWx0VUlQcm9jZXNzQ29v
a2llU3RvcmVDb29raWVzKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0Q29va2llSW5EZWZhdWx0VUlQ
cm9jZXNzQ29va2llU3RvcmUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAppbmRleCA1OGM1NDUzZjQ4OTg3ZjVlMWFm
YWZlZjM0YzQzMzM1ZjFiNGNjOTkwLi4zN2JhYTY4ZjkyNGI5NTg3MmYwMWY3ZTRhODBkNWY0OTdk
NWZlOWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAK
QEAgLTQxMSwxMSArNDExLDYgQEAgdm9pZCBXS0NvbnRleHRQcmVjb25uZWN0VG9TZXJ2ZXIoV0tD
b250ZXh0UmVmLCBXS1VSTFJlZikKIHsKIH0KIAotV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29udGV4
dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJu
IFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnN1cHBsZW1lbnQ8V2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkpOwotfQotCiBXS1dlYnNpdGVEYXRhU3RvcmVS
ZWYgV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYpCiB7CiAgICAgcmV0
dXJuIFdLV2Vic2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUoKTsKQEAgLTUyNywxMyAr
NTIyLDYgQEAgdm9pZCBXS0NvbnRleHRTZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVy
RW5hYmxlZChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwKICAgICBXZWJLaXQ6OnRvSW1wbChjb250
ZXh0UmVmKS0+c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoZW5hYmxl
KTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZp
Y2VXb3JrZXJUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0LCBib29sIGFsbG93cykKLXsKLSNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlm
Ci19Ci0KIFdLRGljdGlvbmFyeVJlZiBXS0NvbnRleHRDb3B5UGx1Z0luQXV0b1N0YXJ0T3JpZ2lu
SGFzaGVzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewogICAgIHJldHVybiBXZWJLaXQ6OnRv
QVBJKCZXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+cGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFz
aGVzKCkubGVha1JlZigpKTsKQEAgLTU3NSwyMSArNTYzLDExIEBAIHZvaWQgV0tDb250ZXh0U2V0
Rm9udEFsbG93TGlzdChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tBcnJheVJlZiBhcnJheVJl
ZikKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0Rm9udEFsbG93TGlzdChXZWJL
aXQ6OnRvSW1wbChhcnJheVJlZikpOwogfQogCi12b2lkIFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0KQotewotICAgIFdlYktpdDo6dG9JbXBsKGNv
bnRleHQpLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCiB2b2lkIFdLQ29udGV4dFRl
cm1pbmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29udGV4dFJlZiBjb250ZXh0KQogewogICAgIFdlYktp
dDo6dG9JbXBsKGNvbnRleHQpLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQogCi1Qcm9j
ZXNzSUQgV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmKQotewotICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+bmV0
d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7Ci19Ci0KIHZvaWQgV0tDb250ZXh0QWRkU3VwcG9ydGVk
UGx1Z2luKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBkb21haW5SZWYsIFdL
U3RyaW5nUmVmIG5hbWVSZWYsIFdLQXJyYXlSZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5UmVmIGV4
dGVuc2lvbnNSZWYpCiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBAIC02MTks
MTIgKzU5NywxMSBAQCB2b2lkIFdLQ29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JU
ZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRl
eHRSZWYpLT5jbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpOwogfQogCi12b2lk
IFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoV0tDb250ZXh0UmVm
IGNvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKK3ZvaWQg
V0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0NvbnRleHRSZWYs
IGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKIHsKLSAgICBXZWJLaXQ6OnRv
SW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0
b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgd2Vic2l0
ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUoV0tD
b250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwo
Y29udGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktpdDo6dG9JbXBsKHdlYnNpdGVE
YXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgK
aW5kZXggMWQ4ZmFiOGExNDg2YWFkYjQ5NDE0NGI5OGYxMGU5MzYzOGQwYzVlNi4uMmFiNmVmODZm
NTMwZTc3Zjc0Y2JkNWRmNTg2MmFjNGQzMGI3OTg3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2OCw3ICsxNjgsNiBAQCBXS19FWFBPUlQgdm9pZCBX
S0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBP
UlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tD
b250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChX
S1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKIAogV0tfRVhQT1JUIFdLQXBw
bGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0QXBwbGljYXRpb25DYWNoZU1hbmFn
ZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNF
TUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKLVdLX0VYUE9SVCBX
S0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYg
Y29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdLX0VYUE9SVCBXS0dlb2xvY2F0aW9uTWFu
YWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRl
eHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVmIFdLQ29udGV4dEdldEljb25EYXRhYmFz
ZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5h
Z2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFnZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNv
bnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRh
U3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAppbmRleCBhMDI1MDExZjcwY2M2NTlmNWZhYTA4YTdk
NmNiYjNmZjU2ZWU2YTM4Li40OGEyOWM0NTY4YWI2N2IzYjdlMWVmOTgxNTZmNmVmYTg5NmIxZGZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2
YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0
ZS5oCkBAIC04MywxMSArODMsOCBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRXYXJtSW5pdGlh
bFByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogLy8gQXQgc29tZSBwb2ludCBpdCBzaG91
bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJv
Y2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRUZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250
ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmKTsKIAotV0tfRVhQT1JUIHZv
aWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVz
dGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0eXBlZGVmIHZvaWQgKCpXS0NvbnRleHRJbnZh
bGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSk7CiBXS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKFdLQ29udGV4dEludmFsaWRN
ZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VGdW5jdGlvbik7CiAgICAgCkBAIC05Nyw4ICs5
NCw2IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEZvbnRBbGxvd0xpc3QoV0tDb250ZXh0
UmVmLCBXS0FycmF5UmVmKTsKIAogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0UHJlY29ubmVjdFRv
U2VydmVyKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1VSTFJlZiBzZXJ2ZXJVUkwpIFdLX0NfQVBJ
X0RFUFJFQ0FURUQ7CiAKLVdLX0VYUE9SVCBXS1Byb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpOwotCiBXS19FWFBPUlQgdm9p
ZCBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4oV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLU3Ry
aW5nUmVmIGRvbWFpbiwgV0tTdHJpbmdSZWYgbmFtZSwgV0tBcnJheVJlZiBtaW1lVHlwZXMsIFdL
QXJyYXlSZWYgZXh0ZW5zaW9ucyk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhclN1cHBv
cnRlZFBsdWdpbnMoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tQYWdlLmNwcAppbmRleCA2NDhmMzAwOTYxYTUwNjBjOWNkZjAzZTNjZjgwNDU4
YmYyYmI1MGRkLi5iNDQ3MzQyMTIwMDYxM2MxOWVjM2FjOWFkNjY5OTc1MzRhYmVmMTlmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKQEAgLTM5OCw2ICszOTgsMTEg
QEAgdWludDY0X3QgV0tQYWdlR2V0UmVuZGVyVHJlZVNpemUoV0tQYWdlUmVmIHBhZ2UpCiAgICAg
cmV0dXJuIHRvSW1wbChwYWdlKS0+cmVuZGVyVHJlZVNpemUoKTsKIH0KIAorV0tXZWJzaXRlRGF0
YVN0b3JlUmVmIFdLUGFnZUdldFdlYnNpdGVEYXRhU3RvcmUoV0tQYWdlUmVmIHBhZ2UpCit7Cisg
ICAgcmV0dXJuIHRvQVBJKCZ0b0ltcGwocGFnZSktPndlYnNpdGVEYXRhU3RvcmUoKSk7Cit9CisK
IFdLSW5zcGVjdG9yUmVmIFdLUGFnZUdldEluc3BlY3RvcihXS1BhZ2VSZWYgcGFnZVJlZikKIHsK
ICAgICByZXR1cm4gdG9BUEkodG9JbXBsKHBhZ2VSZWYpLT5pbnNwZWN0b3IoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCmluZGV4IDY3MGI1ZTlmZDRiNDU0YTJiN2VkZmQy
MjMyYWFlOTUxYzQ2N2QwODMuLmM1MWI4MTYyYzg5NzM0YWIxNTJiZWYwZTk5MjMzN2Q1NWYyZGU4
YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCkBAIC0xMTgsNiArMTE4
LDggQEAgV0tfRVhQT1JUIGRvdWJsZSBXS1BhZ2VHZXRFc3RpbWF0ZWRQcm9ncmVzcyhXS1BhZ2VS
ZWYgcGFnZSk7CiAKIFdLX0VYUE9SVCB1aW50NjRfdCBXS1BhZ2VHZXRSZW5kZXJUcmVlU2l6ZShX
S1BhZ2VSZWYgcGFnZSk7CiAKK1dLX0VYUE9SVCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tQYWdl
R2V0V2Vic2l0ZURhdGFTdG9yZShXS1BhZ2VSZWYgcGFnZSk7CisKIFdLX0VYUE9SVCBXS0luc3Bl
Y3RvclJlZiBXS1BhZ2VHZXRJbnNwZWN0b3IoV0tQYWdlUmVmIHBhZ2UpOwogCiBXS19FWFBPUlQg
V0tTdHJpbmdSZWYgV0tQYWdlQ29weVVzZXJBZ2VudChXS1BhZ2VSZWYgcGFnZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVm
LmNwcAppbmRleCA5ZGRhNTkxYzk1MTg5YWIwYzI1YWM1NTQ2NmMwYTJiZmMzOTI3ZWJjLi42ODYx
MTRhYTVlZDBhMTMxNWU1YTlkNjE5NTFiODgwMmM3NWY4YWIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiQVBJSFRU
UENvb2tpZVN0b3JlLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1
ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5o
IgogI2luY2x1ZGUgIldLRGljdGlvbmFyeS5oIgpAQCAtNjksNiArNzAsMTYgQEAgV0tXZWJzaXRl
RGF0YVN0b3JlUmVmIFdLV2Vic2l0ZURhdGFTdG9yZUNyZWF0ZVdpdGhDb25maWd1cmF0aW9uKFdL
V2Vic2l0ZURhdGFTdG8KICAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpjcmVhdGUoKldlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLCBzZXNzaW9u
SUQpLmxlYWtSZWYoKSk7CiB9CiAKK3ZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0
d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSkKK3sKKyAgICBXZWJL
aXQ6OnRvSW1wbChkYXRhU3RvcmUpLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworfQorCitX
S1Byb2Nlc3NJRCBXS1dlYnNpdGVEYXRhU3RvcmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIo
V0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSkKK3sKKyAgICByZXR1cm4gV2ViS2l0Ojp0
b0ltcGwoZGF0YVN0b3JlKS0+bmV0d29ya1Byb2Nlc3MoKS5wcm9jZXNzSWRlbnRpZmllcigpOwor
fQorCiB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVJlbW92ZUlUUERhdGFGb3JEb21haW4oV0tXZWJz
aXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgV0tTdHJpbmdSZWYgaG9zdCwgdm9pZCogY29u
dGV4dCwgV0tXZWJzaXRlRGF0YVN0b3JlUmVtb3ZlSVRQRGF0YUZvckRvbWFpbkZ1bmN0aW9uIGNh
bGxiYWNrKQogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5o
CmluZGV4IGU3N2QwOWMxMDdkMWRhMDc4M2QwOWMwN2UyODAzZDA4NzEyNWU0OGIuLmFiMjY3NzQ2
YmU4MDc1YjAxNGM5ZmQ4MjMzNjIyZmM1OGYyZTI2YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCkBAIC0yOSw2ICsy
OSwxMyBAQAogI2luY2x1ZGUgPFdlYktpdC9XS0Jhc2UuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tE
ZXByZWNhdGVkLmg+CiAKKyNpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMikKK3R5
cGVkZWYgaW50IFdLUHJvY2Vzc0lEOworI2Vsc2UKKyNpbmNsdWRlIDx1bmlzdGQuaD4KK3R5cGVk
ZWYgcGlkX3QgV0tQcm9jZXNzSUQ7CisjZW5kaWYKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRl
cm4gIkMiIHsKICNlbmRpZgpAQCAtNTAsNiArNTcsMTEgQEAgV0tfRVhQT1JUIHZvaWQgV0tXZWJz
aXRlRGF0YVN0b3JlU2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0aW5n
KFcKIAogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlQ2xlYXJDYWNoZWRDcmVkZW50
aWFscyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmKTsKIAorV0tfRVhQT1JUIHZv
aWQgV0tXZWJzaXRlRGF0YVN0b3JlQ2xlYXJDYWNoZWRDcmVkZW50aWFscyhXS1dlYnNpdGVEYXRh
U3RvcmVSZWYgZGF0YVN0b3JlKTsKK1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVRl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOwor
CitXS19FWFBPUlQgV0tQcm9jZXNzSUQgV0tXZWJzaXRlRGF0YVN0b3JlR2V0TmV0d29ya1Byb2Nl
c3NJZGVudGlmaWVyKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworCiBXS19FWFBP
UlQgYm9vbCBXS1dlYnNpdGVEYXRhU3RvcmVHZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZChXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdL
V2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKFdLV2Vic2l0
ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIGJvb2wgZW5hYmxlKTsKIHR5cGVkZWYgdm9pZCAo
KldLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3RpY3NFcGhlbWVyYWxGdW5jdGlvbikoYm9vbCBpc0Vw
aGVtZXJhbCwgdm9pZCogZnVuY3Rpb25Db250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KaW5kZXggZmYzMDk0OTg2YzI0M2Qw
NDc0ZjI1MmQzOTFlNmNjYjc0ZjFmZWQ1Yi4uMWY1NmZiZmI2Nzk1MTY0OGRmMGI0YmJkY2JmMmE1
OTlkYzAwYmRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc1Bvb2wubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc1Bvb2wubW0KQEAgLTQwNiwyOCArNDA2LDYgQEAgc3RhdGljIE5TRGljdGlvbmFy
eSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNo
TWFwPFMKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyU3VwcG9ydGVkUGx1Z2lucygpOwogfQogCi0t
ICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcwotewotICAgIF9wcm9jZXNzUG9vbC0+dGVy
bWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0KLQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Ci17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5kTmV0d29ya1By
b2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7Ci19Ci0KLS0gKHZvaWQpX3Nl
bmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlv
bkhhbmRsZXIKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVU
b1N1c3BlbmRGb3JUZXN0aW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21w
bGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsK
LX0KLQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lCi17Ci0gICAgX3Byb2Nl
c3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQogLSAodm9pZClfdGVy
bWluYXRlU2VydmljZVdvcmtlcnMKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0ZVNlcnZp
Y2VXb3JrZXJzKCk7CkBAIC00MzUsMTIgKzQxMyw3IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBv
bGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxT
CiAKIC0gKHZvaWQpX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6KEJPT0wpdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcwogewotICAgIF9wcm9jZXNzUG9vbC0+c2V0VXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKTsKLX0KLQotLSAocGlkX3QpX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcgotewotICAgIHJl
dHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpOworICAgIFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiB9CiAKIC0gKHBpZF90KV9wcmV3YXJtZWRQ
cm9jZXNzSWRlbnRpZmllcgpAQCAtNDY3LDExICs0NDAsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5
ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hN
YXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNo
RmFpbEZvclRlc3RpbmcodHJ1ZSk7CiB9CiAKLS0gKHZvaWQpX21ha2VOZXh0TmV0d29ya1Byb2Nl
c3NMYXVuY2hGYWlsRm9yVGVzdGluZwotewotICAgIF9wcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFr
ZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKHRydWUpOwotfQotCiAtIChC
T09MKV9oYXNQcmV3YXJtZWRXZWJQcm9jZXNzCiB7CiAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDog
X3Byb2Nlc3NQb29sLT5wcm9jZXNzZXMoKSkgewpAQCAtNTYwLDE4ICs1MjgsNiBAQCBzdGF0aWMg
TlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxT
dHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0Q29va2llU3RvcmFnZVBhcnRp
dGlvbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLS0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAotewotICAgIF9wcm9jZXNzUG9vbC0+c3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKLX0KLQotLSAodm9pZClfc2V0QWxsb3dzQW55
U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFsbG93cwotewotI2lmIEVOQUJM
RShTRVJWSUNFX1dPUktFUikKLSAgICBfcHJvY2Vzc1Bvb2wtPnNldEFsbG93c0FueVNTTENlcnRp
ZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlmCi19Ci0KICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogLSAoaWQgPF9XS0dlb2xvY2F0aW9uQ29yZUxvY2F0aW9uUHJvdmlkZXI+
KV9jb3JlTG9jYXRpb25Qcm92aWRlcgogewpAQCAtNjA0LDExICs1NjAsNiBAQCBzdGF0aWMgTlNE
aWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJp
bmcsIEhhc2hNYXA8UwogICAgIH0pOwogfQogCi0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0Vu
dGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAotewotICAgIHJldHVy
biBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGVu
dGl0bGVtZW50KTsKLX0KLQogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclBy
b3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UKIHsK
ICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9u
U3BhY2UoV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rpb25TcGFjZSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFBy
aXZhdGUuaAppbmRleCA2NzY5MDE1ZTA4NTU4OTk0Y2Q4YTIxOWExN2E5YzY4YWRlM2I1MzgzLi4z
YjkzMTQwNGE4ZTJlNDMyZDUxYzU0OTY1ZTJkZWY1ZjhlY2RjMTBkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUu
aApAQCAtODcsMTQgKzg3LDkgQEAKIC0gKF9XS0Rvd25sb2FkICopX3Jlc3VtZURvd25sb2FkRnJv
bURhdGE6KE5TRGF0YSAqKXJlc3VtZURhdGEgd2Vic2l0ZURhdGFTdG9yZTooV0tXZWJzaXRlRGF0
YVN0b3JlICopZGF0YVN0b3JlICBwYXRoOihOU1N0cmluZyAqKXBhdGggb3JpZ2luYXRpbmdXZWJW
aWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4gU2hvdWxkIGJlIGNhbGxlZCBv
bmx5IHdoaWxlIG5vIHdlYiBjb250ZW50IHByb2Nlc3NlcyBhcmUgcnVubmluZy4KLS0gKHZvaWQp
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBp
b3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoo
dm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3Mo
MTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9pZClfdGVybWluYXRlU2Vydmlj
ZVdvcmtlcnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4wKSk7CiAKIC8v
IFRlc3Qgb25seS4KLS0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xMyksIGlvcygxMS4wKSk7CiAtIChwaWRfdClfcHJld2FybWVkUHJv
Y2Vzc0lkZW50aWZpZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7
CiAKIC8vIFRlc3Qgb25seS4KQEAgLTEwNiw3ICsxMDEsNiBAQAogLSAoc2l6ZV90KV9zZXJ2aWNl
V29ya2VyUHJvY2Vzc0NvdW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIu
MCkpOwogLSAodm9pZClfc3luY05ldHdvcmtQcm9jZXNzQ29va2llcyBXS19BUElfREVQUkVDQVRF
RF9XSVRIX1JFUExBQ0VNRU5UKCJXS0hUVFBDb29raWVTdG9yZS5fZmx1c2hDb29raWVzVG9EaXNr
V2l0aENvbXBsZXRpb25IYW5kbGVyOiIsIG1hY29zKDEwLjEzLCBXS19NQUNfVEJBKSwgaW9zKDEx
LjAsIFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX21ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxG
b3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwotLSAo
dm9pZClfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogLSAoTlNVSW50ZWdlcilfbWF4aW11
bVN1c3BlbmRlZFBhZ2VDb3VudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3Mo
MTIuMikpOwogLSAoTlNVSW50ZWdlcilfcHJvY2Vzc0NhY2hlQ2FwYWNpdHkgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKE5TVUludGVnZXIpX3Byb2Nlc3ND
YWNoZVNpemUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CkBAIC0x
MjIsMTMgKzExNiwxMCBAQAogLSAodm9pZClfcHJlY29ubmVjdFRvU2VydmVyOihOU1VSTCAqKXNl
cnZlclVSTCBXS19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKCJXS1dlYlZpZXcuX3By
ZWNvbm5lY3RUb1NlcnZlciIsIG1hY29zKDEwLjEzLjQsIFdLX01BQ19UQkEpLCBpb3MoMTEuMywg
V0tfSU9TX1RCQSkpOwogCiAvLyBUZXN0IG9ubHkuCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xD
ZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSk7CiAtICh2b2lkKV9nZXRBY3RpdmVQYWdlc09yaWdp
bnNJbldlYlByb2Nlc3NGb3JUZXN0aW5nOihwaWRfdClwaWQgY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQoXikoTlNBcnJheTxOU1N0cmluZyAqPiAqKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwotLSAoQk9PTClfbmV0d29ya1Byb2Nl
c3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKHZvaWQpX2NsZWFyUGVy
bWFuZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNl
ICopcHJvdGVjdGlvblNwYWNlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMu
MCkpOwogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0Nvb2tpZVN0b3JhZ2VQYXJ0
aXRpb25pbmdFbmFibGVkLCBzZXR0ZXI9X3NldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFi
bGVkOikgQk9PTCBfY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQgV0tfQVBJX0RFUFJF
Q0FURUQoIlBhcnRpdGlvbmVkIGNvb2tpZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQiLCBtYWNv
cygxMC4xMi4zLCAxMC4xNC40KSwgaW9zKDEwLjMsIDEyLjIpKTsKLS0gKHZvaWQpX3N5bnRoZXNp
emVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZCBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjE1KSwgaW9zKDEzLjApKTsKIAogLy8gVGVzdCBvbmx5LgogLSAodm9pZClfc2VlZFJlc291
cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0aW5nV2l0aEZpcnN0UGFydHk6KE5TVVJMICopZmlyc3RQ
YXJ0eVVSTCB0aGlyZFBhcnR5OihOU1VSTCAqKXRoaXJkUGFydHlVUkwgc2hvdWxkU2NoZWR1bGVO
b3RpZmljYXRpb246KEJPT0wpc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24gY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQppbmRleCAy
OThkOWNlYzllODRkOGE1MTIyMDY1Y2M5OTIzM2VmNGYwYjk1Mzg5Li44MGQzMzBmMjkyNGQwZmJj
MGFlOWI2MWU5NjcwOGNmY2ZjMzI4ZjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KQEAgLTYxNyw2ICs2MTcs
MTEgQEAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6OldlYnNpdGVEYXRhUmVjb3JkPiB0b1dlYnNpdGVE
YXRhUmVjb3JkcyhOU0FycmF5ICpkYXRhUmVjb3IKICAgICB9KTsKIH0KIAorLSAoQk9PTClfbmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1l
bnQKK3sKKyAgICByZXR1cm4gX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nKGVudGl0bGVtZW50KTsKK30KKwogLSAoaWQgPF9XS1dlYnNpdGVE
YXRhU3RvcmVEZWxlZ2F0ZT4pX2RlbGVnYXRlCiB7CiAgICAgcmV0dXJuIF9kZWxlZ2F0ZS5nZXQo
KS5nZXQoKTsKQEAgLTY2OCw0ICs2NzMsNDIgQEAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6OldlYnNp
dGVEYXRhUmVjb3JkPiB0b1dlYnNpdGVEYXRhUmVjb3JkcyhOU0FycmF5ICpkYXRhUmVjb3IKICNl
bmRpZgogfQogCistICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcworeworICAgIF93ZWJz
aXRlRGF0YVN0b3JlLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworfQorCistICh2b2lkKV9z
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRp
b25IYW5kbGVyCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc1By
ZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0
cihjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAg
ICB9KTsKK30KKworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVu
dGx5Cit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNw
ZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKKworfQorCistICh2b2lkKV9zZW5kTmV0d29ya1By
b2Nlc3NEaWRSZXN1bWUKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lKCk7Cit9CisKKy0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6
KEJPT0wpYmFja2dyb3VuZAoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vz
cygpLnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7Cit9CisKKy0gKHBpZF90
KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIKK3sKKyAgICByZXR1cm4gX3dlYnNpdGVEYXRhU3Rv
cmUtPm5ldHdvcmtQcm9jZXNzKCkucHJvY2Vzc0lkZW50aWZpZXIoKTsKK30KKworKyAodm9pZClf
bWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nCit7CisgICAgV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjptYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRl
c3RpbmcoKTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKaW5kZXggOTkzMjAx
MDQ2YjU1MWMzZjI4ZGYyZGMwYTAzNDZkN2JjNzlhYzVmNC4uYTg1NmJlNmY1OGJkMzAzYzU5ODJi
NmJmZjhjMmVmM2M5MDg1MjAxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCkBAIC04NSw5
ICs4NSwxOSBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0ZURhdGFT
dG9yZUZldGNoT3B0aW9ucykgewogCiAtICh2b2lkKV9yZW5hbWVPcmlnaW46KE5TVVJMICopb2xk
TmFtZSB0bzooTlNVUkwgKiluZXdOYW1lIGZvckRhdGFPZlR5cGVzOihOU1NldDxOU1N0cmluZyAq
PiAqKWRhdGFUeXBlcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlv
bkhhbmRsZXI7CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0
aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21p
Yywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2RlbGVnYXRlIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqX2Nv
bmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9z
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRp
b25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0g
KHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1hY29z
KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc3ludGhlc2l6ZUFwcElz
QmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CisrICh2b2lkKV9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwogQGVu
ZAogCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKaW5kZXggMWVlNzNlYmMw
ZWEwMzZmODZiM2ZlOTQ0MTQ5MDcyZTZhYzRkYzc2Ny4uNzcwMTQ5OTgzNmVlNDRmOWFjZjBlMjcw
ZDcwYzk1ZDE2YmU2NzhkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKQEAgLTIxLDYgKzIxLDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRDb29raWVNYW5hZ2VyLmgiCiAKKyNp
bmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiU291cENvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlVHlwZS5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgog
I2luY2x1ZGUgIldlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlLmgiCkBAIC01Niw2ICs1NywxMiBA
QCBlbnVtIHsKIH07CiAKIHN0cnVjdCBfV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUgeworICAg
IFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlcigpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoZGF0YU1hbmFnZXIpOworICAgICAgICByZXR1cm4gd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGRhdGFNYW5hZ2VyKS5uZXR3b3JrUHJvY2VzcygpLmNvb2tp
ZU1hbmFnZXIoKTsKKyAgICB9CisKICAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKGRhdGFNYW5hZ2VyKTsKQEAgLTY0LDggKzcxLDcgQEAg
c3RydWN0IF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSB7CiAKICAgICB+X1dlYktpdENvb2tp
ZU1hbmFnZXJQcml2YXRlKCkKICAgICB7Ci0gICAgICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wg
OiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMoZGF0YU1hbmFnZXIpKQot
ICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5
PigpLT5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsKKyAg
ICAgICAgY29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklE
KCksIG51bGxwdHIpOwogICAgIH0KIAogICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0
YU1hbmFnZXI7CkBAIC0xMzksMTEgKzE0NSw5IEBAIFdlYktpdENvb2tpZU1hbmFnZXIqIHdlYmtp
dENvb2tpZU1hbmFnZXJDcmVhdGUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuCiB7
CiAgICAgV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciA9IFdFQktJVF9DT09LSUVfTUFOQUdF
UihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQ09PS0lFX01BTkFHRVIsIG51bGxwdHIpKTsKICAg
ICBtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlciA9IGRhdGFNYW5hZ2VyOwotICAgIGZvciAoYXV0
byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMo
bWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBw
bGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFj
ayhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW21hbmFnZXJdIHsKLSAgICAgICAgICAgIGdf
c2lnbmFsX2VtaXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7Ci0gICAgICAgIH0pOwot
ICAgIH0KKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuc2V0Q29va2llT2JzZXJ2
ZXJDYWxsYmFjayhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW21hbmFnZXJdIHsKKyAgICAg
ICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxzW0NIQU5HRURdLCAwKTsKKyAgICB9KTsK
ICAgICByZXR1cm4gbWFuYWdlcjsKIH0KIApAQCAtMTczLDggKzE3Nyw3IEBAIHZvaWQgd2Via2l0
X2Nvb2tpZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UoV2ViS2l0Q29va2llTWFuYWdl
ciogbWFuYWdlciwKICAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1h
bmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgU3RyaW5nOjpmcm9tVVRGOChmaWxlbmFt
ZSksIHRvU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZShzdG9yYWdlKSk7CisgICAgbWFu
YWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNl
c3Npb25JRCwgU3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZSksIHRvU291cENvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlVHlwZShzdG9yYWdlKSk7CiB9CiAKIC8qKgpAQCAtMTkyLDggKzE5NSw3IEBAIHZv
aWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1h
bmFnZXIqIG1hbmFnZXIsIFdlYktpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNf
Q09PS0lFX01BTkFHRVIobWFuYWdlcikpOwogCi0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6
IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5k
YXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKS0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5z
ZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsK
KyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBv
bGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5
KHBvbGljeSksIFtdKCkgeyB9KTsKIH0KIAogLyoqCkBAIC0yMjQsNyArMjI2LDcgQEAgdm9pZCB3
ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3koV2ViS2l0Q29va2llTWFuYWdl
ciogbWFuYWdlciwgR0NhbmMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb2Nlc3NQ
b29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92
ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsKKyAgICBt
YW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSht
YW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3Jl
OjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgewogICAgICAgICBnX3Rhc2tfcmV0dXJu
X2ludCh0YXNrLmdldCgpLCB0b1dlYktpdENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKICAg
ICB9KTsKIH0KQEAgLTI2OSwxMSArMjcxLDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJf
YWRkX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBTb3VwQ29va2llKgogICAg
IGdfcmV0dXJuX2lmX2ZhaWwoY29va2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBh
ZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJE
YXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2Ft
ZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nl
c3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9v
bC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFn
ZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nl
c3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tp
ZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tpZSkg
fSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVN
YW5hZ2VyKCkuc2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgeyBXZWJDb3Jl
OjpDb29raWUoY29va2llKSB9LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgewogICAgICAgICBn
X3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJVRSk7CiAgICAgfSk7CiB9CkBAIC0z
MjAsMTEgKzMxOCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzKFdl
YktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIGNvbnN0IGdjaGFyCiAgICAgZ19yZXR1cm5faWZf
ZmFpbCh1cmkpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tf
bmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8v
IENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFz
ZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhl
bSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1
dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29s
cyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBw
bGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llcyhtYW5hZ2VyLT5wcml2
LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpLCBbdGFzayA9
IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSB7
CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLmdldENvb2tpZXMobWFuYWdlci0+
cHJpdi0+c2Vzc2lvbklEKCksIFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rh
c2sgPSBXVEZNb3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2ll
cykgewogICAgICAgICBHTGlzdCogY29va2llc0xpc3QgPSBudWxscHRyOwogICAgICAgICBmb3Ig
KGF1dG8mIGNvb2tpZSA6IGNvb2tpZXMpCiAgICAgICAgICAgICBjb29raWVzTGlzdCA9IGdfbGlz
dF9wcmVwZW5kKGNvb2tpZXNMaXN0LCBjb29raWUudG9Tb3VwQ29va2llKCkpOwpAQCAtMzc4LDEx
ICszNzIsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llKFdlYktp
dENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIFNvdXBDb29raQogICAgIGdfcmV0dXJuX2lmX2ZhaWwo
Y29va2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25l
dyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBD
b29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ug
b24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0g
ZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRv
JiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMo
bWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxl
bWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmRlbGV0ZUNvb2tpZShtYW5hZ2VyLT5wcml2
LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RGTW92ZSh0
YXNrKV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLmRlbGV0ZUNvb2tp
ZShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0
YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0
YXNrLmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKaW5kZXggODliZTU2YWQ3MWQ3
MTU2OTEyYTI2OTE1MzA1N2RmNTI3Y2RkNDQ2MC4uY2ZmMDM1ODZkZjhhMWZiOTZhNjJhMDE3YTNj
NDZlNWY0MGRlMmQzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKQEAgLTQwNCw3ICs0MDQsNiBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogICAgICAgICBw
cml2LT53ZWJzaXRlRGF0YU1hbmFnZXIgPSBhZG9wdEdSZWYod2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX25ldygibG9jYWwtc3RvcmFnZS1kaXJlY3RvcnkiLCBwcml2LT5sb2NhbFN0b3JhZ2VE
aXJlY3RvcnkuZGF0YSgpLCBudWxscHRyKSk7CiAKICAgICBwcml2LT5wcm9jZXNzUG9vbCA9IFdl
YlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlvbik7Ci0gICAgcHJpdi0+cHJvY2Vzc1Bv
b2wtPnNldFByaW1hcnlEYXRhU3RvcmUod2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0
b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkpOwogICAgIHByaXYtPnByb2Nlc3NQ
b29sLT5zZXRVc2VyTWVzc2FnZUhhbmRsZXIoW3dlYkNvbnRleHRdKFVzZXJNZXNzYWdlJiYgbWVz
c2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyTWVzc2FnZSYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikgewogICAgICAgICAvLyBTaW5rIHRoZSBmbG9hdGluZyByZWYuCiAgICAgICAgIEdS
ZWZQdHI8V2ViS2l0VXNlck1lc3NhZ2U+IHVzZXJNZXNzYWdlID0gd2Via2l0VXNlck1lc3NhZ2VD
cmVhdGUoV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpAQCAt
MTYwMyw4ICsxNjAyLDggQEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfcHJlZmV0Y2hfZG5zKFdl
YktpdFdlYkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGhvc3QKICAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSk7CiAgICAgZ19yZXR1cm5faWZf
ZmFpbChob3N0bmFtZSk7CiAKLSAgICBpZiAoY29udGV4dC0+cHJpdi0+ZG5zUHJlZmV0Y2hlZEhv
c3RzLmFkZChob3N0bmFtZSkuaXNOZXdFbnRyeSkKLSAgICAgICAgY29udGV4dC0+cHJpdi0+cHJv
Y2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6UHJlZmV0Y2hETlMoU3RyaW5nOjpmcm9tVVRGOChob3N0bmFtZSkpKTsKKyAgICBhdXRvJiB3
ZWJzaXRlRGF0YVN0b3JlID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGNv
bnRleHQtPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSk7CisgICAgd2Vic2l0ZURhdGFT
dG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVm
ZXRjaEROUyhTdHJpbmc6OmZyb21VVEY4KGhvc3RuYW1lKSksIDApOwogICAgIGNvbnRleHQtPnBy
aXYtPmRuc1ByZWZldGNoSHlzdGVyZXJpcy5pbXB1bHNlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lv
bi5jcHAKaW5kZXggNGFiNDdmZmY1OTExZWVjMzdlNTZiYzViYmIzMjllYmFlYTdkMzg2NS4uMzAw
NmY0ZmFlNmM0M2MyNmJmNDA4MjJiNmRlODY4ZWYyZTAyY2ZiYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lv
bi5jcHAKQEAgLTEzOTIsOCArMTM5Miw4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmFk
ZFNpbmdsZUNvb2tpZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uCiAKICAg
ICBjb29raWUuaHR0cE9ubHkgPSAqaHR0cE9ubHk7CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKHBhZ2UtPndlYnNp
dGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2NhbGxiYWNrXSgpIHsKKyAg
ICBXZWJDb29raWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0
YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFu
YWdlci5zZXRDb29raWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBj
b29raWUgfSwgW2NhbGxiYWNrXSgpIHsKICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7
CiAgICAgfSk7CiB9CkBAIC0xNDA5LDggKzE0MDksOCBAQCBJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVz
KAogCiAgICAgU3RyaW5nIGhvc3QgPSBhY3RpdmVVUkwuaG9zdCgpLnRvU3RyaW5nKCk7CiAKLSAg
ICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5z
dXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5k
ZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9u
SUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOwor
ICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlciA9IHBhZ2UtPndlYnNpdGVE
YXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVN
YW5hZ2VyLmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgp
LnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoaG9z
dCkgfSk7CiAKICAgICByZXR1cm4geyB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaAppbmRleCA0MWMwYTBmYmY1MDZlZmExNDA4YmNlZjlh
ZjhhOTBiODVhMWFkMDhhLi40ZjM5OGI1MzBmNjA4NTc1Yzk2N2I4M2M3NGZhMmY0MzI4ZjZjZTNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHku
aApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+QXV4aWxpYXJ5UHJvY2Vz
c1Byb3h5KCk7CiAKICAgICB2b2lkIGNvbm5lY3QoKTsKLSAgICB2b2lkIHRlcm1pbmF0ZSgpOwor
ICAgIHZpcnR1YWwgdm9pZCB0ZXJtaW5hdGUoKTsKIAogICAgIHZpcnR1YWwgUHJvY2Vzc1Rocm90
dGxlciYgdGhyb3R0bGVyKCkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5o
CmluZGV4IGRiZTQ0Zjk1OTQxMDUxMTIxNTEyOGQyOWQyMTRlZWUwNzRhYWY4NGMuLjRjODQ1YTBl
YzcyNTY1OWNmZTc5Y2VhMzVkM2NiYTk2NjgzNDYxNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudC5oCkBAIC00MSwxMSArNDEsMTEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFz
cyBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTsKIAogY2xhc3MgTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50IGZpbmFsIDogcHVibGljIEFQSTo6Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50IHsKLXByaXZhdGU6CitwdWJsaWM6CiAgICAgdm9pZCBzdGFydExvYWRpbmco
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkmLCBMZWdhY3lDdXN0b21Qcm90b2NvbElE
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBmaW5hbDsKICAgICB2b2lkIHN0b3BM
b2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5JiwgTGVnYWN5Q3VzdG9tUHJv
dG9jb2xJRCkgZmluYWw7CiAgICAgdm9pZCBpbnZhbGlkYXRlKExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5JikgZmluYWw7Ci0KK3ByaXZhdGU6CiAgICAgSGFzaE1hcDxMZWdhY3lDdXN0
b21Qcm90b2NvbElELCBSZXRhaW5QdHI8V0tDdXN0b21Qcm90b2NvbExvYWRlcj4+IG1fbG9hZGVy
TWFwOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
UHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBy
b2Nlc3NQb29sQ29jb2EubW0KaW5kZXggNzZkN2E2NDA0MWEyOTFkNWYyOTczNTE3NmUzMWVhNzBm
NWVkNTU2Yy4uMTllZmNhNmE2NDBjYjJmMzFjMmE4NzU1MDZiMWQ2NjlkNmRjNzZhNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29h
Lm1tCkBAIC0xMzQsOCArMTM0LDkgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJ
Zk5lZWRlZCgpCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lv
blN0YXRlKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25F
bmFibGVkKCkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3Jl
KFtlbmFibGVkID0gcHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpXSAoV2Vic2l0ZURhdGFTdG9y
ZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNldFBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoZW5hYmxlZCk7CisgICAgfSk7CiAKICNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBpZiAoIW1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJs
ZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpKQpAQCAtMTY2LDggKzE2Nyw2IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiAgICAgaWYgKCFbW05TVXNlckRlZmF1bHRz
IHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiV2ViS2l0U3VwcHJlc3NNZW1vcnlQ
cmVzc3VyZUhhbmRsZXIiXSkKICAgICAgICAgaW5zdGFsbE1lbW9yeVByZXNzdXJlSGFuZGxlcigp
OwogCi0gICAgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKTsKLQogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBpZiAoIV9NR0NhY2hlVmFs
aWQoKSkgewogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVl
KERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBeewpAQCAtNDkzLDIyICs0OTIs
NiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vz
cyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYQogCiAgICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1
bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKIAotICAgIHsKLSAg
ICAgICAgYm9vbCBpc1NhZmFyaSA9IGZhbHNlOwotICAgICAgICBib29sIGlzTWluaUJyb3dzZXIg
PSBmYWxzZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBpc1NhZmFyaSA9IFdl
YkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01vYmlsZVNhZmFyaSgpOwotICAgICAgICBpc01pbmlC
cm93c2VyID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTWluaUJyb3dzZXIoKTsKLSNlbGlm
IFBMQVRGT1JNKE1BQykKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlv
bjo6aXNTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6Ok1hY0FwcGxp
Y2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGlzU2FmYXJpIHx8
IGlzTWluaUJyb3dzZXIpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBQcm94eSA9IFVSTChVUkwo
KSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcgKilXZWJLaXQySFRUUFByb3h5RGVm
YXVsdHNLZXldKTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBzUHJveHkgPSBVUkwoVVJMKCksIFtk
ZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBTUHJveHlEZWZhdWx0
c0tleV0pOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcGFyYW1ldGVycy5uZXR3b3JrQVRTQ29u
dGV4dCA9IGFkb3B0Q0YoX0NGTmV0d29ya0NvcHlBVFNDb250ZXh0KCkpOwogCiAgICAgcGFyYW1l
dGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciA9IFtkZWZhdWx0cyBib29s
Rm9yS2V5OldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyRGVmYXVsdHNLZXldOwpA
QCAtNTIyLDEyICs1MDUsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYQogICAgIE5TTnVtYmVy
ICpkYXRhYmFzZUVuYWJsZWRWYWx1ZSA9IFtkZWZhdWx0cyBvYmplY3RGb3JLZXk6W05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5hbERlYnVnJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6
aXNJVFBEYXRhYmFzZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07CiAgICAg
aWYgKGRhdGFiYXNlRW5hYmxlZFZhbHVlKQogICAgICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJs
ZUlUUERhdGFiYXNlID0gZGF0YWJhc2VFbmFibGVkVmFsdWUuYm9vbFZhbHVlOwotICAgIGVsc2UK
LSAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IG1fZGVmYXVsdFBh
Z2VHcm91cC0+cHJlZmVyZW5jZXMoKS5pc0lUUERhdGFiYXNlRW5hYmxlZCgpOwogCiAgICAgcGFy
YW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUgPSBbZGVmYXVsdHMgYm9v
bEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4cGVyaW1lbnRhbCVAIiwgV2Vi
UHJlZmVyZW5jZXNLZXk6OmFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWRLZXkoKS5j
cmVhdGVDRlN0cmluZygpLmdldCgpXV07Ci0KLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9z
c1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFj
a2luZ1Blcm1pc3Npb24oKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1JbnZh
bGlkYXRlQ29udGV4dCgpCkBAIC02MDYsMTEgKzU4NSw2IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6
OnByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSBjb25zdAogICAgIHJldHVybiAhbV91c2VyT2Jz
ZXJ2YWJsZVBhZ2VDb3VudGVyLnZhbHVlKCkgJiYgIW1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJs
ZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpOwogfQogCi1ib29sIFdlYlByb2Nlc3NQb29sOjpuZXR3
b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmIGVudGl0bGVt
ZW50KQotewotICAgIHJldHVybiBXVEY6Omhhc0VudGl0bGVtZW50KGVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVudGl0bGVtZW50LnV0ZjgoKS5k
YXRhKCkpOwotfQotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NB
VEFMWVNUKQogZmxvYXQgV2ViUHJvY2Vzc1Bvb2w6OmRpc3BsYXlCcmlnaHRuZXNzKCkKIHsKQEAg
LTk0NywyMyArOTIxLDQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJIaWdoRHluYW1p
Y1JhbmdlQ2hhbmdlQ2FsbGJhY2soKQogfQogI2VuZGlmCiAKLU9TT2JqZWN0UHRyPHhwY19vYmpl
Y3RfdD4gV2ViUHJvY2Vzc1Bvb2w6OnhwY0VuZHBvaW50TWVzc2FnZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fZW5kcG9pbnRNZXNzYWdlOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5k
TmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0cjx4cGNfb2Jq
ZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSkKLXsKLSAgICBtX2VuZHBvaW50TWVzc2FnZSA9IGVuZHBv
aW50TWVzc2FnZTsKLQotICAgIGZvciAoYXV0byBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsKLSAg
ICAgICAgaWYgKHByb2Nlc3MtPnN0YXRlKCkgIT0gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpTdGF0
ZTo6UnVubmluZykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIXByb2Nlc3Mt
PmNvbm5lY3Rpb24oKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvIGNvbm5l
Y3Rpb24gPSBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKTsKLSAgICAgICAg
eHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNzYWdlKGNvbm5lY3Rpb24sIGVuZHBvaW50TWVzc2FnZS5n
ZXQoKSk7Ci0gICAgfQotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAppbmRleCBjNWRl
NGU3ZDBmNTkxOTRmNDNhMDIzYjA4OWUzNzJjNThjZjhlZTA2Li5mN2NmZjg1MmYwYmE2ZDAxNTUx
MTY1ZGQ4YTlmN2Q1NzYzYjAwN2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCkBAIC03NSw4ICs3NSw4IEBAIHZvaWQgRG93
bmxvYWRQcm94eTo6Y2FuY2VsKCkKICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2VzcyA9IG1f
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElE
KSwgMCk7CisgICAgaWYgKG1fZGF0YVN0b3JlKQorICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29y
a1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQo
bV9kb3dubG9hZElEKSwgMCk7CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6aW52YWxpZGF0ZSgp
CkBAIC0xMDMsMTUgKzEwMywxMyBAQCBXZWJQYWdlUHJveHkqIERvd25sb2FkUHJveHk6Om9yaWdp
bmF0aW5nUGFnZSgpIGNvbnN0CiAjaWYgUExBVEZPUk0oQ09DT0EpCiB2b2lkIERvd25sb2FkUHJv
eHk6OnB1Ymxpc2hQcm9ncmVzcyhjb25zdCBVUkwmIFVSTCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vz
c1Bvb2wpCisgICAgaWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOwotICAgICAgICBib29s
IGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
KFVSTC5maWxlU3lzdGVtUGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUs
IGhhbmRsZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24s
IGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9ncmVzcyhtX2Rvd25s
b2FkSUQsIFVSTCwgaGFuZGxlKSwgMCk7Ci0gICAgfQorICAgIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSBoYW5kbGU7CisgICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVu
c2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOworICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRl
ZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsKKyAgICBtX2RhdGFT
dG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVi
bGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwogfQog
I2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQogCkBAIC0xMzEsMTEgKzEyOSwxMCBAQCB2b2lkIERv
d25sb2FkUHJveHk6OmRpZFN0YXJ0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgU3RyaW5nJiBzdWdnZQogCiB2b2lkIERvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmIGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlLCB1aW50NjRfdCBjaGFsbGVuZ2VJRCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vzc1Bv
b2wpCisgICAgaWYgKCFtX3Byb2Nlc3NQb29sIHx8ICFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VQcm94eTo6Y3JlYXRlKFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVu
Z2UpLCBjaGFsbGVuZ2VJRCwgbWFrZVJlZigqbV9wcm9jZXNzUG9vbC0+bmV0d29ya2luZ1Byb2Nl
c3NDb25uZWN0aW9uKCkpLCBudWxscHRyKTsKLQorICAgIGF1dG8gYXV0aGVudGljYXRpb25DaGFs
bGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk6OmNyZWF0ZShXVEZNb3Zl
KGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgY2hhbGxlbmdlSUQsIG1ha2VSZWYoKm1fZGF0YVN0
b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKSksIG51bGxwdHIpOwogICAgIG1fcHJv
Y2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKCp0aGlzLCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmdldCgpKTsKIH0KIApAQCAt
MTQ2LDE1ICsxNDMsMTAgQEAgdm9pZCBEb3dubG9hZFByb3h5Ojp3aWxsU2VuZFJlcXVlc3QoUmVz
b3VyY2VSZXF1ZXN0JiYgcHJvcG9zZWRSZXF1ZXN0LCBjb25zdCBSZXMKIAogICAgIG1fcHJvY2Vz
c1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkud2lsbFNlbmRSZXF1ZXN0KCp0aGlzLCBXVEZNb3ZlKHBy
b3Bvc2VkUmVxdWVzdCksIHJlZGlyZWN0UmVzcG9uc2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyldKFJlc291cmNlUmVxdWVzdCYmIG5ld1JlcXVlc3QpIHsKICAgICAgICAg
bV9yZWRpcmVjdENoYWluLmFwcGVuZChuZXdSZXF1ZXN0LnVybCgpKTsKLQotICAgICAgICBpZiAo
IXByb3RlY3RlZFRoaXMtPm1fcHJvY2Vzc1Bvb2wpCisgICAgICAgIGlmICghcHJvdGVjdGVkVGhp
cy0+bV9kYXRhU3RvcmUpCiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYXV0byogbmV0
d29ya1Byb2Nlc3NQcm94eSA9IHByb3RlY3RlZFRoaXMtPm1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCk7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3NQcm94eSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q29udGludWVXaWxsU2VuZFJlcXVlc3QocHJvdGVjdGVkVGhpcy0+bV9k
b3dubG9hZElELCBuZXdSZXF1ZXN0KSwgMCk7CisgICAgICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNz
UHJveHkgPSBwcm90ZWN0ZWRUaGlzLT5tX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKTsKKyAg
ICAgICAgbmV0d29ya1Byb2Nlc3NQcm94eS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
Q29udGludWVXaWxsU2VuZFJlcXVlc3QocHJvdGVjdGVkVGhpcy0+bV9kb3dubG9hZElELCBuZXdS
ZXF1ZXN0KSwgMCk7CiAgICAgfSk7CiB9CiAKQEAgLTE3OSwxNiArMTcxLDE0IEBAIHZvaWQgRG93
bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyhE
b3dubG9hZElEIGRvd25sCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5h
dGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNh
bml0aXplU3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBkb3dubG9hZElEID0gZG93bmxvYWRJRF0gKEFsbG93
T3ZlcndyaXRlIGFsbG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsKKyAgICBtX3By
b2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3Rl
ZEZpbGVuYW1lKCp0aGlzLCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRG
aWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGRvd25sb2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3Ry
aW5nIGRlc3RpbmF0aW9uKSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlOwogICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQog
ICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGRlc3RpbmF0aW9uLCBT
YW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUp
OwogCi0gICAgICAgIGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICAgICAgaWYgKCFtX2RhdGFTdG9y
ZSkKICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBl
bmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94
RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwg
MCk7CisgICAgICAgIG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9u
KGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092
ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CiAgICAgfSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFw
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFw
LmNwcAppbmRleCA3NmEwNzE1N2I1OTFhYWNlNTBmMTVkMTUyNWRiY2ZiOGM2YTRiYmM4Li5kNzRh
OGZhNmM2NGM4ODYzNWY5ZWI3NWNhNzNlNzBmZDk0NmNhMDJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCkBAIC00
NCw3ICs0NCw3IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogRG93bmxvYWRQcm94eU1hcDo6RG93
bmxvYWRQcm94eU1hcChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQotICAgIDogbV9wcm9j
ZXNzKG1ha2VXZWFrUHRyKHByb2Nlc3MpKQorICAgIDogbV9wcm9jZXNzKHByb2Nlc3MpCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgLCBtX3Nob3VsZFRha2VBc3NlcnRpb24oV1RGOjpwcm9jZXNz
SGFzRW50aXRsZW1lbnQoImNvbS5hcHBsZS5tdWx0aXRhc2tpbmcuc3lzdGVtYXBwYXNzZXJ0aW9u
cyIpKQogI2VuZGlmCkBAIC03MCwxNCArNzAsMTIgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFwOjpw
bGF0Zm9ybURlc3Ryb3koKQogCiB2b2lkIERvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlk
RW50ZXJCYWNrZ3JvdW5kKCkKIHsKLSAgICBpZiAobV9wcm9jZXNzKQotICAgICAgICBtX3Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbkRpZEVudGVyQmFj
a2dyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCksIDApOwogfQogCiB2b2lkIERvd25s
b2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpCiB7Ci0gICAgaWYg
KG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6QXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCksIDApOworICAgIG1fcHJvY2Vz
cy5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25XaWxsRW50ZXJGb3Jl
Z3JvdW5kKCksIDApOwogfQogCiBEb3dubG9hZFByb3h5JiBEb3dubG9hZFByb3h5TWFwOjpjcmVh
dGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUHJvY2Vzc1Bv
b2wmIHByb2Nlc3NQb29sLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNl
UmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkqIG9y
aWdpbmF0aW5nUGFnZSkKQEAgLTkyLDEzICs5MCwxMiBAQCBEb3dubG9hZFByb3h5JiBEb3dubG9h
ZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9y
ZQogICAgICAgICBtX2Rvd25sb2FkVUlBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3Nl
cnRpb24+KGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nl
c3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAogICAgICAgICBBU1NFUlQo
IW1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9wcm9jZXNzKTsKLSAgICAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtl
VW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSwg
IldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3
b3JraW5nKTsKKyAgICAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtlVW5p
cXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy5wcm9jZXNzSWRlbnRpZmllcigpLCAiV2Vi
S2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVuYm91bmRlZE5ldHdvcmtp
bmcpOwogCiAgICAgICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiVUlQcm9jZXNz
IHRvb2sgJ1dlYktpdCBkb3dubG9hZHMnIGFzc2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0
d29ya1Byb2Nlc3MiKTsKICAgICB9CiAKLSAgICBtX3Byb2Nlc3MtPmFkZE1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9h
ZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsK
KyAgICBtX3Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKS5kb3du
bG9hZElEKCksIGRvd25sb2FkUHJveHkuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGRvd25sb2FkUHJv
eHk7CiB9CkBAIC0xMDksMTIgKzEwNiw5IEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxv
YWRGaW5pc2hlZChEb3dubG9hZFByb3h5JiBkb3dubG9hZFByb3h5KQogCiAgICAgUkVMRUFTRV9M
T0coTG9hZGluZywgIlJlbW92aW5nIGRvd25sb2FkICUiIFBSSXU2NCAiIGZyb20gVUlQcm9jZXNz
IERvd25sb2FkUHJveHlNYXAiLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CiAKLSAgICAvLyBU
aGUgRG93bmxvYWRQcm94eSBtYXkgYmUgaG9sZGluZyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhl
IHByb2Nlc3MgcG9vbC4KLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZlB0
cihtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkpOwotCiAgICAgQVNTRVJUKG1fZG93bmxvYWRzLmNv
bnRhaW5zKGRvd25sb2FkSUQpKTsKIAotICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25s
b2FkSUQuZG93bmxvYWRJRCgpKTsKKyAgICBtX3Byb2Nlc3MucmVtb3ZlTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2Fk
SUQuZG93bmxvYWRJRCgpKTsKICAgICBkb3dubG9hZFByb3h5LmludmFsaWRhdGUoKTsKICAgICBt
X2Rvd25sb2Fkcy5yZW1vdmUoZG93bmxvYWRJRCk7CiAKQEAgLTEzMywxNSArMTI3LDEzIEBAIHZv
aWQgRG93bmxvYWRQcm94eU1hcDo6aW52YWxpZGF0ZSgpCiAgICAgZm9yIChjb25zdCBhdXRvJiBk
b3dubG9hZCA6IG1fZG93bmxvYWRzLnZhbHVlcygpKSB7CiAgICAgICAgIGRvd25sb2FkLT5wcm9j
ZXNzRGlkQ2xvc2UoKTsKICAgICAgICAgZG93bmxvYWQtPmludmFsaWRhdGUoKTsKLSAgICAgICAg
bV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWQtPmRvd25sb2FkSUQoKS5kb3dubG9hZElE
KCkpOworICAgICAgICBtX3Byb2Nlc3MucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpE
b3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkLT5kb3dubG9hZElE
KCkuZG93bmxvYWRJRCgpKTsKICAgICB9CiAKICAgICBtX2Rvd25sb2Fkcy5jbGVhcigpOwogICAg
IG1fZG93bmxvYWRVSUFzc2VydGlvbiA9IG51bGxwdHI7CiAgICAgbV9kb3dubG9hZE5ldHdvcmtp
bmdBc3NlcnRpb24gPSBudWxscHRyOwogICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9u
LCAiVUlQcm9jZXNzIERvd25sb2FkUHJveHlNYXAgaW52YWxpZGF0ZWQgLSBSZWxlYXNlZCAnV2Vi
S2l0IGRvd25sb2FkcycgYXNzZXJ0aW9ucyBmb3IgVUlQcm9jZXNzIGFuZCBOZXR3b3JrUHJvY2Vz
cyIpOwotCi0gICAgbV9wcm9jZXNzID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRQcm94eU1hcC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
UHJveHlNYXAuaAppbmRleCAzYmUyMDc5YTBmMmM0YjUzNzA2MmNlMTMwMGUxY2Q1ZGE0NDRmZmJl
Li40ZmEwMDFiZDdmYWUxY2VkMDI0ZDJiOTFmMjAxNzBmZjk5NDUyOGJlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKQEAg
LTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtQ3JlYXRlKCk7CiAgICAg
dm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKIAotICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94
eT4gbV9wcm9jZXNzOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG1fcHJvY2VzczsKICAgICBI
YXNoTWFwPERvd25sb2FkSUQsIFJlZlB0cjxEb3dubG9hZFByb3h5Pj4gbV9kb3dubG9hZHM7CiAK
ICAgICBib29sIG1fc2hvdWxkVGFrZUFzc2VydGlvbiB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAK
aW5kZXggOGMyM2JiZThjMDZhMTU5OWNiOWI5MTZhMGIzMmFmYjM3NzgzZjMwNS4uZDZjMzMyM2Rk
OTNlNjlmNTZhZGY2YmUwZDJhMWIxNGYwODIyNDUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3Vz
dG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcApAQCAtNDQs
MTcgKzQ0LDE3IEBAIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp+TGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5OjpzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90
b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAg
bV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50KCkuc3RhcnRMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsK
KyAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCku
c3RhcnRMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKIH0KIAogdm9p
ZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RvcExvYWRpbmcoTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElEKQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQ
cm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0b3BMb2Fk
aW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKKyAgICBtX25ldHdvcmtQcm9jZXNzUHJveHku
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RvcExvYWRpbmcoKnRoaXMsIGN1c3RvbVBy
b3RvY29sSUQpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojpp
bnZhbGlkYXRlKCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5j
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5pbnZhbGlkYXRlKCp0aGlzKTsKKyAgICBtX25l
dHdvcmtQcm9jZXNzUHJveHkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuaW52YWxpZGF0
ZSgqdGhpcyk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6Ondh
c1JlZGlyZWN0ZWRUb1JlcXVlc3QoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2Nv
bElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRl
eCBjMWY0NzA4YjgxY2ZhNTNhYjEyMmMyOTQ0Njc1ZTc4MjUxNjcxMjFmLi43MmIxNTM1MDdiNWFh
YzBlYzc2ZjcxODI2ODQ0M2FkNDEyM2VhMWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAKICNpbmNsdWRlICJBUElD
b250ZW50UnVsZUxpc3QuaCIKKyNpbmNsdWRlICJBUElDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQuaCIKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmgiCiAjaW5jbHVk
ZSAiQXV0aGVudGljYXRpb25NYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1hcC5o
IgpAQCAtMzUsNiArMzYsNyBAQAogI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlN
ZXNzYWdlcy5oIgogI2VuZGlmCisjaW5jbHVkZSAiTGVnYWN5R2xvYmFsU2V0dGluZ3MuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NvbnRlbnRSdWxlTGlzdE1hbmFn
ZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIK
QEAgLTQ4LDYgKzUwLDcgQEAKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mu
aCIKICNpbmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQ29tcGls
ZWRDb250ZW50UnVsZUxpc3QuaCIKKyNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIK
ICNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIK
ICNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKQEAgLTU4LDggKzYxLDEwIEBACiAjaW5j
bHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuaCIKICNpbmNsdWRlICJXZWJzaXRl
RGF0YS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVDbGllbnQuaCIKKyNpbmNsdWRlICJX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3Jp
Z2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2luY2x1ZGUg
PHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRs
ZXIuaD4KIAogI2lmIEVOQUJMRShTRUNfSVRFTV9TSElNKQpAQCAtNzAsMjAgKzc1LDEyMSBAQAog
I2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIK
KyNlbmRpZgorCiAjZGVmaW5lIE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNL
X0JBU0UoYXNzZXJ0aW9uLCBjb25uZWN0aW9uKCkpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLU5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9j
ZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5KHByb2Nlc3NQb29sLmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQot
ICAgICwgbV9wcm9jZXNzUG9vbChwcm9jZXNzUG9vbCkKK3N0YXRpYyBIYXNoU2V0PE5ldHdvcmtQ
cm9jZXNzUHJveHkqPiYgbmV0d29ya1Byb2Nlc3Nlc1NldCgpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0
PE5ldHdvcmtQcm9jZXNzUHJveHkqPj4gc2V0OworICAgIHJldHVybiBzZXQ7Cit9CisKK1ZlY3Rv
cjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdv
cmtQcm9jZXNzZXMoKQoreworICAgIFZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHBy
b2Nlc3NlczsKKyAgICBwcm9jZXNzZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXR3b3JrUHJv
Y2Vzc2VzU2V0KCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIG5ldHdvcmtQcm9jZXNzIDogbmV0
d29ya1Byb2Nlc3Nlc1NldCgpKQorICAgICAgICBwcm9jZXNzZXMudW5jaGVja2VkQXBwZW5kKCpu
ZXR3b3JrUHJvY2Vzcyk7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKworc3RhdGljIFJlZlB0
cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiYgZGVmYXVsdFByb2Nlc3MoKQoreworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxSZWZQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nlc3M7CisgICAg
cmV0dXJuIHByb2Nlc3MuZ2V0KCk7Cit9CisKK1JlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpkZWZhdWx0TmV0d29ya1Byb2Nlc3MoKQoreworICAgIGlmICghZGVm
YXVsdFByb2Nlc3MoKSkKKyAgICAgICAgZGVmYXVsdFByb2Nlc3MoKSA9IE5ldHdvcmtQcm9jZXNz
UHJveHk6OmNyZWF0ZSgpOworICAgIHJldHVybiAqZGVmYXVsdFByb2Nlc3MoKTsKK30KKwordm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp0ZXJtaW5hdGUoKQoreworICAgIEF1eGlsaWFyeVByb2Nl
c3NQcm94eTo6dGVybWluYXRlKCk7CisgICAgZGlkVGVybWluYXRlKCk7Cit9CisKK3ZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6ZGlkVGVybWluYXRlKCkKK3sKKyAgICBpZiAodGhpcyA9PSBkZWZh
dWx0UHJvY2VzcygpLmdldCgpKQorICAgICAgICBkZWZhdWx0UHJvY2VzcygpID0gbnVsbHB0cjsK
K30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9O
ZXdQcm9jZXNzKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgLy8g
RklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBXZWJL
aXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCisgICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlz
IG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91ciBBUElzLgor
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYuCisg
ICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgeworICAgICAgICBjYWxsT25NYWluUnVuTG9vcEFu
ZFdhaXQoW3RoaXNdIHsKKyAgICAgICAgICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1By
b2Nlc3MoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3Rl
cmVkQXNTZWN1cmUgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRv
bigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmUoKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hl
bWVzUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVj
dG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFz
QnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KCkpOworICAgIHBhcmFtZXRlcnMudXJsU2No
ZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdz
OjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTG9jYWwoKSk7CisgICAgcGFyYW1ldGVy
cy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xv
YmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsK
KyAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xl
dG9uKCkuY2FjaGVNb2RlbCgpOworICAgIGZvciAoYXV0byYgc2NoZW1lIDogV2ViUHJvY2Vzc1Bv
b2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQorICAgICAgICBwYXJh
bWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hl
bWUpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKFN0cmluZyBjb29raWVTdG9y
YWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsg
IWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVj
dG9yeSwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
KyAgICBpZiAoU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29s
OjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7ICFjb250YWluZXJDYWNoZXNEaXJlY3Rvcnku
aXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFk
V3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRh
aW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgaWYgKFN0cmluZyBwYXJl
bnRCdW5kbGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5
KCk7ICFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOworI2VuZGlmCisgICAgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOworICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyksIDApOworfQor
CitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0
eSgpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQ
cm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPmFsd2F5c1J1bnNBdEJh
Y2tncm91bmRQcmlvcml0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xTaG91bGRUYWtl
VUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDog
V2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNz
UG9vbC0+c2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworTmV0d29ya1Byb2Nlc3NQ
cm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eSgpCisgICAgOiBBdXhpbGlhcnlQcm9jZXNzUHJveHko
YW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKICNpZiBFTkFC
TEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQorICAgICwgbV9jdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZVJlZjxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ+KCkpCiAgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5KCp0aGlzKQorI2Vs
c2UKKyAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJ
OjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkpCiAjZW5kaWYKLSAgICAsIG1fdGhyb3R0
bGVyKCp0aGlzLCBwcm9jZXNzUG9vbC5zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkp
CisgICAgLCBtX3Rocm90dGxlcigqdGhpcywgYW55UHJvY2Vzc1Bvb2xTaG91bGRUYWtlVUlCYWNr
Z3JvdW5kQXNzZXJ0aW9uKCkpCisgICAgLCBtX2Nvb2tpZU1hbmFnZXIoV2ViQ29va2llTWFuYWdl
clByb3h5OjpjcmVhdGUoKnRoaXMpKQogewogICAgIGNvbm5lY3QoKTsKKyAgICBzZW5kQ3JlYXRp
b25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgbmV0d29ya1Byb2Nlc3Nlc1NldCgpLmFk
ZCh0aGlzKTsKIH0KIAogTmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHko
KQpAQCAtOTgsNiArMjA0LDcgQEAgTmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNz
UHJveHkoKQogCiAgICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9h
ZFByb3h5TWFwLT5pbnZhbGlkYXRlKCk7CisgICAgbmV0d29ya1Byb2Nlc3Nlc1NldCgpLnJlbW92
ZSh0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25z
KFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1bmNoT3B0aW9ucykKQEAgLTEwNSwx
NSArMjEyLDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKFBy
b2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1bmMKICAgICBsYXVuY2hPcHRpb25zLnBy
b2Nlc3NUeXBlID0gUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6TmV0d29yazsKICAgICBB
dXhpbGlhcnlQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7CiAK
LSAgICBpZiAocHJvY2Vzc1Bvb2woKS5zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNo
RmFpbEZvclRlc3RpbmcoKSkgewotICAgICAgICBwcm9jZXNzUG9vbCgpLnNldFNob3VsZE1ha2VO
ZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhmYWxzZSk7CisgICAgaWYgKFdl
YnNpdGVEYXRhU3RvcmU6OnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9y
VGVzdGluZygpKQogICAgICAgICBsYXVuY2hPcHRpb25zLnNob3VsZE1ha2VQcm9jZXNzTGF1bmNo
RmFpbEZvclRlc3RpbmcgPSB0cnVlOwotICAgIH0KLQotI2lmIFBMQVRGT1JNKFBMQVlTVEFUSU9O
KQotICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1BhdGggPSBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQ
cm9jZXNzUGF0aCgpOwotICAgIGxhdW5jaE9wdGlvbnMudXNlcklkID0gbV9wcm9jZXNzUG9vbC51
c2VySWQoKTsKLSNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNvbm5lY3Rp
b25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCkBAIC0xNjYsMTIgKzI2Niwx
MiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQo
Ym9vbCBiYWNrZ3JvdW5kKQogICAgIH0KIH0KIAotRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nl
c3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9E
YXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQorRG93bmxvYWRQ
cm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0
YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1l
SW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAgICAgaWYgKCFtX2Rvd25s
b2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1ha2VVbmlxdWU8RG93
bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+
Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVx
dWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVybiBtX2Rvd25sb2Fk
UHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBwcm9jZXNzUG9vbCwgcmVz
b3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNp
dGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAo
V2Vic2l0ZURhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjM3LDggKzMzNywxMSBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpCiB7CiAgICAg
Y2xlYXJDYWxsYmFja1N0YXRlcygpOwogCi0gICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNz
IG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRoaXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlz
IHdpbGwgY2F1c2UgdXMgdG8gYmUgZGVsZXRlZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQ
cm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CisgICAgUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IHByb3Rl
Y3RlZFRoaXMoKnRoaXMpOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2Vzc0NyYXNoZWQoKnRoaXMpOworICAgIGZvciAoYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA6IG1f
d2Vic2l0ZURhdGFTdG9yZXMpCisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3NDcmFzaGVkKCp0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjbGVhckNh
bGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICszNjEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpE
ZQogICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChtX3Byb2Nlc3NQb29sLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZGlkUmVjZWl2ZU5ldHdvcmtQ
cm9jZXNzUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQogCkBAIC0yNzQsOCAr
Mzc0LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlU3luY01lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEMKIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewotICAgIGF1dG8gcHJvdGVjdGVkUHJv
Y2Vzc1Bvb2wgPSBtYWtlUmVmKG1fcHJvY2Vzc1Bvb2wpOwotCiAgICAgaWYgKG1fZG93bmxvYWRQ
cm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5pbnZhbGlkYXRlKCk7CiAjaWYg
RU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKQEAgLTMzMSwxMSArNDI5LDYg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2kKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nlc3NQb29sLmlzU2VydmljZVdvcmtlclBhZ2VJRChw
YWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShzZXNzaW9u
SUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6Zm9yTW9zdFZpc2libGVXZWJQYWdlSWZBbnkoc2Vz
c2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwg
c2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IFdURk1vdmUoYXV0aGVudGljYXRp
b25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVnYWN5VExTXShhdXRvKiBwYWdlKSBtdXRhYmxlIHsK
ICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM5MiwxMSAr
NDg1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcoUHJv
Y2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBDOjpDb24KICAgICAgICAgbmV0d29ya1Byb2Nlc3ND
cmFzaGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSNpZiBQTEFURk9STShDT0NPQSkK
LSAgICBpZiAobV9wcm9jZXNzUG9vbC5wcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpCi0gICAg
ICAgIHNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKICAgICAKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rp
b24gPSB0aGlzLT5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSkKQEAgLTEyMDUsNyArMTI5
Myw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWlu
Rm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzCiB9CiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLnNldERvbWFpbnNX
aXRoVXNlckludGVyYWN0aW9uKFdURk1vdmUoZG9tYWlucykpOworICAgIGZvciAoYXV0byogcHJv
Y2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHBy
b2Nlc3NQb29sLT5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluPiB7IGRvbWFpbnMgfSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKIApAQCAtMTI1Miw0NSArMTM0MSwzMSBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OmZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vz
c2lvbklELCBDb21wbGV0aQogICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkZsdXNoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihSZWY8V2Vi
c2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vz
c2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMuYWRkKHN0
b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5hZGQoc3RvcmUpOwog
CiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUtPnBhcmFtZXRlcnMoKSB9LCAw
KTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0b3JlLT5zZXNzaW9uSUQoKTsKKyAgICAgICAgc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS5w
YXJhbWV0ZXJzKCkgfSwgMCk7CisgICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS5zZXNzaW9uSUQo
KTsKICAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7CiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS0+
cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CisgICAgICAgIGNyZWF0ZVN5bUxp
bmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgp
KTsKICNlbmRpZgogICAgIH0KIH0KIAotYm9vbCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpoYXNTZXNz
aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zZXNz
aW9uSURzLmNvbnRhaW5zKHNlc3Npb25JRCk7Ci19Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURhdGFT
dG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMucmVtb3ZlKHNlc3Npb25JRCk7CisgICAgbV93ZWJz
aXRlRGF0YVN0b3Jlcy5yZW1vdmUod2Vic2l0ZURhdGFTdG9yZSk7CiAKICAgICBpZiAoY2FuU2Vu
ZE1lc3NhZ2UoKSkKLSAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRlc3Ry
b3lTZXNzaW9uIHsgc2Vzc2lvbklEIH0sIDApOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24geyB3ZWJzaXRlRGF0YVN0b3JlLnNlc3Npb25JRCgp
IH0sIDApOwogfQogCiBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJz
aXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0g
ICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7
Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygp
KSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC53
ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAgICAgICBpZiAod2Vic2l0ZURhdGFTdG9yZSAmJiB3
ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBzZXNzaW9uSUQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgIH0KLSAgICBy
ZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vz
c2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5n
RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3JhZ2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCkKQEAgLTEzMzcsNyArMTQxMiw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJDb250ZW50CiAj
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3Rh
Ymxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoUmVnaXN0cmFibGVE
b21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9wcm9j
ZXNzUG9vbC5lc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3Mo
KnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCBzZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyAgICBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBSZWdpc3RyYWJsZURvbWFpbiB7
cmVnaXN0cmFibGVEb21haW59LCBzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3b3JrZXJDb250ZXh0Q29ubmVjdGlv
bk5vTG9uZ2VyTmVlZGVkKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBA
IC0xNTAwLDE2ICsxNTc1LDM0IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cHJlY29ubmVj
dFRvKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2ViUGFnZVByb3h5SWRlCiAgICAgc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWNvbm5lY3RUbyhzZXNzaW9uSUQsIHdlYlBhZ2VQ
cm94eUlELCB3ZWJQYWdlSUQsIHVybCwgdXNlckFnZW50LCBzdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiksIDApOwogfQogCitzdGF0aWMgYm9vbCBh
bnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0
byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAg
ICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0
aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAg
IGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xz
KCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2Vz
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKQog
ewotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkgewor
ICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAg
ICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRGb3JlZ3JvdW5kQWN0aXZpdHkobV9h
Y3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdl
YlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmZvcmVncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBm
b3IgZm9yZWdyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvRm9yZWdyb3VuZCgpLCAwKTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhh
c0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0Jh
Y2tncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6
OmlzVmFsaWRCYWNrZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7
CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmJh
Y2tncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgYmFja2dyb3VuZCB2aWV3KHMpIl9zKTsK
ICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJh
bnNpdGlvblRvQmFja2dyb3VuZCgpLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKaW5kZXggYTBiNGMxZDg5MzhlMjA1
ZWMzNjFkZTVjMTA4MjVkMTgyNzc2NTNiNC4uMGFkNjE4NzhiZDYwZGVjMmFlZjE0YTFlNWNmY2Q1
YjdkNzBhNzczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTQ2LDEyICs0NiwxNyBAQAogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAjaW5jbHVkZSAiWFBDRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSA8d3RmL09T
T2JqZWN0UHRyLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBGb3JtRGF0YVJl
ZmVyZW5jZTsKIH0KIAorbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xhc3MgU2Vzc2lvbklEOwogfQpAQCAt
NzMsOCArNzgsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWRQcm94eTsK
IGNsYXNzIERvd25sb2FkUHJveHlNYXA7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHk7CiBj
bGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlclByb3h5OwogCiBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVyU3Rh
dGlzdGljcyA6IGJvb2w7CkBAIC04Niw4ICs5MSw5IEBAIHN0cnVjdCBGcmFtZUluZm9EYXRhOwog
c3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFJlc291cmNl
TG9hZEluZm87CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CitzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnM7CiAKLWNsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkgZmluYWwgOiBwdWJsaWMgQXV4
aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQsIHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CitjbGFzcyBOZXR3b3JrUHJv
Y2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQ
cm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nl
c3NQcm94eT4sIHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB1c2luZyBSZWdpc3RyYWJsZURv
bWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwpAQCAtMTAyLDEyICsxMDgsMTggQEAg
cHVibGljOgogICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJQ
cm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gZGVmYXVs
dE5ldHdvcmtQcm9jZXNzKCk7CisgICAgc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtQcm9jZXNzUHJveHkpOyB9CiAg
ICAgfk5ldHdvcmtQcm9jZXNzUHJveHkoKTsKIAorICAgIHN0YXRpYyBWZWN0b3I8UmVmPE5ldHdv
cmtQcm9jZXNzUHJveHk+PiBhbGxOZXR3b3JrUHJvY2Vzc2VzKCk7CisgICAgCisgICAgdm9pZCB0
ZXJtaW5hdGUoKSBmaW5hbDsKKyAgICB2b2lkIGRpZFRlcm1pbmF0ZSgpOworCiAgICAgdm9pZCBn
ZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6Oldl
YlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYp
OwogCi0gICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0
b3JlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZvRGF0
YSYsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsKKyAgICBEb3dubG9hZFByb3h5JiBj
cmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBXZWJQcm9jZXNzUG9vbCYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQ
YWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSk7CiAKICAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEo
UEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFGZXRjaE9wdGlvbj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEp
PiYmKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIwNiwxNSArMjE4LDEyIEBA
IHB1YmxpYzoKICAgICBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSBmaW5hbCB7IHJldHVy
biBtX3Rocm90dGxlcjsgfQogICAgIHZvaWQgdXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwogCi0g
ICAgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKCkgeyByZXR1cm4gbV9wcm9jZXNzUG9vbDsg
fQotCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICB2b2lkIGRpZERlc3Ryb3lX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eSYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+
JiYpOwotICAgIGJvb2wgaGFzU2Vzc2lvbihQQUw6OlNlc3Npb25JRCkgY29uc3Q7Ci0gICAgdm9p
ZCByZW1vdmVTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKKyAgICB2b2lkIGFkZFNlc3Npb24oV2Vi
c2l0ZURhdGFTdG9yZSYpOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3Jl
Jik7CiAgICAgCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgdm9pZCBjcmVhdGVT
eW1MaW5rRm9yRmlsZVVwZ3JhZGUoY29uc3QgU3RyaW5nJiBpbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnkpOwpAQCAtMjI5LDYgKzIzOCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1l
Rm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lz
dGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAKKyAgICB2
b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQgcmVzZXRRdW90YShQ
QUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIHZvaWQg
cmVzb3VyY2VMb2FkRGlkU2VuZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVzb3Vy
Y2VMb2FkSW5mbyYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgT3B0aW9uYWw8SVBDOjpG
b3JtRGF0YVJlZmVyZW5jZT4mJik7CkBAIC0yNDgsNyArMjU5LDE5IEBAIHB1YmxpYzoKICAgICB2
b2lkIHVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyQnVuZGxlSWRlbnRpZmllcihDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVN
YW5hZ2VyKCkgeyByZXR1cm4gbV9jb29raWVNYW5hZ2VyLmdldCgpOyB9CisKKyAgICBBUEk6OkN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkg
eyByZXR1cm4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuZ2V0KCk7IH0KKworI2lmIFBM
QVRGT1JNKENPQ09BKQorICAgIHhwY19vYmplY3RfdCB4cGNFbmRwb2ludE1lc3NhZ2UoKSBjb25z
dCB7IHJldHVybiBtX2VuZHBvaW50TWVzc2FnZS5nZXQoKTsgfQorI2VuZGlmCisKIHByaXZhdGU6
CisgICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eSgpOworCisgICAgdm9pZCBzZW5kQ3Jl
YXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisKICAgICAvLyBBdXhpbGlhcnlQcm9jZXNz
UHJveHkKICAgICBBU0NJSUxpdGVyYWwgcHJvY2Vzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiTmV0d29ya2luZyJfczsgfQogCkBAIC0yNTYsNyArMjc5LDYgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2
b2lkIHByb2Nlc3NXaWxsU2h1dERvd24oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAKLSAg
ICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgIHZvaWQgY2xlYXJDYWxsYmFja1N0
YXRlcygpOwogCiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKQEAgLTMxMiwxNiArMzM0
LDE3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShQQUw6OlNlc3Npb25JRCwgUmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+JiYpOwog
Ci0gICAgV2ViUHJvY2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBIYXNoTWFwPENhbGxi
YWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPj4gbV9wZW5kaW5nRmV0
Y2hXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJhY2tzOwog
ICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5k
aW5nRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zQ2FsbGJhY2tzOwogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPERvd25sb2FkUHJveHlNYXA+IG1fZG93bmxvYWRQcm94eU1hcDsKKworICAgIFVuaXF1
ZVJlZjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQ7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikK
ICAgICBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSBtX2N1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5OwogI2VuZGlmCisKICAgICBQcm9jZXNzVGhyb3R0bGVyIG1fdGhyb3R0bGVyOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9jZXNzVGhyb3R0bGVyOjpCYWNrZ3JvdW5kQWN0aXZpdHk+
IG1fYWN0aXZpdHlGb3JIb2xkaW5nTG9ja2VkRmlsZXM7CiAgICAgUHJvY2Vzc1Rocm90dGxlcjo6
QWN0aXZpdHlWYXJpYW50IG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzOwpAQCAtMzQ3LDkgKzM3
MCwxMSBAQCBwcml2YXRlOgogICAgIHByaXZhdGU6CiAgICAgICAgIFdlYWtQdHI8TmV0d29ya1By
b2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICB9OworICAgIE9TT2JqZWN0UHRyPHhw
Y19vYmplY3RfdD4gbV9lbmRwb2ludE1lc3NhZ2U7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8UEFM
OjpTZXNzaW9uSUQ+IG1fc2Vzc2lvbklEczsKKyAgICBXZWFrSGFzaFNldDxXZWJzaXRlRGF0YVN0
b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmVzOworICAgIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+
IG1fY29va2llTWFuYWdlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29j
b2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHlDb2NvYS5tbQppbmRleCBiOGRhZWRmN2JlYmExY2Q4MWY2ZTUyNDQ5NjAzMTBmMTMzMTBjMTFl
Li4wZTVmYWVjMWIzYWFlNzkyNDU0YTg5OTAxMmM5Njc0YzNjMmU4NDE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHlDb2NvYS5tbQpAQCAtNTEsOCArNTEsMTEgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpY
UENFdmVudEhhbmRsZXI6OmhhbmRsZVhQQ0V2ZW50KHhwY19vYmplY3RfdCBldmVudCkgY28KICAg
ICBpZiAobWVzc2FnZU5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6
eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVzc2FnZU5hbWUpCi0gICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5k
cG9pbnRUb1dlYlByb2Nlc3MoZXZlbnQpOworICAgIGlmIChtZXNzYWdlTmFtZSA9PSBMYXVuY2hT
ZXJ2aWNlc0RhdGFiYXNlWFBDQ29uc3RhbnRzOjp4cGNMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBD
RW5kcG9pbnRNZXNzYWdlTmFtZSkgeworICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5tX2VuZHBv
aW50TWVzc2FnZSA9IGV2ZW50OworICAgICAgICBmb3IgKGF1dG8mIGRhdGFTdG9yZSA6IG1fbmV0
d29ya1Byb2Nlc3MtPm1fd2Vic2l0ZURhdGFTdG9yZXMpCisgICAgICAgICAgICBkYXRhU3RvcmUu
c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb0FsbFdlYlByb2Nlc3NlcygpOworICAgIH0K
IAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKaW5kZXggY2M1MjZhYWYzYWFmYjFjMTQ2ZGE0YjI0MTk0
NTliMTA5MjAxYjYxMC4uMDg1ZTdkMjY1YTEzNzM1YmU3YTEyNzhlYzFkZmI2M2ZkNWRkNWQ3MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
Y3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJB
UElTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIK
KyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxs
YmFja0lELmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiV2ViQ29va2llTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKQEAgLTM5LDI0ICs0MCwxNiBAQAog
bmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY29uc3QgY2hh
ciogV2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSgpCitXZWJDb29raWVNYW5h
Z2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3
b3JrUHJvY2VzcykKKyAgICA6IG1fbmV0d29ya1Byb2Nlc3MobWFrZVdlYWtQdHIobmV0d29ya1By
b2Nlc3MpKQogewotICAgIHJldHVybiAiV2ViQ29va2llTWFuYWdlclByb3h5IjsKLX0KLQotUmVm
PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gV2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoV2Vi
UHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdl
YkNvb2tpZU1hbmFnZXJQcm94eShwcm9jZXNzUG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2Vy
UHJveHk6OldlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wp
Ci0gICAgOiBXZWJDb250ZXh0U3VwcGxlbWVudChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250
ZXh0U3VwcGxlbWVudDo6cHJvY2Vzc1Bvb2woKS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwor
ICAgIG5ldHdvcmtQcm9jZXNzLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIH0KIAogV2ViQ29v
a2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KCkKIHsKKyAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSk7CiAgICAgQVNTRVJUKG1fY29va2llT2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiB9CiAKQEAg
LTY1LDEwMiArNTgsODQgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmluaXRpYWxpemVD
bGllbnQoY29uc3QgV0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSogY2wKICAgICBtX2NsaWVudC5p
bml0aWFsaXplKGNsaWVudCk7CiB9CiAKLS8vIFdlYkNvbnRleHRTdXBwbGVtZW50Ci0KLXZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCgpCi17Ci0gICAgVmVj
dG9yPE9ic2VydmVyKj4gb2JzZXJ2ZXJzOwotICAgIGZvciAoYXV0byYgb2JzZXJ2ZXJTZXQgOiBt
X2Nvb2tpZU9ic2VydmVycy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8qIG9ic2VydmVy
IDogb2JzZXJ2ZXJTZXQpCi0gICAgICAgICAgICBvYnNlcnZlcnMuYXBwZW5kKG9ic2VydmVyKTsK
LSAgICB9Ci0KLSAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJzKQotICAgICAgICBv
YnNlcnZlci0+bWFuYWdlckRlc3Ryb3llZCgpOwotCi0gICAgQVNTRVJUKG1fY29va2llT2JzZXJ2
ZXJzLmlzRW1wdHkoKSk7Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNz
RGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnByb2Nlc3NEaWRDbG9zZShOZXR3b3JrUHJvY2Vzc1Byb3h5KikKLXsKLX0KLQotdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkKLXsKLSAg
ICBBUEk6Ok9iamVjdDo6cmVmKCk7Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpk
ZXJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkKLXsKLSAgICBBUEk6Ok9iamVjdDo6ZGVyZWYoKTsK
LX0KLQogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8
U3RyaW5nPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3Jr
UHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6Okdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlv
bikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwor
ICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0bmFtZXMpCiB7Ci0gICAgcHJv
Y2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHNl
c3Npb25JRCwgaG9zdG5hbWVzKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklELCBob3N0bmFtZXMpLCAwKTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNz
UmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRl
QWxsQ29va2llcyhzZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAg
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVs
ZXRlQWxsQ29va2llcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUNvb2tpZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENvb2tp
ZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikK
IHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBb
Y2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbildKCkgbXV0YWJsZSB7
CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2ll
KHNlc3Npb25JRCwgY29va2llKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxz
ZQogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7Ci0gICAgfSk7CiB9CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIFdhbGxUaW1lIHRpbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tp
ZXNNb2RpZmllZFNpbmNlKHNlc3Npb25JRCwgdGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlv
bikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFs
bENvb2tpZXNNb2RpZmllZFNpbmNlKHNlc3Npb25JRCwgdGltZSksIFdURk1vdmUoY2FsbGJhY2tG
dW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQogCiB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIGNvbnN0IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nl
c3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29r
aWUoc2Vzc2lvbklELCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llKHNlc3Npb25J
RCwgY29va2llcyksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAg
ICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
c2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxDb29raWU+
JiBjb29raWVzLCBjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBtYWluRG9jdW1lbnRVUkwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8m
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsK
LSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OlNldENvb2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVu
dFVSTCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1cmws
IG1haW5Eb2N1bWVudFVSTCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UK
KyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0QWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAg
ICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpHZXRBbGxDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJh
Y2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6
OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7Cisg
ICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENvb2tpZT4mJik+JiYg
Y2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Np
b25JRCwgdXJsKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFdU
Rk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5j
dGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZp
bmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNz
UG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNz
aW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQog
ewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJ
Zk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tp
ZUNoYW5nZXMoc2Vzc2lvbklEKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BP
YnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9pZCAoKT4mJiBjYWxsYmFjaykKQEAgLTIxMSwxOCAr
MTg2LDE4IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpjb29raWVzRGlkQ2hhbmdlKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlv
bikKIHsKLSNpZiBVU0UoU09VUCkKLSAgICBwcm9jZXNzUG9vbCgpLT5zZXRJbml0aWFsSFRUUENv
b2tpZUFjY2VwdFBvbGljeShwb2xpY3kpOwotI2VuZGlmCi0KLSAgICBhdXRvJiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29y
a1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpT
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlv
bikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhUVFBD
b29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7Cisg
ICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKLXZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNhbGxiYWNr
RnVuY3Rpb24pCit2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2Vw
dFBvbGljeShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRv
JiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7
Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KCksIFdURk1vdmUoY2FsbGJhY2tG
dW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6Okdl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3koc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0
aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKEhUVFBDb29raWVBY2Nl
cHRQb2xpY3k6Ok5ldmVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCmluZGV4IDBiZGZjMGQ0
ZTQ3YzQzNmY1ODVjZjI5YzA5ZDUxYTI5YmM4MTFhOWQuLjZmNTFmMDNlNWMwY2E4OTQxMjMzNDM3
N2I1NTQzZDgyMmNjMmZlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkNvb2tpZU1hbmFnZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNv
b2tpZU1hbmFnZXJQcm94eS5oCkBAIC01NiwxMSArNTYsOSBAQCB0eXBlZGVmIEdlbmVyaWNDYWxs
YmFjazxBUEk6OkFycmF5Kj4gQXJyYXlDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNr
PFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k+IEhUVFBDb29raWVBY2NlcHRQb2xpY3lD
YWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+Jj4gR2V0Q29va2llc0NhbGxiYWNrOwogCi1jbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJv
eHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29raWVNYW5h
Z2VyPiwgcHVibGljIFdlYkNvbnRleHRTdXBwbGVtZW50LCBwcml2YXRlIElQQzo6TWVzc2FnZVJl
Y2VpdmVyIHsKK2NsYXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVj
dEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNvb2tpZU1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVz
c2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVu
dE5hbWUoKTsKLQotICAgIHN0YXRpYyBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBjcmVhdGUo
V2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4g
Y3JlYXRlKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKSB7IHJldHVybiBhZG9w
dFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94eShuZXR3b3JrUHJvY2VzcykpOyB9CiAgICAg
dmlydHVhbCB+V2ViQ29va2llTWFuYWdlclByb3h5KCk7CiAKICAgICB2b2lkIGluaXRpYWxpemVD
bGllbnQoY29uc3QgV0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSopOwpAQCAtMTA0LDE3ICsxMDIs
MTAgQEAgcHVibGljOgogICAgIHVzaW5nIEFQSTo6T2JqZWN0OjpkZXJlZjsKIAogcHJpdmF0ZToK
LSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBXZWJDb29r
aWVNYW5hZ2VyUHJveHkoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwogCiAgICAgdm9pZCBjb29raWVz
RGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEKTsKIAotICAgIC8vIFdlYkNvbnRleHRTdXBwbGVtZW50
Ci0gICAgdm9pZCBwcm9jZXNzUG9vbERlc3Ryb3llZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgcHJv
Y2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZvaWQgcHJvY2Vz
c0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlZldl
YkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXJlZldlYkNvbnRleHRT
dXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0KICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgogICAg
IHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikg
b3ZlcnJpZGU7CiAKQEAgLTEyNSw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8UEFM
OjpTZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9pZCAoKT4+IG1fbGVnYWN5Q29va2llT2JzZXJ2
ZXJzOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIEhhc2hTZXQ8T2JzZXJ2ZXIqPj4gbV9j
b29raWVPYnNlcnZlcnM7CiAKKyAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0
d29ya1Byb2Nlc3M7CiAgICAgV2ViQ29va2llTWFuYWdlclByb3h5Q2xpZW50IG1fY2xpZW50Owog
CiAjaWYgVVNFKFNPVVApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApp
bmRleCA1ZWRmNDMyOWFkNTA4NWFkNGE0NDJhNmUwN2JkNDYwMDYyZjY3Y2Q0Li4yMzliODE3Y2M1
YmI2ZmYxYTQ3ZDliNWNmMGM2NTBjODUwYTA1NmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE3NDYsNyArMTc0Niw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpzZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGJvb2wgY29udHJvbGxlZCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29udHJvbGxlZEJ5QXV0b21h
dGlvbihjb250cm9sbGVkKSk7Ci0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vzc2lvbklzQ29u
dHJvbGxlZEJ5QXV0b21hdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBtX2Nv
bnRyb2xsZWRCeUF1dG9tYXRpb24pKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vzc2lvbklzQ29udHJv
bGxlZEJ5QXV0b21hdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBtX2NvbnRy
b2xsZWRCeUF1dG9tYXRpb24pLCAwKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNyZWF0ZUlu
c3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3Rv
clRhcmdldFR5cGUgdHlwZSkKQEAgLTMyMTAsMTEgKzMyMTAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6aXNGb3JjZWRJbnRvQXBwQm91bmRNb2RlVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPgogdm9pZCBXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1l
bnRJbk5ldHdvcmtQcm9jZXNzKCkKIHsKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpICYm
ICFQTEFURk9STShNQUNDQVRBTFlTVCkKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBt
X3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAo
IW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRp
c2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnQoKSwgMCk7Ci0gICAgfQorICAgIHdlYnNpdGVE
YXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCksIDApOwogI2VuZGlmCiB9CiAKQEAg
LTMyMjMsMTMgKzMyMTksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJTZXJ2aWNlV29ya2Vy
RW50aXRsZW1lbnRPdmVycmlkZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKAogI2lmIEVOQUJMRShB
UFBfQk9VTkRfRE9NQUlOUykgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFn
ZTo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+
cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1By
b2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2Vy
dmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2Vy
RW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UK
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogI2VuZGlmCkBAIC00NDIzLDcgKzQ0MTMsNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6cHJlY29ubmVjdFRvKGNvbnN0IFVSTCYgdXJsKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBhdXRvIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5ID0gbV9jYW5Vc2VDcmVk
ZW50aWFsU3RvcmFnZSA/IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpVc2UgOiBX
ZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2U7Ci0gICAgbV9wcm9jZXNz
LT5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkucHJlY29ubmVjdFRvKHNlc3Np
b25JRCgpLCBpZGVudGlmaWVyKCksIHdlYlBhZ2VJRCgpLCB1cmwsIHVzZXJBZ2VudCgpLCBzdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpKTsKKyAg
ICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5wcmVjb25uZWN0VG8oc2Vzc2lv
bklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlEKCksIHVybCwgdXNlckFnZW50KCksIHN0b3Jl
ZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKCkpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCBjYW5V
c2VDcmVkZW50aWFsU3RvcmFnZSkKQEAgLTQ3MTksNyArNDcwOSw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIEZyYW1l
SW5mb0RhdGEmCiAgICAgICAgICAgICBSZWdpc3RyYWJsZURvbWFpbiBjdXJyZW50RG9tYWluIHsg
Y3VycmVudFJlcXVlc3QudXJsKCkgfTsKICAgICAgICAgICAgIFVSTCByZXF1ZXN0ZXJVUkwgeyBV
UkwoKSwgcmVxdWVzdGVyT3JpZ2luLnRvU3RyaW5nKCkgfTsKICAgICAgICAgICAgIGlmICghY3Vy
cmVudERvbWFpbi5tYXRjaGVzKHJlcXVlc3RlclVSTCkpCi0gICAgICAgICAgICAgICAgbV9wcm9j
ZXNzLT5wcm9jZXNzUG9vbCgpLmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVy
KG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxlRG9tYWluIHsgcmVx
dWVzdGVyVVJMIH0sIGN1cnJlbnREb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIG1faWRl
bnRpZmllciwgbV93ZWJQYWdlSUQpOworICAgICAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3MoKS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zl
cihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJl
cXVlc3RlclVSTCB9LCBjdXJyZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lk
ZW50aWZpZXIsIG1fd2ViUGFnZUlEKTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQpAQCAtNDc1
Nyw3ICs0NzQ3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZShG
cmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgRnJhbWVJbmZvRGF0YSYKICAgICBpZiAobmF2aWdhdGlv
biAmJiBmcmFtZS0+aXNNYWluRnJhbWUoKSkgewogICAgICAgICBpZiAoYXV0byYgYWRDbGlja0F0
dHJpYnV0aW9uID0gbmF2aWdhdGlvbi0+YWRDbGlja0F0dHJpYnV0aW9uKCkpIHsKICAgICAgICAg
ICAgIGlmIChhZENsaWNrQXR0cmlidXRpb24tPmRlc3RpbmF0aW9uKCkubWF0Y2hlcyhmcmFtZS0+
dXJsKCkpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9O
ZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0
dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmli
dXRpb24pKTsKKyAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3RvcmVBZENsaWNrQXR0cmlidXRp
b24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKmFkQ2xpY2tBdHRyaWJ1dGlvbiks
IDApOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MzcxLDcgKzUzNjEsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFdlYkZyYW1lUHJveHkmIGZyYW1lLCBj
b25zdCBVUkwmIHBhZwogICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8fCBtYWluRnJhbWVI
b3N0LmlzRW1wdHkoKSB8fCB0YXJnZXRIb3N0ID09IHNvdXJjZVVSTC5ob3N0KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5n
UHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1lTmF2aWdhdGlvbihtX3dl
YnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHRhcmdldFVS
TCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBz
b3VyY2VVUkwgfSwgaXNSZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUoKSwgTW9ub3RvbmljVGlt
ZTo6bm93KCkgLSBtX2RpZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5GcmFtZVRpbWVzdGFtcCwg
d2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCku
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TG9nRnJhbWVO
YXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxlRG9t
YWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVSTCB9LCBSZWdpc3Ry
YWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5pc01haW5GcmFtZSgp
LCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yTWFpbkZy
YW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlciksIDApOwogfQogI2Vu
ZGlmCiAKQEAgLTk5OTYsNTggKzk5ODYsMjcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN5c3RlbVBy
ZXZpZXdBY3Rpb25UcmlnZ2VyZWQoY29uc3QgV2ViQ29yZTo6U3lzdGVtUHJldmlld0luZm8KIAog
dm9pZCBXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgp
KSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihlbXB0eVN0cmluZygpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1
dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3Mo
KS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlj
a0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tB
dHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9v
bCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2Fu
U2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJBZENsaWNrQXR0cmli
dXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAg
ICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNp
dGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1l
ckZvclRlc3RpbmcoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vz
cy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29y
a1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1By
b2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFk
Q2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
IH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVy
cmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1
ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKGNvbnN0IFVSTCYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1l
c3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uQ29u
dmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJs
KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0
b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyht
X3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9u
c0FzRXhwaXJlZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+
cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1By
b2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENs
aWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNl
c3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJz
aXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRl
c3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IGQ5MjZiMzNjYmRmMmJiOGJi
OTgwZDYzYzVkYzUyYWU1MjUwOTI1MjkuLjcxZjFmNjM4ZGMzM2Y0ZTQxODI1NmQ2NjgxY2Y4NDRm
ODJiOTQxYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAK
QEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlICJMZWdhY3lHbG9iYWxTZXR0aW5ncy5oIgogI2lu
Y2x1ZGUgIkxvZ0luaXRpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1
ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2Fn
ZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCkBAIC0xNDMsOCArMTQyLDEw
IEBACiAjZW5kaWYKIAogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPRyhjaGFubmVs
LCBmbXQsIC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIiVwIC0gV2ViUHJvY2Vzc1Bvb2w6OiIg
Zm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNF
X0xPR19TVEFUSUMoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HKGNoYW5uZWwsICJXZWJQ
cm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIFdFQlBST0NFU1NQT09M
X1JFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPR19FUlJPUihj
aGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18p
CiAjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQoY2hhbm5lbCwg
Zm10LCAuLi4pIFJFTEVBU0VfTE9HX0lGKHNlc3Npb25JRC5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93
ZWQoKSwgY2hhbm5lbCwgIiVwIC0gV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAjI19fVkFf
QVJHU19fKQorI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEX1NU
QVRJQyhjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3YXlz
T25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAiV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCAjI19f
VkFfQVJHU19fKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwpAQCAtMjMyLDYgKzIzMywxMSBAQCBzdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUlu
c2Vuc2l0aXZlSGFzaD4mIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdAogICAgIHJldHVy
biBzZXQ7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0
aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQoreworICAgIHJldHVybiBjb3B5VG9WZWN0b3IoZ2xv
YmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpOworfQorCiBXZWJQcm9j
ZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNv
bmZpZ3VyYXRpb24pCiAgICAgOiBtX2NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbi5jb3B5KCkp
CiAgICAgLCBtX2RlZmF1bHRQYWdlR3JvdXAoV2ViUGFnZUdyb3VwOjpjcmVhdGUoKSkKQEAgLTIz
OSw3ICsyNDUsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgLCBtX2F1dG9tYXRpb25DbGll
bnQobWFrZVVuaXF1ZTxBUEk6OkF1dG9tYXRpb25DbGllbnQ+KCkpCiAgICAgLCBtX2Rvd25sb2Fk
Q2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSkKICAgICAsIG1faGlz
dG9yeUNsaWVudChtYWtlVW5pcXVlPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCkp
Ci0gICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPEFQSTo6Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogICAgICwgbV92aXNpdGVkTGlua1N0b3JlKFZp
c2l0ZWRMaW5rU3RvcmU6OmNyZWF0ZSgpKQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAsIG1faGln
aFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXIobWFrZVVuaXF1ZTxIaWdoUGVyZm9ybWFu
Y2VHcmFwaGljc1VzYWdlU2FtcGxlcj4oKnRoaXMpKQpAQCAtMjY3LDkgKzI3Miw2IEBAIFdlYlBy
b2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYg
Y29uZmlndXJhdGlvbikKICNlbmRpZgogICAgIH0pOwogCi0gICAgaWYgKCFtX3dlYnNpdGVEYXRh
U3RvcmUgJiYgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3Rz
KCkpCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGVmYXVsdERhdGFTdG9yZSgpOwotCiAgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBtX2NvbmZp
Z3VyYXRpb24tPmFsd2F5c1JldmFsaWRhdGVkVVJMU2NoZW1lcygpKQogICAgICAgICBtX3NjaGVt
ZXNUb1JlZ2lzdGVyQXNBbHdheXNSZXZhbGlkYXRlZC5hZGQoc2NoZW1lKTsKIApAQCAtMjg1LDcg
KzI4Nyw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29s
Q29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICBhZGRNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OldlYlByb2Nlc3NQb29sOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIAog
ICAgIC8vIE5PVEU6IFRoZXNlIHN1Yi1vYmplY3RzIG11c3QgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIg
bV9tZXNzYWdlUmVjZWl2ZXJNYXAuLgotICAgIGFkZFN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdl
clByb3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+
KCk7CiAgICAgYWRkU3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAj
aWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCkBAIC0zNDIsOSArMzQzLDYgQEAgV2ViUHJvY2Vzc1Bv
b2w6On5XZWJQcm9jZXNzUG9vbCgpCiAgICAgcHJvY2Vzc1Bvb2xDb3VudGVyLmRlY3JlbWVudCgp
OwogI2VuZGlmCiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2h1dERvd25Qcm9jZXNzKCk7Ci0KICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICBp
ZiAoIW1fcHJvY2Vzc2VzVXNpbmdHYW1lcGFkcy5pc0VtcHR5KCkpCiAgICAgICAgIFVJR2FtZXBh
ZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5wcm9jZXNzUG9vbFN0b3BwZWRVc2luZ0dhbWVwYWRzKCp0
aGlzKTsKQEAgLTQwMiwxNiArNDAwLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QXV0b21h
dGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYKICAgICAg
ICAgbV9hdXRvbWF0aW9uQ2xpZW50ID0gV1RGTW92ZShhdXRvbWF0aW9uQ2xpZW50KTsKIH0KIAot
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJiBjdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi17Ci0jaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJP
VE9DT0xfTUFOQUdFUikKLSAgICBpZiAoIWN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkKLSAg
ICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBtYWtlVW5pcXVlPEFQSTo6Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpOwotICAgIGVsc2UKLSAgICAgICAgbV9jdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQgPSBXVEZNb3ZlKGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVu
dFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVudFNl
cnZpY2VCdW5kbGVJZGVudGlmaWVyKQogewogICAgIC8vIEd1YXJkIGFnYWluc3QgQVBJIG1pc3Vz
ZS4KQEAgLTQyMSwxMSArNDA5LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2Vi
Q29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgY3UKICAgICBtX2Nv
bmZpZ3VyYXRpb24tPnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihj
dXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIpOwogfQogCi1JUEM6OkNvbm5l
Y3Rpb24qIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKQotewot
ICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzLT5jb25uZWN0aW9uKCk7Ci19Ci0KIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCh2b2lkKiBjb250ZXh0KQogewogICAgIHN0YXRp
Y19jYXN0PFdlYlByb2Nlc3NQb29sKj4oY29udGV4dCktPmxhbmd1YWdlQ2hhbmdlZCgpOwpAQCAt
NDM1LDggKzQxOCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCgpCiB7
CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpVc2VyUHJlZmVy
cmVkTGFuZ3VhZ2VzQ2hhbmdlZCgpKTsKICNpZiBVU0UoU09VUCkKLSAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5n
dWFnZXMoKSksIDApOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZl
cnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CiAjZW5k
aWYKIH0KIApAQCAtNDQ5LDcgKzQzMSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmZ1bGxLZXli
b2FyZEFjY2Vzc01vZGVDaGFuZ2VkKGJvb2wgZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudChib29sIGlzQ3JpdGljYWwp
CiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpE
aWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSk7Ci0gICAgc2VuZFRvTmV0
d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1v
cnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpKTsKKyAgICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nl
c3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkpCisgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNl
aXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSwgMCk7CiAjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCiAgICAgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnNl
bmRNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpOwogI2VuZGlmCkBAIC00NzQsMjc1ICs0
NTcsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzY3JlZW5Qcm9wZXJ0aWVzU3RhdGVDaGFuZ2Vk
KCkKICNlbmRpZgogfQogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUp
Ci17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICAvLyBGSVhNRTog
VGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkg
b24gbm9uLW1haW4gdGhyZWFkcy4KLSAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3
ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCi0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KLSAgICBpZiAo
IVJ1bkxvb3A6OmlzTWFpbigpKSB7Ci0gICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgICAgICBlbnN1
cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuICptX25ldHdv
cmtQcm9jZXNzOwotICAgIH0KLQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAg
IGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICAg
ICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAgYXV0byBu
ZXR3b3JrUHJvY2VzcyA9IG1ha2VVbmlxdWU8TmV0d29ya1Byb2Nlc3NQcm94eT4oKnRoaXMpOwot
Ci0gICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLQotICAg
IGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IGNvcHlUb1ZlY3RvcihtX3dlYnNpdGVE
YXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUt
PmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3Jl
LT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKCk7Ci0g
ICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllciA9IG1fd2Vi
c2l0ZURhdGFTdG9yZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5
SWRlbnRpZmllcigpOwotI2VuZGlmCi0gICAgfQotCi0gICAgcGFyYW1ldGVycy5jYWNoZU1vZGVs
ID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwoKTsKLQotICAg
IGZvciAoYXV0byYgc2NoZW1lIDogZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhh
bmRsZXJzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0
b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tp
ZVN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNF
bXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3Jp
dGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jb29raWVTdG9y
YWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBjb250YWluZXJDYWNo
ZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgp
OwotICAgIGlmICghY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnRh
aW5lckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdl
YlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmVudEJ1
bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJl
YWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxlKGVtcHR5U3RyaW5nKCksIFNhbmRib3hFeHRlbnNp
b246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5k
aWYKLSNlbmRpZgotCi0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJl
ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVz
VG9SZWdpc3RlckFzU2VjdXJlKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVy
ZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lH
bG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0Nv
bnRlbnRTZWN1cml0eVBvbGljeSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3Rl
cmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9u
KCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1l
c1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdz
OjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7Ci0KLSNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAvLyAqKioqKioqKioKLSAgICAvLyBJTVBPUlRBTlQ6
IERvIG5vdCBjaGFuZ2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGluZGV4ZWQgZGF0YWJh
c2VzIG9uIGRpc2sgd2l0aG91dCBmaXJzdCBjb25zdWx0aW5nIGEgcmV2aWV3ZXIgZnJvbSBBcHBs
ZSAoPHJkYXI6Ly9wcm9ibGVtLzE3NDU0NzEyPikKLSAgICAvLyAqKioqKioqKioKLSAgICBpZiAo
bV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+
cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1l
dGVycygpLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5Lmlz
RW1wdHkoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFk
V3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPmNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7Ci0gICAgfQot
I2VuZGlmCi0KLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgaWYgKG1fd2Vic2l0ZURh
dGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25EaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5ID0gIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5zZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBhdXRvIGxvY2FsU3Rv
cmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+
cmVzb2x2ZWRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAo
IWxvY2FsU3RvcmFnZURpcmVjdG9yeSkKLSAgICAgICAgbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0g
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCk7
Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VE
aXJlY3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeSwg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0byBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBt
X3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPmNhY2hlU3RvcmFnZURpcmVj
dG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5Lmlz
RW1wdHkoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFk
V3JpdGVEaXJlY3RvcnkoY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5ID0gV1RGTW92ZShjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOwotICAgIH0KLQot
ICAgIFN0cmluZyByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5OwotICAgIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlOwotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICByZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5LCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKLQotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IGZh
bHNlOwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVu
dCA9IGZhbHNlOwotICAgIGJvb2wgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IHRydWU7Ci0gICAg
Ym9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gZmFsc2U7Ci0jaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBXZWJDb3JlOjpUaGlyZFBhcnR5
Q29va2llQmxvY2tpbmdNb2RlIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBXZWJDb3Jl
OjpUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpBbGw7Ci0gICAgV2ViQ29yZTo6U2FtZVNp
dGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJs
ZWQgPSBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87Ci0jZW5k
aWYKLSAgICBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSBmaXJzdFBh
cnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzOwotICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICBIYXNoU2V0PFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluPiBhcHBCb3VuZERvbWFpbnM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4gbWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkK
LSAgICBtX3RjY1ByZWZlcmVuY2VFbmFibGVkID0gZG9lc0FwcEhhdmVJVFBFbmFibGVkKCk7Ci0g
ICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlICYmICF3aXRoV2Vic2l0ZURhdGFTdG9yZS0+aXNJ
dHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgd2l0aFdlYnNpdGVEYXRh
U3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9h
ZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0YVN0b3JlICYmICFtX3dl
YnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAg
ICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlIGlmIChXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkgJiYgIVdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmUoKS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBl
bmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAg
ICAgICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5zZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVy
ZW5jZUVuYWJsZWQ7Ci0jZW5kaWYKLQotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewot
ICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gd2l0aFdlYnNpdGVEYXRhU3Rv
cmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xv
Z1Rlc3RpbmdFdmVudCA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5oYXNTdGF0aXN0aWNzVGVzdGlu
Z0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJsZVJlc291cmNlTG9hZFN0YXRp
c3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gd2l0
aFdlYnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7
Ci0gICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2Nh
bGhvc3Q7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2Rl
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLmVuYWJsZURlYnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQotICAgICAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5
Q29va2llQmxvY2tpbmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVu
dEVuYWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BhcmFtZXRlcnMuc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAg
ICAgICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlX
ZWJzaXRlRGF0YVJlbW92YWxNb2RlOwotICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9u
RG9tYWluID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXJhbWV0ZXJzLnN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJv
dW5kRG9tYWlucyA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUGFyYW1ldGVycy5hcHBCb3VuZERvbWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUGFyYW1ldGVycy5tYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFn
ZVF1b3RhID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwot
ICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFy
dHlPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGVyVGhpcmRQYXJ0
eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICAKLSAgICAgICAgY29uc3QgYXV0byYgbmV0
d29ya0NhY2hlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29y
a0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0NhY2hlRGlyZWN0b3J5Lmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3
b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFk
V3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBjb25zdCBhdXRvJiBoc3RzU3RvcmFnZURpcmVjdG9yeSA9IHdpdGhX
ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEhTVFNTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgICAg
IGlmICghaHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoaHN0c1N0b3JhZ2VEaXJlY3RvcnksIFNh
bmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX3dlYnNpdGVE
YXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fd2Vi
c2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5oYXNTdGF0aXN0
aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zaG91bGRJbmNs
dWRlTG9jYWxob3N0OwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMudGhp
cmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAgIHNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOwotI2Vu
ZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5maXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAgICAgIHN0YW5kYWxvbmVBcHBs
aWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0gICAgICAgICAg
ICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91bmREb21haW5zOwotICAgICAgICAgICAgbWFudWFs
UHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0K
LQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdp
blN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3Rh
KCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhp
cmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyVGhpcmRQ
YXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotCi0gICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtD
YWNoZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVE
aXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkp
IHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNo
ZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShu
ZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGNvbnN0IGF1dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0
YVN0b3JlLT5yZXNvbHZlZEhTVFNTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghaHN0
c1N0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9y
YWdlRGlyZWN0b3J5ID0gaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoaHN0c1N0b3JhZ2VEaXJlY3RvcnksIFNhbmRib3hFeHRl
bnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFdlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgICAgIGVuYWJsZVJl
c291cmNlTG9hZFN0YXRpc3RpY3MgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3Jl
KCktPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0gICAgICAgIGF1dG8gbmV0d29y
a0NhY2hlRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdE5ldHdvcmtDYWNoZURp
cmVjdG9yeSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3Jr
Q2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShu
ZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICB9Ci0KLSNp
ZiBIQVZFKENGTkVUV09SS19BTFRFUk5BVElWRV9TRVJWSUNFKQotICAgIGlmIChXZWJzaXRlRGF0
YVN0b3JlOjpodHRwM0VuYWJsZWQoKSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZp
Y2VEaXJlY3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0QWx0ZXJuYXRpdmVTZXJ2aWNl
c0RpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIXBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVj
dG9yeS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5
LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5odHRwM0VuYWJsZWQgPSB0cnVlOwotICAgIH0KLSNlbmRpZgotICAgIGJvb2wg
aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQgPSBmYWxzZTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGFyYW1ldGVycyA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzIHsK
LSAgICAgICAgV1RGTW92ZShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KSwKLSAgICAg
ICAgV1RGTW92ZShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KSwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcywKLSAgICAgICAgaXNJdHBT
dGF0ZUV4cGxpY2l0bHlTZXQsCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NM
b2dUZXN0aW5nRXZlbnQsCi0gICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QsCi0gICAgICAg
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUsCi0jaWYgRU5BQkxFKFJFU09V
UkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9k
ZSwKLSAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQsCi0jZW5kaWYKLSAg
ICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUsCi0gICAgICAgIHN0YW5kYWxv
bmVBcHBsaWNhdGlvbkRvbWFpbiwKLSAgICAgICAgYXBwQm91bmREb21haW5zLAotICAgICAgICBt
YW51YWxQcmV2YWxlbnRSZXNvdXJjZSwKLSAgICB9OwotCi0gICAgLy8gQWRkIGFueSBwbGF0Zm9y
bSBzcGVjaWZpYyBwYXJhbWV0ZXJzCi0gICAgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MocGFyYW1ldGVycyk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBuZXR3b3JrIHByb2Nlc3Mu
Ci0gICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyksIDApOwotCi0jaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRRT1MobmV0d29ya1Byb2Nlc3NMYXRlbmN5UU9TKCksIG5ldHdvcmtQcm9jZXNzVGhyb3VnaHB1
dFFPUygpKSwgMCk7Ci0jZW5kaWYKLQotICAgIG5ldHdvcmtQcm9jZXNzLT51cGRhdGVQcm9jZXNz
QXNzZXJ0aW9uKCk7Ci0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdlYnNpdGVEYXRhU3RvcmUp
KTsKLSAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsK
LSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIG5ldHdvcmsgcHJvY2VzcyBrbm93cyBhYm91
dCBhbGwgdGhlIHNlc3Npb25zIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgYmVmb3JlIGl0IHN0
YXJ0ZWQuCi0gICAgZm9yIChhdXRvJiBzZXNzaW9uSUQgOiBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAu
a2V5cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURh
dGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25J
RCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigqd2Vic2l0ZURhdGFT
dG9yZSk7Ci0gICAgfQotCi0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IFdURk1vdmUobmV0d29ya1By
b2Nlc3MpOwotICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLX0KLQogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdv
cmtQcm9jZXNzUHJveHkpCiB7Ci0gICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOwotICAgIEFT
U0VSVCgmbmV0d29ya1Byb2Nlc3NQcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsKLQog
ICAgIGZvciAoYXV0byYgc3VwcGxlbWVudCA6IG1fc3VwcGxlbWVudHMudmFsdWVzKCkpCiAgICAg
ICAgIHN1cHBsZW1lbnQtPnByb2Nlc3NEaWRDbG9zZSgmbmV0d29ya1Byb2Nlc3NQcm94eSk7CiAK
QEAgLTc1MSw5ICs0NjcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0Ny
YXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcgogICAgIGlmIChtX2F1
dG9tYXRpb25TZXNzaW9uKQogICAgICAgICBtX2F1dG9tYXRpb25TZXNzaW9uLT50ZXJtaW5hdGUo
KTsKIAotICAgIC8vIExlYXZlIHRoZSBwcm9jZXNzIHByb3h5IGFyb3VuZCBkdXJpbmcgY2xpZW50
IGNhbGwsIHNvIHRoYXQgdGhlIGNsaWVudCBjb3VsZCBxdWVyeSB0aGUgcHJvY2VzcyBpZGVudGlm
aWVyLgotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOwotCiAgICAgdGVybWluYXRlU2Vy
dmljZVdvcmtlcnMoKTsKIH0KIApAQCAtNzY0LDIwICs0NzcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc0NyYXNoZWQoV2ViUHJvY2Vzc1Byb3h5JiBwcm94eSkK
ICNlbmRpZgogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVw
bHkpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNz
LT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1Byb3h5LCBbdGhpcywgd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHdlYlByb2Nlc3NQcm94eSA9IG1ha2VXZWFrUHRy
KHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0gV1RGTW92ZShyZXBseSldIChhdXRvJiBjb25uZWN0
aW9uSW5mbykgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghSVBDOjpDb25uZWN0aW9u
OjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSW5mby5pZGVudGlmaWVyKCkpICYmIHdlYlBy
b2Nlc3NQcm94eSAmJiB3ZWFrVGhpcykpIHsKLSAgICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JF
TEVBU0VfTE9HX0VSUk9SKFByb2Nlc3MsICJnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246IEZh
aWxlZCBmaXJzdCBhdHRlbXB0LCByZXRyeWluZyIpOwotICAgICAgICAgICAgZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKTsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbigqd2ViUHJvY2Vzc1Byb3h5LCBXVEZNb3ZlKHJlcGx5KSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcmVwbHkoY29ubmVjdGlvbkluZm8pOwot
ICAgIH0pOwotfQotCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6Z3B1UHJvY2Vzc0NyYXNoZWQoUHJvY2Vzc0lEIGlkZW50aWZpZXIpCiB7CkBAIC04MDEsMjMg
KzUwMCwyNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpnZXRHUFVQcm9jZXNzQ29ubmVjdGlvbihX
ZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwgTQogfQogI2VuZGlmCiAKK2Jvb2wgV2Vi
UHJvY2Vzc1Bvb2w6OnNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IGZhbHNlOwor
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJs
aXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNz
UHJveHkmIHByb3h5LCBSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9tYWluLCBQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHByb3h5LCAmcHJveHkgPT0gbV9uZXR3
b3JrUHJvY2Vzcy5nZXQoKSk7CisgICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVE
YXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAg
aWYgKCF3ZWJzaXRlRGF0YVN0b3JlKQorICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0
ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOworICAgIGlmICghcHJvY2Vzc1Bv
b2xzKCkuc2l6ZSgpKQorICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmPFdlYlByb2Nl
c3NQb29sPj4gc2VydmljZVdvcmtlclByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sOjpjcmVhdGUo
QVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OmNyZWF0ZSgpLmdldCgpKSk7CiAKLSAgICBh
dXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZh
dWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7Ci0KLSAgICBpZiAoIXdlYnNpdGVE
YXRhU3RvcmUpIHsKLSAgICAgICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgICAg
ICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
YXRhU3RvcmUoKS5wdHIoKTsKLSAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSA9IG1fd2Vic2l0ZURh
dGFTdG9yZS5nZXQoKTsKLSAgICB9CisgICAgLy8gQXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJz
dCBwcm9jZXNzIHBvb2wgdG8gaG9zdCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vzcy4KKyAgICBh
dXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29scygpWzBdOworICAgIEFTU0VSVChwcm9jZXNz
UG9vbCk7CiAKICAgICBXZWJQcm9jZXNzUHJveHkqIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkg
eyBudWxscHRyIH07Ci0gICAgaWYgKCFtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mp
IHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsKLSAgICAgICAg
ICAgIGlmIChwcm9jZXNzID09IG1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9jZXNzLT5pc0R1bW15
UHJvY2Vzc1Byb3h5KCkpCisKKyAgICBpZiAoIXNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcykgeworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBwcm9jZXNzUG9vbC0+bV9wcm9j
ZXNzZXMpIHsKKyAgICAgICAgICAgIGlmIChwcm9jZXNzID09IHByb2Nlc3NQb29sLT5tX3ByZXdh
cm1lZFByb2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94eSgpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCZwcm9jZXNzLT53ZWJzaXRlRGF0YVN0
b3JlKCkgIT0gd2Vic2l0ZURhdGFTdG9yZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTgyNSwzNSArNTI3LDM1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNv
bnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgPSBw
cm9jZXNzLmdldCgpOwotICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZW5h
YmxlU2VydmljZVdvcmtlcnModXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllckZvclNlcnZp
Y2VXb3JrZXJzKCkpOworICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZW5h
YmxlU2VydmljZVdvcmtlcnMocHJvY2Vzc1Bvb2wtPnVzZXJDb250ZW50Q29udHJvbGxlcklkZW50
aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpKTsKIAotICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xf
UkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIHJldXNpbmcgYW4gZXhpc3Rpbmcgd2ViIHBy
b2Nlc3MgKHByb2Nlc3M9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBz
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKKyAgICAgICAg
ICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKFNlcnZpY2VX
b3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3Mg
cmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0lcCwgUElEPSVkKSIsIHNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nl
c3NJZGVudGlmaWVyKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICBpZiAoIXNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpIHsKLSAgICAgICAgYXV0byBuZXdQ
cm9jZXNzUHJveHkgPSBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZUZvclNlcnZpY2VXb3JrZXJzKCp0
aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgKndlYnNpdGVEYXRhU3RvcmUpOworICAg
ICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6Y3JlYXRlRm9yU2Vy
dmljZVdvcmtlcnMoKnByb2Nlc3NQb29sLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgKndl
YnNpdGVEYXRhU3RvcmUpOwogICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5ID0gbmV3
UHJvY2Vzc1Byb3h5LnB0cigpOwogCi0gICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9H
X0lGX0FMTE9XRUQoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0
aW9uVG9OZXR3b3JrUHJvY2VzcyBjcmVhdGluZyBhIG5ldyBzZXJ2aWNlIHdvcmtlciBwcm9jZXNz
IChwcm9jZXM9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNl
V29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKKyAgICAgICAgV0VCUFJP
Q0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoU2VydmljZVdvcmtlciwgImVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyBjcmVhdGluZyBh
IG5ldyBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzIChwcm9jZXM9JXAsIFBJRD0lZCkiLCBzZXJ2aWNl
V29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRl
bnRpZmllcigpKTsKIAotICAgICAgICBpbml0aWFsaXplTmV3V2ViUHJvY2VzcyhuZXdQcm9jZXNz
UHJveHksIHdlYnNpdGVEYXRhU3RvcmUpOwotICAgICAgICBtX3Byb2Nlc3Nlcy5hcHBlbmQoV1RG
TW92ZShuZXdQcm9jZXNzUHJveHkpKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPmluaXRpYWxpemVO
ZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFTdG9yZSk7CisgICAgICAg
IHByb2Nlc3NQb29sLT5tX3Byb2Nlc3Nlcy5hcHBlbmQoV1RGTW92ZShuZXdQcm9jZXNzUHJveHkp
KTsKICAgICB9CiAKLSAgICBBU1NFUlQoIW1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb250YWlu
cygqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkpOwotICAgIG1fc2VydmljZVdvcmtlclByb2Nl
c3Nlcy5hZGQoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpOworICAgIEFTU0VSVCghc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSk7
CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmFkZCgqc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eSk7CiAKLSAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lc3RhYmxpc2hTZXJ2aWNl
V29ya2VyQ29udGV4dChtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA/IG1fc2VydmljZVdvcmtl
clByZWZlcmVuY2VzLnZhbHVlKCkgOiBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCku
c3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGlmICghbV9zZXJ2aWNl
V29ya2VyVXNlckFnZW50LmlzTnVsbCgpKQotICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1By
b3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7
CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZXN0YWJsaXNoU2VydmljZVdvcmtlckNv
bnRleHQocHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzID8gcHJvY2Vzc1Bv
b2wtPm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzLnZhbHVlKCkgOiBwcm9jZXNzUG9vbC0+bV9k
ZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLnN0b3JlKCksIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKKyAgICBpZiAoIXByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJVc2VyQWdl
bnQuaXNOdWxsKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnNldFNlcnZp
Y2VXb3JrZXJVc2VyQWdlbnQocHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKIHsKLSAgICBBU1NFUlQobV9zZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzLmNvbnRhaW5zKHByb2Nlc3MpKTsKLSAgICBtX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMucmVtb3ZlKHByb2Nlc3MpOworICAgIEFTU0VSVChzZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
KCkuY29udGFpbnMocHJvY2VzcykpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5yZW1v
dmUocHJvY2Vzcyk7CiB9CiAjZW5kaWYKIApAQCAtOTIyLDcgKzYyNCw3IEBAIFJlZlB0cjxXZWJQ
cm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2FybWVkUHJvY2VzcyhXZWJz
aXRlRGF0YVN0b3JlCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCiAgICAgLy8g
SW4gcGxhdGZvcm1zIHVzaW5nIEJ1YmJsZXdyYXAgZm9yIHNhbmRib3hpbmcsIHByZXdhcm1lZCBw
cm9jZXNzIGlzIGxhdW5jaGVkIHVzaW5nIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IFdlYnNp
dGVEYXRhU3RvcmUsCiAgICAgLy8gc28gd2UgZG9uJ3QgdXNlIGl0IGluIGNhc2Ugb2YgdXNpbmcg
YSBkaWZmZXJlbnQgV2Vic2l0ZURhdGFTdG9yZS4KLSAgICBpZiAobV9zYW5kYm94RW5hYmxlZCAm
JiBtX3dlYnNpdGVEYXRhU3RvcmUgJiYgbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpICE9ICZ3ZWJz
aXRlRGF0YVN0b3JlKQorICAgIGlmIChtX3NhbmRib3hFbmFibGVkKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICNlbmRpZgogCkBAIC0xMDMyLDggKzczNCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcywgV2Vi
c2l0ZURhCiAgICAgICAgIHByb2Nlc3MuaXNSZXNwb25zaXZlKFtpbml0aWFsaXphdGlvbkFjdGl2
aXR5ID0gV1RGTW92ZShpbml0aWFsaXphdGlvbkFjdGl2aXR5KV0gKGJvb2wpIHsgfSk7CiAgICAg
fSk7CiAKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAgV2ViUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwogCiAgICAgcGFyYW1ldGVycy5pbmplY3RlZEJ1bmRs
ZVBhdGggPSBtX3Jlc29sdmVkUGF0aHMuaW5qZWN0ZWRCdW5kbGVQYXRoOwpAQCAtMTE5OCw5ICs4
OTgsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdl
YlByb2Nlc3NQcm94eSogcHJvY2VzcykKICAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5p
Z25vcmVUaW1lb3V0c0ZvclRlc3RpbmcoKTsKIAogICAgIG1fY29ubmVjdGlvbkNsaWVudC5kaWRD
cmVhdGVDb25uZWN0aW9uKHRoaXMsIHByb2Nlc3MtPndlYkNvbm5lY3Rpb24oKSk7Ci0KLSAgICBp
ZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPmRpZENy
ZWF0ZU5ldHdvcmtQcm9jZXNzKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpc2Nvbm5l
Y3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKQEAgLTEyOTUsMTAgKzk5Miw3IEBA
IFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKFBhZ2VDbGll
bnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAgICAgaWYgKCFwYWdlQ29uZmlndXJhdGlvbi0+d2Vi
c2l0ZURhdGFTdG9yZSgpKSB7CiAgICAgICAgIC8vIFdlIHRyeSB0byBhdm9pZCBjcmVhdGluZyB0
aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxvbmcgYXMgcG9zc2libGUuCiAgICAgICAgIC8vIEJ1
dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRvIGNyZWF0ZSBhIHdlYiBwYWdlIHdpdGhvdXQgYW55
IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVuIHdlIGhhdmUgdG8gY3JlYXRlIGl0LgotICAgICAg
ICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9y
ZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwot
Ci0gICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKG1fd2Vic2l0
ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRl
RGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0
cigpKTsKICAgICB9CiAKICAgICBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBwcm9jZXNzOwpAQCAt
MTMyOSw3ICsxMDIzLDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0
ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSToKICNpZiBFTkFCTEUoU0VS
VklDRV9XT1JLRVIpCiAgICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcykgewogICAg
ICAgICBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA9IHBhZ2UtPnByZWZlcmVuY2VzU3RvcmUo
KTsKLSAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdv
cmtlclByb2Nlc3NlcykKKyAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6
IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzLnVwZGF0ZVNlcnZpY2VXb3JrZXJQcmVmZXJlbmNlc1N0b3JlKCptX3NlcnZpY2VXb3JrZXJQ
cmVmZXJlbmNlcyk7CiAgICAgfQogICAgIGlmICh1c2VyQ29udGVudENvbnRyb2xsZXIpCkBAIC0x
MzU2LDcgKzEwNTAsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2Vy
VXNlckFnZW50KGNvbnN0IFN0cmluZyYgdXNlckFnZW50KQogICAgIGlmIChtX3NlcnZpY2VXb3Jr
ZXJVc2VyQWdlbnQgPT0gdXNlckFnZW50KQogICAgICAgICByZXR1cm47CiAgICAgbV9zZXJ2aWNl
V29ya2VyVXNlckFnZW50ID0gdXNlckFnZW50OwotICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtl
clByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMpCisgICAgZm9yIChhdXRvJiBzZXJ2
aWNlV29ya2VyUHJvY2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgc2Vy
dmljZVdvcmtlclByb2Nlc3Muc2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChtX3NlcnZpY2VXb3Jr
ZXJVc2VyQWdlbnQpOwogfQogI2VuZGlmCkBAIC0xMzY1LDE1ICsxMDU5LDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlk
ZW50aWZpZXIgcGFnZUkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1fc2Vzc2lvblRvUGFnZUlEc01h
cC5hZGQoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBIYXNoU2V0PFdlYlBhZ2VQcm94eUlkZW50aWZp
ZXI+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQocGFnZUlEKTsKICAgICBBU1NFUlRfVU5VU0VEKHJl
c3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwotCi0gICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3Rv
cmUuc2Vzc2lvbklEKCk7Ci0gICAgaWYgKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIEFTU0VSVCghc2Vzc2lvbklELmlzRXBoZW1lcmFs
KCkgfHwgZGF0YVN0b3JlLnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vz
c2lvbklEID09IHNlc3Npb25JRCk7Ci0gICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0g
ICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoZGF0YVN0b3Jl
KSk7Ci0gICAgICAgICAgICBkYXRhU3RvcmUuY2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAg
ICB9Ci0gICAgfQogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdlRW5kVXNpbmdXZWJzaXRl
RGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBXZWJzaXRlRGF0YVN0b3Jl
JiBkYXRhU3RvcmUpCkBAIC0xNDAxLDcgKzEwODYsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpo
YXNQYWdlc1VzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUp
CiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9y
ZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCiB7CiAg
ICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBy
ZXF1ZXN0LCBpbml0aWF0aW5nUGFnZSwgeyB9KTsKLSAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7CiAKICAgICBPcHRpb25hbDxOYXZpZ2F0aW5nVG9B
cHBCb3VuZERvbWFpbj4gaXNBcHBCb3VuZCA9IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpO
bzsKICAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKQEAgLTE0MTEsMjYgKzEwOTUsMjMgQEAgRG93
bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRh
dGFTdG9yZSwgV2ViUGFnZVByb3gKICNlbmRpZgogICAgIH0KIAotICAgIGlmIChuZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0
KTsKLSAgICAgICAgLy8gUmVxdWVzdCdzIGZpcnN0UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNl
ZCBhcyBPcmlnaW5hbCBVUkwgb2YgdGhlIGRvd25sb2FkIHJlcXVlc3QuCi0gICAgICAgIC8vIFdl
IHNldCB0aGUgdmFsdWUgdG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJMLgotICAgICAgICBpZiAo
aW5pdGlhdGluZ1BhZ2UpIHsKLSAgICAgICAgICAgIFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVS
TCB7IFVSTCB7IH0sIGluaXRpYXRpbmdQYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKLSAg
ICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRp
bmdQYWdlVVJMKTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJl
UmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkp
KTsKLSAgICAgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhU
VFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQotICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0
LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2VudEZvclVSTChyZXF1ZXN0
LnVybCgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5z
ZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhVUkwoKSk7Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVz
dC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKLSAgICAgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3Qu
aGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQotICAgICAgICAg
ICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoV2ViUGFnZVByb3h5OjpzdGFu
ZGFyZFVzZXJBZ2VudCgpKTsKLSAgICAgICAgfQotICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJ
c1RvcFNpdGUoZmFsc2UpOwotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6RG93bmxvYWRSZXF1ZXN0KHNlc3Npb25JRCwgZG93bmxvYWRQcm94
eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0LCBpc0FwcEJvdW5kLCBzdWdnZXN0ZWRGaWxl
bmFtZSksIDApOwotICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKKyAgICBSZXNvdXJjZVJl
cXVlc3QgdXBkYXRlZFJlcXVlc3QocmVxdWVzdCk7CisgICAgLy8gUmVxdWVzdCdzIGZpcnN0UGFy
dHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwgb2YgdGhlIGRvd25sb2Fk
IHJlcXVlc3QuCisgICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3AgbGV2ZWwgZG9jdW1lbnQn
cyBVUkwuCisgICAgaWYgKGluaXRpYXRpbmdQYWdlKSB7CisgICAgICAgIFVSTCBpbml0aWF0aW5n
UGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGluaXRpYXRpbmdQYWdlLT5wYWdlTG9hZFN0YXRlKCku
dXJsKCkgfTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMo
aW5pdGlhdGluZ1BhZ2VVUkwpOworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRl
KGFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGluaXRpYXRpbmdQYWdlVVJMLCByZXF1ZXN0LnVy
bCgpKSk7CisgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhU
VFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQorICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0
SFRUUFVzZXJBZ2VudChpbml0aWF0aW5nUGFnZS0+dXNlckFnZW50Rm9yVVJMKHJlcXVlc3QudXJs
KCkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5
Rm9yQ29va2llcyhVUkwoKSk7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUo
ZmFsc2UpOworICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChI
VFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKKyAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNl
dEhUVFBVc2VyQWdlbnQoV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudCgpKTsKICAgICB9
CisgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZhbHNlKTsKKyAgICBkYXRhU3RvcmUu
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RG93bmxvYWRS
ZXF1ZXN0KGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCks
IHVwZGF0ZWRSZXF1ZXN0LCBpc0FwcEJvdW5kLCBzdWdnZXN0ZWRGaWxlbmFtZSksIDApOwogCiAg
ICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CkBAIC0xNDM4LDE3ICsxMTE5LDEyIEBAIERvd25s
b2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRh
U3RvcmUsIFdlYlBhZ2VQcm94CiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6cmVzdW1l
RG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveHkqIGluaXRp
YXRpbmdQYWdlLCBjb25zdCBBUEk6OkRhdGEmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0
aCkKIHsKICAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0gY3JlYXRlRG93bmxvYWRQcm94eShkYXRh
U3RvcmUsIFJlc291cmNlUmVxdWVzdCgpLCBpbml0aWF0aW5nUGFnZSwgeyB9KTsKLSAgICBQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7CiAKICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZTsKICAgICBpZiAoIXBh
dGguaXNFbXB0eSgpKQogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGF0
aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlKTsKIAotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9j
ZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChzZXNz
aW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVu
Y2UoKSwgcGF0aCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOwotICAgICAgICByZXR1cm4g
ZG93bmxvYWRQcm94eTsKLSAgICB9Ci0KKyAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoZGF0YVN0b3JlLnNl
c3Npb25JRCgpLCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVm
ZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKICAgICByZXR1cm4g
ZG93bmxvYWRQcm94eTsKIH0KIApAQCAtMTUxNywxMSArMTE5Myw2IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnJlZnJlc2hQbHVnaW5zKCkKIAogI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQogCi1Qcm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRp
ZmllcigpCi17Ci0gICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MgPyBtX25ldHdvcmtQcm9jZXNz
LT5wcm9jZXNzSWRlbnRpZmllcigpIDogMDsKLX0KLQogUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29s
OjpwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcigpCiB7CiAgICAgcmV0dXJuIG1fcHJld2FybWVk
UHJvY2VzcyA/IG1fcHJld2FybWVkUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7CkBA
IC0xNTU4LDE0ICsxMjI5LDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2No
ZW1lQXNTZWN1cmUoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFs
U2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1l
KTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVy
VVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVy
bFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3Jl
KFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0
YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJl
Z2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2Vj
dXJpdHlQb2xpY3koY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFs
U2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50
U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJp
dHlQb2xpY3kodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNl
Y3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hX
ZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUp
IHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQ
b2xpY3kodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiB1
cmxTY2hlbWUpCkBAIC0xNTc4LDE0ICsxMjUzLDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJl
Z2lzdGVyVVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBM
ZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2Fs
KHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFz
TG9jYWwodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVE
YXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAg
ICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSksIDApOworICAgIH0pOwog
fQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MoY29u
c3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpOwogICAgIHNlbmRU
b0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05v
QWNjZXNzKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSkp
OworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hl
bWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5l
dHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJM
U2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3BsYXlJc29sYXRlZChjb25zdCBTdHJp
bmcmIHVybFNjaGVtZSkKQEAgLTE2MDYsMTAgKzEyODUsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhj
b25zdAogICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVBy
b3RvY29sSGFuZGxlcnMoKS5hZGQodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQ
b29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3Jr
UHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUp
OwotICAgIH0KKyAgICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1By
b3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdp
c3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVBy
b3RvY29sSGFuZGxlcnMoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNjE4LDEwICsxMjk1
LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2
aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb24KICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2xv
YmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkucmVtb3ZlKHVybFNjaGVt
ZSk7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnVucmVnaXN0ZXJTY2hlbWVGb3JM
ZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwotICAgIH0KKyAgICBmb3IgKGF1dG8gbmV0
d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkp
CisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9t
UHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJV
UkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0x
NjU1LDE2ICsxMzMwLDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwoQ2Fj
aGVNb2RlbCBjYWNoZU1vZGVsKQogCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpKTsKIAotICAgIGlmIChtX25ldHdv
cmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAgV2Vic2l0ZURh
dGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW2NhY2hlTW9kZWxdIChXZWJzaXRlRGF0
YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCks
IDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsU3lu
Y2hyb25vdXNseUZvclRlc3RpbmcoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogewogICAgIHVwZGF0
ZUJhY2tGb3J3YXJkQ2FjaGVDYXBhY2l0eSgpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
Ci0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKGNhY2hlTW9kZWwpLCB7
IH0sIHsgfSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUo
W2NhY2hlTW9kZWxdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0
YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwg
MCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRSZXF1ZXN0
VGltZW91dEludGVydmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCkBAIC0xNjc0LDEyICsxMzUx
LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2
YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKIAogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bv
b2w6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdl
LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8pCiB7Ci0gICAgcmV0dXJuIGVuc3VyZU5l
dHdvcmtQcm9jZXNzKCZkYXRhU3RvcmUpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBy
ZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQotewotICAg
IGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3Jv
dW5kKTsKKyAgICByZXR1cm4gZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuY3JlYXRlRG93bmxv
YWRQcm94eShkYXRhU3RvcmUsICp0aGlzLCByZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5n
UGFnZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFkZE1lc3NhZ2VSZWNlaXZlcihJUEM6
OlJlY2VpdmVyTmFtZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6Ok1lc3NhZ2VSZWNlaXZlciYg
bWVzc2FnZVJlY2VpdmVyKQpAQCAtMTc1MCwzMCArMTQyMiw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnN0b3BNZW1vcnlTYW1wbGVyKCkKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6
OldlYlByb2Nlc3M6OlN0b3BNZW1vcnlTYW1wbGVyKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFN5bmNUb05ldHdvcmtp
bmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBVJiYgcmVwbHkpCi17Ci0gICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCBzdGQ6OmZv
cndhcmQ8VT4ocmVwbHkpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDYWNo
ZWRDcmVkZW50aWFscyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKQotewotICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9uSUQpLCAw
KTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQot
ewotICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7Ci0KLSAgICBpZiAoIW1fbmV0d29ya1By
b2Nlc3MpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX25ldHdvcmtQcm9jZXNzLT50ZXJt
aW5hdGUoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKLX0KLQogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6dGVybWluYXRlQWxsV2ViQ29udGVudFByb2Nlc3NlcygpCiB7CiAgICAgVmVj
dG9yPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXMgPSBtX3Byb2Nlc3NlczsKQEAg
LTE3ODEsNDAgKzE0MjksMTUgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlQWxsV2Vi
Q29udGVudFByb2Nlc3NlcygpCiAgICAgICAgIHByb2Nlc3MtPnRlcm1pbmF0ZSgpOwogfQogCi12
b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9y
VGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17
Ci0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIoKTsKLQotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcmVwYXJlVG9TdXNwZW5kKElz
U3VzcGVuc2lvbkltbWluZW50OjpObywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQot
Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHlGb3JUZXN0aW5nKCkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0
aW5nKCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJl
c3VtZSgpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCkKIHsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
CiAgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7Ci0gICAgd2hpbGUgKG1f
c2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb21wdXRlU2l6ZSgpKQotICAgICAgICBtX3NlcnZpY2VX
b3JrZXJQcm9jZXNzZXMuYmVnaW4oKS0+ZGlzYWJsZVNlcnZpY2VXb3JrZXJzKCk7CisgICAgd2hp
bGUgKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb21wdXRlU2l6ZSgpKQorICAgICAgICBzZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzKCkuYmVnaW4oKS0+ZGlzYWJsZVNlcnZpY2VXb3JrZXJzKCk7CiAj
ZW5kaWYKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Zmx1c2hDb29raWVzKGNvbnN0IFBBTDo6
U2Vzc2lvbklEJiBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKLXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmZsdXNoQ29va2llcyhz
ZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6dXBkYXRlQXV0b21hdGlvbkNhcGFiaWxpdGllcygpIGNvbnN0CiB7CiAjaWYgRU5B
QkxFKFJFTU9URV9JTlNQRUNUT1IpCkBAIC0yMDg5LDE1ICsxNzEyLDIxIEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnJlcG9ydFdlYkNvbnRlbnRDUFVUaW1lKFNlY29uZHMgY3B1VGltZSwgdWludDY0
X3QgYWN0aXZpdHlTCiAjZW5kaWYKIH0KIAorV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiYg
V2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKQoreworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXM7Cisg
ICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKwogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJv
Y2Vzc0Fzc2VydGlvbnMoKQogewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkudXBkYXRlUHJv
Y2Vzc0Fzc2VydGlvbigpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0
YVN0b3JlKFtdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0
b3JlLm5ldHdvcmtQcm9jZXNzKCkudXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOworICAgIH0pOwog
I2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICAvLyBDaGVjayBvbiBuZXh0IHJ1biBsb29w
IHNpbmNlIHRoZSB3ZWIgcHJvY2VzcyBwcm94eSB0b2tlbnMgYXJlIHByb2JhYmx5IGJlaW5nIHVw
ZGF0ZWQuCi0gICAgY2FsbE9uTWFpblJ1bkxvb3AoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIodGhpcyldIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtl
clByb2Nlc3NlcykKKyAgICBjYWxsT25NYWluUnVuTG9vcChbXSB7CisgICAgICAgIGZvciAoYXV0
byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAg
ICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzc0Fz
c2VydGlvbigpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMTA3LDcgKzE3MzYsNyBAQCBib29sIFdl
YlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmll
ciBwYWdlSUQpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGluZWZmaWNpZW50LgotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcywgW3BhZ2VJRF0oYXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBX
VEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW3BhZ2VJRF0oYXV0byYgcHJvY2Vz
cykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyUGFnZVByb3h5KHBh
Z2VJRCk7CiAgICAgfSk7CiAjZW5kaWYKQEAgLTIzMjksMTQgKzE5NTgsNiBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpjbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpCiB9CiAKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6
ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIHRvRG9tYWluLCBPcHRpb25TZXQ8Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFU
cmFuc2Zlcjo6RmxhZz4gbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgV2ViUGFnZVByb3h5SWRlbnRp
ZmllciB3ZWJQYWdlUHJveHlJRCwgUGFnZUlkZW50aWZpZXIgd2ViUGFnZUlEKQotewotICAgIGlm
ICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBm
cm9tRG9tYWluLCB0b0RvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5
SUQsIHdlYlBhZ2VJRCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpbnNXaXRo
VXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9t
YWlucykKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNl
dERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKGRvbWFpbnMpKTsKQEAgLTIzODcsMjcgKzIwMDgs
MjcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlQXVkaWJsZU1lZGlhQXNzZXJ0aW9ucygp
CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MoYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogewotICAgIGlmIChtX3Vz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzcykKKyAgICBpZiAoc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID09IHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdF
QlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcz0lZCki
LCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXRUJQUk9DRVNTUE9PTF9S
RUxFQVNFX0xPR19TVEFUSUMoU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3M6ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogCi0gICAgbV91c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzID0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsKLSAgICB0ZXJt
aW5hdGVTZXJ2aWNlV29ya2VycygpOwotICAgIHRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Cisg
ICAgc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzczsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bv
b2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+dGVybWluYXRlU2Vy
dmljZVdvcmtlcnMoKTsKIH0KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIGJvb2wgV2Vi
UHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5n
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nl
c3MuaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKTsKICAgICB9
KTsKIH0KIAogYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckJhY2tncm91bmRB
Y3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdAogewotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2Vy
dmljZVdvcmtlclByb2Nlc3NlcywgW10oYXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6
OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW10oYXV0byYgcHJvY2VzcykgewogICAg
ICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9y
VGVzdGluZygpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmgKaW5kZXggZDFmMWZlOTYxNTA2YTFlNWYxMzI1ZmE5OWE1NjA4Yjk1MGI2YWI3MS4uNmM4
MWI4NmIxM2U5MmM0NjFkYjI2ZDEyODRmMWZhOWZjM2JhNTY1ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCkBAIC04MSw3ICs4MSw2IEBAIE9CSkNfQ0xBU1MgV0tQ
cmVmZXJlbmNlT2JzZXJ2ZXI7CiAKIG5hbWVzcGFjZSBBUEkgewogY2xhc3MgQXV0b21hdGlvbkNs
aWVudDsKLWNsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKIGNsYXNzIERvd25sb2Fk
Q2xpZW50OwogY2xhc3MgSFRUUENvb2tpZVN0b3JlOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGVDbGll
bnQ7CkBAIC0xODAsNyArMTc5LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGlzdG9yeUNsaWVu
dChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4mJik7CiAg
ICAgdm9pZCBzZXREb3dubG9hZENsaWVudChVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4m
Jik7CiAgICAgdm9pZCBzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1
dG9tYXRpb25DbGllbnQ+JiYpOwotICAgIHZvaWQgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dD4mJik7CiAKICAgICB2b2lkIHNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRp
Zmllcihjb25zdCBTdHJpbmcmKTsKICAgICBjb25zdCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRlbnRT
ZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi0+Y3VzdG9t
V2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCk7IH0KQEAgLTE5MSwxNyArMTg5LDkg
QEAgcHVibGljOgogICAgIC8vIG51bGwgY2hlY2tzIGluIFdlYlBhZ2VQcm94eS4KICAgICBXZWJQ
cm9jZXNzUHJveHkqIGR1bW15UHJvY2Vzc1Byb3h5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkg
Y29uc3QgeyByZXR1cm4gbV9kdW1teVByb2Nlc3NQcm94aWVzLmdldChzZXNzaW9uSUQpLmdldCgp
OyB9CiAKLSAgICAvLyBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNzIGFzIGFwcHJvcG9yaWF0
ZSBmb3IgY3VycmVudCBwcm9jZXNzIG1vZGVsLiBUaGUgY29ubmVjdGlvbiBtdXN0IGJlIG5vbi1u
dWxsLgotICAgIElQQzo6Q29ubmVjdGlvbiogbmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCk7
Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlcyhjb25z
dCBUJiBtZXNzYWdlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0FsbFBy
b2Nlc3Nlc0ZvclNlc3Npb24oY29uc3QgVCYgbWVzc2FnZSwgUEFMOjpTZXNzaW9uSUQpOwogCi0g
ICAgLy8gU2VuZHMgdGhlIG1lc3NhZ2UgdG8gV2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2VzcyBh
cyBhcHByb3BvcmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlKTsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiB2b2lkIHNlbmRTeW5jVG9OZXR3b3Jr
aW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB2b2lkIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShU
JiYgbWVzc2FnZSk7Ci0KICAgICB2b2lkIHByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJv
Y2Vzc1Byb3h5Kik7CiAKICAgICBXZWJQcm9jZXNzQ2FjaGUmIHdlYlByb2Nlc3NDYWNoZSgpIHsg
cmV0dXJuIG1fd2ViUHJvY2Vzc0NhY2hlLmdldCgpOyB9CkBAIC0yMDksOSArMTk5LDYgQEAgcHVi
bGljOgogICAgIC8vIERpc2Nvbm5lY3QgdGhlIHByb2Nlc3MgZnJvbSB0aGUgY29udGV4dC4KICAg
ICB2b2lkIGRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSopOwogCi0gICAgV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlKiB3ZWJzaXRlRGF0YVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV93
ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRQcmltYXJ5RGF0YVN0b3JlKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7IG1fd2Vic2l0ZURhdGFTdG9yZSA9
ICZkYXRhU3RvcmU7IH0KLQogICAgIFJlZjxXZWJQYWdlUHJveHk+IGNyZWF0ZVdlYlBhZ2UoUGFn
ZUNsaWVudCYsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsKIAogICAgIHZvaWQgcGFn
ZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYnNp
dGVEYXRhU3RvcmUmKTsKQEAgLTI2MiwxMCArMjQ5LDggQEAgcHVibGljOgogICAgIHZvaWQgYWRk
U3VwcG9ydGVkUGx1Z2luKFN0cmluZyYmIG1hdGNoaW5nRG9tYWluLCBTdHJpbmcmJiBuYW1lLCBI
YXNoU2V0PFN0cmluZz4mJiBtaW1lVHlwZXMsIEhhc2hTZXQ8U3RyaW5nPiBleHRlbnNpb25zKTsK
ICAgICB2b2lkIGNsZWFyU3VwcG9ydGVkUGx1Z2lucygpOwogCi0gICAgUHJvY2Vzc0lEIG5ldHdv
cmtQcm9jZXNzSWRlbnRpZmllcigpOwogICAgIFByb2Nlc3NJRCBwcmV3YXJtZWRQcm9jZXNzSWRl
bnRpZmllcigpOwogICAgIHZvaWQgYWN0aXZlUGFnZXNPcmlnaW5zSW5XZWJQcm9jZXNzRm9yVGVz
dGluZyhQcm9jZXNzSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+
JiYpOwotICAgIGJvb2wgbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29u
c3QgU3RyaW5nJik7CiAKICAgICBXZWJQYWdlR3JvdXAmIGRlZmF1bHRQYWdlR3JvdXAoKSB7IHJl
dHVybiBtX2RlZmF1bHRQYWdlR3JvdXAuZ2V0KCk7IH0KIApAQCAtMzA3LDggKzI5Miw2IEBAIHB1
YmxpYzoKICAgICBBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50JiBoaXN0b3J5Q2xpZW50
KCkgeyByZXR1cm4gKm1faGlzdG9yeUNsaWVudDsgfQogICAgIFdlYkNvbnRleHRDbGllbnQmIGNs
aWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKLSAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgY29uc3QgeyByZXR1cm4g
Km1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OyB9Ci0KICAgICBzdHJ1Y3QgU3RhdGlzdGlj
cyB7CiAgICAgICAgIHVuc2lnbmVkIHdrVmlld0NvdW50OwogICAgICAgICB1bnNpZ25lZCB3a1Bh
Z2VDb3VudDsKQEAgLTMyNCwxMiArMzA3LDggQEAgcHVibGljOgogICAgIHZvaWQgc2VuZE5ldHdv
cmtQcm9jZXNzRGlkUmVzdW1lKCk7CiAgICAgdm9pZCB0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycygp
OwogCi0gICAgdm9pZCBmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCiAgICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dFdlYlBy
b2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhib29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHRX
ZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQogICAgIGJvb2wgc2hvdWxk
TWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBt
X3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nOyB9Ci0gICAgdm9p
ZCBzZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoYm9v
bCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZyA9IHZhbHVlOyB9Ci0gICAgYm9vbCBzaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1
bmNoRmFpbEZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE1ha2VOZXh0TmV0d29y
a1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZzsgfQogCiAgICAgdm9pZCByZXBvcnRXZWJDb250
ZW50Q1BVVGltZShTZWNvbmRzIGNwdVRpbWUsIHVpbnQ2NF90IGFjdGl2aXR5U3RhdGUpOwogCkBA
IC0zODgsMTkgKzM2NywxMyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIC8vIE5ldHdvcmsgUHJv
Y2VzcyBNYW5hZ2VtZW50Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgZW5zdXJlTmV0d29ya1By
b2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUgPSBudWxscHRyKTsK
LSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJu
IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCk7IH0KICAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hl
ZChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAKLSAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkmJik7Ci0KICAgICBib29sIGlzU2Vy
dmljZVdvcmtlclBhZ2VJRChXZWJQYWdlUHJveHlJZGVudGlmaWVyKSBjb25zdDsKICNpZiBFTkFC
TEUoU0VSVklDRV9XT1JLRVIpCi0gICAgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVj
dGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOworICAgIHN0YXRpYyB2b2lkIGVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9O
ZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4mJiwgUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAg
ICAgdm9pZCByZW1vdmVGcm9tU2VydmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkm
KTsKLSAgICBzaXplX3Qgc2VydmljZVdvcmtlclByb3hpZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb21wdXRlU2l6ZSgpOyB9Ci0gICAgdm9pZCBzZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoYm9vbCBhbGxvd3MpIHsgbV9h
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIgPSBhbGxvd3M7IH0KLSAgICBi
b29sIGFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOyB9CisgICAgc2l6
ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBzZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNpemUoKTsgfQogICAgIHZvaWQgdXBkYXRlU2VydmljZVdv
cmtlclVzZXJBZ2VudChjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCk7CiAgICAgY29uc3QgT3B0aW9u
YWw8VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllcj4mIHVzZXJDb250ZW50Q29udHJvbGxl
cklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlckNvbnRl
bnRDb250cm9sbGVySURGb3JTZXJ2aWNlV29ya2VyOyB9CiAgICAgYm9vbCBoYXNTZXJ2aWNlV29y
a2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpIGNvbnN0OwpAQCAtNDU5LDggKzQzMiw2
IEBAIHB1YmxpYzoKICAgICBib29sIGFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5OyB9CiAgICAgYm9v
bCBzaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaG91
bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uOyB9CiAKLSAgICB2b2lkIHN5bnRoZXNpemVBcHBJ
c0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKTsKLSAgICAKICNpZiBFTkFCTEUoR0FNRVBBRCkK
ICAgICB2b2lkIGdhbWVwYWRDb25uZWN0ZWQoY29uc3QgVUlHYW1lcGFkJiwgV2ViQ29yZTo6RXZl
bnRNYWtlc0dhbWVwYWRzVmlzaWJsZSk7CiAgICAgdm9pZCBnYW1lcGFkRGlzY29ubmVjdGVkKGNv
bnN0IFVJR2FtZXBhZCYpOwpAQCAtNDk4LDcgKzQ2OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNs
ZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCk7CiAKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIHZvaWQgZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhE
YXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluJiBmcm9tRG9tYWluLCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21h
aW4sIE9wdGlvblNldDxXZWJDb3JlOjpDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpG
bGFnPiwgV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIpOwog
ICAgIHZvaWQgc2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbj4mJik7CiAgICAgdm9pZCBzZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0ZvclRlc3RpbmcoY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIGZpcnN0UGFydHlE
b21haW4sIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiB0aGlyZFBhcnR5RG9tYWlu
LCBib29sIHNob3VsZFNjaGVkdWxlTm90aWZpY2F0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOwogICAgIHZvaWQgc2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRl
bHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKQEAgLTUyNSw4ICs0OTUsOCBAQCBwdWJs
aWM6CiAgICAgCiAgICAgUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXImIHBsdWdJbkF1dG9TdGFydFBy
b3ZpZGVyKCkgeyByZXR1cm4gbV9wbHVnSW5BdXRvU3RhcnRQcm92aWRlcjsgfQogCi0gICAgdm9p
ZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOwotICAgIGJvb2wgdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQorICAgIHN0YXRpYyB2b2lkIHNldFVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCk7CisgICAgc3RhdGljIGJvb2wgdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcygpIHsgcmV0dXJuIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzczsgfQogCiAjaWYgRU5BQkxFKENGUFJFRlNfRElSRUNUX01PREUpCiAgICAgdm9pZCBu
b3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQoY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBPcHRpb25hbDxTdHJpbmc+JiBlbmNvZGVkVmFsdWUpOwpAQCAtNTM4LDkg
KzUwOCwxNSBAQCBwdWJsaWM6CiAgICAgaW50MzJfdCB1c2VySWQoKSBjb25zdCB7IHJldHVybiBt
X3VzZXJJZDsgfQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBPU09iamVjdFB0
cjx4cGNfb2JqZWN0X3Q+IHhwY0VuZHBvaW50TWVzc2FnZSgpIGNvbnN0OwotICAgIHZvaWQgc2Vu
ZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8eHBjX29i
amVjdF90PiBlbmRwb2ludE1lc3NhZ2UpOworICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlh
bGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Cisg
ICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycygpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBzdGF0aWMgU3RyaW5nIGNv
b2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURp
cmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgp
OworICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0
YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CiAjZW5kaWYKIAogcHJp
dmF0ZToKQEAgLTU1Niw4ICs1MzIsNiBAQCBwcml2YXRlOgogICAgIFdlYlByb2Nlc3NQcm94eSYg
Y3JlYXRlTmV3V2ViUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJ
c1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKICAgICB2b2lk
IGluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYsIFdlYnNpdGVEYXRhU3Rv
cmUqLCBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1By
ZXdhcm1lZDo6Tm8pOwogCi0gICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vz
cyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwotCiAgICAgdm9pZCBoYW5kbGVN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0
IFVzZXJEYXRhJiBtZXNzYWdlQm9keSk7CiAgICAgdm9pZCBoYW5kbGVTeW5jaHJvbm91c01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNl
ckRhdGEmIG1lc3NhZ2VCb2R5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJEYXRhJiYpPiYm
KTsKIApAQCAtNTgxLDE0ICs1NTUsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB1c2VzU2luZ2xl
V2ViUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi0+dXNlc1NpbmdsZVdl
YlByb2Nlc3MoKTsgfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBzdGF0aWMgU3Ry
aW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1
bmRsZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVj
dG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOwot
ICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7Ci0jZW5kaWYK
LQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcmVnaXN0ZXJOb3RpZmljYXRpb25PYnNl
cnZlcnMoKTsKICAgICB2b2lkIHVucmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKQEAg
LTYzMCw5ICs1OTYsOCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdl
YWtQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4gbV9kdW1teVByb2Nlc3NQcm94aWVzOyAvLyBMaWdodHdl
aWdodCBXZWJQcm9jZXNzUHJveHkgb2JqZWN0cyB3aXRob3V0IGJhY2tpbmcgcHJvY2Vzcy4KIAog
I2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJv
eHk+IG1fc2VydmljZVdvcmtlclByb2Nlc3NlczsKKyAgICBzdGF0aWMgV2Vha0hhc2hTZXQ8V2Vi
UHJvY2Vzc1Byb3h5PiYgc2VydmljZVdvcmtlclByb2Nlc3NlcygpOwogICAgIGJvb2wgbV93YWl0
aW5nRm9yV29ya2VyQ29udGV4dFByb2Nlc3NDb25uZWN0aW9uIHsgZmFsc2UgfTsKLSAgICBib29s
IG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyIHsgZmFsc2UgfTsKICAg
ICBTdHJpbmcgbV9zZXJ2aWNlV29ya2VyVXNlckFnZW50OwogICAgIE9wdGlvbmFsPFdlYlByZWZl
cmVuY2VzU3RvcmU+IG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzOwogICAgIE9wdGlvbmFsPFVz
ZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXI+IG1fdXNlckNvbnRlbnRDb250cm9sbGVySURG
b3JTZXJ2aWNlV29ya2VyOwpAQCAtNjQ4LDcgKzYxMyw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1
bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4gbV9hdXRvbWF0aW9uQ2xpZW50OwogICAg
IFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PiBtX2Rvd25sb2FkQ2xpZW50OwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlD
bGllbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50PiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKIAogICAgIFJlZlB0cjxXZWJBdXRv
bWF0aW9uU2Vzc2lvbj4gbV9hdXRvbWF0aW9uU2Vzc2lvbjsKIApAQCAtNjgwLDggKzY0NCw2IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX21lbW9yeVNhbXBsZXJFbmFibGVkIHsgZmFsc2UgfTsKICAg
ICBkb3VibGUgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWwgeyAxNDAwLjAgfTsKIAotICAgIFJlZlB0
cjxXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU+IG1fd2Vic2l0ZURhdGFTdG9yZTsKLQogICAgIHR5
cGVkZWYgSGFzaE1hcDxjb25zdCBjaGFyKiwgUmVmUHRyPFdlYkNvbnRleHRTdXBwbGVtZW50Piwg
UHRySGFzaDxjb25zdCBjaGFyKj4+IFdlYkNvbnRleHRTdXBwbGVtZW50TWFwOwogICAgIFdlYkNv
bnRleHRTdXBwbGVtZW50TWFwIG1fc3VwcGxlbWVudHM7CiAKQEAgLTcxNCw4ICs2NzYsNiBAQCBw
cml2YXRlOgogCiAgICAgYm9vbCBtX3Byb2Nlc3NUZXJtaW5hdGlvbkVuYWJsZWQgeyB0cnVlIH07
CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJv
Y2VzczsKLQogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+
PiBtX2RpY3Rpb25hcnlDYWxsYmFja3M7CiAKICNpZiBVU0UoU09VUCkKQEAgLTcyOCw3ICs2ODgs
NiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHk7
CiAgICAgYm9vbCBtX3Nob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb247CiAgICAgYm9vbCBt
X3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nIHsgZmFsc2UgfTsK
LSAgICBib29sIG1fc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nIHsgZmFsc2UgfTsKICAgICBib29sIG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQgeyBmYWxzZSB9
OwogCiAgICAgVXNlck9ic2VydmFibGVQYWdlQ291bnRlciBtX3VzZXJPYnNlcnZhYmxlUGFnZUNv
dW50ZXI7CkBAIC04MjAsMzEgKzc3OSwxMyBAQCBwcml2YXRlOgogI2Vsc2UKICAgICBib29sIG1f
aXNEZWxheWVkV2ViUHJvY2Vzc0xhdW5jaERpc2FibGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAg
IGJvb2wgbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzIHsgZmFsc2UgfTsKKyAgICBz
dGF0aWMgYm9vbCBzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7CiAKICNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4+IG1fZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb247CiAjZW5kaWYKLQotI2lm
IFBMQVRGT1JNKENPQ09BKQotICAgIE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4gbV9lbmRwb2lu
dE1lc3NhZ2U7Ci0jZW5kaWYKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSkKLXsKLSAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgp
KQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdl
KSwgMCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2Up
Ci17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9BbGxQcm9jZXNzZXMoY29uc3QgVCYgbWVz
c2FnZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCmlu
ZGV4IGQ2NjEwMzM4YjZjZjYwYTI3YTZmNzVkYWVjMzQ5YThmNzJhYjNiODUuLjVlMmM3MDhmMjJm
OTdiZWFmMzcwOTM1MmNiNjllM2Q0YzI4ZTFkOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtMjY4LDYgKzI2OCw5IEBAIHZvaWQgV2ViUHJvY2Vz
c1Byb3h5OjpzZXRXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkK
IHsKICAgICBBU1NFUlQoIW1fd2Vic2l0ZURhdGFTdG9yZSk7CiAgICAgbV93ZWJzaXRlRGF0YVN0
b3JlID0gJmRhdGFTdG9yZTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBkYXRhU3RvcmUuc2Vu
ZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoKnRoaXMpOworI2VuZGlmCiAg
ICAgdXBkYXRlUmVnaXN0cmF0aW9uV2l0aERhdGFTdG9yZSgpOwogICAgIHNlbmQoTWVzc2FnZXM6
OldlYlByb2Nlc3M6OlNldFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzKHByb2Nlc3NQb29sKCku
d2ViUHJvY2Vzc0RhdGFTdG9yZVBhcmFtZXRlcnMoKnRoaXMsIGRhdGFTdG9yZSkpLCAwKTsKIH0K
QEAgLTczOCw3ICs3NDEsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6Z2V0UGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb24odWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuLCBNZQogCiB2b2lkIFdlYlBy
b2Nlc3NQcm94eTo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVw
bHkpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp0
aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLmdldE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOwogfQogCiAjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQpAQCAtOTU1LDkgKzk1OCw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpk
aWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBDOjpDb25uZWN0
CiAgICAgfQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgYXV0byBlbmRwb2ludE1lc3NhZ2Ug
PSBwcm9jZXNzUG9vbCgpLnhwY0VuZHBvaW50TWVzc2FnZSgpOwotICAgIGlmIChlbmRwb2ludE1l
c3NhZ2UpCi0gICAgICAgIHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2FnZShjb25uZWN0aW9uKCkt
PnhwY0Nvbm5lY3Rpb24oKSwgZW5kcG9pbnRNZXNzYWdlLmdldCgpKTsKKyAgICBpZiAobV93ZWJz
aXRlRGF0YVN0b3JlKQorICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJv
Y2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKCp0aGlzKTsKICNlbmRpZgogCiAgICAgUkVMRUFT
RV9BU1NFUlQoIW1fd2ViQ29ubmVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29j
b2EubW0KaW5kZXggN2M0NDA4NTE2NzczNjhiNWRmODlhODZmZjRkM2I1MTUzNGI5MGJiNy4uY2I4
YjNiYWE0YWQwYjU2ODE1NTE1YzA1ZTE4MTM2YjMyNGYzYTJmZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNp
dGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAtMjgsMTAgKzI4LDEyIEBACiAKICNpbXBvcnQgIkNvb2tp
ZVN0b3JhZ2VVdGlsc0NGLmgiCiAjaW1wb3J0ICJEZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5oIgor
I2ltcG9ydCAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2ltcG9ydCAiU2FuZGJveFV0aWxpdGll
cy5oIgogI2ltcG9ydCAiU3RvcmFnZU1hbmFnZXIuaCIKICNpbXBvcnQgIldlYkZyYW1lUG9saWN5
TGlzdGVuZXJQcm94eS5oIgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNLZXlzLmgiCisjaW1wb3J0
ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oIgogI2ltcG9ydCAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKICNpbXBvcnQg
PFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CkBAIC00NCw2ICs0Niw3IEBACiAjaW1w
b3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdl
Lmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvRW50aXRsZW1lbnRz
Lmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQpAQCAtNTYyLDQgKzU2NSwyOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
aW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlucygpCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJzaXRlRGF0
YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJp
bmcmIGVudGl0bGVtZW50KQoreworICAgIHJldHVybiBXVEY6Omhhc0VudGl0bGVtZW50KG5ldHdv
cmtQcm9jZXNzKCkuY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVudGl0bGVtZW50LnV0
ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJv
Y2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKK3sK
KyAgICBpZiAocHJvY2Vzcy5zdGF0ZSgpICE9IEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6U3RhdGU6
OlJ1bm5pbmcpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBjb25uZWN0aW9uID0gcHJvY2Vz
cy5jb25uZWN0aW9uKCk7CisgICAgaWYgKCFjb25uZWN0aW9uKQorICAgICAgICByZXR1cm47Cisg
ICAgYXV0byBtZXNzYWdlID0gbmV0d29ya1Byb2Nlc3MoKS54cGNFbmRwb2ludE1lc3NhZ2UoKTsK
KyAgICBpZiAoIW1lc3NhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICB4cGNfY29ubmVjdGlvbl9z
ZW5kX21lc3NhZ2UoY29ubmVjdGlvbi0+eHBjQ29ubmVjdGlvbigpLCBtZXNzYWdlKTsKK30KKwor
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvQWxs
V2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykK
KyAgICAgICAgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MocHJvY2Vz
cyk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggMDgzMGNhNzVhN2ZjMzhlNjQ1Yjc3NWIz
OWIzMzc1ZDRjMjA1MDM3ZC4uN2M0MWM3YTJmYzI2ZjA5NDRhYzc0YmY4OGMxZjc4ZDdiYzliMmNm
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEv
V2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTMyLDExICszMiwxNCBAQAogI2luY2x1ZGUgIkF1dGhl
bnRpY2F0b3JNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCIK
ICNpbmNsdWRlICJHUFVQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiTW9ja0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uSW5mby5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJTdG9y
YWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRDYWNoZS5oIgorI2lu
Y2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYktpdDJJbml0aWFs
aXplLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0Nh
Y2hlLmgiCkBAIC03NSw2ICs3OCwxMCBAQAogI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlvbkNvb3Jk
aW5hdG9yLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkRlZmF1
bHRXZWJCcm93c2VyQ2hlY2tzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0
YXRpYyBib29sIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnM7CkBAIC04Mywx
MyArOTAsMTkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1dlYnNpdGVEYXRhUmVjb3Jk
c0ZvckFsbE9yaWdpbnMoKQogICAgIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdp
bnMgPSB0cnVlOwogfQogCi1zdGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURh
dGFTdG9yZSo+JiBub25EZWZhdWx0RGF0YVN0b3JlcygpCitzdGF0aWMgSGFzaE1hcDxQQUw6OlNl
c3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBhbGxEYXRhU3RvcmVzKCkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNo
TWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4+IG1hcDsKICAgICByZXR1cm4g
bWFwOwogfQogCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3Jl
KEZ1bmN0aW9uPHZvaWQoV2Vic2l0ZURhdGFTdG9yZSYpPiYmIGZ1bmN0aW9uKQoreworICAgIGZv
ciAoYXV0byogZGF0YVN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgICAgICBm
dW5jdGlvbigqZGF0YVN0b3JlKTsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVE
YXRhU3RvcmU6OmNyZWF0ZU5vblBlcnNpc3RlbnQoKQogewogICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb246OmNyZWF0
ZShJc1BlcnNpc3RlbnQ6Ok5vKSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlRXBoZW1lcmFsU2Vz
c2lvbklEKCkpKTsKQEAgLTExNSw3ICsxMjgsNyBAQCBXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRl
RGF0YVN0b3JlKFJlZjxXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbj4mJiBjb25maWd1cgog
I2VuZGlmCiB7CiAgICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkp
OwotICAgIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVnaXN0ZXJXaXRo
U2Vzc2lvbklETWFwKCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMTI4LDE3ICsxNDEsMTIgQEAgV2Vic2l0ZURhdGFTdG9y
ZTo6fldlYnNpdGVEYXRhU3RvcmUoKQogCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBp
ZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewot
ICAgICAgICBBU1NFUlQobm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09
IHRoaXMpOwotICAgICAgICBub25EZWZhdWx0RGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25J
RCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxs
UHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQotICAgIH0KKyAg
ICBBU1NFUlQoYWxsRGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7CisgICAg
YWxsRGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5yZW1vdmVTZXNzaW9uKCp0aGlzKTsKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0gICAgICAg
IGlmIChhdXRvKiBncHVQcm9jZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklm
Q3JlYXRlZCgpKQotICAgICAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1f
c2Vzc2lvbklEKTsKKyAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkKKyAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1v
dmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKICNlbmRpZgogfQogCkBAIC0xNjksMTcgKzE3NywzNSBA
QCBib29sIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKQogICAgIHJl
dHVybiAhIWdsb2JhbERlZmF1bHREYXRhU3RvcmUoKTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpCit2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpCiB7Ci0gICAgaWYgKG1fc2Vzc2lvbklEICE9
IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgYXV0byByZXN1
bHQgPSBub25EZWZhdWx0RGF0YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7Ci0gICAg
ICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0byBy
ZXN1bHQgPSBhbGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAgICBBU1NF
UlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworfQorCitXZWJzaXRlRGF0YVN0
b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgcmV0dXJuIGFsbERhdGFTdG9yZXMoKS5nZXQo
c2Vzc2lvbklEKTsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6
bmV0d29ya1Byb2Nlc3MoKQoreworICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykgeworI2lmIFBM
QVRGT1JNKENPQ09BKQorICAgICAgICBpZiAobV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBt
X3Nlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQorICAgICAg
ICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHROZXR3
b3JrUHJvY2VzcygpOworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGUoKTsKKyAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigqdGhpcyk7CiAgICAgfQorCisgICAgcmV0dXJuICptX25l
dHdvcmtQcm9jZXNzOwogfQogCi1XZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpl
eGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQorTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1By
b2Nlc3MoKSBjb25zdAogewotICAgIHJldHVybiBzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSA/IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25J
RCkgOiBudWxscHRyOworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYnNpdGVEYXRhU3RvcmUmPigq
dGhpcykubmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWdp
c3RlclByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQpAQCAtMTk1LDEyICsyMjEsNiBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVucmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94
eSYgcHJvY2VzcykKICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CiB9CiAKLVdlYlBy
b2Nlc3NQb29sKiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VP
cGVyYXRpb25zKCkKLXsKLSAgICBhdXRvIHBvb2xzID0gcHJvY2Vzc1Bvb2xzKDEpOwotICAgIHJl
dHVybiBwb29scy5pc0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVnaW4oKS0+Z2V0KCk7Ci19
Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3Nhcnko
KQogewogICAgIGlmIChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBAIC00NDAsMjggKzQ2MCwy
MSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogI2VuZGlmCiAKICAgICBhdXRvIG5ldHdvcmtQ
cm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRh
RmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwotICAgIGlmIChuZXR3b3JrUHJvY2Vz
c0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsKLSAgICAgICAgYXV0byBw
b29scyA9IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1
bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNzUG9vbHMoKTsKLSAgICAgICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5ldHdv
cmtQcm9jZXNzQWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlw
ZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5j
aDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhp
cyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0Fj
Y2Vzc1R5cGU6Ok5vbmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICB9Ci0KKyAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewor
ICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKKyAgICAgICAgbmV0d29ya1Byb2Nl
c3MoKTsKKyAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOworICAgICAgICBGQUxMVEhS
T1VHSDsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKKyAgICAg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRv
ci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKS0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBmZXRj
aE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXShXZWJzaXRlRGF0YSB3
ZWJzaXRlRGF0YSkgeworICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZmV0Y2hXZWJzaXRl
RGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CiAgICAgICAgICAgICAgICAgY2FsbGJh
Y2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soV1RGTW92ZSh3ZWJzaXRlRGF0YSkp
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
cm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgYXV0
byB3ZWJQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVXZWJQcm9jZXNzQWNjZXNzVHlwZUZvckRh
dGFGZXRjaChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CkBAIC03MjQsMzEgKzczNywyNCBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogICAgIGJvb2wgZGlkTm90aWZ5TmV0d29ya1Byb2Nl
c3NUb0RlbGV0ZVdlYnNpdGVEYXRhID0gZmFsc2U7CiAjZW5kaWYKICAgICBhdXRvIG5ldHdvcmtQ
cm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRh
UmVtb3ZhbChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7Ci0gICAgaWYgKG5ldHdvcmtQcm9j
ZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkgewotICAgICAgICBhdXRv
IHBvb2xzID0gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09IFByb2Nlc3NBY2Nlc3NUeXBlOjpM
YXVuY2ggPyBlbnN1cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nlc3NQb29scygpOwotICAgICAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobmV0
d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NU
eXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1
bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0
aGlzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBQcm9jZXNz
QWNjZXNzVHlwZTo6Tm9uZToKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIH0KLQorICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7
CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgorICAgICAgICBuZXR3b3JrUHJv
Y2VzcygpOworICAgICAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7CisgICAgICAgIEZBTExU
SFJPVUdIOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgorICAg
ICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdh
dG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBt
b2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAgICAg
ICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRh
dGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewogICAgICAgICAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CiAgICAg
ICAgICAgICB9KTsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgICAg
ICAgICAgZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhID0gdHJ1ZTsK
ICNlbmRpZgogICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vz
c1R5cGU6Ok5vbmU6CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGF1dG8gd2ViUHJvY2Vz
c0FjY2Vzc1R5cGUgPSBjb21wdXRlV2ViUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVtb3ZhbChk
YXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CkBAIC04OTMsMTQgKzg5OSw5IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRh
VHlwZXMsIFdhbGxUaW1lCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAg
ICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljcykpIHsKICAgICAgICAgaWYgKCFkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRl
V2Vic2l0ZURhdGEpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgcHJv
Y2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRT
aW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAg
bmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVz
LCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKKyAgICAgICAgICAg
IH0pOwogICAgICAgICB9CiAKICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5n
Q2FsbGJhY2soKTsKQEAgLTk5NCwxMiArOTk1LDEwIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZl
CiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAgICAg
c3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJv
Y2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nl
c3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKHRoaXMpOworICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6
Ok5vbmU6CkBAIC0xMDIxLDcgKzEwMjAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92
ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdD
YWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmRl
bGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBvcmlnaW5z
LCBjb29raWVIb3N0TmFtZXMsIEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0cmFibGVEb21haW5z
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRhdGFU
eXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJlZ2lz
dHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAg
ICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwog
ICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTExODAsMTggKzExNzksMTIgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRh
dGFUeXBlcywgY29uc3QgVmUKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29y
a2VyVGltZW91dEZvclRlc3RpbmcoU2Vjb25kcyBzZWNvbmRzKQogewotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhzZWNvbmRz
KSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0
Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1l
b3V0Rm9yVGVzdGluZyhzZWNvbmRzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2
aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoKQog
ewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5
bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVv
dXRGb3JUZXN0aW5nKCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29y
a2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZp
Y2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7
CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMTIwMSw4ICsx
MTk0LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhz
aXplX3QgbWF4aW11bUVudHJ5Q291bnQsIENvbXBsZXQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRNYXhTdGF0aXN0
aWNzRW50cmllcyhtX3Nlc3Npb25JRCwgbWF4aW11bUVudHJ5Q291bnQsIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4U3Rh
dGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50
cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTIxMSw4ICsxMjAzLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291
bnQsIENvbXBsZXRpb24KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vz
c1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1fc2Vz
c2lvbklELCBwcnVuZVRhcmdldENvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rvd25UbyhtX3Nl
c3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBz
ZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xMjIxLDggKzEyMTIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVy
aW5nVGltZShTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPAogCiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNl
dEdyYW5kZmF0aGVyaW5nVGltZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZh
dGhlcmluZ1RpbWUobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0
YVJlY29yZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTIzMSwyMCArMTIyMSwxMyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNv
bmRzIHNlY29uZHMsCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2VlbkRh
dGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KICAgICAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
ICAgIHByb2Nlc3MtPmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1f
c2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sIGlzUHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTEyNTYsMTIgKzEyMzksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVz
b3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuaXNQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBVUkwm
IHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzUHJldmFsZW50KT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTEyNzMsMTIgKzEyNTEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmlzR3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
bwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzR3JhbmRmYXRo
ZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTI5Miw4ICsxMjY1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm8KICAg
ICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2Uo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzMDcsMTAgKzEyNzksNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVS
TCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNWZXJ5UHJldmFsZW50KT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTEzMjIsMTIgKzEyOTEsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9u
SGFuZGxlcgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5p
c1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1ZlcnlQcmV2
YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM0MSwxMCArMTMwNSw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFZlcnlQcmV2YWxl
bnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2V0VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2Vz
QmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzNTMsOCArMTMxNCw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jk
c1JlbW92YWwoYm9vbCB2CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nl
c3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2Vz
QmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91
bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwg
dmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3ViRnJhbWVV
UkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTEzNjgsMjIgKzEzMjgsMTQgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJGcmFt
ZVVSTCwgY28KIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJv
Y2Vzcy0+c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZy
YW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1Jl
Z2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3QgVVJM
JiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHBy
b2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNS
ZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9w
RnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwm
IHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzk3LDIzICsxMzQ5LDE0IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNv
bnN0IFVSTCYgc3VicmVzb3VyY2VVCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0
IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNT
dWJyZXNvdXJjZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVV
UkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVj
dGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTE0MjcsMTAgKzEzNzAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLAogCiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
c3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVj
dGVkVG8gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJM
JiB1cmxSZWRpcmVjdGVkRnJvbSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTQ0MiwxMiArMTM4Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVS
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRp
cmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRv
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDU5
LDEyICsxMzk0LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0VG8oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVS
TCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3Qg
VVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTQ3NiwyNSArMTQwNiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkws
IGNvbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhj
b25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1Jl
Z2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZh
bHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJv
bSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xl
YXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTUwNiw2MCArMTQyNSw0MSBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFyUHJldmFsZW50UmVzb3VyY2Uo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmNsZWFyUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIHByb2Nlc3MtPnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Npb25J
RCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkucmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklE
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c3VibWl0VGVsZW1ldHJ5KCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25J
RCwgW10geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50KFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIFNob3VsZEdyYW5kZmF0
aGVyU3RhdGlzdGljcyBzaG91bGRHcmFuZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAgICAgCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNj
aGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVkU2lu
Y2UsIHNob3VsZEdyYW5kZmF0aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlB
bmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhl
ciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlE
YXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogCi0gICAgc3RydWN0IENhbGxiYWNrQWdncmVnYXRvciA6IFJlZkNvdW50ZWQ8Q2Fs
bGJhY2tBZ2dyZWdhdG9yPiB7Ci0gICAgICAgIENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJk
UGFydHlEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICBzdHJ1Y3QgTG9jYWxDYWxs
YmFja0FnZ3JlZ2F0b3IgOiBSZWZDb3VudGVkPExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yPiB7Cisg
ICAgICAgIExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVj
dG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICAgICAgOiBtX2NvbXBsZXRpb25IYW5kbGVyKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgICAgICB9OwogCi0gICAgICAgIH5DYWxsYmFja0FnZ3Jl
Z2F0b3IoKQorICAgICAgICB+TG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IoKQogICAgICAgICB7CiAg
ICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC0xNTc0LDM4ICsxNDc0
LDMxIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFTdW1tYXJ5KENvbXBsZXRpb25IYW5kbGVyPHZvCiAgICAgICAgIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURh
dGE+JiYpPiBtX2NvbXBsZXRpb25IYW5kbGVyOwogICAgICAgICBWZWN0b3I8V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4gbV9yZXN1bHRzOwogICAgIH07Ci0K
LSAgICBSZWZQdHI8Q2FsbGJhY2tBZ2dyZWdhdG9yPiBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBhZG9w
dFJlZihuZXcgQ2FsbGJhY2tBZ2dyZWdhdG9yKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7
Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVk
aWF0ZWx5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHByb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVO
ZXR3b3JrUHJvY2Vzcyh0aGlzKS5nZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnko
bV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXShWZWN0b3I8V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7Ci0g
ICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRSZXN1bHQoV1RGTW92ZShkYXRh
KSk7Ci0gICAgICAgICAgICB9KTsKKyAgICAKKyAgICBhdXRvIGxvY2FsQ2FsbGJhY2tBZ2dyZWdh
dG9yID0gYWRvcHRSZWYobmV3IExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKSk7CisgICAgCisgICAgYXV0byB3dGZDYWxsYmFja0FnZ3JlZ2F0b3IgPSBX
VEY6OkNhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIGxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgIG5ldHdvcmtQ
cm9jZXNzKCkuZ2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklE
LCBbbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3JdKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmIGRhdGEpIHsKKyAgICAgICAgICAgIGxvY2FsQ2Fs
bGJhY2tBZ2dyZWdhdG9yLT5hZGRSZXN1bHQoV1RGTW92ZShkYXRhKSk7CiAgICAgICAgIH0pOwot
ICAgIH0KKyAgICB9KTsKKyAgICAKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJv
Y2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoW3d0ZkNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyBzaG91bGRHcmFuZGZh
dGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNp
c3RlbnQobV9zZXNzaW9uSUQsIHsgfSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNj
aGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIHsgfSwgc2hvdWxk
R3JhbmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZSht
X3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShtX3Nl
c3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTYxNCwyNCArMTUw
NywxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFS
ZWNvcmRzUHJvY2Vzc2luZyhDb21wbGV0aW9uSGFuZAogICAgIAogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0
YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZVN0YXRp
c3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3RhdGlzdGljc0RhdGFi
YXNlSGFzQWxsVGFibGVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBw
cm9jZXNzLT5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RT
ZWVuKGNvbnN0IFVSTCYgdXJsLCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2NDMsMjIgKzE1MjUsMTQgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNv
bmRzLCBDb21wbGV0aW9uSGEKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBwcm9jZXNzLT5zZXRMYXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TGFzdFNlZW4obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZG9tYWluSURF
eGlzdHNJbkRhdGFiYXNlKGludCBkb21haW5JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgICAgIHByb2Nlc3MtPmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25J
RCwgZG9tYWluSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZG9tYWluSURFeGlz
dHNJbkRhdGFiYXNlKG1fc2Vzc2lvbklELCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVz
dGluZyhjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDEsIGNvbnN0IFVSTCYg
dG9wRnJhbWVVcmwyLCBTZWNvbmRzIGxhc3RTZWVuLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwg
U2Vjb25kcyBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBib29sIGlzR3JhbmRmYXRoZXJlZCwg
Ym9vbCBpc1ByZXZhbGVudCwgYm9vbCBpc1ZlcnlQcmV2YWxlbnQsIHVuc2lnbmVkIGRhdGFSZWNv
cmRzUmVtb3ZlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTY3MCwxMCArMTU0NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0
aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHRvcEZyCiAKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+bWVyZ2VTdGF0aXN0aWNG
b3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlckludGVy
YWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJl
dmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJs
MSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2Vl
biwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5k
ZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3Zl
ZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBo
YWRVc2VySW50ZXJhY3Rpb24sIGJvb2wgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbCwgYm9vbCBpc1ByZXZhbGVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTY4NSwxOCArMTU1NiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29s
IGhhZAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmlu
c2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9y
QWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGlzUHJldmFsZW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pbnNlcnRF
eHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1
dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vz
c1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Tm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcwNCw4ICsxNTcxLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChib29s
IHZhbHVlLCBDb21wbGUKICAgICB1c2VFeHBsaWNpdElUUFN0YXRlKCk7CiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5z
ZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUs
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9uSUQs
IHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIg
cGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucyk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzE2LDcgKzE1ODIsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZp
ZXIgcGFnZUlELAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgd2ViUGFnZS0+cHJvY2Vz
cygpLnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5nZXRBbGxTdG9yYWdlQWNj
ZXNzRW50cmllcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogCkBAIC0xNzI0LDggKzE1OTAsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vj
b25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0VGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24o
bV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzM5LDEw
ICsxNjA0LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQKICAgICAKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+bG9nVXNlckludGVyYWN0aW9uKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmxvZ1VzZXJJbnRlcmFj
dGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNI
YWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzU0LDEzICsxNjE2LDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAg
cHJvY2Vzcy0+aGFzSGFkVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIo
ZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzSGFkVXNlckludGVyYWN0aW9uKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNo
aXBPbmx5SW5EYXRhYmFzZU9uY2UoY29uc3QgVVJMJiBzdWJVcmwsIGNvbnN0IFVSTCYgdG9wVXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTc3MiwxMyArMTYyOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNoaXBP
bmx5SW5EYXRhYmFzZU9uY2UoY29uc3QgVVJMJiBzdWJVcmwsIGNvbnN0CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVsYXRpb25zaGlwT25seUluRGF0
YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVy
bCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWxh
dGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wVXJs
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc5MiwxMCArMTY0Miw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVy
ZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODA5LDEwICsxNjU2LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29s
IGlzR3JhbmRmYXRoZXJlZCwgQ28KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPnNldEdyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZh
dGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBp
c0dyYW5kZmF0aGVyZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgyMSwxMCArMTY2NSw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRVc2VJVFBEYXRhYmFzZShtX3Nlc3Npb25JRCwg
dmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxv
YWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZnJvbVVSTCwgY29uc3Qg
VVJMJiB0b1VSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTgzMyw2MiArMTY3NCwzOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3Nz
U2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZgogICAgIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0Q3Jv
c3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHRvVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29y
YXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jv
c3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDcm9zc1NpdGVM
b2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDcm9zc1Np
dGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGVsZXRlQ29v
a2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaW5jbHVkZUh0dHBPbmx5Q29va2ll
cywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5kZWxldGVDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVDb29raWVz
Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0xvY2FsU3Rv
cmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmhhc0xvY2FsU3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0
CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzSXNvbGF0ZWRTZXNzaW9uKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFz
SXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVy
Rm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JU
ZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJs
ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0Ep
CkBAIC0xOTE5LDEwICsxNzM2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBh
cnR5Q29va2llQmxvY2tpbmdNb2RlKFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWUKICAgICAgICAg
ICAgIHdlYlByb2Nlc3Muc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShibG9ja2luZ01v
ZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQs
IGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lvbklE
LCBibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNp
dGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTMwLDEwICsxNzQ0LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5i
bGVTYW1lU2l0ZVN0cmljdEVuZm9yY2UKICAgICBhdXRvIGZsYWcgPSBlbmFibGVkID8gV2ViQ29y
ZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6OlllcyA6IFdlYkNvcmU6OlNhbWVT
aXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRTaG91bGRFbmJsZVNhbWVT
aXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3Vs
ZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZs
YWcsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlRm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NDEsMjAgKzE3NTIsMTQgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVt
b3ZhbE1vZGUKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBhdXRvIG1vZGUgPSBl
bmFibGVkID8gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1
dENvb2tpZXMgOiBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6Tm9u
ZTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRGaXJzdFBhcnR5V2Vic2l0ZURh
dGFSZW1vdmFsTW9kZUZvclRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eVdl
YnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9TYW1lU2l0ZVN0cmljdENv
b2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWlu
Rm9yVGVzdGluZyhjb25zdCBVUkwmIGZpcnN0UGFydHlVUkwsIGNvbnN0IFVSTCYgY25hbWVVUkws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NjYs
OCArMTc3MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0ZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0CiAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQ
YXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZpcnN0UGFydHlVUkwu
aG9zdCgpLnRvU3RyaW5nKCksIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEZp
cnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJzdFBhcnR5
VVJMLmhvc3QoKS50b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1l
VVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRl
c3RpbmcoY29uc3QgVVJMJiBjbmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTk3OSwxOCArMTc4MywxMyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JU
ZXN0aW5nKAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlD
TkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRpZiAv
LyBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnN5bmNMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTeW5jTG9jYWxTdG9yYWdlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2
YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTk4LDggKzE3OTcsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMg
c2Vjb25kcywgQwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwg
c2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNv
bmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
c2Vjb25kcyk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTIwMDksMjYgKzE4MDcsMTIg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJl
c291cmNlcyhTZWNvbmRzIHNlY29uZHMsIEMKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRD
YWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNl
cyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5yZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1f
c2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAjZWxzZQogICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CiAjZW5kaWYKIH0KIAotYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjppc0Fz
c29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpIGNvbnN0Ci17
Ci0gICAgaWYgKGF1dG8qIHByb2Nlc3NQb29sRGF0YVN0b3JlID0gcHJvY2Vzc1Bvb2wud2Vic2l0
ZURhdGFTdG9yZSgpKQotICAgICAgICByZXR1cm4gcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPT0gdGhp
czsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb2Nlc3NQb29sLm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgIHJldHVybiBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5oYXNTZXNz
aW9uKG1fc2Vzc2lvbklEKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIEhhc2hTZXQ8UmVmUHRy
PFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBs
aW1pdCkgY29uc3QKIHsKICAgICBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IHByb2Nl
c3NQb29sczsKQEAgLTIwNDMsOSArMTgyNyw2IEBAIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQ
b29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uCiAg
ICAgaWYgKHByb2Nlc3NQb29scy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2Un
cmUgb25lIG9mIHRoZSBsZWdhY3kgZGF0YSBzdG9yZXMuCiAgICAgICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
ICAgIGlmICghaXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woKnByb2Nlc3NQb29sKSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLQogICAgICAgICAgICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9jZXNz
UG9vbCk7CiAgICAgICAgICAgICBpZiAocHJvY2Vzc1Bvb2xzLnNpemUoKSA9PSBsaW1pdCkKICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTIwODQsOCArMTg2NSw3IEBAIHN0YXRpYyBTdHJpbmcg
Y29tcHV0ZU1lZGlhS2V5RmlsZShjb25zdCBTdHJpbmcmIG1lZGlhS2V5RGlyZWN0b3J5KQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9z
dChjb25zdCBXZWJDZXJ0aWZpY2F0ZUluZm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhv
c3QpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAg
ICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRp
ZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOworICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRp
ZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsK
IH0KIAogVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gV2Vic2l0ZURhdGFTdG9y
ZTo6bWVkaWFLZXlPcmlnaW5zKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9y
eSkKQEAgLTIxNDAsNiArMTkyMCw0OSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZU1l
ZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksCiAgICAgfQog
fQogCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihX
ZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChj
b25zdCBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvJik+JiYgcmVwbHkpCit7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1Byb3h5
LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHdlYlByb2Nlc3NQcm94eSA9
IG1ha2VXZWFrUHRyKHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0gV1RGTW92ZShyZXBseSldIChh
dXRvJiBjb25uZWN0aW9uSW5mbykgbXV0YWJsZSB7CisgICAgICAgIGlmIChVTkxJS0VMWSghSVBD
OjpDb25uZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSW5mby5pZGVudGlmaWVy
KCkpICYmIHdlYlByb2Nlc3NQcm94eSAmJiB3ZWFrVGhpcykpIHsKKyAgICAgICAgICAgIHRlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19JRihpc1BlcnNp
c3RlbnQoKSwgUHJvY2VzcywgImdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZp
cnN0IGF0dGVtcHQsIHJldHJ5aW5nIik7CisgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqd2ViUHJvY2Vzc1Byb3h5LCBXVEZNb3ZlKHJlcGx5
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmVwbHkoY29ubmVj
dGlvbkluZm8pOworICAgIH0pOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQ
cm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JikKK3sKKyAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGlkVGVybWluYXRlKCk7CisgICAg
bV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQoreworICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykK
KyAgICAgICAgcmV0dXJuOworICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOworICAg
IG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNlbmRQcmVwYXJlVG9TdXNwZW5kKElzU3VzcGVuc2lvbkltbWluZW50OjpObywgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmRO
ZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKQoreworICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5n
KCk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVz
dW1lKCkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7Cit9
CisKIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
KSBjb25zdAogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMTY5
LDE3ICsxOTkyLDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgICAgICAKICAgICAgICAgcmVzb2x2ZURp
cmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpKTsKKyAgICAgICAgbmV0
d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpLCAwKTsKKyAgICAgICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAgICAgICAgICAgcHJvY2Vz
c1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlByb2Nlc3M6
OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHRydWUpLCBtX3Nlc3Npb25JRCk7Ci0g
ICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0
d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpKTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpLCAwKTsKKyAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQ
cm9jZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZChmYWxzZSksIG1fc2Vzc2lvbklEKTsKLSAgICB9CiAKICAgICBtX3Jl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkID0gZmFsc2U7CiAjZWxzZQpAQCAtMjE5MSw4ICsy
MDEyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZChib29sIGVuYWJsZWQpCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3Rp
Y3NUZXN0aW5nQ2FsbGJhY2soRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjYWxsYmFj
aykKIHsKICAgICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NM
b2dUZXN0aW5nRXZlbnQodHJ1ZSksIDApOwogICAgIH0KICAgICAKICAgICBtX3N0YXRpc3RpY3NU
ZXN0aW5nQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKQEAgLTIyMTEsOCArMjAzMSw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9k
ZShib29sIGVuYWJsZWQsIENvbXBsZXRpCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGVidWdNb2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CiAgICAgVU5VU0VEX1BBUkFNKGNv
bXBsZXRpb25IYW5kbGVyKTsKQEAgLTIyMjcsMjAgKzIwNDYsMTUgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotI2VuZGlmCisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKKyNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworI2VuZGlmCiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGJvb2wg
ZW5hYmxlZCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEFkQ2xpY2tB
dHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEFk
Q2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKIH0KIAogI2lmIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMjYyLDQ4ICsyMDc2LDE5IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6Y2xlYXJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzSW5XZWJQcm9jZXNzZXMoQ29t
cGxldGlvbkhhbmRsCiB9CiAjZW5kaWYKIAotVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gV2Vic2l0
ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMoKSBjb25zdAotewotICAgIHJldHVybiBjb3B5VG9W
ZWN0b3IobV9wZW5kaW5nQ29va2llcyk7Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWRk
UGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSkKLXsKLSAgICBtX3Bl
bmRpbmdDb29raWVzLnJlbW92ZUlmKFsmY29va2llXShhdXRvJiBwZW5kaW5nQ29va2llKSB7Ci0g
ICAgICAgIHJldHVybiBwZW5kaW5nQ29va2llLmlzS2V5RXF1YWwoY29va2llKTsKLSAgICB9KTsK
LSAgICBtX3BlbmRpbmdDb29raWVzLmFkZChjb29raWUpOwotfQotCi12b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUp
Ci17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmUoY29va2llKTsKLX0KLSAgICAKLXZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcygpCi17Ci0gICAgbV9wZW5kaW5n
Q29va2llcy5jbGVhcigpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZsdXNoQ29va2ll
cyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+Zmx1
c2hDb29raWVzKHNlc3Npb25JRCgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCgpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYm9vbCBhbGxvd3MpCiB7Ci0gICAgZm9yIChhdXRvIHBy
b2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwg
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldl
YlNvY2tldDo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5
bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZv
cldlYlNvY2tldChhbGxvd3MpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0OjpSZXBseSgpLCAwKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKCkKIHsKLSAgICBmb3IgKGF1dG8g
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5jbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCgpKTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckNhY2hl
ZENyZWRlbnRpYWxzKHNlc3Npb25JRCgpKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6ZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKQEAgLTIzMjks
OCArMjExNCw2IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6
OnBhcmFtZXRlcnMoKQogCiAgICAgcmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsKIAot
ICAgIHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBwZW5kaW5nQ29va2llcygpOwotCiAgICAg
YXV0byByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlIYW5kbGU7CiAgICAgaWYgKCFy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKQEAgLTI0MzUsNyArMjIx
OCwxMCBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJh
bWV0ZXJzKCkKICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVkID0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZDsKICNlbmRpZgogICAgIHBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMocGFy
YW1ldGVycyk7Ci0KKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1p
c3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKKyNl
bmRpZgorICAgIAogICAgIHJldHVybiBwYXJhbWV0ZXJzOwogfQogCkBAIC0yNDY1LDEwICsyMjUx
LDYgQEAgQVBJOjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6OmNvb2tpZVN0b3Jl
KCkKICAgICByZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQotewotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBpZiAoIWlzUGVyc2lzdGVudCgpKSB7CkBAIC0yNDc2LDIzICsyMjU4LDE1IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2
b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VECiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
cHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpLmdldExvY2FsU3RvcmFnZURl
dGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShkZXRhaWxzKSk7Ci0gICAgICAgIH0pOwotICAgICAgICAvLyBGSVhNRTogU3Vw
cG9ydCBmZXRjaGluZyBmcm9tIG11bHRpcGxlIHBvb2xzLgotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgQVNTRVJUKCFjb21wbGV0aW9uSGFuZGxlcik7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5n
ZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMpIHsKKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UXVvdGEobV9zZXNzaW9uSUQsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0y
NTE4LDcgKzIyOTIsMTIgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpodHRwM0VuYWJsZWQoKQog
ewogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZgorCitib29sIFdlYnNpdGVEYXRhU3RvcmU6
Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpCit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkKIAogI2lm
ICFVU0UoR0xJQikKIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREZXZpY2VJ
ZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQpAQCAtMjUzMCwzNSArMjMwOSwxOCBAQCBXVEY6
OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdl
RGlyZWN0b3J5KCkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW5hbWVPcmlnaW5JbldlYnNp
dGVEYXRhKFVSTCYmIG9sZE5hbWUsIFVSTCYmIG5ld05hbWUsIE9wdGlvblNldDxXZWJzaXRlRGF0
YVR5cGU+IGRhdGFUeXBlcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp0aGlzKTsKLSAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vz
c2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW5hbWVPcmln
aW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShBUFBfQk9VTkRf
RE9NQUlOUykKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzQXBwQm91bmRTZXNzaW9uKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lv
bklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuaGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJBcHBCb3Vu
ZFNlc3Npb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MtPmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVh
ckFwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lU
UElmSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMjU4MCw3ICsyMzQyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3J3YXJk
QXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGUKIAogICAg
IHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhnbG9iYWxEZWZhdWx0RGF0YVN0b3JlKCkuZ2V0KCks
ICphcHBCb3VuZERvbWFpbnMpOwogCi0gICAgZm9yIChhdXRvKiBzdG9yZSA6IG5vbkRlZmF1bHRE
YXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAgZm9yIChhdXRvKiBzdG9yZSA6IGFsbERhdGFTdG9y
ZXMoKS52YWx1ZXMoKSkKICAgICAgICAgcHJvcGFnYXRlQXBwQm91bmREb21haW5zKHN0b3JlLCAq
YXBwQm91bmREb21haW5zKTsKIH0KIApAQCAtMjU4OCwxMCArMjM1MCw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKGNvbnN0IEhhc2hTZXQ8V2ViQ29y
ZTo6UmVnaXN0cmFiCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0QXBwQm91bmREb21haW5zRm9yUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyhtX3Nlc3Npb25JRCwgZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogI2VuZGlmCiAKQEAgLTI1OTksMTYgKzIzNTgsMjYgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25zdCBT
dHJpbmcmIGJ1bmQKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVu
dGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCku
dXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRp
ZmllckluTmV0d29ya1Byb2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmll
cihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworfQorCitzdGF0aWMgYm9vbCBuZXh0TmV0d29y
a1Byb2Nlc3NMYXVuY2hTaG91bGRGYWlsRm9yVGVzdGluZyB7IGZhbHNlIH07CisKK3ZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6bWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
KCkKK3sKKyAgICBuZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hTaG91bGRGYWlsRm9yVGVzdGluZyA9
IHRydWU7Cit9CisKK2Jvb2wgV2Vic2l0ZURhdGFTdG9yZTo6c2hvdWxkTWFrZU5leHROZXR3b3Jr
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkKK3sKKyAgICByZXR1cm4gc3RkOjpleGNoYW5n
ZShuZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hTaG91bGRGYWlsRm9yVGVzdGluZywgZmFsc2UpOwog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXggMGRjOTFmMjNjNDE1NDM5NWM4ZWJmODkwZjM1YmQwMTgw
Y2Q1MWFhZC4uZjBlMDg3MTUxM2NmNzY5YmM5OTVmNGExNTlkZjY4OWNmN2Q3ZTRkYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRh
U3RvcmUuaApAQCAtNTMsNiArNTMsOCBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVk
ZSA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KKyNpbmNsdWRlIDx3dGYvT1NPYmplY3RQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KICNlbmRpZgogCiAjaWYgVVNF
KENVUkwpCkBAIC03NSw2ICs3Nyw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgQXV0aGVu
dGljYXRvck1hbmFnZXI7CiBjbGFzcyBTZWNLZXlQcm94eVN0b3JlOwogY2xhc3MgRGV2aWNlSWRI
YXNoU2FsdFN0b3JhZ2U7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5OwogY2xhc3MgU09BdXRo
b3JpemF0aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBXZWJDZXJ0aWZpY2F0ZUluZm87CiBjbGFzcyBX
ZWJQYWdlUHJveHk7CkBAIC04NCw2ICs4Nyw4IEBAIGNsYXNzIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTsKIGVudW0gY2xhc3MgQ2FjaGVNb2RlbCA6IHVpbnQ4X3Q7CiBlbnVtIGNsYXNz
IFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24gOiB1aW50OF90OwogZW51bSBjbGFzcyBXZWJzaXRlRGF0
YVR5cGUgOiB1aW50MzJfdDsKKworc3RydWN0IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm87
CiBzdHJ1Y3QgV2Vic2l0ZURhdGFSZWNvcmQ7CiBzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM7CiAKQEAgLTEwOSw3ICsxMTQsMTIgQEAgcHVibGljOgogICAgIFdlYnNpdGVEYXRhU3Rv
cmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYmLCBQQUw6OlNlc3Npb25JRCk7
CiAgICAgfldlYnNpdGVEYXRhU3RvcmUoKTsKIAotICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3Jl
KiBleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQp
OworICAgIHN0YXRpYyB2b2lkIGZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKEZ1bmN0aW9uPHZvaWQo
V2Vic2l0ZURhdGFTdG9yZSYpPiYmKTsKKyAgICAKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBu
ZXR3b3JrUHJvY2VzcygpIGNvbnN0OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQ
cm9jZXNzKCk7CisKKyAgICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhpc3RpbmdEYXRhU3Rv
cmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOwogCiAgICAgYm9vbCBpc1BlcnNpc3RlbnQo
KSBjb25zdCB7IHJldHVybiAhbV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKTsgfQogICAgIFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9CkBAIC0x
MTksNiArMTI5LDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBjb25zdCBXZWFrSGFzaFNldDxXZWJQ
cm9jZXNzUHJveHk+JiBwcm9jZXNzZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3NlczsgfQog
CisgICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5Jiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZv
Jik+JiYpOworICAgIHZvaWQgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICB2b2lkIHNl
bmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZElt
bWluZW50bHlGb3JUZXN0aW5nKCk7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1
bWUoKTsKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5
Jik7CisgICAgc3RhdGljIHZvaWQgbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JU
ZXN0aW5nKCk7CisgICAgc3RhdGljIGJvb2wgc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nKCk7CisKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZChib29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoKSBjb25z
dDsKQEAgLTIzNSwxNSArMjU0LDggQEAgcHVibGljOgogCiAgICAgRGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4gbV9kZXZpY2VJZEhhc2hT
YWx0U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sRm9y
Q29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlzQXNzb2NpYXRlZFByb2Nlc3NQ
b29sKFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycyBwYXJhbWV0ZXJzKCk7CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5kaW5n
Q29va2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3Jl
OjpDb29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6
Q29va2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVzKCk7CiAgICAgdm9pZCBmbHVz
aENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyQ2Fj
aGVkQ3JlZGVudGlhbHMoKTsKIApAQCAtMjUxLDYgKzI2MywxMSBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYpOwogCisjaWYgUExBVEZPUk0o
Q09DT0EpCisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vz
cyhXZWJQcm9jZXNzUHJveHkmKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBv
aW50VG9BbGxXZWJQcm9jZXNzZXMoKTsKKyNlbmRpZgorCiAjaWYgVVNFKENVUkwpCiAgICAgdm9p
ZCBzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5ncyYmKTsK
ICAgICBjb25zdCBXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5ncyYgbmV0d29ya1Byb3h5U2V0dGlu
Z3MoKSBjb25zdCB7IHJldHVybiBtX3Byb3h5U2V0dGluZ3M7IH0KQEAgLTI3Miw4ICsyODksNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9u
KFdlYkNvcmU6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24mJik7CiAjZW5kaWYK
IAotICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKLQogICAgIGNvbnN0IFdlYnNp
dGVEYXRhU3RvcmVDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKCkgeyByZXR1cm4gbV9jb25m
aWd1cmF0aW9uLmdldCgpOyB9CiAKICAgICBXZWJzaXRlRGF0YVN0b3JlQ2xpZW50JiBjbGllbnQo
KSB7IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQpAQCAtMjgzLDYgKzI5OCw4IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgcmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiwgVVJMJiYsIE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisg
ICAgYm9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJp
bmcmKTsKKwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgV2ViRGV2aWNlT3Jp
ZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyJiBkZXZpY2VPcmllbnRhdGlvbkFuZE1v
dGlvbkFjY2Vzc0NvbnRyb2xsZXIoKSB7IHJldHVybiBtX2RldmljZU9yaWVudGF0aW9uQW5kTW90
aW9uQWNjZXNzQ29udHJvbGxlcjsgfQogI2VuZGlmCkBAIC0zNTksNyArMzc2LDcgQEAgcHJpdmF0
ZToKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtl
eXNTdG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKTsKICAgICBzdGF0aWMg
dm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0
b3J5LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mKTsKIAotICAg
IHZvaWQgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICB2b2lkIHJlZ2lzdGVy
V2l0aFNlc3Npb25JRE1hcCgpOwogCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKQogICAg
IHN0YXRpYyBPcHRpb25hbDxIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPj4gYXBw
Qm91bmREb21haW5zSWZJbml0aWFsaXplZCgpOwpAQCAtMzk3LDggKzQxNCw2IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgeyB0cnVlIH07
CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29va2llPiBtX3BlbmRpbmdDb29raWVz
OwotICAgIAogICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4gbV9wcm9jZXNzZXM7CiAK
ICAgICBib29sIG1faXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQgeyBmYWxzZSB9OwpAQCAtNDE5LDYg
KzQzNCw3IEBAIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPFdlYnNpdGVEYXRhU3RvcmVDbGllbnQ+
IG1fY2xpZW50OwogCiAgICAgUmVmUHRyPEFQSTo6SFRUUENvb2tpZVN0b3JlPiBtX2Nvb2tpZVN0
b3JlOworICAgIFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwog
CiAjaWYgSEFWRShBUFBfU1NPKQogICAgIFVuaXF1ZVJlZjxTT0F1dGhvcml6YXRpb25Db29yZGlu
YXRvcj4gbV9zb0F1dGhvcml6YXRpb25Db29yZGluYXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0
b3JlQ3VybC5jcHAKaW5kZXggMGUwYzA2ZTFkZWQ0MmMxNGI4MDJlMTU4OWYzMWRjNjI5ODJhYzM5
My4uNjRiNmM3NGQwODZlYzQ1YmI2MmRhNmVlMDgyMjNiMjhkYjczYTU3YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3Jl
Q3VybC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9X
ZWJzaXRlRGF0YVN0b3JlQ3VybC5jcHAKQEAgLTQyLDggKzQyLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5n
cyYmIHByb3gKIHsKICAgICBtX3Byb3h5U2V0dGluZ3MgPSBXVEZNb3ZlKHByb3h5U2V0dGluZ3Mp
OwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX3Nlc3Npb25JRCwgbV9wcm94eVNldHRp
bmdzKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9zZXNzaW9uSUQsIG1fcHJveHlTZXR0aW5ncyks
IDApOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCmluZGV4IDEyZjlj
ZDgxOWI2ZGNjYThhYzUwOTJhMzBkZDkzYzUzYjhlZTkzNDIuLjZmOTYzZjE0MjEwMDQ3NThlMmQ2
NWVkOTYyNmUyYTQ5YTNmNGY5MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3Bw
CkBAIC0zOSw4ICszOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3
b3JrUGFyYW1ldGVycyhXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYKICAgICBhdXRvJiBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
czsKICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9y
YWdlRW5hYmxlZCA9IG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZDsKIAotICAg
IGlmIChhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdl
clByb3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9z
ZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFn
ZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5
cGUpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBlcnNpc3RlbnRDcmVkZW50aWFs
U3RvcmFnZUVuYWJsZWQoYm9vbCBlbmFibGVkKQpAQCAtNTIsOCArNTEsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoYm9vbCBl
bmFibGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQgPSBlbmFibGVkOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNz
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdl
RW5hYmxlZChtX3Nlc3Npb25JRCwgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVk
KSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChtX3Nlc3Npb25JRCwgbV9wZXJz
aXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKSwgMCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9j
ZXNzUHJveHlHTGliLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vz
c1Byb3h5R0xpYi5jcHAKaW5kZXggMGE4NGE3NTkwZDlhOTg1YmZjOTk2ODRhNDg5NTEzNzRlNWIy
OTQyOS4uMjdmMjNlYTA2NWRjNzVjZTRhODI3MGM1NzZlYTJhYTU1YWIwZGM4ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3Bw
CkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5j
aE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsCiAgICAgICAgIGlmICgh
ZGF0YVN0b3JlKSB7CiAgICAgICAgICAgICAvLyBQcmV3YXJtZWQgcHJvY2Vzc2VzIGRvbid0IGhh
dmUgYSBXZWJzaXRlRGF0YVN0b3JlIHlldCwgc28gdXNlIHRoZSBwcmltYXJ5IFdlYnNpdGVEYXRh
U3RvcmUgZnJvbSB0aGUgV2ViUHJvY2Vzc1Bvb2wuCiAgICAgICAgICAgICAvLyBUaGUgcHJvY2Vz
cyB3b24ndCBiZSB1c2VkIGlmIGN1cnJlbnQgV2Vic2l0ZURhdGFTdG9yZSBpcyBkaWZmZXJlbnQg
dGhhbiB0aGUgV2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBvbmUuCi0gICAgICAgICAgICBkYXRhU3Rv
cmUgPSBtX3Byb2Nlc3NQb29sLT53ZWJzaXRlRGF0YVN0b3JlKCk7CisgICAgICAgICAgICBkYXRh
U3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7CiAgICAg
ICAgIH0KIAogICAgICAgICBBU1NFUlQoZGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCmlu
ZGV4IDlmN2JlM2M5NDFiNmNkMGExYjk0Y2IxMzYwOThmM2EwNDFjZWZmOTkuLmFjMDRlMzhhNTdi
MjE1OWJlYjQyZjM4NDc5YjQ0ZjVlMjZkZWRiYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcApAQCAt
MjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1h
bmFnZXJQcm94eS5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1
ZGUgIldlYkNvb2tpZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29s
LmgiCiAKQEAgLTMzLDggKzM0LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0
ZW50U3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUpCiB7Ci0gICAgbV9jb29raWVQZXJzaXN0ZW50U3Rv
cmFnZU1hcC5zZXQoc2Vzc2lvbklELCBzdGQ6Om1ha2VfcGFpcihzdG9yYWdlUGF0aCwgc3RvcmFn
ZVR5cGUpKTsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lv
bklELCBzdG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFu
YWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBzdG9yYWdlUGF0aCwg
c3RvcmFnZVR5cGUpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nJiBz
dG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSYgc3RvcmFnZVR5cGUp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nl
c3NQb29sU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQ
b29sU291cC5jcHAKaW5kZXggYmZiYmY5NjY0ZTQ4MzUzMDk3MDk3MTFkZmQ2YzEzNDE1NzMyYmRh
Yy4uN2ZlNGFjYTBjNWQyZDBlN2ZjMGQ5ZDVhNGZhMjdlYmNjODBhNjc1ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcApAQCAt
MzcsMzAgKzM3LDI0IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKLSAgICBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFy
YW1ldGVycyYgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgc3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKGRl
ZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVy
cy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5j
b29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOwotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUp
Ci0gICAgICAgIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0
b3JhZ2VFbmFibGVkID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0
b3JhZ2VFbmFibGVkKCk7CisgICAgLy8gRklYTUU6IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgorICAgIC8vIEZJ
WE1FOiBtX2lnbm9yZVRMU0Vycm9ycyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRh
U3RvcmUgb3IgcmVtb3ZlZC4KKyAgICAvLyBGSVhNRTogbV9uZXR3b3JrUHJveHlTZXR0aW5ncyBz
aG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCiAKLSAgICBwYXJhbWV0ZXJz
LmNvb2tpZUFjY2VwdFBvbGljeSA9IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3k7Ci0g
ICAgcGFyYW1ldGVycy5pZ25vcmVUTFNFcnJvcnMgPSBtX2lnbm9yZVRMU0Vycm9yczsKICAgICBw
YXJhbWV0ZXJzLmxhbmd1YWdlcyA9IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKTsKLSAgICBwYXJh
bWV0ZXJzLnByb3h5U2V0dGluZ3MgPSBtX25ldHdvcmtQcm94eVNldHRpbmdzOwogICAgIHBhcmFt
ZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSB0cnVlOwogfQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMpCiB7CisgICAg
Ly8gRklYTUU6IE1vdmUgdGhpcyB0byBXZWJzaXRlRGF0YVN0b3JlLgogICAgIG1faWdub3JlVExT
RXJyb3JzID0gaWdub3JlVExTRXJyb3JzOwotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
SWdub3JlVExTRXJyb3JzKG1faWdub3JlVExTRXJyb3JzKSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKGNvbnN0IFdlYkNvcmU6OlNvdXBOZXR3
b3JrUHJveHlTZXR0aW5ncyYgc2V0dGluZ3MpCiB7CisgICAgLy8gRklYTUU6IE1vdmUgdGhpcyB0
byBXZWJzaXRlRGF0YVN0b3JlLgogICAgIG1fbmV0d29ya1Byb3h5U2V0dGluZ3MgPSBzZXR0aW5n
czsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1f
bmV0d29ya1Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mby5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
SW5mby5oCmluZGV4IDgzNTBkYmFjZjhkNTU3ZTU3YzhiY2ZjM2U5M2QwOTdiODk0NmFiYjguLjlm
NDY4NWQxM2FiZDJiNGFjOGM1Mzc4YjhlNTEyZjljMDI5ZGIzYjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8u
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb25JbmZvLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNs
dWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQQ29va2llQWNjZXB0UG9s
aWN5Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDVmNzlmNGEyOGFhZWZmNGM3OTZjZThhM2I3YTA2NThj
OWZkY2IwOGMuLmY0MzI0NTEwOTFiZDE5YzcyMjZkYzY3YjAwZDIxNTk2ZWIyMDJlMWUgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4
NiBAQAorMjAyMC0wOS0yMiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQu
b3JnPgorCisgICAgICAgIE1vdmUgTmV0d29ya1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgZnJvbSBX
ZWJQcm9jZXNzUG9vbCB0byBXZWJzaXRlRGF0YVN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYwNDEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3N0IGNoYW5nZXMgdG8gdGVzdHMgYXJlIGp1c3Qg
Y2FsbGluZyBhIGZ1bmN0aW9uIG9uIHRoZSBXS1dlYnNpdGVEYXRhU3RvcmUgaW5zdGVhZCBvZiB0
aGUgV0tQcm9jZXNzUG9vbAorICAgICAgICBiZWNhdXNlIHdlIHdhbnQgdG8gZG8gc29tZXRoaW5n
IHdpdGggdGhlIG5ldHdvcmsgcHJvY2VzcyBhbmQgaXQgaGFzIGEgbmV3IG93bmVyLgorICAgICAg
ICBFeGNlcHRpb25zIGFyZSBub3RlZCBpbmxpbmUuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1t
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OmRvd25sb2FkQXRSYXRlKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0lEQkNoZWNrcG9pbnRXQUwubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tOgorICAgICAg
ICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJ
bmRleFVwZ3JhZGVUb1YyLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbToK
KyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9j
ZXNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZElt
bWluZW50bHkubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbToKKyAgICAgICAgKFRFU1Qp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdl
UGVyc2lzdGVuY2UubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0Ny
YXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbToKKyAgICAgICAgKGNoZWNrUmVjb3ZlcnlBZnRl
ckNyYXNoKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nl
c3NTd2FwT25OYXZpZ2F0aW9uLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICBUaGlzIHRlc3Qgd2FzIG1ha2luZyBhIFdLV2Vic2l0ZURhdGFTdG9yZSwgZ2V0dGluZyBp
dHMgcmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNzIGRpcmVjdG9yeSwKKyAgICAgICAgcHV0dGluZyB0
aGluZ3MgaW4gdGhhdCBkaXJlY3RvcnksIHRoZW4gc3RhcnRpbmcgdGhlIG5ldHdvcmsgcHJvY2Vz
cyBhbmQgbWFraW5nIHN1cmUgZXZlcnl0aGluZworICAgICAgICB3b3JrcyB3aGVuIGluaXRpYWxp
emluZyB0aGUgbmV0d29yayBwcm9jZXNzLiAgTm93LCBuZXR3b3JrIHByb2Nlc3MgaW5pdGlhbGl6
YXRpb24gaGFwcGVucyB3aGVuIGEKKyAgICAgICAgV0tXZWJzaXRlRGF0YVN0b3JlIGlzIGluc3Rh
bnRpYXRlZCwgc28gd2UgbmVlZCB0byBwdXQgdGhpbmdzIHRoZXJlIGJlZm9yZSBpbnN0YW50aWF0
aW5nIGEgV0tXZWJzaXRlRGF0YVN0b3JlLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tOgorICAgICAgICBCZWZvcmUgdGhpcyBj
aGFuZ2UsIGVhY2ggV0tQcm9jZXNzUG9vbCBoYWQgaXRzIG93biBuZXR3b3JrIHByb2Nlc3MsIHdo
aWNoIGhvbGRzIHRoZSBzZXJ2aWNlIHdvcmtlciByZWdpc3RyeQorICAgICAgICBmb3IgdGhlIFdl
YnNpdGVEYXRhU3RvcmVzIHVzZWQgd2l0aCB0aGF0IHByb2Nlc3MgcG9vbC4gIE5vdywgdGhlIG5l
dHdvcmsgcHJvY2VzcyBzdGlsbCBuZWVkcyB0byBoYXZlIGEgc2VydmljZQorICAgICAgICB3b3Jr
ZXIgcmVnaXN0cnkgaW4gaXQsIGJ1dCB3aGVuIHdlIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gaXQg
bG9va2luZyBmb3IgYSB3ZWIgcHJvY2VzcyB0byBydW4gdGhlIHNlcnZpY2UKKyAgICAgICAgd29y
a2VyLCB3ZSBnbyBhcmJpdHJhcmlseSB0byB0aGUgZmlyc3QgcHJvY2VzcyBwb29sIHRoYXQgaGFz
IGEgcHJvY2VzcyB3ZSBjYW4gdXNlLiAgVGhpcyBsb2dpYyBpcyBpbiAKKyAgICAgICAgV2ViUHJv
Y2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vz
cy4gIEJlY2F1c2Ugd2UgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wgZWFjaAorICAgICAgICB0
aW1lLCBzZXR0aW5nIHRoZSBjdXN0b20gdXNlciBhZ2VudCB0byB0d28gZGlmZmVyZW50IHRoaW5n
cyBpbiB0d28gZGlmZmVyZW50IHByb2Nlc3MgcG9vbHMgY2F1c2VzIG9ubHkgb25lCisgICAgICAg
IHRvIGJlIHVzZWQuICBUaGlzIGlzIG5vdCBhIHByb2JsZW0gaW4gcHJhY3RpY2UsIHRob3VnaCwg
YmVjYXVzZSB0aGUgb25seSBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgdGhlIFNQSSB0bworICAgICAg
ICBzZXQgYSBzZXJ2aWNlIHdvcmtlcidzIGN1c3RvbSB1c2VyIGFnZW50IGlzIFNhZmFyaSwgd2hp
Y2ggb25seSBoYXMgb25lIHByb2Nlc3MgcG9vbC4gIFRoaXMgdGVzdCBzdGlsbCB2ZXJpZmllcwor
ICAgICAgICB0aGF0IGEgdXNlciBhZ2VpbnQgaXMgY29ycmVjdGx5IHNlbnQuCisgICAgICAgIFNp
bWlsYXJseSwgdGhlIHRlc3RzIHRoYXQgY291bnQgc2VydmljZSB3b3JrZXIgcHJvY2Vzc2VzIGVp
dGhlciBoYXZlIGRpZmZlcmVudCByZXN1bHRzIG9yIG5lZWQgdG8gYmUgcnVuIHdpdGgKKyAgICAg
ICAgb25lIHByb2Nlc3MgcG9vbCBwZXIgcGFyZW50IHByb2Nlc3MuICBUbyBrZWVwIHRoZSByZXN1
bHRzIHRoZSBzYW1lLCBJIHNlcGFyYXRlZCB0aGUgdGVzdHMgaW50byBkaWZmZXJlbnQKKyAgICAg
ICAgVEVTVChTZXJ2aWNlV29ya2VycywgLi4uKSBtYWNyb3Mgd2hpY2ggYXJlIHJ1biBpbiBzZXBh
cmF0ZSBwYXJlbnQgcHJvY2Vzc2VzLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW06CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNv
b2tpZVVJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdl
OmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW0NoZWNr
U2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdKToKKyAgICAgICAgKC1bQ2hl
Y2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdKToKKyAgICAgICAgKFRF
U1QpOgorICAgICAgICBUaGlzIGlzIHRoZSB3aG9sZSBwb2ludCBvZiBtZSBkb2luZyB0aGlzLgor
ICAgICAgICBJIHRvb2sgYSB0ZXN0IHRoYXQgd2FzIGZsYWt5IG9ubHkgb24gaU9TIChiZWNhdXNl
IG9mIGRpZmZlcmVudCBOU0hUVFBDb29raWVTdG9yYWdlIHN5bmNpbmcgYmVoYXZpb3IpIGFuZCBt
YWRlCisgICAgICAgIGl0IGZsYWt5IG5vd2hlcmUgKGZpbmdlcnMgY3Jvc3NlZCEpIGFuZCBhZGRl
ZCBhIHRlc3QgdGhhdCBjb3JyZWN0bHkgaGFuZGxlcyBzZXNzaW9uIGNvb2tpZXMgbGlrZSB3ZSBj
b3VsZCBub3QKKyAgICAgICAgYmVmb3JlIHRoaXMgY2hhbmdlLgorICAgICAgICBJIGFsc28gcmUt
dXNlZCBzb21lIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgYW5kIG1hZGUgaXQgc3RvcCB1c2luZyBwcm9j
ZXNzLWdsb2JhbCBzdGF0aWMgdmFyaWFibGVzIGZvciB0ZXN0IHN0YXRlLgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1t
OgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW06CisgICAgICAgIChydW5XZWJzaXRl
RGF0YVN0b3JlQ3VzdG9tUGF0aHMpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9s
bGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENv
bnRyb2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdUUjo6VGVzdENv
bnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dCk6CisgICAgICAgIFdLQ29udGV4dFNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcgaXMgbm90IG5lZWRl
ZCwgc28gSSByZW1vdmVkIGl0LgorICAgICAgICBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURh
dGFTdG9yZSBpc24ndCBuZWVkZWQgYW55IG1vcmUgYmVjYXVzZSBXS0NvbnRleHRSZWYgKFdlYlBy
b2Nlc3NQb29sKSBkb2Vzbid0CisgICAgICAgIG93biBhIG5ldHdvcmsgcHJvY2VzcyBhbnkgbW9y
ZSwgc28gaXQgZG9lc24ndCBjYXJlIHdoaWNoIGlzIHRoZSBkZWZhdWx0IFdlYnNpdGVEYXRhU3Rv
cmUuCisgICAgICAgIEluIGZhY3QsIHRoZSAiZGVmYXVsdCIgV2Vic2l0ZURhdGFTdG9yZSBpc24n
dCByZWFsbHkgaW1wb3J0YW50IGluIHRoZSBuZXR3b3JrIHByb2Nlc3MgYW55IG1vcmUuCisKIDIw
MjAtMDktMjIgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBNYWtlIFRMU1ZlcnNpb24gQVBJIHRlc3RzIG1vcmUgcm9idXN0LgpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdp
dGhQZW5kaW5nQ29ubmVjdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KaW5kZXggOTczODlm
MDFmZjJlZTk5Yjc4M2IwYjUyMTA4MDc0ZjFhODFiNjk4MS4uOTdiNzJlMDE2ZGVkZTRhMDdkNDY1
M2YzYTliYzUyYjhmNGYzMTkyYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbQorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0
aFBlbmRpbmdDb25uZWN0aW9uLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxXZWJLaXQv
V0tQcm9jZXNzR3JvdXBQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktp
dC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCkBAIC04Nyw3ICs4OCw3IEBAIFRFU1Qo
V2ViS2l0LCBOZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uKQogICAgIHBp
ZF90IHdlYlZpZXcyUElEID0gW3dlYlZpZXcyLmdldCgpIF93ZWJQcm9jZXNzSWRlbnRpZmllcl07
CiAgICAgRVhQRUNUX05FKHdlYlZpZXcxUElELCB3ZWJWaWV3MlBJRCk7CiAKLSAgICBwaWRfdCBp
bml0aWFsTmV0d29ya1Byb2Nlc3NJZGVudGlmaWZlciA9IFtwcm9jZXNzUG9vbC5nZXQoKSBfbmV0
d29ya1Byb2Nlc3NJZGVudGlmaWVyXTsKKyAgICBwaWRfdCBpbml0aWFsTmV0d29ya1Byb2Nlc3NJ
ZGVudGlmaWZlciA9IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX25ldHdv
cmtQcm9jZXNzSWRlbnRpZmllcl07CiAgICAgRVhQRUNUX05FKGluaXRpYWxOZXR3b3JrUHJvY2Vz
c0lkZW50aWZpZmVyLCAwKTsKICAgICBraWxsKGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZmVyLCBTSUdLSUxMKTsKICAgICBVdGlsOjpydW4oJm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk7CkBA
IC05Niw3ICs5Nyw3IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRp
bmdDb25uZWN0aW9uKQogICAgIFt3ZWJWaWV3MS5nZXQoKSBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1
ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6
QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0
QVBJLnJlc291cmNlcyJdXV07CiAgICAgW3dlYlZpZXcxLmdldCgpIF90ZXN0X3dhaXRGb3JEaWRG
aW5pc2hOYXZpZ2F0aW9uXTsKIAotICAgIHBpZF90IHJlbGF1bmNoZWROZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXIgPSBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl07
CisgICAgcGlkX3QgcmVsYXVuY2hlZE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllciA9IFtjb25maWd1
cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl07
CiAgICAgRVhQRUNUX05FKGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVyLCByZWxhdW5j
aGVkTmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKTsKICAgICBFWFBFQ1RfRkFMU0UobmV0d29ya1By
b2Nlc3NDcmFzaGVkKTsKIApAQCAtMTQ2LDggKzE0Nyw4IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3Jr
UHJvY2Vzc1JlbGF1bmNoT25MYXVuY2hGYWlsdXJlKQogCiAgICAgLy8gQ29uc3R1Y3RpbmcgYSBX
ZWJWaWV3IHN0YXJ0cyBhIG5ldHdvcmsgcHJvY2VzcyBzbyB0ZXJtaW5hdGUgdGhpcyBvbmUuIFRo
ZSBwYWdlIGxvYWQgYmVsb3cgd2lsbCB0aGVuIHJlcXVlc3QgYSBuZXR3b3JrIHByb2Nlc3MgYW5k
IHdlCiAgICAgLy8gbWFrZSB0aGlzIG5ldyBuZXR3b3JrIHByb2Nlc3MgbGF1bmNoIGNyYXNoIG9u
IHN0YXJ0dXAuCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107Ci0g
ICAgW3Byb2Nlc3NQb29sIF9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmddOworICAgIFtXS1dlYnNpdGVEYXRhU3RvcmUgX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVu
Y2hGYWlsRm9yVGVzdGluZ107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFT
dG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFk
b3B0TlMoW1tNb25pdG9yV2ViQ29udGVudENyYXNoTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBp
bml0XSk7CiAgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgp
XTsKQEAgLTE1OCw3ICsxNTksNyBAQCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NSZWxhdW5j
aE9uTGF1bmNoRmFpbHVyZSkKICAgICBFWFBFQ1RfVFJVRShuZXR3b3JrUHJvY2Vzc0NyYXNoZWQp
OwogICAgIEVYUEVDVF9GQUxTRSh3ZWJQcm9jZXNzQ3Jhc2hlZCk7CiAgICAgRVhQRUNUX0dUKFt3
ZWJWaWV3IF93ZWJQcm9jZXNzSWRlbnRpZmllcl0sIDApOwotICAgIEVYUEVDVF9HVChbcHJvY2Vz
c1Bvb2wuZ2V0KCkgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0sIDApOworICAgIEVYUEVDVF9H
VChbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXJdLCAwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0KaW5kZXgg
YjdlZDk5OTM5ZmQ1OWYyMjhhN2U4YmQ3NDk3MTJmNTM2NjAxNTYxNi4uMTgxOTEzMWM5YTBmZWIz
MGIxYTJmMGNmY2Q4N2JmMjA0NWViYjNmNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCkBAIC04ODksOSArODg5LDkgQEAgdm9pZCBk
b3dubG9hZEF0UmF0ZShkb3VibGUgZGVzaXJlZEticHMsIHVuc2lnbmVkIHNwZWVkTXVsdGlwbGll
ciwgQXBwUmV0dXJuc1RvRm8KICAgICByZWNlaXZlZERhdGEgPSBmYWxzZTsKICAgICBVdGlsOjpy
dW4oJnJlY2VpdmVkRGF0YSk7CiAgICAgLy8gU3RhcnQgdGhlIERvd25sb2FkTW9uaXRvcidzIHRp
bWVyLgotICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfc3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZDpZRVNdOworICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJz
aXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOllFU107CiAgICAgaWYgKHJl
dHVyblRvRm9yZWdyb3VuZCA9PSBBcHBSZXR1cm5zVG9Gb3JlZ3JvdW5kOjpZZXMpCi0gICAgICAg
IFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZDpOT107CisgICAgICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0
YVN0b3JlIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOk5PXTsKICAgICBkaWRDYW5jZWwgPSBm
YWxzZTsKICAgICBVdGlsOjpydW4oJmRpZENhbmNlbCk7CiAgICAgdGVybWluYXRlU2VydmVyID0g
dHJ1ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SURCQ2hlY2twb2ludFdBTC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSURCQ2hlY2twb2ludFdBTC5tbQppbmRleCA1Y2Q3YWJkYTAxZDE5NzQ3ZGNlZDQ1YWJlZTk5
ZWNiMWMxNGQ2MTYwLi5kNzdhNmZkOTg3OWU0M2Y3MDExZGRhZjkyYzNhNzk3ZjNmYzEzNzM0IDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNr
cG9pbnRXQUwubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJDaGVja3BvaW50V0FMLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQ
cm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJv
bGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJp
dmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENv
bmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAt
ODYsNyArODcsNyBAQCBURVNUKEluZGV4ZWREQiwgQ2hlY2twb2ludHNXQUxBdXRvbWF0aWNhbGx5
KQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0g
YWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2Nv
bmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxl
cjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRp
b24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29u
ZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25m
aWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KaW5k
ZXggYzhhZjFkMjQzYzRmZWI1OGFjOTg0ZGFmMTRkODE1MzFhN2NjM2M3My4uYmJmMWExNTIxNWRj
MWZkMjhkZmRkYjllMzQxYjY0ZjljMDA4ZjRjNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCkBAIC0z
MCw2ICszMCw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0
L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4K
ICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQg
PFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtNTcsNyArNTgsNyBAQCBURVNUKEluZGV4
ZWREQiwgRGVsZXRlUmVjb3ZlcnkpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRp
b24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxv
Y10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFk
ZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07
CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBk
YXRhYmFzZSBmaWxlcyB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEg
PSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiSURCRGVsZXRlUmVjb3Zl
cnkiIHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJ
LnJlc291cmNlcyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tCmluZGV4IDk1Y2NhMGNlMjgxNmZm
MWE2YTQ1NWFkMGJkMmM4YTRhYTRmMjdmZWQuLjg4YTUzZjYxZDlkOTgyNjU3Yjk2NWVmOGE2Y2Vi
YTc5MWVmZjE3NTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0
YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2Vi
S2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Vz
ZXJTdHlsZVNoZWV0Lmg+CkBAIC01OCw3ICs1OSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleFVw
Z3JhZGVUb1YyKQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1
cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsK
ICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNz
YWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
KyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IHRoZSBpbmNvbnNpc3RlbnQgZGF0YWJhc2UgZmls
ZXMgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeQogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1bmRs
ZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIkluZGV4VXBncmFkZSIgd2l0aEV4dGVuc2lv
bjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVj
dFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQppbmRleCBmZmE1YTc4Nzhh
NDczMmI4ZWMyNDVjOTA1M2ZkMTdlZTU5NTZmYTNkLi40MDNlMGZmYTgyMTIzNDUxYzQ2NmZlZWNj
MzI0ZjljNmU3NjFkNDNkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRv
VjIubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1w
b3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5o
PgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBA
IFRFU1QoSW5kZXhlZERCLCBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMikKICAgICBSZXRh
aW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tX
S1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9u
IHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5n
ZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnBy
b2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAg
Ly8gQ29weSBkYXRhYmFzZSBmaWxlcyB3aXRoIG9sZCBPYmplY3RTdG9yZUluZm8gc2NoZW1hIHRv
IHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkuCiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1h
aW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZSIgd2l0
aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3Vy
Y2VzIl07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KaW5kZXggNjg3
NDUyOWViYmYzNzg1MThkOTNlMGEwODIxZjYzMDEyY2ZhNmQ1Zi4uNzMwNzdlY2RmZDM2NWI1Mjkw
NTNkNDdjYmEyYTE0ZWQwNTFlZDZlYSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9j
ZXNzS2lsbC5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bv
b2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4K
KyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC05Miw3ICs5Myw3IEBAIFRFU1Qo
SW5kZXhlZERCLCBEYXRhYmFzZVByb2Nlc3NLaWxsKQogICAgICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgICAgIGlmICgha2lsbGVkREJQ
cm9jZXNzICYmIG9wZW5SZXF1ZXN0VXBncmFkZU5lZWRlZCkgewogICAgICAgICAgICAga2lsbGVk
REJQcm9jZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nl
c3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgICAgICAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAg
ICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0KaW5kZXggN2Y2MjY0
NWQ5OTYwZWRlOTYwYzAwMWMyNzJiNjUwMzkzOTAxMTYzMi4uNmY2N2RjMjdlZGMzZDI3NDViMTcw
ZTQ4MmJjZDkwZTg0OTRjYjk1YSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0KQEAgLTMy
LDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KICNp
bXBvcnQgPHd0Zi9EZXF1ZS5oPgpAQCAtNjksNyArNzAsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5k
ZXhlZERCTXVsdGlQcm9jZXNzKQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9u
PiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2Nd
IGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRT
Y3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwog
Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3
ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQ
ZXJzaXN0ZW5jZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5k
ZXhlZERCUGVyc2lzdGVuY2UubW0KaW5kZXggYjMyY2U0YTVmNzM4NjNhZWRkY2I5MTkwYjViNDM3
MGUzNzQ0M2I1ZS4uZDYyMjAzMjJlNDc4ZDFkYWM3OGYwNjk2N2MzYjY0M2JmZDYyZjliZiAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQ
ZXJzaXN0ZW5jZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCkBAIC03OCw3ICs3OCw3IEBAIFRFU1QoSW5kZXhlZERC
LCBJbmRleGVkREJQZXJzaXN0ZW5jZSkKICAgICB3ZWJWaWV3ID0gbmlsOwogCiAgICAgLy8gVGVy
bWluYXRlIHRoZSBuZXR3b3JrIHByb2Nlc3MKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8v
IE1ha2UgYSBuZXcgd2ViIHZpZXcgdG8gZmluaXNoIHRoZSB0ZXN0CiAgICAgd2ViVmlldyA9IGFk
b3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4
MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CkBAIC0yNjgsNyAr
MjY4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlRoaXJkUGFydHlGcmFtZUhhc0FjY2Vz
cykKIAogICAgIHdlYlZpZXcgPSBuaWw7CiAgICAgc2Vjb25kV2ViVmlldyA9IG5pbDsKLSAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIFRoaXJkLXBhcnR5IElEQiBzdG9yYWdlIGlzIHN0b3Jl
ZCBpbiB0aGUgbWVtb3J5IG9mIG5ldHdvcmsgcHJvY2Vzcy4KICAgICBhdXRvIHRoaXJkV2ViVmll
dyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CkBAIC0z
ODUsNyArMzg1LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlRoaXJkUGFydHlXb3JrZXJI
YXNBY2Nlc3MpCiAKICAgICB3ZWJWaWV3ID0gbmlsOwogICAgIHNlY29uZFdlYlZpZXcgPSBuaWw7
Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHRoaXJkV2ViVmlldyA9IGFkb3B0TlMo
W1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYw
MCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgbG9hZFRlc3RQYWdl
SW5XZWJWaWV3KHRoaXJkV2ViVmlldy5nZXQoKSwgQCJkYXRhYmFzZSBpcyBjcmVhdGVkIik7CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QlN1c3BlbmRJbW1pbmVudGx5Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbQppbmRleCA4ZWM2NWYwYTNiYTkzNzM2
ZmRiNGY5ZGRmZWY3NWNlNjAwMDVmZDBkLi41MTBiMjRmNTY5ZDIyYmQ0MGE3YWRiZTI1ZWNmZDBl
Y2ZjOGFjNzI2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0KQEAgLTMy
LDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQv
V0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgog
I2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgpAQCAtODgsOCArODksOCBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhl
ZERCU3VzcGVuZEltbWluZW50bHkpCiAKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJDb250
aW51ZSIpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3
b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0
KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1
c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0
b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgcnVuVGVzdEFuZENoZWNr
UmVzdWx0KEAiRXhwZWN0ZWQgQWJvcnQgRm9yIFN1c3BlbnNpb24iKTsKICAgICBydW5UZXN0QW5k
Q2hlY2tSZXN1bHQoQCJFeHBlY3RlZCBTdWNjZXNzIEFmdGVyIFJlc3VtZSIpOwpAQCAtMTU4LDgg
KzE1OSw4IEBAIFRFU1QoSW5kZXhlZERCLCBTdXNwZW5kSW1taW5lbnRseUZvclRoaXJkUGFydHlE
YXRhYmFzZXMpCiAgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6bWFpbkZyYW1lU3RyaW5nIGJh
c2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vd2Via2l0Lm9yZyJdXTsKICAgICBy
dW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJkYXRhYmFzZSBpcyBjcmVhdGVkIik7CiAKLSAgICBbY29u
ZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5XTsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2Vu
ZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJz
aXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwor
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJv
Y2Vzc0RpZFJlc3VtZV07CiAKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJ0cmFuc2FjdGlv
biBpcyBjb21wbGV0ZWQiKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0KaW5kZXggNTM2
NTQxZTNiMGU1Y2RhM2EzYjU1MWMxZTgxZTk2M2Y1OTJhZWIyZi4uZTdiOTkyMjhjZTg3NmU0NDdl
NjQ3ODJlZjlkODdmMjVhZGM5YjlmYSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0KQEAg
LTk1LDcgKzk1LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlRlbXBGaWxlU2l6ZSkKIAog
ICAgIC8vIFRlcm1pbmF0ZSBuZXR3b3JrIHByb2Nlc3MgdG8ga2VlcCBXQUwgb24gZGlzay4KICAg
ICB3ZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0
ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgRVhQRUNUX1RSVUUo
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOndhbEZpbGVQ
YXRoLmdldCgpLnBhdGhdKTsKICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBmaWxlQXR0cmli
dXRlcyA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gYXR0cmlidXRlc09mSXRlbUF0
UGF0aDp3YWxGaWxlUGF0aC5nZXQoKS5wYXRoIGVycm9yOm5pbF07CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNl
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQ
ZXJzaXN0ZW5jZS5tbQppbmRleCA0MTMzZWU3YjNkYWU0M2VjMjA0OWNmZmMwNjNjMGU0MjljMTdj
NWVmLi41Zjc5MTkwOTQzYzc3MWU5ZDllNDQyYTBkYTI2NmZmOWEwM2JhMmYyIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNp
c3RlbmNlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9j
YWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktp
dC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dl
YlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2VicGFnZVBy
ZWZlcmVuY2VzUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQ
cm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVT
aGVldC5oPgpAQCAtMTA5LDcgKzExMCw3IEBAIFRFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQ
cm9jZXNzQ3Jhc2hlcykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2Ny
aXB0TWVzc2FnZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAic2Vzc2lvbjpzdG9yYWdlIiwgW2xh
c3RTY3JpcHRNZXNzYWdlIGJvZHldKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nl
c3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0
KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgcmVj
ZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwpAQCAtMTYyLDcgKzE2Myw3IEBAIFRFU1QoV0tXZWJW
aWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzU3VzcGVuZHMpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAgIEVYUEVDVF9XS19TVFJFUShAInZh
bHVlIiwgW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHldKTsKIAotICAgIFtwcm9jZXNzUG9vbC5nZXQo
KSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHldOwogCiAgICAgcmVhZHlUb0NvbnRpbnVlID0gZmFsc2U7CiAgICAgW3dl
YlZpZXcxIGV2YWx1YXRlSmF2YVNjcmlwdDpAIndpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgn
a2V5JywgJ25ld1ZhbHVlJykiIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQsIE5TRXJyb3IgKikgewpA
QCAtMTc3LDcgKzE3OCw3IEBAIFRFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzU3Vz
cGVuZHMpCiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWFkeVRvQ29u
dGludWUpOwogICAgIAotICAgIFtwcm9jZXNzUG9vbC5nZXQoKSBfc2VuZE5ldHdvcmtQcm9jZXNz
RGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9z
ZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdl
ID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1l
c3NhZ2UpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9OZXR3b3JrUHJvY2Vzcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTmV0d29ya1Byb2Nlc3MubW0KaW5kZXggZTYwZjg4MDI1ZDA5Mzc4OWY2OTU2MGQ5YjkyYjI4
MmYwNzEzMGE4ZC4uMGUyMWY5MDk1MDAxNGY2YzQ5MGIwZWI4ZTQ2MWVjNGJhODUwYmI4MSAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJv
Y2Vzcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdv
cmtQcm9jZXNzLm1tCkBAIC0yOCw3ICsyOCw3IEBACiAjaW1wb3J0ICJIVFRQU2VydmVyLmgiCiAj
aW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVdGlsaXRpZXMuaCIKLSNpbXBvcnQg
PFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgpAQCAtMzcsMTQgKzM3LDE0
IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc0VudGl0bGVtZW50cykKIHsKICAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOltbW1dLV2ViVmlld0NvbmZp
Z3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXV0pOwogICAgIFt3ZWJWaWV3IHN5bmNo
cm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBsZSJdOwotICAgIFdLUHJvY2Vzc1Bvb2wg
KnBvb2wgPSBbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbDsKLSAgICBib29sIGhh
c0VudGl0bGVtZW50ID0gW3Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0
aW5nOkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0TmV0d29ya2luZ1NhbmRib3gi
XTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmUgKnN0b3JlID0gW3dlYlZpZXcgY29uZmlndXJhdGlv
bl0ud2Vic2l0ZURhdGFTdG9yZTsKKyAgICBib29sIGhhc0VudGl0bGVtZW50ID0gW3N0b3JlIF9u
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAImNvbS5hcHBsZS5yb290bGVz
cy5zdG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94Il07CiAjaWYgUExBVEZPUk0oTUFDKSAm
JiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogICAgIEVYUEVDVF9UUlVFKGhhc0VudGl0bGVtZW50
KTsKICNlbHNlCiAgICAgRVhQRUNUX0ZBTFNFKGhhc0VudGl0bGVtZW50KTsKICNlbmRpZgotICAg
IEVYUEVDVF9GQUxTRShbcG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rp
bmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJdKTsKKyAgICBFWFBFQ1RfRkFMU0UoW3N0b3JlIF9uZXR3
b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVyZSBjYXNlIl0p
OwogfQogCiBURVNUKFdlYktpdCwgSFRUUFJlZmVyZXIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0
ZW50RGF0YVN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9O
ZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQppbmRleCA2MDk4ZThk
YWQyNTJlNTllYzQ5MTI1MGI0MjE2ZDNjZDA5MzZlOGY3Li4yZjhhMmUzM2ZlODcwM2JhYjJkOGUw
NTEwODMyYmVjZDlkNDg5MzRiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nl
c3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGlj
IHZvaWQgY2hlY2tSZWNvdmVyeUFmdGVyQ3Jhc2goV0tXZWJzaXRlRGF0YVN0b3JlICpkYXRhU3Rv
cmUpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFs
c2U7CiAKLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURh
dGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1
ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6c2ltcGxlMl1dOwogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5t
bQppbmRleCA5NWRjOWQ5OGRmMTNiMDcwNWUwODE3ZDA1ODcyNjUxMjBjMTg4ZDIzLi5kZjMyMGQ2
NGRhZGJkZDFlZTI4M2Y4NjVjMTQ0MjNmM2FjNTU2NGJmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5h
dmlnYXRpb24ubW0KQEAgLTUzODUsNyArNTM4NSw3IEBAIFRFU1QoUHJvY2Vzc1N3YXAsIFVzZVBy
ZXdhcm1lZFByb2Nlc3NBZnRlclRlcm1pbmF0aW5nTmV0d29ya1Byb2Nlc3MpCiAKICAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFtwcm9jZXNzUG9vbCBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHdl
YlZpZXcyID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOndlYlZpZXdDb25maWd1cmF0aW9uLmdl
dCgpXSk7CiAgICAgW3dlYlZpZXcyIHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQo
KV07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KaW5kZXggMGUxMGMzNGVlYzgyYzZmNjU5
MmJiN2M0Mjc0ZDBlNDU1ZWFmMTFlOC4uYTNhYmEyMzFhOTNiM2Q1ZjAwYTE5M2M0N2MyNzY3ODY0
YjM1MDU1YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQpAQCAtNzE5LDcgKzcxOSw3
IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTmV0d29ya1Byb2Nlc3NSZXN0YXJ0KQog
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246
Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkBAIC03NTIsNyArNzUyLDcgQEAgVEVTVChSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLCBOZXR3b3JrUHJvY2Vzc1Jlc3RhcnQpCiAKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnBy
b2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAg
YXV0byB3ZWJWaWV3MyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdl
dCgpXSk7CiAKQEAgLTE1NTgsMTAgKzE1NTgsOCBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MsIE1pZ3JhdGVEYXRhRnJvbU1pc3NpbmdUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0U2FtZVNpdAog
CiBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5v
UHJvY2Vzc1Bvb2wpCiB7CisgICAgTlNVUkwgKml0cFJvb3RVUkwgPSBbTlNVUkwgZmlsZVVSTFdp
dGhQYXRoOltOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDpAIkNhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2xUZXN0Il0gaXNEaXJl
Y3Rvcnk6WUVTXTsKICAgICBhdXRvIGRlZmF1bHRGaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2Vy
IGRlZmF1bHRNYW5hZ2VyXTsKLSAgICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAq
ZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRp
b24gbmV3XSBhdXRvcmVsZWFzZV07Ci0gICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRl
RGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3Vy
YXRpb25dIGF1dG9yZWxlYXNlXTsKLSAgICBOU1VSTCAqaXRwUm9vdFVSTCA9IFtbZGF0YVN0b3Jl
IF9jb25maWd1cmF0aW9uXSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeV07CiAgICAg
TlNVUkwgKmZpbGVVUkwgPSBbaXRwUm9vdFVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6
QCJvYnNlcnZhdGlvbnMuZGIiXTsKICAgICBbZGVmYXVsdEZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1B
dFBhdGg6aXRwUm9vdFVSTC5wYXRoIGVycm9yOm5pbF07CiAgICAgRVhQRUNUX0ZBTFNFKFtkZWZh
dWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDppdHBSb290VVJMLnBhdGhdKTsKQEAgLTE1
NzIsNiArMTU3MCwxMCBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0Rh
dGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2wpCiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1bHRGaWxl
TWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOm5ld0ZpbGVVUkwucGF0aF0pOwogICAgIFtkZWZhdWx0
RmlsZU1hbmFnZXIgY29weUl0ZW1BdFBhdGg6bmV3RmlsZVVSTC5wYXRoIHRvUGF0aDpmaWxlVVJM
LnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZp
bGVFeGlzdHNBdFBhdGg6ZmlsZVVSTC5wYXRoXSk7CisKKyAgICBfV0tXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFT
dG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgZGF0YVN0b3JlQ29uZmln
dXJhdGlvbi5fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IGl0cFJvb3RVUkw7Cisg
ICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdp
dGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKICAg
ICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZRVNdOwogCiAg
ICAgc3RhdGljIGJvb2wgZG9uZUZsYWcgPSBmYWxzZTsKQEAgLTE2MzMsMTIgKzE2MzUsMTIgQEAg
VEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBTdG9yZVN1c3BlbnNpb24pCiAgICAgW3dlYlZp
ZXcyIF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKIAogICAgIGRvbmVGbGFnID0g
ZmFsc2U7Ci0gICAgW3NoYXJlZFByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJl
VG9TdXNwZW5kOl57CisgICAgW2RhdGFTdG9yZTEgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVU
b1N1c3BlbmQ6XnsKICAgICAgICAgZG9uZUZsYWcgPSB0cnVlOwogICAgIH1dOwogICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcpOwogCi0gICAgW3NoYXJlZFByb2Nlc3NQb29s
IF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtkYXRhU3RvcmUxIF9zZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogfQogCiBAaW50ZXJmYWNlIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTY2hlbWVIYW5kbGVyIDogTlNPYmplY3QgPFdLVVJMU2NoZW1lSGFuZGxlcj4KZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtl
ckJhc2ljLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNl
V29ya2VyQmFzaWMubW0KaW5kZXggMzRhNGY1YzUzOGI5YjBlOWZjYjA1MDcyYjE3MDI4OGU5ZTRl
OWY4Zi4uMmY4ZTM0ZGJhNmRhNDcyMzU2NTVmZjBkYjJhZGNhMWJmOGM1NjcyMCAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFz
aWMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNl
V29ya2VyQmFzaWMubW0KQEAgLTU1OCw3ICs1NTgsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBV
c2VyQWdlbnRPdmVycmlkZSkKIAogICAgIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogCi0gICAgbWVzc2FnZUhhbmRsZXIgPSBh
ZG9wdE5TKFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhFeHBlY3Rl
ZE1lc3NhZ2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBCYXIgQ3VzdG9tIFVzZXJBZ2VudCJdKTsK
KyAgICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5kbGVy
IGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6IEZv
byBDdXN0b20gVXNlckFnZW50Il0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENv
bnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgpIG5h
bWU6QCJzdyJdOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uLmdldCgpXSk7CkBAIC02MzMsOCArNjMzLDYgQEAgVEVTVChTZXJ2aWNlV29ya2Vy
cywgQ2FjaGVTdG9yYWdlUmVzdG9yZUZyb21EaXNrKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwogCi0gICAgW1dLV2Vic2l0ZURhdGFTdG9y
ZSBfZGVsZXRlRGVmYXVsdERhdGFTdG9yZUZvclRlc3RpbmddOwotCiAgICAgU2VydmljZVdvcmtl
clRDUFNlcnZlciBzZXJ2ZXIoewogICAgICAgICB7ICJ0ZXh0L2h0bWwiLCBtYWluQ2FjaGVTdG9y
YWdlQnl0ZXMgfQogICAgIH0sIHsKQEAgLTk4Miw2ICs5ODAsNyBAQCBURVNUKFNlcnZpY2VXb3Jr
ZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9uKQogCiAgICAgUmV0YWluUHRyPFdLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIHNldENvbmZpZ3VyYXRpb25JbmplY3RlZEJ1
bmRsZVBhdGgoY29uZmlndXJhdGlvbi5nZXQoKSk7CisgICAgUmV0YWluUHRyPFdLUHJvY2Vzc1Bv
b2w+IG9yaWdpbmFsUHJvY2Vzc1Bvb2wgPSBjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29s
OwogCiAgICAgZG9uZSA9IGZhbHNlOwogCkBAIC0xMDM1LDcgKzEwMzQsNyBAQCBURVNUKFNlcnZp
Y2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9uKQogICAgIGRvbmUgPSBmYWxz
ZTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGxvYWRpbmcgdGhlIHNpbXBsZSBwYWdlIGRpZCBu
b3Qgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCi0gICAgRVhQRUNUX0VRKDB1LCB3
ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9u
LnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKIAogICAgIHdlYlZpZXcg
PSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwg
MCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246bmV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAg
IEVYUEVDVF9FUSgydSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl93
ZWJQcm9jZXNzQ291bnRJZ25vcmluZ1ByZXdhcm1lZCk7CkBAIC0xMDQzLDkgKzEwNDIsOCBAQCBU
RVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9uKQogICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwogCi0gICAg
Ly8gTWFrZSBzdXJlIHRoYXQgbG9hZGluZyB0aGlzIHBhZ2UgZGlkIHN0YXJ0IHRoZSBzZXJ2aWNl
IHdvcmtlciBwcm9jZXNzLgogICAgIEVYUEVDVF9FUSgxdSwgd2ViVmlldy5nZXQoKS5jb25maWd1
cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKLQorICAgIEVY
UEVDVF9FUSgxdSwgb3JpZ2luYWxQcm9jZXNzUG9vbC5nZXQoKS5fc2VydmljZVdvcmtlclByb2Nl
c3NDb3VudCk7CiAgICAgW1tjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVdIHJlbW92ZURh
dGFPZlR5cGVzOltXS1dlYnNpdGVEYXRhU3RvcmUgYWxsV2Vic2l0ZURhdGFUeXBlc10gbW9kaWZp
ZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQYXN0XSBjb21wbGV0aW9uSGFuZGxlcjpeKCkgewogICAg
ICAgICBkb25lID0gdHJ1ZTsKICAgICB9XTsKQEAgLTE2MTgsMjEgKzE2MTYsMzUgQEAgc3RhdGlj
IHNpemVfdCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sIHVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MsIGIKICAgICByZXR1cm4gd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9u
LnByb2Nlc3NQb29sLl93ZWJQcm9jZXNzQ291bnRJZ25vcmluZ1ByZXdhcm1lZDsKIH0KIAotVEVT
VChTZXJ2aWNlV29ya2VycywgT3V0T2ZBbmRJblByb2Nlc3NTZXJ2aWNlV29ya2VyKQorVEVTVChT
ZXJ2aWNlV29ya2VycywgT3V0T2ZQcm9jZXNzU2VydmljZVdvcmtlcikKIHsKICAgICBib29sIHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOwogICAgIGJvb2wgZmlyc3RMb2Fk
QWJvdXRCbGFuayA9IHRydWU7CiAKICAgICBFWFBFQ1RfRVEoMXUsIGxhdW5jaFNlcnZpY2VXb3Jr
ZXJQcm9jZXNzKCF1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJv
dXRCbGFuaykpOworfQorCitURVNUKFNlcnZpY2VXb3JrZXJzLCBJblByb2Nlc3NTZXJ2aWNlV29y
a2VyKQoreworICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7
CisgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKKwogICAgIEVYUEVDVF9FUSgy
dSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcywgIWZpcnN0TG9hZEFib3V0QmxhbmspKTsKIH0KIAotVEVTVChTZXJ2aWNlV29ya2Vycywg
TG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaFNlcnZpY2VXb3JrZXIpCitURVNU
KFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoT3V0
T2ZQcm9jZXNzU2VydmljZVdvcmtlcikKIHsKICAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MgPSB0cnVlOwogICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7
CiAKICAgICBFWFBFQ1RfRVEoMXUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKCF1c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RF
U1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hJ
blByb2Nlc3NTZXJ2aWNlV29ya2VyKQoreworICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcyA9IHRydWU7CisgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsK
KwogICAgIEVYUEVDVF9FUSgydSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgZmlyc3RMb2FkQWJvdXRCbGFuaykpOwogfQogCkBAIC0x
OTQ0LDExICsxOTU2LDExIEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFN1c3BlbmROZXR3b3JrUHJv
Y2VzcykKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0g
ZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAgICBbIHdlYlZpZXcuZ2V0KCku
Y29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5XTsKKyAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRh
U3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CiAKICAgICBF
WFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBh
dGg6c3dEQlBhdGgucGF0aF0pOwogCi0gICAgWyB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24u
cHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW3dlYlZpZXcu
Z2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWVdOwogCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6c2VydmVyLnJlcXVlc3QoKV07
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0gYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1t
CmluZGV4IGEzNWYwNTM1MGFhYjRiNDJmMzZjNDZhZWNkZWVlZTZjZTU0NGVmODYuLjMzNzYwOTJh
MTk1YjUxMmRhNjdjNDk2ZTQ1MjE3YjkxNGZlMmE1NzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQpA
QCAtNDc5LDggKzQ3OSw2IEBAIHN0YXRpYyBib29sIGZpbmlzaGVkOwogfQogQGVuZAogCi0vLyBG
SVhNRTogb24gaU9TLCBVSSBwcm9jZXNzIHNob3VsZCBiZSB1c2luZyB0aGUgc2FtZSBjb29raWUg
ZmlsZSBhcyB0aGUgbmV0d29yayBwcm9jZXNzIGZvciBkZWZhdWx0IHNlc3Npb24uCi0jaWYgUExB
VEZPUk0oTUFDKQogZW51bSBjbGFzcyBTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyB7IE5v
LCBZZXMgfTsKIHZvaWQgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hv
dWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcp
CiB7CkBAIC01ODksMjAgKzU4Nyw2NiBAQCBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0
UHJvY2Vzc1Bvb2xXaXRoUHJld2FybWluZykKICAgICBydW5XS0hUVFBDb29raWVTdG9yZVdpdGhv
dXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZzo6WWVzKTsKIH0KIAot
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQogQGludGVyZmFjZSBDaGVja1Nlc3Npb25Db29raWVV
SURlbGVnYXRlIDogTlNPYmplY3QgPFdLVUlEZWxlZ2F0ZT4KKy0gKE5TU3RyaW5nICopYWxlcnRD
b29raWVIVE1MOworLSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZTsKIEBlbmQKIAotQGltcGxl
bWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUKK0BpbXBsZW1lbnRhdGlvbiBD
aGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9t
ZXNzYWdlOworfQorCiAtICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2
YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGluaXRpYXRl
ZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4p
KHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgRVhQRUNUX1NUUkVRKCJTZXNzaW9uQ29v
a2llTmFtZT1Db29raWVWYWx1ZSIsIG1lc3NhZ2UuVVRGOFN0cmluZyk7CisgICAgX21lc3NhZ2Ug
PSBtZXNzYWdlOwogICAgIGZpbmlzaGVkID0gdHJ1ZTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwogfQorCistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNzYWdlCit7CisgICAgd2hpbGUgKCFfbWVz
c2FnZSkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAgICBy
ZXR1cm4gX21lc3NhZ2UuYXV0b3JlbGVhc2UoKTsKK30KKworLSAoTlNTdHJpbmcgKilhbGVydENv
b2tpZUhUTUwKK3sKKyAgICByZXR1cm4gQCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1lbnQu
Y29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkg
KyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgpOyBh
bGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Cit9CisKIEBlbmQKIAorVEVTVChX
ZWJLaXQsIFdLSFRUUENvb2tpZVN0b3JlTXVsdGlwbGVWaWV3cykKK3sKKyAgICBUZXN0V0tXZWJW
aWV3ICp3ZWJWaWV3MSA9IFtbVGVzdFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBb
d2ViVmlldzEgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAic3RhcnQgbmV0d29yayBwcm9j
ZXNzIl07CisKKyAgICBOU0hUVFBDb29raWUgKnNlc3Npb25Db29raWUgPSBbTlNIVFRQQ29va2ll
IGNvb2tpZVdpdGhQcm9wZXJ0aWVzOkB7CisgICAgICAgIE5TSFRUUENvb2tpZVBhdGg6IEAiLyIs
CisgICAgICAgIE5TSFRUUENvb2tpZU5hbWU6IEAiU2Vzc2lvbkNvb2tpZU5hbWUiLAorICAgICAg
ICBOU0hUVFBDb29raWVWYWx1ZTogQCJDb29raWVWYWx1ZSIsCisgICAgICAgIE5TSFRUUENvb2tp
ZURvbWFpbjogQCIxMjcuMC4wLjEiLAorICAgIH1dOworCisgICAgX19ibG9jayBib29sIHNldENv
b2tpZURvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldzEuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0
YVN0b3JlLmh0dHBDb29raWVTdG9yZSBzZXRDb29raWU6c2Vzc2lvbkNvb2tpZSBjb21wbGV0aW9u
SGFuZGxlcjpeeworICAgICAgICBzZXRDb29raWVEb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnNldENvb2tpZURvbmUpOworCisgICAgYXV0byBkZWxl
Z2F0ZSA9IGFkb3B0TlMoW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgbmV3XSk7CisgICAg
W3dlYlZpZXcxIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcx
IGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJM
IFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJF
UShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFs
dWUiKTsKKworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcyID0gW1tUZXN0V0tXZWJWaWV3IG5l
d10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MiBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdl
dCgpXTsKKyAgICBbd2ViVmlldzIgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2ll
SFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07
CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9u
Q29va2llTmFtZT1Db29raWVWYWx1ZSIpOworfQorCiBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBX
aXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQogewogICAgIFJldGFpblB0cjxXS1dl
YnNpdGVEYXRhU3RvcmU+IGVwaGVtZXJhbFN0b3JlV2l0aENvb2tpZXMgPSBbV0tXZWJzaXRlRGF0
YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdOwpAQCAtNjI3LDkgKzY3MSw4IEBAIFRFU1Qo
V0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Npb24pCiAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7CiAgICAgZmluaXNoZWQgPSBm
YWxzZTsKICAgICAKLSAgICBOU1N0cmluZyAqYWxlcnRDb29raWVIVE1MID0gQCI8c2NyaXB0PnZh
ciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBp
IDwgY29va2llcy5sZW5ndGg7IGkgKyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJpbSgp
OyB9IGNvb2tpZXMuc29ydCgpOyBhbGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7
Ci0gICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6YWxlcnRDb29raWVIVE1MIGJhc2VVUkw6W05T
VVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOwotICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOltk
ZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJo
dHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZv
ck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKIH0KIAogc3RhdGlj
IGJvb2wgYXJlQ29va2llc0VxdWFsKE5TSFRUUENvb2tpZSAqZmlyc3QsIE5TSFRUUENvb2tpZSAq
c2Vjb25kKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbQppbmRleCBhYzdkZTQxNTEy
YzQ1MTM4ZWM1ZTRjMDllNTExNWQxNmNkMjNiMjJlLi5hYzE2NTM1ZGZkOTM5OTlkMmVjNTBkY2Zk
NzFjM2E1NmQxMTNlYzdhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbQpAQCAt
MzUsNiArMzUsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVE
YXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0xNTIsNyArMTUzLDcg
QEAgVEVTVChVUkxTY2hlbWVIYW5kbGVyLCBMZWFrczMpCiAKICAgICBydW5VbnRpbFRhc2tzSW5G
bGlnaHQoMik7CiAKLSAgICBbd2ViVmlldzEuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9v
bCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3MS5nZXQoKS5jb25maWd1
cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAg
IHJ1blVudGlsVGFza3NJbkZsaWdodCgwKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3Vz
dG9tUGF0aHMubW0KaW5kZXggOTJjZjNhNjE5OGE1YjlkMTQ1NDQ5MDVkYjllOTQ4ZjExYzcyNTZk
ZS4uM2IxMzFmN2NiODYwYWU4MDFiOTIzNTU1M2Q1MGZiN2ExNmMyNzRkMSAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3Vz
dG9tUGF0aHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9X
ZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0KQEAgLTI0NCw3ICsyNDQsNyBAQCBzdGF0aWMg
dm9pZCBydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMoU2hvdWxkRW5hYmxlUHJvY2Vzc1By
ZXdhcm1pbmcgc2hvdWxkRQogICAgIC8vIE5vdywgd2l0aCBicmFuZCBuZXcgV0tXZWJzaXRlRGF0
YVN0b3JlcyBwb2ludGluZyBhdCB0aGUgc2FtZSBjdXN0b20gY29va2llIHN0b3JhZ2UgbG9jYXRp
b24sCiAgICAgLy8gaW4gbmV3bHkgZmlyZWQgdXAgTmV0d29ya1Byb2Nlc3NlcywgdmVyaWZ5IHRo
YXQgdGhlIGZldGNoIGFuZCBkZWxldGUgQVBJcyB3b3JrIGFzIGV4cGVjdGVkLgogCi0gICAgW3By
b2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2RhdGFTdG9yZSBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIGF1dG8gbmV3Q3VzdG9tRGF0YVN0b3JlID0gYWRv
cHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjp3
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKV0pOwogCiAgICAgW25ld0N1c3RvbURh
dGFTdG9yZSBmZXRjaERhdGFSZWNvcmRzT2ZUeXBlczpbTlNTZXQgc2V0V2l0aE9iamVjdHM6V0tX
ZWJzaXRlRGF0YVR5cGVDb29raWVzLCBuaWxdIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNBcnJheTxX
S1dlYnNpdGVEYXRhUmVjb3JkICo+ICogcmVjb3JkcykgewpAQCAtMjU1LDcgKzI1NSw3IEBAIHN0
YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocyhTaG91bGRFbmFibGVQcm9j
ZXNzUHJld2FybWluZyBzaG91bGRFCiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwog
Ci0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2RhdGFT
dG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIG5ld0N1c3RvbURhdGFTdG9yZSA9
IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRp
b246d2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIFtuZXdDdXN0
b21EYXRhU3RvcmUgcmVtb3ZlRGF0YU9mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldLV2Vi
c2l0ZURhdGFUeXBlQ29va2llcywgbmlsXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBh
c3RdIGNvbXBsZXRpb25IYW5kbGVyOl4gewpAQCAtMzg1LDExICszODUsMTAgQEAgVEVTVChXZWJL
aXQsIEN1c3RvbURhdGFTdG9yZURlc3Ryb3lXaGlsZUZldGNoaW5nTmV0d29ya1Byb2Nlc3NEYXRh
KQogCiAgICAgICAgIC8vIFRlcm1pbmF0ZSB0aGUgbmV0d29yayBwcm9jZXNzIHdoaWxlIGEgcXVl
cnkgaXMgcGVuZGluZy4KICAgICAgICAgYXV0byogYWxsUHJvY2Vzc1Bvb2xzID0gW1dLUHJvY2Vz
c1Bvb2wgX2FsbFByb2Nlc3NQb29sc0ZvclRlc3RpbmddOwotICAgICAgICBBU1NFUlRfRVEoMVUs
IFthbGxQcm9jZXNzUG9vbHMgY291bnRdKTsKLSAgICAgICAgYXV0byogcHJvY2Vzc1Bvb2wgPSBh
bGxQcm9jZXNzUG9vbHNbMF07Ci0gICAgICAgIHdoaWxlICghW3Byb2Nlc3NQb29sIF9uZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXJdKQorICAgICAgICBBU1NFUlRfRVEoMFUsIFthbGxQcm9jZXNzUG9v
bHMgY291bnRdKTsKKyAgICAgICAgd2hpbGUgKCFbZGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXJdKQogICAgICAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c2xlZXAoMC4wMSk7
Ci0gICAgICAgIGtpbGwoW3Byb2Nlc3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCBT
SUdLSUxMKTsKKyAgICAgICAga2lsbChbZGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXJdLCBTSUdLSUxMKTsKICAgICAgICAgYWxsUHJvY2Vzc1Bvb2xzID0gbmlsOwogICAgICAgICBk
YXRhU3RvcmUgPSBuaWw7CiAgICAgfQpAQCAtNDY1LDcgKzQ2NCw5IEBAIFRFU1QoV2ViS2l0LCBB
bHRlcm5hdGl2ZVNlcnZpY2VzRGVmYXVsdERpcmVjdG9yeUNyZWF0aW9uKQogICAgIAogICAgIFtb
TlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldE9iamVjdDpbTlNOdW1iZXIg
bnVtYmVyV2l0aEJvb2w6WUVTXSBmb3JLZXk6a2V5XTsKIAotICAgIFRlc3RXS1dlYlZpZXcgKndl
YlZpZXcyID0gW1tbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAg
IFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1dLV2ViVmlld0NvbmZp
Z3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0
YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0
aW9uOltbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRv
cmVsZWFzZV1dIGF1dG9yZWxlYXNlXTsKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAs
IDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CiAgICAgW3dl
YlZpZXcyIHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IGF1eGlsaWFyeSBwcm9j
ZXNzZXMiIGJhc2VVUkw6bmlsXTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBk
ZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpkZWZhdWx0RGlyZWN0b3J5LnBhdGhdKTsK
QEAgLTUzOSw3ICs1NDAsNyBAQCBURVNUKFdlYktpdCwgRG9Mb2FkV2l0aE5vbkRlZmF1bHREYXRh
U3RvcmVBZnRlclRlcm1pbmF0aW5nTmV0d29ya1Byb2Nlc3MpCiAKICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQo
KS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3Q29u
ZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CiAKICAgICByZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVu
ZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpA
Imh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOwogICAgIFt3
ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwpAQCAtODU3LDcgKzg1OCw3IEBAIFRFU1QoV2Vi
S2l0LCBNZWRpYUNhY2hlKQogICAgIEVYUEVDVF9GQUxTRShlcnJvcik7CiAKICAgICBkb25lID0g
dHJ1ZTsKLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURh
dGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgW2ZpbGVNYW5hZ2VyIHJl
bW92ZUl0ZW1BdFBhdGg6cGF0aCBlcnJvcjomZXJyb3JdOwogICAgIEVYUEVDVF9GQUxTRShlcnJv
cik7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdE9iakMvQ3Vz
dG9tUHJvdG9jb2xzVGVzdC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2Jq
Qy9DdXN0b21Qcm90b2NvbHNUZXN0Lm1tCmluZGV4IDIyZTFhMGE5ZThlMjY4MDQ1ZTZiMTdjMzA2
YjAwMTRkNWJjOTEyNjguLjdiODQ3OGI1OTc5ZmE3NGI5Y2Q1OWQwNjJlYWRkMGQzYzUxNTFmZDcg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2JqQy9DdXN0b21Q
cm90b2NvbHNUZXN0Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2Jq
Qy9DdXN0b21Qcm90b2NvbHNUZXN0Lm1tCkBAIC0zNCw2ICszNCw4IEBACiAjaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKICNpbXBvcnQgPFdlYktpdC9XS0NvbnRleHRQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tQcm9jZXNzR3JvdXBQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tWaWV3
UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oPgogI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBzdGF0aWMgYm9vbCB0ZXN0RmluaXNoZWQ7CkBAIC03
Miw2ICs3NCw4IEBAIHN0YXRpYyBXS1Byb2Nlc3NHcm91cCAqcHJvY2Vzc0dyb3VwKCkKICAgICBy
ZXR1cm4gcHJvY2Vzc0dyb3VwOwogfQogCitzdGF0aWMgUmV0YWluUHRyPFdLVmlldz4gd2tWaWV3
OworCiBAaW50ZXJmYWNlIENsb3NlV2hpbGVTdGFydGluZ1Byb3RvY29sIDogVGVzdFByb3RvY29s
CiBAZW5kCiAKQEAgLTg5LDcgKzkzLDcgQEAgc3RhdGljIFdLUHJvY2Vzc0dyb3VwICpwcm9jZXNz
R3JvdXAoKQogICAgICAgICB9OwogICAgICAgICBXS0NvbnRleHRTZXRDbGllbnQoW3Byb2Nlc3NH
cm91cCgpIF9jb250ZXh0UmVmXSwgJmNsaWVudC5iYXNlKTsKIAotICAgICAgICBraWxsKFdLQ29u
dGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihbcHJvY2Vzc0dyb3VwKCkgX2NvbnRleHRS
ZWZdKSwgU0lHS0lMTCk7CisgICAgICAgIGtpbGwoV0tXZWJzaXRlRGF0YVN0b3JlR2V0TmV0d29y
a1Byb2Nlc3NJZGVudGlmaWVyKFdLUGFnZUdldFdlYnNpdGVEYXRhU3RvcmUoW3drVmlldyBwYWdl
UmVmXSkpLCBTSUdLSUxMKTsKICAgICAgICAgW3NlbGYuY2xpZW50IFVSTFByb3RvY29sOnNlbGYg
ZGlkRmFpbFdpdGhFcnJvcjpbTlNFcnJvciBlcnJvcldpdGhEb21haW46TlNDb2NvYUVycm9yRG9t
YWluIGNvZGU6MCB1c2VySW5mbzpuaWxdXTsKICAgICB9KTsKIH0KQEAgLTE0Miw3ICsxNDYsNyBA
QCBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiBzdGF0aWMgdm9pZCBydW5UZXN0KCkKIHsKICAg
ICBSZXRhaW5QdHI8V0tCcm93c2luZ0NvbnRleHRHcm91cD4gYnJvd3NpbmdDb250ZXh0R3JvdXAg
PSBhZG9wdE5TKFtbV0tCcm93c2luZ0NvbnRleHRHcm91cCBhbGxvY10gaW5pdFdpdGhJZGVudGlm
aWVyOkAiVGVzdElkZW50aWZpZXIiXSk7Ci0gICAgUmV0YWluUHRyPFdLVmlldz4gd2tWaWV3ID0g
YWRvcHROUyhbW1dLVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgw
MCwgNjAwKSBwcm9jZXNzR3JvdXA6cHJvY2Vzc0dyb3VwKCkgYnJvd3NpbmdDb250ZXh0R3JvdXA6
YnJvd3NpbmdDb250ZXh0R3JvdXAuZ2V0KCldKTsKKyAgICB3a1ZpZXcgPSBhZG9wdE5TKFtbV0tW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIHByb2Nl
c3NHcm91cDpwcm9jZXNzR3JvdXAoKSBicm93c2luZ0NvbnRleHRHcm91cDpicm93c2luZ0NvbnRl
eHRHcm91cC5nZXQoKV0pOwogICAgIFJldGFpblB0cjxDdXN0b21Qcm90b2NvbHNMb2FkRGVsZWdh
dGU+IGxvYWREZWxlZ2F0ZSA9IGFkb3B0TlMoW1tDdXN0b21Qcm90b2NvbHNMb2FkRGVsZWdhdGUg
YWxsb2NdIGluaXRdKTsKICAgICBbd2tWaWV3IGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJdLmxv
YWREZWxlZ2F0ZSA9IGxvYWREZWxlZ2F0ZS5nZXQoKTsKICAgICBbW3drVmlldyBicm93c2luZ0Nv
bnRleHRDb250cm9sbGVyXSBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJM
OltOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUA6Ly9y
ZWRpcmVjdD90ZXN0IiwgW1Rlc3RQcm90b2NvbCBzY2hlbWVdXV1dXTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggM2Y4NGVkNmEzYjU5YjljYWNlZDM4MTI4
NWRlMTJjNGE2NjhjYjgxMC4uMWI0MmQ4Yjc3NWQxMjY2OGU5ODkwMzA4YmMzYTdjZTcyZDY1Zjcw
NiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAgLTEwNjYs
OCArMTA2Niw2IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRW
YWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAKICAgICByZXNldFF1b3RhKCk7
CiAKLSAgICBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXJUZXN0aW5nKHBsYXRmb3JtQ29udGV4dCgpLCB0cnVlKTsKLQogICAgIFdLQ29udGV4dENsZWFy
Q3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5jb250ZXh0KCkpOwogCiAgICAgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpLCBmYWxzZSk7CkBA
IC0xMjQyLDcgKzEyNDAsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpmaW5kQW5kRHVtcFdlYktp
dFByb2Nlc3NJZGVudGlmaWVycygpCiAgICAgZHVtcFJlc3BvbnNlKG1ha2VTdHJpbmcoVGVzdENv
bnRyb2xsZXI6OndlYlByb2Nlc3NOYW1lKCksICI6ICIsCiAgICAgICAgIFdLUGFnZUdldFByb2Nl
c3NJZGVudGlmaWVyKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5w
YWdlKCkpLCAnXG4nLAogICAgICAgICBUZXN0Q29udHJvbGxlcjo6bmV0d29ya1Byb2Nlc3NOYW1l
KCksICI6ICIsCi0gICAgICAgIFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllciht
X2NvbnRleHQuZ2V0KCkpLCAnXG4nKSk7CisgICAgICAgIFdLV2Vic2l0ZURhdGFTdG9yZUdldE5l
dHdvcmtQcm9jZXNzSWRlbnRpZmllcih3ZWJzaXRlRGF0YVN0b3JlKCkpLCAnXG4nKSk7CiAjZWxz
ZQogICAgIGR1bXBSZXNwb25zZSgiXG4iX3MpOwogI2VuZGlmCkBAIC0yMzAyLDcgKzIzMDAsNyBA
QCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RDb250cm9sbGVyOjpnZXRJbmplY3RlZEJ1bmRs
ZUluaXRpYWxpemF0aW9uVXNlckRhdGEoKQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpuZXR3b3Jr
UHJvY2Vzc0RpZENyYXNoKCkKIHsKLSAgICBwaWRfdCBwaWQgPSBXS0NvbnRleHRHZXROZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIobV9jb250ZXh0LmdldCgpKTsKKyAgICBwaWRfdCBwaWQgPSBXS1dl
YnNpdGVEYXRhU3RvcmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIod2Vic2l0ZURhdGFTdG9y
ZSgpKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiNDUkFTSEVEIC0gJXMgKHBpZCAlbGQpXG4iLCBu
ZXR3b3JrUHJvY2Vzc05hbWUoKSwgc3RhdGljX2Nhc3Q8bG9uZz4ocGlkKSk7CiAgICAgZXhpdCgx
KTsKIH0KQEAgLTMxNDEsNyArMzEzOSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldElnbm9y
ZXNWaWV3cG9ydFNjYWxlTGltaXRzKGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pCiAKIHZv
aWQgVGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKLSAgICBXS0Nv
bnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgV0tX
ZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3Mod2Vic2l0ZURhdGFTdG9yZSgp
KTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdvcmtlcnMoKQpA
QCAtMzE3Miw5ICszMTcwLDggQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1DcmVhdGVPdGhlclBhZ2UoUGxhdGZvcm1XZWJWaWV3KiBwYXJlbnQKICAgICByZXR1cm4g
bmV3IFBsYXRmb3JtV2ViVmlldyhjb25maWd1cmF0aW9uLCBvcHRpb25zKTsKIH0KIAotV0tDb250
ZXh0UmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVm
IGNvbnRleHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29udGV4dENvbmZpZ3VyYXRpb24p
CitXS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0Nv
bnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZikKIHsKLSAgICBXS0Nv
bnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShjb250ZXh0LCBkZWZhdWx0V2Vic2l0ZURh
dGFTdG9yZSgpKTsKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409452</attachid>
            <date>2020-09-23 00:19:46 -0700</date>
            <delta_ts>2020-09-23 10:58:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200923001945.patch</filename>
            <type>text/plain</type>
            <size>342551</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjc0NjQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4NCBAQAorMjAyMC0wOS0yMiAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgTmV0d29y
a1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgZnJvbSBXZWJQcm9jZXNzUG9vbCB0byBXZWJzaXRlRGF0
YVN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTYwNDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIG1vdmVzIHRoZSB0aGluZ3Mgb24gV2ViUHJvY2Vzc1Bvb2wgYXNzb2NpYXRlZCB3
aXRoIE5ldHdvcmtQcm9jZXNzUHJveHkgb3duZXJzaGlwIGFuZCBtb3ZlcyB0aGVtCisgICAgICAg
IHRvIFdlYnNpdGVEYXRhU3RvcmUuICBJdCdzIHByZXR0eSBtZWNoYW5pY2FsLCBidXQgaXQgcmVh
Y2hlcyBpdHMgZmluZ2VycyBpbnRvIGEgbG90IG9mIHRoaW5ncy4gIFNvbWUgY29tbWVudHMKKyAg
ICAgICAgb24gaW50ZXJlc3RpbmcgcGFydHMgYXJlIGJlbG93LgorCisgICAgICAgIFdoeSBhbSBJ
IGRvaW5nIHRoaXM/ICBJJ20gZ2xhZCB5b3UgYXNrZWQuCisKKyAgICAgICAgV0tXZWJWaWV3IGhh
ZCBhIGZ1bmRhbWVudGFsIGNvb2tpZSBwcm9ibGVtIGJlZm9yZSB0aGlzIGNoYW5nZS4gIEl0IGhh
ZCBhIFdLV2Vic2l0ZURhdGFTdG9yZSB0aGF0IGNvdWxkIHBvaW50IHRvIGEgY29va2llIHN0b3Jl
IG9uIGRpc2sKKyAgICAgICAgdGhhdCBjb3VsZCBiZSB1c2VkIGluIG11bHRpcGxlIG5ldHdvcmsg
cHJvY2Vzc2VzIGF0IHRoZSBzYW1lIHRpbWUuICBUaGlzIGxlZCB0byBwcm9ibGVtcyB3aXRoIGNv
b2tpZXMgYmVpbmcgcmVjZWl2ZWQgb3ZlciB0aGUgbmV0d29yaworICAgICAgICBpbiB0aG9zZSBk
aWZmZXJlbnQgcHJvY2Vzc2VzIGJlaW5nIHVuYWJsZSB0byBiZSBzaGFyZWQgdW50aWwgdGhleSB3
ZXJlIHdyaXR0ZW4gdG8gZGlzaywgc29tZXRoaW5nIHRoYXQgZG9lcyBub3QgaGFwcGVuIGltbWVk
aWF0ZWx5LCBlc3BlY2lhbGx5CisgICAgICAgIG9uIGlPUy4gIFRoaXMgcHJvYmxlbSBpcyBldmVu
IHdvcnNlIHdpdGggc2Vzc2lvbiBjb29raWVzLCB3aGljaCBzaG91bGQgYmUga2VwdCBpbiBtZW1v
cnkgYW5kIG5ldmVyIGJlIHdyaXR0ZW4gdG8gZGlzay4gIFRob3NlIHByb2Nlc3NlcworICAgICAg
ICBkaWQgbm90IHVzZSBzaGFyZWQgbWVtb3J5IHRvIHNoYXJlIHRoZSBjb29raWVzLiAgVGhleSBq
dXN0IGRpZG4ndCBzaGFyZSB0aGVtLCB3aGljaCBsZWQgdG8gY29va2llIGluY29ycmVjdG5lc3Mu
ICBUaGlzIHdhcyB1bmZvcnR1bmF0ZWx5CisgICAgICAgIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRp
b24gaWYgeW91IGNhbGwgW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRdIG1vcmUgdGhhbiBvbmNlLCB3
aGljaCBtYW55IGRldmVsb3BlcnMgZG8uICBUaGVyZSB3YXMgYWxzbyBvY2Nhc2lvbmFsIGNvb2tp
ZQorICAgICAgICBjb3JydXB0aW9uIGFuZCBsb3NzIGZyb20gbXVsdGlwbGUgcHJvY2Vzc2VzIHdy
aXRpbmcgY29va2llcyB0byB0aGUgc2FtZSBmaWxlLiAgQWxsIHRoZXNlIHByb2JsZW1zIGNhbiBi
ZSB3b3JrZWQgYXJvdW5kIGJ5IGRvaW5nIHdoYXQgU2FmYXJpIGRvZXM6CisgICAgICAgIG1hbnVh
bGx5IHNldHRpbmcgdGhlIFdLUHJvY2Vzc1Bvb2wgb2YgYWxsIFdLV2ViVmlld0NvbmZpZ3VyYXRp
b25zIHRvIHRoZSBzYW1lIHByb2Nlc3MgcG9vbCB0byBvbmx5IHVzZSBvbmUgbmV0d29yayBwcm9j
ZXNzLiAgVGhpcyBpcyBub3QgaW50dWl0aXZlCisgICAgICAgIG9yIHdlbGwgZG9jdW1lbnRlZCwg
YW5kIGV2ZW4gdGhvdWdoIEkgaGF2ZSBzcGVudCB0aGUgbWFqb3JpdHkgb2YgV1dEQyBsYWJzIGZv
ciB0aGUgbGFzdCAzIHllYXJzIHRlbGxpbmcgZGV2ZWxvcGVycyB0byBkbyBpdCwgbW9zdCBkbyBu
b3QuCisgICAgICAgIFRoZSBkZWZhdWx0IGJlaGF2aW9yIHNob3VsZCBub3QgbGVhZCB0byBjb29r
aWUgaW5jb3JyZWN0bmVzcywgY29ycnVwdGlvbiwgb3IgbG9zcy4gIFRoaXMgYWNjb21wbGlzaGVz
IHRoYXQuCisKKyAgICAgICAgQSBiaWdnZXIgcHJvYmxlbSB0aGF0IGNhbid0IHJlYWxseSBiZSB3
b3JrZWQgYXJvdW5kIHdlbGwgaXMgd2hhdCB3ZSB3ZXJlIGRvaW5nIGluIG91ciBXS0hUVFBDb29r
aWVTdG9yZSBBUEkuICBNYW55IGRldmVsb3BlcnMgY2FsbCBzZXRDb29raWU6Y29tcGxldGlvbkhh
bmRsZXI6CisgICAgICAgIHRvICJsb2cgaW4iIHRoZSB1c2VyIGJ5IHNldHRpbmcgYSBjb29raWUs
IHRoZW4gaW4gdGhlIGNvbXBsZXRpb24gaGFuZGxlciwgdGhleSBvcGVuIGEgV0tXZWJWaWV3IHRv
IHRoZWlyIHBhZ2UgYW5kIGV4cGVjdCB0aGUgY29va2llIHRvIGJlIHNlbnQuICBCZWZvcmUgdGhp
cworICAgICAgICBjaGFuZ2UsIHdlIHdvdWxkIG5vdCBrbm93IHdoaWNoIHByb2Nlc3MgcG9vbCB0
byBzZXQgdGhlIGNvb2tpZSBpbiBzbyB3ZSB3b3VsZCBndWVzcy4gIElmIHRoZXJlIHdlcmUgbm8g
cHJvY2VzcyBwb29scywgd2Ugd291bGQgc3RhcnQgd3JpdGluZyB0byBkaXNrIGFuZCBob3BlCisg
ICAgICAgIGl0IHdyaXRlcyBmYXN0IGVub3VnaC4gIFdlIGNhbid0IHdhaXQgZm9yIGl0IHRvIGNv
bXBsZXRlIGJlY2F1c2UgaXQgY2F1c2VzIGhhbmdzIGxpa2UgcmRhcjovL3Byb2JsZW0vNjY5NjEw
NjYuICBUaGlzIHNvbHV0aW9uIGFsbG93cyB0byBzdGFydCB0aGUgbmV0d29yaworICAgICAgICBw
cm9jZXNzIG9mIHRoYXQgV2Vic2l0ZURhdGFTdG9yZSBhbmQgc2V0IHRoZSBjb29raWUgaW4gdGhh
dCBwcm9jZXNzLiAgV2Ugbm93IGtub3cgdGhhdCBpcyB0aGUgb25seSBwcm9jZXNzIHRoaXMgV2Vi
c2l0ZURhdGFTdG9yZSB3aWxsIGV2ZXIgdXNlLiAgTm93LCB1c2VycworICAgICAgICB3aWxsIGJl
IGFibGUgdG8gYWN0dWFsbHkgYmUgbG9nZ2VkIGluIGFsbCB0aGUgdGltZSBpbiBzdWNoIGFwcHMu
CisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIu
bWVzc2FnZXMuaW46CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNl
c3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdl
U2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY3VybC9O
ZXR3b3JrUHJvY2Vzc0N1cmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRh
U3RvcmVTZXNzaW9uKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9j
ZXNzU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNy
ZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogU2hh
cmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9X
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJ
SFRUUENvb2tpZVN0b3JlLmNwcDoKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpIVFRQ
Q29va2llU3RvcmUpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2ll
U3RvcmUpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMpOgorICAgICAg
ICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwpOgorICAgICAgICAoQVBJOjpI
VFRQQ29va2llU3RvcmU6OnNldENvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3Rv
cmU6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRl
QWxsQ29va2llcyk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJP
YnNlcnZlcik6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRl
c3Ryb3llZCk6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQ
cm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29v
a2llU3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMpOiBEZWxl
dGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRH
ZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIpOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXS0NvbnRleHRTZXRQcmltYXJ5
V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9y
U2VydmljZVdvcmtlclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0VGVybWlu
YXRlTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9X
S0NvbnRleHQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwOgor
ICAgICAgICAoV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW06CisgICAgICAgICgtW1dLUHJv
Y2Vzc1Bvb2wgX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6XSk6CisgICAgICAg
ICgtW1dLUHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAo
LVtXS1Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1Byb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHldKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQ
cm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNz
UG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLUHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6XSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vy
dmljZVdvcmtlcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfbmV0d29y
a1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tOgorICAgICAgICAoLVtXS1dl
YnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOl0p
OgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJl
cGFyZVRvU3VzcGVuZDpdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldKToKKyAgICAgICAgKC1bV0tXZWJzaXRl
RGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdKToKKyAgICAgICAgKC1bV0tX
ZWJzaXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZTo6Y29va2llTWFuYWdlciBjb25zdCk6CisgICAg
ICAgIChfV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclBy
aXZhdGUpOgorICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3
ZWJraXRfY29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3
ZWJraXRfY29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0
X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9hZGRfY29va2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9n
ZXRfY29va2llcyk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tp
ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgor
ICAgICAgICAod2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQ
cm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2Nv
YS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50
Rm9yVGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6Y2FuY2VsKToK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6cHVibGlzaFByb2dyZXNzKToKKyAgICAg
ICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KToK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3Vn
Z2VzdGVkRmlsZW5hbWVBc3luYyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6RG93
bmxvYWRQcm94eU1hcCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxp
Y2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94
eU1hcDo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZFByb3h5TWFwOjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkUHJveHlNYXAuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9DdXN0
b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5n
KToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0
b3BMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHk6OmludmFsaWRhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojph
bGxOZXR3b3JrUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6ZGVmYXVsdE5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6dGVybWluYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRhdGFTdG9yZVBhcmFtZXRlcnMpOgorICAgICAgICAoV2Vi
S2l0OjphbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSk6CisgICAg
ICAgIChXZWJLaXQ6OmFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlv
bik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNz
UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1By
b2Nlc3NQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExh
dW5jaE9wdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVh
dGVEb3dubG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
bmV0d29ya1Byb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQ
cm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6
OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24pOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25J
RCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OmFu
eVByb2Nlc3NQb29sSGFzRm9yZWdyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6
OmFueVByb2Nlc3NQb29sSGFzQmFja2dyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRsZXI6Omhh
bmRsZVhQQ0V2ZW50IGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29va2llTWFuYWdl
clByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJD
b29raWVNYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJv
eHk6On5XZWJDb29raWVNYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVN
YW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2Rp
ZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRD
b29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxD
b29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29r
aWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2Vy
dmluZ0Nvb2tpZUNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9j
ZXNzUG9vbERlc3Ryb3llZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0
U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0
ZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0
d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyU2Vydmlj
ZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnByZWNvbm5lY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ29t
bWl0TG9hZEZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpsb2dGcmFt
ZU5hdmlnYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNr
QXR0cmlidXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlj
a0F0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBZENsaWNr
QXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25z
QXNFeHBpcmVkRm9yVGVzdGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29s
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3Vz
dG9tUHJvdG9jb2xIYW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpX
ZWJQcm9jZXNzUG9vbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp+V2ViUHJv
Y2Vzc1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFu
Z2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRNZW1vcnlQcmVzc3Vy
ZUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNz
Q3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3Jr
ZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6cmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdl
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJz
aXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2Fk
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0J5
cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Q
cm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVucmVn
aXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29y
a2Vycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJv
Y2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NB
c3NlcnRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmlzU2VydmljZVdv
cmtlclBhZ2VJRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRV
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJC
YWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nv
bm5lY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZW5z
dXJlTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICBUaGVyZSBzZWVtcyB0byBiZSBh
IGxvdCBvZiBjb2RlIHJlbW92YWwgaGVyZSwgYnV0IG1vc3Qgb2YgaXQgd2FzIGR1cGxpY2F0ZSBj
b2RlIHdpdGgKKyAgICAgICAgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyB3aGljaCBpcyB1
c2VkIGluc3RlYWQuICBUaGF0IHdoaWNoIHdhcyBub3QgZHVwbGljYXRlIHdhcworICAgICAgICBt
b3ZlZCB0byBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQ
cm9jZXNzLiAgVGhpcyB3YXMgdGhlIGhhcmRlc3QgcGFydCBvZiB0aGlzIHBhdGNoLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNz
SWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpz
eW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRO
ZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5k
SW1taW5lbnRseUZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmZsdXNoQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFU
cmFuc2Zlcik6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vz
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3
b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZv
clRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0
b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNp
dGVEYXRhU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRl
RGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVE
YXRhU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3Rlcldp
dGhTZXNzaW9uSURNYXApOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlz
dGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6Om5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bmV0d29ya1Byb2Nlc3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpmZXRjaERhdGFBbmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnJlbW92ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
ZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3
ZWVuRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNv
dXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVy
ZWRBc1N1YnJlc291cmNlVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3Rl
cmVkQXNSZWRpcmVjdGluZ1RvKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YVN1bW1hcnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNv
b2tpZUJsb2NraW5nVXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3Rh
dGlzdGljRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVz
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nl
c3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRv
TGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmxvZ1VzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Omhhc0hhZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0VXNlSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVz
dGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRl
TG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVz
dGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENO
QU1FRG9tYWluRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3RvcmFnZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9y
UHJldmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9z
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQ
cm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JU
ZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VwaGVtZXJhbCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmZsdXNoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJz
aXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5k
U2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFy
QXBwQm91bmRTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9y
d2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJ
ZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9y
U2Vzc2lvbklEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nv
b2tpZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjphZGRQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tpZXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3Jl
U291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0
TmV0d29ya1BhcmFtZXRlcnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQ
cm94eUdMaWIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3Jt
R2V0TGF1bmNoT3B0aW9ucyk6CisgICAgICAgICogVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFu
YWdlclByb3h5U291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9zb3Vw
L1dlYlByb2Nlc3NQb29sU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpzZXRJZ25vcmVUTFNFcnJvcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MpOgorCiAyMDIwLTA5LTIyICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vz
c10gZmFzdC9jYW52YXMvY2FudmFzLWJsZW5kLWltYWdlLmh0bWwgYW5kIGZhc3QvY2FudmFzL2Nh
bnZhcy1ibGVuZC1zb2xpZC5odG1sIGZhaWwgb24gbWFjT1MKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCShyZXZpc2lvbiAyNjc0NjQp
CisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQ3LDMwICszNDcsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0
aWFsaXplTmV0d29ya1ByCiAKICAgICBzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUocGFy
YW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUpOwogCi0gICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQYXJhbWV0ZXJzLmRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvIHNlc3Np
b25JRCA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRDsKLSAgICBzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29y
a1Nlc3Npb246OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKLQotICAgIFNhbmRib3hF
eHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgYWRk
U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9y
eSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0g
ICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBi
b29sIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgPSB0cnVlOwot
ICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1v
dmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1l
dGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
LSNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25JRCwgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8qIGRlZmF1bHRTZXNzaW9uID0gbmV0d29ya1Nl
c3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0gICAgYXV0byogZGVm
YXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lv
bigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgZGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKLQogICAgIGZvciAoYXV0byYgc3VwcGxlbWVudCA6
IG1fc3VwcGxlbWVudHMudmFsdWVzKCkpCiAgICAgICAgIHN1cHBsZW1lbnQtPmluaXRpYWxpemUo
cGFyYW1ldGVycyk7CiAKQEAgLTUwNSw4ICs0ODEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpl
bnN1cmVTZXNzaW9uKGNvbnN0CiB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNv
bnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVXNlVGVzdGluZ05ldHdv
cmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXJCYXNlKQogI2VuZGlmCiB7Ci0gICAg
QVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsK
LQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmFkZChzZXNz
aW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAg
IHJldHVybjsKQEAgLTUyMSw3ICs0OTUsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVT
ZXNzaW9uKGNvbnN0CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZklkZW50aWZpZXIgPSBt
YWtlU3RyaW5nKGlkZW50aWZpZXJCYXNlLCAiLlByaXZhdGVCcm93c2luZy4iLCBjcmVhdGVDYW5v
bmljYWxVVUlEU3RyaW5nKCkpLmNyZWF0ZUNGU3RyaW5nKCk7CiAgICAgaWYgKHNlc3Npb25JRC5p
c0VwaGVtZXJhbCgpKQogICAgICAgICBzdG9yYWdlU2Vzc2lvbiA9IGFkb3B0Q0YoY3JlYXRlUHJp
dmF0ZVN0b3JhZ2VTZXNzaW9uKGNmSWRlbnRpZmllci5nZXQoKSkpOwotICAgIGVsc2UKKyAgICBl
bHNlIGlmIChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkK
ICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmNyZWF0ZUNGU3RvcmFnZVNlc3Npb25Gb3JJZGVudGlmaWVyKGNmSWRlbnRpZmllci5nZXQoKSk7
CiAKICAgICBpZiAoTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpwcm9jZXNzTWF5VXNlQ29va2llQVBJ
KCkpIHsKQEAgLTU0NCwyMSArNTE4LDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNvb2tpZUFj
Y2VwdFBvbGljeUMKIAogV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBOZXR3b3JrUHJv
Y2Vzczo6c3RvcmFnZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkgY29u
c3QKIHsKLSAgICBpZiAoc2Vzc2lvbklEID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkpCi0gICAgICAgIHJldHVybiAmZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CiAgICAgcmV0
dXJuIG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy5nZXQoc2Vzc2lvbklEKTsKIH0KIAotV2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lv
bikKLSAgICAgICAgbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gcGxhdGZvcm1DcmVh
dGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKLSAgICByZXR1cm4gKm1fZGVmYXVsdE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiYpPiYgZnVuY3RvcikKIHsKLSAgICBmdW5jdG9yKGRlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpKTsKICAgICBmb3IgKGF1dG8mIHN0b3JhZ2VTZXNzaW9uIDogbV9uZXR3b3JrU3RvcmFnZVNl
c3Npb25zLnZhbHVlcygpKQogICAgICAgICBmdW5jdG9yKCpzdG9yYWdlU2Vzc2lvbik7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCShy
ZXZpc2lvbiAyNjc0NjQpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAsNiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mKT4mKTsKICAgICBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24qIHN0b3JhZ2VTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJikgY29u
c3Q7Ci0gICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBkZWZhdWx0U3RvcmFnZVNl
c3Npb24oKSBjb25zdDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uPiBuZXdUZXN0aW5nU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpOwogI2lm
IFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Np
b25JRCYsIGJvb2wgc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcm
IGlkZW50aWZpZXIsIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiYmKTsKQEAgLTM3
NSw3ICszNzQsNiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyYpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+
IHBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAKICAgICB2b2lk
IGRpZFJlY2VpdmVOZXR3b3JrUHJvY2Vzc01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpE
ZWNvZGVyJik7CiAKQEAgLTU0NCw3ICs1NDIsNiBAQCBwcml2YXRlOgogCiAgICAgSGFzaE1hcDxQ
QUw6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTZXNzaW9uPj4gbV9uZXR3b3Jr
U2Vzc2lvbnM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4+IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9uczsK
LSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b24+IG1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjsKIAogICAgIFJlZlB0cjxTdG9yYWdl
TWFuYWdlclNldD4gbV9zdG9yYWdlTWFuYWdlclNldDsKIApJbmRleDogU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDI2NzQ2NCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw3ICs1NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnM6OmUKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc1NES1ZlcnNpb247CiAgICAgSVBDOjpl
bmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwogI2VuZGlmCi0gICAgZW5j
b2RlciA8PCBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKICNpZiBVU0UoU09VUCkKICAgICBl
bmNvZGVyIDw8IGNvb2tpZUFjY2VwdFBvbGljeTsKICAgICBlbmNvZGVyIDw8IGlnbm9yZVRMU0Vy
cm9yczsKQEAgLTY4LDkgKzY3LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVyczo6ZQogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAg
IGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQotICAgIGVuY29kZXIgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlIDw8IHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVs
YXk7Ci0jZW5kaWYKICAgICBlbmNvZGVyIDw8IHNob3VsZEVuYWJsZUlUUERhdGFiYXNlOwogICAg
IGVuY29kZXIgPDwgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlOwogfQpAQCAtMTE2
LDEyICsxMTIsNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCi0gICAgT3B0aW9uYWw8V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIGRlY29kZXIg
Pj4gZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAgaWYgKCFkZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsK
LQogI2lmIFVTRShTT1VQKQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNvb2tpZUFj
Y2VwdFBvbGljeSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0MiwyMCArMTMyLDYgQEAg
Ym9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZAogICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcykpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlvbmFsPFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LnNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3Zl
KCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERpc2FibGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYK
LQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJsZUlUUERhdGFiYXNl
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oCShyZXZpc2lvbiAyNjc0NjQpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIkNhY2hlTW9kZWwuaCIKICNpbmNsdWRlICJTYW5kYm94
RXh0ZW5zaW9uLmgiCi0jaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0Nvb2tpZS5oPgogI2luY2x1ZGUgPHd0Zi9Qcm9jZXNzSUQuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC03MSw4ICs3MCw2IEBAIHN0cnVjdCBOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyAKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBuZXR3b3Jr
QVRTQ29udGV4dDsKICNlbmRpZgogCi0gICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAgCiAjaWYgVVNFKFNPVVApCiAgICAgV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBXZWJDb3JlOjpI
VFRQQ29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsKICAgICBib29sIGlnbm9yZVRM
U0Vycm9ycyB7IGZhbHNlIH07CkBAIC04NSwxMiArODIsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMgCiAgICAgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1JlZ2lz
dGVyZWRBc0xvY2FsOwogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNO
b0FjY2VzczsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBTdHJpbmcgc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAg
ICBib29sIHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkg
eyBmYWxzZSB9OwotI2VuZGlmCi0gICAgYm9vbCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZSB7IGZh
bHNlIH07CisgICAgYm9vbCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZSB7IHRydWUgfTsKICAgICBi
b29sIGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSB7IGZhbHNlIH07CiB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVz
L1dlYkNvb2tpZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNjc0NjQpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llU3Rv
cmFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRUUENvb2tpZUFjY2VwdFBvbGljeS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CkBAIC0xNDMsMTUgKzE0NCwxOCBAQCB2
b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnN0b3BPYnNlcnZpbmdDb29rCiAKIHZvaWQgV2ViQ29va2ll
TWFuYWdlcjo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5
IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIHBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpOwotICAgIG1f
cHJvY2Vzcy5jb29raWVBY2NlcHRQb2xpY3lDaGFuZ2VkKHBvbGljeSk7Ci0KLSAgICBjb21wbGV0
aW9uSGFuZGxlcigpOworICAgIHBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xp
Y3ksIFtwb2xpY3ksIHByb2Nlc3MgPSBtYWtlUmVmKG1fcHJvY2VzcyksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBw
cm9jZXNzLT5jb29raWVBY2NlcHRQb2xpY3lDaGFuZ2VkKHBvbGljeSk7CisgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CisgICAgfSk7CiB9CiAKLXZvaWQgV2ViQ29va2llTWFuYWdlcjo6Z2V0
SFRUUENvb2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVB
Y2NlcHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJDb29raWVNYW5hZ2Vy
OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihtX3Byb2Nlc3MuZGVmYXVsdFN0b3Jh
Z2VTZXNzaW9uKCkuY29va2llQWNjZXB0UG9saWN5KCkpOworICAgIGlmIChhdXRvKiBzdG9yYWdl
U2Vzc2lvbiA9IG1fcHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQorICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihzdG9yYWdlU2Vzc2lvbi0+Y29va2llQWNjZXB0UG9saWN5KCkpOwor
ICAgIGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoSFRUUENvb2tpZUFjY2VwdFBvbGlj
eTo6TmV2ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIu
aAkocmV2aXNpb24gMjY3NDY0KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29r
aWVzL1dlYkNvb2tpZU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBAQAog
I2luY2x1ZGUgIlNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUuaCIKICNlbmRpZgogCitP
QkpDX0NMQVNTIE5TSFRUUENvb2tpZVN0b3JhZ2U7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0
cnVjdCBDb29raWU7CiBlbnVtIGNsYXNzIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgOiB1aW50OF90
OwpAQCAtNzksOCArODEsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2V0QWxsQ29va2llcyhQQUw6
OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6Q29va2ll
PiYmKT4mJik7CiAgICAgdm9pZCBnZXRDb29raWVzKFBBTDo6U2Vzc2lvbklELCBjb25zdCBVUkwm
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmKTsK
IAotICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhU
VFBDb29raWVBY2NlcHRQb2xpY3kpOwotICAgIHZvaWQgZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGlj
eShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kp
PiYmKTsKKyAgICB2b2lkIHBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShXZWJDb3Jl
OjpIVFRQQ29va2llQWNjZXB0UG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwor
ICAgIHZvaWQgZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJik7CiAK
ICAgICB2b2lkIHN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCk7CiAg
ICAgdm9pZCBzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCk7CkBAIC04
OCw0ICs5MCw4IEBAIHByaXZhdGU6CiAgICAgTmV0d29ya1Byb2Nlc3MmIG1fcHJvY2VzczsKIH07
CiAKKyNpZiBQTEFURk9STShDT0NPQSkKK3ZvaWQgc2F2ZUNvb2tpZXMoTlNIVFRQQ29va2llU3Rv
cmFnZSAqLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworI2VuZGlmCisKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVz
L1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4JKHJl
dmlzaW9uIDI2NzQ2NCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9X
ZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3
IEBAIG1lc3NhZ2VzIC0+IFdlYkNvb2tpZU1hbmFnZXIgTm90UmVmQ291bnQKICAgICB2b2lkIERl
bGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2Fs
bFRpbWUgdGltZSkgLT4gKCkgQXN5bmMKIAogICAgIHZvaWQgU2V0SFRUUENvb2tpZUFjY2VwdFBv
bGljeShlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kp
IC0+ICgpIEFzeW5jCi0gICAgdm9pZCBHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KCkgLT4gKGVu
dW06dWludDhfdCBXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgQXN5bmMK
KyAgICB2b2lkIEdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklEKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9s
aWN5KSBBc3luYwogICAgIAogICAgIHZvaWQgU3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICB2b2lkIFN0b3BPYnNlcnZpbmdDb29raWVDaGFu
Z2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ29va2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvY3VybC9XZWJDb29raWVN
YW5hZ2VyQ3VybC5jcHAJKHJldmlzaW9uIDI2NzQ2NCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ29va2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKLXZvaWQgV2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KQordm9pZCBXZWJD
b29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBDb29raWVBY2NlcHRQb2xpY3kgY3VybFBvbGljeSA9IENvb2tp
ZUFjY2VwdFBvbGljeTo6T25seUZyb21NYWluRG9jdW1lbnREb21haW47CiAgICAgc3dpdGNoIChw
b2xpY3kpIHsKQEAgLTU1LDYgKzU1LDcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9y
bVNldEhUVFBDbwogICAgIG1fcHJvY2Vzcy5mb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtj
dXJsUG9saWN5XSAoY29uc3QgYXV0byYgbmV0d29ya1N0b3JhZ2VTZXNzaW9uKSB7CiAgICAgICAg
IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5zZXRDb29raWVBY2NlcHRQb2xpY3koY3VybFBvbGljeSk7
CiAgICAgfSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvbWFjL1dl
YkNvb2tpZU1hbmFnZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1tCShyZXZpc2lvbiAyNjc0
NjQpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvbWFjL1dlYkNvb2tp
ZU1hbmFnZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQg
PFdlYkNvcmUvSFRUUENvb2tpZUFjY2VwdFBvbGljeS5oPgogI2ltcG9ydCA8V2ViQ29yZS9OZXR3
b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbXBvcnQgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+
CisjaW1wb3J0IDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vz
c1ByaXZpbGVnZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTUzLDE1ICs1NCwxOSBAQCBz
dGF0aWMgQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeSB0CiAgICAgcmV0dXJuIENGSFRU
UENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lBbHdheXM7CiB9CiAKLXZvaWQgV2ViQ29va2llTWFu
YWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kgcG9saWN5KQordm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoaGFzUHJv
Y2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7CiAK
KyAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBbW05TSFRUUENvb2tpZVN0b3JhZ2Ug
c2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZUFjY2VwdFBvbGljeTpzdGF0aWNfY2Fz
dDxOU0hUVFBDb29raWVBY2NlcHRQb2xpY3k+KHBvbGljeSldOworICAgIHNhdmVDb29raWVzKFtO
U0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIAogICAgIG1fcHJvY2Vzcy5mb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNz
aW9uKFsmXSAoY29uc3QgYXV0byYgbmV0d29ya1N0b3JhZ2VTZXNzaW9uKSB7CiAgICAgICAgIGlm
IChhdXRvIGNvb2tpZVN0b3JhZ2UgPSBuZXR3b3JrU3RvcmFnZVNlc3Npb24uY29va2llU3RvcmFn
ZSgpKQogICAgICAgICAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZUFjY2VwdFBvbGlj
eShjb29raWVTdG9yYWdlLmdldCgpLCB0b0NGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3ko
cG9saWN5KSk7CisgICAgICAgIGlmIChhdXRvICpzdG9yYWdlID0gbmV0d29ya1N0b3JhZ2VTZXNz
aW9uLm5zQ29va2llU3RvcmFnZSgpKQorICAgICAgICAgICAgc2F2ZUNvb2tpZXMoc3RvcmFnZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICAgICB9KTsKIH0KIApJbmRleDogU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9zb3Vw
L1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAkocmV2aXNpb24gMjY3NDY0KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMSArMzcsMTIgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLXZvaWQgV2ViQ29va2llTWFuYWdlcjo6cGxhdGZv
cm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5
KQordm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBtX3Byb2Nlc3MuZm9yRWFjaE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbihbcG9saWN5XSAoYXV0byYgc2Vzc2lvbikgewogICAgICAgICBzZXNzaW9u
LnNldENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpOwogICAgIH0pOworICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6c2V0Q29va2llUGVyc2lzdGVu
dFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VQ
YXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKQpJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFi
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0
b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAyNjc0NjQpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNyArMjE0LDggQEAgdm9pZCBMb2NhbFN0b3JhZ2VE
YXRhYmFzZTo6Y2xlYXIoKQogCiB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpjbG9zZSgpCiB7
Ci0gICAgQVNTRVJUKCFtX2lzQ2xvc2VkKTsKKyAgICBpZiAobV9pc0Nsb3NlZCkKKyAgICAgICAg
cmV0dXJuOwogICAgIG1faXNDbG9zZWQgPSB0cnVlOwogCiAgICAgaWYgKG1fZGlkU2NoZWR1bGVE
YXRhYmFzZVVwZGF0ZSkgewpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2Nv
YS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQkocmV2aXNpb24gMjY3NDY0
KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0Nv
Y29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJOZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuaCIKICNpbXBvcnQgIk5ldHdvcmtTZXNzaW9uQ29jb2EuaCIKICNpbXBv
cnQgIlNhbmRib3hFeHRlbnNpb24uaCIKKyNpbXBvcnQgIldlYkNvb2tpZU1hbmFnZXIuaCIKICNp
bXBvcnQgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1B1YmxpY1N1ZmZpeC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3RDRk5ldC5o
PgpAQCAtNzgsOSArNzksNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxp
emVOCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMu
Y29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkocGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1
bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4
ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgogI2Vu
ZGlmCiAKICAgICBfQ0ZOZXR3b3JrU2V0QVRTQ29udGV4dChwYXJhbWV0ZXJzLm5ldHdvcmtBVFND
b250ZXh0LmdldCgpKTsKQEAgLTEwNSwxMSArMTAzLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
cGxhdGZvcm1Jbml0aWFsaXplTgogICAgIFtOU1VSTENhY2hlIHNldFNoYXJlZFVSTENhY2hlOnVy
bENhY2hlLmdldCgpXTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQot
CiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3b3JrUHJvY2Vzczo6c291cmNlQXBwbGljYXRpb25B
dWRpdERhdGEoKSBjb25zdAogewogI2lmIFVTRShTT1VSQ0VfQVBQTElDQVRJT05fQVVESVRfREFU
QSkKQEAgLTIyMSw3ICsyMTQsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmbHVzaENvb2tpZXMo
Y29uc3QgCiAgICAgcGxhdGZvcm1GbHVzaENvb2tpZXMoc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNhdmVDb29raWVzKE5TSFRUUENvb2tp
ZVN0b3JhZ2UgKmNvb2tpZVN0b3JhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3ZvaWQgc2F2ZUNvb2tpZXMoTlNIVFRQQ29va2llU3RvcmFnZSAqY29v
a2llU3RvcmFnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgQVNTRVJUKGNvb2tpZVN0
b3JhZ2UpOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQ
cm9jZXNzQ3VybC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAJKHJldmlzaW9uIDI2NzQ2NCkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSwxMSArMzksNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVOCiB7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdl
U2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLX0K
LQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBjb25zdCBTdHJpbmcm
IGhvc3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0
Lm1tCShyZXZpc2lvbiAyNjc0NjQpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21h
Yy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTUsMTUgKzU1
LDExIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnMKICAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuY29va2llU3Rv
cmFnZVBhdGhFeHRlbnNpb25IYW5kbGUpOwogCiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0
b3JhZ2VSZWY+IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2U7Ci0gICAgaWYgKCFzZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKSAmJiAhcGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmll
ci5pc0VtcHR5KCkpCisgICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSAmJiAhcGFyYW1l
dGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci5pc0VtcHR5KCkgJiYgcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgICAgIHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UgPSBj
b29raWVTdG9yYWdlRnJvbUlkZW50aWZ5aW5nRGF0YShwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tp
ZVN0b3JhZ2VJZGVudGlmaWVyKTsKIAogICAgIG5ldHdvcmtQcm9jZXNzLmVuc3VyZVNlc3Npb24o
c2Vzc2lvbklELCBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zaG91bGRVc2VU
ZXN0aW5nTmV0d29ya1Nlc3Npb24sIG1ha2VTdHJpbmcoYmFzZSwgJy4nLCBzZXNzaW9uSUQudG9V
SW50NjQoKSksIFdURk1vdmUodWlQcm9jZXNzQ29va2llU3RvcmFnZSkpOwogCi0gICAgYXV0byog
c2Vzc2lvbiA9IG5ldHdvcmtQcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAg
Zm9yIChjb25zdCBhdXRvJiBjb29raWUgOiBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzKQotICAg
ICAgICBzZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKLQogICAgIG5ldHdvcmtQcm9jZXNzLnNl
dFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKG5ldHdvcmtQcm9jZXNz
LCBXVEZNb3ZlKHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3Vw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya1Byb2Nlc3NTb3VwLmNwcAkocmV2aXNpb24gMjY3NDY0KQorKysgU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0MCwxMSArMTQwLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFs
aXplTgogICAgIHNldElnbm9yZVRMU0Vycm9ycyhwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyk7
CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5l
dHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
PihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAg
IFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0U2hvdWxkSWdub3JlVExTRXJyb3JzKGlnbm9yZVRMU0Vy
cm9ycyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BdHRhY2htZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5oCShyZXZp
c2lvbiAyNjc0NjQpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BdHRhY2htZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk1LDggKzk1LDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9maWxl
RGVzY3JpcHRvciB7IC0xIH07CiAgICAgc2l6ZV90IG1fc2l6ZTsKICNlbGlmIE9TKERBUldJTikK
LSAgICBtYWNoX3BvcnRfbmFtZV90IG1fcG9ydDsKLSAgICBtYWNoX21zZ190eXBlX25hbWVfdCBt
X2Rpc3Bvc2l0aW9uOworICAgIG1hY2hfcG9ydF9uYW1lX3QgbV9wb3J0IHsgMCB9OworICAgIG1h
Y2hfbXNnX3R5cGVfbmFtZV90IG1fZGlzcG9zaXRpb24geyAwIH07CiAjZWxpZiBPUyhXSU5ET1dT
KQogICAgIEhBTkRMRSBtX2hhbmRsZSB7IElOVkFMSURfSEFORExFX1ZBTFVFIH07CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5jcHAJKHJldmlzaW9uIDI2NzQ2NCkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQw
LDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5jb2RlKAogICAgIGVuY29k
ZXIgPDwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogICAgIGVuY29kZXIgPDwgdWlQcm9jZXNz
Q29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgZW5jb2RlciA8PCBjb29raWVTdG9yYWdlUGF0
aEV4dGVuc2lvbkhhbmRsZTsKLSAgICBlbmNvZGVyIDw8IHBlbmRpbmdDb29raWVzOwogCiAjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgZW5jb2RlciA8PCBpbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnkgPDwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgZW5jb2RlciA8PCBpbmRleGVkRGF0YWJhc2VUZW1w
QmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFC
TEUoU0VSVklDRV9XT1JLRVIpCkBAIC04MywxMiArNzksNiBAQCBPcHRpb25hbDxXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycz4gV2ViCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
cGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmNv
b2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIE9wdGlvbmFsPFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+PiBwZW5kaW5nQ29va2llczsKLSAgICBkZWNvZGVyID4+IHBlbmRpbmdD
b29raWVzOwotICAgIGlmICghcGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IFdURk1vdmUoKnBlbmRpbmdD
b29raWVzKTsKLQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIE9wdGlvbmFsPFN0
cmluZz4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIGRlY29kZXIgPj4gaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5OwpAQCAtMTAxLDE0ICs5MSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzPiBXZWIKICAgICBpZiAoIWluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIE9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gaW5kZXhl
ZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+
PiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBp
ZiAoIWluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNl
VGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJh
c2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCShyZXZpc2lvbiAyNjc0NjQpCisrKyBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MSwxNSArNTEsMTEgQEAgc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzIHsKIAogICAgIFZlY3Rvcjx1aW50OF90PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRp
ZmllcjsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgY29va2llU3RvcmFnZVBhdGhFeHRl
bnNpb25IYW5kbGU7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXM7
CiAgICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMgbmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzOwogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgU3RyaW5nIGluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZVRlbXBCbG9i
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVBy
b2Nlc3NQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGls
aWFyeVByb2Nlc3NQcm94eS5oCShyZXZpc2lvbiAyNjc0NjQpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyAr
NDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KCk7CiAK
ICAgICB2b2lkIGNvbm5lY3QoKTsKLSAgICB2b2lkIHRlcm1pbmF0ZSgpOworICAgIHZpcnR1YWwg
dm9pZCB0ZXJtaW5hdGUoKTsKIAogICAgIHZpcnR1YWwgUHJvY2Vzc1Rocm90dGxlciYgdGhyb3R0
bGVyKCkgPSAwOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5h
Z2VyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNv
b2tpZU1hbmFnZXJQcm94eS5jcHAJKHJldmlzaW9uIDI2NzQ2NCkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQSVNlY3VyaXR5
T3JpZ2luLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJPcHRpb25hbENhbGxiYWNrSUQuaCIK
ICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb29r
aWVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgpAQCAtMzksMjQgKzQwLDE2IEBACiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jb25zdCBjaGFyKiBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OnN1cHBsZW1lbnROYW1lKCkKK1dlYkNvb2tpZU1hbmFnZXJQcm94eTo6
V2ViQ29va2llTWFuYWdlclByb3h5KE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNz
KQorICAgIDogbV9uZXR3b3JrUHJvY2VzcyhtYWtlV2Vha1B0cihuZXR3b3JrUHJvY2VzcykpCiB7
Ci0gICAgcmV0dXJuICJXZWJDb29raWVNYW5hZ2VyUHJveHkiOwotfQotCi1SZWY8V2ViQ29va2ll
TWFuYWdlclByb3h5PiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQcm9jZXNzUG9v
bCogcHJvY2Vzc1Bvb2wpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFu
YWdlclByb3h5KHByb2Nlc3NQb29sKSk7Ci19Ci0KLVdlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2Vi
Q29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKLSAgICA6IFdl
YkNvbnRleHRTdXBwbGVtZW50KHByb2Nlc3NQb29sKQotewotICAgIFdlYkNvbnRleHRTdXBwbGVt
ZW50Ojpwcm9jZXNzUG9vbCgpLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CisgICAgbmV0d29y
a1Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJv
eHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogfQogCiBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6On5XZWJDb29raWVNYW5hZ2VyUHJveHkoKQogeworICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsKICAg
ICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKIH0KIApAQCAtNjUsMTAyICs1
OCw4NCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6aW5pdGlhbGl6ZUNsCiAgICAgbV9j
bGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOwogfQogCi0vLyBXZWJDb250ZXh0U3VwcGxlbWVudAot
Ci12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKQotewot
ICAgIFZlY3RvcjxPYnNlcnZlcio+IG9ic2VydmVyczsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVy
U2V0IDogbV9jb29raWVPYnNlcnZlcnMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBv
YnNlcnZlciA6IG9ic2VydmVyU2V0KQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChvYnNl
cnZlcik7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVycykKLSAg
ICAgICAgb2JzZXJ2ZXItPm1hbmFnZXJEZXN0cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX2Nvb2tp
ZU9ic2VydmVycy5pc0VtcHR5KCkpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
cHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopCi17Ci19
Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgp
Ci17Ci0gICAgQVBJOjpPYmplY3Q6OnJlZigpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OmRl
cmVmKCk7Ci19Ci0KIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRo
Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPFN0cmluZz4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAg
bmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpH
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rp
b24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQogewot
ICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5l
Y2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcykpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQor
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSwgMCk7CiB9
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5n
UHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6
OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbklEKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFn
ZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpkZWxldGVDb29raWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25z
dCBDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVu
Y3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llKHNlc3Npb25JRCwgY29v
a2llKSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pXSgpIG11
dGFibGUgeworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0
ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwor
ICAgIGVsc2UKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwotICAgIH0pOwogfQogCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nl
c3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVB
bGxDb29raWVzTW9kaWZpZWRTaW5jZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpE
ZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNh
bGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsK
IH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdv
cmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
U2V0Q29va2llKHNlc3Npb25JRCwgY29va2llcyksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikp
OworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShz
ZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNl
CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8
Q29va2llPiYgY29va2llcywgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgbWFpbkRvY3VtZW50
VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAg
ICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWlu
RG9jdW1lbnRVUkwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29va2ll
cywgdXJsLCBtYWluRG9jdW1lbnRVUkwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAg
ICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OmdldEFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpHZXRBbGxDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlv
bikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwogfQogCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29raWU+
JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNz
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0Q29va2ll
cyhzZXNzaW9uSUQsIHVybCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmICht
X25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1
cmwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxi
YWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0YXJ0
T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAg
cHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNz
YXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5n
ZXMoc2Vzc2lvbklEKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2
aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1
bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZp
bmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQor
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+JiYgY2FsbGJhY2spCkBAIC0y
MTEsMTggKzE4NiwxOCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y29va2llc0RpZENo
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KFBBTDo6U2Vzc2lvbklELCBIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0jaWYgVVNFKFNPVVApCi0g
ICAgcHJvY2Vzc1Bvb2woKS0+c2V0SW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5
KTsKLSNlbmRpZgotCi0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGlj
eShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGlj
eSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJh
Y2tGdW5jdGlvbigpOwogfQogCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChI
VFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQordm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kp
PiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeSgpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAg
ICAgY2FsbGJhY2tGdW5jdGlvbihIVFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgJKHJldmlzaW9uIDI2NzQ2NCkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NiwxMSArNTYsOSBAQCB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJy
CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5
PiBIVFRQQ29va2llQWNjZXB0UG9saWN5Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFj
azxjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiY+IEdldENvb2tpZXNDYWxsYmFjazsKIAot
Y2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6
Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHB1YmxpYyBXZWJDb250ZXh0U3VwcGxlbWVu
dCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitjbGFzcyBXZWJDb29raWVNYW5hZ2Vy
UHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29raWVN
YW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7Ci0KLSAgICBzdGF0aWMgUmVmPFdlYkNv
b2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlByb2Nlc3NQb29sKik7CisgICAgc3RhdGljIFJl
ZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IGNyZWF0ZShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3
b3JrUHJvY2VzcykgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb29raWVNYW5hZ2VyUHJveHko
bmV0d29ya1Byb2Nlc3MpKTsgfQogICAgIHZpcnR1YWwgfldlYkNvb2tpZU1hbmFnZXJQcm94eSgp
OwogCiAgICAgdm9pZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNsaWVu
dEJhc2UqKTsKQEAgLTEwNCwxNyArMTAyLDEwIEBAIHB1YmxpYzoKICAgICB1c2luZyBBUEk6Ok9i
amVjdDo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KFdlYlBy
b2Nlc3NQb29sKik7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5KE5ldHdvcmtQcm9jZXNzUHJv
eHkmKTsKIAogICAgIHZvaWQgY29va2llc0RpZENoYW5nZShQQUw6OlNlc3Npb25JRCk7CiAKLSAg
ICAvLyBXZWJDb250ZXh0U3VwcGxlbWVudAotICAgIHZvaWQgcHJvY2Vzc1Bvb2xEZXN0cm95ZWQo
KSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKSBv
dmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShOZXR3b3JrUHJvY2Vzc1Byb3h5Kikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCByZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRlOwotCiAgICAgLy8g
SVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwogCkBAIC0xMjUsNiArMTE2LDcgQEAg
cHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXVEY6OkZ1bmN0aW9uPHZvaWQg
KCk+PiBtX2xlZ2FjeUNvb2tpZU9ic2VydmVyczsKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklE
LCBIYXNoU2V0PE9ic2VydmVyKj4+IG1fY29va2llT2JzZXJ2ZXJzOwogCisgICAgV2Vha1B0cjxO
ZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwogICAgIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eUNsaWVudCBtX2NsaWVudDsKIAogI2lmIFVTRShTT1VQKQpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyNjc0NjQpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzQ2LDcgKzE3NDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29udHJvbGxlZEJ5QXV0b21h
CiAgICAgICAgIHJldHVybjsKIAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENvbnRy
b2xsZWRCeUF1dG9tYXRpb24oY29udHJvbGxlZCkpOwotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bv
b2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgbV9jb250cm9sbGVkQnlBdXRvbWF0aW9uKSk7CisgICAgd2Vic2l0ZURhdGFTdG9y
ZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNl
c3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgbV9jb250cm9sbGVkQnlBdXRvbWF0aW9uKSwgMCk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjpjcmVhdGVJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVj
dG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCkBAIC0zMjEwLDExICszMjEwLDcgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmlzRm9yY2VkSW50b0FwcEJvdW5kTQogdm9pZCBXZWJQYWdlUHJveHk6
OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKCkKIHsKICNp
ZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKLSAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVz
c2FnZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1l
bnQoKSwgMCk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0
bGVtZW50KCksIDApOwogI2VuZGlmCiB9CiAKQEAgLTMyMjMsMTMgKzMyMTksNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6Y2xlYXJTZXJ2aWNlV29ya2VyRW50CiAjaWYgRU5BQkxFKEFQUF9CT1VORF9E
T01BSU5TKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpDbGVhclNl
cnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9v
bCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2Fu
U2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2Vy
RW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVu
dE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CiAjZW5kaWYKQEAgLTQ0MjMsNyArNDQxMyw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpwcmVjb25uZWN0VG8oY29uc3QgVVIKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0
byBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9IG1fY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UgPyBX
ZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlIDogV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlOwotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmll
cigpLCB3ZWJQYWdlSUQoKSwgdXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xp
Y3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4oKSk7CisgICAgd2Vic2l0ZURhdGFTdG9y
ZSgpLm5ldHdvcmtQcm9jZXNzKCkucHJlY29ubmVjdFRvKHNlc3Npb25JRCgpLCBpZGVudGlmaWVy
KCksIHdlYlBhZ2VJRCgpLCB1cmwsIHVzZXJBZ2VudCgpLCBzdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OnNldENhblVzZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wgY2FuVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UpCkBAIC00NzE5LDcgKzQ3MDksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9h
ZEZvckZyYW1lCiAgICAgICAgICAgICBSZWdpc3RyYWJsZURvbWFpbiBjdXJyZW50RG9tYWluIHsg
Y3VycmVudFJlcXVlc3QudXJsKCkgfTsKICAgICAgICAgICAgIFVSTCByZXF1ZXN0ZXJVUkwgeyBV
UkwoKSwgcmVxdWVzdGVyT3JpZ2luLnRvU3RyaW5nKCkgfTsKICAgICAgICAgICAgIGlmICghY3Vy
cmVudERvbWFpbi5tYXRjaGVzKHJlcXVlc3RlclVSTCkpCi0gICAgICAgICAgICAgICAgbV9wcm9j
ZXNzLT5wcm9jZXNzUG9vbCgpLmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVy
KG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxlRG9tYWluIHsgcmVx
dWVzdGVyVVJMIH0sIGN1cnJlbnREb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIG1faWRl
bnRpZmllciwgbV93ZWJQYWdlSUQpOworICAgICAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3MoKS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zl
cihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJl
cXVlc3RlclVSTCB9LCBjdXJyZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lk
ZW50aWZpZXIsIG1fd2ViUGFnZUlEKTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQpAQCAtNDc1
Nyw3ICs0NzQ3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZQog
ICAgIGlmIChuYXZpZ2F0aW9uICYmIGZyYW1lLT5pc01haW5GcmFtZSgpKSB7CiAgICAgICAgIGlm
IChhdXRvJiBhZENsaWNrQXR0cmlidXRpb24gPSBuYXZpZ2F0aW9uLT5hZENsaWNrQXR0cmlidXRp
b24oKSkgewogICAgICAgICAgICAgaWYgKGFkQ2xpY2tBdHRyaWJ1dGlvbi0+ZGVzdGluYXRpb24o
KS5tYXRjaGVzKGZyYW1lLT51cmwoKSkpCi0gICAgICAgICAgICAgICAgbV9wcm9jZXNzLT5wcm9j
ZXNzUG9vbCgpLnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U3RvcmVBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgKmFkQ2xpY2tBdHRyaWJ1dGlvbikpOworICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhU3Rv
cmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTdG9y
ZUFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqYWRD
bGlja0F0dHJpYnV0aW9uKSwgMCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUzNzEsNyArNTM2
MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmlnYXRpb24oY28KICAgICBpZiAo
dGFyZ2V0SG9zdC5pc0VtcHR5KCkgfHwgbWFpbkZyYW1lSG9zdC5pc0VtcHR5KCkgfHwgdGFyZ2V0
SG9zdCA9PSBzb3VyY2VVUkwuaG9zdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nl
c3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVEb21haW4g
eyBwYWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVkaXJlY3Qs
IGZyYW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRGaW5pc2hE
b2N1bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVk
QnlVc2VyKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1lTmF2aWdhdGlvbihtX3dlYnNpdGVEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHRhcmdldFVSTCB9LCBSZWdp
c3RyYWJsZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBzb3VyY2VVUkwg
fSwgaXNSZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUoKSwgTW9ub3RvbmljVGltZTo6bm93KCkg
LSBtX2RpZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5GcmFtZVRpbWVzdGFtcCwgd2FzUG90ZW50
aWFsbHlJbml0aWF0ZWRCeVVzZXIpLCAwKTsKIH0KICNlbmRpZgogCkBAIC05OTk2LDU4ICs5OTg2
LDI3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzeXN0ZW1QcmV2aWV3QWN0aW9uVHIKIAogdm9pZCBX
ZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0g
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihlbXB0eVN0cmluZygpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbiht
X3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJp
YnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1
dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1l
c3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24o
bV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB3ZWJz
aXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRh
U3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRl
c3RpbmcoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJv
Y2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nl
c3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tB
dHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAg
ICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRp
bWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1ZSksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEFk
Q2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2Uo
KSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lv
blVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCku
bmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNp
dGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhw
aXJlZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vz
c1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3Mt
PmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENsaWNrQXR0
cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0
YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3Rpbmco
bV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkocmV2aXNpb24gMjY3NDY0KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSAiTGVnYWN5R2xvYmFsU2V0dGluZ3MuaCIKICNp
bmNsdWRlICJMb2dJbml0aWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNs
dWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCiAjaW5jbHVkZSAiTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3Nh
Z2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgpAQCAtMTQzLDggKzE0Miwx
MCBAQAogI2VuZGlmCiAKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0coY2hhbm5l
bCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HKGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29sOjoi
IGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFT
RV9MT0dfU1RBVElDKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhjaGFubmVsLCAiV2Vi
UHJvY2Vzc1Bvb2w6OiIgZm10LCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBXRUJQUk9DRVNTUE9P
TF9SRUxFQVNFX0xPR19FUlJPUihjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfRVJST1Io
Y2hhbm5lbCwgIiVwIC0gV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19f
KQogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKGNoYW5uZWws
IGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxv
d2VkKCksIGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZB
X0FSR1NfXykKKyNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9T
VEFUSUMoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lGKHNlc3Npb25JRC5pc0Fsd2F5
c09uTG9nZ2luZ0FsbG93ZWQoKSwgY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwgIyNf
X1ZBX0FSR1NfXykKIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKQEAgLTIzMiw2ICsyMzMsMTEgQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJ
bnNlbnNpdAogICAgIHJldHVybiBzZXQ7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IFdlYlByb2Nlc3NQ
b29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQoreworICAgIHJldHVy
biBjb3B5VG9WZWN0b3IoZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJz
KCkpOworfQorCiBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgOiBtX2NvbmZpZ3VyYXRpb24oY29u
ZmlndXJhdGlvbi5jb3B5KCkpCiAgICAgLCBtX2RlZmF1bHRQYWdlR3JvdXAoV2ViUGFnZUdyb3Vw
OjpjcmVhdGUoKSkKQEAgLTIzOSw3ICsyNDUsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vz
c1Bvb2woQVBJOjpQcm9jCiAgICAgLCBtX2F1dG9tYXRpb25DbGllbnQobWFrZVVuaXF1ZTxBUEk6
OkF1dG9tYXRpb25DbGllbnQ+KCkpCiAgICAgLCBtX2Rvd25sb2FkQ2xpZW50KG1ha2VVbmlxdWVS
ZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSkKICAgICAsIG1faGlzdG9yeUNsaWVudChtYWtlVW5p
cXVlPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCkpCi0gICAgLCBtX2N1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50PigpKQogICAgICwgbV92aXNpdGVkTGlua1N0b3JlKFZpc2l0ZWRMaW5rU3RvcmU6OmNy
ZWF0ZSgpKQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAsIG1faGlnaFBlcmZvcm1hbmNlR3JhcGhp
Y3NVc2FnZVNhbXBsZXIobWFrZVVuaXF1ZTxIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2Ft
cGxlcj4oKnRoaXMpKQpAQCAtMjY3LDkgKzI3Miw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9j
ZXNzUG9vbChBUEk6OlByb2MKICNlbmRpZgogICAgIH0pOwogCi0gICAgaWYgKCFtX3dlYnNpdGVE
YXRhU3RvcmUgJiYgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhp
c3RzKCkpCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpOwotCiAgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBtX2Nv
bmZpZ3VyYXRpb24tPmFsd2F5c1JldmFsaWRhdGVkVVJMU2NoZW1lcygpKQogICAgICAgICBtX3Nj
aGVtZXNUb1JlZ2lzdGVyQXNBbHdheXNSZXZhbGlkYXRlZC5hZGQoc2NoZW1lKTsKIApAQCAtMjg1
LDcgKzI4Nyw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2MKICAg
ICBhZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksICp0aGlzKTsKIAogICAgIC8vIE5PVEU6IFRoZXNlIHN1Yi1vYmplY3RzIG11
c3QgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbV9tZXNzYWdlUmVjZWl2ZXJNYXAuLgotICAgIGFkZFN1
cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2Vi
R2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxXZWJOb3RpZmlj
YXRpb25NYW5hZ2VyUHJveHk+KCk7CiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCkBAIC0zNDIs
OSArMzQzLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6On5XZWJQcm9jZXNzUG9vbCgpCiAgICAgcHJvY2Vz
c1Bvb2xDb3VudGVyLmRlY3JlbWVudCgpOwogI2VuZGlmCiAKLSAgICBpZiAobV9uZXR3b3JrUHJv
Y2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2h1dERvd25Qcm9jZXNzKCk7Ci0KICNp
ZiBFTkFCTEUoR0FNRVBBRCkKICAgICBpZiAoIW1fcHJvY2Vzc2VzVXNpbmdHYW1lcGFkcy5pc0Vt
cHR5KCkpCiAgICAgICAgIFVJR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5wcm9jZXNzUG9v
bFN0b3BwZWRVc2luZ0dhbWVwYWRzKCp0aGlzKTsKQEAgLTQwMiwxNiArNDAwLDYgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2V0QXV0b21hdGlvbkNsaWVudAogICAgICAgICBtX2F1dG9tYXRpb25D
bGllbnQgPSBXVEZNb3ZlKGF1dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRy
PEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudCkKLXsKLSNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQot
ICAgIGlmICghY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAgICBtX2N1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQ+KCk7Ci0gICAgZWxzZQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCA9IFdURk1vdmUoY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsKLSNlbmRpZgotfQot
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlk
ZW50aWZpZXIoY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50
aWZpZXIpCiB7CiAgICAgLy8gR3VhcmQgYWdhaW5zdCBBUEkgbWlzdXNlLgpAQCAtNDIxLDExICs0
MDksNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50CiAgICAgbV9j
b25maWd1cmF0aW9uLT5zZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIo
Y3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKTsKIH0KIAotSVBDOjpDb25u
ZWN0aW9uKiBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkKLXsK
LSAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy0+Y29ubmVjdGlvbigpOwotfQotCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQodm9pZCogY29udGV4dCkKIHsKICAgICBzdGF0
aWNfY2FzdDxXZWJQcm9jZXNzUG9vbCo+KGNvbnRleHQpLT5sYW5ndWFnZUNoYW5nZWQoKTsKQEAg
LTQzNSw4ICs0MTgsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQoKQog
ewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6VXNlclByZWZl
cnJlZExhbmd1YWdlc0NoYW5nZWQoKSk7CiAjaWYgVVNFKFNPVVApCi0gICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVkTGFu
Z3VhZ2VzKCkpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkt
Pm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVm
ZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDApOwogI2Vu
ZGlmCiB9CiAKQEAgLTQ0OSw3ICs0MzEsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpmdWxsS2V5
Ym9hcmRBY2Nlc3NNCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVu
dChib29sIGlzQ3JpdGljYWwpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpB
dXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2Fs
KSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nl
c3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpKTsKKyAgICBmb3Ig
KGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJv
Y2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpBdXhpbGlh
cnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSwgMCk7
CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgUGx1Z2luUHJvY2Vzc01hbmFn
ZXI6OnNpbmdsZXRvbigpLnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpOwogI2Vu
ZGlmCkBAIC00NzQsMjc1ICs0NTcsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzY3JlZW5Qcm9w
ZXJ0aWVzU3RhCiAjZW5kaWYKIH0KIAotTmV0d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bv
b2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0
YVN0b3JlKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgCi0gICAgLy8g
RklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBXZWJL
aXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCi0gICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlz
IG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91ciBBUElzLgot
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYuCi0g
ICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgewotICAgICAgICBjYWxsT25NYWluUnVuTG9vcEFu
ZFdhaXQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICAg
ICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiAq
bV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBpZiAobV9uZXR3b3JrUHJvY2Vzcykgewot
ICAgICAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdlYnNpdGVEYXRhU3RvcmUpKTsKLSAg
ICAgICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotICAgIH0KLQotICAg
IGF1dG8gbmV0d29ya1Byb2Nlc3MgPSBtYWtlVW5pcXVlPE5ldHdvcmtQcm9jZXNzUHJveHk+KCp0
aGlzKTsKLQotICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7
Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBjb3B5VG9WZWN0b3IobV93
ZWJzaXRlRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLSAgICAgICAgbV93ZWJzaXRlRGF0
YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IG1fd2Vic2l0ZURh
dGFTdG9yZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmll
cigpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIg
PSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvblNl
Y29uZGFyeUlkZW50aWZpZXIoKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHBhcmFtZXRlcnMuY2Fj
aGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7
Ci0KLSAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJv
dG9jb2xIYW5kbGVycygpKQotICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVk
Rm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29s
Ojpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb29raWVTdG9yYWdlRGlyZWN0
b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9y
UmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29v
a2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBTdHJpbmcgY29udGFp
bmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJl
Y3RvcnkoKTsKLSAgICBpZiAoIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0g
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3Rv
cnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFw
YXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpU
eXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShlbXB0eVN0cmluZygpLCBTYW5kYm94
RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRB
c1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCku
c2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNS
ZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3Io
TGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBh
c3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVz
UmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNp
bmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKLSAgICBwYXJhbWV0ZXJzLnVy
bFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxT
ZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOwotCi0j
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgLy8gKioqKioqKioqCi0gICAgLy8gSU1Q
T1JUQU5UOiBEbyBub3QgY2hhbmdlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBpbmRleGVk
IGRhdGFiYXNlcyBvbiBkaXNrIHdpdGhvdXQgZmlyc3QgY29uc3VsdGluZyBhIHJldmlld2VyIGZy
b20gQXBwbGUgKDxyZGFyOi8vcHJvYmxlbS8xNzQ1NDcxMj4pCi0gICAgLy8gKioqKioqKioqCi0g
ICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRh
U3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkt
PnBhcmFtZXRlcnMoKS5pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5jcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUocGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwot
ICAgIH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGlmIChtX3dl
YnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRTZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLnNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpCi0gICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9ICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1
bHRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0gICAgYXV0byBs
b2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRh
U3RvcmUtPnJlc29sdmVkTG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0g
ICAgaWYgKCFsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpCi0gICAgICAgIGxvY2FsU3RvcmFnZURpcmVj
dG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdExvY2FsU3RvcmFnZURpcmVj
dG9yeSgpOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxT
dG9yYWdlRGlyZWN0b3J5ID0gbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0b3JhZ2VEaXJl
Y3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gY2FjaGVTdG9yYWdlRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5jYWNoZVN0b3Jh
Z2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVj
dG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNh
Y2hlU3RvcmFnZURpcmVjdG9yeSA9IFdURk1vdmUoY2FjaGVTdG9yYWdlRGlyZWN0b3J5KTsKLSAg
ICB9Ci0KLSAgICBTdHJpbmcgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeTsKLSAgICBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICByZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZl
ZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9yeTsKLSAgICAKLSAgICBp
ZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MgPSBmYWxzZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0
aW5nRXZlbnQgPSBmYWxzZTsKLSAgICBib29sIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSB0cnVl
OwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IGZhbHNl
OwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgV2ViQ29yZTo6VGhp
cmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0g
V2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsOwotICAgIFdlYkNvcmU6
OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnRFbmFibGVkID0gV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6Ok5v
OwotI2VuZGlmCi0gICAgV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUg
Zmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vi
c2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llczsKLSAgICBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0gICAgSGFzaFNldDxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gYXBwQm91bmREb21haW5zOwotICAgIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIG1hbnVhbFByZXZhbGVudFJlc291cmNlOwotCi0jaWYgUExBVEZPUk0o
Q09DT0EpCi0gICAgbV90Y2NQcmVmZXJlbmNlRW5hYmxlZCA9IGRvZXNBcHBIYXZlSVRQRW5hYmxl
ZCgpOwotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSAmJiAhd2l0aFdlYnNpdGVEYXRhU3Rv
cmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIHdpdGhXZWJz
aXRlRGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSAm
JiAhbV93ZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAg
ICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVk
OwotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAoV2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpICYmICFXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAg
ICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJs
ZWQ7Ci0gICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+c2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3Rj
Y1ByZWZlcmVuY2VFbmFibGVkOwotI2VuZGlmCi0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3Rv
cmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IHdpdGhXZWJzaXRl
RGF0YVN0b3JlLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRp
c3RpY3NMb2dUZXN0aW5nRXZlbnQgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGlj
c1Rlc3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zaG91bGRJbmNs
dWRlTG9jYWxob3N0OwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMudGhp
cmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAgIHNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOwotI2Vu
ZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5maXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAgICAgIHN0YW5kYWxvbmVBcHBs
aWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0gICAgICAgICAg
ICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91bmREb21haW5zOwotICAgICAgICAgICAgbWFudWFs
UHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0K
LQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdp
blN0b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVv
dGEoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJU
aGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBlclRo
aXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IGF1
dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZl
ZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVj
dG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5
ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlw
ZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgYXV0byYgaHN0c1N0b3JhZ2VEaXJlY3Rvcnkg
PSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRIU1RTU3RvcmFnZURpcmVjdG9yeSgpOwot
ICAgICAgICBpZiAoIWhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAg
ICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IGhzdHNTdG9yYWdlRGlyZWN0b3J5OwotICAg
ICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGhzdHNTdG9yYWdlRGlyZWN0
b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV93
ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3Mg
PSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0j
aWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+aGFz
U3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hv
dWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRp
c3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdNb2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2Rl
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0
cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxl
ZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUg
PSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRl
cnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFs
b25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAg
ICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWluczsKLSAgICAgICAgICAg
IG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVudFJlc291cmNlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5w
ZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3Jh
Z2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
LnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBl
clRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLQotICAgICAgICBjb25zdCBhdXRvJiBu
ZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29y
a0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0NhY2hlRGlyZWN0b3J5Lmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3
b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFk
V3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBjb25zdCBhdXRvJiBoc3RzU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vi
c2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRIU1RTU3RvcmFnZURpcmVjdG9yeSgpOwotICAgICAgICBp
ZiAoIWhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5o
c3RzU3RvcmFnZURpcmVjdG9yeSA9IGhzdHNTdG9yYWdlRGlyZWN0b3J5OwotICAgICAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGhzdHNTdG9yYWdlRGlyZWN0b3J5LCBTYW5k
Ym94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChX
ZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgICAgICBl
bmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotICAgICAgICBhdXRv
IG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHROZXR3b3Jr
Q2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0g
bmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFk
V3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAg
fQotCi0jaWYgSEFWRShDRk5FVFdPUktfQUxURVJOQVRJVkVfU0VSVklDRSkKLSAgICBpZiAoV2Vi
c2l0ZURhdGFTdG9yZTo6aHR0cDNFbmFibGVkKCkpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRp
dmVTZXJ2aWNlRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdEFsdGVybmF0aXZl
U2VydmljZXNEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZp
Y2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURp
cmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuaHR0cDNFbmFibGVkID0gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLSAg
ICBib29sIGlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0ID0gZmFsc2U7Ci0gICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycyB7Ci0gICAgICAgIFdURk1vdmUocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSks
Ci0gICAgICAgIFdURk1vdmUocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSksCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MsCi0gICAgICAg
IGlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0LAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTG9nVGVzdGluZ0V2ZW50LAotICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0LAot
ICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlLAotI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGUsCi0gICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkLAotI2Vu
ZGlmCi0gICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlLAotICAgICAgICBz
dGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4sCi0gICAgICAgIGFwcEJvdW5kRG9tYWlucywKLSAg
ICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UsCi0gICAgfTsKLQotICAgIC8vIEFkZCBhbnkg
cGxhdGZvcm0gc3BlY2lmaWMgcGFyYW1ldGVycwotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKHBhcmFtZXRlcnMpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgbmV0d29yayBw
cm9jZXNzLgotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKLQotI2lmIFBMQVRG
T1JNKENPQ09BKQotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0UU9TKG5ldHdvcmtQcm9jZXNzTGF0ZW5jeVFPUygpLCBuZXR3b3JrUHJvY2Vzc1Ro
cm91Z2hwdXRRT1MoKSksIDApOwotI2VuZGlmCi0KLSAgICBuZXR3b3JrUHJvY2Vzcy0+dXBkYXRl
UHJvY2Vzc0Fzc2VydGlvbigpOwotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0g
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0
YVN0b3JlKSk7Ci0gICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29r
aWVzKCk7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBuZXR3b3JrIHByb2Nlc3Mga25v
d3MgYWJvdXQgYWxsIHRoZSBzZXNzaW9ucyB0aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGJlZm9y
ZSBpdCBzdGFydGVkLgotICAgIGZvciAoYXV0byYgc2Vzc2lvbklEIDogbV9zZXNzaW9uVG9QYWdl
SURzTWFwLmtleXMoKSkgewotICAgICAgICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdl
YnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChz
ZXNzaW9uSUQpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKndlYnNp
dGVEYXRhU3RvcmUpOwotICAgIH0KLQotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBXVEZNb3ZlKG5l
dHdvcmtQcm9jZXNzKTsKLSAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci19Ci0KIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5
JiBuZXR3b3JrUHJvY2Vzc1Byb3h5KQogewotICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsK
LSAgICBBU1NFUlQoJm5ldHdvcmtQcm9jZXNzUHJveHkgPT0gbV9uZXR3b3JrUHJvY2Vzcy5nZXQo
KSk7Ci0KICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygp
KQogICAgICAgICBzdXBwbGVtZW50LT5wcm9jZXNzRGlkQ2xvc2UoJm5ldHdvcmtQcm9jZXNzUHJv
eHkpOwogCkBAIC03NTEsOSArNDY3LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1By
b2Nlc3NDcmFzaAogICAgIGlmIChtX2F1dG9tYXRpb25TZXNzaW9uKQogICAgICAgICBtX2F1dG9t
YXRpb25TZXNzaW9uLT50ZXJtaW5hdGUoKTsKIAotICAgIC8vIExlYXZlIHRoZSBwcm9jZXNzIHBy
b3h5IGFyb3VuZCBkdXJpbmcgY2xpZW50IGNhbGwsIHNvIHRoYXQgdGhlIGNsaWVudCBjb3VsZCBx
dWVyeSB0aGUgcHJvY2VzcyBpZGVudGlmaWVyLgotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxs
cHRyOwotCiAgICAgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIH0KIApAQCAtNzY0LDIwICs0
NzcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2VzCiAjZW5kaWYK
IH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdl
YlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1Byb3h5LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5
OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQotewot
ICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uKHdlYlByb2Nlc3NQcm94eSwgW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIoKnRoaXMpLCB3ZWJQcm9jZXNzUHJveHkgPSBtYWtlV2Vha1B0cih3ZWJQcm9j
ZXNzUHJveHkpLCByZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYXV0byYgY29ubmVjdGlvbkluZm8p
IG11dGFibGUgewotICAgICAgICBpZiAoVU5MSUtFTFkoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRp
ZmllcklzVmFsaWQoY29ubmVjdGlvbkluZm8uaWRlbnRpZmllcigpKSAmJiB3ZWJQcm9jZXNzUHJv
eHkgJiYgd2Vha1RoaXMpKSB7Ci0gICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xP
R19FUlJPUihQcm9jZXNzLCAiZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOiBGYWlsZWQgZmly
c3QgYXR0ZW1wdCwgcmV0cnlpbmciKTsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24oKndlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIHJlcGx5KGNvbm5lY3Rpb25JbmZvKTsKLSAgICB9KTsK
LX0KLQogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdwdVBy
b2Nlc3NDcmFzaGVkKFByb2Nlc3NJRCBpZGVudGlmaWVyKQogewpAQCAtODAxLDIzICs1MDAsMjYg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0R1BVUHJvY2Vzc0Nvbm5lYwogfQogI2VuZGlmCiAK
K2Jvb2wgV2ViUHJvY2Vzc1Bvb2w6OnNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9
IGZhbHNlOworCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdv
cmtQcm9jZXNzUHJveHkmIHByb3h5LCBSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9t
YWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHByb3h5LCAmcHJveHkg
PT0gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKSk7Ci0KLSAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3Jl
ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lv
bklEKHNlc3Npb25JRCk7Ci0KLSAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAg
aWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUg
PSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLSAg
ICAgICAgd2Vic2l0ZURhdGFTdG9yZSA9IG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsKLSAgICB9
CisgICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5n
RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgaWYgKCF3ZWJzaXRlRGF0YVN0
b3JlKQorICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dERhdGFTdG9yZSgpLnB0cigpOworICAgIGlmICghcHJvY2Vzc1Bvb2xzKCkuc2l6ZSgpKQorICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmPFdlYlByb2Nlc3NQb29sPj4gc2VydmljZVdv
cmtlclByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoQVBJOjpQcm9jZXNzUG9vbENv
bmZpZ3VyYXRpb246OmNyZWF0ZSgpLmdldCgpKSk7CisKKyAgICAvLyBBcmJpdHJhcmlseSBjaG9v
c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCB0byBob3N0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9j
ZXNzLgorICAgIGF1dG8qIHByb2Nlc3NQb29sID0gcHJvY2Vzc1Bvb2xzKClbMF07CisgICAgQVNT
RVJUKHByb2Nlc3NQb29sKTsKIAogICAgIFdlYlByb2Nlc3NQcm94eSogc2VydmljZVdvcmtlclBy
b2Nlc3NQcm94eSB7IG51bGxwdHIgfTsKLSAgICBpZiAoIW1fdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcykgewotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3Nlcykg
ewotICAgICAgICAgICAgaWYgKHByb2Nlc3MgPT0gbV9wcmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nl
c3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkKKworICAgIGlmICghc191c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzKSB7CisgICAgICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IHByb2Nlc3NQ
b29sLT5tX3Byb2Nlc3NlcykgeworICAgICAgICAgICAgaWYgKHByb2Nlc3MgPT0gcHJvY2Vzc1Bv
b2wtPm1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9jZXNzLT5pc0R1bW15UHJvY2Vzc1Byb3h5KCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoJnByb2Nlc3MtPndl
YnNpdGVEYXRhU3RvcmUoKSAhPSB3ZWJzaXRlRGF0YVN0b3JlKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtODI1LDM1ICs1MjcsMzUgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJs
aXNoV29ya2VyQ29udAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBz
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5ID0gcHJvY2Vzcy5nZXQoKTsKLSAgICAgICAgICAgIHNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VXb3JrZXJzKHVzZXJDb250ZW50
Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpKTsKKyAgICAgICAgICAgIHNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VXb3JrZXJzKHByb2Nlc3NQb29s
LT51c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CiAK
LSAgICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQoU2Vydmlj
ZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vz
cyByZXVzaW5nIGFuIGV4aXN0aW5nIHdlYiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwg
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJv
Y2Vzc0lkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xP
R19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIHJldXNpbmcgYW4gZXhpc3Rpbmcgd2ViIHByb2Nl
c3MgKHByb2Nlc3M9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5KSB7Ci0gICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5ID0gV2ViUHJvY2Vzc1Byb3h5
OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2VycygqdGhpcywgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFp
biksICp3ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgYXV0byBuZXdQcm9jZXNzUHJveHkgPSBX
ZWJQcm9jZXNzUHJveHk6OmNyZWF0ZUZvclNlcnZpY2VXb3JrZXJzKCpwcm9jZXNzUG9vbCwgV1RG
TW92ZShyZWdpc3RyYWJsZURvbWFpbiksICp3ZWJzaXRlRGF0YVN0b3JlKTsKICAgICAgICAgc2Vy
dmljZVdvcmtlclByb2Nlc3NQcm94eSA9IG5ld1Byb2Nlc3NQcm94eS5wdHIoKTsKIAotICAgICAg
ICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFNlcnZpY2VXb3JrZXIsICJl
c3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgY3JlYXRpbmcg
YSBuZXcgc2VydmljZSB3b3JrZXIgcHJvY2VzcyAocHJvY2VzPSVwLCBQSUQ9JWQpIiwgc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lk
ZW50aWZpZXIoKSk7CisgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9X
RURfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlv
blRvTmV0d29ya1Byb2Nlc3MgY3JlYXRpbmcgYSBuZXcgc2VydmljZSB3b3JrZXIgcHJvY2VzcyAo
cHJvY2VzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdv
cmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAKLSAgICAgICAgaW5pdGlh
bGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJvY2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3JlKTsKLSAg
ICAgICAgbV9wcm9jZXNzZXMuYXBwZW5kKFdURk1vdmUobmV3UHJvY2Vzc1Byb3h5KSk7CisgICAg
ICAgIHByb2Nlc3NQb29sLT5pbml0aWFsaXplTmV3V2ViUHJvY2VzcyhuZXdQcm9jZXNzUHJveHks
IHdlYnNpdGVEYXRhU3RvcmUpOworICAgICAgICBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMuYXBw
ZW5kKFdURk1vdmUobmV3UHJvY2Vzc1Byb3h5KSk7CiAgICAgfQogCi0gICAgQVNTRVJUKCFtX3Nl
cnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkp
KTsKLSAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5KTsKKyAgICBBU1NFUlQoIXNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlucygq
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMo
KS5hZGQoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpOwogCi0gICAgc2VydmljZVdvcmtlclBy
b2Nlc3NQcm94eS0+ZXN0YWJsaXNoU2VydmljZVdvcmtlckNvbnRleHQobV9zZXJ2aWNlV29ya2Vy
UHJlZmVyZW5jZXMgPyBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcy52YWx1ZSgpIDogbV9kZWZh
dWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLnN0b3JlKCksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICBpZiAoIW1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkKLSAg
ICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2Vu
dChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJv
eHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KHByb2Nlc3NQb29sLT5tX3NlcnZpY2VX
b3JrZXJQcmVmZXJlbmNlcyA/IHByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNl
cy52YWx1ZSgpIDogcHJvY2Vzc1Bvb2wtPm1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMo
KS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgaWYgKCFwcm9jZXNz
UG9vbC0+bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50LmlzTnVsbCgpKQorICAgICAgICBzZXJ2aWNl
V29ya2VyUHJvY2Vzc1Byb3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KHByb2Nlc3NQb29s
LT5tX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpy
ZW1vdmVGcm9tU2VydmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3Mp
CiB7Ci0gICAgQVNTRVJUKG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb250YWlucyhwcm9jZXNz
KSk7Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLnJlbW92ZShwcm9jZXNzKTsKKyAgICBB
U1NFUlQoc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5zKHByb2Nlc3MpKTsKKyAgICBz
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkucmVtb3ZlKHByb2Nlc3MpOwogfQogI2VuZGlmCiAKQEAg
LTkyMiw3ICs2MjQsNyBAQCBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBXZWJQcm9jZXNzUG9vbDo6
CiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCiAgICAgLy8gSW4gcGxhdGZvcm1z
IHVzaW5nIEJ1YmJsZXdyYXAgZm9yIHNhbmRib3hpbmcsIHByZXdhcm1lZCBwcm9jZXNzIGlzIGxh
dW5jaGVkIHVzaW5nIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IFdlYnNpdGVEYXRhU3RvcmUs
CiAgICAgLy8gc28gd2UgZG9uJ3QgdXNlIGl0IGluIGNhc2Ugb2YgdXNpbmcgYSBkaWZmZXJlbnQg
V2Vic2l0ZURhdGFTdG9yZS4KLSAgICBpZiAobV9zYW5kYm94RW5hYmxlZCAmJiBtX3dlYnNpdGVE
YXRhU3RvcmUgJiYgbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpICE9ICZ3ZWJzaXRlRGF0YVN0b3Jl
KQorICAgIGlmIChtX3NhbmRib3hFbmFibGVkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNl
bmRpZgogCkBAIC0xMDMyLDggKzczNCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxp
emVOZXdXZWJQcm8KICAgICAgICAgcHJvY2Vzcy5pc1Jlc3BvbnNpdmUoW2luaXRpYWxpemF0aW9u
QWN0aXZpdHkgPSBXVEZNb3ZlKGluaXRpYWxpemF0aW9uQWN0aXZpdHkpXSAoYm9vbCkgeyB9KTsK
ICAgICB9KTsKIAotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0KICAgICBXZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CiAKICAgICBwYXJhbWV0ZXJzLmluamVjdGVk
QnVuZGxlUGF0aCA9IG1fcmVzb2x2ZWRQYXRocy5pbmplY3RlZEJ1bmRsZVBhdGg7CkBAIC0xMTk4
LDkgKzg5OCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXUKICAg
ICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5pZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcoKTsK
IAogICAgIG1fY29ubmVjdGlvbkNsaWVudC5kaWRDcmVhdGVDb25uZWN0aW9uKHRoaXMsIHByb2Nl
c3MtPndlYkNvbm5lY3Rpb24oKSk7Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAg
ICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSog
cHJvY2VzcykKQEAgLTEyOTUsMTAgKzk5Miw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nl
c3NQb29sOjpjcmVhdGUKICAgICBpZiAoIXBhZ2VDb25maWd1cmF0aW9uLT53ZWJzaXRlRGF0YVN0
b3JlKCkpIHsKICAgICAgICAgLy8gV2UgdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBkZWZhdWx0
IGRhdGEgc3RvcmUgYXMgbG9uZyBhcyBwb3NzaWJsZS4KICAgICAgICAgLy8gQnV0IGlmIHRoZXJl
IGlzIGFuIGF0dGVtcHQgdG8gY3JlYXRlIGEgd2ViIHBhZ2Ugd2l0aG91dCBhbnkgc3BlY2lmaWVk
IGRhdGEgc3RvcmUsIHRoZW4gd2UgaGF2ZSB0byBjcmVhdGUgaXQuCi0gICAgICAgIGlmICghbV93
ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0KLSAgICAgICAg
cGFnZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0b3Jl
LmdldCgpKTsKKyAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCkpOwogICAg
IH0KIAogICAgIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IHByb2Nlc3M7CkBAIC0xMzI5LDcgKzEw
MjMsNyBAQCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlCiAjaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIGlmICghbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMp
IHsKICAgICAgICAgbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMgPSBwYWdlLT5wcmVmZXJlbmNl
c1N0b3JlKCk7Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3Nl
cnZpY2VXb3JrZXJQcm9jZXNzZXMpCisgICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclBy
b2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgICAgICBzZXJ2aWNlV29y
a2VyUHJvY2Vzcy51cGRhdGVTZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXNTdG9yZSgqbV9zZXJ2aWNl
V29ya2VyUHJlZmVyZW5jZXMpOwogICAgIH0KICAgICBpZiAodXNlckNvbnRlbnRDb250cm9sbGVy
KQpAQCAtMTM1Niw3ICsxMDUwLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlU2Vydmlj
ZVdvcmtlcgogICAgIGlmIChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQgPT0gdXNlckFnZW50KQog
ICAgICAgICByZXR1cm47CiAgICAgbV9zZXJ2aWNlV29ya2VyVXNlckFnZW50ID0gdXNlckFnZW50
OwotICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQ
cm9jZXNzZXMpCisgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IHNlcnZpY2VX
b3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3Muc2V0U2Vydmlj
ZVdvcmtlclVzZXJBZ2VudChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOwogfQogI2VuZGlmCkBA
IC0xMzY1LDE1ICsxMDU5LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdX
ZWJzaQogewogICAgIGF1dG8gcmVzdWx0ID0gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmFkZChkYXRh
U3RvcmUuc2Vzc2lvbklEKCksIEhhc2hTZXQ8V2ViUGFnZVByb3h5SWRlbnRpZmllcj4oKSkuaXRl
cmF0b3ItPnZhbHVlLmFkZChwYWdlSUQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1
bHQuaXNOZXdFbnRyeSk7Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9u
SUQoKTsKLSAgICBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkpIHsKLSAgICAgICAgQVNTRVJUKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRh
U3RvcmUucGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0g
c2Vzc2lvbklEKTsKLSAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAg
ICAgICAgIGRhdGFTdG9yZS5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICB9
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VFbmRVc2luZ1dlYnNpdGVEYXRhU3RvcmUo
V2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQsIFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9y
ZSkKQEAgLTE0MDEsNyArMTA4Niw2IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1BhZ2VzVXNp
bmdXZWJzaXQKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRl
RGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFt
ZSkKIHsKICAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0gY3JlYXRlRG93bmxvYWRQcm94eShkYXRh
U3RvcmUsIHJlcXVlc3QsIGluaXRpYXRpbmdQYWdlLCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKIAogICAgIE9wdGlvbmFsPE5hdmln
YXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc0FwcEJvdW5kID0gTmF2aWdhdGluZ1RvQXBwQm91bmRE
b21haW46Ok5vOwogICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewpAQCAtMTQxMSwyNiArMTA5NSwy
MyBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoCiAjZW5kaWYKICAg
ICB9CiAKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBSZXNvdXJjZVJlcXVl
c3QgdXBkYXRlZFJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAgIC8vIFJlcXVlc3QncyBmaXJzdFBh
cnR5Rm9yQ29va2llcyB3aWxsIGJlIHVzZWQgYXMgT3JpZ2luYWwgVVJMIG9mIHRoZSBkb3dubG9h
ZCByZXF1ZXN0LgotICAgICAgICAvLyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBkb2N1
bWVudCdzIFVSTC4KLSAgICAgICAgaWYgKGluaXRpYXRpbmdQYWdlKSB7Ci0gICAgICAgICAgICBV
UkwgaW5pdGlhdGluZ1BhZ2VVUkwgPSBVUkwgeyBVUkwgeyB9LCBpbml0aWF0aW5nUGFnZS0+cGFn
ZUxvYWRTdGF0ZSgpLnVybCgpIH07Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJz
dFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7Ci0gICAgICAgICAgICB1cGRhdGVk
UmVxdWVzdC5zZXRJc1NhbWVTaXRlKGFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGluaXRpYXRp
bmdQYWdlVVJMLCByZXF1ZXN0LnVybCgpKSk7Ci0gICAgICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1
ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKLSAgICAg
ICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdl
LT51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoVVJMKCkpOwot
ICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7Ci0gICAgICAg
ICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6VXNlckFnZW50KSkKLSAgICAgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNl
ckFnZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZhbHNlKTsKLSAgICAgICAgbmV0d29y
a1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25sb2FkUmVxdWVz
dChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1cGRhdGVkUmVxdWVzdCwg
aXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25s
b2FkUHJveHk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJlcXVlc3QpOwor
ICAgIC8vIFJlcXVlc3QncyBmaXJzdFBhcnR5Rm9yQ29va2llcyB3aWxsIGJlIHVzZWQgYXMgT3Jp
Z2luYWwgVVJMIG9mIHRoZSBkb3dubG9hZCByZXF1ZXN0LgorICAgIC8vIFdlIHNldCB0aGUgdmFs
dWUgdG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJMLgorICAgIGlmIChpbml0aWF0aW5nUGFnZSkg
eworICAgICAgICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwgPSBVUkwgeyBVUkwgeyB9LCBpbml0aWF0
aW5nUGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0
LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKKyAgICAgICAgdXBk
YXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVhbChpbml0
aWF0aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOworICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1
ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKKyAgICAg
ICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlhdGluZ1BhZ2UtPnVz
ZXJBZ2VudEZvclVSTChyZXF1ZXN0LnVybCgpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdXBk
YXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoVVJMKCkpOworICAgICAgICB1cGRh
dGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVx
dWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAg
ICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6c3Rh
bmRhcmRVc2VyQWdlbnQoKSk7CiAgICAgfQorICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0
ZShmYWxzZSk7CisgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkRvd25sb2FkUmVxdWVzdChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIGRv
d25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3VuZCwgc3Vn
Z2VzdGVkRmlsZW5hbWUpLCAwKTsKIAogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAt
MTQzOCwxNyArMTExOSwxMiBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxv
YWQoCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6cmVzdW1lRG93bmxvYWQoV2Vic2l0
ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25z
dCBBUEk6OkRhdGEmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBhdXRv
JiBkb3dubG9hZFByb3h5ID0gY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIFJlc291cmNl
UmVxdWVzdCgpLCBpbml0aWF0aW5nUGFnZSwgeyB9KTsKLSAgICBQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7CiAKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZTsKICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQog
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGF0aCwgU2FuZGJveEV4dGVu
c2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIGlm
IChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChzZXNzaW9uSUQsIGRvd25sb2Fk
UHJveHkuZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2Fu
ZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOwotICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsK
LSAgICB9Ci0KKyAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBkb3du
bG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgs
IHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsK
IH0KIApAQCAtMTUxNywxMSArMTE5Myw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZnJlc2hQ
bHVnaW5zKCkKIAogI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogCi1Qcm9j
ZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpCi17Ci0gICAg
cmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MgPyBtX25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzSWRlbnRp
ZmllcigpIDogMDsKLX0KLQogUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpwcmV3YXJtZWRQcm9j
ZXNzSWRlbnRpZmllcigpCiB7CiAgICAgcmV0dXJuIG1fcHJld2FybWVkUHJvY2VzcyA/IG1fcHJl
d2FybWVkUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7CkBAIC0xNTU4LDE0ICsxMjI5
LDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXMKIHsKICAgICBM
ZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3Vy
ZSh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vz
czo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3
b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1l
QXNTZWN1cmUodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNp
dGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgewor
ICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpLCAwKTsKKyAgICB9
KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2lu
Z0NvbnRlbnRTZWN1cml0eVBvbGljeShjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBM
ZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFz
c2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nl
c3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0Nv
bnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJv
Y2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3Np
bmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9y
ZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUm
IGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRl
bnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShjb25z
dCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE1NzgsMTQgKzEyNTMsMTggQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBcwogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdz
OjpzaW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKTsKICAgICBz
ZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1l
QXNMb2NhbCh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpKTsK
KyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1l
XSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3
b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNj
aGVtZUFzTG9jYWwodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmIHVybFNjaGVt
ZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxT
Y2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7
Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpS
ZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFT
dG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3Rv
cmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVy
bFNjaGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3Rl
clVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAt
MTYwNiwxMCArMTI4NSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJM
U2MKICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90
b2NvbEhhbmRsZXJzKCkuYWRkKHVybFNjaGVtZSk7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IGFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsK
LSAgICB9CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94
eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVnaXN0
ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwogfQogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90
b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTYxOCwxMCArMTI5NSw4
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkwKICAgICAgICAgcmV0
dXJuOwogCiAgICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCku
cmVtb3ZlKHVybFNjaGVtZSk7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnVucmVn
aXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwotICAgIH0KKyAg
ICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3
b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1l
Rm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQoY29uc3QgU3RyaW5nJiB1
cmxTY2hlbWUpCkBAIC0xNjU1LDE2ICsxMzMwLDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
dENhY2hlTW9kZWwoQ2FjaGUKIAogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2Vi
UHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSk7CiAKLSAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCksIDApOworICAgIFdlYnNpdGVEYXRh
U3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtjYWNoZU1vZGVsXSAoV2Vic2l0ZURhdGFT
dG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpLCAw
KTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNo
cm9ub3VzbHlGb3JUZXN0aW5nKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIHsKICAgICB1cGRhdGVC
YWNrRm9yd2FyZENhY2hlQ2FwYWNpdHkoKTsKIAotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQot
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9
LCB7IH0pOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtj
YWNoZU1vZGVsXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFT
dG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKGNhY2hlTW9kZWwpLCB7IH0sIDAp
OworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRp
bWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dEludGVydmFsKQpAQCAtMTY3NCwxMiArMTM1MSw3
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRSZXF1ZXN0VGkKIAogRG93bmxvYWRQ
cm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9y
ZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYlBhZ2VQcm94
eSogb3JpZ2luYXRpbmdQYWdlLCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8pCiB7Ci0g
ICAgcmV0dXJuIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCZkYXRhU3RvcmUpLmNyZWF0ZURvd25sb2Fk
UHJveHkoZGF0YVN0b3JlLCByZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7Ci19
Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBi
YWNrZ3JvdW5kKQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElz
QmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKKyAgICByZXR1cm4gZGF0YVN0b3JlLm5ldHdvcmtQcm9j
ZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsICp0aGlzLCByZXF1ZXN0LCBmcmFt
ZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFkZE1l
c3NhZ2VSZWNlaXZlcihJUEM6OlJlY2VpdmVyTmFtZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6
Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQpAQCAtMTc1MCwzMCArMTQyMiw2IEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN0b3BNZW1vcnlTYW1wbGVyKCkKICAgICBzZW5kVG9BbGxQ
cm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlN0b3BNZW1vcnlTYW1wbGVyKCkpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBVJiYgcmVwbHkpCi17Ci0g
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3Nh
Z2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoc3RkOjpmb3J3YXJkPFQ+
KG1lc3NhZ2UpLCBzdGQ6OmZvcndhcmQ8VT4ocmVwbHkpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vz
c2lvbklEKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50
aWFscyhzZXNzaW9uSUQpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRl
TmV0d29ya1Byb2Nlc3MoKQotewotICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7Ci0KLSAg
ICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX25l
dHdvcmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0
cjsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlQWxsV2ViQ29udGVudFByb2Nl
c3NlcygpCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXMg
PSBtX3Byb2Nlc3NlczsKQEAgLTE3ODEsNDAgKzE0MjksMTUgQEAgdm9pZCBXZWJQcm9jZXNzUG9v
bDo6dGVybWluYXRlQWxsV2ViQ29udAogICAgICAgICBwcm9jZXNzLT50ZXJtaW5hdGUoKTsKIH0K
IAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVu
ZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQotewotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKCk7Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJlcGFyZVRvU3VzcGVu
ZChJc1N1c3BlbnNpb25JbW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5Rm9yVGVzdGluZygpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9y
VGVzdGluZygpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWUoKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpCiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQogICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpOwotICAgIHdoaWxl
IChtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKSkKLSAgICAgICAgbV9zZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzLmJlZ2luKCktPmRpc2FibGVTZXJ2aWNlV29ya2VycygpOworICAg
IHdoaWxlIChzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNpemUoKSkKKyAgICAgICAg
c2VydmljZVdvcmtlclByb2Nlc3NlcygpLmJlZ2luKCktPmRpc2FibGVTZXJ2aWNlV29ya2Vycygp
OwogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmZsdXNoQ29va2llcyhjb25zdCBQ
QUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5mbHVzaENvb2tp
ZXMoc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1dG9tYXRpb25DYXBhYmlsaXRpZXMoKSBjb25zdAogewogI2lm
IEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpAQCAtMjA4OSwxNSArMTcxMiwyMSBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpyZXBvcnRXZWJDb250ZW50Q1BVCiAjZW5kaWYKIH0KIAorV2Vha0hhc2hT
ZXQ8V2ViUHJvY2Vzc1Byb3h5PiYgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWFrSGFzaFNldDxXZWJQcm9jZXNz
UHJveHk+PiBwcm9jZXNzZXM7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKwogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbnMoKQogewotICAgIGVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkudXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOworICAgIFdlYnNpdGVEYXRhU3Rv
cmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3Rv
cmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkudXBkYXRlUHJvY2Vzc0Fz
c2VydGlvbigpOworICAgIH0pOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICAvLyBD
aGVjayBvbiBuZXh0IHJ1biBsb29wIHNpbmNlIHRoZSB3ZWIgcHJvY2VzcyBwcm94eSB0b2tlbnMg
YXJlIHByb2JhYmx5IGJlaW5nIHVwZGF0ZWQuCi0gICAgY2FsbE9uTWFpblJ1bkxvb3AoW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyldIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJv
Y2VzcyA6IG1fc2VydmljZVdvcmtlclByb2Nlc3NlcykKKyAgICBjYWxsT25NYWluUnVuTG9vcChb
XSB7CisgICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzc0Fzc2VydGlvbigpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMTA3
LDcgKzE3MzYsNyBAQCBib29sIFdlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlCiB7
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluZWZm
aWNpZW50LgotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcywg
W3BhZ2VJRF0oYXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VX
b3JrZXJQcm9jZXNzZXMoKSwgW3BhZ2VJRF0oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1
cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyUGFnZVByb3h5KHBhZ2VJRCk7CiAgICAgfSk7CiAj
ZW5kaWYKQEAgLTIzMjksMTQgKzE5NTgsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckN1
cnJlbnRNb2RpZmllCiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQot
dm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNm
ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZnJv
bURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvRG9tYWluLCBPcHRpb25TZXQ8Q3Jv
c3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6RmxhZz4gbmF2aWdhdGlvbkRhdGFUcmFuc2Zl
ciwgV2ViUGFnZVByb3h5SWRlbnRpZmllciB3ZWJQYWdlUHJveHlJRCwgUGFnZUlkZW50aWZpZXIg
d2ViUGFnZUlEKQotewotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRh
VHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9tYWluLCB0b0RvbWFpbiwgbmF2aWdhdGlvbkRhdGFU
cmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJRCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVz
c2FnZXM6OldlYlByb2Nlc3M6OlNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKGRvbWFpbnMp
KTsKQEAgLTIzODcsMjcgKzIwMDgsMjcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlQXVk
aWJsZU1lZGlhQQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKIHsKLSAg
ICBpZiAobV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID09IHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MpCisgICAgaWYgKHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogICAgICAgICByZXR1cm47
CiAKLSAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAic2V0VXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAgV0VCUFJP
Q0VTU1BPT0xfUkVMRUFTRV9MT0dfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcz0l
ZCkiLCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIAotICAgIG1fdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7
Ci0gICAgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKLSAgICB0ZXJtaW5hdGVOZXR3b3JrUHJv
Y2VzcygpOworICAgIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3M7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdl
YlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnRl
cm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
CiBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5
Rm9yVGVzdGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yo
c2VydmljZVdvcmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJl
dHVybiBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5n
KCk7CiAgICAgfSk7CiB9CiAKIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJC
YWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjph
bnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICBy
ZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8mIHByb2Nl
c3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRB
Y3Rpdml0eUZvclRlc3RpbmcoKTsKICAgICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkocmV2aXNpb24gMjY3NDY0KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEs
NiBAQCBPQkpDX0NMQVNTIFdLUHJlZmVyZW5jZU9ic2VydmVyOwogCiBuYW1lc3BhY2UgQVBJIHsK
IGNsYXNzIEF1dG9tYXRpb25DbGllbnQ7Ci1jbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQ7CiBjbGFzcyBEb3dubG9hZENsaWVudDsKIGNsYXNzIEhUVFBDb29raWVTdG9yZTsKIGNsYXNz
IEluamVjdGVkQnVuZGxlQ2xpZW50OwpAQCAtMTgwLDcgKzE3OSw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhp
c3RvcnlDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0RG93bmxvYWRDbGllbnQoVW5pcXVlUmVmPEFQ
STo6RG93bmxvYWRDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0QXV0b21hdGlvbkNsaWVudChzdGQ6
OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYmKTsKLSAgICB2b2lkIHNldExlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQ+JiYpOwogCiAgICAgdm9pZCBzZXRDdXN0b21XZWJDb250ZW50
U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5n
JiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX2Nv
bmZpZ3VyYXRpb24tPmN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpOyB9
CkBAIC0xOTEsMTcgKzE4OSw5IEBAIHB1YmxpYzoKICAgICAvLyBudWxsIGNoZWNrcyBpbiBXZWJQ
YWdlUHJveHkuCiAgICAgV2ViUHJvY2Vzc1Byb3h5KiBkdW1teVByb2Nlc3NQcm94eShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpIGNvbnN0IHsgcmV0dXJuIG1fZHVtbXlQcm9jZXNzUHJveGllcy5n
ZXQoc2Vzc2lvbklEKS5nZXQoKTsgfQogCi0gICAgLy8gV2ViUHJvY2VzcyBvciBOZXR3b3JrUHJv
Y2VzcyBhcyBhcHByb3BvcmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4gVGhlIGNvbm5l
Y3Rpb24gbXVzdCBiZSBub24tbnVsbC4KLSAgICBJUEM6OkNvbm5lY3Rpb24qIG5ldHdvcmtpbmdQ
cm9jZXNzQ29ubmVjdGlvbigpOwotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5k
VG9BbGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gdm9pZCBzZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKGNvbnN0IFQmIG1lc3NhZ2UsIFBB
TDo6U2Vzc2lvbklEKTsKIAotICAgIC8vIFNlbmRzIHRoZSBtZXNzYWdlIHRvIFdlYlByb2Nlc3Mg
b3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9k
ZWwuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2Vz
cyhUJiYgbWVzc2FnZSk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gdm9p
ZCBzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UsIFUmJiByZXBseSk7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1
bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpOwotCiAgICAgdm9pZCBwcm9jZXNzRGlkRmlu
aXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSopOwogCiAgICAgV2ViUHJvY2Vzc0NhY2hlJiB3
ZWJQcm9jZXNzQ2FjaGUoKSB7IHJldHVybiBtX3dlYlByb2Nlc3NDYWNoZS5nZXQoKTsgfQpAQCAt
MjA5LDkgKzE5OSw2IEBAIHB1YmxpYzoKICAgICAvLyBEaXNjb25uZWN0IHRoZSBwcm9jZXNzIGZy
b20gdGhlIGNvbnRleHQuCiAgICAgdm9pZCBkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJv
eHkqKTsKIAotICAgIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSogd2Vic2l0ZURhdGFTdG9yZSgp
IGNvbnN0IHsgcmV0dXJuIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0
UHJpbWFyeURhdGFTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeyBt
X3dlYnNpdGVEYXRhU3RvcmUgPSAmZGF0YVN0b3JlOyB9Ci0KICAgICBSZWY8V2ViUGFnZVByb3h5
PiBjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4m
Jik7CiAKICAgICB2b2lkIHBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJv
eHlJZGVudGlmaWVyLCBXZWJzaXRlRGF0YVN0b3JlJik7CkBAIC0yNjIsMTAgKzI0OSw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIGFkZFN1cHBvcnRlZFBsdWdpbihTdHJpbmcmJiBtYXRjaGluZ0RvbWFp
biwgU3RyaW5nJiYgbmFtZSwgSGFzaFNldDxTdHJpbmc+JiYgbWltZVR5cGVzLCBIYXNoU2V0PFN0
cmluZz4gZXh0ZW5zaW9ucyk7CiAgICAgdm9pZCBjbGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIAot
ICAgIFByb2Nlc3NJRCBuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKICAgICBQcm9jZXNzSUQg
cHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKTsKICAgICB2b2lkIGFjdGl2ZVBhZ2VzT3JpZ2lu
c0luV2ViUHJvY2Vzc0ZvclRlc3RpbmcoUHJvY2Vzc0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZlY3RvcjxTdHJpbmc+JiYpPiYmKTsKLSAgICBib29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpOwogCiAgICAgV2ViUGFnZUdyb3VwJiBkZWZh
dWx0UGFnZUdyb3VwKCkgeyByZXR1cm4gbV9kZWZhdWx0UGFnZUdyb3VwLmdldCgpOyB9CiAKQEAg
LTMwNyw4ICsyOTIsNiBAQCBwdWJsaWM6CiAgICAgQVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNs
aWVudCYgaGlzdG9yeUNsaWVudCgpIHsgcmV0dXJuICptX2hpc3RvcnlDbGllbnQ7IH0KICAgICBX
ZWJDb250ZXh0Q2xpZW50JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCi0gICAgQVBJ
OjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCgpIGNvbnN0IHsgcmV0dXJuICptX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsgfQotCiAg
ICAgc3RydWN0IFN0YXRpc3RpY3MgewogICAgICAgICB1bnNpZ25lZCB3a1ZpZXdDb3VudDsKICAg
ICAgICAgdW5zaWduZWQgd2tQYWdlQ291bnQ7CkBAIC0zMjQsMTIgKzMwNyw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwogICAgIHZvaWQgdGVybWlu
YXRlU2VydmljZVdvcmtlcnMoKTsKIAotICAgIHZvaWQgZmx1c2hDb29raWVzKGNvbnN0IFBBTDo6
U2Vzc2lvbklEJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLQogICAgIHZvaWQgc2V0
U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkg
eyBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdmFsdWU7
IH0KICAgICBib29sIHNob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9y
VGVzdGluZzsgfQotICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5j
aEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9j
ZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQotICAgIGJvb2wgc2hvdWxkTWFrZU5l
eHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9z
aG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmc7IH0KIAogICAg
IHZvaWQgcmVwb3J0V2ViQ29udGVudENQVVRpbWUoU2Vjb25kcyBjcHVUaW1lLCB1aW50NjRfdCBh
Y3Rpdml0eVN0YXRlKTsKIApAQCAtMzg4LDE5ICszNjcsMTMgQEAgcHVibGljOgogI2VuZGlmCiAK
ICAgICAvLyBOZXR3b3JrIFByb2Nlc3MgTWFuYWdlbWVudAotICAgIE5ldHdvcmtQcm9jZXNzUHJv
eHkmIGVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0
YVN0b3JlID0gbnVsbHB0cik7Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nl
c3MoKSBjb25zdCB7IHJldHVybiBtX25ldHdvcmtQcm9jZXNzLmdldCgpOyB9CiAgICAgdm9pZCBu
ZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwogCi0gICAgdm9pZCBn
ZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6Oldl
YlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYp
OwotCiAgICAgYm9vbCBpc1NlcnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmll
cikgY29uc3Q7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIHZvaWQgZXN0YWJsaXNo
V29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJv
eHkmLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICBzdGF0aWMgdm9pZCBlc3RhYmxpc2hXb3JrZXJD
b250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgcmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMoV2ViUHJvY2Vzc1Byb3h5Jik7Ci0gICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291
bnQoKSBjb25zdCB7IHJldHVybiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUo
KTsgfQotICAgIHZvaWQgc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2Vy
KGJvb2wgYWxsb3dzKSB7IG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2Vy
ID0gYWxsb3dzOyB9Ci0gICAgYm9vbCBhbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VX
b3JrZXIoKSBjb25zdCB7IHJldHVybiBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vydmlj
ZVdvcmtlcjsgfQorICAgIHNpemVfdCBzZXJ2aWNlV29ya2VyUHJveGllc0NvdW50KCkgY29uc3Qg
eyByZXR1cm4gc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCk7IH0KICAgICB2
b2lkIHVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQp
OwogICAgIGNvbnN0IE9wdGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXI+JiB1
c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSBjb25zdCB7
IHJldHVybiBtX3VzZXJDb250ZW50Q29udHJvbGxlcklERm9yU2VydmljZVdvcmtlcjsgfQogICAg
IGJvb2wgaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25z
dDsKQEAgLTQ1OSw4ICs0MzIsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbHdheXNSdW5zQXRCYWNr
Z3JvdW5kUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiBtX2Fsd2F5c1J1bnNBdEJhY2tncm91bmRQ
cmlvcml0eTsgfQogICAgIGJvb2wgc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbjsgfQogCi0gICAg
dm9pZCBzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCk7Ci0gICAgCiAj
aWYgRU5BQkxFKEdBTUVQQUQpCiAgICAgdm9pZCBnYW1lcGFkQ29ubmVjdGVkKGNvbnN0IFVJR2Ft
ZXBhZCYsIFdlYkNvcmU6OkV2ZW50TWFrZXNHYW1lcGFkc1Zpc2libGUpOwogICAgIHZvaWQgZ2Ft
ZXBhZERpc2Nvbm5lY3RlZChjb25zdCBVSUdhbWVwYWQmKTsKQEAgLTQ5OCw3ICs0NjksNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBjbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpOwog
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICB2b2lkIGRpZENvbW1p
dENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4mIHRvRG9tYWluLCBPcHRpb25TZXQ8V2ViQ29yZTo6Q3Jvc3NTaXRlTmF2aWdh
dGlvbkRhdGFUcmFuc2Zlcjo6RmxhZz4sIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYkNvcmU6
OlBhZ2VJZGVudGlmaWVyKTsKICAgICB2b2lkIHNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9u
KEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYpOwogICAgIHZvaWQgc2VlZFJl
c291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0aW5nKGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluJiBmaXJzdFBhcnR5RG9tYWluLCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biYgdGhpcmRQYXJ0eURvbWFpbiwgYm9vbCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIHNlbmRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YUltbWVkaWF0ZWx5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CkBAIC01
MjUsOCArNDk1LDggQEAgcHVibGljOgogICAgIAogICAgIFBsdWdJbkF1dG9TdGFydFByb3ZpZGVy
JiBwbHVnSW5BdXRvU3RhcnRQcm92aWRlcigpIHsgcmV0dXJuIG1fcGx1Z0luQXV0b1N0YXJ0UHJv
dmlkZXI7IH0KIAotICAgIHZvaWQgc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhi
b29sKTsKLSAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKSBjb25zdCB7
IHJldHVybiBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7IH0KKyAgICBzdGF0aWMg
dm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOworICAgIHN0YXRp
YyBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKSB7IHJldHVybiBzX3VzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7IH0KIAogI2lmIEVOQUJMRShDRlBSRUZTX0RJUkVD
VF9NT0RFKQogICAgIHZvaWQgbm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKGNvbnN0IFN0cmluZyYg
ZG9tYWluLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgT3B0aW9uYWw8U3RyaW5nPiYgZW5jb2Rl
ZFZhbHVlKTsKQEAgLTUzOCw5ICs1MDgsMTUgQEAgcHVibGljOgogICAgIGludDMyX3QgdXNlcklk
KCkgY29uc3QgeyByZXR1cm4gbV91c2VySWQ7IH0KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiB4cGNFbmRwb2ludE1lc3NhZ2UoKSBj
b25zdDsKLSAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNz
KE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4gZW5kcG9pbnRNZXNzYWdlKTsKKyAgICBzdGF0aWMg
dm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyYpOworICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzV2l0
aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisg
ICAgc3RhdGljIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0
cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtp
bmdDYWNoZXNEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNE
aXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9y
eSgpOwogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC01NTYsOCArNTMyLDYgQEAgcHJpdmF0ZToKICAg
ICBXZWJQcm9jZXNzUHJveHkmIGNyZWF0ZU5ld1dlYlByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSos
IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6OklzUHJld2Fy
bWVkOjpObyk7CiAgICAgdm9pZCBpbml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJv
eHkmLCBXZWJzaXRlRGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdl
YlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKIAotICAgIHZvaWQgcGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsK
LQogICAgIHZvaWQgaGFuZGxlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHkpOwogICAgIHZvaWQgaGFu
ZGxlU3luY2hyb25vdXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChVc2VyRGF0YSYmKT4mJik7CiAKQEAgLTU4MSwxNCArNTU1LDYgQEAgcHJpdmF0ZToKIAog
ICAgIGJvb2wgdXNlc1NpbmdsZVdlYlByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ3Vy
YXRpb24tPnVzZXNTaW5nbGVXZWJQcm9jZXNzKCk7IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgc3RhdGljIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgc3Rh
dGljIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIG5l
dHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRD
YWNoZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURp
cmVjdG9yeSgpOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHJlZ2lz
dGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyTm90aWZpY2F0
aW9uT2JzZXJ2ZXJzKCk7CkBAIC02MzAsOSArNTk2LDggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFw
PFBBTDo6U2Vzc2lvbklELCBXZWFrUHRyPFdlYlByb2Nlc3NQcm94eT4+IG1fZHVtbXlQcm9jZXNz
UHJveGllczsgLy8gTGlnaHR3ZWlnaHQgV2ViUHJvY2Vzc1Byb3h5IG9iamVjdHMgd2l0aG91dCBi
YWNraW5nIHByb2Nlc3MuCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2Vha0hh
c2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXM7CisgICAgc3Rh
dGljIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMo
KTsKICAgICBib29sIG1fd2FpdGluZ0ZvcldvcmtlckNvbnRleHRQcm9jZXNzQ29ubmVjdGlvbiB7
IGZhbHNlIH07Ci0gICAgYm9vbCBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdv
cmtlciB7IGZhbHNlIH07CiAgICAgU3RyaW5nIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudDsKICAg
ICBPcHRpb25hbDxXZWJQcmVmZXJlbmNlc1N0b3JlPiBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNl
czsKICAgICBPcHRpb25hbDxVc2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyPiBtX3VzZXJD
b250ZW50Q29udHJvbGxlcklERm9yU2VydmljZVdvcmtlcjsKQEAgLTY0OCw3ICs2MTMsNiBAQCBw
cml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+IG1fYXV0
b21hdGlvbkNsaWVudDsKICAgICBVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4gbV9kb3du
bG9hZENsaWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9y
eUNsaWVudD4gbV9oaXN0b3J5Q2xpZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiAK
ICAgICBSZWZQdHI8V2ViQXV0b21hdGlvblNlc3Npb24+IG1fYXV0b21hdGlvblNlc3Npb247CiAK
QEAgLTY4MCw4ICs2NDQsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9tZW1vcnlTYW1wbGVyRW5h
YmxlZCB7IGZhbHNlIH07CiAgICAgZG91YmxlIG1fbWVtb3J5U2FtcGxlckludGVydmFsIHsgMTQw
MC4wIH07CiAKLSAgICBSZWZQdHI8V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVE
YXRhU3RvcmU7Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIFJlZlB0cjxXZWJD
b250ZXh0U3VwcGxlbWVudD4sIFB0ckhhc2g8Y29uc3QgY2hhcio+PiBXZWJDb250ZXh0U3VwcGxl
bWVudE1hcDsKICAgICBXZWJDb250ZXh0U3VwcGxlbWVudE1hcCBtX3N1cHBsZW1lbnRzOwogCkBA
IC03MTQsOCArNjc2LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9wcm9jZXNzVGVybWluYXRp
b25FbmFibGVkIHsgdHJ1ZSB9OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNz
UHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7Ci0KICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8
RGljdGlvbmFyeUNhbGxiYWNrPj4gbV9kaWN0aW9uYXJ5Q2FsbGJhY2tzOwogCiAjaWYgVVNFKFNP
VVApCkBAIC03MjgsNyArNjg4LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYWx3YXlzUnVuc0F0
QmFja2dyb3VuZFByaW9yaXR5OwogICAgIGJvb2wgbV9zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNz
ZXJ0aW9uOwogICAgIGJvb2wgbV9zaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9y
VGVzdGluZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nl
c3NMYXVuY2hGYWlsRm9yVGVzdGluZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3RjY1ByZWZlcmVu
Y2VFbmFibGVkIHsgZmFsc2UgfTsKIAogICAgIFVzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIgbV91
c2VyT2JzZXJ2YWJsZVBhZ2VDb3VudGVyOwpAQCAtODIwLDMyICs3NzksMTQgQEAgcHJpdmF0ZToK
ICNlbHNlCiAgICAgYm9vbCBtX2lzRGVsYXllZFdlYlByb2Nlc3NMYXVuY2hEaXNhYmxlZCB7IGZh
bHNlIH07CiAjZW5kaWYKLSAgICBib29sIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyB7IGZhbHNlIH07CisgICAgc3RhdGljIGJvb2wgc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBIYXNo
U2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBtX2RvbWFpbnNXaXRoVXNlckludGVyYWN0
aW9uOwogI2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBPU09iamVjdFB0cjx4cGNf
b2JqZWN0X3Q+IG1fZW5kcG9pbnRNZXNzYWdlOwotI2VuZGlmCiB9OwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYm
IG1lc3NhZ2UpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vz
cy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6
OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVj
ZXNzYXJ5KFQmJiBtZXNzYWdlKQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvQWxsUHJv
Y2Vzc2VzKGNvbnN0IFQmIG1lc3NhZ2UpCiB7CiAgICAgc2l6ZV90IHByb2Nlc3NDb3VudCA9IG1f
cHJvY2Vzc2VzLnNpemUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMjY3NDY0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY4LDYgKzI2OCw5IEBA
IHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpzZXRXZWJzaXRlRGF0YVN0b3IKIHsKICAgICBBU1NFUlQo
IW1fd2Vic2l0ZURhdGFTdG9yZSk7CiAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gJmRhdGFTdG9y
ZTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBkYXRhU3RvcmUuc2VuZE5ldHdvcmtQcm9jZXNz
WFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoKnRoaXMpOworI2VuZGlmCiAgICAgdXBkYXRlUmVnaXN0
cmF0aW9uV2l0aERhdGFTdG9yZSgpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNl
dFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzKHByb2Nlc3NQb29sKCkud2ViUHJvY2Vzc0RhdGFT
dG9yZVBhcmFtZXRlcnMoKnRoaXMsIGRhdGFTdG9yZSkpLCAwKTsKIH0KQEAgLTczOCw3ICs3NDEs
NyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6Z2V0UGx1Z2luUHJvY2Vzc0NvCiAKIHZvaWQgV2Vi
UHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oTWVzc2FnZXM6OldlYlBy
b2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiBy
ZXBseSkKIHsKLSAgICBtX3Byb2Nlc3NQb29sLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24o
KnRoaXMsIFdURk1vdmUocmVwbHkpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkuZ2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CiB9CiAKICNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCkBAIC05NTUsOSArOTU4LDggQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6
OmRpZEZpbmlzaExhdW5jaGluZwogICAgIH0KIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGF1
dG8gZW5kcG9pbnRNZXNzYWdlID0gcHJvY2Vzc1Bvb2woKS54cGNFbmRwb2ludE1lc3NhZ2UoKTsK
LSAgICBpZiAoZW5kcG9pbnRNZXNzYWdlKQotICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21l
c3NhZ2UoY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVuZHBvaW50TWVzc2FnZS5nZXQo
KSk7CisgICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAgbV93ZWJzaXRlRGF0YVN0
b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcygqdGhpcyk7CiAj
ZW5kaWYKIAogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3dlYkNvbm5lY3Rpb24pOwpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAJ
KHJldmlzaW9uIDI2NzQ2NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQ
Q29va2llU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw2IEBAIG5hbWVzcGFj
ZSBBUEkgewogSFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQogICAgIDogbV9vd25pbmdEYXRhU3RvcmUod2Vi
c2l0ZURhdGFTdG9yZSkKIHsKLSAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9v
bEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29r
aWVTdG9yZSgpCkBAIC01NSw4ICs1Myw2IEBAIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVT
dG9yZSgpCiAgICAgQVNTRVJUKG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFt
X29ic2VydmVkQ29va2llTWFuYWdlclByb3h5KTsKICAgICBBU1NFUlQoIW1fY29va2llTWFuYWdl
clByb3h5T2JzZXJ2ZXIpOwotCi0gICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZp
Y2F0aW9ucygpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZmlsdGVyQXBwQm91bmRDb29r
aWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtODEsMzMgKzc3LDE2IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3Vu
ZENvb2sKIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JD
b29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiBhbGxDb29raWVzOwotICAgICAgICBpZiAobV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkp
Ci0gICAgICAgICAgICBhbGxDb29raWVzID0gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0
b3JlQ29va2llcygpOwotICAgICAgICBhbGxDb29raWVzLmFwcGVuZFZlY3RvcihtX293bmluZ0Rh
dGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMoKSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRp
c3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGFsbENvb2tpZXNdICgpIG11dGFi
bGUgewotICAgICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGFsbENvb2tpZXMsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29r
aWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiYgY29va2llcykgbXV0YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3du
aW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29r
aWVNYW5hZ2VyLmdldEFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tp
ZT4mIGNvb2tpZXMpIG11dGFibGUgewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29v
a2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhU
VFBDb29raWVTdG9yZTo6Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9y
Q29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBv
b2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29v
a2llTWFuYWdlci0+Z2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVy
bCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+
JiYgY29va2llcykgbXV0YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5n
RGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVN
YW5hZ2VyLmdldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNv
b2tpZXMpIG11dGFibGUgewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtMTE1LDc4ICs5NCwy
OSBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0ZvclVSTChXVEY6CiB2b2lkIEhUVFBD
b29raWVTdG9yZTo6c2V0Q29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29v
a2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIGZpbHRlckFwcEJvdW5kQ29va2llcyhjb29raWVzLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSAoYXV0byYmIGFwcEJvdW5kQ29va2llcykgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8q
IHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpOwotICAgICAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYg
Y29va2llIDogYXBwQm91bmRDb29raWVzKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IHBl
bmRpbmdDb29raWVzIHVzZWQgZm9yIGRlZmF1bHRTZXNzaW9uIGJlY2F1c2Ugc2Vzc2lvbiBjb29r
aWVzIGNhbm5vdCBiZSBwcm9wYWdhdGVkIHRvIE5ldHdvcmsgUHJvY2VzcyB3aXRoIHVpUHJvY2Vz
c0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLgotICAgICAgICAgICAgICAgIGlmIChtX293bmluZ0Rh
dGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQo
KSAmJiAhY29va2llLnNlc3Npb24pCi0gICAgICAgICAgICAgICAgICAgIHNldENvb2tpZUluRGVm
YXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvb2tpZSk7Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+YWRkUGVuZGluZ0Nvb2tpZShj
b29raWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlz
cGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1l
bnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgICAgIGNvb2tpZU1hbmFn
ZXItPnNldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBhcHBCb3VuZENv
b2tpZXMsIFtwb29sID0gV1RGTW92ZShwb29sKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOwotICAgICAgICB9KTsKKyAgICAgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1f
b3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICAg
ICAgY29va2llTWFuYWdlci5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgYXBwQm91bmRDb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7
CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUoY29uc3QgV2ViQ29yZTo6
Q29va2llJiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29s
Rm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAg
aWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgIGRlbGV0ZUNv
b2tpZUZyb21EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9vd25pbmdEYXRhU3RvcmUtPnJlbW92ZVBlbmRpbmdDb29raWUoY29v
a2llKTsKLQotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVDb29r
aWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFtwb29sID0gV1RGTW92
ZShwb29sKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKKyAgICBh
dXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCku
Y29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQ29va2llKG1fb3duaW5n
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpkZWxldGVBbGxDb29raWVzKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29s
ID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlv
bnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+
c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIGRlbGV0ZUNvb2tpZXNJbkRl
ZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpOwotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlz
cGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQWxsQ29v
a2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOworICAgIGF1dG8mIGNvb2tpZU1h
bmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2Vy
KCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSk7CiAgICAgLy8gRklYTUU6IFRoZSBDb21wbGV0aW9uSGFuZGxlciBzaG91
bGQgYmUgcGFzc2VkIHRvIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcy4K
ICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShX
ZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmlu
Z0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAg
IGlmICghcG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAgc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeUlu
RGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKHBvbGljeSk7Ci0gICAgICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9s
aWN5LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
bXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7CisgICAgYXV0
byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNv
b2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLnNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBwb2xpY3ksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmZsdXNoQ29va2llcyhD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yMjcsMjEg
KzE1Nyw3IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKE8KIAogICAg
IG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIgPSBtYWtlVW5pcXVlPEFQSVdlYkNvb2tpZU1h
bmFnZXJQcm94eU9ic2VydmVyPigqdGhpcyk7CiAKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdE
YXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLQotICAg
IGlmICghcG9vbCkgewotICAgICAgICBBU1NFUlQoIW1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2ll
cyk7Ci0KLSAgICAgICAgLy8gTGlzdGVuIGZvciBjb29raWUgbm90aWZpY2F0aW9ucyBpbiB0aGUg
VUlQcm9jZXNzIGluIHRoZSBtZWFudGltZS4KLSAgICAgICAgc3RhcnRPYnNlcnZpbmdDaGFuZ2Vz
VG9EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoW3RoaXNdICgpIHsKLSAgICAgICAgICAgIGNv
b2tpZXNEaWRDaGFuZ2UoKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgbV9vYnNlcnZpbmdVSVBy
b2Nlc3NDb29raWVzID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fb2Jz
ZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAm
bV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwogICAg
IG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9
CiAKQEAgLTI3Niw0NiArMTkyLDEwIEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRGlk
Q2hhbmdlKCkKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVzdHJveWVkKCkK
IHsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT51bnJlZ2lzdGVyT2JzZXJ2ZXIo
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcik7Ci0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG51bGxwdHI7Ci0KLSAg
ICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3Rv
cmFnZU9wZXJhdGlvbnMoKTsKLQotICAgIGlmICghcG9vbCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQ
cm94eSA9ICZtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2Vy
KCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlciht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2Vy
dmVyKTsKIH0KIAotdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bv
b2xOb3RpZmljYXRpb25zKCkKLXsKLSAgICBBU1NFUlQoIW1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxp
c3RlbmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklk
ZW50aWZpZXIgPSBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlz
dGVuZXIoW3RoaXNdKFdlYlByb2Nlc3NQb29sJiBuZXdQcm9jZXNzUG9vbCkgewotICAgICAgICBp
ZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5pc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChuZXdQcm9jZXNz
UG9vbCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gTm93IHRoYXQgYW4gYXNz
b2NpYXRlZCBwcm9jZXNzIHBvb2wgZXhpc3RzLCB3ZSBuZWVkIHRvIGZsdXNoIHRoZSBVSSBwcm9j
ZXNzIGNvb2tpZSBzdG9yZQotICAgICAgICAvLyB0byBtYWtlIHN1cmUgYW55IGNoYW5nZXMgYXJl
IHJlZmxlY3RlZCB3aXRoaW4gdGhlIG5ldyBwcm9jZXNzIHBvb2wuCi0gICAgICAgIGZsdXNoRGVm
YXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIG5ld1Byb2Nlc3NQb29sLmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCk7Ci0KLSAgICAgICAgaWYgKG1fY29va2llTWFuYWdlclByb3h5T2Jz
ZXJ2ZXIpIHsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBuZXdQ
cm9jZXNzUG9vbC5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwot
ICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZl
cihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9i
c2VydmVyKTsKLSAgICAgICAgfQotICAgICAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSFRUUENvb2tpZVN0b3JlOjp1bnJl
Z2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCkKLXsKLSAgICBpZiAobV9wcm9j
ZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKQotICAgICAgICBXZWJQcm9jZXNzUG9v
bDo6dW5yZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihtX3Byb2Nlc3NQb29sQ3Jl
YXRpb25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlz
dGVuZXJJZGVudGlmaWVyID0gMDsKLX0KLQogI2lmICFQTEFURk9STShDT0NPQSkKIHZvaWQgSFRU
UENvb2tpZVN0b3JlOjpmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpIHsgfQogVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4gSFRUUENvb2tpZVN0b3JlOjpnZXRBbGxEZWZhdWx0VUlQcm9j
ZXNzQ29va2llU3RvcmVDb29raWVzKCkgeyByZXR1cm4geyB9OyB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCShyZXZpc2lvbiAy
Njc0NjQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3Jl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDkgKzgzLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lk
IHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJl
Z2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0KICAgICB2b2lkIGZsdXNo
RGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7CiAgICAgc3RhdGljIFZlY3RvcjxXZWJDb3Jl
OjpDb29raWU+IGdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKICAg
ICBzdGF0aWMgdm9pZCBzZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb25z
dCBXZWJDb3JlOjpDb29raWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0LmNwcAkocmV2aXNpb24gMjY3NDY0KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDExLDExICs0MTEs
NiBAQCB2b2lkIFdLQ29udGV4dFByZWNvbm5lY3RUb1NlcnZlcihXS0NvbnRlCiB7CiB9CiAKLVdL
Q29va2llTWFuYWdlclJlZiBXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmKQotewotICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKGNv
bnRleHRSZWYpLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpKTsK
LX0KLQogV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4dEdldFdlYnNpdGVEYXRhU3RvcmUo
V0tDb250ZXh0UmVmKQogewogICAgIHJldHVybiBXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0
RGF0YVN0b3JlKCk7CkBAIC01MjcsMTMgKzUyMiw2IEBAIHZvaWQgV0tDb250ZXh0U2V0SmF2YVNj
cmlwdEdhcmJhZ2VDb2xsZWMKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0SmF2
YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoZW5hYmxlKTsKIH0KIAotdm9pZCBX
S0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5n
KFdLQ29udGV4dFJlZiBjb250ZXh0LCBib29sIGFsbG93cykKLXsKLSNpZiBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCi0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnNldEFsbG93c0FueVNTTENl
cnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlmCi19Ci0KIFdLRGljdGlv
bmFyeVJlZiBXS0NvbnRleHRDb3B5UGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzKFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmKQogewogICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6OnRv
SW1wbChjb250ZXh0UmVmKS0+cGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzKCkubGVha1JlZigp
KTsKQEAgLTU3NSwyMSArNTYzLDExIEBAIHZvaWQgV0tDb250ZXh0U2V0Rm9udEFsbG93TGlzdChX
S0NvbnRleHQKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0Rm9udEFsbG93TGlz
dChXZWJLaXQ6OnRvSW1wbChhcnJheVJlZikpOwogfQogCi12b2lkIFdLQ29udGV4dFRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0KQotewotICAgIFdlYktpdDo6dG9J
bXBsKGNvbnRleHQpLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCiB2b2lkIFdLQ29u
dGV4dFRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29udGV4dFJlZiBjb250ZXh0KQogewogICAg
IFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQog
Ci1Qcm9jZXNzSUQgV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmKQotewotICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVm
KS0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7Ci19Ci0KIHZvaWQgV0tDb250ZXh0QWRkU3Vw
cG9ydGVkUGx1Z2luKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBkb21haW5S
ZWYsIFdLU3RyaW5nUmVmIG5hbWVSZWYsIFdLQXJyYXlSZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5
UmVmIGV4dGVuc2lvbnNSZWYpCiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBA
IC02MTksMTIgKzU5NywxMSBAQCB2b2lkIFdLQ29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3Rh
dGVGCiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPmNsZWFyQ3VycmVudE1vZGlmaWVy
U3RhdGVGb3JUZXN0aW5nKCk7CiB9CiAKLXZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgYm9vbCB1c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQordm9pZCBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzKFdLQ29udGV4dFJlZiwgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzKQogewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRVc2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mp
OworICAgIFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiB9CiAKLXZvaWQgV0tD
b250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYs
IFdLV2Vic2l0ZURhdGFTdG9yZVJlZiB3ZWJzaXRlRGF0YVN0b3JlKQordm9pZCBXS0NvbnRleHRT
ZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYsIFdLV2Vic2l0ZURhdGFTdG9y
ZVJlZikKIHsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0UHJpbWFyeURhdGFT
dG9yZSgqV2ViS2l0Ojp0b0ltcGwod2Vic2l0ZURhdGFTdG9yZSkpOwogfQpJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgJKHJldmlzaW9uIDI2NzQ2NCkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjgsNyArMTY4LDYgQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U3RvcE1lbW9yeVNh
bXBsZQogV0tfRVhQT1JUIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRl
RGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEX1dJVEhf
UkVQTEFDRU1FTlQoV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSk7CiAKIFdL
X0VYUE9SVCBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEFwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyKFdLQ29udGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVE
X1dJVEhfUkVQTEFDRU1FTlQoV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSk7
Ci1XS19FWFBPUlQgV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIo
V0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiBXS19FWFBPUlQgV0tH
ZW9sb2NhdGlvbk1hbmFnZXJSZWYgV0tDb250ZXh0R2V0R2VvbG9jYXRpb25NYW5hZ2VyKFdLQ29u
dGV4dFJlZiBjb250ZXh0KTsKIFdLX0VYUE9SVCBXS0ljb25EYXRhYmFzZVJlZiBXS0NvbnRleHRH
ZXRJY29uRGF0YWJhc2UoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLS2V5VmFs
dWVTdG9yYWdlTWFuYWdlclJlZiBXS0NvbnRleHRHZXRLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyKFdL
Q29udGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1FTlQo
V0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCShyZXZpc2lvbiAy
Njc0NjQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDExICs4Myw4IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29u
dGV4dFdhcm1Jbml0aWFsUHJvY2UKIC8vIEF0IHNvbWUgcG9pbnQgaXQgc2hvdWxkIGJlIHJlbW92
ZWQuCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nlc3MoV0tDb250
ZXh0UmVmLCBib29sKTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlTmV0d29y
a1Byb2Nlc3MoV0tDb250ZXh0UmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0
ZVNlcnZpY2VXb3JrZXJzKFdLQ29udGV4dFJlZik7CiAKLVdLX0VYUE9SVCB2b2lkIFdLQ29udGV4
dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250
ZXh0UmVmLCBib29sKTsKLQogdHlwZWRlZiB2b2lkICgqV0tDb250ZXh0SW52YWxpZE1lc3NhZ2VG
dW5jdGlvbikoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250
ZXh0U2V0SW52YWxpZE1lc3NhZ2VGdW5jdGlvbihXS0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1bmN0
aW9uIGludmFsaWRNZXNzYWdlRnVuY3Rpb24pOwogICAgIApAQCAtOTcsOCArOTQsNiBAQCBXS19F
WFBPUlQgdm9pZCBXS0NvbnRleHRTZXRGb250QWxsb3dMaXN0CiAKIFdLX0VYUE9SVCB2b2lkIFdL
Q29udGV4dFByZWNvbm5lY3RUb1NlcnZlcihXS0NvbnRleHRSZWYgY29udGV4dCwgV0tVUkxSZWYg
c2VydmVyVVJMKSBXS19DX0FQSV9ERVBSRUNBVEVEOwogCi1XS19FWFBPUlQgV0tQcm9jZXNzSUQg
V0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLQ29udGV4dFJlZiBjb250ZXh0
KTsKLQogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKFdLQ29udGV4
dFJlZiBjb250ZXh0LCBXS1N0cmluZ1JlZiBkb21haW4sIFdLU3RyaW5nUmVmIG5hbWUsIFdLQXJy
YXlSZWYgbWltZVR5cGVzLCBXS0FycmF5UmVmIGV4dGVuc2lvbnMpOwogV0tfRVhQT1JUIHZvaWQg
V0tDb250ZXh0Q2xlYXJTdXBwb3J0ZWRQbHVnaW5zKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIApJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCShyZXZpc2lvbiAy
Njc0NjQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTgsNiArMzk4LDExIEBAIHVpbnQ2NF90IFdLUGFnZUdldFJlbmRlclRy
ZWVTaXplKFdLUGFnZVIKICAgICByZXR1cm4gdG9JbXBsKHBhZ2UpLT5yZW5kZXJUcmVlU2l6ZSgp
OwogfQogCitXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tQYWdlR2V0V2Vic2l0ZURhdGFTdG9yZShX
S1BhZ2VSZWYgcGFnZSkKK3sKKyAgICByZXR1cm4gdG9BUEkoJnRvSW1wbChwYWdlKS0+d2Vic2l0
ZURhdGFTdG9yZSgpKTsKK30KKwogV0tJbnNwZWN0b3JSZWYgV0tQYWdlR2V0SW5zcGVjdG9yKFdL
UGFnZVJlZiBwYWdlUmVmKQogewogICAgIHJldHVybiB0b0FQSSh0b0ltcGwocGFnZVJlZiktPmlu
c3BlY3RvcigpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCShy
ZXZpc2lvbiAyNjc0NjQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw4IEBAIFdLX0VYUE9SVCBkb3VibGUgV0tQ
YWdlR2V0RXN0aW1hdGVkUHJvZ3IKIAogV0tfRVhQT1JUIHVpbnQ2NF90IFdLUGFnZUdldFJlbmRl
clRyZWVTaXplKFdLUGFnZVJlZiBwYWdlKTsKIAorV0tfRVhQT1JUIFdLV2Vic2l0ZURhdGFTdG9y
ZVJlZiBXS1BhZ2VHZXRXZWJzaXRlRGF0YVN0b3JlKFdLUGFnZVJlZiBwYWdlKTsKKwogV0tfRVhQ
T1JUIFdLSW5zcGVjdG9yUmVmIFdLUGFnZUdldEluc3BlY3RvcihXS1BhZ2VSZWYgcGFnZSk7CiAK
IFdLX0VYUE9SVCBXS1N0cmluZ1JlZiBXS1BhZ2VDb3B5VXNlckFnZW50KFdLUGFnZVJlZiBwYWdl
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9y
ZVJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmLmNwcAkocmV2aXNpb24gMjY3NDY0KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJB
UElIVFRQQ29va2llU3RvcmUuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAj
aW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiV0tBUElD
YXN0LmgiCiAjaW5jbHVkZSAiV0tEaWN0aW9uYXJ5LmgiCkBAIC02OSw2ICs3MCwxNiBAQCBXS1dl
YnNpdGVEYXRhU3RvcmVSZWYgV0tXZWJzaXRlRGF0YVN0b3JlCiAgICAgcmV0dXJuIFdlYktpdDo6
dG9BUEkoJldlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlKCpXZWJLaXQ6OnRvSW1wbChj
b25maWd1cmF0aW9uKSwgc2Vzc2lvbklEKS5sZWFrUmVmKCkpOwogfQogCit2b2lkIFdLV2Vic2l0
ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBk
YXRhU3RvcmUpCit7CisgICAgV2ViS2l0Ojp0b0ltcGwoZGF0YVN0b3JlKS0+dGVybWluYXRlTmV0
d29ya1Byb2Nlc3MoKTsKK30KKworV0tQcm9jZXNzSUQgV0tXZWJzaXRlRGF0YVN0b3JlR2V0TmV0
d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpCit7
CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGRhdGFTdG9yZSktPm5ldHdvcmtQcm9jZXNzKCku
cHJvY2Vzc0lkZW50aWZpZXIoKTsKK30KKwogdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVSZW1vdmVJ
VFBEYXRhRm9yRG9tYWluKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIFdLU3Ry
aW5nUmVmIGhvc3QsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9yZVJlbW92ZUlUUERh
dGFGb3JEb21haW5GdW5jdGlvbiBjYWxsYmFjaykKIHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgJKHJldmlzaW9uIDI2NzQ2NCkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSwxMyBAQAogI2luY2x1ZGUgPFdlYktpdC9XS0Jhc2UuaD4KICNp
bmNsdWRlIDxXZWJLaXQvV0tEZXByZWNhdGVkLmg+CiAKKyNpZiBkZWZpbmVkKFdJTjMyKSB8fCBk
ZWZpbmVkKF9XSU4zMikKK3R5cGVkZWYgaW50IFdLUHJvY2Vzc0lEOworI2Vsc2UKKyNpbmNsdWRl
IDx1bmlzdGQuaD4KK3R5cGVkZWYgcGlkX3QgV0tQcm9jZXNzSUQ7CisjZW5kaWYKKwogI2lmZGVm
IF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgpAQCAtNTAsNiArNTcsMTEgQEAgV0tf
RVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0QWxsbwogCiBXS19FWFBPUlQgdm9pZCBX
S1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9y
ZVJlZiBkYXRhU3RvcmVSZWYpOwogCitXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVD
bGVhckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOwor
V0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3Mo
V0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSk7CisKK1dLX0VYUE9SVCBXS1Byb2Nlc3NJ
RCBXS1dlYnNpdGVEYXRhU3RvcmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tXZWJzaXRl
RGF0YVN0b3JlUmVmIGRhdGFTdG9yZSk7CisKIFdLX0VYUE9SVCBib29sIFdLV2Vic2l0ZURhdGFT
dG9yZUdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiBkYXRhU3RvcmVSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9y
ZVJlZiwgYm9vbCBlbmFibGUpOwogdHlwZWRlZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlU3Rh
dGlzdGljc0VwaGVtZXJhbEZ1bmN0aW9uKShib29sIGlzRXBoZW1lcmFsLCB2b2lkKiBmdW5jdGlv
bkNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJv
Y2Vzc1Bvb2wubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2wubW0JKHJldmlzaW9uIDI2NzQ2NCkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00
MDYsMjggKzQwNiw2IEBAIC0gKHZvaWQpX2NsZWFyU3VwcG9ydGVkUGx1Z2lucwogICAgIF9wcm9j
ZXNzUG9vbC0+Y2xlYXJTdXBwb3J0ZWRQbHVnaW5zKCk7CiB9CiAKLS0gKHZvaWQpX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzCi17Ci0gICAgX3Byb2Nlc3NQb29sLT50ZXJtaW5hdGVOZXR3b3JrUHJv
Y2VzcygpOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHkKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5k
SW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0KLQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNz
UHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAg
IF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3Rp
bmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0g
ewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0pOwotfQotCi0tICh2b2lkKV9z
ZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3
b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQotCiAtICh2b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycwogewogICAgIF9wcm9jZXNzUG9vbC0+dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKQEAg
LTQzNSwxMiArNDEzLDcgQEAgLSAodm9pZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMKIAogLSAo
dm9pZClfc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczooQk9PTCl1c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzCiB7Ci0gICAgX3Byb2Nlc3NQb29sLT5zZXRVc2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwot
fQotCi0tIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCi17Ci0gICAgcmV0dXJuIF9w
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CisgICAgV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIH0KIAogLSAocGlkX3QpX3ByZXdhcm1lZFByb2Nlc3NJ
ZGVudGlmaWVyCkBAIC00NjcsMTEgKzQ0MCw2IEBAIC0gKHZvaWQpX21ha2VOZXh0V2ViUHJvY2Vz
c0xhdW5jaEZhaWxGb3IKICAgICBfcHJvY2Vzc1Bvb2wtPnNldFNob3VsZE1ha2VOZXh0V2ViUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKHRydWUpOwogfQogCi0tICh2b2lkKV9tYWtlTmV4dE5l
dHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNl
dFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyh0cnVlKTsK
LX0KLQogLSAoQk9PTClfaGFzUHJld2FybWVkV2ViUHJvY2VzcwogewogICAgIGZvciAoYXV0byYg
cHJvY2VzcyA6IF9wcm9jZXNzUG9vbC0+cHJvY2Vzc2VzKCkpIHsKQEAgLTU2MCwxOCArNTI4LDYg
QEAgLSAodm9pZClfc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYQogICAgIF9wcm9jZXNz
UG9vbC0+c2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAK
LS0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAotewot
ICAgIF9wcm9jZXNzUG9vbC0+c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsK
LX0KLQotLSAodm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2Vy
OihCT09MKWFsbG93cwotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBfcHJvY2Vz
c1Bvb2wtPnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3Mp
OwotI2VuZGlmCi19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogLSAoaWQgPF9XS0dlb2xv
Y2F0aW9uQ29yZUxvY2F0aW9uUHJvdmlkZXI+KV9jb3JlTG9jYXRpb25Qcm92aWRlcgogewpAQCAt
NjA0LDExICs1NjAsNiBAQCAtICh2b2lkKV9nZXRBY3RpdmVQYWdlc09yaWdpbnNJbldlYlByb2Nl
CiAgICAgfSk7CiB9CiAKLS0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JU
ZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50Ci17Ci0gICAgcmV0dXJuIF9wcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoZW50aXRsZW1lbnQpOwot
fQotCiAtICh2b2lkKV9jbGVhclBlcm1hbmVudENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNwYWNl
OihOU1VSTFByb3RlY3Rpb25TcGFjZSAqKXByb3RlY3Rpb25TcGFjZQogewogICAgIF9wcm9jZXNz
UG9vbC0+Y2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZShXZWJDb3Jl
OjpQcm90ZWN0aW9uU3BhY2UocHJvdGVjdGlvblNwYWNlKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUu
aAkocmV2aXNpb24gMjY3NDY0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDE0ICs4Nyw5IEBA
CiAtIChfV0tEb3dubG9hZCAqKV9yZXN1bWVEb3dubG9hZEZyb21EYXRhOihOU0RhdGEgKilyZXN1
bWVEYXRhIHdlYnNpdGVEYXRhU3RvcmU6KFdLV2Vic2l0ZURhdGFTdG9yZSAqKWRhdGFTdG9yZSAg
cGF0aDooTlNTdHJpbmcgKilwYXRoIG9yaWdpbmF0aW5nV2ViVmlldzooV0tXZWJWaWV3ICopd2Vi
VmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OwogCiAvLyBUZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgb25seSB3aGlsZSBubyB3ZWIgY29u
dGVudCBwcm9jZXNzZXMgYXJlIHJ1bm5pbmcuCi0tICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2VzcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKLS0gKHZvaWQp
X3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxl
dGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKTsKLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRs
eSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKLS0gKHZvaWQpX3Nl
bmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwg
aW9zKDEzLjApKTsKIC0gKHZvaWQpX3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogCiAvLyBUZXN0IG9ubHkuCi0tIChwaWRf
dClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMp
LCBpb3MoMTEuMCkpOwogLSAocGlkX3QpX3ByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogCiAvLyBUZXN0IG9ubHkuCkBA
IC0xMDYsNyArMTAxLDYgQEAKIC0gKHNpemVfdClfc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSwgaW9zKDEyLjApKTsKIC0gKHZvaWQpX3N5bmNO
ZXR3b3JrUHJvY2Vzc0Nvb2tpZXMgV0tfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVCgi
V0tIVFRQQ29va2llU3RvcmUuX2ZsdXNoQ29va2llc1RvRGlza1dpdGhDb21wbGV0aW9uSGFuZGxl
cjoiLCBtYWNvcygxMC4xMywgV0tfTUFDX1RCQSksIGlvcygxMS4wLCBXS19JT1NfVEJBKSk7CiAt
ICh2b2lkKV9tYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjE0KSwgaW9zKDEyLjApKTsKLS0gKHZvaWQpX21ha2VOZXh0TmV0d29y
a1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0
KSwgaW9zKDEyLjApKTsKIC0gKE5TVUludGVnZXIpX21heGltdW1TdXNwZW5kZWRQYWdlQ291bnQg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKE5TVUludGVn
ZXIpX3Byb2Nlc3NDYWNoZUNhcGFjaXR5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCks
IGlvcygxMi4yKSk7CiAtIChOU1VJbnRlZ2VyKV9wcm9jZXNzQ2FjaGVTaXplIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwpAQCAtMTIyLDEzICsxMTYsMTAgQEAKIC0g
KHZvaWQpX3ByZWNvbm5lY3RUb1NlcnZlcjooTlNVUkwgKilzZXJ2ZXJVUkwgV0tfQVBJX0RFUFJF
Q0FURURfV0lUSF9SRVBMQUNFTUVOVCgiV0tXZWJWaWV3Ll9wcmVjb25uZWN0VG9TZXJ2ZXIiLCBt
YWNvcygxMC4xMy40LCBXS19NQUNfVEJBKSwgaW9zKDExLjMsIFdLX0lPU19UQkEpKTsKIAogLy8g
VGVzdCBvbmx5LgotLSAodm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNl
V29ya2VyOihCT09MKWFsbG93cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3Mo
MTEuMykpOwogLSAodm9pZClfZ2V0QWN0aXZlUGFnZXNPcmlnaW5zSW5XZWJQcm9jZXNzRm9yVGVz
dGluZzoocGlkX3QpcGlkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TQXJyYXk8TlNTdHJp
bmcgKj4gKikpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40
KSwgaW9zKDEyLjIpKTsKLS0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JU
ZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTQuNCksIGlvcygxMi4yKSk7CiAtICh2b2lkKV9jbGVhclBlcm1hbmVudENyZWRlbnRpYWxzRm9y
UHJvdGVjdGlvblNwYWNlOihOU1VSTFByb3RlY3Rpb25TcGFjZSAqKXByb3RlY3Rpb25TcGFjZSBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIAogQHByb3BlcnR5IChu
b25hdG9taWMsIGdldHRlcj1faXNDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZCwgc2V0
dGVyPV9zZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZDopIEJPT0wgX2Nvb2tpZVN0
b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkIFdLX0FQSV9ERVBSRUNBVEVEKCJQYXJ0aXRpb25lZCBj
b29raWVzIGFyZSBubyBsb25nZXIgc3VwcG9ydGVkIiwgbWFjb3MoMTAuMTIuMywgMTAuMTQuNCks
IGlvcygxMC4zLCAxMi4yKSk7Ci0tICh2b2lkKV9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOihC
T09MKWJhY2tncm91bmQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7
CiAKIC8vIFRlc3Qgb25seS4KIC0gKHZvaWQpX3NlZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRm9y
VGVzdGluZ1dpdGhGaXJzdFBhcnR5OihOU1VSTCAqKWZpcnN0UGFydHlVUkwgdGhpcmRQYXJ0eToo
TlNVUkwgKil0aGlyZFBhcnR5VVJMIHNob3VsZFNjaGVkdWxlTm90aWZpY2F0aW9uOihCT09MKXNo
b3VsZFNjaGVkdWxlTm90aWZpY2F0aW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKHZvaWQp
KWNvbXBsZXRpb25IYW5kbGVyICBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2Vic2l0ZURhdGFTdG9yZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCShyZXZpc2lvbiAyNjc0NjQpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC02MTcsNiArNjE3LDExIEBAIC0gKHZvaWQpX3JlbmFtZU9yaWdp
bjooTlNVUkwgKilvbGROYW1lIHQKICAgICB9KTsKIH0KIAorLSAoQk9PTClfbmV0d29ya1Byb2Nl
c3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQKK3sKKyAg
ICByZXR1cm4gX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRG
b3JUZXN0aW5nKGVudGl0bGVtZW50KTsKK30KKwogLSAoaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVE
ZWxlZ2F0ZT4pX2RlbGVnYXRlCiB7CiAgICAgcmV0dXJuIF9kZWxlZ2F0ZS5nZXQoKS5nZXQoKTsK
QEAgLTY2OCw0ICs2NzMsNDIgQEAgLSAodm9pZClfYXBwQm91bmRTY2hlbWVzOih2b2lkICheKShO
U0FycgogI2VuZGlmCiB9CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCit7Cisg
ICAgX3dlYnNpdGVEYXRhU3RvcmUtPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Cit9CisKKy0g
KHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkp
Y29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQ
cm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFr
ZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOworICAgIH0pOworfQorCistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVu
ZEltbWluZW50bHkKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworCit9CisKKy0gKHZvaWQpX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKK30KKworLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdv
cmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKK30KKwor
LSAocGlkX3QpX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcgoreworICAgIHJldHVybiBfd2Vic2l0
ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5wcm9jZXNzSWRlbnRpZmllcigpOworfQorCisr
ICh2b2lkKV9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcKK3sKKyAg
ICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hG
YWlsRm9yVGVzdGluZygpOworfQorCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRl
LmgJKHJldmlzaW9uIDI2NzQ2NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDkgKzg1
LDE5IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tXZWJzaXQKIAogLSAodm9p
ZClfcmVuYW1lT3JpZ2luOihOU1VSTCAqKW9sZE5hbWUgdG86KE5TVVJMICopbmV3TmFtZSBmb3JE
YXRhT2ZUeXBlczooTlNTZXQ8TlNTdHJpbmcgKj4gKilkYXRhVHlwZXMgY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyOwogCistIChCT09MKV9uZXR3b3Jr
UHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudCBX
S19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCiBA
cHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHdlYWspIGlkIDxfV0tXZWJzaXRlRGF0YVN0
b3JlRGVsZWdhdGU+IF9kZWxlZ2F0ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9z
KDEzLjApKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgX1dLV2Vic2l0
ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKl9jb25maWd1cmF0aW9uOwogCistICh2b2lkKV90ZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc2VuZE5ldHdvcmtQ
cm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRS
ZXN1bWUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KTsKKy0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZCBX
S19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAo
cGlkX3QpX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworKyAodm9pZClfbWFrZU5leHROZXR3b3JrUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBlbmQKIAogTlNfQVNTVU1FX05PTk5VTExfRU5ECklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRDb29raWVNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjY3NDY0KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRD
b29raWVNYW5hZ2VyLmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5j
bHVkZSAiU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZS5oIgogI2luY2x1ZGUgIldlYkNv
b2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYktpdENvb2tpZU1hbmFnZXJQcml2YXRl
LmgiCkBAIC01Niw2ICs1NywxMiBAQCBlbnVtIHsKIH07CiAKIHN0cnVjdCBfV2ViS2l0Q29va2ll
TWFuYWdlclByaXZhdGUgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdl
cigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoZGF0YU1hbmFnZXIpOworICAgICAgICBy
ZXR1cm4gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGRhdGFNYW5hZ2VyKS5u
ZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICB9CisKICAgICBQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGRhdGFNYW5hZ2Vy
KTsKQEAgLTY0LDggKzcxLDcgQEAgc3RydWN0IF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSB7
CiAKICAgICB+X1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlKCkKICAgICB7Ci0gICAgICAgIGZv
ciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNz
UG9vbHMoZGF0YU1hbmFnZXIpKQotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8
V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Np
b25JRCgpLCBudWxscHRyKTsKKyAgICAgICAgY29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2Vy
dmVyQ2FsbGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOwogICAgIH0KIAogICAgIFdlYktpdFdl
YnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbmFnZXI7CkBAIC0xMzksMTEgKzE0NSw5IEBAIFdlYktp
dENvb2tpZU1hbmFnZXIqIHdlYmtpdENvb2tpZU1hbmFnZXIKIHsKICAgICBXZWJLaXRDb29raWVN
YW5hZ2VyKiBtYW5hZ2VyID0gV0VCS0lUX0NPT0tJRV9NQU5BR0VSKGdfb2JqZWN0X25ldyhXRUJL
SVRfVFlQRV9DT09LSUVfTUFOQUdFUiwgbnVsbHB0cikpOwogICAgIG1hbmFnZXItPnByaXYtPmRh
dGFNYW5hZ2VyID0gZGF0YU1hbmFnZXI7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRh
TWFuYWdlcikpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFu
YWdlclByb3h5PigpLT5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNl
c3Npb25JRCgpLCBbbWFuYWdlcl0gewotICAgICAgICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2Vy
LCBzaWduYWxzW0NIQU5HRURdLCAwKTsKLSAgICAgICAgfSk7Ci0gICAgfQorICAgIG1hbmFnZXIt
PnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXIt
PnByaXYtPnNlc3Npb25JRCgpLCBbbWFuYWdlcl0geworICAgICAgICBnX3NpZ25hbF9lbWl0KG1h
bmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOworICAgIH0pOwogICAgIHJldHVybiBtYW5hZ2Vy
OwogfQogCkBAIC0xNzMsOCArMTc3LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0
X3BlcnNpc3RlbgogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29v
a2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1l
KSwgdG9Tb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0b3JhZ2UpKTsKKyAgICBtYW5h
Z2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuc2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vz
c2lvbklELCBTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2llUGVyc2lzdGVu
dFN0b3JhZ2VUeXBlKHN0b3JhZ2UpKTsKIH0KIAogLyoqCkBAIC0xOTIsOCArMTk1LDcgQEAgdm9p
ZCB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wbwogewogICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsKIAotICAgIGZvciAoYXV0
byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMo
bWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxl
bWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
bWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xp
Y3kpLCBbXSgpIHsgfSk7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldEhU
VFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENv
b2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CiB9CiAKIC8qKgpAQCAtMjI0LDcg
KzIyNiw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG8KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCktPmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+
cHJpdi0+c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENv
b2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5h
Z2VyKCkuZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQo
KSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5
IHBvbGljeSkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2ludCh0YXNrLmdldCgpLCB0b1dlYktp
dENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKICAgICB9KTsKIH0KQEAgLTI2OSwxMSArMjcx
LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZShXZQogICAgIGdfcmV0
dXJuX2lmX2ZhaWwoY29va2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdS
ZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7
Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxp
dGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2Ug
YWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAg
ICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQ
cm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29s
c1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZXMobWFu
YWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tpZSkgfSwgW3Rh
c2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2Vy
KCkuc2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgeyBXZWJDb3JlOjpDb29r
aWUoY29va2llKSB9LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgewogICAgICAgICBnX3Rhc2tf
cmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJVRSk7CiAgICAgfSk7CiB9CkBAIC0zMjAsMTEg
KzMxOCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzKFcKICAgICBn
X3JldHVybl9pZl9mYWlsKHVyaSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRH
UmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkp
OwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FM
aXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdl
IGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0g
ICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0
UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9v
bHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVzKG1h
bmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJp
KSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4m
IGNvb2tpZXMpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuZ2V0Q29va2ll
cyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21VVEY4
KHVyaSkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29r
aWU+JiBjb29raWVzKSB7CiAgICAgICAgIEdMaXN0KiBjb29raWVzTGlzdCA9IG51bGxwdHI7CiAg
ICAgICAgIGZvciAoYXV0byYgY29va2llIDogY29va2llcykKICAgICAgICAgICAgIGNvb2tpZXNM
aXN0ID0gZ19saXN0X3ByZXBlbmQoY29va2llc0xpc3QsIGNvb2tpZS50b1NvdXBDb29raWUoKSk7
CkBAIC0zNzgsMTEgKzM3Miw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9j
b29raWUKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNr
PiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxi
YWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20v
dG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9m
IHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBw
cm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsK
LSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5Pigp
LT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tp
ZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIG1hbmFnZXItPnByaXYt
PmNvb2tpZU1hbmFnZXIoKS5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgewogICAg
ICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJVRSk7CiAgICAgfSk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRXZWJDb250ZXh0LmNwcAkocmV2aXNpb24gMjY3NDY0KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
NCw3ICs0MDQsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoCiAg
ICAgICAgIHByaXYtPndlYnNpdGVEYXRhTWFuYWdlciA9IGFkb3B0R1JlZih3ZWJraXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXJfbmV3KCJsb2NhbC1zdG9yYWdlLWRpcmVjdG9yeSIsIHByaXYtPmxvY2Fs
U3RvcmFnZURpcmVjdG9yeS5kYXRhKCksIG51bGxwdHIpKTsKIAogICAgIHByaXYtPnByb2Nlc3NQ
b29sID0gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShjb25maWd1cmF0aW9uKTsKLSAgICBwcml2LT5w
cm9jZXNzUG9vbC0+c2V0UHJpbWFyeURhdGFTdG9yZSh3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXREYXRhU3RvcmUocHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKSk7CiAgICAgcHJpdi0+
cHJvY2Vzc1Bvb2wtPnNldFVzZXJNZXNzYWdlSGFuZGxlcihbd2ViQ29udGV4dF0oVXNlck1lc3Nh
Z2UmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJNZXNzYWdlJiYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAgIC8vIFNpbmsgdGhlIGZsb2F0aW5nIHJlZi4KICAg
ICAgICAgR1JlZlB0cjxXZWJLaXRVc2VyTWVzc2FnZT4gdXNlck1lc3NhZ2UgPSB3ZWJraXRVc2Vy
TWVzc2FnZUNyZWF0ZShXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CkBAIC0xNjAzLDggKzE2MDIsOCBAQCB2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9wcmVmZXRj
aF9kbnMoV2ViCiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0NPTlRFWFQoY29u
dGV4dCkpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoaG9zdG5hbWUpOwogCi0gICAgaWYgKGNvbnRl
eHQtPnByaXYtPmRuc1ByZWZldGNoZWRIb3N0cy5hZGQoaG9zdG5hbWUpLmlzTmV3RW50cnkpCi0g
ICAgICAgIGNvbnRleHQtPnByaXYtPnByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vz
cyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWZldGNoRE5TKFN0cmluZzo6ZnJvbVVURjgo
aG9zdG5hbWUpKSk7CisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IHdlYmtpdFdlYnNpdGVE
YXRhTWFuYWdlckdldERhdGFTdG9yZShjb250ZXh0LT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIu
Z2V0KCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5nOjpmcm9tVVRGOChob3N0bmFt
ZSkpLCAwKTsKICAgICBjb250ZXh0LT5wcml2LT5kbnNQcmVmZXRjaEh5c3RlcmVyaXMuaW1wdWxz
ZSgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1
dG9tYXRpb25TZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAkocmV2aXNpb24gMjY3NDY0KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTIsOCArMTM5Miw4IEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2sKIAogICAgIGNvb2tpZS5odHRwT25seSA9ICpodHRw
T25seTsKIAotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9IG1fcHJv
Y2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tp
ZU1hbmFnZXItPnNldENvb2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgp
LCB7IGNvb2tpZSB9LCBbY2FsbGJhY2tdKCkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYg
Y29va2llTWFuYWdlciA9IHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vzcygp
LmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMocGFnZS0+d2Vi
c2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBbY2FsbGJhY2tdKCkgewog
ICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9KTsKIH0KQEAgLTE0MDksOCAr
MTQwOSw4IEBAIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4KIAogICAg
IFN0cmluZyBob3N0ID0gYWN0aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2ViQ29v
a2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsg
aG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBXZWJD
b29raWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0YVN0b3Jl
KCkubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5k
ZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9u
SUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOwog
CiAgICAgcmV0dXJuIHsgfTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dC5oCShyZXZpc2lvbiAyNjc0NjQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9M
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
MTEgKzQxLDExIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHk7CiAKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCBmaW5hbCA6IHB1YmxpYyBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCB7Ci1wcml2
YXRlOgorcHVibGljOgogICAgIHZvaWQgc3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JikgZmluYWw7CiAgICAgdm9pZCBzdG9wTG9hZGluZyhMZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJQcm94eSYsIExlZ2FjeUN1c3RvbVByb3RvY29sSUQpIGZpbmFsOwogICAg
IHZvaWQgaW52YWxpZGF0ZShMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYpIGZpbmFs
OwotCitwcml2YXRlOgogICAgIEhhc2hNYXA8TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgUmV0YWlu
UHRyPFdLQ3VzdG9tUHJvdG9jb2xMb2FkZXI+PiBtX2xvYWRlck1hcDsKIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2Nv
YS5tbQkocmV2aXNpb24gMjY3NDY0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTM0LDggKzEzNCw5IEBA
IHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQKIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKQogewotICAgIGlmIChtX25l
dHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZXRQcm9jZXNzU3VwcHJl
c3Npb25FbmFibGVkKHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSk7CisgICAgV2Vic2l0ZURh
dGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW2VuYWJsZWQgPSBwcm9jZXNzU3VwcHJl
c3Npb25FbmFibGVkKCldIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAg
ZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChl
bmFibGVkKTsKKyAgICB9KTsKIAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAg
IGlmICghbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCkp
CkBAIC0xNjYsOCArMTY3LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFs
aXplKAogICAgIGlmICghW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9v
bEZvcktleTpAIldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyIl0pCiAgICAgICAg
IGluc3RhbGxNZW1vcnlQcmVzc3VyZUhhbmRsZXIoKTsKIAotICAgIHNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudD4oKSk7Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFD
Q0FUQUxZU1QpCiAgICAgaWYgKCFfTUdDYWNoZVZhbGlkKCkpIHsKICAgICAgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9E
RUZBVUxULCAwKSwgXnsKQEAgLTQ5MywyMiArNDkyLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cGxhdGZvcm1Jbml0aWFsaXplTgogCiAgICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0gW05T
VXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKIAotICAgIHsKLSAgICAgICAgYm9v
bCBpc1NhZmFyaSA9IGZhbHNlOwotICAgICAgICBib29sIGlzTWluaUJyb3dzZXIgPSBmYWxzZTsK
LSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBpc1NhZmFyaSA9IFdlYkNvcmU6OklP
U0FwcGxpY2F0aW9uOjppc01vYmlsZVNhZmFyaSgpOwotICAgICAgICBpc01pbmlCcm93c2VyID0g
V2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTWluaUJyb3dzZXIoKTsKLSNlbGlmIFBMQVRGT1JN
KE1BQykKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNTYWZh
cmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6Ok1hY0FwcGxpY2F0aW9uOjpp
c01pbmlCcm93c2VyKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGlzU2FmYXJpIHx8IGlzTWluaUJy
b3dzZXIpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBQcm94eSA9IFVSTChVUkwoKSwgW2RlZmF1
bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcgKilXZWJLaXQySFRUUFByb3h5RGVmYXVsdHNLZXld
KTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBzUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBz
dHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBTUHJveHlEZWZhdWx0c0tleV0pOwot
ICAgICAgICB9Ci0gICAgfQotCiAgICAgcGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dCA9IGFk
b3B0Q0YoX0NGTmV0d29ya0NvcHlBVFNDb250ZXh0KCkpOwogCiAgICAgcGFyYW1ldGVycy5zaG91
bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciA9IFtkZWZhdWx0cyBib29sRm9yS2V5Oldl
YktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyRGVmYXVsdHNLZXldOwpAQCAtNTIyLDEy
ICs1MDUsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAgICAg
TlNOdW1iZXIgKmRhdGFiYXNlRW5hYmxlZFZhbHVlID0gW2RlZmF1bHRzIG9iamVjdEZvcktleTpb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkludGVybmFsRGVidWclQCIsIFdlYlByZWZlcmVu
Y2VzS2V5Ojppc0lUUERhdGFiYXNlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCld
XTsKICAgICBpZiAoZGF0YWJhc2VFbmFibGVkVmFsdWUpCiAgICAgICAgIHBhcmFtZXRlcnMuc2hv
dWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBkYXRhYmFzZUVuYWJsZWRWYWx1ZS5ib29sVmFsdWU7Ci0g
ICAgZWxzZQotICAgICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gbV9k
ZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLmlzSVRQRGF0YWJhc2VFbmFibGVkKCk7CiAK
ICAgICBwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSA9IFtkZWZh
dWx0cyBib29sRm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRXhwZXJpbWVudGFs
JUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6YWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlRW5hYmxl
ZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKLQotICAgIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFwcEhhc1JlcXVl
c3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbiA9IGhhc1JlcXVlc3RlZENyb3NzV2Vi
c2l0ZVRyYWNraW5nUGVybWlzc2lvbigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0
Zm9ybUludmFsaWRhdGVDb250ZXh0KCkKQEAgLTYwNiwxMSArNTg1LDYgQEAgYm9vbCBXZWJQcm9j
ZXNzUG9vbDo6cHJvY2Vzc1N1cHByZXNzaW9uRQogICAgIHJldHVybiAhbV91c2VyT2JzZXJ2YWJs
ZVBhZ2VDb3VudGVyLnZhbHVlKCkgJiYgIW1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQ
YWdlQ291bnRlci52YWx1ZSgpOwogfQogCi1ib29sIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJv
Y2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmIGVudGl0bGVtZW50KQot
ewotICAgIHJldHVybiBXVEY6Omhhc0VudGl0bGVtZW50KGVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
Y29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVudGl0bGVtZW50LnV0ZjgoKS5kYXRhKCkp
OwotfQotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNU
KQogZmxvYXQgV2ViUHJvY2Vzc1Bvb2w6OmRpc3BsYXlCcmlnaHRuZXNzKCkKIHsKQEAgLTk0Nywy
MyArOTIxLDQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJIaWdoRHluYW1pYwogfQog
I2VuZGlmCiAKLU9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4gV2ViUHJvY2Vzc1Bvb2w6OnhwY0Vu
ZHBvaW50TWVzc2FnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZW5kcG9pbnRNZXNzYWdlOwot
fQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRv
V2ViUHJvY2VzcyhPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSkKLXsK
LSAgICBtX2VuZHBvaW50TWVzc2FnZSA9IGVuZHBvaW50TWVzc2FnZTsKLQotICAgIGZvciAoYXV0
byBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsKLSAgICAgICAgaWYgKHByb2Nlc3MtPnN0YXRlKCkg
IT0gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpTdGF0ZTo6UnVubmluZykKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBpZiAoIXByb2Nlc3MtPmNvbm5lY3Rpb24oKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBhdXRvIGNvbm5lY3Rpb24gPSBwcm9jZXNzLT5jb25uZWN0aW9u
KCktPnhwY0Nvbm5lY3Rpb24oKTsKLSAgICAgICAgeHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNzYWdl
KGNvbm5lY3Rpb24sIGVuZHBvaW50TWVzc2FnZS5nZXQoKSk7Ci0gICAgfQotfQotCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAJKHJldmlzaW9uIDI2NzQ2NCkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzUsOCArNzUsOCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmNhbmNlbCgpCiAgICAgaWYg
KCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoTmV0d29ya1Byb2Nl
c3NQcm94eSogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOworICAgIGlmIChtX2RhdGFTdG9yZSkK
KyAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOwogfQogCiB2b2lk
IERvd25sb2FkUHJveHk6OmludmFsaWRhdGUoKQpAQCAtMTAzLDE1ICsxMDMsMTMgQEAgV2ViUGFn
ZVByb3h5KiBEb3dubG9hZFByb3h5OjpvcmlnaW5hdGluZwogI2lmIFBMQVRGT1JNKENPQ09BKQog
dm9pZCBEb3dubG9hZFByb3h5OjpwdWJsaXNoUHJvZ3Jlc3MoY29uc3QgVVJMJiBVUkwpCiB7Ci0g
ICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgIGlmICghbV9kYXRhU3RvcmUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRs
ZTsKLSAgICAgICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6
VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRT
YW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbik7Ci0gICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2Fk
UHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwotICAgIH0KKyAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOworICAgIGJvb2wgY3JlYXRlZFNhbmRib3hFeHRl
bnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1QYXRo
KCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgaGFuZGxlKTsKKyAgICBBU1NF
UlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJveEV4dGVuc2lv
bik7CisgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKG1fZG93bmxvYWRJRCwgVVJMLCBo
YW5kbGUpLCAwKTsKIH0KICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKIApAQCAtMTMxLDExICsx
MjksMTAgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRTdGFydChjb25zdCBSZXNvdQogCiB2b2lk
IERvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCB1aW50NjRfdCBjaGFs
bGVuZ2VJRCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFtX3Byb2Nlc3NQ
b29sIHx8ICFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBhdXRoZW50
aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eTo6Y3Jl
YXRlKFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBjaGFsbGVuZ2VJRCwgbWFrZVJl
ZigqbV9wcm9jZXNzUG9vbC0+bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkpLCBudWxscHRy
KTsKLQorICAgIGF1dG8gYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlUHJveHk6OmNyZWF0ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KSwgY2hhbGxlbmdlSUQsIG1ha2VSZWYoKm1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNv
bm5lY3Rpb24oKSksIG51bGxwdHIpOwogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50
KCkuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCp0aGlzLCBhdXRoZW50aWNhdGlv
bkNoYWxsZW5nZVByb3h5LmdldCgpKTsKIH0KIApAQCAtMTQ2LDE1ICsxNDMsMTAgQEAgdm9pZCBE
b3dubG9hZFByb3h5Ojp3aWxsU2VuZFJlcXVlc3QoUmVzbwogCiAgICAgbV9wcm9jZXNzUG9vbC0+
ZG93bmxvYWRDbGllbnQoKS53aWxsU2VuZFJlcXVlc3QoKnRoaXMsIFdURk1vdmUocHJvcG9zZWRS
ZXF1ZXN0KSwgcmVkaXJlY3RSZXNwb25zZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKV0oUmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVxdWVzdCkgewogICAgICAgICBtX3JlZGly
ZWN0Q2hhaW4uYXBwZW5kKG5ld1JlcXVlc3QudXJsKCkpOwotCi0gICAgICAgIGlmICghcHJvdGVj
dGVkVGhpcy0+bV9wcm9jZXNzUG9vbCkKKyAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX2Rh
dGFTdG9yZSkKICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBhdXRvKiBuZXR3b3JrUHJv
Y2Vzc1Byb3h5ID0gcHJvdGVjdGVkVGhpcy0+bV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KTsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzc1Byb3h5KQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzUHJveHktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpDb250aW51ZVdpbGxTZW5kUmVxdWVzdChwcm90ZWN0ZWRUaGlzLT5tX2Rvd25sb2Fk
SUQsIG5ld1JlcXVlc3QpLCAwKTsKKyAgICAgICAgYXV0byYgbmV0d29ya1Byb2Nlc3NQcm94eSA9
IHByb3RlY3RlZFRoaXMtPm1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpOworICAgICAgICBu
ZXR3b3JrUHJvY2Vzc1Byb3h5LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51
ZVdpbGxTZW5kUmVxdWVzdChwcm90ZWN0ZWRUaGlzLT5tX2Rvd25sb2FkSUQsIG5ld1JlcXVlc3Qp
LCAwKTsKICAgICB9KTsKIH0KIApAQCAtMTc5LDE2ICsxNzEsMTQgQEAgdm9pZCBEb3dubG9hZFBy
b3h5OjpkZWNpZGVEZXN0aW5hdGlvbldpdAogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAg
ICAgcmV0dXJuOwogICAgIAotICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVj
aWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJlc291cmNlUmVzcG9u
c2VCYXNlOjpzYW5pdGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKSwgW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxvYWRJRCA9IGRvd25sb2Fk
SURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7
CisgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldp
dGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXpl
U3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCBkb3dubG9hZElEXSAoQWxsb3dPdmVyd3JpdGUgYWxsb3dPdmVy
d3JpdGUsIFN0cmluZyBkZXN0aW5hdGlvbikgewogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZTsKICAgICAgICAgaWYgKCFkZXN0aW5hdGlvbi5p
c051bGwoKSkKICAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShkZXN0
aW5hdGlvbiwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5kYm94RXh0ZW5z
aW9uSGFuZGxlKTsKIAotICAgICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgICAgIGlmICgh
bV9kYXRhU3RvcmUpCiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGlu
dWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElELCBkZXN0aW5hdGlv
biwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxsb3dPdmVyd3Jp
dGU6OlllcyksIDApOworICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWRE
ZXN0aW5hdGlvbihkb3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6OlllcyksIDApOwogICAgIH0pOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94
eU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkUHJveHlNYXAuY3BwCShyZXZpc2lvbiAyNjc0NjQpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDcgKzQ0LDcgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBEb3dubG9hZFByb3h5TWFw
OjpEb3dubG9hZFByb3h5TWFwKE5ldHdvcmtQcm9jZXNzUHJveHkmIHByb2Nlc3MpCi0gICAgOiBt
X3Byb2Nlc3MobWFrZVdlYWtQdHIocHJvY2VzcykpCisgICAgOiBtX3Byb2Nlc3MocHJvY2VzcykK
ICNpZiBQTEFURk9STShDT0NPQSkKICAgICAsIG1fc2hvdWxkVGFrZUFzc2VydGlvbihXVEY6OnBy
b2Nlc3NIYXNFbnRpdGxlbWVudCgiY29tLmFwcGxlLm11bHRpdGFza2luZy5zeXN0ZW1hcHBhc3Nl
cnRpb25zIikpCiAjZW5kaWYKQEAgLTcwLDE0ICs3MCwxMiBAQCB2b2lkIERvd25sb2FkUHJveHlN
YXA6OnBsYXRmb3JtRGVzdHJveSgpCiAKIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRp
b25EaWRFbnRlckJhY2tncm91bmQoKQogewotICAgIGlmIChtX3Byb2Nlc3MpCi0gICAgICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uRGlkRW50
ZXJCYWNrZ3JvdW5kKCksIDApOworICAgIG1fcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7CiB9CiAKIHZvaWQg
RG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkKIHsKLSAg
ICBpZiAobV9wcm9jZXNzKQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpBcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKSwgMCk7CisgICAgbV9w
cm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbldpbGxFbnRl
ckZvcmVncm91bmQoKSwgMCk7CiB9CiAKIERvd25sb2FkUHJveHkmIERvd25sb2FkUHJveHlNYXA6
OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQcm9j
ZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVz
b3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94
eSogb3JpZ2luYXRpbmdQYWdlKQpAQCAtOTIsMTMgKzkwLDEyIEBAIERvd25sb2FkUHJveHkmIERv
d25sb2FkUHJveHlNYXA6OmNyZWF0ZUQKICAgICAgICAgbV9kb3dubG9hZFVJQXNzZXJ0aW9uID0g
bWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihnZXRDdXJyZW50UHJvY2Vzc0lEKCksICJXZWJL
aXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2lu
Zyk7CiAKICAgICAgICAgQVNTRVJUKCFtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbik7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcHJvY2Vzcyk7Ci0gICAgICAgIG1fZG93bmxvYWROZXR3
b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3Byb2Nlc3Mt
PnByb2Nlc3NJZGVudGlmaWVyKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0
aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CisgICAgICAgIG1fZG93bmxvYWROZXR3b3Jr
aW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihtX3Byb2Nlc3MucHJv
Y2Vzc0lkZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25U
eXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAogICAgICAgICBSRUxFQVNFX0xPRyhQcm9jZXNz
U3VzcGVuc2lvbiwgIlVJUHJvY2VzcyB0b29rICdXZWJLaXQgZG93bmxvYWRzJyBhc3NlcnRpb25z
IGZvciBVSVByb2Nlc3MgYW5kIE5ldHdvcmtQcm9jZXNzIik7CiAgICAgfQogCi0gICAgbV9wcm9j
ZXNzLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSwg
ZG93bmxvYWRQcm94eS5nZXQoKSk7CisgICAgbV9wcm9jZXNzLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZFBy
b3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsKIAog
ICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTA5LDEyICsxMDYsOSBAQCB2b2lkIERv
d25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQoCiAKICAgICBSRUxFQVNFX0xPRyhMb2Fk
aW5nLCAiUmVtb3ZpbmcgZG93bmxvYWQgJSIgUFJJdTY0ICIgZnJvbSBVSVByb2Nlc3MgRG93bmxv
YWRQcm94eU1hcCIsIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKIAotICAgIC8vIFRoZSBEb3du
bG9hZFByb3h5IG1heSBiZSBob2xkaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgcHJvY2Vz
cyBwb29sLgotICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmUHRyKG1fcHJv
Y2Vzcy0+cHJvY2Vzc1Bvb2woKSk7Ci0KICAgICBBU1NFUlQobV9kb3dubG9hZHMuY29udGFpbnMo
ZG93bmxvYWRJRCkpOwogCi0gICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRJRC5k
b3dubG9hZElEKCkpOworICAgIG1fcHJvY2Vzcy5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRJRC5kb3du
bG9hZElEKCkpOwogICAgIGRvd25sb2FkUHJveHkuaW52YWxpZGF0ZSgpOwogICAgIG1fZG93bmxv
YWRzLnJlbW92ZShkb3dubG9hZElEKTsKIApAQCAtMTMzLDE1ICsxMjcsMTMgQEAgdm9pZCBEb3du
bG9hZFByb3h5TWFwOjppbnZhbGlkYXRlKCkKICAgICBmb3IgKGNvbnN0IGF1dG8mIGRvd25sb2Fk
IDogbV9kb3dubG9hZHMudmFsdWVzKCkpIHsKICAgICAgICAgZG93bmxvYWQtPnByb2Nlc3NEaWRD
bG9zZSgpOwogICAgICAgICBkb3dubG9hZC0+aW52YWxpZGF0ZSgpOwotICAgICAgICBtX3Byb2Nl
c3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7Cisg
ICAgICAgIG1fcHJvY2Vzcy5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2Fk
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWQtPmRvd25sb2FkSUQoKS5kb3du
bG9hZElEKCkpOwogICAgIH0KIAogICAgIG1fZG93bmxvYWRzLmNsZWFyKCk7CiAgICAgbV9kb3du
bG9hZFVJQXNzZXJ0aW9uID0gbnVsbHB0cjsKICAgICBtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2Vy
dGlvbiA9IG51bGxwdHI7CiAgICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICJVSVBy
b2Nlc3MgRG93bmxvYWRQcm94eU1hcCBpbnZhbGlkYXRlZCAtIFJlbGVhc2VkICdXZWJLaXQgZG93
bmxvYWRzJyBhc3NlcnRpb25zIGZvciBVSVByb2Nlc3MgYW5kIE5ldHdvcmtQcm9jZXNzIik7Ci0K
LSAgICBtX3Byb2Nlc3MgPSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
UHJveHlNYXAuaAkocmV2aXNpb24gMjY3NDY0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1DcmVhdGUoKTsKICAgICB2b2lkIHBsYXRm
b3JtRGVzdHJveSgpOwogCi0gICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX3Byb2Nl
c3M7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbV9wcm9jZXNzOwogICAgIEhhc2hNYXA8RG93
bmxvYWRJRCwgUmVmUHRyPERvd25sb2FkUHJveHk+PiBtX2Rvd25sb2FkczsKIAogICAgIGJvb2wg
bV9zaG91bGRUYWtlQXNzZXJ0aW9uIHsgZmFsc2UgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAkocmV2
aXNpb24gMjY3NDY0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKIAogI2luY2x1ZGUgIkFQSUNvbnRlbnRSdWxlTGlz
dC5oIgorI2luY2x1ZGUgIkFQSUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oIgogI2luY2x1
ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCIKICNpbmNsdWRlICJBdXRoZW50aWNh
dGlvbk1hbmFnZXIuaCIKICNpbmNsdWRlICJEb3dubG9hZFByb3h5TWFwLmgiCkBAIC0zNSw2ICsz
Niw3IEBACiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAj
ZW5kaWYKKyNpbmNsdWRlICJMZWdhY3lHbG9iYWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlck1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mby5oIgpAQCAtNDgsNiArNTAs
NyBAQAogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUg
IlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRSdWxl
TGlzdC5oIgorI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldl
YlBhZ2VNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldl
YlByb2Nlc3NNZXNzYWdlcy5oIgpAQCAtNTgsOCArNjEsMTAgQEAKICNpbmNsdWRlICJXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhLmgiCiAjaW5j
bHVkZSAiV2Vic2l0ZURhdGFTdG9yZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1JlZ2lzdHJhYmxlRG9tYWluLmg+CisjaW5jbHVkZSA8d3RmL0NhbGxiYWNr
QWdncmVnYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogCiAjaWYg
RU5BQkxFKFNFQ19JVEVNX1NISU0pCkBAIC03MCwyMCArNzUsMTIxIEBACiAjaW5jbHVkZSA8d3Rm
L3NwaS9kYXJ3aW4vWFBDU1BJLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2lu
Y2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oIgorI2VuZGlmCisKICNk
ZWZpbmUgTUVTU0FHRV9DSEVDSyhhc3NlcnRpb24pIE1FU1NBR0VfQ0hFQ0tfQkFTRShhc3NlcnRp
b24sIGNvbm5lY3Rpb24oKSkKIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAotTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eShXZWJQ
cm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCi0gICAgOiBBdXhpbGlhcnlQcm9jZXNzUHJveHkocHJv
Y2Vzc1Bvb2wuYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCi0gICAgLCBtX3Byb2Nl
c3NQb29sKHByb2Nlc3NQb29sKQorc3RhdGljIEhhc2hTZXQ8TmV0d29ya1Byb2Nlc3NQcm94eSo+
JiBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8TmV0d29ya1Byb2Nl
c3NQcm94eSo+PiBzZXQ7CisgICAgcmV0dXJuIHNldDsKK30KKworVmVjdG9yPFJlZjxOZXR3b3Jr
UHJvY2Vzc1Byb3h5Pj4gTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3Nlcygp
Cit7CisgICAgVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzOworICAg
IHByb2Nlc3Nlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5z
aXplKCkpOworICAgIGZvciAoYXV0byogbmV0d29ya1Byb2Nlc3MgOiBuZXR3b3JrUHJvY2Vzc2Vz
U2V0KCkpCisgICAgICAgIHByb2Nlc3Nlcy51bmNoZWNrZWRBcHBlbmQoKm5ldHdvcmtQcm9jZXNz
KTsKKyAgICByZXR1cm4gcHJvY2Vzc2VzOworfQorCitzdGF0aWMgUmVmUHRyPE5ldHdvcmtQcm9j
ZXNzUHJveHk+JiBkZWZhdWx0UHJvY2VzcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gcHJvY2VzczsKKyAgICByZXR1cm4gcHJvY2Vz
cy5nZXQoKTsKK30KKworUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmRlZmF1bHROZXR3b3JrUHJvY2VzcygpCit7CisgICAgaWYgKCFkZWZhdWx0UHJvY2Vzcygp
KQorICAgICAgICBkZWZhdWx0UHJvY2VzcygpID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRl
KCk7CisgICAgcmV0dXJuICpkZWZhdWx0UHJvY2VzcygpOworfQorCit2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnRlcm1pbmF0ZSgpCit7CisgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Ojp0ZXJt
aW5hdGUoKTsKKyAgICBkaWRUZXJtaW5hdGUoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpkaWRUZXJtaW5hdGUoKQoreworICAgIGlmICh0aGlzID09IGRlZmF1bHRQcm9jZXNzKCku
Z2V0KCkpCisgICAgICAgIGRlZmF1bHRQcm9jZXNzKCkgPSBudWxscHRyOworfQorCit2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKQor
eworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBp
cyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9u
LW1haW4gdGhyZWFkcy4KKyAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZv
cmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCisgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KKyAgICBpZiAoIVJ1bkxv
b3A6OmlzTWFpbigpKSB7CisgICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpc10g
eworICAgICAgICAgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAg
ICAgICB9KTsKKyAgICB9CisKKyAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBw
YXJhbWV0ZXJzOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9
IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1Rv
UmVnaXN0ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVk
QXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xv
YmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250
ZW50U2VjdXJpdHlQb2xpY3koKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigp
LnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNS
ZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6
c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOworICAgIHBhcmFtZXRl
cnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1v
ZGVsKCk7CisgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1l
c1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCisgICAgICAgIHBhcmFtZXRlcnMudXJsU2No
ZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7CisjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnkg
PSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFn
ZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJp
bmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdD
YWNoZXNEaXJlY3RvcnkoKTsgIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCisg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVj
dG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsgIXBhcmVudEJ1
bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJl
YWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CisjZW5kaWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1By
b2Nlc3MocGFyYW1ldGVycyk7CisgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6Oklu
aXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKSwgMCk7Cit9CisKK3N0YXRpYyBib29s
IGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkKK3sKKyAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygp
KSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+YWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9y
aXR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRB
c3NlcnRpb24oKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9v
bDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5zaG91bGRU
YWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5KCkKKyAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShhbnlQcm9jZXNzUG9v
bEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQogI2lmIEVOQUJMRShMRUdBQ1lfQ1VT
VE9NX1BST1RPQ09MX01BTkFHRVIpCisgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dChtYWtlVW5pcXVlUmVmPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICAg
ICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKnRoaXMpCisjZWxzZQorICAgICwgbV9j
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZVJlZjxBUEk6OkN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudD4oKSkKICNlbmRpZgotICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIHBy
b2Nlc3NQb29sLnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fdGhy
b3R0bGVyKCp0aGlzLCBhbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRp
b24oKSkKKyAgICAsIG1fY29va2llTWFuYWdlcihXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0
ZSgqdGhpcykpCiB7CiAgICAgY29ubmVjdCgpOworICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNU
b05ld1Byb2Nlc3MoKTsKKyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuYWRkKHRoaXMpOwogfQog
CiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgpCkBAIC05OCw2ICsy
MDQsNyBAQCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94CiAKICAgICBp
ZiAobV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAtPmludmFs
aWRhdGUoKTsKKyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkucmVtb3ZlKHRoaXMpOwogfQogCiB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVy
OjpMYXVuY2hPcHRpb25zJiBsYXVuY2hPcHRpb25zKQpAQCAtMTA1LDE1ICsyMTIsOCBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvCiAgICAgbGF1bmNoT3B0aW9ucy5w
cm9jZXNzVHlwZSA9IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6Ok5ldHdvcms7CiAgICAg
QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKGxhdW5jaE9wdGlvbnMpOwog
Ci0gICAgaWYgKHByb2Nlc3NQb29sKCkuc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5j
aEZhaWxGb3JUZXN0aW5nKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2woKS5zZXRTaG91bGRNYWtl
TmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoZmFsc2UpOworICAgIGlmIChX
ZWJzaXRlRGF0YVN0b3JlOjpzaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZv
clRlc3RpbmcoKSkKICAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5j
aEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShQTEFZU1RBVElP
TikKLSAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NQYXRoID0gbV9wcm9jZXNzUG9vbC5uZXR3b3Jr
UHJvY2Vzc1BhdGgoKTsKLSAgICBsYXVuY2hPcHRpb25zLnVzZXJJZCA9IG1fcHJvY2Vzc1Bvb2wu
dXNlcklkKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpjb25uZWN0
aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMTY2LDEyICsyNjYs
MTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBwSQogICAgIH0KIH0K
IAotRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94
eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVz
b3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94
eSogb3JpZ2luYXRpbmdQYWdlKQorRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6
Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nl
c3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVl
c3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5h
dGluZ1BhZ2UpCiB7CiAgICAgaWYgKCFtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93
bmxvYWRQcm94eU1hcCA9IG1ha2VVbmlxdWU8RG93bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0g
ICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3Rv
cmUsIG1fcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGlu
Z1BhZ2UpOworICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJv
eHkoZGF0YVN0b3JlLCBwcm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9y
aWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZmV0Y2hXZWJz
aXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0
aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoV2Vic2l0ZURhdGEpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMjM3LDggKzMzNywxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6Om5l
dHdvcmtQcm9jZXNzCiB7CiAgICAgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCi0gICAgLy8gVGVs
bCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRoaXMgbmV0d29y
ayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1c2UgdXMgdG8gYmUgZGVsZXRlZC4KLSAgICBt
X3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CisgICAgUmVmPE5ldHdv
cmtQcm9jZXNzUHJveHk+IHByb3RlY3RlZFRoaXMoKnRoaXMpOworICAgIGZvciAoYXV0byogcHJv
Y2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMpOworICAgIGZvciAoYXV0byYg
d2Vic2l0ZURhdGFTdG9yZSA6IG1fd2Vic2l0ZURhdGFTdG9yZXMpCisgICAgICAgIHdlYnNpdGVE
YXRhU3RvcmUubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpjbGVhckNhbGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICszNjEsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzCiAgICAgaWYgKGRpc3BhdGNo
TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KG1fcHJvY2Vzc1Bvb2wuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQotICAg
ICAgICByZXR1cm47Ci0KICAgICBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2Uo
Y29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAKQEAgLTI3NCw4ICszNzQsNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVTeW5jCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKLSAgICBhdXRvIHByb3RlY3RlZFByb2Nl
c3NQb29sID0gbWFrZVJlZihtX3Byb2Nlc3NQb29sKTsKLQogICAgIGlmIChtX2Rvd25sb2FkUHJv
eHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+aW52YWxpZGF0ZSgpOwogI2lmIEVO
QUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCkBAIC0zMzEsMTEgKzQyOSw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZUF1dGgKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nlc3NQb29sLmlzU2Vydmlj
ZVdvcmtlclBhZ2VJRChwYWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShzZXNzaW9uSUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6Zm9yTW9zdFZpc2libGVX
ZWJQYWdlSWZBbnkoc2Vzc2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IFdURk1v
dmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVnYWN5VExTXShhdXRvKiBw
YWdlKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTM5MiwxMSArNDg1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRGaW5p
c2hMYXVuYwogICAgICAgICBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChtX3Byb2Nlc3NQb29sLnBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSkKLSAgICAgICAgc2V0UHJvY2Vzc1N1cHByZXNzaW9u
RW5hYmxlZCh0cnVlKTsKLSNlbmRpZgogICAgIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgaWYgKHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiA9IHRoaXMtPmNvbm5lY3Rpb24oKS0+
eHBjQ29ubmVjdGlvbigpKQpAQCAtMTIwNSw3ICsxMjkzLDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzZXRUaGlyZFBhcnR5QwogfQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXRE
b21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluPiYmIGRvbWFpbnMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS5zZXREb21haW5zV2l0aFVzZXJJ
bnRlcmFjdGlvbihXVEZNb3ZlKGRvbWFpbnMpKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9v
bC0+c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbj4geyBkb21haW5zIH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCiAKQEAgLTEyNTIsNDUgKzEzNDEsMzEgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpmbHVzaENvb2tpZXMoYwogICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkZsdXNoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lv
bihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25J
RHMuYWRkKHN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5hZGQo
c3RvcmUpOwogCiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUtPnBhcmFtZXRl
cnMoKSB9LCAwKTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0b3JlLT5zZXNzaW9uSUQoKTsKKyAg
ICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUg
eyBzdG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCk7CisgICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS5z
ZXNzaW9uSUQoKTsKICAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7CiAjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFk
ZShzdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CisgICAgICAgIGNy
ZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURp
cmVjdG9yeSgpKTsKICNlbmRpZgogICAgIH0KIH0KIAotYm9vbCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpoYXNTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9zZXNzaW9uSURzLmNvbnRhaW5zKHNlc3Npb25JRCk7Ci19Ci0KLXZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYgd2Vi
c2l0ZURhdGFTdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMucmVtb3ZlKHNlc3Npb25JRCk7Cisg
ICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5yZW1vdmUod2Vic2l0ZURhdGFTdG9yZSk7CiAKICAgICBp
ZiAoY2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkRlc3Ryb3lTZXNzaW9uIHsgc2Vzc2lvbklEIH0sIDApOworICAgICAgICBzZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24geyB3ZWJzaXRlRGF0YVN0b3JlLnNl
c3Npb25JRCgpIH0sIDApOwogfQogCiBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3b3JrUHJvY2Vzc1By
b3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9y
ZUV4aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gbV9wcm9j
ZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAgICAgICBpZiAod2Vic2l0ZURhdGFT
dG9yZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBzZXNzaW9uSUQpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAg
IH0KLSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0
b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6
OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3JhZ2VQYXJhbWV0ZXJzKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCkKQEAgLTEzMzcsNyArMTQxMiw3IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6ZGlkRGVzdHJveVdlYlUKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9O
ZXR3b3JrUHJvY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9tYWluLCBQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKLSAgICBtX3Byb2Nlc3NQb29sLmVzdGFibGlzaFdvcmtlckNvbnRleHRD
b25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFp
biksIHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIFdlYlByb2Nl
c3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3Mo
KnRoaXMsIFJlZ2lzdHJhYmxlRG9tYWluIHtyZWdpc3RyYWJsZURvbWFpbn0sIHNlc3Npb25JRCwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OndvcmtlckNvbnRleHRDb25uZWN0aW9uTm9Mb25nZXJOZWVkZWQoV2ViQ29yZTo6UHJvY2Vz
c0lkZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTE1MDAsMTYgKzE1NzUsMzQgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpwcmVjb25uZWN0VG8oUAogICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vzc2lvbklELCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFn
ZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0KIAorc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xI
YXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9j
ZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgYW55UHJv
Y2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8qIHBy
b2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAg
IGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCkKIHsKLSAgICBpZiAocHJv
Y2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJv
Y2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9j
ZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2Vi
UHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0
aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGZvcmVncm91bmQg
dmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91bmQoKSwgMCk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNCYWNrZ3JvdW5kV2Vi
UHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJv
Y2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkQmFja2dy
b3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAg
bV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZp
dHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0JhY2tn
cm91bmQoKSwgMCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjY3NDY0KQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDEyICs0NiwxNyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVk
ZSAiWFBDRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRyLmg+CiAjZW5k
aWYKIAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBGb3JtRGF0YVJlZmVyZW5jZTsKIH0KIAorbmFt
ZXNwYWNlIEFQSSB7CitjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7Cit9CisKIG5h
bWVzcGFjZSBQQUwgewogY2xhc3MgU2Vzc2lvbklEOwogfQpAQCAtNzMsOCArNzgsOCBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERvd25sb2FkUHJv
eHlNYXA7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7
Ci1jbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5OwogCiBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyA6IGJvb2w7CkBA
IC04Niw4ICs5MSw5IEBAIHN0cnVjdCBGcmFtZUluZm9EYXRhOwogc3RydWN0IE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFJlc291cmNlTG9hZEluZm87CiBzdHJ1Y3Qg
V2Vic2l0ZURhdGE7CitzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM7CiAKLWNsYXNz
IE5ldHdvcmtQcm9jZXNzUHJveHkgZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5
LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxO
ZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDog
cHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xp
ZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4sIHB1YmxpYyBS
ZWZDb3VudGVkPE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKICAgICB1c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluOwpAQCAtMTAyLDEyICsxMDgsMTggQEAgcHVibGljOgogICAgIHVzaW5n
IERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
OwogICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwog
Ci0gICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYpOworICAg
IHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7
CisgICAgc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBjcmVhdGUoKSB7IHJldHVybiBh
ZG9wdFJlZigqbmV3IE5ldHdvcmtQcm9jZXNzUHJveHkpOyB9CiAgICAgfk5ldHdvcmtQcm9jZXNz
UHJveHkoKTsKIAorICAgIHN0YXRpYyBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBh
bGxOZXR3b3JrUHJvY2Vzc2VzKCk7CisgICAgCisgICAgdm9pZCB0ZXJtaW5hdGUoKSBmaW5hbDsK
KyAgICB2b2lkIGRpZFRlcm1pbmF0ZSgpOworCiAgICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwogCi0gICAgRG93bmxvYWRQ
cm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQcm94eSog
b3JpZ2luYXRpbmdQYWdlKTsKKyAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5
KFdlYnNpdGVEYXRhU3RvcmUmLCBXZWJQcm9jZXNzUG9vbCYsIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0
aW5nUGFnZSk7CiAKICAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlv
bj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPiYmKTsKICAgICB2b2lkIGRl
bGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKTsKQEAgLTIwNiwxNSArMjE4LDEyIEBAIHB1YmxpYzoKICAgICBQcm9j
ZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSBmaW5hbCB7IHJldHVybiBtX3Rocm90dGxlcjsgfQog
ICAgIHZvaWQgdXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wm
IHByb2Nlc3NQb29sKCkgeyByZXR1cm4gbV9wcm9jZXNzUG9vbDsgfQotCiAjaWYgRU5BQkxFKENP
TlRFTlRfRVhURU5TSU9OUykKICAgICB2b2lkIGRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYpOwogI2VuZGlmCiAKLSAg
ICB2b2lkIGFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYpOwotICAgIGJvb2wgaGFz
U2Vzc2lvbihQQUw6OlNlc3Npb25JRCkgY29uc3Q7Ci0gICAgdm9pZCByZW1vdmVTZXNzaW9uKFBB
TDo6U2Vzc2lvbklEKTsKKyAgICB2b2lkIGFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYpOwor
ICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CiAgICAgCiAjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgdm9pZCBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3Jh
ZGUoY29uc3QgU3RyaW5nJiBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwpAQCAtMjI5LDYgKzIz
OCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJv
dG9jb2woY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5
Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNz
Q3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIHZvaWQgcmVzb3VyY2VMb2FkRGlkU2Vu
ZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVzb3VyY2VMb2FkSW5mbyYmLCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgT3B0aW9uYWw8SVBDOjpGb3JtRGF0YVJlZmVyZW5jZT4m
Jik7CkBAIC0yNDgsNyArMjU5LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUJ1bmRsZUlk
ZW50aWZpZXIoY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAg
ICB2b2lkIGNsZWFyQnVuZGxlSWRlbnRpZmllcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
OwogCisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyKCkgeyByZXR1cm4g
bV9jb29raWVNYW5hZ2VyLmdldCgpOyB9CisKKyAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgeyByZXR1cm4gbV9jdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQuZ2V0KCk7IH0KKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAg
IHhwY19vYmplY3RfdCB4cGNFbmRwb2ludE1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2VuZHBv
aW50TWVzc2FnZS5nZXQoKTsgfQorI2VuZGlmCisKIHByaXZhdGU6CisgICAgZXhwbGljaXQgTmV0
d29ya1Byb2Nlc3NQcm94eSgpOworCisgICAgdm9pZCBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9O
ZXdQcm9jZXNzKCk7CisKICAgICAvLyBBdXhpbGlhcnlQcm9jZXNzUHJveHkKICAgICBBU0NJSUxp
dGVyYWwgcHJvY2Vzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiTmV0d29ya2luZyJfczsg
fQogCkBAIC0yNTYsNyArMjc5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbm5lY3Rpb25XaWxs
T3BlbihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHByb2Nlc3NXaWxsU2h1
dERvd24oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIG5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZCgpOwogICAgIHZvaWQgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCiAgICAgLy8g
SVBDOjpDb25uZWN0aW9uOjpDbGllbnQKQEAgLTMxMiwxNiArMzM0LDE3IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCwg
UmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+JiYpOwogCi0gICAgV2ViUHJvY2Vzc1Bv
b2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPj4gbV9wZW5kaW5nRmV0Y2hXZWJzaXRlRGF0YUNhbGxi
YWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+
IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hNYXA8Q2FsbGJh
Y2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURh
dGFGb3JPcmlnaW5zQ2FsbGJhY2tzOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkUHJv
eHlNYXA+IG1fZG93bmxvYWRQcm94eU1hcDsKKworICAgIFVuaXF1ZVJlZjxBUEk6OkN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiAjaWYg
RU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKICAgICBMZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJQcm94eSBtX2N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OwogI2VuZGlm
CisKICAgICBQcm9jZXNzVGhyb3R0bGVyIG1fdGhyb3R0bGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxQcm9jZXNzVGhyb3R0bGVyOjpCYWNrZ3JvdW5kQWN0aXZpdHk+IG1fYWN0aXZpdHlGb3JIb2xk
aW5nTG9ja2VkRmlsZXM7CiAgICAgUHJvY2Vzc1Rocm90dGxlcjo6QWN0aXZpdHlWYXJpYW50IG1f
YWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzOwpAQCAtMzQ3LDkgKzM3MCwxMSBAQCBwcml2YXRlOgog
ICAgIHByaXZhdGU6CiAgICAgICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3
b3JrUHJvY2VzczsKICAgICB9OworICAgIE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4gbV9lbmRw
b2ludE1lc3NhZ2U7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8UEFMOjpTZXNzaW9uSUQ+IG1fc2Vz
c2lvbklEczsKKyAgICBXZWFrSGFzaFNldDxXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRh
U3RvcmVzOworICAgIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IG1fY29va2llTWFuYWdlcjsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0J
KHJldmlzaW9uIDI2NzQ2NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSwxMSBA
QCBib29sIE5ldHdvcmtQcm9jZXNzUHJveHk6OlhQQ0V2ZW50SGFuZGxlCiAgICAgaWYgKG1lc3Nh
Z2VOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1lc3Nh
Z2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6OnhwY0xhdW5jaFNl
cnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKQotICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQ
cm9jZXNzKGV2ZW50KTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRh
YmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVz
c2FnZU5hbWUpIHsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+bV9lbmRwb2ludE1lc3NhZ2Ug
PSBldmVudDsKKyAgICAgICAgZm9yIChhdXRvJiBkYXRhU3RvcmUgOiBtX25ldHdvcmtQcm9jZXNz
LT5tX3dlYnNpdGVEYXRhU3RvcmVzKQorICAgICAgICAgICAgZGF0YVN0b3JlLnNlbmROZXR3b3Jr
UHJvY2Vzc1hQQ0VuZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMoKTsKKyAgICB9CiAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9t
UHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAJKHJldmlzaW9uIDI2NzQ2NCkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTcgKzQ0LDE3
IEBAIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp+TGVnYWMKIAogdm9pZCBMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVBy
b3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0KQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJv
dG9jb2xJRCwgcmVxdWVzdCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwg
cmVxdWVzdCk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0
b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCkKIHsKLSAg
ICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQoKS5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7CisgICAgbV9u
ZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0b3BMb2Fk
aW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1By
b3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuaW52YWxpZGF0
ZSgqdGhpcyk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudCgpLmludmFsaWRhdGUoKnRoaXMpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlclByb3h5Ojp3YXNSZWRpcmVjdGVkVG9SZXF1ZXN0KExlZ2FjeUN1c3RvbVByb3Rv
Y29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNl
KQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHJldmlzaW9uIDI2NzQ2NCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiwxMSArMzIsMTQgQEAKICNpbmNsdWRlICJBdXRoZW50aWNhdG9yTWFuYWdlci5o
IgogI2luY2x1ZGUgIkRldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgiCiAjaW5jbHVkZSAiR1BVUHJv
Y2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1vY2tBdXRoZW50
aWNhdG9yTWFuYWdlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8u
aCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiU2hvdWxk
R3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5o
IgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkQ2FjaGUuaCIKKyNpbmNsdWRlICJXZWJDb29raWVN
YW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXQySW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUg
IldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDYWNoZS5oIgpAQCAtNzUsNiAr
NzgsMTAgQEAKICNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oIgogI2VuZGlm
CiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJEZWZhdWx0V2ViQnJvd3NlckNoZWNr
cy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgYm9vbCBhbGxvd3NX
ZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zOwpAQCAtODMsMTMgKzkwLDE5IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dXZWJzaXRlRGF0YVIKICAgICBhbGxvd3NXZWJzaXRlRGF0
YVJlY29yZHNGb3JBbGxPcmlnaW5zID0gdHJ1ZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8UEFMOjpT
ZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgbm9uRGVmYXVsdERhdGFTdG9yZXMoKQorc3Rh
dGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgYWxsRGF0YVN0
b3JlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+
PiBtYXA7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3JF
YWNoV2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRhU3RvcmUmKT4mJiBm
dW5jdGlvbikKK3sKKyAgICBmb3IgKGF1dG8qIGRhdGFTdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52
YWx1ZXMoKSkKKyAgICAgICAgZnVuY3Rpb24oKmRhdGFTdG9yZSk7Cit9CisKIFJlZjxXZWJzaXRl
RGF0YVN0b3JlPiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGVOb25QZXJzaXN0ZW50KCkKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVD
b25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpObyksIFBBTDo6U2Vzc2lvbklEOjpn
ZW5lcmF0ZUVwaGVtZXJhbFNlc3Npb25JRCgpKSk7CkBAIC0xMTUsNyArMTI4LDcgQEAgV2Vic2l0
ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShSZWY8VwogI2VuZGlmCiB7CiAgICAgV1RGOjpz
ZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1heWJlUmVnaXN0ZXJX
aXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAgICAg
cGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwpA
QCAtMTI4LDE3ICsxNDEsMTIgQEAgV2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUo
KQogCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBBU1NFUlQobm9uRGVm
YXVsdERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOwotICAgICAgICBub25E
ZWZhdWx0RGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7Ci0gICAgICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW1vdmVTZXNzaW9u
KG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBBU1NFUlQoYWxsRGF0YVN0b3Jl
cygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7CisgICAgYWxsRGF0YVN0b3JlcygpLnJlbW92
ZShtX3Nlc3Npb25JRCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW1vdmVTZXNzaW9uKCp0aGlz
KTsKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0gICAgICAgIGlmIChhdXRvKiBncHVQcm9jZXNz
UHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQotICAgICAgICAg
ICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKKyAgICBpZiAo
YXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0
ZWQoKSkKKyAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklE
KTsKICNlbmRpZgogfQogCkBAIC0xNjksMTcgKzE3NywzNSBAQCBib29sIFdlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHREYXRhU3RvcmVFCiAgICAgcmV0dXJuICEhZ2xvYmFsRGVmYXVsdERhdGFTdG9y
ZSgpOwogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lv
bklETWFwKCkKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KCkKIHsKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSkgewotICAgICAgICBhdXRvIHJlc3VsdCA9IG5vbkRlZmF1bHREYXRhU3RvcmVzKCku
YWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJl
c3VsdC5pc05ld0VudHJ5KTsKKyAgICBhdXRvIHJlc3VsdCA9IGFsbERhdGFTdG9yZXMoKS5hZGQo
bV9zZXNzaW9uSUQsIHRoaXMpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNO
ZXdFbnRyeSk7Cit9CisKK1dlYnNpdGVEYXRhU3RvcmUqIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0
aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK3sKKyAg
ICByZXR1cm4gYWxsRGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpOworfQorCitOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2VzcygpCit7CisgICAgaWYg
KCFtX25ldHdvcmtQcm9jZXNzKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIGlmICht
X3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IG1fc2Vzc2lvbklEID09IFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkpCisgICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzID0gTmV0
d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIGVsc2UK
KyNlbmRpZgorICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmNyZWF0ZSgpOworICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp0aGlz
KTsKICAgICB9CisKKyAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7CiB9CiAKLVdlYnNpdGVE
YXRhU3RvcmUqIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZv
clNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCitOZXR3b3JrUHJvY2Vzc1Byb3h5
JiBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2VzcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpID8gbm9uRGVm
YXVsdERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklEKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8V2Vic2l0ZURhdGFTdG9yZSY+KCp0aGlzKS5uZXR3b3JrUHJvY2VzcygpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkm
IHByb2Nlc3MpCkBAIC0xOTUsMTIgKzIyMSw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dW5y
ZWdpc3RlclByb2Nlc3MKICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CiB9CiAKLVdl
YlByb2Nlc3NQb29sKiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3Jh
Z2VPcGVyYXRpb25zKCkKLXsKLSAgICBhdXRvIHBvb2xzID0gcHJvY2Vzc1Bvb2xzKDEpOwotICAg
IHJldHVybiBwb29scy5pc0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVnaW4oKS0+Z2V0KCk7
Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3Nh
cnkoKQogewogICAgIGlmIChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBAIC00NDAsMjggKzQ2
MCwyMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5CiAjZW5kaWYK
IAogICAgIGF1dG8gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZU5ldHdvcmtQcm9j
ZXNzQWNjZXNzVHlwZUZvckRhdGFGZXRjaChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7Ci0g
ICAgaWYgKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9u
ZSkgewotICAgICAgICBhdXRvIHBvb2xzID0gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09IFBy
b2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2ggPyBlbnN1cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nlc3NQ
b29scygpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7Ci0gICAgICAgICAgICBj
YXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBp
ZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBQcm9j
ZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKLSAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLQorICAgIHN3aXRjaCAobmV0d29ya1By
b2Nlc3NBY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgor
ICAgICAgICBuZXR3b3JrUHJvY2VzcygpOworICAgICAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vz
cyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9u
bHlJZkxhdW5jaGVkOgorICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewogICAgICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAg
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5mZXRjaFdlYnNpdGVEYXRhKG1fc2Vzc2lv
bklELCBkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vz
c1Bvb2xdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CisgICAgICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5mZXRjaFdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIGZldGNoT3B0
aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvcl0oV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsKICAg
ICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjayhX
VEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgorICAgICAgICBicmVh
azsKICAgICB9CiAKICAgICBhdXRvIHdlYlByb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZVdlYlBy
b2Nlc3NBY2Nlc3NUeXBlRm9yRGF0YUZldGNoKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgpKTsK
QEAgLTcyNCwzMSArNzM3LDI0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShP
cHRpb24KICAgICBib29sIGRpZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0
YSA9IGZhbHNlOwogI2VuZGlmCiAgICAgYXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBj
b21wdXRlTmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAh
aXNQZXJzaXN0ZW50KCkpOwotICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJv
Y2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsKLSAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9j
ZXNzQWNjZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vz
c1Bvb2xzKCkgOiBwcm9jZXNzUG9vbHMoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHBvb2xzKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlw
ZSkgewotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6
Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KKyAg
ICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgeworICAgIGNhc2UgUHJvY2Vzc0Fj
Y2Vzc1R5cGU6OkxhdW5jaDoKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgQVNT
RVJUKG1fbmV0d29ya1Byb2Nlc3MpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFBy
b2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpIHsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxi
YWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRl
V2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxi
YWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2lu
Y2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3Jl
Z2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAjaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICAgICAgICAgIGRpZE5vdGlmeU5ldHdv
cmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgorICAgICAg
ICBicmVhazsKICAgICB9CiAKICAgICBhdXRvIHdlYlByb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0
ZVdlYlByb2Nlc3NBY2Nlc3NUeXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0
ZW50KCkpOwpAQCAtODkzLDE0ICs4OTksOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92
ZURhdGEoT3B0aW9uCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBp
ZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljcykpIHsKICAgICAgICAgaWYgKCFkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vi
c2l0ZURhdGEpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vz
cy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5j
ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJh
Y2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBt
b2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgICAgICAgICAgY2Fs
bGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0p
OwogICAgICAgICB9CiAKICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2Fs
bGJhY2soKTsKQEAgLTk5NCwxMiArOTk1LDEwIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVt
b3ZlRGF0YShPcHRpb24KICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7
CiAgICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewogICAgICAg
ICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAg
ICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNh
c2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9v
bC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7CisgICAgICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MoKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9j
ZXNzQWNjZXNzVHlwZTo6Tm9uZToKQEAgLTEwMjEsNyArMTAyMCw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb24KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMo
bV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2Fj
aGVIb3N0TmFtZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJv
Y2Vzc1Bvb2xdIHsKKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURh
dGFGb3JPcmlnaW5zKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3RO
YW1lcywgSFNUU0NhY2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdh
dG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9
CkBAIC0xMTgwLDE4ICsxMTc5LDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0
YShPcHRpb24KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGltZW91
dEZvclRlc3RpbmcoU2Vjb25kcyBzZWNvbmRzKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhzZWNvbmRzKSwgTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGlu
Zzo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVz
dGluZyhzZWNvbmRzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXJ2aWNlV29ya2Vy
RmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6cmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoKQogewotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0
aW5nKCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hU
aW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJG
ZXRjaFRpbWVvdXRGb3JUZXN0aW5nKCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRT
ZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZzo6UmVwbHkoKSwgMCk7CiB9CiAKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMTIwMSw4ICsxMTk0LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRQogCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1h
eFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50cnlDb3VudCwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtX3Nlc3Npb25JRCwgbWF4aW11bUVudHJ5Q291bnQsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjExLDggKzEyMDMsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50cmllc0RvCiAgICAgCiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNl
dFBydW5lRW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRQcnVuZUVudHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3Jh
bmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTIyMSw4ICsxMjEyLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZwogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyaW5n
VGltZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9z
ZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFs
KFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTIzMSwyMCArMTIyMSwxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dE1pbmltdW1UaW1lQmV0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bv
b2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2Vl
bkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KICAgICAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNl
TG9hZFN0YXRpc3RpY3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAg
ICAgICAgIHByb2Nlc3MtPmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
KG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sIGlzUHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTEyNTYsMTIgKzEyMzksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50
UmVzb3VyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNQcmV2
YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1ByZXZhbGVudFJlc291cmNl
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFu
ZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNQ
cmV2YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI3MywxMiArMTI1MSw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGMKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuaXNHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyOTIsOCAr
MTI2NSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3UKICAgICAK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2UobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50
UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzMDcsMTAgKzEyNzksNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291CiAgICAgCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRQcmV2YWxlbnRSZXNvdXJjZUZv
ckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVz
b3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ZlcnlQ
cmV2YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTMyMiwxMiArMTI5MSw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmUKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVz
b3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTEzNDEsMTAgKzEzMDUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFZlcnlQcmV2YWxlbnRSCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2V0VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0
YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTEzNTMsOCArMTMxNCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnkKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlS
ZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vz
c2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBz
dWJGcmFtZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM2OCwyMiArMTMyOCwxNCBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUCiAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVS
TCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVS
TCYgc3ViRnJhbWVVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5k
ZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwg
fSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BG
cmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTM5NywyMyArMTM0OSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291
cmNlVW5kCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1l
VVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFVSTCYgc3VicmVzb3Vy
Y2VVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVy
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJM
IH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlz
UmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3Qg
VVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0MjcsMTAgKzEzNzAs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pCiAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGly
ZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8obV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBV
UkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xNDQyLDEyICsxMzgyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRTdWJyZXNvdXJjZVVuaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGly
ZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9t
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJM
IH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBV
UkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTQ1OSwxMiArMTM5NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0VG9wRnJhbWVVbmlxdWUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZy
YW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0s
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dEZyb20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJv
bSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ3
NiwyNSArMTQwNiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVl
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0
IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0
ZXJlZEFzUmVkaXJlY3RpbmdUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2Up
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBy
ZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNTA2LDYwICsxNDI1LDQxIEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclByZXZh
bGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0
VmFsdWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1
ZXMobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVl
cyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Np
b25JRCwgW10geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdWJtaXRUZWxlbWV0
cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2No
ZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBT
aG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklE
LCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVD
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgc2hv
dWxkR3JhbmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIHN0cnVjdCBDYWxsYmFja0FnZ3JlZ2F0b3IgOiBS
ZWZDb3VudGVkPENhbGxiYWNrQWdncmVnYXRvcj4gewotICAgICAgICBDYWxsYmFja0FnZ3JlZ2F0
b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCisgICAgc3Ry
dWN0IExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yIDogUmVmQ291bnRlZDxMb2NhbENhbGxiYWNrQWdn
cmVnYXRvcj4geworICAgICAgICBMb2NhbENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFy
dHlEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIDogbV9jb21wbGV0
aW9uSGFuZGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgewogICAgICAg
ICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAgICAgfTsKIAotICAgICAgICB+
Q2FsbGJhY2tBZ2dyZWdhdG9yKCkKKyAgICAgICAgfkxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yKCkK
ICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAt
MTU3NCwzOCArMTQ3NCwzMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9h
ZFN0CiAgICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiBtX2NvbXBsZXRpb25IYW5kbGVy
OwogICAgICAgICBWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBh
cnR5RGF0YT4gbV9yZXN1bHRzOwogICAgIH07Ci0KLSAgICBSZWZQdHI8Q2FsbGJhY2tBZ2dyZWdh
dG9yPiBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBhZG9wdFJlZihuZXcgQ2FsbGJhY2tBZ2dyZWdhdG9y
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIHByb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAg
ICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKS5nZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3IsIHByb2Nlc3NQb29sXShWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5hZGRSZXN1bHQoV1RGTW92ZShkYXRhKSk7Ci0gICAgICAgICAgICB9KTsKKyAgICAK
KyAgICBhdXRvIGxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yID0gYWRvcHRSZWYobmV3IExvY2FsQ2Fs
bGJhY2tBZ2dyZWdhdG9yKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7CisgICAgCisgICAg
YXV0byB3dGZDYWxsYmFja0FnZ3JlZ2F0b3IgPSBXVEY6OkNhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGxvY2FsQ2FsbGJhY2tB
Z2dyZWdhdG9yXSB7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3Jd
KFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYm
IGRhdGEpIHsKKyAgICAgICAgICAgIGxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRSZXN1bHQo
V1RGTW92ZShkYXRhKSk7CiAgICAgICAgIH0pOwotICAgIH0KKyAgICB9KTsKKyAgICAKKyAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygp
KQorICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1t
ZWRpYXRlbHkoW3d0ZkNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KFNob3VsZEdyYW5k
ZmF0aGVyU3RhdGlzdGljcyBzaG91bGRHcmFuZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CiAgICAgCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIHsgfSwgc2hv
dWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNp
c3RlbnQobV9zZXNzaW9uSUQsIHsgfSwgc2hvdWxkR3JhbmRmYXRoZXIsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tp
ZUJsb2NraW5nVXBkYXRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2No
ZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NB
bmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTYxNCwyNCArMTUwNywxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNjaGVkdWxlU3RhdGlzdGljCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1By
b2Nlc3NpbmcobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlU3RhdGlzdGljc0FuZERh
dGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxU
YWJsZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPnN0
YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc3RhdGlz
dGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3Qg
VVJMJiB1cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTY0MywyMiArMTUyNSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldExhc3RTZWVuKGNvbnN0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgcHJvY2Vzcy0+c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldExhc3RTZWVuKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBzZWNvbmRzLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRv
bWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kb21haW5JREV4aXN0c0luRGF0YWJhc2UobV9z
ZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmRvbWFp
bklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3Rp
Y0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwxLCBjb25z
dCBVUkwmIHRvcEZyYW1lVXJsMiwgU2Vjb25kcyBsYXN0U2VlbiwgYm9vbCBoYWRVc2VySW50ZXJh
Y3Rpb24sIFNlY29uZHMgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc0dyYW5kZmF0
aGVyZWQsIGJvb2wgaXNQcmV2YWxlbnQsIGJvb2wgaXNWZXJ5UHJldmFsZW50LCB1bnNpZ25lZCBk
YXRhUmVjb3Jkc1JlbW92ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTE2NzAsMTAgKzE1NDQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1l
cmdlU3RhdGlzdGljRm9yCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRv
cEZyYW1lVXJsMSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMiB9
LCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9u
LCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNv
cmRzUmVtb3ZlZCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkubWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQcmV2
YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGlu
Zyhjb25zdCBVUkwmIHVybCwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIGJvb2wgaXNTY2hlZHVs
ZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgYm9vbCBpc1ByZXZhbGVudCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY4NSwxOCArMTU1Niwx
NCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0CiAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+aW5zZXJ0RXhwaXJlZFN0YXRp
c3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmluc2VydEV4cGlyZWRTdGF0aXN0aWNG
b3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWwsIGlzUHJldmFsZW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQo
Ym9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKS5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKG1f
c2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVGVzdChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xNzA0LDggKzE1NzEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dElzUnVubmluZ1Jlc291CiAgICAgdXNlRXhwbGljaXRJVFBTdGF0ZSgpOwogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9uSUQsIHZhbHVl
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1fc2Vzc2lvbklE
LCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJZGVudGlmaWVy
IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnMp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcxNiw3ICsxNTgyLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgd2ViUGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0Vu
dHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogCkBA
IC0xNzI0LDggKzE1OTAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVV
c2VyCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKG1fc2Vzc2lv
bklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgc2Vjb25kcywg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjps
b2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MzksMTAgKzE2MDQsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmxvZ1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5sb2dVc2VySW50ZXJhY3Rpb24o
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNl
ckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc1NCwxMyArMTYxNiw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWMKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICAgICAgcHJvY2Vzcy0+aGFzSGFkVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxl
dGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzSGFkVXNlckludGVy
YWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UoY29uc3QgVVJMJiBzdWJVcmwsIGNvbnN0
IFVSTCYgdG9wVXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTc3MiwxMyArMTYyOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNS
ZWxhdGlvbnNoaXBPbmwKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJv
Y2Vzcy0+aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdG9wVXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJVcmwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xNzkyLDEwICsxNjQyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclVz
ZXJJbnRlcmFjdAogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVS
TCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgwOSwxMCArMTY1Niw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZCgKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldEdyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRH
cmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBpc0dyYW5kZmF0aGVyZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgyMSwxMCArMTY2
NSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VXNlSVRQRGF0YWJhc2UKICAgICAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFVzZUlU
UERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRVc2VJVFBEYXRhYmFzZShtX3Nlc3Npb25J
RCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoY29u
c3QgVVJMJiBmcm9tVVJMLCBjb25zdCBVUkwmIHRvVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODMzLDYyICsxNjc0LDM4IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFcKICAgICAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldENyb3NzU2l0ZUxvYWRXaXRoTGlu
a0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9VUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExp
bmtEZWNvcmF0aW9uRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29y
YXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0Rl
Y29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKGNv
bnN0IFVSTCYgdXJsLCBib29sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlQ29va2ll
c0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25s
eUNvb2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21w
bGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNMb2NhbFN0b3Jh
Z2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNJ
c29sYXRlZFNlc3Npb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25I
YW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0lzb2xhdGVkU2Vzc2lvbiht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoYm9vbCBl
bmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNldFNob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhlbmFibGVkLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFNob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpAQCAtMTkxOSwxMCArMTcz
Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VGhpcmRQYXJ0eUNvb2sKICAgICAgICAg
ICAgIHdlYlByb2Nlc3Muc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShibG9ja2luZ01v
ZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQs
IGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lvbklE
LCBibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNp
dGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTMwLDEwICsxNzQ0LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdAogICAgIGF1dG8gZmxhZyA9
IGVuYWJsZWQgPyBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6WWVz
IDogV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6Ok5vOwogCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNl
dFNob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcobV9zZXNzaW9u
SUQsIGZsYWcsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGlu
ZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdl
YnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk0MSwyMCArMTc1MiwxNCBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0CiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgYXV0byBtb2RlID0gZW5hYmxlZCA/IFdlYkNvcmU6OkZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzIDogV2ViQ29yZTo6Rmly
c3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6Ok5vbmU7CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+c2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5n
KG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9y
VGVzdGluZyhtX3Nlc3Npb25JRCwgbW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9TYW1l
U2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VG9TYW1lU2l0ZVN0
cmljdENvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcoY29uc3QgVVJMJiBm
aXJzdFBhcnR5VVJMLCBjb25zdCBVUkwmIGNuYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTY2LDggKzE3NzEsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eUhv
c3RDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZpcnN0UGFydHlVUkwuaG9zdCgp
LnRvU3RyaW5nKCksIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFy
dHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJzdFBhcnR5VVJMLmhv
c3QoKS50b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0s
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3Rpbmco
Y29uc3QgVVJMJiBjbmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTk3OSwxOCArMTc4MywxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vz
c1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9y
VGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVS
TCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0
VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3JhZ2UoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5jTG9jYWxTdG9yYWdlKCksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFn
ZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5OTgsOCArMTc5Nyw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXAKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2
YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVu
dFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlY29uZHMpOwogICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7CkBAIC0yMDA5LDI2ICsxODA3LDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
Q2FjaGVNYXhBZ2VDYXAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNh
cEZvclByZXZhbGVudFJlc291cmNlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25J
RCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5yZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CiAjZW5kaWYKIH0KIAotYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjppc0Fzc29jaWF0ZWRQcm9j
ZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpIGNvbnN0Ci17Ci0gICAgaWYgKGF1
dG8qIHByb2Nlc3NQb29sRGF0YVN0b3JlID0gcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgp
KQotICAgICAgICByZXR1cm4gcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPT0gdGhpczsKLSAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgIHJldHVybiBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5oYXNTZXNzaW9uKG1fc2Vzc2lv
bklEKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQ
b29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uc3QK
IHsKICAgICBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IHByb2Nlc3NQb29sczsKQEAg
LTIwNDMsOSArMTgyNyw2IEBAIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0
ZUQKICAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBDaGVjayBp
ZiB3ZSdyZSBvbmUgb2YgdGhlIGxlZ2FjeSBkYXRhIHN0b3Jlcy4KICAgICAgICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICAgICAgaWYgKCFpc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbCgqcHJvY2Vzc1Bvb2wpKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCiAgICAgICAgICAgICBwcm9jZXNzUG9vbHMuYWRkKHBy
b2Nlc3NQb29sKTsKICAgICAgICAgICAgIGlmIChwcm9jZXNzUG9vbHMuc2l6ZSgpID09IGxpbWl0
KQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjA4NCw4ICsxODY1LDcgQEAgc3RhdGljIFN0
cmluZyBjb21wdXRlTWVkaWFLZXlGaWxlKGNvbnN0IAogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDZXJ0aWZpY2F0
ZUluZm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7Ci0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dT
cGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUlu
Zm8oKSwgaG9zdCksIDApOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZp
Y2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKIH0KIAogVmVjdG9yPFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YT4gV2Vic2l0ZURhdGFTdG9yZTo6bWVkaWFLZXlPcmlnaW5zKGNv
bnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSkKQEAgLTIxNDAsNiArMTkyMCw0
OSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZU1lZGlhS2V5cyhjCiAgICAgfQogfQog
Cit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQ
cm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvJik+JiYgcmVwbHkpCit7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1Byb3h5LCBb
dGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHdlYlByb2Nlc3NQcm94eSA9IG1h
a2VXZWFrUHRyKHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0gV1RGTW92ZShyZXBseSldIChhdXRv
JiBjb25uZWN0aW9uSW5mbykgbXV0YWJsZSB7CisgICAgICAgIGlmIChVTkxJS0VMWSghSVBDOjpD
b25uZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSW5mby5pZGVudGlmaWVyKCkp
ICYmIHdlYlByb2Nlc3NQcm94eSAmJiB3ZWFrVGhpcykpIHsKKyAgICAgICAgICAgIHRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19JRihpc1BlcnNpc3Rl
bnQoKSwgUHJvY2VzcywgImdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0
IGF0dGVtcHQsIHJldHJ5aW5nIik7CisgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqd2ViUHJvY2Vzc1Byb3h5LCBXVEZNb3ZlKHJlcGx5KSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmVwbHkoY29ubmVjdGlv
bkluZm8pOworICAgIH0pOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JikKK3sKKyAgICBpZiAobV9uZXR3b3JrUHJv
Y2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGlkVGVybWluYXRlKCk7CisgICAgbV9u
ZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dGVy
bWluYXRlTmV0d29ya1Byb2Nlc3MoKQoreworICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOworICAgIG1f
bmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
bmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNlbmRQcmVwYXJlVG9TdXNwZW5kKElzU3VzcGVuc2lvbkltbWluZW50OjpObywgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3
b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKQoreworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7
Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1l
KCkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7Cit9CisK
IGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSBj
b25zdAogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMTY5LDE3
ICsxOTkyLDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3QKICAg
ICAgICAgCiAgICAgICAgIHJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7CiAgICAgICAg
IAotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lv
bklELCB0cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklE
LCB0cnVlKSwgMCk7CisgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkKICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNz
aW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZCh0cnVlKSwgbV9zZXNzaW9uSUQpOwotICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIGZh
bHNlKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIGZhbHNlKSwg
MCk7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAgICAg
ICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihNZXNzYWdlczo6V2Vi
UHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZmFsc2UpLCBtX3Nlc3Np
b25JRCk7Ci0gICAgfQogCiAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCA9IGZh
bHNlOwogI2Vsc2UKQEAgLTIxOTEsOCArMjAxMiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3QKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3RhdGlzdGljc1Rl
c3RpbmdDYWxsYmFjayhGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNhbGxiYWNrKQog
ewogICAgIGlmIChjYWxsYmFjaykgewotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpKTsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rl
c3RpbmdFdmVudCh0cnVlKSwgMCk7CiAgICAgfQogICAgIAogICAgIG1fc3RhdGlzdGljc1Rlc3Rp
bmdDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwpAQCAtMjIxMSw4ICsyMDMxLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdAogCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RlYnVnTW9kZShtX3Nlc3Npb25JRCwgZW5hYmxlZCwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOwogICAgIFVO
VVNFRF9QQVJBTShjb21wbGV0aW9uSGFuZGxlcik7CkBAIC0yMjI3LDIwICsyMDQ2LDE1IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJjZUxvYWRTdGEKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmlzUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCisgICAgbmV0
d29ya1Byb2Nlc3MoKS5pc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNzaW9u
SUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyNlbHNlCiAgICAgY29tcGxldGlvbkhh
bmRsZXIoZmFsc2UpOworI2VuZGlmCiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRD
bGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVk
KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShl
bmFibGVkKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0y
MjYyLDQ4ICsyMDc2LDE5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJSZXNvdXJjZUxv
YWQKIH0KICNlbmRpZgogCi1WZWN0b3I8V2ViQ29yZTo6Q29va2llPiBXZWJzaXRlRGF0YVN0b3Jl
OjpwZW5kaW5nQ29va2llcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihtX3Bl
bmRpbmdDb29raWVzKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphZGRQZW5kaW5nQ29v
a2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tp
ZXMucmVtb3ZlSWYoWyZjb29raWVdKGF1dG8mIHBlbmRpbmdDb29raWUpIHsKLSAgICAgICAgcmV0
dXJuIHBlbmRpbmdDb29raWUuaXNLZXlFcXVhbChjb29raWUpOwotICAgIH0pOwotICAgIG1fcGVu
ZGluZ0Nvb2tpZXMuYWRkKGNvb2tpZSk7Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVt
b3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSkKLXsKLSAgICBt
X3BlbmRpbmdDb29raWVzLnJlbW92ZShjb29raWUpOwotfQotICAgIAotdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpjbGVhclBlbmRpbmdDb29raWVzKCkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLmNs
ZWFyKCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zmx1c2hDb29raWVzKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9v
bDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5mbHVzaENvb2tpZXMo
c2Vzc2lvbklEKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5mbHVzaENvb2tpZXMoc2Vzc2lvbklEKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvcldlYlNvY2tldChib29sIGFsbG93cykKIHsKLSAgICBmb3IgKGF1dG8gcHJvY2Vzc1Bvb2wg
OiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChhbGxvd3MpLCBNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0OjpS
ZXBseSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0
KGFsbG93cyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlm
aWNhdGVGb3JXZWJTb2NrZXQ6OlJlcGx5KCksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogewotICAgIGZvciAoYXV0byBwcm9jZXNzUG9v
bCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bv
b2wtPmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKCkpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMoc2Vzc2lvbklEKCkpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkaXNwYXRj
aE9uUXVldWUoRnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKQpAQCAtMjMyOSw4ICsyMTE0LDYg
QEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdAogCiAgICAgcmVzb2x2
ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsKIAotICAgIHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tp
ZXMgPSBwZW5kaW5nQ29va2llcygpOwotCiAgICAgYXV0byByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0
b3J5KCk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnlIYW5kbGU7CiAgICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0
b3J5LmlzRW1wdHkoKSkKQEAgLTI0MzUsNyArMjIxOCwxMCBAQCBXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycyBXZWJzaXRlRGF0YVN0CiAgICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlZCA9IG1fcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ7CiAjZW5kaWYKICAgICBwbGF0Zm9ybVNldE5ldHdvcmtQ
YXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwotCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRl
VHJhY2tpbmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJt
aXNzaW9uKCk7CisjZW5kaWYKKyAgICAKICAgICByZXR1cm4gcGFyYW1ldGVyczsKIH0KIApAQCAt
MjQ2NSwxMCArMjI1MSw2IEBAIEFQSTo6SFRUUENvb2tpZVN0b3JlJiBXZWJzaXRlRGF0YVN0b3Jl
OjoKICAgICByZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQotewotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBpZiAoIWlzUGVyc2lzdGVudCgpKSB7CkBAIC0yNDc2LDIzICsyMjU4LDE1IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGUKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyku
Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7Ci0gICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGRldGFpbHMpKTsKLSAgICAgICAgfSk7Ci0gICAg
ICAgIC8vIEZJWE1FOiBTdXBwb3J0IGZldGNoaW5nIGZyb20gbXVsdGlwbGUgcG9vbHMuCi0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBBU1NFUlQoIWNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmdldExvY2FsU3RvcmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWls
cykgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGRldGFpbHMpKTsKKyAgICB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnJlc2V0UXVvdGEobV9zZXNzaW9uSUQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRRdW90
YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogI2lmICFQTEFU
Rk9STShDT0NPQSkKQEAgLTI1MTgsNyArMjI5MiwxMiBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6
Omh0dHAzRW5hYmxlZCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQotI2VuZGlmCisKK2Jvb2wg
V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmco
Y29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYgLy8gIVBMQVRG
T1JNKENPQ09BKQogCiAjaWYgIVVTRShHTElCKQogV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9y
ZTo6ZGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpCkBAIC0yNTMwLDM1
ICsyMzA5LDE4IEBAIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREZXYKIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFVSTCYmIG9s
ZE5hbWUsIFVSTCYmIG5ld05hbWUsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBl
cywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBX
ZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp0aGlzKTsKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5yZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1l
LCBuZXdOYW1lLCBkYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgICAg
IH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRh
KG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6aGFzQXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+aGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFz
QXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJBcHBCb3VuZFNlc3Npb24oQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmNsZWFyQXBw
Qm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhckFwcEJvdW5kU2Vzc2lv
bihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlhbGl6ZWQo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjU4MCw3
ICsyMzQyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3J3YXJkQXBwQm91bmREbwogCiAg
ICAgcHJvcGFnYXRlQXBwQm91bmREb21haW5zKGdsb2JhbERlZmF1bHREYXRhU3RvcmUoKS5nZXQo
KSwgKmFwcEJvdW5kRG9tYWlucyk7CiAKLSAgICBmb3IgKGF1dG8qIHN0b3JlIDogbm9uRGVmYXVs
dERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICBmb3IgKGF1dG8qIHN0b3JlIDogYWxsRGF0YVN0
b3JlcygpLnZhbHVlcygpKQogICAgICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoc3RvcmUs
ICphcHBCb3VuZERvbWFpbnMpOwogfQogCkBAIC0yNTg4LDEwICsyMzUwLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRBcHBCb3VuZERvbWFpbgogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEFwcEJvdW5kRG9tYWlu
c0ZvclJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0QXBwQm91
bmREb21haW5zRm9yUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgZG9tYWlucywg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRpZgogCkBAIC0yNTk5LDE2ICsyMzU4
LDI2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnQKIHsKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkudXBkYXRlQnVuZGxlSWRlbnRpZmll
cihidW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3Mo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOworfQorCitzdGF0aWMgYm9vbCBuZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hTaG91bGRG
YWlsRm9yVGVzdGluZyB7IGZhbHNlIH07CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWFrZU5l
eHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkKK3sKKyAgICBuZXh0TmV0d29y
a1Byb2Nlc3NMYXVuY2hTaG91bGRGYWlsRm9yVGVzdGluZyA9IHRydWU7Cit9CisKK2Jvb2wgV2Vi
c2l0ZURhdGFTdG9yZTo6c2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JU
ZXN0aW5nKCkKK3sKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShuZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hTaG91bGRGYWlsRm9yVGVzdGluZywgZmFsc2UpOwogfQogCiB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5oCShyZXZpc2lvbiAyNjc0NjQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDggQEAK
IAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJ
Lmg+CisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRyLmg+CisjaW5jbHVkZSA8d3RmL3NwaS9kYXJ3
aW4vWFBDU1BJLmg+CiAjZW5kaWYKIAogI2lmIFVTRShDVVJMKQpAQCAtNzUsNiArNzcsNyBAQCBu
YW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOwogY2xhc3MgU2Vj
S2V5UHJveHlTdG9yZTsKIGNsYXNzIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOworY2xhc3MgTmV0
d29ya1Byb2Nlc3NQcm94eTsKIGNsYXNzIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOwogY2xh
c3MgV2ViQ2VydGlmaWNhdGVJbmZvOwogY2xhc3MgV2ViUGFnZVByb3h5OwpAQCAtODQsNiArODcs
OCBAQCBjbGFzcyBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7CiBlbnVtIGNsYXNzIENh
Y2hlTW9kZWwgOiB1aW50OF90OwogZW51bSBjbGFzcyBXZWJzaXRlRGF0YUZldGNoT3B0aW9uIDog
dWludDhfdDsKIGVudW0gY2xhc3MgV2Vic2l0ZURhdGFUeXBlIDogdWludDMyX3Q7CisKK3N0cnVj
dCBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvOwogc3RydWN0IFdlYnNpdGVEYXRhUmVjb3Jk
Owogc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOwogCkBAIC0xMDksNyArMTE0LDEy
IEBAIHB1YmxpYzoKICAgICBXZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvbj4mJiwgUEFMOjpTZXNzaW9uSUQpOwogICAgIH5XZWJzaXRlRGF0YVN0b3JlKCk7
CiAKLSAgICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0
b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEKTsKKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNo
V2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRhU3RvcmUmKT4mJik7Cisg
ICAgCisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MoKSBjb25zdDsKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcygpOworCisgICAgc3RhdGljIFdl
YnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lv
bklEKTsKIAogICAgIGJvb2wgaXNQZXJzaXN0ZW50KCkgY29uc3QgeyByZXR1cm4gIW1fc2Vzc2lv
bklELmlzRXBoZW1lcmFsKCk7IH0KICAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQoKSBjb25z
dCB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQpAQCAtMTE5LDYgKzEyOSwxNSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgY29uc3QgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiYgcHJvY2Vzc2VzKCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9jZXNzZXM7IH0KIAorICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mbyYpPiYmKTsKKyAgICB2b2lkIHRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9T
dXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQg
c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworICAg
IHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7CisgICAgdm9pZCBuZXR3b3JrUHJv
Y2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYpOworICAgIHN0YXRpYyB2b2lkIG1ha2VO
ZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpOworICAgIHN0YXRpYyBib29s
IHNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpOworCiAg
ICAgYm9vbCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpIGNvbnN0OwogICAgIHZvaWQg
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCk7CiAgICAgYm9vbCByZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKCkgY29uc3Q7CkBAIC0yMzUsMTUgKzI1NCw4IEBAIHB1
YmxpYzoKIAogICAgIERldmljZUlkSGFzaFNhbHRTdG9yYWdlJiBkZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZSgpIHsgcmV0dXJuIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuZ2V0KCk7IH0KIAotICAg
IFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7
Ci0gICAgYm9vbCBpc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYpIGNvbnN0
OwotCiAgICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgcGFyYW1ldGVycygpOwogCi0gICAg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXMoKSBjb25zdDsKLSAgICB2b2lk
IGFkZFBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCByZW1v
dmVQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwotICAgIHZvaWQgY2xlYXJQ
ZW5kaW5nQ29va2llcygpOwogICAgIHZvaWQgZmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CiAgICAgdm9pZCBjbGVhckNhY2hlZENyZWRlbnRpYWxzKCk7CiAKQEAgLTI1
MSw2ICsyNjMsMTEgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaXNwYXRjaE9uUXVldWUoRnVuY3Rp
b248dm9pZCgpPiYmKTsKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZvaWQgc2VuZE5ldHdv
cmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Jik7CisgICAg
dm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvQWxsV2ViUHJvY2Vzc2VzKCk7Cisj
ZW5kaWYKKwogI2lmIFVTRShDVVJMKQogICAgIHZvaWQgc2V0TmV0d29ya1Byb3h5U2V0dGluZ3Mo
V2ViQ29yZTo6Q3VybFByb3h5U2V0dGluZ3MmJik7CiAgICAgY29uc3QgV2ViQ29yZTo6Q3VybFBy
b3h5U2V0dGluZ3MmIG5ldHdvcmtQcm94eVNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9wcm94
eVNldHRpbmdzOyB9CkBAIC0yNzIsOCArMjg5LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TW9j
a1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbihXZWJDb3JlOjpNb2NrV2ViQXV0aGVudGlj
YXRpb25Db25maWd1cmF0aW9uJiYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGRpZENyZWF0ZU5ldHdv
cmtQcm9jZXNzKCk7Ci0KICAgICBjb25zdCBXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiYg
Y29uZmlndXJhdGlvbigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi5nZXQoKTsgfQogCiAgICAg
V2Vic2l0ZURhdGFTdG9yZUNsaWVudCYgY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQuZ2V0KCk7
IH0KQEAgLTI4Myw2ICsyOTgsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbmFtZU9yaWdpbklu
V2Vic2l0ZURhdGEoVVJMJiYsIFVSTCYmLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAgIGJvb2wgbmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CisKICNpZiBFTkFCTEUoREVWSUNF
X09SSUVOVEFUSU9OKQogICAgIFdlYkRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29u
dHJvbGxlciYgZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyKCkgeyBy
ZXR1cm4gbV9kZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXI7IH0KICNl
bmRpZgpAQCAtMzU5LDcgKzM3Niw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcmVtb3Zl
TWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgV2FsbFRp
bWUgbW9kaWZpZWRTaW5jZSk7CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0
IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgY29uc3QgSGFzaFNldDxXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAKLSAgICB2b2lkIG1heWJlUmVnaXN0ZXJXaXRoU2Vz
c2lvbklETWFwKCk7CisgICAgdm9pZCByZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKIAogI2lm
IEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykKICAgICBzdGF0aWMgT3B0aW9uYWw8SGFzaFNldDxX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4+IGFwcEJvdW5kRG9tYWluc0lmSW5pdGlhbGl6ZWQo
KTsKQEAgLTM5Nyw4ICs0MTQsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wZXJzaXN0ZW50Q3Jl
ZGVudGlhbFN0b3JhZ2VFbmFibGVkIHsgdHJ1ZSB9OwogI2VuZGlmCiAKLSAgICBIYXNoU2V0PFdl
YkNvcmU6OkNvb2tpZT4gbV9wZW5kaW5nQ29va2llczsKLSAgICAKICAgICBXZWFrSGFzaFNldDxX
ZWJQcm9jZXNzUHJveHk+IG1fcHJvY2Vzc2VzOwogCiAgICAgYm9vbCBtX2lzSXRwU3RhdGVFeHBs
aWNpdGx5U2V0IHsgZmFsc2UgfTsKQEAgLTQxOSw2ICs0MzQsNyBAQCBwcml2YXRlOgogICAgIFVu
aXF1ZVJlZjxXZWJzaXRlRGF0YVN0b3JlQ2xpZW50PiBtX2NsaWVudDsKIAogICAgIFJlZlB0cjxB
UEk6OkhUVFBDb29raWVTdG9yZT4gbV9jb29raWVTdG9yZTsKKyAgICBSZWZQdHI8TmV0d29ya1By
b2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKIAogI2lmIEhBVkUoQVBQX1NTTykKICAgICBV
bmlxdWVSZWY8U09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I+IG1fc29BdXRob3JpemF0aW9uQ29v
cmRpbmF0b3I7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2Nv
YS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCShyZXZp
c2lvbiAyNjc0NjQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2Nv
YS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCwx
MiBAQAogCiAjaW1wb3J0ICJDb29raWVTdG9yYWdlVXRpbHNDRi5oIgogI2ltcG9ydCAiRGVmYXVs
dFdlYkJyb3dzZXJDaGVja3MuaCIKKyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNp
bXBvcnQgIlNhbmRib3hVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlN0b3JhZ2VNYW5hZ2VyLmgiCiAj
aW1wb3J0ICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKICNpbXBvcnQgIldlYlByZWZl
cmVuY2VzS2V5cy5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0ICJXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKICNpbXBvcnQgIldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgpA
QCAtNDQsNiArNDYsNyBAQAogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0
IDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgorI2ltcG9ydCA8
d3RmL2NvY29hL0VudGl0bGVtZW50cy5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTU2Miw0ICs1NjUsMjggQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWluaXRpYWxpemVBcHBCbwogfQogI2VuZGlmCiAKK2Jvb2wg
V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmco
Y29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKK3sKKyAgICByZXR1cm4gV1RGOjpoYXNFbnRpdGxl
bWVudChuZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbnRp
dGxlbWVudC51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5k
TmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHBy
b2Nlc3MpCit7CisgICAgaWYgKHByb2Nlc3Muc3RhdGUoKSAhPSBBdXhpbGlhcnlQcm9jZXNzUHJv
eHk6OlN0YXRlOjpSdW5uaW5nKQorICAgICAgICByZXR1cm47CisgICAgYXV0byogY29ubmVjdGlv
biA9IHByb2Nlc3MuY29ubmVjdGlvbigpOworICAgIGlmICghY29ubmVjdGlvbikKKyAgICAgICAg
cmV0dXJuOworICAgIGF1dG8gbWVzc2FnZSA9IG5ldHdvcmtQcm9jZXNzKCkueHBjRW5kcG9pbnRN
ZXNzYWdlKCk7CisgICAgaWYgKCFtZXNzYWdlKQorICAgICAgICByZXR1cm47CisgICAgeHBjX2Nv
bm5lY3Rpb25fc2VuZF9tZXNzYWdlKGNvbm5lY3Rpb24tPnhwY0Nvbm5lY3Rpb24oKSwgbWVzc2Fn
ZSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5k
cG9pbnRUb0FsbFdlYlByb2Nlc3NlcygpCit7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9w
cm9jZXNzZXMpCisgICAgICAgIHNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9j
ZXNzKHByb2Nlc3MpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJs
LmNwcAkocmV2aXNpb24gMjY3NDY0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDggKzQyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXROZXR3b3JrUHJveHlTZQogewog
ICAgIG1fcHJveHlTZXR0aW5ncyA9IFdURk1vdmUocHJveHlTZXR0aW5ncyk7CiAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5l
dHdvcmtQcm94eVNldHRpbmdzKG1fc2Vzc2lvbklELCBtX3Byb3h5U2V0dGluZ3MpKTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXROZXR3b3Jr
UHJveHlTZXR0aW5ncyhtX3Nlc3Npb25JRCwgbV9wcm94eVNldHRpbmdzKSwgMCk7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURh
dGFTdG9yZVNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCShyZXZpc2lvbiAyNjc0NjQp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRh
U3RvcmVTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29yCiAgICAgYXV0byYgbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzID0gcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQg
PSBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQ7CiAKLSAgICBpZiAoYXV0byog
cHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+
Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9zZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworICAgIG5ldHdvcmtQcm9jZXNzKCku
Y29va2llTWFuYWdlcigpLmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFi
bGVkKGJvb2wgZW5hYmxlZCkKQEAgLTUyLDggKzUxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRQZXJzaXN0ZW50Q3JlZAogICAgICAgICByZXR1cm47CiAKICAgICBtX3BlcnNpc3RlbnRD
cmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBlbmFibGVkOwotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UGVyc2lzdGVudENyZWRl
bnRpYWxTdG9yYWdlRW5hYmxlZChtX3Nlc3Npb25JRCwgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0
b3JhZ2VFbmFibGVkKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChtX3Nlc3Np
b25JRCwgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKSwgMCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9X
ZWJQcm9jZXNzUHJveHlHTGliLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCShyZXZpc2lvbiAyNjc0NjQpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9y
bUdldExhdW5jaE8KICAgICAgICAgaWYgKCFkYXRhU3RvcmUpIHsKICAgICAgICAgICAgIC8vIFBy
ZXdhcm1lZCBwcm9jZXNzZXMgZG9uJ3QgaGF2ZSBhIFdlYnNpdGVEYXRhU3RvcmUgeWV0LCBzbyB1
c2UgdGhlIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSBmcm9tIHRoZSBXZWJQcm9jZXNzUG9vbC4K
ICAgICAgICAgICAgIC8vIFRoZSBwcm9jZXNzIHdvbid0IGJlIHVzZWQgaWYgY3VycmVudCBXZWJz
aXRlRGF0YVN0b3JlIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5
IG9uZS4KLSAgICAgICAgICAgIGRhdGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wtPndlYnNpdGVEYXRh
U3RvcmUoKTsKKyAgICAgICAgICAgIGRhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1
bHREYXRhU3RvcmUoKS5wdHIoKTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChkYXRhU3Rv
cmUpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2Vy
UHJveHlTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3Vw
L1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCShyZXZpc2lvbiAyNjc0NjQpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vz
c1Byb3h5LmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKIApAQCAtMzMsOCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwg
U291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKLSAgICBtX2Nv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlTWFwLnNldChzZXNzaW9uSUQsIHN0ZDo6bWFrZV9wYWlyKHN0
b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOwotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0
ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9u
SUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VU
eXBlJiBzdG9yYWdlVHlwZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3Nv
dXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAJKHJldmlzaW9uIDI2NzQ2NCkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsMzAgKzM3LDI0IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKLSAgICBOZXR3b3JrU2Vz
c2lvbkNyZWF0aW9uUGFyYW1ldGVycyYgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7
Ci0gICAgc3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlKGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIGRlZmF1bHRT
ZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIGRlZmF1bHRTZXNz
aW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOwotICAgIGlmIChtX3dl
YnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0
ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJzaXN0
ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKCk7CisgICAgLy8gRklYTUU6IG1faW5pdGlhbEhU
VFBDb29raWVBY2NlcHRQb2xpY3kgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0
b3JlLgorICAgIC8vIEZJWE1FOiBtX2lnbm9yZVRMU0Vycm9ycyBzaG91bGQgYmUgbW92ZWQgdG8g
dGhlIFdlYnNpdGVEYXRhU3RvcmUgb3IgcmVtb3ZlZC4KKyAgICAvLyBGSVhNRTogbV9uZXR3b3Jr
UHJveHlTZXR0aW5ncyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCiAK
LSAgICBwYXJhbWV0ZXJzLmNvb2tpZUFjY2VwdFBvbGljeSA9IG1faW5pdGlhbEhUVFBDb29raWVB
Y2NlcHRQb2xpY3k7Ci0gICAgcGFyYW1ldGVycy5pZ25vcmVUTFNFcnJvcnMgPSBtX2lnbm9yZVRM
U0Vycm9yczsKICAgICBwYXJhbWV0ZXJzLmxhbmd1YWdlcyA9IHVzZXJQcmVmZXJyZWRMYW5ndWFn
ZXMoKTsKLSAgICBwYXJhbWV0ZXJzLnByb3h5U2V0dGluZ3MgPSBtX25ldHdvcmtQcm94eVNldHRp
bmdzOwogICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSB0cnVlOwogfQog
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNF
cnJvcnMpCiB7CisgICAgLy8gRklYTUU6IE1vdmUgdGhpcyB0byBXZWJzaXRlRGF0YVN0b3JlLgog
ICAgIG1faWdub3JlVExTRXJyb3JzID0gaWdub3JlVExTRXJyb3JzOwotICAgIGlmIChuZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0SWdub3JlVExTRXJyb3JzKG1faWdub3JlVExTRXJyb3JzKSwgMCk7CiB9
CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKGNvbnN0IFdl
YkNvcmU6OlNvdXBOZXR3b3JrUHJveHlTZXR0aW5ncyYgc2V0dGluZ3MpCiB7CisgICAgLy8gRklY
TUU6IE1vdmUgdGhpcyB0byBXZWJzaXRlRGF0YVN0b3JlLgogICAgIG1fbmV0d29ya1Byb3h5U2V0
dGluZ3MgPSBzZXR0aW5nczsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQ
cm94eVNldHRpbmdzKG1fbmV0d29ya1Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpJbmRleDog
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL05l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaAkocmV2aXNpb24gMjY3NDY0KQorKysgU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSFRUUENvb2tpZUFjY2VwdFBv
bGljeS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NzQ2NCkKKysrIFRvb2xzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBACisyMDIwLTA5LTIyICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBO
ZXR3b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNp
dGVEYXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1vc3QgY2hhbmdlcyB0byB0ZXN0cyBhcmUganVzdCBjYWxsaW5nIGEgZnVuY3Rpb24gb24g
dGhlIFdLV2Vic2l0ZURhdGFTdG9yZSBpbnN0ZWFkIG9mIHRoZSBXS1Byb2Nlc3NQb29sCisgICAg
ICAgIGJlY2F1c2Ugd2Ugd2FudCB0byBkbyBzb21ldGhpbmcgd2l0aCB0aGUgbmV0d29yayBwcm9j
ZXNzIGFuZCBpdCBoYXMgYSBuZXcgb3duZXIuCisgICAgICAgIEV4Y2VwdGlvbnMgYXJlIG5vdGVk
IGlubGluZS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW06CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rv
d25sb2FkLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZG93bmxvYWRBdFJhdGUpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5t
bToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW06Cisg
ICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tOgorICAgICAgICAoVEVTVCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVBy
b2Nlc3NLaWxsLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW06CisgICAgICAgIChURVNU
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBl
cnNpc3RlbmNlLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbToKKyAgICAgICAg
KFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhl
ZERCVGVtcEZpbGVTaXplLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbToKKyAgICAg
ICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0
d29ya1Byb2Nlc3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0
b3JlLm1tOgorICAgICAgICAoY2hlY2tSZWNvdmVyeUFmdGVyQ3Jhc2gpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW06
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgIFRoaXMgdGVzdCB3YXMgbWFr
aW5nIGEgV0tXZWJzaXRlRGF0YVN0b3JlLCBnZXR0aW5nIGl0cyByZXNvdXJjZSBsb2FkIHN0YXRp
c3RpY3MgZGlyZWN0b3J5LAorICAgICAgICBwdXR0aW5nIHRoaW5ncyBpbiB0aGF0IGRpcmVjdG9y
eSwgdGhlbiBzdGFydGluZyB0aGUgbmV0d29yayBwcm9jZXNzIGFuZCBtYWtpbmcgc3VyZSBldmVy
eXRoaW5nCisgICAgICAgIHdvcmtzIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBuZXR3b3JrIHByb2Nl
c3MuICBOb3csIG5ldHdvcmsgcHJvY2VzcyBpbml0aWFsaXphdGlvbiBoYXBwZW5zIHdoZW4gYQor
ICAgICAgICBXS1dlYnNpdGVEYXRhU3RvcmUgaXMgaW5zdGFudGlhdGVkLCBzbyB3ZSBuZWVkIHRv
IHB1dCB0aGluZ3MgdGhlcmUgYmVmb3JlIGluc3RhbnRpYXRpbmcgYSBXS1dlYnNpdGVEYXRhU3Rv
cmUuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29y
a2VyQmFzaWMubW06CisgICAgICAgIEJlZm9yZSB0aGlzIGNoYW5nZSwgZWFjaCBXS1Byb2Nlc3NQ
b29sIGhhZCBpdHMgb3duIG5ldHdvcmsgcHJvY2Vzcywgd2hpY2ggaG9sZHMgdGhlIHNlcnZpY2Ug
d29ya2VyIHJlZ2lzdHJ5CisgICAgICAgIGZvciB0aGUgV2Vic2l0ZURhdGFTdG9yZXMgdXNlZCB3
aXRoIHRoYXQgcHJvY2VzcyBwb29sLiAgTm93LCB0aGUgbmV0d29yayBwcm9jZXNzIHN0aWxsIG5l
ZWRzIHRvIGhhdmUgYSBzZXJ2aWNlCisgICAgICAgIHdvcmtlciByZWdpc3RyeSBpbiBpdCwgYnV0
IHdoZW4gd2UgcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBpdCBsb29raW5nIGZvciBhIHdlYiBwcm9j
ZXNzIHRvIHJ1biB0aGUgc2VydmljZQorICAgICAgICB3b3JrZXIsIHdlIGdvIGFyYml0cmFyaWx5
IHRvIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wgdGhhdCBoYXMgYSBwcm9jZXNzIHdlIGNhbiB1c2Uu
ICBUaGlzIGxvZ2ljIGlzIGluIAorICAgICAgICBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29y
a2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzLiAgQmVjYXVzZSB3ZSB1c2UgdGhl
IGZpcnN0IHByb2Nlc3MgcG9vbCBlYWNoCisgICAgICAgIHRpbWUsIHNldHRpbmcgdGhlIGN1c3Rv
bSB1c2VyIGFnZW50IHRvIHR3byBkaWZmZXJlbnQgdGhpbmdzIGluIHR3byBkaWZmZXJlbnQgcHJv
Y2VzcyBwb29scyBjYXVzZXMgb25seSBvbmUKKyAgICAgICAgdG8gYmUgdXNlZC4gIFRoaXMgaXMg
bm90IGEgcHJvYmxlbSBpbiBwcmFjdGljZSwgdGhvdWdoLCBiZWNhdXNlIHRoZSBvbmx5IGFwcGxp
Y2F0aW9uIHRoYXQgdXNlcyB0aGUgU1BJIHRvCisgICAgICAgIHNldCBhIHNlcnZpY2Ugd29ya2Vy
J3MgY3VzdG9tIHVzZXIgYWdlbnQgaXMgU2FmYXJpLCB3aGljaCBvbmx5IGhhcyBvbmUgcHJvY2Vz
cyBwb29sLiAgVGhpcyB0ZXN0IHN0aWxsIHZlcmlmaWVzCisgICAgICAgIHRoYXQgYSB1c2VyIGFn
ZWludCBpcyBjb3JyZWN0bHkgc2VudC4KKyAgICAgICAgU2ltaWxhcmx5LCB0aGUgdGVzdHMgdGhh
dCBjb3VudCBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzZXMgZWl0aGVyIGhhdmUgZGlmZmVyZW50IHJl
c3VsdHMgb3IgbmVlZCB0byBiZSBydW4gd2l0aAorICAgICAgICBvbmUgcHJvY2VzcyBwb29sIHBl
ciBwYXJlbnQgcHJvY2Vzcy4gIFRvIGtlZXAgdGhlIHJlc3VsdHMgdGhlIHNhbWUsIEkgc2VwYXJh
dGVkIHRoZSB0ZXN0cyBpbnRvIGRpZmZlcmVudAorICAgICAgICBURVNUKFNlcnZpY2VXb3JrZXJz
LCAuLi4pIG1hY3JvcyB3aGljaCBhcmUgcnVuIGluIHNlcGFyYXRlIHBhcmVudCBwcm9jZXNzZXMu
CisgICAgICAgIFRoZSB0ZXN0IFJlc3RvcmVGcm9tRGlza05vbkRlZmF1bHRTdG9yZSBuZWVkcyB0
byB1c2UgdGhlIHNhbWUgZGF0YSBzdG9yZSBmb3IgYm90aCBXS1dlYlZpZXdzIG5vdyBiZWNhdXNl
IG90aGVyd2lzZQorICAgICAgICB0aGVyZSB3YXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgc3Rh
cnR1cCBvZiBhIG5ldyBuZXR3b3JrIHByb2Nlc3MgdGhhdCB3YXNuJ3QgdGhlcmUgYmVmb3JlIGJl
Y2F1c2Ugd2Ugd2VyZSB1c2luZyB0aGUKKyAgICAgICAgc2FtZSBwcm9jZXNzIHBvb2wgYW5kIHRo
ZXJlZm9yZSB0aGUgc2FtZSBuZXR3b3JrIHByb2Nlc3MuICBJIGFkZGVkIHNwaW5uaW5nIHRoZSBy
dW4gbG9vcCBhbmQgc2xlZXBpbmcgdG8gYmUgYWJsZSB0bworICAgICAgICByZXByb2R1Y2UgdGhl
IHJhY2UgY29uZGl0aW9uIGZhaWx1cmUgYW5kIEkgdXNlIHRoZSBzYW1lIFdLV2Vic2l0ZURhdGFT
dG9yZSB0byB1c2UgdGhlIHNhbWUgbmV0d29yayBwcm9jZXNzLCB3aGljaCB3YXMKKyAgICAgICAg
dGhlIGludGVudCBvZiB1c2luZyB0aGUgc2FtZSBXS1Byb2Nlc3NQb29sIGJlZm9yZS4gIFRoZSB0
ZXN0IHN0aWxsIHRlc3RzIHRoYXQgdGhlIHJlZ2lzdHJhdGlvbiBpcyByZS11c2VkIHdoZW4gd2Ug
YXJlCisgICAgICAgIG5vdCB1c2luZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlLgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW06Cisg
ICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2Ny
aXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRs
ZXI6XSk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2FpdEZvck1l
c3NhZ2VdKToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBhbGVydENv
b2tpZUhUTUxdKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICBUaGlzIGlzIHRoZSB3aG9sZSBw
b2ludCBvZiBtZSBkb2luZyB0aGlzLgorICAgICAgICBJIHRvb2sgYSB0ZXN0IHRoYXQgd2FzIGZs
YWt5IG9ubHkgb24gaU9TIChiZWNhdXNlIG9mIGRpZmZlcmVudCBOU0hUVFBDb29raWVTdG9yYWdl
IHN5bmNpbmcgYmVoYXZpb3IpIGFuZCBtYWRlCisgICAgICAgIGl0IGZsYWt5IG5vd2hlcmUgKGZp
bmdlcnMgY3Jvc3NlZCEpIGFuZCBhZGRlZCBhIHRlc3QgdGhhdCBjb3JyZWN0bHkgaGFuZGxlcyBz
ZXNzaW9uIGNvb2tpZXMgbGlrZSB3ZSBjb3VsZCBub3QKKyAgICAgICAgYmVmb3JlIHRoaXMgY2hh
bmdlLgorICAgICAgICBJIGFsc28gcmUtdXNlZCBzb21lIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgYW5k
IG1hZGUgaXQgc3RvcCB1c2luZyBwcm9jZXNzLWdsb2JhbCBzdGF0aWMgdmFyaWFibGVzIGZvciB0
ZXN0IHN0YXRlLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tV
UkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMu
bW06CisgICAgICAgIChydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMpOgorICAgICAgICAo
VEVTVCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVz
KToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dCk6
CisgICAgICAgIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdv
cmtlclRlc3RpbmcgaXMgbm90IG5lZWRlZCwgc28gSSByZW1vdmVkIGl0LgorICAgICAgICBXS0Nv
bnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZSBpc24ndCBuZWVkZWQgYW55IG1vcmUgYmVj
YXVzZSBXS0NvbnRleHRSZWYgKFdlYlByb2Nlc3NQb29sKSBkb2Vzbid0CisgICAgICAgIG93biBh
IG5ldHdvcmsgcHJvY2VzcyBhbnkgbW9yZSwgc28gaXQgZG9lc24ndCBjYXJlIHdoaWNoIGlzIHRo
ZSBkZWZhdWx0IFdlYnNpdGVEYXRhU3RvcmUuCisgICAgICAgIEluIGZhY3QsIHRoZSAiZGVmYXVs
dCIgV2Vic2l0ZURhdGFTdG9yZSBpc24ndCByZWFsbHkgaW1wb3J0YW50IGluIHRoZSBuZXR3b3Jr
IHByb2Nlc3MgYW55IG1vcmUuCisKIDIwMjAtMDktMjIgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFVuaWZ5IGRlYnVnIGFuZCByZWxlYXNlIHRhcmdldCBhbGlh
c2VzCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vz
c0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5l
Y3Rpb24ubW0JKHJldmlzaW9uIDI2NzQ2NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0JKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NHcm91
cFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNp
dGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0
IDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTg3LDcgKzg4LDcgQEAgVEVTVChXZWJLaXQsIE5ldHdv
cmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZAogICAgIHBpZF90IHdlYlZpZXcyUElEID0gW3dlYlZpZXcy
LmdldCgpIF93ZWJQcm9jZXNzSWRlbnRpZmllcl07CiAgICAgRVhQRUNUX05FKHdlYlZpZXcxUElE
LCB3ZWJWaWV3MlBJRCk7CiAKLSAgICBwaWRfdCBpbml0aWFsTmV0d29ya1Byb2Nlc3NJZGVudGlm
aWZlciA9IFtwcm9jZXNzUG9vbC5nZXQoKSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXTsKKyAg
ICBwaWRfdCBpbml0aWFsTmV0d29ya1Byb2Nlc3NJZGVudGlmaWZlciA9IFtjb25maWd1cmF0aW9u
LmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl07CiAgICAg
RVhQRUNUX05FKGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVyLCAwKTsKICAgICBraWxs
KGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVyLCBTSUdLSUxMKTsKICAgICBVdGlsOjpy
dW4oJm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk7CkBAIC05Niw3ICs5Nyw3IEBAIFRFU1QoV2ViS2l0
LCBOZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmQKICAgICBbd2ViVmlldzEuZ2V0KCkgbG9hZFJl
cXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVd
IFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0
b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV1dOwogICAgIFt3ZWJWaWV3MS5nZXQoKSBf
dGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CiAKLSAgICBwaWRfdCByZWxhdW5jaGVk
TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyID0gW3Byb2Nlc3NQb29sLmdldCgpIF9uZXR3b3JrUHJv
Y2Vzc0lkZW50aWZpZXJdOworICAgIHBpZF90IHJlbGF1bmNoZWROZXR3b3JrUHJvY2Vzc0lkZW50
aWZpZXIgPSBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9uZXR3b3JrUHJv
Y2Vzc0lkZW50aWZpZXJdOwogICAgIEVYUEVDVF9ORShpbml0aWFsTmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWZlciwgcmVsYXVuY2hlZE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik7CiAgICAgRVhQRUNU
X0ZBTFNFKG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk7CiAKQEAgLTE0Niw4ICsxNDcsOCBAQCBURVNU
KFdlYktpdCwgTmV0d29ya1Byb2Nlc3NSZWxhdW5jaE9uTGF1CiAKICAgICAvLyBDb25zdHVjdGlu
ZyBhIFdlYlZpZXcgc3RhcnRzIGEgbmV0d29yayBwcm9jZXNzIHNvIHRlcm1pbmF0ZSB0aGlzIG9u
ZS4gVGhlIHBhZ2UgbG9hZCBiZWxvdyB3aWxsIHRoZW4gcmVxdWVzdCBhIG5ldHdvcmsgcHJvY2Vz
cyBhbmQgd2UKICAgICAvLyBtYWtlIHRoaXMgbmV3IG5ldHdvcmsgcHJvY2VzcyBsYXVuY2ggY3Jh
c2ggb24gc3RhcnR1cC4KLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKLSAgICBbcHJvY2Vzc1Bvb2wgX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9y
VGVzdGluZ107CisgICAgW1dLV2Vic2l0ZURhdGFTdG9yZSBfbWFrZU5leHROZXR3b3JrUHJvY2Vz
c0xhdW5jaEZhaWxGb3JUZXN0aW5nXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRl
RGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIGRlbGVnYXRl
ID0gYWRvcHROUyhbW01vbml0b3JXZWJDb250ZW50Q3Jhc2hOYXZpZ2F0aW9uRGVsZWdhdGUgYWxs
b2NdIGluaXRdKTsKICAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUu
Z2V0KCldOwpAQCAtMTU4LDcgKzE1OSw3IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc1Jl
bGF1bmNoT25MYXUKICAgICBFWFBFQ1RfVFJVRShuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOwogICAg
IEVYUEVDVF9GQUxTRSh3ZWJQcm9jZXNzQ3Jhc2hlZCk7CiAgICAgRVhQRUNUX0dUKFt3ZWJWaWV3
IF93ZWJQcm9jZXNzSWRlbnRpZmllcl0sIDApOwotICAgIEVYUEVDVF9HVChbcHJvY2Vzc1Bvb2wu
Z2V0KCkgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0sIDApOworICAgIEVYUEVDVF9HVChbY29u
ZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXJdLCAwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCShyZXZp
c2lvbiAyNjc0NjQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rv
d25sb2FkLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04ODksOSArODg5LDkgQEAgdm9pZCBkb3dubG9h
ZEF0UmF0ZShkb3VibGUgZGVzaXJlZEticHMsIAogICAgIHJlY2VpdmVkRGF0YSA9IGZhbHNlOwog
ICAgIFV0aWw6OnJ1bigmcmVjZWl2ZWREYXRhKTsKICAgICAvLyBTdGFydCB0aGUgRG93bmxvYWRN
b25pdG9yJ3MgdGltZXIuCi0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29s
IF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOllFU107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3Vy
YXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsK
ICAgICBpZiAocmV0dXJuVG9Gb3JlZ3JvdW5kID09IEFwcFJldHVybnNUb0ZvcmVncm91bmQ6Olll
cykKLSAgICAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVz
aXplQXBwSXNCYWNrZ3JvdW5kOk5PXTsKKyAgICAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25d
LndlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9dOwogICAgIGRp
ZENhbmNlbCA9IGZhbHNlOwogICAgIFV0aWw6OnJ1bigmZGlkQ2FuY2VsKTsKICAgICB0ZXJtaW5h
dGVTZXJ2ZXIgPSB0cnVlOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JREJDaGVja3BvaW50V0FMLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbQkocmV2aXNpb24gMjY3NDY0
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50
V0FMLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQv
V0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29u
dHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9u
UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpA
QCAtODYsNyArODcsNyBAQCBURVNUKEluZGV4ZWREQiwgQ2hlY2twb2ludHNXQUxBdXRvbWF0aWNh
CiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29u
ZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVy
OmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZp
Z3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3Zlcnku
bW0JKHJldmlzaW9uIDI2NzQ2NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
V2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRl
RGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8
V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19X
S1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBEZWxl
dGVSZWNvdmVyeSkKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7
CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVz
c2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5jb25zaXN0ZW50IGRhdGFiYXNlIGZp
bGVzIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5k
bGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJEZWxldGVSZWNvdmVyeSIgd2l0aEV4
dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2Vz
Il07CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4
VXBncmFkZVRvVjIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tCShyZXZpc2lvbiAyNjc0NjQpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1By
b2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9s
bGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01
OCw3ICs1OSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleFVwZ3JhZGVUb1YyKQogICAgIFJldGFp
blB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dL
V2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24g
dXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdl
dCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJv
Y2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5n
ZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAv
LyBDb3B5IHRoZSBpbmNvbnNpc3RlbnQgZGF0YWJhc2UgZmlsZXMgdG8gdGhlIGRhdGFiYXNlIGRp
cmVjdG9yeQogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JS
ZXNvdXJjZTpAIkluZGV4VXBncmFkZSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVj
dG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CkluZGV4OiBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2Jq
ZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0JKHJldmlzaW9uIDI2NzQ2NCkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRv
VjIubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9X
S1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250
cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Q
cml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29s
Q29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBA
IC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJREJPYmplY3RTdG9yZUluZm9VcGdyYWQK
ICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFk
b3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25m
aWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6
aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OwogCiAgICAgLy8gQ29weSBkYXRhYmFzZSBmaWxlcyB3aXRoIG9sZCBPYmplY3RTdG9yZUluZm8g
c2NoZW1hIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkuCiAgICAgTlNVUkwgKnVybDEgPSBbW05T
QnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiSURCT2JqZWN0U3RvcmVJbmZvVXBn
cmFkZSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRB
UEkucmVzb3VyY2VzIl07CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NL
aWxsLm1tCShyZXZpc2lvbiAyNjc0NjQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0JKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktp
dC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgpAQCAtOTIsNyArOTMsNyBAQCBURVNUKEluZGV4ZWREQiwg
RGF0YWJhc2VQcm9jZXNzS2lsbCkKICAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZy
ZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAgICAgICBpZiAoIWtpbGxlZERCUHJvY2VzcyAmJiBv
cGVuUmVxdWVzdFVwZ3JhZGVOZWVkZWQpIHsKICAgICAgICAgICAgIGtpbGxlZERCUHJvY2VzcyA9
IHRydWU7Ci0gICAgICAgICAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgICAgICAgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCku
d2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgICAgICB9CiAg
ICAgfQogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4
ZWREQk11bHRpUHJvY2Vzcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbQkocmV2aXNpb24gMjY3NDY0
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0
aVByb2Nlc3MubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdl
YktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
S1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0
IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KICNpbXBvcnQgPHd0Zi9EZXF1ZS5oPgpAQCAt
NjksNyArNzAsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCTXVsdGlQcm9jZXNzKQogICAg
IFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHRO
UyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3Vy
YXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5k
bGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0
KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAK
ICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0
aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNl
Lm1tCShyZXZpc2lvbiAyNjc0NjQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3
OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJQZXJzaXN0ZW5jZSkKICAgICB3ZWJWaWV3
ID0gbmlsOwogCiAgICAgLy8gVGVybWluYXRlIHRoZSBuZXR3b3JrIHByb2Nlc3MKLSAgICBbY29u
ZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwor
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKIAogICAgIC8vIE1ha2UgYSBuZXcgd2ViIHZpZXcgdG8gZmluaXNoIHRoZSB0
ZXN0CiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9u
LmdldCgpXSk7CkBAIC0yNjgsNyArMjY4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlRo
aXJkUGFydHlGcmFtZQogCiAgICAgd2ViVmlldyA9IG5pbDsKICAgICBzZWNvbmRXZWJWaWV3ID0g
bmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gVGhpcmQtcGFydHkgSURCIHN0b3Jh
Z2UgaXMgc3RvcmVkIGluIHRoZSBtZW1vcnkgb2YgbmV0d29yayBwcm9jZXNzLgogICAgIGF1dG8g
dGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0
KCldKTsKQEAgLTM4NSw3ICszODUsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCVGhpcmRQ
YXJ0eVdvcmtlCiAKICAgICB3ZWJWaWV3ID0gbmlsOwogICAgIHNlY29uZFdlYlZpZXcgPSBuaWw7
Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHRoaXJkV2ViVmlldyA9IGFkb3B0TlMo
W1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYw
MCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgbG9hZFRlc3RQYWdl
SW5XZWJWaWV3KHRoaXJkV2ViVmlldy5nZXQoKSwgQCJkYXRhYmFzZSBpcyBjcmVhdGVkIik7Cklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3Bl
bmRJbW1pbmVudGx5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0JKHJldmlzaW9uIDI2NzQ2
NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3Vz
cGVuZEltbWluZW50bHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBv
cnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3Jl
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19X
S1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpA
QCAtODgsOCArODksOCBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCU3VzcGVuZEltbWluZW50
CiAKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJDb250aW51ZSIpOwogCi0gICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5k
SW1taW5lbnRseV07Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0
ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nl
c3NEaWRSZXN1bWVdOwogCiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiRXhwZWN0ZWQgQWJv
cnQgRm9yIFN1c3BlbnNpb24iKTsKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJFeHBlY3Rl
ZCBTdWNjZXNzIEFmdGVyIFJlc3VtZSIpOwpAQCAtMTU4LDggKzE1OSw4IEBAIFRFU1QoSW5kZXhl
ZERCLCBTdXNwZW5kSW1taW5lbnRseUZvclRoaXIKICAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmlu
ZzptYWluRnJhbWVTdHJpbmcgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly93
ZWJraXQub3JnIl1dOwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAImRhdGFiYXNlIGlzIGNy
ZWF0ZWQiKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwotICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxT
dXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFT
dG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJ1blRlc3RBbmRDaGVj
a1Jlc3VsdChAInRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZCIpOwogfQpJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJUZW1wRmlsZVNpemUubW0JKHJldmlzaW9uIDI2NzQ2NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC05NSw3ICs5NSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUZW1wRmlsZVNp
emUpCiAKICAgICAvLyBUZXJtaW5hdGUgbmV0d29yayBwcm9jZXNzIHRvIGtlZXAgV0FMIG9uIGRp
c2suCiAgICAgd2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIEVYUEVD
VF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDp3
YWxGaWxlUGF0aC5nZXQoKS5wYXRoXSk7CiAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gZmls
ZUF0dHJpYnV0ZXMgPSBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGF0dHJpYnV0ZXNP
Zkl0ZW1BdFBhdGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aCBlcnJvcjpuaWxdOwpJbmRleDogVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5j
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCShyZXZpc2lvbiAyNjc0NjQpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVc2Vy
Q29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29u
ZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYnBhZ2VQcmVmZXJlbmNl
c1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bv
b2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4K
QEAgLTEwOSw3ICsxMTAsNyBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlUHJvY2Vzc0Ny
YXNoCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2Up
OwogICAgIEVYUEVDVF9XS19TVFJFUShAInNlc3Npb246c3RvcmFnZSIsIFtsYXN0U2NyaXB0TWVz
c2FnZSBib2R5XSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVE
YXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJlY2VpdmVkU2NyaXB0
TWVzc2FnZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRT
Y3JpcHRNZXNzYWdlKTsKQEAgLTE2Miw3ICsxNjMsNyBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxT
dG9yYWdlUHJvY2Vzc1N1c3BlCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZl
ZFNjcmlwdE1lc3NhZ2UpOwogICAgIEVYUEVDVF9XS19TVFJFUShAInZhbHVlIiwgW2xhc3RTY3Jp
cHRNZXNzYWdlIGJvZHldKTsKIAotICAgIFtwcm9jZXNzUG9vbC5nZXQoKSBfc2VuZE5ldHdvcmtQ
cm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHld
OwogCiAgICAgcmVhZHlUb0NvbnRpbnVlID0gZmFsc2U7CiAgICAgW3dlYlZpZXcxIGV2YWx1YXRl
SmF2YVNjcmlwdDpAIndpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgna2V5JywgJ25ld1ZhbHVl
JykiIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQsIE5TRXJyb3IgKikgewpAQCAtMTc3LDcgKzE3OCw3
IEBAIFRFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzU3VzcGUKICAgICB9XTsKICAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlYWR5VG9Db250aW51ZSk7CiAgICAgCi0gICAg
W3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0Rp
ZFJlc3VtZV07CiAKICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1By
b2Nlc3MubW0JKHJldmlzaW9uIDI2NzQ2NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4
LDcgQEAKICNpbXBvcnQgIkhUVFBTZXJ2ZXIuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIK
ICNpbXBvcnQgIlV0aWxpdGllcy5oIgotI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2lt
cG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0
IDx3dGYvVmVjdG9yLmg+CkBAIC0zNywxNCArMzcsMTQgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQ
cm9jZXNzRW50aXRsZW1lbnRzKQogewogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDAp
IGNvbmZpZ3VyYXRpb246W1tbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0
b3JlbGVhc2VdXSk7CiAgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVk
OkAic2ltcGxlIl07Ci0gICAgV0tQcm9jZXNzUG9vbCAqcG9vbCA9IFt3ZWJWaWV3IGNvbmZpZ3Vy
YXRpb25dLnByb2Nlc3NQb29sOwotICAgIGJvb2wgaGFzRW50aXRsZW1lbnQgPSBbcG9vbCBfbmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Mu
c3RvcmFnZS5XZWJLaXROZXR3b3JraW5nU2FuZGJveCJdOworICAgIFdLV2Vic2l0ZURhdGFTdG9y
ZSAqc3RvcmUgPSBbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlOworICAg
IGJvb2wgaGFzRW50aXRsZW1lbnQgPSBbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1l
bnRGb3JUZXN0aW5nOkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0TmV0d29ya2lu
Z1NhbmRib3giXTsKICNpZiBQTEFURk9STShNQUMpICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREsp
CiAgICAgRVhQRUNUX1RSVUUoaGFzRW50aXRsZW1lbnQpOwogI2Vsc2UKICAgICBFWFBFQ1RfRkFM
U0UoaGFzRW50aXRsZW1lbnQpOwogI2VuZGlmCi0gICAgRVhQRUNUX0ZBTFNFKFtwb29sIF9uZXR3
b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVyZSBjYXNlIl0p
OworICAgIEVYUEVDVF9GQUxTRShbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRG
b3JUZXN0aW5nOkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7CiB9CiAKIFRFU1QoV2ViS2l0LCBIVFRQ
UmVmZXJlcikKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0
d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNo
Tm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQkocmV2aXNpb24gMjY3NDY0KQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lz
dGVudERhdGFTdG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMg
dm9pZCBjaGVja1JlY292ZXJ5QWZ0ZXJDcmFzaChXS1dlCiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7CiAKLSAgICBbW3dlYlZpZXcgY29uZmln
dXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbW3dl
YlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdp
dGhVUkw6c2ltcGxlMl1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiB9
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2Fw
T25OYXZpZ2F0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0JKHJldmlzaW9uIDI2NzQ2NCkK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5h
dmlnYXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTUzODUsNyArNTM4NSw3IEBAIFRFU1QoUHJv
Y2Vzc1N3YXAsIFVzZVByZXdhcm1lZFByb2Nlc3NBZnQKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CisgICAgW3dlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3Rv
cmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9w
dE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAw
LCA2MDApIGNvbmZpZ3VyYXRpb246d2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBb
d2ViVmlldzIgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0JKHJldmlzaW9uIDI2NzQ2NCkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNzE5LDcgKzcxOSw3IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlz
dGljcywgTmV0d29ya1Byb2MKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29w
KDEpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3Jl
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXcyID0gYWRvcHRO
UyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwg
NjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAtNzUyLDcgKzc1
Miw3IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTmV0d29ya1Byb2MKIAogICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CiAKICAgICBhdXRvIHdlYlZpZXczID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3Vy
YXRpb24uZ2V0KCldKTsKIApAQCAtMTU1OCwxMCArMTU1OCw4IEBAIFRFU1QoUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcywgTWlncmF0ZURhdGEKIAogVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBD
YW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sKQogeworICAgIE5TVVJMICppdHBS
b290VVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBz
dHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhO
b1Byb2Nlc3NQb29sVGVzdCJdIGlzRGlyZWN0b3J5OllFU107CiAgICAgYXV0byBkZWZhdWx0Rmls
ZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07Ci0gICAgX1dLV2Vic2l0
ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19XS1dl
YnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOwotICAgIGF1dG8g
KmRhdGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmln
dXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07Ci0gICAgTlNVUkwg
Kml0cFJvb3RVUkwgPSBbW2RhdGFTdG9yZSBfY29uZmlndXJhdGlvbl0gX3Jlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnldOwogICAgIE5TVVJMICpmaWxlVVJMID0gW2l0cFJvb3RVUkwgVVJM
QnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAib2JzZXJ2YXRpb25zLmRiIl07CiAgICAgW2RlZmF1
bHRGaWxlTWFuYWdlciByZW1vdmVJdGVtQXRQYXRoOml0cFJvb3RVUkwucGF0aCBlcnJvcjpuaWxd
OwogICAgIEVYUEVDVF9GQUxTRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6
aXRwUm9vdFVSTC5wYXRoXSk7CkBAIC0xNTcyLDYgKzE1NzAsMTAgQEAgVEVTVChSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLCBDYW5BY2Nlc3NEYQogICAgIEVYUEVDVF9UUlVFKFtkZWZhdWx0RmlsZU1h
bmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpuZXdGaWxlVVJMLnBhdGhdKTsKICAgICBbZGVmYXVsdEZp
bGVNYW5hZ2VyIGNvcHlJdGVtQXRQYXRoOm5ld0ZpbGVVUkwucGF0aCB0b1BhdGg6ZmlsZVVSTC5w
YXRoIGVycm9yOm5pbF07CiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxl
RXhpc3RzQXRQYXRoOmZpbGVVUkwucGF0aF0pOworCisgICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNv
bmZpZ3VyYXRpb24gKmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19XS1dlYnNpdGVEYXRhU3Rv
cmVDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGRhdGFTdG9yZUNvbmZpZ3Vy
YXRpb24uX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBpdHBSb290VVJMOworICAg
IGF1dG8gKmRhdGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRo
Q29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CiAgICAg
W2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKIAogICAg
IHN0YXRpYyBib29sIGRvbmVGbGFnID0gZmFsc2U7CkBAIC0xNjMzLDEyICsxNjM1LDEyIEBAIFRF
U1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgU3RvcmVTdXNwZW4KICAgICBbd2ViVmlldzIgX3Rl
c3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOwogCiAgICAgZG9uZUZsYWcgPSBmYWxzZTsK
LSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3Bl
bmQ6XnsKKyAgICBbZGF0YVN0b3JlMSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVu
ZDpeewogICAgICAgICBkb25lRmxhZyA9IHRydWU7CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CiAKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW2RhdGFTdG9yZTEgX3NlbmROZXR3b3JrUHJv
Y2Vzc0RpZFJlc3VtZV07CiB9CiAKIEBpbnRlcmZhY2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nj
aGVtZUhhbmRsZXIgOiBOU09iamVjdCA8V0tVUkxTY2hlbWVIYW5kbGVyPgpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNl
V29ya2VyQmFzaWMubW0JKHJldmlzaW9uIDI2NzQ2NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC01NTgsNyArNTU4LDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgVXNlckFnZW50T3ZlcnJpZGUp
CiAKICAgICBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24g
YWxsb2NdIGluaXRdKTsKIAotICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1NXVXNlckFn
ZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNzYWdlOkAiTWVzc2Fn
ZSBmcm9tIHdvcmtlcjogQmFyIEN1c3RvbSBVc2VyQWdlbnQiXSk7CisgICAgbWVzc2FnZUhhbmRs
ZXIgPSBhZG9wdE5TKFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhF
eHBlY3RlZE1lc3NhZ2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBGb28gQ3VzdG9tIFVzZXJBZ2Vu
dCJdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3Jp
cHRNZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAic3ciXTsKIAogICAg
IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFr
ZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0p
OwpAQCAtNjMzLDggKzYzMyw2IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIENhY2hlU3RvcmFnZVJl
c3RvcmUKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBm
YWxzZTsKIAotICAgIFtXS1dlYnNpdGVEYXRhU3RvcmUgX2RlbGV0ZURlZmF1bHREYXRhU3RvcmVG
b3JUZXN0aW5nXTsKLQogICAgIFNlcnZpY2VXb3JrZXJUQ1BTZXJ2ZXIgc2VydmVyKHsKICAgICAg
ICAgeyAidGV4dC9odG1sIiwgbWFpbkNhY2hlU3RvcmFnZUJ5dGVzIH0KICAgICB9LCB7CkBAIC05
ODIsNiArOTgwLDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU2VydmljZVdvcmtlclByb2Nlcwog
CiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIHNldENv
bmZpZ3VyYXRpb25JbmplY3RlZEJ1bmRsZVBhdGgoY29uZmlndXJhdGlvbi5nZXQoKSk7CisgICAg
UmV0YWluUHRyPFdLUHJvY2Vzc1Bvb2w+IG9yaWdpbmFsUHJvY2Vzc1Bvb2wgPSBjb25maWd1cmF0
aW9uLmdldCgpLnByb2Nlc3NQb29sOwogCiAgICAgZG9uZSA9IGZhbHNlOwogCkBAIC0xMDM1LDcg
KzEwMzQsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2VzCiAgICAg
ZG9uZSA9IGZhbHNlOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbG9hZGluZyB0aGUgc2ltcGxl
IHBhZ2UgZGlkIG5vdCBzdGFydCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vzcy4KLSAgICBFWFBF
Q1RfRVEoMHUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fc2Vydmlj
ZVdvcmtlclByb2Nlc3NDb3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCB3ZWJWaWV3LmdldCgpLmNv
bmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwogCiAg
ICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNN
YWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpuZXdDb25maWd1cmF0aW9uLmdl
dCgpXSk7CiAgICAgRVhQRUNUX0VRKDJ1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJv
Y2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudElnbm9yaW5nUHJld2FybWVkKTsKQEAgLTEwNDMsOSAr
MTA0Miw4IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXMKICAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IGxvYWRpbmcgdGhpcyBwYWdlIGRpZCBzdGFydCB0aGUgc2Vydmlj
ZSB3b3JrZXIgcHJvY2Vzcy4KICAgICBFWFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmln
dXJhdGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7Ci0KKyAgICBF
WFBFQ1RfRVEoMXUsIG9yaWdpbmFsUHJvY2Vzc1Bvb2wuZ2V0KCkuX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzQ291bnQpOwogICAgIFtbY29uZmlndXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSByZW1vdmVE
YXRhT2ZUeXBlczpbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbFdlYnNpdGVEYXRhVHlwZXNdIG1vZGlm
aWVkU2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XigpIHsKICAg
ICAgICAgZG9uZSA9IHRydWU7CiAgICAgfV07CkBAIC0xNjE4LDIxICsxNjE2LDM1IEBAIHN0YXRp
YyBzaXplX3QgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MKICAgICByZXR1cm4gd2ViVmlldy5n
ZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl93ZWJQcm9jZXNzQ291bnRJZ25vcmluZ1By
ZXdhcm1lZDsKIH0KIAotVEVTVChTZXJ2aWNlV29ya2VycywgT3V0T2ZBbmRJblByb2Nlc3NTZXJ2
aWNlV29ya2VyKQorVEVTVChTZXJ2aWNlV29ya2VycywgT3V0T2ZQcm9jZXNzU2VydmljZVdvcmtl
cikKIHsKICAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOwog
ICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CiAKICAgICBFWFBFQ1RfRVEoMXUs
IGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKCF1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykpOworfQorCitURVNUKFNlcnZpY2VXb3JrZXJzLCBJ
blByb2Nlc3NTZXJ2aWNlV29ya2VyKQoreworICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcyA9IHRydWU7CisgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsK
KwogICAgIEVYUEVDVF9FUSgydSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgIWZpcnN0TG9hZEFib3V0QmxhbmspKTsKIH0KIAotVEVT
VChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaFNl
cnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5h
dmlnYXRpbmdUaHJvdWdoT3V0T2ZQcm9jZXNzU2VydmljZVdvcmtlcikKIHsKICAgICBib29sIHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOwogICAgIGJvb2wgZmlyc3RMb2Fk
QWJvdXRCbGFuayA9IHRydWU7CiAKICAgICBFWFBFQ1RfRVEoMXUsIGxhdW5jaFNlcnZpY2VXb3Jr
ZXJQcm9jZXNzKCF1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJzdExvYWRBYm91
dEJsYW5rKSk7Cit9CisKK1RFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5rQmVmb3Jl
TmF2aWdhdGluZ1Rocm91Z2hJblByb2Nlc3NTZXJ2aWNlV29ya2VyKQoreworICAgIGJvb2wgdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CisgICAgYm9vbCBmaXJzdExvYWRB
Ym91dEJsYW5rID0gdHJ1ZTsKKwogICAgIEVYUEVDVF9FUSgydSwgbGF1bmNoU2VydmljZVdvcmtl
clByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgZmlyc3RMb2FkQWJvdXRC
bGFuaykpOwogfQogCkBAIC0xODQ3LDggKzE4NTksOCBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBS
ZXN0b3JlRnJvbURpc2tOb25ECiAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBj
cmVhdGVEaXJlY3RvcnlBdFVSTDpzd0RCUGF0aCB3aXRoSW50ZXJtZWRpYXRlRGlyZWN0b3JpZXM6
WUVTIGF0dHJpYnV0ZXM6bmlsIGVycm9yOm5pbF07CiAgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVN
YW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnN3REJQYXRoLnBhdGhdKTsK
IAotICAgIC8vIFdlIHByb3RlY3QgdGhlIHByb2Nlc3MgcG9vbCBzbyB0aGF0IGl0IG91dGxpdmVz
IHRoZSBXZWJzaXRlRGF0YVN0b3JlLgogICAgIFJldGFpblB0cjxXS1Byb2Nlc3NQb29sPiBwcm90
ZWN0ZWRQcm9jZXNzUG9vbDsKKyAgICBSZXRhaW5QdHI8V0tXZWJzaXRlRGF0YVN0b3JlPiBwcm90
ZWN0ZWRXZWJzaXRlRGF0YVN0b3JlOwogCiAgICAgU2VydmljZVdvcmtlclRDUFNlcnZlciBzZXJ2
ZXIoewogICAgICAgICB7ICJ0ZXh0L2h0bWwiLCBtYWluUmVnaXN0ZXJpbmdXb3JrZXJCeXRlcyB9
LApAQCAtMTg3MSw2ICsxODgzLDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgUmVzdG9yZUZyb21E
aXNrTm9uRAogCiAgICAgICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlv
bjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgICAgIHByb3RlY3RlZFByb2Nlc3NQb29sID0g
d2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sOworICAgICAgICBwcm90ZWN0
ZWRXZWJzaXRlRGF0YVN0b3JlID0gd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVE
YXRhU3RvcmU7CiAKICAgICAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6c2VydmVyLnJlcXVlc3Qo
KV07CiAKQEAgLTE4ODAsMTMgKzE4OTMsMTUgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgUmVzdG9y
ZUZyb21EaXNrTm9uRAogICAgICAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nl
c3NQb29sIF90ZXJtaW5hdGVTZXJ2aWNlV29ya2Vyc107CiAgICAgfQogCisgICAgLy8gTWFrZSB1
cyBtb3JlIGxpa2VseSB0byBsb3NlIGFueSByYWNlcyB3aXRoIHNlcnZpY2Ugd29ya2VyIGluaXRp
YWxpemF0aW9uLgorICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEwKTsKKyAg
ICB1c2xlZXAoMTAwMDApOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEw
KTsKKwogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBhdXRvIGNvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogCi0gICAg
ICAgIGF1dG8gd2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbX1dLV2Vi
c2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKLSAgICAgICAgd2Vic2l0
ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCkuX3NlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnkgPSBzd0RCUGF0aDsKLSAgICAgICAgYXV0byBub25EZWZhdWx0RGF0YVN0b3JlID0g
YWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlv
bjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKV0pOwotICAgICAgICBjb25maWd1
cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgPSBub25EZWZhdWx0RGF0YVN0b3JlLmdldCgp
OworICAgICAgICBjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgPSBwcm90ZWN0
ZWRXZWJzaXRlRGF0YVN0b3JlLmdldCgpOwogCiAgICAgICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIg
PSBhZG9wdE5TKFtbU1dNZXNzYWdlSGFuZGxlckZvclJlc3RvcmVGcm9tRGlza1Rlc3QgYWxsb2Nd
IGluaXRXaXRoRXhwZWN0ZWRNZXNzYWdlOkAiUEFTUzogUmVnaXN0cmF0aW9uIGFscmVhZHkgaGFz
IGFuIGFjdGl2ZSB3b3JrZXIiXSk7CiAgICAgICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVu
dENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgp
IG5hbWU6QCJzdyJdOwpAQCAtMTk0NCwxMSArMTk1OSwxMSBAQCBURVNUKFNlcnZpY2VXb3JrZXJz
LCBTdXNwZW5kTmV0d29ya1Byb2NlCiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIg
ZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0aF0pOwogCi0gICAg
WyB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJv
Y2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW3dlYlZpZXcuZ2V0KCkuY29uZmlndXJh
dGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHldOwogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2Vy
XSBmaWxlRXhpc3RzQXRQYXRoOnN3REJQYXRoLnBhdGhdKTsKIAotICAgIFsgd2ViVmlldy5nZXQo
KS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVd
OworICAgIFt3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfc2Vu
ZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnNl
cnZlci5yZXF1ZXN0KCldOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Cklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0
b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvV0tIVFRQQ29va2llU3RvcmUubW0JKHJldmlzaW9uIDI2NzQ2NCkKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTQ3OSw4ICs0NzksNiBAQCAtICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdl
YlZpZXcgcnVuCiB9CiBAZW5kCiAKLS8vIEZJWE1FOiBvbiBpT1MsIFVJIHByb2Nlc3Mgc2hvdWxk
IGJlIHVzaW5nIHRoZSBzYW1lIGNvb2tpZSBmaWxlIGFzIHRoZSBuZXR3b3JrIHByb2Nlc3MgZm9y
IGRlZmF1bHQgc2Vzc2lvbi4KLSNpZiBQTEFURk9STShNQUMpCiBlbnVtIGNsYXNzIFNob3VsZEVu
YWJsZVByb2Nlc3NQcmV3YXJtaW5nIHsgTm8sIFllcyB9Owogdm9pZCBydW5XS0hUVFBDb29raWVT
dG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91
bGRFbmFibGVQcm9jZXNzUHJld2FybWluZykKIHsKQEAgLTU4OSwyMCArNTg3LDY2IEBAIFRFU1Qo
V0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG8KICAgICBydW5XS0hUVFBDb29raWVT
dG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZzo6WWVz
KTsKIH0KIAotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQogQGludGVyZmFjZSBDaGVja1Nlc3Np
b25Db29raWVVSURlbGVnYXRlIDogTlNPYmplY3QgPFdLVUlEZWxlZ2F0ZT4KKy0gKE5TU3RyaW5n
ICopYWxlcnRDb29raWVIVE1MOworLSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZTsKIEBlbmQK
IAotQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUKK0BpbXBsZW1l
bnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHsKKyAgICBSZXRhaW5QdHI8TlNT
dHJpbmc+IF9tZXNzYWdlOworfQorCiAtICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZp
ZXcgcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdl
IGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgRVhQRUNUX1NUUkVRKCJT
ZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIsIG1lc3NhZ2UuVVRGOFN0cmluZyk7CisgICAg
X21lc3NhZ2UgPSBtZXNzYWdlOwogICAgIGZpbmlzaGVkID0gdHJ1ZTsKICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOwogfQorCistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNzYWdlCit7CisgICAgd2hp
bGUgKCFfbWVzc2FnZSkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3Ao
KTsKKyAgICByZXR1cm4gX21lc3NhZ2UuYXV0b3JlbGVhc2UoKTsKK30KKworLSAoTlNTdHJpbmcg
KilhbGVydENvb2tpZUhUTUwKK3sKKyAgICByZXR1cm4gQCI8c2NyaXB0PnZhciBjb29raWVzID0g
ZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5s
ZW5ndGg7IGkgKyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMu
c29ydCgpOyBhbGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Cit9CisKIEBlbmQK
IAorVEVTVChXZWJLaXQsIFdLSFRUUENvb2tpZVN0b3JlTXVsdGlwbGVWaWV3cykKK3sKKyAgICBU
ZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MSA9IFtbVGVzdFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNl
XTsKKyAgICBbd2ViVmlldzEgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAic3RhcnQgbmV0
d29yayBwcm9jZXNzIl07CisKKyAgICBOU0hUVFBDb29raWUgKnNlc3Npb25Db29raWUgPSBbTlNI
VFRQQ29va2llIGNvb2tpZVdpdGhQcm9wZXJ0aWVzOkB7CisgICAgICAgIE5TSFRUUENvb2tpZVBh
dGg6IEAiLyIsCisgICAgICAgIE5TSFRUUENvb2tpZU5hbWU6IEAiU2Vzc2lvbkNvb2tpZU5hbWUi
LAorICAgICAgICBOU0hUVFBDb29raWVWYWx1ZTogQCJDb29raWVWYWx1ZSIsCisgICAgICAgIE5T
SFRUUENvb2tpZURvbWFpbjogQCIxMjcuMC4wLjEiLAorICAgIH1dOworCisgICAgX19ibG9jayBi
b29sIHNldENvb2tpZURvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldzEuY29uZmlndXJhdGlvbi53
ZWJzaXRlRGF0YVN0b3JlLmh0dHBDb29raWVTdG9yZSBzZXRDb29raWU6c2Vzc2lvbkNvb2tpZSBj
b21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBzZXRDb29raWVEb25lID0gdHJ1ZTsKKyAgICB9
XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnNldENvb2tpZURvbmUpOworCisgICAg
YXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgbmV3
XSk7CisgICAgW3dlYlZpZXcxIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAg
W3dlYlZpZXcxIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VV
Ukw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVD
VF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9
Q29va2llVmFsdWUiKTsKKworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcyID0gW1tUZXN0V0tX
ZWJWaWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MiBzZXRVSURlbGVnYXRlOmRl
bGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzIgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFs
ZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcu
MC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0s
ICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworfQorCiBURVNUKFdLSFRUUENvb2tp
ZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQogewogICAgIFJldGFp
blB0cjxXS1dlYnNpdGVEYXRhU3RvcmU+IGVwaGVtZXJhbFN0b3JlV2l0aENvb2tpZXMgPSBbV0tX
ZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdOwpAQCAtNjI3LDkgKzY3MSw4
IEBAIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG8KICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKICAgICBmaW5pc2hlZCA9IGZhbHNlOwogICAg
IAotICAgIE5TU3RyaW5nICphbGVydENvb2tpZUhUTUwgPSBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMg
PSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVz
Lmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2ll
cy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsKLSAgICBbd2Vi
VmlldyBsb2FkSFRNTFN0cmluZzphbGVydENvb2tpZUhUTUwgYmFzZVVSTDpbTlNVUkwgVVJMV2l0
aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZmaW5pc2hlZCk7CisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFs
ZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcu
MC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0s
ICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOwogfQogCiBzdGF0aWMgYm9vbCBhcmVD
b29raWVzRXF1YWwoTlNIVFRQQ29va2llICpmaXJzdCwgTlNIVFRQQ29va2llICpzZWNvbmQpCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFu
ZGxlci1sZWFrcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbQkocmV2aXNpb24gMjY3NDY0KQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRs
ZXItbGVha3MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgPFdl
YktpdC9XS1VSTFNjaGVtZVRhc2tQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3
Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRl
Lmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8
d3RmL1ZlY3Rvci5oPgpAQCAtMTUyLDcgKzE1Myw3IEBAIFRFU1QoVVJMU2NoZW1lSGFuZGxlciwg
TGVha3MzKQogCiAgICAgcnVuVW50aWxUYXNrc0luRmxpZ2h0KDIpOwogCi0gICAgW3dlYlZpZXcx
LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKKyAgICBbd2ViVmlldzEuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBydW5VbnRpbFRhc2tzSW5GbGlnaHQoMCk7
CiB9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVE
YXRhU3RvcmVDdXN0b21QYXRocy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQkocmV2aXNp
b24gMjY3NDY0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJz
aXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0NCw3ICsyNDQs
NyBAQCBzdGF0aWMgdm9pZCBydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0CiAgICAgLy8gTm93
LCB3aXRoIGJyYW5kIG5ldyBXS1dlYnNpdGVEYXRhU3RvcmVzIHBvaW50aW5nIGF0IHRoZSBzYW1l
IGN1c3RvbSBjb29raWUgc3RvcmFnZSBsb2NhdGlvbiwKICAgICAvLyBpbiBuZXdseSBmaXJlZCB1
cCBOZXR3b3JrUHJvY2Vzc2VzLCB2ZXJpZnkgdGhhdCB0aGUgZmV0Y2ggYW5kIGRlbGV0ZSBBUElz
IHdvcmsgYXMgZXhwZWN0ZWQuCiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAg
YXV0byBuZXdDdXN0b21EYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFs
bG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9u
LmdldCgpXSk7CiAKICAgICBbbmV3Q3VzdG9tRGF0YVN0b3JlIGZldGNoRGF0YVJlY29yZHNPZlR5
cGVzOltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dlYnNpdGVEYXRhVHlwZUNvb2tpZXMsIG5pbF0g
Y29tcGxldGlvbkhhbmRsZXI6XihOU0FycmF5PFdLV2Vic2l0ZURhdGFSZWNvcmQgKj4gKiByZWNv
cmRzKSB7CkBAIC0yNTUsNyArMjU1LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vic2l0ZURhdGFTdG9y
ZUN1c3RvbVBhdAogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwogICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKIAotICAgIFtwcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtkYXRhU3RvcmUgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBuZXdDdXN0b21EYXRhU3RvcmUgPSBhZG9wdE5TKFtb
V0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpXSk7CiAKICAgICBbbmV3Q3VzdG9tRGF0YVN0b3Jl
IHJlbW92ZURhdGFPZlR5cGVzOltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dlYnNpdGVEYXRhVHlw
ZUNvb2tpZXMsIG5pbF0gbW9kaWZpZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQYXN0XSBjb21wbGV0
aW9uSGFuZGxlcjpeIHsKQEAgLTM4NSwxMSArMzg1LDEwIEBAIFRFU1QoV2ViS2l0LCBDdXN0b21E
YXRhU3RvcmVEZXN0cm95V2hpbGUKIAogICAgICAgICAvLyBUZXJtaW5hdGUgdGhlIG5ldHdvcmsg
cHJvY2VzcyB3aGlsZSBhIHF1ZXJ5IGlzIHBlbmRpbmcuCiAgICAgICAgIGF1dG8qIGFsbFByb2Nl
c3NQb29scyA9IFtXS1Byb2Nlc3NQb29sIF9hbGxQcm9jZXNzUG9vbHNGb3JUZXN0aW5nXTsKLSAg
ICAgICAgQVNTRVJUX0VRKDFVLCBbYWxsUHJvY2Vzc1Bvb2xzIGNvdW50XSk7Ci0gICAgICAgIGF1
dG8qIHByb2Nlc3NQb29sID0gYWxsUHJvY2Vzc1Bvb2xzWzBdOwotICAgICAgICB3aGlsZSAoIVtw
cm9jZXNzUG9vbCBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXSkKKyAgICAgICAgQVNTRVJUX0VR
KDBVLCBbYWxsUHJvY2Vzc1Bvb2xzIGNvdW50XSk7CisgICAgICAgIHdoaWxlICghW2RhdGFTdG9y
ZSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXSkKICAgICAgICAgICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnNsZWVwKDAuMDEpOwotICAgICAgICBraWxsKFtwcm9jZXNzUG9vbCBfbmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyXSwgU0lHS0lMTCk7CisgICAgICAgIGtpbGwoW2RhdGFTdG9yZSBfbmV0
d29ya1Byb2Nlc3NJZGVudGlmaWVyXSwgU0lHS0lMTCk7CiAgICAgICAgIGFsbFByb2Nlc3NQb29s
cyA9IG5pbDsKICAgICAgICAgZGF0YVN0b3JlID0gbmlsOwogICAgIH0KQEAgLTQ2NSw3ICs0NjQs
OSBAQCBURVNUKFdlYktpdCwgQWx0ZXJuYXRpdmVTZXJ2aWNlc0RlZmF1bHRECiAgICAgCiAgICAg
W1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc2V0T2JqZWN0OltOU051bWJl
ciBudW1iZXJXaXRoQm9vbDpZRVNdIGZvcktleTprZXldOwogCi0gICAgVGVzdFdLV2ViVmlldyAq
d2ViVmlldzIgPSBbW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Cisg
ICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtbV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBjb25maWd1cmF0aW9uLndlYnNpdGVE
YXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3Vy
YXRpb246W1tbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1
dG9yZWxlYXNlXV0gYXV0b3JlbGVhc2VdOworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcyID0g
W1tbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgw
MCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKICAgICBb
d2ViVmlldzIgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAic3RhcnQgYXV4aWxpYXJ5IHBy
b2Nlc3NlcyIgYmFzZVVSTDpuaWxdOwogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2Vy
IGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOmRlZmF1bHREaXJlY3RvcnkucGF0aF0p
OwpAQCAtNTM5LDcgKzU0MCw3IEBAIFRFU1QoV2ViS2l0LCBEb0xvYWRXaXRoTm9uRGVmYXVsdERh
dGFTdG8KIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAg
W3dlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CisgICAgW3dlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3Rv
cmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJlcXVlc3QgPSBbTlNVUkxSZXF1
ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6
QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktp
dEFQSS5yZXNvdXJjZXMiXV07CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07CkBA
IC04NTcsNyArODU4LDcgQEAgVEVTVChXZWJLaXQsIE1lZGlhQ2FjaGUpCiAgICAgRVhQRUNUX0ZB
TFNFKGVycm9yKTsKIAogICAgIGRvbmUgPSB0cnVlOwotICAgIFtbd2ViVmlldyBjb25maWd1cmF0
aW9uXS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtbd2ViVmll
dyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CiAKICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0UGF0aDpwYXRoIGVycm9yOiZlcnJv
cl07CiAgICAgRVhQRUNUX0ZBTFNFKGVycm9yKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0T2JqQy9DdXN0b21Qcm90b2NvbHNUZXN0Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2JqQy9DdXN0b21Qcm90b2NvbHNUZXN0Lm1t
CShyZXZpc2lvbiAyNjc0NjQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdE9i
akMvQ3VzdG9tUHJvdG9jb2xzVGVzdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBA
QAogI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tDb250ZXh0UHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc0dyb3VwUHJpdmF0ZS5oPgorI2ltcG9y
dCA8V2ViS2l0L1dLVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRh
U3RvcmVSZWYuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogc3RhdGljIGJvb2wgdGVz
dEZpbmlzaGVkOwpAQCAtNzIsNiArNzQsOCBAQCBzdGF0aWMgV0tQcm9jZXNzR3JvdXAgKnByb2Nl
c3NHcm91cCgpCiAgICAgcmV0dXJuIHByb2Nlc3NHcm91cDsKIH0KIAorc3RhdGljIFJldGFpblB0
cjxXS1ZpZXc+IHdrVmlldzsKKwogQGludGVyZmFjZSBDbG9zZVdoaWxlU3RhcnRpbmdQcm90b2Nv
bCA6IFRlc3RQcm90b2NvbAogQGVuZAogCkBAIC04OSw3ICs5Myw3IEBAIC0gKHZvaWQpc3RhcnRM
b2FkaW5nCiAgICAgICAgIH07CiAgICAgICAgIFdLQ29udGV4dFNldENsaWVudChbcHJvY2Vzc0dy
b3VwKCkgX2NvbnRleHRSZWZdLCAmY2xpZW50LmJhc2UpOwogCi0gICAgICAgIGtpbGwoV0tDb250
ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFtwcm9jZXNzR3JvdXAoKSBfY29udGV4dFJl
Zl0pLCBTSUdLSUxMKTsKKyAgICAgICAga2lsbChXS1dlYnNpdGVEYXRhU3RvcmVHZXROZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIoV0tQYWdlR2V0V2Vic2l0ZURhdGFTdG9yZShbd2tWaWV3IHBhZ2VS
ZWZdKSksIFNJR0tJTEwpOwogICAgICAgICBbc2VsZi5jbGllbnQgVVJMUHJvdG9jb2w6c2VsZiBk
aWRGYWlsV2l0aEVycm9yOltOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpOU0NvY29hRXJyb3JEb21h
aW4gY29kZTowIHVzZXJJbmZvOm5pbF1dOwogICAgIH0pOwogfQpAQCAtMTQyLDcgKzE0Niw3IEBA
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIHN0YXRpYyB2b2lkIHJ1blRlc3QoKQogewogICAg
IFJldGFpblB0cjxXS0Jyb3dzaW5nQ29udGV4dEdyb3VwPiBicm93c2luZ0NvbnRleHRHcm91cCA9
IGFkb3B0TlMoW1tXS0Jyb3dzaW5nQ29udGV4dEdyb3VwIGFsbG9jXSBpbml0V2l0aElkZW50aWZp
ZXI6QCJUZXN0SWRlbnRpZmllciJdKTsKLSAgICBSZXRhaW5QdHI8V0tWaWV3PiB3a1ZpZXcgPSBh
ZG9wdE5TKFtbV0tWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAw
LCA2MDApIHByb2Nlc3NHcm91cDpwcm9jZXNzR3JvdXAoKSBicm93c2luZ0NvbnRleHRHcm91cDpi
cm93c2luZ0NvbnRleHRHcm91cC5nZXQoKV0pOworICAgIHdrVmlldyA9IGFkb3B0TlMoW1tXS1Zp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgcHJvY2Vz
c0dyb3VwOnByb2Nlc3NHcm91cCgpIGJyb3dzaW5nQ29udGV4dEdyb3VwOmJyb3dzaW5nQ29udGV4
dEdyb3VwLmdldCgpXSk7CiAgICAgUmV0YWluUHRyPEN1c3RvbVByb3RvY29sc0xvYWREZWxlZ2F0
ZT4gbG9hZERlbGVnYXRlID0gYWRvcHROUyhbW0N1c3RvbVByb3RvY29sc0xvYWREZWxlZ2F0ZSBh
bGxvY10gaW5pdF0pOwogICAgIFt3a1ZpZXcgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcl0ubG9h
ZERlbGVnYXRlID0gbG9hZERlbGVnYXRlLmdldCgpOwogICAgIFtbd2tWaWV3IGJyb3dzaW5nQ29u
dGV4dENvbnRyb2xsZXJdIGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6
W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDovL3Jl
ZGlyZWN0P3Rlc3QiLCBbVGVzdFByb3RvY29sIHNjaGVtZV1dXV1dOwpJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI2NzQ2NCkKKysrIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDY2LDggKzEwNjYsNiBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25z
aXN0CiAKICAgICByZXNldFF1b3RhKCk7CiAKLSAgICBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xD
ZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKHBsYXRmb3JtQ29udGV4dCgpLCB0cnVl
KTsKLQogICAgIFdLQ29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCkpOwogCiAgICAgV0tDb250ZXh0U2V0
VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuY29udGV4dCgpLCBmYWxzZSk7CkBAIC0xMjQyLDcgKzEyNDAsNyBAQCB2b2lkIFRlc3RDb250
cm9sbGVyOjpmaW5kQW5kRHVtcFdlYktpdFByCiAgICAgZHVtcFJlc3BvbnNlKG1ha2VTdHJpbmco
VGVzdENvbnRyb2xsZXI6OndlYlByb2Nlc3NOYW1lKCksICI6ICIsCiAgICAgICAgIFdLUGFnZUdl
dFByb2Nlc3NJZGVudGlmaWVyKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmll
dygpLT5wYWdlKCkpLCAnXG4nLAogICAgICAgICBUZXN0Q29udHJvbGxlcjo6bmV0d29ya1Byb2Nl
c3NOYW1lKCksICI6ICIsCi0gICAgICAgIFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRp
ZmllcihtX2NvbnRleHQuZ2V0KCkpLCAnXG4nKSk7CisgICAgICAgIFdLV2Vic2l0ZURhdGFTdG9y
ZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcih3ZWJzaXRlRGF0YVN0b3JlKCkpLCAnXG4nKSk7
CiAjZWxzZQogICAgIGR1bXBSZXNwb25zZSgiXG4iX3MpOwogI2VuZGlmCkBAIC0yMzAyLDcgKzIz
MDAsNyBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RDb250cm9sbGVyOjpnCiAKIHZvaWQg
VGVzdENvbnRyb2xsZXI6Om5ldHdvcmtQcm9jZXNzRGlkQ3Jhc2goKQogewotICAgIHBpZF90IHBp
ZCA9IFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihtX2NvbnRleHQuZ2V0KCkp
OworICAgIHBpZF90IHBpZCA9IFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRl
bnRpZmllcih3ZWJzaXRlRGF0YVN0b3JlKCkpOwogICAgIGZwcmludGYoc3RkZXJyLCAiI0NSQVNI
RUQgLSAlcyAocGlkICVsZClcbiIsIG5ldHdvcmtQcm9jZXNzTmFtZSgpLCBzdGF0aWNfY2FzdDxs
b25nPihwaWQpKTsKICAgICBleGl0KDEpOwogfQpAQCAtMzE0MSw3ICszMTM5LDcgQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6c2V0SWdub3Jlc1ZpZXdwb3J0UwogCiB2b2lkIFRlc3RDb250cm9sbGVy
Ojp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCiB7Ci0gICAgV0tDb250ZXh0VGVybWluYXRlTmV0
d29ya1Byb2Nlc3MocGxhdGZvcm1Db250ZXh0KCkpOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZVRl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzKHdlYnNpdGVEYXRhU3RvcmUoKSk7CiB9CiAKIHZvaWQgVGVz
dENvbnRyb2xsZXI6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCkKQEAgLTMxNzIsOSArMzE3MCw4
IEBAIFBsYXRmb3JtV2ViVmlldyogVGVzdENvbnRyb2xsZXI6OnBsYXRmb3IKICAgICByZXR1cm4g
bmV3IFBsYXRmb3JtV2ViVmlldyhjb25maWd1cmF0aW9uLCBvcHRpb25zKTsKIH0KIAotV0tDb250
ZXh0UmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVm
IGNvbnRleHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29udGV4dENvbmZpZ3VyYXRpb24p
CitXS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0Nv
bnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZikKIHsKLSAgICBXS0Nv
bnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShjb250ZXh0LCBkZWZhdWx0V2Vic2l0ZURh
dGFTdG9yZSgpKTsKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409484</attachid>
            <date>2020-09-23 10:58:38 -0700</date>
            <delta_ts>2020-09-24 06:51:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200923105837.patch</filename>
            <type>text/plain</type>
            <size>357926</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGFiZDBjZWFhOTQ5MzhlOWZh
MWMyNGM5MDIyN2JkNzJjMTYzMTVlZTguLjkyZGYxMTEyZWY2Y2VhMDNkNTlkMmU1ZGFjZGIyNjgz
YWI3ODlhYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDE4IEBACisyMDIwLTA5LTIzICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggbW92ZXMgdGhlIHRoaW5ncyBvbiBXZWJQcm9jZXNzUG9vbCBhc3NvY2lhdGVk
IHdpdGggTmV0d29ya1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgYW5kIG1vdmVzIHRoZW0KKyAgICAg
ICAgdG8gV2Vic2l0ZURhdGFTdG9yZS4gIEl0J3MgcHJldHR5IG1lY2hhbmljYWwsIGJ1dCBpdCBy
ZWFjaGVzIGl0cyBmaW5nZXJzIGludG8gYSBsb3Qgb2YgdGhpbmdzLiAgU29tZSBjb21tZW50cwor
ICAgICAgICBvbiBpbnRlcmVzdGluZyBwYXJ0cyBhcmUgYmVsb3cuCisKKyAgICAgICAgV2h5IGFt
IEkgZG9pbmcgdGhpcz8gIEknbSBnbGFkIHlvdSBhc2tlZC4KKworICAgICAgICBXS1dlYlZpZXcg
aGFkIGEgZnVuZGFtZW50YWwgY29va2llIHByb2JsZW0gYmVmb3JlIHRoaXMgY2hhbmdlLiAgSXQg
aGFkIGEgV0tXZWJzaXRlRGF0YVN0b3JlIHRoYXQgY291bGQgcG9pbnQgdG8gYSBjb29raWUgc3Rv
cmUgb24gZGlzaworICAgICAgICB0aGF0IGNvdWxkIGJlIHVzZWQgaW4gbXVsdGlwbGUgbmV0d29y
ayBwcm9jZXNzZXMgYXQgdGhlIHNhbWUgdGltZS4gIFRoaXMgbGVkIHRvIHByb2JsZW1zIHdpdGgg
Y29va2llcyBiZWluZyByZWNlaXZlZCBvdmVyIHRoZSBuZXR3b3JrCisgICAgICAgIGluIHRob3Nl
IGRpZmZlcmVudCBwcm9jZXNzZXMgYmVpbmcgdW5hYmxlIHRvIGJlIHNoYXJlZCB1bnRpbCB0aGV5
IHdlcmUgd3JpdHRlbiB0byBkaXNrLCBzb21ldGhpbmcgdGhhdCBkb2VzIG5vdCBoYXBwZW4gaW1t
ZWRpYXRlbHksIGVzcGVjaWFsbHkKKyAgICAgICAgb24gaU9TLiAgVGhpcyBwcm9ibGVtIGlzIGV2
ZW4gd29yc2Ugd2l0aCBzZXNzaW9uIGNvb2tpZXMsIHdoaWNoIHNob3VsZCBiZSBrZXB0IGluIG1l
bW9yeSBhbmQgbmV2ZXIgYmUgd3JpdHRlbiB0byBkaXNrLiAgVGhvc2UgcHJvY2Vzc2VzCisgICAg
ICAgIGRpZCBub3QgdXNlIHNoYXJlZCBtZW1vcnkgdG8gc2hhcmUgdGhlIGNvb2tpZXMuICBUaGV5
IGp1c3QgZGlkbid0IHNoYXJlIHRoZW0sIHdoaWNoIGxlZCB0byBjb29raWUgaW5jb3JyZWN0bmVz
cy4gIFRoaXMgd2FzIHVuZm9ydHVuYXRlbHkKKyAgICAgICAgdGhlIGRlZmF1bHQgY29uZmlndXJh
dGlvbiBpZiB5b3UgY2FsbCBbW1dLV2ViVmlldyBhbGxvY10gaW5pdF0gbW9yZSB0aGFuIG9uY2Us
IHdoaWNoIG1hbnkgZGV2ZWxvcGVycyBkby4gIFRoZXJlIHdhcyBhbHNvIG9jY2FzaW9uYWwgY29v
a2llCisgICAgICAgIGNvcnJ1cHRpb24gYW5kIGxvc3MgZnJvbSBtdWx0aXBsZSBwcm9jZXNzZXMg
d3JpdGluZyBjb29raWVzIHRvIHRoZSBzYW1lIGZpbGUuICBBbGwgdGhlc2UgcHJvYmxlbXMgY2Fu
IGJlIHdvcmtlZCBhcm91bmQgYnkgZG9pbmcgd2hhdCBTYWZhcmkgZG9lczoKKyAgICAgICAgbWFu
dWFsbHkgc2V0dGluZyB0aGUgV0tQcm9jZXNzUG9vbCBvZiBhbGwgV0tXZWJWaWV3Q29uZmlndXJh
dGlvbnMgdG8gdGhlIHNhbWUgcHJvY2VzcyBwb29sIHRvIG9ubHkgdXNlIG9uZSBuZXR3b3JrIHBy
b2Nlc3MuICBUaGlzIGlzIG5vdCBpbnR1aXRpdmUKKyAgICAgICAgb3Igd2VsbCBkb2N1bWVudGVk
LCBhbmQgZXZlbiB0aG91Z2ggSSBoYXZlIHNwZW50IHRoZSBtYWpvcml0eSBvZiBXV0RDIGxhYnMg
Zm9yIHRoZSBsYXN0IDMgeWVhcnMgdGVsbGluZyBkZXZlbG9wZXJzIHRvIGRvIGl0LCBtb3N0IGRl
dmVsb3BlcnMgZG8gbm90LgorICAgICAgICBUaGUgZGVmYXVsdCBiZWhhdmlvciBzaG91bGQgbm90
IGxlYWQgdG8gY29va2llIGluY29ycmVjdG5lc3MsIGNvcnJ1cHRpb24sIG9yIGxvc3MuICBUaGlz
IGFjY29tcGxpc2hlcyB0aGF0LgorCisgICAgICAgIEEgYmlnZ2VyIHByb2JsZW0gdGhhdCBjYW4n
dCByZWFsbHkgYmUgd29ya2VkIGFyb3VuZCB3ZWxsIGlzIHdoYXQgd2Ugd2VyZSBkb2luZyBpbiBv
dXIgV0tIVFRQQ29va2llU3RvcmUgQVBJLiAgTWFueSBkZXZlbG9wZXJzIGNhbGwgc2V0Q29va2ll
OmNvbXBsZXRpb25IYW5kbGVyOgorICAgICAgICB0byAibG9nIGluIiB0aGUgdXNlciBieSBzZXR0
aW5nIGEgY29va2llLCB0aGVuIGluIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIsIHRoZXkgb3BlbiBh
IFdLV2ViVmlldyB0byB0aGVpciBwYWdlIGFuZCBleHBlY3QgdGhlIGNvb2tpZSB0byBiZSBzZW50
LiAgQmVmb3JlIHRoaXMKKyAgICAgICAgY2hhbmdlLCB3ZSB3b3VsZCBub3Qga25vdyB3aGljaCBw
cm9jZXNzIHBvb2wgdG8gc2V0IHRoZSBjb29raWUgaW4gc28gd2Ugd291bGQgZ3Vlc3MuICBJZiB0
aGVyZSB3ZXJlIG5vIHByb2Nlc3MgcG9vbHMsIHdlIHdvdWxkIHN0YXJ0IHdyaXRpbmcgdG8gZGlz
ayBhbmQgaG9wZQorICAgICAgICBpdCB3cml0ZXMgZmFzdCBlbm91Z2guICBXZSBjYW4ndCB3YWl0
IGZvciBpdCB0byBjb21wbGV0ZSBiZWNhdXNlIGl0IGNhdXNlcyBoYW5ncyBsaWtlIHJkYXI6Ly9w
cm9ibGVtLzY2OTYxMDY2LiAgVGhpcyBzb2x1dGlvbiBhbGxvd3MgdG8gc3RhcnQgdGhlIG5ldHdv
cmsKKyAgICAgICAgcHJvY2VzcyBvZiB0aGF0IFdlYnNpdGVEYXRhU3RvcmUgYW5kIHNldCB0aGUg
Y29va2llIGluIHRoYXQgcHJvY2Vzcy4gIFdlIG5vdyBrbm93IHRoYXQgaXMgdGhlIG9ubHkgcHJv
Y2VzcyB0aGlzIFdlYnNpdGVEYXRhU3RvcmUgd2lsbCBldmVyIHVzZS4gIE5vdywgdXNlcnMKKyAg
ICAgICAgd2lsbCBiZSBhYmxlIHRvIGFjdHVhbGx5IGJlIGxvZ2dlZCBpbiBhbGwgdGhlIHRpbWUg
aW4gc3VjaCBhcHBzLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29r
aWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6c2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6
OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nv
b2tpZXMvV2ViQ29va2llTWFuYWdlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tp
ZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFuYWdlckN1cmwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJNYWMu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9zb3Vw
L1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFu
YWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2Rl
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdl
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y2xv
c2UpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2Eu
bW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVO
ZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6c2F2ZUNvb2tpZXMpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFn
ZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwv
TmV0d29ya1Byb2Nlc3NDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW06Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0
YVN0b3JlU2Vzc2lvbik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJv
Y2Vzc1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1D
cmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFBs
YXRmb3JtL0lQQy9BdHRhY2htZW50Lmg6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cDoKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZXNGb3JVUkwpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNl
dENvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNlcnZlcik6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCk6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0
YVN0b3JlKToKKyAgICAgICAgKFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyVGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAgICAgICAoV0tQYWdlR2V0V2Vic2l0
ZURhdGFTdG9yZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwOgorICAgICAgICAo
V0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV0tX
ZWJzaXRlRGF0YVN0b3JlR2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29s
IF9zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOl0pOgorICAgICAgICAoLVtXS1By
b2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1Byb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHld
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNz
UHJlcGFyZVRvU3VzcGVuZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJv
Y2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1Byb2Nlc3NQb29sIF9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElz
QmFja2dyb3VuZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOl0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1Byb2Nlc3NQb29sIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGlu
ZzpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bv
b2xQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRh
U3RvcmUubW06CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfbmV0d29ya1Byb2Nlc3NI
YXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9y
ZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0
b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOl0pOgorICAgICAgICAoLVtX
S1dlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRs
eV0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0Rp
ZFJlc3VtZV0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNpemVBcHBJ
c0JhY2tncm91bmQ6XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfbmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyXSk6CisgICAgICAgICgrW1dLV2Vic2l0ZURhdGFTdG9yZSBfbWFrZU5l
eHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nXSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwOgorICAgICAgICAoX1dlYktp
dENvb2tpZU1hbmFnZXJQcml2YXRlOjpjb29raWVNYW5hZ2VyIGNvbnN0KToKKyAgICAgICAgKF9X
ZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZTo6fl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSk6
CisgICAgICAgICh3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKToKKyAgICAgICAgKHdlYmtpdF9j
b29raWVfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKToKKyAgICAgICAgKHdlYmtpdF9j
b29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeSk6CisgICAgICAgICh3ZWJraXRfY29va2ll
X21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX2FkZF9jb29raWUpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29r
aWVzKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHA6CisgICAgICAg
ICh3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQpOgorICAgICAgICAod2Via2l0X3dlYl9jb250
ZXh0X3ByZWZldGNoX2Rucyk6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0
b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6YWRkU2luZ2xlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Np
b246OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXhpbGlhcnlQcm9j
ZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQ
b29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9j
ZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6eHBjRW5kcG9pbnRNZXNzYWdlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3
b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZFByb3h5OjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5Ojpw
dWJsaXNoUHJvZ3Jlc3MpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5OjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFBy
b3h5Ojp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5Ojpk
ZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZUFzeW5jKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwOgorICAgICAgICAoV2ViS2l0
OjpEb3dubG9hZFByb3h5TWFwOjpEb3dubG9hZFByb3h5TWFwKToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQpOgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91
bmQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFBy
b3h5KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5pc2hl
ZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmludmFsaWRhdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5OjpzdGFydExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJQcm94eTo6c3RvcExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMpOgorICAgICAgICAoV2Vi
S2l0OjpkZWZhdWx0UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OmRlZmF1bHROZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OnRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OmRpZFRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6
OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0Ojph
bnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSk6CisgICAgICAgIChX
ZWJLaXQ6OmFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQ
cm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9w
dGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3du
bG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29y
a1Byb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRl
eHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nl
c3NQb29sSGFzRm9yZWdyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVBy
b2Nlc3NQb29sSGFzQmFja2dyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAg
ICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRsZXI6OmhhbmRsZVhQ
Q0V2ZW50IGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVN
YW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6On5X
ZWJDb29raWVNYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNp
bmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nv
b2tpZUNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0
b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9v
bERlc3Ryb3llZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6cHJvY2Vzc0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxl
bWVudCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94
eS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6ZGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtl
ckVudGl0bGVtZW50T3ZlcnJpZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBy
ZWNvbm5lY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9h
ZEZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmln
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmli
dXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJp
YnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmli
dXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBp
cmVkRm9yVGVzdGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJv
dG9jb2xIYW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9j
ZXNzUG9vbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bv
b2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hl
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250
ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6cmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0
YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2lu
Z0NvbnRlbnRTZWN1cml0eVBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2Nv
bEhhbmRsZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJH
bG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NBc3NlcnRp
b25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmlzU2VydmljZVdvcmtlclBh
Z2VJRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6Omhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJCYWNrZ3Jv
dW5kQWN0aXZpdHlGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0
d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICBUaGVyZSBzZWVtcyB0byBiZSBhIGxvdCBv
ZiBjb2RlIHJlbW92YWwgaGVyZSwgYnV0IG1vc3Qgb2YgaXQgd2FzIGR1cGxpY2F0ZSBjb2RlIHdp
dGgKKyAgICAgICAgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyB3aGljaCBpcyB1c2VkIGlu
c3RlYWQuICBUaGF0IHdoaWNoIHdhcyBub3QgZHVwbGljYXRlIHdhcworICAgICAgICBtb3ZlZCB0
byBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNz
LiAgVGhpcyB3YXMgdGhlIGhhcmRlc3QgcGFydCBvZiB0aGlzIHBhdGNoLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRp
Zmllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzeW50aGVz
aXplQXBwSXNCYWNrZ3JvdW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3Jr
UHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseUZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmZsdXNoQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zl
cik6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5n
UHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJv
eHk6OnNldFdlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJv
eHk6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vz
c1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb0FsbFdlYlByb2Nlc3Nlcyk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OldlYnNpdGVEYXRhU3RvcmUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjp+V2Vic2l0ZURhdGFTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyV2l0aFNlc3Npb25JRE1h
cCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3Jl
Rm9yU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29y
a1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJv
Y2VzcyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0
YUFuZEFwcGx5KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0
YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFNlcnZpY2VXb3JrZXJU
aW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jk
c1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkdW1wUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omlz
UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpp
c0dyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQ
cmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcik6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3Vy
Y2VVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0
aW5nVG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVu
dFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRQYXJh
bWV0ZXJzVG9EZWZhdWx0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c3VibWl0VGVsZW1ldHJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdV
cGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZVN0YXRp
c3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlcklu
dGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlv
bnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRVc2VJVFBEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5r
RGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpkZWxldGVDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0
cmljdENvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JU
ZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNv
dXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENhY2hlTWF4
QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6cHJvY2Vzc1Bvb2xzIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVk
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dGVybWluYXRlTmV0d29ya1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1By
b2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRl
c3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1By
b2Nlc3NEaWRSZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6Zmx1c2hDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW5hbWVPcmlnaW5JbldlYnNp
dGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFzQXBwQm91bmRT
ZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJB
cHBCb3VuZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmb3J3
YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1bmRsZUlk
ZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6bWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vz
c0xhdW5jaEZhaWxGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNz
aW9uSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwZW5kaW5nQ29va2ll
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmFk
ZFBlbmRpbmdDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TmV0d29ya1Byb3h5
U2V0dGluZ3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVE
YXRhU3RvcmVTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGxh
dGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoT3B0aW9ucyk6CisgICAgICAgICog
VUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Up
OgorICAgICAgICAqIFVJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJv
Y2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRJZ25vcmVUTFNFcnJv
cnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0TmV0d29ya1Byb3h5U2V0
dGluZ3MpOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb25JbmZvLmg6CisKIDIwMjAtMDktMjMgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUu
Y29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBIVE1MTWVkaWFFbGVtZW50LnNldFNpbmtJ
ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNv
b2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dl
YkNvb2tpZU1hbmFnZXIuY3BwCmluZGV4IGZjZTIzODk4N2E3ODUwZjE4YzlmMzA2YzUwZTk4Y2U5
ODhkMTI1ZmQuLjVjOWI3NzE4NmZiMTgxMGNiMjg1NzE0YmM1Mzc1MDkxYTQ4NTdlMjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5h
Z2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29v
a2llTWFuYWdlci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJDb3JlQXJndW1l
bnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvQ29va2llU3RvcmFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRUUENvb2tpZUFjY2VwdFBv
bGljeS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CkBAIC0xNDMsMTUg
KzE0NCwxOCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFu
Z2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpz
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgcGxh
dGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0gICAgbV9wcm9jZXNzLmNv
b2tpZUFjY2VwdFBvbGljeUNoYW5nZWQocG9saWN5KTsKLQotICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CisgICAgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSwgW3BvbGlj
eSwgcHJvY2VzcyA9IG1ha2VSZWYobV9wcm9jZXNzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIHByb2Nlc3MtPmNv
b2tpZUFjY2VwdFBvbGljeUNoYW5nZWQocG9saWN5KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKKyAgICB9KTsKIH0KIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBD
b29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24o
KS5jb29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0g
bV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5jb29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgZWxzZQor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihIVFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmgKaW5kZXggY2E3ZjU1ZTg2
NmJkYWQ0YjFlMzUyZThmNjQwNTdiYWJjNDYyODMyZC4uMzVjZThhOWVjZmMyOTRjZDZkZTFlN2Zm
OTMxMGUwYTU3ZWE0OWQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCkBAIC0zNyw2ICszNyw4IEBACiAjaW5j
bHVkZSAiU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZS5oIgogI2VuZGlmCiAKK09CSkNf
Q0xBU1MgTlNIVFRQQ29va2llU3RvcmFnZTsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0
IENvb2tpZTsKIGVudW0gY2xhc3MgSFRUUENvb2tpZUFjY2VwdFBvbGljeSA6IHVpbnQ4X3Q7CkBA
IC03OSw4ICs4MSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRBbGxDb29raWVzKFBBTDo6U2Vz
c2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYp
PiYmKTsKICAgICB2b2lkIGdldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFVSTCYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYpOwogCi0g
ICAgdm9pZCBwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29yZTo6SFRUUENv
b2tpZUFjY2VwdFBvbGljeSk7Ci0gICAgdm9pZCBnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYp
OworICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhU
VFBDb29raWVBY2NlcHRQb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAg
dm9pZCBnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmKTsKIAogICAg
IHZvaWQgc3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEKTsKICAgICB2
b2lkIHN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEKTsKQEAgLTg4LDQg
KzkwLDggQEAgcHJpdmF0ZToKICAgICBOZXR3b3JrUHJvY2VzcyYgbV9wcm9jZXNzOwogfTsKIAor
I2lmIFBMQVRGT1JNKENPQ09BKQordm9pZCBzYXZlQ29va2llcyhOU0hUVFBDb29raWVTdG9yYWdl
ICosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisjZW5kaWYKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tp
ZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmluCmluZGV4IGFjZDc1NDQw
ZDgzZjM0NjY1MGM5ZjMzYjc1YjVkNWQwOTM1MjEzYmEuLjZmZGY1NzcyYWE2YWFlMzk0MDJhOWE4
OWY1NmM4NGY3YmQ0MzU4NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmluCkBA
IC0zNiw3ICszNiw3IEBAIG1lc3NhZ2VzIC0+IFdlYkNvb2tpZU1hbmFnZXIgTm90UmVmQ291bnRl
ZCB7CiAgICAgdm9pZCBEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIFdhbGxUaW1lIHRpbWUpIC0+ICgpIEFzeW5jCiAKICAgICB2b2lkIFNldEhU
VFBDb29raWVBY2NlcHRQb2xpY3koZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBDb29raWVBY2Nl
cHRQb2xpY3kgcG9saWN5KSAtPiAoKSBBc3luYwotICAgIHZvaWQgR2V0SFRUUENvb2tpZUFjY2Vw
dFBvbGljeSgpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3kpIEFzeW5jCisgICAgdm9pZCBHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCkgLT4gKGVudW06dWludDhfdCBXZWJDb3JlOjpIVFRQQ29va2ll
QWNjZXB0UG9saWN5IHBvbGljeSkgQXN5bmMKICAgICAKICAgICB2b2lkIFN0YXJ0T2JzZXJ2aW5n
Q29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgdm9pZCBTdG9wT2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvY3VybC9XZWJDb29raWVNYW5h
Z2VyQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvY3VybC9X
ZWJDb29raWVNYW5hZ2VyQ3VybC5jcHAKaW5kZXggYzJlZjE1Njg0NTA0MjAwZjk4ZWU0ZmU2MGUz
NWFkZGEyNWMxOWQ2ZC4uZmFhZGE1MGY5YzQzZDQ0M2Q0OTM4ODhjOWJkNjZjNGY3MDkyMDNkOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL2N1cmwvV2Vi
Q29va2llTWFuYWdlckN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcApAQCAtMzQsNyArMzQsNyBAQCBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLXZvaWQgV2Vi
Q29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kgcG9saWN5KQordm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBDb29r
aWVBY2NlcHRQb2xpY3kgY3VybFBvbGljeSA9IENvb2tpZUFjY2VwdFBvbGljeTo6T25seUZyb21N
YWluRG9jdW1lbnREb21haW47CiAgICAgc3dpdGNoIChwb2xpY3kpIHsKQEAgLTU1LDYgKzU1LDcg
QEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koSFRUUENvb2tpZUFjY2VwdFBvbGljeQogICAgIG1fcHJvY2Vzcy5mb3JFYWNoTmV0d29ya1N0
b3JhZ2VTZXNzaW9uKFtjdXJsUG9saWN5XSAoY29uc3QgYXV0byYgbmV0d29ya1N0b3JhZ2VTZXNz
aW9uKSB7CiAgICAgICAgIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5zZXRDb29raWVBY2NlcHRQb2xp
Y3koY3VybFBvbGljeSk7CiAgICAgfSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJNYWMubW0gYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJNYWMubW0KaW5kZXgg
MTlmNTg3OGQ2NjJjMzZiYmQ3ZmM2Mzg0N2JjZDc4YWM5YmJjMmI5Ni4uN2Y5MTIwY2EyZTFmYzA4
YjI1ZDU4ZjBlYTVjMDgzZDI2NGYwZWI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9tYWMvV2ViQ29va2llTWFuYWdlck1hYy5t
bQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9IVFRQQ29va2llQWNjZXB0UG9s
aWN5Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9y
dCA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KKyNpbXBvcnQgPHd0Zi9DYWxsYmFja0FnZ3Jl
Z2F0b3IuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewpAQCAtNTMsMTUgKzU0LDE5IEBAIHN0YXRpYyBDRkhUVFBDb29raWVTdG9yYWdlQWNj
ZXB0UG9saWN5IHRvQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeShIVFRQQ29vCiAgICAg
cmV0dXJuIENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lBbHdheXM7CiB9CiAKLXZvaWQg
V2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBD
b29raWVBY2NlcHRQb2xpY3kgcG9saWN5KQordm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9y
bVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ks
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBB
U1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdD
b29raWVzKSk7CiAKKyAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBbW05TSFRUUENv
b2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZUFjY2VwdFBvbGlj
eTpzdGF0aWNfY2FzdDxOU0hUVFBDb29raWVBY2NlcHRQb2xpY3k+KHBvbGljeSldOworICAgIHNh
dmVDb29raWVzKFtOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIAogICAgIG1fcHJvY2Vzcy5mb3JFYWNoTmV0d29y
a1N0b3JhZ2VTZXNzaW9uKFsmXSAoY29uc3QgYXV0byYgbmV0d29ya1N0b3JhZ2VTZXNzaW9uKSB7
CiAgICAgICAgIGlmIChhdXRvIGNvb2tpZVN0b3JhZ2UgPSBuZXR3b3JrU3RvcmFnZVNlc3Npb24u
Y29va2llU3RvcmFnZSgpKQogICAgICAgICAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tp
ZUFjY2VwdFBvbGljeShjb29raWVTdG9yYWdlLmdldCgpLCB0b0NGSFRUUENvb2tpZVN0b3JhZ2VB
Y2NlcHRQb2xpY3kocG9saWN5KSk7CisgICAgICAgIGlmIChhdXRvICpzdG9yYWdlID0gbmV0d29y
a1N0b3JhZ2VTZXNzaW9uLm5zQ29va2llU3RvcmFnZSgpKQorICAgICAgICAgICAgc2F2ZUNvb2tp
ZXMoc3RvcmFnZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICAgICB9KTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29v
a2llTWFuYWdlclNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVz
L3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCmluZGV4IDc1NGQwYmJjNmI0ZmU3MjdmMGVi
ZWE0MWZiMThjOGE2YmFhYjE2NjMuLmQ1NzZhZmRlNDJmOGI1MTJmMzRiN2FlMzQxYzlkNzUxYWU5
NDQ4NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9z
b3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2VyU291cC5jcHAKQEAgLTM3LDExICsz
NywxMiBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAot
dm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBs
YXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBv
bGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIG1fcHJvY2Vzcy5mb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtwb2xpY3ldIChhdXRv
JiBzZXNzaW9uKSB7CiAgICAgICAgIHNlc3Npb24uc2V0Q29va2llQWNjZXB0UG9saWN5KHBvbGlj
eSk7CiAgICAgfSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJDb29r
aWVNYW5hZ2VyOjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3Rv
cmFnZVR5cGUgc3RvcmFnZVR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IGJlOGQ5NjY2MmJlNmRjZDg1ZmEzYzMyOTI5YWUwZjBi
NWQxODIzNDMuLjViYTEyMjM0MTgzN2FmNmE4YzhjZTZkZWQ3M2ZjNDkxMWE5YjVlODAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0z
NDcsMzAgKzM0Nyw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJv
Y2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiAKICAgICBzZXRBZENsaWNr
QXR0cmlidXRpb25EZWJ1Z01vZGUocGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25E
ZWJ1Z01vZGUpOwogCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRDsKLSAgICBzZXRT
ZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycykpKTsKLQotICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0gICAgYWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lv
bklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3Jh
Z2VRdW90YSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBh
cnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNz
aW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLQotI2lmIEVOQUJM
RShTRVJWSUNFX1dPUktFUikKLSAgICBib29sIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRp
b25EZWxheUVuYWJsZWQgPSB0cnVlOwotICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWlu
YXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNl
dC0+YWRkKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5s
b2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8qIGRl
ZmF1bHRTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSk7Ci0gICAgYXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNlc3Np
b24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2ll
IDogcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykK
LSAgICAgICAgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKLQogICAg
IGZvciAoYXV0byYgc3VwcGxlbWVudCA6IG1fc3VwcGxlbWVudHMudmFsdWVzKCkpCiAgICAgICAg
IHN1cHBsZW1lbnQtPmluaXRpYWxpemUocGFyYW1ldGVycyk7CiAKQEAgLTUwNSw4ICs0ODEsNiBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklE
JiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vz
c2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNob3VsZFVzZVRlc3Rp
bmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFzZSkKICNlbmRpZgog
ewotICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSk7Ci0KICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy5h
ZGQoc2Vzc2lvbklELCBudWxscHRyKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQog
ICAgICAgICByZXR1cm47CkBAIC01MjEsNyArNDk1LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNob3Vs
ZFUKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllciA9IG1ha2VTdHJpbmco
aWRlbnRpZmllckJhc2UsICIuUHJpdmF0ZUJyb3dzaW5nLiIsIGNyZWF0ZUNhbm9uaWNhbFVVSURT
dHJpbmcoKSkuY3JlYXRlQ0ZTdHJpbmcoKTsKICAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFs
KCkpCiAgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gYWRvcHRDRihjcmVhdGVQcml2YXRlU3RvcmFn
ZVNlc3Npb24oY2ZJZGVudGlmaWVyLmdldCgpKSk7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKHNl
c3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAgICBz
dG9yYWdlU2Vzc2lvbiA9IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlQ0ZT
dG9yYWdlU2Vzc2lvbkZvcklkZW50aWZpZXIoY2ZJZGVudGlmaWVyLmdldCgpKTsKIAogICAgIGlm
IChOZXR3b3JrU3RvcmFnZVNlc3Npb246OnByb2Nlc3NNYXlVc2VDb29raWVBUEkoKSkgewpAQCAt
NTQ0LDIxICs1MTgsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y29va2llQWNjZXB0UG9saWN5
Q2hhbmdlZChIVFRQQ29va2llQWNjZXB0UG9saWN5IG5ld1BvbGljeSkKIAogV2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uKiBOZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24oY29uc3Qg
UEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkgY29uc3QKIHsKLSAgICBpZiAoc2Vzc2lvbklEID09
IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgIHJldHVybiAmZGVm
YXVsdFN0b3JhZ2VTZXNzaW9uKCk7CiAgICAgcmV0dXJuIG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9u
cy5nZXQoc2Vzc2lvbklEKTsKIH0KIAotV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBO
ZXR3b3JrUHJvY2Vzczo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICBpZiAo
IW1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbikKLSAgICAgICAgbV9kZWZhdWx0TmV0d29y
a1N0b3JhZ2VTZXNzaW9uID0gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsK
LSAgICByZXR1cm4gKm1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjsKLX0KLQogdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBGdW5jdGlv
bjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYpPiYgZnVuY3RvcikKIHsKLSAg
ICBmdW5jdG9yKGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpKTsKICAgICBmb3IgKGF1dG8mIHN0b3Jh
Z2VTZXNzaW9uIDogbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLnZhbHVlcygpKQogICAgICAgICBm
dW5jdG9yKCpzdG9yYWdlU2Vzc2lvbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXggYWE3MzM3N2I3MzJmNjEwYjg2NzkwNTZjMzdkZjI4
YWVlYTA3YWY4My4uZGM4NmYzOTY5N2ZjNTAzZWE0ZGJkMWIwNmMzMjI5NzViMWU2OWQxNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMTcw
LDcgKzE3MCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYp
PiYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Npb24o
Y29uc3QgUEFMOjpTZXNzaW9uSUQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5ld1Rlc3RpbmdTZXNzaW9uKGNv
bnN0IFBBTDo6U2Vzc2lvbklEJik7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBlbnN1
cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgYm9vbCBzaG91bGRVc2VUZXN0aW5nTmV0
d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUmV0YWluUHRyPENGSFRUUENv
b2tpZVN0b3JhZ2VSZWY+JiYpOwpAQCAtMzc1LDcgKzM3NCw2IEBAIHB1YmxpYzoKIAogcHJpdmF0
ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNl
c3Npb24oKSBjb25zdDsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKIApAQCAtNTQ0LDcgKzU0Miw2IEBA
IHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8
TmV0d29ya1Nlc3Npb24+PiBtX25ldHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBBTDo6U2Vz
c2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4g
bV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zOwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNz
aW9uOwogCiAgICAgUmVmUHRyPFN0b3JhZ2VNYW5hZ2VyU2V0PiBtX3N0b3JhZ2VNYW5hZ2VyU2V0
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCmluZGV4IDk5MDFjNWNiNzNjNzRm
ZTNkYTRlYmY1N2JhODUxMjg2ZmRhMTA0YmYuLmRkOTZiNGMzMmM0MzBiZDMwZjNkOTRhM2RlZGY4
MTc5ZDc1YjA3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC01NSw3
ICs1NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJ
UEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCB1aVByb2Nlc3NTREtW
ZXJzaW9uOwogICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIG5ldHdvcmtBVFNDb250ZXh0LmdldCgp
KTsKICNlbmRpZgotICAgIGVuY29kZXIgPDwgZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7CiAj
aWYgVVNFKFNPVVApCiAgICAgZW5jb2RlciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5j
b2RlciA8PCBpZ25vcmVUTFNFcnJvcnM7CkBAIC02OCw5ICs2Nyw2IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNv
bnN0CiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5j
b2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VS
VklDRV9XT1JLRVIpCi0gICAgZW5jb2RlciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5IDw8IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUgPDwgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsK
LSNlbmRpZgogICAgIGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5j
b2RlciA8PCBlbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTYsMTIg
KzExMiw2IEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJ
UEM6OkRlY29kZXImIGRlY29kZXIsIE5ldHdvcmtQcm9jCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICNlbmRpZgogCi0gICAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IGRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIGRlY29kZXIgPj4gZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnM7Ci0gICAgaWYgKCFkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyA9IFdU
Rk1vdmUoKmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKLQogI2lmIFVTRShTT1VQKQogICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNvb2tpZUFjY2VwdFBvbGljeSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTE0MiwyMCArMTMyLDYgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1By
b2MKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC51cmxTY2hlbWVzUmVnaXN0ZXJlZEFz
Tm9BY2Nlc3MpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBPcHRp
b25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+PiBzZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlmICghc2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlID0gV1RGTW92ZSgqc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRE
aXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5KSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotI2VuZGlmCi0KICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91
bGRFbmFibGVJVFBEYXRhYmFzZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycy5oCmluZGV4IDExY2E1YTE5OWZjZmZlODgzZmZmMGEyZmY3OWRmZTQy
MTBkOWRhZDEuLmViYTQ5Y2QxNTM1OGJlOTZjMGM1ODc0YzMzOGUxZTVhY2ZjOTJlYjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUg
IkNhY2hlTW9kZWwuaCIKICNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCi0jaW5jbHVkZSAi
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZS5o
PgogI2luY2x1ZGUgPHd0Zi9Qcm9jZXNzSUQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBA
IC03MSw4ICs3MCw2IEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7
CiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gbmV0d29ya0FUU0NvbnRleHQ7CiAjZW5kaWYKIAot
ICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
OwotICAgIAogI2lmIFVTRShTT1VQKQogICAgIFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xp
Y3kgY29va2llQWNjZXB0UG9saWN5IHsgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeTo6
QWx3YXlzQWNjZXB0IH07CiAgICAgYm9vbCBpZ25vcmVUTFNFcnJvcnMgeyBmYWxzZSB9OwpAQCAt
ODUsMTIgKzgyLDcgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsK
ICAgICBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgVmVj
dG9yPFN0cmluZz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQotICAgIFN0cmluZyBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGJvb2wgc2hvdWxkRGlzYWJsZVNl
cnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSB7IGZhbHNlIH07Ci0jZW5kaWYKLSAg
ICBib29sIHNob3VsZEVuYWJsZUlUUERhdGFiYXNlIHsgZmFsc2UgfTsKKyAgICBib29sIHNob3Vs
ZEVuYWJsZUlUUERhdGFiYXNlIHsgdHJ1ZSB9OwogICAgIGJvb2wgZW5hYmxlQWRDbGlja0F0dHJp
YnV0aW9uRGVidWdNb2RlIHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJh
c2UuY3BwCmluZGV4IGY5OTVlMDFkNDdkOGJkZDk2OWYyYzgwZTY3OWFkYWUxN2M5ZDViNzIuLjAy
Yzg2NzNkMzliMWI2ODI2NjJhNzdlZDFjNjE2NmQ5NzFhNjJmNDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3Rv
cmFnZURhdGFiYXNlLmNwcApAQCAtMjE0LDcgKzIxNCw4IEBAIHZvaWQgTG9jYWxTdG9yYWdlRGF0
YWJhc2U6OmNsZWFyKCkKIAogdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y2xvc2UoKQogewot
ICAgIEFTU0VSVCghbV9pc0Nsb3NlZCk7CisgICAgaWYgKG1faXNDbG9zZWQpCisgICAgICAgIHJl
dHVybjsKICAgICBtX2lzQ2xvc2VkID0gdHJ1ZTsKIAogICAgIGlmIChtX2RpZFNjaGVkdWxlRGF0
YWJhc2VVcGRhdGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQppbmRleCBkYTYzNTkxMjQyMjNkYjk3MDMw
ZDFlYTc3YmMwMGNlZTUxZmIwMTdkLi44MmQ0NDIwYWNmYmI3ZWQyMjEzOTMxMGIyMmIxN2MyZGIy
MGNiZjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtQcm9jZXNzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJO
ZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIKICNpbXBvcnQgIk5ldHdvcmtTZXNzaW9uQ29jb2EuaCIK
ICNpbXBvcnQgIlNhbmRib3hFeHRlbnNpb24uaCIKKyNpbXBvcnQgIldlYkNvb2tpZU1hbmFnZXIu
aCIKICNpbXBvcnQgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1B1YmxpY1N1ZmZpeC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3RD
Rk5ldC5oPgpAQCAtNzgsOSArNzksNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUlu
aXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFNh
bmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1
bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFt
ZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50
bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VU
ZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAg
X0NGTmV0d29ya1NldEFUU0NvbnRleHQocGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dC5nZXQo
KSk7CkBAIC0xMDUsMTEgKzEwMyw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5p
dGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAgW05T
VVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6
cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVy
biBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9u
SUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdv
cmtQcm9jZXNzOjpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNF
KFNPVVJDRV9BUFBMSUNBVElPTl9BVURJVF9EQVRBKQpAQCAtMjIxLDcgKzIxNCw3IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lv
bklELCBDb21wbGV0aW9uSGFuCiAgICAgcGxhdGZvcm1GbHVzaENvb2tpZXMoc2Vzc2lvbklELCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNhdmVDb29raWVz
KE5TSFRUUENvb2tpZVN0b3JhZ2UgKmNvb2tpZVN0b3JhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgc2F2ZUNvb2tpZXMoTlNIVFRQQ29va2ll
U3RvcmFnZSAqY29va2llU3RvcmFnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgQVNT
RVJUKGNvb2tpZVN0b3JhZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQy
ZGNjOGUzZjliOGYxNjkyOTk3ZjY3MTkyLi40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5
M2UyMjU2YTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwv
TmV0d29ya1Byb2Nlc3NDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29y
a1Byb2Nlc3NDcmVhdGkKIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3Jh
Z2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwot
fQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZv
ckhvc3QoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmlu
ZyYgaG9zdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpp
bmRleCBjMjczNmUwMjZhNTVkM2Q0MDIwZjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0
NjIwZjAyYTdkOWU5ZTg2OWVjODY0OTFiN2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpA
QCAtNTUsMTUgKzU1LDExIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdl
YnNpdGVEYXRhU3RvcmVTZXNzaW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQ
YXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdl
UmVmPiB1aVByb2Nlc3NDb29raWVTdG9yYWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1l
cmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNF
bXB0eSgpKQorICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMu
dWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKQogICAgICAgICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2ll
U3RvcmFnZUZyb21JZGVudGlmeWluZ0RhdGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9y
YWdlSWRlbnRpZmllcik7CiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Np
b25JRCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGlu
Z05ldHdvcmtTZXNzaW9uLCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0
KCkpLCBXVEZNb3ZlKHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Np
b24gPSBuZXR3b3JrUHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAo
Y29uc3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAg
c2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNz
aW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RG
TW92ZShwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291
cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NT
b3VwLmNwcAppbmRleCA0MWFmZGNjNjFhZGM1ODNkY2YxOWYyZDQwYWEyODkxZjhhMDEzMjhiLi4w
OTNkNTk5NTk2YTY4ODMwYWYwOTkzZmEzNjgzMWUwYzMyNGJmYmU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNw
cApAQCAtMTQwLDExICsxNDAsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNldEln
bm9yZVRMU0Vycm9ycyhwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyk7CiB9CiAKLXN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdu
b3JlVExTRXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIFNvdXBOZXR3b3JrU2Vz
c2lvbjo6c2V0U2hvdWxkSWdub3JlVExTRXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BdHRhY2htZW50LmggYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9BdHRhY2htZW50LmgKaW5kZXggMTc0M2MzYjc4MzBhMDMwZjU3NTcz
Y2IwZWFlODI3ZDQxOTU5NGJhZS4uZDZmZjNjMTdlYmEwZDA0ZTA3ZGU4YmNhMWFhNzJjNTQzN2Rj
NWEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0F0dGFjaG1lbnQuaApAQCAtOTUsOCAr
OTUsOCBAQCBwcml2YXRlOgogICAgIGludCBtX2ZpbGVEZXNjcmlwdG9yIHsgLTEgfTsKICAgICBz
aXplX3QgbV9zaXplOwogI2VsaWYgT1MoREFSV0lOKQotICAgIG1hY2hfcG9ydF9uYW1lX3QgbV9w
b3J0OwotICAgIG1hY2hfbXNnX3R5cGVfbmFtZV90IG1fZGlzcG9zaXRpb247CisgICAgbWFjaF9w
b3J0X25hbWVfdCBtX3BvcnQgeyAwIH07CisgICAgbWFjaF9tc2dfdHlwZV9uYW1lX3QgbV9kaXNw
b3NpdGlvbiB7IDAgfTsKICNlbGlmIE9TKFdJTkRPV1MpCiAgICAgSEFORExFIG1faGFuZGxlIHsg
SU5WQUxJRF9IQU5ETEVfVkFMVUUgfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCmluZGV4IDZkMGMxMjlhNzQwNTEw
ZDM4Njk3MzcwNWFkMDkyZWYxMzJjYzA3NWEuLjA0ODEwYjNlMTliZTk2Y2FkMWFkODJhNDRkY2Vk
YjI2ZWY3ODI2MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycy5jcHAKQEAgLTQwLDEzICs0MCw5IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAg
ZW5jb2RlciA8PCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgZW5jb2RlciA8PCB1aVBy
b2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGNvb2tpZVN0b3Jh
Z2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIGVuY29kZXIgPDwgcGVuZGluZ0Nvb2tpZXM7CiAK
ICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeSA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFz
ZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5kaWYKIAogI2lm
IEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTgzLDEyICs3OSw2IEBAIE9wdGlvbmFsPFdlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2Rl
KElQQzo6RGVjCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5j
b29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmNvb2tpZVN0b3JhZ2VQ
YXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpDb29r
aWU+PiBwZW5kaW5nQ29va2llczsKLSAgICBkZWNvZGVyID4+IHBlbmRpbmdDb29raWVzOwotICAg
IGlmICghcGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAg
cGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IFdURk1vdmUoKnBlbmRpbmdDb29raWVzKTsKLQog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIE9wdGlvbmFsPFN0cmluZz4gaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5OwpAQCAtMTAxLDE0ICs5MSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgaWYg
KCFpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBPcHRpb25hbDxTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGU+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAg
ICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCmlu
ZGV4IGYyN2RmNDg5ODA5ZjMxOTYwOGI2ODBjYjJhOGExYzE0YjcwMTg0MzkuLmUxYjIzMzcwMTk5
ZmUzNzAzMWU5ZGM1YzA1NzgxNTUwMjFlMzRkNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaApAQCAtNTEsMTUgKzUxLDExIEBAIHN0
cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyB7CiAKICAgICBWZWN0b3I8dWludDhfdD4g
dWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlIGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIFZlY3RvcjxXZWJD
b3JlOjpDb29raWU+IHBlbmRpbmdDb29raWVzOwogICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25Q
YXJhbWV0ZXJzIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKIAogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQogICAgIFN0cmluZyBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNl
bmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCmluZGV4IGJjMDc4
NjZmYmMzOTY4ZTc2Y2FhOWEzNTY4MTBjNmEyZmIwOWRjZmQuLmZmOTU1ODkyYmRhMGI4M2MyM2E5
NmEwODM5ZWYzYmQwZDk0NjljMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCkBAIC00Niw4ICs0Niw2IEBAIG5hbWVzcGFjZSBB
UEkgewogSFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQogICAgIDogbV9vd25pbmdEYXRhU3RvcmUod2Vic2l0
ZURhdGFTdG9yZSkKIHsKLSAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZv
ckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHJlZ2lzdGVyRm9yTmV3UHJvY2Vz
c1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVT
dG9yZSgpCkBAIC01NSw4ICs1Myw2IEBAIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9y
ZSgpCiAgICAgQVNTRVJUKG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFtX29i
c2VydmVkQ29va2llTWFuYWdlclByb3h5KTsKICAgICBBU1NFUlQoIW1fY29va2llTWFuYWdlclBy
b3h5T2JzZXJ2ZXIpOwotCi0gICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0
aW9ucygpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZmlsdGVyQXBwQm91bmRDb29raWVz
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtODEsMzMgKzc3LDE2IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENv
b2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpCiAKIHZvaWQgSFRUUENv
b2tpZVN0b3JlOjpjb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29s
ID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlv
bnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4g
YWxsQ29va2llczsKLSAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9
PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICAgICAgYWxsQ29v
a2llcyA9IGdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKLSAgICAg
ICAgYWxsQ29va2llcy5hcHBlbmRWZWN0b3IobV9vd25pbmdEYXRhU3RvcmUtPnBlbmRpbmdDb29r
aWVzKCkpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpLCBhbGxDb29raWVzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGZp
bHRlckFwcEJvdW5kQ29va2llcyhhbGxDb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29v
a2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHBv
b2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFi
bGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29y
a1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRBbGxDb29r
aWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxl
IHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tp
ZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9v
bCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRp
b25zKCk7Ci0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIo
eyB9KTsKLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmdldENvb2tp
ZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUg
eworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1By
b2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRDb29raWVzKG1f
b3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSAoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsKICAg
ICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTExNSw3OCArOTQsMjkgQEAgdm9pZCBIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVmVjdG8KIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgYXBwQm91bmRDb29raWVzKSBtdXRh
YmxlIHsKLSAgICAgICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9v
bEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgICAgIGlmICghcG9vbCkgewotICAg
ICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBhcHBCb3VuZENvb2tpZXMpIHsKLSAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogcGVuZGluZ0Nvb2tpZXMgdXNlZCBmb3IgZGVmYXVsdFNlc3Npb24g
YmVjYXVzZSBzZXNzaW9uIGNvb2tpZXMgY2Fubm90IGJlIHByb3BhZ2F0ZWQgdG8gTmV0d29yayBQ
cm9jZXNzIHdpdGggdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuCi0gICAgICAgICAg
ICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgICAg
ICAgICAgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3Jl
LT5hZGRQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvKiBjb29raWVNYW5h
Z2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsK
LSAgICAgICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOworICAgICAgICBhdXRv
JiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29v
a2llTWFuYWdlcigpOworICAgICAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCBhcHBCb3VuZENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNv
b2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0Rh
dGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlm
ICghcG9vbCkgewotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09
IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQot
ICAgICAgICAgICAgZGVsZXRlQ29va2llRnJvbURlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShj
b29raWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+cmVt
b3ZlUGVuZGluZ0Nvb2tpZShjb29raWUpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
bXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29s
LT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tp
ZU1hbmFnZXItPmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNv
b2tpZSwgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5k
ZWxldGVDb29raWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0
ZUFsbENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JD
b29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAo
IW1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAg
ICAgZGVsZXRlQ29va2llc0luRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+
c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVN
YW5hZ2VyLT5kZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSk7
CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJv
Y2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUFsbENvb2tp
ZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKICAgICAvLyBGSVhNRTogVGhlIENv
bXBsZXRpb25IYW5kbGVyIHNob3VsZCBiZSBwYXNzZWQgdG8gV2ViQ29va2llTWFuYWdlclByb3h5
OjpkZWxldGVBbGxDb29raWVzLgogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQ
Q29va2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
YXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3Jh
Z2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBzZXRIVFRQ
Q29va2llQWNjZXB0UG9saWN5SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUocG9saWN5KTsK
LSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIg
PSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAg
IGNvb2tpZU1hbmFnZXItPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKLSAgICB9KTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUt
Pm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0
SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBv
bGljeSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVT
dG9yZTo6Zmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTIyNywyMSArMTU3LDcgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lz
dGVyT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQogCiAgICAgbV9jb29raWVNYW5hZ2VyUHJv
eHlPYnNlcnZlciA9IG1ha2VVbmlxdWU8QVBJV2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI+
KCp0aGlzKTsKIAotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bv
b2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKSB7Ci0gICAg
ICAgIEFTU0VSVCghbV9vYnNlcnZpbmdVSVByb2Nlc3NDb29raWVzKTsKLQotICAgICAgICAvLyBM
aXN0ZW4gZm9yIGNvb2tpZSBub3RpZmljYXRpb25zIGluIHRoZSBVSVByb2Nlc3MgaW4gdGhlIG1l
YW50aW1lLgotICAgICAgICBzdGFydE9ic2VydmluZ0NoYW5nZXNUb0RlZmF1bHRVSVByb2Nlc3ND
b29raWVTdG9yZShbdGhpc10gKCkgewotICAgICAgICAgICAgY29va2llc0RpZENoYW5nZSgpOwot
ICAgICAgICB9KTsKLQotICAgICAgICBtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMgPSB0cnVl
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQ
cm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9ICZtX293bmluZ0RhdGFTdG9yZS0+
bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1h
bmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0KIApAQCAtMjc2LDQ2ICsxOTIs
MTAgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNEaWRDaGFuZ2UoKQogdm9pZCBIVFRQ
Q29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQoKQogewogICAgIG1fb2JzZXJ2ZWRD
b29raWVNYW5hZ2VyUHJveHktPnVucmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+
c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLSAgICBtX29ic2Vy
dmVkQ29va2llTWFuYWdlclByb3h5ID0gbnVsbHB0cjsKLQotICAgIGF1dG8qIHBvb2wgPSBtX293
bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwot
Ci0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX29ic2VydmVkQ29va2ll
TWFuYWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0
YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVk
Q29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCi12b2lkIEhU
VFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQot
ewotICAgIEFTU0VSVCghbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsK
LQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IFdlYlByb2Nl
c3NQb29sOjpyZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihbdGhpc10oV2ViUHJv
Y2Vzc1Bvb2wmIG5ld1Byb2Nlc3NQb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3Rv
cmUtPmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKG5ld1Byb2Nlc3NQb29sKSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICAvLyBOb3cgdGhhdCBhbiBhc3NvY2lhdGVkIHByb2Nlc3MgcG9v
bCBleGlzdHMsIHdlIG5lZWQgdG8gZmx1c2ggdGhlIFVJIHByb2Nlc3MgY29va2llIHN0b3JlCi0g
ICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBhbnkgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIHdpdGhpbiB0
aGUgbmV3IHByb2Nlc3MgcG9vbC4KLSAgICAgICAgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2ll
U3RvcmUoKTsKLSAgICAgICAgbmV3UHJvY2Vzc1Bvb2wuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsK
LQotICAgICAgICBpZiAobV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcikgewotICAgICAgICAg
ICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG5ld1Byb2Nlc3NQb29sLnN1cHBsZW1l
bnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgICAgICAgICBtX29ic2Vy
dmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgICAgICB9
Ci0gICAgICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAg
ICB9KTsKLX0KLQotdm9pZCBIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQcm9jZXNz
UG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIGlmIChtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0
ZW5lcklkZW50aWZpZXIpCi0gICAgICAgIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyUHJvY2Vz
c1Bvb2xDcmVhdGlvbkxpc3RlbmVyKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRp
Zmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSAw
OwotfQotCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmZsdXNo
RGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCkgeyB9CiBWZWN0b3I8V2ViQ29yZTo6Q29va2ll
PiBIVFRQQ29va2llU3RvcmU6OmdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tp
ZXMoKSB7IHJldHVybiB7IH07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElIVFRQQ29va2llU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElIVFRQQ29va2llU3RvcmUuaAppbmRleCBkNjIwYWRkYTRlN2Y4OTQ1NjYxOGEzZTIyZTFiZmQ0
MzU3Nzc1YjE5Li5hMDVmNDE0MzBkYjJiMjNkNDE3ODQwNzlhNGZiODZjNzQ2MGE3NTQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCkBA
IC04Myw5ICs4Myw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSFRUUENvb2tpZVN0b3JlKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZSYpOwogCi0gICAgdm9pZCByZWdpc3RlckZvck5ld1Byb2Nl
c3NQb29sTm90aWZpY2F0aW9ucygpOwotICAgIHZvaWQgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQ
b29sTm90aWZpY2F0aW9ucygpOwotCiAgICAgdm9pZCBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29r
aWVTdG9yZSgpOwogICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBnZXRBbGxEZWZh
dWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0Q29v
a2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAppbmRleCA1OGM1
NDUzZjQ4OTg3ZjVlMWFmYWZlZjM0YzQzMzM1ZjFiNGNjOTkwLi4zN2JhYTY4ZjkyNGI5NTg3MmYw
MWY3ZTRhODBkNWY0OTdkNWZlOWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dC5jcHAKQEAgLTQxMSwxMSArNDExLDYgQEAgdm9pZCBXS0NvbnRleHRQcmVjb25u
ZWN0VG9TZXJ2ZXIoV0tDb250ZXh0UmVmLCBXS1VSTFJlZikKIHsKIH0KIAotV0tDb29raWVNYW5h
Z2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYp
Ci17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZikt
PnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkpOwotfQotCiBXS1dl
YnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRS
ZWYpCiB7CiAgICAgcmV0dXJuIFdLV2Vic2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUo
KTsKQEAgLTUyNywxMyArNTIyLDYgQEAgdm9pZCBXS0NvbnRleHRTZXRKYXZhU2NyaXB0R2FyYmFn
ZUNvbGxlY3RvclRpbWVyRW5hYmxlZChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwKICAgICBXZWJL
aXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1l
ckVuYWJsZWQoZW5hYmxlKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0LCBib29s
IGFsbG93cykKLXsKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2ViS2l0Ojp0b0lt
cGwoY29udGV4dCktPnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihh
bGxvd3MpOwotI2VuZGlmCi19Ci0KIFdLRGljdGlvbmFyeVJlZiBXS0NvbnRleHRDb3B5UGx1Z0lu
QXV0b1N0YXJ0T3JpZ2luSGFzaGVzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewogICAgIHJl
dHVybiBXZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+cGx1Z0luQXV0
b1N0YXJ0T3JpZ2luSGFzaGVzKCkubGVha1JlZigpKTsKQEAgLTU3NSwyMSArNTYzLDExIEBAIHZv
aWQgV0tDb250ZXh0U2V0Rm9udEFsbG93TGlzdChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tB
cnJheVJlZiBhcnJheVJlZikKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0Rm9u
dEFsbG93TGlzdChXZWJLaXQ6OnRvSW1wbChhcnJheVJlZikpOwogfQogCi12b2lkIFdLQ29udGV4
dFRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0KQotewotICAgIFdl
YktpdDo6dG9JbXBsKGNvbnRleHQpLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCiB2
b2lkIFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29udGV4dFJlZiBjb250ZXh0
KQogewogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2Vy
cygpOwogfQogCi1Qcm9jZXNzSUQgV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVy
KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQotewotICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChj
b250ZXh0UmVmKS0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7Ci19Ci0KIHZvaWQgV0tDb250
ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1Jl
ZiBkb21haW5SZWYsIFdLU3RyaW5nUmVmIG5hbWVSZWYsIFdLQXJyYXlSZWYgbWltZVR5cGVzUmVm
LCBXS0FycmF5UmVmIGV4dGVuc2lvbnNSZWYpCiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCkBAIC02MTksMTIgKzU5NywxMSBAQCB2b2lkIFdLQ29udGV4dENsZWFyQ3VycmVudE1v
ZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogICAgIFdlYktp
dDo6dG9JbXBsKGNvbnRleHRSZWYpLT5jbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGlu
ZygpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzcykKK3ZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyhXS0NvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKIHsK
LSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFByaW1h
cnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRh
U3RvcmVSZWYgd2Vic2l0ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNp
dGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0gICAg
V2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktpdDo6
dG9JbXBsKHdlYnNpdGVEYXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0LmgKaW5kZXggMWQ4ZmFiOGExNDg2YWFkYjQ5NDE0NGI5OGYxMGU5MzYzOGQw
YzVlNi4uMmFiNmVmODZmNTMwZTc3Zjc0Y2JkNWRmNTg2MmFjNGQzMGI3OTg3NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2OCw3ICsxNjgsNiBAQCBX
S19FWFBPUlQgdm9pZCBXS0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihXS0NvbnRleHRSZWYgY29u
dGV4dCk7CiBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4dEdldFdlYnNp
dGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lU
SF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKIAog
V0tfRVhQT1JUIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0QXBwbGlj
YXRpb25DYWNoZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FU
RURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3Jl
KTsKLVdLX0VYUE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdl
cihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdLX0VYUE9SVCBX
S0dlb2xvY2F0aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1hbmFnZXIoV0tD
b250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVmIFdLQ29udGV4
dEdldEljb25EYXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tLZXlW
YWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFnZU1hbmFnZXIo
V0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVO
VChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAppbmRleCBhMDI1MDExZjcw
Y2M2NTlmNWZhYTA4YTdkNmNiYjNmZjU2ZWU2YTM4Li40OGEyOWM0NTY4YWI2N2IzYjdlMWVmOTgx
NTZmNmVmYTg5NmIxZGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS0NvbnRleHRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tDb250ZXh0UHJpdmF0ZS5oCkBAIC04MywxMSArODMsOCBAQCBXS19FWFBPUlQgdm9pZCBXS0Nv
bnRleHRXYXJtSW5pdGlhbFByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogLy8gQXQgc29t
ZSBwb2ludCBpdCBzaG91bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNl
dFVzZXNOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1XS19FWFBPUlQgdm9p
ZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tfRVhQ
T1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmKTsK
IAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JT
ZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0eXBlZGVmIHZvaWQg
KCpXS0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1JlZiBtZXNzYWdlTmFt
ZSk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKFdL
Q29udGV4dEludmFsaWRNZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VGdW5jdGlvbik7CiAg
ICAgCkBAIC05Nyw4ICs5NCw2IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEZvbnRBbGxv
d0xpc3QoV0tDb250ZXh0UmVmLCBXS0FycmF5UmVmKTsKIAogV0tfRVhQT1JUIHZvaWQgV0tDb250
ZXh0UHJlY29ubmVjdFRvU2VydmVyKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1VSTFJlZiBzZXJ2
ZXJVUkwpIFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiAKLVdLX0VYUE9SVCBXS1Byb2Nlc3NJRCBXS0Nv
bnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpOwot
CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4oV0tDb250ZXh0UmVm
IGNvbnRleHQsIFdLU3RyaW5nUmVmIGRvbWFpbiwgV0tTdHJpbmdSZWYgbmFtZSwgV0tBcnJheVJl
ZiBtaW1lVHlwZXMsIFdLQXJyYXlSZWYgZXh0ZW5zaW9ucyk7CiBXS19FWFBPUlQgdm9pZCBXS0Nv
bnRleHRDbGVhclN1cHBvcnRlZFBsdWdpbnMoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAppbmRleCA2NDhmMzAwOTYxYTUwNjBj
OWNkZjAzZTNjZjgwNDU4YmYyYmI1MGRkLi5iNDQ3MzQyMTIwMDYxM2MxOWVjM2FjOWFkNjY5OTc1
MzRhYmVmMTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1Bh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKQEAg
LTM5OCw2ICszOTgsMTEgQEAgdWludDY0X3QgV0tQYWdlR2V0UmVuZGVyVHJlZVNpemUoV0tQYWdl
UmVmIHBhZ2UpCiAgICAgcmV0dXJuIHRvSW1wbChwYWdlKS0+cmVuZGVyVHJlZVNpemUoKTsKIH0K
IAorV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLUGFnZUdldFdlYnNpdGVEYXRhU3RvcmUoV0tQYWdl
UmVmIHBhZ2UpCit7CisgICAgcmV0dXJuIHRvQVBJKCZ0b0ltcGwocGFnZSktPndlYnNpdGVEYXRh
U3RvcmUoKSk7Cit9CisKIFdLSW5zcGVjdG9yUmVmIFdLUGFnZUdldEluc3BlY3RvcihXS1BhZ2VS
ZWYgcGFnZVJlZikKIHsKICAgICByZXR1cm4gdG9BUEkodG9JbXBsKHBhZ2VSZWYpLT5pbnNwZWN0
b3IoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2Uu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCmluZGV4IDY3MGI1ZTlm
ZDRiNDU0YTJiN2VkZmQyMjMyYWFlOTUxYzQ2N2QwODMuLmM1MWI4MTYyYzg5NzM0YWIxNTJiZWYw
ZTk5MjMzN2Q1NWYyZGU4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5o
CkBAIC0xMTgsNiArMTE4LDggQEAgV0tfRVhQT1JUIGRvdWJsZSBXS1BhZ2VHZXRFc3RpbWF0ZWRQ
cm9ncmVzcyhXS1BhZ2VSZWYgcGFnZSk7CiAKIFdLX0VYUE9SVCB1aW50NjRfdCBXS1BhZ2VHZXRS
ZW5kZXJUcmVlU2l6ZShXS1BhZ2VSZWYgcGFnZSk7CiAKK1dLX0VYUE9SVCBXS1dlYnNpdGVEYXRh
U3RvcmVSZWYgV0tQYWdlR2V0V2Vic2l0ZURhdGFTdG9yZShXS1BhZ2VSZWYgcGFnZSk7CisKIFdL
X0VYUE9SVCBXS0luc3BlY3RvclJlZiBXS1BhZ2VHZXRJbnNwZWN0b3IoV0tQYWdlUmVmIHBhZ2Up
OwogCiBXS19FWFBPUlQgV0tTdHJpbmdSZWYgV0tQYWdlQ29weVVzZXJBZ2VudChXS1BhZ2VSZWYg
cGFnZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNp
dGVEYXRhU3RvcmVSZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmNwcAppbmRleCA5ZGRhNTkxYzk1MTg5YWIwYzI1YWM1NTQ2NmMwYTJi
ZmMzOTI3ZWJjLi42ODYxMTRhYTVlZDBhMTMxNWU1YTlkNjE5NTFiODgwMmM3NWY4YWIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVS
ZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAj
aW5jbHVkZSAiQVBJSFRUUENvb2tpZVN0b3JlLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQ
cm94eS5oIgogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgogI2luY2x1
ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldLRGljdGlvbmFyeS5oIgpAQCAtNjksNiArNzAs
MTYgQEAgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLV2Vic2l0ZURhdGFTdG9yZUNyZWF0ZVdpdGhD
b25maWd1cmF0aW9uKFdLV2Vic2l0ZURhdGFTdG8KICAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgm
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoKldlYktpdDo6dG9JbXBsKGNvbmZpZ3Vy
YXRpb24pLCBzZXNzaW9uSUQpLmxlYWtSZWYoKSk7CiB9CiAKK3ZvaWQgV0tXZWJzaXRlRGF0YVN0
b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9y
ZSkKK3sKKyAgICBXZWJLaXQ6OnRvSW1wbChkYXRhU3RvcmUpLT50ZXJtaW5hdGVOZXR3b3JrUHJv
Y2VzcygpOworfQorCitXS1Byb2Nlc3NJRCBXS1dlYnNpdGVEYXRhU3RvcmVHZXROZXR3b3JrUHJv
Y2Vzc0lkZW50aWZpZXIoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSkKK3sKKyAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0ltcGwoZGF0YVN0b3JlKS0+bmV0d29ya1Byb2Nlc3MoKS5wcm9jZXNz
SWRlbnRpZmllcigpOworfQorCiB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVJlbW92ZUlUUERhdGFG
b3JEb21haW4oV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgV0tTdHJpbmdSZWYg
aG9zdCwgdm9pZCogY29udGV4dCwgV0tXZWJzaXRlRGF0YVN0b3JlUmVtb3ZlSVRQRGF0YUZvckRv
bWFpbkZ1bmN0aW9uIGNhbGxiYWNrKQogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJ
U1RJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNp
dGVEYXRhU3RvcmVSZWYuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0
ZURhdGFTdG9yZVJlZi5oCmluZGV4IGU3N2QwOWMxMDdkMWRhMDc4M2QwOWMwN2UyODAzZDA4NzEy
NWU0OGIuLmFiMjY3NzQ2YmU4MDc1YjAxNGM5ZmQ4MjMzNjIyZmM1OGYyZTI2YjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJl
Zi5oCkBAIC0yOSw2ICsyOSwxMyBAQAogI2luY2x1ZGUgPFdlYktpdC9XS0Jhc2UuaD4KICNpbmNs
dWRlIDxXZWJLaXQvV0tEZXByZWNhdGVkLmg+CiAKKyNpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZp
bmVkKF9XSU4zMikKK3R5cGVkZWYgaW50IFdLUHJvY2Vzc0lEOworI2Vsc2UKKyNpbmNsdWRlIDx1
bmlzdGQuaD4KK3R5cGVkZWYgcGlkX3QgV0tQcm9jZXNzSUQ7CisjZW5kaWYKKwogI2lmZGVmIF9f
Y3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgpAQCAtNTAsNiArNTcsMTEgQEAgV0tfRVhQ
T1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JX
ZWJTb2NrZXRUZXN0aW5nKFcKIAogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlQ2xl
YXJDYWNoZWRDcmVkZW50aWFscyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmKTsK
IAorV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlQ2xlYXJDYWNoZWRDcmVkZW50aWFs
cyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKK1dLX0VYUE9SVCB2b2lkIFdLV2Vi
c2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiBkYXRhU3RvcmUpOworCitXS19FWFBPUlQgV0tQcm9jZXNzSUQgV0tXZWJzaXRlRGF0YVN0b3Jl
R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3Rv
cmUpOworCiBXS19FWFBPUlQgYm9vbCBXS1dlYnNpdGVEYXRhU3RvcmVHZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZChXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmKTsKIFdL
X0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIGJvb2wgZW5hYmxlKTsK
IHR5cGVkZWYgdm9pZCAoKldLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3RpY3NFcGhlbWVyYWxGdW5j
dGlvbikoYm9vbCBpc0VwaGVtZXJhbCwgdm9pZCogZnVuY3Rpb25Db250ZXh0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KaW5kZXgg
ZmYzMDk0OTg2YzI0M2QwNDc0ZjI1MmQzOTFlNmNjYjc0ZjFmZWQ1Yi4uMWY1NmZiZmI2Nzk1MTY0
OGRmMGI0YmJkY2JmMmE1OTlkYzAwYmRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KQEAgLTQwNiwyOCArNDA2LDYgQEAgc3Rh
dGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhhc2hN
YXA8U3RyaW5nLCBIYXNoTWFwPFMKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyU3VwcG9ydGVkUGx1
Z2lucygpOwogfQogCi0tICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcwotewotICAgIF9w
cm9jZXNzUG9vbC0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0KLQotLSAodm9pZClfc2Vu
ZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Ci17Ci0gICAgX3Byb2Nlc3NQb29s
LT5zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7Ci19
Ci0KLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXiko
dm9pZCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3Jr
UHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IG1h
a2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1l
Ci17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKLX0K
LQogLSAodm9pZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMKIHsKICAgICBfcHJvY2Vzc1Bvb2wt
PnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CkBAIC00MzUsMTIgKzQxMyw3IEBAIHN0YXRpYyBO
U0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0
cmluZywgSGFzaE1hcDxTCiAKIC0gKHZvaWQpX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3M6KEJPT0wpdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcwogewotICAgIF9wcm9j
ZXNzUG9vbC0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKTsKLX0KLQotLSAocGlkX3QpX25ldHdvcmtQcm9jZXNzSWRlbnRp
ZmllcgotewotICAgIHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSWRlbnRpZmll
cigpOworICAgIFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiB9CiAKIC0gKHBp
ZF90KV9wcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcgpAQCAtNDY3LDExICs0NDAsNiBAQCBzdGF0
aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1h
cDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5leHRX
ZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcodHJ1ZSk7CiB9CiAKLS0gKHZvaWQpX21ha2VO
ZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZwotewotICAgIF9wcm9jZXNzUG9v
bC0+c2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKHRy
dWUpOwotfQotCiAtIChCT09MKV9oYXNQcmV3YXJtZWRXZWJQcm9jZXNzCiB7CiAgICAgZm9yIChh
dXRvJiBwcm9jZXNzIDogX3Byb2Nlc3NQb29sLT5wcm9jZXNzZXMoKSkgewpAQCAtNTYwLDE4ICs1
MjgsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnko
Y29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0Q29v
a2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLS0gKHZvaWQpX3N5
bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAotewotICAgIF9wcm9jZXNz
UG9vbC0+c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKLX0KLQotLSAodm9p
ZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFsbG93
cwotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBfcHJvY2Vzc1Bvb2wtPnNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlmCi19
Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogLSAoaWQgPF9XS0dlb2xvY2F0aW9uQ29yZUxv
Y2F0aW9uUHJvdmlkZXI+KV9jb3JlTG9jYXRpb25Qcm92aWRlcgogewpAQCAtNjA0LDExICs1NjAs
NiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29u
c3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIH0pOwogfQogCi0tIChCT09MKV9uZXR3
b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVu
dAotewotICAgIHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1l
bnRGb3JUZXN0aW5nKGVudGl0bGVtZW50KTsKLX0KLQogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRD
cmVkZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90
ZWN0aW9uU3BhY2UKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyUGVybWFuZW50Q3JlZGVudGlh
bHNGb3JQcm90ZWN0aW9uU3BhY2UoV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rpb25T
cGFjZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
UHJvY2Vzc1Bvb2xQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tQcm9jZXNzUG9vbFByaXZhdGUuaAppbmRleCA2NzY5MDE1ZTA4NTU4OTk0Y2Q4YTIxOWExN2E5
YzY4YWRlM2I1MzgzLi4zYjkzMTQwNGE4ZTJlNDMyZDUxYzU0OTY1ZTJkZWY1ZjhlY2RjMTBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9v
bFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9j
ZXNzUG9vbFByaXZhdGUuaApAQCAtODcsMTQgKzg3LDkgQEAKIC0gKF9XS0Rvd25sb2FkICopX3Jl
c3VtZURvd25sb2FkRnJvbURhdGE6KE5TRGF0YSAqKXJlc3VtZURhdGEgd2Vic2l0ZURhdGFTdG9y
ZTooV0tXZWJzaXRlRGF0YVN0b3JlICopZGF0YVN0b3JlICBwYXRoOihOU1N0cmluZyAqKXBhdGgg
b3JpZ2luYXRpbmdXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4gU2hv
dWxkIGJlIGNhbGxlZCBvbmx5IHdoaWxlIG5vIHdlYiBjb250ZW50IHByb2Nlc3NlcyBhcmUgcnVu
bmluZy4KLS0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJl
cGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZB
SUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClfc2Vu
ZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVz
dW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9pZClf
dGVybWluYXRlU2VydmljZVdvcmtlcnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlv
cygxMi4wKSk7CiAKIC8vIFRlc3Qgb25seS4KLS0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50
aWZpZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMyksIGlvcygxMS4wKSk7CiAtIChwaWRf
dClfcHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4x
NSksIGlvcygxMy4wKSk7CiAKIC8vIFRlc3Qgb25seS4KQEAgLTEwNiw3ICsxMDEsNiBAQAogLSAo
c2l6ZV90KV9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTQpLCBpb3MoMTIuMCkpOwogLSAodm9pZClfc3luY05ldHdvcmtQcm9jZXNzQ29va2llcyBX
S19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKCJXS0hUVFBDb29raWVTdG9yZS5fZmx1
c2hDb29raWVzVG9EaXNrV2l0aENvbXBsZXRpb25IYW5kbGVyOiIsIG1hY29zKDEwLjEzLCBXS19N
QUNfVEJBKSwgaW9zKDExLjAsIFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX21ha2VOZXh0V2ViUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBp
b3MoMTIuMCkpOwotLSAodm9pZClfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JU
ZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogLSAoTlNV
SW50ZWdlcilfbWF4aW11bVN1c3BlbmRlZFBhZ2VDb3VudCBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjE0LjQpLCBpb3MoMTIuMikpOwogLSAoTlNVSW50ZWdlcilfcHJvY2Vzc0NhY2hlQ2FwYWNp
dHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKE5TVUlu
dGVnZXIpX3Byb2Nlc3NDYWNoZVNpemUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlv
cygxMy4wKSk7CkBAIC0xMjIsMTMgKzExNiwxMCBAQAogLSAodm9pZClfcHJlY29ubmVjdFRvU2Vy
dmVyOihOU1VSTCAqKXNlcnZlclVSTCBXS19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5U
KCJXS1dlYlZpZXcuX3ByZWNvbm5lY3RUb1NlcnZlciIsIG1hY29zKDEwLjEzLjQsIFdLX01BQ19U
QkEpLCBpb3MoMTEuMywgV0tfSU9TX1RCQSkpOwogCiAvLyBUZXN0IG9ubHkuCi0tICh2b2lkKV9z
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSk7CiAtICh2b2lkKV9nZXRB
Y3RpdmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JUZXN0aW5nOihwaWRfdClwaWQgY29tcGxl
dGlvbkhhbmRsZXI6KHZvaWQoXikoTlNBcnJheTxOU1N0cmluZyAqPiAqKSljb21wbGV0aW9uSGFu
ZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwotLSAoQk9P
TClfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50
aXRsZW1lbnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0g
KHZvaWQpX2NsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2U6KE5TVVJM
UHJvdGVjdGlvblNwYWNlICopcHJvdGVjdGlvblNwYWNlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTUpLCBpb3MoMTMuMCkpOwogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0Nv
b2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkLCBzZXR0ZXI9X3NldENvb2tpZVN0b3JhZ2VQ
YXJ0aXRpb25pbmdFbmFibGVkOikgQk9PTCBfY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJs
ZWQgV0tfQVBJX0RFUFJFQ0FURUQoIlBhcnRpdGlvbmVkIGNvb2tpZXMgYXJlIG5vIGxvbmdlciBz
dXBwb3J0ZWQiLCBtYWNvcygxMC4xMi4zLCAxMC4xNC40KSwgaW9zKDEwLjMsIDEyLjIpKTsKLS0g
KHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZCBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIAogLy8gVGVzdCBvbmx5LgogLSAo
dm9pZClfc2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0aW5nV2l0aEZpcnN0UGFydHk6
KE5TVVJMICopZmlyc3RQYXJ0eVVSTCB0aGlyZFBhcnR5OihOU1VSTCAqKXRoaXJkUGFydHlVUkwg
c2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb246KEJPT0wpc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRp
b24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0
b3JlLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFT
dG9yZS5tbQppbmRleCAyOThkOWNlYzllODRkOGE1MTIyMDY1Y2M5OTIzM2VmNGYwYjk1Mzg5Li44
MGQzMzBmMjkyNGQwZmJjMGFlOWI2MWU5NjcwOGNmY2ZjMzI4ZjNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0K
QEAgLTYxNyw2ICs2MTcsMTEgQEAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6OldlYnNpdGVEYXRhUmVj
b3JkPiB0b1dlYnNpdGVEYXRhUmVjb3JkcyhOU0FycmF5ICpkYXRhUmVjb3IKICAgICB9KTsKIH0K
IAorLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3Ry
aW5nICopZW50aXRsZW1lbnQKK3sKKyAgICByZXR1cm4gX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdv
cmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGVudGl0bGVtZW50KTsKK30KKwogLSAo
aWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4pX2RlbGVnYXRlCiB7CiAgICAgcmV0dXJu
IF9kZWxlZ2F0ZS5nZXQoKS5nZXQoKTsKQEAgLTY2OCw0ICs2NzMsNDIgQEAgc3RhdGljIFZlY3Rv
cjxXZWJLaXQ6OldlYnNpdGVEYXRhUmVjb3JkPiB0b1dlYnNpdGVEYXRhUmVjb3JkcyhOU0FycmF5
ICpkYXRhUmVjb3IKICNlbmRpZgogfQogCistICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
cworeworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwor
fQorCistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4p
KHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnNlbmRO
ZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKFtjb21wbGV0aW9uSGFuZGxl
ciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKKyAgICB9KTsKK30KKworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2ls
bFN1c3BlbmRJbW1pbmVudGx5Cit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3Jr
UHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKKworfQorCistICh2b2lk
KV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7Cit9CisKKy0gKHZvaWQpX3N5bnRoZXNpemVB
cHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAoreworICAgIF93ZWJzaXRlRGF0YVN0b3Jl
LT5uZXR3b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7
Cit9CisKKy0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIKK3sKKyAgICByZXR1cm4g
X3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkucHJvY2Vzc0lkZW50aWZpZXIoKTsK
K30KKworKyAodm9pZClfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
Cit7CisgICAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjptYWtlTmV4dE5ldHdvcmtQcm9jZXNz
TGF1bmNoRmFpbEZvclRlc3RpbmcoKTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRl
LmgKaW5kZXggOTkzMjAxMDQ2YjU1MWMzZjI4ZGYyZGMwYTAzNDZkN2JjNzlhYzVmNC4uYTg1NmJl
NmY1OGJkMzAzYzU5ODJiNmJmZjhjMmVmM2M5MDg1MjAxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJp
dmF0ZS5oCkBAIC04NSw5ICs4NSwxOSBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwg
X1dLV2Vic2l0ZURhdGFTdG9yZUZldGNoT3B0aW9ucykgewogCiAtICh2b2lkKV9yZW5hbWVPcmln
aW46KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKiluZXdOYW1lIGZvckRhdGFPZlR5cGVzOihO
U1NldDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiko
dm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9wZXJ0eSAobnVs
bGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4g
X2RlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4p
KHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElf
QVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClf
c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistIChwaWRfdClfbmV0d29y
a1Byb2Nlc3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlv
cyhXS19JT1NfVEJBKSk7CisrICh2b2lkKV9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFp
bEZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKTsKKwogQGVuZAogCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAK
aW5kZXggMWVlNzNlYmMwZWEwMzZmODZiM2ZlOTQ0MTQ5MDcyZTZhYzRkYzc2Ny4uNzcwMTQ5OTgz
NmVlNDRmOWFjZjBlMjcwZDcwYzk1ZDE2YmU2NzhkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKQEAgLTIx
LDYgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRDb29raWVN
YW5hZ2VyLmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAi
U291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZS5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1h
bmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlLmgiCkBA
IC01Niw2ICs1NywxMiBAQCBlbnVtIHsKIH07CiAKIHN0cnVjdCBfV2ViS2l0Q29va2llTWFuYWdl
clByaXZhdGUgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlcigpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoZGF0YU1hbmFnZXIpOworICAgICAgICByZXR1cm4g
d2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGRhdGFNYW5hZ2VyKS5uZXR3b3Jr
UHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICB9CisKICAgICBQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGRhdGFNYW5hZ2VyKTsKQEAg
LTY0LDggKzcxLDcgQEAgc3RydWN0IF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSB7CiAKICAg
ICB+X1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlKCkKICAgICB7Ci0gICAgICAgIGZvciAoYXV0
byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMo
ZGF0YU1hbmFnZXIpKQotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29v
a2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgp
LCBudWxscHRyKTsKKyAgICAgICAgY29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2Fs
bGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOwogICAgIH0KIAogICAgIFdlYktpdFdlYnNpdGVE
YXRhTWFuYWdlciogZGF0YU1hbmFnZXI7CkBAIC0xMzksMTEgKzE0NSw5IEBAIFdlYktpdENvb2tp
ZU1hbmFnZXIqIHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUoV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyKiBkYXRhTWFuCiB7CiAgICAgV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciA9IFdFQktJ
VF9DT09LSUVfTUFOQUdFUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQ09PS0lFX01BTkFHRVIs
IG51bGxwdHIpKTsKICAgICBtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlciA9IGRhdGFNYW5hZ2Vy
OwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKSB7Ci0gICAgICAgIHBy
b2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2ll
T2JzZXJ2ZXJDYWxsYmFjayhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW21hbmFnZXJdIHsK
LSAgICAgICAgICAgIGdfc2lnbmFsX2VtaXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7
Ci0gICAgICAgIH0pOwotICAgIH0KKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCku
c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW21h
bmFnZXJdIHsKKyAgICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxzW0NIQU5HRURd
LCAwKTsKKyAgICB9KTsKICAgICByZXR1cm4gbWFuYWdlcjsKIH0KIApAQCAtMTczLDggKzE3Nyw3
IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UoV2Vi
S2l0Q29va2llTWFuYWdlciogbWFuYWdlciwKICAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFs
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJr
aXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1h
bmFnZXIpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCktPnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgU3RyaW5nOjpm
cm9tVVRGOChmaWxlbmFtZSksIHRvU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZShzdG9y
YWdlKSk7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgU3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZSksIHRvU291
cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZShzdG9yYWdlKSk7CiB9CiAKIC8qKgpAQCAtMTky
LDggKzE5NSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5
KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIFdlYktpCiB7CiAgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlcikpOwogCi0gICAgZm9yIChhdXRv
KiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyht
YW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVt
ZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSht
YW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGlj
eSksIFtdKCkgeyB9KTsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuc2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29v
a2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKIH0KIAogLyoqCkBAIC0yMjQsNyAr
MjI2LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3koV2Vi
S2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgR0NhbmMKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+
KCktPmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3kpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuZ2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZNb3Zl
KHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgewogICAgICAg
ICBnX3Rhc2tfcmV0dXJuX2ludCh0YXNrLmdldCgpLCB0b1dlYktpdENvb2tpZUFjY2VwdFBvbGlj
eShwb2xpY3kpKTsKICAgICB9KTsKIH0KQEAgLTI2OSwxMSArMjcxLDcgQEAgdm9pZCB3ZWJraXRf
Y29va2llX21hbmFnZXJfYWRkX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBT
b3VwQ29va2llKgogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29va2llKTsKIAogICAgIEdSZWZQdHI8
R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwg
Y2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4g
ZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAg
Ly8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZp
cnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRX
ZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFn
ZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCktPnNldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6
Q29va2llKGNvb2tpZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKKyAgICBtYW5hZ2Vy
LT5wcml2LT5jb29raWVNYW5hZ2VyKCkuc2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9u
SUQoKSwgeyBXZWJDb3JlOjpDb29raWUoY29va2llKSB9LCBbdGFzayA9IFdURk1vdmUodGFzayld
KCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJVRSk7CiAg
ICAgfSk7CiB9CkBAIC0zMjAsMTEgKzMxOCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X2dldF9jb29raWVzKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIGNvbnN0IGdjaGFyCiAg
ICAgZ19yZXR1cm5faWZfZmFpbCh1cmkpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFk
b3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRh
dGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1l
IFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2Vz
cyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29s
LgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vz
c1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2ll
cyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21VVEY4
KHVyaSkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29r
aWU+JiBjb29raWVzKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLmdldENv
b2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVSTChVUkwoKSwgU3RyaW5nOjpmcm9t
VVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiYgY29va2llcykgewogICAgICAgICBHTGlzdCogY29va2llc0xpc3QgPSBudWxscHRy
OwogICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGNvb2tpZXMpCiAgICAgICAgICAgICBjb29r
aWVzTGlzdCA9IGdfbGlzdF9wcmVwZW5kKGNvb2tpZXNMaXN0LCBjb29raWUudG9Tb3VwQ29va2ll
KCkpOwpAQCAtMzc4LDExICszNzIsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxl
dGVfY29va2llKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIFNvdXBDb29raQogICAgIGdf
cmV0dXJuX2lmX2ZhaWwoY29va2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9w
dEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRh
KSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBT
UUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mg
d2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4K
LSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQ
b29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmRlbGV0ZUNvb2tp
ZShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0
YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdl
cigpLmRlbGV0ZUNvb2tpZShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29v
a2llKGNvb2tpZSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19y
ZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKaW5k
ZXggODliZTU2YWQ3MWQ3MTU2OTEyYTI2OTE1MzA1N2RmNTI3Y2RkNDQ2MC4uY2ZmMDM1ODZkZjhh
MWZiOTZhNjJhMDE3YTNjNDZlNWY0MGRlMmQzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKQEAgLTQwNCw3ICs0MDQs
NiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoR09iamVjdCogb2Jq
ZWN0KQogICAgICAgICBwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIgPSBhZG9wdEdSZWYod2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldygibG9jYWwtc3RvcmFnZS1kaXJlY3RvcnkiLCBwcml2
LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkuZGF0YSgpLCBudWxscHRyKSk7CiAKICAgICBwcml2LT5w
cm9jZXNzUG9vbCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlvbik7Ci0gICAg
cHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFByaW1hcnlEYXRhU3RvcmUod2Via2l0V2Vic2l0ZURhdGFN
YW5hZ2VyR2V0RGF0YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkpOwogICAg
IHByaXYtPnByb2Nlc3NQb29sLT5zZXRVc2VyTWVzc2FnZUhhbmRsZXIoW3dlYkNvbnRleHRdKFVz
ZXJNZXNzYWdlJiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyTWVzc2FnZSYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikgewogICAgICAgICAvLyBTaW5rIHRoZSBmbG9hdGluZyBy
ZWYuCiAgICAgICAgIEdSZWZQdHI8V2ViS2l0VXNlck1lc3NhZ2U+IHVzZXJNZXNzYWdlID0gd2Vi
a2l0VXNlck1lc3NhZ2VDcmVhdGUoV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwpAQCAtMTYwMyw4ICsxNjAyLDggQEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRf
cHJlZmV0Y2hfZG5zKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGhvc3QK
ICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSk7CiAg
ICAgZ19yZXR1cm5faWZfZmFpbChob3N0bmFtZSk7CiAKLSAgICBpZiAoY29udGV4dC0+cHJpdi0+
ZG5zUHJlZmV0Y2hlZEhvc3RzLmFkZChob3N0bmFtZSkuaXNOZXdFbnRyeSkKLSAgICAgICAgY29u
dGV4dC0+cHJpdi0+cHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5nOjpmcm9tVVRGOChob3N0bmFtZSkp
KTsKKyAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
R2V0RGF0YVN0b3JlKGNvbnRleHQtPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSk7Cisg
ICAgd2Vic2l0ZURhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpQcmVmZXRjaEROUyhTdHJpbmc6OmZyb21VVEY4KGhvc3RuYW1lKSksIDApOwog
ICAgIGNvbnRleHQtPnByaXYtPmRuc1ByZWZldGNoSHlzdGVyZXJpcy5pbXB1bHNlKCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21h
dGlvblNlc3Npb24uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5jcHAKaW5kZXggNGFiNDdmZmY1OTExZWVjMzdlNTZiYzViYmIzMjll
YmFlYTdkMzg2NS4uMzAwNmY0ZmFlNmM0M2MyNmJmNDA4MjJiNmRlODY4ZWYyZTAyY2ZiYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9u
U2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5jcHAKQEAgLTEzOTIsOCArMTM5Miw4IEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uCiAKICAgICBjb29raWUuaHR0cE9ubHkgPSAqaHR0cE9ubHk7CiAKLSAgICBXZWJD
b29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVt
ZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29r
aWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2Nh
bGxiYWNrXSgpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIgPSBw
YWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7
CisgICAgY29va2llTWFuYWdlci5zZXRDb29raWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5z
ZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2NhbGxiYWNrXSgpIHsKICAgICAgICAgY2FsbGJhY2st
PnNlbmRTdWNjZXNzKCk7CiAgICAgfSk7CiB9CkBAIC0xNDA5LDggKzE0MDksOCBAQCBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpk
ZWxldGVBbGxDb29raWVzKAogCiAgICAgU3RyaW5nIGhvc3QgPSBhY3RpdmVVUkwuaG9zdCgpLnRv
U3RyaW5nKCk7CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBt
X3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBj
b29raWVNYW5hZ2VyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRh
U3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVl
ZGVkKGhvc3QpIH0pOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlciA9
IHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIo
KTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vi
c2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJl
Zml4SWZOZWVkZWQoaG9zdCkgfSk7CiAKICAgICByZXR1cm4geyB9OwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaAppbmRleCA0MWMwYTBmYmY1
MDZlZmExNDA4YmNlZjlhZjhhOTBiODVhMWFkMDhhLi40ZjM5OGI1MzBmNjA4NTc1Yzk2N2I4M2M3
NGZhMmY0MzI4ZjZjZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhp
bGlhcnlQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlh
cnlQcm9jZXNzUHJveHkuaApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+
QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KCk7CiAKICAgICB2b2lkIGNvbm5lY3QoKTsKLSAgICB2b2lk
IHRlcm1pbmF0ZSgpOworICAgIHZpcnR1YWwgdm9pZCB0ZXJtaW5hdGUoKTsKIAogICAgIHZpcnR1
YWwgUHJvY2Vzc1Rocm90dGxlciYgdGhyb3R0bGVyKCkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudC5oCmluZGV4IGRiZTQ0Zjk1OTQxMDUxMTIxNTEyOGQyOWQyMTRlZWUwNzRh
YWY4NGMuLjRjODQ1YTBlYzcyNTY1OWNmZTc5Y2VhMzVkM2NiYTk2NjgzNDYxNDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oCkBAIC00MSwxMSArNDEsMTEgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiBjbGFzcyBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTsKIAogY2xh
c3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IGZpbmFsIDogcHVibGljIEFQSTo6
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IHsKLXByaXZhdGU6CitwdWJsaWM6CiAgICAgdm9p
ZCBzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkmLCBMZWdhY3lD
dXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBmaW5hbDsK
ICAgICB2b2lkIHN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Jiwg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCkgZmluYWw7CiAgICAgdm9pZCBpbnZhbGlkYXRlKExlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5JikgZmluYWw7Ci0KK3ByaXZhdGU6CiAgICAgSGFz
aE1hcDxMZWdhY3lDdXN0b21Qcm90b2NvbElELCBSZXRhaW5QdHI8V0tDdXN0b21Qcm90b2NvbExv
YWRlcj4+IG1fbG9hZGVyTWFwOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KaW5kZXggNzZkN2E2NDA0MWEyOTFkNWYy
OTczNTE3NmUzMWVhNzBmNWVkNTU2Yy4uMTllZmNhNmE2NDBjYjJmMzFjMmE4NzU1MDZiMWQ2Njlk
NmRjNzZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJv
Y2Vzc1Bvb2xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
cm9jZXNzUG9vbENvY29hLm1tCkBAIC0xMzQsOCArMTM0LDkgQEAgc3RhdGljIHZvaWQgcmVnaXN0
ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVBy
b2Nlc3NTdXBwcmVzc2lvblN0YXRlKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAg
ICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcm9j
ZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hX
ZWJzaXRlRGF0YVN0b3JlKFtlbmFibGVkID0gcHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpXSAo
V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3Jr
UHJvY2VzcygpLnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoZW5hYmxlZCk7CisgICAgfSk7
CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBpZiAoIW1fcHJvY2Vzc1N1
cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpKQpAQCAtMTY2LDggKzE2Nyw2
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiAgICAgaWYgKCFb
W05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiV2ViS2l0
U3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIiXSkKICAgICAgICAgaW5zdGFsbE1lbW9yeVBy
ZXNzdXJlSGFuZGxlcigpOwogCi0gICAgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50KG1ha2VVbmlxdWU8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKTsKLQog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBp
ZiAoIV9NR0NhY2hlVmFsaWQoKSkgewogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBeewpA
QCAtNDkzLDIyICs0OTIsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYQogCiAgICAgTlNVc2Vy
RGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRz
XTsKIAotICAgIHsKLSAgICAgICAgYm9vbCBpc1NhZmFyaSA9IGZhbHNlOwotICAgICAgICBib29s
IGlzTWluaUJyb3dzZXIgPSBmYWxzZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAg
ICBpc1NhZmFyaSA9IFdlYkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01vYmlsZVNhZmFyaSgpOwot
ICAgICAgICBpc01pbmlCcm93c2VyID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTWluaUJy
b3dzZXIoKTsKLSNlbGlmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3Jl
OjpNYWNBcHBsaWNhdGlvbjo6aXNTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdl
YkNvcmU6Ok1hY0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZW5kaWYKLSAgICAgICAg
aWYgKGlzU2FmYXJpIHx8IGlzTWluaUJyb3dzZXIpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBQ
cm94eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcgKilXZWJL
aXQySFRUUFByb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBzUHJveHkg
PSBVUkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhU
VFBTUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcGFyYW1ldGVy
cy5uZXR3b3JrQVRTQ29udGV4dCA9IGFkb3B0Q0YoX0NGTmV0d29ya0NvcHlBVFNDb250ZXh0KCkp
OwogCiAgICAgcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciA9
IFtkZWZhdWx0cyBib29sRm9yS2V5OldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVy
RGVmYXVsdHNLZXldOwpAQCAtNTIyLDEyICs1MDUsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YQogICAgIE5TTnVtYmVyICpkYXRhYmFzZUVuYWJsZWRWYWx1ZSA9IFtkZWZhdWx0cyBvYmplY3RG
b3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5hbERlYnVnJUAiLCBXZWJQ
cmVmZXJlbmNlc0tleTo6aXNJVFBEYXRhYmFzZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygp
LmdldCgpXV07CiAgICAgaWYgKGRhdGFiYXNlRW5hYmxlZFZhbHVlKQogICAgICAgICBwYXJhbWV0
ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gZGF0YWJhc2VFbmFibGVkVmFsdWUuYm9vbFZh
bHVlOwotICAgIGVsc2UKLSAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFz
ZSA9IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5pc0lUUERhdGFiYXNlRW5hYmxl
ZCgpOwogCiAgICAgcGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUg
PSBbZGVmYXVsdHMgYm9vbEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4cGVy
aW1lbnRhbCVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07Ci0KLSAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBI
YXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRD
cm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cGxhdGZvcm1JbnZhbGlkYXRlQ29udGV4dCgpCkBAIC02MDYsMTEgKzU4NSw2IEBAIGJvb2wg
V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSBjb25zdAogICAgIHJl
dHVybiAhbV91c2VyT2JzZXJ2YWJsZVBhZ2VDb3VudGVyLnZhbHVlKCkgJiYgIW1fcHJvY2Vzc1N1
cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpOwogfQogCi1ib29sIFdlYlBy
b2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBT
dHJpbmcmIGVudGl0bGVtZW50KQotewotICAgIHJldHVybiBXVEY6Omhhc0VudGl0bGVtZW50KGVu
c3VyZU5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVudGl0
bGVtZW50LnV0ZjgoKS5kYXRhKCkpOwotfQotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYg
IVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogZmxvYXQgV2ViUHJvY2Vzc1Bvb2w6OmRpc3BsYXlCcmln
aHRuZXNzKCkKIHsKQEAgLTk0NywyMyArOTIxLDQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVn
aXN0ZXJIaWdoRHluYW1pY1JhbmdlQ2hhbmdlQ2FsbGJhY2soKQogfQogI2VuZGlmCiAKLU9TT2Jq
ZWN0UHRyPHhwY19vYmplY3RfdD4gV2ViUHJvY2Vzc1Bvb2w6OnhwY0VuZHBvaW50TWVzc2FnZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZW5kcG9pbnRNZXNzYWdlOwotfQotCi12b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhPU09i
amVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSkKLXsKLSAgICBtX2VuZHBvaW50
TWVzc2FnZSA9IGVuZHBvaW50TWVzc2FnZTsKLQotICAgIGZvciAoYXV0byBwcm9jZXNzIDogbV9w
cm9jZXNzZXMpIHsKLSAgICAgICAgaWYgKHByb2Nlc3MtPnN0YXRlKCkgIT0gQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5OjpTdGF0ZTo6UnVubmluZykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAoIXByb2Nlc3MtPmNvbm5lY3Rpb24oKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBhdXRvIGNvbm5lY3Rpb24gPSBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rp
b24oKTsKLSAgICAgICAgeHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNzYWdlKGNvbm5lY3Rpb24sIGVu
ZHBvaW50TWVzc2FnZS5nZXQoKSk7Ci0gICAgfQotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
LmNwcAppbmRleCBjNWRlNGU3ZDBmNTkxOTRmNDNhMDIzYjA4OWUzNzJjNThjZjhlZTA2Li5mN2Nm
Zjg1MmYwYmE2ZDAxNTUxMTY1ZGQ4YTlmN2Q1NzYzYjAwN2QzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCkBAIC03NSw4ICs3
NSw4IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6Y2FuY2VsKCkKICAgICBpZiAoIW1fcHJvY2Vzc1Bv
b2wpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3
b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxv
YWQobV9kb3dubG9hZElEKSwgMCk7CisgICAgaWYgKG1fZGF0YVN0b3JlKQorICAgICAgICBtX2Rh
dGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94
eTo6aW52YWxpZGF0ZSgpCkBAIC0xMDMsMTUgKzEwMywxMyBAQCBXZWJQYWdlUHJveHkqIERvd25s
b2FkUHJveHk6Om9yaWdpbmF0aW5nUGFnZSgpIGNvbnN0CiAjaWYgUExBVEZPUk0oQ09DT0EpCiB2
b2lkIERvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVzcyhjb25zdCBVUkwmIFVSTCkKIHsKLSAg
ICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxl
OwotICAgICAgICBib29sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlKFVSTC5maWxlU3lzdGVtUGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpU
eXBlOjpSZWFkV3JpdGUsIGhhbmRsZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNh
bmRib3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsKLSAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQ
cm9ncmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFuZGxlKSwgMCk7Ci0gICAgfQorICAgIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7CisgICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVu
c2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgo
KSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOworICAgIEFTU0VS
VF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9u
KTsKKyAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhh
bmRsZSksIDApOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQogCkBAIC0xMzEsMTEgKzEy
OSwxMCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRpZFN0YXJ0KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBzdWdnZQogCiB2b2lkIERvd25sb2FkUHJveHk6OmRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYm
IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCB1aW50NjRfdCBjaGFsbGVuZ2VJRCkKIHsKLSAgICBp
ZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFtX3Byb2Nlc3NQb29sIHx8ICFtX2RhdGFTdG9y
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZVBy
b3h5ID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eTo6Y3JlYXRlKFdURk1vdmUoYXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UpLCBjaGFsbGVuZ2VJRCwgbWFrZVJlZigqbV9wcm9jZXNzUG9vbC0+
bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkpLCBudWxscHRyKTsKLQorICAgIGF1dG8gYXV0
aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk6
OmNyZWF0ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgY2hhbGxlbmdlSUQsIG1h
a2VSZWYoKm1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKSksIG51bGxw
dHIpOwogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKCp0aGlzLCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5Lmdl
dCgpKTsKIH0KIApAQCAtMTQ2LDE1ICsxNDMsMTAgQEAgdm9pZCBEb3dubG9hZFByb3h5Ojp3aWxs
U2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYgcHJvcG9zZWRSZXF1ZXN0LCBjb25zdCBSZXMK
IAogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkud2lsbFNlbmRSZXF1ZXN0KCp0
aGlzLCBXVEZNb3ZlKHByb3Bvc2VkUmVxdWVzdCksIHJlZGlyZWN0UmVzcG9uc2UsIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKFJlc291cmNlUmVxdWVzdCYmIG5ld1JlcXVl
c3QpIHsKICAgICAgICAgbV9yZWRpcmVjdENoYWluLmFwcGVuZChuZXdSZXF1ZXN0LnVybCgpKTsK
LQotICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fcHJvY2Vzc1Bvb2wpCisgICAgICAgIGlm
ICghcHJvdGVjdGVkVGhpcy0+bV9kYXRhU3RvcmUpCiAgICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgYXV0byogbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb3RlY3RlZFRoaXMtPm1fcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3NQcm94
eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVXaWxsU2VuZFJlcXVlc3QocHJv
dGVjdGVkVGhpcy0+bV9kb3dubG9hZElELCBuZXdSZXF1ZXN0KSwgMCk7CisgICAgICAgIGF1dG8m
IG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRUaGlzLT5tX2RhdGFTdG9yZS0+bmV0d29y
a1Byb2Nlc3MoKTsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3NQcm94eS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q29udGludWVXaWxsU2VuZFJlcXVlc3QocHJvdGVjdGVkVGhpcy0+bV9k
b3dubG9hZElELCBuZXdSZXF1ZXN0KSwgMCk7CiAgICAgfSk7CiB9CiAKQEAgLTE3OSwxNiArMTcx
LDE0IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVk
RmlsZW5hbWVBc3luYyhEb3dubG9hZElEIGRvd25sCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQo
KS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VS
ZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUp
LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBkb3dubG9hZElEID0gZG93
bmxvYWRJRF0gKEFsbG93T3ZlcndyaXRlIGFsbG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRp
b24pIHsKKyAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKCp0aGlzLCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2Fu
aXRpemVTdWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSksIFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRvd25sb2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxv
d092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAgICAgICBpZiAoIWRlc3RpbmF0
aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
KGRlc3RpbmF0aW9uLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hF
eHRlbnNpb25IYW5kbGUpOwogCi0gICAgICAgIGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICAgICAg
aWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpD
b250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3Rp
bmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092
ZXJ3cml0ZTo6WWVzKSwgMCk7CisgICAgICAgIG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3du
bG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CiAgICAg
fSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5TWFwLmNwcAppbmRleCA3NmEwNzE1N2I1OTFhYWNlNTBmMTVkMTUyNWRiY2Zi
OGM2YTRiYmM4Li5kNzRhOGZhNmM2NGM4ODYzNWY5ZWI3NWNhNzNlNzBmZDk0NmNhMDJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1h
cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJv
eHlNYXAuY3BwCkBAIC00NCw3ICs0NCw3IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogRG93bmxv
YWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm9jZXNz
KQotICAgIDogbV9wcm9jZXNzKG1ha2VXZWFrUHRyKHByb2Nlc3MpKQorICAgIDogbV9wcm9jZXNz
KHByb2Nlc3MpCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLCBtX3Nob3VsZFRha2VBc3NlcnRp
b24oV1RGOjpwcm9jZXNzSGFzRW50aXRsZW1lbnQoImNvbS5hcHBsZS5tdWx0aXRhc2tpbmcuc3lz
dGVtYXBwYXNzZXJ0aW9ucyIpKQogI2VuZGlmCkBAIC03MCwxNCArNzAsMTIgQEAgdm9pZCBEb3du
bG9hZFByb3h5TWFwOjpwbGF0Zm9ybURlc3Ryb3koKQogCiB2b2lkIERvd25sb2FkUHJveHlNYXA6
OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCkKIHsKLSAgICBpZiAobV9wcm9jZXNzKQot
ICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNh
dGlvbkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCksIDApOwog
fQogCiB2b2lkIERvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3Vu
ZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCksIDAp
OworICAgIG1fcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRp
b25XaWxsRW50ZXJGb3JlZ3JvdW5kKCksIDApOwogfQogCiBEb3dubG9hZFByb3h5JiBEb3dubG9h
ZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9y
ZSwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBX
ZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKQEAgLTkyLDEzICs5MCwxMiBAQCBEb3dubG9h
ZFByb3h5JiBEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRh
U3RvcmUmIGRhdGFTdG9yZQogICAgICAgICBtX2Rvd25sb2FkVUlBc3NlcnRpb24gPSBtYWtlVW5p
cXVlPFByb2Nlc3NBc3NlcnRpb24+KGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIldlYktpdCBkb3du
bG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAog
ICAgICAgICBBU1NFUlQoIW1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uKTsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQobV9wcm9jZXNzKTsKLSAgICAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdB
c3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy0+cHJvY2Vz
c0lkZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBl
OjpVbmJvdW5kZWROZXR3b3JraW5nKTsKKyAgICAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3Nl
cnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy5wcm9jZXNzSWRl
bnRpZmllcigpLCAiV2ViS2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVu
Ym91bmRlZE5ldHdvcmtpbmcpOwogCiAgICAgICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5z
aW9uLCAiVUlQcm9jZXNzIHRvb2sgJ1dlYktpdCBkb3dubG9hZHMnIGFzc2VydGlvbnMgZm9yIFVJ
UHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKICAgICB9CiAKLSAgICBtX3Byb2Nlc3MtPmFk
ZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3dubG9h
ZFByb3h5LmdldCgpKTsKKyAgICBtX3Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkUHJveHktPmRv
d25sb2FkSUQoKS5kb3dubG9hZElEKCksIGRvd25sb2FkUHJveHkuZ2V0KCkpOwogCiAgICAgcmV0
dXJuIGRvd25sb2FkUHJveHk7CiB9CkBAIC0xMDksMTIgKzEwNiw5IEBAIHZvaWQgRG93bmxvYWRQ
cm94eU1hcDo6ZG93bmxvYWRGaW5pc2hlZChEb3dubG9hZFByb3h5JiBkb3dubG9hZFByb3h5KQog
CiAgICAgUkVMRUFTRV9MT0coTG9hZGluZywgIlJlbW92aW5nIGRvd25sb2FkICUiIFBSSXU2NCAi
IGZyb20gVUlQcm9jZXNzIERvd25sb2FkUHJveHlNYXAiLCBkb3dubG9hZElELmRvd25sb2FkSUQo
KSk7CiAKLSAgICAvLyBUaGUgRG93bmxvYWRQcm94eSBtYXkgYmUgaG9sZGluZyB0aGUgbGFzdCBy
ZWZlcmVuY2UgdG8gdGhlIHByb2Nlc3MgcG9vbC4KLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQ
b29sID0gbWFrZVJlZlB0cihtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkpOwotCiAgICAgQVNTRVJU
KG1fZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsKIAotICAgIG1fcHJvY2Vzcy0+cmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKKyAgICBtX3Byb2Nlc3MucmVtb3Zl
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKICAgICBkb3dubG9hZFByb3h5LmludmFs
aWRhdGUoKTsKICAgICBtX2Rvd25sb2Fkcy5yZW1vdmUoZG93bmxvYWRJRCk7CiAKQEAgLTEzMywx
NSArMTI3LDEzIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6aW52YWxpZGF0ZSgpCiAgICAgZm9y
IChjb25zdCBhdXRvJiBkb3dubG9hZCA6IG1fZG93bmxvYWRzLnZhbHVlcygpKSB7CiAgICAgICAg
IGRvd25sb2FkLT5wcm9jZXNzRGlkQ2xvc2UoKTsKICAgICAgICAgZG93bmxvYWQtPmludmFsaWRh
dGUoKTsKLSAgICAgICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWQtPmRvd25sb2Fk
SUQoKS5kb3dubG9hZElEKCkpOworICAgICAgICBtX3Byb2Nlc3MucmVtb3ZlTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25s
b2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKICAgICB9CiAKICAgICBtX2Rvd25sb2Fk
cy5jbGVhcigpOwogICAgIG1fZG93bmxvYWRVSUFzc2VydGlvbiA9IG51bGxwdHI7CiAgICAgbV9k
b3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBudWxscHRyOwogICAgIFJFTEVBU0VfTE9HKFBy
b2Nlc3NTdXNwZW5zaW9uLCAiVUlQcm9jZXNzIERvd25sb2FkUHJveHlNYXAgaW52YWxpZGF0ZWQg
LSBSZWxlYXNlZCAnV2ViS2l0IGRvd25sb2FkcycgYXNzZXJ0aW9ucyBmb3IgVUlQcm9jZXNzIGFu
ZCBOZXR3b3JrUHJvY2VzcyIpOwotCi0gICAgbV9wcm9jZXNzID0gbnVsbHB0cjsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAppbmRleCAzYmUyMDc5YTBmMmM0YjUzNzA2MmNlMTMw
MGUxY2Q1ZGE0NDRmZmJlLi40ZmEwMDFiZDdmYWUxY2VkMDI0ZDJiOTFmMjAxNzBmZjk5NDUyOGJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQ
cm94eU1hcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3Jt
Q3JlYXRlKCk7CiAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKIAotICAgIFdlYWtQdHI8TmV0
d29ya1Byb2Nlc3NQcm94eT4gbV9wcm9jZXNzOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG1f
cHJvY2VzczsKICAgICBIYXNoTWFwPERvd25sb2FkSUQsIFJlZlB0cjxEb3dubG9hZFByb3h5Pj4g
bV9kb3dubG9hZHM7CiAKICAgICBib29sIG1fc2hvdWxkVGFrZUFzc2VydGlvbiB7IGZhbHNlIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3Rv
Y29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eS5jcHAKaW5kZXggOGMyM2JiZThjMDZhMTU5OWNiOWI5MTZhMGIzMmFmYjM3Nzgz
ZjMwNS4uZDZjMzMyM2RkOTNlNjlmNTZhZGY2YmUwZDJhMWIxNGYwODIyNDUxMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclBy
b3h5LmNwcApAQCAtNDQsMTcgKzQ0LDE3IEBAIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclBy
b3h5Ojp+TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKQogCiB2b2lkIExlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9j
b2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RhcnRMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2Nv
bElELCByZXF1ZXN0KTsKKyAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkuY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50KCkuc3RhcnRMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1
ZXN0KTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RvcExv
YWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElEKQogewotICAgIG1f
bmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKKyAgICBtX25ldHdv
cmtQcm9jZXNzUHJveHkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RvcExvYWRpbmco
KnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHku
cHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5pbnZhbGlkYXRlKCp0
aGlzKTsKKyAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50KCkuaW52YWxpZGF0ZSgqdGhpcyk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHk6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3QoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJ
RCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmNwcAppbmRleCBjMWY0NzA4YjgxY2ZhNTNhYjEyMmMyOTQ0Njc1ZTc4MjUxNjcxMjFm
Li5hYjg0NWIyNjk3OTk5NjRjNWRiNTRlNTNlMzA5ZjY5NjE1NDllOTIxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5j
cHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAK
ICNpbmNsdWRlICJBUElDb250ZW50UnVsZUxpc3QuaCIKKyNpbmNsdWRlICJBUElDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQuaCIKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVBy
b3h5LmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25NYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRG93
bmxvYWRQcm94eU1hcC5oIgpAQCAtMzUsNiArMzYsNyBAQAogI2luY2x1ZGUgIkxlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2VuZGlmCisjaW5jbHVkZSAiTGVnYWN5R2xvYmFs
U2V0dGluZ3MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NvbnRl
bnRSdWxlTGlzdE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbkluZm8uaCIKQEAgLTQ4LDYgKzUwLDcgQEAKICNpbmNsdWRlICJTaG91bGRHcmFuZGZh
dGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5j
bHVkZSAiV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QuaCIKKyNpbmNsdWRlICJXZWJDb29raWVN
YW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbmNsdWRlICJX
ZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKQEAgLTU4LDgg
KzYxLDEwIEBACiAjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuaCIKICNp
bmNsdWRlICJXZWJzaXRlRGF0YS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVDbGllbnQu
aCIKKyNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFp
bi5oPgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KICNpbmNsdWRlIDx3dGYv
Q29tcGxldGlvbkhhbmRsZXIuaD4KIAogI2lmIEVOQUJMRShTRUNfSVRFTV9TSElNKQpAQCAtNzAs
MjAgKzc1LDEyMiBAQAogI2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogI2VuZGlm
CiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQuaCIKKyNlbmRpZgorCiAjZGVmaW5lIE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9u
KSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0aW9uLCBjb25uZWN0aW9uKCkpCiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLU5ldHdvcmtQcm9jZXNzUHJv
eHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotICAg
IDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KHByb2Nlc3NQb29sLmFsd2F5c1J1bnNBdEJhY2tncm91
bmRQcmlvcml0eSgpKQotICAgICwgbV9wcm9jZXNzUG9vbChwcm9jZXNzUG9vbCkKK3N0YXRpYyBI
YXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkqPiYgbmV0d29ya1Byb2Nlc3Nlc1NldCgpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxIYXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkqPj4gc2V0OworICAgIHJldHVybiBz
ZXQ7Cit9CisKK1ZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IE5ldHdvcmtQcm9jZXNz
UHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKQoreworICAgIFZlY3RvcjxSZWY8TmV0d29ya1By
b2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICBwcm9jZXNzZXMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzIDogbmV0d29ya1Byb2Nlc3Nlc1NldCgpKQorICAgICAgICBwcm9jZXNzZXMudW5j
aGVja2VkQXBwZW5kKCpuZXR3b3JrUHJvY2Vzcyk7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30K
Kworc3RhdGljIFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiYgZGVmYXVsdFByb2Nlc3MoKQor
eworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4+
IHByb2Nlc3M7CisgICAgcmV0dXJuIHByb2Nlc3MuZ2V0KCk7Cit9CisKK1JlZjxOZXR3b3JrUHJv
Y2Vzc1Byb3h5PiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkZWZhdWx0TmV0d29ya1Byb2Nlc3MoKQor
eworICAgIGlmICghZGVmYXVsdFByb2Nlc3MoKSkKKyAgICAgICAgZGVmYXVsdFByb2Nlc3MoKSA9
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZSgpOworICAgIHJldHVybiAqZGVmYXVsdFByb2Nl
c3MoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp0ZXJtaW5hdGUoKQoreworICAg
IEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6dGVybWluYXRlKCk7CisgICAgZGlkVGVybWluYXRlKCk7
Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkVGVybWluYXRlKCkKK3sKKyAgICBp
ZiAodGhpcyA9PSBkZWZhdWx0UHJvY2VzcygpLmdldCgpKQorICAgICAgICBkZWZhdWx0UHJvY2Vz
cygpID0gbnVsbHB0cjsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRp
b25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3Ig
YXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCisgICAgLy8gV2Ugc2hv
dWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNr
IG9uIG91ciBBUElzLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDAyNDYuCisgICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgeworICAgICAgICBjYWxs
T25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXNdIHsKKyAgICAgICAgICAgIHNlbmRDcmVhdGlvblBh
cmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBwYXJhbWV0ZXJzLnVy
bFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0
dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmUoKSk7CisgICAgcGFy
YW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9s
aWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hl
bWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KCkpOworICAgIHBh
cmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVjdG9yKExlZ2Fj
eUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTG9jYWwoKSk7
CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3MgPSBjb3B5VG9W
ZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVy
QXNOb0FjY2VzcygpKTsKKyAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxT
ZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOworICAgIGZvciAoYXV0byYgc2NoZW1l
IDogV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygp
KQorICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9j
b2xzLmFwcGVuZChzY2hlbWUpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKFN0
cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3Jh
Z2VEaXJlY3RvcnkoKTsgIWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29v
a2llU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9
IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7ICFjb250YWluZXJD
YWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBw
YXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAg
aWYgKFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50
QnVuZGxlRGlyZWN0b3J5KCk7ICFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5
LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5k
bGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworI2VuZGlmCisgICAgV2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOworICAgIHNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1l
dGVycyksIDApOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJh
Y2tncm91bmRQcmlvcml0eSgpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlBy
b2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wt
PmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vz
c1Bvb2xTaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkKK3sKKyAgICBmb3IgKGF1dG8q
IHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAg
ICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
TmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eSgpCisgICAgOiBBdXhpbGlh
cnlQcm9jZXNzUHJveHkoYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3Jp
dHkoKSkKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQorICAgICwg
bV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZVJlZjxMZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQ+KCkpCiAgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlclBy
b3h5KCp0aGlzKQorI2Vsc2UKKyAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1h
a2VVbmlxdWVSZWY8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkpCiAjZW5kaWYK
LSAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBwcm9jZXNzUG9vbC5zaG91bGRUYWtlVUlCYWNrZ3Jv
dW5kQXNzZXJ0aW9uKCkpCisgICAgLCBtX3Rocm90dGxlcigqdGhpcywgYW55UHJvY2Vzc1Bvb2xT
aG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkpCisgICAgLCBtX2Nvb2tpZU1hbmFnZXIo
V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoKnRoaXMpKQogewogICAgIGNvbm5lY3QoKTsK
KyAgICBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgdXBkYXRlUHJv
Y2Vzc0Fzc2VydGlvbigpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5hZGQodGhpcyk7CiB9
CiAKIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1Byb3h5KCkKQEAgLTk4LDYg
KzIwNSw3IEBAIE5ldHdvcmtQcm9jZXNzUHJveHk6On5OZXR3b3JrUHJvY2Vzc1Byb3h5KCkKIAog
ICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+
aW52YWxpZGF0ZSgpOworICAgIG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5yZW1vdmUodGhpcyk7CiB9
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1
bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMpCkBAIC0xMDUsMTUgKzIxMyw4IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1bmNo
ZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jCiAgICAgbGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSA9
IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6Ok5ldHdvcms7CiAgICAgQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKGxhdW5jaE9wdGlvbnMpOwogCi0gICAgaWYgKHBy
b2Nlc3NQb29sKCkuc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2woKS5zZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQ
cm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoZmFsc2UpOworICAgIGlmIChXZWJzaXRlRGF0YVN0
b3JlOjpzaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkK
ICAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nID0gdHJ1ZTsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShQTEFZU1RBVElPTikKLSAgICBsYXVu
Y2hPcHRpb25zLnByb2Nlc3NQYXRoID0gbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc1BhdGgo
KTsKLSAgICBsYXVuY2hPcHRpb25zLnVzZXJJZCA9IG1fcHJvY2Vzc1Bvb2wudXNlcklkKCk7Ci0j
ZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9uV2lsbE9wZW4o
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMTY2LDEyICsyNjcsMTIgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dy
b3VuZCkKICAgICB9CiB9CiAKLURvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNy
ZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJ
bmZvLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKK0Rvd25sb2FkUHJveHkmIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0
YVN0b3JlLCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBh
Z2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQogewogICAgIGlmICghbV9kb3dubG9hZFByb3h5TWFw
KQogICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAgPSBtYWtlVW5pcXVlPERvd25sb2FkUHJveHlN
YXA+KCp0aGlzKTsKIAotICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25s
b2FkUHJveHkoZGF0YVN0b3JlLCBtX3Byb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1l
SW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKKyAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5j
cmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVz
dCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNo
T3B0aW9uPiBmZXRjaE9wdGlvbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKFdlYnNpdGVEYXRh
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIzNyw4ICszMzgsMTEgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKQogewogICAgIGNsZWFyQ2FsbGJh
Y2tTdGF0ZXMoKTsKIAotICAgIC8vIFRlbGwgdGhlIG5ldHdvcmsgcHJvY2VzcyBtYW5hZ2VyIHRv
IGZvcmdldCBhYm91dCB0aGlzIG5ldHdvcmsgcHJvY2VzcyBwcm94eS4gVGhpcyB3aWxsIGNhdXNl
IHVzIHRvIGJlIGRlbGV0ZWQuCi0gICAgbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc0NyYXNo
ZWQoKnRoaXMpOworICAgIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBwcm90ZWN0ZWRUaGlzKCp0
aGlzKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFBy
b2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NDcmFzaGVk
KCp0aGlzKTsKKyAgICBmb3IgKGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgOiBtX3dlYnNpdGVEYXRh
U3RvcmVzKQorICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgq
dGhpcyk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y2xlYXJDYWxsYmFja1N0YXRl
cygpCkBAIC0yNTgsOSArMzYyLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNl
aXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGUKICAgICBpZiAo
ZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAobV9wcm9jZXNzUG9vbC5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rl
cikpCi0gICAgICAgIHJldHVybjsKLQogICAgIGRpZFJlY2VpdmVOZXR3b3JrUHJvY2Vzc1Byb3h5
TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKIH0KIApAQCAtMjc0LDggKzM3NSw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgSVBDCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkQ2xv
c2UoSVBDOjpDb25uZWN0aW9uJikKIHsKLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0g
bWFrZVJlZihtX3Byb2Nlc3NQb29sKTsKLQogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAg
ICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+aW52YWxpZGF0ZSgpOwogI2lmIEVOQUJMRShMRUdB
Q1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCkBAIC0zMzEsMTEgKzQzMCw2IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6
U2Vzc2lvbklEIHNlc3NpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXRvcE9y
aWdpbiB8fCAhbV9wcm9jZXNzUG9vbC5pc1NlcnZpY2VXb3JrZXJQYWdlSUQocGFnZUlEKSkgewot
ICAgICAgICBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uoc2Vzc2lvbklELCBXVEZNb3Zl
KGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBXZWJQYWdlUHJveHk6OmZvck1vc3RWaXNpYmxlV2ViUGFnZUlmQW55KHNlc3Npb25JRCwgKnRv
cE9yaWdpbiwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRCwg
YXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KSwgbmVnb3RpYXRlZExlZ2FjeVRMU10oYXV0byogcGFnZSkgbXV0YWJsZSB7CiAgICAgICAgIGlm
ICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zOTIsMTEgKzQ4Niw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hl
ciogbGF1bmNoZXIsIElQQzo6Q29uCiAgICAgICAgIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKG1f
cHJvY2Vzc1Bvb2wucHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKQotICAgICAgICBzZXRQcm9j
ZXNzU3VwcHJlc3Npb25FbmFibGVkKHRydWUpOwotI2VuZGlmCiAgICAgCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBpZiAoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uID0gdGhpcy0+
Y29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCkpCkBAIC0xMjA1LDcgKzEyOTQsOCBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3Rpbmco
UEFMOjpTZXNzaW9uSUQgc2VzcwogfQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXREb21h
aW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
PiYmIGRvbWFpbnMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS5zZXREb21haW5zV2l0aFVzZXJJbnRl
cmFjdGlvbihXVEZNb3ZlKGRvbWFpbnMpKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDog
V2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+
c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbj4geyBkb21haW5zIH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCiAKQEAgLTEyNTIsNDUgKzEzNDIsMzEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgQ29t
cGxldGkKICAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpG
bHVzaENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
Ci12b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3Rv
cmU+JiYgc3RvcmUpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24oV2Vic2l0
ZURhdGFTdG9yZSYgc3RvcmUpCiB7Ci0gICAgbV9zZXNzaW9uSURzLmFkZChzdG9yZS0+c2Vzc2lv
bklEKCkpOworICAgIG1fd2Vic2l0ZURhdGFTdG9yZXMuYWRkKHN0b3JlKTsKIAogICAgIGlmIChj
YW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
QWRkV2Vic2l0ZURhdGFTdG9yZSB7IHN0b3JlLT5wYXJhbWV0ZXJzKCkgfSwgMCk7Ci0gICAgYXV0
byBzZXNzaW9uSUQgPSBzdG9yZS0+c2Vzc2lvbklEKCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUucGFyYW1ldGVycygp
IH0sIDApOworICAgIGF1dG8gc2Vzc2lvbklEID0gc3RvcmUuc2Vzc2lvbklEKCk7CiAgICAgaWYg
KCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgewogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUtPnJlc29sdmVkSW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5KCkpOworICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVw
Z3JhZGUoc3RvcmUucmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CiAjZW5kaWYK
ICAgICB9CiB9CiAKLWJvb2wgTmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbihQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2Vzc2lvbklEcy5jb250
YWlucyhzZXNzaW9uSUQpOwotfQotCi12b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNl
c3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpyZW1vdmVTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiB7Ci0g
ICAgbV9zZXNzaW9uSURzLnJlbW92ZShzZXNzaW9uSUQpOworICAgIG1fd2Vic2l0ZURhdGFTdG9y
ZXMucmVtb3ZlKHdlYnNpdGVEYXRhU3RvcmUpOwogCiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkp
Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEZXN0cm95U2Vzc2lvbiB7
IHNlc3Npb25JRCB9LCAwKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkRlc3Ryb3lTZXNzaW9uIHsgd2Vic2l0ZURhdGFTdG9yZS5zZXNzaW9uSUQoKSB9LCAwKTsKIH0K
IAogV2Vic2l0ZURhdGFTdG9yZSogTmV0d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9y
ZUZyb21TZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIGlmIChzZXNz
aW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBp
ZiAoIVdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkgewotICAgICAg
ICAgICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFT
dG9yZSgpOwotICAgICAgICAgICAgaWYgKHdlYnNpdGVEYXRhU3RvcmUgJiYgd2Vic2l0ZURhdGFT
dG9yZS0+c2Vzc2lvbklEKCkgPT0gc2Vzc2lvbklEKQotICAgICAgICAgICAgICAgIHJldHVybiB3
ZWJzaXRlRGF0YVN0b3JlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIFdlYnNp
dGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNz
aW9uSUQpOworICAgIHJldHVybiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZv
clNlc3Npb25JRChzZXNzaW9uSUQpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJl
dHJpZXZlQ2FjaGVTdG9yYWdlUGFyYW1ldGVycyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCkBA
IC0xMzM3LDcgKzE0MTMsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZERlc3Ryb3lX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudAogI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2Vy
Q29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVn
aXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG1fcHJvY2Vzc1Bvb2wuZXN0
YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBXVEZN
b3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CisgICAgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0
aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgUmVnaXN0cmFibGVEb21haW4ge3JlZ2lzdHJhYmxl
RG9tYWlufSwgc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6d29ya2VyQ29udGV4dENvbm5lY3Rpb25Ob0xvbmdlck5l
ZWRlZChXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBpZGVudGlmaWVyKQpAQCAtMTUwMCwxNiAr
MTU3NiwzNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnByZWNvbm5lY3RUbyhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIFdlYlBhZ2VQcm94eUlkZQogICAgIHNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vzc2lvbklELCB3ZWJQYWdlUHJveHlJRCwgd2Vi
UGFnZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdh
dGluZ1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0KIAorc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bv
b2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQ
b29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChw
cm9jZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgYW55
UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8q
IHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAg
ICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCkKIHsKLSAgICBpZiAo
cHJvY2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55
UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQ
cm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9t
V2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMg
PSB0aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGZvcmVncm91
bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91bmQoKSwgMCk7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNCYWNrZ3JvdW5k
V2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2Vi
UHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkQmFj
a2dyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAg
ICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0
aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAg
ICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0Jh
Y2tncm91bmQoKSwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IGEwYjRjMWQ4OTM4ZTIwNWVjMzYxZGU1YzEw
ODI1ZDE4Mjc3NjUzYjQuLjBhZDYxODc4YmQ2MGRlYzJhZWYxNGExZTVjZmNkNWI3ZDcwYTc3M2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eS5oCkBAIC00NiwxMiArNDYsMTcgQEAKIAogI2lmIFBMQVRGT1JNKENPQ09BKQog
I2luY2x1ZGUgIlhQQ0V2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgPHd0Zi9PU09iamVjdFB0ci5o
PgogI2VuZGlmCiAKIG5hbWVzcGFjZSBJUEMgewogY2xhc3MgRm9ybURhdGFSZWZlcmVuY2U7CiB9
CiAKK25hbWVzcGFjZSBBUEkgeworY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Owor
fQorCiBuYW1lc3BhY2UgUEFMIHsKIGNsYXNzIFNlc3Npb25JRDsKIH0KQEAgLTczLDggKzc4LDgg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERvd25sb2FkUHJveHk7CiBjbGFzcyBEb3du
bG9hZFByb3h5TWFwOworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5OwogY2xhc3MgV2ViUGFn
ZVByb3h5OwotY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eTsKIAogZW51bSBjbGFzcyBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MgOiBi
b29sOwpAQCAtODYsOCArOTEsOSBAQCBzdHJ1Y3QgRnJhbWVJbmZvRGF0YTsKIHN0cnVjdCBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBSZXNvdXJjZUxvYWRJbmZvOwog
c3RydWN0IFdlYnNpdGVEYXRhOworc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOwog
Ci1jbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nl
c3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4geworY2xhc3MgTmV0d29ya1Byb2Nlc3NQcm94eSBm
aW5hbCA6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHByaXZhdGUgUHJvY2Vzc1Rocm90
dGxlckNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+LCBw
dWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgdXNpbmcgUmVnaXN0cmFibGVEb21haW4gPSBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKQEAgLTEwMiwxMiArMTA4LDE4IEBAIHB1YmxpYzoKICAg
ICB1c2luZyBEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPSBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbjsKICAgICB1c2luZyBPcGVuZXJEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbjsKIAotICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wm
KTsKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IGRlZmF1bHROZXR3b3JrUHJv
Y2VzcygpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrUHJvY2Vzc1Byb3h5KTsgfQogICAgIH5OZXR3b3Jr
UHJvY2Vzc1Byb3h5KCk7CiAKKyAgICBzdGF0aWMgVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1By
b3h5Pj4gYWxsTmV0d29ya1Byb2Nlc3NlcygpOworICAgIAorICAgIHZvaWQgdGVybWluYXRlKCkg
ZmluYWw7CisgICAgdm9pZCBkaWRUZXJtaW5hdGUoKTsKKwogICAgIHZvaWQgZ2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJv
eHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKIAotICAgIERv
d25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdl
UHJveHkqIG9yaWdpbmF0aW5nUGFnZSk7CisgICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxv
YWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgV2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBv
cmlnaW5hdGluZ1BhZ2UpOwogCiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lv
bklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0
Y2hPcHRpb24+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4mJik7CiAgICAg
dm9pZCBkZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4sIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CkBAIC0yMDYsMTUgKzIxOCwxMiBAQCBwdWJsaWM6CiAg
ICAgUHJvY2Vzc1Rocm90dGxlciYgdGhyb3R0bGVyKCkgZmluYWwgeyByZXR1cm4gbV90aHJvdHRs
ZXI7IH0KICAgICB2b2lkIHVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKIAotICAgIFdlYlByb2Nl
c3NQb29sJiBwcm9jZXNzUG9vbCgpIHsgcmV0dXJuIG1fcHJvY2Vzc1Bvb2w7IH0KLQogI2lmIEVO
QUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgdm9pZCBkaWREZXN0cm95V2ViVXNlckNvbnRl
bnRDb250cm9sbGVyUHJveHkoV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmKTsKICNlbmRp
ZgogCi0gICAgdm9pZCBhZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmKTsKLSAgICBi
b29sIGhhc1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQpIGNvbnN0OwotICAgIHZvaWQgcmVtb3ZlU2Vz
c2lvbihQQUw6OlNlc3Npb25JRCk7CisgICAgdm9pZCBhZGRTZXNzaW9uKFdlYnNpdGVEYXRhU3Rv
cmUmKTsKKyAgICB2b2lkIHJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYpOwogICAgIAog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIHZvaWQgY3JlYXRlU3ltTGlua0ZvckZp
bGVVcGdyYWRlKGNvbnN0IFN0cmluZyYgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKQEAgLTIy
OSw2ICsyMzgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1
c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgdW5yZWdpc3RlclNjaGVtZUZv
ckxlZ2FjeUN1c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYpOwogCisgICAgdm9pZCBuZXR3b3Jr
UHJvY2Vzc0NyYXNoZWQoKTsKKyAgICAKICAgICB2b2lkIHJlc2V0UXVvdGEoUEFMOjpTZXNzaW9u
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICB2b2lkIHJlc291cmNlTG9h
ZERpZFNlbmRSZXF1ZXN0KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFJlc291cmNlTG9hZEluZm8m
JiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIE9wdGlvbmFsPElQQzo6Rm9ybURhdGFSZWZl
cmVuY2U+JiYpOwpAQCAtMjQ4LDcgKzI1OSwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVC
dW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7CiAgICAgdm9pZCBjbGVhckJ1bmRsZUlkZW50aWZpZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKIAorICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlcigpIHsg
cmV0dXJuIG1fY29va2llTWFuYWdlci5nZXQoKTsgfQorCisgICAgQVBJOjpDdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIHsgcmV0dXJuIG1f
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmdldCgpOyB9CisKKyNpZiBQTEFURk9STShDT0NP
QSkKKyAgICB4cGNfb2JqZWN0X3QgeHBjRW5kcG9pbnRNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4g
bV9lbmRwb2ludE1lc3NhZ2UuZ2V0KCk7IH0KKyNlbmRpZgorCiBwcml2YXRlOgorICAgIGV4cGxp
Y2l0IE5ldHdvcmtQcm9jZXNzUHJveHkoKTsKKworICAgIHZvaWQgc2VuZENyZWF0aW9uUGFyYW1l
dGVyc1RvTmV3UHJvY2VzcygpOworCiAgICAgLy8gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5CiAgICAg
QVNDSUlMaXRlcmFsIHByb2Nlc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIk5ldHdvcmtp
bmciX3M7IH0KIApAQCAtMjU2LDcgKzI3OSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb25uZWN0
aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwcm9jZXNz
V2lsbFNodXREb3duKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBuZXR3
b3JrUHJvY2Vzc0NyYXNoZWQoKTsKICAgICB2b2lkIGNsZWFyQ2FsbGJhY2tTdGF0ZXMoKTsKIAog
ICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CkBAIC0zMTIsMTYgKzMzNCwxNyBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUEFMOjpTZXNz
aW9uSUQsIFJlZjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiYmKTsKIAotICAgIFdlYlBy
b2Nlc3NQb29sJiBtX3Byb2Nlc3NQb29sOwotCiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4+IG1fcGVuZGluZ0ZldGNoV2Vic2l0ZURh
dGFDYWxsYmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFw
PENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdl
YnNpdGVEYXRhRm9yT3JpZ2luc0NhbGxiYWNrczsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEb3du
bG9hZFByb3h5TWFwPiBtX2Rvd25sb2FkUHJveHlNYXA7CisKKyAgICBVbmlxdWVSZWY8QVBJOjpD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
OwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCiAgICAgTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTsK
ICNlbmRpZgorCiAgICAgUHJvY2Vzc1Rocm90dGxlciBtX3Rocm90dGxlcjsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8UHJvY2Vzc1Rocm90dGxlcjo6QmFja2dyb3VuZEFjdGl2aXR5PiBtX2FjdGl2aXR5
Rm9ySG9sZGluZ0xvY2tlZEZpbGVzOwogICAgIFByb2Nlc3NUaHJvdHRsZXI6OkFjdGl2aXR5VmFy
aWFudCBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlczsKQEAgLTM0Nyw5ICszNzAsMTEgQEAgcHJp
dmF0ZToKICAgICBwcml2YXRlOgogICAgICAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+
IG1fbmV0d29ya1Byb2Nlc3M7CiAgICAgfTsKKyAgICBPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+
IG1fZW5kcG9pbnRNZXNzYWdlOwogI2VuZGlmCiAKLSAgICBIYXNoU2V0PFBBTDo6U2Vzc2lvbklE
PiBtX3Nlc3Npb25JRHM7CisgICAgV2Vha0hhc2hTZXQ8V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJz
aXRlRGF0YVN0b3JlczsKKyAgICBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBtX2Nvb2tpZU1h
bmFnZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0K
aW5kZXggYjhkYWVkZjdiZWJhMWNkODFmNmU1MjQ0OTYwMzEwZjEzMzEwYzExZS4uMGU1ZmFlYzFi
M2FhZTc5MjQ1NGE4OTkwMTJjOTY3NGMzYzJlODQxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0K
QEAgLTUxLDggKzUxLDExIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5k
bGVyOjpoYW5kbGVYUENFdmVudCh4cGNfb2JqZWN0X3QgZXZlbnQpIGNvCiAgICAgaWYgKG1lc3Nh
Z2VOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1lc3Nh
Z2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6OnhwY0xhdW5jaFNl
cnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKQotICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQ
cm9jZXNzKGV2ZW50KTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRh
YmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVz
c2FnZU5hbWUpIHsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+bV9lbmRwb2ludE1lc3NhZ2Ug
PSBldmVudDsKKyAgICAgICAgZm9yIChhdXRvJiBkYXRhU3RvcmUgOiBtX25ldHdvcmtQcm9jZXNz
LT5tX3dlYnNpdGVEYXRhU3RvcmVzKQorICAgICAgICAgICAgZGF0YVN0b3JlLnNlbmROZXR3b3Jr
UHJvY2Vzc1hQQ0VuZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMoKTsKKyAgICB9CiAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tp
ZU1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5h
Z2VyUHJveHkuY3BwCmluZGV4IGNjNTI2YWFmM2FhZmIxYzE0NmRhNGIyNDE5NDU5YjEwOTIwMWI2
MTAuLjA4NWU3ZDI2NWExMzczNWJlN2ExMjc4ZWMxZGZiNjNmZDVkZDVkNzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcApAQCAtMjks
NiArMjksNyBAQAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiQVBJU2VjdXJpdHlP
cmlnaW4uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIk9wdGlvbmFsQ2FsbGJhY2tJRC5oIgog
I2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYkNvb2tp
ZU1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCkBAIC0zOSwyNCArNDAsMTYgQEAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLWNvbnN0IGNoYXIqIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUoKQorV2ViQ29va2llTWFuYWdlclByb3h5OjpX
ZWJDb29raWVNYW5hZ2VyUHJveHkoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3Mp
CisgICAgOiBtX25ldHdvcmtQcm9jZXNzKG1ha2VXZWFrUHRyKG5ldHdvcmtQcm9jZXNzKSkKIHsK
LSAgICByZXR1cm4gIldlYkNvb2tpZU1hbmFnZXJQcm94eSI7Ci19Ci0KLVJlZjxXZWJDb29raWVN
YW5hZ2VyUHJveHk+IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlByb2Nlc3NQb29s
KiBwcm9jZXNzUG9vbCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb29raWVNYW5h
Z2VyUHJveHkocHJvY2Vzc1Bvb2wpKTsKLX0KLQotV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJD
b29raWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQotICAgIDogV2Vi
Q29udGV4dFN1cHBsZW1lbnQocHJvY2Vzc1Bvb2wpCi17Ci0gICAgV2ViQ29udGV4dFN1cHBsZW1l
bnQ6OnByb2Nlc3NQb29sKCktPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKKyAgICBuZXR3b3Jr
UHJvY2Vzcy5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiB9CiAKIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6fldlYkNvb2tpZU1hbmFnZXJQcm94eSgpCiB7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpOwogICAg
IEFTU0VSVChtX2Nvb2tpZU9ic2VydmVycy5pc0VtcHR5KCkpOwogfQogCkBAIC02NSwxMDIgKzU4
LDg0IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojppbml0aWFsaXplQ2xpZW50KGNvbnN0
IFdLQ29va2llTWFuYWdlckNsaWVudEJhc2UqIGNsCiAgICAgbV9jbGllbnQuaW5pdGlhbGl6ZShj
bGllbnQpOwogfQogCi0vLyBXZWJDb250ZXh0U3VwcGxlbWVudAotCi12b2lkIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKQotewotICAgIFZlY3RvcjxPYnNlcnZl
cio+IG9ic2VydmVyczsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyU2V0IDogbV9jb29raWVPYnNl
cnZlcnMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVy
U2V0KQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChvYnNlcnZlcik7Ci0gICAgfQotCi0g
ICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVycykKLSAgICAgICAgb2JzZXJ2ZXItPm1h
bmFnZXJEZXN0cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVycy5pc0VtcHR5
KCkpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKFdl
YlByb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9j
ZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmpl
Y3Q6OnJlZigpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250
ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OmRlcmVmKCk7Ci19Ci0KIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+
JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2Vu
ZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFtZXNX
aXRoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisg
ICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQogewotICAgIHByb2Nlc3NQb29sKCkt
PnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhv
c3RuYW1lcykpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWVzRm9y
SG9zdG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkK
IHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5n
SWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMo
c2Vzc2lvbklEKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tp
ZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxl
dGVDb29raWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDb29raWUmIGNvb2tpZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0
byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
OwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6RGVsZXRlQ29va2llKHNlc3Npb25JRCwgY29va2llKSwgW2NhbGxiYWNrRnVu
Y3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pXSgpIG11dGFibGUgeworICAgIGlmICht
X25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQs
IGNvb2tpZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKICAgICAgICAg
Y2FsbGJhY2tGdW5jdGlvbigpOwotICAgIH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBXYWxsVGltZSB0aW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tG
dW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVu
c3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzTW9kaWZpZWRT
aW5jZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzTW9k
aWZpZWRTaW5jZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsK
KyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25z
dCBWZWN0b3I8Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNh
bGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llKHNlc3Npb25J
RCwgY29va2llcyksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdv
cmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZXMp
LCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNr
RnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2llcywg
Y29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgbWFpbkRvY3VtZW50VVJMLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29y
a1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpT
ZXRDb29raWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWluRG9jdW1lbnRVUkwpLCBXVEZN
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAg
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWluRG9jdW1l
bnRVUkwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNh
bGxiYWNrRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEFs
bENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZlY3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0
d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAg
IG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFu
YWdlcjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24p
KTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRBbGxDb29r
aWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAg
ICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVSTCYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVu
Y3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCks
IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQor
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsK
IH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hh
bmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2Vu
ZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJD
b29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSk7Cisg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhz
ZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNl
cnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9j
ZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3Nhcnko
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNl
c3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29v
a2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBX
VEY6OkZ1bmN0aW9uPHZvaWQgKCk+JiYgY2FsbGJhY2spCkBAIC0yMTEsMTggKzE4NiwxOCBAQCB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y29va2llc0RpZENoYW5nZShQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGlj
eSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0jaWYg
VVNFKFNPVVApCi0gICAgcHJvY2Vzc1Bvb2woKS0+c2V0SW5pdGlhbEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kocG9saWN5KTsKLSNlbmRpZgotCi0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KHBvbGljeSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAg
ICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQogCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQor
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVB
Y2NlcHRQb2xpY3kpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdv
cmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSgpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsK
KyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAg
IGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihIVFRQQ29va2llQWNjZXB0UG9saWN5OjpO
ZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAppbmRleCAwYmRmYzBkNGU0N2M0MzZmNTg1
Y2YyOWMwOWQ1MWEyOWJjODExYTlkLi42ZjUxZjAzZTVjMGNhODk0MTIzMzQzNzdiNTU0M2Q4MjJj
YzJmZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5h
Z2VyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2Vy
UHJveHkuaApAQCAtNTYsMTEgKzU2LDkgQEAgdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpB
cnJheSo+IEFycmF5Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXZWJDb3JlOjpI
VFRQQ29va2llQWNjZXB0UG9saWN5PiBIVFRQQ29va2llQWNjZXB0UG9saWN5Q2FsbGJhY2s7CiB0
eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiY+IEdl
dENvb2tpZXNDYWxsYmFjazsKIAotY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGlj
IEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHB1Ymxp
YyBXZWJDb250ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7Citj
bGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6
T2JqZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7Ci0K
LSAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlByb2Nlc3NQ
b29sKik7CisgICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IGNyZWF0ZShOZXR3
b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBX
ZWJDb29raWVNYW5hZ2VyUHJveHkobmV0d29ya1Byb2Nlc3MpKTsgfQogICAgIHZpcnR1YWwgfldl
YkNvb2tpZU1hbmFnZXJQcm94eSgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0
IFdLQ29va2llTWFuYWdlckNsaWVudEJhc2UqKTsKQEAgLTEwNCwxNyArMTAyLDEwIEBAIHB1Ymxp
YzoKICAgICB1c2luZyBBUEk6Ok9iamVjdDo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29v
a2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKik7CisgICAgV2ViQ29va2llTWFuYWdlclBy
b3h5KE5ldHdvcmtQcm9jZXNzUHJveHkmKTsKIAogICAgIHZvaWQgY29va2llc0RpZENoYW5nZShQ
QUw6OlNlc3Npb25JRCk7CiAKLSAgICAvLyBXZWJDb250ZXh0U3VwcGxlbWVudAotICAgIHZvaWQg
cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9z
ZShXZWJQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShO
ZXR3b3JrUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWZXZWJDb250ZXh0U3Vw
cGxlbWVudCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgp
IG92ZXJyaWRlOwotCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAgICB2b2lkIGRpZFJl
Y2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwog
CkBAIC0xMjUsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklE
LCBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+PiBtX2xlZ2FjeUNvb2tpZU9ic2VydmVyczsKICAgICBI
YXNoTWFwPFBBTDo6U2Vzc2lvbklELCBIYXNoU2V0PE9ic2VydmVyKj4+IG1fY29va2llT2JzZXJ2
ZXJzOwogCisgICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNz
OwogICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eUNsaWVudCBtX2NsaWVudDsKIAogI2lmIFVTRShT
T1VQKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggNWVkZjQz
MjlhZDUwODVhZDRhNDQyYTZlMDdiZDQ2MDA2MmY2N2NkNC4uMjM5YjgxN2NjNWJiNmZmMWE0N2Q5
YjVjZjBjNjUwYzg1MGEwNTZkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCkBAIC0xNzQ2LDcgKzE3NDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29udHJv
bGxlZEJ5QXV0b21hdGlvbihib29sIGNvbnRyb2xsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oY29udHJv
bGxlZCkpOwotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJv
Y2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1
dG9tYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9sbGVkQnlB
dXRvbWF0aW9uKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9t
YXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9sbGVkQnlBdXRv
bWF0aW9uKSwgMCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjcmVhdGVJbnNwZWN0b3JUYXJn
ZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBl
IHR5cGUpCkBAIC0zMjEwLDExICszMjEwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmlzRm9yY2Vk
SW50b0FwcEJvdW5kTW9kZVRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4KIHZv
aWQgV2ViUGFnZVByb3h5OjpkaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50SW5OZXR3b3Jr
UHJvY2VzcygpCiB7CiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAhUExBVEZPUk0o
TUFDQ0FUQUxZU1QpCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5w
cm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJv
Y2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNhYmxlU2Vydmlj
ZVdvcmtlckVudGl0bGVtZW50KCksIDApOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCku
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNl
cnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCAwKTsKICNlbmRpZgogfQogCkBAIC0zMjIzLDEzICsz
MjE5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50
T3ZlcnJpZGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RP
TUFJTlMpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkNsZWFyU2Vy
dmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29s
KCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5T
ZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJF
bnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50
T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKICNlbmRpZgpAQCAtNDQyMyw3ICs0NDEzLDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OnByZWNvbm5lY3RUbyhjb25zdCBVUkwmIHVybCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgYXV0byBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9IG1fY2FuVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UgPyBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlIDogV2ViQ29yZTo6U3Rv
cmVkQ3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlOwotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bv
b2woKS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRl
bnRpZmllcigpLCB3ZWJQYWdlSUQoKSwgdXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4oKSk7CisgICAgd2Vic2l0ZURh
dGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkucHJlY29ubmVjdFRvKHNlc3Npb25JRCgpLCBpZGVu
dGlmaWVyKCksIHdlYlBhZ2VJRCgpLCB1cmwsIHVzZXJBZ2VudCgpLCBzdG9yZWRDcmVkZW50aWFs
c1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpKTsKIH0KIAogdm9pZCBXZWJQ
YWdlUHJveHk6OnNldENhblVzZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wgY2FuVXNlQ3JlZGVudGlh
bFN0b3JhZ2UpCkBAIC00NzE5LDcgKzQ3MDksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29t
bWl0TG9hZEZvckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUluZm9EYXRhJgog
ICAgICAgICAgICAgUmVnaXN0cmFibGVEb21haW4gY3VycmVudERvbWFpbiB7IGN1cnJlbnRSZXF1
ZXN0LnVybCgpIH07CiAgICAgICAgICAgICBVUkwgcmVxdWVzdGVyVVJMIHsgVVJMKCksIHJlcXVl
c3Rlck9yaWdpbi50b1N0cmluZygpIH07CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnREb21haW4u
bWF0Y2hlcyhyZXF1ZXN0ZXJVUkwpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vz
c1Bvb2woKS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9
LCBjdXJyZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50aWZpZXIsIG1f
d2ViUGFnZUlEKTsKKyAgICAgICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQ
cm9jZXNzKCkuZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRl
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwg
fSwgY3VycmVudERvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBt
X3dlYlBhZ2VJRCk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTQ3NTcsNyArNDc0Nyw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUoRnJhbWVJZGVudGlm
aWVyIGZyYW1lSUQsIEZyYW1lSW5mb0RhdGEmCiAgICAgaWYgKG5hdmlnYXRpb24gJiYgZnJhbWUt
PmlzTWFpbkZyYW1lKCkpIHsKICAgICAgICAgaWYgKGF1dG8mIGFkQ2xpY2tBdHRyaWJ1dGlvbiA9
IG5hdmlnYXRpb24tPmFkQ2xpY2tBdHRyaWJ1dGlvbigpKSB7CiAgICAgICAgICAgICBpZiAoYWRD
bGlja0F0dHJpYnV0aW9uLT5kZXN0aW5hdGlvbigpLm1hdGNoZXMoZnJhbWUtPnVybCgpKSkKLSAg
ICAgICAgICAgICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1By
b2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yZUFkQ2xpY2tBdHRyaWJ1dGlvbiht
X3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqYWRDbGlja0F0dHJpYnV0aW9uKSk7Cisg
ICAgICAgICAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0
ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmlidXRpb24pLCAwKTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtNTM3MSw3ICs1MzYxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6Omxv
Z0ZyYW1lTmF2aWdhdGlvbihjb25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgY29uc3QgVVJMJiBw
YWcKICAgICBpZiAodGFyZ2V0SG9zdC5pc0VtcHR5KCkgfHwgbWFpbkZyYW1lSG9zdC5pc0VtcHR5
KCkgfHwgdGFyZ2V0SG9zdCA9PSBzb3VyY2VVUkwuaG9zdCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0
cmFibGVEb21haW4geyBwYWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0s
IGlzUmVkaXJlY3QsIGZyYW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0g
bV9kaWRGaW5pc2hEb2N1bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlh
bGx5SW5pdGlhdGVkQnlVc2VyKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1lTmF2aWdhdGlvbiht
X3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHRhcmdl
dFVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0cmFibGVEb21haW4g
eyBzb3VyY2VVUkwgfSwgaXNSZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUoKSwgTW9ub3Rvbmlj
VGltZTo6bm93KCkgLSBtX2RpZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5GcmFtZVRpbWVzdGFt
cCwgd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpLCAwKTsKIH0KICNlbmRpZgogCkBAIC05
OTk2LDU4ICs5OTg2LDI3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzeXN0ZW1QcmV2aWV3QWN0aW9u
VHJpZ2dlcmVkKGNvbnN0IFdlYkNvcmU6OlN5c3RlbVByZXZpZXdJbmZvCiAKIHZvaWQgV2ViUGFn
ZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlv
bihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb24o
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdl
KCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vi
c2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgd2Vic2l0ZURh
dGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5n
KGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQ
b29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5j
YW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmli
dXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vi
c2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZv
clRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFsdWUpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBZENsaWNr
QXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxG
b3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdv
cmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRG
b3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29s
KCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5T
ZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0
aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9y
ZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6TWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKG1fd2Vi
c2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKICNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQb29sLmNwcAppbmRleCBkOTI2YjMzY2JkZjJiYjhiYjk4MGQ2M2M1ZGM1
MmFlNTI1MDkyNTI5Li43MWYxZjYzOGRjMzNmNGU0MTgyNTZkNjY4MWNmODQ0ZjgyYjk0MWMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC00NSw3ICs0
NSw2IEBACiAjaW5jbHVkZSAiTGVnYWN5R2xvYmFsU2V0dGluZ3MuaCIKICNpbmNsdWRlICJMb2dJ
bml0aWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgpAQCAtMTQzLDggKzE0MiwxMCBAQAogI2VuZGlm
CiAKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0coY2hhbm5lbCwgZm10LCAuLi4p
IFJFTEVBU0VfTE9HKGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywg
IyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfU1RBVElD
KGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhjaGFubmVsLCAiV2ViUHJvY2Vzc1Bvb2w6
OiIgZm10LCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xP
R19FUlJPUihjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfRVJST1IoY2hhbm5lbCwgIiVw
IC0gV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBX
RUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKGNoYW5uZWwsIGZtdCwgLi4uKSBS
RUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIGNoYW5u
ZWwsICIlcCAtIFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNk
ZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoY2hhbm5l
bCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lGKHNlc3Npb25JRC5pc0Fsd2F5c09uTG9nZ2luZ0Fs
bG93ZWQoKSwgY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwgIyNfX1ZBX0FSR1NfXykK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTIzMiw2
ICsyMzMsMTEgQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhh
c2g+JiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3QKICAgICByZXR1cm4gc2V0OwogfQog
CitWZWN0b3I8U3RyaW5nPiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90
b2NvbEhhbmRsZXJzKCkKK3sKKyAgICByZXR1cm4gY29weVRvVmVjdG9yKGdsb2JhbFVSTFNjaGVt
ZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKTsKK30KKwogV2ViUHJvY2Vzc1Bvb2w6Oldl
YlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9u
KQogICAgIDogbV9jb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24uY29weSgpKQogICAgICwgbV9k
ZWZhdWx0UGFnZUdyb3VwKFdlYlBhZ2VHcm91cDo6Y3JlYXRlKCkpCkBAIC0yMzksNyArMjQ1LDYg
QEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uJiBjb25maWd1cmF0aW9uKQogICAgICwgbV9hdXRvbWF0aW9uQ2xpZW50KG1ha2VVbmlx
dWU8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PigpKQogICAgICwgbV9kb3dubG9hZENsaWVudChtYWtl
VW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+KCkpCiAgICAgLCBtX2hpc3RvcnlDbGllbnQo
bWFrZVVuaXF1ZTxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PigpKQotICAgICwgbV9j
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudD4oKSkKICAgICAsIG1fdmlzaXRlZExpbmtTdG9yZShWaXNpdGVkTGlua1N0
b3JlOjpjcmVhdGUoKSkKICNpZiBQTEFURk9STShNQUMpCiAgICAgLCBtX2hpZ2hQZXJmb3JtYW5j
ZUdyYXBoaWNzVXNhZ2VTYW1wbGVyKG1ha2VVbmlxdWU8SGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NV
c2FnZVNhbXBsZXI+KCp0aGlzKSkKQEAgLTI2Nyw5ICsyNzIsNiBAQCBXZWJQcm9jZXNzUG9vbDo6
V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRp
b24pCiAjZW5kaWYKICAgICB9KTsKIAotICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlICYmIFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAg
ICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
YXRhU3RvcmUoKTsKLQogICAgIGZvciAoYXV0byYgc2NoZW1lIDogbV9jb25maWd1cmF0aW9uLT5h
bHdheXNSZXZhbGlkYXRlZFVSTFNjaGVtZXMoKSkKICAgICAgICAgbV9zY2hlbWVzVG9SZWdpc3Rl
ckFzQWx3YXlzUmV2YWxpZGF0ZWQuYWRkKHNjaGVtZSk7CiAKQEAgLTI4NSw3ICsyODcsNiBAQCBX
ZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24mIGNvbmZpZ3VyYXRpb24pCiAgICAgYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzUG9vbDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiAKICAgICAvLyBOT1RF
OiBUaGVzZSBzdWItb2JqZWN0cyBtdXN0IGJlIGluaXRpYWxpemVkIGFmdGVyIG1fbWVzc2FnZVJl
Y2VpdmVyTWFwLi4KLSAgICBhZGRTdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsK
ICAgICBhZGRTdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5PigpOwogICAgIGFk
ZFN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5PigpOwogI2lmIEVOQUJMRShN
RURJQV9TRVNTSU9OKQpAQCAtMzQyLDkgKzM0Myw2IEBAIFdlYlByb2Nlc3NQb29sOjp+V2ViUHJv
Y2Vzc1Bvb2woKQogICAgIHByb2Nlc3NQb29sQ291bnRlci5kZWNyZW1lbnQoKTsKICNlbmRpZgog
Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNo
dXREb3duUHJvY2VzcygpOwotCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAgICAgaWYgKCFtX3Byb2Nl
c3Nlc1VzaW5nR2FtZXBhZHMuaXNFbXB0eSgpKQogICAgICAgICBVSUdhbWVwYWRQcm92aWRlcjo6
c2luZ2xldG9uKCkucHJvY2Vzc1Bvb2xTdG9wcGVkVXNpbmdHYW1lcGFkcygqdGhpcyk7CkBAIC00
MDIsMTYgKzQwMCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEF1dG9tYXRpb25DbGllbnQo
c3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4mCiAgICAgICAgIG1fYXV0b21h
dGlvbkNsaWVudCA9IFdURk1vdmUoYXV0b21hdGlvbkNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1
ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYgY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50KQotewotI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFH
RVIpCi0gICAgaWYgKCFjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi0gICAgICAgIG1fY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gbWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudD4oKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50ID0gV1RGTW92ZShjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOwotI2VuZGlm
Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVu
ZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxl
SWRlbnRpZmllcikKIHsKICAgICAvLyBHdWFyZCBhZ2FpbnN0IEFQSSBtaXN1c2UuCkBAIC00MjEs
MTEgKzQwOSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2
aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGN1CiAgICAgbV9jb25maWd1cmF0aW9u
LT5zZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY3VzdG9tV2ViQ29u
dGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKTsKIH0KIAotSVBDOjpDb25uZWN0aW9uKiBXZWJQ
cm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkKLXsKLSAgICByZXR1cm4g
bV9uZXR3b3JrUHJvY2Vzcy0+Y29ubmVjdGlvbigpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpsYW5ndWFnZUNoYW5nZWQodm9pZCogY29udGV4dCkKIHsKICAgICBzdGF0aWNfY2FzdDxXZWJQ
cm9jZXNzUG9vbCo+KGNvbnRleHQpLT5sYW5ndWFnZUNoYW5nZWQoKTsKQEAgLTQzNSw4ICs0MTgs
NyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQoKQogewogICAgIHNlbmRU
b0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdl
c0NoYW5nZWQoKSk7CiAjaWYgVVNFKFNPVVApCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0g
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpV
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAw
KTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPm5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFn
ZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDApOwogI2VuZGlmCiB9CiAKQEAg
LTQ0OSw3ICs0MzEsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpmdWxsS2V5Ym9hcmRBY2Nlc3NN
b2RlQ2hhbmdlZChib29sIGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZQogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2VuZE1lbW9yeVByZXNzdXJlRXZlbnQoYm9vbCBpc0NyaXRpY2FsKQogewogICAgIHNl
bmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1l
bW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9j
ZXNzKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVF
dmVudChpc0NyaXRpY2FsKSk7CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29y
a1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVBy
ZXNzdXJlRXZlbnQoaXNDcml0aWNhbCksIDApOwogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQogICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5zZW5kTWVtb3J5UHJl
c3N1cmVFdmVudChpc0NyaXRpY2FsKTsKICNlbmRpZgpAQCAtNDc0LDI3NSArNDU3LDggQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2NyZWVuUHJvcGVydGllc1N0YXRlQ2hhbmdlZCgpCiAjZW5kaWYK
IH0KIAotTmV0d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3JlKQotewotICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0
ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWlu
IHRocmVhZHMuCi0gICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0
aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91ciBBUElzLgotICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYuCi0gICAgaWYgKCFSdW5Mb29wOjpp
c01haW4oKSkgewotICAgICAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICAgICAgZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsK
LSAgICB9Ci0KLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICBpZiAod2l0aFdl
YnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Np
b24obWFrZVJlZigqd2l0aFdlYnNpdGVEYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIHdpdGhXZWJz
aXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotICAgIH0KLQotICAgIGF1dG8gbmV0d29ya1Byb2Nl
c3MgPSBtYWtlVW5pcXVlPE5ldHdvcmtQcm9jZXNzUHJveHk+KCp0aGlzKTsKLQotICAgIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0KLSAgICBpZiAobV93ZWJz
aXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBjb3B5VG9WZWN0b3IobV93ZWJzaXRlRGF0YVN0b3JlLT5w
ZW5kaW5nQ29va2llcygpKTsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRp
bmdDb29raWVzKCk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFw
cGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJh
dGlvbigpLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpOwotICAgICAgICBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3Rv
cmUtPmNvbmZpZ3VyYXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIo
KTsKLSNlbmRpZgotICAgIH0KLQotICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUds
b2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7Ci0KLSAgICBmb3IgKGF1dG8m
IHNjaGVtZSA6IGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQot
ICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xz
LmFwcGVuZChzY2hlbWUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBTdHJpbmcg
Y29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGly
ZWN0b3J5KCk7Ci0gICAgaWYgKCFjb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5
KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5
ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBpZiAo
IWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNE
aXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKLQotICAgIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9v
bDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJlbnRCdW5kbGVEaXJlY3Rv
cnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFy
ZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgcGFy
YW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yVGVtcG9yYXJ5RmlsZShlbXB0eVN0cmluZygpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpS
ZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0jZW5kaWYK
LQotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1Zl
Y3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJB
c1NlY3VyZSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3Np
bmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGlu
Z3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJp
dHlQb2xpY3koKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwg
PSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNU
b1JlZ2lzdGVyQXNMb2NhbCgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVk
QXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9u
KCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOwotCi0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0gICAgLy8gKioqKioqKioqCi0gICAgLy8gSU1QT1JUQU5UOiBEbyBub3QgY2hh
bmdlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBpbmRleGVkIGRhdGFiYXNlcyBvbiBkaXNr
IHdpdGhvdXQgZmlyc3QgY29uc3VsdGluZyBhIHJldmlld2VyIGZyb20gQXBwbGUgKDxyZGFyOi8v
cHJvYmxlbS8xNzQ1NDcxMj4pCi0gICAgLy8gKioqKioqKioqCi0gICAgaWYgKG1fd2Vic2l0ZURh
dGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5p
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5pbmRl
eGVkRGF0YWJhc2VEaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5jcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwotICAgIH0KLSNlbmRpZgotCi0j
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0g
ICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IG1f
d2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5KCk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnkpCi0gICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSA9ICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRTZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0gICAgYXV0byBsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTG9j
YWxTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFsb2NhbFN0b3Jh
Z2VEaXJlY3RvcnkpCi0gICAgICAgIGxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdExvY2FsU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0g
bG9jYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLQotICAgIGF1dG8gY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0
YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51
bGxTdHJpbmcoKTsKLSAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9y
eSA9IFdURk1vdmUoY2FjaGVTdG9yYWdlRGlyZWN0b3J5KTsKLSAgICB9Ci0KLSAgICBTdHJpbmcg
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAg
ICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgp
LT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeSwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0KLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBmYWxzZTsKLSAgICBi
b29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBmYWxzZTsK
LSAgICBib29sIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSB0cnVlOwotICAgIGJvb2wgZW5hYmxl
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IGZhbHNlOwotI2lmIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2Nr
aW5nTW9kZSB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gV2ViQ29yZTo6VGhpcmRQYXJ0
eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsOwotICAgIFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRFbmFibGVkIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gV2ViQ29y
ZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6Ok5vOwotI2VuZGlmCi0gICAgV2Vi
Q29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgZmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGUgPSBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZTo6QWxsQnV0Q29va2llczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBzdGFuZGFs
b25lQXBwbGljYXRpb25Eb21haW47Ci0gICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbj4gYXBwQm91bmREb21haW5zOwotICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIG1h
bnVhbFByZXZhbGVudFJlc291cmNlOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbV90Y2NQ
cmVmZXJlbmNlRW5hYmxlZCA9IGRvZXNBcHBIYXZlSVRQRW5hYmxlZCgpOwotICAgIGlmICh3aXRo
V2Vic2l0ZURhdGFTdG9yZSAmJiAhd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBs
aWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1f
dGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5zZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
KTsKLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSAmJiAhbV93ZWJzaXRlRGF0YVN0
b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBtX3dlYnNp
dGVEYXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZUV4aXN0cygpICYmICFXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlKCktPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIFdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVk
OwotI2VuZGlmCi0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJ
U1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZl
bnQgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygp
OwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0g
ICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IHdpdGhXZWJzaXRlRGF0
YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAg
ICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAg
ICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVE
ZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAg
ICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2Nr
aW5nTW9kZTsKLSAgICAgICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
LnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOwotI2VuZGlmCi0gICAgICAgICAgICBm
aXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZTsKLSAgICAgICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5z
dGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0gICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMg
PSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRl
cnMuYXBwQm91bmREb21haW5zOwotICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2Ug
PSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRl
cnMubWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHdp
dGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3Rv
cmFnZVF1b3RhID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9y
YWdlUXVvdGEoKTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURp
cmVjdG9yeSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVj
dG9yeSgpOwotICAgICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewot
ICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGly
ZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdv
cmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgY29uc3QgYXV0byYgaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFT
dG9yZS0+cmVzb2x2ZWRIU1RTU3RvcmFnZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIWhzdHNT
dG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFn
ZURpcmVjdG9yeSA9IGhzdHNTdG9yYWdlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGhzdHNTdG9yYWdlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7
Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3dlYnNpdGVEYXRhU3Rv
cmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xv
Z1Rlc3RpbmdFdmVudCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdD
YWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IG1fd2Vi
c2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAg
ICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9z
dDsKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
ZW5hYmxlRGVidWdNb2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0g
ICAgICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29r
aWVCbG9ja2luZ01vZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5h
YmxlZCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFy
YW1ldGVycy5zYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAg
ICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNp
dGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21h
aW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFt
ZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmRE
b21haW5zID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJl
c291cmNlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVv
dGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAg
ICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmln
aW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5T
dG9yYWdlUXVvdGEoKTsKLQotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3Rv
cnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7
Ci0gICAgICAgIGlmICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7
Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hl
RGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdv
cmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBj
b25zdCBhdXRvJiBoc3RzU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVz
b2x2ZWRIU1RTU3RvcmFnZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIWhzdHNTdG9yYWdlRGly
ZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9y
eSA9IGhzdHNTdG9yYWdlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlKGhzdHNTdG9yYWdlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBl
OjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotICAgICAgICBhdXRvIG5ldHdvcmtDYWNoZURpcmVj
dG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsK
LSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0
b3J5OwotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hl
RGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdv
cmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgfQotCi0jaWYgSEFWRShDRk5F
VFdPUktfQUxURVJOQVRJVkVfU0VSVklDRSkKLSAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6aHR0
cDNFbmFibGVkKCkpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5
ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdEFsdGVybmF0aXZlU2VydmljZXNEaXJlY3Rvcnko
KTsKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnkuaXNFbXB0
eSgpKQotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdy
aXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeSwgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0
ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
aHR0cDNFbmFibGVkID0gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLSAgICBib29sIGlzSXRwU3RhdGVF
eHBsaWNpdGx5U2V0ID0gZmFsc2U7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycyB7Ci0gICAgICAgIFdU
Rk1vdmUocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSksCi0gICAgICAgIFdURk1vdmUo
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSksCi0gICAgICAg
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MsCi0gICAgICAgIGlzSXRwU3RhdGVFeHBsaWNp
dGx5U2V0LAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2
ZW50LAotICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0LAotICAgICAgICBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlLAotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpCi0gICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUsCi0gICAgICAg
IHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkLAotI2VuZGlmCi0gICAgICAgIGZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlLAotICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRp
b25Eb21haW4sCi0gICAgICAgIGFwcEJvdW5kRG9tYWlucywKLSAgICAgICAgbWFudWFsUHJldmFs
ZW50UmVzb3VyY2UsCi0gICAgfTsKLQotICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMg
cGFyYW1ldGVycwotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRl
cnMpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgbmV0d29yayBwcm9jZXNzLgotICAgIG5ldHdv
cmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG5l
dHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UU9TKG5ldHdv
cmtQcm9jZXNzTGF0ZW5jeVFPUygpLCBuZXR3b3JrUHJvY2Vzc1Rocm91Z2hwdXRRT1MoKSksIDAp
OwotI2VuZGlmCi0KLSAgICBuZXR3b3JrUHJvY2Vzcy0+dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigp
OwotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAg
IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgfQotCi0g
ICAgLy8gTWFrZSBzdXJlIHRoZSBuZXR3b3JrIHByb2Nlc3Mga25vd3MgYWJvdXQgYWxsIHRoZSBz
ZXNzaW9ucyB0aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSBpdCBzdGFydGVkLgotICAg
IGZvciAoYXV0byYgc2Vzc2lvbklEIDogbV9zZXNzaW9uVG9QYWdlSURzTWFwLmtleXMoKSkgewot
ICAgICAgICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4
aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpKQotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKndlYnNpdGVEYXRhU3RvcmUpOwotICAg
IH0KLQotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBXVEZNb3ZlKG5ldHdvcmtQcm9jZXNzKTsKLSAg
ICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5l
dHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1By
b3h5KQogewotICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsKLSAgICBBU1NFUlQoJm5ldHdv
cmtQcm9jZXNzUHJveHkgPT0gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKSk7Ci0KICAgICBmb3IgKGF1
dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBzdXBwbGVt
ZW50LT5wcm9jZXNzRGlkQ2xvc2UoJm5ldHdvcmtQcm9jZXNzUHJveHkpOwogCkBAIC03NTEsOSAr
NDY3LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdv
cmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzUHIKICAgICBpZiAobV9hdXRvbWF0aW9uU2Vz
c2lvbikKICAgICAgICAgbV9hdXRvbWF0aW9uU2Vzc2lvbi0+dGVybWluYXRlKCk7CiAKLSAgICAv
LyBMZWF2ZSB0aGUgcHJvY2VzcyBwcm94eSBhcm91bmQgZHVyaW5nIGNsaWVudCBjYWxsLCBzbyB0
aGF0IHRoZSBjbGllbnQgY291bGQgcXVlcnkgdGhlIHByb2Nlc3MgaWRlbnRpZmllci4KLSAgICBt
X25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKLQogICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
KCk7CiB9CiAKQEAgLTc2NCwyMCArNDc3LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2Vydmlj
ZVdvcmtlclByb2Nlc3NDcmFzaGVkKFdlYlByb2Nlc3NQcm94eSYgcHJveHkpCiAjZW5kaWYKIH0K
IAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlBy
b2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1Byb3h5LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpH
ZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQotewotICAg
IGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKHdlYlByb2Nlc3NQcm94eSwgW3RoaXMsIHdlYWtUaGlzID0gbWFr
ZVdlYWtQdHIoKnRoaXMpLCB3ZWJQcm9jZXNzUHJveHkgPSBtYWtlV2Vha1B0cih3ZWJQcm9jZXNz
UHJveHkpLCByZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYXV0byYgY29ubmVjdGlvbkluZm8pIG11
dGFibGUgewotICAgICAgICBpZiAoVU5MSUtFTFkoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmll
cklzVmFsaWQoY29ubmVjdGlvbkluZm8uaWRlbnRpZmllcigpKSAmJiB3ZWJQcm9jZXNzUHJveHkg
JiYgd2Vha1RoaXMpKSB7Ci0gICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19F
UlJPUihQcm9jZXNzLCAiZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOiBGYWlsZWQgZmlyc3Qg
YXR0ZW1wdCwgcmV0cnlpbmciKTsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7
Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24oKndlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIHJlcGx5KGNvbm5lY3Rpb25JbmZvKTsKLSAgICB9KTsKLX0K
LQogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdwdVByb2Nl
c3NDcmFzaGVkKFByb2Nlc3NJRCBpZGVudGlmaWVyKQogewpAQCAtODAxLDIzICs1MDAsMjYgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1By
b3h5JiB3ZWJQcm9jZXNzUHJveHksIE0KIH0KICNlbmRpZgogCitib29sIFdlYlByb2Nlc3NQb29s
OjpzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSBmYWxzZTsKKwogI2lmIEVOQUJM
RShTRVJWSUNFX1dPUktFUikKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNv
bnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm94
eSwgUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgQVNTRVJUX1VOVVNFRChwcm94eSwgJnByb3h5ID09IG1fbmV0d29ya1Byb2Nlc3Mu
Z2V0KCkpOworICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpl
eGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIGlmICghd2Vic2l0
ZURhdGFTdG9yZSkKKyAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKKyAgICBpZiAoIXByb2Nlc3NQb29scygpLnNpemUo
KSkKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZjxXZWJQcm9jZXNzUG9vbD4+IHNl
cnZpY2VXb3JrZXJQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKEFQSTo6UHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uOjpjcmVhdGUoKS5nZXQoKSkpOwogCi0gICAgYXV0byogd2Vic2l0
ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9y
ZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwotCi0gICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKSB7
Ci0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRl
RGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCku
cHRyKCk7Ci0gICAgICAgIHdlYnNpdGVEYXRhU3RvcmUgPSBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0
KCk7Ci0gICAgfQorICAgIC8vIEFyYml0cmFyaWx5IGNob29zZSB0aGUgZmlyc3QgcHJvY2VzcyBw
b29sIHRvIGhvc3QgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCisgICAgYXV0byogcHJvY2Vz
c1Bvb2wgPSBwcm9jZXNzUG9vbHMoKVswXTsKKyAgICBBU1NFUlQocHJvY2Vzc1Bvb2wpOwogCiAg
ICAgV2ViUHJvY2Vzc1Byb3h5KiBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5IHsgbnVsbHB0ciB9
OwotICAgIGlmICghbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7Ci0gICAgICAg
IGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7Ci0gICAgICAgICAgICBpZiAocHJv
Y2VzcyA9PSBtX3ByZXdhcm1lZFByb2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94
eSgpKQorCisgICAgaWYgKCFzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKKyAg
ICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2VzKSB7Cisg
ICAgICAgICAgICBpZiAocHJvY2VzcyA9PSBwcm9jZXNzUG9vbC0+bV9wcmV3YXJtZWRQcm9jZXNz
IHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIGlmICgmcHJvY2Vzcy0+d2Vic2l0ZURhdGFTdG9yZSgpICE9IHdl
YnNpdGVEYXRhU3RvcmUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC04MjUsMzUgKzUy
NywzNSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVj
dGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1BybwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5ID0gcHJvY2Vzcy5nZXQo
KTsKLSAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VX
b3JrZXJzKHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2Vycygp
KTsKKyAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VX
b3JrZXJzKHByb2Nlc3NQb29sLT51c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2Vy
dmljZVdvcmtlcnMoKSk7CiAKLSAgICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9H
X0lGX0FMTE9XRUQoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0
aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdlYiBwcm9jZXNzIChwcm9j
ZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtl
clByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBXRUJQUk9D
RVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0
YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIHJldXNpbmcgYW4g
ZXhpc3Rpbmcgd2ViIHByb2Nlc3MgKHByb2Nlc3M9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmll
cigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFz
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSB7Ci0gICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5
ID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2VycygqdGhpcywgV1RGTW92
ZShyZWdpc3RyYWJsZURvbWFpbiksICp3ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgYXV0byBu
ZXdQcm9jZXNzUHJveHkgPSBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZUZvclNlcnZpY2VXb3JrZXJz
KCpwcm9jZXNzUG9vbCwgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksICp3ZWJzaXRlRGF0YVN0
b3JlKTsKICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9IG5ld1Byb2Nlc3NQcm94
eS5wdHIoKTsKIAotICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VE
KFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29y
a1Byb2Nlc3MgY3JlYXRpbmcgYSBuZXcgc2VydmljZSB3b3JrZXIgcHJvY2VzcyAocHJvY2VzPSVw
LCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisgICAgICAgIFdFQlBST0NFU1NQT09MX1JF
TEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3Jr
ZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgY3JlYXRpbmcgYSBuZXcgc2Vydmlj
ZSB3b3JrZXIgcHJvY2VzcyAocHJvY2VzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7
CiAKLSAgICAgICAgaW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJvY2Vzc1Byb3h5LCB3ZWJz
aXRlRGF0YVN0b3JlKTsKLSAgICAgICAgbV9wcm9jZXNzZXMuYXBwZW5kKFdURk1vdmUobmV3UHJv
Y2Vzc1Byb3h5KSk7CisgICAgICAgIHByb2Nlc3NQb29sLT5pbml0aWFsaXplTmV3V2ViUHJvY2Vz
cyhuZXdQcm9jZXNzUHJveHksIHdlYnNpdGVEYXRhU3RvcmUpOworICAgICAgICBwcm9jZXNzUG9v
bC0+bV9wcm9jZXNzZXMuYXBwZW5kKFdURk1vdmUobmV3UHJvY2Vzc1Byb3h5KSk7CiAgICAgfQog
Ci0gICAgQVNTRVJUKCFtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFpbnMoKnNlcnZpY2VX
b3JrZXJQcm9jZXNzUHJveHkpKTsKLSAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYWRkKCpz
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKKyAgICBBU1NFUlQoIXNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoKS5jb250YWlucygqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkpOworICAgIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzZXMoKS5hZGQoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpOwogCi0g
ICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZXN0YWJsaXNoU2VydmljZVdvcmtlckNvbnRl
eHQobV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMgPyBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNl
cy52YWx1ZSgpIDogbV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLnN0b3JlKCksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBpZiAoIW1fc2VydmljZVdvcmtlclVzZXJB
Z2VudC5pc051bGwoKSkKLSAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2Vy
dmljZVdvcmtlclVzZXJBZ2VudChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOworICAgIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KHByb2Nl
c3NQb29sLT5tX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA/IHByb2Nlc3NQb29sLT5tX3NlcnZp
Y2VXb3JrZXJQcmVmZXJlbmNlcy52YWx1ZSgpIDogcHJvY2Vzc1Bvb2wtPm1fZGVmYXVsdFBhZ2VH
cm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CisgICAgaWYgKCFwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50LmlzTnVsbCgp
KQorICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNl
ckFnZW50KHByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpyZW1vdmVGcm9tU2VydmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9j
ZXNzUHJveHkmIHByb2Nlc3MpCiB7Ci0gICAgQVNTRVJUKG1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cy5jb250YWlucyhwcm9jZXNzKSk7Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLnJlbW92
ZShwcm9jZXNzKTsKKyAgICBBU1NFUlQoc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5z
KHByb2Nlc3MpKTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkucmVtb3ZlKHByb2Nlc3Mp
OwogfQogI2VuZGlmCiAKQEAgLTkyMiw3ICs2MjQsNyBAQCBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5
PiBXZWJQcm9jZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MoV2Vic2l0ZURhdGFTdG9y
ZQogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQogICAgIC8vIEluIHBsYXRmb3Jt
cyB1c2luZyBCdWJibGV3cmFwIGZvciBzYW5kYm94aW5nLCBwcmV3YXJtZWQgcHJvY2VzcyBpcyBs
YXVuY2hlZCB1c2luZyB0aGUgV2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3Jl
LAogICAgIC8vIHNvIHdlIGRvbid0IHVzZSBpdCBpbiBjYXNlIG9mIHVzaW5nIGEgZGlmZmVyZW50
IFdlYnNpdGVEYXRhU3RvcmUuCi0gICAgaWYgKG1fc2FuZGJveEVuYWJsZWQgJiYgbV93ZWJzaXRl
RGF0YVN0b3JlICYmIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSAhPSAmd2Vic2l0ZURhdGFTdG9y
ZSkKKyAgICBpZiAobV9zYW5kYm94RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAj
ZW5kaWYKIApAQCAtMTAzMiw4ICs3MzQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjppbml0aWFs
aXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIFdlYnNpdGVEYQogICAg
ICAgICBwcm9jZXNzLmlzUmVzcG9uc2l2ZShbaW5pdGlhbGl6YXRpb25BY3Rpdml0eSA9IFdURk1v
dmUoaW5pdGlhbGl6YXRpb25BY3Rpdml0eSldIChib29sKSB7IH0pOwogICAgIH0pOwogCi0gICAg
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQogICAgIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMgcGFyYW1ldGVyczsKIAogICAgIHBhcmFtZXRlcnMuaW5qZWN0ZWRCdW5kbGVQYXRoID0gbV9y
ZXNvbHZlZFBhdGhzLmluamVjdGVkQnVuZGxlUGF0aDsKQEAgLTExOTgsOSArODk4LDYgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJv
eHkqIHByb2Nlc3MpCiAgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+aWdub3JlVGltZW91
dHNGb3JUZXN0aW5nKCk7CiAKICAgICBtX2Nvbm5lY3Rpb25DbGllbnQuZGlkQ3JlYXRlQ29ubmVj
dGlvbih0aGlzLCBwcm9jZXNzLT53ZWJDb25uZWN0aW9uKCkpOwotCi0gICAgaWYgKG1fd2Vic2l0
ZURhdGFTdG9yZSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5kaWRDcmVhdGVOZXR3b3Jr
UHJvY2VzcygpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpkaXNjb25uZWN0UHJvY2VzcyhX
ZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCkBAIC0xMjk1LDEwICs5OTIsNyBAQCBSZWY8V2ViUGFn
ZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiBwYWdlQ2xp
ZW50LCBSZWY8QVBJOgogICAgIGlmICghcGFnZUNvbmZpZ3VyYXRpb24tPndlYnNpdGVEYXRhU3Rv
cmUoKSkgewogICAgICAgICAvLyBXZSB0cnkgdG8gYXZvaWQgY3JlYXRpbmcgdGhlIGRlZmF1bHQg
ZGF0YSBzdG9yZSBhcyBsb25nIGFzIHBvc3NpYmxlLgogICAgICAgICAvLyBCdXQgaWYgdGhlcmUg
aXMgYW4gYXR0ZW1wdCB0byBjcmVhdGUgYSB3ZWIgcGFnZSB3aXRob3V0IGFueSBzcGVjaWZpZWQg
ZGF0YSBzdG9yZSwgdGhlbiB3ZSBoYXZlIHRvIGNyZWF0ZSBpdC4KLSAgICAgICAgaWYgKCFtX3dl
YnNpdGVEYXRhU3RvcmUpCi0gICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLQotICAgICAgICBw
YWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZShtX3dlYnNpdGVEYXRhU3RvcmUu
Z2V0KCkpOworICAgICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZShX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKSk7CiAgICAg
fQogCiAgICAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzczsKQEAgLTEzMjksNyArMTAy
Myw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKFBh
Z2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQogICAgIGlmICghbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMpIHsKICAgICAgICAgbV9zZXJ2
aWNlV29ya2VyUHJlZmVyZW5jZXMgPSBwYWdlLT5wcmVmZXJlbmNlc1N0b3JlKCk7Ci0gICAgICAg
IGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMpCisgICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVT
ZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXNTdG9yZSgqbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMp
OwogICAgIH0KICAgICBpZiAodXNlckNvbnRlbnRDb250cm9sbGVyKQpAQCAtMTM1Niw3ICsxMDUw
LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChj
b25zdCBTdHJpbmcmIHVzZXJBZ2VudCkKICAgICBpZiAobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50
ID09IHVzZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2VydmljZVdvcmtlclVzZXJB
Z2VudCA9IHVzZXJBZ2VudDsKLSAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDog
bV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclBy
b2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzLnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50
KTsKIH0KICNlbmRpZgpAQCAtMTM2NSwxNSArMTA1OSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBh
Z2VJCiB7CiAgICAgYXV0byByZXN1bHQgPSBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAuYWRkKGRhdGFT
dG9yZS5zZXNzaW9uSUQoKSwgSGFzaFNldDxXZWJQYWdlUHJveHlJZGVudGlmaWVyPigpKS5pdGVy
YXRvci0+dmFsdWUuYWRkKHBhZ2VJRCk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3Vs
dC5pc05ld0VudHJ5KTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25J
RCgpOwotICAgIGlmIChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSkgewotICAgICAgICBBU1NFUlQoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IGRhdGFT
dG9yZS5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCA9PSBz
ZXNzaW9uSUQpOwotICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKGRhdGFTdG9yZSkpOwotICAgICAg
ICAgICAgZGF0YVN0b3JlLmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgIH0K
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUVuZFVzaW5nV2Vic2l0ZURhdGFTdG9yZShX
ZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3Jl
KQpAQCAtMTQwMSw3ICsxMDg2LDYgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzUGFnZXNVc2lu
Z1dlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKQogRG93bmxvYWRQ
cm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9y
ZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQogewogICAgIGF1dG8mIGRv
d25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcmVxdWVzdCwgaW5p
dGlhdGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0
b3JlLnNlc3Npb25JRCgpOwogCiAgICAgT3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21h
aW4+IGlzQXBwQm91bmQgPSBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbjo6Tm87CiAgICAgaWYg
KGluaXRpYXRpbmdQYWdlKSB7CkBAIC0xNDExLDI2ICsxMDk1LDIzIEBAIERvd25sb2FkUHJveHkm
IFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdl
YlBhZ2VQcm94CiAjZW5kaWYKICAgICB9CiAKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICBSZXNvdXJjZVJlcXVlc3QgdXBkYXRlZFJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAg
IC8vIFJlcXVlc3QncyBmaXJzdFBhcnR5Rm9yQ29va2llcyB3aWxsIGJlIHVzZWQgYXMgT3JpZ2lu
YWwgVVJMIG9mIHRoZSBkb3dubG9hZCByZXF1ZXN0LgotICAgICAgICAvLyBXZSBzZXQgdGhlIHZh
bHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KLSAgICAgICAgaWYgKGluaXRpYXRpbmdQ
YWdlKSB7Ci0gICAgICAgICAgICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwgPSBVUkwgeyBVUkwgeyB9
LCBpbml0aWF0aW5nUGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07Ci0gICAgICAgICAgICB1
cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7
Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGFyZVJlZ2lzdHJhYmxl
RG9tYWluc0VxdWFsKGluaXRpYXRpbmdQYWdlVVJMLCByZXF1ZXN0LnVybCgpKSk7Ci0gICAgICAg
ICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6VXNlckFnZW50KSkKLSAgICAgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNl
ckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0
eUZvckNvb2tpZXMoVVJMKCkpOwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1l
U2l0ZShmYWxzZSk7Ci0gICAgICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFk
ZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKLSAgICAgICAgICAgICAgICB1cGRh
dGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdl
bnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZh
bHNlKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkRvd25sb2FkUmVxdWVzdChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJ
RCgpLCB1cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsK
LSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0
ZWRSZXF1ZXN0KHJlcXVlc3QpOworICAgIC8vIFJlcXVlc3QncyBmaXJzdFBhcnR5Rm9yQ29va2ll
cyB3aWxsIGJlIHVzZWQgYXMgT3JpZ2luYWwgVVJMIG9mIHRoZSBkb3dubG9hZCByZXF1ZXN0Lgor
ICAgIC8vIFdlIHNldCB0aGUgdmFsdWUgdG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJMLgorICAg
IGlmIChpbml0aWF0aW5nUGFnZSkgeworICAgICAgICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwgPSBV
UkwgeyBVUkwgeyB9LCBpbml0aWF0aW5nUGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07Cisg
ICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQ
YWdlVVJMKTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3Ry
YWJsZURvbWFpbnNFcXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOworICAg
ICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6VXNlckFnZW50KSkKKyAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdl
bnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2VudEZvclVSTChyZXF1ZXN0LnVybCgpKSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMo
VVJMKCkpOworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKKyAg
ICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFn
ZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7CiAgICAgfQorICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7CisgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25sb2FkUmVxdWVzdChkYXRh
U3RvcmUuc2Vzc2lvbklEKCksIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1cGRhdGVkUmVx
dWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsKIAogICAgIHJldHVybiBk
b3dubG9hZFByb3h5OwogfQpAQCAtMTQzOCwxNyArMTExOSwxMiBAQCBEb3dubG9hZFByb3h5JiBX
ZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQ
YWdlUHJveAogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKFdl
YnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwg
Y29uc3QgQVBJOjpEYXRhJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAg
YXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBSZXNv
dXJjZVJlcXVlc3QoKSwgaW5pdGlhdGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwogCiAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHko
KSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hF
eHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAg
ICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3du
bG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgs
IHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJv
eHk7Ci0gICAgfQotCisgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwg
ZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBw
YXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSwgMCk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJv
eHk7CiB9CiAKQEAgLTE1MTcsMTEgKzExOTMsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWZy
ZXNoUGx1Z2lucygpCiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAot
UHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQotewot
ICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lk
ZW50aWZpZXIoKSA6IDA7Ci19Ci0KIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6cHJld2FybWVk
UHJvY2Vzc0lkZW50aWZpZXIoKQogewogICAgIHJldHVybiBtX3ByZXdhcm1lZFByb2Nlc3MgPyBt
X3ByZXdhcm1lZFByb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCkgOiAwOwpAQCAtMTU1OCwxNCAr
MTIyOSwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJl
KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpz
aW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSk7CiAgICAgc2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFz
U2VjdXJlKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpKTsK
KyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1l
XSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3
b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNj
aGVtZUFzU2VjdXJlKHVybFNjaGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5
KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpz
aW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9s
aWN5KHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVy
bFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGlj
eSh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFT
dG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAg
IGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNj
aGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5S
ZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpA
QCAtMTU3OCwxNCArMTI1MywxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNj
aGVtZUFzTG9jYWwoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFs
U2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUp
OwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJV
UkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNz
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNj
aGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1
cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0
b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lz
dGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKGNvbnN0IFN0cmluZyYg
dXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5yZWdp
c3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNz
ZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxT
Y2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpKTsKKyAgICBXZWJz
aXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0
ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9B
Y2Nlc3ModXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0ZWQoY29uc3QgU3RyaW5nJiB1cmxTY2hl
bWUpCkBAIC0xNjA2LDEwICsxMjg1LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJH
bG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRs
ZXJzKCkuYWRkKHVybFNjaGVtZSk7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJl
Z2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9Cisg
ICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0
d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVG
b3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRs
ZXJzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTYxOCwxMCArMTI5NSw4IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVBy
b3RvY29sSGFuZGxlcnMoY29uCiAgICAgICAgIHJldHVybjsKIAogICAgIGdsb2JhbFVSTFNjaGVt
ZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLnJlbW92ZSh1cmxTY2hlbWUpOwotICAgIGZv
ciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9t
UHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNz
IDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVy
bFNjaGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXND
YWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTY1NSwxNiArMTMz
MCwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKENhY2hlTW9kZWwgY2Fj
aGVNb2RlbCkKIAogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6
U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
LSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCksIDApOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZv
ckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtjYWNoZU1vZGVsXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0
YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICB9
KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlG
b3JUZXN0aW5nKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIHsKICAgICB1cGRhdGVCYWNrRm9yd2Fy
ZENhY2hlQ2FwYWNpdHkoKTsKIAotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENh
Y2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCB7IH0pOwor
ICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtjYWNoZU1vZGVs
XSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3
b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVN
b2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKGNhY2hlTW9kZWwpLCB7IH0sIDApOworICAgIH0p
OwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRl
cnZhbChkb3VibGUgdGltZW91dEludGVydmFsKQpAQCAtMTY3NCwxMiArMTM1MSw3IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKGRvdWJsZSB0
aW1lb3V0SW50ZXJ2YWwpCiAKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpjcmVhdGVE
b3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSwgY29uc3QgRnJh
bWVJbmZvRGF0YSYgZnJhbWVJbmZvKQogewotICAgIHJldHVybiBlbnN1cmVOZXR3b3JrUHJvY2Vz
cygmZGF0YVN0b3JlKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcmVxdWVzdCwgZnJh
bWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzeW50
aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKLXsKLSAgICBlbnN1cmVOZXR3
b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7CisgICAg
cmV0dXJuIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0
YVN0b3JlLCAqdGhpcywgcmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwogfQog
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIoSVBDOjpSZWNlaXZlck5h
bWUgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpNZXNzYWdlUmVjZWl2ZXImIG1lc3NhZ2VSZWNl
aXZlcikKQEAgLTE3NTAsMzAgKzE0MjIsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzdG9wTWVt
b3J5U2FtcGxlcigpCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhU
JiYgbWVzc2FnZSwgVSYmIHJlcGx5KQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1f
bmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnNlbmRTeW5jKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJl
cGx5KSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkKLXsKLSAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKSwgMCk7Ci19Ci0KLXZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKLXsKLSAgICB0ZXJt
aW5hdGVTZXJ2aWNlV29ya2VycygpOwotCi0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Ci0g
ICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQogewogICAgIFZlY3RvcjxSZWZQdHI8
V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzID0gbV9wcm9jZXNzZXM7CkBAIC0xNzgxLDQwICsx
NDI5LDE1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9j
ZXNzZXMoKQogICAgICAgICBwcm9jZXNzLT50ZXJtaW5hdGUoKTsKIH0KIAotdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICgh
bV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0K
LSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJlcGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25J
bW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQotdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVz
dGluZygpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOwotfQot
Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQotewot
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
UHJvY2Vzc0RpZFJlc3VtZSgpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVT
ZXJ2aWNlV29ya2VycygpCiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIGF1dG8g
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpOwotICAgIHdoaWxlIChtX3NlcnZpY2VXb3Jr
ZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKSkKLSAgICAgICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzLmJlZ2luKCktPmRpc2FibGVTZXJ2aWNlV29ya2VycygpOworICAgIHdoaWxlIChzZXJ2aWNl
V29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNpemUoKSkKKyAgICAgICAgc2VydmljZVdvcmtlclBy
b2Nlc3NlcygpLmJlZ2luKCktPmRpc2FibGVTZXJ2aWNlV29ya2VycygpOwogI2VuZGlmCiB9CiAK
LXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYg
c2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Ci17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5mbHVzaENvb2tpZXMoc2Vzc2lvbklELCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVw
ZGF0ZUF1dG9tYXRpb25DYXBhYmlsaXRpZXMoKSBjb25zdAogewogI2lmIEVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKQpAQCAtMjA4OSwxNSArMTcxMiwyMSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpy
ZXBvcnRXZWJDb250ZW50Q1BVVGltZShTZWNvbmRzIGNwdVRpbWUsIHVpbnQ2NF90IGFjdGl2aXR5
UwogI2VuZGlmCiB9CiAKK1dlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIFdlYlByb2Nlc3NQ
b29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzOworICAgIHJldHVybiBw
cm9jZXNzZXM7Cit9CisKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NBc3NlcnRp
b25zKCkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRp
b24oKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbXSAo
V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3Jr
UHJvY2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICB9KTsKICNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCiAgICAgLy8gQ2hlY2sgb24gbmV4dCBydW4gbG9vcCBzaW5jZSB0aGUg
d2ViIHByb2Nlc3MgcHJveHkgdG9rZW5zIGFyZSBwcm9iYWJseSBiZWluZyB1cGRhdGVkLgotICAg
IGNhbGxPbk1haW5SdW5Mb29wKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXSB7
Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGZv
ciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMp
CisgICAgY2FsbE9uTWFpblJ1bkxvb3AoW10geworICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VX
b3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQogICAgICAgICAgICAgc2Vy
dmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclByb2Nlc3NBc3NlcnRpb24oKTsK
ICAgICB9KTsKICNlbmRpZgpAQCAtMjEwNyw3ICsxNzM2LDcgQEAgYm9vbCBXZWJQcm9jZXNzUG9v
bDo6aXNTZXJ2aWNlV29ya2VyUGFnZUlEKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlEKSBj
b25zdAogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICAvLyBGSVhNRTogVGhpcyBp
cyBpbmVmZmljaWVudC4KLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMsIFtwYWdlSURdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihz
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtwYWdlSURdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAg
ICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlclBhZ2VQcm94eShwYWdlSUQpOwogICAg
IH0pOwogI2VuZGlmCkBAIC0yMzI5LDE0ICsxOTU4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKQogfQogCiAjaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpZENvbW1pdENy
b3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiB0b0RvbWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6OkZs
YWc+IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgd2ViUGFn
ZVByb3h5SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCkKLXsKLSAgICBpZiAoIW1fbmV0d29y
a1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRpZENv
bW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25JRCwgZnJvbURvbWFpbiwg
dG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdl
SUQpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFj
dGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7CiAg
ICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXREb21haW5zV2l0
aFVzZXJJbnRlcmFjdGlvbihkb21haW5zKSk7CkBAIC0yMzg3LDI3ICsyMDA4LDI3IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1ZGlibGVNZWRpYUFzc2VydGlvbnMoKQogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wgdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKIHsKLSAgICBpZiAobV91c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzID09IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCisg
ICAgaWYgKHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKQogICAgICAgICByZXR1cm47CiAKLSAgICBXRUJQUk9DRVNTUE9P
TF9SRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0df
U1RBVElDKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
OiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcz0lZCkiLCB1c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzKTsKIAotICAgIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyA9IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7Ci0gICAgdGVybWluYXRlU2Vydmlj
ZVdvcmtlcnMoKTsKLSAgICB0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworICAgIHNfdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3M7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9j
ZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
KCk7CiB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiBib29sIFdlYlByb2Nlc3NQb29s
OjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLCBbXShhdXRv
JiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2VydmljZVdvcmtlclByb2Nlc3Nl
cygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBwcm9jZXNzLmhhc1NlcnZp
Y2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCk7CiAgICAgfSk7CiB9CiAKIGJv
b2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JU
ZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQ
cm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJu
IHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKTsK
ICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4
IGQxZjFmZTk2MTUwNmExZTVmMTMyNWZhOTlhNTYwOGI5NTBiNmFiNzEuLjZjODFiODZiMTNlOTJj
NDYxZGIyNmQxMjg0ZjFmYTlmYzNiYTU2NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuaApAQCAtODEsNyArODEsNiBAQCBPQkpDX0NMQVNTIFdLUHJlZmVyZW5jZU9i
c2VydmVyOwogCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEF1dG9tYXRpb25DbGllbnQ7Ci1jbGFz
cyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiBjbGFzcyBEb3dubG9hZENsaWVudDsKIGNs
YXNzIEhUVFBDb29raWVTdG9yZTsKIGNsYXNzIEluamVjdGVkQnVuZGxlQ2xpZW50OwpAQCAtMTgw
LDcgKzE3OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlx
dWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0
RG93bmxvYWRDbGllbnQoVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+JiYpOwogICAgIHZv
aWQgc2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xp
ZW50PiYmKTsKLSAgICB2b2lkIHNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYpOwogCiAg
ICAgdm9pZCBzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3Qg
U3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRs
ZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPmN1c3RvbVdlYkNvbnRlbnRT
ZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpOyB9CkBAIC0xOTEsMTcgKzE4OSw5IEBAIHB1YmxpYzoK
ICAgICAvLyBudWxsIGNoZWNrcyBpbiBXZWJQYWdlUHJveHkuCiAgICAgV2ViUHJvY2Vzc1Byb3h5
KiBkdW1teVByb2Nlc3NQcm94eShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIGNvbnN0IHsgcmV0
dXJuIG1fZHVtbXlQcm9jZXNzUHJveGllcy5nZXQoc2Vzc2lvbklEKS5nZXQoKTsgfQogCi0gICAg
Ly8gV2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2VzcyBhcyBhcHByb3BvcmlhdGUgZm9yIGN1cnJl
bnQgcHJvY2VzcyBtb2RlbC4gVGhlIGNvbm5lY3Rpb24gbXVzdCBiZSBub24tbnVsbC4KLSAgICBJ
UEM6OkNvbm5lY3Rpb24qIG5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpOwotCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9BbGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2Fn
ZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9BbGxQcm9jZXNzZXNGb3JT
ZXNzaW9uKGNvbnN0IFQmIG1lc3NhZ2UsIFBBTDo6U2Vzc2lvbklEKTsKIAotICAgIC8vIFNlbmRz
IHRoZSBtZXNzYWdlIHRvIFdlYlByb2Nlc3Mgb3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3Jp
YXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9kZWwuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
dm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSk7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gdm9pZCBzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3Mo
VCYmIG1lc3NhZ2UsIFUmJiByZXBseSk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBz
ZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2Up
OwotCiAgICAgdm9pZCBwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSop
OwogCiAgICAgV2ViUHJvY2Vzc0NhY2hlJiB3ZWJQcm9jZXNzQ2FjaGUoKSB7IHJldHVybiBtX3dl
YlByb2Nlc3NDYWNoZS5nZXQoKTsgfQpAQCAtMjA5LDkgKzE5OSw2IEBAIHB1YmxpYzoKICAgICAv
LyBEaXNjb25uZWN0IHRoZSBwcm9jZXNzIGZyb20gdGhlIGNvbnRleHQuCiAgICAgdm9pZCBkaXNj
b25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqKTsKIAotICAgIFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZSogd2Vic2l0ZURhdGFTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2Vic2l0ZURhdGFT
dG9yZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0UHJpbWFyeURhdGFTdG9yZShXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeyBtX3dlYnNpdGVEYXRhU3RvcmUgPSAmZGF0YVN0b3Jl
OyB9Ci0KICAgICBSZWY8V2ViUGFnZVByb3h5PiBjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmLCBS
ZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJik7CiAKICAgICB2b2lkIHBhZ2VCZWdpblVzaW5n
V2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBXZWJzaXRlRGF0YVN0b3Jl
Jik7CkBAIC0yNjIsMTAgKzI0OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFN1cHBvcnRlZFBs
dWdpbihTdHJpbmcmJiBtYXRjaGluZ0RvbWFpbiwgU3RyaW5nJiYgbmFtZSwgSGFzaFNldDxTdHJp
bmc+JiYgbWltZVR5cGVzLCBIYXNoU2V0PFN0cmluZz4gZXh0ZW5zaW9ucyk7CiAgICAgdm9pZCBj
bGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIAotICAgIFByb2Nlc3NJRCBuZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXIoKTsKICAgICBQcm9jZXNzSUQgcHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKTsK
ICAgICB2b2lkIGFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3RpbmcoUHJvY2Vz
c0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmKTsKLSAgICBi
b29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYp
OwogCiAgICAgV2ViUGFnZUdyb3VwJiBkZWZhdWx0UGFnZUdyb3VwKCkgeyByZXR1cm4gbV9kZWZh
dWx0UGFnZUdyb3VwLmdldCgpOyB9CiAKQEAgLTMwNyw4ICsyOTIsNiBAQCBwdWJsaWM6CiAgICAg
QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudCYgaGlzdG9yeUNsaWVudCgpIHsgcmV0dXJu
ICptX2hpc3RvcnlDbGllbnQ7IH0KICAgICBXZWJDb250ZXh0Q2xpZW50JiBjbGllbnQoKSB7IHJl
dHVybiBtX2NsaWVudDsgfQogCi0gICAgQVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQm
IGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIGNvbnN0IHsgcmV0dXJuICptX2N1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudDsgfQotCiAgICAgc3RydWN0IFN0YXRpc3RpY3MgewogICAgICAg
ICB1bnNpZ25lZCB3a1ZpZXdDb3VudDsKICAgICAgICAgdW5zaWduZWQgd2tQYWdlQ291bnQ7CkBA
IC0zMjQsMTIgKzMwNyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc0Rp
ZFJlc3VtZSgpOwogICAgIHZvaWQgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIAotICAgIHZv
aWQgZmx1c2hDb29raWVzKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKLQogICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNo
RmFpbEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nID0gdmFsdWU7IH0KICAgICBib29sIHNob3VsZE1ha2VOZXh0V2Vi
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRNYWtl
TmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZzsgfQotICAgIHZvaWQgc2V0U2hvdWxk
TWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsg
bV9zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1
ZTsgfQotICAgIGJvb2wgc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JU
ZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1
bmNoRmFpbEZvclRlc3Rpbmc7IH0KIAogICAgIHZvaWQgcmVwb3J0V2ViQ29udGVudENQVVRpbWUo
U2Vjb25kcyBjcHVUaW1lLCB1aW50NjRfdCBhY3Rpdml0eVN0YXRlKTsKIApAQCAtMzg4LDE5ICsz
NjcsMTMgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICAvLyBOZXR3b3JrIFByb2Nlc3MgTWFuYWdl
bWVudAotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIGVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNp
dGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3JlID0gbnVsbHB0cik7Ci0gICAgTmV0d29y
a1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX25ldHdvcmtQ
cm9jZXNzLmdldCgpOyB9CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1By
b2Nlc3NQcm94eSYpOwogCi0gICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2Vi
UHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwotCiAgICAgYm9vbCBpc1NlcnZpY2VXb3JrZXJQ
YWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmllcikgY29uc3Q7CiAjaWYgRU5BQkxFKFNFUlZJQ0Vf
V09SS0VSKQotICAgIHZvaWQgZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdv
cmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICBz
dGF0aWMgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nl
c3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBB
TDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgcmVt
b3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5Jik7Ci0gICAgc2l6
ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NlcnZpY2VX
b3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKTsgfQotICAgIHZvaWQgc2V0QWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGJvb2wgYWxsb3dzKSB7IG1fYWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyID0gYWxsb3dzOyB9Ci0gICAgYm9vbCBhbGxvd3NB
bnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoKSBjb25zdCB7IHJldHVybiBtX2FsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjsgfQorICAgIHNpemVfdCBzZXJ2aWNl
V29ya2VyUHJveGllc0NvdW50KCkgY29uc3QgeyByZXR1cm4gc2VydmljZVdvcmtlclByb2Nlc3Nl
cygpLmNvbXB1dGVTaXplKCk7IH0KICAgICB2b2lkIHVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdl
bnQoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpOwogICAgIGNvbnN0IE9wdGlvbmFsPFVzZXJDb250
ZW50Q29udHJvbGxlcklkZW50aWZpZXI+JiB1c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVy
Rm9yU2VydmljZVdvcmtlcnMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJDb250ZW50Q29udHJvbGxl
cklERm9yU2VydmljZVdvcmtlcjsgfQogICAgIGJvb2wgaGFzU2VydmljZVdvcmtlckZvcmVncm91
bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdDsKQEAgLTQ1OSw4ICs0MzIsNiBAQCBwdWJsaWM6
CiAgICAgYm9vbCBhbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSBjb25zdCB7IHJldHVy
biBtX2Fsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eTsgfQogICAgIGJvb2wgc2hvdWxkVGFr
ZVVJQmFja2dyb3VuZEFzc2VydGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkVGFrZVVJQmFj
a2dyb3VuZEFzc2VydGlvbjsgfQogCi0gICAgdm9pZCBzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5k
KGJvb2wgYmFja2dyb3VuZCk7Ci0gICAgCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAgICAgdm9pZCBn
YW1lcGFkQ29ubmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYsIFdlYkNvcmU6OkV2ZW50TWFrZXNHYW1l
cGFkc1Zpc2libGUpOwogICAgIHZvaWQgZ2FtZXBhZERpc2Nvbm5lY3RlZChjb25zdCBVSUdhbWVw
YWQmKTsKQEAgLTQ5OCw3ICs0NjksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckN1cnJlbnRN
b2RpZmllclN0YXRlRm9yVGVzdGluZygpOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKLSAgICB2b2lkIGRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVy
KFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgZnJvbURv
bWFpbiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIHRvRG9tYWluLCBPcHRpb25T
ZXQ8V2ViQ29yZTo6Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6RmxhZz4sIFdlYlBh
Z2VQcm94eUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsKICAgICB2b2lkIHNl
dERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4+JiYpOwogICAgIHZvaWQgc2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0aW5n
KGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5RG9tYWluLCBjb25z
dCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdGhpcmRQYXJ0eURvbWFpbiwgYm9vbCBzaG91
bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAg
ICB2b2lkIHNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJik7CkBAIC01MjUsOCArNDk1LDggQEAgcHVibGljOgogICAgIAog
ICAgIFBsdWdJbkF1dG9TdGFydFByb3ZpZGVyJiBwbHVnSW5BdXRvU3RhcnRQcm92aWRlcigpIHsg
cmV0dXJuIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI7IH0KIAotICAgIHZvaWQgc2V0VXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKLSAgICBib29sIHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3VzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3M7IH0KKyAgICBzdGF0aWMgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzKGJvb2wpOworICAgIHN0YXRpYyBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MoKSB7IHJldHVybiBzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7IH0K
IAogI2lmIEVOQUJMRShDRlBSRUZTX0RJUkVDVF9NT0RFKQogICAgIHZvaWQgbm90aWZ5UHJlZmVy
ZW5jZXNDaGFuZ2VkKGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgT3B0aW9uYWw8U3RyaW5nPiYgZW5jb2RlZFZhbHVlKTsKQEAgLTUzOCw5ICs1MDgsMTUgQEAg
cHVibGljOgogICAgIGludDMyX3QgdXNlcklkKCkgY29uc3QgeyByZXR1cm4gbV91c2VySWQ7IH0K
ICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgT1NPYmplY3RQdHI8eHBjX29iamVj
dF90PiB4cGNFbmRwb2ludE1lc3NhZ2UoKSBjb25zdDsKLSAgICB2b2lkIHNlbmROZXR3b3JrUHJv
Y2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4gZW5k
cG9pbnRNZXNzYWdlKTsKKyAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOworICAgIHN0YXRpYyBW
ZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKTsKKwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgc3RhdGljIFN0cmluZyBjb29raWVTdG9yYWdl
RGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsK
KyAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKKyAgICBzdGF0
aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5n
IGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC01
NTYsOCArNTMyLDYgQEAgcHJpdmF0ZToKICAgICBXZWJQcm9jZXNzUHJveHkmIGNyZWF0ZU5ld1dl
YlByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQg
PSBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkOjpObyk7CiAgICAgdm9pZCBpbml0aWFsaXpl
TmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmLCBXZWJzaXRlRGF0YVN0b3JlKiwgV2ViUHJv
Y2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQ6Ok5v
KTsKIAotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLQogICAgIHZvaWQgaGFuZGxlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYg
bWVzc2FnZUJvZHkpOwogICAgIHZvaWQgaGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNz
YWdlQm9keSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyRGF0YSYmKT4mJik7CiAKQEAgLTU4
MSwxNCArNTU1LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdXNlc1NpbmdsZVdlYlByb2Nlc3Mo
KSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPnVzZXNTaW5nbGVXZWJQcm9jZXNzKCk7
IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3RhdGljIFN0cmluZyBjb29raWVT
dG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3Rv
cnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAg
ICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMg
U3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwotI2VuZGlmCi0KICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICB2b2lkIHJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CiAg
ICAgdm9pZCB1bnJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CkBAIC02MzAsOSArNTk2
LDggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWFrUHRyPFdlYlBy
b2Nlc3NQcm94eT4+IG1fZHVtbXlQcm9jZXNzUHJveGllczsgLy8gTGlnaHR3ZWlnaHQgV2ViUHJv
Y2Vzc1Byb3h5IG9iamVjdHMgd2l0aG91dCBiYWNraW5nIHByb2Nlc3MuCiAKICNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCi0gICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3NlcnZp
Y2VXb3JrZXJQcm9jZXNzZXM7CisgICAgc3RhdGljIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94
eT4mIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKTsKICAgICBib29sIG1fd2FpdGluZ0Zvcldvcmtl
ckNvbnRleHRQcm9jZXNzQ29ubmVjdGlvbiB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2FsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlciB7IGZhbHNlIH07CiAgICAgU3RyaW5nIG1f
c2VydmljZVdvcmtlclVzZXJBZ2VudDsKICAgICBPcHRpb25hbDxXZWJQcmVmZXJlbmNlc1N0b3Jl
PiBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlczsKICAgICBPcHRpb25hbDxVc2VyQ29udGVudENv
bnRyb2xsZXJJZGVudGlmaWVyPiBtX3VzZXJDb250ZW50Q29udHJvbGxlcklERm9yU2VydmljZVdv
cmtlcjsKQEAgLTY0OCw3ICs2MTMsNiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxB
UEk6OkF1dG9tYXRpb25DbGllbnQ+IG1fYXV0b21hdGlvbkNsaWVudDsKICAgICBVbmlxdWVSZWY8
QVBJOjpEb3dubG9hZENsaWVudD4gbV9kb3dubG9hZENsaWVudDsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4gbV9oaXN0b3J5Q2xpZW50OwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiAKICAgICBSZWZQdHI8V2ViQXV0b21hdGlvblNlc3Np
b24+IG1fYXV0b21hdGlvblNlc3Npb247CiAKQEAgLTY4MCw4ICs2NDQsNiBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9tZW1vcnlTYW1wbGVyRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgZG91YmxlIG1f
bWVtb3J5U2FtcGxlckludGVydmFsIHsgMTQwMC4wIH07CiAKLSAgICBSZWZQdHI8V2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmU7Ci0KICAgICB0eXBlZGVmIEhhc2hN
YXA8Y29uc3QgY2hhciosIFJlZlB0cjxXZWJDb250ZXh0U3VwcGxlbWVudD4sIFB0ckhhc2g8Y29u
c3QgY2hhcio+PiBXZWJDb250ZXh0U3VwcGxlbWVudE1hcDsKICAgICBXZWJDb250ZXh0U3VwcGxl
bWVudE1hcCBtX3N1cHBsZW1lbnRzOwogCkBAIC03MTQsOCArNjc2LDYgQEAgcHJpdmF0ZToKIAog
ICAgIGJvb2wgbV9wcm9jZXNzVGVybWluYXRpb25FbmFibGVkIHsgdHJ1ZSB9OwogCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7Ci0KICAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8RGljdGlvbmFyeUNhbGxiYWNrPj4gbV9kaWN0aW9u
YXJ5Q2FsbGJhY2tzOwogCiAjaWYgVVNFKFNPVVApCkBAIC03MjgsNyArNjg4LDYgQEAgcHJpdmF0
ZToKICAgICBib29sIG1fYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5OwogICAgIGJvb2wg
bV9zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uOwogICAgIGJvb2wgbV9zaG91bGRNYWtl
TmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBt
X3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyB7IGZhbHNl
IH07CiAgICAgYm9vbCBtX3RjY1ByZWZlcmVuY2VFbmFibGVkIHsgZmFsc2UgfTsKIAogICAgIFVz
ZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIgbV91c2VyT2JzZXJ2YWJsZVBhZ2VDb3VudGVyOwpAQCAt
ODIwLDMxICs3NzksMTMgQEAgcHJpdmF0ZToKICNlbHNlCiAgICAgYm9vbCBtX2lzRGVsYXllZFdl
YlByb2Nlc3NMYXVuY2hEaXNhYmxlZCB7IGZhbHNlIH07CiAjZW5kaWYKLSAgICBib29sIG1fdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyB7IGZhbHNlIH07CisgICAgc3RhdGljIGJvb2wg
c191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwogCiAjaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKICAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
PiBtX2RvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uOwogI2VuZGlmCi0KLSNpZiBQTEFURk9STShD
T0NPQSkKLSAgICBPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IG1fZW5kcG9pbnRNZXNzYWdlOwot
I2VuZGlmCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKQotewotICAgIGVu
c3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZv
cndhcmQ8VD4obWVzc2FnZSksIDApOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1lc3NhZ2UpCiB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBkNjYxMDMz
OGI2Y2Y2MGEyN2E2Zjc1ZGFlYzM0OWE4ZjcyYWIzYjg1Li41ZTJjNzA4ZjIyZjk3YmVhZjM3MDkz
NTJjYjY5ZTNkNGMyOGUxZDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQcm94eS5jcHAKQEAgLTI2OCw2ICsyNjgsOSBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6c2V0
V2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpCiB7CiAgICAgQVNT
RVJUKCFtX3dlYnNpdGVEYXRhU3RvcmUpOwogICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9ICZkYXRh
U3RvcmU7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgZGF0YVN0b3JlLnNlbmROZXR3b3JrUHJv
Y2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKCp0aGlzKTsKKyNlbmRpZgogICAgIHVwZGF0ZVJl
Z2lzdHJhdGlvbldpdGhEYXRhU3RvcmUoKTsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpTZXRXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyhwcm9jZXNzUG9vbCgpLndlYlByb2Nlc3NE
YXRhU3RvcmVQYXJhbWV0ZXJzKCp0aGlzLCBkYXRhU3RvcmUpKSwgMCk7CiB9CkBAIC03MzgsNyAr
NzQxLDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
KHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbiwgTWUKIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6
OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpH
ZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQogewotICAg
IG1fcHJvY2Vzc1Bvb2wtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92
ZShyZXBseSkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24oKnRoaXMsIFdURk1vdmUocmVwbHkpKTsKIH0KIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKQEAgLTk1NSw5ICs5NTgsOCBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1
bmNoaW5nKFByb2Nlc3NMYXVuY2hlciogbGF1bmNoZXIsIElQQzo6Q29ubmVjdAogICAgIH0KIAog
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGF1dG8gZW5kcG9pbnRNZXNzYWdlID0gcHJvY2Vzc1Bv
b2woKS54cGNFbmRwb2ludE1lc3NhZ2UoKTsKLSAgICBpZiAoZW5kcG9pbnRNZXNzYWdlKQotICAg
ICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbigpLT54cGNDb25uZWN0
aW9uKCksIGVuZHBvaW50TWVzc2FnZS5nZXQoKSk7CisgICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9y
ZSkKKyAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRw
b2ludFRvV2ViUHJvY2VzcygqdGhpcyk7CiAjZW5kaWYKIAogICAgIFJFTEVBU0VfQVNTRVJUKCFt
X3dlYkNvbm5lY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4
IDdjNDQwODUxNjc3MzY4YjVkZjg5YTg2ZmY0ZDNiNTE1MzRiOTBiYjcuLmNiOGIzYmFhNGFkMGI1
NjgxNTUxNWMwNWUxODEzNmIzMjRmM2EyZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3Jl
Q29jb2EubW0KQEAgLTI4LDEwICsyOCwxMiBAQAogCiAjaW1wb3J0ICJDb29raWVTdG9yYWdlVXRp
bHNDRi5oIgogI2ltcG9ydCAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNpbXBvcnQgIk5l
dHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIlNhbmRib3hVdGlsaXRpZXMuaCIKICNpbXBv
cnQgIlN0b3JhZ2VNYW5hZ2VyLmgiCiAjaW1wb3J0ICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJv
eHkuaCIKICNpbXBvcnQgIldlYlByZWZlcmVuY2VzS2V5cy5oIgorI2ltcG9ydCAiV2ViUHJvY2Vz
c1Byb3h5LmgiCiAjaW1wb3J0ICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKICNp
bXBvcnQgIldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL05l
dHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgpAQCAtNDQsNiArNDYsNyBAQAogI2ltcG9ydCA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgogI2ltcG9y
dCA8d3RmL1VSTC5oPgorI2ltcG9ydCA8d3RmL2NvY29hL0VudGl0bGVtZW50cy5oPgogI2ltcG9y
dCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
QEAgLTU2Miw0ICs1NjUsMjggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWluaXRpYWxpemVB
cHBCb3VuZERvbWFpbnMoKQogfQogI2VuZGlmCiAKK2Jvb2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxl
bWVudCkKK3sKKyAgICByZXR1cm4gV1RGOjpoYXNFbnRpdGxlbWVudChuZXR3b3JrUHJvY2Vzcygp
LmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgp
KTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRw
b2ludFRvV2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCit7CisgICAgaWYgKHBy
b2Nlc3Muc3RhdGUoKSAhPSBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OlN0YXRlOjpSdW5uaW5nKQor
ICAgICAgICByZXR1cm47CisgICAgYXV0byogY29ubmVjdGlvbiA9IHByb2Nlc3MuY29ubmVjdGlv
bigpOworICAgIGlmICghY29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gbWVz
c2FnZSA9IG5ldHdvcmtQcm9jZXNzKCkueHBjRW5kcG9pbnRNZXNzYWdlKCk7CisgICAgaWYgKCFt
ZXNzYWdlKQorICAgICAgICByZXR1cm47CisgICAgeHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNzYWdl
KGNvbm5lY3Rpb24tPnhwY0Nvbm5lY3Rpb24oKSwgbWVzc2FnZSk7Cit9CisKK3ZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb0FsbFdlYlByb2Nlc3Nl
cygpCit7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCisgICAgICAgIHNl
bmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKHByb2Nlc3MpOworfQorCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuY3BwCmluZGV4IDA4MzBjYTc1YTdmYzM4ZTY0NWI3NzViMzliMzM3NWQ0YzIw
NTAzN2QuLmJjNjdlYWZjMTU1MTNiODUzOWY1MjBkNDQ5NjdmMzZjYWE3MDNkODYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRh
U3RvcmUuY3BwCkBAIC0zMiwxMSArMzIsMTQgQEAKICNpbmNsdWRlICJBdXRoZW50aWNhdG9yTWFu
YWdlci5oIgogI2luY2x1ZGUgIkRldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgiCiAjaW5jbHVkZSAi
R1BVUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1vY2tB
dXRoZW50aWNhdG9yTWFuYWdlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bkluZm8uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAi
U2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0
YXR1cy5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkQ2FjaGUuaCIKKyNpbmNsdWRlICJXZWJD
b29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXQySW5pdGlhbGl6ZS5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDYWNoZS5oIgpAQCAt
NzUsNiArNzgsMTAgQEAKICNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oIgog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJEZWZhdWx0V2ViQnJvd3Nl
ckNoZWNrcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgYm9vbCBh
bGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zOwpAQCAtODMsMTMgKzkwLDE5IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmln
aW5zKCkKICAgICBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zID0gdHJ1ZTsK
IH0KIAotc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYg
bm9uRGVmYXVsdERhdGFTdG9yZXMoKQorc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdl
YnNpdGVEYXRhU3RvcmUqPiYgYWxsRGF0YVN0b3JlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
aXNVSVRocmVhZCgpKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6OlNl
c3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+PiBtYXA7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAor
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2
b2lkKFdlYnNpdGVEYXRhU3RvcmUmKT4mJiBmdW5jdGlvbikKK3sKKyAgICBmb3IgKGF1dG8qIGRh
dGFTdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICAgICAgZnVuY3Rpb24oKmRh
dGFTdG9yZSk7Cit9CisKIFJlZjxXZWJzaXRlRGF0YVN0b3JlPiBXZWJzaXRlRGF0YVN0b3JlOjpj
cmVhdGVOb25QZXJzaXN0ZW50KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJzaXRl
RGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0
ZW50OjpObyksIFBBTDo6U2Vzc2lvbklEOjpnZW5lcmF0ZUVwaGVtZXJhbFNlc3Npb25JRCgpKSk7
CkBAIC0xMTUsNyArMTI4LDcgQEAgV2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShS
ZWY8V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYgY29uZmlndXIKICNlbmRpZgogewog
ICAgIFdURjo6c2V0UHJvY2Vzc1ByaXZpbGVnZXMoYWxsUHJpdmlsZWdlcygpKTsKLSAgICBtYXli
ZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOworICAgIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1h
cCgpOwogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKQEAgLTEyOCwxNyArMTQxLDEyIEBAIFdlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRl
RGF0YVN0b3JlKCkKIAogICAgIHBsYXRmb3JtRGVzdHJveSgpOwogCi0gICAgaWYgKG1fc2Vzc2lv
bklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgQVNT
RVJUKG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsKLSAg
ICAgICAgbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOwotICAgICAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVt
b3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgQVNTRVJUKGFs
bERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOworICAgIGFsbERhdGFTdG9y
ZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOworICAgIG5ldHdvcmtQcm9jZXNzKCkucmVtb3ZlU2Vz
c2lvbigqdGhpcyk7CiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQotICAgICAgICBpZiAoYXV0byog
Z3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkK
LSAgICAgICAgICAgIGdwdVByb2Nlc3NQcm94eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7
CisgICAgaWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94eSA9IEdQVVByb2Nlc3NQcm94eTo6c2luZ2xl
dG9uSWZDcmVhdGVkKCkpCisgICAgICAgIGdwdVByb2Nlc3NQcm94eS0+cmVtb3ZlU2Vzc2lvbiht
X3Nlc3Npb25JRCk7CiAjZW5kaWYKIH0KIApAQCAtMTY5LDE3ICsxNzcsMzMgQEAgYm9vbCBXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkKICAgICByZXR1cm4gISFnbG9i
YWxEZWZhdWx0RGF0YVN0b3JlKCk7CiB9CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWF5YmVS
ZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKQordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3Rl
cldpdGhTZXNzaW9uSURNYXAoKQogewotICAgIGlmIChtX3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gbm9uRGVm
YXVsdERhdGFTdG9yZXMoKS5hZGQobV9zZXNzaW9uSUQsIHRoaXMpOwotICAgICAgICBBU1NFUlRf
VU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgIGF1dG8gcmVzdWx0ID0gYWxs
RGF0YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7CisgICAgQVNTRVJUX1VOVVNFRChy
ZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKK30KKworV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0
ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQoreworICAgIHJldHVybiBhbGxEYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCk7
Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9j
ZXNzKCkKK3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpIHsKKyAgICAgICAgaWYgKG1fc2Vz
c2lvbklELmlzRXBoZW1lcmFsKCkgfHwgbV9zZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSkKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpkZWZhdWx0TmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZSgp
OworICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp0aGlzKTsKICAgICB9CisK
KyAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7CiB9CiAKLVdlYnNpdGVEYXRhU3RvcmUqIFdl
YnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJzaXRlRGF0
YVN0b3JlOjpuZXR3b3JrUHJvY2VzcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHNlc3Npb25JRCAh
PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpID8gbm9uRGVmYXVsdERhdGFTdG9y
ZXMoKS5nZXQoc2Vzc2lvbklEKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8V2Vi
c2l0ZURhdGFTdG9yZSY+KCp0aGlzKS5uZXR3b3JrUHJvY2VzcygpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlZ2lzdGVyUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCkBA
IC0xOTUsMTIgKzIxOSw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dW5yZWdpc3RlclByb2Nl
c3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogICAgIG1fcHJvY2Vzc2VzLnJlbW92ZShwcm9j
ZXNzKTsKIH0KIAotV2ViUHJvY2Vzc1Bvb2wqIFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29s
Rm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKQotewotICAgIGF1dG8gcG9vbHMgPSBwcm9jZXNz
UG9vbHMoMSk7Ci0gICAgcmV0dXJuIHBvb2xzLmlzRW1wdHkoKSA/IG51bGxwdHIgOiBwb29scy5i
ZWdpbigpLT5nZXQoKTsKLX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNvbHZlRGlyZWN0
b3JpZXNJZk5lY2Vzc2FyeSgpCiB7CiAgICAgaWYgKG1faGFzUmVzb2x2ZWREaXJlY3RvcmllcykK
QEAgLTQ0MCwyOCArNDU4LDIxIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5k
QXBwbHkoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBPCiAjZW5kaWYKIAog
ICAgIGF1dG8gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZU5ldHdvcmtQcm9jZXNz
QWNjZXNzVHlwZUZvckRhdGFGZXRjaChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7Ci0gICAg
aWYgKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkg
ewotICAgICAgICBhdXRvIHBvb2xzID0gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09IFByb2Nl
c3NBY2Nlc3NUeXBlOjpMYXVuY2ggPyBlbnN1cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nlc3NQb29s
cygpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKLSAgICAgICAg
ICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7Ci0gICAgICAgICAgICBjYXNl
IFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAo
IXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBQcm9jZXNz
QWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVO
ZXR3b3JrUHJvY2Vzcyh0aGlzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
ICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKLSAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLQorICAgIHN3aXRjaCAobmV0d29ya1Byb2Nl
c3NBY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgorICAg
ICAgICBuZXR3b3JrUHJvY2VzcygpOworICAgICAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7
CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJ
ZkxhdW5jaGVkOgorICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewogICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5mZXRjaFdlYnNpdGVEYXRhKG1fc2Vzc2lvbklE
LCBkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bv
b2xdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CisgICAgICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5mZXRjaFdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIGZldGNoT3B0aW9u
cywgW2NhbGxiYWNrQWdncmVnYXRvcl0oV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsKICAgICAg
ICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjayhXVEZN
b3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgorICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBhdXRvIHdlYlByb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZVdlYlByb2Nl
c3NBY2Nlc3NUeXBlRm9yRGF0YUZldGNoKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgpKTsKQEAg
LTcyNCwzMSArNzM1LDI0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRp
b25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAgICAgYm9vbCBkaWRO
b3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEgPSBmYWxzZTsKICNlbmRpZgog
ICAgIGF1dG8gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZU5ldHdvcmtQcm9jZXNz
QWNjZXNzVHlwZUZvckRhdGFSZW1vdmFsKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgpKTsKLSAg
ICBpZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25l
KSB7Ci0gICAgICAgIGF1dG8gcG9vbHMgPSBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPT0gUHJv
Y2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaCA/IGVuc3VyZVByb2Nlc3NQb29scygpIDogcHJvY2Vzc1Bv
b2xzKCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewotICAgICAg
ICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKLSAgICAgICAgICAgIGNh
c2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlm
ICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFByb2Nl
c3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKHRoaXMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgotICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotCisgICAgc3dpdGNoIChuZXR3b3JrUHJv
Y2Vzc0FjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Cisg
ICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNz
KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25s
eUlmTGF1bmNoZWQ6CisgICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7CiAgICAgICAgICAg
ICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAg
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lv
bklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nl
c3NQb29sXSB7CisgICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5kZWxldGVXZWJzaXRlRGF0
YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5n
Q2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpCiAgICAgICAgICAgICBkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vi
c2l0ZURhdGEgPSB0cnVlOwogI2VuZGlmCiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgYXV0byB3ZWJQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVXZWJQcm9jZXNzQWNjZXNzVHlw
ZUZvckRhdGFSZW1vdmFsKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgpKTsKQEAgLTg5MywxNCAr
ODk3LDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSkgewogICAgICAgICBpZiAoIWRpZE5vdGlmeU5ldHdv
cmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAg
ICAgICAgICAgICAgICBwcm9jZXNzLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0
YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygp
OwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vz
c2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsK
KyAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFj
aygpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYWxsYmFja0FnZ3Jl
Z2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwpAQCAtOTk0LDEyICs5OTMsMTAgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRh
dGFUeXBlcywgY29uc3QgVmUKICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xz
KSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewogICAg
ICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAg
ICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAg
IGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7CisgICAgICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MoKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQ
cm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKQEAgLTEwMjEsNyArMTAxOCw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlw
ZXMsIGNvbnN0IFZlCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVn
YXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKG1fc2Vzc2lvbklELCBk
YXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1lcywgSFNUU0NhY2hlSG9zdE5hbWVzLCBy
ZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7Cisg
ICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyht
X3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBvcmlnaW5zLCBjb29raWVIb3N0TmFtZXMsIEhTVFNDYWNo
ZUhvc3ROYW1lcywgcmVnaXN0cmFibGVEb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9j
ZXNzUG9vbF0gewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVu
ZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtMTE4MCwxOCAr
MTE3NywxMiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyhTZWNvbmRzIHNlY29uZHMpCiB7
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kU3lu
YyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRG
b3JUZXN0aW5nKHNlY29uZHMpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VX
b3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZp
Y2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKHNlY29uZHMpLCBNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgp
LCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFNlcnZpY2VXb3JrZXJUaW1l
b3V0Rm9yVGVzdGluZygpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nl
c3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2Vydmlj
ZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSwgTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0
aW5nOjpSZXBseSgpLCAwKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJ
Q1MpCkBAIC0xMjAxLDggKzExOTIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1heFN0
YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBtYXhpbXVtRW50cnlDb3VudCwgQ29tcGxldAogCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50cnlDb3Vu
dCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtX3Nlc3Npb25JRCwgbWF4aW11bUVudHJ5
Q291bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjExLDggKzEy
MDEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXpl
X3QgcHJ1bmVUYXJnZXRDb3VudCwgQ29tcGxldGlvbgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVuZUVu
dHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UHJ1bmVF
bnRyaWVzRG93blRvKG1fc2Vzc2lvbklELCBwcnVuZVRhcmdldENvdW50LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVy
aW5nVGltZShTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTEyMjEsOCArMTIxMCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRs
ZXI8CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRz
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNldEdyYW5kZmF0aGVyaW5nVGltZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5p
bXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjMxLDIwICsxMjE5
LDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJl
Y29yZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcywKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAg
ICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGltZUJl
dHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TWlu
aW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogICAgIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3Mo
bV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZHVtcFJlc291cmNl
TG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVS
TCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNQcmV2YWxlbnQpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTI1NiwxMiArMTIzNyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNQcmV2YWxl
bnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1ByZXZhbGVudFJlc291cmNlKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFuZGZh
dGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNQcmV2
YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI3MywxMiArMTI0OSw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJv
Y2Vzcy0+aXNHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzR3JhbmRmYXRo
ZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjkyLDggKzEyNjMsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQ
cmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBVUkwmIHVybCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTMwNywx
MCArMTI3Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGUoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpCiAgICAgCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRQcmV2YWxlbnRSZXNvdXJj
ZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1Zl
cnlQcmV2YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTMyMiwxMiArMTI4OSw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJM
JiB1cmwsIENvbXBsZXRpb25IYW5kbGVyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAg
ICAgICAgIHByb2Nlc3MtPmlzVmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmlzVmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVS
TCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xMzQxLDEwICsxMzAzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGUKICAgICAKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+c2V0VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2Uo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxk
Q2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM1Myw4ICsx
MzEyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHYKICAgICAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxk
Q2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHZh
bHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1v
dmFsKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29u
c3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM2OCwyMiArMTMyNiwxNCBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihj
b25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjbwogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4obV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRT
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0
b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBVUkwmIHN1YkZy
YW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
RG9tYWluKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzOTcs
MjMgKzEzNDcsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVUKIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1
YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwg
fSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJl
c291cmNlVW5kZXIoY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFt
ZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNz
LT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIo
ZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVu
ZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNl
VVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25z
dCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTQyNywxMCArMTM2OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VV
UkwsCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3Vi
cmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVk
VG8gfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJlc291
cmNlVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDQyLDEyICsxMzgwLDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBV
UkwmIHN1YnJlc291cmNlVVIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
c3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVj
dGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QgVVJM
JiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTE0NTksMTIgKzEzOTIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBwcm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9w
RnJhbWVVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVk
aXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRv
cEZyYW1lVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDc2LDI1ICsxNDA0LDE0IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3Qg
VVJMJiB0b3BGcmFtZVVSTCwgY29uCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3Rl
ZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVk
QXNSZWRpcmVjdGluZ1RvKGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIGNvbnN0IFVSTCYg
dXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
ICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29t
cGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVk
QXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVk
aXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNTA2LDYwICsx
NDIzLDQxIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+Y2xlYXJQ
cmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVm
YXVsdFZhbHVlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0
VmFsdWVzKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRW
YWx1ZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkoKQogewogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zdWJtaXRUZWxlbWV0cnkobV9z
ZXNzaW9uSUQsIFtdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc3VibWl0VGVs
ZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoV2FsbFRpbWUgbW9kaWZpZWRTaW5j
ZSwgU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIHNob3VsZEdyYW5kZmF0aGVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Np
b25JRCwgbW9kaWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVk
dWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVkU2luY2Us
IHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBzdHJ1Y3QgQ2FsbGJhY2tBZ2dyZWdhdG9y
IDogUmVmQ291bnRlZDxDYWxsYmFja0FnZ3JlZ2F0b3I+IHsKLSAgICAgICAgQ2FsbGJhY2tBZ2dy
ZWdhdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAg
IHN0cnVjdCBMb2NhbENhbGxiYWNrQWdncmVnYXRvciA6IFJlZkNvdW50ZWQ8TG9jYWxDYWxsYmFj
a0FnZ3JlZ2F0b3I+IHsKKyAgICAgICAgTG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGly
ZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgICAgICA6IG1fY29t
cGxldGlvbkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgICAgIH07CiAKLSAgICAg
ICAgfkNhbGxiYWNrQWdncmVnYXRvcigpCisgICAgICAgIH5Mb2NhbENhbGxiYWNrQWdncmVnYXRv
cigpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAK
QEAgLTE1NzQsMzggKzE0NzIsMzEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkoQ29tcGxldGlvbkhhbmRsZXI8dm8KICAgICAgICAg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+IG1fY29tcGxldGlvbkhhbmRsZXI7CiAgICAgICAgIFZl
Y3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiBtX3Jl
c3VsdHM7CiAgICAgfTsKLQotICAgIFJlZlB0cjxDYWxsYmFja0FnZ3JlZ2F0b3I+IGNhbGxiYWNr
QWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQ
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpLmdldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhU3VtbWFyeShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vz
c1Bvb2xdKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlE
YXRhPiYmIGRhdGEpIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFJl
c3VsdChXVEZNb3ZlKGRhdGEpKTsKLSAgICAgICAgICAgIH0pOworICAgIAorICAgIGF1dG8gbG9j
YWxDYWxsYmFja0FnZ3JlZ2F0b3IgPSBhZG9wdFJlZihuZXcgTG9jYWxDYWxsYmFja0FnZ3JlZ2F0
b3IoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKKyAgICAKKyAgICBhdXRvIHd0ZkNhbGxi
YWNrQWdncmVnYXRvciA9IFdURjo6Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3JdIHsK
KyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1
bW1hcnkobV9zZXNzaW9uSUQsIFtsb2NhbENhbGxiYWNrQWdncmVnYXRvcl0oVmVjdG9yPFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYgZGF0YSkgeworICAg
ICAgICAgICAgbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFJlc3VsdChXVEZNb3ZlKGRhdGEp
KTsKICAgICAgICAgfSk7Ci0gICAgfQorICAgIH0pOworICAgIAorICAgIGZvciAoYXV0byogcHJv
Y2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHBy
b2Nlc3NQb29sLT5zZW5kUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShbd3Rm
Q2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNj
aGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0
aWNzIHNob3VsZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDbGVh
ckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgeyB9LCBzaG91bGRHcmFuZGZhdGhl
ciwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Np
b25JRCwgeyB9LCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRh
dGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNvb2tp
ZUJsb2NraW5nVXBkYXRlKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNvb2tpZUJs
b2NraW5nVXBkYXRlKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRz
UHJvY2Vzc2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xNjE0LDI0ICsxNTA1LDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVT
dGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKENvbXBsZXRpb25IYW5kCiAgICAgCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVs
ZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcobV9zZXNzaW9uSUQsIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25J
RCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
b29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
IHsKLSAgICAgICAgICAgIHByb2Nlc3MtPnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyht
X3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKG1fc2Vz
c2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1cmwsIFNlY29uZHMgc2Vjb25kcywgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY0MywyMiAr
MTUyMywxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFVSTCYg
dXJsLCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYQogCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldExhc3RTZWVuKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRM
YXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
c2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UoaW50IGRvbWFpbklELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+ZG9tYWluSURFeGlzdHNJbkRh
dGFiYXNlKG1fc2Vzc2lvbklELCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5kb21haW5JREV4aXN0c0luRGF0YWJhc2UobV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVy
Z2VTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHRvcEZyYW1l
VXJsMSwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDIsIFNlY29uZHMgbGFzdFNlZW4sIGJvb2wgaGFk
VXNlckludGVyYWN0aW9uLCBTZWNvbmRzIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGJvb2wg
aXNHcmFuZGZhdGhlcmVkLCBib29sIGlzUHJldmFsZW50LCBib29sIGlzVmVyeVByZXZhbGVudCwg
dW5zaWduZWQgZGF0YVJlY29yZHNSZW1vdmVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjcwLDEwICsxNTQyLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVS
TCYgdG9wRnIKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNz
LT5tZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVV
cmwxIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RT
ZWVuLCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3Jh
bmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1v
dmVkLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5tZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdG9wRnJhbWVVcmwxIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJh
bWVVcmwyIH0sIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwg
ZGF0YVJlY29yZHNSZW1vdmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0
IFVSTCYgdXJsLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsLCBib29sIGlzUHJldmFsZW50LCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjg1LDE4ICsxNTU0LDE0IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29u
c3QgVVJMJiB1cmwsIGJvb2wgaGFkCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgcHJvY2Vzcy0+aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlv
biwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLmluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlz
U2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGlzUHJldmFsZW50LCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXROb3RpZnlQ
YWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKG1fc2Vzc2lvbklELCB2YWx1
ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChib29sIHZhbHVlLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzA0LDggKzE1
NjksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBsZQogICAgIHVzZUV4cGxpY2l0SVRQU3RhdGUo
KTsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVO
ZXR3b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1f
c2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoV2ViUGFn
ZVByb3h5SWRlbnRpZmllciBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0
cmluZz4mJiBkb21haW5zKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MTYsNyArMTU4MCw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoV2Vi
UGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICB3ZWJQYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50
cmllcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAKQEAg
LTE3MjQsOCArMTU4OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbihTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25ICiB7CiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGltZVRvTGl2
ZVVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24o
Y29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE3MzksMTAgKzE2MDIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1Vz
ZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZAogICAg
IAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5sb2dVc2Vy
SW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkubG9nVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3NTQsMTMg
KzE2MTQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dgogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
b21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNIYWRVc2Vy
SW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVybCwg
Y29uc3QgVVJMJiB0b3BVcmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xNzcyLDEzICsxNjI2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVybCwgY29u
c3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWxh
dGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wVXJs
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5pc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB0b3BVcmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzky
LDEwICsxNjQwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlv
bihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm8KICAgICAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+Y2xlYXJVc2VySW50ZXJhY3Rpb24o
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJVc2Vy
SW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MDks
MTAgKzE2NTQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29u
c3QgVVJMJiB1cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBDbwogICAgIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0R3JhbmRmYXRoZXJlZCht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaXNHcmFuZGZh
dGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNldEdyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZh
bHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
ODIxLDEwICsxNjYzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFz
ZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYKICAgICAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFVzZUlUUERhdGFi
YXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRVc2VJVFBEYXRhYmFzZShtX3Nlc3Npb25JRCwgdmFs
dWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoY29uc3QgVVJM
JiBmcm9tVVJMLCBjb25zdCBVUkwmIHRvVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODMzLDYyICsxNjcyLDM4IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoY29u
c3QgVVJMJiBmCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBwcm9jZXNzLT5zZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9VUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Q3Jvc3NTaXRl
TG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3Rpbmco
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5yZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5yZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nl
c3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBpbmNs
dWRlSHR0cE9ubHlDb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpbmNsdWRlSHR0cE9ubHlDb29r
aWVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFn
ZUZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+aGFzTG9jYWxTdG9yYWdlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzTG9jYWxTdG9yYWdlKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGlu
Zyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNJ
c29sYXRlZFNlc3Npb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5oYXNJc29sYXRlZFNlc3Npb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxk
RG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRTaG91bGREb3du
Z3JhZGVSZWZlcnJlckZvclRlc3RpbmcoZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGREb3duZ3JhZGVSZWZlcnJl
ckZvclRlc3RpbmcoZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogI2lm
ICFQTEFURk9STShDT0NPQSkKQEAgLTE5MTksMTAgKzE3MzQsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoV2ViQ29yZTo6VGhpcmRQYXJ0
eUNvb2tpZQogICAgICAgICAgICAgd2ViUHJvY2Vzcy5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlKGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICAgICB9CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5n
TW9kZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDb29raWVCbG9ja2lu
Z01vZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhib29sIGVuYWJs
ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5
MzAsMTAgKzE3NDIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZQogICAgIGF1dG8gZmxhZyA9
IGVuYWJsZWQgPyBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6WWVz
IDogV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6Ok5vOwogCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNl
dFNob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcobV9zZXNzaW9u
SUQsIGZsYWcsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGlu
ZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdl
YnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk0MSwyMCArMTc1MCwxNCBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBh
cnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIGF1dG8gbW9kZSA9IGVuYWJsZWQgPyBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llcyA6IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlOjpOb25lOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEZp
cnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgbW9k
ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcobV9zZXNzaW9u
SUQsIG1vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RDb29raWVz
Rm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVz
dGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRU
b1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFy
dHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eVVSTCwgY29u
c3QgVVJMJiBjbmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTk2Niw4ICsxNzY5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3QKIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25J
RCwgZmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNz
aW9uSUQsIGZpcnN0UGFydHlVUkwuaG9zdCgpLnRvU3RyaW5nKCksIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0
eUNOQU1FRG9tYWluRm9yVGVzdGluZyhjb25zdCBVUkwmIGNuYW1lVVJMLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTc5LDE4ICsxNzgxLDEzIEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFy
dHlDTkFNRURvbWFpbkZvclRlc3RpbmcoCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAg
cHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNOQU1FRG9t
YWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBj
bmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3JhZ2UoKSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5jTG9jYWxTdG9yYWdlKCksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNo
ZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5OTgsOCArMTc5NSw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3Vy
Y2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMo
bV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShzZWNvbmRzKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwpAQCAt
MjAwOSwyNiArMTgwNSwxMiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdl
Q2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQwogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNldENhY2hlTWF4QWdlQ2FwRm9y
UHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2
YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRpZgogfQogCi1ib29sIFdlYnNp
dGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJiBwcm9j
ZXNzUG9vbCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPSBw
cm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCkpCi0gICAgICAgIHJldHVybiBwcm9jZXNzUG9v
bERhdGFTdG9yZSA9PSB0aGlzOwotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0g
cHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuIG5ldHdvcmtQcm9j
ZXNzUHJveHktPmhhc1Nlc3Npb24obV9zZXNzaW9uSUQpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQogSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9j
ZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBjb25zdAogewogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYlBy
b2Nlc3NQb29sPj4gcHJvY2Vzc1Bvb2xzOwpAQCAtMjA0Myw5ICsxODI1LDYgQEAgSGFzaFNldDxS
ZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6
ZV90IGxpbWl0KSBjb24KICAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkgewogICAgICAg
ICAvLyBDaGVjayBpZiB3ZSdyZSBvbmUgb2YgdGhlIGxlZ2FjeSBkYXRhIHN0b3Jlcy4KICAgICAg
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICAgICAgaWYgKCFpc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbCgqcHJvY2Vz
c1Bvb2wpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCiAgICAgICAgICAgICBwcm9jZXNz
UG9vbHMuYWRkKHByb2Nlc3NQb29sKTsKICAgICAgICAgICAgIGlmIChwcm9jZXNzUG9vbHMuc2l6
ZSgpID09IGxpbWl0KQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjA4NCw4ICsxODYzLDcg
QEAgc3RhdGljIFN0cmluZyBjb21wdXRlTWVkaWFLZXlGaWxlKGNvbnN0IFN0cmluZyYgbWVkaWFL
ZXlEaXJlY3RvcnkpCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dTcGVjaWZpY0hUVFBT
Q2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNlcnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGUs
IGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZp
Y2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dT
cGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUlu
Zm8oKSwgaG9zdCksIDApOwogfQogCiBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
PiBXZWJzaXRlRGF0YVN0b3JlOjptZWRpYUtleU9yaWdpbnMoY29uc3QgU3RyaW5nJiBtZWRpYUtl
eXNTdG9yYWdlRGlyZWN0b3J5KQpAQCAtMjE0MCw2ICsxOTE4LDQ5IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6cmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURp
cmVjdG9yeSwKICAgICB9CiB9CiAKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1Byb3h5LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8mKT4mJiBy
ZXBseSkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwg
d2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwgcmVwbHkgPSBX
VEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsKKyAgICAgICAg
aWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc1ZhbGlkKGNvbm5lY3Rp
b25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5ICYmIHdlYWtUaGlzKSkgewor
ICAgICAgICAgICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgICAgIFJFTEVB
U0VfTE9HX0lGKGlzUGVyc2lzdGVudCgpLCBQcm9jZXNzLCAiZ2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uOiBGYWlsZWQgZmlyc3QgYXR0ZW1wdCwgcmV0cnlpbmciKTsKKyAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3ZWJQcm9jZXNzUHJv
eHksIFdURk1vdmUocmVwbHkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKQorewor
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5kaWRU
ZXJtaW5hdGUoKTsKKyAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKK30KKwordm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCit7CisgICAgaWYgKCFt
X25ldHdvcmtQcm9jZXNzKQorICAgICAgICByZXR1cm47CisgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
dGVybWluYXRlKCk7CisgICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Cit9CisKK3ZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRl
c3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1t
aW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVz
dGluZygpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1t
aW5lbnRseUZvclRlc3RpbmcoKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByb2Nl
c3NEaWRSZXN1bWUoKTsKK30KKwogYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKQEAgLTIxNjksMTcgKzE5OTAsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgICAgIAog
ICAgICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwogICAgICAgICAKLSAgICAg
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAg
ICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgdHJ1
ZSkpOworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgdHJ1ZSks
IDApOworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAg
ICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihNZXNz
YWdlczo6V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQodHJ1ZSks
IG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nl
c3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSkpOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSksIDApOworICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAgICAgcHJvY2Vz
c1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlByb2Nlc3M6
OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGZhbHNlKSwgbV9zZXNzaW9uSUQpOwot
ICAgIH0KIAogICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgPSBmYWxzZTsKICNl
bHNlCkBAIC0yMTkxLDggKzIwMTAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0U3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjayhGdW5jdGlvbjx2b2lkKGNvbnN0IFN0
cmluZyYpPiYmIGNhbGxiYWNrKQogewogICAgIGlmIChjYWxsYmFjaykgewotICAgICAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgICAgICBwcm9jZXNz
UG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpKTsKKyAgICAgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSwgMCk7CiAgICAgfQogICAgIAog
ICAgIG1fc3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwpAQCAt
MjIxMSw4ICsyMDI5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgZW5hYmxlZCwgQ29tcGxldGkKIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShtX3Nlc3Npb25JRCwgZW5hYmxlZCwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKICAg
ICBVTlVTRURfUEFSQU0oY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMjIyNywyMCArMjA0NCwxNSBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJh
bChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1l
cmFsKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7
CisjZW5kaWYKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRp
b25EZWJ1Z01vZGUoYm9vbCBlbmFibGVkKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOwogfQog
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIyNjIsNDggKzIwNzQs
MTkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZFN0YXRpc3RpY3NJ
bldlYlByb2Nlc3NlcyhDb21wbGV0aW9uSGFuZGwKIH0KICNlbmRpZgogCi1WZWN0b3I8V2ViQ29y
ZTo6Q29va2llPiBXZWJzaXRlRGF0YVN0b3JlOjpwZW5kaW5nQ29va2llcygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihtX3BlbmRpbmdDb29raWVzKTsKLX0KLQotdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjphZGRQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29v
a2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMucmVtb3ZlSWYoWyZjb29raWVdKGF1dG8mIHBl
bmRpbmdDb29raWUpIHsKLSAgICAgICAgcmV0dXJuIHBlbmRpbmdDb29raWUuaXNLZXlFcXVhbChj
b29raWUpOwotICAgIH0pOwotICAgIG1fcGVuZGluZ0Nvb2tpZXMuYWRkKGNvb2tpZSk7Ci19Ci0K
LXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3Jl
OjpDb29raWUmIGNvb2tpZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZShjb29raWUp
OwotfQotICAgIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdDb29raWVzKCkK
LXsKLSAgICBtX3BlbmRpbmdDb29raWVzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6Zmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8g
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5mbHVzaENvb2tpZXMoc2Vzc2lvbklEKCksIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5mbHVzaENvb2tpZXMoc2Vzc2lvbklEKCks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93cykKIHsK
LSAgICBmb3IgKGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldl
YlNvY2tldChhbGxvd3MpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNT
TENlcnRpZmljYXRlRm9yV2ViU29ja2V0OjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQ6OlJlcGx5KCksIDAp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQog
ewotICAgIGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNz
UG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vz
c2lvbklEKCkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKCkpLCAwKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpkaXNwYXRjaE9uUXVldWUoRnVuY3Rpb248dm9pZCgpPiYmIGZ1
bmN0aW9uKQpAQCAtMjMyOSw4ICsyMTEyLDYgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMg
V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAKICAgICByZXNvbHZlRGlyZWN0b3JpZXNJ
Zk5lY2Vzc2FyeSgpOwogCi0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBlbmRpbmdD
b29raWVzKCk7Ci0KICAgICBhdXRvIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBt
X2NvbmZpZ3VyYXRpb24tPnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUhh
bmRsZTsKICAgICBpZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgp
KQpAQCAtMjQzNSw3ICsyMjE2LDEwIEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNp
dGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMoKQogICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZWQgPSBtX3Jl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOwogI2VuZGlmCiAgICAgcGxhdGZvcm1TZXROZXR3
b3JrUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKLQorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFwcEhhc1JlcXVlc3RlZENyb3NzV2Vi
c2l0ZVRyYWNraW5nUGVybWlzc2lvbiA9IGhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5n
UGVybWlzc2lvbigpOworI2VuZGlmCisgICAgCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiB9CiAK
QEAgLTI0NjUsMTAgKzIyNDksNiBAQCBBUEk6OkhUVFBDb29raWVTdG9yZSYgV2Vic2l0ZURhdGFT
dG9yZTo6Y29va2llU3RvcmUoKQogICAgIHJldHVybiAqbV9jb29raWVTdG9yZTsKIH0KIAotdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpCi17Ci19Ci0KIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lk
KFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghaXNQZXJzaXN0ZW50KCkpIHsKQEAgLTI0
NzYsMjMgKzIyNTYsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VE
ZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZUQKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyku
Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7Ci0gICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGRldGFpbHMpKTsKLSAgICAgICAgfSk7Ci0gICAg
ICAgIC8vIEZJWE1FOiBTdXBwb3J0IGZldGNoaW5nIGZyb20gbXVsdGlwbGUgcG9vbHMuCi0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBBU1NFUlQoIWNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmdldExvY2FsU3RvcmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWls
cykgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGRldGFpbHMpKTsKKyAgICB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnJlc2V0UXVvdGEobV9zZXNzaW9uSUQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRRdW90
YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogI2lmICFQTEFU
Rk9STShDT0NPQSkKQEAgLTI1MTgsNyArMjI5MCwxMiBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6
Omh0dHAzRW5hYmxlZCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQotI2VuZGlmCisKK2Jvb2wg
V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmco
Y29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYgLy8gIVBMQVRG
T1JNKENPQ09BKQogCiAjaWYgIVVTRShHTElCKQogV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9y
ZTo6ZGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpCkBAIC0yNTMwLDM1
ICsyMzA3LDE4IEBAIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREZXZpY2VJ
ZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
bmFtZU9yaWdpbkluV2Vic2l0ZURhdGEoVVJMJiYgb2xkTmFtZSwgVVJMJiYgbmV3TmFtZSwgT3B0
aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNl
c3Npb24oKnRoaXMpOwotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbmFtZU9yaWdpbklu
V2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5l
d05hbWUsIGRhdGFUeXBlcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYg
RU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBC
b3VuZFNlc3Npb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNBcHBCb3Vu
ZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9u
SUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpjbGVhckFwcEJvdW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQs
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFw
cEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yNTgwLDcgKzIzNDAsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxl
dGlvbkhhbmRsZQogCiAgICAgcHJvcGFnYXRlQXBwQm91bmREb21haW5zKGdsb2JhbERlZmF1bHRE
YXRhU3RvcmUoKS5nZXQoKSwgKmFwcEJvdW5kRG9tYWlucyk7CiAKLSAgICBmb3IgKGF1dG8qIHN0
b3JlIDogbm9uRGVmYXVsdERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICBmb3IgKGF1dG8qIHN0
b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQogICAgICAgICBwcm9wYWdhdGVBcHBCb3Vu
ZERvbWFpbnMoc3RvcmUsICphcHBCb3VuZERvbWFpbnMpOwogfQogCkBAIC0yNTg4LDEwICsyMzQ4
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBcHBCb3VuZERvbWFpbnNGb3JJVFAoY29u
c3QgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWIKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRBcHBCb3VuZERvbWFpbnNG
b3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEFwcEJvdW5k
RG9tYWluc0ZvclJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAjZW5kaWYKIApAQCAtMjU5OSwxNiArMjM1Niwy
NiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdv
cmtQcm9jZXNzKGNvbnN0IFN0cmluZyYgYnVuZAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAg
ICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVu
dGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAg
bmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Y2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRp
ZmllcihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xl
YXJCdW5kbGVJZGVudGlmaWVyKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cit9CisKK3N0YXRp
YyBib29sIG5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaFNob3VsZEZhaWxGb3JUZXN0aW5nIHsgZmFs
c2UgfTsKKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1
bmNoRmFpbEZvclRlc3RpbmcoKQoreworICAgIG5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaFNob3Vs
ZEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKK30KKworYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpzaG91
bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKQoreworICAgIHJl
dHVybiBzdGQ6OmV4Y2hhbmdlKG5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaFNob3VsZEZhaWxGb3JU
ZXN0aW5nLCBmYWxzZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAppbmRleCAwZGM5MWYyM2M0MTU0Mzk1
YzhlYmY4OTBmMzViZDAxODBjZDUxYWFkLi5mMGUwODcxNTEzY2Y3NjliYzk5NWY0YTE1OWRmNjg5
Y2Y3ZDdlNGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC01Myw2ICs1Myw4IEBACiAKICNpZiBQTEFURk9S
TShDT0NPQSkKICNpbmNsdWRlIDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgorI2luY2x1ZGUg
PHd0Zi9PU09iamVjdFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgog
I2VuZGlmCiAKICNpZiBVU0UoQ1VSTCkKQEAgLTc1LDYgKzc3LDcgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiBjbGFzcyBBdXRoZW50aWNhdG9yTWFuYWdlcjsKIGNsYXNzIFNlY0tleVByb3h5U3RvcmU7
CiBjbGFzcyBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTsKK2NsYXNzIE5ldHdvcmtQcm9jZXNzUHJv
eHk7CiBjbGFzcyBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcjsKIGNsYXNzIFdlYkNlcnRpZmlj
YXRlSW5mbzsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKQEAgLTg0LDYgKzg3LDggQEAgY2xhc3MgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOwogZW51bSBjbGFzcyBDYWNoZU1vZGVsIDogdWlu
dDhfdDsKIGVudW0gY2xhc3MgV2Vic2l0ZURhdGFGZXRjaE9wdGlvbiA6IHVpbnQ4X3Q7CiBlbnVt
IGNsYXNzIFdlYnNpdGVEYXRhVHlwZSA6IHVpbnQzMl90OworCitzdHJ1Y3QgTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uSW5mbzsKIHN0cnVjdCBXZWJzaXRlRGF0YVJlY29yZDsKIHN0cnVjdCBXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVyczsKIApAQCAtMTA5LDcgKzExNCwxMiBAQCBwdWJsaWM6CiAg
ICAgV2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYs
IFBBTDo6U2Vzc2lvbklEKTsKICAgICB+V2Vic2l0ZURhdGFTdG9yZSgpOwogCi0gICAgc3RhdGlj
IFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25J
RChQQUw6OlNlc3Npb25JRCk7CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaFdlYnNpdGVEYXRhU3Rv
cmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0YVN0b3JlJik+JiYpOworICAgIAorICAgIE5ldHdv
cmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKCkgY29uc3Q7CisgICAgTmV0d29ya1Byb2Nl
c3NQcm94eSYgbmV0d29ya1Byb2Nlc3MoKTsKKworICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3Jl
KiBleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CiAKICAgICBi
b29sIGlzUGVyc2lzdGVudCgpIGNvbnN0IHsgcmV0dXJuICFtX3Nlc3Npb25JRC5pc0VwaGVtZXJh
bCgpOyB9CiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9z
ZXNzaW9uSUQ7IH0KQEAgLTExOSw2ICsxMjksMTUgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0
IFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIHByb2Nlc3NlcygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJvY2Vzc2VzOyB9CiAKKyAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihX
ZWJQcm9jZXNzUHJveHkmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbkluZm8mKT4mJik7CisgICAgdm9pZCB0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
cygpOworICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3Rp
bmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJv
Y2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKKyAgICB2b2lkIHNlbmROZXR3
b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOworICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5l
dHdvcmtQcm9jZXNzUHJveHkmKTsKKyAgICBzdGF0aWMgdm9pZCBtYWtlTmV4dE5ldHdvcmtQcm9j
ZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKTsKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRNYWtlTmV4
dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKTsKKwogICAgIGJvb2wgcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wpOwogICAgIGJvb2wgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RlYnVnTW9kZSgpIGNvbnN0OwpAQCAtMjM1LDE1ICsyNTQsOCBAQCBwdWJsaWM6CiAKICAgICBE
ZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSYgZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKSB7IHJldHVy
biBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlLmdldCgpOyB9CiAKLSAgICBXZWJQcm9jZXNzUG9v
bCogcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGJvb2wgaXNB
c3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmKSBjb25zdDsKLQogICAgIFdlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHBhcmFtZXRlcnMoKTsKIAotICAgIFZlY3RvcjxXZWJDb3Jl
OjpDb29raWU+IHBlbmRpbmdDb29raWVzKCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRQZW5kaW5nQ29v
a2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwotICAgIHZvaWQgcmVtb3ZlUGVuZGluZ0Nvb2tp
ZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIGNsZWFyUGVuZGluZ0Nvb2tpZXMo
KTsKICAgICB2b2lkIGZsdXNoQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwog
ICAgIHZvaWQgY2xlYXJDYWNoZWRDcmVkZW50aWFscygpOwogCkBAIC0yNTEsNiArMjYzLDExIEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJik7
CiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1hQQ0Vu
ZHBvaW50VG9XZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYpOworICAgIHZvaWQgc2VuZE5ldHdv
cmtQcm9jZXNzWFBDRW5kcG9pbnRUb0FsbFdlYlByb2Nlc3NlcygpOworI2VuZGlmCisKICNpZiBV
U0UoQ1VSTCkKICAgICB2b2lkIHNldE5ldHdvcmtQcm94eVNldHRpbmdzKFdlYkNvcmU6OkN1cmxQ
cm94eVNldHRpbmdzJiYpOwogICAgIGNvbnN0IFdlYkNvcmU6OkN1cmxQcm94eVNldHRpbmdzJiBu
ZXR3b3JrUHJveHlTZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fcHJveHlTZXR0aW5nczsgfQpA
QCAtMjcyLDggKzI4OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1vY2tXZWJBdXRoZW50aWNh
dGlvbkNvbmZpZ3VyYXRpb24oV2ViQ29yZTo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJh
dGlvbiYmKTsKICNlbmRpZgogCi0gICAgdm9pZCBkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwot
CiAgICAgY29uc3QgV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24o
KSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24uZ2V0KCk7IH0KIAogICAgIFdlYnNpdGVEYXRhU3Rv
cmVDbGllbnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50LmdldCgpOyB9CkBAIC0yODMsNiAr
Mjk4LDggQEAgcHVibGljOgogCiAgICAgdm9pZCByZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFVS
TCYmLCBVUkwmJiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CiAKKyAgICBib29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JU
ZXN0aW5nKGNvbnN0IFN0cmluZyYpOworCiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikK
ICAgICBXZWJEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXImIGRldmlj
ZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fZGV2aWNl
T3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyOyB9CiAjZW5kaWYKQEAgLTM1OSw3
ICszNzYsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25z
dCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksIFdhbGxUaW1lIG1vZGlmaWVkU2lu
Y2UpOwogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlh
S2V5c1N0b3JhZ2VEaXJlY3RvcnksIGNvbnN0IEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmln
aW5EYXRhPiYpOwogCi0gICAgdm9pZCBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwor
ICAgIHZvaWQgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAKICNpZiBFTkFCTEUoQVBQX0JP
VU5EX0RPTUFJTlMpCiAgICAgc3RhdGljIE9wdGlvbmFsPEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4+PiBhcHBCb3VuZERvbWFpbnNJZkluaXRpYWxpemVkKCk7CkBAIC0zOTcsOCAr
NDE0LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdl
RW5hYmxlZCB7IHRydWUgfTsKICNlbmRpZgogCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29raWU+
IG1fcGVuZGluZ0Nvb2tpZXM7Ci0gICAgCiAgICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5
PiBtX3Byb2Nlc3NlczsKIAogICAgIGJvb2wgbV9pc0l0cFN0YXRlRXhwbGljaXRseVNldCB7IGZh
bHNlIH07CkBAIC00MTksNiArNDM0LDcgQEAgcHJpdmF0ZToKICAgICBVbmlxdWVSZWY8V2Vic2l0
ZURhdGFTdG9yZUNsaWVudD4gbV9jbGllbnQ7CiAKICAgICBSZWZQdHI8QVBJOjpIVFRQQ29va2ll
U3RvcmU+IG1fY29va2llU3RvcmU7CisgICAgUmVmUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1f
bmV0d29ya1Byb2Nlc3M7CiAKICNpZiBIQVZFKEFQUF9TU08pCiAgICAgVW5pcXVlUmVmPFNPQXV0
aG9yaXphdGlvbkNvb3JkaW5hdG9yPiBtX3NvQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRl
RGF0YVN0b3JlQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9j
dXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcAppbmRleCAwZTBjMDZlMWRlZDQyYzE0YjgwMmUx
NTg5ZjMxZGM2Mjk4MmFjMzkzLi42NGI2Yzc0ZDA4NmVjNDViYjYyZGE2ZWUwODIyM2IyOGRiNzNh
NTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJs
L1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcApAQCAtNDIsOCArNDIsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKFdlYkNvcmU6
OkN1cmxQcm94eVNldHRpbmdzJiYgcHJveAogewogICAgIG1fcHJveHlTZXR0aW5ncyA9IFdURk1v
dmUocHJveHlTZXR0aW5ncyk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fc2Vzc2lv
bklELCBtX3Byb3h5U2V0dGluZ3MpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX3Nlc3Npb25JRCwg
bV9wcm94eVNldHRpbmdzKSwgMCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291
cC5jcHAKaW5kZXggMTJmOWNkODE5YjZkY2NhOGFjNTA5MmEzMGRkOTNjNTNiOGVlOTM0Mi4uNmY5
NjNmMTQyMTAwNDc1OGUyZDY1ZWQ5NjI2ZTJhNDlhM2Y0ZjkxMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRl
RGF0YVN0b3JlU291cC5jcHAKQEAgLTM5LDggKzM5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
JgogICAgIGF1dG8mIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzOwogICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0
ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3Jh
Z2VFbmFibGVkOwogCi0gICAgaWYgKGF1dG8qIHByb2Nlc3NQb29sID0gcHJvY2Vzc1Bvb2xGb3JD
b29raWVTdG9yYWdlT3BlcmF0aW9ucygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1f
c2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3Jh
Z2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VU
eXBlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVQZXJz
aXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tp
ZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlVHlwZSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVy
c2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChib29sIGVuYWJsZWQpCkBAIC01Miw4ICs1
MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9y
YWdlRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcGVyc2lz
dGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRQZXJzaXN0ZW50
Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKG1fc2Vzc2lvbklELCBtX3BlcnNpc3RlbnRDcmVkZW50
aWFsU3RvcmFnZUVuYWJsZWQpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKG1f
c2Vzc2lvbklELCBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQpLCAwKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcAppbmRleCAwYTg0YTc1OTBkOWE5ODViZmM5
OTY4NGE0ODk1MTM3NGU1YjI5NDI5Li4yN2YyM2VhMDY1ZGM3NWNlNGE4MjcwYzU3NmVhMmFhNTVh
YjBkYzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nl
c3NQcm94eUdMaWIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJv
Y2Vzc1Byb3h5R0xpYi5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6
OnBsYXRmb3JtR2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMm
IGwKICAgICAgICAgaWYgKCFkYXRhU3RvcmUpIHsKICAgICAgICAgICAgIC8vIFByZXdhcm1lZCBw
cm9jZXNzZXMgZG9uJ3QgaGF2ZSBhIFdlYnNpdGVEYXRhU3RvcmUgeWV0LCBzbyB1c2UgdGhlIHBy
aW1hcnkgV2Vic2l0ZURhdGFTdG9yZSBmcm9tIHRoZSBXZWJQcm9jZXNzUG9vbC4KICAgICAgICAg
ICAgIC8vIFRoZSBwcm9jZXNzIHdvbid0IGJlIHVzZWQgaWYgY3VycmVudCBXZWJzaXRlRGF0YVN0
b3JlIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IG9uZS4KLSAg
ICAgICAgICAgIGRhdGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wtPndlYnNpdGVEYXRhU3RvcmUoKTsK
KyAgICAgICAgICAgIGRhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3Rv
cmUoKS5wdHIoKTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChkYXRhU3RvcmUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJv
eHlTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdl
clByb3h5U291cC5jcHAKaW5kZXggOWY3YmUzYzk0MWI2Y2QwYTFiOTRjYjEzNjA5OGYzYTA0MWNl
ZmY5OS4uYWMwNGUzOGE1N2IyMTU5YmViNDJmMzg0NzliNDRmNWUyNmRlZGJiMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3Vw
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eVNvdXAuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vz
c1Byb3h5LmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKIApAQCAtMzMsOCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwg
U291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKLSAgICBtX2Nv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlTWFwLnNldChzZXNzaW9uSUQsIHN0ZDo6bWFrZV9wYWlyKHN0
b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOwotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0
ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9u
SUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VU
eXBlJiBzdG9yYWdlVHlwZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAppbmRleCBiZmJiZjk2NjRlNDgzNTMwOTcwOTcx
MWRmZDZjMTM0MTU3MzJiZGFjLi43ZmU0YWNhMGM1ZDJkMGU3ZmMwZDlkNWE0ZmEyN2ViY2M4MGE2
NzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQ
b29sU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNz
UG9vbFNvdXAuY3BwCkBAIC0zNywzMCArMzcsMjQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewotICAgIE5ldHdvcmtT
ZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
czsKLSAgICBzdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVy
c2lzdGVudFN0b3JhZ2UoZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgZGVmYXVs
dFNlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgZGVmYXVsdFNl
c3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7Ci0gICAgaWYgKG1f
d2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnBlcnNp
c3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlcnNp
c3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoKTsKKyAgICAvLyBGSVhNRTogbV9pbml0aWFs
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRh
U3RvcmUuCisgICAgLy8gRklYTUU6IG1faWdub3JlVExTRXJyb3JzIHNob3VsZCBiZSBtb3ZlZCB0
byB0aGUgV2Vic2l0ZURhdGFTdG9yZSBvciByZW1vdmVkLgorICAgIC8vIEZJWE1FOiBtX25ldHdv
cmtQcm94eVNldHRpbmdzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4K
IAotICAgIHBhcmFtZXRlcnMuY29va2llQWNjZXB0UG9saWN5ID0gbV9pbml0aWFsSFRUUENvb2tp
ZUFjY2VwdFBvbGljeTsKLSAgICBwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyA9IG1faWdub3Jl
VExTRXJyb3JzOwogICAgIHBhcmFtZXRlcnMubGFuZ3VhZ2VzID0gdXNlclByZWZlcnJlZExhbmd1
YWdlcygpOwotICAgIHBhcmFtZXRlcnMucHJveHlTZXR0aW5ncyA9IG1fbmV0d29ya1Byb3h5U2V0
dGluZ3M7CiAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IHRydWU7CiB9
CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRM
U0Vycm9ycykKIHsKKyAgICAvLyBGSVhNRTogTW92ZSB0aGlzIHRvIFdlYnNpdGVEYXRhU3RvcmUu
CiAgICAgbV9pZ25vcmVUTFNFcnJvcnMgPSBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgaWYgKG5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRJZ25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsK
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoY29uc3Qg
V2ViQ29yZTo6U291cE5ldHdvcmtQcm94eVNldHRpbmdzJiBzZXR0aW5ncykKIHsKKyAgICAvLyBG
SVhNRTogTW92ZSB0aGlzIHRvIFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgbV9uZXR3b3JrUHJveHlT
ZXR0aW5ncyA9IHNldHRpbmdzOwotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29y
a1Byb3h5U2V0dGluZ3MobV9uZXR3b3JrUHJveHlTZXR0aW5ncyksIDApOwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb25JbmZvLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgKaW5kZXggODM1MGRiYWNmOGQ1NTdlNTdjOGJjZmMzZTkz
ZDA5N2I4OTQ2YWJiOC4uOWY0Njg1ZDEzYWJkMmI0YWM4YzUzNzhiOGU1MTJmOWMwMjlkYjNiMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uSW5mby5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0hU
VFBDb29raWVBY2NlcHRQb2xpY3kuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjM1NzA5MzBkNThkZjc5
OWMwY2JmY2Y3M2UzNDNkMzI5NTAyOTk0MC4uMmVkZGQ1NWM3NTIwODU0NTk4OGVjNGFiNzhjYzVh
MDEyNTRjNWI0ZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDIwLTA5LTIzICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3b3JrUHJvY2Vzc1Byb3h5
IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVEYXRhU3RvcmUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjA0MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vc3QgY2hhbmdlcyB0
byB0ZXN0cyBhcmUganVzdCBjYWxsaW5nIGEgZnVuY3Rpb24gb24gdGhlIFdLV2Vic2l0ZURhdGFT
dG9yZSBpbnN0ZWFkIG9mIHRoZSBXS1Byb2Nlc3NQb29sCisgICAgICAgIGJlY2F1c2Ugd2Ugd2Fu
dCB0byBkbyBzb21ldGhpbmcgd2l0aCB0aGUgbmV0d29yayBwcm9jZXNzIGFuZCBpdCBoYXMgYSBu
ZXcgb3duZXIuCisgICAgICAgIEV4Y2VwdGlvbnMgYXJlIG5vdGVkIGlubGluZS4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVu
ZGluZ0Nvbm5lY3Rpb24ubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6ZG93bmxvYWRBdFJhdGUpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbToKKyAgICAgICAgKFRFU1Qp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVj
b3ZlcnkubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW06CisgICAgICAgIChURVNUKToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5m
b1VwZ3JhZGVUb1YyLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tOgorICAg
ICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bmRleGVkREJNdWx0aVByb2Nlc3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tOgorICAg
ICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1t
OgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW06Cisg
ICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tOgorICAgICAgICAo
Y2hlY2tSZWNvdmVyeUFmdGVyQ3Jhc2gpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW06CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tOgorICAg
ICAgICAoVEVTVCk6CisgICAgICAgIFRoaXMgdGVzdCB3YXMgbWFraW5nIGEgV0tXZWJzaXRlRGF0
YVN0b3JlLCBnZXR0aW5nIGl0cyByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3MgZGlyZWN0b3J5LAor
ICAgICAgICBwdXR0aW5nIHRoaW5ncyBpbiB0aGF0IGRpcmVjdG9yeSwgdGhlbiBzdGFydGluZyB0
aGUgbmV0d29yayBwcm9jZXNzIGFuZCBtYWtpbmcgc3VyZSBldmVyeXRoaW5nCisgICAgICAgIHdv
cmtzIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBuZXR3b3JrIHByb2Nlc3MuICBOb3csIG5ldHdvcmsg
cHJvY2VzcyBpbml0aWFsaXphdGlvbiBoYXBwZW5zIHdoZW4gYQorICAgICAgICBXS1dlYnNpdGVE
YXRhU3RvcmUgaXMgaW5zdGFudGlhdGVkLCBzbyB3ZSBuZWVkIHRvIHB1dCB0aGluZ3MgdGhlcmUg
YmVmb3JlIGluc3RhbnRpYXRpbmcgYSBXS1dlYnNpdGVEYXRhU3RvcmUuCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW06CisgICAg
ICAgIEJlZm9yZSB0aGlzIGNoYW5nZSwgZWFjaCBXS1Byb2Nlc3NQb29sIGhhZCBpdHMgb3duIG5l
dHdvcmsgcHJvY2Vzcywgd2hpY2ggaG9sZHMgdGhlIHNlcnZpY2Ugd29ya2VyIHJlZ2lzdHJ5Cisg
ICAgICAgIGZvciB0aGUgV2Vic2l0ZURhdGFTdG9yZXMgdXNlZCB3aXRoIHRoYXQgcHJvY2VzcyBw
b29sLiAgTm93LCB0aGUgbmV0d29yayBwcm9jZXNzIHN0aWxsIG5lZWRzIHRvIGhhdmUgYSBzZXJ2
aWNlCisgICAgICAgIHdvcmtlciByZWdpc3RyeSBpbiBpdCwgYnV0IHdoZW4gd2UgcmVjZWl2ZSBh
IG1lc3NhZ2UgZnJvbSBpdCBsb29raW5nIGZvciBhIHdlYiBwcm9jZXNzIHRvIHJ1biB0aGUgc2Vy
dmljZQorICAgICAgICB3b3JrZXIsIHdlIGdvIGFyYml0cmFyaWx5IHRvIHRoZSBmaXJzdCBwcm9j
ZXNzIHBvb2wgdGhhdCBoYXMgYSBwcm9jZXNzIHdlIGNhbiB1c2UuICBUaGlzIGxvZ2ljIGlzIGlu
IAorICAgICAgICBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzLiAgQmVjYXVzZSB3ZSB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9v
bCBlYWNoCisgICAgICAgIHRpbWUsIHNldHRpbmcgdGhlIGN1c3RvbSB1c2VyIGFnZW50IHRvIHR3
byBkaWZmZXJlbnQgdGhpbmdzIGluIHR3byBkaWZmZXJlbnQgcHJvY2VzcyBwb29scyBjYXVzZXMg
b25seSBvbmUKKyAgICAgICAgdG8gYmUgdXNlZC4gIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBpbiBw
cmFjdGljZSwgdGhvdWdoLCBiZWNhdXNlIHRoZSBvbmx5IGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0
aGUgU1BJIHRvCisgICAgICAgIHNldCBhIHNlcnZpY2Ugd29ya2VyJ3MgY3VzdG9tIHVzZXIgYWdl
bnQgaXMgU2FmYXJpLCB3aGljaCBvbmx5IGhhcyBvbmUgcHJvY2VzcyBwb29sLiAgVGhpcyB0ZXN0
IHN0aWxsIHZlcmlmaWVzCisgICAgICAgIHRoYXQgYSB1c2VyIGFnZWludCBpcyBjb3JyZWN0bHkg
c2VudC4KKyAgICAgICAgU2ltaWxhcmx5LCB0aGUgdGVzdHMgdGhhdCBjb3VudCBzZXJ2aWNlIHdv
cmtlciBwcm9jZXNzZXMgZWl0aGVyIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMgb3IgbmVlZCB0byBi
ZSBydW4gd2l0aAorICAgICAgICBvbmUgcHJvY2VzcyBwb29sIHBlciBwYXJlbnQgcHJvY2Vzcy4g
IFRvIGtlZXAgdGhlIHJlc3VsdHMgdGhlIHNhbWUsIEkgc2VwYXJhdGVkIHRoZSB0ZXN0cyBpbnRv
IGRpZmZlcmVudAorICAgICAgICBURVNUKFNlcnZpY2VXb3JrZXJzLCAuLi4pIG1hY3JvcyB3aGlj
aCBhcmUgcnVuIGluIHNlcGFyYXRlIHBhcmVudCBwcm9jZXNzZXMuCisgICAgICAgIFRoZSB0ZXN0
IFJlc3RvcmVGcm9tRGlza05vbkRlZmF1bHRTdG9yZSBuZWVkcyB0byB1c2UgdGhlIHNhbWUgZGF0
YSBzdG9yZSBmb3IgYm90aCBXS1dlYlZpZXdzIG5vdyBiZWNhdXNlIG90aGVyd2lzZQorICAgICAg
ICB0aGVyZSB3YXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgc3RhcnR1cCBvZiBhIG5ldyBuZXR3
b3JrIHByb2Nlc3MgdGhhdCB3YXNuJ3QgdGhlcmUgYmVmb3JlIGJlY2F1c2Ugd2Ugd2VyZSB1c2lu
ZyB0aGUKKyAgICAgICAgc2FtZSBwcm9jZXNzIHBvb2wgYW5kIHRoZXJlZm9yZSB0aGUgc2FtZSBu
ZXR3b3JrIHByb2Nlc3MuICBJIGFkZGVkIHNwaW5uaW5nIHRoZSBydW4gbG9vcCBhbmQgc2xlZXBp
bmcgdG8gYmUgYWJsZSB0bworICAgICAgICByZXByb2R1Y2UgdGhlIHJhY2UgY29uZGl0aW9uIGZh
aWx1cmUgYW5kIEkgdXNlIHRoZSBzYW1lIFdLV2Vic2l0ZURhdGFTdG9yZSB0byB1c2UgdGhlIHNh
bWUgbmV0d29yayBwcm9jZXNzLCB3aGljaCB3YXMKKyAgICAgICAgdGhlIGludGVudCBvZiB1c2lu
ZyB0aGUgc2FtZSBXS1Byb2Nlc3NQb29sIGJlZm9yZS4gIFRoZSB0ZXN0IHN0aWxsIHRlc3RzIHRo
YXQgdGhlIHJlZ2lzdHJhdGlvbiBpcyByZS11c2VkIHdoZW4gd2UgYXJlCisgICAgICAgIG5vdCB1
c2luZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW06CisgICAgICAgICgt
W0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQ
YW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6Cisg
ICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdKToK
KyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxd
KToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICBUaGlzIGlzIHRoZSB3aG9sZSBwb2ludCBvZiBt
ZSBkb2luZyB0aGlzLgorICAgICAgICBJIHRvb2sgYSB0ZXN0IHRoYXQgd2FzIGZsYWt5IG9ubHkg
b24gaU9TIChiZWNhdXNlIG9mIGRpZmZlcmVudCBOU0hUVFBDb29raWVTdG9yYWdlIHN5bmNpbmcg
YmVoYXZpb3IpIGFuZCBtYWRlCisgICAgICAgIGl0IGZsYWt5IG5vd2hlcmUgKGZpbmdlcnMgY3Jv
c3NlZCEpIGFuZCBhZGRlZCBhIHRlc3QgdGhhdCBjb3JyZWN0bHkgaGFuZGxlcyBzZXNzaW9uIGNv
b2tpZXMgbGlrZSB3ZSBjb3VsZCBub3QKKyAgICAgICAgYmVmb3JlIHRoaXMgY2hhbmdlLgorICAg
ICAgICBJIGFsc28gcmUtdXNlZCBzb21lIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgYW5kIG1hZGUgaXQg
c3RvcCB1c2luZyBwcm9jZXNzLWdsb2JhbCBzdGF0aWMgdmFyaWFibGVzIGZvciB0ZXN0IHN0YXRl
LgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVI
YW5kbGVyLWxlYWtzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW06CisgICAg
ICAgIChydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMpOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVByb3RvY29sc1Rl
c3QubW06CisgICAgICAgICgtW0Nsb3NlV2hpbGVTdGFydGluZ1Byb3RvY29sIHN0YXJ0TG9hZGlu
Z10pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6cnVuVGVzdCk6CisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9s
bGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENv
bnRyb2xsZXI6OmZpbmRBbmREdW1wV2ViS2l0UHJvY2Vzc0lkZW50aWZpZXJzKToKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6Om5ldHdvcmtQcm9jZXNzRGlkQ3Jhc2gpOgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KToKKyAgICAgICAgV0tD
b250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyBp
cyBub3QgbmVlZGVkLCBzbyBJIHJlbW92ZWQgaXQuCisgICAgICAgIFdLQ29udGV4dFNldFByaW1h
cnlXZWJzaXRlRGF0YVN0b3JlIGlzbid0IG5lZWRlZCBhbnkgbW9yZSBiZWNhdXNlIFdLQ29udGV4
dFJlZiAoV2ViUHJvY2Vzc1Bvb2wpIGRvZXNuJ3QKKyAgICAgICAgb3duIGEgbmV0d29yayBwcm9j
ZXNzIGFueSBtb3JlLCBzbyBpdCBkb2Vzbid0IGNhcmUgd2hpY2ggaXMgdGhlIGRlZmF1bHQgV2Vi
c2l0ZURhdGFTdG9yZS4KKyAgICAgICAgSW4gZmFjdCwgdGhlICJkZWZhdWx0IiBXZWJzaXRlRGF0
YVN0b3JlIGlzbid0IHJlYWxseSBpbXBvcnRhbnQgaW4gdGhlIG5ldHdvcmsgcHJvY2VzcyBhbnkg
bW9yZS4KKwogMjAyMC0wOS0yMyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIEhUTUxNZWRpYUVsZW1lbnQuc2V0U2lua0lkCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0Ny
YXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbQppbmRleCA5
NzM4OWYwMWZmMmVlOTliNzgzYjBiNTIxMDgwNzRmMWE4MWI2OTgxLi45N2I3MmUwMTZkZWRlNGEw
N2Q0NjUzZjNhOWJjNTJiOGY0ZjMxOTJiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jh
c2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdl
YktpdC9XS1Byb2Nlc3NHcm91cFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQ
b29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBv
cnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTg3LDcgKzg4LDcgQEAg
VEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24pCiAg
ICAgcGlkX3Qgd2ViVmlldzJQSUQgPSBbd2ViVmlldzIuZ2V0KCkgX3dlYlByb2Nlc3NJZGVudGlm
aWVyXTsKICAgICBFWFBFQ1RfTkUod2ViVmlldzFQSUQsIHdlYlZpZXcyUElEKTsKIAotICAgIHBp
ZF90IGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVyID0gW3Byb2Nlc3NQb29sLmdldCgp
IF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdOworICAgIHBpZF90IGluaXRpYWxOZXR3b3JrUHJv
Y2Vzc0lkZW50aWZpZmVyID0gW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBf
bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXTsKICAgICBFWFBFQ1RfTkUoaW5pdGlhbE5ldHdvcmtQ
cm9jZXNzSWRlbnRpZmlmZXIsIDApOwogICAgIGtpbGwoaW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRl
bnRpZmlmZXIsIFNJR0tJTEwpOwogICAgIFV0aWw6OnJ1bigmbmV0d29ya1Byb2Nlc3NDcmFzaGVk
KTsKQEAgLTk2LDcgKzk3LDcgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRo
UGVuZGluZ0Nvbm5lY3Rpb24pCiAgICAgW3dlYlZpZXcxLmdldCgpIGxvYWRSZXF1ZXN0OltOU1VS
TFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNv
dXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RX
ZWJLaXRBUEkucmVzb3VyY2VzIl1dXTsKICAgICBbd2ViVmlldzEuZ2V0KCkgX3Rlc3Rfd2FpdEZv
ckRpZEZpbmlzaE5hdmlnYXRpb25dOwogCi0gICAgcGlkX3QgcmVsYXVuY2hlZE5ldHdvcmtQcm9j
ZXNzSWRlbnRpZmllciA9IFtwcm9jZXNzUG9vbC5nZXQoKSBfbmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyXTsKKyAgICBwaWRfdCByZWxhdW5jaGVkTmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyID0gW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfbmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyXTsKICAgICBFWFBFQ1RfTkUoaW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlmZXIsIHJl
bGF1bmNoZWROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIpOwogICAgIEVYUEVDVF9GQUxTRShuZXR3
b3JrUHJvY2Vzc0NyYXNoZWQpOwogCkBAIC0xNDYsOCArMTQ3LDggQEAgVEVTVChXZWJLaXQsIE5l
dHdvcmtQcm9jZXNzUmVsYXVuY2hPbkxhdW5jaEZhaWx1cmUpCiAKICAgICAvLyBDb25zdHVjdGlu
ZyBhIFdlYlZpZXcgc3RhcnRzIGEgbmV0d29yayBwcm9jZXNzIHNvIHRlcm1pbmF0ZSB0aGlzIG9u
ZS4gVGhlIHBhZ2UgbG9hZCBiZWxvdyB3aWxsIHRoZW4gcmVxdWVzdCBhIG5ldHdvcmsgcHJvY2Vz
cyBhbmQgd2UKICAgICAvLyBtYWtlIHRoaXMgbmV3IG5ldHdvcmsgcHJvY2VzcyBsYXVuY2ggY3Jh
c2ggb24gc3RhcnR1cC4KLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKLSAgICBbcHJvY2Vzc1Bvb2wgX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9y
VGVzdGluZ107CisgICAgW1dLV2Vic2l0ZURhdGFTdG9yZSBfbWFrZU5leHROZXR3b3JrUHJvY2Vz
c0xhdW5jaEZhaWxGb3JUZXN0aW5nXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRl
RGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIGRlbGVnYXRl
ID0gYWRvcHROUyhbW01vbml0b3JXZWJDb250ZW50Q3Jhc2hOYXZpZ2F0aW9uRGVsZWdhdGUgYWxs
b2NdIGluaXRdKTsKICAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUu
Z2V0KCldOwpAQCAtMTU4LDcgKzE1OSw3IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc1Jl
bGF1bmNoT25MYXVuY2hGYWlsdXJlKQogICAgIEVYUEVDVF9UUlVFKG5ldHdvcmtQcm9jZXNzQ3Jh
c2hlZCk7CiAgICAgRVhQRUNUX0ZBTFNFKHdlYlByb2Nlc3NDcmFzaGVkKTsKICAgICBFWFBFQ1Rf
R1QoW3dlYlZpZXcgX3dlYlByb2Nlc3NJZGVudGlmaWVyXSwgMCk7Ci0gICAgRVhQRUNUX0dUKFtw
cm9jZXNzUG9vbC5nZXQoKSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXSwgMCk7CisgICAgRVhQ
RUNUX0dUKFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9j
ZXNzSWRlbnRpZmllcl0sIDApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2Fk
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQpp
bmRleCBiN2VkOTk5MzlmZDU5ZjIyOGE3ZThiZDc0OTcxMmY1MzY2MDE1NjE2Li4xODE5MTMxYzlh
MGZlYjMwYjFhMmYwY2ZjZDg3YmYyMDQ1ZWJiM2Y0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0KQEAgLTg4OSw5ICs4ODksOSBAQCB2
b2lkIGRvd25sb2FkQXRSYXRlKGRvdWJsZSBkZXNpcmVkS2JwcywgdW5zaWduZWQgc3BlZWRNdWx0
aXBsaWVyLCBBcHBSZXR1cm5zVG9GbwogICAgIHJlY2VpdmVkRGF0YSA9IGZhbHNlOwogICAgIFV0
aWw6OnJ1bigmcmVjZWl2ZWREYXRhKTsKICAgICAvLyBTdGFydCB0aGUgRG93bmxvYWRNb25pdG9y
J3MgdGltZXIuCi0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50
aGVzaXplQXBwSXNCYWNrZ3JvdW5kOllFU107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25d
LndlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKICAgICBp
ZiAocmV0dXJuVG9Gb3JlZ3JvdW5kID09IEFwcFJldHVybnNUb0ZvcmVncm91bmQ6OlllcykKLSAg
ICAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVzaXplQXBw
SXNCYWNrZ3JvdW5kOk5PXTsKKyAgICAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNp
dGVEYXRhU3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9dOwogICAgIGRpZENhbmNl
bCA9IGZhbHNlOwogICAgIFV0aWw6OnJ1bigmZGlkQ2FuY2VsKTsKICAgICB0ZXJtaW5hdGVTZXJ2
ZXIgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JREJDaGVja3BvaW50V0FMLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tCmluZGV4IDVjZDdhYmRhMDFkMTk3NDdkY2VkNDVh
YmVlOTllY2IxYzE0ZDYxNjAuLmQ3N2E2ZmQ5ODc5ZTQzZjcwMTFkZGFmOTJjM2E3OTdmM2ZjMTM3
MzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURC
Q2hlY2twb2ludFdBTC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0lEQkNoZWNrcG9pbnRXQUwubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktp
dC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRD
b250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRp
b25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQ
b29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+
CkBAIC04Niw3ICs4Nyw3IEBAIFRFU1QoSW5kZXhlZERCLCBDaGVja3BvaW50c1dBTEF1dG9tYXRp
Y2FsbHkpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRp
b24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAg
IFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VI
YW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtb
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDAp
IGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5t
bQppbmRleCBjOGFmMWQyNDNjNGZlYjU4YWM5ODRkYWYxNGQ4MTUzMWE3Y2MzYzczLi5iYmYxYTE1
MjE1ZGMxZmQyOGRmZGRiOWUzNDFiNjRmOWMwMDhmNGM0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0K
QEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktp
dC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2lt
cG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1Qo
SW5kZXhlZERCLCBEZWxldGVSZWNvdmVyeSkKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmln
dXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9u
IGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxl
cl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRs
ZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9y
ZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5jb25zaXN0
ZW50IGRhdGFiYXNlIGZpbGVzIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBOU1VSTCAq
dXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJEZWxldGVS
ZWNvdmVyeSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJL
aXRBUEkucmVzb3VyY2VzIl07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KaW5kZXggOTVjY2EwY2Uy
ODE2ZmYxYTZhNDU1YWQwYmQyYzhhNGFhNGYyN2ZlZC4uODhhNTNmNjFkOWQ5ODI2NTdiOTY1ZWY4
YTZjZWJhNzkxZWZmMTc1NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbQpAQCAtMzEsNiArMzEs
NyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNp
dGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0
IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQv
X1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU4LDcgKzU5LDcgQEAgVEVTVChJbmRleGVkREIsIElu
ZGV4VXBncmFkZVRvVjIpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNv
bmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5p
dF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlw
dE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFz
ZSBmaWxlcyB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05T
QnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiSW5kZXhVcGdyYWRlIiB3aXRoRXh0
ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMi
XTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURC
T2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCmluZGV4IGZmYTVh
Nzg3OGE0NzMyYjhlYzI0NWM5MDUzZmQxN2VlNTk1NmZhM2QuLjQwM2UwZmZhODIxMjM0NTFjNDY2
ZmVlY2MzMjRmOWM2ZTc2MWQ0M2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdy
YWRlVG9WMi5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bv
b2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4K
KyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcgKzU4
LDcgQEAgVEVTVChJbmRleGVkREIsIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyKQogICAg
IFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHRO
UyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3Vy
YXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5k
bGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0
KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAK
ICAgICAvLyBDb3B5IGRhdGFiYXNlIGZpbGVzIHdpdGggb2xkIE9iamVjdFN0b3JlSW5mbyBzY2hl
bWEgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeS4KICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5k
bGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJPYmplY3RTdG9yZUluZm9VcGdyYWRl
IiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5y
ZXNvdXJjZXMiXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQppbmRl
eCA2ODc0NTI5ZWJiZjM3ODUxOGQ5M2UwYTA4MjFmNjMwMTJjZmE2ZDVmLi43MzA3N2VjZGZkMzY1
YjUyOTA1M2Q0N2NiYTJhMTRlZDA1MWVkNmVhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFz
ZVByb2Nlc3NLaWxsLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9j
ZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxl
clByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0
ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZp
Z3VyYXRpb24uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTkyLDcgKzkzLDcgQEAg
VEVTVChJbmRleGVkREIsIERhdGFiYXNlUHJvY2Vzc0tpbGwpCiAgICAgICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICAgICAgaWYgKCFraWxs
ZWREQlByb2Nlc3MgJiYgb3BlblJlcXVlc3RVcGdyYWRlTmVlZGVkKSB7CiAgICAgICAgICAgICBr
aWxsZWREQlByb2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCku
cHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICAgICAgICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbQppbmRleCA3
ZjYyNjQ1ZDk5NjBlZGU5NjBjMDAxYzI3MmI2NTAzOTM5MDExNjMyLi42ZjY3ZGMyN2VkYzNkMjc0
NWIxNzBlNDgyYmNkOTBlODQ5NGNiOTVhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbQpA
QCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVy
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0
L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5o
PgogI2ltcG9ydCA8d3RmL0RlcXVlLmg+CkBAIC02OSw3ICs3MCw3IEBAIFRFU1QoSW5kZXhlZERC
LCBJbmRleGVkREJNdWx0aVByb2Nlc3MpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3Vy
YXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBh
bGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJd
IGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVy
Il07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdl
YlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJl
Y3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwog
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4
ZWREQlBlcnNpc3RlbmNlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQppbmRleCBiMzJjZTRhNWY3Mzg2M2FlZGRjYjkxOTBi
NWI0MzcwZTM3NDQzYjVlLi5kNjIyMDMyMmU0NzhkMWRhYzc4ZjA2OTY3YzNiNjQzYmZkNjJmOWJm
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4
ZWREQlBlcnNpc3RlbmNlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KQEAgLTc4LDcgKzc4LDcgQEAgVEVTVChJbmRl
eGVkREIsIEluZGV4ZWREQlBlcnNpc3RlbmNlKQogICAgIHdlYlZpZXcgPSBuaWw7CiAKICAgICAv
LyBUZXJtaW5hdGUgdGhlIG5ldHdvcmsgcHJvY2VzcwotICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRp
b24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAg
ICAgLy8gTWFrZSBhIG5ldyB3ZWIgdmlldyB0byBmaW5pc2ggdGhlIHRlc3QKICAgICB3ZWJWaWV3
ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTI2
OCw3ICsyNjgsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCVGhpcmRQYXJ0eUZyYW1lSGFz
QWNjZXNzKQogCiAgICAgd2ViVmlldyA9IG5pbDsKICAgICBzZWNvbmRXZWJWaWV3ID0gbmlsOwot
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gVGhpcmQtcGFydHkgSURCIHN0b3JhZ2UgaXMg
c3RvcmVkIGluIHRoZSBtZW1vcnkgb2YgbmV0d29yayBwcm9jZXNzLgogICAgIGF1dG8gdGhpcmRX
ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsK
QEAgLTM4NSw3ICszODUsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCVGhpcmRQYXJ0eVdv
cmtlckhhc0FjY2VzcykKIAogICAgIHdlYlZpZXcgPSBuaWw7CiAgICAgc2Vjb25kV2ViVmlldyA9
IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0gYWRv
cHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgw
MCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBsb2FkVGVz
dFBhZ2VJbldlYlZpZXcodGhpcmRXZWJWaWV3LmdldCgpLCBAImRhdGFiYXNlIGlzIGNyZWF0ZWQi
KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5k
ZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tCmluZGV4IDhlYzY1ZjBhM2Jh
OTM3MzZmZGI0ZjlkZGZlZjc1Y2U2MDAwNWZkMGQuLjUxMGIyNGY1NjlkMjJiZDQwYTdhZGJlMjVl
Y2ZkMGVjZmM4YWM3MjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbQpA
QCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdl
YktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC04OCw4ICs4OSw4IEBAIFRFU1QoSW5kZXhlZERCLCBJ
bmRleGVkREJTdXNwZW5kSW1taW5lbnRseSkKIAogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChA
IkNvbnRpbnVlIik7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2Vu
ZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKLSAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NX
aWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVE
YXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBydW5UZXN0QW5k
Q2hlY2tSZXN1bHQoQCJFeHBlY3RlZCBBYm9ydCBGb3IgU3VzcGVuc2lvbiIpOwogICAgIHJ1blRl
c3RBbmRDaGVja1Jlc3VsdChAIkV4cGVjdGVkIFN1Y2Nlc3MgQWZ0ZXIgUmVzdW1lIik7CkBAIC0x
NTgsOCArMTU5LDggQEAgVEVTVChJbmRleGVkREIsIFN1c3BlbmRJbW1pbmVudGx5Rm9yVGhpcmRQ
YXJ0eURhdGFiYXNlcykKICAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzptYWluRnJhbWVTdHJp
bmcgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly93ZWJraXQub3JnIl1dOwog
ICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAImRhdGFiYXNlIGlzIGNyZWF0ZWQiKTsKIAotICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxs
U3VzcGVuZEltbWluZW50bHldOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29s
IF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRs
eV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdv
cmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAInRyYW5z
YWN0aW9uIGlzIGNvbXBsZXRlZCIpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQppbmRl
eCA1MzY1NDFlM2IwZTVjZGEzYTNiNTUxYzFlODFlOTYzZjU5MmFlYjJmLi5lN2I5OTIyOGNlODc2
ZTQ0N2U2NDc4MmVmOWQ4N2YyNWFkYzliOWZhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5t
bQpAQCAtOTUsNyArOTUsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCVGVtcEZpbGVTaXpl
KQogCiAgICAgLy8gVGVybWluYXRlIG5ldHdvcmsgcHJvY2VzcyB0byBrZWVwIFdBTCBvbiBkaXNr
LgogICAgIHdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBFWFBFQ1Rf
VFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6d2Fs
RmlsZVBhdGguZ2V0KCkucGF0aF0pOwogICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGZpbGVB
dHRyaWJ1dGVzID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBhdHRyaWJ1dGVzT2ZJ
dGVtQXRQYXRoOndhbEZpbGVQYXRoLmdldCgpLnBhdGggZXJyb3I6bmlsXTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lz
dGVuY2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3Rv
cmFnZVBlcnNpc3RlbmNlLm1tCmluZGV4IDQxMzNlZTdiM2RhZTQzZWMyMDQ5Y2ZmYzA2M2MwZTQy
OWMxN2M1ZWYuLjVmNzkxOTA5NDNjNzcxZTlkOWU0NDJhMGRhMjY2ZmY5YTAzYmEyZjIgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdl
UGVyc2lzdGVuY2UubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8
V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJw
YWdlUHJlZmVyZW5jZXNQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0
b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0
L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJT
dHlsZVNoZWV0Lmg+CkBAIC0xMDksNyArMTEwLDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3Rv
cmFnZVByb2Nlc3NDcmFzaGVzKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2
ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJzZXNzaW9uOnN0b3JhZ2Ui
LCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCku
cHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAg
ICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CkBAIC0xNjIsNyArMTYzLDcgQEAgVEVTVChX
S1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5kcykKICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVR
KEAidmFsdWUiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCi0gICAgW3Byb2Nlc3NQb29s
LmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dp
bGxTdXNwZW5kSW1taW5lbnRseV07CiAKICAgICByZWFkeVRvQ29udGludWUgPSBmYWxzZTsKICAg
ICBbd2ViVmlldzEgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2luZG93LmxvY2FsU3RvcmFnZS5zZXRJ
dGVtKCdrZXknLCAnbmV3VmFsdWUnKSIgY29tcGxldGlvbkhhbmRsZXI6XihpZCwgTlNFcnJvciAq
KSB7CkBAIC0xNzcsNyArMTc4LDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nl
c3NTdXNwZW5kcykKICAgICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlYWR5
VG9Db250aW51ZSk7CiAgICAgCi0gICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29ya1By
b2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3Rv
cmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICByZWNlaXZlZFNjcmlwdE1l
c3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2Ny
aXB0TWVzc2FnZSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL05ldHdvcmtQcm9jZXNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQppbmRleCBlNjBmODgwMjVkMDkzNzg5ZjY5NTYwZDli
OTJiMjgyZjA3MTMwYThkLi4wZTIxZjkwOTUwMDE0ZjZjNDkwYjBlYjhlNDYxZWM0YmE4NTBiYjgx
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdv
cmtQcm9jZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
TmV0d29ya1Byb2Nlc3MubW0KQEAgLTI4LDcgKzI4LDcgQEAKICNpbXBvcnQgIkhUVFBTZXJ2ZXIu
aCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlV0aWxpdGllcy5oIgotI2lt
cG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0zNywxNCAr
MzcsMTQgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzRW50aXRsZW1lbnRzKQogewogICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246W1tbV0tXZWJWaWV3
Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdXSk7CiAgICAgW3dlYlZpZXcg
c3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAic2ltcGxlIl07Ci0gICAgV0tQcm9jZXNz
UG9vbCAqcG9vbCA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sOwotICAgIGJv
b2wgaGFzRW50aXRsZW1lbnQgPSBbcG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZv
clRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Muc3RvcmFnZS5XZWJLaXROZXR3b3JraW5nU2Fu
ZGJveCJdOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZSAqc3RvcmUgPSBbd2ViVmlldyBjb25maWd1
cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlOworICAgIGJvb2wgaGFzRW50aXRsZW1lbnQgPSBbc3Rv
cmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAiY29tLmFwcGxlLnJv
b3RsZXNzLnN0b3JhZ2UuV2ViS2l0TmV0d29ya2luZ1NhbmRib3giXTsKICNpZiBQTEFURk9STShN
QUMpICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAgICAgRVhQRUNUX1RSVUUoaGFzRW50aXRs
ZW1lbnQpOwogI2Vsc2UKICAgICBFWFBFQ1RfRkFMU0UoaGFzRW50aXRsZW1lbnQpOwogI2VuZGlm
Ci0gICAgRVhQRUNUX0ZBTFNFKFtwb29sIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9y
VGVzdGluZzpAInRlc3QgZmFpbHVyZSBjYXNlIl0pOworICAgIEVYUEVDVF9GQUxTRShbc3RvcmUg
X25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAidGVzdCBmYWlsdXJlIGNh
c2UiXSk7CiB9CiAKIFRFU1QoV2ViS2l0LCBIVFRQUmVmZXJlcikKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBl
cnNpc3RlbnREYXRhU3RvcmUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCmluZGV4IDYw
OThlOGRhZDI1MmU1OWVjNDkxMjUwYjQyMTZkM2NkMDkzNmU4ZjcuLjJmOGEyZTMzZmU4NzAzYmFi
MmQ4ZTA1MTA4MzJiZWNkOWQ0ODkzNGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3Rv
cmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQpAQCAtNzIsNyArNzIsNyBAQCBz
dGF0aWMgdm9pZCBjaGVja1JlY292ZXJ5QWZ0ZXJDcmFzaChXS1dlYnNpdGVEYXRhU3RvcmUgKmRh
dGFTdG9yZSkKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIGRvbmUg
PSBmYWxzZTsKIAotICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJz
aXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgW3dlYlZpZXcgbG9h
ZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpzaW1wbGUyXV07CiAgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0gYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0
aW9uLm1tCmluZGV4IDk1ZGM5ZDk4ZGYxM2IwNzA1ZTA4MTdkMDU4NzI2NTEyMGMxODhkMjMuLmRm
MzIwZDY0ZGFkYmRkMWVlMjgzZjg2NWMxNDQyM2YzYWM1NTY0YmYgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24u
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dh
cE9uTmF2aWdhdGlvbi5tbQpAQCAtNTM4NSw3ICs1Mzg1LDcgQEAgVEVTVChQcm9jZXNzU3dhcCwg
VXNlUHJld2FybWVkUHJvY2Vzc0FmdGVyVGVybWluYXRpbmdOZXR3b3JrUHJvY2VzcykKIAogICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW3Byb2Nlc3NQb29s
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW3dlYlZpZXdDb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1
dG8gd2ViVmlldzIgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5T
TWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246d2ViVmlld0NvbmZpZ3VyYXRp
b24uZ2V0KCldKTsKICAgICBbd2ViVmlldzIgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRl
LmdldCgpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQppbmRleCAwZTEwYzM0ZWVjODJj
NmY2NTkyYmI3YzQyNzRkMGU0NTVlYWYxMWU4Li5hM2FiYTIzMWE5M2IzZDVmMDBhMTkzYzQ3YzI3
Njc4NjRiMzUwNTViIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCkBAIC03MTksNyAr
NzE5LDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBOZXR3b3JrUHJvY2Vzc1Jlc3Rh
cnQpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MiA9IGFkb3B0TlMoW1tXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJh
dGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKQEAgLTc1Miw3ICs3NTIsNyBAQCBURVNUKFJl
c291cmNlTG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jZXNzUmVzdGFydCkKIAogICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0
KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAK
ICAgICBhdXRvIHdlYlZpZXczID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRp
b24uZ2V0KCldKTsKIApAQCAtMTU1OCwxMCArMTU1OCw4IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcywgTWlncmF0ZURhdGFGcm9tTWlzc2luZ1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RTYW1l
U2l0CiAKIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlX
aXRoTm9Qcm9jZXNzUG9vbCkKIHsKKyAgICBOU1VSTCAqaXRwUm9vdFVSTCA9IFtOU1VSTCBmaWxl
VVJMV2l0aFBhdGg6W05TVGVtcG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRo
Q29tcG9uZW50OkAiQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbFRlc3QiXSBp
c0RpcmVjdG9yeTpZRVNdOwogICAgIGF1dG8gZGVmYXVsdEZpbGVNYW5hZ2VyID0gW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKLSAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tXS1dl
YnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29u
ZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwotICAgIE5TVVJMICppdHBSb290VVJMID0gW1tkYXRh
U3RvcmUgX2NvbmZpZ3VyYXRpb25dIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5XTsK
ICAgICBOU1VSTCAqZmlsZVVSTCA9IFtpdHBSb290VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDpAIm9ic2VydmF0aW9ucy5kYiJdOwogICAgIFtkZWZhdWx0RmlsZU1hbmFnZXIgcmVtb3Zl
SXRlbUF0UGF0aDppdHBSb290VVJMLnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfRkFMU0Uo
W2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOml0cFJvb3RVUkwucGF0aF0pOwpA
QCAtMTU3Miw2ICsxNTcwLDEwIEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgQ2FuQWNj
ZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKICAgICBFWFBFQ1RfVFJVRShbZGVmYXVs
dEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6bmV3RmlsZVVSTC5wYXRoXSk7CiAgICAgW2Rl
ZmF1bHRGaWxlTWFuYWdlciBjb3B5SXRlbUF0UGF0aDpuZXdGaWxlVVJMLnBhdGggdG9QYXRoOmZp
bGVVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVDVF9UUlVFKFtkZWZhdWx0RmlsZU1hbmFn
ZXIgZmlsZUV4aXN0c0F0UGF0aDpmaWxlVVJMLnBhdGhdKTsKKworICAgIF9XS1dlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tXZWJzaXRl
RGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBkYXRhU3RvcmVD
b25maWd1cmF0aW9uLl9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gaXRwUm9vdFVS
TDsKKyAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9p
bml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2Vd
OwogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOllFU107
CiAKICAgICBzdGF0aWMgYm9vbCBkb25lRmxhZyA9IGZhbHNlOwpAQCAtMTYzMywxMiArMTYzNSwx
MiBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIFN0b3JlU3VzcGVuc2lvbikKICAgICBb
d2ViVmlldzIgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOwogCiAgICAgZG9uZUZs
YWcgPSBmYWxzZTsKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1By
ZXBhcmVUb1N1c3BlbmQ6XnsKKyAgICBbZGF0YVN0b3JlMSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJl
cGFyZVRvU3VzcGVuZDpeewogICAgICAgICBkb25lRmxhZyA9IHRydWU7CiAgICAgfV07CiAgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CiAKLSAgICBbc2hhcmVkUHJvY2Vz
c1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW2RhdGFTdG9yZTEgX3Nl
bmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiB9CiAKIEBpbnRlcmZhY2UgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1NjaGVtZUhhbmRsZXIgOiBOU09iamVjdCA8V0tVUkxTY2hlbWVIYW5kbGVyPgpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNl
V29ya2VyQmFzaWMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Nl
cnZpY2VXb3JrZXJCYXNpYy5tbQppbmRleCAzNGE0ZjVjNTM4YjliMGU5ZmNiMDUwNzJiMTcwMjg4
ZTllNGU5ZjhmLi41NDkzZDNkOTI3NThmMjRhNDZlODRiNGI1YWJlYzQ3ODA5NTlmYjVhIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3Jr
ZXJCYXNpYy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Nl
cnZpY2VXb3JrZXJCYXNpYy5tbQpAQCAtNTU4LDcgKzU1OCw3IEBAIFRFU1QoU2VydmljZVdvcmtl
cnMsIFVzZXJBZ2VudE92ZXJyaWRlKQogCiAgICAgY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tX
S1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAKLSAgICBtZXNzYWdlSGFuZGxl
ciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0aEV4
cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6IEJhciBDdXN0b20gVXNlckFnZW50
Il0pOworICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1NXVXNlckFnZW50TWVzc2FnZUhh
bmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNzYWdlOkAiTWVzc2FnZSBmcm9tIHdvcmtl
cjogRm9vIEN1c3RvbSBVc2VyQWdlbnQiXSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250
ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0
KCkgbmFtZTpAInN3Il07CiAKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9u
OmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTYzMyw4ICs2MzMsNiBAQCBURVNUKFNlcnZpY2VX
b3JrZXJzLCBDYWNoZVN0b3JhZ2VSZXN0b3JlRnJvbURpc2spCiAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7CiAKLSAgICBbV0tXZWJzaXRlRGF0
YVN0b3JlIF9kZWxldGVEZWZhdWx0RGF0YVN0b3JlRm9yVGVzdGluZ107Ci0KICAgICBTZXJ2aWNl
V29ya2VyVENQU2VydmVyIHNlcnZlcih7CiAgICAgICAgIHsgInRleHQvaHRtbCIsIG1haW5DYWNo
ZVN0b3JhZ2VCeXRlcyB9CiAgICAgfSwgewpAQCAtOTgyLDYgKzk4MCw3IEBAIFRFU1QoU2Vydmlj
ZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRpb24pCiAKICAgICBSZXRhaW5QdHI8
V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgc2V0Q29uZmlndXJhdGlvbkluamVj
dGVkQnVuZGxlUGF0aChjb25maWd1cmF0aW9uLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8V0tQcm9j
ZXNzUG9vbD4gb3JpZ2luYWxQcm9jZXNzUG9vbCA9IGNvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vz
c1Bvb2w7CiAKICAgICBkb25lID0gZmFsc2U7CiAKQEAgLTEwMzUsNyArMTAzNCw3IEBAIFRFU1Qo
U2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRpb24pCiAgICAgZG9uZSA9
IGZhbHNlOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbG9hZGluZyB0aGUgc2ltcGxlIHBhZ2Ug
ZGlkIG5vdCBzdGFydCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vzcy4KLSAgICBFWFBFQ1RfRVEo
MHUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtl
clByb2Nlc3NDb3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3Vy
YXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwogCiAgICAgd2Vi
VmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVj
dCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpuZXdDb25maWd1cmF0aW9uLmdldCgpXSk7
CiAgICAgRVhQRUNUX0VRKDJ1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bv
b2wuX3dlYlByb2Nlc3NDb3VudElnbm9yaW5nUHJld2FybWVkKTsKQEAgLTEwNDMsOSArMTA0Miw4
IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRpb24pCiAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7CiAK
LSAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5nIHRoaXMgcGFnZSBkaWQgc3RhcnQgdGhlIHNl
cnZpY2Ugd29ya2VyIHByb2Nlc3MuCiAgICAgRVhQRUNUX0VRKDF1LCB3ZWJWaWV3LmdldCgpLmNv
bmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwotCisg
ICAgRVhQRUNUX0VRKDF1LCBvcmlnaW5hbFByb2Nlc3NQb29sLmdldCgpLl9zZXJ2aWNlV29ya2Vy
UHJvY2Vzc0NvdW50KTsKICAgICBbW2NvbmZpZ3VyYXRpb24gd2Vic2l0ZURhdGFTdG9yZV0gcmVt
b3ZlRGF0YU9mVHlwZXM6W1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxXZWJzaXRlRGF0YVR5cGVzXSBt
b2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNvbXBsZXRpb25IYW5kbGVyOl4oKSB7
CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH1dOwpAQCAtMTYxOCwyMSArMTYxNiwzNSBAQCBz
dGF0aWMgc2l6ZV90IGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wgdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcywgYgogICAgIHJldHVybiB3ZWJWaWV3LmdldCgpLmNvbmZpZ3Vy
YXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudElnbm9yaW5nUHJld2FybWVkOwogfQog
Ci1URVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZkFuZEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCitU
RVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewogICAgIGJv
b2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9vbCBmaXJz
dExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNoU2Vydmlj
ZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsICFmaXJzdExv
YWRBYm91dEJsYW5rKSk7Cit9CisKK1RFU1QoU2VydmljZVdvcmtlcnMsIEluUHJvY2Vzc1NlcnZp
Y2VXb3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0g
dHJ1ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNU
X0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykpOwogfQogCi1URVNUKFNlcnZpY2VXb3Jr
ZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoU2VydmljZVdvcmtlcikK
K1RFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91
Z2hPdXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0g
dHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGZpcnN0TG9hZEFib3V0QmxhbmspKTsKK30K
KworVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhy
b3VnaEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0
cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJzdExvYWRBYm91dEJsYW5rKSk7CiB9CiAK
QEAgLTE4NDcsOCArMTg1OSw4IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFJlc3RvcmVGcm9tRGlz
a05vbkRlZmF1bHRTdG9yZSkKICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNy
ZWF0ZURpcmVjdG9yeUF0VVJMOnN3REJQYXRoIHdpdGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpZ
RVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0aF0pOwog
Ci0gICAgLy8gV2UgcHJvdGVjdCB0aGUgcHJvY2VzcyBwb29sIHNvIHRoYXQgaXQgb3V0bGl2ZXMg
dGhlIFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgUmV0YWluUHRyPFdLUHJvY2Vzc1Bvb2w+IHByb3Rl
Y3RlZFByb2Nlc3NQb29sOworICAgIFJldGFpblB0cjxXS1dlYnNpdGVEYXRhU3RvcmU+IHByb3Rl
Y3RlZFdlYnNpdGVEYXRhU3RvcmU7CiAKICAgICBTZXJ2aWNlV29ya2VyVENQU2VydmVyIHNlcnZl
cih7CiAgICAgICAgIHsgInRleHQvaHRtbCIsIG1haW5SZWdpc3RlcmluZ1dvcmtlckJ5dGVzIH0s
CkBAIC0xODcxLDYgKzE4ODMsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBSZXN0b3JlRnJvbURp
c2tOb25EZWZhdWx0U3RvcmUpCiAKICAgICAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBj
b25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICAgICAgcHJvdGVjdGVkUHJv
Y2Vzc1Bvb2wgPSB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2w7CisgICAg
ICAgIHByb3RlY3RlZFdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRp
b24ud2Vic2l0ZURhdGFTdG9yZTsKIAogICAgICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpzZXJ2
ZXIucmVxdWVzdCgpXTsKIApAQCAtMTg4MCwxMyArMTg5MywxNSBAQCBURVNUKFNlcnZpY2VXb3Jr
ZXJzLCBSZXN0b3JlRnJvbURpc2tOb25EZWZhdWx0U3RvcmUpCiAgICAgICAgIFt3ZWJWaWV3Lmdl
dCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzXTsK
ICAgICB9CiAKKyAgICAvLyBNYWtlIHVzIG1vcmUgbGlrZWx5IHRvIGxvc2UgYW55IHJhY2VzIHdp
dGggc2VydmljZSB3b3JrZXIgaW5pdGlhbGl6YXRpb24uCisgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6c3BpblJ1bkxvb3AoMTApOworICAgIHVzbGVlcCgxMDAwMCk7CisgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6c3BpblJ1bkxvb3AoMTApOworCiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAgICAg
ICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9u
IGFsbG9jXSBpbml0XSk7CiAKLSAgICAgICAgYXV0byB3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJh
dGlvbiA9IGFkb3B0TlMoW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10g
aW5pdF0pOwotICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS5fc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IHN3REJQYXRoOwotICAgICAgICBhdXRv
IG5vbkRlZmF1bHREYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9j
XSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdl
dCgpXSk7Ci0gICAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSA9IG5v
bkRlZmF1bHREYXRhU3RvcmUuZ2V0KCk7CisgICAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSA9IHByb3RlY3RlZFdlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7CiAKICAgICAg
ICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV01lc3NhZ2VIYW5kbGVyRm9yUmVz
dG9yZUZyb21EaXNrVGVzdCBhbGxvY10gaW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJQQVNTOiBS
ZWdpc3RyYXRpb24gYWxyZWFkeSBoYXMgYW4gYWN0aXZlIHdvcmtlciJdKTsKICAgICAgICAgW1tj
b25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRs
ZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07CkBAIC0xOTQ0LDExICsxOTU5LDEx
IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFN1c3BlbmROZXR3b3JrUHJvY2VzcykKIAogICAgIEVY
UEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0
aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAgICBbIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5w
cm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAg
ICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3
b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CiAKICAgICBFWFBFQ1RfVFJVRShbW05T
RmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0
aF0pOwogCi0gICAgWyB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3Nl
bmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW3dlYlZpZXcuZ2V0KCkuY29uZmlndXJh
dGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAg
ICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6c2VydmVyLnJlcXVlc3QoKV07CiAgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCmluZGV4IGEzNWYwNTM1
MGFhYjRiNDJmMzZjNDZhZWNkZWVlZTZjZTU0NGVmODYuLjMzNzYwOTJhMTk1YjUxMmRhNjdjNDk2
ZTQ1MjE3YjkxNGZlMmE1NzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQpAQCAtNDc5LDggKzQ3OSw2
IEBAIHN0YXRpYyBib29sIGZpbmlzaGVkOwogfQogQGVuZAogCi0vLyBGSVhNRTogb24gaU9TLCBV
SSBwcm9jZXNzIHNob3VsZCBiZSB1c2luZyB0aGUgc2FtZSBjb29raWUgZmlsZSBhcyB0aGUgbmV0
d29yayBwcm9jZXNzIGZvciBkZWZhdWx0IHNlc3Npb24uCi0jaWYgUExBVEZPUk0oTUFDKQogZW51
bSBjbGFzcyBTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyB7IE5vLCBZZXMgfTsKIHZvaWQg
cnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vz
c1ByZXdhcm1pbmcgc2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcpCiB7CkBAIC01ODksMjAg
KzU4Nyw2NiBAQCBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xXaXRo
UHJld2FybWluZykKICAgICBydW5XS0hUVFBDb29raWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9vbChT
aG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZzo6WWVzKTsKIH0KIAotI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKLQogQGludGVyZmFjZSBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIDogTlNP
YmplY3QgPFdLVUlEZWxlZ2F0ZT4KKy0gKE5TU3RyaW5nICopYWxlcnRDb29raWVIVE1MOworLSAo
TlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZTsKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIENoZWNr
U2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUKK0BpbXBsZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29r
aWVVSURlbGVnYXRlIHsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9tZXNzYWdlOworfQorCiAt
ICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2YVNjcmlwdEFsZXJ0UGFu
ZWxXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJh
bWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRp
b25IYW5kbGVyCiB7Ci0gICAgRVhQRUNUX1NUUkVRKCJTZXNzaW9uQ29va2llTmFtZT1Db29raWVW
YWx1ZSIsIG1lc3NhZ2UuVVRGOFN0cmluZyk7CisgICAgX21lc3NhZ2UgPSBtZXNzYWdlOwogICAg
IGZpbmlzaGVkID0gdHJ1ZTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQorCistIChOU1N0
cmluZyAqKXdhaXRGb3JNZXNzYWdlCit7CisgICAgd2hpbGUgKCFfbWVzc2FnZSkKKyAgICAgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAgICByZXR1cm4gX21lc3NhZ2Uu
YXV0b3JlbGVhc2UoKTsKK30KKworLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUwKK3sKKyAg
ICByZXR1cm4gQCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7
Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkgKyspIHsgY29va2llc1tp
XSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgpOyBhbGVydChjb29raWVzLmpv
aW4oJzsgJykpOzwvc2NyaXB0PiI7Cit9CisKIEBlbmQKIAorVEVTVChXZWJLaXQsIFdLSFRUUENv
b2tpZVN0b3JlTXVsdGlwbGVWaWV3cykKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MSA9
IFtbVGVzdFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzEgc3luY2hy
b25vdXNseUxvYWRIVE1MU3RyaW5nOkAic3RhcnQgbmV0d29yayBwcm9jZXNzIl07CisKKyAgICBO
U0hUVFBDb29raWUgKnNlc3Npb25Db29raWUgPSBbTlNIVFRQQ29va2llIGNvb2tpZVdpdGhQcm9w
ZXJ0aWVzOkB7CisgICAgICAgIE5TSFRUUENvb2tpZVBhdGg6IEAiLyIsCisgICAgICAgIE5TSFRU
UENvb2tpZU5hbWU6IEAiU2Vzc2lvbkNvb2tpZU5hbWUiLAorICAgICAgICBOU0hUVFBDb29raWVW
YWx1ZTogQCJDb29raWVWYWx1ZSIsCisgICAgICAgIE5TSFRUUENvb2tpZURvbWFpbjogQCIxMjcu
MC4wLjEiLAorICAgIH1dOworCisgICAgX19ibG9jayBib29sIHNldENvb2tpZURvbmUgPSBmYWxz
ZTsKKyAgICBbd2ViVmlldzEuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlLmh0dHBDb29r
aWVTdG9yZSBzZXRDb29raWU6c2Vzc2lvbkNvb2tpZSBjb21wbGV0aW9uSGFuZGxlcjpeeworICAg
ICAgICBzZXRDb29raWVEb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJnNldENvb2tpZURvbmUpOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMo
W0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgbmV3XSk7CisgICAgW3dlYlZpZXcxIHNldFVJ
RGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcxIGxvYWRIVE1MU3RyaW5n
OltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6
QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2Fp
dEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKKworICAgIFRl
c3RXS1dlYlZpZXcgKndlYlZpZXcyID0gW1tUZXN0V0tXZWJWaWV3IG5ld10gYXV0b3JlbGVhc2Vd
OworICAgIFt3ZWJWaWV3MiBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2Vi
VmlldzIgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpb
TlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dL
X1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29r
aWVWYWx1ZSIpOworfQorCiBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bv
b2xFcGhlbWVyYWxTZXNzaW9uKQogewogICAgIFJldGFpblB0cjxXS1dlYnNpdGVEYXRhU3RvcmU+
IGVwaGVtZXJhbFN0b3JlV2l0aENvb2tpZXMgPSBbV0tXZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNp
c3RlbnREYXRhU3RvcmVdOwpAQCAtNjI3LDkgKzY3MSw4IEBAIFRFU1QoV0tIVFRQQ29va2llU3Rv
cmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Npb24pCiAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7CiAgICAgZmluaXNoZWQgPSBmYWxzZTsKICAgICAKLSAg
ICBOU1N0cmluZyAqYWxlcnRDb29raWVIVE1MID0gQCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9j
dW1lbnQuY29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5n
dGg7IGkgKyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29y
dCgpOyBhbGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Ci0gICAgW3dlYlZpZXcg
bG9hZEhUTUxTdHJpbmc6YWxlcnRDb29raWVIVE1MIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJp
bmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
ZmluaXNoZWQpOworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENv
b2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4x
Il1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vz
c2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKIH0KIAogc3RhdGljIGJvb2wgYXJlQ29va2ll
c0VxdWFsKE5TSFRUUENvb2tpZSAqZmlyc3QsIE5TSFRUUENvb2tpZSAqc2Vjb25kKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhh
bmRsZXItbGVha3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dL
VVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbQppbmRleCBhYzdkZTQxNTEyYzQ1MTM4ZWM1ZTRjMDll
NTExNWQxNmNkMjNiMjJlLi5hYzE2NTM1ZGZkOTM5OTlkMmVjNTBkY2ZkNzFjM2E1NmQxMTNlYzdh
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJM
U2NoZW1lSGFuZGxlci1sZWFrcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbQpAQCAtMzUsNiArMzUsNyBAQAog
I2ltcG9ydCA8V2ViS2l0L1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0xNTIsNyArMTUzLDcgQEAgVEVTVChVUkxTY2hl
bWVIYW5kbGVyLCBMZWFrczMpCiAKICAgICBydW5VbnRpbFRhc2tzSW5GbGlnaHQoMik7CiAKLSAg
ICBbd2ViVmlldzEuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3MS5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVE
YXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJ1blVudGlsVGFza3NJ
bkZsaWdodCgwKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0KaW5k
ZXggOTJjZjNhNjE5OGE1YjlkMTQ1NDQ5MDVkYjllOTQ4ZjExYzcyNTZkZS4uM2IxMzFmN2NiODYw
YWU4MDFiOTIzNTU1M2Q1MGZiN2ExNmMyNzRkMSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3Jl
Q3VzdG9tUGF0aHMubW0KQEAgLTI0NCw3ICsyNDQsNyBAQCBzdGF0aWMgdm9pZCBydW5XZWJzaXRl
RGF0YVN0b3JlQ3VzdG9tUGF0aHMoU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxk
RQogICAgIC8vIE5vdywgd2l0aCBicmFuZCBuZXcgV0tXZWJzaXRlRGF0YVN0b3JlcyBwb2ludGlu
ZyBhdCB0aGUgc2FtZSBjdXN0b20gY29va2llIHN0b3JhZ2UgbG9jYXRpb24sCiAgICAgLy8gaW4g
bmV3bHkgZmlyZWQgdXAgTmV0d29ya1Byb2Nlc3NlcywgdmVyaWZ5IHRoYXQgdGhlIGZldGNoIGFu
ZCBkZWxldGUgQVBJcyB3b3JrIGFzIGV4cGVjdGVkLgogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2RhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOwogICAgIGF1dG8gbmV3Q3VzdG9tRGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0
ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbi5nZXQoKV0pOwogCiAgICAgW25ld0N1c3RvbURhdGFTdG9yZSBmZXRjaERh
dGFSZWNvcmRzT2ZUeXBlczpbTlNTZXQgc2V0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVD
b29raWVzLCBuaWxdIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNBcnJheTxXS1dlYnNpdGVEYXRhUmVj
b3JkICo+ICogcmVjb3JkcykgewpAQCAtMjU1LDcgKzI1NSw3IEBAIHN0YXRpYyB2b2lkIHJ1bldl
YnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocyhTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBz
aG91bGRFCiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogCi0gICAgW3Byb2Nlc3NQ
b29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2RhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogICAgIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dl
YnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0ZURhdGFT
dG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21EYXRhU3RvcmUgcmVt
b3ZlRGF0YU9mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldLV2Vic2l0ZURhdGFUeXBlQ29v
a2llcywgbmlsXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNvbXBsZXRpb25I
YW5kbGVyOl4gewpAQCAtMzg1LDExICszODUsMTAgQEAgVEVTVChXZWJLaXQsIEN1c3RvbURhdGFT
dG9yZURlc3Ryb3lXaGlsZUZldGNoaW5nTmV0d29ya1Byb2Nlc3NEYXRhKQogCiAgICAgICAgIC8v
IFRlcm1pbmF0ZSB0aGUgbmV0d29yayBwcm9jZXNzIHdoaWxlIGEgcXVlcnkgaXMgcGVuZGluZy4K
ICAgICAgICAgYXV0byogYWxsUHJvY2Vzc1Bvb2xzID0gW1dLUHJvY2Vzc1Bvb2wgX2FsbFByb2Nl
c3NQb29sc0ZvclRlc3RpbmddOwotICAgICAgICBBU1NFUlRfRVEoMVUsIFthbGxQcm9jZXNzUG9v
bHMgY291bnRdKTsKLSAgICAgICAgYXV0byogcHJvY2Vzc1Bvb2wgPSBhbGxQcm9jZXNzUG9vbHNb
MF07Ci0gICAgICAgIHdoaWxlICghW3Byb2Nlc3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXJdKQorICAgICAgICBBU1NFUlRfRVEoMFUsIFthbGxQcm9jZXNzUG9vbHMgY291bnRdKTsKKyAg
ICAgICAgd2hpbGUgKCFbZGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKQogICAg
ICAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c2xlZXAoMC4wMSk7Ci0gICAgICAgIGtpbGwo
W3Byb2Nlc3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCBTSUdLSUxMKTsKKyAgICAg
ICAga2lsbChbZGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCBTSUdLSUxMKTsK
ICAgICAgICAgYWxsUHJvY2Vzc1Bvb2xzID0gbmlsOwogICAgICAgICBkYXRhU3RvcmUgPSBuaWw7
CiAgICAgfQpAQCAtNDY1LDcgKzQ2NCw5IEBAIFRFU1QoV2ViS2l0LCBBbHRlcm5hdGl2ZVNlcnZp
Y2VzRGVmYXVsdERpcmVjdG9yeUNyZWF0aW9uKQogICAgIAogICAgIFtbTlNVc2VyRGVmYXVsdHMg
c3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6
WUVTXSBmb3JLZXk6a2V5XTsKIAotICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcyID0gW1tbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgIFdLV2ViVmlld0NvbmZp
Z3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSBh
dXRvcmVsZWFzZV07CisgICAgY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlID0gW1tbV0tX
ZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOltbW19XS1dlYnNp
dGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV1dIGF1dG9y
ZWxlYXNlXTsKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJh
dGlvbjpjb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CiAgICAgW3dlYlZpZXcyIHN5bmNocm9u
b3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IGF1eGlsaWFyeSBwcm9jZXNzZXMiIGJhc2VVUkw6
bmlsXTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0g
ZmlsZUV4aXN0c0F0UGF0aDpkZWZhdWx0RGlyZWN0b3J5LnBhdGhdKTsKQEAgLTUzOSw3ICs1NDAs
NyBAQCBURVNUKFdlYktpdCwgRG9Mb2FkV2l0aE5vbkRlZmF1bHREYXRhU3RvcmVBZnRlclRlcm1p
bmF0aW5nTmV0d29ya1Byb2Nlc3MpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVu
TG9vcCgxKTsKIAotICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICByZXF1
ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVd
IFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVj
dG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1
ZXN0OnJlcXVlc3RdOwpAQCAtODU3LDcgKzg1OCw3IEBAIFRFU1QoV2ViS2l0LCBNZWRpYUNhY2hl
KQogICAgIEVYUEVDVF9GQUxTRShlcnJvcik7CiAKICAgICBkb25lID0gdHJ1ZTsKLSAgICBbW3dl
YlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKKyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFBhdGg6
cGF0aCBlcnJvcjomZXJyb3JdOwogICAgIEVYUEVDVF9GQUxTRShlcnJvcik7CmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdE9iakMvQ3VzdG9tUHJvdG9jb2xzVGVz
dC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2JqQy9DdXN0b21Qcm90b2Nv
bHNUZXN0Lm1tCmluZGV4IDIyZTFhMGE5ZThlMjY4MDQ1ZTZiMTdjMzA2YjAwMTRkNWJjOTEyNjgu
LjdiODQ3OGI1OTc5ZmE3NGI5Y2Q1OWQwNjJlYWRkMGQzYzUxNTFmZDcgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2JqQy9DdXN0b21Qcm90b2NvbHNUZXN0Lm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2JqQy9DdXN0b21Qcm90b2Nv
bHNUZXN0Lm1tCkBAIC0zNCw2ICszNCw4IEBACiAjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKICNp
bXBvcnQgPFdlYktpdC9XS0NvbnRleHRQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9j
ZXNzR3JvdXBQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tWaWV3UHJpdmF0ZS5oPgorI2lt
cG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oPgogI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgogCiBzdGF0aWMgYm9vbCB0ZXN0RmluaXNoZWQ7CkBAIC03Miw2ICs3NCw4IEBAIHN0
YXRpYyBXS1Byb2Nlc3NHcm91cCAqcHJvY2Vzc0dyb3VwKCkKICAgICByZXR1cm4gcHJvY2Vzc0dy
b3VwOwogfQogCitzdGF0aWMgUmV0YWluUHRyPFdLVmlldz4gd2tWaWV3OworCiBAaW50ZXJmYWNl
IENsb3NlV2hpbGVTdGFydGluZ1Byb3RvY29sIDogVGVzdFByb3RvY29sCiBAZW5kCiAKQEAgLTg5
LDcgKzkzLDcgQEAgc3RhdGljIFdLUHJvY2Vzc0dyb3VwICpwcm9jZXNzR3JvdXAoKQogICAgICAg
ICB9OwogICAgICAgICBXS0NvbnRleHRTZXRDbGllbnQoW3Byb2Nlc3NHcm91cCgpIF9jb250ZXh0
UmVmXSwgJmNsaWVudC5iYXNlKTsKIAotICAgICAgICBraWxsKFdLQ29udGV4dEdldE5ldHdvcmtQ
cm9jZXNzSWRlbnRpZmllcihbcHJvY2Vzc0dyb3VwKCkgX2NvbnRleHRSZWZdKSwgU0lHS0lMTCk7
CisgICAgICAgIGtpbGwoV0tXZWJzaXRlRGF0YVN0b3JlR2V0TmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyKFdLUGFnZUdldFdlYnNpdGVEYXRhU3RvcmUoW3drVmlldyBwYWdlUmVmXSkpLCBTSUdLSUxM
KTsKICAgICAgICAgW3NlbGYuY2xpZW50IFVSTFByb3RvY29sOnNlbGYgZGlkRmFpbFdpdGhFcnJv
cjpbTlNFcnJvciBlcnJvcldpdGhEb21haW46TlNDb2NvYUVycm9yRG9tYWluIGNvZGU6MCB1c2Vy
SW5mbzpuaWxdXTsKICAgICB9KTsKIH0KQEAgLTE0Miw3ICsxNDYsNyBAQCBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSSB7CiBzdGF0aWMgdm9pZCBydW5UZXN0KCkKIHsKICAgICBSZXRhaW5QdHI8V0tC
cm93c2luZ0NvbnRleHRHcm91cD4gYnJvd3NpbmdDb250ZXh0R3JvdXAgPSBhZG9wdE5TKFtbV0tC
cm93c2luZ0NvbnRleHRHcm91cCBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOkAiVGVzdElkZW50
aWZpZXIiXSk7Ci0gICAgUmV0YWluUHRyPFdLVmlldz4gd2tWaWV3ID0gYWRvcHROUyhbW1dLVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBwcm9jZXNz
R3JvdXA6cHJvY2Vzc0dyb3VwKCkgYnJvd3NpbmdDb250ZXh0R3JvdXA6YnJvd3NpbmdDb250ZXh0
R3JvdXAuZ2V0KCldKTsKKyAgICB3a1ZpZXcgPSBhZG9wdE5TKFtbV0tWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIHByb2Nlc3NHcm91cDpwcm9jZXNz
R3JvdXAoKSBicm93c2luZ0NvbnRleHRHcm91cDpicm93c2luZ0NvbnRleHRHcm91cC5nZXQoKV0p
OwogICAgIFJldGFpblB0cjxDdXN0b21Qcm90b2NvbHNMb2FkRGVsZWdhdGU+IGxvYWREZWxlZ2F0
ZSA9IGFkb3B0TlMoW1tDdXN0b21Qcm90b2NvbHNMb2FkRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsK
ICAgICBbd2tWaWV3IGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJdLmxvYWREZWxlZ2F0ZSA9IGxv
YWREZWxlZ2F0ZS5nZXQoKTsKICAgICBbW3drVmlldyBicm93c2luZ0NvbnRleHRDb250cm9sbGVy
XSBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRo
U3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUA6Ly9yZWRpcmVjdD90ZXN0Iiwg
W1Rlc3RQcm90b2NvbCBzY2hlbWVdXV1dXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5jcHAKaW5kZXggZjcxYWYyYjFjYjZhOTg0NTI2NzFjZGE1MDU1ZTNhMmNkZmE5YWVm
ZC4uYTA3MWExMWMyN2U1ZGIyYWExOTNmZWE5MWYwYzdlOWNkZGE4OTU2ZSAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAgLTEwNjcsOCArMTA2Nyw2IEBAIGJv
b2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVz
dE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAKICAgICByZXNldFF1b3RhKCk7CiAKLSAgICBXS0NvbnRl
eHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKHBsYXRm
b3JtQ29udGV4dCgpLCB0cnVlKTsKLQogICAgIFdLQ29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVy
U3RhdGVGb3JUZXN0aW5nKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCkpOwog
CiAgICAgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpLCBmYWxzZSk7CkBAIC0xMjQzLDcgKzEyNDEs
NyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpmaW5kQW5kRHVtcFdlYktpdFByb2Nlc3NJZGVudGlm
aWVycygpCiAgICAgZHVtcFJlc3BvbnNlKG1ha2VTdHJpbmcoVGVzdENvbnRyb2xsZXI6OndlYlBy
b2Nlc3NOYW1lKCksICI6ICIsCiAgICAgICAgIFdLUGFnZUdldFByb2Nlc3NJZGVudGlmaWVyKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCkpLCAnXG4nLAog
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6bmV0d29ya1Byb2Nlc3NOYW1lKCksICI6ICIsCi0gICAg
ICAgIFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihtX2NvbnRleHQuZ2V0KCkp
LCAnXG4nKSk7CisgICAgICAgIFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRl
bnRpZmllcih3ZWJzaXRlRGF0YVN0b3JlKCkpLCAnXG4nKSk7CiAjZWxzZQogICAgIGR1bXBSZXNw
b25zZSgiXG4iX3MpOwogI2VuZGlmCkBAIC0yMzAzLDcgKzIzMDEsNyBAQCBXS1JldGFpblB0cjxX
S1R5cGVSZWY+IFRlc3RDb250cm9sbGVyOjpnZXRJbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9u
VXNlckRhdGEoKQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpuZXR3b3JrUHJvY2Vzc0RpZENyYXNo
KCkKIHsKLSAgICBwaWRfdCBwaWQgPSBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIobV9jb250ZXh0LmdldCgpKTsKKyAgICBwaWRfdCBwaWQgPSBXS1dlYnNpdGVEYXRhU3RvcmVH
ZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIod2Vic2l0ZURhdGFTdG9yZSgpKTsKICAgICBmcHJp
bnRmKHN0ZGVyciwgIiNDUkFTSEVEIC0gJXMgKHBpZCAlbGQpXG4iLCBuZXR3b3JrUHJvY2Vzc05h
bWUoKSwgc3RhdGljX2Nhc3Q8bG9uZz4ocGlkKSk7CiAgICAgZXhpdCgxKTsKIH0KQEAgLTMxNDIs
NyArMzE0MCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldElnbm9yZXNWaWV3cG9ydFNjYWxl
TGltaXRzKGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pCiAKIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKLSAgICBXS0NvbnRleHRUZXJtaW5hdGVO
ZXR3b3JrUHJvY2VzcyhwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3Jl
VGVybWluYXRlTmV0d29ya1Byb2Nlc3Mod2Vic2l0ZURhdGFTdG9yZSgpKTsKIH0KIAogdm9pZCBU
ZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdvcmtlcnMoKQpAQCAtMzE3Myw5ICszMTcx
LDggQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVPdGhl
clBhZ2UoUGxhdGZvcm1XZWJWaWV3KiBwYXJlbnQKICAgICByZXR1cm4gbmV3IFBsYXRmb3JtV2Vi
Vmlldyhjb25maWd1cmF0aW9uLCBvcHRpb25zKTsKIH0KIAotV0tDb250ZXh0UmVmIFRlc3RDb250
cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLQ29u
dGV4dENvbmZpZ3VyYXRpb25SZWYgY29udGV4dENvbmZpZ3VyYXRpb24pCitXS0NvbnRleHRSZWYg
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0NvbnRleHRSZWYgY29udGV4
dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZikKIHsKLSAgICBXS0NvbnRleHRTZXRQcmltYXJ5
V2Vic2l0ZURhdGFTdG9yZShjb250ZXh0LCBkZWZhdWx0V2Vic2l0ZURhdGFTdG9yZSgpKTsKICAg
ICByZXR1cm4gY29udGV4dDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409568</attachid>
            <date>2020-09-24 06:51:27 -0700</date>
            <delta_ts>2020-09-24 10:53:55 -0700</delta_ts>
            <desc>Rebased patch</desc>
            <filename>wk2-move-network-process-data-store.diff</filename>
            <type>text/plain</type>
            <size>363792</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRleCA5NzdkMTM1MjlmOTkuLmMyYzRiNGI3NGVk
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtMTc1LDYgKzE3NSw3IEBAIHZvaWQg
cmVtb3ZlU3VicmVzb3VyY2VVUkxBdHRyaWJ1dGVzKFJlZjxEb2N1bWVudEZyYWdtZW50PiYmIGZy
YWdtZW50LCBXVEY6OkZ1bmN0CiAKIHN0ZDo6dW5pcXVlX3B0cjxQYWdlPiBjcmVhdGVQYWdlRm9y
U2FuaXRpemluZ1dlYkNvbnRlbnQoKQogeworICAgIC8vIEZJWE1FOiBkbyB3ZSByZWFsbHkgbmVl
ZCB0byB1c2UgdGhlIGRlZmF1bHQgc2Vzc2lvbiBJRCBoZXJlLCBkb2VzIGl0IG1hdHRlcj8gY2Fu
IHdlIHVzZSBhbiBlcGhlbWVyYWwgc2Vzc2lvbiBJRCBpbnN0ZWFkPy4KICAgICBhdXRvIHBhZ2VD
b25maWd1cmF0aW9uID0gcGFnZUNvbmZpZ3VyYXRpb25XaXRoRW1wdHlDbGllbnRzKFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwogICAgIAogICAgIGF1dG8gcGFnZSA9IG1ha2VV
bmlxdWU8UGFnZT4oV1RGTW92ZShwYWdlQ29uZmlndXJhdGlvbikpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAK
aW5kZXggMGZlYmQ0YjUyMGVlLi45OGIwMmI4YWVkNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAt
MjcwNiw2ICsyNzA2LDkgQEAgUEFMOjpTZXNzaW9uSUQgUGFnZTo6c2Vzc2lvbklEKCkgY29uc3QK
IC8vIFRoaXMgaXMgb25seSBjYWxsZWQgYnkgV2ViS2l0TGVnYWN5Lgogdm9pZCBQYWdlOjpzZXRT
ZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogeworI2lmIFBMQVRGT1JNKEdUSykg
fHwgUExBVEZPUk0oV1BFKQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5k
aWYKICAgICBBU1NFUlQoc2Vzc2lvbklELmlzVmFsaWQoKSk7CiAgICAgQVNTRVJUKG1fc2Vzc2lv
bklEID09IFBBTDo6U2Vzc2lvbklEOjpsZWdhY3lQcml2YXRlU2Vzc2lvbklEKCkgfHwgbV9zZXNz
aW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7CiAgICAgQVNTRVJU
KHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6bGVnYWN5UHJpdmF0ZVNlc3Npb25JRCgpIHx8
IHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCmluZGV4IDYzZWRmMTJlMjEzMy4uZmQw
ZmZkY2FlYmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1h
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAg
LTQ2Niw2ICs0NjYsNyBAQCBFbmNvZGVkRGF0YVN0YXR1cyBTVkdJbWFnZTo6ZGF0YUNoYW5nZWQo
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgICAgIHJldHVybiBFbmNvZGVkRGF0YVN0YXR1czo6
Q29tcGxldGU7CiAKICAgICBpZiAoYWxsRGF0YVJlY2VpdmVkKSB7CisgICAgICAgIC8vIEZJWE1F
OiBkbyB3ZSByZWFsbHkgbmVlZCB0byB1c2UgdGhlIGRlZmF1bHQgc2Vzc2lvbiBJRCBoZXJlLCBk
b2VzIGl0IG1hdHRlcj8gY2FuIHdlIHVzZSBhbiBlcGhlbWVyYWwgc2Vzc2lvbiBJRCBpbnN0ZWFk
Py4KICAgICAgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IHBhZ2VDb25maWd1cmF0aW9uV2l0
aEVtcHR5Q2xpZW50cyhQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKICAgICAg
ICAgbV9jaHJvbWVDbGllbnQgPSBtYWtlVW5pcXVlPFNWR0ltYWdlQ2hyb21lQ2xpZW50Pih0aGlz
KTsKICAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24uY2hyb21lQ2xpZW50ID0gbV9jaHJvbWVDbGll
bnQuZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGQ3NDdiYzFhZjFjMC4uMjkzNTZkMTAwMTI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQxOCBAQAorMjAyMC0wOS0yNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJp
c3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgTmV0d29ya1Byb2Nlc3NQcm94eSBv
d25lcnNoaXAgZnJvbSBXZWJQcm9jZXNzUG9vbCB0byBXZWJzaXRlRGF0YVN0b3JlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYwNDEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1vdmVz
IHRoZSB0aGluZ3Mgb24gV2ViUHJvY2Vzc1Bvb2wgYXNzb2NpYXRlZCB3aXRoIE5ldHdvcmtQcm9j
ZXNzUHJveHkgb3duZXJzaGlwIGFuZCBtb3ZlcyB0aGVtCisgICAgICAgIHRvIFdlYnNpdGVEYXRh
U3RvcmUuICBJdCdzIHByZXR0eSBtZWNoYW5pY2FsLCBidXQgaXQgcmVhY2hlcyBpdHMgZmluZ2Vy
cyBpbnRvIGEgbG90IG9mIHRoaW5ncy4gIFNvbWUgY29tbWVudHMKKyAgICAgICAgb24gaW50ZXJl
c3RpbmcgcGFydHMgYXJlIGJlbG93LgorCisgICAgICAgIFdoeSBhbSBJIGRvaW5nIHRoaXM/ICBJ
J20gZ2xhZCB5b3UgYXNrZWQuCisKKyAgICAgICAgV0tXZWJWaWV3IGhhZCBhIGZ1bmRhbWVudGFs
IGNvb2tpZSBwcm9ibGVtIGJlZm9yZSB0aGlzIGNoYW5nZS4gIEl0IGhhZCBhIFdLV2Vic2l0ZURh
dGFTdG9yZSB0aGF0IGNvdWxkIHBvaW50IHRvIGEgY29va2llIHN0b3JlIG9uIGRpc2sKKyAgICAg
ICAgdGhhdCBjb3VsZCBiZSB1c2VkIGluIG11bHRpcGxlIG5ldHdvcmsgcHJvY2Vzc2VzIGF0IHRo
ZSBzYW1lIHRpbWUuICBUaGlzIGxlZCB0byBwcm9ibGVtcyB3aXRoIGNvb2tpZXMgYmVpbmcgcmVj
ZWl2ZWQgb3ZlciB0aGUgbmV0d29yaworICAgICAgICBpbiB0aG9zZSBkaWZmZXJlbnQgcHJvY2Vz
c2VzIGJlaW5nIHVuYWJsZSB0byBiZSBzaGFyZWQgdW50aWwgdGhleSB3ZXJlIHdyaXR0ZW4gdG8g
ZGlzaywgc29tZXRoaW5nIHRoYXQgZG9lcyBub3QgaGFwcGVuIGltbWVkaWF0ZWx5LCBlc3BlY2lh
bGx5CisgICAgICAgIG9uIGlPUy4gIFRoaXMgcHJvYmxlbSBpcyBldmVuIHdvcnNlIHdpdGggc2Vz
c2lvbiBjb29raWVzLCB3aGljaCBzaG91bGQgYmUga2VwdCBpbiBtZW1vcnkgYW5kIG5ldmVyIGJl
IHdyaXR0ZW4gdG8gZGlzay4gIFRob3NlIHByb2Nlc3NlcworICAgICAgICBkaWQgbm90IHVzZSBz
aGFyZWQgbWVtb3J5IHRvIHNoYXJlIHRoZSBjb29raWVzLiAgVGhleSBqdXN0IGRpZG4ndCBzaGFy
ZSB0aGVtLCB3aGljaCBsZWQgdG8gY29va2llIGluY29ycmVjdG5lc3MuICBUaGlzIHdhcyB1bmZv
cnR1bmF0ZWx5CisgICAgICAgIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaWYgeW91IGNhbGwg
W1tXS1dlYlZpZXcgYWxsb2NdIGluaXRdIG1vcmUgdGhhbiBvbmNlLCB3aGljaCBtYW55IGRldmVs
b3BlcnMgZG8uICBUaGVyZSB3YXMgYWxzbyBvY2Nhc2lvbmFsIGNvb2tpZQorICAgICAgICBjb3Jy
dXB0aW9uIGFuZCBsb3NzIGZyb20gbXVsdGlwbGUgcHJvY2Vzc2VzIHdyaXRpbmcgY29va2llcyB0
byB0aGUgc2FtZSBmaWxlLiAgQWxsIHRoZXNlIHByb2JsZW1zIGNhbiBiZSB3b3JrZWQgYXJvdW5k
IGJ5IGRvaW5nIHdoYXQgU2FmYXJpIGRvZXM6CisgICAgICAgIG1hbnVhbGx5IHNldHRpbmcgdGhl
IFdLUHJvY2Vzc1Bvb2wgb2YgYWxsIFdLV2ViVmlld0NvbmZpZ3VyYXRpb25zIHRvIHRoZSBzYW1l
IHByb2Nlc3MgcG9vbCB0byBvbmx5IHVzZSBvbmUgbmV0d29yayBwcm9jZXNzLiAgVGhpcyBpcyBu
b3QgaW50dWl0aXZlCisgICAgICAgIG9yIHdlbGwgZG9jdW1lbnRlZCwgYW5kIGV2ZW4gdGhvdWdo
IEkgaGF2ZSBzcGVudCB0aGUgbWFqb3JpdHkgb2YgV1dEQyBsYWJzIGZvciB0aGUgbGFzdCAzIHll
YXJzIHRlbGxpbmcgZGV2ZWxvcGVycyB0byBkbyBpdCwgbW9zdCBkZXZlbG9wZXJzIGRvIG5vdC4K
KyAgICAgICAgVGhlIGRlZmF1bHQgYmVoYXZpb3Igc2hvdWxkIG5vdCBsZWFkIHRvIGNvb2tpZSBp
bmNvcnJlY3RuZXNzLCBjb3JydXB0aW9uLCBvciBsb3NzLiAgVGhpcyBhY2NvbXBsaXNoZXMgdGhh
dC4KKworICAgICAgICBBIGJpZ2dlciBwcm9ibGVtIHRoYXQgY2FuJ3QgcmVhbGx5IGJlIHdvcmtl
ZCBhcm91bmQgd2VsbCBpcyB3aGF0IHdlIHdlcmUgZG9pbmcgaW4gb3VyIFdLSFRUUENvb2tpZVN0
b3JlIEFQSS4gIE1hbnkgZGV2ZWxvcGVycyBjYWxsIHNldENvb2tpZTpjb21wbGV0aW9uSGFuZGxl
cjoKKyAgICAgICAgdG8gImxvZyBpbiIgdGhlIHVzZXIgYnkgc2V0dGluZyBhIGNvb2tpZSwgdGhl
biBpbiB0aGUgY29tcGxldGlvbiBoYW5kbGVyLCB0aGV5IG9wZW4gYSBXS1dlYlZpZXcgdG8gdGhl
aXIgcGFnZSBhbmQgZXhwZWN0IHRoZSBjb29raWUgdG8gYmUgc2VudC4gIEJlZm9yZSB0aGlzCisg
ICAgICAgIGNoYW5nZSwgd2Ugd291bGQgbm90IGtub3cgd2hpY2ggcHJvY2VzcyBwb29sIHRvIHNl
dCB0aGUgY29va2llIGluIHNvIHdlIHdvdWxkIGd1ZXNzLiAgSWYgdGhlcmUgd2VyZSBubyBwcm9j
ZXNzIHBvb2xzLCB3ZSB3b3VsZCBzdGFydCB3cml0aW5nIHRvIGRpc2sgYW5kIGhvcGUKKyAgICAg
ICAgaXQgd3JpdGVzIGZhc3QgZW5vdWdoLiAgV2UgY2FuJ3Qgd2FpdCBmb3IgaXQgdG8gY29tcGxl
dGUgYmVjYXVzZSBpdCBjYXVzZXMgaGFuZ3MgbGlrZSByZGFyOi8vcHJvYmxlbS82Njk2MTA2Ni4g
IFRoaXMgc29sdXRpb24gYWxsb3dzIHRvIHN0YXJ0IHRoZSBuZXR3b3JrCisgICAgICAgIHByb2Nl
c3Mgb2YgdGhhdCBXZWJzaXRlRGF0YVN0b3JlIGFuZCBzZXQgdGhlIGNvb2tpZSBpbiB0aGF0IHBy
b2Nlc3MuICBXZSBub3cga25vdyB0aGF0IGlzIHRoZSBvbmx5IHByb2Nlc3MgdGhpcyBXZWJzaXRl
RGF0YVN0b3JlIHdpbGwgZXZlciB1c2UuICBOb3csIHVzZXJzCisgICAgICAgIHdpbGwgYmUgYWJs
ZSB0byBhY3R1YWxseSBiZSBsb2dnZWQgaW4gYWxsIHRoZSB0aW1lIGluIHN1Y2ggYXBwcy4KKwor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1h
bmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIubWVzc2FnZXMuaW46CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9jdXJsL1dl
YkNvb2tpZU1hbmFnZXJDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
cjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1tOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2Vy
U291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0
SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6
ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmVuc3Vy
ZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Np
b24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWZh
dWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2Nv
YSk6CisgICAgICAgIChXZWJLaXQ6OnNhdmVDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3Vy
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURl
ZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24pOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3Jh
Z2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQXR0YWNo
bWVudC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2Rl
KToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6CisgICAgICAgIChBUEk6
OkhUVFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENv
b2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0
b3JlOjpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9y
VVJMKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKToKKyAgICAg
ICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAoQVBJOjpI
VFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29v
a2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2ll
U3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4K
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bv
b2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhU
VFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3Bw
OgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk6
CisgICAgICAgIChXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAg
IChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdLQ29udGV4
dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVk
LgorICAgICAgICAoV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZUdldFdlYnNpdGVEYXRhU3RvcmUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdLV2Vic2l0ZURhdGFTdG9y
ZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdLV2Vic2l0ZURhdGFTdG9yZUdl
dE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dL
V2Vic2l0ZURhdGFTdG9yZVJlZi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQ
cm9jZXNzUG9vbC5tbToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzczpdKToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBf
c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vz
c0RpZFJlc3VtZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9uZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBf
bWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NldEFsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yU2VydmljZVdvcmtlcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9v
bCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6XSk6IERlbGV0ZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tOgorICAgICAg
ICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JU
ZXN0aW5nOl0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQ
cm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3Jl
IF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldKToKKyAgICAgICAgKC1b
V0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdKToKKyAgICAg
ICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOgor
ICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0p
OgorICAgICAgICAoK1tXS1dlYnNpdGVEYXRhU3RvcmUgX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZ10pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKF9XZWJLaXRDb29raWVNYW5hZ2VyUHJp
dmF0ZTo6Y29va2llTWFuYWdlciBjb25zdCk6CisgICAgICAgIChfV2ViS2l0Q29va2llTWFuYWdl
clByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUpOgorICAgICAgICAod2Via2l0
Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfc2V0
X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfc2V0
X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2Nl
cHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKToK
KyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyk6CisgICAgICAgICh3
ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAod2Via2l0V2ViQ29udGV4
dENvbnN0cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4dF9wcmVmZXRjaF9kbnMp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tp
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29r
aWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3Rh
dGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXpl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5l
dHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQ
cm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnhwY0VuZHBvaW50TWVzc2FnZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRw
b2ludFRvV2ViUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fk
cy9Eb3dubG9hZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6Y2Fu
Y2VsKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6cHVibGlzaFByb2dyZXNzKToK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1
ZXN0KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRpb25X
aXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fk
cy9Eb3dubG9hZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1h
cDo6RG93bmxvYWRQcm94eU1hcCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6
OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWRQcm94eU1hcDo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKToKKyAgICAgICAgKFdl
YktpdDo6RG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQpOgorICAgICAgICAoV2Vi
S2l0OjpEb3dubG9hZFByb3h5TWFwOjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29y
ay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRM
b2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJv
eHk6OnN0b3BMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHk6OmludmFsaWRhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05l
dHdvcmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1By
b3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6ZGVmYXVsdFByb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkZWZhdWx0TmV0d29y
a1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp0ZXJtaW5h
dGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRUZXJtaW5hdGUp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJh
bWV0ZXJzVG9OZXdQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xBbHdh
eXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNz
UG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkQ2xvc2UpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRG
aW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
ZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpyZW1vdmVTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQ
cm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0
d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91
bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9vbEhhc0JhY2tn
cm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6aGFzU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCBjb25zdCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclBy
b3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFt
ZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6
ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2ll
TWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2ll
Q2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRD
bG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6
cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldENv
bnRyb2xsZWRCeUF1dG9tYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRp
c2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJy
aWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbik6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1l
ckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tB
dHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05l
dHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZUZy
b21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQ
b2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hl
bWVBc0xvY2FsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJM
U2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdp
c3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNI
YXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29y
a2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVz
dGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKTogRGVs
ZXRlZC4KKyAgICAgICAgVGhlcmUgc2VlbXMgdG8gYmUgYSBsb3Qgb2YgY29kZSByZW1vdmFsIGhl
cmUsIGJ1dCBtb3N0IG9mIGl0IHdhcyBkdXBsaWNhdGUgY29kZSB3aXRoCisgICAgICAgIFdlYnNp
dGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMgd2hpY2ggaXMgdXNlZCBpbnN0ZWFkLiAgVGhhdCB3aGlj
aCB3YXMgbm90IGR1cGxpY2F0ZSB3YXMKKyAgICAgICAgbW92ZWQgdG8gTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcy4gIFRoaXMgd2FzIHRoZSBo
YXJkZXN0IHBhcnQgb2YgdGhpcyBwYXRjaC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3Vu
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kU3luY1Rv
TmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9T
dXNwZW5kRm9yVGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJv
Y2Vzc0RpZFJlc3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpmbHVzaENvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIpOiBEZWxldGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGlu
Z0lmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpzZXRXZWJzaXRlRGF0
YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmRpZEZp
bmlzaExhdW5jaGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dl
YnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2Vi
UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3Jr
UHJvY2Vzc1hQQ0VuZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3MgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFNlcnZpY2VXb3JrZXJU
aW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3Mp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNl
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJj
ZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzVmVy
eVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9w
RnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lz
dGVyZWRBc1N1YkZyYW1lVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZh
bHVlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRy
eSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1l
bW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpn
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29y
ZHNQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c3RhdGlz
dGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpk
b21haW5JREV4aXN0c0luRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2Vy
ZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRJc1J1bm5p
bmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJh
c2VPbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50
ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZh
dGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VXNlSVRQRGF0
YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVM
b2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVsZXRlQ29va2llc0Zv
clRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNMb2NhbFN0
b3JhZ2VGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGREb3duZ3Jh
ZGVSZWZlcnJlckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNp
dGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGVGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVz
dGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGly
ZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVu
dFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQ
b29scyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmFsbG93U3Bl
Y2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0
aXN0aWNzVGVzdGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEFkQ2xpY2tBdHRyaWJ1
dGlvbkRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZsdXNo
Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vzc2lvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBwQm91bmRTZXNzaW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWlu
c1RvSVRQSWZJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3Jr
UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1ha2VOZXh0TmV0
d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJX
aXRoU2Vzc2lvbklETWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVT
dG9yYWdlT3BlcmF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphZGRQZW5kaW5nQ29va2llKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlUGVuZGlu
Z0Nvb2tpZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNs
ZWFyUGVuZGluZ0Nvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1Bh
cmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJzaXN0
ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ2xpYi9X
ZWJQcm9jZXNzUHJveHlHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9zb3VwL1dl
YkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3JzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mby5oOgorCiAy
MDIwLTA5LTI0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbR1RLXVtXUEVdIE1vdmUgcHJveHkgc2V0dGluZ3MgZnJvbSBXZWJLaXRDb250ZXh0
IHRvIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCmluZGV4IGZjZTIz
ODk4N2E3OC4uNWM5Yjc3MTg2ZmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9Db29raWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZVN0b3JhZ2UuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0hUVFBDb29raWVBY2NlcHRQb2xpY3kuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05l
dHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5j
bHVkZSA8d3RmL1VSTC5oPgpAQCAtMTQzLDE1ICsxNDQsMTggQEAgdm9pZCBXZWJDb29raWVNYW5h
Z2VyOjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQp
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQ
Q29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIHBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGlj
eShwb2xpY3kpOwotICAgIG1fcHJvY2Vzcy5jb29raWVBY2NlcHRQb2xpY3lDaGFuZ2VkKHBvbGlj
eSk7Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIHBsYXRmb3JtU2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShwb2xpY3ksIFtwb2xpY3ksIHByb2Nlc3MgPSBtYWtlUmVmKG1fcHJvY2Vz
cyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11
dGFibGUgeworICAgICAgICBwcm9jZXNzLT5jb29raWVBY2NlcHRQb2xpY3lDaGFuZ2VkKHBvbGlj
eSk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgfSk7CiB9CiAKLXZvaWQgV2Vi
Q29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9p
ZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9s
aWN5KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihtX3By
b2Nlc3MuZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuY29va2llQWNjZXB0UG9saWN5KCkpOworICAg
IGlmIChhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IG1fcHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNz
aW9uSUQpKQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdG9yYWdlU2Vzc2lvbi0+Y29va2ll
QWNjZXB0UG9saWN5KCkpOworICAgIGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoSFRU
UENvb2tpZUFjY2VwdFBvbGljeTo6TmV2ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29r
aWVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29v
a2llTWFuYWdlci5oCmluZGV4IGNhN2Y1NWU4NjZiZC4uMzVjZThhOWVjZmMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5h
Z2VyLmgKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlICJTb3VwQ29va2llUGVyc2lzdGVudFN0
b3JhZ2VUeXBlLmgiCiAjZW5kaWYKIAorT0JKQ19DTEFTUyBOU0hUVFBDb29raWVTdG9yYWdlOwor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdHJ1Y3QgQ29va2llOwogZW51bSBjbGFzcyBIVFRQQ29v
a2llQWNjZXB0UG9saWN5IDogdWludDhfdDsKQEAgLTc5LDggKzgxLDggQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGdldEFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYpOwogICAgIHZvaWQgZ2V0Q29va2llcyhQ
QUw6OlNlc3Npb25JRCwgY29uc3QgVVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8
V2ViQ29yZTo6Q29va2llPiYmKT4mJik7CiAKLSAgICB2b2lkIHBsYXRmb3JtU2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5KTsKLSAgICB2b2lk
IGdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3Jl
OjpIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJik7CisgICAgdm9pZCBwbGF0Zm9ybVNldEhUVFBD
b29raWVBY2NlcHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIGdldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SFRUUENv
b2tpZUFjY2VwdFBvbGljeSk+JiYpOwogCiAgICAgdm9pZCBzdGFydE9ic2VydmluZ0Nvb2tpZUNo
YW5nZXMoUEFMOjpTZXNzaW9uSUQpOwogICAgIHZvaWQgc3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5n
ZXMoUEFMOjpTZXNzaW9uSUQpOwpAQCAtODgsNCArOTAsOCBAQCBwcml2YXRlOgogICAgIE5ldHdv
cmtQcm9jZXNzJiBtX3Byb2Nlc3M7CiB9OwogCisjaWYgUExBVEZPUk0oQ09DT0EpCit2b2lkIHNh
dmVDb29raWVzKE5TSFRUUENvb2tpZVN0b3JhZ2UgKiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIubWVzc2FnZXMuaW4KaW5kZXggYWNkNzU0NDBkODNmLi42ZmRmNTc3MmFhNmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2Vy
Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9X
ZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0zNiw3ICszNiw3IEBAIG1lc3NhZ2VzIC0+
IFdlYkNvb2tpZU1hbmFnZXIgTm90UmVmQ291bnRlZCB7CiAgICAgdm9pZCBEZWxldGVBbGxDb29r
aWVzTW9kaWZpZWRTaW5jZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdhbGxUaW1lIHRpbWUp
IC0+ICgpIEFzeW5jCiAKICAgICB2b2lkIFNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koZW51bTp1
aW50OF90IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSAtPiAoKSBBc3lu
YwotICAgIHZvaWQgR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSgpIC0+IChlbnVtOnVpbnQ4X3Qg
V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCisgICAgdm9pZCBH
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgLT4gKGVu
dW06dWludDhfdCBXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgQXN5bmMK
ICAgICAKICAgICB2b2lkIFN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCiAgICAgdm9pZCBTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0Nvb2tpZXMvY3VybC9XZWJDb29raWVNYW5hZ2VyQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvY3VybC9XZWJDb29raWVNYW5hZ2VyQ3VybC5jcHAKaW5k
ZXggYzJlZjE1Njg0NTA0Li5mYWFkYTUwZjljNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvQ29va2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvY3VybC9XZWJDb29raWVNYW5h
Z2VyQ3VybC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCi12b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0
SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkKK3Zv
aWQgV2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhU
VFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQ29va2llQWNjZXB0UG9saWN5IGN1cmxQb2xpY3kg
PSBDb29raWVBY2NlcHRQb2xpY3k6Ok9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwogICAgIHN3
aXRjaCAocG9saWN5KSB7CkBAIC01NSw2ICs1NSw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6
cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kK
ICAgICBtX3Byb2Nlc3MuZm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihbY3VybFBvbGljeV0g
KGNvbnN0IGF1dG8mIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbikgewogICAgICAgICBuZXR3b3JrU3Rv
cmFnZVNlc3Npb24uc2V0Q29va2llQWNjZXB0UG9saWN5KGN1cmxQb2xpY3kpOwogICAgIH0pOwor
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29r
aWVNYW5hZ2VyTWFjLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL21h
Yy9XZWJDb29raWVNYW5hZ2VyTWFjLm1tCmluZGV4IDE5ZjU4NzhkNjYyYy4uN2Y5MTIwY2EyZTFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvbWFjL1dl
YkNvb2tpZU1hbmFnZXJNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
b29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1w
b3J0IDxXZWJDb3JlL0hUVFBDb29raWVBY2NlcHRQb2xpY3kuaD4KICNpbXBvcnQgPFdlYkNvcmUv
TmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQ
SS5oPgorI2ltcG9ydCA8d3RmL0NhbGxiYWNrQWdncmVnYXRvci5oPgogI2ltcG9ydCA8d3RmL1By
b2Nlc3NQcml2aWxlZ2UuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01MywxNSArNTQsMTkg
QEAgc3RhdGljIENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kgdG9DRkhUVFBDb29raWVT
dG9yYWdlQWNjZXB0UG9saWN5KEhUVFBDb28KICAgICByZXR1cm4gQ0ZIVFRQQ29va2llU3RvcmFn
ZUFjY2VwdFBvbGljeUFsd2F5czsKIH0KIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9y
bVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kp
Cit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGlj
eShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdl
KFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKIAorICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29v
a2llU3RvcmFnZV0gc2V0Q29va2llQWNjZXB0UG9saWN5OnN0YXRpY19jYXN0PE5TSFRUUENvb2tp
ZUFjY2VwdFBvbGljeT4ocG9saWN5KV07CisgICAgc2F2ZUNvb2tpZXMoW05TSFRUUENvb2tpZVN0
b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogCiAgICAgbV9wcm9jZXNzLmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oWyZdIChjb25z
dCBhdXRvJiBuZXR3b3JrU3RvcmFnZVNlc3Npb24pIHsKICAgICAgICAgaWYgKGF1dG8gY29va2ll
U3RvcmFnZSA9IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5jb29raWVTdG9yYWdlKCkpCiAgICAgICAg
ICAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3Jh
Z2UuZ2V0KCksIHRvQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKKyAg
ICAgICAgaWYgKGF1dG8gKnN0b3JhZ2UgPSBuZXR3b3JrU3RvcmFnZVNlc3Npb24ubnNDb29raWVT
dG9yYWdlKCkpCisgICAgICAgICAgICBzYXZlQ29va2llcyhzdG9yYWdlLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2VyU291cC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2VyU291
cC5jcHAKaW5kZXggNzU0ZDBiYmM2YjRmLi5kNTc2YWZkZTQyZjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3Vw
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJD
b29raWVNYW5hZ2VyU291cC5jcHAKQEAgLTM3LDExICszNywxMiBAQAogbmFtZXNwYWNlIFdlYktp
dCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpw
bGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3kpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2Vw
dFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fcHJvY2Vzcy5mb3JFYWNoTmV0
d29ya1N0b3JhZ2VTZXNzaW9uKFtwb2xpY3ldIChhdXRvJiBzZXNzaW9uKSB7CiAgICAgICAgIHNl
c3Npb24uc2V0Q29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7CiAgICAgfSk7CisgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRDb29raWVQZXJz
aXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3Rv
cmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4
IGJlOGQ5NjY2MmJlNi4uMjU3YWQ0NDE2M2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMTczLDYgKzE3Myw3IEBAIE5ldHdvcmtQ
cm9jZXNzOjpOZXR3b3JrUHJvY2VzcyhBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJh
bWV0ZXJzJiYgcGFyYW1lCiAjZW5kaWYKIAogI2lmIFVTRShTT1VQKQorICAgIC8vIEZJWE1FOiBk
byBub3QgdXNlIHRoZSBkZWZhdWx0IHNlc3Npb24gSUQuCiAgICAgRE5TUmVzb2x2ZVF1ZXVlU291
cDo6c2V0R2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNjZXNzb3IoW3RoaXNdKCkgLT4gU291cFNl
c3Npb24qIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9uU291cCY+
KCpuZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSkuc291
cFNlc3Npb24oKTsKICAgICB9KTsKQEAgLTM0NywzMCArMzQ4LDYgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJhbWV0ZXJz
LmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFt
ZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0g
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lv
bjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRTZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJ
bmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGJvb2wgc2Vy
dmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCA9IHRydWU7Ci0gICAgYWRk
U2VydmljZVdvcmtlclNlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwg
c2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJh
bWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlm
Ci0KLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwotCi0gICAgYXV0byogZGVmYXVsdFNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihQ
QUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLSAgICBhdXRvKiBkZWZhdWx0U3Rv
cmFnZVNlc3Npb24gPSBkZWZhdWx0U2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7Ci0g
ICAgZm9yIChjb25zdCBhdXRvJiBjb29raWUgOiBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzKQotICAgICAgICBkZWZhdWx0U3RvcmFnZVNlc3Npb24t
PnNldENvb2tpZShjb29raWUpOwotCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9zdXBw
bGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+aW5pdGlhbGl6ZShwYXJhbWV0
ZXJzKTsKIApAQCAtNTA1LDggKzQ4Miw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNz
aW9uSUQsIGJvb2wgc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcm
IGlkZW50aWZpZXJCYXNlKQogI2VuZGlmCiB7Ci0gICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6
OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlm
ICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybjsKQEAgLTUyMSw3ICs0OTYs
NyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lv
bklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
Y2ZJZGVudGlmaWVyID0gbWFrZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3Np
bmcuIiwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAg
IGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBh
ZG9wdENGKGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsK
LSAgICBlbHNlCisgICAgZWxzZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkpCiAgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklk
ZW50aWZpZXIuZ2V0KCkpOwogCiAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vz
c01heVVzZUNvb2tpZUFQSSgpKSB7CkBAIC01NDQsMjEgKzUxOSwxMSBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpjb29raWVBY2NlcHRQb2xpY3lDaGFuZ2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kg
bmV3UG9saWN5KQogCiBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9j
ZXNzOjpzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25z
dAogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSkKLSAgICAgICAgcmV0dXJuICZkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1
cm4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNl
c3Npb24oKSBjb25zdAotewotICAgIGlmICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9u
KQotICAgICAgICBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0
b3JhZ2VTZXNzaW9uOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0
b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJik+JiBmdW5jdG9yKQogewotICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCkpOwogICAgIGZvciAoYXV0byYgc3RvcmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vz
c2lvbnMudmFsdWVzKCkpCiAgICAgICAgIGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCA2YWQz
ZDY5OWE4OTEuLmM4YjQ1NzdlYmI0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMTcwLDcgKzE3MCw2IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYpPiYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKSBjb25zdDsK
LSAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIGRlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpIGNvbnN0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+IG5ld1Rlc3RpbmdTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJik7CiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgdm9pZCBlbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklE
JiwgYm9vbCBzaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllciwgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYpOwpAQCAtMzc1LDcg
KzM3NCw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6
ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gcGxh
dGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdDsKIAogICAgIHZvaWQgZGlk
UmVjZWl2ZU5ldHdvcmtQcm9jZXNzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImKTsKIApAQCAtNTQ0LDcgKzU0Miw2IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFBBTDo6
U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiBtX25ldHdvcmtTZXNz
aW9uczsKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zOwotICAg
IG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4g
bV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwogCiAgICAgUmVmUHRyPFN0b3JhZ2VNYW5h
Z2VyU2V0PiBtX3N0b3JhZ2VNYW5hZ2VyU2V0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuY3BwCmluZGV4IGNjNWM0NGJjZGU0Yy4uOTA2MzliNjkyMTgzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmNwcApAQCAtNTUsNyArNTUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
ICAgIGVuY29kZXIgPDwgdWlQcm9jZXNzU0RLVmVyc2lvbjsKICAgICBJUEM6OmVuY29kZShlbmNv
ZGVyLCBuZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CiAjZW5kaWYKLSAgICBlbmNvZGVyIDw8IGRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwogI2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIgPDwg
Y29va2llQWNjZXB0UG9saWN5OwogICAgIGVuY29kZXIgPDwgbGFuZ3VhZ2VzOwpAQCAtNjYsOSAr
NjUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBD
OjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lz
dGVyZWRBc0xvY2FsOwogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNj
ZXNzOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGVuY29kZXIgPDwgc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlIDw8IHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Rlcm1pbmF0aW9uRGVsYXk7Ci0jZW5kaWYKICAgICBlbmNvZGVyIDw8IHNob3VsZEVuYWJs
ZUlUUERhdGFiYXNlOwogICAgIGVuY29kZXIgPDwgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVi
dWdNb2RlOwogfQpAQCAtMTE0LDEyICsxMTAsNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIE9wdGlvbmFsPFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICBkZWNvZGVy
ID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIGlmICghZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMgPSBXVEZNb3ZlKCpkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyk7
Ci0KICNpZiBVU0UoU09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVB
Y2NlcHRQb2xpY3kpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzYsMjAgKzEyNiw2IEBA
IGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29k
ZXImIGRlY29kZXIsIE5ldHdvcmtQcm9jCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
dXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCi0gICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBzZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29k
ZXIgPj4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsK
LSAgICBpZiAoIXNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQuc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKnNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQuc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRp
b25EZWxheSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCiAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAppbmRleCBkZmYzZTVmZjA0
YjguLmIwM2JhYzkwNzJiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtMjcs
NyArMjcsNiBAQAogCiAjaW5jbHVkZSAiQ2FjaGVNb2RlbC5oIgogI2luY2x1ZGUgIlNhbmRib3hF
eHRlbnNpb24uaCIKLSNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29va2llLmg+CiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTcwLDggKzY5LDYgQEAgc3RydWN0IE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBuZXR3b3Jr
QVRTQ29udGV4dDsKICNlbmRpZgogCi0gICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAgCiAjaWYgVVNFKFNPVVApCiAgICAgV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBXZWJDb3JlOjpI
VFRQQ29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsKICAgICBWZWN0b3I8U3RyaW5n
PiBsYW5ndWFnZXM7CkBAIC04MiwxMiArNzksNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMgewogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVk
QXNMb2NhbDsKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nl
c3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgU3RyaW5nIHNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgYm9v
bCBzaG91bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5IHsgZmFs
c2UgfTsKLSNlbmRpZgotICAgIGJvb2wgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgeyBmYWxzZSB9
OworICAgIGJvb2wgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgeyB0cnVlIH07CiAgICAgYm9vbCBl
bmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFn
ZURhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9M
b2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKaW5kZXggZjk5NWUwMWQ0N2Q4Li4wMmM4NjczZDM5YjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2Nh
bFN0b3JhZ2VEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9X
ZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcApAQCAtMjE0LDcgKzIxNCw4IEBAIHZv
aWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsZWFyKCkKIAogdm9pZCBMb2NhbFN0b3JhZ2VEYXRh
YmFzZTo6Y2xvc2UoKQogewotICAgIEFTU0VSVCghbV9pc0Nsb3NlZCk7CisgICAgaWYgKG1faXND
bG9zZWQpCisgICAgICAgIHJldHVybjsKICAgICBtX2lzQ2xvc2VkID0gdHJ1ZTsKIAogICAgIGlm
IChtX2RpZFNjaGVkdWxlRGF0YWJhc2VVcGRhdGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQppbmRleCBk
YTYzNTkxMjQyMjMuLjgyZDQ0MjBhY2ZiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpAQCAtMzMsNiAr
MzMsNyBAQAogI2ltcG9ydCAiTmV0d29ya1Jlc291cmNlTG9hZGVyLmgiCiAjaW1wb3J0ICJOZXR3
b3JrU2Vzc2lvbkNvY29hLmgiCiAjaW1wb3J0ICJTYW5kYm94RXh0ZW5zaW9uLmgiCisjaW1wb3J0
ICJXZWJDb29raWVNYW5hZ2VyLmgiCiAjaW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vz
c2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNTdWZmaXguaD4KICNpbXBvcnQgPFdlYkNv
cmUvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuaD4KQEAgLTc4LDkgKzc5LDYgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYShjb25zdCBOZXR3
b3JrUHJvY2Vzc0MKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFy
YW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb250YWluZXJDYWNo
ZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1
bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2Vu
ZGlmCiAjZW5kaWYKIAogICAgIF9DRk5ldHdvcmtTZXRBVFNDb250ZXh0KHBhcmFtZXRlcnMubmV0
d29ya0FUU0NvbnRleHQuZ2V0KCkpOwpAQCAtMTA1LDExICsxMDMsNiBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdv
cmtQcm9jZXNzQwogICAgIFtOU1VSTENhY2hlIHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdl
dCgpXTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBOZXR3b3JrUHJvY2Vzczo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEo
KSBjb25zdAogewogI2lmIFVTRShTT1VSQ0VfQVBQTElDQVRJT05fQVVESVRfREFUQSkKQEAgLTIy
MSw3ICsyMTQsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmbHVzaENvb2tpZXMoY29uc3QgUEFM
OjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbgogICAgIHBsYXRmb3JtRmx1c2hD
b29raWVzKHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCi1zdGF0
aWMgdm9pZCBzYXZlQ29va2llcyhOU0hUVFBDb29raWVTdG9yYWdlICpjb29raWVTdG9yYWdlLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIHNhdmVD
b29raWVzKE5TSFRUUENvb2tpZVN0b3JhZ2UgKmNvb2tpZVN0b3JhZ2UsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogICAgIEFTU0VSVChjb29raWVTdG9yYWdlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKaW5k
ZXggZDk5ZjlkZDY0YmFkLi40OTUzODExYjIxNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCkBAIC0zOSwx
MSArMzksNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogewogfQogCi1zdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZv
cm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtl
VW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFsbG93U3BlY2lm
aWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmlj
YXRlSW5mbywgY29uc3QgU3RyaW5nJiBob3N0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3Jr
aW5nQ29udGV4dC5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5l
dHdvcmtpbmdDb250ZXh0Lm1tCmluZGV4IGMyNzM2ZTAyNmE1NS4uMWUxODQ4OWY5NDYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5n
Q29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVO
ZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNTUsMTUgKzU1LDExIEBAIHZvaWQgUmVtb3RlTmV0d29y
a2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKE5ldHdvcmtQcm9jZXNz
JiBuZXR3CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJh
bWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAogICAgIFJldGFpblB0
cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nlc3NDb29raWVTdG9yYWdlOwotICAgIGlm
ICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2ll
U3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1l
cmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNF
bXB0eSgpICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCAh
PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAgICB1aVByb2Nlc3ND
b29raWVTdG9yYWdlID0gY29va2llU3RvcmFnZUZyb21JZGVudGlmeWluZ0RhdGEocGFyYW1ldGVy
cy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcik7CiAKICAgICBuZXR3b3JrUHJvY2Vz
cy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBtYWtlU3RyaW5nKGJhc2UsICcu
Jywgc2Vzc2lvbklELnRvVUludDY0KCkpLCBXVEZNb3ZlKHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2Up
KTsKIAotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrUHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihz
ZXNzaW9uSUQpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5wZW5k
aW5nQ29va2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7Ci0KICAgICBu
ZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0
ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycykpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3BwCmluZGV4IDBkMzFiM2QxYjM0Zi4u
OGUxMTUzNTljNTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3BwCkBAIC0zOSw2ICszOSw3IEBA
IGNsYXNzIE5ldHdvcmtQcm9jZXNzTWFpblNvdXAgZmluYWw6IHB1YmxpYyBBdXhpbGlhcnlQcm9j
ZXNzTWFpbkJhc2UgewogcHVibGljOgogICAgIHZvaWQgcGxhdGZvcm1GaW5hbGl6ZSgpIG92ZXJy
aWRlCiAgICAgeworICAgICAgICAvLyBGSVhNRTogaXMgdGhpcyBzdGlsbCBuZWVkZWQ/IFdlIHNo
b3VsZCBwcm9iYWJseSBkZXN0cm95IGFsbCBleGlzdGluZyBzZXNzaW9ucyBhdCB0aGlzIHBvaW50
IGluc3RlYWQuCiAgICAgICAgIC8vIE5lZWRlZCB0byBkZXN0cm95IHRoZSBTb3VwU2Vzc2lvbiBh
bmQgU291cENvb2tpZUphciwgZS5nLiB0byBhdm9pZAogICAgICAgICAvLyBsZWFraW5nIFNRTGl0
ZSB0ZW1wb3Jhcnkgam91cm5hbGluZyBmaWxlcy4KICAgICAgICAgZ2xvYmFsTmV0d29ya1Byb2Nl
c3MtPmRlc3Ryb3lTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9j
ZXNzU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1By
b2Nlc3NTb3VwLmNwcAppbmRleCBhMjEyODQ1NzMzYTYuLjAwZmY4YjJmZTUwMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNz
U291cC5jcHAKQEAgLTEzNSwxMSArMTM1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKICAg
ICAgICAgdXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQocGFyYW1ldGVycy5sYW5ndWFnZXMp
OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBO
ZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25z
dAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vycm9ycyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGJv
b2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIGlmIChhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nl
c3Npb24oc2Vzc2lvbklEKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0F0dGFjaG1lbnQuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0F0dGFjaG1lbnQuaApp
bmRleCAxNzQzYzNiNzgzMGEuLmQ2ZmYzYzE3ZWJhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL0F0dGFjaG1lbnQuaApAQCAtOTUsOCArOTUsOCBAQCBwcml2YXRlOgogICAgIGludCBtX2Zp
bGVEZXNjcmlwdG9yIHsgLTEgfTsKICAgICBzaXplX3QgbV9zaXplOwogI2VsaWYgT1MoREFSV0lO
KQotICAgIG1hY2hfcG9ydF9uYW1lX3QgbV9wb3J0OwotICAgIG1hY2hfbXNnX3R5cGVfbmFtZV90
IG1fZGlzcG9zaXRpb247CisgICAgbWFjaF9wb3J0X25hbWVfdCBtX3BvcnQgeyAwIH07CisgICAg
bWFjaF9tc2dfdHlwZV9uYW1lX3QgbV9kaXNwb3NpdGlvbiB7IDAgfTsKICNlbGlmIE9TKFdJTkRP
V1MpCiAgICAgSEFORExFIG1faGFuZGxlIHsgSU5WQUxJRF9IQU5ETEVfVkFMVUUgfTsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnMuY3BwCmluZGV4IDZkMGMxMjlhNzQwNS4uMDQ4MTBiM2UxOWJlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCkBAIC00MCwx
MyArNDAsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgbmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzOwogICAgIGVuY29kZXIgPDwgdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7
CiAgICAgZW5jb2RlciA8PCBjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZTsKLSAgICBl
bmNvZGVyIDw8IHBlbmRpbmdDb29raWVzOwogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CiAgICAgZW5jb2RlciA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPDwgaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgZW5jb2RlciA8PCBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkBAIC04
MywxMiArNzksNiBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlYwogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5k
bGUgPSBXVEZNb3ZlKCpjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBP
cHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6Q29va2llPj4gcGVuZGluZ0Nvb2tpZXM7Ci0gICAgZGVj
b2RlciA+PiBwZW5kaW5nQ29va2llczsKLSAgICBpZiAoIXBlbmRpbmdDb29raWVzKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBX
VEZNb3ZlKCpwZW5kaW5nQ29va2llcyk7Ci0KICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
ICAgICBPcHRpb25hbDxTdHJpbmc+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKICAgICBkZWNv
ZGVyID4+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKQEAgLTEwMSwxNCArOTEsNiBAQCBPcHRp
b25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnM6OmRlY29kZShJUEM6OkRlYwogICAgIGlmICghaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHBhcmFtZXRl
cnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBpbmRleGVk
RGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+
IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlm
ICghaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VU
ZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFz
ZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAppbmRleCBmMjdkZjQ4OTgwOWYuLmUxYjIzMzcwMTk5
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycy5oCkBAIC01MSwxNSArNTEsMTEgQEAgc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzIHsKIAogICAgIFZlY3Rvcjx1aW50OF90PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRp
ZmllcjsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgY29va2llU3RvcmFnZVBhdGhFeHRl
bnNpb25IYW5kbGU7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXM7
CiAgICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMgbmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzOwogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgU3RyaW5nIGluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZVRlbXBCbG9i
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElIVFRQQ29va2llU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhU
VFBDb29raWVTdG9yZS5jcHAKaW5kZXggYmMwNzg2NmZiYzM5Li5mZjk1NTg5MmJkYTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3Bw
CkBAIC00Niw4ICs0Niw2IEBAIG5hbWVzcGFjZSBBUEkgewogSFRUUENvb2tpZVN0b3JlOjpIVFRQ
Q29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQog
ICAgIDogbV9vd25pbmdEYXRhU3RvcmUod2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBpZiAoIW1f
b3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkp
Ci0gICAgICAgIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAK
IEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCkBAIC01NSw4ICs1Myw2IEBAIEhU
VFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCiAgICAgQVNTRVJUKG1fb2JzZXJ2ZXJz
LmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5KTsK
ICAgICBBU1NFUlQoIW1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotCi0gICAgdW5yZWdp
c3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwogfQogCiB2b2lkIEhUVFBDb29r
aWVTdG9yZTo6ZmlsdGVyQXBwQm91bmRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29r
aWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29r
aWU+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtODEsMzMgKzc3LDE2IEBAIHZvaWQgSFRU
UENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4mIGNvb2tpCiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nl
c3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAg
ICAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gYWxsQ29va2llczsKLSAgICAgICAgaWYgKG1f
b3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKQotICAgICAgICAgICAgYWxsQ29va2llcyA9IGdldEFsbERlZmF1bHRVSVByb2Nl
c3NDb29raWVTdG9yZUNvb2tpZXMoKTsKLSAgICAgICAgYWxsQ29va2llcy5hcHBlbmRWZWN0b3Io
bV9vd25pbmdEYXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwotCi0gICAgICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBhbGxDb29raWVz
XSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2llcyhhbGxDb29r
aWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIH0pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1l
bnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+
Z2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHBvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFn
ZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7
CisgICAgY29va2llTWFuYWdlci5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRD
b29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0K
IAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKQotICAg
ICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLQotICAgIGF1dG8qIGNvb2tpZU1h
bmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Pigp
OwotICAgIGNvb2tpZU1hbmFnZXItPmdldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29y
ZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIg
PSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7Cisg
ICAgY29va2llTWFuYWdlci5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNvcmU6OkNv
b2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVz
KGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTEx
NSw3OCArOTQsMjkgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpV
UkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG8KIHZvaWQgSFRUUENvb2tpZVN0
b3JlOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgZmls
dGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
IChhdXRvJiYgYXBwQm91bmRDb29raWVzKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byogcG9vbCA9
IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25z
KCk7Ci0gICAgICAgIGlmICghcG9vbCkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBjb29raWUg
OiBhcHBCb3VuZENvb2tpZXMpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogcGVuZGluZ0Nv
b2tpZXMgdXNlZCBmb3IgZGVmYXVsdFNlc3Npb24gYmVjYXVzZSBzZXNzaW9uIGNvb2tpZXMgY2Fu
bm90IGJlIHByb3BhZ2F0ZWQgdG8gTmV0d29yayBQcm9jZXNzIHdpdGggdWlQcm9jZXNzQ29va2ll
U3RvcmFnZUlkZW50aWZpZXIuCi0gICAgICAgICAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpICYmICFj
b29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgICAgICAgICAgc2V0Q29va2llSW5EZWZhdWx0VUlQ
cm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5hZGRQZW5kaW5nQ29va2llKGNvb2tpZSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgY29va2llTWFuYWdlci0+c2V0
Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywg
W3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7Ci0gICAgICAgIH0pOworICAgICAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdE
YXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgICAgICBjb29r
aWVNYW5hZ2VyLnNldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBhcHBC
b3VuZENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAog
dm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUm
IGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAobV9v
d25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAgICAgZGVsZXRlQ29va2llRnJv
bURlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb29raWUpOwot
Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZShtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNv
b2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVN
YW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29raWUobV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293
bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwot
ICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAgZGVsZXRlQ29va2llc0luRGVmYXVsdFVJ
UHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVBbGxDb29raWVzKG1f
b3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9
IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAg
ICBjb29raWVNYW5hZ2VyLmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpKTsKICAgICAvLyBGSVhNRTogVGhlIENvbXBsZXRpb25IYW5kbGVyIHNob3VsZCBiZSBw
YXNzZWQgdG8gV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzLgogICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFdlYkNvcmU6
OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0
b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFw
b29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBo
ZW1lcmFsKCkpCi0gICAgICAgICAgICBzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5SW5EZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmUocG9saWN5KTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRp
c3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBwb2xpY3ksIFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKKyAgICBhdXRvJiBjb29r
aWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFu
YWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1c2hDb29raWVzKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIyNywyMSArMTU3LDcg
QEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2Vy
dmVyKQogCiAgICAgbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA9IG1ha2VVbmlxdWU8QVBJ
V2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI+KCp0aGlzKTsKIAotICAgIGF1dG8qIHBvb2wg
PSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9u
cygpOwotCi0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIEFTU0VSVCghbV9vYnNlcnZpbmdVSVBy
b2Nlc3NDb29raWVzKTsKLQotICAgICAgICAvLyBMaXN0ZW4gZm9yIGNvb2tpZSBub3RpZmljYXRp
b25zIGluIHRoZSBVSVByb2Nlc3MgaW4gdGhlIG1lYW50aW1lLgotICAgICAgICBzdGFydE9ic2Vy
dmluZ0NoYW5nZXNUb0RlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShbdGhpc10gKCkgewotICAg
ICAgICAgICAgY29va2llc0RpZENoYW5nZSgpOwotICAgICAgICB9KTsKLQotICAgICAgICBtX29i
c2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eSA9ICZtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5h
Z2VyKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZl
cihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9i
c2VydmVyKTsKIH0KIApAQCAtMjc2LDQ2ICsxOTIsMTAgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6
OmNvb2tpZXNEaWRDaGFuZ2UoKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJE
ZXN0cm95ZWQoKQogewogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnVucmVnaXN0
ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFn
ZXJQcm94eU9ic2VydmVyKTsKLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbnVs
bHB0cjsKLQotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xG
b3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gcG9vbC0+c3VwcGxl
bWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNv
b2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rl
ck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdl
clByb3h5T2JzZXJ2ZXIpOwogfQogCi12b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JO
ZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIEFTU0VSVCghbV9wcm9jZXNzUG9v
bENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlv
bkxpc3RlbmVySWRlbnRpZmllciA9IFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclByb2Nlc3NQb29s
Q3JlYXRpb25MaXN0ZW5lcihbdGhpc10oV2ViUHJvY2Vzc1Bvb2wmIG5ld1Byb2Nlc3NQb29sKSB7
Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPmlzQXNzb2NpYXRlZFByb2Nlc3NQb29s
KG5ld1Byb2Nlc3NQb29sKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBOb3cg
dGhhdCBhbiBhc3NvY2lhdGVkIHByb2Nlc3MgcG9vbCBleGlzdHMsIHdlIG5lZWQgdG8gZmx1c2gg
dGhlIFVJIHByb2Nlc3MgY29va2llIHN0b3JlCi0gICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBhbnkg
Y2hhbmdlcyBhcmUgcmVmbGVjdGVkIHdpdGhpbiB0aGUgbmV3IHByb2Nlc3MgcG9vbC4KLSAgICAg
ICAgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgbmV3UHJvY2Vz
c1Bvb2wuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQotICAgICAgICBpZiAobV9jb29raWVNYW5h
Z2VyUHJveHlPYnNlcnZlcikgewotICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQ
cm94eSA9IG5ld1Byb2Nlc3NQb29sLnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7Ci0gICAgICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdp
c3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFu
YWdlclByb3h5T2JzZXJ2ZXIpOwotICAgICAgICB9Ci0gICAgICAgIHVucmVnaXN0ZXJGb3JOZXdQ
cm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBIVFRQQ29va2ll
U3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAg
IGlmIChtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpCi0gICAgICAgIFdl
YlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKG1fcHJv
Y2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29s
Q3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSAwOwotfQotCiAjaWYgIVBMQVRGT1JNKENPQ09B
KQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
KCkgeyB9CiBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBIVFRQQ29va2llU3RvcmU6OmdldEFsbERl
ZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKSB7IHJldHVybiB7IH07IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAppbmRleCBk
NjIwYWRkYTRlN2YuLmEwNWY0MTQzMGRiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaApAQCAtODMsOSArODMsNiBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmKTsK
IAotICAgIHZvaWQgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAg
ICB2b2lkIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLQogICAg
IHZvaWQgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKICAgICBzdGF0aWMgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29v
a2llcygpOwogICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZUluRGVmYXVsdFVJUHJvY2Vzc0Nvb2tp
ZVN0b3JlKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLQ29udGV4dC5jcHAKaW5kZXggNThjNTQ1M2Y0ODk4Li4zN2JhYTY4ZjkyNGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcApAQCAtNDExLDEx
ICs0MTEsNiBAQCB2b2lkIFdLQ29udGV4dFByZWNvbm5lY3RUb1NlcnZlcihXS0NvbnRleHRSZWYs
IFdLVVJMUmVmKQogewogfQogCi1XS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2ll
TWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dFJlZikKLXsKLSAgICByZXR1cm4gV2ViS2l0Ojp0
b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKSk7Ci19Ci0KIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRl
eHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZikKIHsKICAgICByZXR1cm4gV0tXZWJz
aXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSgpOwpAQCAtNTI3LDEzICs1MjIsNiBAQCB2
b2lkIFdLQ29udGV4dFNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKFdL
Q29udGV4dFJlZiBjb250ZXh0UmVmLAogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5z
ZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChlbmFibGUpOwogfQogCi12
b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRl
c3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgYWxsb3dzKQotewotI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+c2V0QWxsb3dzQW55
U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogV0tE
aWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktp
dDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoKS5sZWFr
UmVmKCkpOwpAQCAtNTc1LDIxICs1NjMsMTEgQEAgdm9pZCBXS0NvbnRleHRTZXRGb250QWxsb3dM
aXN0KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS0FycmF5UmVmIGFycmF5UmVmKQogICAgIFdl
YktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRGb250QWxsb3dMaXN0KFdlYktpdDo6dG9JbXBs
KGFycmF5UmVmKSk7CiB9CiAKLXZvaWQgV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3Mo
V0tDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0KIHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2Vy
dmljZVdvcmtlcnMoV0tDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgV2ViS2l0Ojp0b0ltcGwo
Y29udGV4dCktPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKLVByb2Nlc3NJRCBXS0Nv
bnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYp
Ci17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5uZXR3b3JrUHJvY2Vz
c0lkZW50aWZpZXIoKTsKLX0KLQogdm9pZCBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4oV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5nUmVmIGRvbWFpblJlZiwgV0tTdHJpbmdSZWYg
bmFtZVJlZiwgV0tBcnJheVJlZiBtaW1lVHlwZXNSZWYsIFdLQXJyYXlSZWYgZXh0ZW5zaW9uc1Jl
ZikKIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKQEAgLTYxOSwxMiArNTk3LDEx
IEBAIHZvaWQgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYpCiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPmNs
ZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCk7CiB9CiAKLXZvaWQgV0tDb250ZXh0
U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dFJl
ZiwgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQordm9pZCBXS0NvbnRleHRT
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFdLQ29udGV4dFJlZiwgYm9vbCB1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRl
eHRSZWYpLT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MpOworICAgIFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyk7CiB9CiAKLXZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUoV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYsIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiB3ZWJzaXRlRGF0YVN0b3Jl
KQordm9pZCBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYs
IFdLV2Vic2l0ZURhdGFTdG9yZVJlZikKIHsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVm
KS0+c2V0UHJpbWFyeURhdGFTdG9yZSgqV2ViS2l0Ojp0b0ltcGwod2Vic2l0ZURhdGFTdG9yZSkp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaAppbmRleCAxZDhm
YWI4YTE0ODYuLjJhYjZlZjg2ZjUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tDb250ZXh0LmgKQEAgLTE2OCw3ICsxNjgsNiBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRT
dG9wTWVtb3J5U2FtcGxlcihXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tXZWJz
aXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVm
IGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVE
YXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKIAogV0tfRVhQT1JUIFdLQXBwbGljYXRpb25D
YWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0QXBwbGljYXRpb25DYWNoZU1hbmFnZXIoV0tDb250
ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dl
YnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKLVdLX0VYUE9SVCBXS0Nvb2tpZU1h
bmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkg
V0tfQ19BUElfREVQUkVDQVRFRDsKIFdLX0VYUE9SVCBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBX
S0NvbnRleHRHZXRHZW9sb2NhdGlvbk1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tf
RVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVmIFdLQ29udGV4dEdldEljb25EYXRhYmFzZShXS0NvbnRl
eHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIFdL
Q29udGV4dEdldEtleVZhbHVlU3RvcmFnZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdL
X0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXRE
ZWZhdWx0RGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dL
Q29udGV4dFByaXZhdGUuaAppbmRleCBhMDI1MDExZjcwY2MuLjQ4YTI5YzQ1NjhhYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaApAQCAt
ODMsMTEgKzgzLDggQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0V2FybUluaXRpYWxQcm9jZXNz
KFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIC8vIEF0IHNvbWUgcG9pbnQgaXQgc2hvdWxkIGJlIHJl
bW92ZWQuCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nlc3MoV0tD
b250ZXh0UmVmLCBib29sKTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlTmV0
d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFRlcm1p
bmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29udGV4dFJlZik7CiAKLVdLX0VYUE9SVCB2b2lkIFdLQ29u
dGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tD
b250ZXh0UmVmLCBib29sKTsKLQogdHlwZWRlZiB2b2lkICgqV0tDb250ZXh0SW52YWxpZE1lc3Nh
Z2VGdW5jdGlvbikoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUpOwogV0tfRVhQT1JUIHZvaWQgV0tD
b250ZXh0U2V0SW52YWxpZE1lc3NhZ2VGdW5jdGlvbihXS0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1
bmN0aW9uIGludmFsaWRNZXNzYWdlRnVuY3Rpb24pOwogICAgIApAQCAtOTcsOCArOTQsNiBAQCBX
S19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRGb250QWxsb3dMaXN0KFdLQ29udGV4dFJlZiwgV0tB
cnJheVJlZik7CiAKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFByZWNvbm5lY3RUb1NlcnZlcihX
S0NvbnRleHRSZWYgY29udGV4dCwgV0tVUkxSZWYgc2VydmVyVVJMKSBXS19DX0FQSV9ERVBSRUNB
VEVEOwogCi1XS19FWFBPUlQgV0tQcm9jZXNzSUQgV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJ
ZGVudGlmaWVyKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKLQogV0tfRVhQT1JUIHZvaWQgV0tDb250
ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1N0cmluZ1JlZiBk
b21haW4sIFdLU3RyaW5nUmVmIG5hbWUsIFdLQXJyYXlSZWYgbWltZVR5cGVzLCBXS0FycmF5UmVm
IGV4dGVuc2lvbnMpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0Q2xlYXJTdXBwb3J0ZWRQbHVn
aW5zKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLUGFnZS5jcHAKaW5kZXggNjQ4ZjMwMDk2MWE1Li5iNDQ3MzQyMTIwMDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcApAQCAtMzk4LDYgKzM5OCwxMSBAQCB1aW50
NjRfdCBXS1BhZ2VHZXRSZW5kZXJUcmVlU2l6ZShXS1BhZ2VSZWYgcGFnZSkKICAgICByZXR1cm4g
dG9JbXBsKHBhZ2UpLT5yZW5kZXJUcmVlU2l6ZSgpOwogfQogCitXS1dlYnNpdGVEYXRhU3RvcmVS
ZWYgV0tQYWdlR2V0V2Vic2l0ZURhdGFTdG9yZShXS1BhZ2VSZWYgcGFnZSkKK3sKKyAgICByZXR1
cm4gdG9BUEkoJnRvSW1wbChwYWdlKS0+d2Vic2l0ZURhdGFTdG9yZSgpKTsKK30KKwogV0tJbnNw
ZWN0b3JSZWYgV0tQYWdlR2V0SW5zcGVjdG9yKFdLUGFnZVJlZiBwYWdlUmVmKQogewogICAgIHJl
dHVybiB0b0FQSSh0b0ltcGwocGFnZVJlZiktPmluc3BlY3RvcigpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tQYWdlLmgKaW5kZXggNjcwYjVlOWZkNGI0Li5jNTFiODE2MmM4OTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCkBAIC0xMTgsNiArMTE4LDggQEAg
V0tfRVhQT1JUIGRvdWJsZSBXS1BhZ2VHZXRFc3RpbWF0ZWRQcm9ncmVzcyhXS1BhZ2VSZWYgcGFn
ZSk7CiAKIFdLX0VYUE9SVCB1aW50NjRfdCBXS1BhZ2VHZXRSZW5kZXJUcmVlU2l6ZShXS1BhZ2VS
ZWYgcGFnZSk7CiAKK1dLX0VYUE9SVCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tQYWdlR2V0V2Vi
c2l0ZURhdGFTdG9yZShXS1BhZ2VSZWYgcGFnZSk7CisKIFdLX0VYUE9SVCBXS0luc3BlY3RvclJl
ZiBXS1BhZ2VHZXRJbnNwZWN0b3IoV0tQYWdlUmVmIHBhZ2UpOwogCiBXS19FWFBPUlQgV0tTdHJp
bmdSZWYgV0tQYWdlQ29weVVzZXJBZ2VudChXS1BhZ2VSZWYgcGFnZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcApp
bmRleCA5ZGRhNTkxYzk1MTguLjY4NjExNGFhNWVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQSUhUVFBDb29r
aWVTdG9yZS5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJT
aG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNp
bmNsdWRlICJXS0RpY3Rpb25hcnkuaCIKQEAgLTY5LDYgKzcwLDE2IEBAIFdLV2Vic2l0ZURhdGFT
dG9yZVJlZiBXS1dlYnNpdGVEYXRhU3RvcmVDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihXS1dlYnNp
dGVEYXRhU3RvCiAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6Y3JlYXRlKCpXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKSwgc2Vzc2lvbklEKS5s
ZWFrUmVmKCkpOwogfQogCit2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpCit7CisgICAgV2ViS2l0Ojp0
b0ltcGwoZGF0YVN0b3JlKS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKK30KKworV0tQcm9j
ZXNzSUQgV0tXZWJzaXRlRGF0YVN0b3JlR2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpCit7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBs
KGRhdGFTdG9yZSktPm5ldHdvcmtQcm9jZXNzKCkucHJvY2Vzc0lkZW50aWZpZXIoKTsKK30KKwog
dm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVSZW1vdmVJVFBEYXRhRm9yRG9tYWluKFdLV2Vic2l0ZURh
dGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIFdLU3RyaW5nUmVmIGhvc3QsIHZvaWQqIGNvbnRleHQs
IFdLV2Vic2l0ZURhdGFTdG9yZVJlbW92ZUlUUERhdGFGb3JEb21haW5GdW5jdGlvbiBjYWxsYmFj
aykKIHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAppbmRl
eCBlNzdkMDljMTA3ZDEuLmFiMjY3NzQ2YmU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKQEAgLTI5LDYgKzI5LDEz
IEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLQmFzZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS0RlcHJl
Y2F0ZWQuaD4KIAorI2lmIGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyKQordHlwZWRl
ZiBpbnQgV0tQcm9jZXNzSUQ7CisjZWxzZQorI2luY2x1ZGUgPHVuaXN0ZC5oPgordHlwZWRlZiBw
aWRfdCBXS1Byb2Nlc3NJRDsKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAi
QyIgewogI2VuZGlmCkBAIC01MCw2ICs1NywxMSBAQCBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVE
YXRhU3RvcmVTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldFRlc3RpbmcoVwog
CiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxz
KFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogCitXS19FWFBPUlQgdm9pZCBX
S1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9y
ZVJlZiBkYXRhU3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWlu
YXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSk7CisKK1dL
X0VYUE9SVCBXS1Byb2Nlc3NJRCBXS1dlYnNpdGVEYXRhU3RvcmVHZXROZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXIoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSk7CisKIFdLX0VYUE9SVCBi
b29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKFdL
V2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJz
aXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJzaXRlRGF0
YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUpOwogdHlwZWRlZiB2b2lkICgqV0tX
ZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0VwaGVtZXJhbEZ1bmN0aW9uKShib29sIGlzRXBoZW1l
cmFsLCB2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQppbmRleCBmZjMwOTQ5ODZjMjQuLjFmNTZm
YmZiNjc5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
UHJvY2Vzc1Bvb2wubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
UHJvY2Vzc1Bvb2wubW0KQEAgLTQwNiwyOCArNDA2LDYgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAq
cG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFw
PFMKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyU3VwcG9ydGVkUGx1Z2lucygpOwogfQogCi0tICh2
b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcwotewotICAgIF9wcm9jZXNzUG9vbC0+dGVybWlu
YXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0KLQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2ls
bFN1c3BlbmRJbW1pbmVudGx5Ci17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nl
c3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7Ci19Ci0KLS0gKHZvaWQpX3NlbmRO
ZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhh
bmRsZXIKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1
c3BlbmRGb3JUZXN0aW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0
aW9uSGFuZGxlcildIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKLX0K
LQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lCi17Ci0gICAgX3Byb2Nlc3NQ
b29sLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQogLSAodm9pZClfdGVybWlu
YXRlU2VydmljZVdvcmtlcnMKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0ZVNlcnZpY2VX
b3JrZXJzKCk7CkBAIC00MzUsMTIgKzQxMyw3IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGlj
aWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAK
IC0gKHZvaWQpX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6KEJPT0wpdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcwogewotICAgIF9wcm9jZXNzUG9vbC0+c2V0VXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KTsKLX0KLQotLSAocGlkX3QpX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcgotewotICAgIHJldHVy
biBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpOworICAgIFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiB9CiAKIC0gKHBpZF90KV9wcmV3YXJtZWRQcm9j
ZXNzSWRlbnRpZmllcgpAQCAtNDY3LDExICs0NDAsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpw
b2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8
UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFp
bEZvclRlc3RpbmcodHJ1ZSk7CiB9CiAKLS0gKHZvaWQpX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZwotewotICAgIF9wcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5l
eHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKHRydWUpOwotfQotCiAtIChCT09M
KV9oYXNQcmV3YXJtZWRXZWJQcm9jZXNzCiB7CiAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogX3By
b2Nlc3NQb29sLT5wcm9jZXNzZXMoKSkgewpAQCAtNTYwLDE4ICs1MjgsNiBAQCBzdGF0aWMgTlNE
aWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJp
bmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0Q29va2llU3RvcmFnZVBhcnRpdGlv
bmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLS0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tn
cm91bmQ6KEJPT0wpYmFja2dyb3VuZAotewotICAgIF9wcm9jZXNzUG9vbC0+c3ludGhlc2l6ZUFw
cElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKLX0KLQotLSAodm9pZClfc2V0QWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFsbG93cwotewotI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKLSAgICBfcHJvY2Vzc1Bvb2wtPnNldEFsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlmCi19Ci0KICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQogLSAoaWQgPF9XS0dlb2xvY2F0aW9uQ29yZUxvY2F0aW9uUHJvdmlkZXI+KV9j
b3JlTG9jYXRpb25Qcm92aWRlcgogewpAQCAtNjA0LDExICs1NjAsNiBAQCBzdGF0aWMgTlNEaWN0
aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcs
IEhhc2hNYXA8UwogICAgIH0pOwogfQogCi0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0
bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAotewotICAgIHJldHVybiBf
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGVudGl0
bGVtZW50KTsKLX0KLQogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclByb3Rl
Y3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UKIHsKICAg
ICBfcHJvY2Vzc1Bvb2wtPmNsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9uU3Bh
Y2UoV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rpb25TcGFjZSkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRl
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZh
dGUuaAppbmRleCA2NzY5MDE1ZTA4NTUuLjNiOTMxNDA0YThlMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgK
QEAgLTg3LDE0ICs4Nyw5IEBACiAtIChfV0tEb3dubG9hZCAqKV9yZXN1bWVEb3dubG9hZEZyb21E
YXRhOihOU0RhdGEgKilyZXN1bWVEYXRhIHdlYnNpdGVEYXRhU3RvcmU6KFdLV2Vic2l0ZURhdGFT
dG9yZSAqKWRhdGFTdG9yZSAgcGF0aDooTlNTdHJpbmcgKilwYXRoIG9yaWdpbmF0aW5nV2ViVmll
dzooV0tXZWJWaWV3ICopd2ViVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOwogCiAvLyBUZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgb25s
eSB3aGlsZSBubyB3ZWIgY29udGVudCBwcm9jZXNzZXMgYXJlIHJ1bm5pbmcuCi0tICh2b2lkKV90
ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9z
KDEzLjApKTsKLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZv
aWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19N
QUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dp
bGxTdXNwZW5kSW1taW5lbnRseSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEz
LjApKTsKLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIC0gKHZvaWQpX3Rlcm1pbmF0ZVNlcnZpY2VX
b3JrZXJzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogCiAvLyBU
ZXN0IG9ubHkuCi0tIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTMpLCBpb3MoMTEuMCkpOwogLSAocGlkX3QpX3ByZXdhcm1lZFByb2Nl
c3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwog
CiAvLyBUZXN0IG9ubHkuCkBAIC0xMDYsNyArMTAxLDYgQEAKIC0gKHNpemVfdClfc2VydmljZVdv
cmtlclByb2Nlc3NDb3VudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSwgaW9zKDEyLjAp
KTsKIC0gKHZvaWQpX3N5bmNOZXR3b3JrUHJvY2Vzc0Nvb2tpZXMgV0tfQVBJX0RFUFJFQ0FURURf
V0lUSF9SRVBMQUNFTUVOVCgiV0tIVFRQQ29va2llU3RvcmUuX2ZsdXNoQ29va2llc1RvRGlza1dp
dGhDb21wbGV0aW9uSGFuZGxlcjoiLCBtYWNvcygxMC4xMywgV0tfTUFDX1RCQSksIGlvcygxMS4w
LCBXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9tYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9y
VGVzdGluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSwgaW9zKDEyLjApKTsKLS0gKHZv
aWQpX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjE0KSwgaW9zKDEyLjApKTsKIC0gKE5TVUludGVnZXIpX21heGltdW1T
dXNwZW5kZWRQYWdlQ291bnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEy
LjIpKTsKIC0gKE5TVUludGVnZXIpX3Byb2Nlc3NDYWNoZUNhcGFjaXR5IFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CiAtIChOU1VJbnRlZ2VyKV9wcm9jZXNzQ2Fj
aGVTaXplIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwpAQCAtMTIy
LDEzICsxMTYsMTAgQEAKIC0gKHZvaWQpX3ByZWNvbm5lY3RUb1NlcnZlcjooTlNVUkwgKilzZXJ2
ZXJVUkwgV0tfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVCgiV0tXZWJWaWV3Ll9wcmVj
b25uZWN0VG9TZXJ2ZXIiLCBtYWNvcygxMC4xMy40LCBXS19NQUNfVEJBKSwgaW9zKDExLjMsIFdL
X0lPU19UQkEpKTsKIAogLy8gVGVzdCBvbmx5LgotLSAodm9pZClfc2V0QWxsb3dzQW55U1NMQ2Vy
dGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFsbG93cyBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjEzLjQpLCBpb3MoMTEuMykpOwogLSAodm9pZClfZ2V0QWN0aXZlUGFnZXNPcmlnaW5z
SW5XZWJQcm9jZXNzRm9yVGVzdGluZzoocGlkX3QpcGlkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
KF4pKE5TQXJyYXk8TlNTdHJpbmcgKj4gKikpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKLS0gKEJPT0wpX25ldHdvcmtQcm9jZXNz
SGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CiAtICh2b2lkKV9jbGVhclBlcm1h
bmVudENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNwYWNlOihOU1VSTFByb3RlY3Rpb25TcGFjZSAq
KXByb3RlY3Rpb25TcGFjZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjAp
KTsKIAogQHByb3BlcnR5IChub25hdG9taWMsIGdldHRlcj1faXNDb29raWVTdG9yYWdlUGFydGl0
aW9uaW5nRW5hYmxlZCwgc2V0dGVyPV9zZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxl
ZDopIEJPT0wgX2Nvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkIFdLX0FQSV9ERVBSRUNB
VEVEKCJQYXJ0aXRpb25lZCBjb29raWVzIGFyZSBubyBsb25nZXIgc3VwcG9ydGVkIiwgbWFjb3Mo
MTAuMTIuMywgMTAuMTQuNCksIGlvcygxMC4zLCAxMi4yKSk7Ci0tICh2b2lkKV9zeW50aGVzaXpl
QXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygx
MC4xNSksIGlvcygxMy4wKSk7CiAKIC8vIFRlc3Qgb25seS4KIC0gKHZvaWQpX3NlZWRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRm9yVGVzdGluZ1dpdGhGaXJzdFBhcnR5OihOU1VSTCAqKWZpcnN0UGFy
dHlVUkwgdGhpcmRQYXJ0eTooTlNVUkwgKil0aGlyZFBhcnR5VVJMIHNob3VsZFNjaGVkdWxlTm90
aWZpY2F0aW9uOihCT09MKXNob3VsZFNjaGVkdWxlTm90aWZpY2F0aW9uIGNvbXBsZXRpb25IYW5k
bGVyOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyICBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KaW5kZXggMjk4
ZDljZWM5ZTg0Li44MGQzMzBmMjkyNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQpAQCAtNjE3LDYgKzYxNywx
MSBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURh
dGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogICAgIH0pOwogfQogCistIChCT09MKV9uZXR3
b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVu
dAoreworICAgIHJldHVybiBfd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3RpbmcoZW50aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0ZURh
dGFTdG9yZURlbGVnYXRlPilfZGVsZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdldCgp
LmdldCgpOwpAQCAtNjY4LDQgKzY3Myw0MiBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0
ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogI2Vu
ZGlmCiB9CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCit7CisgICAgX3dlYnNp
dGVEYXRhU3RvcmUtPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Cit9CisKKy0gKHZvaWQpX3Nl
bmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlv
bkhhbmRsZXIKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzUHJl
cGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRy
KGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAg
IH0pOworfQorCistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHkKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworCit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJv
Y2Vzc0RpZFJlc3VtZQoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nl
c3NEaWRSZXN1bWUoKTsKK30KKworLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDoo
Qk9PTCliYWNrZ3JvdW5kCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNz
KCkuc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKK30KKworLSAocGlkX3Qp
X25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcgoreworICAgIHJldHVybiBfd2Vic2l0ZURhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3MoKS5wcm9jZXNzSWRlbnRpZmllcigpOworfQorCisrICh2b2lkKV9t
YWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcKK3sKKyAgICBXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6Om1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZygpOworfQorCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAppbmRleCA5OTMyMDEw
NDZiNTUuLmE4NTZiZTZmNThiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCkBAIC04NSw5
ICs4NSwxOSBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0ZURhdGFT
dG9yZUZldGNoT3B0aW9ucykgewogCiAtICh2b2lkKV9yZW5hbWVPcmlnaW46KE5TVVJMICopb2xk
TmFtZSB0bzooTlNVUkwgKiluZXdOYW1lIGZvckRhdGFPZlR5cGVzOihOU1NldDxOU1N0cmluZyAq
PiAqKWRhdGFUeXBlcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlv
bkhhbmRsZXI7CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0
aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21p
Yywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2RlbGVnYXRlIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqX2Nv
bmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9z
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRp
b25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0g
KHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1hY29z
KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc3ludGhlc2l6ZUFwcElz
QmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CisrICh2b2lkKV9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwogQGVu
ZAogCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKaW5kZXggMWVlNzNlYmMw
ZWEwLi5mNWJhNDNjZTE0MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlci5oIgogCisj
aW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIlNvdXBDb29raWVQZXJz
aXN0ZW50U3RvcmFnZVR5cGUuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIK
ICNpbmNsdWRlICJXZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIgpAQCAtNTYsNiArNTcsMTIg
QEAgZW51bSB7CiB9OwogCiBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKKyAg
ICBXZWJDb29raWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGRhdGFNYW5hZ2VyKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdFdlYnNpdGVE
YXRhTWFuYWdlckdldERhdGFTdG9yZShkYXRhTWFuYWdlcikubmV0d29ya1Byb2Nlc3MoKS5jb29r
aWVNYW5hZ2VyKCk7CisgICAgfQorCiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29u
c3QKICAgICB7CiAgICAgICAgIEFTU0VSVChkYXRhTWFuYWdlcik7CkBAIC02NCw4ICs3MSw3IEBA
IHN0cnVjdCBfV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29r
aWVNYW5hZ2VyUHJpdmF0ZSgpCiAgICAgewotICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkK
LSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7Cisg
ICAgICAgIGNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25J
RCgpLCBudWxscHRyKTsKICAgICB9CiAKICAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRh
dGFNYW5hZ2VyOwpAQCAtMTM5LDExICsxNDUsOSBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJr
aXRDb29raWVNYW5hZ2VyQ3JlYXRlKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbgog
ewogICAgIFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFH
RVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAg
ICAgbWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xz
KG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3Vw
cGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJh
Y2sobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBn
X3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsK
LSAgICB9CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2Vy
dmVyQ2FsbGJhY2sobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAg
ICAgIGdfc2lnbmFsX2VtaXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7
CiAgICAgcmV0dXJuIG1hbmFnZXI7CiB9CiAKQEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFn
ZXIqIG1hbmFnZXIsCiAgICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFN
YW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRD
b29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5h
bWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIG1h
bmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShz
ZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0
ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE5Miw4ICsxOTUsNyBAQCB2
b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVN
YW5hZ2VyKiBtYW5hZ2VyLCBXZWJLaQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wg
OiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+
ZGF0YU1hbmFnZXIpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVN
YW5hZ2VyUHJveHk+KCktPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7
CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGlj
eShwb2xpY3kpLCBbXSgpIHsgfSk7CiB9CiAKIC8qKgpAQCAtMjE2LDE1ICsyMTgsNyBAQCB2b2lk
IHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5h
Z2VyKiBtYW5hZ2VyLCBHQ2FuYwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJ
RV9NQU5BR0VSKG1hbmFnZXIpKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdS
ZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7
Ci0KLSAgICAvLyBUaGUgcG9saWN5IGlzIHRoZSBzYW1lIGluIGFsbCBwcm9jZXNzIHBvb2xzIGhh
dmluZyB0aGUgc2FtZSBzZXNzaW9uIElELCBzbyBqdXN0IGFzayBhbnkuCi0gICAgY29uc3QgYXV0
byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xz
KG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1w
dHkoKSkgewotICAgICAgICBnX3Rhc2tfcmV0dXJuX2ludCh0YXNrLmdldCgpLCBXRUJLSVRfQ09P
S0lFX1BPTElDWV9BQ0NFUFRfTk9fVEhJUkRfUEFSVFkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQo
KSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5
IHBvbGljeSkgeworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1v
dmUodGFzayldKFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CiAgICAg
ICAgIGdfdGFza19yZXR1cm5faW50KHRhc2suZ2V0KCksIHRvV2ViS2l0Q29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSkpOwogICAgIH0pOwogfQpAQCAtMjY5LDExICsyNjMsNyBAQCB2b2lkIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIs
IFNvdXBDb29raWUqCiAgICAgZ19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAgICAgR1JlZlB0
cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxl
LCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRl
biBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAg
ICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUg
Zmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFu
YWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQ
cm94eT4oKS0+c2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgeyBXZWJDb3Jl
OjpDb29raWUoY29va2llKSB9LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIG1hbmFn
ZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Np
b25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNr
KV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsK
ICAgICB9KTsKIH0KQEAgLTMyMCwxMSArMzEwLDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFn
ZXJfZ2V0X2Nvb2tpZXMoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgY29uc3QgZ2NoYXIK
ICAgICBnX3JldHVybl9pZl9mYWlsKHVyaSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0g
YWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2Vy
RGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNh
bWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9j
ZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBv
b2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9j
ZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29r
aWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVU
RjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNv
b2tpZT4mIGNvb2tpZXMpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuZ2V0
Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZy
b21VVEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpDb29raWU+JiBjb29raWVzKSB7CiAgICAgICAgIEdMaXN0KiBjb29raWVzTGlzdCA9IG51bGxw
dHI7CiAgICAgICAgIGZvciAoYXV0byYgY29va2llIDogY29va2llcykKICAgICAgICAgICAgIGNv
b2tpZXNMaXN0ID0gZ19saXN0X3ByZXBlbmQoY29va2llc0xpc3QsIGNvb2tpZS50b1NvdXBDb29r
aWUoKSk7CkBAIC0zNzgsMTEgKzM2NCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2Rl
bGV0ZV9jb29raWUoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpCiAgICAg
Z19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFk
b3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRh
dGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1l
IFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2Vz
cyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29s
LgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vz
c1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+ZGVsZXRlQ29v
a2llKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBXZWJDb3JlOjpDb29raWUoY29va2llKSwg
W3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5h
Z2VyKCkuZGVsZXRlQ29va2llKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBXZWJDb3JlOjpD
b29raWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNr
X3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcApp
bmRleCA3MTY2N2NmNDczMmEuLjM2ZDAwMDhiYTIxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKQEAgLTQwMiw3ICs0
MDIsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoR09iamVjdCog
b2JqZWN0KQogICAgICAgICBwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIgPSBhZG9wdEdSZWYod2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldygibG9jYWwtc3RvcmFnZS1kaXJlY3RvcnkiLCBw
cml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkuZGF0YSgpLCBudWxscHRyKSk7CiAKICAgICBwcml2
LT5wcm9jZXNzUG9vbCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlvbik7Ci0g
ICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFByaW1hcnlEYXRhU3RvcmUod2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkpOwog
ICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRVc2VyTWVzc2FnZUhhbmRsZXIoW3dlYkNvbnRleHRd
KFVzZXJNZXNzYWdlJiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyTWVzc2Fn
ZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgewogICAgICAgICAvLyBTaW5rIHRoZSBmbG9hdGlu
ZyByZWYuCiAgICAgICAgIEdSZWZQdHI8V2ViS2l0VXNlck1lc3NhZ2U+IHVzZXJNZXNzYWdlID0g
d2Via2l0VXNlck1lc3NhZ2VDcmVhdGUoV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwpAQCAtNDEwLDggKzQwOSw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNv
bnRleHRDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIGdfc2lnbmFsX2VtaXQo
d2ViQ29udGV4dCwgc2lnbmFsc1tVU0VSX01FU1NBR0VfUkVDRUlWRURdLCAwLCB1c2VyTWVzc2Fn
ZS5nZXQoKSwgJnJldHVyblZhbHVlKTsKICAgICB9KTsKIAotICAgIHdlYmtpdFdlYnNpdGVEYXRh
TWFuYWdlckFkZFByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwgKnBy
aXYtPnByb2Nlc3NQb29sKTsKLQogICAgIHByaXYtPnByb2Nlc3NNb2RlbCA9IFdFQktJVF9QUk9D
RVNTX01PREVMX01VTFRJUExFX1NFQ09OREFSWV9QUk9DRVNTRVM7CiAKICNpZiBFTkFCTEUoTUVN
T1JZX1NBTVBMRVIpCkBAIC00MzksMTEgKzQzNiw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNv
bnRleHREaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wt
PnNldERvd25sb2FkQ2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSk7
CiAgICAgfQogCi0gICAgaWYgKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlcikgewotICAgICAgICB3
ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJSZW1vdmVQcm9jZXNzUG9vbChwcml2LT53ZWJzaXRlRGF0
YU1hbmFnZXIuZ2V0KCksICpwcml2LT5wcm9jZXNzUG9vbCk7Ci0gICAgICAgIHByaXYtPndlYnNp
dGVEYXRhTWFuYWdlciA9IG51bGxwdHI7Ci0gICAgfQotCiAgICAgaWYgKHByaXYtPmZhdmljb25E
YXRhYmFzZSkgewogICAgICAgICB3ZWJraXRGYXZpY29uRGF0YWJhc2VDbG9zZShwcml2LT5mYXZp
Y29uRGF0YWJhc2UuZ2V0KCkpOwogICAgICAgICBwcml2LT5mYXZpY29uRGF0YWJhc2UgPSBudWxs
cHRyOwpAQCAtMTU4MSw4ICsxNTczLDggQEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfcHJlZmV0
Y2hfZG5zKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGhvc3QKICAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSk7CiAgICAgZ19y
ZXR1cm5faWZfZmFpbChob3N0bmFtZSk7CiAKLSAgICBpZiAoY29udGV4dC0+cHJpdi0+ZG5zUHJl
ZmV0Y2hlZEhvc3RzLmFkZChob3N0bmFtZSkuaXNOZXdFbnRyeSkKLSAgICAgICAgY29udGV4dC0+
cHJpdi0+cHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5nOjpmcm9tVVRGOChob3N0bmFtZSkpKTsKKyAg
ICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0
YVN0b3JlKGNvbnRleHQtPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSk7CisgICAgd2Vi
c2l0ZURhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpQcmVmZXRjaEROUyhTdHJpbmc6OmZyb21VVEY4KGhvc3RuYW1lKSksIDApOwogICAgIGNv
bnRleHQtPnByaXYtPmRuc1ByZWZldGNoSHlzdGVyZXJpcy5pbXB1bHNlKCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAKaW5k
ZXggNDEzNWMyNjU0Mjg3Li5kOGIzZjNjMTk5OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCkBAIC03NTksNyArNzU5LDYgQEAg
c3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAg
ICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF90bHNfZXJyb3JzX3BvbGljeShw
cml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCksIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9nZXRfdGxzX2Vycm9yc19wb2xpY3koY29udGV4dERhdGFNYW5hZ2VyKSk7CiAgICAgICAgIGF1
dG8gcHJveHlTZXR0aW5ncyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShj
b250ZXh0RGF0YU1hbmFnZXIpLm5ldHdvcmtQcm94eVNldHRpbmdzKCk7CiAgICAgICAgIHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIu
Z2V0KCkpLnNldE5ldHdvcmtQcm94eVNldHRpbmdzKFdURk1vdmUocHJveHlTZXR0aW5ncykpOwot
ICAgICAgICB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJBZGRQcm9jZXNzUG9vbChwcml2LT53ZWJz
aXRlRGF0YU1hbmFnZXIuZ2V0KCksIHdlYmtpdFdlYkNvbnRleHRHZXRQcm9jZXNzUG9vbChwcml2
LT5jb250ZXh0LmdldCgpKSk7CiAgICAgfQogCiAgICAgaWYgKCFwcml2LT53ZWJzaXRlUG9saWNp
ZXMpCkBAIC05NDUsMTEgKzk0NCw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdEaXNwb3Nl
KEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgd2Via2l0V2ViQ29udGV4dFdlYlZpZXdEZXN0cm95
ZWQod2ViVmlldy0+cHJpdi0+Y29udGV4dC5nZXQoKSwgd2ViVmlldyk7CiAgICAgfQogCi0gICAg
aWYgKHdlYlZpZXctPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlcikgewotICAgICAgICB3ZWJraXRX
ZWJzaXRlRGF0YU1hbmFnZXJSZW1vdmVQcm9jZXNzUG9vbCh3ZWJWaWV3LT5wcml2LT53ZWJzaXRl
RGF0YU1hbmFnZXIuZ2V0KCksIHdlYmtpdFdlYkNvbnRleHRHZXRQcm9jZXNzUG9vbCh3ZWJWaWV3
LT5wcml2LT5jb250ZXh0LmdldCgpKSk7Ci0gICAgICAgIHdlYlZpZXctPnByaXYtPndlYnNpdGVE
YXRhTWFuYWdlciA9IG51bGxwdHI7Ci0gICAgfQotCiAgICAgaWYgKHdlYlZpZXctPnByaXYtPmN1
cnJlbnRTY3JpcHREaWFsb2cpIHsKICAgICAgICAgd2Via2l0X3NjcmlwdF9kaWFsb2dfY2xvc2Uo
d2ViVmlldy0+cHJpdi0+Y3VycmVudFNjcmlwdERpYWxvZyk7CiAgICAgICAgIEFTU0VSVCghd2Vi
Vmlldy0+cHJpdi0+Y3VycmVudFNjcmlwdERpYWxvZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNw
cAppbmRleCBkYTlhM2FhZGI4NDkuLjRjNGVmNWQ2OGFjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIuY3BwCkBAIC05NSwxMSArOTUsNiBAQCBlbnVtIHsKIH07CiAKIHN0cnVjdCBfV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZSB7Ci0gICAgfl9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQ
cml2YXRlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChwcm9jZXNzUG9vbHMuaXNFbXB0eSgpKTsK
LSAgICB9Ci0KICAgICBSZWZQdHI8V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlPiB3ZWJzaXRlRGF0
YVN0b3JlOwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gYmFzZURhdGFEaXJlY3Rvcnk7CiAgICAgR1Vu
aXF1ZVB0cjxjaGFyPiBiYXNlQ2FjaGVEaXJlY3Rvcnk7CkBAIC0xMTUsNyArMTEwLDYgQEAgc3Ry
dWN0IF9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlIHsKICAgICBXZWJLaXRUTFNFcnJv
cnNQb2xpY3kgdGxzRXJyb3JzUG9saWN5OwogCiAgICAgR1JlZlB0cjxXZWJLaXRDb29raWVNYW5h
Z2VyPiBjb29raWVNYW5hZ2VyOwotICAgIFZlY3RvcjxXZWJQcm9jZXNzUG9vbCo+IHByb2Nlc3NQ
b29sczsKIH07CiAKIFdFQktJVF9ERUZJTkVfVFlQRShXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIs
IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlciwgR19UWVBFX09CSkVDVCkKQEAgLTQ5NCwzMCAr
NDg4LDEzIEBAIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyR2V0RGF0YVN0b3JlKFdlYktpdFdlYnNpdGVEYXRhCiAgICAgICAgICAgICBjb25maWd1cmF0
aW9uLT5zZXRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnN0
cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocHJpdi0+c3dSZWdpc3RyYXRpb25zRGly
ZWN0b3J5LmdldCgpKSk7CiAgICAgICAgIGlmIChwcml2LT5kb21DYWNoZURpcmVjdG9yeSkKICAg
ICAgICAgICAgIGNvbmZpZ3VyYXRpb24tPnNldENhY2hlU3RvcmFnZURpcmVjdG9yeShGaWxlU3lz
dGVtOjpzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHByaXYtPmRvbUNhY2hlRGly
ZWN0b3J5LmdldCgpKSk7Ci0gICAgICAgIHByaXYtPndlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZShXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pLCBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKKyAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFT
dG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlKFdURk1vdmUoY29uZmlndXJh
dGlvbiksIFBBTDo6U2Vzc2lvbklEOjpnZW5lcmF0ZVBlcnNpc3RlbnRTZXNzaW9uSUQoKSk7CiAg
ICAgICAgIHByaXYtPndlYnNpdGVEYXRhU3RvcmUtPnNldElnbm9yZVRMU0Vycm9ycyhwcml2LT50
bHNFcnJvcnNQb2xpY3kgPT0gV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0lHTk9SRSk7CiAgICAg
fQogCiAgICAgcmV0dXJuICpwcml2LT53ZWJzaXRlRGF0YVN0b3JlOwogfQogCi12b2lkIHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlckFkZFByb2Nlc3NQb29sKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdl
ciogbWFuYWdlciwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotewotICAgIEFTU0VSVCgh
bWFuYWdlci0+cHJpdi0+cHJvY2Vzc1Bvb2xzLmNvbnRhaW5zKCZwcm9jZXNzUG9vbCkpOwotICAg
IG1hbmFnZXItPnByaXYtPnByb2Nlc3NQb29scy5hcHBlbmQoJnByb2Nlc3NQb29sKTsKLX0KLQot
dm9pZCB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJSZW1vdmVQcm9jZXNzUG9vbChXZWJLaXRXZWJz
aXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLXsK
LSAgICBBU1NFUlQobWFuYWdlci0+cHJpdi0+cHJvY2Vzc1Bvb2xzLmNvbnRhaW5zKCZwcm9jZXNz
UG9vbCkpOwotICAgIG1hbmFnZXItPnByaXYtPnByb2Nlc3NQb29scy5yZW1vdmVGaXJzdCgmcHJv
Y2Vzc1Bvb2wpOwotfQotCi1jb25zdCBWZWN0b3I8V2ViUHJvY2Vzc1Bvb2wqPiYgd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciog
bWFuYWdlcikKLXsKLSAgICByZXR1cm4gbWFuYWdlci0+cHJpdi0+cHJvY2Vzc1Bvb2xzOwotfQot
CiAvKioKICAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXc6CiAgKiBAZmlyc3Rfb3B0
aW9uX25hbWU6IG5hbWUgb2YgdGhlIGZpcnN0IG9wdGlvbiB0byBzZXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVE
YXRhTWFuYWdlclByaXZhdGUuaAppbmRleCAyYTU4OWUyN2YxZmUuLmZjOWU4MjI2ZmJiOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaApAQCAtMTksMTEgKzE5LDYgQEAKIAog
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogI2luY2x1ZGUgIldl
YnNpdGVEYXRhU3RvcmUuaCIKIAogV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJraXRXZWJz
aXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKik7Ci12
b2lkIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckFkZFByb2Nlc3NQb29sKFdlYktpdFdlYnNpdGVE
YXRhTWFuYWdlciosIFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2wmKTsKLXZvaWQgd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyUmVtb3ZlUHJvY2Vzc1Bvb2woV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiwg
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbCYpOwotY29uc3QgVmVjdG9yPFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2wqPiYgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKFdlYktpdFdl
YnNpdGVEYXRhTWFuYWdlciopOwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IDRhYjQ3ZmZm
NTkxMS4uMzAwNmY0ZmFlNmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
dXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcApAQCAtMTM5Miw4ICsx
MzkyLDggQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb24KIAogICAgIGNvb2tpZS5odHRwT25seSA9
ICpodHRwT25seTsKIAotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9
IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAg
IGNvb2tpZU1hbmFnZXItPnNldENvb2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Np
b25JRCgpLCB7IGNvb2tpZSB9LCBbY2FsbGJhY2tdKCkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eSYgY29va2llTWFuYWdlciA9IHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJv
Y2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMocGFn
ZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBbY2FsbGJhY2td
KCkgewogICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9KTsKIH0KQEAgLTE0
MDksOCArMTQwOSw4IEBAIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
V2ViQXV0b21hdGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXMoCiAKICAgICBTdHJpbmcgaG9z
dCA9IGFjdGl2ZVVSTC5ob3N0KCkudG9TdHJpbmcoKTsKIAotICAgIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0
bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFp
bkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoaG9zdCkgfSk7CisgICAgV2ViQ29va2llTWFuYWdl
clByb3h5JiBjb29raWVNYW5hZ2VyID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQ
cm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9z
dCwgZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKIAogICAgIHJldHVy
biB7IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQ
cm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQ
cm94eS5oCmluZGV4IDQxYzBhMGZiZjUwNi4uNGYzOThiNTMwZjYwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaApAQCAtNDgsNyArNDgsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB+QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KCk7CiAKICAgICB2
b2lkIGNvbm5lY3QoKTsKLSAgICB2b2lkIHRlcm1pbmF0ZSgpOworICAgIHZpcnR1YWwgdm9pZCB0
ZXJtaW5hdGUoKTsKIAogICAgIHZpcnR1YWwgUHJvY2Vzc1Rocm90dGxlciYgdGhyb3R0bGVyKCkg
PSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oCmluZGV4IGRiZTQ0Zjk1OTQx
MC4uNGM4NDVhMGVjNzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaApAQCAt
NDEsMTEgKzQxLDExIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHk7CiAKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCBmaW5hbCA6IHB1YmxpYyBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCB7Ci1w
cml2YXRlOgorcHVibGljOgogICAgIHZvaWQgc3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlclByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JikgZmluYWw7CiAgICAgdm9pZCBzdG9wTG9hZGluZyhMZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJQcm94eSYsIExlZ2FjeUN1c3RvbVByb3RvY29sSUQpIGZpbmFsOwog
ICAgIHZvaWQgaW52YWxpZGF0ZShMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYpIGZp
bmFsOwotCitwcml2YXRlOgogICAgIEhhc2hNYXA8TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgUmV0
YWluUHRyPFdLQ3VzdG9tUHJvdG9jb2xMb2FkZXI+PiBtX2xvYWRlck1hcDsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1t
CmluZGV4IDkyYWQxYzg0MjQ4ZS4uMzMxM2JkZTEwYzI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KQEAgLTEzNCw4ICsx
MzQsOSBAQCBzdGF0aWMgdm9pZCByZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCkKIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKQogewotICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZXRQcm9j
ZXNzU3VwcHJlc3Npb25FbmFibGVkKHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSk7CisgICAg
V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW2VuYWJsZWQgPSBwcm9j
ZXNzU3VwcHJlc3Npb25FbmFibGVkKCldIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsK
KyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2V0UHJvY2Vzc1N1cHByZXNzaW9u
RW5hYmxlZChlbmFibGVkKTsKKyAgICB9KTsKIAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQogICAgIGlmICghbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVy
LnZhbHVlKCkpCkBAIC0xNjYsOCArMTY3LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZv
cm1Jbml0aWFsaXplKCkKICAgICBpZiAoIVtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVm
YXVsdHNdIGJvb2xGb3JLZXk6QCJXZWJLaXRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciJd
KQogICAgICAgICBpbnN0YWxsTWVtb3J5UHJlc3N1cmVIYW5kbGVyKCk7CiAKLSAgICBzZXRMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZTxMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQ+KCkpOwotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBM
QVRGT1JNKE1BQ0NBVEFMWVNUKQogICAgIGlmICghX01HQ2FjaGVWYWxpZCgpKSB7CiAgICAgICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVf
UFJJT1JJVFlfREVGQVVMVCwgMCksIF57CkBAIC00OTUsMjIgKzQ5NCw2IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhCiAKICAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVm
YXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwogCi0gICAgewotICAgICAgICBib29sIGlzU2Fm
YXJpID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgaXNNaW5pQnJvd3NlciA9IGZhbHNlOwotI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6SU9TQXBwbGlj
YXRpb246OmlzTW9iaWxlU2FmYXJpKCk7Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3Jl
OjpJT1NBcHBsaWNhdGlvbjo6aXNNaW5pQnJvd3NlcigpOwotI2VsaWYgUExBVEZPUk0oTUFDKQot
ICAgICAgICBpc1NhZmFyaSA9IFdlYkNvcmU6Ok1hY0FwcGxpY2F0aW9uOjppc1NhZmFyaSgpOwot
ICAgICAgICBpc01pbmlCcm93c2VyID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzTWluaUJy
b3dzZXIoKTsKLSNlbmRpZgotICAgICAgICBpZiAoaXNTYWZhcmkgfHwgaXNNaW5pQnJvd3Nlcikg
ewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cFByb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3Ry
aW5nRm9yS2V5OihOU1N0cmluZyAqKVdlYktpdDJIVFRQUHJveHlEZWZhdWx0c0tleV0pOwotICAg
ICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuaHR0cHNQcm94eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0Zv
cktleTooTlNTdHJpbmcgKilXZWJLaXQySFRUUFNQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0ID0gYWRvcHRDRihf
Q0ZOZXR3b3JrQ29weUFUU0NvbnRleHQoKSk7CiAKICAgICBwYXJhbWV0ZXJzLnNob3VsZFN1cHBy
ZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0U3Vw
cHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXJEZWZhdWx0c0tleV07CkBAIC01MjQsMTIgKzUwNyw4
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
KE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhCiAgICAgTlNOdW1iZXIgKmRhdGFiYXNlRW5hYmxl
ZFZhbHVlID0gW2RlZmF1bHRzIG9iamVjdEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIkludGVybmFsRGVidWclQCIsIFdlYlByZWZlcmVuY2VzS2V5Ojppc0lUUERhdGFiYXNlRW5h
YmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKICAgICBpZiAoZGF0YWJhc2VFbmFi
bGVkVmFsdWUpCiAgICAgICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBk
YXRhYmFzZUVuYWJsZWRWYWx1ZS5ib29sVmFsdWU7Ci0gICAgZWxzZQotICAgICAgICBwYXJhbWV0
ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gbV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJl
bmNlcygpLmlzSVRQRGF0YWJhc2VFbmFibGVkKCk7CiAKICAgICBwYXJhbWV0ZXJzLmVuYWJsZUFk
Q2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSA9IFtkZWZhdWx0cyBib29sRm9yS2V5OltOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiRXhwZXJpbWVudGFsJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6
YWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCku
Z2V0KCldXTsKLQotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFwcEhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5n
UGVybWlzc2lvbiA9IGhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbigp
OwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUludmFsaWRhdGVDb250ZXh0KCkK
QEAgLTYwOCwxMSArNTg3LDYgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc1N1cHByZXNz
aW9uRW5hYmxlZCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50
ZXIudmFsdWUoKSAmJiAhbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVy
LnZhbHVlKCk7CiB9CiAKLWJvb2wgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYgZW50aXRsZW1lbnQpCi17Ci0gICAgcmV0
dXJuIFdURjo6aGFzRW50aXRsZW1lbnQoZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9u
KCktPnhwY0Nvbm5lY3Rpb24oKSwgZW50aXRsZW1lbnQudXRmOCgpLmRhdGEoKSk7Ci19Ci0KICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiBmbG9hdCBX
ZWJQcm9jZXNzUG9vbDo6ZGlzcGxheUJyaWdodG5lc3MoKQogewpAQCAtOTQ5LDIzICs5MjMsNCBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlckhpZ2hEeW5hbWljUmFuZ2VDaGFuZ2VDYWxs
YmFjaygpCiB9CiAjZW5kaWYKIAotT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBXZWJQcm9jZXNz
UG9vbDo6eHBjRW5kcG9pbnRNZXNzYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lbmRwb2lu
dE1lc3NhZ2U7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1hQ
Q0VuZHBvaW50VG9XZWJQcm9jZXNzKE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4gZW5kcG9pbnRN
ZXNzYWdlKQotewotICAgIG1fZW5kcG9pbnRNZXNzYWdlID0gZW5kcG9pbnRNZXNzYWdlOwotCi0g
ICAgZm9yIChhdXRvIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAgICBpZiAocHJvY2Vz
cy0+c3RhdGUoKSAhPSBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OlN0YXRlOjpSdW5uaW5nKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcHJvY2Vzcy0+Y29ubmVjdGlvbigpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8gY29ubmVjdGlvbiA9IHByb2Nlc3Mt
PmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpOwotICAgICAgICB4cGNfY29ubmVjdGlvbl9z
ZW5kX21lc3NhZ2UoY29ubmVjdGlvbiwgZW5kcG9pbnRNZXNzYWdlLmdldCgpKTsKLSAgICB9Ci19
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCmluZGV4IGM1ZGU0ZTdkMGY1OS4uZjdjZmY4
NTJmMGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkUHJveHkuY3BwCkBAIC03NSw4ICs3NSw4IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6Y2Fu
Y2VsKCkKICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CisgICAgaWYg
KG1fZGF0YVN0b3JlKQorICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwg
MCk7CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6aW52YWxpZGF0ZSgpCkBAIC0xMDMsMTUgKzEw
MywxMyBAQCBXZWJQYWdlUHJveHkqIERvd25sb2FkUHJveHk6Om9yaWdpbmF0aW5nUGFnZSgpIGNv
bnN0CiAjaWYgUExBVEZPUk0oQ09DT0EpCiB2b2lkIERvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9n
cmVzcyhjb25zdCBVUkwmIFVSTCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYg
KCFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOwotICAgICAgICBib29sIGNyZWF0ZWRTYW5kYm94
RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKFVSTC5maWxlU3lzdGVt
UGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIGhhbmRsZSk7Ci0gICAg
ICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94
RXh0ZW5zaW9uKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9ncmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFu
ZGxlKSwgMCk7Ci0gICAgfQorICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7Cisg
ICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZFdyaXRlLCBoYW5kbGUpOworICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNp
b24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsKKyAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2FkUHJv
Z3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwogfQogI2VuZGlmIC8vIFBMQVRG
T1JNKENPQ09BKQogCkBAIC0xMzEsMTEgKzEyOSwxMCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRp
ZFN0YXJ0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBzdWdn
ZQogCiB2b2lkIERvd25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCB1aW50
NjRfdCBjaGFsbGVuZ2VJRCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFt
X3Byb2Nlc3NQb29sIHx8ICFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQ
cm94eTo6Y3JlYXRlKFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBjaGFsbGVuZ2VJ
RCwgbWFrZVJlZigqbV9wcm9jZXNzUG9vbC0+bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkp
LCBudWxscHRyKTsKLQorICAgIGF1dG8gYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk6OmNyZWF0ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKSwgY2hhbGxlbmdlSUQsIG1ha2VSZWYoKm1fZGF0YVN0b3JlLT5uZXR3b3JrUHJv
Y2VzcygpLmNvbm5lY3Rpb24oKSksIG51bGxwdHIpOwogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25s
b2FkQ2xpZW50KCkuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCp0aGlzLCBhdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmdldCgpKTsKIH0KIApAQCAtMTQ2LDE1ICsxNDMsMTAg
QEAgdm9pZCBEb3dubG9hZFByb3h5Ojp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYg
cHJvcG9zZWRSZXF1ZXN0LCBjb25zdCBSZXMKIAogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2Fk
Q2xpZW50KCkud2lsbFNlbmRSZXF1ZXN0KCp0aGlzLCBXVEZNb3ZlKHByb3Bvc2VkUmVxdWVzdCks
IHJlZGlyZWN0UmVzcG9uc2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyld
KFJlc291cmNlUmVxdWVzdCYmIG5ld1JlcXVlc3QpIHsKICAgICAgICAgbV9yZWRpcmVjdENoYWlu
LmFwcGVuZChuZXdSZXF1ZXN0LnVybCgpKTsKLQotICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMt
Pm1fcHJvY2Vzc1Bvb2wpCisgICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9kYXRhU3RvcmUp
CiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYXV0byogbmV0d29ya1Byb2Nlc3NQcm94
eSA9IHByb3RlY3RlZFRoaXMtPm1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCk7Ci0gICAg
ICAgIGlmICghbmV0d29ya1Byb2Nlc3NQcm94eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
Q29udGludWVXaWxsU2VuZFJlcXVlc3QocHJvdGVjdGVkVGhpcy0+bV9kb3dubG9hZElELCBuZXdS
ZXF1ZXN0KSwgMCk7CisgICAgICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0
ZWRUaGlzLT5tX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgbmV0d29ya1By
b2Nlc3NQcm94eS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVXaWxsU2Vu
ZFJlcXVlc3QocHJvdGVjdGVkVGhpcy0+bV9kb3dubG9hZElELCBuZXdSZXF1ZXN0KSwgMCk7CiAg
ICAgfSk7CiB9CiAKQEAgLTE3OSwxNiArMTcxLDE0IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGVj
aWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyhEb3dubG9hZElEIGRvd25s
CiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9w
cm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0
ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVk
RmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBkb3dubG9hZElEID0gZG93bmxvYWRJRF0gKEFsbG93T3ZlcndyaXRlIGFsbG93
T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsKKyAgICBtX3Byb2Nlc3NQb29sLT5kb3du
bG9hZENsaWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKCp0aGlz
LCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0
ZWRGaWxlbmFtZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRvd25s
b2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9u
KSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlOwogICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGRlc3RpbmF0aW9uLCBTYW5kYm94RXh0ZW5zaW9u
OjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgICAgIGlm
ICghbV9wcm9jZXNzUG9vbCkKKyAgICAgICAgaWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERl
c3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxl
LCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CisgICAgICAgIG1f
ZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRl
c3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxv
d092ZXJ3cml0ZTo6WWVzKSwgMCk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAppbmRleCA3NmEw
NzE1N2I1OTEuLmQ3NGE4ZmE2YzY0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcApAQCAtNDQsNyArNDQsNyBAQAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIERvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlNYXAo
TmV0d29ya1Byb2Nlc3NQcm94eSYgcHJvY2VzcykKLSAgICA6IG1fcHJvY2VzcyhtYWtlV2Vha1B0
cihwcm9jZXNzKSkKKyAgICA6IG1fcHJvY2Vzcyhwcm9jZXNzKQogI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgICwgbV9zaG91bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJvY2Vzc0hhc0VudGl0bGVtZW50
KCJjb20uYXBwbGUubXVsdGl0YXNraW5nLnN5c3RlbWFwcGFzc2VydGlvbnMiKSkKICNlbmRpZgpA
QCAtNzAsMTQgKzcwLDEyIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxhdGZvcm1EZXN0cm95
KCkKIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3Vu
ZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7
CisgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlv
bkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjph
cHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKQogewotICAgIGlmIChtX3Byb2Nlc3MpCi0g
ICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0
aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsK
IH0KIAogRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94
eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9v
bCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0
IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2Up
CkBAIC05MiwxMyArOTAsMTIgQEAgRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3Jl
YXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUKICAgICAgICAgbV9k
b3dubG9hZFVJQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihnZXRDdXJy
ZW50UHJvY2Vzc0lEKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlw
ZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CiAKICAgICAgICAgQVNTRVJUKCFtX2Rvd25sb2FkTmV0
d29ya2luZ0Fzc2VydGlvbik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcHJvY2Vzcyk7Ci0g
ICAgICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNz
QXNzZXJ0aW9uPihtX3Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCksICJXZWJLaXQgZG93bmxv
YWRzIl9zLCBQcm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CisgICAg
ICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNz
ZXJ0aW9uPihtX3Byb2Nlc3MucHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMi
X3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAogICAgICAg
ICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyB0b29rICdXZWJLaXQg
ZG93bmxvYWRzJyBhc3NlcnRpb25zIGZvciBVSVByb2Nlc3MgYW5kIE5ldHdvcmtQcm9jZXNzIik7
CiAgICAgfQogCi0gICAgbV9wcm9jZXNzLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRv
d25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRQcm94eS0+ZG93bmxv
YWRJRCgpLmRvd25sb2FkSUQoKSwgZG93bmxvYWRQcm94eS5nZXQoKSk7CisgICAgbV9wcm9jZXNz
LmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3du
bG9hZFByb3h5LmdldCgpKTsKIAogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTA5
LDEyICsxMDYsOSBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQoRG93
bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSkKIAogICAgIFJFTEVBU0VfTE9HKExvYWRpbmcsICJS
ZW1vdmluZyBkb3dubG9hZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3dubG9hZFByb3h5
TWFwIiwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJv
eHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wu
Ci0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5w
cm9jZXNzUG9vbCgpKTsKLQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9h
ZElEKSk7CiAKLSAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2Fk
SUQoKSk7CisgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93
bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQo
KSk7CiAgICAgZG93bmxvYWRQcm94eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9kb3dubG9hZHMucmVt
b3ZlKGRvd25sb2FkSUQpOwogCkBAIC0xMzMsMTUgKzEyNywxMyBAQCB2b2lkIERvd25sb2FkUHJv
eHlNYXA6OmludmFsaWRhdGUoKQogICAgIGZvciAoY29uc3QgYXV0byYgZG93bmxvYWQgOiBtX2Rv
d25sb2Fkcy52YWx1ZXMoKSkgewogICAgICAgICBkb3dubG9hZC0+cHJvY2Vzc0RpZENsb3NlKCk7
CiAgICAgICAgIGRvd25sb2FkLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+cmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIGRvd25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKKyAgICAgICAg
bV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQo
KSk7CiAgICAgfQogCiAgICAgbV9kb3dubG9hZHMuY2xlYXIoKTsKICAgICBtX2Rvd25sb2FkVUlB
c3NlcnRpb24gPSBudWxscHRyOwogICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0g
bnVsbHB0cjsKICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyBE
b3dubG9hZFByb3h5TWFwIGludmFsaWRhdGVkIC0gUmVsZWFzZWQgJ1dlYktpdCBkb3dubG9hZHMn
IGFzc2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKLQotICAgIG1f
cHJvY2VzcyA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKaW5k
ZXggM2JlMjA3OWEwZjJjLi40ZmEwMDFiZDdmYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaApAQCAtNzEsNyArNzEsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1DcmVhdGUoKTsKICAgICB2b2lkIHBsYXRmb3Jt
RGVzdHJveSgpOwogCi0gICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3M7
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbV9wcm9jZXNzOwogICAgIEhhc2hNYXA8RG93bmxv
YWRJRCwgUmVmUHRyPERvd25sb2FkUHJveHk+PiBtX2Rvd25sb2FkczsKIAogICAgIGJvb2wgbV9z
aG91bGRUYWtlQXNzZXJ0aW9uIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJv
dG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAppbmRleCA4YzIzYmJl
OGMwNmEuLmQ2YzMzMjNkZDkzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcApAQCAtNDQsMTcgKzQ0LDE3IEBA
IExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp+TGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHkoKQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojpz
dGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgbV9uZXR3b3JrUHJv
Y2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3Rh
cnRMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKKyAgICBtX25ldHdv
cmtQcm9jZXNzUHJveHkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RhcnRMb2FkaW5n
KCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RvcExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJ
RCBjdXN0b21Qcm90b2NvbElEKQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNz
UG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBj
dXN0b21Qcm90b2NvbElEKTsKKyAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkuY3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50KCkuc3RvcExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOwog
fQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkK
IHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQoKS5pbnZhbGlkYXRlKCp0aGlzKTsKKyAgICBtX25ldHdvcmtQcm9jZXNz
UHJveHkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuaW52YWxpZGF0ZSgqdGhpcyk7CiB9
CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6Ondhc1JlZGlyZWN0ZWRU
b1JlcXVlc3QoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBjMWY0NzA4Yjgx
Y2YuLmFiODQ1YjI2OTc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5j
bHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogCiAjaW5jbHVkZSAiQVBJQ29udGVudFJ1bGVM
aXN0LmgiCisjaW5jbHVkZSAiQVBJQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIgogI2luY2x1ZGUgIkF1dGhlbnRp
Y2F0aW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHlNYXAuaCIKQEAgLTM1LDYg
KzM2LDcgQEAKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIK
ICNlbmRpZgorI2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZXMu
aCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC00OCw2ICs1
MCw3IEBACiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVk
ZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1
bGVMaXN0LmgiCisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAi
V2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAi
V2ViUHJvY2Vzc01lc3NhZ2VzLmgiCkBAIC01OCw4ICs2MSwxMCBAQAogI2luY2x1ZGUgIldlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGEuaCIKICNp
bmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlQ2xpZW50LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJh
Y2tBZ2dyZWdhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKICNp
ZiBFTkFCTEUoU0VDX0lURU1fU0hJTSkKQEAgLTcwLDIwICs3NSwxMjIgQEAKICNpbmNsdWRlIDx3
dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisj
aW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwog
I2RlZmluZSBNRVNTQUdFX0NIRUNLKGFzc2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2Vy
dGlvbiwgY29ubmVjdGlvbigpKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdl
YlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShw
cm9jZXNzUG9vbC5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJv
Y2Vzc1Bvb2wocHJvY2Vzc1Bvb2wpCitzdGF0aWMgSGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5
Kj4mIG5ldHdvcmtQcm9jZXNzZXNTZXQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxOZXR3b3JrUHJv
Y2Vzc1Byb3h5Kj4+IHNldDsKKyAgICByZXR1cm4gc2V0OworfQorCitWZWN0b3I8UmVmPE5ldHdv
cmtQcm9jZXNzUHJveHk+PiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2Vz
KCkKK3sKKyAgICBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXM7Cisg
ICAgcHJvY2Vzc2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobmV0d29ya1Byb2Nlc3Nlc1NldCgp
LnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA6IG5ldHdvcmtQcm9jZXNz
ZXNTZXQoKSkKKyAgICAgICAgcHJvY2Vzc2VzLnVuY2hlY2tlZEFwcGVuZCgqbmV0d29ya1Byb2Nl
c3MpOworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9CisKK3N0YXRpYyBSZWZQdHI8TmV0d29ya1By
b2Nlc3NQcm94eT4mIGRlZmF1bHRQcm9jZXNzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8UmVmUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBwcm9jZXNzOworICAgIHJldHVybiBwcm9j
ZXNzLmdldCgpOworfQorCitSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gTmV0d29ya1Byb2Nlc3NQ
cm94eTo6ZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBpZiAoIWRlZmF1bHRQcm9jZXNz
KCkpCisgICAgICAgIGRlZmF1bHRQcm9jZXNzKCkgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVh
dGUoKTsKKyAgICByZXR1cm4gKmRlZmF1bHRQcm9jZXNzKCk7Cit9CisKK3ZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6dGVybWluYXRlKCkKK3sKKyAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OnRl
cm1pbmF0ZSgpOworICAgIGRpZFRlcm1pbmF0ZSgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmRpZFRlcm1pbmF0ZSgpCit7CisgICAgaWYgKHRoaXMgPT0gZGVmYXVsdFByb2Nlc3Mo
KS5nZXQoKSkKKyAgICAgICAgZGVmYXVsdFByb2Nlc3MoKSA9IG51bGxwdHI7Cit9CisKK3ZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcygp
Cit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBu
b24tbWFpbiB0aHJlYWRzLgorICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVu
Zm9yY2UgdGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KKyAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgorICAgIGlmICghUnVu
TG9vcDo6aXNNYWluKCkpIHsKKyAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlz
XSB7CisgICAgICAgICAgICBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7Cisg
ICAgICAgIH0pOworICAgIH0KKworICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
IHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJl
ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVz
VG9SZWdpc3RlckFzU2VjdXJlKCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVy
ZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lH
bG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0Nv
bnRlbnRTZWN1cml0eVBvbGljeSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3Rl
cmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9u
KCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1l
c1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdz
OjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7CisgICAgcGFyYW1l
dGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hl
TW9kZWwoKTsKKyAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hl
bWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKKyAgICAgICAgcGFyYW1ldGVycy51cmxT
Y2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9y
eSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7ICFjb29raWVTdG9y
YWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFt
ZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgaWYgKFN0
cmluZyBjb250YWluZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2lu
Z0NhY2hlc0RpcmVjdG9yeSgpOyAhY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1wdHkoKSkK
KyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgcGFyZW50QnVuZGxlRGly
ZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOyAhcGFyZW50
QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6
UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKKyNlbmRpZgorICAgIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2VzcyhwYXJhbWV0ZXJzKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKK30KKworc3RhdGljIGJv
b2wgYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKQoreworICAg
IGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xz
KCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJp
b3JpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3Vu
ZEFzc2VydGlvbigpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNob3Vs
ZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdv
cmtQcm9jZXNzUHJveHkoKQorICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KGFueVByb2Nlc3NQ
b29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCiAjaWYgRU5BQkxFKExFR0FDWV9D
VVNUT01fUFJPVE9DT0xfTUFOQUdFUikKKyAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50KG1ha2VVbmlxdWVSZWY8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQog
ICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgqdGhpcykKKyNlbHNlCisgICAgLCBt
X2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogI2VuZGlmCi0gICAgLCBtX3Rocm90dGxlcigqdGhpcywg
cHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV90
aHJvdHRsZXIoKnRoaXMsIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2Vy
dGlvbigpKQorICAgICwgbV9jb29raWVNYW5hZ2VyKFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3Jl
YXRlKCp0aGlzKSkKIHsKICAgICBjb25uZWN0KCk7CisgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVy
c1RvTmV3UHJvY2VzcygpOworICAgIHVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICBuZXR3
b3JrUHJvY2Vzc2VzU2V0KCkuYWRkKHRoaXMpOwogfQogCiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+
TmV0d29ya1Byb2Nlc3NQcm94eSgpCkBAIC05OCw2ICsyMDUsNyBAQCBOZXR3b3JrUHJvY2Vzc1By
b3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgpCiAKICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFw
KQogICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAtPmludmFsaWRhdGUoKTsKKyAgICBuZXR3b3Jr
UHJvY2Vzc2VzU2V0KCkucmVtb3ZlKHRoaXMpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVu
Y2hPcHRpb25zKQpAQCAtMTA1LDE1ICsyMTMsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuYwog
ICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1R5cGUgPSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NU
eXBlOjpOZXR3b3JrOwogICAgIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9u
cyhsYXVuY2hPcHRpb25zKTsKIAotICAgIGlmIChwcm9jZXNzUG9vbCgpLnNob3VsZE1ha2VOZXh0
TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpKSB7Ci0gICAgICAgIHByb2Nlc3NQ
b29sKCkuc2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
KGZhbHNlKTsKKyAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6c2hvdWxkTWFrZU5leHROZXR3b3Jr
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpCiAgICAgICAgIGxhdW5jaE9wdGlvbnMuc2hv
dWxkTWFrZVByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7Ci0gICAgfQotCi0jaWYg
UExBVEZPUk0oUExBWVNUQVRJT04pCi0gICAgbGF1bmNoT3B0aW9ucy5wcm9jZXNzUGF0aCA9IG1f
cHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3NQYXRoKCk7Ci0gICAgbGF1bmNoT3B0aW9ucy51c2Vy
SWQgPSBtX3Byb2Nlc3NQb29sLnVzZXJJZCgpOwotI2VuZGlmCiB9CiAKIHZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6Y29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
bikKQEAgLTE2NiwxMiArMjY3LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c3ludGhl
c2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCiAgICAgfQogfQogCi1Eb3dubG9h
ZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVE
YXRhU3RvcmUmIGRhdGFTdG9yZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVl
c3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5h
dGluZ1BhZ2UpCitEb3dubG9hZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3du
bG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUHJvY2Vzc1Bvb2wmIHBy
b2Nlc3NQb29sLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3Qg
RnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkK
IHsKICAgICBpZiAoIW1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5
TWFwID0gbWFrZVVuaXF1ZTxEb3dubG9hZFByb3h5TWFwPigqdGhpcyk7CiAKLSAgICByZXR1cm4g
bV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgbV9wcm9j
ZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7Cisg
ICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3Rv
cmUsIHByb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQ
YWdlKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpmZXRjaFdlYnNpdGVEYXRhKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5
cGVzLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkIChXZWJzaXRlRGF0YSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0yMzcsOCArMzM4LDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nl
c3NDcmFzaGVkKCkKIHsKICAgICBjbGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKLSAgICAvLyBUZWxs
IHRoZSBuZXR3b3JrIHByb2Nlc3MgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgdGhpcyBuZXR3b3Jr
IHByb2Nlc3MgcHJveHkuIFRoaXMgd2lsbCBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgotICAgIG1f
cHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKKyAgICBSZWY8TmV0d29y
a1Byb2Nlc3NQcm94eT4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CisgICAgZm9yIChhdXRvKiBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CisgICAgZm9yIChhdXRvJiB3
ZWJzaXRlRGF0YVN0b3JlIDogbV93ZWJzaXRlRGF0YVN0b3JlcykKKyAgICAgICAgd2Vic2l0ZURh
dGFTdG9yZS5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMpOwogfQogCiB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmNsZWFyQ2FsbGJhY2tTdGF0ZXMoKQpAQCAtMjU4LDkgKzM2Miw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBJUEM6OkRlCiAgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9u
LCBkZWNvZGVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wuZGlz
cGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQotICAgICAgICByZXR1cm47Ci0KICAg
ICBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rl
cik7CiB9CiAKQEAgLTI3NCw4ICszNzUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRp
ZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQwogCiB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiB7Ci0g
ICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWYobV9wcm9jZXNzUG9vbCk7Ci0K
ICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAt
PmludmFsaWRhdGUoKTsKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VS
KQpAQCAtMzMxLDExICs0MzAsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCBzZXNzaQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF0b3BPcmlnaW4gfHwgIW1fcHJvY2Vzc1Bvb2wuaXNT
ZXJ2aWNlV29ya2VyUGFnZUlEKHBhZ2VJRCkpIHsKLSAgICAgICAgcHJvY2Vzc0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKHNlc3Npb25JRCwgV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgV2ViUGFnZVByb3h5Ojpmb3JNb3N0Vmlz
aWJsZVdlYlBhZ2VJZkFueShzZXNzaW9uSUQsICp0b3BPcmlnaW4sIFt0aGlzLCB3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSUQsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlID0g
V1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIG5lZ290aWF0ZWRMZWdhY3lUTFNdKGF1
dG8qIHBhZ2UpIG11dGFibGUgewogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMzkyLDExICs0ODYsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRp
ZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqIGxhdW5jaGVyLCBJUEM6OkNvbgogICAg
ICAgICBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQot
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChtX3Byb2Nlc3NQb29sLnByb2Nlc3NTdXBwcmVz
c2lvbkVuYWJsZWQoKSkKLSAgICAgICAgc2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCh0cnVl
KTsKLSNlbmRpZgogICAgIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKHhwY19j
b25uZWN0aW9uX3QgY29ubmVjdGlvbiA9IHRoaXMtPmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlv
bigpKQpAQCAtMTIwNSw3ICsxMjk0LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXRU
aGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3MKIH0KIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFz
aFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zKQogewotICAgIHByb2Nl
c3NQb29sKCkuc2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oV1RGTW92ZShkb21haW5zKSk7
CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNz
UG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0
aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHsgZG9tYWlucyB9KTsKIH0K
ICNlbmRpZiAvLyBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCkBAIC0xMjUyLDQ1
ICsxMzQyLDMxIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Zmx1c2hDb29raWVzKGNvbnN0
IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIENvbXBsZXRpCiAgICAgc2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Rmx1c2hDb29raWVzKHNlc3Npb25JRCksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjphZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmIHN0b3JlKQordm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjphZGRTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmIHN0b3JlKQogewotICAg
IG1fc2Vzc2lvbklEcy5hZGQoc3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBtX3dlYnNpdGVEYXRh
U3RvcmVzLmFkZChzdG9yZSk7CiAKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAg
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9y
ZS0+cGFyYW1ldGVycygpIH0sIDApOwotICAgIGF1dG8gc2Vzc2lvbklEID0gc3RvcmUtPnNlc3Np
b25JRCgpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWRkV2Vic2l0
ZURhdGFTdG9yZSB7IHN0b3JlLnBhcmFtZXRlcnMoKSB9LCAwKTsKKyAgICBhdXRvIHNlc3Npb25J
RCA9IHN0b3JlLnNlc3Npb25JRCgpOwogICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkp
IHsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAgICAgY3JlYXRlU3ltTGlua0Zv
ckZpbGVVcGdyYWRlKHN0b3JlLT5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsK
KyAgICAgICAgY3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHN0b3JlLnJlc29sdmVkSW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5KCkpOwogI2VuZGlmCiAgICAgfQogfQogCi1ib29sIE5ldHdvcmtQ
cm9jZXNzUHJveHk6Omhhc1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSBjb25zdAot
ewotICAgIHJldHVybiBtX3Nlc3Npb25JRHMuY29udGFpbnMoc2Vzc2lvbklEKTsKLX0KLQotdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCkKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihXZWJzaXRlRGF0
YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIG1fc2Vzc2lvbklEcy5yZW1vdmUoc2Vz
c2lvbklEKTsKKyAgICBtX3dlYnNpdGVEYXRhU3RvcmVzLnJlbW92ZSh3ZWJzaXRlRGF0YVN0b3Jl
KTsKIAogICAgIGlmIChjYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24geyBzZXNzaW9uSUQgfSwgMCk7CisgICAgICAg
IHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEZXN0cm95U2Vzc2lvbiB7IHdlYnNpdGVE
YXRhU3RvcmUuc2Vzc2lvbklEKCkgfSwgMCk7CiB9CiAKIFdlYnNpdGVEYXRhU3RvcmUqIE5ldHdv
cmtQcm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCkKIHsKLSAgICBpZiAoc2Vzc2lvbklEID09IFBBTDo6U2Vzc2lvbklEOjpk
ZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgaWYgKCFXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlRXhpc3RzKCkpIHsKLSAgICAgICAgICAgIGF1dG8qIHdlYnNpdGVEYXRhU3Rv
cmUgPSBtX3Byb2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUoKTsKLSAgICAgICAgICAgIGlmICh3
ZWJzaXRlRGF0YVN0b3JlICYmIHdlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IHNlc3Np
b25JRCkKLSAgICAgICAgICAgICAgICByZXR1cm4gd2Vic2l0ZURhdGFTdG9yZTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCku
cHRyKCk7Ci0gICAgfQotICAgIHJldHVybiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRl
ZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICByZXR1cm4gV2Vic2l0
ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKIH0K
IAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZXRyaWV2ZUNhY2hlU3RvcmFnZVBhcmFtZXRl
cnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpAQCAtMTMzNyw3ICsxNDEzLDcgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHkoV2ViVXNlckNvbnRlbnQKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3Jr
UHJvY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9tYWluLCBQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKLSAgICBtX3Byb2Nlc3NQb29sLmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0
aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksIHNl
c3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIFdlYlByb2Nlc3NQb29s
Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoKnRoaXMs
IFJlZ2lzdHJhYmxlRG9tYWluIHtyZWdpc3RyYWJsZURvbWFpbn0sIHNlc3Npb25JRCwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6Ondv
cmtlckNvbnRleHRDb25uZWN0aW9uTm9Mb25nZXJOZWVkZWQoV2ViQ29yZTo6UHJvY2Vzc0lkZW50
aWZpZXIgaWRlbnRpZmllcikKQEAgLTE1MDAsMTYgKzE1NzYsMzQgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpwcmVjb25uZWN0VG8oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJQYWdl
UHJveHlJZGUKICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlY29ubmVjdFRv
KHNlc3Npb25JRCwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJRCwgdXJsLCB1c2VyQWdlbnQsIHN0
b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKSwgMCk7
CiB9CiAKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sSGFzRm9yZWdyb3VuZFdlYlByb2Nlc3Nl
cygpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQ
cm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPmhhc0ZvcmVncm91bmRX
ZWJQcm9jZXNzZXMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sSGFzQmFja2dyb3VuZFdl
YlByb2Nlc3NlcygpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPmhhc0Jh
Y2tncm91bmRXZWJQcm9jZXNzZXMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRl
UHJvY2Vzc0Fzc2VydGlvbigpCiB7Ci0gICAgaWYgKHByb2Nlc3NQb29sKCkuaGFzRm9yZWdyb3Vu
ZFdlYlByb2Nlc3NlcygpKSB7CisgICAgaWYgKGFueVByb2Nlc3NQb29sSGFzRm9yZWdyb3VuZFdl
YlByb2Nlc3NlcygpKSB7CiAgICAgICAgIGlmICghUHJvY2Vzc1Rocm90dGxlcjo6aXNWYWxpZEZv
cmVncm91bmRBY3Rpdml0eShtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcykpIHsKICAgICAgICAg
ICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzID0gdGhyb3R0bGVyKCkuZm9yZWdyb3VuZEFj
dGl2aXR5KCJOZXR3b3JraW5nIGZvciBmb3JlZ3JvdW5kIHZpZXcocykiX3MpOwogICAgICAgICAg
ICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NEaWRUcmFuc2l0aW9uVG9G
b3JlZ3JvdW5kKCksIDApOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
aWYgKHByb2Nlc3NQb29sKCkuaGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpKSB7CisgICAgaWYg
KGFueVByb2Nlc3NQb29sSGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpKSB7CiAgICAgICAgIGlm
ICghUHJvY2Vzc1Rocm90dGxlcjo6aXNWYWxpZEJhY2tncm91bmRBY3Rpdml0eShtX2FjdGl2aXR5
RnJvbVdlYlByb2Nlc3NlcykpIHsKICAgICAgICAgICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vz
c2VzID0gdGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJOZXR3b3JraW5nIGZvciBiYWNr
Z3JvdW5kIHZpZXcocykiX3MpOwogICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlByb2Nlc3NEaWRUcmFuc2l0aW9uVG9CYWNrZ3JvdW5kKCksIDApOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaApp
bmRleCBhMGI0YzFkODkzOGUuLjBhZDYxODc4YmQ2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTQ2LDEyICs0
NiwxNyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiWFBDRXZlbnRIYW5kbGVy
LmgiCisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRyLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIElQ
QyB7CiBjbGFzcyBGb3JtRGF0YVJlZmVyZW5jZTsKIH0KIAorbmFtZXNwYWNlIEFQSSB7CitjbGFz
cyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xh
c3MgU2Vzc2lvbklEOwogfQpAQCAtNzMsOCArNzgsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
Y2xhc3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7CitjbGFzcyBXZWJD
b29raWVNYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNz
UG9vbDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OwogCiBlbnVtIGNsYXNz
IFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyA6IGJvb2w7CkBAIC04Niw4ICs5MSw5IEBAIHN0
cnVjdCBGcmFtZUluZm9EYXRhOwogc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOwogc3RydWN0IFJlc291cmNlTG9hZEluZm87CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CitzdHJ1
Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM7CiAKLWNsYXNzIE5ldHdvcmtQcm9jZXNzUHJv
eHkgZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NU
aHJvdHRsZXJDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5
PiB7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVBy
b2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFr
ZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4sIHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtQ
cm9jZXNzUHJveHk+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICB1c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwpA
QCAtMTAyLDEyICsxMDgsMTggQEAgcHVibGljOgogICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3Rv
cmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVzaW5nIE9wZW5l
ckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhwbGljaXQgTmV0
d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBSZWY8TmV0d29y
a1Byb2Nlc3NQcm94eT4gZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7CisgICAgc3RhdGljIFJlZjxO
ZXR3b3JrUHJvY2Vzc1Byb3h5PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdv
cmtQcm9jZXNzUHJveHkpOyB9CiAgICAgfk5ldHdvcmtQcm9jZXNzUHJveHkoKTsKIAorICAgIHN0
YXRpYyBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBhbGxOZXR3b3JrUHJvY2Vzc2Vz
KCk7CisgICAgCisgICAgdm9pZCB0ZXJtaW5hdGUoKSBmaW5hbDsKKyAgICB2b2lkIGRpZFRlcm1p
bmF0ZSgpOworCiAgICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vz
c1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uRGVsYXllZFJlcGx5JiYpOwogCi0gICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxv
YWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsK
KyAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUm
LCBXZWJQcm9jZXNzUG9vbCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0
IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSk7CiAKICAgICB2
b2lkIGZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0
YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoV2Vic2l0ZURhdGEpPiYmKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFBB
TDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRpbWUgbW9kaWZp
ZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsK
QEAgLTIwNiwxNSArMjE4LDEyIEBAIHB1YmxpYzoKICAgICBQcm9jZXNzVGhyb3R0bGVyJiB0aHJv
dHRsZXIoKSBmaW5hbCB7IHJldHVybiBtX3Rocm90dGxlcjsgfQogICAgIHZvaWQgdXBkYXRlUHJv
Y2Vzc0Fzc2VydGlvbigpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKCkgeyBy
ZXR1cm4gbV9wcm9jZXNzUG9vbDsgfQotCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
ICAgICB2b2lkIGRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eSYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGFkZFNlc3Npb24o
UmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYpOwotICAgIGJvb2wgaGFzU2Vzc2lvbihQQUw6OlNlc3Np
b25JRCkgY29uc3Q7Ci0gICAgdm9pZCByZW1vdmVTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKKyAg
ICB2b2lkIGFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYpOworICAgIHZvaWQgcmVtb3ZlU2Vz
c2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CiAgICAgCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAgICAgdm9pZCBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoY29uc3QgU3RyaW5nJiBp
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwpAQCAtMjI5LDYgKzIzOCw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5n
Jik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29u
c3QgU3RyaW5nJik7CiAKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOworICAgIAog
ICAgIHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKIAogICAgIHZvaWQgcmVzb3VyY2VMb2FkRGlkU2VuZFJlcXVlc3QoV2ViUGFnZVBy
b3h5SWRlbnRpZmllciwgUmVzb3VyY2VMb2FkSW5mbyYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmJiwgT3B0aW9uYWw8SVBDOjpGb3JtRGF0YVJlZmVyZW5jZT4mJik7CkBAIC0yNDgsNyArMjU5
LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3Ry
aW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyQnVuZGxl
SWRlbnRpZmllcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAgV2ViQ29va2ll
TWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyKCkgeyByZXR1cm4gbV9jb29raWVNYW5hZ2VyLmdl
dCgpOyB9CisKKyAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYgY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50KCkgeyByZXR1cm4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQuZ2V0KCk7IH0KKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHhwY19vYmplY3RfdCB4cGNF
bmRwb2ludE1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2VuZHBvaW50TWVzc2FnZS5nZXQoKTsg
fQorI2VuZGlmCisKIHByaXZhdGU6CisgICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eSgp
OworCisgICAgdm9pZCBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisKICAg
ICAvLyBBdXhpbGlhcnlQcm9jZXNzUHJveHkKICAgICBBU0NJSUxpdGVyYWwgcHJvY2Vzc05hbWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiAiTmV0d29ya2luZyJfczsgfQogCkBAIC0yNTYsNyArMjc5
LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rp
b24mKSBvdmVycmlkZTsKICAgICB2b2lkIHByb2Nlc3NXaWxsU2h1dERvd24oSVBDOjpDb25uZWN0
aW9uJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAg
IHZvaWQgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpD
bGllbnQKQEAgLTMxMiwxNiArMzM0LDE3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCwgUmVmPEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlUHJveHk+JiYpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7
Ci0KICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0
ZURhdGEpPj4gbV9wZW5kaW5nRmV0Y2hXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFw
PENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdl
YnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zQ2FsbGJh
Y2tzOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkUHJveHlNYXA+IG1fZG93bmxvYWRQ
cm94eU1hcDsKKworICAgIFVuaXF1ZVJlZjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNU
T01fUFJPVE9DT0xfTUFOQUdFUikKICAgICBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94
eSBtX2N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OwogI2VuZGlmCisKICAgICBQcm9jZXNzVGhy
b3R0bGVyIG1fdGhyb3R0bGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9jZXNzVGhyb3R0bGVy
OjpCYWNrZ3JvdW5kQWN0aXZpdHk+IG1fYWN0aXZpdHlGb3JIb2xkaW5nTG9ja2VkRmlsZXM7CiAg
ICAgUHJvY2Vzc1Rocm90dGxlcjo6QWN0aXZpdHlWYXJpYW50IG1fYWN0aXZpdHlGcm9tV2ViUHJv
Y2Vzc2VzOwpAQCAtMzQ3LDkgKzM3MCwxMSBAQCBwcml2YXRlOgogICAgIHByaXZhdGU6CiAgICAg
ICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICB9
OworICAgIE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4gbV9lbmRwb2ludE1lc3NhZ2U7CiAjZW5k
aWYKIAotICAgIEhhc2hTZXQ8UEFMOjpTZXNzaW9uSUQ+IG1fc2Vzc2lvbklEczsKKyAgICBXZWFr
SGFzaFNldDxXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmVzOworICAgIFJlZjxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+IG1fY29va2llTWFuYWdlcjsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQppbmRleCBiOGRhZWRmN2JlYmEuLjBlNWZh
ZWMxYjNhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAgLTUxLDggKzUxLDExIEBAIGJvb2wg
TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCh4cGNf
b2JqZWN0X3QgZXZlbnQpIGNvCiAgICAgaWYgKG1lc3NhZ2VOYW1lLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2Vz
RGF0YWJhc2VYUENDb25zdGFudHM6OnhwY0xhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2lu
dE1lc3NhZ2VOYW1lKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNl
bmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICBpZiAo
bWVzc2FnZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1
bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVzc2FnZU5hbWUpIHsKKyAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+bV9lbmRwb2ludE1lc3NhZ2UgPSBldmVudDsKKyAgICAgICAgZm9yIChh
dXRvJiBkYXRhU3RvcmUgOiBtX25ldHdvcmtQcm9jZXNzLT5tX3dlYnNpdGVEYXRhU3RvcmVzKQor
ICAgICAgICAgICAgZGF0YVN0b3JlLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9BbGxX
ZWJQcm9jZXNzZXMoKTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCmluZGV4IGNjNTI2
YWFmM2FhZi4uMDg1ZTdkMjY1YTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJB
UElBcnJheS5oIgogI2luY2x1ZGUgIkFQSVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiTmV0
d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIK
ICNpbmNsdWRlICJPcHRpb25hbENhbGxiYWNrSUQuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5h
Z2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHlNZXNzYWdlcy5o
IgpAQCAtMzksMjQgKzQwLDE2IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCi1jb25zdCBjaGFyKiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN1cHBsZW1l
bnROYW1lKCkKK1dlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KE5l
dHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKQorICAgIDogbV9uZXR3b3JrUHJvY2Vz
cyhtYWtlV2Vha1B0cihuZXR3b3JrUHJvY2VzcykpCiB7Ci0gICAgcmV0dXJuICJXZWJDb29raWVN
YW5hZ2VyUHJveHkiOwotfQotCi1SZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KHByb2Nlc3NQb29sKSk7
Ci19Ci0KLVdlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KFdlYlBy
b2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKLSAgICA6IFdlYkNvbnRleHRTdXBwbGVtZW50KHByb2Nl
c3NQb29sKQotewotICAgIFdlYkNvbnRleHRTdXBwbGVtZW50Ojpwcm9jZXNzUG9vbCgpLT5hZGRN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCAqdGhpcyk7CisgICAgbmV0d29ya1Byb2Nlc3MuYWRkTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgKnRoaXMpOwogfQogCiBXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5hZ2Vy
UHJveHkoKQogeworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsKICAgICBBU1NFUlQobV9jb29raWVPYnNlcnZl
cnMuaXNFbXB0eSgpKTsKIH0KIApAQCAtNjUsMTAyICs1OCw4NCBAQCB2b2lkIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6aW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRC
YXNlKiBjbAogICAgIG1fY2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKIH0KIAotLy8gV2ViQ29u
dGV4dFN1cHBsZW1lbnQKLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NQb29s
RGVzdHJveWVkKCkKLXsKLSAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnM7Ci0gICAgZm9y
IChhdXRvJiBvYnNlcnZlclNldCA6IG1fY29va2llT2JzZXJ2ZXJzLnZhbHVlcygpKSB7Ci0gICAg
ICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlclNldCkKLSAgICAgICAgICAgIG9ic2Vy
dmVycy5hcHBlbmQob2JzZXJ2ZXIpOwotICAgIH0KLQotICAgIGZvciAoYXV0byogb2JzZXJ2ZXIg
OiBvYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyLT5tYW5hZ2VyRGVzdHJveWVkKCk7Ci0KLSAg
ICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKQotewotfQot
Ci12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9j
ZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29u
dGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpyZWYoKTsKLX0KLQotdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAg
IEFQSTo6T2JqZWN0OjpkZXJlZigpOwotfQotCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7
Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3Jr
UHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92
ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9u
KHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9y
SG9zdG5hbWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGhvc3RuYW1lcykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vz
c1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklELCBob3N0bmFtZXMpKTsKKyAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhv
c3RuYW1lcyksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxs
Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCkpOworICAgIGlmICht
X25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCksIDApOwogfQog
CiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgQ29va2llJiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJv
Y2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5z
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tp
ZShzZXNzaW9uSUQsIGNvb2tpZSksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKV0oKSBtdXRhYmxlIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAg
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKLSAg
ICB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNN
b2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2FsbFRpbWUgdGltZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYg
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwot
ICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0
aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxs
YmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29r
aWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tp
ZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAg
IGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNh
bGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0
aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBV
UkwmIG1haW5Eb2N1bWVudFVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNr
RnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNv
b2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7
CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llcyhz
ZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAK
IHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBj
YWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tpZXMoc2Vz
c2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24o
eyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAg
ICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rp
b24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRDb29r
aWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxz
ZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVs
YXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNl
cnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNz
KQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwg
MCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVPYnNlcnZlckNh
bGxiYWNrKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPiYm
IGNhbGxiYWNrKQpAQCAtMjExLDE4ICsxODYsMTggQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OmNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiB2b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Np
b25JRCwgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotI2lmIFVTRShTT1VQKQotICAgIHByb2Nlc3NQ
b29sKCktPnNldEluaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYK
LQotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24o
KTsKIH0KIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFj
Y2VwdFBvbGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFj
a0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzZXNzaW9uSUQp
LCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNr
RnVuY3Rpb24oSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6TmV2ZXIpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tp
ZU1hbmFnZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdl
clByb3h5LmgKaW5kZXggMGJkZmMwZDRlNDdjLi42ZjUxZjAzZTVjMGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCkBAIC01NiwxMSArNTYs
OSBAQCB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJyYXlDYWxsYmFjazsK
IHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k+
IEhUVFBDb29raWVBY2NlcHRQb2xpY3lDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNr
PGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jj4gR2V0Q29va2llc0NhbGxiYWNrOwogCi1j
bGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6
T2JqZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHVibGljIFdlYkNvbnRleHRTdXBwbGVtZW50
LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNvb2tpZU1h
bmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKLQotICAgIHN0YXRpYyBSZWY8V2ViQ29v
a2llTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBzdGF0aWMgUmVm
PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdv
cmtQcm9jZXNzKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94eShu
ZXR3b3JrUHJvY2VzcykpOyB9CiAgICAgdmlydHVhbCB+V2ViQ29va2llTWFuYWdlclByb3h5KCk7
CiAKICAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5hZ2VyQ2xpZW50
QmFzZSopOwpAQCAtMTA0LDE3ICsxMDIsMTAgQEAgcHVibGljOgogICAgIHVzaW5nIEFQSTo6T2Jq
ZWN0OjpkZXJlZjsKIAogcHJpdmF0ZToKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoV2ViUHJv
Y2Vzc1Bvb2wqKTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoTmV0d29ya1Byb2Nlc3NQcm94
eSYpOwogCiAgICAgdm9pZCBjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEKTsKIAotICAg
IC8vIFdlYkNvbnRleHRTdXBwbGVtZW50Ci0gICAgdm9pZCBwcm9jZXNzUG9vbERlc3Ryb3llZCgp
IG92ZXJyaWRlOwotICAgIHZvaWQgcHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94eSopIG92
ZXJyaWRlOwotICAgIHZvaWQgcHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkZXJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0KICAgICAvLyBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlcgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAKQEAgLTEyNSw2ICsxMTYsNyBAQCBw
cml2YXRlOgogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9pZCAo
KT4+IG1fbGVnYWN5Q29va2llT2JzZXJ2ZXJzOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQs
IEhhc2hTZXQ8T2JzZXJ2ZXIqPj4gbV9jb29raWVPYnNlcnZlcnM7CiAKKyAgICBXZWFrUHRyPE5l
dHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAgICAgV2ViQ29va2llTWFuYWdl
clByb3h5Q2xpZW50IG1fY2xpZW50OwogCiAjaWYgVVNFKFNPVVApCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAwODJhNWQ3MzAwMTcuLjk3MTE1NzA5NmQ2NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0xNzQ2LDcgKzE3
NDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbihib29s
IGNvbnRyb2xsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oY29udHJvbGxlZCkpOwotICAgIG1fcHJvY2Vz
cy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24obV93ZWJzaXRlRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9sbGVkQnlBdXRvbWF0aW9uKSk7CisgICAgd2Vi
c2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24obV93ZWJzaXRlRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9sbGVkQnlBdXRvbWF0aW9uKSwgMCk7CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5OjpjcmVhdGVJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJn
ZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCkBAIC0zMjEwLDExICsz
MjEwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmlzRm9yY2VkSW50b0FwcEJvdW5kTW9kZVRlc3Rp
bmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4KIHZvaWQgV2ViUGFnZVByb3h5OjpkaXNh
YmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50SW5OZXR3b3JrUHJvY2VzcygpCiB7CiAjaWYgRU5B
QkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2Uo
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCks
IDApOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVu
dCgpLCAwKTsKICNlbmRpZgogfQogCkBAIC0zMjIzLDEzICszMjE5LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpICYmICFQTEFURk9STShN
QUNDQVRBTFlTVCkKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBzZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50
T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCks
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUo
KS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRp
ZgpAQCAtNDQyMyw3ICs0NDEzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnByZWNvbm5lY3RUbyhj
b25zdCBVUkwmIHVybCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBzdG9yZWRDcmVkZW50
aWFsc1BvbGljeSA9IG1fY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UgPyBXZWJDb3JlOjpTdG9yZWRD
cmVkZW50aWFsc1BvbGljeTo6VXNlIDogV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6
OkRvTm90VXNlOwotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQo
KSwgdXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW4oKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9j
ZXNzKCkucHJlY29ubmVjdFRvKHNlc3Npb25JRCgpLCBpZGVudGlmaWVyKCksIHdlYlBhZ2VJRCgp
LCB1cmwsIHVzZXJBZ2VudCgpLCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0aW5n
VG9BcHBCb3VuZERvbWFpbigpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldENhblVzZUNy
ZWRlbnRpYWxTdG9yYWdlKGJvb2wgY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UpCkBAIC00NzE5LDcg
KzQ3MDksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKEZyYW1l
SWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUluZm9EYXRhJgogICAgICAgICAgICAgUmVnaXN0cmFi
bGVEb21haW4gY3VycmVudERvbWFpbiB7IGN1cnJlbnRSZXF1ZXN0LnVybCgpIH07CiAgICAgICAg
ICAgICBVUkwgcmVxdWVzdGVyVVJMIHsgVVJMKCksIHJlcXVlc3Rlck9yaWdpbi50b1N0cmluZygp
IH07CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnREb21haW4ubWF0Y2hlcyhyZXF1ZXN0ZXJVUkwp
KQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5kaWRDb21taXRDcm9z
c1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9LCBjdXJyZW50RG9tYWluLCBuYXZp
Z2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50aWZpZXIsIG1fd2ViUGFnZUlEKTsKKyAgICAgICAg
ICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuZGlkQ29tbWl0Q3Jv
c3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwgY3VycmVudERvbWFpbiwgbmF2
aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dlYlBhZ2VJRCk7CiAgICAgICAg
IH0KICNlbmRpZgogICAgIH0KQEAgLTQ3NTcsNyArNDc0Nyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpkaWRDb21taXRMb2FkRm9yRnJhbWUoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIEZyYW1lSW5m
b0RhdGEmCiAgICAgaWYgKG5hdmlnYXRpb24gJiYgZnJhbWUtPmlzTWFpbkZyYW1lKCkpIHsKICAg
ICAgICAgaWYgKGF1dG8mIGFkQ2xpY2tBdHRyaWJ1dGlvbiA9IG5hdmlnYXRpb24tPmFkQ2xpY2tB
dHRyaWJ1dGlvbigpKSB7CiAgICAgICAgICAgICBpZiAoYWRDbGlja0F0dHJpYnV0aW9uLT5kZXN0
aW5hdGlvbigpLm1hdGNoZXMoZnJhbWUtPnVybCgpKSkKLSAgICAgICAgICAgICAgICBtX3Byb2Nl
c3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTdG9yZUFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNl
c3Npb25JRCgpLCAqYWRDbGlja0F0dHJpYnV0aW9uKSk7CisgICAgICAgICAgICAgICAgd2Vic2l0
ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlN0b3JlQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklE
KCksICphZENsaWNrQXR0cmlidXRpb24pLCAwKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTM3
MSw3ICs1MzYxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25z
dCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgY29uc3QgVVJMJiBwYWcKICAgICBpZiAodGFyZ2V0SG9z
dC5pc0VtcHR5KCkgfHwgbWFpbkZyYW1lSG9zdC5pc0VtcHR5KCkgfHwgdGFyZ2V0SG9zdCA9PSBz
b3VyY2VVUkwuaG9zdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnByb2Nl
c3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgUmVn
aXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBwYWdlVVJM
IH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVkaXJlY3QsIGZyYW1lLmlz
TWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRGaW5pc2hEb2N1bWVudExv
YWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyKSk7
CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1lTmF2aWdhdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNl
c3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHRhcmdldFVSTCB9LCBSZWdpc3RyYWJsZURv
bWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBzb3VyY2VVUkwgfSwgaXNSZWRp
cmVjdCwgZnJhbWUuaXNNYWluRnJhbWUoKSwgTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2RpZEZp
bmlzaERvY3VtZW50TG9hZEZvck1haW5GcmFtZVRpbWVzdGFtcCwgd2FzUG90ZW50aWFsbHlJbml0
aWF0ZWRCeVVzZXIpLCAwKTsKIH0KICNlbmRpZgogCkBAIC05OTk2LDU4ICs5OTg2LDI3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpzeXN0ZW1QcmV2aWV3QWN0aW9uVHJpZ2dlcmVkKGNvbnN0IFdlYkNv
cmU6OlN5c3RlbVByZXZpZXdJbmZvCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0
dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNz
LT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3Jr
UHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURh
dGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUt
PnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
cyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
IGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lv
bklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9j
ZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJB
ZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0g
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9y
VGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1ZSksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdv
cmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcobV93ZWJzaXRlRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFsdWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9u
VVJMRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1f
cHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICgh
bmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1fd2Vic2l0ZURh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9u
Q29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwg
dXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3Rp
bmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCku
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFya0FkQ2xpY2tB
dHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lv
bklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKICNpZiBFTkFCTEUoU1BF
RUNIX1NZTlRIRVNJUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNw
cAppbmRleCBkOTI2YjMzY2JkZjIuLjcxZjFmNjM4ZGMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtNDUsNyArNDUsNiBAQAogI2luY2x1ZGUgIkxl
Z2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nSW5pdGlhbGl6YXRpb24uaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5m
by5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5j
bHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNz
UHJveHkuaCIKQEAgLTE0Myw4ICsxNDIsMTAgQEAKICNlbmRpZgogCiAjZGVmaW5lIFdFQlBST0NF
U1NQT09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhjaGFubmVs
LCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVm
aW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhjaGFubmVsLCBmbXQsIC4uLikg
UkVMRUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwgIyNfX1ZBX0FSR1Nf
XykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoY2hhbm5lbCwgZm10
LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29sOjoi
IGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFT
RV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfSUYoc2Vzc2lv
bklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNz
UG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIFdFQlBST0NFU1NQT09M
X1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNF
X0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIGNoYW5uZWwsICJX
ZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIsNiArMjMzLDExIEBAIHN0YXRpYyBI
YXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgZ2xvYmFsVVJMU2NoZW1l
c1dpdGhDdXN0b21Qcm90CiAgICAgcmV0dXJuIHNldDsKIH0KIAorVmVjdG9yPFN0cmluZz4gV2Vi
UHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpCit7Cisg
ICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMoKSk7Cit9CisKIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlBy
b2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICA6IG1fY29uZmlndXJh
dGlvbihjb25maWd1cmF0aW9uLmNvcHkoKSkKICAgICAsIG1fZGVmYXVsdFBhZ2VHcm91cChXZWJQ
YWdlR3JvdXA6OmNyZWF0ZSgpKQpAQCAtMjM5LDcgKzI0NSw2IEBAIFdlYlByb2Nlc3NQb29sOjpX
ZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlv
bikKICAgICAsIG1fYXV0b21hdGlvbkNsaWVudChtYWtlVW5pcXVlPEFQSTo6QXV0b21hdGlvbkNs
aWVudD4oKSkKICAgICAsIG1fZG93bmxvYWRDbGllbnQobWFrZVVuaXF1ZVJlZjxBUEk6OkRvd25s
b2FkQ2xpZW50PigpKQogICAgICwgbV9oaXN0b3J5Q2xpZW50KG1ha2VVbmlxdWU8QVBJOjpMZWdh
Y3lDb250ZXh0SGlzdG9yeUNsaWVudD4oKSkKLSAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50KG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkpCiAg
ICAgLCBtX3Zpc2l0ZWRMaW5rU3RvcmUoVmlzaXRlZExpbmtTdG9yZTo6Y3JlYXRlKCkpCiAjaWYg
UExBVEZPUk0oTUFDKQogICAgICwgbV9oaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxl
cihtYWtlVW5pcXVlPEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyPigqdGhpcykp
CkBAIC0yNjcsOSArMjcyLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogI2VuZGlmCiAgICAgfSk7
CiAKLSAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSAmJiBXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3Jl
ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCk7Ci0KICAgICBm
b3IgKGF1dG8mIHNjaGVtZSA6IG1fY29uZmlndXJhdGlvbi0+YWx3YXlzUmV2YWxpZGF0ZWRVUkxT
Y2hlbWVzKCkpCiAgICAgICAgIG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0Fsd2F5c1JldmFsaWRhdGVk
LmFkZChzY2hlbWUpOwogCkBAIC0yODUsNyArMjg3LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlBy
b2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQog
ICAgIGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9URTogVGhlc2Ugc3ViLW9iamVjdHMg
bXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VSZWNlaXZlck1hcC4uCi0gICAgYWRk
U3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxX
ZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdlYk5vdGlm
aWNhdGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKQEAgLTM0
Miw5ICszNDMsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKCkKICAgICBwcm9j
ZXNzUG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAotICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zaHV0RG93blByb2Nlc3MoKTsKLQog
I2lmIEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9jZXNzZXNVc2luZ0dhbWVwYWRzLmlz
RW1wdHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnByb2Nlc3NQ
b29sU3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAtNDAyLDE2ICs0MDAsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6
OkF1dG9tYXRpb25DbGllbnQ+JgogICAgICAgICBtX2F1dG9tYXRpb25DbGllbnQgPSBXVEZNb3Zl
KGF1dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkKLXsKLSNp
ZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQotICAgIGlmICghY3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCA9IFdURk1vdmUo
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsKLSNlbmRpZgotfQotCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3Qg
U3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIpCiB7CiAgICAg
Ly8gR3VhcmQgYWdhaW5zdCBBUEkgbWlzdXNlLgpAQCAtNDIxLDExICs0MDksNiBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIo
Y29uc3QgU3RyaW5nJiBjdQogICAgIG1fY29uZmlndXJhdGlvbi0+c2V0Q3VzdG9tV2ViQ29udGVu
dFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRl
bnRpZmllcik7CiB9CiAKLUlQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtp
bmdQcm9jZXNzQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNv
bm5lY3Rpb24oKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKHZv
aWQqIGNvbnRleHQpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViUHJvY2Vzc1Bvb2wqPihjb250ZXh0
KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7CkBAIC00MzUsOCArNDE4LDcgQEAgdm9pZCBXZWJQcm9jZXNz
UG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKCkpOwogI2lmIFVT
RShTT1VQKQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdl
c0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CisgICAgV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2VyUHJlZmVy
cmVkTGFuZ3VhZ2VzKCkpLCAwKTsKICNlbmRpZgogfQogCkBAIC00NDksNyArNDMxLDggQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6ZnVsbEtleWJvYXJkQWNjZXNzTW9kZUNoYW5nZWQoYm9vbCBmdWxs
S2V5Ym9hcmRBY2Nlc3NFbmFibGUKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRNZW1vcnlQcmVz
c3VyZUV2ZW50KGJvb2wgaXNDcml0aWNhbCkKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVz
c2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2ZW50KGlz
Q3JpdGljYWwpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6QXV4aWxp
YXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCkpOwor
ICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5l
dHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGlj
YWwpLCAwKTsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBQbHVnaW5Qcm9j
ZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuc2VuZE1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNh
bCk7CiAjZW5kaWYKQEAgLTQ3NCwyNzUgKzQ1Nyw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNj
cmVlblByb3BlcnRpZXNTdGF0ZUNoYW5nZWQoKQogI2VuZGlmCiB9CiAKLU5ldHdvcmtQcm9jZXNz
UHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0
b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQg
Zm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgotICAgIC8vIFdl
IHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xhdGlvbiBj
aGVjayBvbiBvdXIgQVBJcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsKLSAgICAgICAg
Y2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyldIHsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgIH0p
OwotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0g
ICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJz
aXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQ
ZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJv
Y2VzczsKLSAgICB9Ci0KLSAgICBhdXRvIG5ldHdvcmtQcm9jZXNzID0gbWFrZVVuaXF1ZTxOZXR3
b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7Ci0KLSAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycyBwYXJhbWV0ZXJzOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVz
ID0gY29weVRvVmVjdG9yKG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMoKSk7Ci0g
ICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotI2lmIFBM
QVRGT1JNKENPQ09BKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50
aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24oKS5zb3VyY2VBcHBsaWNh
dGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25T
ZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0aW9uKCku
c291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKCk7Ci0jZW5kaWYKLSAgICB9Ci0K
LSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xl
dG9uKCkuY2FjaGVNb2RlbCgpOwotCi0gICAgZm9yIChhdXRvJiBzY2hlbWUgOiBnbG9iYWxVUkxT
Y2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAgICAgcGFyYW1ldGVycy51
cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKLQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIGlmICgh
Y29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0
b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
Ci0gICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpu
ZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb250YWluZXJDYWNoZXNEaXJl
Y3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBTdHJpbmcg
cGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRsZURpcmVj
dG9yeSgpOwotICAgIGlmICghcGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVjdG9yeSwg
U2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50QnVuZGxl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoZW1w
dHlTdHJpbmcoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAgICBwYXJhbWV0ZXJzLnVy
bFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0
dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmUoKSk7Ci0gICAgcGFy
YW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9s
aWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hl
bWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KCkpOwotICAgIHBh
cmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVjdG9yKExlZ2Fj
eUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTG9jYWwoKSk7
Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3MgPSBjb3B5VG9W
ZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVy
QXNOb0FjY2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIC8vICoq
KioqKioqKgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNoYW5nZSB0aGUgZGlyZWN0b3J5IHN0
cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlzayB3aXRob3V0IGZpcnN0IGNvbnN1
bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjovL3Byb2JsZW0vMTc0NTQ3MTI+KQot
ICAgIC8vICoqKioqKioqKgotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
OwotICAgIAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5p
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y3JlYXRlU3ltTGlua0ZvckZp
bGVVcGdyYWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLnNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJl
c29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAgIGlmICghcGFy
YW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KQotICAgICAgICBwYXJh
bWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSAgV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgp
OwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnksIHBhcmFtZXRl
cnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0j
ZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0
b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExvY2FsU3RvcmFnZURpcmVjdG9yeSgp
IDogbnVsbFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQotICAgICAg
ICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1
bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2FsU3RvcmFnZURpcmVjdG9y
eTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rv
cnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRv
IGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURh
dGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0gICAgaWYg
KCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjYWNoZVN0b3JhZ2VEaXJl
Y3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBXVEZNb3ZlKGNhY2hlU3Rv
cmFnZURpcmVjdG9yeSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKG1fd2Vic2l0ZURhdGFT
dG9yZSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IG1fd2Vic2l0
ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7Ci0g
ICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhp
c3RzKCkpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1ldGVycygpLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5kaXJl
Y3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5Lmlz
RW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdy
aXRlRGlyZWN0b3J5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnksIHJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYm9vbCBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAgYm9vbCBzaG91bGRJbmNs
dWRlTG9jYWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQotICAgIFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgdGhpcmRQYXJ0eUNv
b2tpZUJsb2NraW5nTW9kZSA9IFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU6
OkFsbDsKLSAgICBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCBzYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRFbmFibGVkOjpObzsKLSNlbmRpZgotICAgIFdlYkNvcmU6OkZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gV2Vi
Q29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tpZXM7Ci0g
ICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWlu
OwotICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IGFwcEJvdW5kRG9tYWlu
czsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBtYW51YWxQcmV2YWxlbnRSZXNvdXJj
ZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQgPSBk
b2VzQXBwSGF2ZUlUUEVuYWJsZWQoKTsKLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUgJiYg
IXdpdGhXZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAg
ICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVk
OwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlIGlmICht
X3dlYnNpdGVEYXRhU3RvcmUgJiYgIW1fd2Vic2l0ZURhdGFTdG9yZS0+aXNJdHBTdGF0ZUV4cGxp
Y2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90
Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5zZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsK
LSAgICB9IGVsc2UgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMo
KSAmJiAhV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5pc0l0cFN0YXRlRXhw
bGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBt
X3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGF0YVN0b3JlKCktPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZQotICAgICAgICBlbmFibGVSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSNlbmRpZgotCi0gICAgaWYg
KHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRp
c3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gd2l0aFdlYnNpdGVEYXRh
U3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNlbmRpZgotICAgICAgICBp
ZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICAgICAgYXV0byBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygp
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2Nh
bGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAgICAgIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdNb2RlOwotI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0aGlyZFBhcnR5Q29va2ll
QmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7Ci0gICAgICAgICAg
ICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAgICAg
ICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0aW9u
RG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWluczsK
LSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVudFJl
c291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+
cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhXZWJz
aXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAg
IAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSB3aXRoV2Vic2l0
ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYg
KCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5l
dHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNh
bmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IGF1dG8mIGhz
dHNTdG9yYWdlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSFNUU1N0
b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURpcmVjdG9yeS5pc051
bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBoc3RzU3Rv
cmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRl
LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0g
ICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBtX3dl
YnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNlbmRpZgot
ICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICAgICAg
YXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBhcmFt
ZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91bGRJbmNs
dWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3Q7Ci0gICAgICAgICAgICBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZURlYnVnTW9kZTsKLSNp
ZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICAgICAgdGhpcmRQYXJ0
eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOwotICAg
ICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOwot
ICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnN0YW5kYWxvbmVBcHBs
aWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5kRG9tYWlucyA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5hcHBCb3VuZERv
bWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5tYW51YWxQcmV2
YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0KLSAg
ICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIW5ldHdv
cmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0Nh
Y2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4
dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgYXV0byYgaHN0c1N0b3Jh
Z2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSFNUU1N0b3JhZ2VEaXJl
Y3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkgewot
ICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBoc3RzU3RvcmFnZURpcmVj
dG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShoc3RzU3Rv
cmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5o
c3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0
cygpKQotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IFdlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdv
cmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4
dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lmIEhBVkUoQ0ZORVRXT1JLX0FMVEVSTkFUSVZFX1NF
UlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6Omh0dHAzRW5hYmxlZCgpKSB7Ci0gICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2VzRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5h
bHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHAzRW5hYmxlZCA9IHRydWU7
Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBpc0l0cFN0YXRlRXhwbGljaXRseVNldCA9IGZhbHNl
OwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzID0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewotICAgICAgICBXVEZNb3ZlKHJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAgICBXVEZNb3ZlKHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpLAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0YXRlRXhwbGljaXRseVNldCwKLSAgICAgICAgZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCwKLSAgICAgICAgc2hvdWxk
SW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICB0
aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlLAotICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50RW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluLAotICAgICAgICBh
cHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlLAotICAgIH07
Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmljIHBhcmFtZXRlcnMKLSAgICBwbGF0
Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKLQotICAgIC8vIEluaXRp
YWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJz
KSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3b3JrUHJvY2Vzc0xhdGVuY3lRT1Mo
KSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAwKTsKLSNlbmRpZgotCi0gICAgbmV0
d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKLQotICAgIGlmICh3aXRoV2Vi
c2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtl
UmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9y
ZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUg
bmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUgc2Vzc2lvbnMgdGhhdCBoYXZlIGJl
ZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAgICBmb3IgKGF1dG8mIHNlc3Npb25J
RCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHdl
YnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRh
U3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICB9Ci0KLSAgICBtX25ldHdvcmtQ
cm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0gICAgcmV0dXJuICptX25ldHdvcmtQ
cm9jZXNzOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQo
TmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSkKIHsKLSAgICBBU1NFUlQo
bV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJvY2Vzc1Byb3h5ID09IG1f
bmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9z
dXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+cHJvY2Vzc0RpZENsb3Nl
KCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzUxLDkgKzQ2Nyw2IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3
b3JrUHJvY2Vzc1ByCiAgICAgaWYgKG1fYXV0b21hdGlvblNlc3Npb24pCiAgICAgICAgIG1fYXV0
b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAgLy8gTGVhdmUgdGhlIHByb2Nlc3Mg
cHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28gdGhhdCB0aGUgY2xpZW50IGNvdWxk
IHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51
bGxwdHI7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQogCkBAIC03NjQsMjAg
KzQ3Nyw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9jZXNzQ3Jhc2hl
ZChXZWJQcm9jZXNzUHJveHkmIHByb3h5KQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nl
c3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbih3
ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgd2Vi
UHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwgcmVwbHkgPSBXVEZN
b3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsKLSAgICAgICAgaWYg
KFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc1ZhbGlkKGNvbm5lY3Rpb25J
bmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5ICYmIHdlYWtUaGlzKSkgewotICAg
ICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoUHJvY2VzcywgImdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0IGF0dGVtcHQsIHJldHJ5aW5nIik7
Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3ZWJQcm9jZXNzUHJveHks
IFdURk1vdmUocmVwbHkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICByZXBseShjb25uZWN0aW9uSW5mbyk7Ci0gICAgfSk7Ci19Ci0KICNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpncHVQcm9jZXNzQ3Jhc2hlZChQcm9jZXNzSUQg
aWRlbnRpZmllcikKIHsKQEAgLTgwMSwyMyArNTAwLDI2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OmdldEdQVVByb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1Byb3h5
LCBNCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJQcm9jZXNzUG9vbDo6c191c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzID0gZmFsc2U7CisKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0
d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJveHksIFJlZ2lzdHJhYmxlRG9tYWlu
JiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIEFTU0VSVF9VTlVT
RUQocHJveHksICZwcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsKKyAgICBhdXRvKiB3
ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JT
ZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpCisgICAgICAg
IHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCku
cHRyKCk7CisgICAgaWYgKCFwcm9jZXNzUG9vbHMoKS5zaXplKCkpCisgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxSZWY8V2ViUHJvY2Vzc1Bvb2w+PiBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Bv
b2woV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6
Y3JlYXRlKCkuZ2V0KCkpKTsKIAotICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRl
RGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lv
bklEKTsKLQotICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBpZiAoIW1fd2Vi
c2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgICAgICB3ZWJz
aXRlRGF0YVN0b3JlID0gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOwotICAgIH0KKyAgICAvLyBB
cmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCB0byBob3N0IHRoZSBzZXJ2
aWNlIHdvcmtlciBwcm9jZXNzLgorICAgIGF1dG8qIHByb2Nlc3NQb29sID0gcHJvY2Vzc1Bvb2xz
KClbMF07CisgICAgQVNTRVJUKHByb2Nlc3NQb29sKTsKIAogICAgIFdlYlByb2Nlc3NQcm94eSog
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eSB7IG51bGxwdHIgfTsKLSAgICBpZiAoIW1fdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgewotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3Mg
OiBtX3Byb2Nlc3NlcykgewotICAgICAgICAgICAgaWYgKHByb2Nlc3MgPT0gbV9wcmV3YXJtZWRQ
cm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkKKworICAgIGlmICghc191
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7CisgICAgICAgIGZvciAoYXV0byYgcHJv
Y2VzcyA6IHByb2Nlc3NQb29sLT5tX3Byb2Nlc3NlcykgeworICAgICAgICAgICAgaWYgKHByb2Nl
c3MgPT0gcHJvY2Vzc1Bvb2wtPm1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9jZXNzLT5pc0R1bW15
UHJvY2Vzc1Byb3h5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBp
ZiAoJnByb2Nlc3MtPndlYnNpdGVEYXRhU3RvcmUoKSAhPSB3ZWJzaXRlRGF0YVN0b3JlKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODI1LDM1ICs1MjcsMzUgQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
KE5ldHdvcmtQcm8KICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgc2Vy
dmljZVdvcmtlclByb2Nlc3NQcm94eSA9IHByb2Nlc3MuZ2V0KCk7Ci0gICAgICAgICAgICBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyh1c2VyQ29udGVudENv
bnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CisgICAgICAgICAgICBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyhwcm9jZXNzUG9vbC0+
dXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkpOwogCi0g
ICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFNlcnZpY2VX
b3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3Mg
cmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0lcCwgUElEPSVkKSIsIHNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nl
c3NJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0df
SUZfQUxMT1dFRF9TVEFUSUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRD
b25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdlYiBwcm9jZXNz
IChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eSkgewotICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6
Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4p
LCAqd2Vic2l0ZURhdGFTdG9yZSk7CisgICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5ID0gV2Vi
UHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2VycygqcHJvY2Vzc1Bvb2wsIFdURk1v
dmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CiAgICAgICAgIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzUHJveHkgPSBuZXdQcm9jZXNzUHJveHkucHRyKCk7CiAKLSAgICAgICAg
V0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNlV29ya2VyLCAiZXN0
YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEg
bmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VX
b3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVu
dGlmaWVyKCkpOworICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VE
X1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25U
b05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHBy
b2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCi0gICAgICAgIGluaXRpYWxp
emVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFTdG9yZSk7Ci0gICAg
ICAgIG1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOworICAgICAg
ICBwcm9jZXNzUG9vbC0+aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJvY2Vzc1Byb3h5LCB3
ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2VzLmFwcGVu
ZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOwogICAgIH0KIAotICAgIEFTU0VSVCghbV9zZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSk7
Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmFkZCgqc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eSk7CisgICAgQVNTRVJUKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29udGFpbnMoKnNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpKTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCku
YWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKIAotICAgIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KG1fc2VydmljZVdvcmtlclBy
ZWZlcmVuY2VzID8gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IG1fZGVmYXVs
dFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxsKCkpCi0gICAg
ICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQo
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5
LT5lc3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4dChwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29y
a2VyUHJlZmVyZW5jZXMgPyBwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMu
dmFsdWUoKSA6IHByb2Nlc3NQb29sLT5tX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCku
c3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmICghcHJvY2Vzc1Bv
b2wtPm1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgc2VydmljZVdv
cmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChwcm9jZXNzUG9vbC0+
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVt
b3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQog
ewotICAgIEFTU0VSVChtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFpbnMocHJvY2Vzcykp
OwotICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CisgICAgQVNT
RVJUKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlucyhwcm9jZXNzKSk7CisgICAgc2Vy
dmljZVdvcmtlclByb2Nlc3NlcygpLnJlbW92ZShwcm9jZXNzKTsKIH0KICNlbmRpZgogCkBAIC05
MjIsNyArNjI0LDcgQEAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OnRy
eVRha2VQcmV3YXJtZWRQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUKICNpZiBQTEFURk9STShHVEsp
IHx8IFBMQVRGT1JNKFdQRSkKICAgICAvLyBJbiBwbGF0Zm9ybXMgdXNpbmcgQnViYmxld3JhcCBm
b3Igc2FuZGJveGluZywgcHJld2FybWVkIHByb2Nlc3MgaXMgbGF1bmNoZWQgdXNpbmcgdGhlIFdl
YlByb2Nlc3NQb29sIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSwKICAgICAvLyBzbyB3ZSBkb24n
dCB1c2UgaXQgaW4gY2FzZSBvZiB1c2luZyBhIGRpZmZlcmVudCBXZWJzaXRlRGF0YVN0b3JlLgot
ICAgIGlmIChtX3NhbmRib3hFbmFibGVkICYmIG1fd2Vic2l0ZURhdGFTdG9yZSAmJiBtX3dlYnNp
dGVEYXRhU3RvcmUuZ2V0KCkgIT0gJndlYnNpdGVEYXRhU3RvcmUpCisgICAgaWYgKG1fc2FuZGJv
eEVuYWJsZWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogI2VuZGlmCiAKQEAgLTEwMzIsOCAr
NzM0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MoV2Vi
UHJvY2Vzc1Byb3h5JiBwcm9jZXNzLCBXZWJzaXRlRGEKICAgICAgICAgcHJvY2Vzcy5pc1Jlc3Bv
bnNpdmUoW2luaXRpYWxpemF0aW9uQWN0aXZpdHkgPSBXVEZNb3ZlKGluaXRpYWxpemF0aW9uQWN0
aXZpdHkpXSAoYm9vbCkgeyB9KTsKICAgICB9KTsKIAotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7Ci0KICAgICBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CiAKICAg
ICBwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aCA9IG1fcmVzb2x2ZWRQYXRocy5pbmplY3Rl
ZEJ1bmRsZVBhdGg7CkBAIC0xMTk4LDkgKzg5OCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBy
b2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQogICAgICAg
ICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPmlnbm9yZVRpbWVvdXRzRm9yVGVzdGluZygpOwogCiAg
ICAgbV9jb25uZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5lY3Rpb24odGhpcywgcHJvY2Vzcy0+
d2ViQ29ubmVjdGlvbigpKTsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAg
IG1fd2Vic2l0ZURhdGFTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5KiBwcm9j
ZXNzKQpAQCAtMTI5NSwxMCArOTkyLDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJvY2Vzc1Bv
b2w6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSToKICAgICBp
ZiAoIXBhZ2VDb25maWd1cmF0aW9uLT53ZWJzaXRlRGF0YVN0b3JlKCkpIHsKICAgICAgICAgLy8g
V2UgdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBkZWZhdWx0IGRhdGEgc3RvcmUgYXMgbG9uZyBh
cyBwb3NzaWJsZS4KICAgICAgICAgLy8gQnV0IGlmIHRoZXJlIGlzIGFuIGF0dGVtcHQgdG8gY3Jl
YXRlIGEgd2ViIHBhZ2Ugd2l0aG91dCBhbnkgc3BlY2lmaWVkIGRhdGEgc3RvcmUsIHRoZW4gd2Ug
aGF2ZSB0byBjcmVhdGUgaXQuCi0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlKQotICAg
ICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0KLSAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNl
dFdlYnNpdGVEYXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsKKyAgICAgICAgcGFn
ZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCkpOwogICAgIH0KIAogICAgIFJlZlB0cjxXZWJQ
cm9jZXNzUHJveHk+IHByb2Nlc3M7CkBAIC0xMzI5LDcgKzEwMjMsNyBAQCBSZWY8V2ViUGFnZVBy
b3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50
LCBSZWY8QVBJOgogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBpZiAoIW1fc2Vydmlj
ZVdvcmtlclByZWZlcmVuY2VzKSB7CiAgICAgICAgIG1fc2VydmljZVdvcmtlclByZWZlcmVuY2Vz
ID0gcGFnZS0+cHJlZmVyZW5jZXNTdG9yZSgpOwotICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VX
b3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgICAgICBmb3IgKGF1
dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQogICAg
ICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclByZWZlcmVu
Y2VzU3RvcmUoKm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKTsKICAgICB9CiAgICAgaWYgKHVz
ZXJDb250ZW50Q29udHJvbGxlcikKQEAgLTEzNTYsNyArMTA1MCw3IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiB1c2VyQWdl
bnQpCiAgICAgaWYgKG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9PSB1c2VyQWdlbnQpCiAgICAg
ICAgIHJldHVybjsKICAgICBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQgPSB1c2VyQWdlbnQ7Ci0g
ICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtlclByb2Nl
c3NlcykKKyAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtl
clByb2Nlc3NlcygpKQogICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy5zZXRTZXJ2aWNlV29y
a2VyVXNlckFnZW50KG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CiB9CiAjZW5kaWYKQEAgLTEz
NjUsMTUgKzEwNTksNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdlQmVnaW5Vc2luZ1dlYnNp
dGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSQogewogICAgIGF1dG8gcmVz
dWx0ID0gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmFkZChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIEhh
c2hTZXQ8V2ViUGFnZVByb3h5SWRlbnRpZmllcj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChwYWdl
SUQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Ci0KLSAg
ICBhdXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKLSAgICBpZiAoc2Vzc2lv
bklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgQVNT
RVJUKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRhU3RvcmUucGFyYW1ldGVycygpLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsKLSAgICAgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFk
ZFNlc3Npb24obWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIGRhdGFTdG9yZS5jbGVh
clBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnBhZ2VFbmRVc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmll
ciBwYWdlSUQsIFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKQEAgLTE0MDEsNyArMTA4Niw2
IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1BhZ2VzVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdl
YnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29s
Ojpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94eSogaW5p
dGlhdGluZ1BhZ2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5n
JiBzdWdnZXN0ZWRGaWxlbmFtZSkKIHsKICAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0gY3JlYXRl
RG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGluaXRpYXRpbmdQYWdlLCB7IH0pOwot
ICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKIAog
ICAgIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc0FwcEJvdW5kID0gTmF2
aWdhdGluZ1RvQXBwQm91bmREb21haW46Ok5vOwogICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewpA
QCAtMTQxMSwyNiArMTA5NSwyMyBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93
bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveAogI2VuZGlmCiAg
ICAgfQogCi0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgUmVzb3VyY2VSZXF1
ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQ
YXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxv
YWQgcmVxdWVzdC4KLSAgICAgICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3AgbGV2ZWwgZG9j
dW1lbnQncyBVUkwuCi0gICAgICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewotICAgICAgICAgICAg
VVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBh
Z2VMb2FkU3RhdGUoKS51cmwoKSB9OwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmly
c3RQYXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwpOwotICAgICAgICAgICAgdXBkYXRl
ZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVhbChpbml0aWF0
aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVx
dWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAg
ICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChpbml0aWF0aW5nUGFn
ZS0+dXNlckFnZW50Rm9yVVJMKHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsK
LSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOwotICAgICAg
ICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVz
ZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwotICAgICAgICB9Ci0g
ICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAgICAgIG5ldHdv
cmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVl
c3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3Qs
IGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3du
bG9hZFByb3h5OworICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsK
KyAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9y
aWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KKyAgICAvLyBXZSBzZXQgdGhlIHZh
bHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KKyAgICBpZiAoaW5pdGlhdGluZ1BhZ2Up
IHsKKyAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlh
dGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OworICAgICAgICB1cGRhdGVkUmVxdWVz
dC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7CisgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5p
dGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVx
dWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAg
ICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdlLT51
c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKKyAgICAgICAgdXBk
YXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7CisgICAgICAgIGlmICghdXBkYXRlZFJl
cXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQorICAg
ICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0
YW5kYXJkVXNlckFnZW50KCkpOwogICAgIH0KKyAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1RvcFNp
dGUoZmFsc2UpOworICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3QoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBk
b3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1
Z2dlc3RlZEZpbGVuYW1lKSwgMCk7CiAKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KQEAg
LTE0MzgsMTcgKzExMTksMTIgQEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25s
b2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3gKIERvd25sb2FkUHJv
eHkmIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRh
U3RvcmUsIFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IEFQSTo6RGF0YSYgcmVz
dW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIGF1dG8mIGRvd25sb2FkUHJveHkg
PSBjcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgUmVzb3VyY2VSZXF1ZXN0KCksIGluaXRp
YXRpbmdQYWdlLCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGRhdGFTdG9y
ZS5zZXNzaW9uSUQoKTsKIAogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlOwogICAgIGlmICghcGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFk
V3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgaWYgKG5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93bmxvYWRQcm94eS5kb3dubG9hZElE
KCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5OwotICAgIH0KLQorICAgIGRh
dGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpS
ZXN1bWVEb3dubG9hZChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIGRvd25sb2FkUHJveHkuZG93bmxv
YWRJRCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2FuZGJveEV4dGVuc2lv
bkhhbmRsZSksIDApOwogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQogCkBAIC0xNTE3LDEx
ICsxMTkzLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVmcmVzaFBsdWdpbnMoKQogCiAjZW5k
aWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAKLVByb2Nlc3NJRCBXZWJQcm9jZXNz
UG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCkKLXsKLSAgICByZXR1cm4gbV9uZXR3b3Jr
UHJvY2VzcyA/IG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCkgOiAwOwotfQot
CiBQcm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6OnByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyKCkK
IHsKICAgICByZXR1cm4gbV9wcmV3YXJtZWRQcm9jZXNzID8gbV9wcmV3YXJtZWRQcm9jZXNzLT5w
cm9jZXNzSWRlbnRpZmllcigpIDogMDsKQEAgLTE1NTgsMTQgKzEyMjksMTggQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZShjb25zdCBTdHJpbmcmIHVybFNj
aGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJV
UkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNz
YWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpKTsK
LSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJl
Z2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9y
ZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUm
IGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hl
bWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxT
Y2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeShjb25zdCBTdHJpbmcmIHVybFNj
aGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJV
UkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpOwogICAg
IHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hl
bWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpKTsKLSAgICBzZW5k
VG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJM
U2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSk7CisgICAg
V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdl
YnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVB
c0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsK
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZv
clVSTFNjaGVtZShjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE1NzgsMTQgKzEyNTMsMTgg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKGNvbnN0IFN0
cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24o
KS5yZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9j
ZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxT
Y2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpKTsKKyAgICBXZWJzaXRl
RGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAoV2Vic2l0ZURh
dGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwo
dXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lz
dGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBM
ZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNj
ZXNzKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNj
aGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFj
aFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9y
ZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSksIDAp
OworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFz
RGlzcGxheUlzb2xhdGVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTYwNiwxMCArMTI4
NSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZp
bmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAgIGds
b2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLmFkZCh1cmxTY2hlbWUp
OwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdpc3RlclNjaGVtZUZvckxlZ2Fj
eUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAoYXV0byBuZXR3b3Jr
UHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9j
b2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2Jh
bFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25zdCBTdHJpbmcmIHVy
bFNjaGVtZSkKQEAgLTE2MTgsMTAgKzEyOTUsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJl
Z2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbgog
ICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMoKS5yZW1vdmUodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7
Ci0gICAgfQorICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnVucmVn
aXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25lZChjb25z
dCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2NTUsMTYgKzEzMzAsMTggQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAKICAgICBzZW5k
VG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVN
b2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hl
TW9kZWwpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9y
ZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBk
YXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhDYWNoZU1vZGVs
IGNhY2hlTW9kZWwpCiB7CiAgICAgdXBkYXRlQmFja0ZvcndhcmRDYWNoZUNhcGFjaXR5KCk7CiAK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNs
eUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsKKyAgICBXZWJzaXRlRGF0YVN0b3Jl
Ojpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUm
IGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kU3lu
YyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9y
VGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJ
bnRlcnZhbCkKQEAgLTE2NzQsMTIgKzEzNTEsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRE
ZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dEludGVydmFsKQogCiBE
b3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRl
RGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2Vi
UGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5m
bykKIHsKLSAgICByZXR1cm4gZW5zdXJlTmV0d29ya1Byb2Nlc3MoJmRhdGFTdG9yZSkuY3JlYXRl
RG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQ
YWdlKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3Vu
ZChib29sIGJhY2tncm91bmQpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zeW50aGVz
aXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOworICAgIHJldHVybiBkYXRhU3RvcmUubmV0
d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgKnRoaXMsIHJlcXVl
c3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6YWRkTWVzc2FnZVJlY2VpdmVyKElQQzo6UmVjZWl2ZXJOYW1lIG1lc3NhZ2VSZWNlaXZlck5h
bWUsIElQQzo6TWVzc2FnZVJlY2VpdmVyJiBtZXNzYWdlUmVjZWl2ZXIpCkBAIC0xNzUwLDMwICsx
NDIyLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3RvcE1lbW9yeVNhbXBsZXIoKQogICAgIHNl
bmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U3RvcE1lbW9yeVNhbXBsZXIo
KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci12b2lkIFdlYlByb2Nl
c3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UsIFUmJiByZXBs
eSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5T
ZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhzdGQ6OmZv
cndhcmQ8VD4obWVzc2FnZSksIHN0ZDo6Zm9yd2FyZDxVPihyZXBseSksIDApOwotfQotCi12b2lk
IFdlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKGNvbnN0IFBBTDo6U2Vzc2lv
bklEJiBzZXNzaW9uSUQpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckNhY2hl
ZENyZWRlbnRpYWxzKHNlc3Npb25JRCksIDApOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjp0
ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCi17Ci0gICAgdGVybWluYXRlU2VydmljZVdvcmtlcnMo
KTsKLQotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOwotICAgIG1fbmV0d29ya1Byb2Nlc3Mg
PSBudWxscHRyOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250
ZW50UHJvY2Vzc2VzKCkKIHsKICAgICBWZWN0b3I8UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4+IHBy
b2Nlc3NlcyA9IG1fcHJvY2Vzc2VzOwpAQCAtMTc4MSw0MCArMTQyOSwxNSBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250ZW50UHJvY2Vzc2VzKCkKICAgICAgICAgcHJv
Y2Vzcy0+dGVybWluYXRlKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3Jr
UHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0g
ICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vz
cy0+c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5lbnQ6Ok5vLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3
b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKQotewotICAgIGlmICht
X25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJvY2Vzc1dp
bGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9v
bDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJv
Y2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsK
LX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMoKQogewog
I2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKTsKLSAgICB3aGlsZSAobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbXB1dGVT
aXplKCkpCi0gICAgICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5iZWdpbigpLT5kaXNhYmxl
U2VydmljZVdvcmtlcnMoKTsKKyAgICB3aGlsZSAoc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNv
bXB1dGVTaXplKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5iZWdpbigpLT5k
aXNhYmxlU2VydmljZVdvcmtlcnMoKTsKICNlbmRpZgogfQogCi12b2lkIFdlYlByb2Nlc3NQb29s
OjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVBdXRvbWF0aW9uQ2FwYWJp
bGl0aWVzKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKQEAgLTIwODks
MTUgKzE3MTIsMjEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVwb3J0V2ViQ29udGVudENQVVRp
bWUoU2Vjb25kcyBjcHVUaW1lLCB1aW50NjRfdCBhY3Rpdml0eVMKICNlbmRpZgogfQogCitXZWFr
SGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclBy
b2Nlc3NlcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYWtIYXNoU2V0PFdlYlBy
b2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICByZXR1cm4gcHJvY2Vzc2VzOworfQorCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucygpCiB7Ci0gICAgZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7CisgICAgV2Vic2l0ZURh
dGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW10gKFdlYnNpdGVEYXRhU3RvcmUmIGRh
dGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS51cGRhdGVQcm9j
ZXNzQXNzZXJ0aW9uKCk7CisgICAgfSk7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAg
IC8vIENoZWNrIG9uIG5leHQgcnVuIGxvb3Agc2luY2UgdGhlIHdlYiBwcm9jZXNzIHByb3h5IHRv
a2VucyBhcmUgcHJvYmFibHkgYmVpbmcgdXBkYXRlZC4KLSAgICBjYWxsT25NYWluUnVuTG9vcChb
dGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0gewotICAgICAgICBpZiAoIXdlYWtU
aGlzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgIGNhbGxPbk1haW5SdW5M
b29wKFtdIHsKKyAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IHNlcnZp
Y2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzLnVw
ZGF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzQXNzZXJ0aW9uKCk7CiAgICAgfSk7CiAjZW5kaWYKQEAg
LTIxMDcsNyArMTczNiw3IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6OmlzU2VydmljZVdvcmtlclBh
Z2VJRChXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCkgY29uc3QKIHsKICNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgaW5lZmZpY2llbnQuCi0gICAg
cmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLCBbcGFnZUlEXShhdXRv
JiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2VydmljZVdvcmtlclByb2Nlc3Nl
cygpLCBbcGFnZUlEXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBwcm9jZXNzLmhh
c1NlcnZpY2VXb3JrZXJQYWdlUHJveHkocGFnZUlEKTsKICAgICB9KTsKICNlbmRpZgpAQCAtMjMy
OSwxNCArMTk1OCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ3VycmVudE1vZGlmaWVy
U3RhdGVGb3JUZXN0aW5nKCkKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJ
Q1MpCi12b2lkIFdlYlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFU
cmFuc2ZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiBmcm9tRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21haW4sIE9wdGlvblNl
dDxDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiBuYXZpZ2F0aW9uRGF0YVRy
YW5zZmVyLCBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlELCBQYWdlSWRlbnRp
ZmllciB3ZWJQYWdlSUQpCi17Ci0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0
aERhdGFUcmFuc2ZlcihzZXNzaW9uSUQsIGZyb21Eb21haW4sIHRvRG9tYWluLCBuYXZpZ2F0aW9u
RGF0YVRyYW5zZmVyLCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlEKTsKLX0KLQogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zKQogewogICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oZG9t
YWlucykpOwpAQCAtMjM4NywyNyArMjAwOCwyNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRh
dGVBdWRpYmxlTWVkaWFBc3NlcnRpb25zKCkKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0VXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MpCiB7Ci0gICAgaWYgKG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9
PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQorICAgIGlmIChzX3VzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0coU2Vydmlj
ZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6ICh1c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MpOworICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhTZXJ2aWNlV29ya2Vy
LCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczogKHVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiAK
LSAgICBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzOwotICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7Ci0gICAgdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOworICAgIGZvciAoYXV0byog
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAg
IHByb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQogCiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQogYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckZv
cmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdAogewotICAgIHJldHVybiBXVEY6OmFu
eU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10oYXV0byYgcHJvY2VzcykgeworICAgIHJl
dHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW10oYXV0byYgcHJvY2Vz
cykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFj
dGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQogCiBib29sIFdlYlByb2Nlc3NQb29sOjpo
YXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLCBbXShhdXRvJiBw
cm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2VydmljZVdvcmtlclByb2Nlc3Nlcygp
LCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBwcm9jZXNzLmhhc1NlcnZpY2VX
b3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCk7CiAgICAgfSk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRleCA5OTA2YjdkMTliNDUuLjY2OGMx
ZTZkOGQ5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCkBAIC03
Nyw3ICs3Nyw2IEBAIE9CSkNfQ0xBU1MgV0tQcmVmZXJlbmNlT2JzZXJ2ZXI7CiAKIG5hbWVzcGFj
ZSBBUEkgewogY2xhc3MgQXV0b21hdGlvbkNsaWVudDsKLWNsYXNzIEN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudDsKIGNsYXNzIERvd25sb2FkQ2xpZW50OwogY2xhc3MgSFRUUENvb2tpZVN0b3Jl
OwogY2xhc3MgSW5qZWN0ZWRCdW5kbGVDbGllbnQ7CkBAIC0xNzYsNyArMTc1LDYgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0SGlzdG9yeUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lD
b250ZXh0SGlzdG9yeUNsaWVudD4mJik7CiAgICAgdm9pZCBzZXREb3dubG9hZENsaWVudChVbmlx
dWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4mJik7CiAgICAgdm9pZCBzZXRBdXRvbWF0aW9uQ2xp
ZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JiYpOwotICAgIHZvaWQg
c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6
OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJik7CiAKICAgICB2b2lkIHNldEN1c3RvbVdl
YkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKICAgICBjb25z
dCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpIHsgcmV0
dXJuIG1fY29uZmlndXJhdGlvbi0+Y3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlm
aWVyKCk7IH0KQEAgLTE4NywxNyArMTg1LDkgQEAgcHVibGljOgogICAgIC8vIG51bGwgY2hlY2tz
IGluIFdlYlBhZ2VQcm94eS4KICAgICBXZWJQcm9jZXNzUHJveHkqIGR1bW15UHJvY2Vzc1Byb3h5
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QgeyByZXR1cm4gbV9kdW1teVByb2Nlc3NQ
cm94aWVzLmdldChzZXNzaW9uSUQpLmdldCgpOyB9CiAKLSAgICAvLyBXZWJQcm9jZXNzIG9yIE5l
dHdvcmtQcm9jZXNzIGFzIGFwcHJvcG9yaWF0ZSBmb3IgY3VycmVudCBwcm9jZXNzIG1vZGVsLiBU
aGUgY29ubmVjdGlvbiBtdXN0IGJlIG5vbi1udWxsLgotICAgIElQQzo6Q29ubmVjdGlvbiogbmV0
d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCk7Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2
b2lkIHNlbmRUb0FsbFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNzYWdlKTsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oY29uc3QgVCYgbWVz
c2FnZSwgUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gU2VuZHMgdGhlIG1lc3NhZ2UgdG8gV2Vi
UHJvY2VzcyBvciBOZXR3b3JrUHJvY2VzcyBhcyBhcHByb3BvcmlhdGUgZm9yIGN1cnJlbnQgcHJv
Y2VzcyBtb2RlbC4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdvcmtp
bmdQcm9jZXNzKFQmJiBtZXNzYWdlKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiB2b2lkIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYmIHJl
cGx5KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdvcmtpbmdQcm9j
ZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSk7Ci0KICAgICB2b2lkIHByb2Nl
c3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKICAgICBXZWJQcm9jZXNz
Q2FjaGUmIHdlYlByb2Nlc3NDYWNoZSgpIHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0NhY2hlLmdldCgp
OyB9CkBAIC0yMDUsOSArMTk1LDYgQEAgcHVibGljOgogICAgIC8vIERpc2Nvbm5lY3QgdGhlIHBy
b2Nlc3MgZnJvbSB0aGUgY29udGV4dC4KICAgICB2b2lkIGRpc2Nvbm5lY3RQcm9jZXNzKFdlYlBy
b2Nlc3NQcm94eSopOwogCi0gICAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlKiB3ZWJzaXRlRGF0
YVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9Ci0gICAg
dm9pZCBzZXRQcmltYXJ5RGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0
b3JlKSB7IG1fd2Vic2l0ZURhdGFTdG9yZSA9ICZkYXRhU3RvcmU7IH0KLQogICAgIFJlZjxXZWJQ
YWdlUHJveHk+IGNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYsIFJlZjxBUEk6OlBhZ2VDb25maWd1
cmF0aW9uPiYmKTsKIAogICAgIHZvaWQgcGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdl
YlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYnNpdGVEYXRhU3RvcmUmKTsKQEAgLTI1OCwxMCArMjQ1
LDggQEAgcHVibGljOgogICAgIHZvaWQgYWRkU3VwcG9ydGVkUGx1Z2luKFN0cmluZyYmIG1hdGNo
aW5nRG9tYWluLCBTdHJpbmcmJiBuYW1lLCBIYXNoU2V0PFN0cmluZz4mJiBtaW1lVHlwZXMsIEhh
c2hTZXQ8U3RyaW5nPiBleHRlbnNpb25zKTsKICAgICB2b2lkIGNsZWFyU3VwcG9ydGVkUGx1Z2lu
cygpOwogCi0gICAgUHJvY2Vzc0lEIG5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpOwogICAgIFBy
b2Nlc3NJRCBwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcigpOwogICAgIHZvaWQgYWN0aXZlUGFn
ZXNPcmlnaW5zSW5XZWJQcm9jZXNzRm9yVGVzdGluZyhQcm9jZXNzSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYpOwotICAgIGJvb2wgbmV0d29ya1Byb2Nlc3NI
YXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CiAKICAgICBXZWJQYWdlR3Jv
dXAmIGRlZmF1bHRQYWdlR3JvdXAoKSB7IHJldHVybiBtX2RlZmF1bHRQYWdlR3JvdXAuZ2V0KCk7
IH0KIApAQCAtMzAyLDggKzI4Nyw2IEBAIHB1YmxpYzoKICAgICBBUEk6OkxlZ2FjeUNvbnRleHRI
aXN0b3J5Q2xpZW50JiBoaXN0b3J5Q2xpZW50KCkgeyByZXR1cm4gKm1faGlzdG9yeUNsaWVudDsg
fQogICAgIFdlYkNvbnRleHRDbGllbnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAK
LSAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gKm1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
OyB9Ci0KICAgICBzdHJ1Y3QgU3RhdGlzdGljcyB7CiAgICAgICAgIHVuc2lnbmVkIHdrVmlld0Nv
dW50OwogICAgICAgICB1bnNpZ25lZCB3a1BhZ2VDb3VudDsKQEAgLTMxOSwxMiArMzAyLDggQEAg
cHVibGljOgogICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7CiAgICAgdm9p
ZCB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogCi0gICAgdm9pZCBmbHVzaENvb2tpZXMoY29u
c3QgUEFMOjpTZXNzaW9uSUQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCiAgICAg
dm9pZCBzZXRTaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhib29s
IHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmcg
PSB2YWx1ZTsgfQogICAgIGJvb2wgc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZv
clRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5j
aEZhaWxGb3JUZXN0aW5nOyB9Ci0gICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9j
ZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0TmV0
d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9Ci0gICAgYm9vbCBzaG91
bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSBjb25zdCB7IHJl
dHVybiBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZzsg
fQogCiAgICAgdm9pZCByZXBvcnRXZWJDb250ZW50Q1BVVGltZShTZWNvbmRzIGNwdVRpbWUsIHVp
bnQ2NF90IGFjdGl2aXR5U3RhdGUpOwogCkBAIC0zODMsMTkgKzM2MiwxMyBAQCBwdWJsaWM6CiAj
ZW5kaWYKIAogICAgIC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50Ci0gICAgTmV0d29ya1By
b2Nlc3NQcm94eSYgZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdl
YnNpdGVEYXRhU3RvcmUgPSBudWxscHRyKTsKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3
b3JrUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCk7IH0KICAg
ICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAKLSAg
ICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBNZXNz
YWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVk
UmVwbHkmJik7Ci0KICAgICBib29sIGlzU2VydmljZVdvcmtlclBhZ2VJRChXZWJQYWdlUHJveHlJ
ZGVudGlmaWVyKSBjb25zdDsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgdm9pZCBl
c3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1By
b2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vzc2lvbklE
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHN0YXRpYyB2b2lkIGVzdGFibGlz
aFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1By
b3h5JiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNzaW9uSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCByZW1vdmVGcm9tU2VydmljZVdvcmtl
clByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkmKTsKLSAgICBzaXplX3Qgc2VydmljZVdvcmtlclBy
b3hpZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb21w
dXRlU2l6ZSgpOyB9Ci0gICAgdm9pZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZp
Y2VXb3JrZXIoYm9vbCBhbGxvd3MpIHsgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZp
Y2VXb3JrZXIgPSBhbGxvd3M7IH0KLSAgICBib29sIGFsbG93c0FueVNTTENlcnRpZmljYXRlRm9y
U2VydmljZVdvcmtlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVG
b3JTZXJ2aWNlV29ya2VyOyB9CisgICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQo
KSBjb25zdCB7IHJldHVybiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNpemUoKTsg
fQogICAgIHZvaWQgdXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25zdCBTdHJpbmcmIHVz
ZXJBZ2VudCk7CiAgICAgY29uc3QgT3B0aW9uYWw8VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRp
Zmllcj4mIHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2Vycygp
IGNvbnN0IHsgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNlV29ya2Vy
OyB9CiAgICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGlu
ZygpIGNvbnN0OwpAQCAtNDQ5LDggKzQyMiw2IEBAIHB1YmxpYzoKICAgICBib29sIGFsd2F5c1J1
bnNBdEJhY2tncm91bmRQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx3YXlzUnVuc0F0QmFj
a2dyb3VuZFByaW9yaXR5OyB9CiAgICAgYm9vbCBzaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uOyB9
CiAKLSAgICB2b2lkIHN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKTsK
LSAgICAKICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICB2b2lkIGdhbWVwYWRDb25uZWN0ZWQoY29u
c3QgVUlHYW1lcGFkJiwgV2ViQ29yZTo6RXZlbnRNYWtlc0dhbWVwYWRzVmlzaWJsZSk7CiAgICAg
dm9pZCBnYW1lcGFkRGlzY29ubmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYpOwpAQCAtNDg4LDcgKzQ1
OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0
aW5nKCk7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIHZvaWQg
ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQsIGNv
bnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21haW4sIE9wdGlvblNldDxXZWJDb3JlOjpDcm9zc1Np
dGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiwgV2ViUGFnZVByb3h5SWRlbnRpZmllciwg
V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIpOwogICAgIHZvaWQgc2V0RG9tYWluc1dpdGhVc2VySW50
ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJik7CiAgICAgdm9p
ZCBzZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRlc3RpbmcoY29uc3QgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4mIGZpcnN0UGFydHlEb21haW4sIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluJiB0aGlyZFBhcnR5RG9tYWluLCBib29sIHNob3VsZFNjaGVkdWxlTm90aWZpY2F0
aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgc2VuZFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKQEAgLTUxNSw4ICs0ODUsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgUGx1Z0luQXV0b1N0YXJ0
UHJvdmlkZXImIHBsdWdJbkF1dG9TdGFydFByb3ZpZGVyKCkgeyByZXR1cm4gbV9wbHVnSW5BdXRv
U3RhcnRQcm92aWRlcjsgfQogCi0gICAgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzKGJvb2wpOwotICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcygp
IGNvbnN0IHsgcmV0dXJuIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQorICAg
IHN0YXRpYyB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCk7Cisg
ICAgc3RhdGljIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIHsgcmV0dXJu
IHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQogCiAjaWYgRU5BQkxFKENGUFJF
RlNfRElSRUNUX01PREUpCiAgICAgdm9pZCBub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQoY29uc3Qg
U3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBPcHRpb25hbDxTdHJpbmc+
JiBlbmNvZGVkVmFsdWUpOwpAQCAtNTI4LDkgKzQ5OCwxNSBAQCBwdWJsaWM6CiAgICAgaW50MzJf
dCB1c2VySWQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJJZDsgfQogI2VuZGlmCiAKLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICBPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IHhwY0VuZHBvaW50TWVz
c2FnZSgpIGNvbnN0OwotICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dl
YlByb2Nlc3MoT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRwb2ludE1lc3NhZ2UpOworICAg
IHN0YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHVybFNj
aGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCisjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKKyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBz
dGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcg
bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVu
dENhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5
RGlyZWN0b3J5KCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTU0Niw4ICs1MjIsNiBAQCBwcml2
YXRlOgogICAgIFdlYlByb2Nlc3NQcm94eSYgY3JlYXRlTmV3V2ViUHJvY2VzcyhXZWJzaXRlRGF0
YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94eTo6
SXNQcmV3YXJtZWQ6Ok5vKTsKICAgICB2b2lkIGluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdlYlBy
b2Nlc3NQcm94eSYsIFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9jZXNzUHJveHk6OklzUHJld2Fy
bWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8pOwogCi0gICAgdm9pZCBwbGF0
Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycyYpOwotCiAgICAgdm9pZCBoYW5kbGVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSk7CiAgICAg
dm9pZCBoYW5kbGVTeW5jaHJvbm91c01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFVzZXJEYXRhJiYpPiYmKTsKIApAQCAtNTcxLDE0ICs1NDUsNiBAQCBwcml2
YXRlOgogCiAgICAgYm9vbCB1c2VzU2luZ2xlV2ViUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uZmlndXJhdGlvbi0+dXNlc1NpbmdsZVdlYlByb2Nlc3MoKTsgfQogCi0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsK
LSAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBT
dHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgd2Vi
Q29udGVudENhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVt
cG9yYXJ5RGlyZWN0b3J5KCk7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZv
aWQgcmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKICAgICB2b2lkIHVucmVnaXN0ZXJO
b3RpZmljYXRpb25PYnNlcnZlcnMoKTsKQEAgLTYyMCw5ICs1ODYsOCBAQCBwcml2YXRlOgogICAg
IEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYWtQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4gbV9kdW1t
eVByb2Nlc3NQcm94aWVzOyAvLyBMaWdodHdlaWdodCBXZWJQcm9jZXNzUHJveHkgb2JqZWN0cyB3
aXRob3V0IGJhY2tpbmcgcHJvY2Vzcy4KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAg
ICBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+IG1fc2VydmljZVdvcmtlclByb2Nlc3NlczsK
KyAgICBzdGF0aWMgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiYgc2VydmljZVdvcmtlclBy
b2Nlc3NlcygpOwogICAgIGJvb2wgbV93YWl0aW5nRm9yV29ya2VyQ29udGV4dFByb2Nlc3NDb25u
ZWN0aW9uIHsgZmFsc2UgfTsKLSAgICBib29sIG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JT
ZXJ2aWNlV29ya2VyIHsgZmFsc2UgfTsKICAgICBTdHJpbmcgbV9zZXJ2aWNlV29ya2VyVXNlckFn
ZW50OwogICAgIE9wdGlvbmFsPFdlYlByZWZlcmVuY2VzU3RvcmU+IG1fc2VydmljZVdvcmtlclBy
ZWZlcmVuY2VzOwogICAgIE9wdGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXI+
IG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNlV29ya2VyOwpAQCAtNjM4LDcgKzYw
Myw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVu
dD4gbV9hdXRvbWF0aW9uQ2xpZW50OwogICAgIFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50
PiBtX2Rvd25sb2FkQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRl
eHRIaXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFQ
STo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudDsKIAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9uU2Vzc2lvbj4gbV9hdXRvbWF0aW9uU2Vz
c2lvbjsKIApAQCAtNjcwLDggKzYzNCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21lbW9yeVNh
bXBsZXJFbmFibGVkIHsgZmFsc2UgfTsKICAgICBkb3VibGUgbV9tZW1vcnlTYW1wbGVySW50ZXJ2
YWwgeyAxNDAwLjAgfTsKIAotICAgIFJlZlB0cjxXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU+IG1f
d2Vic2l0ZURhdGFTdG9yZTsKLQogICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBjaGFyKiwgUmVm
UHRyPFdlYkNvbnRleHRTdXBwbGVtZW50PiwgUHRySGFzaDxjb25zdCBjaGFyKj4+IFdlYkNvbnRl
eHRTdXBwbGVtZW50TWFwOwogICAgIFdlYkNvbnRleHRTdXBwbGVtZW50TWFwIG1fc3VwcGxlbWVu
dHM7CiAKQEAgLTcwMyw4ICs2NjUsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3Byb2Nlc3NU
ZXJtaW5hdGlvbkVuYWJsZWQgeyB0cnVlIH07CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29y
a1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKLQogICAgIEhhc2hNYXA8dWludDY0X3Qs
IFJlZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+PiBtX2RpY3Rpb25hcnlDYWxsYmFja3M7CiAKICAg
ICBib29sIG1fbWVtb3J5Q2FjaGVEaXNhYmxlZCB7IGZhbHNlIH07CkBAIC03MTMsNyArNjczLDYg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5Owog
ICAgIGJvb2wgbV9zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uOwogICAgIGJvb2wgbV9z
aG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGlu
ZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3RjY1ByZWZlcmVuY2VFbmFibGVkIHsgZmFsc2UgfTsK
IAogICAgIFVzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIgbV91c2VyT2JzZXJ2YWJsZVBhZ2VDb3Vu
dGVyOwpAQCAtODA1LDMxICs3NjQsMTMgQEAgcHJpdmF0ZToKICNlbHNlCiAgICAgYm9vbCBtX2lz
RGVsYXllZFdlYlByb2Nlc3NMYXVuY2hEaXNhYmxlZCB7IGZhbHNlIH07CiAjZW5kaWYKLSAgICBi
b29sIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyB7IGZhbHNlIH07CisgICAgc3Rh
dGljIGJvb2wgc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwogCiAjaWYgRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluPiBtX2RvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uOwogI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICBPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IG1fZW5kcG9pbnRN
ZXNzYWdlOwotI2VuZGlmCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpCi17Ci0gICAgaWYg
KG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkK
LSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSks
IDApOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2Vu
ZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKQot
ewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1lc3Nh
Z2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRl
eCBkNjYxMDMzOGI2Y2YuLjVlMmM3MDhmMjJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC0yNjgsNiArMjY4LDkgQEAgdm9pZCBXZWJQcm9jZXNz
UHJveHk6OnNldFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKQog
ewogICAgIEFTU0VSVCghbV93ZWJzaXRlRGF0YVN0b3JlKTsKICAgICBtX3dlYnNpdGVEYXRhU3Rv
cmUgPSAmZGF0YVN0b3JlOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGRhdGFTdG9yZS5zZW5k
TmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcygqdGhpcyk7CisjZW5kaWYKICAg
ICB1cGRhdGVSZWdpc3RyYXRpb25XaXRoRGF0YVN0b3JlKCk7CiAgICAgc2VuZChNZXNzYWdlczo6
V2ViUHJvY2Vzczo6U2V0V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMocHJvY2Vzc1Bvb2woKS53
ZWJQcm9jZXNzRGF0YVN0b3JlUGFyYW1ldGVycygqdGhpcywgZGF0YVN0b3JlKSksIDApOwogfQpA
QCAtNzM4LDcgKzc0MSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXRQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbih1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4sIE1lCiAKIHZvaWQgV2ViUHJv
Y2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oTWVzc2FnZXM6OldlYlByb2Nl
c3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBs
eSkKIHsKLSAgICBtX3Byb2Nlc3NQb29sLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKnRo
aXMsIFdURk1vdmUocmVwbHkpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkuZ2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CiB9CiAKICNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCkBAIC05NTUsOSArOTU4LDggQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OmRp
ZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqIGxhdW5jaGVyLCBJUEM6OkNvbm5lY3QK
ICAgICB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBhdXRvIGVuZHBvaW50TWVzc2FnZSA9
IHByb2Nlc3NQb29sKCkueHBjRW5kcG9pbnRNZXNzYWdlKCk7Ci0gICAgaWYgKGVuZHBvaW50TWVz
c2FnZSkKLSAgICAgICAgeHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNzYWdlKGNvbm5lY3Rpb24oKS0+
eHBjQ29ubmVjdGlvbigpLCBlbmRwb2ludE1lc3NhZ2UuZ2V0KCkpOworICAgIGlmIChtX3dlYnNp
dGVEYXRhU3RvcmUpCisgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9j
ZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoKnRoaXMpOwogI2VuZGlmCiAKICAgICBSRUxFQVNF
X0FTU0VSVCghbV93ZWJDb25uZWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2Nv
YS5tbQppbmRleCA3YzQ0MDg1MTY3NzMuLmNiOGIzYmFhNGFkMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNp
dGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAtMjgsMTAgKzI4LDEyIEBACiAKICNpbXBvcnQgIkNvb2tp
ZVN0b3JhZ2VVdGlsc0NGLmgiCiAjaW1wb3J0ICJEZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5oIgor
I2ltcG9ydCAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2ltcG9ydCAiU2FuZGJveFV0aWxpdGll
cy5oIgogI2ltcG9ydCAiU3RvcmFnZU1hbmFnZXIuaCIKICNpbXBvcnQgIldlYkZyYW1lUG9saWN5
TGlzdGVuZXJQcm94eS5oIgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNLZXlzLmgiCisjaW1wb3J0
ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oIgogI2ltcG9ydCAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKICNpbXBvcnQg
PFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CkBAIC00NCw2ICs0Niw3IEBACiAjaW1w
b3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdl
Lmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvRW50aXRsZW1lbnRz
Lmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQpAQCAtNTYyLDQgKzU2NSwyOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
aW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlucygpCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJzaXRlRGF0
YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJp
bmcmIGVudGl0bGVtZW50KQoreworICAgIHJldHVybiBXVEY6Omhhc0VudGl0bGVtZW50KG5ldHdv
cmtQcm9jZXNzKCkuY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVudGl0bGVtZW50LnV0
ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJv
Y2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKK3sK
KyAgICBpZiAocHJvY2Vzcy5zdGF0ZSgpICE9IEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6U3RhdGU6
OlJ1bm5pbmcpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBjb25uZWN0aW9uID0gcHJvY2Vz
cy5jb25uZWN0aW9uKCk7CisgICAgaWYgKCFjb25uZWN0aW9uKQorICAgICAgICByZXR1cm47Cisg
ICAgYXV0byBtZXNzYWdlID0gbmV0d29ya1Byb2Nlc3MoKS54cGNFbmRwb2ludE1lc3NhZ2UoKTsK
KyAgICBpZiAoIW1lc3NhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICB4cGNfY29ubmVjdGlvbl9z
ZW5kX21lc3NhZ2UoY29ubmVjdGlvbi0+eHBjQ29ubmVjdGlvbigpLCBtZXNzYWdlKTsKK30KKwor
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvQWxs
V2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykK
KyAgICAgICAgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MocHJvY2Vz
cyk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggMDgzMGNhNzVhN2ZjLi42ZWY3NWIzZjNm
NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRh
L1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0zMiwxMSArMzIsMTQgQEAKICNpbmNsdWRlICJBdXRo
ZW50aWNhdG9yTWFuYWdlci5oIgogI2luY2x1ZGUgIkRldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgi
CiAjaW5jbHVkZSAiR1BVUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIk1vY2tBdXRoZW50aWNhdG9yTWFuYWdlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbkluZm8uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3Rv
cmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkQ2FjaGUuaCIKKyNp
bmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXQySW5pdGlh
bGl6ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3ND
YWNoZS5oIgpAQCAtNzUsNiArNzgsMTAgQEAKICNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25Db29y
ZGluYXRvci5oIgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJEZWZh
dWx0V2ViQnJvd3NlckNoZWNrcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBz
dGF0aWMgYm9vbCBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zOwpAQCAtODMs
MTMgKzkwLDE5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dXZWJzaXRlRGF0YVJlY29y
ZHNGb3JBbGxPcmlnaW5zKCkKICAgICBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmln
aW5zID0gdHJ1ZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVE
YXRhU3RvcmUqPiYgbm9uRGVmYXVsdERhdGFTdG9yZXMoKQorc3RhdGljIEhhc2hNYXA8UEFMOjpT
ZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgYWxsRGF0YVN0b3JlcygpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFz
aE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+PiBtYXA7CiAgICAgcmV0dXJu
IG1hcDsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9y
ZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRhU3RvcmUmKT4mJiBmdW5jdGlvbikKK3sKKyAgICBm
b3IgKGF1dG8qIGRhdGFTdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICAgICAg
ZnVuY3Rpb24oKmRhdGFTdG9yZSk7Cit9CisKIFJlZjxXZWJzaXRlRGF0YVN0b3JlPiBXZWJzaXRl
RGF0YVN0b3JlOjpjcmVhdGVOb25QZXJzaXN0ZW50KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVh
dGUoSXNQZXJzaXN0ZW50OjpObyksIFBBTDo6U2Vzc2lvbklEOjpnZW5lcmF0ZUVwaGVtZXJhbFNl
c3Npb25JRCgpKSk7CkBAIC0xMTUsNyArMTI4LDcgQEAgV2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0
ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYgY29uZmlndXIK
ICNlbmRpZgogewogICAgIFdURjo6c2V0UHJvY2Vzc1ByaXZpbGVnZXMoYWxsUHJpdmlsZWdlcygp
KTsKLSAgICBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOworICAgIHJlZ2lzdGVyV2l0
aFNlc3Npb25JRE1hcCgpOwogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTEyOCwxNyArMTQxLDEyIEBAIFdlYnNpdGVEYXRhU3Rv
cmU6On5XZWJzaXRlRGF0YVN0b3JlKCkKIAogICAgIHBsYXRmb3JtRGVzdHJveSgpOwogCi0gICAg
aWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsK
LSAgICAgICAgQVNTRVJUKG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9
PSB0aGlzKTsKLSAgICAgICAgbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9u
SUQpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFs
bFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICBuZXR3b3Jr
UHJvY2Vzcy0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAgICAgIH0KLSAgICB9Cisg
ICAgQVNTRVJUKGFsbERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOworICAg
IGFsbERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOworICAgIG5ldHdvcmtQcm9jZXNz
KCkucmVtb3ZlU2Vzc2lvbigqdGhpcyk7CiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQotICAgICAg
ICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25J
ZkNyZWF0ZWQoKSkKLSAgICAgICAgICAgIGdwdVByb2Nlc3NQcm94eS0+cmVtb3ZlU2Vzc2lvbiht
X3Nlc3Npb25JRCk7CisgICAgaWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94eSA9IEdQVVByb2Nlc3NQ
cm94eTo6c2luZ2xldG9uSWZDcmVhdGVkKCkpCisgICAgICAgIGdwdVByb2Nlc3NQcm94eS0+cmVt
b3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAjZW5kaWYKIH0KIApAQCAtMTUwLDYgKzE1OCw5IEBA
IHN0YXRpYyBSZWZQdHI8V2Vic2l0ZURhdGFTdG9yZT4mIGdsb2JhbERlZmF1bHREYXRhU3RvcmUo
KQogCiBSZWY8V2Vic2l0ZURhdGFTdG9yZT4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZSgpCiB7CisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgogICAgIEluaXRpYWxpemVXZWJLaXQyKCk7
CiAKICAgICBhdXRvJiBzdG9yZSA9IGdsb2JhbERlZmF1bHREYXRhU3RvcmUoKTsKQEAgLTE2OSwx
NyArMTgwLDQ4IEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0
cygpCiAgICAgcmV0dXJuICEhZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpOwogfQogCi12b2lkIFdl
YnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKK3ZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKIHsKLSAgICBpZiAobV9z
ZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAg
ICBhdXRvIHJlc3VsdCA9IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0
aGlzKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsK
KyAgICBhdXRvIHJlc3VsdCA9IGFsbERhdGFTdG9yZXMoKS5hZGQobV9zZXNzaW9uSUQsIHRoaXMp
OworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK1dl
YnNpdGVEYXRhU3RvcmUqIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vz
c2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK3sKKyAgICByZXR1cm4gYWxsRGF0YVN0
b3JlcygpLmdldChzZXNzaW9uSUQpOworfQorCitzdGF0aWMgUmVmPE5ldHdvcmtQcm9jZXNzUHJv
eHk+IG5ldHdvcmtQcm9jZXNzRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7
CisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCisgICAgaWYgKHNlc3Npb25JRC5p
c0VwaGVtZXJhbCgpKSB7CisgICAgICAgIC8vIFJldXNlIGEgcHJldmlvdXMgcGVyc2lzdGVudCBz
ZXNzaW9uIG5ldHdvcmsgcHJvY2VzcyBmb3IgZXBoZW1lcmFsIHNlc3Npb25zLgorICAgICAgICBm
b3IgKGF1dG8qIGRhdGFTdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1ZXMoKSkgeworICAgICAg
ICAgICAgaWYgKGRhdGFTdG9yZS0+aXNQZXJzaXN0ZW50KCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG1ha2VSZWYoZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpKTsKKyAgICAgICAgfQogICAg
IH0KKyNlbHNlCisgICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IHNlc3Npb25JRCA9
PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQorICAgICAgICByZXR1cm4gTmV0
d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7CisjZW5kaWYKKworICAg
IHJldHVybiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGUoKTsKIH0KIAotV2Vic2l0ZURhdGFT
dG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vz
c2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK05ldHdvcmtQcm9jZXNzUHJveHkmIFdl
YnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkKIHsKLSAgICByZXR1cm4gc2Vzc2lvbklE
ICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgPyBub25EZWZhdWx0RGF0YVN0
b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0cjsKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nl
c3MpIHsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IG5ldHdvcmtQcm9jZXNzRm9yU2Vzc2lv
bihtX3Nlc3Npb25JRCk7CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRo
aXMpOworICAgIH0KKworICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKK30KKworTmV0d29y
a1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3MoKSBjb25zdAor
eworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYnNpdGVEYXRhU3RvcmUmPigqdGhpcykubmV0d29y
a1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlclByb2Nlc3Mo
V2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQpAQCAtMTk1LDEyICsyMzcsNiBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnVucmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykK
ICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CiB9CiAKLVdlYlByb2Nlc3NQb29sKiBX
ZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkK
LXsKLSAgICBhdXRvIHBvb2xzID0gcHJvY2Vzc1Bvb2xzKDEpOwotICAgIHJldHVybiBwb29scy5p
c0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVnaW4oKS0+Z2V0KCk7Ci19Ci0KIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKQogewogICAgIGlm
IChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBAIC00NDAsMjggKzQ3NiwyMSBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+IGRhdGFUeXBlcywgTwogI2VuZGlmCiAKICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNz
VHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5
cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwotICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUg
IT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsKLSAgICAgICAgYXV0byBwb29scyA9IG5ldHdv
cmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJl
UHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNzUG9vbHMoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHBvb2xzKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNj
ZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1
bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAg
ICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5v
bmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9
Ci0KKyAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgeworICAgIGNhc2UgUHJv
Y2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKKyAgICAg
ICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBj
YXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKKyAgICAgICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpIHsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGlu
Z0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+
ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkg
eworICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Np
b25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKFdlYnNp
dGVEYXRhIHdlYnNpdGVEYXRhKSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9y
LT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNz
VHlwZTo6Tm9uZToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgYXV0byB3ZWJQcm9jZXNz
QWNjZXNzVHlwZSA9IGNvbXB1dGVXZWJQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFGZXRjaChkYXRh
VHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CkBAIC03MjQsMzEgKzc1MywyNCBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5
cGVzLCBXYWxsVGltZQogICAgIGJvb2wgZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdl
YnNpdGVEYXRhID0gZmFsc2U7CiAjZW5kaWYKICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNz
VHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVtb3ZhbChkYXRh
VHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7Ci0gICAgaWYgKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlw
ZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkgewotICAgICAgICBhdXRvIHBvb2xzID0gbmV0
d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09IFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2ggPyBlbnN1
cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nlc3NQb29scygpOwotICAgICAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcG9vbHMpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NB
Y2Nlc3NUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZM
YXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAg
ICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6
Tm9uZToKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IH0KLQorICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBQ
cm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgorICAgICAgICBuZXR3b3JrUHJvY2VzcygpOworICAg
ICAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAg
IGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgorICAgICAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykgewogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5k
aW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
LT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAgICAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9k
aWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewogICAgICAgICAgICAgICAgIGNhbGxi
YWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsK
ICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgICAgICAgICAgZGlkTm90
aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhID0gdHJ1ZTsKICNlbmRpZgogICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6
CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGF1dG8gd2ViUHJvY2Vzc0FjY2Vzc1R5cGUg
PSBjb21wdXRlV2ViUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFp
c1BlcnNpc3RlbnQoKSk7CkBAIC04OTMsMTQgKzkxNSw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxU
aW1lCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBpZiAoZGF0YVR5
cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcykpIHsK
ICAgICAgICAgaWYgKCFkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEp
IHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5h
ZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy0+ZGVsZXRl
V2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdh
dG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MoKS5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNp
bmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0pOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsK
QEAgLTk5NCwxMiArMTAxMSwxMCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEo
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0
d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NU
eXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1
bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0
aGlzKTsKKyAgICAgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgpAQCAt
MTAyMSw3ICsxMDM2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3QgVmUKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsK
LSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRl
RGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9z
dE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNr
QWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCku
ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdp
bnMsIGNvb2tpZUhvc3ROYW1lcywgSFNUU0NhY2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFp
bnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CiAgICAgICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9CkBAIC0xMTgwLDE4ICsxMTk1LDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNv
bnN0IFZlCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRG
b3JUZXN0aW5nKFNlY29uZHMgc2Vjb25kcykKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6
OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rp
bmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZl
dGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnJlc2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKCkKIHsKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGlu
ZygpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGlt
ZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0
Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2Vy
dmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwogfQogCiAjaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTEyMDEsOCArMTIxMCw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGlt
dW1FbnRyeUNvdW50LCBDb21wbGV0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMo
bV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE1heFN0YXRpc3RpY3NFbnRy
aWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50cnlDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8o
c2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTEyMTEsOCArMTIxOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0
aW9uCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1
bmVUYXJnZXRDb3VudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBy
dW5lVGFyZ2V0Q291bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25kcywgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTIyMSw4ICsx
MjI4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vj
b25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhl
cmluZ1RpbWUobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1l
KG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVt
b3ZhbChTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTEyMzEsMjAgKzEyMzcsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRz
LAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nl
c3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1Jl
bW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAgICAgCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNz
LT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjU2LDEyICsx
MjU1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2kKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgICAgICBwcm9jZXNzLT5pc1ByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xMjczLDEyICsxMjY3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0
aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm8KICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc0dyYW5kZmF0aGVyZWQobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuaXNHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJM
JiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTEyOTIsOCArMTI4MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVz
b3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5z
dXJlUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnNldFByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNl
Rm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzA3LDEwICsxMjk1LDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBVUkwmIHVybCwg
Q29tcGxldGkKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxl
bnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzVmVyeVByZXZhbGVudCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xMzIyLDEyICsxMzA3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1Zl
cnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXIKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNWZXJ5UHJldmFs
ZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNWZXJ5UHJldmFsZW50UmVzb3Vy
Y2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRW
ZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzNDEsMTAgKzEzMjEsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwg
Q29tcGxldGlvbkhhbmRsZQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2Uo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFS
ZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xMzUzLDggKzEzMzAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJv
b2wgdgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFS
ZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlS
ZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBV
UkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xMzY4LDIyICsxMzQ0LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvCiAK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRv
cEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbiht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNT
dWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVV
UkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1Jl
Z2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BG
cmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFz
U3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBz
dWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJyZXNvdXJj
ZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM5NywyMyArMTM2NSwxNCBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1
YnJlc291cmNlVQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BG
cmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBVUkwmIHN1YnJl
c291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VV
bmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJj
ZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNv
bnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDI3LDEwICsx
Mzg2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNl
VVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJl
Y3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTE0NDIsMTIgKzEzOTgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25z
dCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ1OSwxMiArMTQxMCw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNv
bnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGly
ZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVk
aXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE0NzYsMjUgKzE0MjIsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb24KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJl
ZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgVVJMJiB1
cmxSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNS
ZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJl
Y3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50
UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTE1MDYsNjAgKzE0NDEsNDEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclBy
ZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwotCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9j
ZXNzLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMobV9zZXNzaW9uSUQsIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN1Ym1pdFRl
bGVtZXRyeSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25JRCwgW10geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zdWJtaXRUZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVy
c2lzdGVudChXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3Rp
Y3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRH
cmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAot
ICAgIHN0cnVjdCBDYWxsYmFja0FnZ3JlZ2F0b3IgOiBSZWZDb3VudGVkPENhbGxiYWNrQWdncmVn
YXRvcj4gewotICAgICAgICBDYWxsYmFja0FnZ3JlZ2F0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4m
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCisgICAgc3RydWN0IExvY2FsQ2FsbGJhY2tBZ2dyZWdh
dG9yIDogUmVmQ291bnRlZDxMb2NhbENhbGxiYWNrQWdncmVnYXRvcj4geworICAgICAgICBMb2Nh
bENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKICAgICAgICAgICAgIDogbV9jb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKICAgICAgICAgfTsKIAotICAgICAgICB+Q2FsbGJhY2tBZ2dyZWdhdG9yKCkKKyAg
ICAgICAgfkxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yKCkKICAgICAgICAgewogICAgICAgICAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMTU3NCwzOCArMTQ5MCwzMSBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShD
b21wbGV0aW9uSGFuZGxlcjx2bwogICAgICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4gbV9j
b21wbGV0aW9uSGFuZGxlcjsKICAgICAgICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IG1fcmVzdWx0czsKICAgICB9OwotCi0gICAgUmVmUHRy
PENhbGxiYWNrQWdncmVnYXRvcj4gY2FsbGJhY2tBZ2dyZWdhdG9yID0gYWRvcHRSZWYobmV3IENh
bGxiYWNrQWdncmVnYXRvcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOwotCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHBy
b2Nlc3NQb29sLT5zZW5kUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3ModGhpcykuZ2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklE
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0oVmVjdG9yPFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYgZGF0YSkgewotICAgICAgICAgICAg
ICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVzdWx0KFdURk1vdmUoZGF0YSkpOwotICAgICAg
ICAgICAgfSk7CisgICAgCisgICAgYXV0byBsb2NhbENhbGxiYWNrQWdncmVnYXRvciA9IGFkb3B0
UmVmKG5ldyBMb2NhbENhbGxiYWNrQWdncmVnYXRvcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSkpOworICAgIAorICAgIGF1dG8gd3RmQ2FsbGJhY2tBZ2dyZWdhdG9yID0gV1RGOjpDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBsb2NhbENhbGxiYWNrQWdncmVnYXRvcl0geworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmdl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShtX3Nlc3Npb25JRCwgW2xvY2FsQ2Fs
bGJhY2tBZ2dyZWdhdG9yXShWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpU
aGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7CisgICAgICAgICAgICBsb2NhbENhbGxiYWNrQWdncmVn
YXRvci0+YWRkUmVzdWx0KFdURk1vdmUoZGF0YSkpOwogICAgICAgICB9KTsKLSAgICB9CisgICAg
fSk7CisgICAgCisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjph
bGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KFt3dGZDYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lz
dGVudChTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vz
c2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVy
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQs
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2No
ZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2MTQsMjQgKzE1MjMsMTMgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nl
c3NpbmcoQ29tcGxldGlvbkhhbmQKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJv
Y2Vzc2luZyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0
YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRh
YmxlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+c3Rh
dGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdGF0aXN0
aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBV
UkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xNjQzLDIyICsxNTQxLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxl
dGlvbkhhCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldExhc3RTZWVuKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRh
YmFzZShpbnQgZG9tYWluSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAg
ICBwcm9jZXNzLT5kb21haW5JREV4aXN0c0luRGF0YWJhc2UobV9zZXNzaW9uSUQsIGRvbWFpbklE
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmRvbWFpbklERXhpc3RzSW5EYXRhYmFz
ZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3Qg
VVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwxLCBjb25zdCBVUkwmIHRvcEZyYW1lVXJs
MiwgU2Vjb25kcyBsYXN0U2VlbiwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIFNlY29uZHMgbW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIGJvb2wgaXNQcmV2
YWxlbnQsIGJvb2wgaXNWZXJ5UHJldmFsZW50LCB1bnNpZ25lZCBkYXRhUmVjb3Jkc1JlbW92ZWQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2NzAs
MTAgKzE1NjAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVz
dGluZyhjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiB0b3BGcgogCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNW
ZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLm1lcmdlU3RhdGlz
dGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJ
bnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBp
c1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhw
aXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaGFkVXNlckludGVy
YWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGJvb2wg
aXNQcmV2YWxlbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE2ODUsMTggKzE1NzIsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRF
eHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBoYWQKIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5pbnNlcnRFeHBpcmVk
U3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tp
ZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaW5zZXJ0RXhwaXJlZFN0YXRp
c3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5u
ZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTE3MDQsOCArMTU4Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29t
cGxlCiAgICAgdXNlRXhwbGljaXRJVFBTdGF0ZSgpOwogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkK
LSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5uaW5n
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bv
b2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldElz
UnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1fc2Vzc2lvbklELCB2YWx1ZSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRB
bGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnMpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTcxNiw3ICsxNTk4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpn
ZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdlYlBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNz
UG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMo
bV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIApAQCAtMTcyNCw4ICsxNjA2LDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25k
cywgQ29tcGxldGlvbkgKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nl
c3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rp
b24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklE
LCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTczOSwxMCArMTYyMCw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPmxvZ1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVy
YWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTc1NCwxMyArMTYzMiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmhh
c0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0
YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25zdCBVUkwmIHRvcFVybCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3NzIsMTMgKzE2
NDQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJh
c2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25zdAogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJVcmwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRp
b25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVsYXRpb25zaGlwT25s
eUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJV
c2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3OTIsMTAgKzE2NTgsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9u
SGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVS
TCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgwOSwxMCArMTY3Miw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0
aGVyZWQsIENvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBwcm9jZXNzLT5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJlZChtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaXNHcmFuZGZhdGhl
cmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MjEsMTAgKzE2ODEsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFVz
ZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtE
ZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGZyb21VUkwsIGNvbnN0IFVSTCYgdG9VUkws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MzMs
NjIgKzE2OTAsMzggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2FkV2l0
aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGYKICAgICAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldENyb3NzU2l0ZUxvYWRX
aXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VS
TCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVz
dGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBmcm9tVVJMIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9VUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRz
V2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlu
a0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRo
TGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0
aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+ZGVsZXRl
Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlQ29va2llc0ZvclRlc3Rpbmco
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVI
dHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QK
IHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNMb2NhbFN0b3JhZ2UobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNMb2Nh
bFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBs
ZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0lzb2xhdGVkU2Vz
c2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3Rpbmco
Ym9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhlbmFi
bGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldFNob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpAQCAtMTkxOSwx
MCArMTc1Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VGhpcmRQYXJ0eUNvb2tpZUJs
b2NraW5nTW9kZShXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llCiAgICAgICAgICAgICB3ZWJQcm9j
ZXNzLnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoYmxvY2tpbmdNb2RlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lvbklELCBibG9ja2luZ01v
ZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdN
b2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkzMCwxMCArMTc2MCw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVT
dHJpY3RFbmZvcmNlCiAgICAgYXV0byBmbGFnID0gZW5hYmxlZCA/IFdlYkNvcmU6OlNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZZXMgOiBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZDo6Tm87CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRFbmJsZVNhbWVT
aXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3Rp
bmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xOTQxLDIwICsxNzY4LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgYXV0byBtb2RlID0gZW5hYmxlZCA/IFdl
YkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzIDog
V2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6Ok5vbmU7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgbW9kZSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0
VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVz
dGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3Rpbmco
Y29uc3QgVVJMJiBmaXJzdFBhcnR5VVJMLCBjb25zdCBVUkwmIGNuYW1lVVJMLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTY2LDggKzE3ODcsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBh
cnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFydHlIb3N0Q05B
TUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJzdFBhcnR5VVJMLmhvc3QoKS50b1N0
cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5SG9z
dENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmlyc3RQYXJ0eVVSTC5ob3N0KCku
dG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKGNvbnN0
IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE5NzksMTggKzE3OTksMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZygKIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVEb21haW5G
b3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1l
VVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzeW5jTG9j
YWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xv
Y2FsU3RvcmFnZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlN5bmNMb2NhbFN0b3JhZ2UoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3Vy
Y2VzKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTk5OCw4ICsxODEzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhTZWNvbmRzIHNlY29uZHMsIEMK
ICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Q2Fj
aGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1h
eEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlY29uZHMpOwog
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0yMDA5LDI2ICsxODIzLDEyIEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoU2Vj
b25kcyBzZWNvbmRzLCBDCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VD
YXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0g
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MtPnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9u
SUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkucmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwogI2VuZGlmCiB9CiAKLWJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJv
Y2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKSBjb25zdAotewotICAgIGlmIChh
dXRvKiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9IHByb2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUo
KSkKLSAgICAgICAgcmV0dXJuIHByb2Nlc3NQb29sRGF0YVN0b3JlID09IHRoaXM7Ci0gICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICByZXR1cm4gbmV0d29ya1Byb2Nlc3NQcm94eS0+aGFzU2Vzc2lvbihtX3Nlc3Np
b25JRCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNz
UG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyhzaXplX3QgbGltaXQpIGNvbnN0
CiB7CiAgICAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBwcm9jZXNzUG9vbHM7CkBA
IC0yMDQzLDkgKzE4NDMsNiBAQCBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNp
dGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyhzaXplX3QgbGltaXQpIGNvbgogICAgIGlmIChwcm9j
ZXNzUG9vbHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9uZSBvZiB0
aGUgbGVnYWN5IGRhdGEgc3RvcmVzLgogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
V2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoIWlz
QXNzb2NpYXRlZFByb2Nlc3NQb29sKCpwcm9jZXNzUG9vbCkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KICAgICAgICAgICAgIHByb2Nlc3NQb29scy5hZGQocHJvY2Vzc1Bvb2wpOwogICAg
ICAgICAgICAgaWYgKHByb2Nlc3NQb29scy5zaXplKCkgPT0gbGltaXQpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC0yMDg0LDggKzE4ODEsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVNZWRp
YUtleUZpbGUoY29uc3QgU3RyaW5nJiBtZWRpYUtleURpcmVjdG9yeSkKIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2Vi
Q2VydGlmaWNhdGVJbmZvKiBjZXJ0aWZpY2F0ZSwgY29uc3QgU3RyaW5nJiBob3N0KQogewotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vz
c1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2Vy
dGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhv
c3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CiB9CiAKIFZlY3Rv
cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IFdlYnNpdGVEYXRhU3RvcmU6Om1lZGlhS2V5
T3JpZ2lucyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkpCkBAIC0yMTQw
LDYgKzE5MzYsNDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVNZWRpYUtleXMoY29u
c3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LAogICAgIH0KIH0KIAordm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1By
b3h5JiB3ZWJQcm9jZXNzUHJveHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgTmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uSW5mbyYpPiYmIHJlcGx5KQoreworICAgIG5ldHdvcmtQcm9jZXNz
KCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKHdlYlByb2Nlc3NQcm94eSwgW3RoaXMsIHdl
YWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB3ZWJQcm9jZXNzUHJveHkgPSBtYWtlV2Vha1B0
cih3ZWJQcm9jZXNzUHJveHkpLCByZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYXV0byYgY29ubmVj
dGlvbkluZm8pIG11dGFibGUgeworICAgICAgICBpZiAoVU5MSUtFTFkoIUlQQzo6Q29ubmVjdGlv
bjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVjdGlvbkluZm8uaWRlbnRpZmllcigpKSAmJiB3ZWJQ
cm9jZXNzUHJveHkgJiYgd2Vha1RoaXMpKSB7CisgICAgICAgICAgICB0ZXJtaW5hdGVOZXR3b3Jr
UHJvY2VzcygpOworICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUYoaXNQZXJzaXN0ZW50KCksIFBy
b2Nlc3MsICJnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246IEZhaWxlZCBmaXJzdCBhdHRlbXB0
LCByZXRyeWluZyIpOworICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXROZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24oKndlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJlcGx5KGNvbm5lY3Rpb25JbmZvKTsK
KyAgICB9KTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0NyYXNo
ZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYpCit7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRpZFRlcm1pbmF0ZSgpOworICAgIG1fbmV0d29ya1By
b2Nlc3MgPSBudWxscHRyOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzKCkKK3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX25ldHdvcmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsKKyAgICBtX25ldHdvcmtQ
cm9jZXNzID0gbnVsbHB0cjsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29y
a1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJl
cGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25JbW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nl
c3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCkKK3sKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworfQorCit2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpCit7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOworfQorCiBib29sIFdl
YnNpdGVEYXRhU3RvcmU6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgY29uc3QKIHsK
ICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjE2OSwxNyArMjAwOCwx
NSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKGJvb2wgZW5hYmxlZCkKICAgICAgICAgCiAgICAgICAgIHJlc29sdmVEaXJlY3Rvcmllc0lm
TmVjZXNzYXJ5KCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3Jr
aW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCB0cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKG1fc2Vzc2lvbklELCB0cnVlKSwgMCk7CisgICAgICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5k
VG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCh0cnVlKSwgbV9zZXNzaW9uSUQpOwotICAgICAgICB9CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9j
ZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQobV9zZXNzaW9uSUQsIGZhbHNlKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
bV9zZXNzaW9uSUQsIGZhbHNlKSwgMCk7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKQogICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9y
U2Vzc2lvbihNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQoZmFsc2UpLCBtX3Nlc3Npb25JRCk7Ci0gICAgfQogCiAgICAgbV9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZCA9IGZhbHNlOwogI2Vsc2UKQEAgLTIxOTEsOCArMjAyOCw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9v
bCBlbmFibGVkKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0Nh
bGxiYWNrKEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY2FsbGJhY2spCiB7CiAgICAg
aWYgKGNhbGxiYWNrKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vz
cyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dU
ZXN0aW5nRXZlbnQodHJ1ZSkpOworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2
ZW50KHRydWUpLCAwKTsKICAgICB9CiAgICAgCiAgICAgbV9zdGF0aXN0aWNzVGVzdGluZ0NhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayk7CkBAIC0yMjExLDggKzIwNDcsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFi
bGVkLCBDb21wbGV0aQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWdNb2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSht
X3Nlc3Npb25JRCwgZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOwogICAgIFVOVVNFRF9QQVJBTShjb21wbGV0aW9uSGFu
ZGxlcik7CkBAIC0yMjI3LDIwICsyMDYyLDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5p
c1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LSNlbmRpZgorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBo
ZW1lcmFsKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisjZWxzZQog
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShib29sIGVuYWJsZWQpCiB7
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0cmlidXRpb25E
ZWJ1Z01vZGUoZW5hYmxlZCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0cmli
dXRpb25EZWJ1Z01vZGUoZW5hYmxlZCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQpAQCAtMjI2Miw0OCArMjA5MiwxOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmNsZWFyUmVzb3VyY2VMb2FkU3RhdGlzdGljc0luV2ViUHJvY2Vzc2VzKENvbXBsZXRpb25IYW5k
bAogfQogI2VuZGlmCiAKLVZlY3RvcjxXZWJDb3JlOjpDb29raWU+IFdlYnNpdGVEYXRhU3RvcmU6
OnBlbmRpbmdDb29raWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29weVRvVmVjdG9yKG1fcGVu
ZGluZ0Nvb2tpZXMpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFkZFBlbmRpbmdDb29r
aWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2ll
cy5yZW1vdmVJZihbJmNvb2tpZV0oYXV0byYgcGVuZGluZ0Nvb2tpZSkgewotICAgICAgICByZXR1
cm4gcGVuZGluZ0Nvb2tpZS5pc0tleUVxdWFsKGNvb2tpZSk7Ci0gICAgfSk7Ci0gICAgbV9wZW5k
aW5nQ29va2llcy5hZGQoY29va2llKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1v
dmVQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1f
cGVuZGluZ0Nvb2tpZXMucmVtb3ZlKGNvb2tpZSk7Ci19Ci0gICAgCi12b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tpZXMoKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMuY2xl
YXIoKTsKLX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmbHVzaENvb2tpZXMoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29s
OjphbGxQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmZsdXNoQ29va2llcyhz
ZXNzaW9uSUQoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmZsdXNoQ29va2llcyhzZXNzaW9uSUQoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRl
Rm9yV2ViU29ja2V0KGJvb2wgYWxsb3dzKQogewotICAgIGZvciAoYXV0byBwcm9jZXNzUG9vbCA6
IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyksIE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQ6OlJl
cGx5KCksIDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQo
YWxsb3dzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZUZvcldlYlNvY2tldDo6UmVwbHkoKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpCiB7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQb29s
IDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+Y2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9uSUQoKSk7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFs
cyhzZXNzaW9uSUQoKSksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpc3BhdGNo
T25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pCkBAIC0yMzI5LDggKzIxMzAsNiBA
QCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJz
KCkKIAogICAgIHJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7CiAKLSAgICBwYXJhbWV0
ZXJzLnBlbmRpbmdDb29raWVzID0gcGVuZGluZ0Nvb2tpZXMoKTsKLQogICAgIGF1dG8gcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+cmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RpcmVjdG9yeSgpOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSByZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5SGFuZGxlOwogICAgIGlmICghcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCkBAIC0yNDM1LDcgKzIyMzQsMTAgQEAgV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAg
ICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BhcmFtZXRlcnMuZW5hYmxlZCA9IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ7
CiAjZW5kaWYKICAgICBwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwot
CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uID0gaGFz
UmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7CisjZW5kaWYKKyAgICAK
ICAgICByZXR1cm4gcGFyYW1ldGVyczsKIH0KIApAQCAtMjQ2NSwxMCArMjI2Nyw2IEBAIEFQSTo6
SFRUUENvb2tpZVN0b3JlJiBXZWJzaXRlRGF0YVN0b3JlOjpjb29raWVTdG9yZSgpCiAgICAgcmV0
dXJuICptX2Nvb2tpZVN0b3JlOwogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0
ZU5ldHdvcmtQcm9jZXNzKCkKLXsKLX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2Nh
bFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNl
VHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
aWYgKCFpc1BlcnNpc3RlbnQoKSkgewpAQCAtMjQ3NiwyMyArMjI3NCwxNSBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8
TG9jYWxTdG9yYWdlRAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29s
LT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vz
c2lvbklELCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
YXV0byYmIGRldGFpbHMpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUo
ZGV0YWlscykpOwotICAgICAgICB9KTsKLSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgZmV0Y2hp
bmcgZnJvbSBtdWx0aXBsZSBwb29scy4KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIEFTU0VS
VCghY29tcGxldGlvbkhhbmRsZXIpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0TG9jYWxTdG9y
YWdlRGV0YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFdURk1vdmUoZGV0YWlscykpOworICAgIH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlc2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+cmVz
ZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpAQCAtMjUxOCw3ICsyMzA4
LDEyIEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6aHR0cDNFbmFibGVkKCkKIHsKICAgICByZXR1
cm4gZmFsc2U7CiB9Ci0jZW5kaWYKKworYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJv
Y2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVy
biBmYWxzZTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oQ09DT0EpCiAKICNpZiAhVVNFKEdMSUIp
CiBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNT
dG9yYWdlRGlyZWN0b3J5KCkKQEAgLTI1MzAsMzUgKzIzMjUsMTggQEAgV1RGOjpTdHJpbmcgV2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgp
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwm
JiBvbGROYW1lLCBVUkwmJiBuZXdOYW1lLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRh
VHlwZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigqdGhpcyk7Ci0gICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgb2xk
TmFtZSwgbmV3TmFtZSwgZGF0YVR5cGVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
ICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVuYW1lT3JpZ2luSW5XZWJzaXRl
RGF0YShtX3Nlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgZGF0YVR5cGVzLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPmhhc0FwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
Lmhhc0FwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBwQm91bmRTZXNzaW9uKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jbGVh
ckFwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJBcHBCb3VuZFNl
c3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxp
emVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTI1
ODAsNyArMjM1OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9t
YWluc1RvSVRQSWZJbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlCiAKICAgICBwcm9wYWdhdGVB
cHBCb3VuZERvbWFpbnMoZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpLmdldCgpLCAqYXBwQm91bmRE
b21haW5zKTsKIAotICAgIGZvciAoYXV0byogc3RvcmUgOiBub25EZWZhdWx0RGF0YVN0b3Jlcygp
LnZhbHVlcygpKQorICAgIGZvciAoYXV0byogc3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVz
KCkpCiAgICAgICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhzdG9yZSwgKmFwcEJvdW5kRG9t
YWlucyk7CiB9CiAKQEAgLTI1ODgsMTAgKzIzNjYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUChjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJh
YgogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNldEFwcEJvdW5kRG9tYWluc0ZvclJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9z
ZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2V0QXBwQm91bmREb21haW5zRm9yUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyhtX3Nlc3Npb25JRCwgZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
ICNlbmRpZgogCkBAIC0yNTk5LDE2ICsyMzc0LDI2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3QgU3RyaW5nJiBidW5k
CiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpLnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoYnVuZGxlSWRlbnRpZmllciwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnVwZGF0ZUJ1bmRs
ZUlkZW50aWZpZXIoYnVuZGxlSWRlbnRpZmllciwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1bmRsZUlkZW50aWZpZXJJbk5ldHdv
cmtQcm9jZXNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlmaWVyKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKK30KKworc3RhdGljIGJvb2wgbmV4dE5ldHdvcmtQcm9jZXNzTGF1
bmNoU2hvdWxkRmFpbEZvclRlc3RpbmcgeyBmYWxzZSB9OworCit2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6Om1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpCit7CisgICAg
bmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoU2hvdWxkRmFpbEZvclRlc3RpbmcgPSB0cnVlOworfQor
Citib29sIFdlYnNpdGVEYXRhU3RvcmU6OnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVu
Y2hGYWlsRm9yVGVzdGluZygpCit7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobmV4dE5ldHdv
cmtQcm9jZXNzTGF1bmNoU2hvdWxkRmFpbEZvclRlc3RpbmcsIGZhbHNlKTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oCmluZGV4IGU5ZGViYTQ4MDg4Yi4uYjgzNjFhYzczYzRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBA
IC01Myw2ICs1Myw4IEBACiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxwYWwvc3Bp
L2NmL0NGTmV0d29ya1NQSS5oPgorI2luY2x1ZGUgPHd0Zi9PU09iamVjdFB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogI2VuZGlmCiAKICNpZiBVU0UoQ1VSTCkKQEAg
LTc5LDYgKzgxLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBBdXRoZW50aWNhdG9yTWFu
YWdlcjsKIGNsYXNzIFNlY0tleVByb3h5U3RvcmU7CiBjbGFzcyBEZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZTsKK2NsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHk7CiBjbGFzcyBTT0F1dGhvcml6YXRpb25D
b29yZGluYXRvcjsKIGNsYXNzIFdlYkNlcnRpZmljYXRlSW5mbzsKIGNsYXNzIFdlYlBhZ2VQcm94
eTsKQEAgLTg4LDYgKzkxLDggQEAgY2xhc3MgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OwogZW51bSBjbGFzcyBDYWNoZU1vZGVsIDogdWludDhfdDsKIGVudW0gY2xhc3MgV2Vic2l0ZURh
dGFGZXRjaE9wdGlvbiA6IHVpbnQ4X3Q7CiBlbnVtIGNsYXNzIFdlYnNpdGVEYXRhVHlwZSA6IHVp
bnQzMl90OworCitzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mbzsKIHN0cnVjdCBX
ZWJzaXRlRGF0YVJlY29yZDsKIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczsKIApA
QCAtMTEzLDcgKzExOCwxMiBAQCBwdWJsaWM6CiAgICAgV2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vi
c2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB+V2Vi
c2l0ZURhdGFTdG9yZSgpOwogCi0gICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5n
Tm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CisgICAgc3Rh
dGljIHZvaWQgZm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0
YVN0b3JlJik+JiYpOworICAgIAorICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9j
ZXNzKCkgY29uc3Q7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MoKTsK
KworICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Np
b25JRChQQUw6OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlzUGVyc2lzdGVudCgpIGNvbnN0IHsg
cmV0dXJuICFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9CiAgICAgUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTEyMyw2ICsxMzMs
MTUgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94
eT4mIHByb2Nlc3NlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc2VzOyB9CiAKKyAgICB2b2lk
IGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8mKT4mJik7Cisg
ICAgdm9pZCB0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworICAgIHZvaWQgc2VuZE5ldHdvcmtQ
cm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZv
clRlc3RpbmcoKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOworICAg
IHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKTsKKyAgICBz
dGF0aWMgdm9pZCBtYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKTsK
KyAgICBzdGF0aWMgYm9vbCBzaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZv
clRlc3RpbmcoKTsKKwogICAgIGJvb2wgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSBj
b25zdDsKICAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wpOwog
ICAgIGJvb2wgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSgpIGNvbnN0OwpAQCAtMjM5
LDE1ICsyNTgsOCBAQCBwdWJsaWM6CiAKICAgICBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSYgZGV2
aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKSB7IHJldHVybiBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdl
LmdldCgpOyB9CiAKLSAgICBXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9y
YWdlT3BlcmF0aW9ucygpOwotICAgIGJvb2wgaXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJv
Y2Vzc1Bvb2wmKSBjb25zdDsKLQogICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHBhcmFt
ZXRlcnMoKTsKIAotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29raWVzKCkg
Y29uc3Q7Ci0gICAgdm9pZCBhZGRQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYp
OwotICAgIHZvaWQgcmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsK
LSAgICB2b2lkIGNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKICAgICB2b2lkIGZsdXNoQ29va2llcyhD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJDYWNoZWRDcmVkZW50
aWFscygpOwogCkBAIC0yNTUsNiArMjY3LDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlzcGF0
Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyAg
ICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKFdlYlByb2Nl
c3NQcm94eSYpOworICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb0FsbFdl
YlByb2Nlc3NlcygpOworI2VuZGlmCisKICNpZiBVU0UoQ1VSTCkKICAgICB2b2lkIHNldE5ldHdv
cmtQcm94eVNldHRpbmdzKFdlYkNvcmU6OkN1cmxQcm94eVNldHRpbmdzJiYpOwogICAgIGNvbnN0
IFdlYkNvcmU6OkN1cmxQcm94eVNldHRpbmdzJiBuZXR3b3JrUHJveHlTZXR0aW5ncygpIGNvbnN0
IHsgcmV0dXJuIG1fcHJveHlTZXR0aW5nczsgfQpAQCAtMjgwLDggKzI5Nyw2IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldE1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24oV2ViQ29yZTo6
TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbiYmKTsKICNlbmRpZgogCi0gICAgdm9p
ZCBkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAgY29uc3QgV2Vic2l0ZURhdGFTdG9y
ZUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24oKSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24u
Z2V0KCk7IH0KIAogICAgIFdlYnNpdGVEYXRhU3RvcmVDbGllbnQmIGNsaWVudCgpIHsgcmV0dXJu
IG1fY2xpZW50LmdldCgpOyB9CkBAIC0yOTEsNiArMzA2LDggQEAgcHVibGljOgogCiAgICAgdm9p
ZCByZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFVSTCYmLCBVUkwmJiwgT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBib29sIG5l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpOworCiAj
aWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICAgICBXZWJEZXZpY2VPcmllbnRhdGlvbkFu
ZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXImIGRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNz
Q29udHJvbGxlcigpIHsgcmV0dXJuIG1fZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3ND
b250cm9sbGVyOyB9CiAjZW5kaWYKQEAgLTM2Nyw3ICszODQsNyBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VE
aXJlY3RvcnksIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UpOwogICAgIHN0YXRpYyB2b2lkIHJlbW92
ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksIGNvbnN0
IEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYpOwogCi0gICAgdm9pZCBtYXli
ZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOworICAgIHZvaWQgcmVnaXN0ZXJXaXRoU2Vzc2lv
bklETWFwKCk7CiAKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpCiAgICAgc3RhdGljIE9w
dGlvbmFsPEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+PiBhcHBCb3VuZERvbWFp
bnNJZkluaXRpYWxpemVkKCk7CkBAIC00MDcsOCArNDI0LDYgQEAgcHJpdmF0ZToKICAgICBXZWJD
b3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3MgbV9uZXR3b3JrUHJveHlTZXR0aW5nczsKICNl
bmRpZgogCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1fcGVuZGluZ0Nvb2tpZXM7Ci0g
ICAgCiAgICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3NlczsKIAogICAg
IGJvb2wgbV9pc0l0cFN0YXRlRXhwbGljaXRseVNldCB7IGZhbHNlIH07CkBAIC00MjksNiArNDQ0
LDcgQEAgcHJpdmF0ZToKICAgICBVbmlxdWVSZWY8V2Vic2l0ZURhdGFTdG9yZUNsaWVudD4gbV9j
bGllbnQ7CiAKICAgICBSZWZQdHI8QVBJOjpIVFRQQ29va2llU3RvcmU+IG1fY29va2llU3RvcmU7
CisgICAgUmVmUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAKICNp
ZiBIQVZFKEFQUF9TU08pCiAgICAgVW5pcXVlUmVmPFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9y
PiBtX3NvQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVD
dXJsLmNwcAppbmRleCAwZTBjMDZlMWRlZDQuLjY0YjZjNzRkMDg2ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3Vy
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJz
aXRlRGF0YVN0b3JlQ3VybC5jcHAKQEAgLTQyLDggKzQyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5ncyYm
IHByb3gKIHsKICAgICBtX3Byb3h5U2V0dGluZ3MgPSBXVEZNb3ZlKHByb3h5U2V0dGluZ3MpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX3Nlc3Npb25JRCwgbV9wcm94eVNldHRpbmdz
KSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9zZXNzaW9uSUQsIG1fcHJveHlTZXR0aW5ncyksIDAp
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCmluZGV4IGM1Njk3NjBm
MTE4Mi4uZjBlOTQyZjMzNTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcApA
QCAtNDEsOCArNDEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29y
a1BhcmFtZXRlcnMoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmCiAgICAgbmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyA9IG1faWdub3JlVExTRXJyb3JzOwogICAgIG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5wcm94eVNldHRpbmdzID0gbV9uZXR3b3JrUHJveHlTZXR0
aW5nczsKIAotICAgIGlmIChhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2Vi
Q29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Np
b25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0
aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llUGVyc2lzdGVu
dFN0b3JhZ2UobV9zZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJz
aXN0ZW50U3RvcmFnZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0
ZW50U3RvcmFnZVR5cGUpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBlcnNpc3Rl
bnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoYm9vbCBlbmFibGVkKQpAQCAtNTQsOCArNTMsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVu
YWJsZWQoYm9vbCBlbmFibGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3BlcnNpc3RlbnRD
cmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBlbmFibGVkOwotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UGVyc2lzdGVudENyZWRl
bnRpYWxTdG9yYWdlRW5hYmxlZChtX3Nlc3Npb25JRCwgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0
b3JhZ2VFbmFibGVkKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChtX3Nlc3Np
b25JRCwgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKSwgMCk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3JlVExTRXJy
b3JzKQpAQCAtNjQsMTUgKzYyLDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SWdub3Jl
VExTRXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQogICAgICAgICByZXR1cm47CiAKICAgICBt
X2lnbm9yZVRMU0Vycm9ycyA9IGlnbm9yZVRMU0Vycm9yczsKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3
b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldElnbm9yZVRMU0Vycm9y
cyhtX3Nlc3Npb25JRCwgbV9pZ25vcmVUTFNFcnJvcnMpKTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRJZ25vcmVUTFNFcnJvcnMobV9zZXNz
aW9uSUQsIG1faWdub3JlVExTRXJyb3JzKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoV2ViQ29yZTo6U291cE5ldHdvcmtQcm94eVNldHRp
bmdzJiYgc2V0dGluZ3MpCiB7CiAgICAgbV9uZXR3b3JrUHJveHlTZXR0aW5ncyA9IFdURk1vdmUo
c2V0dGluZ3MpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkK
LSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9zZXNzaW9uSUQsIG1fbmV0
d29ya1Byb3h5U2V0dGluZ3MpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX3Nlc3Npb25JRCwgbV9u
ZXR3b3JrUHJveHlTZXR0aW5ncyksIDApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xp
Yi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIu
Y3BwCmluZGV4IDBhODRhNzU5MGQ5YS4uMjdmMjNlYTA2NWRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKQEAgLTQ0LDcg
KzQ0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoT3B0aW9ucyhQ
cm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGwKICAgICAgICAgaWYgKCFkYXRhU3RvcmUp
IHsKICAgICAgICAgICAgIC8vIFByZXdhcm1lZCBwcm9jZXNzZXMgZG9uJ3QgaGF2ZSBhIFdlYnNp
dGVEYXRhU3RvcmUgeWV0LCBzbyB1c2UgdGhlIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSBmcm9t
IHRoZSBXZWJQcm9jZXNzUG9vbC4KICAgICAgICAgICAgIC8vIFRoZSBwcm9jZXNzIHdvbid0IGJl
IHVzZWQgaWYgY3VycmVudCBXZWJzaXRlRGF0YVN0b3JlIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBX
ZWJQcm9jZXNzUG9vbCBwcmltYXJ5IG9uZS4KLSAgICAgICAgICAgIGRhdGFTdG9yZSA9IG1fcHJv
Y2Vzc1Bvb2wtPndlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICAgICAgICAgIGRhdGFTdG9yZSA9IFdl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKICAgICAgICAgfQogCiAg
ICAgICAgIEFTU0VSVChkYXRhU3RvcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKaW5kZXggOWY3YmUz
Yzk0MWI2Li5hYzA0ZTM4YTU3YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcApAQCAtMjYsNiArMjYs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94
eS5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYkNv
b2tpZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAKQEAg
LTMzLDggKzM0LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFn
ZVR5cGUgc3RvcmFnZVR5cGUpCiB7Ci0gICAgbV9jb29raWVQZXJzaXN0ZW50U3RvcmFnZU1hcC5z
ZXQoc2Vzc2lvbklELCBzdGQ6Om1ha2VfcGFpcihzdG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpKTsK
LSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBzdG9y
YWdlUGF0aCwgc3RvcmFnZVR5cGUpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAg
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0
Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBzdG9yYWdlUGF0aCwgc3RvcmFnZVR5
cGUpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nJiBzdG9yYWdlUGF0
aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSYgc3RvcmFnZVR5cGUpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291
cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5j
cHAKaW5kZXggNmI3YzViNDIyNGZhLi4wODFmNWJlMWNkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKQEAgLTM3LDE1ICsz
Nyw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9y
bUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyYgcGFyYW1ldGVycykKIHsKLSAgICBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyYg
ZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgc3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKGRlZmF1bHRTZXNz
aW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQ
ZXJzaXN0ZW50U3RvcmFnZVBhdGgsIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJz
aXN0ZW50U3RvcmFnZVR5cGUpOwotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAg
ICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVu
YWJsZWQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVu
YWJsZWQoKTsKLSAgICAgICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9y
cyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+aWdub3JlVExTRXJyb3JzKCk7Ci0gICAgICAgIGRlZmF1
bHRTZXNzaW9uUGFyYW1ldGVycy5wcm94eVNldHRpbmdzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5u
ZXR3b3JrUHJveHlTZXR0aW5ncygpOwotICAgIH0KLQotICAgIHBhcmFtZXRlcnMuY29va2llQWNj
ZXB0UG9saWN5ID0gbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeTsKICAgICBwYXJhbWV0
ZXJzLmxhbmd1YWdlcyA9IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKTsKICAgICBwYXJhbWV0ZXJz
LnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bkluZm8uaAppbmRleCA4MzUwZGJhY2Y4ZDUuLjlmNDY4NWQxM2FiZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5m
by5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbkluZm8uaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0hUVFBDb29raWVBY2NlcHRQ
b2xpY3kuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmI1OWNlZWJjMmMzLi40NzVkNzNlMmJmNDIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw5OCBAQAorMjAyMC0wOS0yNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgorCisgICAgICAgIE1vdmUgTmV0d29ya1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgZnJv
bSBXZWJQcm9jZXNzUG9vbCB0byBXZWJzaXRlRGF0YVN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYwNDEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3N0IGNoYW5nZXMgdG8gdGVzdHMgYXJlIGp1
c3QgY2FsbGluZyBhIGZ1bmN0aW9uIG9uIHRoZSBXS1dlYnNpdGVEYXRhU3RvcmUgaW5zdGVhZCBv
ZiB0aGUgV0tQcm9jZXNzUG9vbAorICAgICAgICBiZWNhdXNlIHdlIHdhbnQgdG8gZG8gc29tZXRo
aW5nIHdpdGggdGhlIG5ldHdvcmsgcHJvY2VzcyBhbmQgaXQgaGFzIGEgbmV3IG93bmVyLgorICAg
ICAgICBFeGNlcHRpb25zIGFyZSBub3RlZCBpbmxpbmUuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9u
Lm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OmRvd25sb2FkQXRSYXRlKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tOgorICAg
ICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJJbmRleFVwZ3JhZGVUb1YyLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5t
bToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbToKKyAgICAgICAgKFRFU1QpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQ
cm9jZXNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbToKKyAgICAgICAgKFRFU1QpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVu
ZEltbWluZW50bHkubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbToKKyAgICAgICAgKFRF
U1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9y
YWdlUGVyc2lzdGVuY2UubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tOgorICAgICAgICAoVEVTVCk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vz
c0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbToKKyAgICAgICAgKGNoZWNrUmVjb3ZlcnlB
ZnRlckNyYXNoKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1By
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbToKKyAgICAgICAgKFRFU1QpOgor
ICAgICAgICBUaGlzIHRlc3Qgd2FzIG1ha2luZyBhIFdLV2Vic2l0ZURhdGFTdG9yZSwgZ2V0dGlu
ZyBpdHMgcmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNzIGRpcmVjdG9yeSwKKyAgICAgICAgcHV0dGlu
ZyB0aGluZ3MgaW4gdGhhdCBkaXJlY3RvcnksIHRoZW4gc3RhcnRpbmcgdGhlIG5ldHdvcmsgcHJv
Y2VzcyBhbmQgbWFraW5nIHN1cmUgZXZlcnl0aGluZworICAgICAgICB3b3JrcyB3aGVuIGluaXRp
YWxpemluZyB0aGUgbmV0d29yayBwcm9jZXNzLiAgTm93LCBuZXR3b3JrIHByb2Nlc3MgaW5pdGlh
bGl6YXRpb24gaGFwcGVucyB3aGVuIGEKKyAgICAgICAgV0tXZWJzaXRlRGF0YVN0b3JlIGlzIGlu
c3RhbnRpYXRlZCwgc28gd2UgbmVlZCB0byBwdXQgdGhpbmdzIHRoZXJlIGJlZm9yZSBpbnN0YW50
aWF0aW5nIGEgV0tXZWJzaXRlRGF0YVN0b3JlLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tOgorICAgICAgICBCZWZvcmUgdGhp
cyBjaGFuZ2UsIGVhY2ggV0tQcm9jZXNzUG9vbCBoYWQgaXRzIG93biBuZXR3b3JrIHByb2Nlc3Ms
IHdoaWNoIGhvbGRzIHRoZSBzZXJ2aWNlIHdvcmtlciByZWdpc3RyeQorICAgICAgICBmb3IgdGhl
IFdlYnNpdGVEYXRhU3RvcmVzIHVzZWQgd2l0aCB0aGF0IHByb2Nlc3MgcG9vbC4gIE5vdywgdGhl
IG5ldHdvcmsgcHJvY2VzcyBzdGlsbCBuZWVkcyB0byBoYXZlIGEgc2VydmljZQorICAgICAgICB3
b3JrZXIgcmVnaXN0cnkgaW4gaXQsIGJ1dCB3aGVuIHdlIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20g
aXQgbG9va2luZyBmb3IgYSB3ZWIgcHJvY2VzcyB0byBydW4gdGhlIHNlcnZpY2UKKyAgICAgICAg
d29ya2VyLCB3ZSBnbyBhcmJpdHJhcmlseSB0byB0aGUgZmlyc3QgcHJvY2VzcyBwb29sIHRoYXQg
aGFzIGEgcHJvY2VzcyB3ZSBjYW4gdXNlLiAgVGhpcyBsb2dpYyBpcyBpbiAKKyAgICAgICAgV2Vi
UHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJv
Y2Vzcy4gIEJlY2F1c2Ugd2UgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wgZWFjaAorICAgICAg
ICB0aW1lLCBzZXR0aW5nIHRoZSBjdXN0b20gdXNlciBhZ2VudCB0byB0d28gZGlmZmVyZW50IHRo
aW5ncyBpbiB0d28gZGlmZmVyZW50IHByb2Nlc3MgcG9vbHMgY2F1c2VzIG9ubHkgb25lCisgICAg
ICAgIHRvIGJlIHVzZWQuICBUaGlzIGlzIG5vdCBhIHByb2JsZW0gaW4gcHJhY3RpY2UsIHRob3Vn
aCwgYmVjYXVzZSB0aGUgb25seSBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgdGhlIFNQSSB0bworICAg
ICAgICBzZXQgYSBzZXJ2aWNlIHdvcmtlcidzIGN1c3RvbSB1c2VyIGFnZW50IGlzIFNhZmFyaSwg
d2hpY2ggb25seSBoYXMgb25lIHByb2Nlc3MgcG9vbC4gIFRoaXMgdGVzdCBzdGlsbCB2ZXJpZmll
cworICAgICAgICB0aGF0IGEgdXNlciBhZ2VpbnQgaXMgY29ycmVjdGx5IHNlbnQuCisgICAgICAg
IFNpbWlsYXJseSwgdGhlIHRlc3RzIHRoYXQgY291bnQgc2VydmljZSB3b3JrZXIgcHJvY2Vzc2Vz
IGVpdGhlciBoYXZlIGRpZmZlcmVudCByZXN1bHRzIG9yIG5lZWQgdG8gYmUgcnVuIHdpdGgKKyAg
ICAgICAgb25lIHByb2Nlc3MgcG9vbCBwZXIgcGFyZW50IHByb2Nlc3MuICBUbyBrZWVwIHRoZSBy
ZXN1bHRzIHRoZSBzYW1lLCBJIHNlcGFyYXRlZCB0aGUgdGVzdHMgaW50byBkaWZmZXJlbnQKKyAg
ICAgICAgVEVTVChTZXJ2aWNlV29ya2VycywgLi4uKSBtYWNyb3Mgd2hpY2ggYXJlIHJ1biBpbiBz
ZXBhcmF0ZSBwYXJlbnQgcHJvY2Vzc2VzLgorICAgICAgICBUaGUgdGVzdCBSZXN0b3JlRnJvbURp
c2tOb25EZWZhdWx0U3RvcmUgbmVlZHMgdG8gdXNlIHRoZSBzYW1lIGRhdGEgc3RvcmUgZm9yIGJv
dGggV0tXZWJWaWV3cyBub3cgYmVjYXVzZSBvdGhlcndpc2UKKyAgICAgICAgdGhlcmUgd2FzIGEg
cmFjZSBjb25kaXRpb24gaW4gdGhlIHN0YXJ0dXAgb2YgYSBuZXcgbmV0d29yayBwcm9jZXNzIHRo
YXQgd2Fzbid0IHRoZXJlIGJlZm9yZSBiZWNhdXNlIHdlIHdlcmUgdXNpbmcgdGhlCisgICAgICAg
IHNhbWUgcHJvY2VzcyBwb29sIGFuZCB0aGVyZWZvcmUgdGhlIHNhbWUgbmV0d29yayBwcm9jZXNz
LiAgSSBhZGRlZCBzcGlubmluZyB0aGUgcnVuIGxvb3AgYW5kIHNsZWVwaW5nIHRvIGJlIGFibGUg
dG8KKyAgICAgICAgcmVwcm9kdWNlIHRoZSByYWNlIGNvbmRpdGlvbiBmYWlsdXJlIGFuZCBJIHVz
ZSB0aGUgc2FtZSBXS1dlYnNpdGVEYXRhU3RvcmUgdG8gdXNlIHRoZSBzYW1lIG5ldHdvcmsgcHJv
Y2Vzcywgd2hpY2ggd2FzCisgICAgICAgIHRoZSBpbnRlbnQgb2YgdXNpbmcgdGhlIHNhbWUgV0tQ
cm9jZXNzUG9vbCBiZWZvcmUuICBUaGUgdGVzdCBzdGlsbCB0ZXN0cyB0aGF0IHRoZSByZWdpc3Ry
YXRpb24gaXMgcmUtdXNlZCB3aGVuIHdlIGFyZQorICAgICAgICBub3QgdXNpbmcgdGhlIGRlZmF1
bHQgZGF0YSBzdG9yZS4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1NlcnZpY2VXb3JrZXJCYXNpYy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25D
b29raWVVSURlbGVnYXRlIHdlYlZpZXc6cnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2Fn
ZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtDaGVj
a1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSk6CisgICAgICAgICgtW0No
ZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSk6CisgICAgICAgIChU
RVNUKToKKyAgICAgICAgVGhpcyBpcyB0aGUgd2hvbGUgcG9pbnQgb2YgbWUgZG9pbmcgdGhpcy4K
KyAgICAgICAgSSB0b29rIGEgdGVzdCB0aGF0IHdhcyBmbGFreSBvbmx5IG9uIGlPUyAoYmVjYXVz
ZSBvZiBkaWZmZXJlbnQgTlNIVFRQQ29va2llU3RvcmFnZSBzeW5jaW5nIGJlaGF2aW9yKSBhbmQg
bWFkZQorICAgICAgICBpdCBmbGFreSBub3doZXJlIChmaW5nZXJzIGNyb3NzZWQhKSBhbmQgYWRk
ZWQgYSB0ZXN0IHRoYXQgY29ycmVjdGx5IGhhbmRsZXMgc2Vzc2lvbiBjb29raWVzIGxpa2Ugd2Ug
Y291bGQgbm90CisgICAgICAgIGJlZm9yZSB0aGlzIGNoYW5nZS4KKyAgICAgICAgSSBhbHNvIHJl
LXVzZWQgc29tZSB0ZXN0IGluZnJhc3RydWN0dXJlIGFuZCBtYWRlIGl0IHN0b3AgdXNpbmcgcHJv
Y2Vzcy1nbG9iYWwgc3RhdGljIHZhcmlhYmxlcyBmb3IgdGVzdCBzdGF0ZS4KKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5t
bToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tOgorICAgICAgICAocnVuV2Vic2l0
ZURhdGFTdG9yZUN1c3RvbVBhdGhzKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2JqQy9DdXN0b21Qcm90b2NvbHNUZXN0Lm1tOgorICAgICAg
ICAoLVtDbG9zZVdoaWxlU3RhcnRpbmdQcm90b2NvbCBzdGFydExvYWRpbmddKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OnJ1blRlc3QpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0
ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpmaW5k
QW5kRHVtcFdlYktpdFByb2Nlc3NJZGVudGlmaWVycyk6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjpuZXR3b3JrUHJvY2Vzc0RpZENyYXNoKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dCk6CisgICAgICAgIFdLQ29udGV4dFNldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcgaXMgbm90IG5lZWRlZCwg
c28gSSByZW1vdmVkIGl0LgorICAgICAgICBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFT
dG9yZSBpc24ndCBuZWVkZWQgYW55IG1vcmUgYmVjYXVzZSBXS0NvbnRleHRSZWYgKFdlYlByb2Nl
c3NQb29sKSBkb2Vzbid0CisgICAgICAgIG93biBhIG5ldHdvcmsgcHJvY2VzcyBhbnkgbW9yZSwg
c28gaXQgZG9lc24ndCBjYXJlIHdoaWNoIGlzIHRoZSBkZWZhdWx0IFdlYnNpdGVEYXRhU3RvcmUu
CisgICAgICAgIEluIGZhY3QsIHRoZSAiZGVmYXVsdCIgV2Vic2l0ZURhdGFTdG9yZSBpc24ndCBy
ZWFsbHkgaW1wb3J0YW50IGluIHRoZSBuZXR3b3JrIHByb2Nlc3MgYW55IG1vcmUuCisKIDIwMjAt
MDktMjQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFtHVEtdW1dQRV0gTW92ZSBwcm94eSBzZXR0aW5ncyBmcm9tIFdlYktpdENvbnRleHQgdG8g
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdp
dGhQZW5kaW5nQ29ubmVjdGlvbi5tbQppbmRleCA5NzM4OWYwMWZmMmUuLjk3YjcyZTAxNmRlZCAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nl
c3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1t
CkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzR3JvdXBQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0
b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgogCkBAIC04Nyw3ICs4OCw3IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vz
c0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uKQogICAgIHBpZF90IHdlYlZpZXcyUElEID0gW3dl
YlZpZXcyLmdldCgpIF93ZWJQcm9jZXNzSWRlbnRpZmllcl07CiAgICAgRVhQRUNUX05FKHdlYlZp
ZXcxUElELCB3ZWJWaWV3MlBJRCk7CiAKLSAgICBwaWRfdCBpbml0aWFsTmV0d29ya1Byb2Nlc3NJ
ZGVudGlmaWZlciA9IFtwcm9jZXNzUG9vbC5nZXQoKSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVy
XTsKKyAgICBwaWRfdCBpbml0aWFsTmV0d29ya1Byb2Nlc3NJZGVudGlmaWZlciA9IFtjb25maWd1
cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl07
CiAgICAgRVhQRUNUX05FKGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVyLCAwKTsKICAg
ICBraWxsKGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVyLCBTSUdLSUxMKTsKICAgICBV
dGlsOjpydW4oJm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk7CkBAIC05Niw3ICs5Nyw3IEBAIFRFU1Qo
V2ViS2l0LCBOZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uKQogICAgIFt3
ZWJWaWV3MS5nZXQoKSBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltb
TlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNp
b246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXV07CiAg
ICAgW3dlYlZpZXcxLmdldCgpIF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKIAot
ICAgIHBpZF90IHJlbGF1bmNoZWROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIgPSBbcHJvY2Vzc1Bv
b2wuZ2V0KCkgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl07CisgICAgcGlkX3QgcmVsYXVuY2hl
ZE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllciA9IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVE
YXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl07CiAgICAgRVhQRUNUX05FKGluaXRp
YWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVyLCByZWxhdW5jaGVkTmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKTsKICAgICBFWFBFQ1RfRkFMU0UobmV0d29ya1Byb2Nlc3NDcmFzaGVkKTsKIApAQCAt
MTQ2LDggKzE0Nyw4IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc1JlbGF1bmNoT25MYXVu
Y2hGYWlsdXJlKQogCiAgICAgLy8gQ29uc3R1Y3RpbmcgYSBXZWJWaWV3IHN0YXJ0cyBhIG5ldHdv
cmsgcHJvY2VzcyBzbyB0ZXJtaW5hdGUgdGhpcyBvbmUuIFRoZSBwYWdlIGxvYWQgYmVsb3cgd2ls
bCB0aGVuIHJlcXVlc3QgYSBuZXR3b3JrIHByb2Nlc3MgYW5kIHdlCiAgICAgLy8gbWFrZSB0aGlz
IG5ldyBuZXR3b3JrIHByb2Nlc3MgbGF1bmNoIGNyYXNoIG9uIHN0YXJ0dXAuCi0gICAgW3Byb2Nl
c3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107Ci0gICAgW3Byb2Nlc3NQb29sIF9tYWtl
TmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmddOworICAgIFtXS1dlYnNpdGVE
YXRhU3RvcmUgX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZ107Cisg
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOwogCiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tNb25pdG9yV2ViQ29u
dGVudENyYXNoTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CiAgICAgW3dlYlZpZXcg
c2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKQEAgLTE1OCw3ICsxNTksNyBA
QCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NSZWxhdW5jaE9uTGF1bmNoRmFpbHVyZSkKICAg
ICBFWFBFQ1RfVFJVRShuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOwogICAgIEVYUEVDVF9GQUxTRSh3
ZWJQcm9jZXNzQ3Jhc2hlZCk7CiAgICAgRVhQRUNUX0dUKFt3ZWJWaWV3IF93ZWJQcm9jZXNzSWRl
bnRpZmllcl0sIDApOwotICAgIEVYUEVDVF9HVChbcHJvY2Vzc1Bvb2wuZ2V0KCkgX25ldHdvcmtQ
cm9jZXNzSWRlbnRpZmllcl0sIDApOworICAgIEVYUEVDVF9HVChbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCAwKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0KaW5kZXggYjdlZDk5OTM5ZmQ1Li4xODE5MTMx
YzlhMGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
RG93bmxvYWQubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9E
b3dubG9hZC5tbQpAQCAtODg5LDkgKzg4OSw5IEBAIHZvaWQgZG93bmxvYWRBdFJhdGUoZG91Ymxl
IGRlc2lyZWRLYnBzLCB1bnNpZ25lZCBzcGVlZE11bHRpcGxpZXIsIEFwcFJldHVybnNUb0ZvCiAg
ICAgcmVjZWl2ZWREYXRhID0gZmFsc2U7CiAgICAgVXRpbDo6cnVuKCZyZWNlaXZlZERhdGEpOwog
ICAgIC8vIFN0YXJ0IHRoZSBEb3dubG9hZE1vbml0b3IncyB0aW1lci4KLSAgICBbW3dlYlZpZXcg
Y29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVT
XTsKKyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfc3ludGhl
c2l6ZUFwcElzQmFja2dyb3VuZDpZRVNdOwogICAgIGlmIChyZXR1cm5Ub0ZvcmVncm91bmQgPT0g
QXBwUmV0dXJuc1RvRm9yZWdyb3VuZDo6WWVzKQotICAgICAgICBbW3dlYlZpZXcgY29uZmlndXJh
dGlvbl0ucHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9dOworICAgICAg
ICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFw
cElzQmFja2dyb3VuZDpOT107CiAgICAgZGlkQ2FuY2VsID0gZmFsc2U7CiAgICAgVXRpbDo6cnVu
KCZkaWRDYW5jZWwpOwogICAgIHRlcm1pbmF0ZVNlcnZlciA9IHRydWU7CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwu
bW0KaW5kZXggNWNkN2FiZGEwMWQxLi5kNzdhNmZkOTg3OWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbQorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0K
QEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktp
dC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2lt
cG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC04Niw3ICs4Nyw3IEBAIFRFU1Qo
SW5kZXhlZERCLCBDaGVja3BvaW50c1dBTEF1dG9tYXRpY2FsbHkpCiAgICAgUmV0YWluUHRyPFdL
V2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3
Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29u
dGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFt
ZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9v
bCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFJldGFpblB0
cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJh
dGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQppbmRleCBjOGFmMWQyNDNjNGYuLmJi
ZjFhMTUyMTVkYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCkBAIC0zMCw2ICszMCw3IEBACiAjaW1w
b3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1Vz
ZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdD
b25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9y
ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9f
V0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5
bGVTaGVldC5oPgpAQCAtNTcsNyArNTgsNyBAQCBURVNUKEluZGV4ZWREQiwgRGVsZXRlUmVjb3Zl
cnkpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtb
Y29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5k
bGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKIAogICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0
aGUgZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5C
dW5kbGVdIFVSTEZvclJlc291cmNlOkAiSURCRGVsZXRlUmVjb3ZlcnkiIHdpdGhFeHRlbnNpb246
QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVw
Z3JhZGVUb1YyLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJ
bmRleFVwZ3JhZGVUb1YyLm1tCmluZGV4IDk1Y2NhMGNlMjgxNi4uODhhNTNmNjFkOWQ5IDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBn
cmFkZVRvVjIubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJJbmRleFVwZ3JhZGVUb1YyLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQv
V0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29u
dHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9u
UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpA
QCAtNTgsNyArNTksNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhVcGdyYWRlVG9WMikKICAgICBS
ZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMo
W1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0
aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxl
ci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRp
b24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAg
ICAgLy8gQ29weSB0aGUgaW5jb25zaXN0ZW50IGRhdGFiYXNlIGZpbGVzIHRvIHRoZSBkYXRhYmFz
ZSBkaXJlY3RvcnkKICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJM
Rm9yUmVzb3VyY2U6QCJJbmRleFVwZ3JhZGUiIHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJk
aXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRl
VG9WMi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0
U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KaW5kZXggZmZhNWE3ODc4YTQ3Li40MDNlMGZmYTgyMTIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2Jq
ZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQpAQCAtMzEsNiAr
MzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1w
b3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJL
aXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJbmRleGVkREIs
IElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyKQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdD
b25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250
cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0
SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0
YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IGRhdGFiYXNl
IGZpbGVzIHdpdGggb2xkIE9iamVjdFN0b3JlSW5mbyBzY2hlbWEgdG8gdGhlIGRhdGFiYXNlIGRp
cmVjdG9yeS4KICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9y
UmVzb3VyY2U6QCJJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3Fs
aXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJh
c2VQcm9jZXNzS2lsbC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQppbmRleCA2ODc0NTI5ZWJiZjMuLjczMDc3
ZWNkZmQzNiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQpAQCAt
MzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktp
dC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+
CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0
IDx3dGYvUmV0YWluUHRyLmg+CkBAIC05Miw3ICs5Myw3IEBAIFRFU1QoSW5kZXhlZERCLCBEYXRh
YmFzZVByb2Nlc3NLaWxsKQogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2Vp
dmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgICAgIGlmICgha2lsbGVkREJQcm9jZXNzICYmIG9wZW5S
ZXF1ZXN0VXBncmFkZU5lZWRlZCkgewogICAgICAgICAgICAga2lsbGVkREJQcm9jZXNzID0gdHJ1
ZTsKLSAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CisgICAgICAgICAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJz
aXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgICAgIH0KICAgICB9
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5k
ZXhlZERCTXVsdGlQcm9jZXNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0KaW5kZXggN2Y2MjY0NWQ5OTYwLi42ZjY3ZGMy
N2VkYzMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCkBAIC0zMiw2ICszMiw3IEBACiAj
aW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3Jl
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5o
PgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CiAjaW1wb3J0IDx3dGYvRGVx
dWUuaD4KQEAgLTY5LDcgKzcwLDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQk11bHRpUHJv
Y2VzcykKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAg
W1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhh
bmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOwogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkg
Y29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3Rl
bmNlLm1tCmluZGV4IGIzMmNlNGE1ZjczOC4uZDYyMjAzMjJlNDc4IDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVy
c2lzdGVuY2UubW0KQEAgLTc4LDcgKzc4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlBl
cnNpc3RlbmNlKQogICAgIHdlYlZpZXcgPSBuaWw7CiAKICAgICAvLyBUZXJtaW5hdGUgdGhlIG5l
dHdvcmsgcHJvY2VzcwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURh
dGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gTWFrZSBhIG5ldyB3
ZWIgdmlldyB0byBmaW5pc2ggdGhlIHRlc3QKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25m
aWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTI2OCw3ICsyNjgsNyBAQCBURVNU
KEluZGV4ZWREQiwgSW5kZXhlZERCVGhpcmRQYXJ0eUZyYW1lSGFzQWNjZXNzKQogCiAgICAgd2Vi
VmlldyA9IG5pbDsKICAgICBzZWNvbmRXZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OwogCiAgICAgLy8gVGhpcmQtcGFydHkgSURCIHN0b3JhZ2UgaXMgc3RvcmVkIGluIHRoZSBtZW1v
cnkgb2YgbmV0d29yayBwcm9jZXNzLgogICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhb
W1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAw
KSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTM4NSw3ICszODUsNyBA
QCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCVGhpcmRQYXJ0eVdvcmtlckhhc0FjY2VzcykKIAog
ICAgIHdlYlZpZXcgPSBuaWw7CiAgICAgc2Vjb25kV2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKIAogICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0
aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBsb2FkVGVzdFBhZ2VJbldlYlZpZXcodGhp
cmRXZWJWaWV3LmdldCgpLCBAImRhdGFiYXNlIGlzIGNyZWF0ZWQiKTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWlu
ZW50bHkubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QlN1c3BlbmRJbW1pbmVudGx5Lm1tCmluZGV4IDhlYzY1ZjBhM2JhOS4uNTEwYjI0ZjU2OWQyIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QlN1c3BlbmRJbW1pbmVudGx5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0KQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0
YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2Vi
S2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgpAQCAtODgsOCArODksOCBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCU3VzcGVuZElt
bWluZW50bHkpCiAKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJDb250aW51ZSIpOwogCi0g
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1dp
bGxTdXNwZW5kSW1taW5lbnRseV07Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0
KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVu
dGx5XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiRXhw
ZWN0ZWQgQWJvcnQgRm9yIFN1c3BlbnNpb24iKTsKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQo
QCJFeHBlY3RlZCBTdWNjZXNzIEFmdGVyIFJlc3VtZSIpOwpAQCAtMTU4LDggKzE1OSw4IEBAIFRF
U1QoSW5kZXhlZERCLCBTdXNwZW5kSW1taW5lbnRseUZvclRoaXJkUGFydHlEYXRhYmFzZXMpCiAg
ICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6bWFpbkZyYW1lU3RyaW5nIGJhc2VVUkw6W05TVVJM
IFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vd2Via2l0Lm9yZyJdXTsKICAgICBydW5UZXN0QW5kQ2hl
Y2tSZXN1bHQoQCJkYXRhYmFzZSBpcyBjcmVhdGVkIik7CiAKLSAgICBbY29uZmlndXJhdGlvbi5n
ZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5
XTsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3Jl
IF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3Vt
ZV07CiAKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJ0cmFuc2FjdGlvbiBpcyBjb21wbGV0
ZWQiKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0KaW5kZXggNTM2NTQxZTNiMGU1Li5l
N2I5OTIyOGNlODcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCkBAIC05NSw3ICs5NSw3
IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUZW1wRmlsZVNpemUpCiAKICAgICAvLyBUZXJt
aW5hdGUgbmV0d29yayBwcm9jZXNzIHRvIGtlZXAgV0FMIG9uIGRpc2suCiAgICAgd2ViVmlldyA9
IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFu
YWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDp3YWxGaWxlUGF0aC5nZXQoKS5w
YXRoXSk7CiAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gZmlsZUF0dHJpYnV0ZXMgPSBbW05T
RmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGF0dHJpYnV0ZXNPZkl0ZW1BdFBhdGg6d2FsRmls
ZVBhdGguZ2V0KCkucGF0aCBlcnJvcjpuaWxdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2Uu
bW0KaW5kZXggNDEzM2VlN2IzZGFlLi41Zjc5MTkwOTQzYzcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQ
ZXJzaXN0ZW5jZS5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNv
bnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZp
Z3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJwYWdlUHJlZmVyZW5jZXNQ
cml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29s
Q29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBA
IC0xMDksNyArMTEwLDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NDcmFz
aGVzKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdl
KTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJzZXNzaW9uOnN0b3JhZ2UiLCBbbGFzdFNjcmlwdE1l
c3NhZ2UgYm9keV0pOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRl
RGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICByZWNlaXZlZFNjcmlw
dE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVk
U2NyaXB0TWVzc2FnZSk7CkBAIC0xNjIsNyArMTYzLDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2Fs
U3RvcmFnZVByb2Nlc3NTdXNwZW5kcykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJl
Y2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAidmFsdWUiLCBbbGFz
dFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCi0gICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseV07CiAKICAgICByZWFkeVRvQ29udGludWUgPSBmYWxzZTsKICAgICBbd2ViVmlldzEgZXZh
bHVhdGVKYXZhU2NyaXB0OkAid2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdrZXknLCAnbmV3
VmFsdWUnKSIgY29tcGxldGlvbkhhbmRsZXI6XihpZCwgTlNFcnJvciAqKSB7CkBAIC0xNzcsNyAr
MTc4LDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5kcykKICAg
ICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlYWR5VG9Db250aW51ZSk7CiAg
ICAgCi0gICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVd
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3Jr
UHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsK
ICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQ
cm9jZXNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3Jr
UHJvY2Vzcy5tbQppbmRleCBlNjBmODgwMjVkMDkuLjBlMjFmOTA5NTAwMSAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNz
Lm1tCkBAIC0yOCw3ICsyOCw3IEBACiAjaW1wb3J0ICJIVFRQU2VydmVyLmgiCiAjaW1wb3J0ICJU
ZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVdGlsaXRpZXMuaCIKLSNpbXBvcnQgPFdlYktpdC9X
S1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9y
ZVByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgpAQCAtMzcsMTQgKzM3LDE0IEBAIFRFU1Qo
V2ViS2l0LCBOZXR3b3JrUHJvY2Vzc0VudGl0bGVtZW50cykKIHsKICAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0
KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOltbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24g
YWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXV0pOwogICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlM
b2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBsZSJdOwotICAgIFdLUHJvY2Vzc1Bvb2wgKnBvb2wgPSBb
d2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbDsKLSAgICBib29sIGhhc0VudGl0bGVt
ZW50ID0gW3Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAiY29t
LmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0TmV0d29ya2luZ1NhbmRib3giXTsKKyAgICBX
S1dlYnNpdGVEYXRhU3RvcmUgKnN0b3JlID0gW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0
ZURhdGFTdG9yZTsKKyAgICBib29sIGhhc0VudGl0bGVtZW50ID0gW3N0b3JlIF9uZXR3b3JrUHJv
Y2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAImNvbS5hcHBsZS5yb290bGVzcy5zdG9yYWdl
LldlYktpdE5ldHdvcmtpbmdTYW5kYm94Il07CiAjaWYgUExBVEZPUk0oTUFDKSAmJiBVU0UoQVBQ
TEVfSU5URVJOQUxfU0RLKQogICAgIEVYUEVDVF9UUlVFKGhhc0VudGl0bGVtZW50KTsKICNlbHNl
CiAgICAgRVhQRUNUX0ZBTFNFKGhhc0VudGl0bGVtZW50KTsKICNlbmRpZgotICAgIEVYUEVDVF9G
QUxTRShbcG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJ0ZXN0
IGZhaWx1cmUgY2FzZSJdKTsKKyAgICBFWFBFQ1RfRkFMU0UoW3N0b3JlIF9uZXR3b3JrUHJvY2Vz
c0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVyZSBjYXNlIl0pOwogfQogCiBU
RVNUKFdlYktpdCwgSFRUUFJlZmVyZXIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0
b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJv
Y2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQppbmRleCA2MDk4ZThkYWQyNTIuLjJm
OGEyZTMzZmU4NyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hO
b25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyB2b2lkIGNo
ZWNrUmVjb3ZlcnlBZnRlckNyYXNoKFdLV2Vic2l0ZURhdGFTdG9yZSAqZGF0YVN0b3JlKQogICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwogCi0g
ICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNV
UkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnNpbXBsZTJdXTsKICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmRvbmUpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KaW5kZXgg
OTVkYzlkOThkZjEzLi5kZjMyMGQ2NGRhZGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlv
bi5tbQpAQCAtNTM4NSw3ICs1Mzg1LDcgQEAgVEVTVChQcm9jZXNzU3dhcCwgVXNlUHJld2FybWVk
UHJvY2Vzc0FmdGVyVGVybWluYXRpbmdOZXR3b3JrUHJvY2VzcykKIAogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CisgICAgW3dlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVE
YXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIg
PSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwg
MCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246d2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsK
ICAgICBbd2ViVmlldzIgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VM
b2FkU3RhdGlzdGljcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
UmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQppbmRleCAwZTEwYzM0ZWVjODIuLmEzYWJhMjMxYTkz
YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQpAQCAtNzE5LDcgKzcxOSw3IEBAIFRF
U1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTmV0d29ya1Byb2Nlc3NSZXN0YXJ0KQogCiAgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOwogCkBAIC03NTIsNyArNzUyLDcgQEAgVEVTVChSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLCBOZXR3b3JrUHJvY2Vzc1Jlc3RhcnQpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQ
b29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCku
d2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3
ZWJWaWV3MyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7
CiAKQEAgLTE1NTgsMTAgKzE1NTgsOCBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE1p
Z3JhdGVEYXRhRnJvbU1pc3NpbmdUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0U2FtZVNpdAogCiBURVNU
KFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vz
c1Bvb2wpCiB7CisgICAgTlNVUkwgKml0cFJvb3RVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRo
OltOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpA
IkNhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2xUZXN0Il0gaXNEaXJlY3Rvcnk6
WUVTXTsKICAgICBhdXRvIGRlZmF1bHRGaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1
bHRNYW5hZ2VyXTsKLSAgICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0
b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3
XSBhdXRvcmVsZWFzZV07Ci0gICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0
b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25d
IGF1dG9yZWxlYXNlXTsKLSAgICBOU1VSTCAqaXRwUm9vdFVSTCA9IFtbZGF0YVN0b3JlIF9jb25m
aWd1cmF0aW9uXSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeV07CiAgICAgTlNVUkwg
KmZpbGVVUkwgPSBbaXRwUm9vdFVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJvYnNl
cnZhdGlvbnMuZGIiXTsKICAgICBbZGVmYXVsdEZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFBhdGg6
aXRwUm9vdFVSTC5wYXRoIGVycm9yOm5pbF07CiAgICAgRVhQRUNUX0ZBTFNFKFtkZWZhdWx0Rmls
ZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDppdHBSb290VVJMLnBhdGhdKTsKQEAgLTE1NzIsNiAr
MTU3MCwxMCBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0RhdGFTdW1t
YXJ5V2l0aE5vUHJvY2Vzc1Bvb2wpCiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1bHRGaWxlTWFuYWdl
ciBmaWxlRXhpc3RzQXRQYXRoOm5ld0ZpbGVVUkwucGF0aF0pOwogICAgIFtkZWZhdWx0RmlsZU1h
bmFnZXIgY29weUl0ZW1BdFBhdGg6bmV3RmlsZVVSTC5wYXRoIHRvUGF0aDpmaWxlVVJMLnBhdGgg
ZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlz
dHNBdFBhdGg6ZmlsZVVSTC5wYXRoXSk7CisKKyAgICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNv
bmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgZGF0YVN0b3JlQ29uZmlndXJhdGlv
bi5fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IGl0cFJvb3RVUkw7CisgICAgYXV0
byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25m
aWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKICAgICBbZGF0
YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZRVNdOwogCiAgICAgc3Rh
dGljIGJvb2wgZG9uZUZsYWcgPSBmYWxzZTsKQEAgLTE2MzMsMTIgKzE2MzUsMTIgQEAgVEVTVChS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBTdG9yZVN1c3BlbnNpb24pCiAgICAgW3dlYlZpZXcyIF90
ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKIAogICAgIGRvbmVGbGFnID0gZmFsc2U7
Ci0gICAgW3NoYXJlZFByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNw
ZW5kOl57CisgICAgW2RhdGFTdG9yZTEgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3Bl
bmQ6XnsKICAgICAgICAgZG9uZUZsYWcgPSB0cnVlOwogICAgIH1dOwogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcpOwogCi0gICAgW3NoYXJlZFByb2Nlc3NQb29sIF9zZW5k
TmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtkYXRhU3RvcmUxIF9zZW5kTmV0d29ya1By
b2Nlc3NEaWRSZXN1bWVdOwogfQogCiBAaW50ZXJmYWNlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
Y2hlbWVIYW5kbGVyIDogTlNPYmplY3QgPFdLVVJMU2NoZW1lSGFuZGxlcj4KZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2lj
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2Vy
QmFzaWMubW0KaW5kZXggMzRhNGY1YzUzOGI5Li41NDkzZDNkOTI3NTggMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtl
ckJhc2ljLm1tCkBAIC01NTgsNyArNTU4LDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgVXNlckFn
ZW50T3ZlcnJpZGUpCiAKICAgICBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKIAotICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHRO
UyhbW1NXVXNlckFnZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNz
YWdlOkAiTWVzc2FnZSBmcm9tIHdvcmtlcjogQmFyIEN1c3RvbSBVc2VyQWdlbnQiXSk7CisgICAg
bWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxlciBhbGxv
Y10gaW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBGb28gQ3Vz
dG9tIFVzZXJBZ2VudCJdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9s
bGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAi
c3ciXTsKIAogICAgIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJh
dGlvbi5nZXQoKV0pOwpAQCAtNjMzLDggKzYzMyw2IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIENh
Y2hlU3RvcmFnZVJlc3RvcmVGcm9tRGlzaykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtXS1dlYnNpdGVEYXRhU3RvcmUgX2Rl
bGV0ZURlZmF1bHREYXRhU3RvcmVGb3JUZXN0aW5nXTsKLQogICAgIFNlcnZpY2VXb3JrZXJUQ1BT
ZXJ2ZXIgc2VydmVyKHsKICAgICAgICAgeyAidGV4dC9odG1sIiwgbWFpbkNhY2hlU3RvcmFnZUJ5
dGVzIH0KICAgICB9LCB7CkBAIC05ODIsNiArOTgwLDcgQEAgVEVTVChTZXJ2aWNlV29ya2Vycywg
U2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXdD
b25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBzZXRDb25maWd1cmF0aW9uSW5qZWN0ZWRCdW5kbGVQ
YXRoKGNvbmZpZ3VyYXRpb24uZ2V0KCkpOworICAgIFJldGFpblB0cjxXS1Byb2Nlc3NQb29sPiBv
cmlnaW5hbFByb2Nlc3NQb29sID0gY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbDsKIAog
ICAgIGRvbmUgPSBmYWxzZTsKIApAQCAtMTAzNSw3ICsxMDM0LDcgQEAgVEVTVChTZXJ2aWNlV29y
a2VycywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKICAgICBkb25lID0gZmFsc2U7CiAK
ICAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5nIHRoZSBzaW1wbGUgcGFnZSBkaWQgbm90IHN0
YXJ0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgotICAgIEVYUEVDVF9FUSgwdSwgd2ViVmll
dy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0Nv
dW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9j
ZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CiAKICAgICB3ZWJWaWV3ID0gYWRv
cHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgw
MCwgNjAwKSBjb25maWd1cmF0aW9uOm5ld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBFWFBF
Q1RfRVEoMnUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fd2ViUHJv
Y2Vzc0NvdW50SWdub3JpbmdQcmV3YXJtZWQpOwpAQCAtMTA0Myw5ICsxMDQyLDggQEAgVEVTVChT
ZXJ2aWNlV29ya2VycywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IGxvYWRpbmcgdGhpcyBwYWdlIGRpZCBzdGFydCB0aGUgc2VydmljZSB3b3Jr
ZXIgcHJvY2Vzcy4KICAgICBFWFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlv
bi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7Ci0KKyAgICBFWFBFQ1Rf
RVEoMXUsIG9yaWdpbmFsUHJvY2Vzc1Bvb2wuZ2V0KCkuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291
bnQpOwogICAgIFtbY29uZmlndXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSByZW1vdmVEYXRhT2ZU
eXBlczpbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbFdlYnNpdGVEYXRhVHlwZXNdIG1vZGlmaWVkU2lu
Y2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XigpIHsKICAgICAgICAg
ZG9uZSA9IHRydWU7CiAgICAgfV07CkBAIC0xNjE4LDIxICsxNjE2LDM1IEBAIHN0YXRpYyBzaXpl
X3QgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzLCBiCiAgICAgcmV0dXJuIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9j
ZXNzUG9vbC5fd2ViUHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3YXJtZWQ7CiB9CiAKLVRFU1QoU2Vy
dmljZVdvcmtlcnMsIE91dE9mQW5kSW5Qcm9jZXNzU2VydmljZVdvcmtlcikKK1RFU1QoU2Vydmlj
ZVdvcmtlcnMsIE91dE9mUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCiB7CiAgICAgYm9vbCB1c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TG9hZEFib3V0
QmxhbmsgPSB0cnVlOwogCiAgICAgRVhQRUNUX0VRKDF1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJv
Y2VzcyghdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgIWZpcnN0TG9hZEFib3V0Qmxh
bmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2VycywgSW5Qcm9jZXNzU2VydmljZVdvcmtlcikK
K3sKKyAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOworICAg
IGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CisKICAgICBFWFBFQ1RfRVEoMnUsIGxh
dW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Ms
ICFmaXJzdExvYWRBYm91dEJsYW5rKSk7CiB9CiAKLVRFU1QoU2VydmljZVdvcmtlcnMsIExvYWRB
Ym91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hTZXJ2aWNlV29ya2VyKQorVEVTVChTZXJ2
aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaE91dE9mUHJv
Y2Vzc1NlcnZpY2VXb3JrZXIpCiB7CiAgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOwogCiAg
ICAgRVhQRUNUX0VRKDF1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2VzcyghdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcywgZmlyc3RMb2FkQWJvdXRCbGFuaykpOworfQorCitURVNUKFNl
cnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoSW5Qcm9j
ZXNzU2VydmljZVdvcmtlcikKK3sKKyAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MgPSB0cnVlOworICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CisKICAg
ICBFWFBFQ1RfRVEoMnUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MsIGZpcnN0TG9hZEFib3V0QmxhbmspKTsKIH0KIApAQCAtMTg0Nyw4
ICsxODU5LDggQEAgVEVTVChTZXJ2aWNlV29ya2VycywgUmVzdG9yZUZyb21EaXNrTm9uRGVmYXVs
dFN0b3JlKQogICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY3JlYXRlRGlyZWN0
b3J5QXRVUkw6c3dEQlBhdGggd2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOllFUyBhdHRyaWJ1
dGVzOm5pbCBlcnJvcjpuaWxdOwogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZh
dWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAgICAvLyBX
ZSBwcm90ZWN0IHRoZSBwcm9jZXNzIHBvb2wgc28gdGhhdCBpdCBvdXRsaXZlcyB0aGUgV2Vic2l0
ZURhdGFTdG9yZS4KICAgICBSZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gcHJvdGVjdGVkUHJvY2Vz
c1Bvb2w7CisgICAgUmV0YWluUHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4gcHJvdGVjdGVkV2Vic2l0
ZURhdGFTdG9yZTsKIAogICAgIFNlcnZpY2VXb3JrZXJUQ1BTZXJ2ZXIgc2VydmVyKHsKICAgICAg
ICAgeyAidGV4dC9odG1sIiwgbWFpblJlZ2lzdGVyaW5nV29ya2VyQnl0ZXMgfSwKQEAgLTE4NzEs
NiArMTg4Myw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFJlc3RvcmVGcm9tRGlza05vbkRlZmF1
bHRTdG9yZSkKIAogICAgICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgICAgICBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9
IHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbDsKKyAgICAgICAgcHJvdGVj
dGVkV2Vic2l0ZURhdGFTdG9yZSA9IHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRl
RGF0YVN0b3JlOwogCiAgICAgICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnNlcnZlci5yZXF1ZXN0
KCldOwogCkBAIC0xODgwLDEzICsxODkzLDE1IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFJlc3Rv
cmVGcm9tRGlza05vbkRlZmF1bHRTdG9yZSkKICAgICAgICAgW3dlYlZpZXcuZ2V0KCkuY29uZmln
dXJhdGlvbi5wcm9jZXNzUG9vbCBfdGVybWluYXRlU2VydmljZVdvcmtlcnNdOwogICAgIH0KIAor
ICAgIC8vIE1ha2UgdXMgbW9yZSBsaWtlbHkgdG8gbG9zZSBhbnkgcmFjZXMgd2l0aCBzZXJ2aWNl
IHdvcmtlciBpbml0aWFsaXphdGlvbi4KKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVu
TG9vcCgxMCk7CisgICAgdXNsZWVwKDEwMDAwKTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpz
cGluUnVuTG9vcCgxMCk7CisKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKICAgICAgICAgYXV0byBj
b25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGlu
aXRdKTsKIAotICAgICAgICBhdXRvIHdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uID0gYWRv
cHROUyhbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7Ci0g
ICAgICAgIHdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLl9zZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gc3dEQlBhdGg7Ci0gICAgICAgIGF1dG8gbm9uRGVmYXVs
dERhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0
aENvbmZpZ3VyYXRpb246d2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKLSAg
ICAgICAgY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlID0gbm9uRGVmYXVsdERh
dGFTdG9yZS5nZXQoKTsKKyAgICAgICAgY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0
b3JlID0gcHJvdGVjdGVkV2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsKIAogICAgICAgICBhdXRvIG1l
c3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1NXTWVzc2FnZUhhbmRsZXJGb3JSZXN0b3JlRnJvbURp
c2tUZXN0IGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIlBBU1M6IFJlZ2lzdHJhdGlv
biBhbHJlYWR5IGhhcyBhbiBhY3RpdmUgd29ya2VyIl0pOwogICAgICAgICBbW2NvbmZpZ3VyYXRp
b24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjptZXNzYWdl
SGFuZGxlci5nZXQoKSBuYW1lOkAic3ciXTsKQEAgLTE5NDQsMTEgKzE5NTksMTEgQEAgVEVTVChT
ZXJ2aWNlV29ya2VycywgU3VzcGVuZE5ldHdvcmtQcm9jZXNzKQogCiAgICAgRVhQRUNUX1RSVUUo
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnN3REJQYXRo
LnBhdGhdKTsKIAotICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29s
IF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFt3ZWJWaWV3
LmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdl
ciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAg
ICBbIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNp
dGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBbd2ViVmll
dyBsb2FkUmVxdWVzdDpzZXJ2ZXIucmVxdWVzdCgpXTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KaW5kZXggYTM1ZjA1MzUwYWFiLi4zMzc2
MDkyYTE5NWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvV0tIVFRQQ29va2llU3RvcmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQpAQCAtNDc5LDggKzQ3OSw2IEBAIHN0YXRp
YyBib29sIGZpbmlzaGVkOwogfQogQGVuZAogCi0vLyBGSVhNRTogb24gaU9TLCBVSSBwcm9jZXNz
IHNob3VsZCBiZSB1c2luZyB0aGUgc2FtZSBjb29raWUgZmlsZSBhcyB0aGUgbmV0d29yayBwcm9j
ZXNzIGZvciBkZWZhdWx0IHNlc3Npb24uCi0jaWYgUExBVEZPUk0oTUFDKQogZW51bSBjbGFzcyBT
aG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyB7IE5vLCBZZXMgfTsKIHZvaWQgcnVuV0tIVFRQ
Q29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1p
bmcgc2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcpCiB7CkBAIC01ODksMjAgKzU4Nyw2NiBA
QCBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xXaXRoUHJld2FybWlu
ZykKICAgICBydW5XS0hUVFBDb29raWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFi
bGVQcm9jZXNzUHJld2FybWluZzo6WWVzKTsKIH0KIAotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
LQogQGludGVyZmFjZSBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIDogTlNPYmplY3QgPFdL
VUlEZWxlZ2F0ZT4KKy0gKE5TU3RyaW5nICopYWxlcnRDb29raWVIVE1MOworLSAoTlNTdHJpbmcg
Kil3YWl0Rm9yTWVzc2FnZTsKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNv
b2tpZVVJRGVsZWdhdGUKK0BpbXBsZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURlbGVn
YXRlIHsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9tZXNzYWdlOworfQorCiAtICh2b2lkKXdl
YlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVz
c2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICop
ZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVy
CiB7Ci0gICAgRVhQRUNUX1NUUkVRKCJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIsIG1l
c3NhZ2UuVVRGOFN0cmluZyk7CisgICAgX21lc3NhZ2UgPSBtZXNzYWdlOwogICAgIGZpbmlzaGVk
ID0gdHJ1ZTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQorCistIChOU1N0cmluZyAqKXdh
aXRGb3JNZXNzYWdlCit7CisgICAgd2hpbGUgKCFfbWVzc2FnZSkKKyAgICAgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAgICByZXR1cm4gX21lc3NhZ2UuYXV0b3JlbGVh
c2UoKTsKK30KKworLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUwKK3sKKyAgICByZXR1cm4g
QCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7IGZvciAo
bGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkgKyspIHsgY29va2llc1tpXSA9IGNvb2tp
ZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgpOyBhbGVydChjb29raWVzLmpvaW4oJzsgJykp
Ozwvc2NyaXB0PiI7Cit9CisKIEBlbmQKIAorVEVTVChXZWJLaXQsIFdLSFRUUENvb2tpZVN0b3Jl
TXVsdGlwbGVWaWV3cykKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MSA9IFtbVGVzdFdL
V2ViVmlldyBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzEgc3luY2hyb25vdXNseUxv
YWRIVE1MU3RyaW5nOkAic3RhcnQgbmV0d29yayBwcm9jZXNzIl07CisKKyAgICBOU0hUVFBDb29r
aWUgKnNlc3Npb25Db29raWUgPSBbTlNIVFRQQ29va2llIGNvb2tpZVdpdGhQcm9wZXJ0aWVzOkB7
CisgICAgICAgIE5TSFRUUENvb2tpZVBhdGg6IEAiLyIsCisgICAgICAgIE5TSFRUUENvb2tpZU5h
bWU6IEAiU2Vzc2lvbkNvb2tpZU5hbWUiLAorICAgICAgICBOU0hUVFBDb29raWVWYWx1ZTogQCJD
b29raWVWYWx1ZSIsCisgICAgICAgIE5TSFRUUENvb2tpZURvbWFpbjogQCIxMjcuMC4wLjEiLAor
ICAgIH1dOworCisgICAgX19ibG9jayBib29sIHNldENvb2tpZURvbmUgPSBmYWxzZTsKKyAgICBb
d2ViVmlldzEuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlLmh0dHBDb29raWVTdG9yZSBz
ZXRDb29raWU6c2Vzc2lvbkNvb2tpZSBjb21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBzZXRD
b29raWVEb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JnNldENvb2tpZURvbmUpOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW0NoZWNrU2Vz
c2lvbkNvb2tpZVVJRGVsZWdhdGUgbmV3XSk7CisgICAgW3dlYlZpZXcxIHNldFVJRGVsZWdhdGU6
ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcxIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0
ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8v
MTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3Nh
Z2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKKworICAgIFRlc3RXS1dlYlZp
ZXcgKndlYlZpZXcyID0gW1tUZXN0V0tXZWJWaWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3
ZWJWaWV3MiBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzIgbG9h
ZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtk
ZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIp
OworfQorCiBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVy
YWxTZXNzaW9uKQogewogICAgIFJldGFpblB0cjxXS1dlYnNpdGVEYXRhU3RvcmU+IGVwaGVtZXJh
bFN0b3JlV2l0aENvb2tpZXMgPSBbV0tXZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNpc3RlbnREYXRh
U3RvcmVdOwpAQCAtNjI3LDkgKzY3MSw4IEBAIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhv
dXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Npb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZmaW5pc2hlZCk7CiAgICAgZmluaXNoZWQgPSBmYWxzZTsKICAgICAKLSAgICBOU1N0cmlu
ZyAqYWxlcnRDb29raWVIVE1MID0gQCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1lbnQuY29v
a2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkgKysp
IHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgpOyBhbGVy
dChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Ci0gICAgW3dlYlZpZXcgbG9hZEhUTUxT
dHJpbmc6YWxlcnRDb29raWVIVE1MIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRw
Oi8vMTI3LjAuMC4xIl1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQp
OworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxd
IGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAg
IEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tp
ZU5hbWU9Q29va2llVmFsdWUiKTsKIH0KIAogc3RhdGljIGJvb2wgYXJlQ29va2llc0VxdWFsKE5T
SFRUUENvb2tpZSAqZmlyc3QsIE5TSFRUUENvb2tpZSAqc2Vjb25kKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVh
a3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1l
SGFuZGxlci1sZWFrcy5tbQppbmRleCBhYzdkZTQxNTEyYzQuLmFjMTY1MzVkZmQ5MyAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhh
bmRsZXItbGVha3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQg
PFdlYktpdC9XS1VSTFNjaGVtZVRhc2tQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9y
dCA8d3RmL1ZlY3Rvci5oPgpAQCAtMTUyLDcgKzE1Myw3IEBAIFRFU1QoVVJMU2NoZW1lSGFuZGxl
ciwgTGVha3MzKQogCiAgICAgcnVuVW50aWxUYXNrc0luRmxpZ2h0KDIpOwogCi0gICAgW3dlYlZp
ZXcxLmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKKyAgICBbd2ViVmlldzEuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3Jl
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBydW5VbnRpbFRhc2tzSW5GbGlnaHQo
MCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCmluZGV4IDkyY2Yz
YTYxOThhNS4uM2IxMzFmN2NiODYwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21Q
YXRocy5tbQpAQCAtMjQ0LDcgKzI0NCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3Rv
cmVDdXN0b21QYXRocyhTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRFCiAgICAg
Ly8gTm93LCB3aXRoIGJyYW5kIG5ldyBXS1dlYnNpdGVEYXRhU3RvcmVzIHBvaW50aW5nIGF0IHRo
ZSBzYW1lIGN1c3RvbSBjb29raWUgc3RvcmFnZSBsb2NhdGlvbiwKICAgICAvLyBpbiBuZXdseSBm
aXJlZCB1cCBOZXR3b3JrUHJvY2Vzc2VzLCB2ZXJpZnkgdGhhdCB0aGUgZmV0Y2ggYW5kIGRlbGV0
ZSBBUElzIHdvcmsgYXMgZXhwZWN0ZWQuCiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CiAgICAgYXV0byBuZXdDdXN0b21EYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0
b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1
cmF0aW9uLmdldCgpXSk7CiAKICAgICBbbmV3Q3VzdG9tRGF0YVN0b3JlIGZldGNoRGF0YVJlY29y
ZHNPZlR5cGVzOltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dlYnNpdGVEYXRhVHlwZUNvb2tpZXMs
IG5pbF0gY29tcGxldGlvbkhhbmRsZXI6XihOU0FycmF5PFdLV2Vic2l0ZURhdGFSZWNvcmQgKj4g
KiByZWNvcmRzKSB7CkBAIC0yNTUsNyArMjU1LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vic2l0ZURh
dGFTdG9yZUN1c3RvbVBhdGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEUK
ICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CiAgICAgbmV3Q3VzdG9tRGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURh
dGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvbi5nZXQoKV0pOwogCiAgICAgW25ld0N1c3RvbURhdGFTdG9yZSByZW1vdmVEYXRh
T2ZUeXBlczpbTlNTZXQgc2V0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVDb29raWVzLCBu
aWxdIG1vZGlmaWVkU2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6
XiB7CkBAIC0zODUsMTEgKzM4NSwxMCBAQCBURVNUKFdlYktpdCwgQ3VzdG9tRGF0YVN0b3JlRGVz
dHJveVdoaWxlRmV0Y2hpbmdOZXR3b3JrUHJvY2Vzc0RhdGEpCiAKICAgICAgICAgLy8gVGVybWlu
YXRlIHRoZSBuZXR3b3JrIHByb2Nlc3Mgd2hpbGUgYSBxdWVyeSBpcyBwZW5kaW5nLgogICAgICAg
ICBhdXRvKiBhbGxQcm9jZXNzUG9vbHMgPSBbV0tQcm9jZXNzUG9vbCBfYWxsUHJvY2Vzc1Bvb2xz
Rm9yVGVzdGluZ107Ci0gICAgICAgIEFTU0VSVF9FUSgxVSwgW2FsbFByb2Nlc3NQb29scyBjb3Vu
dF0pOwotICAgICAgICBhdXRvKiBwcm9jZXNzUG9vbCA9IGFsbFByb2Nlc3NQb29sc1swXTsKLSAg
ICAgICAgd2hpbGUgKCFbcHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pCisg
ICAgICAgIEFTU0VSVF9FUSgwVSwgW2FsbFByb2Nlc3NQb29scyBjb3VudF0pOworICAgICAgICB3
aGlsZSAoIVtkYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pCiAgICAgICAgICAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzbGVlcCgwLjAxKTsKLSAgICAgICAga2lsbChbcHJvY2Vz
c1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0sIFNJR0tJTEwpOworICAgICAgICBraWxs
KFtkYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0sIFNJR0tJTEwpOwogICAgICAg
ICBhbGxQcm9jZXNzUG9vbHMgPSBuaWw7CiAgICAgICAgIGRhdGFTdG9yZSA9IG5pbDsKICAgICB9
CkBAIC00NjUsNyArNDY0LDkgQEAgVEVTVChXZWJLaXQsIEFsdGVybmF0aXZlU2VydmljZXNEZWZh
dWx0RGlyZWN0b3J5Q3JlYXRpb24pCiAgICAgCiAgICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFy
ZFVzZXJEZWZhdWx0c10gc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdIGZv
cktleTprZXldOwogCi0gICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzIgPSBbW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlv
biAqY29uZmlndXJhdGlvbiA9IFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxl
YXNlXTsKKyAgICBjb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVE
YXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246W1tbX1dLV2Vic2l0ZURhdGFT
dG9yZUNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXV0gYXV0b3JlbGVhc2Vd
OworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcyID0gW1tbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNv
bmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKICAgICBbd2ViVmlldzIgc3luY2hyb25vdXNseUxv
YWRIVE1MU3RyaW5nOkAic3RhcnQgYXV4aWxpYXJ5IHByb2Nlc3NlcyIgYmFzZVVSTDpuaWxdOwog
CiAgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhp
c3RzQXRQYXRoOmRlZmF1bHREaXJlY3RvcnkucGF0aF0pOwpAQCAtNTM5LDcgKzU0MCw3IEBAIFRF
U1QoV2ViS2l0LCBEb0xvYWRXaXRoTm9uRGVmYXVsdERhdGFTdG9yZUFmdGVyVGVybWluYXRpbmdO
ZXR3b3JrUHJvY2VzcykKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEp
OwogCi0gICAgW3dlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CisgICAgW3dlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpLndlYnNp
dGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJlcXVlc3QgPSBb
TlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9y
UmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAi
VGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVx
dWVzdF07CkBAIC04NTcsNyArODU4LDcgQEAgVEVTVChXZWJLaXQsIE1lZGlhQ2FjaGUpCiAgICAg
RVhQRUNUX0ZBTFNFKGVycm9yKTsKIAogICAgIGRvbmUgPSB0cnVlOwotICAgIFtbd2ViVmlldyBj
b25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAg
IFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CiAKICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0UGF0aDpwYXRoIGVy
cm9yOiZlcnJvcl07CiAgICAgRVhQRUNUX0ZBTFNFKGVycm9yKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2JqQy9DdXN0b21Qcm90b2NvbHNUZXN0Lm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVByb3RvY29sc1Rlc3Qu
bW0KaW5kZXggMjJlMWEwYTllOGUyLi43Yjg0NzhiNTk3OWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2JqQy9DdXN0b21Qcm90b2NvbHNUZXN0Lm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2JqQy9DdXN0b21Qcm90b2NvbHNUZXN0
Lm1tCkBAIC0zNCw2ICszNCw4IEBACiAjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKICNpbXBvcnQg
PFdlYktpdC9XS0NvbnRleHRQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzR3Jv
dXBQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8
V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgogCiBzdGF0aWMgYm9vbCB0ZXN0RmluaXNoZWQ7CkBAIC03Miw2ICs3NCw4IEBAIHN0YXRpYyBX
S1Byb2Nlc3NHcm91cCAqcHJvY2Vzc0dyb3VwKCkKICAgICByZXR1cm4gcHJvY2Vzc0dyb3VwOwog
fQogCitzdGF0aWMgUmV0YWluUHRyPFdLVmlldz4gd2tWaWV3OworCiBAaW50ZXJmYWNlIENsb3Nl
V2hpbGVTdGFydGluZ1Byb3RvY29sIDogVGVzdFByb3RvY29sCiBAZW5kCiAKQEAgLTg5LDcgKzkz
LDcgQEAgc3RhdGljIFdLUHJvY2Vzc0dyb3VwICpwcm9jZXNzR3JvdXAoKQogICAgICAgICB9Owog
ICAgICAgICBXS0NvbnRleHRTZXRDbGllbnQoW3Byb2Nlc3NHcm91cCgpIF9jb250ZXh0UmVmXSwg
JmNsaWVudC5iYXNlKTsKIAotICAgICAgICBraWxsKFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNz
SWRlbnRpZmllcihbcHJvY2Vzc0dyb3VwKCkgX2NvbnRleHRSZWZdKSwgU0lHS0lMTCk7CisgICAg
ICAgIGtpbGwoV0tXZWJzaXRlRGF0YVN0b3JlR2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdL
UGFnZUdldFdlYnNpdGVEYXRhU3RvcmUoW3drVmlldyBwYWdlUmVmXSkpLCBTSUdLSUxMKTsKICAg
ICAgICAgW3NlbGYuY2xpZW50IFVSTFByb3RvY29sOnNlbGYgZGlkRmFpbFdpdGhFcnJvcjpbTlNF
cnJvciBlcnJvcldpdGhEb21haW46TlNDb2NvYUVycm9yRG9tYWluIGNvZGU6MCB1c2VySW5mbzpu
aWxdXTsKICAgICB9KTsKIH0KQEAgLTE0Miw3ICsxNDYsNyBAQCBuYW1lc3BhY2UgVGVzdFdlYktp
dEFQSSB7CiBzdGF0aWMgdm9pZCBydW5UZXN0KCkKIHsKICAgICBSZXRhaW5QdHI8V0tCcm93c2lu
Z0NvbnRleHRHcm91cD4gYnJvd3NpbmdDb250ZXh0R3JvdXAgPSBhZG9wdE5TKFtbV0tCcm93c2lu
Z0NvbnRleHRHcm91cCBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOkAiVGVzdElkZW50aWZpZXIi
XSk7Ci0gICAgUmV0YWluUHRyPFdLVmlldz4gd2tWaWV3ID0gYWRvcHROUyhbW1dLVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBwcm9jZXNzR3JvdXA6
cHJvY2Vzc0dyb3VwKCkgYnJvd3NpbmdDb250ZXh0R3JvdXA6YnJvd3NpbmdDb250ZXh0R3JvdXAu
Z2V0KCldKTsKKyAgICB3a1ZpZXcgPSBhZG9wdE5TKFtbV0tWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIHByb2Nlc3NHcm91cDpwcm9jZXNzR3JvdXAo
KSBicm93c2luZ0NvbnRleHRHcm91cDpicm93c2luZ0NvbnRleHRHcm91cC5nZXQoKV0pOwogICAg
IFJldGFpblB0cjxDdXN0b21Qcm90b2NvbHNMb2FkRGVsZWdhdGU+IGxvYWREZWxlZ2F0ZSA9IGFk
b3B0TlMoW1tDdXN0b21Qcm90b2NvbHNMb2FkRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKICAgICBb
d2tWaWV3IGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJdLmxvYWREZWxlZ2F0ZSA9IGxvYWREZWxl
Z2F0ZS5nZXQoKTsKICAgICBbW3drVmlldyBicm93c2luZ0NvbnRleHRDb250cm9sbGVyXSBsb2Fk
UmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5n
OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUA6Ly9yZWRpcmVjdD90ZXN0IiwgW1Rlc3RQ
cm90b2NvbCBzY2hlbWVdXV1dXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5jcHAKaW5kZXggMTM0NWM0MmMxMWU2Li5hYzVhZjg3MGZkMWMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC0xMDYyLDggKzEwNjIsNiBAQCBib29sIFRl
c3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRp
b25zJiBvcHRpb25zLCBSZQogCiAgICAgcmVzZXRRdW90YSgpOwogCi0gICAgV0tDb250ZXh0U2V0
QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhwbGF0Zm9ybUNv
bnRleHQoKSwgdHJ1ZSk7Ci0KICAgICBXS0NvbnRleHRDbGVhckN1cnJlbnRNb2RpZmllclN0YXRl
Rm9yVGVzdGluZyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpKTsKIAogICAg
IFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgZmFsc2UpOwpAQCAtMTIzOCw3ICsxMjM2LDcgQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6ZmluZEFuZER1bXBXZWJLaXRQcm9jZXNzSWRlbnRpZmllcnMo
KQogICAgIGR1bXBSZXNwb25zZShtYWtlU3RyaW5nKFRlc3RDb250cm9sbGVyOjp3ZWJQcm9jZXNz
TmFtZSgpLCAiOiAiLAogICAgICAgICBXS1BhZ2VHZXRQcm9jZXNzSWRlbnRpZmllcihUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpKSwgJ1xuJywKICAgICAg
ICAgVGVzdENvbnRyb2xsZXI6Om5ldHdvcmtQcm9jZXNzTmFtZSgpLCAiOiAiLAotICAgICAgICBX
S0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIobV9jb250ZXh0LmdldCgpKSwgJ1xu
JykpOworICAgICAgICBXS1dlYnNpdGVEYXRhU3RvcmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIod2Vic2l0ZURhdGFTdG9yZSgpKSwgJ1xuJykpOwogI2Vsc2UKICAgICBkdW1wUmVzcG9uc2Uo
IlxuIl9zKTsKICNlbmRpZgpAQCAtMjI5OCw3ICsyMjk2LDcgQEAgV0tSZXRhaW5QdHI8V0tUeXBl
UmVmPiBUZXN0Q29udHJvbGxlcjo6Z2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJE
YXRhKCkKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6bmV0d29ya1Byb2Nlc3NEaWRDcmFzaCgpCiB7
Ci0gICAgcGlkX3QgcGlkID0gV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKG1f
Y29udGV4dC5nZXQoKSk7CisgICAgcGlkX3QgcGlkID0gV0tXZWJzaXRlRGF0YVN0b3JlR2V0TmV0
d29ya1Byb2Nlc3NJZGVudGlmaWVyKHdlYnNpdGVEYXRhU3RvcmUoKSk7CiAgICAgZnByaW50Zihz
dGRlcnIsICIjQ1JBU0hFRCAtICVzIChwaWQgJWxkKVxuIiwgbmV0d29ya1Byb2Nlc3NOYW1lKCks
IHN0YXRpY19jYXN0PGxvbmc+KHBpZCkpOwogICAgIGV4aXQoMSk7CiB9CkBAIC0zMTM3LDcgKzMx
MzUsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0
cyhib29sIGlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjp0
ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCiB7Ci0gICAgV0tDb250ZXh0VGVybWluYXRlTmV0d29y
a1Byb2Nlc3MocGxhdGZvcm1Db250ZXh0KCkpOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzKHdlYnNpdGVEYXRhU3RvcmUoKSk7CiB9CiAKIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCkKQEAgLTMxNjgsOSArMzE2Niw4IEBA
IFBsYXRmb3JtV2ViVmlldyogVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ3JlYXRlT3RoZXJQYWdl
KFBsYXRmb3JtV2ViVmlldyogcGFyZW50CiAgICAgcmV0dXJuIG5ldyBQbGF0Zm9ybVdlYlZpZXco
Y29uZmlndXJhdGlvbiwgb3B0aW9ucyk7CiB9CiAKLVdLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxl
cjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRD
b25maWd1cmF0aW9uUmVmIGNvbnRleHRDb25maWd1cmF0aW9uKQorV0tDb250ZXh0UmVmIFRlc3RD
b250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdL
Q29udGV4dENvbmZpZ3VyYXRpb25SZWYpCiB7Ci0gICAgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNp
dGVEYXRhU3RvcmUoY29udGV4dCwgZGVmYXVsdFdlYnNpdGVEYXRhU3RvcmUoKSk7CiAgICAgcmV0
dXJuIGNvbnRleHQ7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409569</attachid>
            <date>2020-09-24 06:52:37 -0700</date>
            <delta_ts>2020-09-24 10:53:56 -0700</delta_ts>
            <desc>GLib API changes</desc>
            <filename>wk2-glib-api-changes.diff</filename>
            <type>text/plain</type>
            <size>13825</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRleCA5NzdkMTM1MjlmOTkuLmMyYzRiNGI3NGVk
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtMTc1LDYgKzE3NSw3IEBAIHZvaWQg
cmVtb3ZlU3VicmVzb3VyY2VVUkxBdHRyaWJ1dGVzKFJlZjxEb2N1bWVudEZyYWdtZW50PiYmIGZy
YWdtZW50LCBXVEY6OkZ1bmN0CiAKIHN0ZDo6dW5pcXVlX3B0cjxQYWdlPiBjcmVhdGVQYWdlRm9y
U2FuaXRpemluZ1dlYkNvbnRlbnQoKQogeworICAgIC8vIEZJWE1FOiBkbyB3ZSByZWFsbHkgbmVl
ZCB0byB1c2UgdGhlIGRlZmF1bHQgc2Vzc2lvbiBJRCBoZXJlLCBkb2VzIGl0IG1hdHRlcj8gY2Fu
IHdlIHVzZSBhbiBlcGhlbWVyYWwgc2Vzc2lvbiBJRCBpbnN0ZWFkPy4KICAgICBhdXRvIHBhZ2VD
b25maWd1cmF0aW9uID0gcGFnZUNvbmZpZ3VyYXRpb25XaXRoRW1wdHlDbGllbnRzKFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwogICAgIAogICAgIGF1dG8gcGFnZSA9IG1ha2VV
bmlxdWU8UGFnZT4oV1RGTW92ZShwYWdlQ29uZmlndXJhdGlvbikpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAK
aW5kZXggMGZlYmQ0YjUyMGVlLi45OGIwMmI4YWVkNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAt
MjcwNiw2ICsyNzA2LDkgQEAgUEFMOjpTZXNzaW9uSUQgUGFnZTo6c2Vzc2lvbklEKCkgY29uc3QK
IC8vIFRoaXMgaXMgb25seSBjYWxsZWQgYnkgV2ViS2l0TGVnYWN5Lgogdm9pZCBQYWdlOjpzZXRT
ZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogeworI2lmIFBMQVRGT1JNKEdUSykg
fHwgUExBVEZPUk0oV1BFKQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5k
aWYKICAgICBBU1NFUlQoc2Vzc2lvbklELmlzVmFsaWQoKSk7CiAgICAgQVNTRVJUKG1fc2Vzc2lv
bklEID09IFBBTDo6U2Vzc2lvbklEOjpsZWdhY3lQcml2YXRlU2Vzc2lvbklEKCkgfHwgbV9zZXNz
aW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7CiAgICAgQVNTRVJU
KHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6bGVnYWN5UHJpdmF0ZVNlc3Npb25JRCgpIHx8
IHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCmluZGV4IDYzZWRmMTJlMjEzMy4uZmQw
ZmZkY2FlYmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1h
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAg
LTQ2Niw2ICs0NjYsNyBAQCBFbmNvZGVkRGF0YVN0YXR1cyBTVkdJbWFnZTo6ZGF0YUNoYW5nZWQo
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgICAgIHJldHVybiBFbmNvZGVkRGF0YVN0YXR1czo6
Q29tcGxldGU7CiAKICAgICBpZiAoYWxsRGF0YVJlY2VpdmVkKSB7CisgICAgICAgIC8vIEZJWE1F
OiBkbyB3ZSByZWFsbHkgbmVlZCB0byB1c2UgdGhlIGRlZmF1bHQgc2Vzc2lvbiBJRCBoZXJlLCBk
b2VzIGl0IG1hdHRlcj8gY2FuIHdlIHVzZSBhbiBlcGhlbWVyYWwgc2Vzc2lvbiBJRCBpbnN0ZWFk
Py4KICAgICAgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IHBhZ2VDb25maWd1cmF0aW9uV2l0
aEVtcHR5Q2xpZW50cyhQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKICAgICAg
ICAgbV9jaHJvbWVDbGllbnQgPSBtYWtlVW5pcXVlPFNWR0ltYWdlQ2hyb21lQ2xpZW50Pih0aGlz
KTsKICAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24uY2hyb21lQ2xpZW50ID0gbV9jaHJvbWVDbGll
bnQuZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCmluZGV4IDViYTEyMjM0MTgzNy4uMjU3YWQ0NDE2M2RhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMTczLDYgKzE3Myw3
IEBAIE5ldHdvcmtQcm9jZXNzOjpOZXR3b3JrUHJvY2VzcyhBdXhpbGlhcnlQcm9jZXNzSW5pdGlh
bGl6YXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1lCiAjZW5kaWYKIAogI2lmIFVTRShTT1VQKQorICAg
IC8vIEZJWE1FOiBkbyBub3QgdXNlIHRoZSBkZWZhdWx0IHNlc3Npb24gSUQuCiAgICAgRE5TUmVz
b2x2ZVF1ZXVlU291cDo6c2V0R2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNjZXNzb3IoW3RoaXNd
KCkgLT4gU291cFNlc3Npb24qIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5ldHdvcmtT
ZXNzaW9uU291cCY+KCpuZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKSkuc291cFNlc3Npb24oKTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcApp
bmRleCAwZDMxYjNkMWIzNGYuLjhlMTE1MzU5YzUyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNw
cApAQCAtMzksNiArMzksNyBAQCBjbGFzcyBOZXR3b3JrUHJvY2Vzc01haW5Tb3VwIGZpbmFsOiBw
dWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc01haW5CYXNlIHsKIHB1YmxpYzoKICAgICB2b2lkIHBsYXRm
b3JtRmluYWxpemUoKSBvdmVycmlkZQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGlzIHRoaXMg
c3RpbGwgbmVlZGVkPyBXZSBzaG91bGQgcHJvYmFibHkgZGVzdHJveSBhbGwgZXhpc3Rpbmcgc2Vz
c2lvbnMgYXQgdGhpcyBwb2ludCBpbnN0ZWFkLgogICAgICAgICAvLyBOZWVkZWQgdG8gZGVzdHJv
eSB0aGUgU291cFNlc3Npb24gYW5kIFNvdXBDb29raWVKYXIsIGUuZy4gdG8gYXZvaWQKICAgICAg
ICAgLy8gbGVha2luZyBTUUxpdGUgdGVtcG9yYXJ5IGpvdXJuYWxpbmcgZmlsZXMuCiAgICAgICAg
IGdsb2JhbE5ldHdvcmtQcm9jZXNzLT5kZXN0cm95U2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKaW5kZXggNzcwMTQ5OTgzNmVlLi5mNWJh
NDNjZTE0MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdENvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCkBAIC0yMTgsMTQgKzIxOCw2IEBAIHZvaWQgd2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIq
IG1hbmFnZXIsIEdDYW5jCiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01B
TkFHRVIobWFuYWdlcikpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihn
X3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQot
ICAgIC8vIFRoZSBwb2xpY3kgaXMgdGhlIHNhbWUgaW4gYWxsIHByb2Nlc3MgcG9vbHMgaGF2aW5n
IHRoZSBzYW1lIHNlc3Npb24gSUQsIHNvIGp1c3QgYXNrIGFueS4KLSAgICBjb25zdCBhdXRvJiBw
cm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFu
YWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIGdfdGFza19yZXR1cm5faW50KHRhc2suZ2V0KCksIFdFQktJVF9DT09LSUVf
UE9MSUNZX0FDQ0VQVF9OT19USElSRF9QQVJUWSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
ICAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuZ2V0SFRUUENvb2tpZUFjY2VwdFBv
bGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShX
ZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgewogICAgICAgICBnX3Rhc2tf
cmV0dXJuX2ludCh0YXNrLmdldCgpLCB0b1dlYktpdENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kp
KTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdFdlYkNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0V2ViQ29udGV4dC5jcHAKaW5kZXggZWRjZGIwYzE2YTMyLi4zNmQwMDA4YmEyMTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNv
bnRleHQuY3BwCkBAIC00MDksOCArNDA5LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29udGV4
dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgZ19zaWduYWxfZW1pdCh3ZWJD
b250ZXh0LCBzaWduYWxzW1VTRVJfTUVTU0FHRV9SRUNFSVZFRF0sIDAsIHVzZXJNZXNzYWdlLmdl
dCgpLCAmcmV0dXJuVmFsdWUpOwogICAgIH0pOwogCi0gICAgd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyQWRkUHJvY2Vzc1Bvb2wocHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpLCAqcHJpdi0+
cHJvY2Vzc1Bvb2wpOwotCiAgICAgcHJpdi0+cHJvY2Vzc01vZGVsID0gV0VCS0lUX1BST0NFU1Nf
TU9ERUxfTVVMVElQTEVfU0VDT05EQVJZX1BST0NFU1NFUzsKIAogI2lmIEVOQUJMRShNRU1PUllf
U0FNUExFUikKQEAgLTQzOCwxMSArNDM2LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29udGV4
dERpc3Bvc2UoR09iamVjdCogb2JqZWN0KQogICAgICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0
RG93bmxvYWRDbGllbnQobWFrZVVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PigpKTsKICAg
ICB9CiAKLSAgICBpZiAocHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyKSB7Ci0gICAgICAgIHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlclJlbW92ZVByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFu
YWdlci5nZXQoKSwgKnByaXYtPnByb2Nlc3NQb29sKTsKLSAgICAgICAgcHJpdi0+d2Vic2l0ZURh
dGFNYW5hZ2VyID0gbnVsbHB0cjsKLSAgICB9Ci0KICAgICBpZiAocHJpdi0+ZmF2aWNvbkRhdGFi
YXNlKSB7CiAgICAgICAgIHdlYmtpdEZhdmljb25EYXRhYmFzZUNsb3NlKHByaXYtPmZhdmljb25E
YXRhYmFzZS5nZXQoKSk7CiAgICAgICAgIHByaXYtPmZhdmljb25EYXRhYmFzZSA9IG51bGxwdHI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJW
aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcu
Y3BwCmluZGV4IDQxMzVjMjY1NDI4Ny4uZDhiM2YzYzE5OTkyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcApAQCAtNzU5LDcgKzc1
OSw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmpl
Y3QpCiAgICAgICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfdGxzX2Vycm9yc19w
b2xpY3kocHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpLCB3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfZ2V0X3Rsc19lcnJvcnNfcG9saWN5KGNvbnRleHREYXRhTWFuYWdlcikpOwogICAg
ICAgICBhdXRvIHByb3h5U2V0dGluZ3MgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRh
U3RvcmUoY29udGV4dERhdGFNYW5hZ2VyKS5uZXR3b3JrUHJveHlTZXR0aW5ncygpOwogICAgICAg
ICB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUocHJpdi0+d2Vic2l0ZURhdGFN
YW5hZ2VyLmdldCgpKS5zZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXVEZNb3ZlKHByb3h5U2V0dGlu
Z3MpKTsKLSAgICAgICAgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQWRkUHJvY2Vzc1Bvb2wocHJp
di0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpLCB3ZWJraXRXZWJDb250ZXh0R2V0UHJvY2Vzc1Bv
b2wocHJpdi0+Y29udGV4dC5nZXQoKSkpOwogICAgIH0KIAogICAgIGlmICghcHJpdi0+d2Vic2l0
ZVBvbGljaWVzKQpAQCAtOTQ1LDExICs5NDQsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3
RGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIHdlYmtpdFdlYkNvbnRleHRXZWJWaWV3
RGVzdHJveWVkKHdlYlZpZXctPnByaXYtPmNvbnRleHQuZ2V0KCksIHdlYlZpZXcpOwogICAgIH0K
IAotICAgIGlmICh3ZWJWaWV3LT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIpIHsKLSAgICAgICAg
d2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyUmVtb3ZlUHJvY2Vzc1Bvb2wod2ViVmlldy0+cHJpdi0+
d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpLCB3ZWJraXRXZWJDb250ZXh0R2V0UHJvY2Vzc1Bvb2wo
d2ViVmlldy0+cHJpdi0+Y29udGV4dC5nZXQoKSkpOwotICAgICAgICB3ZWJWaWV3LT5wcml2LT53
ZWJzaXRlRGF0YU1hbmFnZXIgPSBudWxscHRyOwotICAgIH0KLQogICAgIGlmICh3ZWJWaWV3LT5w
cml2LT5jdXJyZW50U2NyaXB0RGlhbG9nKSB7CiAgICAgICAgIHdlYmtpdF9zY3JpcHRfZGlhbG9n
X2Nsb3NlKHdlYlZpZXctPnByaXYtPmN1cnJlbnRTY3JpcHREaWFsb2cpOwogICAgICAgICBBU1NF
UlQoIXdlYlZpZXctPnByaXYtPmN1cnJlbnRTY3JpcHREaWFsb2cpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFu
YWdlci5jcHAKaW5kZXggZGE5YTNhYWRiODQ5Li40YzRlZjVkNjhhYzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyLmNwcApAQCAtOTUsMTEgKzk1LDYgQEAgZW51bSB7CiB9OwogCiBzdHJ1Y3QgX1dl
YktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUgewotICAgIH5fV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyUHJpdmF0ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQocHJvY2Vzc1Bvb2xzLmlzRW1w
dHkoKSk7Ci0gICAgfQotCiAgICAgUmVmUHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZT4gd2Vi
c2l0ZURhdGFTdG9yZTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGJhc2VEYXRhRGlyZWN0b3J5Owog
ICAgIEdVbmlxdWVQdHI8Y2hhcj4gYmFzZUNhY2hlRGlyZWN0b3J5OwpAQCAtMTE1LDcgKzExMCw2
IEBAIHN0cnVjdCBfV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZSB7CiAgICAgV2ViS2l0
VExTRXJyb3JzUG9saWN5IHRsc0Vycm9yc1BvbGljeTsKIAogICAgIEdSZWZQdHI8V2ViS2l0Q29v
a2llTWFuYWdlcj4gY29va2llTWFuYWdlcjsKLSAgICBWZWN0b3I8V2ViUHJvY2Vzc1Bvb2wqPiBw
cm9jZXNzUG9vbHM7CiB9OwogCiBXRUJLSVRfREVGSU5FX1RZUEUoV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyLCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIsIEdfVFlQRV9PQkpFQ1QpCkBAIC00
OTQsMzAgKzQ4OCwxMyBAQCBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYmtpdFdlYnNpdGVE
YXRhTWFuYWdlckdldERhdGFTdG9yZShXZWJLaXRXZWJzaXRlRGF0YQogICAgICAgICAgICAgY29u
ZmlndXJhdGlvbi0+c2V0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeShGaWxlU3lz
dGVtOjpzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHByaXYtPnN3UmVnaXN0cmF0
aW9uc0RpcmVjdG9yeS5nZXQoKSkpOwogICAgICAgICBpZiAocHJpdi0+ZG9tQ2FjaGVEaXJlY3Rv
cnkpCiAgICAgICAgICAgICBjb25maWd1cmF0aW9uLT5zZXRDYWNoZVN0b3JhZ2VEaXJlY3Rvcnko
RmlsZVN5c3RlbTo6c3RyaW5nRnJvbUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwcml2LT5kb21D
YWNoZURpcmVjdG9yeS5nZXQoKSkpOwotICAgICAgICBwcml2LT53ZWJzaXRlRGF0YVN0b3JlID0g
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoV1RGTW92ZShjb25maWd1cmF0aW9uKSwg
UEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7CisgICAgICAgIHByaXYtPndlYnNp
dGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZShXVEZNb3ZlKGNv
bmZpZ3VyYXRpb24pLCBQQUw6OlNlc3Npb25JRDo6Z2VuZXJhdGVQZXJzaXN0ZW50U2Vzc2lvbklE
KCkpOwogICAgICAgICBwcml2LT53ZWJzaXRlRGF0YVN0b3JlLT5zZXRJZ25vcmVUTFNFcnJvcnMo
cHJpdi0+dGxzRXJyb3JzUG9saWN5ID09IFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUp
OwogICAgIH0KIAogICAgIHJldHVybiAqcHJpdi0+d2Vic2l0ZURhdGFTdG9yZTsKIH0KIAotdm9p
ZCB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJBZGRQcm9jZXNzUG9vbChXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIqIG1hbmFnZXIsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLXsKLSAgICBB
U1NFUlQoIW1hbmFnZXItPnByaXYtPnByb2Nlc3NQb29scy5jb250YWlucygmcHJvY2Vzc1Bvb2wp
KTsKLSAgICBtYW5hZ2VyLT5wcml2LT5wcm9jZXNzUG9vbHMuYXBwZW5kKCZwcm9jZXNzUG9vbCk7
Ci19Ci0KLXZvaWQgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyUmVtb3ZlUHJvY2Vzc1Bvb2woV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bv
b2wpCi17Ci0gICAgQVNTRVJUKG1hbmFnZXItPnByaXYtPnByb2Nlc3NQb29scy5jb250YWlucygm
cHJvY2Vzc1Bvb2wpKTsKLSAgICBtYW5hZ2VyLT5wcml2LT5wcm9jZXNzUG9vbHMucmVtb3ZlRmly
c3QoJnByb2Nlc3NQb29sKTsKLX0KLQotY29uc3QgVmVjdG9yPFdlYlByb2Nlc3NQb29sKj4mIHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIqIG1hbmFnZXIpCi17Ci0gICAgcmV0dXJuIG1hbmFnZXItPnByaXYtPnByb2Nlc3NQb29s
czsKLX0KLQogLyoqCiAgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3OgogICogQGZp
cnN0X29wdGlvbl9uYW1lOiBuYW1lIG9mIHRoZSBmaXJzdCBvcHRpb24gdG8gc2V0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlLmgKaW5kZXggMmE1ODllMjdmMWZlLi5mYzllODIyNmZi
YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdl
YnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlLmgKQEAgLTE5LDExICsxOSw2
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbmNs
dWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCiAKIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgd2Vi
a2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdl
ciopOwotdm9pZCB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJBZGRQcm9jZXNzUG9vbChXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIqLCBXZWJLaXQ6OldlYlByb2Nlc3NQb29sJik7Ci12b2lkIHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlclJlbW92ZVByb2Nlc3NQb29sKFdlYktpdFdlYnNpdGVEYXRhTWFu
YWdlciosIFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2wmKTsKLWNvbnN0IFZlY3RvcjxXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sKj4mIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqKTsKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCBiYzY3ZWFm
YzE1NTEuLjZlZjc1YjNmM2Y0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTE1OCw2ICsxNTgsOSBA
QCBzdGF0aWMgUmVmUHRyPFdlYnNpdGVEYXRhU3RvcmU+JiBnbG9iYWxEZWZhdWx0RGF0YVN0b3Jl
KCkKIAogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKQogeworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKICAgICBJbml0aWFsaXplV2ViS2l0Migp
OwogCiAgICAgYXV0byYgc3RvcmUgPSBnbG9iYWxEZWZhdWx0RGF0YVN0b3JlKCk7CkBAIC0xODgs
MTMgKzE5MSwyOCBAQCBXZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGlu
Z0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRAogICAgIHJldHVybiBhbGxEYXRh
U3RvcmVzKCkuZ2V0KHNlc3Npb25JRCk7CiB9CiAKK3N0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQ
cm94eT4gbmV0d29ya1Byb2Nlc3NGb3JTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkK
K3sKKyNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKKyAgICBpZiAoc2Vzc2lvbklE
LmlzRXBoZW1lcmFsKCkpIHsKKyAgICAgICAgLy8gUmV1c2UgYSBwcmV2aW91cyBwZXJzaXN0ZW50
IHNlc3Npb24gbmV0d29yayBwcm9jZXNzIGZvciBlcGhlbWVyYWwgc2Vzc2lvbnMuCisgICAgICAg
IGZvciAoYXV0byogZGF0YVN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKSB7CisgICAg
ICAgICAgICBpZiAoZGF0YVN0b3JlLT5pc1BlcnNpc3RlbnQoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZVJlZihkYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkpOworICAgICAgICB9Cisg
ICAgfQorI2Vsc2UKKyAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgfHwgc2Vzc2lvbklE
ID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCisgICAgICAgIHJldHVybiBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpkZWZhdWx0TmV0d29ya1Byb2Nlc3MoKTsKKyNlbmRpZgorCisg
ICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZSgpOworfQorCiBOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2VzcygpCiB7CiAgICAgaWYg
KCFtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIGlmIChtX3Nlc3Npb25JRC5pc0VwaGVtZXJh
bCgpIHx8IG1fc2Vzc2lvbklEID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkp
Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVm
YXVsdE5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGUoKTsKKyAgICAgICAgbV9uZXR3
b3JrUHJvY2VzcyA9IG5ldHdvcmtQcm9jZXNzRm9yU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAgICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0
YVN0b3JlU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3Vw
L1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcAppbmRleCBhMzQ0OTAyNzY4NjkuLmYwZTk0MmYzMzU5
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9X
ZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKQEAgLTYyLDE1ICs2MiwxMyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRM
U0Vycm9ycykKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9pZ25vcmVUTFNFcnJvcnMgPSBpZ25v
cmVUTFNFcnJvcnM7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRJZ25vcmVUTFNFcnJvcnMobV9zZXNzaW9uSUQsIG1faWdub3Jl
VExTRXJyb3JzKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0SWdub3JlVExTRXJyb3JzKG1fc2Vzc2lvbklELCBtX2lnbm9yZVRMU0Vycm9y
cyksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE5ldHdvcmtQcm94eVNldHRp
bmdzKFdlYkNvcmU6OlNvdXBOZXR3b3JrUHJveHlTZXR0aW5ncyYmIHNldHRpbmdzKQogewogICAg
IG1fbmV0d29ya1Byb3h5U2V0dGluZ3MgPSBXVEZNb3ZlKHNldHRpbmdzKTsKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5z
ZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdv
cmtQcm94eVNldHRpbmdzKG1fc2Vzc2lvbklELCBtX25ldHdvcmtQcm94eVNldHRpbmdzKSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0
d29ya1Byb3h5U2V0dGluZ3MobV9zZXNzaW9uSUQsIG1fbmV0d29ya1Byb3h5U2V0dGluZ3MpLCAw
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409598</attachid>
            <date>2020-09-24 10:53:59 -0700</date>
            <delta_ts>2020-09-24 11:04:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200924105358.patch</filename>
            <type>text/plain</type>
            <size>352888</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxOCBAQAorMjAyMC0wOS0yNCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgTmV0d29y
a1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgZnJvbSBXZWJQcm9jZXNzUG9vbCB0byBXZWJzaXRlRGF0
YVN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTYwNDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIG1vdmVzIHRoZSB0aGluZ3Mgb24gV2ViUHJvY2Vzc1Bvb2wgYXNzb2NpYXRlZCB3
aXRoIE5ldHdvcmtQcm9jZXNzUHJveHkgb3duZXJzaGlwIGFuZCBtb3ZlcyB0aGVtCisgICAgICAg
IHRvIFdlYnNpdGVEYXRhU3RvcmUuICBJdCdzIHByZXR0eSBtZWNoYW5pY2FsLCBidXQgaXQgcmVh
Y2hlcyBpdHMgZmluZ2VycyBpbnRvIGEgbG90IG9mIHRoaW5ncy4gIFNvbWUgY29tbWVudHMKKyAg
ICAgICAgb24gaW50ZXJlc3RpbmcgcGFydHMgYXJlIGJlbG93LgorCisgICAgICAgIFdoeSBhbSBJ
IGRvaW5nIHRoaXM/ICBJJ20gZ2xhZCB5b3UgYXNrZWQuCisKKyAgICAgICAgV0tXZWJWaWV3IGhh
ZCBhIGZ1bmRhbWVudGFsIGNvb2tpZSBwcm9ibGVtIGJlZm9yZSB0aGlzIGNoYW5nZS4gIEl0IGhh
ZCBhIFdLV2Vic2l0ZURhdGFTdG9yZSB0aGF0IGNvdWxkIHBvaW50IHRvIGEgY29va2llIHN0b3Jl
IG9uIGRpc2sKKyAgICAgICAgdGhhdCBjb3VsZCBiZSB1c2VkIGluIG11bHRpcGxlIG5ldHdvcmsg
cHJvY2Vzc2VzIGF0IHRoZSBzYW1lIHRpbWUuICBUaGlzIGxlZCB0byBwcm9ibGVtcyB3aXRoIGNv
b2tpZXMgYmVpbmcgcmVjZWl2ZWQgb3ZlciB0aGUgbmV0d29yaworICAgICAgICBpbiB0aG9zZSBk
aWZmZXJlbnQgcHJvY2Vzc2VzIGJlaW5nIHVuYWJsZSB0byBiZSBzaGFyZWQgdW50aWwgdGhleSB3
ZXJlIHdyaXR0ZW4gdG8gZGlzaywgc29tZXRoaW5nIHRoYXQgZG9lcyBub3QgaGFwcGVuIGltbWVk
aWF0ZWx5LCBlc3BlY2lhbGx5CisgICAgICAgIG9uIGlPUy4gIFRoaXMgcHJvYmxlbSBpcyBldmVu
IHdvcnNlIHdpdGggc2Vzc2lvbiBjb29raWVzLCB3aGljaCBzaG91bGQgYmUga2VwdCBpbiBtZW1v
cnkgYW5kIG5ldmVyIGJlIHdyaXR0ZW4gdG8gZGlzay4gIFRob3NlIHByb2Nlc3NlcworICAgICAg
ICBkaWQgbm90IHVzZSBzaGFyZWQgbWVtb3J5IHRvIHNoYXJlIHRoZSBjb29raWVzLiAgVGhleSBq
dXN0IGRpZG4ndCBzaGFyZSB0aGVtLCB3aGljaCBsZWQgdG8gY29va2llIGluY29ycmVjdG5lc3Mu
ICBUaGlzIHdhcyB1bmZvcnR1bmF0ZWx5CisgICAgICAgIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRp
b24gaWYgeW91IGNhbGwgW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRdIG1vcmUgdGhhbiBvbmNlLCB3
aGljaCBtYW55IGRldmVsb3BlcnMgZG8uICBUaGVyZSB3YXMgYWxzbyBvY2Nhc2lvbmFsIGNvb2tp
ZQorICAgICAgICBjb3JydXB0aW9uIGFuZCBsb3NzIGZyb20gbXVsdGlwbGUgcHJvY2Vzc2VzIHdy
aXRpbmcgY29va2llcyB0byB0aGUgc2FtZSBmaWxlLiAgQWxsIHRoZXNlIHByb2JsZW1zIGNhbiBi
ZSB3b3JrZWQgYXJvdW5kIGJ5IGRvaW5nIHdoYXQgU2FmYXJpIGRvZXM6CisgICAgICAgIG1hbnVh
bGx5IHNldHRpbmcgdGhlIFdLUHJvY2Vzc1Bvb2wgb2YgYWxsIFdLV2ViVmlld0NvbmZpZ3VyYXRp
b25zIHRvIHRoZSBzYW1lIHByb2Nlc3MgcG9vbCB0byBvbmx5IHVzZSBvbmUgbmV0d29yayBwcm9j
ZXNzLiAgVGhpcyBpcyBub3QgaW50dWl0aXZlCisgICAgICAgIG9yIHdlbGwgZG9jdW1lbnRlZCwg
YW5kIGV2ZW4gdGhvdWdoIEkgaGF2ZSBzcGVudCB0aGUgbWFqb3JpdHkgb2YgV1dEQyBsYWJzIGZv
ciB0aGUgbGFzdCAzIHllYXJzIHRlbGxpbmcgZGV2ZWxvcGVycyB0byBkbyBpdCwgbW9zdCBkZXZl
bG9wZXJzIGRvIG5vdC4KKyAgICAgICAgVGhlIGRlZmF1bHQgYmVoYXZpb3Igc2hvdWxkIG5vdCBs
ZWFkIHRvIGNvb2tpZSBpbmNvcnJlY3RuZXNzLCBjb3JydXB0aW9uLCBvciBsb3NzLiAgVGhpcyBh
Y2NvbXBsaXNoZXMgdGhhdC4KKworICAgICAgICBBIGJpZ2dlciBwcm9ibGVtIHRoYXQgY2FuJ3Qg
cmVhbGx5IGJlIHdvcmtlZCBhcm91bmQgd2VsbCBpcyB3aGF0IHdlIHdlcmUgZG9pbmcgaW4gb3Vy
IFdLSFRUUENvb2tpZVN0b3JlIEFQSS4gIE1hbnkgZGV2ZWxvcGVycyBjYWxsIHNldENvb2tpZTpj
b21wbGV0aW9uSGFuZGxlcjoKKyAgICAgICAgdG8gImxvZyBpbiIgdGhlIHVzZXIgYnkgc2V0dGlu
ZyBhIGNvb2tpZSwgdGhlbiBpbiB0aGUgY29tcGxldGlvbiBoYW5kbGVyLCB0aGV5IG9wZW4gYSBX
S1dlYlZpZXcgdG8gdGhlaXIgcGFnZSBhbmQgZXhwZWN0IHRoZSBjb29raWUgdG8gYmUgc2VudC4g
IEJlZm9yZSB0aGlzCisgICAgICAgIGNoYW5nZSwgd2Ugd291bGQgbm90IGtub3cgd2hpY2ggcHJv
Y2VzcyBwb29sIHRvIHNldCB0aGUgY29va2llIGluIHNvIHdlIHdvdWxkIGd1ZXNzLiAgSWYgdGhl
cmUgd2VyZSBubyBwcm9jZXNzIHBvb2xzLCB3ZSB3b3VsZCBzdGFydCB3cml0aW5nIHRvIGRpc2sg
YW5kIGhvcGUKKyAgICAgICAgaXQgd3JpdGVzIGZhc3QgZW5vdWdoLiAgV2UgY2FuJ3Qgd2FpdCBm
b3IgaXQgdG8gY29tcGxldGUgYmVjYXVzZSBpdCBjYXVzZXMgaGFuZ3MgbGlrZSByZGFyOi8vcHJv
YmxlbS82Njk2MTA2Ni4gIFRoaXMgc29sdXRpb24gYWxsb3dzIHRvIHN0YXJ0IHRoZSBuZXR3b3Jr
CisgICAgICAgIHByb2Nlc3Mgb2YgdGhhdCBXZWJzaXRlRGF0YVN0b3JlIGFuZCBzZXQgdGhlIGNv
b2tpZSBpbiB0aGF0IHByb2Nlc3MuICBXZSBub3cga25vdyB0aGF0IGlzIHRoZSBvbmx5IHByb2Nl
c3MgdGhpcyBXZWJzaXRlRGF0YVN0b3JlIHdpbGwgZXZlciB1c2UuICBOb3csIHVzZXJzCisgICAg
ICAgIHdpbGwgYmUgYWJsZSB0byBhY3R1YWxseSBiZSBsb2dnZWQgaW4gYWxsIHRoZSB0aW1lIGlu
IHN1Y2ggYXBwcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2ll
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBD
b29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29r
aWVzL1dlYkNvb2tpZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVz
L1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9X
ZWJDb29raWVNYW5hZ2VyU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURh
dGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3Nl
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1t
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6OnNhdmVDb29raWVzKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFT
dG9yZVNlc3Npb24pOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nl
c3NTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBQbGF0
Zm9ybS9JUEMvQXR0YWNobWVudC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAg
ICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQ
STo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0
b3JlOjpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRD
b29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAg
ICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRp
b25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVy
Rm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFT
dG9yZSk6CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtl
clRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1By
b2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZUdldFdlYnNpdGVE
YXRhU3RvcmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdLV2Vi
c2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBf
c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczpdKToKKyAgICAgICAgKC1bV0tQcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1By
ZXBhcmVUb1N1c3BlbmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3Nl
bmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tQcm9jZXNzUG9vbCBfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tQcm9jZXNzUG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6
XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29s
UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0
b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9y
ZSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpdKToKKyAgICAgICAgKC1bV0tX
ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHld
KToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRS
ZXN1bWVdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBwSXNC
YWNrZ3JvdW5kOl0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9j
ZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoK1tXS1dlYnNpdGVEYXRhU3RvcmUgX21ha2VOZXh0
TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZ10pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKF9XZWJLaXRD
b29raWVNYW5hZ2VyUHJpdmF0ZTo6Y29va2llTWFuYWdlciBjb25zdCk6CisgICAgICAgIChfV2Vi
S2l0Q29va2llTWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUpOgor
ICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfY29v
a2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRfY29v
a2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdl
cl9hZGRfY29va2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2ll
cyk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAo
d2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4
dF9wcmVmZXRjaF9kbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246
OmFkZFNpbmdsZUNvb2tpZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9u
OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vz
c1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9v
bENvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vz
c1N1cHByZXNzaW9uU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxh
dGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRm
b3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnhwY0VuZHBvaW50TWVzc2FnZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29y
a1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6cHVi
bGlzaFByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94
eTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGVj
aWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyk6CisgICAgICAgICogVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5k
KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktp
dDo6ZGVmYXVsdFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkZWZhdWx0TmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5Ojp0ZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWRUZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
ZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6YW55
UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkpOgorICAgICAgICAoV2Vi
S2l0OjphbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRp
b25zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxv
YWRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQ
cm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRp
ZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGlkQ2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0
Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNz
UG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9j
ZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENF
dmVudCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFu
YWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2Vi
Q29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5j
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9w
T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xE
ZXN0cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJF
bnRpdGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVj
b25uZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRG
b3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJl
ZEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3Rv
Y29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vz
c1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29s
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFT
dG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdD
b250ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xv
YmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3Nlcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9u
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdl
SUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3Vu
ZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdv
cmtQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgVGhlcmUgc2VlbXMgdG8gYmUgYSBsb3Qgb2Yg
Y29kZSByZW1vdmFsIGhlcmUsIGJ1dCBtb3N0IG9mIGl0IHdhcyBkdXBsaWNhdGUgY29kZSB3aXRo
CisgICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMgd2hpY2ggaXMgdXNlZCBpbnN0
ZWFkLiAgVGhhdCB3aGljaCB3YXMgbm90IGR1cGxpY2F0ZSB3YXMKKyAgICAgICAgbW92ZWQgdG8g
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcy4g
IFRoaXMgd2FzIHRoZSBoYXJkZXN0IHBhcnQgb2YgdGhpcyBwYXRjaC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1By
b2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHlGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpmbHVzaENvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1By
b2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpzZXRXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NY
UENFbmRwb2ludFRvV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXAp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZv
clNlc3Npb25JRCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nl
c3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFB
bmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGlt
ZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNl
dFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNl
TG9hZFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1By
ZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNH
cmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJl
dmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQ
cmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRh
UmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGlu
Z1RvKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1l
dGVyc1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnN1Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNj
aGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBk
YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0
aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRl
cmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25z
aGlwT25seUluRGF0YWJhc2VPbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0VXNlSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0Rl
Y29yYXRpb25Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1No
b3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQ
YXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJp
Y3RDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVz
dGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3Vy
Y2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFn
ZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnByb2Nlc3NQb29scyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9j
ZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VwaGVtZXJhbCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmZsdXNoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRl
RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vz
c2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBw
Qm91bmRTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2Fy
ZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVu
dGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6Om1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lv
bklEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vz
c1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphZGRQ
ZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5ldHdvcmtQcm94eVNl
dHRpbmdzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0
YVN0b3JlU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRm
b3JtU2V0TmV0d29ya1BhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKToK
KyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3Jz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRp
bmdzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uSW5mby5oOgorCiAyMDIwLTA5LTI0ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeCB0aGUgYnVpbGQgZm9yIHJlY2VudCBTREtz
LgpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNiArMTczLDcgQEAgTmV0
d29ya1Byb2Nlc3M6Ok5ldHdvcmtQcm9jZXNzKEF1eGlsaWFyeQogI2VuZGlmCiAKICNpZiBVU0Uo
U09VUCkKKyAgICAvLyBGSVhNRTogRG8gbm90IHVzZSB0aGUgZGVmYXVsdCBzZXNzaW9uIElELgog
ICAgIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFjY2Vz
c29yKFt0aGlzXSgpIC0+IFNvdXBTZXNzaW9uKiB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxOZXR3b3JrU2Vzc2lvblNvdXAmPigqbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSkpLnNvdXBTZXNzaW9uKCk7CiAgICAgfSk7CkBAIC0zNDcsMzAgKzM0
OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHIKIAogICAgIHNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRy
aWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwot
ICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBX
VEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVu
dGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdl
cihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3Jp
Z2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBl
clRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0K
LSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNz
aW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0j
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGJvb2wgc2VydmljZVdvcmtlclByb2Nlc3NU
ZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCA9IHRydWU7Ci0gICAgYWRkU2VydmljZVdvcmtlclNlc3Np
b24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc2VydmljZVdvcmtlclByb2Nl
c3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBtX3N0b3JhZ2VN
YW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAg
YXV0byogZGVmYXVsdFNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKTsKLSAgICBhdXRvKiBkZWZhdWx0U3RvcmFnZVNlc3Npb24gPSBkZWZh
dWx0U2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgZm9yIChjb25zdCBhdXRv
JiBjb29raWUgOiBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRpbmdD
b29raWVzKQotICAgICAgICBkZWZhdWx0U3RvcmFnZVNlc3Npb24tPnNldENvb2tpZShjb29raWUp
OwotCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkK
ICAgICAgICAgc3VwcGxlbWVudC0+aW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKIApAQCAtNTA1LDgg
KzQ4Miw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QKIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Np
b25JRCwgYm9vbCBzaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYg
aWRlbnRpZmllckJhc2UpCiAjZW5kaWYKIHsKLSAgICBBU1NFUlQoc2Vzc2lvbklEICE9IFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotCiAgICAgYXV0byBhZGRSZXN1bHQgPSBt
X25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMuYWRkKHNlc3Npb25JRCwgbnVsbHB0cik7CiAgICAgaWYg
KCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTIxLDcgKzQ5Niw3
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QKICAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllciA9IG1ha2VTdHJpbmcoaWRlbnRpZmllckJhc2Us
ICIuUHJpdmF0ZUJyb3dzaW5nLiIsIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSkuY3JlYXRl
Q0ZTdHJpbmcoKTsKICAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHN0
b3JhZ2VTZXNzaW9uID0gYWRvcHRDRihjcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oY2ZJZGVu
dGlmaWVyLmdldCgpKSk7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKHNlc3Npb25JRCAhPSBQQUw6
OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAgICBzdG9yYWdlU2Vzc2lvbiA9
IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlQ0ZTdG9yYWdlU2Vzc2lvbkZv
cklkZW50aWZpZXIoY2ZJZGVudGlmaWVyLmdldCgpKTsKIAogICAgIGlmIChOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OnByb2Nlc3NNYXlVc2VDb29raWVBUEkoKSkgewpAQCAtNTQ0LDIxICs1MTksMTEg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y29va2llQWNjZXB0UG9saWN5QwogCiBXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNzaW9uSUQg
PT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0dXJuICZk
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFnZVNlc3Np
b25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIGlm
ICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1bHROZXR3
b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigp
OwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQotCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0
aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9yKQogewot
ICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0byYgc3Rv
cmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAgICAgICAg
IGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMTcwLDcgKzE3MCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZm9yRWFjaE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYpPiYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5ld1Rlc3RpbmdTZXNz
aW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJik7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9p
ZCBlbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgYm9vbCBzaG91bGRVc2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYpOwpAQCAtMzc1LDcgKzM3NCw2IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSBjb25zdDsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNz
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKIApAQCAtNTQ0LDcgKzU0
Miw2IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiBtX25ldHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPj4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zOwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbV9kZWZhdWx0TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOwogCiAgICAgUmVmUHRyPFN0b3JhZ2VNYW5hZ2VyU2V0PiBtX3N0b3JhZ2VNYW5h
Z2VyU2V0OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNp
b24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDYgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZQogICAgIGVuY29kZXIgPDwg
dWlQcm9jZXNzU0RLVmVyc2lvbjsKICAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBuZXR3b3JrQVRT
Q29udGV4dC5nZXQoKSk7CiAjZW5kaWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzOwogI2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIgPDwgY29va2llQWNjZXB0UG9s
aWN5OwogICAgIGVuY29kZXIgPDwgbGFuZ3VhZ2VzOwpAQCAtNjYsOSArNjUsNiBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplCiAgICAgZW5jb2RlciA8PCB1cmxTY2hl
bWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgZW5jb2RlciA8
PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxkRGlzYWJsZVNlcnZpY2VX
b3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAgIGVuY29kZXIgPDwgc2hv
dWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFibGVBZENsaWNrQXR0cmli
dXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTQsMTIgKzExMCw2IEBAIGJvb2wgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnM6OmQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAK
LSAgICBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnM7Ci0gICAgZGVjb2RlciA+PiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsK
LSAgICBpZiAoIWRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOwotCiAjaWYgVVNFKFNPVVApCiAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQuY29va2llQWNjZXB0UG9saWN5KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTM2LDIwICsxMjYsNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzOjpkCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsU2NoZW1lc1JlZ2lz
dGVyZWRBc05vQWNjZXNzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0jaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBzZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIXNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXN1bHQuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
c2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiQ2FjaGVN
b2RlbC5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llLmg+CiAjaW5j
bHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTcwLDgg
KzY5LDYgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIAogICAgIFJl
dGFpblB0cjxDRkRhdGFSZWY+IG5ldHdvcmtBVFNDb250ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycyBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICAK
ICNpZiBVU0UoU09VUCkKICAgICBXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IGNvb2tp
ZUFjY2VwdFBvbGljeSB7IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k6OkFsd2F5c0Fj
Y2VwdCB9OwogICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlczsKQEAgLTgyLDEyICs3OSw3IEBA
IHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyAKICAgICBWZWN0b3I8U3Ry
aW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQotICAgIFN0cmluZyBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5OwotICAgIFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlOwotICAgIGJvb2wgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzVGVybWluYXRpb25EZWxheSB7IGZhbHNlIH07Ci0jZW5kaWYKLSAgICBib29sIHNob3VsZEVu
YWJsZUlUUERhdGFiYXNlIHsgZmFsc2UgfTsKKyAgICBib29sIHNob3VsZEVuYWJsZUlUUERhdGFi
YXNlIHsgdHJ1ZSB9OwogICAgIGJvb2wgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2Rl
IHsgZmFsc2UgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29v
a2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAJKHJldmlzaW9uIDI2NzUz
NikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5h
Z2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIldlYkNv
cmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Db29raWVTdG9yYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVFRQQ29va2ll
QWNjZXB0UG9saWN5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24u
aD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KQEAg
LTE0MywxNSArMTQ0LDE4IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6c3RvcE9ic2VydmluZ0Nv
b2sKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhU
VFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSk7Ci0gICAgbV9wcm9jZXNzLmNvb2tpZUFjY2VwdFBvbGljeUNoYW5nZWQocG9s
aWN5KTsKLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgcGxhdGZvcm1TZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KHBvbGljeSwgW3BvbGljeSwgcHJvY2VzcyA9IG1ha2VSZWYobV9wcm9j
ZXNzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
bXV0YWJsZSB7CisgICAgICAgIHByb2Nlc3MtPmNvb2tpZUFjY2VwdFBvbGljeUNoYW5nZWQocG9s
aWN5KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9KTsKIH0KIAotdm9pZCBX
ZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2
b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1f
cHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7Cisg
ICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKHNl
c3Npb25JRCkpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5jb29r
aWVBY2NlcHRQb2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihI
VFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1h
bmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tp
ZXMvV2ViQ29va2llTWFuYWdlci5oCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAiU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
VHlwZS5oIgogI2VuZGlmCiAKK09CSkNfQ0xBU1MgTlNIVFRQQ29va2llU3RvcmFnZTsKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IENvb2tpZTsKIGVudW0gY2xhc3MgSFRUUENvb2tpZUFj
Y2VwdFBvbGljeSA6IHVpbnQ4X3Q7CkBAIC03OSw4ICs4MSw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBnZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmKTsKICAgICB2b2lkIGdldENvb2tpZXMoUEFMOjpT
ZXNzaW9uSUQsIGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mJik+JiYpOwogCi0gICAgdm9pZCBwbGF0Zm9ybVNldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSk7Ci0gICAgdm9pZCBnZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SFRU
UENvb2tpZUFjY2VwdFBvbGljeSk+JiYpOworICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3ksIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBB
TDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkhUVFBDb29raWVB
Y2NlcHRQb2xpY3kpPiYmKTsKIAogICAgIHZvaWQgc3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2Vz
KFBBTDo6U2Vzc2lvbklEKTsKICAgICB2b2lkIHN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBB
TDo6U2Vzc2lvbklEKTsKQEAgLTg4LDQgKzkwLDggQEAgcHJpdmF0ZToKICAgICBOZXR3b3JrUHJv
Y2VzcyYgbV9wcm9jZXNzOwogfTsKIAorI2lmIFBMQVRGT1JNKENPQ09BKQordm9pZCBzYXZlQ29v
a2llcyhOU0hUVFBDb29raWVTdG9yYWdlICosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFu
YWdlci5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbWVzc2FnZXMgLT4gV2ViQ29va2llTWFuYWdlciBOb3RS
ZWZDb3VudAogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3luYwogCiAgICAgdm9pZCBT
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJDb3JlOjpIVFRQQ29va2ll
QWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lkIEdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQ
b2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRUUENv
b2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAgdm9pZCBTdGFydE9ic2Vy
dmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIHZvaWQgU3Rv
cE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFuYWdl
ckN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29v
a2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysg
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFuYWdl
ckN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotdm9pZCBXZWJDb29raWVNYW5hZ2Vy
OjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIENvb2tpZUFjY2VwdFBvbGlj
eSBjdXJsUG9saWN5ID0gQ29va2llQWNjZXB0UG9saWN5OjpPbmx5RnJvbU1haW5Eb2N1bWVudERv
bWFpbjsKICAgICBzd2l0Y2ggKHBvbGljeSkgewpAQCAtNTUsNiArNTUsNyBAQCB2b2lkIFdlYkNv
b2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvCiAgICAgbV9wcm9jZXNzLmZvckVhY2hOZXR3
b3JrU3RvcmFnZVNlc3Npb24oW2N1cmxQb2xpY3ldIChjb25zdCBhdXRvJiBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24pIHsKICAgICAgICAgbmV0d29ya1N0b3JhZ2VTZXNzaW9uLnNldENvb2tpZUFjY2Vw
dFBvbGljeShjdXJsUG9saWN5KTsKICAgICB9KTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcigpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ29va2llcy9tYWMvV2ViQ29va2llTWFuYWdlck1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJN
YWMubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9tYWMvV2ViQ29va2llTWFuYWdlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9IVFRQQ29va2llQWNjZXB0UG9saWN5Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9ydCA8cGFsL3Nw
aS9jZi9DRk5ldHdvcmtTUEkuaD4KKyNpbXBvcnQgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4K
ICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpA
QCAtNTMsMTUgKzU0LDE5IEBAIHN0YXRpYyBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5
IHQKICAgICByZXR1cm4gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeUFsd2F5czsKIH0K
IAotdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6
OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5
IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFj
Y2Vzc1Jhd0Nvb2tpZXMpKTsKIAorICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIFtb
TlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2llQWNj
ZXB0UG9saWN5OnN0YXRpY19jYXN0PE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeT4ocG9saWN5KV07
CisgICAgc2F2ZUNvb2tpZXMoW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0
b3JhZ2VdLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogCiAgICAgbV9wcm9jZXNzLmZvckVh
Y2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oWyZdIChjb25zdCBhdXRvJiBuZXR3b3JrU3RvcmFnZVNl
c3Npb24pIHsKICAgICAgICAgaWYgKGF1dG8gY29va2llU3RvcmFnZSA9IG5ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5jb29raWVTdG9yYWdlKCkpCiAgICAgICAgICAgICBDRkhUVFBDb29raWVTdG9yYWdl
U2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHRvQ0ZIVFRQQ29va2ll
U3RvcmFnZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKKyAgICAgICAgaWYgKGF1dG8gKnN0b3JhZ2Ug
PSBuZXR3b3JrU3RvcmFnZVNlc3Npb24ubnNDb29raWVTdG9yYWdlKCkpCisgICAgICAgICAgICBz
YXZlQ29va2llcyhzdG9yYWdlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0pOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJD
b29raWVNYW5hZ2VyU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCShyZXZpc2lvbiAy
Njc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJD
b29raWVNYW5hZ2VyU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDExICszNywxMiBAQAog
bmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotdm9pZCBXZWJD
b29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0
SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fcHJv
Y2Vzcy5mb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtwb2xpY3ldIChhdXRvJiBzZXNzaW9u
KSB7CiAgICAgICAgIHNlc3Npb24uc2V0Q29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7CiAgICAg
fSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUg
c3RvcmFnZVR5cGUpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3Jh
Z2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAJKHJldmlz
aW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9M
b2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw3ICsyMTQsOCBA
QCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpjbGVhcigpCiAKIHZvaWQgTG9jYWxTdG9yYWdl
RGF0YWJhc2U6OmNsb3NlKCkKIHsKLSAgICBBU1NFUlQoIW1faXNDbG9zZWQpOworICAgIGlmICht
X2lzQ2xvc2VkKQorICAgICAgICByZXR1cm47CiAgICAgbV9pc0Nsb3NlZCA9IHRydWU7CiAKICAg
ICBpZiAobV9kaWRTY2hlZHVsZURhdGFiYXNlVXBkYXRlKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29h
Lm1tCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nv
Y29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbXBvcnQgIk5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgogI2ltcG9ydCAiTmV0d29ya1Nl
c3Npb25Db2NvYS5oIgogI2ltcG9ydCAiU2FuZGJveEV4dGVuc2lvbi5oIgorI2ltcG9ydCAiV2Vi
Q29va2llTWFuYWdlci5oIgogI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24u
aD4KICNpbXBvcnQgPFdlYkNvcmUvUHVibGljU3VmZml4Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jl
c291cmNlUmVxdWVzdENGTmV0Lmg+CkBAIC03OCw5ICs3OSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVy
bWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5j
b250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRl
bnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9DRk5ldHdvcmtTZXRBVFNDb250ZXh0KHBh
cmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwpAQCAtMTA1LDExICsxMDMsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAgICAgW05TVVJMQ2FjaGUg
c2V0U2hhcmVkVVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1D
cmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5p
cXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNz
Ojpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9B
UFBMSUNBVElPTl9BVURJVF9EQVRBKQpAQCAtMjIxLDcgKzIxNCw3IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmZsdXNoQ29va2llcyhjb25zdCAKICAgICBwbGF0Zm9ybUZsdXNoQ29va2llcyhzZXNz
aW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotc3RhdGljIHZvaWQgc2F2
ZUNvb2tpZXMoTlNIVFRQQ29va2llU3RvcmFnZSAqY29va2llU3RvcmFnZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBzYXZlQ29va2llcyhOU0hU
VFBDb29raWVTdG9yYWdlICpjb29raWVTdG9yYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
ICAgICBBU1NFUlQoY29va2llU3RvcmFnZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAkocmV2aXNp
b24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQ
cm9jZXNzQ3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSw2IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3Jt
Q3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVu
aXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmlj
SFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0
ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRl
eHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVt
b3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01NSwxNSArNTUsMTEgQEAgdm9pZCBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6
ZW5zdXJlV2VicwogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHko
cGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBSZXRh
aW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gdWlQcm9jZXNzQ29va2llU3RvcmFnZTsKLSAg
ICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nv
b2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSkKKyAgICBpZiAoIXNlc3Npb25JRC5pc0Vw
aGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVy
LmlzRW1wdHkoKSAmJiBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9u
SUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAgICAgICAgdWlQcm9j
ZXNzQ29va2llU3RvcmFnZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlpbmdEYXRhKHBhcmFt
ZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIpOwogCiAgICAgbmV0d29ya1By
b2Nlc3MuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgbWFrZVN0cmluZyhiYXNl
LCAnLicsIHNlc3Npb25JRC50b1VJbnQ2NCgpKSwgV1RGTW92ZSh1aVByb2Nlc3NDb29raWVTdG9y
YWdlKSk7CiAKLSAgICBhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Byb2Nlc3Muc3RvcmFnZVNlc3Np
b24oc2Vzc2lvbklEKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMu
cGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHNlc3Npb24tPnNldENvb2tpZShjb29raWUpOwotCiAg
ICAgbmV0d29ya1Byb2Nlc3Muc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpj
cmVhdGUobmV0d29ya1Byb2Nlc3MsIFdURk1vdmUocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMpKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5jcHAJKHJldmlzaW9u
IDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJv
Y2Vzc01haW5Tb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBjbGFzcyBO
ZXR3b3JrUHJvY2Vzc01haW5Tb3VwIGZpbmFsOiBwdWJsCiBwdWJsaWM6CiAgICAgdm9pZCBwbGF0
Zm9ybUZpbmFsaXplKCkgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJcyB0aGlz
IHN0aWxsIG5lZWRlZD8gV2Ugc2hvdWxkIHByb2JhYmx5IGRlc3Ryb3kgYWxsIGV4aXN0aW5nIHNl
c3Npb25zIGF0IHRoaXMgcG9pbnQgaW5zdGVhZC4KICAgICAgICAgLy8gTmVlZGVkIHRvIGRlc3Ry
b3kgdGhlIFNvdXBTZXNzaW9uIGFuZCBTb3VwQ29va2llSmFyLCBlLmcuIHRvIGF2b2lkCiAgICAg
ICAgIC8vIGxlYWtpbmcgU1FMaXRlIHRlbXBvcmFyeSBqb3VybmFsaW5nIGZpbGVzLgogICAgICAg
ICBnbG9iYWxOZXR3b3JrUHJvY2Vzcy0+ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAkocmV2aXNpb24gMjY3NTM2
KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwxMSArMTM1LDYgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogICAgICAgICB1c2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
Q2hhbmdlZChwYXJhbWV0ZXJzLmxhbmd1YWdlcyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3Jz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgYm9vbCBpZ25vcmVUTFNFcnJvcnMpCiB7CiAgICAg
aWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKQpJbmRleDogU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0F0dGFjaG1lbnQuaAkocmV2aXNpb24gMjY3NTM2KQorKysg
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC05NSw4ICs5NSw4IEBAIHByaXZhdGU6CiAgICAgaW50IG1fZmlsZURlc2NyaXB0b3IgeyAtMSB9
OwogICAgIHNpemVfdCBtX3NpemU7CiAjZWxpZiBPUyhEQVJXSU4pCi0gICAgbWFjaF9wb3J0X25h
bWVfdCBtX3BvcnQ7Ci0gICAgbWFjaF9tc2dfdHlwZV9uYW1lX3QgbV9kaXNwb3NpdGlvbjsKKyAg
ICBtYWNoX3BvcnRfbmFtZV90IG1fcG9ydCB7IDAgfTsKKyAgICBtYWNoX21zZ190eXBlX25hbWVf
dCBtX2Rpc3Bvc2l0aW9uIHsgMCB9OwogI2VsaWYgT1MoV0lORE9XUykKICAgICBIQU5ETEUgbV9o
YW5kbGUgeyBJTlZBTElEX0hBTkRMRV9WQUxVRSB9OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCShyZXZp
c2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEzICs0MCw5IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZSgKICAgICBlbmNvZGVyIDw8IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVu
dGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7
Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2llczsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5IDw8IGluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+
IFdlYgogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMuY29va2ll
U3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpjb29raWVTdG9yYWdlUGF0aEV4
dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBPcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6Q29va2llPj4g
cGVuZGluZ0Nvb2tpZXM7Ci0gICAgZGVjb2RlciA+PiBwZW5kaW5nQ29va2llczsKLSAgICBpZiAo
IXBlbmRpbmdDb29raWVzKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHBhcmFt
ZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBXVEZNb3ZlKCpwZW5kaW5nQ29va2llcyk7Ci0KICNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBPcHRpb25hbDxTdHJpbmc+IGluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeTsKICAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsK
QEAgLTEwMSwxNCArOTEsNiBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4g
V2ViCiAgICAgaWYgKCFpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBP
cHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9i
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNl
VGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFpbmRleGVkRGF0YWJh
c2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNF
X1dPUktFUikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9TaGFy
ZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTUg
KzUxLDExIEBAIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyB7CiAKICAgICBWZWN0
b3I8dWludDhfdD4gdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAg
IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29raWVzOwogICAgIE5ldHdvcmtTZXNz
aW9uQ3JlYXRpb25QYXJhbWV0ZXJzIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKIAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIFN0cmluZyBpbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHku
aAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5
UHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94eSgpOwogCiAgICAgdm9pZCBjb25uZWN0
KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGVybWluYXRlKCk7
CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigpID0gMDsKIApJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
Y3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29r
aWVNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1
ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1By
b3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgiCiAjaW5jbHVkZSAiV2ViQ29v
a2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5TWVz
c2FnZXMuaCIKQEAgLTM5LDI0ICs0MCwxNiBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAotY29uc3QgY2hhciogV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
dXBwbGVtZW50TmFtZSgpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykKKyAgICA6IG1fbmV0d29y
a1Byb2Nlc3MobWFrZVdlYWtQdHIobmV0d29ya1Byb2Nlc3MpKQogewotICAgIHJldHVybiAiV2Vi
Q29va2llTWFuYWdlclByb3h5IjsKLX0KLQotUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gV2Vi
Q29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94eShwcm9jZXNz
UG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQcm94
eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi0gICAgOiBXZWJDb250ZXh0U3VwcGxlbWVu
dChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250ZXh0U3VwcGxlbWVudDo6cHJvY2Vzc1Bvb2wo
KS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIG5ldHdvcmtQcm9jZXNzLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksICp0aGlzKTsKIH0KIAogV2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2ll
TWFuYWdlclByb3h5KCkKIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CiAgICAgQVNTRVJUKG1fY29va2ll
T2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiB9CiAKQEAgLTY1LDEwMiArNTgsODQgQEAgdm9pZCBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmluaXRpYWxpemVDbAogICAgIG1fY2xpZW50LmluaXRpYWxpemUo
Y2xpZW50KTsKIH0KIAotLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLQotdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnByb2Nlc3NQb29sRGVzdHJveWVkKCkKLXsKLSAgICBWZWN0b3I8T2JzZXJ2
ZXIqPiBvYnNlcnZlcnM7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlclNldCA6IG1fY29va2llT2Jz
ZXJ2ZXJzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZl
clNldCkKLSAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQob2JzZXJ2ZXIpOwotICAgIH0KLQot
ICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyLT5t
YW5hZ2VyRGVzdHJveWVkKCk7Ci0KLSAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0
eSgpKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShX
ZWJQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJv
Y2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2Jq
ZWN0OjpyZWYoKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29u
dGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpkZXJlZigpOwotfQotCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYp
PiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQor
ICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBwcm9jZXNzUG9vbCgp
LT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklELCBo
b3N0bmFtZXMpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyksIDApOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQp
CiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGlu
Z0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVz
KHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29r
aWVzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVs
ZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ29va2llJiBjb29raWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1
dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFtjYWxsYmFja0Z1
bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKV0oKSBtdXRhYmxlIHsKKyAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklE
LCBjb29raWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCiAgICAgICAg
IGNhbGxiYWNrRnVuY3Rpb24oKTsKLSAgICB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgV2FsbFRpbWUgdGltZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNr
RnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVk
U2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01v
ZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7
CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
YWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9u
SUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBjb29raWVz
KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFj
a0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMs
IGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdv
cmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RG
TW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3Vt
ZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBj
YWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRB
bGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAg
ICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29v
a2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisg
ICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmdldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwp
LCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
KyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShjYWxs
YmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7
CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNo
YW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOwor
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMo
c2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJv
Y2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhz
ZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nv
b2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpzZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
V1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmIGNhbGxiYWNrKQpAQCAtMjExLDE4ICsxODYsMTggQEAg
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNvb2tpZXNEaWRDaAogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwg
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotI2lmIFVTRShTT1VQKQotICAgIHByb2Nlc3NQb29sKCkt
PnNldEluaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAg
IGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgV1RGTW92
ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0K
IAotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBv
bGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1bmN0
aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzZXNzaW9uSUQpLCBXVEZN
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rp
b24oSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6TmV2ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5oCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTEgKzU2LDkgQEAg
dHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpBcnJheSo+IEFycgogdHlwZWRlZiBHZW5lcmlj
Q2FsbGJhY2s8V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeT4gSFRUUENvb2tpZUFjY2Vw
dFBvbGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7CiAKLWNsYXNzIFdlYkNvb2tpZU1h
bmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNv
b2tpZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1lbnQsIHByaXZhdGUgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQ
STo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHByaXZhdGUg
SVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBz
dXBwbGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+
IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRpYyBSZWY8V2ViQ29va2llTWFuYWdl
clByb3h5PiBjcmVhdGUoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KG5ldHdvcmtQcm9jZXNzKSk7
IH0KICAgICB2aXJ0dWFsIH5XZWJDb29raWVNYW5hZ2VyUHJveHkoKTsKIAogICAgIHZvaWQgaW5p
dGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKik7CkBAIC0xMDQs
MTcgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQVBJOjpPYmplY3Q6OmRlcmVmOwogCiBw
cml2YXRlOgotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCopOworICAg
IFdlYkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAKICAgICB2b2lk
IGNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gV2ViQ29udGV4dFN1
cHBsZW1lbnQKLSAgICB2b2lkIHByb2Nlc3NQb29sRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZv
aWQgcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlcmVmV2Vi
Q29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLQogICAgIC8vIElQQzo6TWVzc2FnZVJlY2Vp
dmVyCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKSBvdmVycmlkZTsKIApAQCAtMTI1LDYgKzExNiw3IEBAIHByaXZhdGU6CiAgICAgSGFz
aE1hcDxQQUw6OlNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPj4gbV9sZWdhY3lDb29r
aWVPYnNlcnZlcnM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgSGFzaFNldDxPYnNlcnZl
cio+PiBtX2Nvb2tpZU9ic2VydmVyczsKIAorICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94
eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHlDbGllbnQgbV9j
bGllbnQ7CiAKICNpZiBVU0UoU09VUCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0Niw3ICsxNzQ2LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYQogICAgICAgICByZXR1cm47
CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb250cm9sbGVkQnlBdXRvbWF0aW9u
KGNvbnRyb2xsZWQpKTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9s
bGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJv
bGxlZEJ5QXV0b21hdGlvbikpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9sbGVk
QnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJvbGxl
ZEJ5QXV0b21hdGlvbiksIDApOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y3JlYXRlSW5zcGVj
dG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFy
Z2V0VHlwZSB0eXBlKQpAQCAtMzIxMCwxMSArMzIxMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpp
c0ZvcmNlZEludG9BcHBCb3VuZE0KIHZvaWQgV2ViUGFnZVByb3h5OjpkaXNhYmxlU2VydmljZVdv
cmtlckVudGl0bGVtZW50SW5OZXR3b3JrUHJvY2VzcygpCiB7CiAjaWYgRU5BQkxFKEFQUF9CT1VO
RF9ET01BSU5TKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCksIDApOwotICAgIH0K
KyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCAwKTsKICNl
bmRpZgogfQogCkBAIC0zMjIzLDEzICszMjE5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFy
U2VydmljZVdvcmtlckVudAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykgJiYgIVBMQVRG
T1JNKE1BQ0NBVEFMWVNUKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIHNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRs
ZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJp
ZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFT
dG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwog
I2VuZGlmCkBAIC00NDIzLDcgKzQ0MTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cHJlY29ubmVj
dFRvKGNvbnN0IFVSCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3kgPSBtX2NhblVzZUNyZWRlbnRpYWxTdG9yYWdlID8gV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3k6OlVzZSA6IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpE
b05vdFVzZTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5wcmVjb25uZWN0VG8oc2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlEKCks
IHVybCwgdXNlckFnZW50KCksIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRpbmdU
b0FwcEJvdW5kRG9tYWluKCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vz
cygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQoKSwg
dXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1Rv
QXBwQm91bmREb21haW4oKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDYW5Vc2VDcmVk
ZW50aWFsU3RvcmFnZShib29sIGNhblVzZUNyZWRlbnRpYWxTdG9yYWdlKQpAQCAtNDcxOSw3ICs0
NzA5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZQogICAgICAg
ICAgICAgUmVnaXN0cmFibGVEb21haW4gY3VycmVudERvbWFpbiB7IGN1cnJlbnRSZXF1ZXN0LnVy
bCgpIH07CiAgICAgICAgICAgICBVUkwgcmVxdWVzdGVyVVJMIHsgVVJMKCksIHJlcXVlc3Rlck9y
aWdpbi50b1N0cmluZygpIH07CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnREb21haW4ubWF0Y2hl
cyhyZXF1ZXN0ZXJVUkwpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2wo
KS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9LCBjdXJy
ZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50aWZpZXIsIG1fd2ViUGFn
ZUlEKTsKKyAgICAgICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNz
KCkuZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwgY3Vy
cmVudERvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dlYlBh
Z2VJRCk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTQ3NTcsNyArNDc0Nyw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUKICAgICBpZiAobmF2aWdhdGlv
biAmJiBmcmFtZS0+aXNNYWluRnJhbWUoKSkgewogICAgICAgICBpZiAoYXV0byYgYWRDbGlja0F0
dHJpYnV0aW9uID0gbmF2aWdhdGlvbi0+YWRDbGlja0F0dHJpYnV0aW9uKCkpIHsKICAgICAgICAg
ICAgIGlmIChhZENsaWNrQXR0cmlidXRpb24tPmRlc3RpbmF0aW9uKCkubWF0Y2hlcyhmcmFtZS0+
dXJsKCkpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9O
ZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0
dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmli
dXRpb24pKTsKKyAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3RvcmVBZENsaWNrQXR0cmlidXRp
b24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKmFkQ2xpY2tBdHRyaWJ1dGlvbiks
IDApOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MzcxLDcgKzUzNjEsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvCiAgICAgaWYgKHRhcmdldEhvc3QuaXNFbXB0
eSgpIHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3QgPT0gc291cmNlVVJM
Lmhvc3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgp
LnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TG9nRnJh
bWVOYXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxl
RG9tYWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVSTCB9LCBSZWdp
c3RyYWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5pc01haW5GcmFt
ZSgpLCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yTWFp
bkZyYW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlcikpOworICAgIHdl
YnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBw
YWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVkaXJlY3QsIGZy
YW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRGaW5pc2hEb2N1
bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlV
c2VyKSwgMCk7CiB9CiAjZW5kaWYKIApAQCAtOTk5Niw1OCArOTk4NiwyNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6c3lzdGVtUHJldmlld0FjdGlvblRyCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkdW1w
QWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYg
KCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAg
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5l
dHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2Fn
ZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1ZSks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9y
ZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcobV93
ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFsdWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25D
b252ZXJzaW9uVVJMRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1f
d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCku
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0
dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgp
KSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJl
ZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQ
cm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFy
a0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKICNpZiBF
TkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBA
QAogI2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nSW5pdGlh
bGl6YXRpb24uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uSW5mby5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtQcm9jZXNzUHJveHkuaCIKQEAgLTE0Myw4ICsxNDIsMTAgQEAKICNlbmRpZgogCiAj
ZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxF
QVNFX0xPRyhjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19W
QV9BUkdTX18pCisjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhjaGFu
bmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZt
dCwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJS
T1IoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIlcCAtIFdl
YlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJP
Q0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFT
RV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAi
JXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5l
IFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5uZWwsIGZt
dCwgLi4uKSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2Vk
KCksIGNoYW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIsNiArMjMz
LDExIEBAIHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXQKICAgICByZXR1
cm4gc2V0OwogfQogCitWZWN0b3I8U3RyaW5nPiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dp
dGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkKK3sKKyAgICByZXR1cm4gY29weVRvVmVjdG9yKGds
b2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKTsKK30KKwogV2ViUHJv
Y2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBj
b25maWd1cmF0aW9uKQogICAgIDogbV9jb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24uY29weSgp
KQogICAgICwgbV9kZWZhdWx0UGFnZUdyb3VwKFdlYlBhZ2VHcm91cDo6Y3JlYXRlKCkpCkBAIC0y
MzksNyArMjQ1LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvYwog
ICAgICwgbV9hdXRvbWF0aW9uQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpBdXRvbWF0aW9uQ2xpZW50
PigpKQogICAgICwgbV9kb3dubG9hZENsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRD
bGllbnQ+KCkpCiAgICAgLCBtX2hpc3RvcnlDbGllbnQobWFrZVVuaXF1ZTxBUEk6OkxlZ2FjeUNv
bnRleHRIaXN0b3J5Q2xpZW50PigpKQotICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQobWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICAgICAs
IG1fdmlzaXRlZExpbmtTdG9yZShWaXNpdGVkTGlua1N0b3JlOjpjcmVhdGUoKSkKICNpZiBQTEFU
Rk9STShNQUMpCiAgICAgLCBtX2hpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyKG1h
a2VVbmlxdWU8SGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXI+KCp0aGlzKSkKQEAg
LTI2Nyw5ICsyNzIsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9j
CiAjZW5kaWYKICAgICB9KTsKIAotICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlICYmIFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBt
X3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKTsKLQogICAgIGZvciAoYXV0byYgc2NoZW1lIDogbV9jb25maWd1cmF0aW9uLT5hbHdh
eXNSZXZhbGlkYXRlZFVSTFNjaGVtZXMoKSkKICAgICAgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFz
QWx3YXlzUmV2YWxpZGF0ZWQuYWRkKHNjaGVtZSk7CiAKQEAgLTI4NSw3ICsyODcsNiBAQCBXZWJQ
cm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jCiAgICAgYWRkTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhp
cyk7CiAKICAgICAvLyBOT1RFOiBUaGVzZSBzdWItb2JqZWN0cyBtdXN0IGJlIGluaXRpYWxpemVk
IGFmdGVyIG1fbWVzc2FnZVJlY2VpdmVyTWFwLi4KLSAgICBhZGRTdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdl
clByb3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5
PigpOwogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQpAQCAtMzQyLDkgKzM0Myw2IEBAIFdlYlBy
b2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2woKQogICAgIHByb2Nlc3NQb29sQ291bnRlci5kZWNy
ZW1lbnQoKTsKICNlbmRpZgogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNodXREb3duUHJvY2VzcygpOwotCiAjaWYgRU5BQkxFKEdBTUVQQUQp
CiAgICAgaWYgKCFtX3Byb2Nlc3Nlc1VzaW5nR2FtZXBhZHMuaXNFbXB0eSgpKQogICAgICAgICBV
SUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkucHJvY2Vzc1Bvb2xTdG9wcGVkVXNpbmdHYW1l
cGFkcygqdGhpcyk7CkBAIC00MDIsMTYgKzQwMCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
dEF1dG9tYXRpb25DbGllbnQKICAgICAgICAgbV9hdXRvbWF0aW9uQ2xpZW50ID0gV1RGTW92ZShh
dXRvbWF0aW9uQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudD4mJiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi17Ci0jaWYg
RU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKLSAgICBpZiAoIWN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCkKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQgPSBtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpOwotICAg
IGVsc2UKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBXVEZNb3ZlKGN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0
cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKQogewogICAgIC8v
IEd1YXJkIGFnYWluc3QgQVBJIG1pc3VzZS4KQEAgLTQyMSwxMSArNDA5LDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudAogICAgIG1fY29uZmlndXJhdGlvbi0+c2V0
Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGN1c3RvbVdlYkNvbnRlbnRT
ZXJ2aWNlQnVuZGxlSWRlbnRpZmllcik7CiB9CiAKLUlQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fbmV0
d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFu
Z3VhZ2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViUHJvY2Vz
c1Bvb2wqPihjb250ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7CkBAIC00MzUsOCArNDE4LDcgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9BbGxQ
cm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFu
Z2VkKCkpOwogI2lmIFVTRShTT1VQKQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclBy
ZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7Cisg
ICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5uZXR3b3JrUHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hh
bmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKICNlbmRpZgogfQogCkBAIC00NDks
NyArNDMxLDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZnVsbEtleWJvYXJkQWNjZXNzTQogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE1lbW9yeVByZXNzdXJlRXZlbnQoYm9vbCBpc0NyaXRpY2Fs
KQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6
RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCkpOwotICAgIHNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVt
b3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSk7CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9j
ZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVj
ZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCksIDApOwogI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQogICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5z
ZW5kTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKTsKICNlbmRpZgpAQCAtNDc0LDI3NSAr
NDU3LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2NyZWVuUHJvcGVydGllc1N0YQogI2VuZGlm
CiB9CiAKLU5ldHdvcmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3Jr
UHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKLXsKLSAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEg
dGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFp
biB0aHJlYWRzLgotICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2Ug
dGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KLSAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlmICghUnVuTG9vcDo6
aXNNYWluKCkpIHsKLSAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7
Ci0gICAgfQotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgaWYgKHdpdGhX
ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNz
aW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICB3aXRoV2Vi
c2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBhdXRvIG5ldHdvcmtQcm9j
ZXNzID0gbWFrZVVuaXF1ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7Ci0KLSAgICBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCi0gICAgaWYgKG1fd2Vi
c2l0ZURhdGFTdG9yZSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLnBlbmRpbmdDb29raWVzID0gY29weVRvVmVjdG9yKG1fd2Vic2l0ZURhdGFTdG9yZS0+
cGVuZGluZ0Nvb2tpZXMoKSk7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5k
aW5nQ29va2llcygpOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VB
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3Vy
YXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVy
KCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lH
bG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotCi0gICAgZm9yIChhdXRv
JiBzY2hlbWUgOiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkK
LSAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29s
cy5hcHBlbmQoc2NoZW1lKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU3RyaW5n
IGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURp
cmVjdG9yeSgpOwotICAgIGlmICghY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0g
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9y
eSA9IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYg
KCFjb250YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVz
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7Ci0KLSAgICBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bv
b2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyZW50QnVuZGxlRGlyZWN0
b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBh
cmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBh
cmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclRlbXBvcmFyeUZpbGUoZW1wdHlTdHJpbmcoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6
UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWRE
YXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotI2VuZGlm
Ci0KLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9W
ZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVy
QXNTZWN1cmUoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNz
aW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRp
bmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3Vy
aXR5UG9saWN5KCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2Fs
ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVz
VG9SZWdpc3RlckFzTG9jYWwoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRv
bigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotICAgIC8vICoqKioqKioqKgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNo
YW5nZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlz
ayB3aXRob3V0IGZpcnN0IGNvbnN1bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjov
L3Byb2JsZW0vMTc0NTQ3MTI+KQotICAgIC8vICoqKioqKioqKgotICAgIGlmIChtX3dlYnNpdGVE
YXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZElu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVj
dG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+Y3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQot
I2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQot
ICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBt
X3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSgpOwotICAgIGlmICghcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5KQotICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnkgPSAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExv
Y2FsU3RvcmFnZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9y
YWdlRGlyZWN0b3J5KQotICAgICAgICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9
IGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0KLSAgICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURh
dGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBu
dWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVj
dG9yeShjYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3Rv
cnkgPSBXVEZNb3ZlKGNhY2hlU3RvcmFnZURpcmVjdG9yeSk7Ci0gICAgfQotCi0gICAgU3RyaW5n
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0g
ICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGFyYW1ldGVycy5kaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NE
aXJlY3RvcnksIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwotCi0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAg
Ym9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7
Ci0gICAgYm9vbCBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoUkVT
T1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGUgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IFdlYkNvcmU6OlRoaXJkUGFy
dHlDb29raWVCbG9ja2luZ01vZGU6OkFsbDsKLSAgICBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZCBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IFdlYkNv
cmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKLSNlbmRpZgotICAgIFdl
YkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJzaXRl
RGF0YVJlbW92YWxNb2RlID0gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGU6OkFsbEJ1dENvb2tpZXM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gc3RhbmRh
bG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4+IGFwcEJvdW5kRG9tYWluczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBt
YW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fdGNj
UHJlZmVyZW5jZUVuYWJsZWQgPSBkb2VzQXBwSGF2ZUlUUEVuYWJsZWQoKTsKLSAgICBpZiAod2l0
aFdlYnNpdGVEYXRhU3RvcmUgJiYgIXdpdGhXZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhw
bGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBt
X3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyk7Ci0gICAgfSBlbHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUgJiYgIW1fd2Vic2l0ZURhdGFT
dG9yZS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgbV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmVFeGlzdHMoKSAmJiAhV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZSgpLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZQotICAg
ICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxl
ZDsKLSNlbmRpZgotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2
ZW50ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2so
KTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewot
ICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURh
dGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAg
ICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAg
ICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxl
RGVidWdNb2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAg
ICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5zYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAg
Zmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
c3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5z
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLmFwcEJvdW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNl
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLm1hbnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3
aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0
b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3Rv
cmFnZVF1b3RhKCk7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVE
aXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsK
LSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURp
cmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3
b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNvbnN0IGF1dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRh
U3RvcmUtPnJlc29sdmVkSFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3Rz
U3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3Jh
Z2VEaXJlY3RvcnkgPSBoc3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVu
c2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkg
ewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NM
b2dUZXN0aW5nRXZlbnQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5n
Q2FsbGJhY2soKTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljcykgewotICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dl
YnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0g
ICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhv
c3Q7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
LmVuYWJsZURlYnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQot
ICAgICAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29v
a2llQmxvY2tpbmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVu
YWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMuc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlOwotICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9t
YWluID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJh
bWV0ZXJzLnN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5k
RG9tYWlucyA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5hcHBCb3VuZERvbWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5tYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1
b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAg
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3Jp
Z2luU3RvcmFnZVF1b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2lu
U3RvcmFnZVF1b3RhKCk7Ci0KLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgp
OwotICAgICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAg
ICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5
OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNo
ZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3
b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y29uc3QgYXV0byYgaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJl
c29sdmVkSFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURp
cmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3Rv
cnkgPSBoc3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlw
ZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7
Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVj
dG9yeTsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNo
ZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3
b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lmIEhBVkUoQ0ZO
RVRXT1JLX0FMVEVSTkFUSVZFX1NFUlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6Omh0
dHAzRW5hYmxlZCgpKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9y
eSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2VzRGlyZWN0b3J5
KCk7Ci0gICAgICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnksIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFs
dGVybmF0aXZlU2VydmljZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
Lmh0dHAzRW5hYmxlZCA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBpc0l0cFN0YXRl
RXhwbGljaXRseVNldCA9IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXJhbWV0ZXJzID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewotICAgICAgICBX
VEZNb3ZlKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAgICBXVEZNb3Zl
KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpLAotICAgICAg
ICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0YXRlRXhwbGlj
aXRseVNldCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdF
dmVudCwKLSAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAgZW5hYmxlUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQotICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlLAotICAgICAg
ICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0
aW9uRG9tYWluLAotICAgICAgICBhcHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZh
bGVudFJlc291cmNlLAotICAgIH07Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmlj
IHBhcmFtZXRlcnMKLSAgICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0
ZXJzKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3
b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3
b3JrUHJvY2Vzc0xhdGVuY3lRT1MoKSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAw
KTsKLSNlbmRpZgotCi0gICAgbmV0d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24o
KTsKLQotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAg
ICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQot
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUg
c2Vzc2lvbnMgdGhhdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAg
ICBmb3IgKGF1dG8mIHNlc3Npb25JRCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpl
eGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAg
ICB9Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0g
ICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpu
ZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQ
cm94eSkKIHsKLSAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3
b3JrUHJvY2Vzc1Byb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChh
dXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxl
bWVudC0+cHJvY2Vzc0RpZENsb3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzUxLDkg
KzQ2Nyw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2gKICAgICBp
ZiAobV9hdXRvbWF0aW9uU2Vzc2lvbikKICAgICAgICAgbV9hdXRvbWF0aW9uU2Vzc2lvbi0+dGVy
bWluYXRlKCk7CiAKLSAgICAvLyBMZWF2ZSB0aGUgcHJvY2VzcyBwcm94eSBhcm91bmQgZHVyaW5n
IGNsaWVudCBjYWxsLCBzbyB0aGF0IHRoZSBjbGllbnQgY291bGQgcXVlcnkgdGhlIHByb2Nlc3Mg
aWRlbnRpZmllci4KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKLQogICAgIHRlcm1p
bmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKQEAgLTc2NCwyMCArNDc3LDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2NlcwogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdl
YlByb2Nlc3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAgICBlbnN1cmVOZXR3b3Jr
UHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KSwgd2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwgcmVwbHkg
PSBXVEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc1ZhbGlkKGNvbm5l
Y3Rpb25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5ICYmIHdlYWtUaGlzKSkg
ewotICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoUHJvY2Vzcywg
ImdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0IGF0dGVtcHQsIHJldHJ5
aW5nIik7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3ZWJQcm9jZXNz
UHJveHksIFdURk1vdmUocmVwbHkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7Ci0gICAgfSk7Ci19Ci0KICNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpncHVQcm9jZXNzQ3Jhc2hlZChQcm9j
ZXNzSUQgaWRlbnRpZmllcikKIHsKQEAgLTgwMSwyMyArNTAwLDI2IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmdldEdQVVByb2Nlc3NDb25uZWMKIH0KICNlbmRpZgogCitib29sIFdlYlByb2Nlc3NQ
b29sOjpzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSBmYWxzZTsKKwogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiBw
cm94eSwgUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChwcm94eSwgJnByb3h5ID09IG1fbmV0d29ya1Byb2Nl
c3MuZ2V0KCkpOwotCi0gICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3Rv
cmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwot
Ci0gICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0
YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0gICAgICAgIHdlYnNpdGVEYXRh
U3RvcmUgPSBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7Ci0gICAgfQorICAgIGF1dG8qIHdlYnNp
dGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Np
b25JRChzZXNzaW9uSUQpOworICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAgd2Vi
c2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIo
KTsKKyAgICBpZiAoIXByb2Nlc3NQb29scygpLnNpemUoKSkKKyAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFJlZjxXZWJQcm9jZXNzUG9vbD4+IHNlcnZpY2VXb3JrZXJQcm9jZXNzUG9vbChX
ZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjcmVh
dGUoKS5nZXQoKSkpOworCisgICAgLy8gQXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdCBwcm9j
ZXNzIHBvb2wgdG8gaG9zdCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vzcy4KKyAgICBhdXRvKiBw
cm9jZXNzUG9vbCA9IHByb2Nlc3NQb29scygpWzBdOworICAgIEFTU0VSVChwcm9jZXNzUG9vbCk7
CiAKICAgICBXZWJQcm9jZXNzUHJveHkqIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgeyBudWxs
cHRyIH07Ci0gICAgaWYgKCFtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGlm
IChwcm9jZXNzID09IG1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9jZXNzLT5pc0R1bW15UHJvY2Vz
c1Byb3h5KCkpCisKKyAgICBpZiAoIXNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcykg
eworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMp
IHsKKyAgICAgICAgICAgIGlmIChwcm9jZXNzID09IHByb2Nlc3NQb29sLT5tX3ByZXdhcm1lZFBy
b2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94eSgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCZwcm9jZXNzLT53ZWJzaXRlRGF0YVN0b3JlKCkg
IT0gd2Vic2l0ZURhdGFTdG9yZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTgyNSwz
NSArNTI3LDM1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnQKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eSA9IHByb2Nlc3MuZ2V0KCk7Ci0gICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyh1c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlm
aWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CisgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyhwcm9jZXNzUG9vbC0+dXNlckNvbnRlbnRDb250
cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkpOwogCi0gICAgICAgICAgICBXRUJQ
Uk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxp
c2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgcmV1c2luZyBhbiBleGlz
dGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkp
OworICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFU
SUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3
b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdlYiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQ
SUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KIAogICAgIGlmICghc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkgewotICAgICAg
ICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6Y3JlYXRlRm9yU2Vydmlj
ZVdvcmtlcnMoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFT
dG9yZSk7CisgICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5ID0gV2ViUHJvY2Vzc1Byb3h5Ojpj
cmVhdGVGb3JTZXJ2aWNlV29ya2VycygqcHJvY2Vzc1Bvb2wsIFdURk1vdmUocmVnaXN0cmFibGVE
b21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CiAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNz
UHJveHkgPSBuZXdQcm9jZXNzUHJveHkucHRyKCk7CiAKLSAgICAgICAgV0VCUFJPQ0VTU1BPT0xf
UkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29y
a2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJv
eHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAg
ICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2aWNl
V29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
IGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVk
KSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkt
PnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCi0gICAgICAgIGluaXRpYWxpemVOZXdXZWJQcm9jZXNz
KG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFTdG9yZSk7Ci0gICAgICAgIG1fcHJvY2Vzc2Vz
LmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOworICAgICAgICBwcm9jZXNzUG9vbC0+
aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJvY2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3Jl
KTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1By
b2Nlc3NQcm94eSkpOwogICAgIH0KIAotICAgIEFTU0VSVCghbV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSk7Ci0gICAgbV9zZXJ2aWNl
V29ya2VyUHJvY2Vzc2VzLmFkZCgqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSk7CisgICAgQVNT
RVJUKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29udGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHkpKTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuYWRkKCpzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5KTsKIAotICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVzdGFi
bGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzID8gbV9z
ZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJl
ZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgaWYg
KCFtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxsKCkpCi0gICAgICAgIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQobV9zZXJ2aWNlV29ya2Vy
VXNlckFnZW50KTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lc3RhYmxpc2hTZXJ2
aWNlV29ya2VyQ29udGV4dChwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMg
PyBwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IHByb2Nl
c3NQb29sLT5tX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmICghcHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdv
cmtlclVzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94
eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2Vy
VXNlckFnZW50KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVtb3ZlRnJvbVNlcnZpY2VX
b3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogewotICAgIEFTU0VSVCht
X3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFpbnMocHJvY2VzcykpOwotICAgIG1fc2Vydmlj
ZVdvcmtlclByb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CisgICAgQVNTRVJUKHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzZXMoKS5jb250YWlucyhwcm9jZXNzKSk7CisgICAgc2VydmljZVdvcmtlclByb2Nl
c3NlcygpLnJlbW92ZShwcm9jZXNzKTsKIH0KICNlbmRpZgogCkBAIC05MjIsNyArNjI0LDcgQEAg
UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OgogI2lmIFBMQVRGT1JNKEdU
SykgfHwgUExBVEZPUk0oV1BFKQogICAgIC8vIEluIHBsYXRmb3JtcyB1c2luZyBCdWJibGV3cmFw
IGZvciBzYW5kYm94aW5nLCBwcmV3YXJtZWQgcHJvY2VzcyBpcyBsYXVuY2hlZCB1c2luZyB0aGUg
V2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlLAogICAgIC8vIHNvIHdlIGRv
bid0IHVzZSBpdCBpbiBjYXNlIG9mIHVzaW5nIGEgZGlmZmVyZW50IFdlYnNpdGVEYXRhU3RvcmUu
Ci0gICAgaWYgKG1fc2FuZGJveEVuYWJsZWQgJiYgbV93ZWJzaXRlRGF0YVN0b3JlICYmIG1fd2Vi
c2l0ZURhdGFTdG9yZS5nZXQoKSAhPSAmd2Vic2l0ZURhdGFTdG9yZSkKKyAgICBpZiAobV9zYW5k
Ym94RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIApAQCAtMTAzMiw4
ICs3MzQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjppbml0aWFsaXplTmV3V2ViUHJvCiAgICAg
ICAgIHByb2Nlc3MuaXNSZXNwb25zaXZlKFtpbml0aWFsaXphdGlvbkFjdGl2aXR5ID0gV1RGTW92
ZShpbml0aWFsaXphdGlvbkFjdGl2aXR5KV0gKGJvb2wpIHsgfSk7CiAgICAgfSk7CiAKLSAgICBl
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyBwYXJhbWV0ZXJzOwogCiAgICAgcGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGggPSBtX3Jl
c29sdmVkUGF0aHMuaW5qZWN0ZWRCdW5kbGVQYXRoOwpAQCAtMTE5OCw5ICs4OTgsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1CiAgICAgICAgIHByb2Nlc3MtPmNv
bm5lY3Rpb24oKS0+aWdub3JlVGltZW91dHNGb3JUZXN0aW5nKCk7CiAKICAgICBtX2Nvbm5lY3Rp
b25DbGllbnQuZGlkQ3JlYXRlQ29ubmVjdGlvbih0aGlzLCBwcm9jZXNzLT53ZWJDb25uZWN0aW9u
KCkpOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgbV93ZWJzaXRlRGF0
YVN0b3JlLT5kaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCkBAIC0xMjk1
LDEwICs5OTIsNyBAQCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlCiAg
ICAgaWYgKCFwYWdlQ29uZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpKSB7CiAgICAgICAg
IC8vIFdlIHRyeSB0byBhdm9pZCBjcmVhdGluZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxv
bmcgYXMgcG9zc2libGUuCiAgICAgICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRv
IGNyZWF0ZSBhIHdlYiBwYWdlIHdpdGhvdXQgYW55IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVu
IHdlIGhhdmUgdG8gY3JlYXRlIGl0LgotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkK
LSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotCi0gICAgICAgIHBhZ2VDb25maWd1cmF0aW9u
LT5zZXRXZWJzaXRlRGF0YVN0b3JlKG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAg
IHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpKTsKICAgICB9CiAKICAgICBSZWZQdHI8
V2ViUHJvY2Vzc1Byb3h5PiBwcm9jZXNzOwpAQCAtMTMyOSw3ICsxMDIzLDcgQEAgUmVmPFdlYlBh
Z2VQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZQogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKICAgICBpZiAoIW1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKSB7CiAgICAgICAgIG1fc2Vy
dmljZVdvcmtlclByZWZlcmVuY2VzID0gcGFnZS0+cHJlZmVyZW5jZXNTdG9yZSgpOwotICAgICAg
ICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzKQorICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdv
cmtlclByb2Nlc3NlcygpKQogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRl
U2VydmljZVdvcmtlclByZWZlcmVuY2VzU3RvcmUoKm1fc2VydmljZVdvcmtlclByZWZlcmVuY2Vz
KTsKICAgICB9CiAgICAgaWYgKHVzZXJDb250ZW50Q29udHJvbGxlcikKQEAgLTEzNTYsNyArMTA1
MCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXIKICAgICBpZiAo
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50ID09IHVzZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwog
ICAgIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9IHVzZXJBZ2VudDsKLSAgICBmb3IgKGF1dG8m
IHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgIGZv
ciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkp
CiAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzLnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQo
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KICNlbmRpZgpAQCAtMTM2NSwxNSArMTA1OSw2
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2kKIHsKICAgICBhdXRv
IHJlc3VsdCA9IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5hZGQoZGF0YVN0b3JlLnNlc3Npb25JRCgp
LCBIYXNoU2V0PFdlYlBhZ2VQcm94eUlkZW50aWZpZXI+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQo
cGFnZUlEKTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwot
Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7Ci0gICAgaWYgKHNl
c3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAg
IEFTU0VSVCghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgfHwgZGF0YVN0b3JlLnBhcmFtZXRlcnMo
KS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEID09IHNlc3Npb25JRCk7Ci0gICAg
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5hZGRTZXNzaW9uKG1ha2VSZWYoZGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICBkYXRhU3RvcmUu
Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgfQogfQogCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpwYWdlRW5kVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50
aWZpZXIgcGFnZUlELCBXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpCkBAIC0xNDAxLDcgKzEw
ODYsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNQYWdlc1VzaW5nV2Vic2l0CiBEb3dubG9h
ZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0
b3JlLCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCiB7CiAgICAgYXV0byYg
ZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCByZXF1ZXN0LCBp
bml0aWF0aW5nUGFnZSwgeyB9KTsKLSAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBkYXRh
U3RvcmUuc2Vzc2lvbklEKCk7CiAKICAgICBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpbj4gaXNBcHBCb3VuZCA9IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpObzsKICAgICBp
ZiAoaW5pdGlhdGluZ1BhZ2UpIHsKQEAgLTE0MTEsMjYgKzEwOTUsMjMgQEAgRG93bmxvYWRQcm94
eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKAogI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKG5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0
KHJlcXVlc3QpOwotICAgICAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2ls
bCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KLSAgICAg
ICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3AgbGV2ZWwgZG9jdW1lbnQncyBVUkwuCi0gICAg
ICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewotICAgICAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdl
VVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwo
KSB9OwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMo
aW5pdGlhdGluZ1BhZ2VVUkwpOwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1l
U2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVz
dC51cmwoKSkpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVy
RmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRl
ZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChpbml0aWF0aW5nUGFnZS0+dXNlckFnZW50Rm9yVVJM
KHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHVwZGF0ZWRS
ZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKLSAgICAgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVk
UmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0g
ICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJv
eHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZWRSZXF1
ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3du
bG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dl
c3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5OworICAgIFJl
c291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAvLyBSZXF1ZXN0J3Mg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUg
ZG93bmxvYWQgcmVxdWVzdC4KKyAgICAvLyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBk
b2N1bWVudCdzIFVSTC4KKyAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKKyAgICAgICAgVVJMIGlu
aXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2Fk
U3RhdGUoKS51cmwoKSB9OworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9y
Q29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElz
U2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJl
cXVlc3QudXJsKCkpKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVy
RmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVx
dWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVx
dWVzdC51cmwoKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZp
cnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNT
YW1lU2l0ZShmYWxzZSk7CisgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQorICAgICAgICAgICAgdXBkYXRlZFJl
cXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkp
OwogICAgIH0KKyAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1RvcFNpdGUoZmFsc2UpOworICAgIGRh
dGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpE
b3dubG9hZFJlcXVlc3QoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBkb3dubG9hZFByb3h5LmRvd25s
b2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwg
MCk7CiAKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KQEAgLTE0MzgsMTcgKzExMTksMTIg
QEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKAogRG93bmxvYWRQcm94
eSYgV2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFT
dG9yZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgQVBJOjpEYXRhJiByZXN1
bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgYXV0byYgZG93bmxvYWRQcm94eSA9
IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBSZXNvdXJjZVJlcXVlc3QoKSwgaW5pdGlh
dGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0b3Jl
LnNlc3Npb25JRCgpOwogCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRl
bnNpb25IYW5kbGU7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRX
cml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAobmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQo
KSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5k
bGUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7Ci0gICAgfQotCisgICAgZGF0
YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJl
c3VtZURvd25sb2FkKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgZG93bmxvYWRQcm94eS5kb3dubG9h
ZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlKSwgMCk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CiAKQEAgLTE1MTcsMTEg
KzExOTMsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWZyZXNoUGx1Z2lucygpCiAKICNlbmRp
ZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAotUHJvY2Vzc0lEIFdlYlByb2Nlc3NQ
b29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQotewotICAgIHJldHVybiBtX25ldHdvcmtQ
cm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7Ci19Ci0K
IFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6cHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKQog
ewogICAgIHJldHVybiBtX3ByZXdhcm1lZFByb2Nlc3MgPyBtX3ByZXdhcm1lZFByb2Nlc3MtPnBy
b2Nlc3NJZGVudGlmaWVyKCkgOiAwOwpAQCAtMTU1OCwxNCArMTIyOSwxOCBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGlu
Z3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKTsKICAg
ICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2No
ZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVt
ZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxT
Y2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3Jl
Lm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVy
VVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQ
b2xpY3koY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGlu
Z3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJp
dHlQb2xpY3kodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6Oldl
YlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xp
Y3kodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5
UG9saWN5KHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRl
RGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAg
ICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3ko
dXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERv
bWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiB1cmxTY2hl
bWUpCkBAIC0xNTc4LDE0ICsxMjUzLDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVy
VVJMU2NoZW1lQXMKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2Vz
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1l
KSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFT
dG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3Rv
cmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNj
aGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVS
TFNjaGVtZUFzTm9BY2Nlc3MoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1
cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6
UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVB
c05vQWNjZXNzKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJz
aXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsK
KyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpLCAwKTsKKyAg
ICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3Bs
YXlJc29sYXRlZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MDYsMTAgKzEyODUsOCBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLmFk
ZCh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdpc3RlclNj
aGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAo
YXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9j
ZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5
Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5y
ZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25z
dCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MTgsMTAgKzEyOTUsOCBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMCiAgICAgICAgIHJldHVybjsKIAogICAgIGdsb2Jh
bFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLnJlbW92ZSh1cmxTY2hlbWUp
OwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1lRm9yTGVn
YWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRvIG5ldHdv
cmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQor
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVBy
b3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJM
U2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTY1
NSwxNiArMTMzMCwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKENhY2hl
CiAKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldENhY2hl
TW9kZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNo
ZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vi
c2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkg
eworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAgfSk7CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGlu
ZyhDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB7CiAgICAgdXBkYXRlQmFja0ZvcndhcmRDYWNoZUNh
cGFjaXR5KCk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVs
U3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsKKyAgICBXZWJz
aXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5j
aHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCAwKTsKKyAgICB9KTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91
YmxlIHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE2NzQsMTIgKzEzNTEsNyBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpCiAKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQ
b29sOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFn
ZSwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvKQogewotICAgIHJldHVybiBlbnN1cmVO
ZXR3b3JrUHJvY2VzcygmZGF0YVN0b3JlKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwg
cmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwotfQotCi12b2lkIFdlYlByb2Nl
c3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKLXsKLSAg
ICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dy
b3VuZCk7CisgICAgcmV0dXJuIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURvd25s
b2FkUHJveHkoZGF0YVN0b3JlLCAqdGhpcywgcmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGlu
Z1BhZ2UpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIoSVBD
OjpSZWNlaXZlck5hbWUgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpNZXNzYWdlUmVjZWl2ZXIm
IG1lc3NhZ2VSZWNlaXZlcikKQEAgLTE3NTAsMzAgKzE0MjIsNiBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9OZXR3b3Jr
aW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KQotewotICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpm
b3J3YXJkPFU+KHJlcGx5KSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2Fj
aGVkQ3JlZGVudGlhbHMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkKLXsKLSAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKSwg
MCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkK
LXsKLSAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwotCi0gICAgaWYgKCFtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVy
bWluYXRlKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci19Ci0KIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQogewogICAgIFZl
Y3RvcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzID0gbV9wcm9jZXNzZXM7CkBA
IC0xNzgxLDQwICsxNDI5LDE1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdl
YkNvbnQKICAgICAgICAgcHJvY2Vzcy0+dGVybWluYXRlKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0g
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1t
aW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcoKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0KLQot
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkKLXsKLSAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFBy
b2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2Vy
dmljZVdvcmtlcnMoKQogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBhdXRvIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICB3aGlsZSAobV9zZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzLmNvbXB1dGVTaXplKCkpCi0gICAgICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cy5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKKyAgICB3aGlsZSAoc2VydmljZVdv
cmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoKS5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKICNlbmRpZgogfQogCi12
b2lkIFdlYlByb2Nlc3NQb29sOjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNl
c3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQot
ewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRh
dGVBdXRvbWF0aW9uQ2FwYWJpbGl0aWVzKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoUkVNT1RFX0lO
U1BFQ1RPUikKQEAgLTIwODksMTUgKzE3MTIsMjEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVw
b3J0V2ViQ29udGVudENQVQogI2VuZGlmCiB9CiAKK1dlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94
eT4mIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2Vz
OworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9CisKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0
ZVByb2Nlc3NBc3NlcnRpb25zKCkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnVwZGF0
ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0
ZURhdGFTdG9yZShbXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRh
dGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICB9
KTsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gQ2hlY2sgb24gbmV4dCBydW4g
bG9vcCBzaW5jZSB0aGUgd2ViIHByb2Nlc3MgcHJveHkgdG9rZW5zIGFyZSBwcm9iYWJseSBiZWlu
ZyB1cGRhdGVkLgotICAgIGNhbGxPbk1haW5SdW5Mb29wKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKHRoaXMpXSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VX
b3JrZXJQcm9jZXNzZXMpCisgICAgY2FsbE9uTWFpblJ1bkxvb3AoW10geworICAgICAgICBmb3Ig
KGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQog
ICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclByb2Nl
c3NBc3NlcnRpb24oKTsKICAgICB9KTsKICNlbmRpZgpAQCAtMjEwNyw3ICsxNzM2LDcgQEAgYm9v
bCBXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29ya2VyUGFnZQogewogI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmVmZmljaWVudC4KLSAgICByZXR1
cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtwYWdlSURdKGF1dG8mIHBy
b2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCks
IFtwYWdlSURdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2Vy
dmljZVdvcmtlclBhZ2VQcm94eShwYWdlSUQpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMzI5LDE0
ICsxOTU4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDdXJyZW50TW9kaWZpZQogfQog
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0ZU5hdmlnYXRpb25E
YXRhVHJhbnNmZXI6OkZsYWc+IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIFdlYlBhZ2VQcm94eUlk
ZW50aWZpZXIgd2ViUGFnZVByb3h5SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCkKLXsKLSAg
ICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmV0d29y
a1Byb2Nlc3MtPmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25J
RCwgZnJvbURvbWFpbiwgdG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQ
cm94eUlELCB3ZWJQYWdlSUQpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5z
V2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYm
IGRvbWFpbnMpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpTZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihkb21haW5zKSk7CkBAIC0yMzg3LDI3ICsy
MDA4LDI3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1ZGlibGVNZWRpYUEKIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29s
IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgaWYgKG1fdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KQorICAgIGlmIChzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0VCUFJPQ0VT
U1BPT0xfUkVMRUFTRV9MT0coU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3M6ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0Vf
TE9HX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiAKLSAgICBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwotICAgIHRlcm1pbmF0ZVNl
cnZpY2VXb3JrZXJzKCk7Ci0gICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBzX3Vz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxs
UHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycygpOwogfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogYm9vbCBXZWJQcm9jZXNz
UG9vbDo6aGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25z
dAogewotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10o
YXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoKSwgW10oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNT
ZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQog
CiBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5
Rm9yVGVzdGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yo
c2VydmljZVdvcmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJl
dHVybiBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5n
KCk7CiAgICAgfSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDYgQEAgT0JKQ19DTEFTUyBX
S1ByZWZlcmVuY2VPYnNlcnZlcjsKIAogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBBdXRvbWF0aW9u
Q2xpZW50OwotY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogY2xhc3MgRG93bmxv
YWRDbGllbnQ7CiBjbGFzcyBIVFRQQ29va2llU3RvcmU7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZUNs
aWVudDsKQEAgLTE3Niw3ICsxNzUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIaXN0b3J5Q2xp
ZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiYmKTsK
ICAgICB2b2lkIHNldERvd25sb2FkQ2xpZW50KFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50
PiYmKTsKICAgICB2b2lkIHNldEF1dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6
QXV0b21hdGlvbkNsaWVudD4mJik7Ci0gICAgdm9pZCBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50PiYmKTsKIAogICAgIHZvaWQgc2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVu
dGlmaWVyKGNvbnN0IFN0cmluZyYpOwogICAgIGNvbnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVu
dFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCkgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT5jdXN0
b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKTsgfQpAQCAtMTg3LDE3ICsxODUs
OSBAQCBwdWJsaWM6CiAgICAgLy8gbnVsbCBjaGVja3MgaW4gV2ViUGFnZVByb3h5LgogICAgIFdl
YlByb2Nlc3NQcm94eSogZHVtbXlQcm9jZXNzUHJveHkoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KSBjb25zdCB7IHJldHVybiBtX2R1bW15UHJvY2Vzc1Byb3hpZXMuZ2V0KHNlc3Npb25JRCkuZ2V0
KCk7IH0KIAotICAgIC8vIFdlYlByb2Nlc3Mgb3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3Jp
YXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9kZWwuIFRoZSBjb25uZWN0aW9uIG11c3QgYmUgbm9u
LW51bGwuCi0gICAgSVBDOjpDb25uZWN0aW9uKiBuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24o
KTsKLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzKGNv
bnN0IFQmIG1lc3NhZ2UpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxs
UHJvY2Vzc2VzRm9yU2Vzc2lvbihjb25zdCBUJiBtZXNzYWdlLCBQQUw6OlNlc3Npb25JRCk7CiAK
LSAgICAvLyBTZW5kcyB0aGUgbWVzc2FnZSB0byBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNz
IGFzIGFwcHJvcG9yaWF0ZSBmb3IgY3VycmVudCBwcm9jZXNzIG1vZGVsLgotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpOwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHZvaWQgc2VuZFN5bmNUb05ldHdv
cmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBVJiYgcmVwbHkpOwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHZvaWQgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5
KFQmJiBtZXNzYWdlKTsKLQogICAgIHZvaWQgcHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQ
cm9jZXNzUHJveHkqKTsKIAogICAgIFdlYlByb2Nlc3NDYWNoZSYgd2ViUHJvY2Vzc0NhY2hlKCkg
eyByZXR1cm4gbV93ZWJQcm9jZXNzQ2FjaGUuZ2V0KCk7IH0KQEAgLTIwNSw5ICsxOTUsNiBAQCBw
dWJsaWM6CiAgICAgLy8gRGlzY29ubmVjdCB0aGUgcHJvY2VzcyBmcm9tIHRoZSBjb250ZXh0Lgog
ICAgIHZvaWQgZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKLSAgICBXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmUqIHdlYnNpdGVEYXRhU3RvcmUoKSBjb25zdCB7IHJldHVybiBt
X3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFByaW1hcnlEYXRhU3RvcmUo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsgbV93ZWJzaXRlRGF0YVN0b3Jl
ID0gJmRhdGFTdG9yZTsgfQotCiAgICAgUmVmPFdlYlBhZ2VQcm94eT4gY3JlYXRlV2ViUGFnZShQ
YWdlQ2xpZW50JiwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogCiAgICAgdm9pZCBw
YWdlQmVnaW5Vc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2Vi
c2l0ZURhdGFTdG9yZSYpOwpAQCAtMjU4LDEwICsyNDUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
ZGRTdXBwb3J0ZWRQbHVnaW4oU3RyaW5nJiYgbWF0Y2hpbmdEb21haW4sIFN0cmluZyYmIG5hbWUs
IEhhc2hTZXQ8U3RyaW5nPiYmIG1pbWVUeXBlcywgSGFzaFNldDxTdHJpbmc+IGV4dGVuc2lvbnMp
OwogICAgIHZvaWQgY2xlYXJTdXBwb3J0ZWRQbHVnaW5zKCk7CiAKLSAgICBQcm9jZXNzSUQgbmV0
d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CiAgICAgUHJvY2Vzc0lEIHByZXdhcm1lZFByb2Nlc3NJ
ZGVudGlmaWVyKCk7CiAgICAgdm9pZCBhY3RpdmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JU
ZXN0aW5nKFByb2Nlc3NJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYm
KT4mJik7Ci0gICAgYm9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhj
b25zdCBTdHJpbmcmKTsKIAogICAgIFdlYlBhZ2VHcm91cCYgZGVmYXVsdFBhZ2VHcm91cCgpIHsg
cmV0dXJuIG1fZGVmYXVsdFBhZ2VHcm91cC5nZXQoKTsgfQogCkBAIC0zMDIsOCArMjg3LDYgQEAg
cHVibGljOgogICAgIEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlDbGll
bnQoKSB7IHJldHVybiAqbV9oaXN0b3J5Q2xpZW50OyB9CiAgICAgV2ViQ29udGV4dENsaWVudCYg
Y2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KIAotICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50JiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVy
biAqbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7IH0KLQogICAgIHN0cnVjdCBTdGF0aXN0
aWNzIHsKICAgICAgICAgdW5zaWduZWQgd2tWaWV3Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHdr
UGFnZUNvdW50OwpAQCAtMzE5LDEyICszMDIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKICAgICB2b2lkIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
KCk7CiAKLSAgICB2b2lkIGZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0KICAgICB2b2lkIHNldFNob3VsZE1ha2VOZXh0V2Vi
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRNYWtlTmV4
dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9CiAgICAgYm9vbCBzaG91
bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmc7IH0KLSAgICB2
b2lkIHNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhi
b29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JU
ZXN0aW5nID0gdmFsdWU7IH0KLSAgICBib29sIHNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkTWFrZU5leHROZXR3
b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nOyB9CiAKICAgICB2b2lkIHJlcG9ydFdlYkNv
bnRlbnRDUFVUaW1lKFNlY29uZHMgY3B1VGltZSwgdWludDY0X3QgYWN0aXZpdHlTdGF0ZSk7CiAK
QEAgLTM4MywxOSArMzYyLDEzIEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgLy8gTmV0d29yayBQ
cm9jZXNzIE1hbmFnZW1lbnQKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBlbnN1cmVOZXR3b3Jr
UHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSA9IG51bGxwdHIp
OwotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzKCkgY29uc3QgeyByZXR1
cm4gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKTsgfQogICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFz
aGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKTsKIAotICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6Okdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKLQogICAgIGJvb2wgaXNT
ZXJ2aWNlV29ya2VyUGFnZUlEKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIpIGNvbnN0OwogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLSAgICB2b2lkIGVzdGFibGlzaFdvcmtlckNvbnRleHRDb25u
ZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CisgICAgc3RhdGljIHZvaWQgZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25U
b05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmLCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
ICAgICB2b2lkIHJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKFdlYlByb2Nlc3NQcm94
eSYpOwotICAgIHNpemVfdCBzZXJ2aWNlV29ya2VyUHJveGllc0NvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbXB1dGVTaXplKCk7IH0KLSAgICB2b2lkIHNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihib29sIGFsbG93cykgeyBt
X2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlciA9IGFsbG93czsgfQotICAg
IGJvb2wgYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI7IH0KKyAgICBz
aXplX3Qgc2VydmljZVdvcmtlclByb3hpZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHNlcnZpY2VX
b3JrZXJQcm9jZXNzZXMoKS5jb21wdXRlU2l6ZSgpOyB9CiAgICAgdm9pZCB1cGRhdGVTZXJ2aWNl
V29ya2VyVXNlckFnZW50KGNvbnN0IFN0cmluZyYgdXNlckFnZW50KTsKICAgICBjb25zdCBPcHRp
b25hbDxVc2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyPiYgdXNlckNvbnRlbnRDb250cm9s
bGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkgY29uc3QgeyByZXR1cm4gbV91c2VyQ29u
dGVudENvbnRyb2xsZXJJREZvclNlcnZpY2VXb3JrZXI7IH0KICAgICBib29sIGhhc1NlcnZpY2VX
b3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3Q7CkBAIC00NDksOCArNDIy
LDYgQEAgcHVibGljOgogICAgIGJvb2wgYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gbV9hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHk7IH0KICAgICBi
b29sIHNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSBjb25zdCB7IHJldHVybiBtX3No
b3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb247IH0KIAotICAgIHZvaWQgc3ludGhlc2l6ZUFw
cElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpOwotICAgIAogI2lmIEVOQUJMRShHQU1FUEFE
KQogICAgIHZvaWQgZ2FtZXBhZENvbm5lY3RlZChjb25zdCBVSUdhbWVwYWQmLCBXZWJDb3JlOjpF
dmVudE1ha2VzR2FtZXBhZHNWaXNpYmxlKTsKICAgICB2b2lkIGdhbWVwYWREaXNjb25uZWN0ZWQo
Y29uc3QgVUlHYW1lcGFkJik7CkBAIC00ODgsNyArNDU5LDYgQEAgcHVibGljOgogICAgIHZvaWQg
Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKTsKIAogI2lmIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgdm9pZCBkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0
aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4mIGZyb21Eb21haW4sIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiB0b0Rv
bWFpbiwgT3B0aW9uU2V0PFdlYkNvcmU6OkNyb3NzU2l0ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6
OkZsYWc+LCBXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllcik7
CiAgICAgdm9pZCBzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluPiYmKTsKICAgICB2b2lkIHNlZWRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRm9yVGVzdGluZyhjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgZmlyc3RQYXJ0
eURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIHRoaXJkUGFydHlEb21h
aW4sIGJvb2wgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CiAgICAgdm9pZCBzZW5kUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFJbW1lZGlh
dGVseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwpAQCAtNTE1LDggKzQ4NSw4IEBAIHB1
YmxpYzoKICAgICAKICAgICBQbHVnSW5BdXRvU3RhcnRQcm92aWRlciYgcGx1Z0luQXV0b1N0YXJ0
UHJvdmlkZXIoKSB7IHJldHVybiBtX3BsdWdJbkF1dG9TdGFydFByb3ZpZGVyOyB9CiAKLSAgICB2
b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCk7Ci0gICAgYm9vbCB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV91c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOyB9CisgICAgc3RhdGljIHZvaWQgc2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKKyAgICBzdGF0aWMgYm9vbCB1c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkgeyByZXR1cm4gc191c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzOyB9CiAKICNpZiBFTkFCTEUoQ0ZQUkVGU19ESVJFQ1RfTU9ERSkKICAgICB2b2lk
IG5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZChjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IE9wdGlvbmFsPFN0cmluZz4mIGVuY29kZWRWYWx1ZSk7CkBAIC01Mjgs
OSArNDk4LDE1IEBAIHB1YmxpYzoKICAgICBpbnQzMl90IHVzZXJJZCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlcklkOyB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIE9TT2JqZWN0
UHRyPHhwY19vYmplY3RfdD4geHBjRW5kcG9pbnRNZXNzYWdlKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0cjx4cGNf
b2JqZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSk7CisgICAgc3RhdGljIHZvaWQgcGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsK
KyAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhh
bmRsZXJzKCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHN0YXRpYyBTdHJpbmcg
Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgcGFyZW50QnVuZGxl
RGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5
KCk7CisgICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGlyZWN0b3J5KCk7CisgICAg
c3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsKICNlbmRpZgogCiBw
cml2YXRlOgpAQCAtNTQ2LDggKzUyMiw2IEBAIHByaXZhdGU6CiAgICAgV2ViUHJvY2Vzc1Byb3h5
JiBjcmVhdGVOZXdXZWJQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9jZXNzUHJveHk6
OklzUHJld2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8pOwogICAgIHZv
aWQgaW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiwgV2Vic2l0ZURhdGFT
dG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6Oklz
UHJld2FybWVkOjpObyk7CiAKLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0KICAgICB2b2lkIGhhbmRs
ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29u
c3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5KTsKICAgICB2b2lkIGhhbmRsZVN5bmNocm9ub3VzTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBV
c2VyRGF0YSYgbWVzc2FnZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlckRhdGEmJik+
JiYpOwogCkBAIC01NzEsMTQgKzU0NSw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIHVzZXNTaW5n
bGVXZWJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT51c2VzU2luZ2xl
V2ViUHJvY2VzcygpOyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyBT
dHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgcGFyZW50
QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5nQ2FjaGVzRGly
ZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGlyZWN0b3J5KCk7
Ci0gICAgc3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsKLSNlbmRp
ZgotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCByZWdpc3Rlck5vdGlmaWNhdGlvbk9i
c2VydmVycygpOwogICAgIHZvaWQgdW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpOwpA
QCAtNjIwLDkgKzU4Niw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwg
V2Vha1B0cjxXZWJQcm9jZXNzUHJveHk+PiBtX2R1bW15UHJvY2Vzc1Byb3hpZXM7IC8vIExpZ2h0
d2VpZ2h0IFdlYlByb2Nlc3NQcm94eSBvYmplY3RzIHdpdGhvdXQgYmFja2luZyBwcm9jZXNzLgog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQ
cm94eT4gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzOworICAgIHN0YXRpYyBXZWFrSGFzaFNldDxX
ZWJQcm9jZXNzUHJveHk+JiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCk7CiAgICAgYm9vbCBtX3dh
aXRpbmdGb3JXb3JrZXJDb250ZXh0UHJvY2Vzc0Nvbm5lY3Rpb24geyBmYWxzZSB9OwotICAgIGJv
b2wgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIgeyBmYWxzZSB9Owog
ICAgIFN0cmluZyBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQ7CiAgICAgT3B0aW9uYWw8V2ViUHJl
ZmVyZW5jZXNTdG9yZT4gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXM7CiAgICAgT3B0aW9uYWw8
VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllcj4gbV91c2VyQ29udGVudENvbnRyb2xsZXJJ
REZvclNlcnZpY2VXb3JrZXI7CkBAIC02MzgsNyArNjAzLDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiBtX2F1dG9tYXRpb25DbGllbnQ7CiAg
ICAgVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+IG1fZG93bmxvYWRDbGllbnQ7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+IG1faGlzdG9y
eUNsaWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogCiAgICAgUmVmUHRyPFdlYkF1
dG9tYXRpb25TZXNzaW9uPiBtX2F1dG9tYXRpb25TZXNzaW9uOwogCkBAIC02NzAsOCArNjM0LDYg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQgeyBmYWxzZSB9Owog
ICAgIGRvdWJsZSBtX21lbW9yeVNhbXBsZXJJbnRlcnZhbCB7IDE0MDAuMCB9OwogCi0gICAgUmVm
UHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRlRGF0YVN0b3JlOwotCiAgICAg
dHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIqLCBSZWZQdHI8V2ViQ29udGV4dFN1cHBsZW1lbnQ+
LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4gV2ViQ29udGV4dFN1cHBsZW1lbnRNYXA7CiAgICAgV2Vi
Q29udGV4dFN1cHBsZW1lbnRNYXAgbV9zdXBwbGVtZW50czsKIApAQCAtNzAzLDggKzY2NSw2IEBA
IHByaXZhdGU6CiAKICAgICBib29sIG1fcHJvY2Vzc1Rlcm1pbmF0aW9uRW5hYmxlZCB7IHRydWUg
fTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQ
cm9jZXNzOwotCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPERpY3Rpb25hcnlDYWxsYmFj
az4+IG1fZGljdGlvbmFyeUNhbGxiYWNrczsKIAogICAgIGJvb2wgbV9tZW1vcnlDYWNoZURpc2Fi
bGVkIHsgZmFsc2UgfTsKQEAgLTcxMyw3ICs2NzMsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9h
bHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHk7CiAgICAgYm9vbCBtX3Nob3VsZFRha2VVSUJh
Y2tncm91bmRBc3NlcnRpb247CiAgICAgYm9vbCBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2hvdWxkTWFrZU5leHRO
ZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nIHsgZmFsc2UgfTsKICAgICBib29sIG1f
dGNjUHJlZmVyZW5jZUVuYWJsZWQgeyBmYWxzZSB9OwogCiAgICAgVXNlck9ic2VydmFibGVQYWdl
Q291bnRlciBtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXI7CkBAIC04MDUsMzIgKzc2NCwxNCBA
QCBwcml2YXRlOgogI2Vsc2UKICAgICBib29sIG1faXNEZWxheWVkV2ViUHJvY2Vzc0xhdW5jaERp
c2FibGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgbV91c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzIHsgZmFsc2UgfTsKKyAgICBzdGF0aWMgYm9vbCBzX3VzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3M7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQogICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IG1fZG9tYWluc1dpdGhV
c2VySW50ZXJhY3Rpb247CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIE9TT2Jq
ZWN0UHRyPHhwY19vYmplY3RfdD4gbV9lbmRwb2ludE1lc3NhZ2U7Ci0jZW5kaWYKIH07CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5n
UHJvY2VzcyhUJiYgbWVzc2FnZSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25l
dHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1
bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdl
KSwgMCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZW5kVG9BbGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSkKIHsKICAgICBzaXplX3QgcHJvY2Vz
c0NvdW50ID0gbV9wcm9jZXNzZXMuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgs
NiArMjY4LDkgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnNldFdlYnNpdGVEYXRhU3Rvcgogewog
ICAgIEFTU0VSVCghbV93ZWJzaXRlRGF0YVN0b3JlKTsKICAgICBtX3dlYnNpdGVEYXRhU3RvcmUg
PSAmZGF0YVN0b3JlOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGRhdGFTdG9yZS5zZW5kTmV0
d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcygqdGhpcyk7CisjZW5kaWYKICAgICB1
cGRhdGVSZWdpc3RyYXRpb25XaXRoRGF0YVN0b3JlKCk7CiAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UHJvY2Vzczo6U2V0V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMocHJvY2Vzc1Bvb2woKS53ZWJQ
cm9jZXNzRGF0YVN0b3JlUGFyYW1ldGVycygqdGhpcywgZGF0YVN0b3JlKSksIDApOwogfQpAQCAt
NzM4LDcgKzc0MSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXRQbHVnaW5Qcm9jZXNzQ28K
IAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihNZXNz
YWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5
ZWRSZXBseSYmIHJlcGx5KQogewotICAgIG1fcHJvY2Vzc1Bvb2wtPmdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUo
KS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKnRoaXMsIFdURk1vdmUocmVwbHkpKTsKIH0K
IAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKQEAgLTk1NSw5ICs5NTgsOCBAQCB2b2lkIFdlYlBy
b2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nCiAgICAgfQogCiAjaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgYXV0byBlbmRwb2ludE1lc3NhZ2UgPSBwcm9jZXNzUG9vbCgpLnhwY0VuZHBvaW50
TWVzc2FnZSgpOwotICAgIGlmIChlbmRwb2ludE1lc3NhZ2UpCi0gICAgICAgIHhwY19jb25uZWN0
aW9uX3NlbmRfbWVzc2FnZShjb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwgZW5kcG9pbnRN
ZXNzYWdlLmdldCgpKTsKKyAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQorICAgICAgICBtX3dl
YnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNz
KCp0aGlzKTsKICNlbmRpZgogCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fd2ViQ29ubmVjdGlvbik7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tp
ZVN0b3JlLmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDYg
QEAgbmFtZXNwYWNlIEFQSSB7CiBIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0Rh
dGFTdG9yZSh3ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUt
PnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3Jl
Ojp+SFRUUENvb2tpZVN0b3JlKCkKQEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+
SFRUUENvb2tpZVN0b3JlKCkKICAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAg
ICBBU1NFUlQoIW1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9j
b29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vz
c1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJB
cHBCb3VuZENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC04MSwzMyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZp
bHRlckFwcEJvdW5kQ29vawogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0g
ICAgICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGFsbENvb2tpZXM7Ci0gICAgICAgIGlmICht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSkKLSAgICAgICAgICAgIGFsbENvb2tpZXMgPSBnZXRBbGxEZWZhdWx0VUlQcm9j
ZXNzQ29va2llU3RvcmVDb29raWVzKCk7Ci0gICAgICAgIGFsbENvb2tpZXMuYXBwZW5kVmVjdG9y
KG1fb3duaW5nRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLQotICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgYWxsQ29va2ll
c10gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoYWxsQ29v
a2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICB9KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmdldEFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwb29sID0gV1RGTW92ZShwb29sKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBjb29raWVNYW5h
Z2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigp
OworICAgIGNvb2tpZU1hbmFnZXIuZ2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5k
Q29va2llcyhjb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9
CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjo6VVJMJiYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkKLSAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0KLSAgICBhdXRvKiBjb29raWVN
YW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2Vy
ID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwor
ICAgIGNvb2tpZU1hbmFnZXIuZ2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIHVybCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiYgY29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2ll
cyhjb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC0x
MTUsNzggKzk0LDI5IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjoK
IHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgYXBwQm91bmRDb29raWVzKSBtdXRhYmxlIHsKLSAg
ICAgICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tp
ZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgICAgIGlmICghcG9vbCkgewotICAgICAgICAgICAg
Zm9yIChhdXRvJiBjb29raWUgOiBhcHBCb3VuZENvb2tpZXMpIHsKLSAgICAgICAgICAgICAgICAv
LyBGSVhNRTogcGVuZGluZ0Nvb2tpZXMgdXNlZCBmb3IgZGVmYXVsdFNlc3Npb24gYmVjYXVzZSBz
ZXNzaW9uIGNvb2tpZXMgY2Fubm90IGJlIHByb3BhZ2F0ZWQgdG8gTmV0d29yayBQcm9jZXNzIHdp
dGggdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuCi0gICAgICAgICAgICAgICAgaWYg
KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgICAgICAgICAgc2V0
Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5hZGRQZW5k
aW5nQ29va2llKGNvb2tpZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9v
bC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAg
Y29va2llTWFuYWdlci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IGFwcEJvdW5kQ29va2llcywgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOworICAgICAgICBhdXRvJiBjb29raWVN
YW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdl
cigpOworICAgICAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCBhcHBCb3VuZENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZShjb25z
dCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+
cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkg
ewotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAg
ICAgZGVsZXRlQ29va2llRnJvbURlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+cmVtb3ZlUGVuZGlu
Z0Nvb2tpZShjb29raWUpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7
Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgW3Bv
b2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAg
IH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29y
a1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29r
aWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tp
ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9y
YWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5n
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAgZGVsZXRl
Q29va2llc0luRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVu
dDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5k
ZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgYXV0
byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNv
b2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUFsbENvb2tpZXMobV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKICAgICAvLyBGSVhNRTogVGhlIENvbXBsZXRpb25I
YW5kbGVyIHNob3VsZCBiZSBwYXNzZWQgdG8gV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVB
bGxDb29raWVzLgogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9v
bCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRp
b25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBzZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUocG9saWN5KTsKLSAgICAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5z
dXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1h
bmFnZXItPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9
KTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQ
cm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1
c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTIyNywyMSArMTU3LDcgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2
ZXIoTwogCiAgICAgbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA9IG1ha2VVbmlxdWU8QVBJ
V2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI+KCp0aGlzKTsKIAotICAgIGF1dG8qIHBvb2wg
PSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9u
cygpOwotCi0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIEFTU0VSVCghbV9vYnNlcnZpbmdVSVBy
b2Nlc3NDb29raWVzKTsKLQotICAgICAgICAvLyBMaXN0ZW4gZm9yIGNvb2tpZSBub3RpZmljYXRp
b25zIGluIHRoZSBVSVByb2Nlc3MgaW4gdGhlIG1lYW50aW1lLgotICAgICAgICBzdGFydE9ic2Vy
dmluZ0NoYW5nZXNUb0RlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShbdGhpc10gKCkgewotICAg
ICAgICAgICAgY29va2llc0RpZENoYW5nZSgpOwotICAgICAgICB9KTsKLQotICAgICAgICBtX29i
c2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eSA9ICZtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5h
Z2VyKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZl
cihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9i
c2VydmVyKTsKIH0KIApAQCAtMjc2LDQ2ICsxOTIsMTAgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6
OmNvb2tpZXNEaWRDaGFuZ2UoKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJE
ZXN0cm95ZWQoKQogewogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnVucmVnaXN0
ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFn
ZXJQcm94eU9ic2VydmVyKTsKLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbnVs
bHB0cjsKLQotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xG
b3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gcG9vbC0+c3VwcGxl
bWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNv
b2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rl
ck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdl
clByb3h5T2JzZXJ2ZXIpOwogfQogCi12b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JO
ZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIEFTU0VSVCghbV9wcm9jZXNzUG9v
bENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlv
bkxpc3RlbmVySWRlbnRpZmllciA9IFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclByb2Nlc3NQb29s
Q3JlYXRpb25MaXN0ZW5lcihbdGhpc10oV2ViUHJvY2Vzc1Bvb2wmIG5ld1Byb2Nlc3NQb29sKSB7
Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPmlzQXNzb2NpYXRlZFByb2Nlc3NQb29s
KG5ld1Byb2Nlc3NQb29sKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBOb3cg
dGhhdCBhbiBhc3NvY2lhdGVkIHByb2Nlc3MgcG9vbCBleGlzdHMsIHdlIG5lZWQgdG8gZmx1c2gg
dGhlIFVJIHByb2Nlc3MgY29va2llIHN0b3JlCi0gICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBhbnkg
Y2hhbmdlcyBhcmUgcmVmbGVjdGVkIHdpdGhpbiB0aGUgbmV3IHByb2Nlc3MgcG9vbC4KLSAgICAg
ICAgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgbmV3UHJvY2Vz
c1Bvb2wuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQotICAgICAgICBpZiAobV9jb29raWVNYW5h
Z2VyUHJveHlPYnNlcnZlcikgewotICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQ
cm94eSA9IG5ld1Byb2Nlc3NQb29sLnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7Ci0gICAgICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdp
c3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFu
YWdlclByb3h5T2JzZXJ2ZXIpOwotICAgICAgICB9Ci0gICAgICAgIHVucmVnaXN0ZXJGb3JOZXdQ
cm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBIVFRQQ29va2ll
U3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAg
IGlmIChtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpCi0gICAgICAgIFdl
YlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKG1fcHJv
Y2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29s
Q3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSAwOwotfQotCiAjaWYgIVBMQVRGT1JNKENPQ09B
KQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
KCkgeyB9CiBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBIVFRQQ29va2llU3RvcmU6OmdldEFsbERl
ZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKSB7IHJldHVybiB7IH07IH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgJ
KHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQ
Q29va2llU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtODMsOSArODMsNiBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmKTsK
IAotICAgIHZvaWQgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAg
ICB2b2lkIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLQogICAg
IHZvaWQgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKICAgICBzdGF0aWMgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29v
a2llcygpOwogICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZUluRGVmYXVsdFVJUHJvY2Vzc0Nvb2tp
ZVN0b3JlKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MTEsMTEgKzQxMSw2IEBAIHZvaWQgV0tDb250ZXh0UHJlY29ubmVjdFRvU2VydmVyKFdLQ29udGUK
IHsKIH0KIAotV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0
Ojp0b0ltcGwoY29udGV4dFJlZiktPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCkpOwotfQotCiBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0
ZURhdGFTdG9yZShXS0NvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdLV2Vic2l0ZURhdGFTdG9y
ZUdldERlZmF1bHREYXRhU3RvcmUoKTsKQEAgLTUyNywxMyArNTIyLDYgQEAgdm9pZCBXS0NvbnRl
eHRTZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlYwogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRS
ZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChlbmFibGUpOwog
fQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdv
cmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgYWxsb3dzKQotewotI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+c2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0K
LQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNo
ZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEko
JldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMo
KS5sZWFrUmVmKCkpOwpAQCAtNTc1LDIxICs1NjMsMTEgQEAgdm9pZCBXS0NvbnRleHRTZXRGb250
QWxsb3dMaXN0KFdLQ29udGV4dAogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRG
b250QWxsb3dMaXN0KFdlYktpdDo6dG9JbXBsKGFycmF5UmVmKSk7CiB9CiAKLXZvaWQgV0tDb250
ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAg
V2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0K
IHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmIGNvbnRl
eHQpCiB7CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZVNlcnZpY2VXb3Jr
ZXJzKCk7CiB9CiAKLVByb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9JbXBs
KGNvbnRleHRSZWYpLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKLX0KLQogdm9pZCBXS0Nv
bnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4oV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5n
UmVmIGRvbWFpblJlZiwgV0tTdHJpbmdSZWYgbmFtZVJlZiwgV0tBcnJheVJlZiBtaW1lVHlwZXNS
ZWYsIFdLQXJyYXlSZWYgZXh0ZW5zaW9uc1JlZikKIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKQEAgLTYxOSwxMiArNTk3LDExIEBAIHZvaWQgV0tDb250ZXh0Q2xlYXJDdXJyZW50
TW9kaWZpZXJTdGF0ZUYKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+Y2xlYXJDdXJy
ZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBib29s
IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCit2b2lkIFdLQ29udGV4dFNldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoV0tDb250ZXh0UmVmLCBib29sIHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZikt
PnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2Vzcyk7CisgICAgV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIH0K
IAotdm9pZCBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYg
Y29udGV4dFJlZiwgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3RvcmUpCit2b2lk
IFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiwgV0tXZWJz
aXRlRGF0YVN0b3JlUmVmKQogewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRQ
cmltYXJ5RGF0YVN0b3JlKCpXZWJLaXQ6OnRvSW1wbCh3ZWJzaXRlRGF0YVN0b3JlKSk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaAkocmV2aXNpb24g
MjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNiBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRT
dG9wTWVtb3J5U2FtcGxlCiBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4
dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJF
Q0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0
b3JlKTsKIAogV0tfRVhQT1JUIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0
R2V0QXBwbGljYXRpb25DYWNoZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJ
X0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0
RGF0YVN0b3JlKTsKLVdLX0VYUE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29v
a2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdL
X0VYUE9SVCBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1h
bmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVm
IFdLQ29udGV4dEdldEljb25EYXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBP
UlQgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFn
ZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9S
RVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgJ
KHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29u
dGV4dFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtODMsMTEgKzgzLDggQEAgV0tfRVhQT1JU
IHZvaWQgV0tDb250ZXh0V2FybUluaXRpYWxQcm9jZQogLy8gQXQgc29tZSBwb2ludCBpdCBzaG91
bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJv
Y2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRUZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250
ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmKTsKIAotV0tfRVhQT1JUIHZv
aWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVz
dGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0eXBlZGVmIHZvaWQgKCpXS0NvbnRleHRJbnZh
bGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSk7CiBXS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKFdLQ29udGV4dEludmFsaWRN
ZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VGdW5jdGlvbik7CiAgICAgCkBAIC05Nyw4ICs5
NCw2IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEZvbnRBbGxvd0xpc3QKIAogV0tfRVhQ
T1JUIHZvaWQgV0tDb250ZXh0UHJlY29ubmVjdFRvU2VydmVyKFdLQ29udGV4dFJlZiBjb250ZXh0
LCBXS1VSTFJlZiBzZXJ2ZXJVUkwpIFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiAKLVdLX0VYUE9SVCBX
S1Byb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tDb250ZXh0
UmVmIGNvbnRleHQpOwotCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVn
aW4oV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLU3RyaW5nUmVmIGRvbWFpbiwgV0tTdHJpbmdSZWYg
bmFtZSwgV0tBcnJheVJlZiBtaW1lVHlwZXMsIFdLQXJyYXlSZWYgZXh0ZW5zaW9ucyk7CiBXS19F
WFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhclN1cHBvcnRlZFBsdWdpbnMoV0tDb250ZXh0UmVmIGNv
bnRleHQpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJ
KHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCw2ICszOTgsMTEgQEAgdWludDY0X3QgV0tQYWdl
R2V0UmVuZGVyVHJlZVNpemUoV0tQYWdlUgogICAgIHJldHVybiB0b0ltcGwocGFnZSktPnJlbmRl
clRyZWVTaXplKCk7CiB9CiAKK1dLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1BhZ2VHZXRXZWJzaXRl
RGF0YVN0b3JlKFdLUGFnZVJlZiBwYWdlKQoreworICAgIHJldHVybiB0b0FQSSgmdG9JbXBsKHBh
Z2UpLT53ZWJzaXRlRGF0YVN0b3JlKCkpOworfQorCiBXS0luc3BlY3RvclJlZiBXS1BhZ2VHZXRJ
bnNwZWN0b3IoV0tQYWdlUmVmIHBhZ2VSZWYpCiB7CiAgICAgcmV0dXJuIHRvQVBJKHRvSW1wbChw
YWdlUmVmKS0+aW5zcGVjdG9yKCkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tQYWdlLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDggQEAgV0tfRVhQT1JU
IGRvdWJsZSBXS1BhZ2VHZXRFc3RpbWF0ZWRQcm9ncgogCiBXS19FWFBPUlQgdWludDY0X3QgV0tQ
YWdlR2V0UmVuZGVyVHJlZVNpemUoV0tQYWdlUmVmIHBhZ2UpOwogCitXS19FWFBPUlQgV0tXZWJz
aXRlRGF0YVN0b3JlUmVmIFdLUGFnZUdldFdlYnNpdGVEYXRhU3RvcmUoV0tQYWdlUmVmIHBhZ2Up
OworCiBXS19FWFBPUlQgV0tJbnNwZWN0b3JSZWYgV0tQYWdlR2V0SW5zcGVjdG9yKFdLUGFnZVJl
ZiBwYWdlKTsKIAogV0tfRVhQT1JUIFdLU3RyaW5nUmVmIFdLUGFnZUNvcHlVc2VyQWdlbnQoV0tQ
YWdlUmVmIHBhZ2UpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJBUElBcnJheS5oIgog
I2luY2x1ZGUgIkFQSUhUVFBDb29raWVTdG9yZS5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNz
UHJveHkuaCIKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNs
dWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0RpY3Rpb25hcnkuaCIKQEAgLTY5LDYgKzcw
LDE2IEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1dlYnNpdGVEYXRhU3RvcmUKICAgICByZXR1
cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoKldlYktp
dDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLCBzZXNzaW9uSUQpLmxlYWtSZWYoKSk7CiB9CiAKK3Zv
aWQgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0
YVN0b3JlUmVmIGRhdGFTdG9yZSkKK3sKKyAgICBXZWJLaXQ6OnRvSW1wbChkYXRhU3RvcmUpLT50
ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworfQorCitXS1Byb2Nlc3NJRCBXS1dlYnNpdGVEYXRh
U3RvcmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRh
dGFTdG9yZSkKK3sKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoZGF0YVN0b3JlKS0+bmV0d29y
a1Byb2Nlc3MoKS5wcm9jZXNzSWRlbnRpZmllcigpOworfQorCiB2b2lkIFdLV2Vic2l0ZURhdGFT
dG9yZVJlbW92ZUlUUERhdGFGb3JEb21haW4oV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9y
ZVJlZiwgV0tTdHJpbmdSZWYgaG9zdCwgdm9pZCogY29udGV4dCwgV0tXZWJzaXRlRGF0YVN0b3Jl
UmVtb3ZlSVRQRGF0YUZvckRvbWFpbkZ1bmN0aW9uIGNhbGxiYWNrKQogewogI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAkocmV2aXNpb24gMjY3NTM2
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVm
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDEzIEBACiAjaW5jbHVkZSA8V2ViS2l0L1dL
QmFzZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS0RlcHJlY2F0ZWQuaD4KIAorI2lmIGRlZmluZWQo
V0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyKQordHlwZWRlZiBpbnQgV0tQcm9jZXNzSUQ7CisjZWxz
ZQorI2luY2x1ZGUgPHVuaXN0ZC5oPgordHlwZWRlZiBwaWRfdCBXS1Byb2Nlc3NJRDsKKyNlbmRp
ZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCkBAIC01MCw2ICs1
NywxMSBAQCBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRBbGxvCiAKIFdLX0VY
UE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tXZWJz
aXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZik7CiAKK1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0
ZURhdGFTdG9yZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRh
dGFTdG9yZSk7CitXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3
b3JrUHJvY2VzcyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKKworV0tfRVhQT1JU
IFdLUHJvY2Vzc0lEIFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmll
cihXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKKwogV0tfRVhQT1JUIGJvb2wgV0tX
ZWJzaXRlRGF0YVN0b3JlR2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJzaXRl
RGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZik7CiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRh
U3RvcmVTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChXS1dlYnNpdGVEYXRhU3RvcmVS
ZWYgZGF0YVN0b3JlUmVmLCBib29sIGVuYWJsZSk7CiB0eXBlZGVmIHZvaWQgKCpXS1dlYnNpdGVE
YXRhU3RvcmVTdGF0aXN0aWNzRXBoZW1lcmFsRnVuY3Rpb24pKGJvb2wgaXNFcGhlbWVyYWwsIHZv
aWQqIGZ1bmN0aW9uQ29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTQwNiwyOCArNDA2LDYgQEAgLSAodm9pZClfY2xlYXJTdXBwb3J0ZWRQbHVnaW5z
CiAgICAgX3Byb2Nlc3NQb29sLT5jbGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIH0KIAotLSAodm9p
ZClfdGVybWluYXRlTmV0d29ya1Byb2Nlc3MKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0KLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxT
dXNwZW5kSW1taW5lbnRseQotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOwotfQotCi0tICh2b2lkKV9zZW5kTmV0
d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5k
bGVyCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNw
ZW5kRm9yVGVzdGluZyhbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlv
bkhhbmRsZXIpXSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7Ci19Ci0K
LS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQotewotICAgIF9wcm9jZXNzUG9v
bC0+c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7Ci19Ci0KIC0gKHZvaWQpX3Rlcm1pbmF0
ZVNlcnZpY2VXb3JrZXJzCiB7CiAgICAgX3Byb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycygpOwpAQCAtNDM1LDEyICs0MTMsNyBAQCAtICh2b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycwogCiAtICh2b2lkKV9zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOihCT09M
KXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MKIHsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNl
dFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyk7Ci19Ci0KLS0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIKLXsKLSAg
ICByZXR1cm4gX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKKyAgICBX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCiAtIChwaWRfdClfcHJld2Fy
bWVkUHJvY2Vzc0lkZW50aWZpZXIKQEAgLTQ2NywxMSArNDQwLDYgQEAgLSAodm9pZClfbWFrZU5l
eHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvcgogICAgIF9wcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFr
ZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcodHJ1ZSk7CiB9CiAKLS0gKHZvaWQp
X21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZwotewotICAgIF9wcm9j
ZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nKHRydWUpOwotfQotCiAtIChCT09MKV9oYXNQcmV3YXJtZWRXZWJQcm9jZXNzCiB7CiAgICAg
Zm9yIChhdXRvJiBwcm9jZXNzIDogX3Byb2Nlc3NQb29sLT5wcm9jZXNzZXMoKSkgewpAQCAtNTYw
LDE4ICs1MjgsNiBAQCAtICh2b2lkKV9zZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hCiAg
ICAgX3Byb2Nlc3NQb29sLT5zZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZChlbmFi
bGVkKTsKIH0KIAotLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNr
Z3JvdW5kCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJh
Y2tncm91bmQpOwotfQotCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNl
cnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzCi17Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQot
ICAgIF9wcm9jZXNzUG9vbC0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAtIChp
ZCA8X1dLR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRlcj4pX2NvcmVMb2NhdGlvblByb3Zp
ZGVyCiB7CkBAIC02MDQsMTEgKzU2MCw2IEBAIC0gKHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2lu
c0luV2ViUHJvY2UKICAgICB9KTsKIH0KIAotLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQKLXsKLSAgICByZXR1cm4g
X3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhlbnRp
dGxlbWVudCk7Ci19Ci0KIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90
ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVjdGlvblNwYWNlCiB7CiAg
ICAgX3Byb2Nlc3NQb29sLT5jbGVhclBlcm1hbmVudENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNw
YWNlKFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZShwcm90ZWN0aW9uU3BhY2UpKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQ
b29sUHJpdmF0ZS5oCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtODcs
MTQgKzg3LDkgQEAKIC0gKF9XS0Rvd25sb2FkICopX3Jlc3VtZURvd25sb2FkRnJvbURhdGE6KE5T
RGF0YSAqKXJlc3VtZURhdGEgd2Vic2l0ZURhdGFTdG9yZTooV0tXZWJzaXRlRGF0YVN0b3JlICop
ZGF0YVN0b3JlICBwYXRoOihOU1N0cmluZyAqKXBhdGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dl
YlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4gU2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoaWxl
IG5vIHdlYiBjb250ZW50IHByb2Nlc3NlcyBhcmUgcnVubmluZy4KLS0gKHZvaWQpX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkp
OwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwot
LSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9pZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4wKSk7CiAKIC8vIFRlc3Qgb25s
eS4KLS0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMyksIGlvcygxMS4wKSk7CiAtIChwaWRfdClfcHJld2FybWVkUHJvY2Vzc0lkZW50
aWZpZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIC8vIFRl
c3Qgb25seS4KQEAgLTEwNiw3ICsxMDEsNiBAQAogLSAoc2l6ZV90KV9zZXJ2aWNlV29ya2VyUHJv
Y2Vzc0NvdW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogLSAo
dm9pZClfc3luY05ldHdvcmtQcm9jZXNzQ29va2llcyBXS19BUElfREVQUkVDQVRFRF9XSVRIX1JF
UExBQ0VNRU5UKCJXS0hUVFBDb29raWVTdG9yZS5fZmx1c2hDb29raWVzVG9EaXNrV2l0aENvbXBs
ZXRpb25IYW5kbGVyOiIsIG1hY29zKDEwLjEzLCBXS19NQUNfVEJBKSwgaW9zKDExLjAsIFdLX0lP
U19UQkEpKTsKIC0gKHZvaWQpX21ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwotLSAodm9pZClfbWFr
ZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogLSAoTlNVSW50ZWdlcilfbWF4aW11bVN1c3BlbmRl
ZFBhZ2VDb3VudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwog
LSAoTlNVSW50ZWdlcilfcHJvY2Vzc0NhY2hlQ2FwYWNpdHkgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKE5TVUludGVnZXIpX3Byb2Nlc3NDYWNoZVNpemUg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CkBAIC0xMjIsMTMgKzEx
NiwxMCBAQAogLSAodm9pZClfcHJlY29ubmVjdFRvU2VydmVyOihOU1VSTCAqKXNlcnZlclVSTCBX
S19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKCJXS1dlYlZpZXcuX3ByZWNvbm5lY3RU
b1NlcnZlciIsIG1hY29zKDEwLjEzLjQsIFdLX01BQ19UQkEpLCBpb3MoMTEuMywgV0tfSU9TX1RC
QSkpOwogCiAvLyBUZXN0IG9ubHkuCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTMuNCksIGlvcygxMS4zKSk7CiAtICh2b2lkKV9nZXRBY3RpdmVQYWdlc09yaWdpbnNJbldlYlBy
b2Nlc3NGb3JUZXN0aW5nOihwaWRfdClwaWQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNB
cnJheTxOU1N0cmluZyAqPiAqKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwotLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50Q3Jl
ZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVj
dGlvblNwYWNlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogCiBA
cHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0Nvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdF
bmFibGVkLCBzZXR0ZXI9X3NldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkOikgQk9P
TCBfY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQgV0tfQVBJX0RFUFJFQ0FURUQoIlBh
cnRpdGlvbmVkIGNvb2tpZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQiLCBtYWNvcygxMC4xMi4z
LCAxMC4xNC40KSwgaW9zKDEwLjMsIDEyLjIpKTsKLS0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwg
aW9zKDEzLjApKTsKIAogLy8gVGVzdCBvbmx5LgogLSAodm9pZClfc2VlZFJlc291cmNlTG9hZFN0
YXRpc3RpY3NGb3JUZXN0aW5nV2l0aEZpcnN0UGFydHk6KE5TVVJMICopZmlyc3RQYXJ0eVVSTCB0
aGlyZFBhcnR5OihOU1VSTCAqKXRoaXJkUGFydHlVUkwgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRp
b246KEJPT0wpc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24gY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0JKHJldmlzaW9u
IDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVE
YXRhU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTYxNyw2ICs2MTcsMTEgQEAgLSAodm9pZClf
cmVuYW1lT3JpZ2luOihOU1VSTCAqKW9sZE5hbWUgdAogICAgIH0pOwogfQogCistIChCT09MKV9u
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxl
bWVudAoreworICAgIHJldHVybiBfd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcoZW50aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0
ZURhdGFTdG9yZURlbGVnYXRlPilfZGVsZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdl
dCgpLmdldCgpOwpAQCAtNjY4LDQgKzY3Myw0MiBAQCAtICh2b2lkKV9hcHBCb3VuZFNjaGVtZXM6
KHZvaWQgKF4pKE5TQXJyCiAjZW5kaWYKIH0KIAorLSAodm9pZClfdGVybWluYXRlTmV0d29ya1By
b2Nlc3MKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3Mo
KTsKK30KKworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9p
ZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5z
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhbY29tcGxldGlvbkhh
bmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseQoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7CisKK30KKworLSAo
dm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lCit7CisgICAgX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOworfQorCistICh2b2lkKV9zeW50aGVz
aXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQKK3sKKyAgICBfd2Vic2l0ZURhdGFT
dG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91
bmQpOworfQorCistIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCit7CisgICAgcmV0
dXJuIF93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnByb2Nlc3NJZGVudGlmaWVy
KCk7Cit9CisKKysgKHZvaWQpX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZworeworICAgIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bWFrZU5leHROZXR3b3JrUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCk7Cit9CisKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFT
dG9yZVByaXZhdGUuaAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtODUsOSArODUsMTkgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dlYnNp
dAogCiAtICh2b2lkKV9yZW5hbWVPcmlnaW46KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKilu
ZXdOYW1lIGZvckRhdGFPZlR5cGVzOihOU1NldDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJP
T0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVu
dGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CisKIEBwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dl
YnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2RlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTUpLCBpb3MoMTMuMCkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5
KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0g
KHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQ
cmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3Jr
UHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3Mo
V0tfSU9TX1RCQSkpOworLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCli
YWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CistIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisrICh2b2lkKV9tYWtlTmV4
dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwogQGVuZAogCiBOU19BU1NVTUVfTk9O
TlVMTF9FTkQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIldlYktpdENvb2tpZU1hbmFnZXIuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJv
eHkuaCIKICNpbmNsdWRlICJTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlLmgiCiAjaW5j
bHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFu
YWdlclByaXZhdGUuaCIKQEAgLTU2LDYgKzU3LDEyIEBAIGVudW0gewogfTsKIAogc3RydWN0IF9X
ZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBj
b29raWVNYW5hZ2VyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChkYXRhTWFuYWdlcik7
CisgICAgICAgIHJldHVybiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoZGF0
YU1hbmFnZXIpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIH0KKwogICAg
IFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
ZGF0YU1hbmFnZXIpOwpAQCAtNjQsOCArNzEsNyBAQCBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFn
ZXJQcml2YXRlIHsKIAogICAgIH5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUoKQogICAgIHsK
LSAgICAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldFByb2Nlc3NQb29scyhkYXRhTWFuYWdlcikpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+
c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2Fs
bGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOworICAgICAgICBjb29raWVNYW5hZ2VyKCkuc2V0
Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CiAgICAgfQogCiAg
ICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuYWdlcjsKQEAgLTEzOSwxMSArMTQ1
LDkgQEAgV2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0Q29va2llTWFuYWdlcgogewogICAgIFdl
YktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdl
ci0+cHJpdi0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nl
c3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXIt
PnByaXYtPmRhdGFNYW5hZ2VyKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9l
bWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9Cisg
ICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJh
Y2sobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2ln
bmFsX2VtaXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0
dXJuIG1hbmFnZXI7CiB9CiAKQEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVf
bWFuYWdlcl9zZXRfcGVyc2lzdGVuCiAgICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2Vy
KSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5
PigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVU
RjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkp
OworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE5Miw4ICsx
OTUsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvCiB7CiAgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlcikpOwogCi0g
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFBy
b2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0
UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5h
Z2VyKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQo
KSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKIH0KIAogLyoq
CkBAIC0yMTcsMTQgKzIxOSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2Nl
cHRfcG8KIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyht
YW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7CiAKLSAgICAvLyBUaGUg
cG9saWN5IGlzIHRoZSBzYW1lIGluIGFsbCBwcm9jZXNzIHBvb2xzIGhhdmluZyB0aGUgc2FtZSBz
ZXNzaW9uIElELCBzbyBqdXN0IGFzayBhbnkuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xz
ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKTsKLSAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkgewotICAgICAg
ICBnX3Rhc2tfcmV0dXJuX2ludCh0YXNrLmdldCgpLCBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NF
UFRfTk9fVEhJUkRfUEFSVFkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcHJvY2Vz
c1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZN
b3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgeworICAg
IG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CiAgICAgICAgIGdfdGFza19yZXR1
cm5faW50KHRhc2suZ2V0KCksIHRvV2ViS2l0Q29va2llQWNjZXB0UG9saWN5KHBvbGljeSkpOwog
ICAgIH0pOwogfQpAQCAtMjY5LDExICsyNjQsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9hZGRfY29va2llKFdlCiAgICAgZ19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAgICAgR1Jl
ZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxh
YmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3Jp
dHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MK
LSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0
aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRh
TWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKS0+c2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgeyBXZWJD
b3JlOjpDb29raWUoY29va2llKSB9LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIG1h
bmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNl
c3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0
YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVF
KTsKICAgICB9KTsKIH0KQEAgLTMyMCwxMSArMzExLDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21h
bmFnZXJfZ2V0X2Nvb2tpZXMoVwogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAogICAgIEdS
ZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxs
YWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dy
aXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNz
Ci0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2Ug
dGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3
ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0
YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5h
Z2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVSTChV
UkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25z
dCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIG1hbmFnZXItPnByaXYt
PmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBV
UkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0o
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAgR0xpc3Qq
IGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBjb29r
aWVzKQogICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29raWVzTGlz
dCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzY1LDcgQEAgdm9pZCB3ZWJr
aXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZQogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29v
a2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyht
YW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29r
aWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24g
ZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJv
bSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBw
cm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFu
YWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmRlbGV0ZUNvb2tpZShtYW5hZ2VyLT5wcml2LT5z
ZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RGTW92ZSh0YXNr
KV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLmRlbGV0ZUNvb2tpZSht
YW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNr
ID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNr
LmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCShyZXZpc2lvbiAyNjc1
MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAyLDcgKzQwMiw2IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dFdlYkNvbnRleHRDb25zdHJ1Y3RlZCgKICAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2Vy
ID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcoImxvY2FsLXN0b3Jh
Z2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEoKSwgbnVsbHB0
cikpOwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKGNv
bmZpZ3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRQcmltYXJ5RGF0YVN0b3Jl
KHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJzaXRlRGF0YU1h
bmFnZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1lc3NhZ2VIYW5k
bGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgLy8g
U2luayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRyPFdlYktpdFVzZXJNZXNzYWdl
PiB1c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRlKFdURk1vdmUobWVzc2FnZSks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTQxMCw4ICs0MDksNiBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoCiAgICAgICAgIGdfc2lnbmFsX2VtaXQo
d2ViQ29udGV4dCwgc2lnbmFsc1tVU0VSX01FU1NBR0VfUkVDRUlWRURdLCAwLCB1c2VyTWVzc2Fn
ZS5nZXQoKSwgJnJldHVyblZhbHVlKTsKICAgICB9KTsKIAotICAgIHdlYmtpdFdlYnNpdGVEYXRh
TWFuYWdlckFkZFByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwgKnBy
aXYtPnByb2Nlc3NQb29sKTsKLQogICAgIHByaXYtPnByb2Nlc3NNb2RlbCA9IFdFQktJVF9QUk9D
RVNTX01PREVMX01VTFRJUExFX1NFQ09OREFSWV9QUk9DRVNTRVM7CiAKICNpZiBFTkFCTEUoTUVN
T1JZX1NBTVBMRVIpCkBAIC00MzksMTEgKzQzNiw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNv
bnRleHREaXNwb3NlKEdPYmoKICAgICAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldERvd25sb2Fk
Q2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSk7CiAgICAgfQogCi0g
ICAgaWYgKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlcikgewotICAgICAgICB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJSZW1vdmVQcm9jZXNzUG9vbChwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0
KCksICpwcml2LT5wcm9jZXNzUG9vbCk7Ci0gICAgICAgIHByaXYtPndlYnNpdGVEYXRhTWFuYWdl
ciA9IG51bGxwdHI7Ci0gICAgfQotCiAgICAgaWYgKHByaXYtPmZhdmljb25EYXRhYmFzZSkgewog
ICAgICAgICB3ZWJraXRGYXZpY29uRGF0YWJhc2VDbG9zZShwcml2LT5mYXZpY29uRGF0YWJhc2Uu
Z2V0KCkpOwogICAgICAgICBwcml2LT5mYXZpY29uRGF0YWJhc2UgPSBudWxscHRyOwpAQCAtMTU4
MSw4ICsxNTczLDggQEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfcHJlZmV0Y2hfZG5zKFdlYgog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpKTsKICAg
ICBnX3JldHVybl9pZl9mYWlsKGhvc3RuYW1lKTsKIAotICAgIGlmIChjb250ZXh0LT5wcml2LT5k
bnNQcmVmZXRjaGVkSG9zdHMuYWRkKGhvc3RuYW1lKS5pc05ld0VudHJ5KQotICAgICAgICBjb250
ZXh0LT5wcml2LT5wcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpQcmVmZXRjaEROUyhTdHJpbmc6OmZyb21VVEY4KGhvc3RuYW1lKSkp
OworICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXREYXRhU3RvcmUoY29udGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKKyAg
ICB3ZWJzaXRlRGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlByZWZldGNoRE5TKFN0cmluZzo6ZnJvbVVURjgoaG9zdG5hbWUpKSwgMCk7CiAg
ICAgY29udGV4dC0+cHJpdi0+ZG5zUHJlZmV0Y2hIeXN0ZXJlcmlzLmltcHVsc2UoKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vi
Vmlldy5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTksNyArNzU5LDYg
QEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYgogICAgICAgICB3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHByaXYtPndlYnNp
dGVEYXRhTWFuYWdlci5nZXQoKSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90bHNf
ZXJyb3JzX3BvbGljeShjb250ZXh0RGF0YU1hbmFnZXIpKTsKICAgICAgICAgYXV0byBwcm94eVNl
dHRpbmdzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGNvbnRleHREYXRh
TWFuYWdlcikubmV0d29ya1Byb3h5U2V0dGluZ3MoKTsKICAgICAgICAgd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkuc2V0
TmV0d29ya1Byb3h5U2V0dGluZ3MoV1RGTW92ZShwcm94eVNldHRpbmdzKSk7Ci0gICAgICAgIHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckFkZFByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFu
YWdlci5nZXQoKSwgd2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHByaXYtPmNvbnRleHQu
Z2V0KCkpKTsKICAgICB9CiAKICAgICBpZiAoIXByaXYtPndlYnNpdGVQb2xpY2llcykKQEAgLTk0
NSwxMSArOTQ0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Rpc3Bvc2UoR09iamVjdAog
ICAgICAgICB3ZWJraXRXZWJDb250ZXh0V2ViVmlld0Rlc3Ryb3llZCh3ZWJWaWV3LT5wcml2LT5j
b250ZXh0LmdldCgpLCB3ZWJWaWV3KTsKICAgICB9CiAKLSAgICBpZiAod2ViVmlldy0+cHJpdi0+
d2Vic2l0ZURhdGFNYW5hZ2VyKSB7Ci0gICAgICAgIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlclJl
bW92ZVByb2Nlc3NQb29sKHdlYlZpZXctPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwg
d2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHdlYlZpZXctPnByaXYtPmNvbnRleHQuZ2V0
KCkpKTsKLSAgICAgICAgd2ViVmlldy0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gbnVsbHB0
cjsKLSAgICB9Ci0KICAgICBpZiAod2ViVmlldy0+cHJpdi0+Y3VycmVudFNjcmlwdERpYWxvZykg
ewogICAgICAgICB3ZWJraXRfc2NyaXB0X2RpYWxvZ19jbG9zZSh3ZWJWaWV3LT5wcml2LT5jdXJy
ZW50U2NyaXB0RGlhbG9nKTsKICAgICAgICAgQVNTRVJUKCF3ZWJWaWV3LT5wcml2LT5jdXJyZW50
U2NyaXB0RGlhbG9nKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcAkocmV2aXNpb24g
MjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTEgKzk1LDYgQEAgZW51bSB7
CiB9OwogCiBzdHJ1Y3QgX1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUgewotICAgIH5f
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQo
cHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSk7Ci0gICAgfQotCiAgICAgUmVmUHRyPFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZT4gd2Vic2l0ZURhdGFTdG9yZTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGJh
c2VEYXRhRGlyZWN0b3J5OwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gYmFzZUNhY2hlRGlyZWN0b3J5
OwpAQCAtMTE1LDcgKzExMCw2IEBAIHN0cnVjdCBfV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJp
dmF0ZSAKICAgICBXZWJLaXRUTFNFcnJvcnNQb2xpY3kgdGxzRXJyb3JzUG9saWN5OwogCiAgICAg
R1JlZlB0cjxXZWJLaXRDb29raWVNYW5hZ2VyPiBjb29raWVNYW5hZ2VyOwotICAgIFZlY3RvcjxX
ZWJQcm9jZXNzUG9vbCo+IHByb2Nlc3NQb29sczsKIH07CiAKIFdFQktJVF9ERUZJTkVfVFlQRShX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIsIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlciwgR19U
WVBFX09CSkVDVCkKQEAgLTIwOCw3ICsyMDIsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJTZXRQCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUFJPUF9JU19FUEhFTUVS
QUw6CiAgICAgICAgIGlmIChnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSkKLSAgICAgICAgICAg
IG1hbmFnZXItPnByaXYtPndlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmNyZWF0ZU5vblBlcnNpc3RlbnQoKTsKKyAgICAgICAgICAgIG1hbmFnZXItPnByaXYtPndl
YnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdlbmVyYXRlUGVyc2lz
dGVudFNlc3Npb25JRCgpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBhcmFtU3Bl
Yyk7CkBAIC01MDEsMjMgKzQ5NSw2IEBAIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgd2Via2l0
V2Vic2l0ZUQKICAgICByZXR1cm4gKnByaXYtPndlYnNpdGVEYXRhU3RvcmU7CiB9CiAKLXZvaWQg
d2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQWRkUHJvY2Vzc1Bvb2woV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyKiBtYW5hZ2VyLCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCi17Ci0gICAgQVNT
RVJUKCFtYW5hZ2VyLT5wcml2LT5wcm9jZXNzUG9vbHMuY29udGFpbnMoJnByb2Nlc3NQb29sKSk7
Ci0gICAgbWFuYWdlci0+cHJpdi0+cHJvY2Vzc1Bvb2xzLmFwcGVuZCgmcHJvY2Vzc1Bvb2wpOwot
fQotCi12b2lkIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlclJlbW92ZVByb2Nlc3NQb29sKFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29s
KQotewotICAgIEFTU0VSVChtYW5hZ2VyLT5wcml2LT5wcm9jZXNzUG9vbHMuY29udGFpbnMoJnBy
b2Nlc3NQb29sKSk7Ci0gICAgbWFuYWdlci0+cHJpdi0+cHJvY2Vzc1Bvb2xzLnJlbW92ZUZpcnN0
KCZwcm9jZXNzUG9vbCk7Ci19Ci0KLWNvbnN0IFZlY3RvcjxXZWJQcm9jZXNzUG9vbCo+JiB3ZWJr
aXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMoV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyKiBtYW5hZ2VyKQotewotICAgIHJldHVybiBtYW5hZ2VyLT5wcml2LT5wcm9jZXNzUG9vbHM7
Ci19Ci0KIC8qKgogICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldzoKICAqIEBmaXJz
dF9vcHRpb25fbmFtZTogbmFtZSBvZiB0aGUgZmlyc3Qgb3B0aW9uIHRvIHNldApJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJp
dmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaAkocmV2aXNpb24gMjY3NTM2KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJp
dmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxMSArMTksNiBAQAogCiAjcHJhZ21hIG9uY2UK
IAotI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9y
ZS5oIgogCiBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldERhdGFTdG9yZShXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqKTsKLXZvaWQgd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyQWRkUHJvY2Vzc1Bvb2woV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiwg
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbCYpOwotdm9pZCB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJS
ZW1vdmVQcm9jZXNzUG9vbChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqLCBXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sJik7Ci1jb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJQcm9jZXNzUG9vbCo+JiB3ZWJr
aXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMoV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyKik7Ci0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0
b21hdGlvblNlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCShyZXZpc2lvbiAyNjc1MzYpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5Miw4ICsxMzkyLDggQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29vawogCiAgICAgY29va2llLmh0dHBPbmx5ID0gKmh0dHBP
bmx5OwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9j
ZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2ll
TWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCks
IHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBj
b29raWVNYW5hZ2VyID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCku
Y29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhwYWdlLT53ZWJz
aXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CiAg
ICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAtMTQwOSw4ICsx
NDA5LDggQEAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPgogCiAgICAg
U3RyaW5nIGhvc3QgPSBhY3RpdmVVUkwuaG9zdCgpLnRvU3RyaW5nKCk7CiAKLSAgICBXZWJDb29r
aWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50
PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVDb29r
aWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBo
b3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOworICAgIFdlYkNv
b2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlciA9IHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUo
KS5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRl
bGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25J
RCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoaG9zdCkgfSk7CiAK
ICAgICByZXR1cm4geyB9OwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
LmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwx
MSArNDEsMTEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBMZWdhY3lDdXN0b21Qcm90b2Nv
bE1hbmFnZXJQcm94eTsKIAogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
IGZpbmFsIDogcHVibGljIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IHsKLXByaXZh
dGU6CitwdWJsaWM6CiAgICAgdm9pZCBzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHkmLCBMZWdhY3lDdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmKSBmaW5hbDsKICAgICB2b2lkIHN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCkgZmluYWw7CiAgICAg
dm9pZCBpbnZhbGlkYXRlKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5JikgZmluYWw7
Ci0KK3ByaXZhdGU6CiAgICAgSGFzaE1hcDxMZWdhY3lDdXN0b21Qcm90b2NvbElELCBSZXRhaW5Q
dHI8V0tDdXN0b21Qcm90b2NvbExvYWRlcj4+IG1fbG9hZGVyTWFwOwogfTsKIApJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29h
Lm1tCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJQcm9jZXNzUG9vbENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsOCArMTM0LDkgQEAg
c3RhdGljIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZAogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0gICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNldFByb2Nlc3NTdXBwcmVz
c2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAgICBXZWJzaXRlRGF0
YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbZW5hYmxlZCA9IHByb2Nlc3NTdXBwcmVz
c2lvbkVuYWJsZWQoKV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBk
YXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGVu
YWJsZWQpOworICAgIH0pOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAg
aWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkK
QEAgLTE2Niw4ICsxNjcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emUoCiAgICAgaWYgKCFbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29s
Rm9yS2V5OkAiV2ViS2l0U3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIiXSkKICAgICAgICAg
aW5zdGFsbE1lbW9yeVByZXNzdXJlSGFuZGxlcigpOwogCi0gICAgc2V0TGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50PigpKTsKLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUND
QVRBTFlTVCkKICAgICBpZiAoIV9NR0NhY2hlVmFsaWQoKSkgewogICAgICAgICBkaXNwYXRjaF9h
c3luYyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RF
RkFVTFQsIDApLCBeewpAQCAtNDk1LDIyICs0OTQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemVOCiAKICAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwogCi0gICAgewotICAgICAgICBib29s
IGlzU2FmYXJpID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgaXNNaW5pQnJvd3NlciA9IGZhbHNlOwot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6SU9T
QXBwbGljYXRpb246OmlzTW9iaWxlU2FmYXJpKCk7Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBX
ZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNNaW5pQnJvd3NlcigpOwotI2VsaWYgUExBVEZPUk0o
TUFDKQotICAgICAgICBpc1NhZmFyaSA9IFdlYkNvcmU6Ok1hY0FwcGxpY2F0aW9uOjppc1NhZmFy
aSgpOwotICAgICAgICBpc01pbmlCcm93c2VyID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246Omlz
TWluaUJyb3dzZXIoKTsKLSNlbmRpZgotICAgICAgICBpZiAoaXNTYWZhcmkgfHwgaXNNaW5pQnJv
d3NlcikgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cFByb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVs
dHMgc3RyaW5nRm9yS2V5OihOU1N0cmluZyAqKVdlYktpdDJIVFRQUHJveHlEZWZhdWx0c0tleV0p
OwotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cHNQcm94eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0
cmluZ0ZvcktleTooTlNTdHJpbmcgKilXZWJLaXQySFRUUFNQcm94eURlZmF1bHRzS2V5XSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0ID0gYWRv
cHRDRihfQ0ZOZXR3b3JrQ29weUFUU0NvbnRleHQoKSk7CiAKICAgICBwYXJhbWV0ZXJzLnNob3Vs
ZFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2Vi
S2l0U3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXJEZWZhdWx0c0tleV07CkBAIC01MjQsMTIg
KzUwNyw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICBO
U051bWJlciAqZGF0YWJhc2VFbmFibGVkVmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5j
ZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1d
OwogICAgIGlmIChkYXRhYmFzZUVuYWJsZWRWYWx1ZSkKICAgICAgICAgcGFyYW1ldGVycy5zaG91
bGRFbmFibGVJVFBEYXRhYmFzZSA9IGRhdGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAg
ICBlbHNlCi0gICAgICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBtX2Rl
ZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsKIAog
ICAgIHBhcmFtZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2RlZmF1
bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50YWwl
QCIsIFdlYlByZWZlcmVuY2VzS2V5OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVk
S2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwotCi0gICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVz
dGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJz
aXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRm
b3JtSW52YWxpZGF0ZUNvbnRleHQoKQpAQCAtNjA4LDExICs1ODcsNiBAQCBib29sIFdlYlByb2Nl
c3NQb29sOjpwcm9jZXNzU3VwcHJlc3Npb25FCiAgICAgcmV0dXJuICFtX3VzZXJPYnNlcnZhYmxl
UGFnZUNvdW50ZXIudmFsdWUoKSAmJiAhbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBh
Z2VDb3VudGVyLnZhbHVlKCk7CiB9CiAKLWJvb2wgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9j
ZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYgZW50aXRsZW1lbnQpCi17
Ci0gICAgcmV0dXJuIFdURjo6aGFzRW50aXRsZW1lbnQoZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5j
b25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwgZW50aXRsZW1lbnQudXRmOCgpLmRhdGEoKSk7
Ci19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1Qp
CiBmbG9hdCBXZWJQcm9jZXNzUG9vbDo6ZGlzcGxheUJyaWdodG5lc3MoKQogewpAQCAtOTQ5LDIz
ICs5MjMsNCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlckhpZ2hEeW5hbWljCiB9CiAj
ZW5kaWYKIAotT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBXZWJQcm9jZXNzUG9vbDo6eHBjRW5k
cG9pbnRNZXNzYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lbmRwb2ludE1lc3NhZ2U7Ci19
Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9X
ZWJQcm9jZXNzKE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4gZW5kcG9pbnRNZXNzYWdlKQotewot
ICAgIG1fZW5kcG9pbnRNZXNzYWdlID0gZW5kcG9pbnRNZXNzYWdlOwotCi0gICAgZm9yIChhdXRv
IHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAgICBpZiAocHJvY2Vzcy0+c3RhdGUoKSAh
PSBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OlN0YXRlOjpSdW5uaW5nKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGlmICghcHJvY2Vzcy0+Y29ubmVjdGlvbigpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGF1dG8gY29ubmVjdGlvbiA9IHByb2Nlc3MtPmNvbm5lY3Rpb24o
KS0+eHBjQ29ubmVjdGlvbigpOwotICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2Uo
Y29ubmVjdGlvbiwgZW5kcG9pbnRNZXNzYWdlLmdldCgpKTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03NSw4ICs3NSw4IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6Y2FuY2VsKCkKICAgICBpZiAo
IW1fcHJvY2Vzc1Bvb2wpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChOZXR3b3JrUHJvY2Vz
c1Byb3h5KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CisgICAgaWYgKG1fZGF0YVN0b3JlKQor
ICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CiB9CiAKIHZvaWQg
RG93bmxvYWRQcm94eTo6aW52YWxpZGF0ZSgpCkBAIC0xMDMsMTUgKzEwMywxMyBAQCBXZWJQYWdl
UHJveHkqIERvd25sb2FkUHJveHk6Om9yaWdpbmF0aW5nCiAjaWYgUExBVEZPUk0oQ09DT0EpCiB2
b2lkIERvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVzcyhjb25zdCBVUkwmIFVSTCkKIHsKLSAg
ICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxl
OwotICAgICAgICBib29sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlKFVSTC5maWxlU3lzdGVtUGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpU
eXBlOjpSZWFkV3JpdGUsIGhhbmRsZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNh
bmRib3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsKLSAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQ
cm9ncmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFuZGxlKSwgMCk7Ci0gICAgfQorICAgIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7CisgICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVu
c2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgo
KSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOworICAgIEFTU0VS
VF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9u
KTsKKyAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhh
bmRsZSksIDApOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQogCkBAIC0xMzEsMTEgKzEy
OSwxMCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRpZFN0YXJ0KGNvbnN0IFJlc291CiAKIHZvaWQg
RG93bmxvYWRQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJiYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIHVpbnQ2NF90IGNoYWxs
ZW5nZUlEKQogewotICAgIGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICBpZiAoIW1fcHJvY2Vzc1Bv
b2wgfHwgIW1fZGF0YVN0b3JlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlUHJveHkgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVh
dGUoV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlELCBtYWtlUmVm
KCptX3Byb2Nlc3NQb29sLT5uZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKSksIG51bGxwdHIp
OwotCisgICAgYXV0byBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VQcm94eTo6Y3JlYXRlKFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2Up
LCBjaGFsbGVuZ2VJRCwgbWFrZVJlZigqbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29u
bmVjdGlvbigpKSwgbnVsbHB0cik7CiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQo
KS5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKnRoaXMsIGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlUHJveHkuZ2V0KCkpOwogfQogCkBAIC0xNDYsMTUgKzE0MywxMCBAQCB2b2lkIERv
d25sb2FkUHJveHk6OndpbGxTZW5kUmVxdWVzdChSZXNvCiAKICAgICBtX3Byb2Nlc3NQb29sLT5k
b3dubG9hZENsaWVudCgpLndpbGxTZW5kUmVxdWVzdCgqdGhpcywgV1RGTW92ZShwcm9wb3NlZFJl
cXVlc3QpLCByZWRpcmVjdFJlc3BvbnNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpXShSZXNvdXJjZVJlcXVlc3QmJiBuZXdSZXF1ZXN0KSB7CiAgICAgICAgIG1fcmVkaXJl
Y3RDaGFpbi5hcHBlbmQobmV3UmVxdWVzdC51cmwoKSk7Ci0KLSAgICAgICAgaWYgKCFwcm90ZWN0
ZWRUaGlzLT5tX3Byb2Nlc3NQb29sKQorICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fZGF0
YVN0b3JlKQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8qIG5ldHdvcmtQcm9j
ZXNzUHJveHkgPSBwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
OwotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzUHJveHkpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3NQcm94eS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJ
RCwgbmV3UmVxdWVzdCksIDApOworICAgICAgICBhdXRvJiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0g
cHJvdGVjdGVkVGhpcy0+bV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIG5l
dHdvcmtQcm9jZXNzUHJveHkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVl
V2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCks
IDApOwogICAgIH0pOwogfQogCkBAIC0xNzksMTYgKzE3MSwxNCBAQCB2b2lkIERvd25sb2FkUHJv
eHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0CiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNp
ZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25z
ZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBkb3dubG9hZElEID0gZG93bmxvYWRJ
RF0gKEFsbG93T3ZlcndyaXRlIGFsbG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsK
KyAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0
aFN1Z2dlc3RlZEZpbGVuYW1lKCp0aGlzLCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVT
dWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGRvd25sb2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3
cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlz
TnVsbCgpKQogICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGRlc3Rp
bmF0aW9uLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNp
b25IYW5kbGUpOwogCi0gICAgICAgIGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICAgICAgaWYgKCFt
X2RhdGFTdG9yZSkKICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51
ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9u
LCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0
ZTo6WWVzKSwgMCk7CisgICAgICAgIG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERl
c3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxl
LCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CiAgICAgfSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWRQcm94eU1hcC5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNyArNDQsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIERvd25sb2FkUHJveHlNYXA6
OkRvd25sb2FkUHJveHlNYXAoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJvY2VzcykKLSAgICA6IG1f
cHJvY2VzcyhtYWtlV2Vha1B0cihwcm9jZXNzKSkKKyAgICA6IG1fcHJvY2Vzcyhwcm9jZXNzKQog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgICwgbV9zaG91bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJv
Y2Vzc0hhc0VudGl0bGVtZW50KCJjb20uYXBwbGUubXVsdGl0YXNraW5nLnN5c3RlbWFwcGFzc2Vy
dGlvbnMiKSkKICNlbmRpZgpAQCAtNzAsMTQgKzcwLDEyIEBAIHZvaWQgRG93bmxvYWRQcm94eU1h
cDo6cGxhdGZvcm1EZXN0cm95KCkKIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlv
bkRpZEVudGVyQmFja2dyb3VuZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRl
ckJhY2tncm91bmQoKSwgMCk7CisgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpBcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKIH0KIAogdm9pZCBE
b3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKQogewotICAg
IGlmIChtX3Byb2Nlc3MpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKKyAgICBtX3By
b2Nlc3Muc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVy
Rm9yZWdyb3VuZCgpLCAwKTsKIH0KIAogRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6
Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nl
c3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNv
dXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5
KiBvcmlnaW5hdGluZ1BhZ2UpCkBAIC05MiwxMyArOTAsMTIgQEAgRG93bmxvYWRQcm94eSYgRG93
bmxvYWRQcm94eU1hcDo6Y3JlYXRlRAogICAgICAgICBtX2Rvd25sb2FkVUlBc3NlcnRpb24gPSBt
YWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIldlYktp
dCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5n
KTsKIAogICAgICAgICBBU1NFUlQoIW1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uKTsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV9wcm9jZXNzKTsKLSAgICAgICAgbV9kb3dubG9hZE5ldHdv
cmtpbmdBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy0+
cHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRp
b25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKKyAgICAgICAgbV9kb3dubG9hZE5ldHdvcmtp
bmdBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy5wcm9j
ZXNzSWRlbnRpZmllcigpLCAiV2ViS2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5
cGU6OlVuYm91bmRlZE5ldHdvcmtpbmcpOwogCiAgICAgICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NT
dXNwZW5zaW9uLCAiVUlQcm9jZXNzIHRvb2sgJ1dlYktpdCBkb3dubG9hZHMnIGFzc2VydGlvbnMg
Zm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKICAgICB9CiAKLSAgICBtX3Byb2Nl
c3MtPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBk
b3dubG9hZFByb3h5LmdldCgpKTsKKyAgICBtX3Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkUHJv
eHktPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCksIGRvd25sb2FkUHJveHkuZ2V0KCkpOwogCiAg
ICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CkBAIC0xMDksMTIgKzEwNiw5IEBAIHZvaWQgRG93
bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5pc2hlZCgKIAogICAgIFJFTEVBU0VfTE9HKExvYWRp
bmcsICJSZW1vdmluZyBkb3dubG9hZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3dubG9h
ZFByb3h5TWFwIiwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhlIERvd25s
b2FkUHJveHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNz
IHBvb2wuCi0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9j
ZXNzLT5wcm9jZXNzUG9vbCgpKTsKLQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhk
b3dubG9hZElEKSk7CiAKLSAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRv
d25sb2FkSUQoKSk7CisgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdl
czo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25s
b2FkSUQoKSk7CiAgICAgZG93bmxvYWRQcm94eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9kb3dubG9h
ZHMucmVtb3ZlKGRvd25sb2FkSUQpOwogCkBAIC0xMzMsMTUgKzEyNywxMyBAQCB2b2lkIERvd25s
b2FkUHJveHlNYXA6OmludmFsaWRhdGUoKQogICAgIGZvciAoY29uc3QgYXV0byYgZG93bmxvYWQg
OiBtX2Rvd25sb2Fkcy52YWx1ZXMoKSkgewogICAgICAgICBkb3dubG9hZC0+cHJvY2Vzc0RpZENs
b3NlKCk7CiAgICAgICAgIGRvd25sb2FkLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1fcHJvY2Vz
cy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKKyAg
ICAgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQ
cm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25s
b2FkSUQoKSk7CiAgICAgfQogCiAgICAgbV9kb3dubG9hZHMuY2xlYXIoKTsKICAgICBtX2Rvd25s
b2FkVUlBc3NlcnRpb24gPSBudWxscHRyOwogICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0
aW9uID0gbnVsbHB0cjsKICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJv
Y2VzcyBEb3dubG9hZFByb3h5TWFwIGludmFsaWRhdGVkIC0gUmVsZWFzZWQgJ1dlYktpdCBkb3du
bG9hZHMnIGFzc2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKLQot
ICAgIG1fcHJvY2VzcyA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQ
cm94eU1hcC5oCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZSgpOwogICAgIHZvaWQgcGxhdGZv
cm1EZXN0cm95KCk7CiAKLSAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fcHJvY2Vz
czsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBtX3Byb2Nlc3M7CiAgICAgSGFzaE1hcDxEb3du
bG9hZElELCBSZWZQdHI8RG93bmxvYWRQcm94eT4+IG1fZG93bmxvYWRzOwogCiAgICAgYm9vbCBt
X3Nob3VsZFRha2VBc3NlcnRpb24geyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCShyZXZp
c2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogCiAjaW5jbHVkZSAiQVBJQ29udGVudFJ1bGVMaXN0
LmgiCisjaW5jbHVkZSAiQVBJQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0
aW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHlNYXAuaCIKQEAgLTM1LDYgKzM2
LDcgQEAKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNl
bmRpZgorI2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC00OCw2ICs1MCw3
IEBACiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAi
U3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVM
aXN0LmgiCisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2Vi
UHJvY2Vzc01lc3NhZ2VzLmgiCkBAIC01OCw4ICs2MSwxMCBAQAogI2luY2x1ZGUgIldlYlVzZXJD
b250ZW50Q29udHJvbGxlclByb3h5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGEuaCIKICNpbmNs
dWRlICJXZWJzaXRlRGF0YVN0b3JlQ2xpZW50LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tB
Z2dyZWdhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKICNpZiBF
TkFCTEUoU0VDX0lURU1fU0hJTSkKQEAgLTcwLDIwICs3NSwxMjIgQEAKICNpbmNsdWRlIDx3dGYv
c3BpL2Rhcndpbi9YUENTUEkuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5j
bHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwogI2Rl
ZmluZSBNRVNTQUdFX0NIRUNLKGFzc2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlv
biwgY29ubmVjdGlvbigpKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlBy
b2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShwcm9j
ZXNzUG9vbC5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJvY2Vz
c1Bvb2wocHJvY2Vzc1Bvb2wpCitzdGF0aWMgSGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5Kj4m
IG5ldHdvcmtQcm9jZXNzZXNTZXQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxOZXR3b3JrUHJvY2Vz
c1Byb3h5Kj4+IHNldDsKKyAgICByZXR1cm4gc2V0OworfQorCitWZWN0b3I8UmVmPE5ldHdvcmtQ
cm9jZXNzUHJveHk+PiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkK
K3sKKyAgICBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXM7CisgICAg
cHJvY2Vzc2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobmV0d29ya1Byb2Nlc3Nlc1NldCgpLnNp
emUoKSk7CisgICAgZm9yIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA6IG5ldHdvcmtQcm9jZXNzZXNT
ZXQoKSkKKyAgICAgICAgcHJvY2Vzc2VzLnVuY2hlY2tlZEFwcGVuZCgqbmV0d29ya1Byb2Nlc3Mp
OworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9CisKK3N0YXRpYyBSZWZQdHI8TmV0d29ya1Byb2Nl
c3NQcm94eT4mIGRlZmF1bHRQcm9jZXNzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
UmVmUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBwcm9jZXNzOworICAgIHJldHVybiBwcm9jZXNz
LmdldCgpOworfQorCitSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gTmV0d29ya1Byb2Nlc3NQcm94
eTo6ZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBpZiAoIWRlZmF1bHRQcm9jZXNzKCkp
CisgICAgICAgIGRlZmF1bHRQcm9jZXNzKCkgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGUo
KTsKKyAgICByZXR1cm4gKmRlZmF1bHRQcm9jZXNzKCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6dGVybWluYXRlKCkKK3sKKyAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OnRlcm1p
bmF0ZSgpOworICAgIGRpZFRlcm1pbmF0ZSgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmRpZFRlcm1pbmF0ZSgpCit7CisgICAgaWYgKHRoaXMgPT0gZGVmYXVsdFByb2Nlc3MoKS5n
ZXQoKSkKKyAgICAgICAgZGVmYXVsdFByb2Nlc3MoKSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpCit7
CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlz
IGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24t
bWFpbiB0aHJlYWRzLgorICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9y
Y2UgdGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KKyAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgorICAgIGlmICghUnVuTG9v
cDo6aXNNYWluKCkpIHsKKyAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzXSB7
CisgICAgICAgICAgICBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAg
ICAgIH0pOworICAgIH0KKworICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBh
cmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJlID0g
Y29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9S
ZWdpc3RlckFzU2VjdXJlKCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRB
c0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9i
YWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0NvbnRl
bnRTZWN1cml0eVBvbGljeSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVk
QXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCku
c2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1Jl
Z2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpz
aW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7CisgICAgcGFyYW1ldGVy
cy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9k
ZWwoKTsKKyAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVz
V2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKKyAgICAgICAgcGFyYW1ldGVycy51cmxTY2hl
bWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorICAgIGlmIChTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9
IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7ICFjb29raWVTdG9yYWdl
RGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRl
cnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgaWYgKFN0cmlu
ZyBjb250YWluZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ0Nh
Y2hlc0RpcmVjdG9yeSgpOyAhY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5
KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0
b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOyAhcGFyZW50QnVu
ZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlKHBhcmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZE9ubHksIHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
KyNlbmRpZgorICAgIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJv
Y2VzcyhwYXJhbWV0ZXJzKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5p
dGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKK30KKworc3RhdGljIGJvb2wg
YW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKQoreworICAgIGZv
ciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkp
IHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3Jp
dHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFz
c2VydGlvbigpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29s
OjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNob3VsZFRh
a2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQ
cm9jZXNzUHJveHkoKQorICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KGFueVByb2Nlc3NQb29s
QWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCiAjaWYgRU5BQkxFKExFR0FDWV9DVVNU
T01fUFJPVE9DT0xfTUFOQUdFUikKKyAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
KG1ha2VVbmlxdWVSZWY8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogICAg
ICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgqdGhpcykKKyNlbHNlCisgICAgLCBtX2N1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50PigpKQogI2VuZGlmCi0gICAgLCBtX3Rocm90dGxlcigqdGhpcywgcHJv
Y2Vzc1Bvb2wuc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV90aHJv
dHRsZXIoKnRoaXMsIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlv
bigpKQorICAgICwgbV9jb29raWVNYW5hZ2VyKFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRl
KCp0aGlzKSkKIHsKICAgICBjb25uZWN0KCk7CisgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1Rv
TmV3UHJvY2VzcygpOworICAgIHVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICBuZXR3b3Jr
UHJvY2Vzc2VzU2V0KCkuYWRkKHRoaXMpOwogfQogCiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0
d29ya1Byb2Nlc3NQcm94eSgpCkBAIC05OCw2ICsyMDUsNyBAQCBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojp+TmV0d29ya1Byb2Nlc3NQcm94CiAKICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQogICAg
ICAgICBtX2Rvd25sb2FkUHJveHlNYXAtPmludmFsaWRhdGUoKTsKKyAgICBuZXR3b3JrUHJvY2Vz
c2VzU2V0KCkucmVtb3ZlKHRoaXMpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6Omdl
dExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuY2hPcHRp
b25zKQpAQCAtMTA1LDE1ICsyMTMsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExh
dW5jaE9wdGlvCiAgICAgbGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSA9IFByb2Nlc3NMYXVuY2hl
cjo6UHJvY2Vzc1R5cGU6Ok5ldHdvcms7CiAgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpnZXRM
YXVuY2hPcHRpb25zKGxhdW5jaE9wdGlvbnMpOwogCi0gICAgaWYgKHByb2Nlc3NQb29sKCkuc2hv
dWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKLSAgICAg
ICAgcHJvY2Vzc1Bvb2woKS5zZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFp
bEZvclRlc3RpbmcoZmFsc2UpOworICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpzaG91bGRNYWtl
TmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkKICAgICAgICAgbGF1bmNo
T3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKLSAg
ICB9Ci0KLSNpZiBQTEFURk9STShQTEFZU1RBVElPTikKLSAgICBsYXVuY2hPcHRpb25zLnByb2Nl
c3NQYXRoID0gbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc1BhdGgoKTsKLSAgICBsYXVuY2hP
cHRpb25zLnVzZXJJZCA9IG1fcHJvY2Vzc1Bvb2wudXNlcklkKCk7Ci0jZW5kaWYKIH0KIAogdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uKQpAQCAtMTY2LDEyICsyNjcsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzeW50aGVzaXplQXBwSQogICAgIH0KIH0KIAotRG93bmxvYWRQcm94eSYgTmV0d29ya1By
b2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3Rv
cmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUlu
Zm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQorRG93bmxv
YWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRl
RGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZy
YW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAgICAgaWYgKCFtX2Rv
d25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1ha2VVbmlxdWU8
RG93bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1h
cC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2wsIHJlc291cmNl
UmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVybiBtX2Rvd25s
b2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBwcm9jZXNzUG9vbCwg
cmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdl
YnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCAoV2Vic2l0ZURhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjM3LDggKzMzOCwxMSBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9jZXNzCiB7CiAgICAgY2xlYXJD
YWxsYmFja1N0YXRlcygpOwogCi0gICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFn
ZXIgdG8gZm9yZ2V0IGFib3V0IHRoaXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwg
Y2F1c2UgdXMgdG8gYmUgZGVsZXRlZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNz
Q3Jhc2hlZCgqdGhpcyk7CisgICAgUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IHByb3RlY3RlZFRo
aXMoKnRoaXMpOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6
YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0Ny
YXNoZWQoKnRoaXMpOworICAgIGZvciAoYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA6IG1fd2Vic2l0
ZURhdGFTdG9yZXMpCisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3NDcmFz
aGVkKCp0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjbGVhckNhbGxiYWNr
U3RhdGVzKCkKQEAgLTI1OCw5ICszNjIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRp
ZFJlY2VpdmVNZXNzCiAgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVy
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wuZGlzcGF0Y2hNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQotICAgICAgICByZXR1cm47Ci0KICAgICBkaWRSZWNl
aXZlTmV0d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAK
QEAgLTI3NCw4ICszNzUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVT
eW5jCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9u
JikKIHsKLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZihtX3Byb2Nlc3NQ
b29sKTsKLQogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQ
cm94eU1hcC0+aW52YWxpZGF0ZSgpOwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09M
X01BTkFHRVIpCkBAIC0zMzEsMTEgKzQzMCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGlkUmVjZWl2ZUF1dGgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdG9wT3Jp
Z2luIHx8ICFtX3Byb2Nlc3NQb29sLmlzU2VydmljZVdvcmtlclBhZ2VJRChwYWdlSUQpKSB7Ci0g
ICAgICAgIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShzZXNzaW9uSUQsIFdURk1vdmUo
YXV0aGVudGljYXRpb25DaGFsbGVuZ2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAg
IFdlYlBhZ2VQcm94eTo6Zm9yTW9zdFZpc2libGVXZWJQYWdlSWZBbnkoc2Vzc2lvbklELCAqdG9w
T3JpZ2luLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBh
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2Up
LCBuZWdvdGlhdGVkTGVnYWN5VExTXShhdXRvKiBwYWdlKSBtdXRhYmxlIHsKICAgICAgICAgaWYg
KCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM5MiwxMSArNDg2LDYgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuYwogICAgICAgICBuZXR3b3JrUHJv
Y2Vzc0NyYXNoZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotI2lmIFBMQVRGT1JNKENP
Q09BKQotICAgIGlmIChtX3Byb2Nlc3NQb29sLnByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSkK
LSAgICAgICAgc2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgogICAg
IAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKHhwY19jb25uZWN0aW9uX3QgY29u
bmVjdGlvbiA9IHRoaXMtPmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpKQpAQCAtMTIwNSw3
ICsxMjk0LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXRUaGlyZFBhcnR5QwogfQog
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihI
YXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7Ci0gICAgcHJv
Y2Vzc1Bvb2woKS5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihXVEZNb3ZlKGRvbWFpbnMp
KTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2V0RG9tYWluc1dpdGhVc2VySW50ZXJh
Y3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4geyBkb21haW5zIH0pOwog
fQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKQEAgLTEyNTIs
NDUgKzEzNDIsMzEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpmbHVzaENvb2tpZXMoYwog
ICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkZsdXNoQ29v
a2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBz
dG9yZSkKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0
b3JlJiBzdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMuYWRkKHN0b3JlLT5zZXNzaW9uSUQoKSk7
CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5hZGQoc3RvcmUpOwogCiAgICAgaWYgKGNhblNlbmRN
ZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJz
aXRlRGF0YVN0b3JlIHsgc3RvcmUtPnBhcmFtZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRvIHNlc3Np
b25JRCA9IHN0b3JlLT5zZXNzaW9uSUQoKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCk7
CisgICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAoIXNlc3Np
b25JRC5pc0VwaGVtZXJhbCgpKSB7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAg
ICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnkoKSk7CisgICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShz
dG9yZS5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgogICAgIH0K
IH0KIAotYm9vbCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zZXNzaW9uSURzLmNvbnRhaW5zKHNl
c3Npb25JRCk7Ci19Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92
ZVNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBtX3Nl
c3Npb25JRHMucmVtb3ZlKHNlc3Npb25JRCk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5yZW1v
dmUod2Vic2l0ZURhdGFTdG9yZSk7CiAKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAg
ICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRlc3Ryb3lTZXNzaW9uIHsgc2Vzc2lv
bklEIH0sIDApOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGVzdHJv
eVNlc3Npb24geyB3ZWJzaXRlRGF0YVN0b3JlLnNlc3Npb25JRCgpIH0sIDApOwogfQogCiBXZWJz
aXRlRGF0YVN0b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNl
c3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9
PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlmICghV2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAgICAgICBh
dXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7
Ci0gICAgICAgICAgICBpZiAod2Vic2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSA9PSBzZXNzaW9uSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVE
YXRhU3RvcmU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0ZURhdGFT
dG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7
CisgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lv
bklEKHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVD
YWNoZVN0b3JhZ2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEzMzcs
NyArMTQxMyw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVdlYlUKICNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFi
bGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhSZWdpc3RyYWJsZURv
bWFpbiYmIHJlZ2lzdHJhYmxlRG9tYWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX3Byb2Nl
c3NQb29sLmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vzcygq
dGhpcywgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksIHNlc3Npb25JRCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOworICAgIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250
ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoKnRoaXMsIFJlZ2lzdHJhYmxlRG9tYWluIHty
ZWdpc3RyYWJsZURvbWFpbn0sIHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OndvcmtlckNvbnRleHRDb25uZWN0aW9u
Tm9Mb25nZXJOZWVkZWQoV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgaWRlbnRpZmllcikKQEAg
LTE1MDAsMTYgKzE1NzYsMzQgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpwcmVjb25uZWN0
VG8oUAogICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vz
c2lvbklELCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0K
IAorc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkK
K3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlBy
b2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJv
Y2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6
OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dy
b3VuZFdlYlByb2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9j
ZXNzQXNzZXJ0aW9uKCkKIHsKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2Vi
UHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJv
Y2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdy
b3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAg
bV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZp
dHkoIk5ldHdvcmtpbmcgZm9yIGZvcmVncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVn
cm91bmQoKSwgMCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAo
cHJvY2Vzc1Bvb2woKS5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55
UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQ
cm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkQmFja2dyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9t
V2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMg
PSB0aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91
bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0JhY2tncm91bmQoKSwgMCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHku
aAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEyICs0NiwxNyBAQAog
CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiWFBDRXZlbnRIYW5kbGVyLmgiCisjaW5j
bHVkZSA8d3RmL09TT2JqZWN0UHRyLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIElQQyB7CiBjbGFz
cyBGb3JtRGF0YVJlZmVyZW5jZTsKIH0KIAorbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBDdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xhc3MgU2Vzc2lv
bklEOwogfQpAQCAtNzMsOCArNzgsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93
bmxvYWRQcm94eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7CitjbGFzcyBXZWJDb29raWVNYW5h
Z2VyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNs
YXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OwogCiBlbnVtIGNsYXNzIFNob3VsZEdy
YW5kZmF0aGVyU3RhdGlzdGljcyA6IGJvb2w7CkBAIC04Niw4ICs5MSw5IEBAIHN0cnVjdCBGcmFt
ZUluZm9EYXRhOwogc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3Ry
dWN0IFJlc291cmNlTG9hZEluZm87CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CitzdHJ1Y3QgV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM7CiAKLWNsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkgZmluYWwg
OiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJD
bGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CitjbGFz
cyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94
eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8
TmV0d29ya1Byb2Nlc3NQcm94eT4sIHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtQcm9jZXNzUHJv
eHk+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB1c2luZyBS
ZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwpAQCAtMTAyLDEy
ICsxMDgsMTggQEAgcHVibGljOgogICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vz
cyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhwbGljaXQgTmV0d29ya1Byb2Nl
c3NQcm94eShXZWJQcm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQ
cm94eT4gZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7CisgICAgc3RhdGljIFJlZjxOZXR3b3JrUHJv
Y2Vzc1Byb3h5PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtQcm9jZXNz
UHJveHkpOyB9CiAgICAgfk5ldHdvcmtQcm9jZXNzUHJveHkoKTsKIAorICAgIHN0YXRpYyBWZWN0
b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBhbGxOZXR3b3JrUHJvY2Vzc2VzKCk7CisgICAg
CisgICAgdm9pZCB0ZXJtaW5hdGUoKSBmaW5hbDsKKyAgICB2b2lkIGRpZFRlcm1pbmF0ZSgpOwor
CiAgICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5Jiwg
TWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVs
YXllZFJlcGx5JiYpOwogCi0gICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShX
ZWJzaXRlRGF0YVN0b3JlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
RnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsKKyAgICBEb3du
bG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBXZWJQcm9j
ZXNzUG9vbCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5m
b0RhdGEmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSk7CiAKICAgICB2b2lkIGZldGNo
V2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBP
cHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
V2Vic2l0ZURhdGEpPiYmKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lv
bklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIwNiwx
NSArMjE4LDEyIEBAIHB1YmxpYzoKICAgICBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSBm
aW5hbCB7IHJldHVybiBtX3Rocm90dGxlcjsgfQogICAgIHZvaWQgdXBkYXRlUHJvY2Vzc0Fzc2Vy
dGlvbigpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKCkgeyByZXR1cm4gbV9w
cm9jZXNzUG9vbDsgfQotCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICB2b2lk
IGRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eSYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGFkZFNlc3Npb24oUmVmPFdlYnNp
dGVEYXRhU3RvcmU+JiYpOwotICAgIGJvb2wgaGFzU2Vzc2lvbihQQUw6OlNlc3Npb25JRCkgY29u
c3Q7Ci0gICAgdm9pZCByZW1vdmVTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKKyAgICB2b2lkIGFk
ZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYpOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihXZWJz
aXRlRGF0YVN0b3JlJik7CiAgICAgCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAg
dm9pZCBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoY29uc3QgU3RyaW5nJiBpbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnkpOwpAQCAtMjI5LDYgKzIzOCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJl
Z2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAgICAg
dm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5n
Jik7CiAKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQg
cmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
IAogICAgIHZvaWQgcmVzb3VyY2VMb2FkRGlkU2VuZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRp
ZmllciwgUmVzb3VyY2VMb2FkSW5mbyYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgT3B0
aW9uYWw8SVBDOjpGb3JtRGF0YVJlZmVyZW5jZT4mJik7CkBAIC0yNDgsNyArMjU5LDE5IEBAIHB1
YmxpYzoKICAgICB2b2lkIHVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyQnVuZGxlSWRlbnRpZmll
cihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAgV2ViQ29va2llTWFuYWdlclBy
b3h5JiBjb29raWVNYW5hZ2VyKCkgeyByZXR1cm4gbV9jb29raWVNYW5hZ2VyLmdldCgpOyB9CisK
KyAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KCkgeyByZXR1cm4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuZ2V0KCk7
IH0KKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHhwY19vYmplY3RfdCB4cGNFbmRwb2ludE1l
c3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2VuZHBvaW50TWVzc2FnZS5nZXQoKTsgfQorI2VuZGlm
CisKIHByaXZhdGU6CisgICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eSgpOworCisgICAg
dm9pZCBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisKICAgICAvLyBBdXhp
bGlhcnlQcm9jZXNzUHJveHkKICAgICBBU0NJSUxpdGVyYWwgcHJvY2Vzc05hbWUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiAiTmV0d29ya2luZyJfczsgfQogCkBAIC0yNTYsNyArMjc5LDYgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mKSBvdmVy
cmlkZTsKICAgICB2b2lkIHByb2Nlc3NXaWxsU2h1dERvd24oSVBDOjpDb25uZWN0aW9uJikgb3Zl
cnJpZGU7CiAKLSAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgIHZvaWQgY2xl
YXJDYWxsYmFja1N0YXRlcygpOwogCiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKQEAg
LTMxMiwxNiArMzM0LDE3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCwgUmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
UHJveHk+JiYpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBI
YXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPj4g
bV9wZW5kaW5nRmV0Y2hXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNr
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRh
Q2FsbGJhY2tzOwogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zQ2FsbGJhY2tzOwogCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkUHJveHlNYXA+IG1fZG93bmxvYWRQcm94eU1hcDsK
KworICAgIFVuaXF1ZVJlZjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9D
T0xfTUFOQUdFUikKICAgICBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSBtX2N1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5OwogI2VuZGlmCisKICAgICBQcm9jZXNzVGhyb3R0bGVyIG1f
dGhyb3R0bGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9jZXNzVGhyb3R0bGVyOjpCYWNrZ3Jv
dW5kQWN0aXZpdHk+IG1fYWN0aXZpdHlGb3JIb2xkaW5nTG9ja2VkRmlsZXM7CiAgICAgUHJvY2Vz
c1Rocm90dGxlcjo6QWN0aXZpdHlWYXJpYW50IG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzOwpA
QCAtMzQ3LDkgKzM3MCwxMSBAQCBwcml2YXRlOgogICAgIHByaXZhdGU6CiAgICAgICAgIFdlYWtQ
dHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICB9OworICAgIE9T
T2JqZWN0UHRyPHhwY19vYmplY3RfdD4gbV9lbmRwb2ludE1lc3NhZ2U7CiAjZW5kaWYKIAotICAg
IEhhc2hTZXQ8UEFMOjpTZXNzaW9uSUQ+IG1fc2Vzc2lvbklEczsKKyAgICBXZWFrSGFzaFNldDxX
ZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmVzOworICAgIFJlZjxXZWJDb29raWVN
YW5hZ2VyUHJveHk+IG1fY29va2llTWFuYWdlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1By
b3h5Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSwxMSBAQCBib29sIE5ldHdvcmtQcm9jZXNzUHJveHk6
OlhQQ0V2ZW50SGFuZGxlCiAgICAgaWYgKG1lc3NhZ2VOYW1lLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0
YWJhc2VYUENDb25zdGFudHM6OnhwY0xhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1l
c3NhZ2VOYW1lKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmRO
ZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICBpZiAobWVz
c2FnZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNo
U2VydmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVzc2FnZU5hbWUpIHsKKyAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+bV9lbmRwb2ludE1lc3NhZ2UgPSBldmVudDsKKyAgICAgICAgZm9yIChhdXRv
JiBkYXRhU3RvcmUgOiBtX25ldHdvcmtQcm9jZXNzLT5tX3dlYnNpdGVEYXRhU3RvcmVzKQorICAg
ICAgICAgICAgZGF0YVN0b3JlLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9BbGxXZWJQ
cm9jZXNzZXMoKTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94
eS5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQsMTcgKzQ0LDE3IEBAIExlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5Ojp+TGVnYWMKIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94
eTo6c3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1fbmV0d29y
a1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgp
LnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisgICAgbV9u
ZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9h
ZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQgTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3Rv
Y29sSUQgY3VzdG9tUHJvdG9jb2xJRCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJv
Y2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGluZygqdGhp
cywgY3VzdG9tUHJvdG9jb2xJRCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElE
KTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0
ZSgpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50KCkuaW52YWxpZGF0ZSgqdGhpcyk7CisgICAgbV9uZXR3b3JrUHJv
Y2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUoKnRoaXMp
OwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3YXNSZWRpcmVj
dGVkVG9SZXF1ZXN0KExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHJl
dmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTQgQEAKICNp
bmNsdWRlICJBdXRoZW50aWNhdG9yTWFuYWdlci5oIgogI2luY2x1ZGUgIkRldmljZUlkSGFzaFNh
bHRTdG9yYWdlLmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk1vY2tBdXRoZW50aWNhdG9yTWFuYWdlci5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vz
c01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAj
aW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJk
Q2FjaGUuaCIKKyNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJX
ZWJLaXQySW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUg
IldlYlByb2Nlc3NDYWNoZS5oIgpAQCAtNzUsNiArNzgsMTAgQEAKICNpbmNsdWRlICJTT0F1dGhv
cml6YXRpb25Db29yZGluYXRvci5oIgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNp
bmNsdWRlICJEZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBzdGF0aWMgYm9vbCBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmln
aW5zOwpAQCAtODMsMTMgKzkwLDE5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dXZWJz
aXRlRGF0YVIKICAgICBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zID0gdHJ1
ZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUq
PiYgbm9uRGVmYXVsdERhdGFTdG9yZXMoKQorc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQs
IFdlYnNpdGVEYXRhU3RvcmUqPiYgYWxsRGF0YVN0b3JlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQoaXNVSVRocmVhZCgpKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6
OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+PiBtYXA7CiAgICAgcmV0dXJuIG1hcDsKIH0K
IAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShGdW5jdGlv
bjx2b2lkKFdlYnNpdGVEYXRhU3RvcmUmKT4mJiBmdW5jdGlvbikKK3sKKyAgICBmb3IgKGF1dG8q
IGRhdGFTdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICAgICAgZnVuY3Rpb24o
KmRhdGFTdG9yZSk7Cit9CisKIFJlZjxXZWJzaXRlRGF0YVN0b3JlPiBXZWJzaXRlRGF0YVN0b3Jl
OjpjcmVhdGVOb25QZXJzaXN0ZW50KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJz
aXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJz
aXN0ZW50OjpObyksIFBBTDo6U2Vzc2lvbklEOjpnZW5lcmF0ZUVwaGVtZXJhbFNlc3Npb25JRCgp
KSk7CkBAIC0xMTUsNyArMTI4LDcgQEAgV2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9y
ZShSZWY8VwogI2VuZGlmCiB7CiAgICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2
aWxlZ2VzKCkpOwotICAgIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVn
aXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMTI4LDE3ICsxNDEsMTIgQEAgV2Vic2l0
ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUoKQogCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7
CiAKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSkgewotICAgICAgICBBU1NFUlQobm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQobV9zZXNz
aW9uSUQpID09IHRoaXMpOwotICAgICAgICBub25EZWZhdWx0RGF0YVN0b3JlcygpLnJlbW92ZSht
X3Nlc3Npb25JRCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQot
ICAgIH0KKyAgICBBU1NFUlQoYWxsRGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhp
cyk7CisgICAgYWxsRGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5yZW1vdmVTZXNzaW9uKCp0aGlzKTsKICNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
Ci0gICAgICAgIGlmIChhdXRvKiBncHVQcm9jZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbklmQ3JlYXRlZCgpKQotICAgICAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVT
ZXNzaW9uKG1fc2Vzc2lvbklEKTsKKyAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BV
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkKKyAgICAgICAgZ3B1UHJvY2Vzc1By
b3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKICNlbmRpZgogfQogCkBAIC0xNTAsOCAr
MTU4LDEwIEBAIHN0YXRpYyBSZWZQdHI8V2Vic2l0ZURhdGFTdG9yZT4mIGdsb2JhbEQKIAogUmVm
PFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKQog
eworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisjZW5kaWYKICAgICBJbml0aWFsaXplV2ViS2l0MigpOwotCiAgICAg
YXV0byYgc3RvcmUgPSBnbG9iYWxEZWZhdWx0RGF0YVN0b3JlKCk7CiAgICAgaWYgKCFzdG9yZSkK
ICAgICAgICAgc3RvcmUgPSBhZG9wdFJlZihuZXcgV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0
YVN0b3JlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKElzUGVyc2lzdGVudDo6WWVzKSwgUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkpOwpAQCAtMTY5LDE3ICsxNzksNDcgQEAgYm9vbCBX
ZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRQogICAgIHJldHVybiAhIWdsb2JhbERl
ZmF1bHREYXRhU3RvcmUoKTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lz
dGVyV2l0aFNlc3Npb25JRE1hcCgpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyV2l0
aFNlc3Npb25JRE1hcCgpCiB7Ci0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBub25EZWZhdWx0
RGF0YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7Ci0gICAgICAgIEFTU0VSVF9VTlVT
RUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0byByZXN1bHQgPSBhbGxEYXRh
U3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3Vs
dCwgcmVzdWx0LmlzTmV3RW50cnkpOworfQorCitXZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0
YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQpCit7CisgICAgcmV0dXJuIGFsbERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklEKTsKK30K
Kworc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBuZXR3b3JrUHJvY2Vzc0ZvclNlc3Np
b24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQoreworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExB
VEZPUk0oV1BFKQorICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgeworICAgICAgICAv
LyBSZXVzZSBhIHByZXZpb3VzIHBlcnNpc3RlbnQgc2Vzc2lvbiBuZXR3b3JrIHByb2Nlc3MgZm9y
IGVwaGVtZXJhbCBzZXNzaW9ucy4KKyAgICAgICAgZm9yIChhdXRvKiBkYXRhU3RvcmUgOiBhbGxE
YXRhU3RvcmVzKCkudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGlmIChkYXRhU3RvcmUtPmlzUGVy
c2lzdGVudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlUmVmKGRhdGFTdG9yZS0+bmV0
d29ya1Byb2Nlc3MoKSk7CisgICAgICAgIH0KICAgICB9CisgICAgcmV0dXJuIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmNyZWF0ZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vzc2lvbklEKTsK
KyAgICByZXR1cm4gTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7
CisjZW5kaWYKIH0KIAotV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3Rp
bmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCkKK05ldHdvcmtQcm9jZXNzUHJveHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNz
KCkKIHsKLSAgICByZXR1cm4gc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCkgPyBub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0
cjsKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpIHsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cyA9IG5ldHdvcmtQcm9jZXNzRm9yU2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOworICAgIH0KKworICAgIHJldHVybiAqbV9u
ZXR3b3JrUHJvY2VzczsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9y
ZTo6bmV0d29ya1Byb2Nlc3MoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYnNp
dGVEYXRhU3RvcmUmPigqdGhpcykubmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZWdpc3RlclByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQpAQCAt
MTk1LDEyICsyMzUsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVucmVnaXN0ZXJQcm9jZXNz
CiAgICAgbV9wcm9jZXNzZXMucmVtb3ZlKHByb2Nlc3MpOwogfQogCi1XZWJQcm9jZXNzUG9vbCog
V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygp
Ci17Ci0gICAgYXV0byBwb29scyA9IHByb2Nlc3NQb29scygxKTsKLSAgICByZXR1cm4gcG9vbHMu
aXNFbXB0eSgpID8gbnVsbHB0ciA6IHBvb2xzLmJlZ2luKCktPmdldCgpOwotfQotCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBp
ZiAobV9oYXNSZXNvbHZlZERpcmVjdG9yaWVzKQpAQCAtNDQwLDI4ICs0NzQsMjEgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseQogI2VuZGlmCiAKICAgICBhdXRvIG5l
dHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVG
b3JEYXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwotICAgIGlmIChuZXR3b3Jr
UHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsKLSAgICAgICAg
YXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlw
ZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNzUG9vbHMoKTsKLSAgICAg
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7Ci0gICAgICAgICAgICBzd2l0Y2gg
KG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNj
ZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6
OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3ModGhpcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJv
Y2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlw
ZSkgeworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKKyAgICAgICAgbmV0d29y
a1Byb2Nlc3MoKTsKKyAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOworICAgICAgICBG
QUxMVEhST1VHSDsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoK
KyAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAgICAgIGNhbGxiYWNrQWdn
cmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKS0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVz
LCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXShXZWJzaXRl
RGF0YSB3ZWJzaXRlRGF0YSkgeworICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZmV0Y2hX
ZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CiAgICAgICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soV1RGTW92ZSh3ZWJzaXRl
RGF0YSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgYXV0byB3ZWJQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVXZWJQcm9jZXNzQWNjZXNzVHlw
ZUZvckRhdGFGZXRjaChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CkBAIC03MjQsMzEgKzc1
MSwyNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uCiAgICAgYm9v
bCBkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEgPSBmYWxzZTsKICNl
bmRpZgogICAgIGF1dG8gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZU5ldHdvcmtQ
cm9jZXNzQWNjZXNzVHlwZUZvckRhdGFSZW1vdmFsKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgp
KTsKLSAgICBpZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NBY2Nlc3NUeXBl
OjpOb25lKSB7Ci0gICAgICAgIGF1dG8gcG9vbHMgPSBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUg
PT0gUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaCA/IGVuc3VyZVByb2Nlc3NQb29scygpIDogcHJv
Y2Vzc1Bvb2xzKCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewot
ICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKLSAgICAgICAg
ICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAg
ICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNl
IFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgotICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotCisgICAgc3dpdGNoIChuZXR3
b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVu
Y2g6CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIEFTU0VSVChtX25ldHdvcmtQ
cm9jZXNzKTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlw
ZTo6T25seUlmTGF1bmNoZWQ6CisgICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7CiAgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAg
ICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhKG1f
c2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3Is
IHByb2Nlc3NQb29sXSB7CisgICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5kZWxldGVXZWJz
aXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQ
ZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwogI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCiAgICAgICAgICAgICBkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVs
ZXRlV2Vic2l0ZURhdGEgPSB0cnVlOwogI2VuZGlmCiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKKyAgICAgICAgYnJlYWs7CiAgICAg
fQogCiAgICAgYXV0byB3ZWJQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVXZWJQcm9jZXNzQWNj
ZXNzVHlwZUZvckRhdGFSZW1vdmFsKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgpKTsKQEAgLTg5
MywxNCArOTEzLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvbgog
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgaWYgKGRhdGFUeXBlcy5j
b250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MpKSB7CiAgICAg
ICAgIGlmICghZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhKSB7Ci0g
ICAgICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVu
ZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MtPmRlbGV0ZVdlYnNp
dGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCku
ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geworICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRv
ci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQog
CiAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CkBAIC05
OTQsMTIgKzEwMDksMTAgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlv
bgogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKICAgICAgICAgICAg
IHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIFBy
b2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNj
ZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3
b3JrUHJvY2Vzcyh0aGlzKTsKKyAgICAgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBl
OjpOb25lOgpAQCAtMTAyMSw3ICsxMDM0LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1v
dmVEYXRhKE9wdGlvbgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFja0FnZ3Jl
Z2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhtX3Nlc3Npb25JRCwg
ZGF0YVR5cGVzLCBvcmlnaW5zLCBjb29raWVIb3N0TmFtZXMsIEhTVFNDYWNoZUhvc3ROYW1lcywg
cmVnaXN0cmFibGVEb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0gewor
ICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMo
bV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2Fj
aGVIb3N0TmFtZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJv
Y2Vzc1Bvb2xdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBl
bmRpbmdDYWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTExODAsMTgg
KzExOTMsMTIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvbgogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyhT
ZWNvbmRzIHNlY29uZHMpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nl
c3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VX
b3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKHNlY29uZHMpLCBNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAw
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKHNlY29uZHMp
LCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRG
b3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNl
dFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZygpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSwgTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0
aW5nOjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZv
clRlc3RpbmcoKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJG
ZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKIH0KIAogI2lmIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0xMjAxLDggKzEyMDgsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0Vu
dHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE1heFN0YXRpc3Rp
Y3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50cnlDb3VudCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNE
b3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMTEsOCArMTIxNyw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG8KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVz
RG93blRvKG1fc2Vzc2lvbklELCBwcnVuZVRhcmdldENvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmll
c0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1Rp
bWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xMjIxLDggKzEyMjYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dEdyYW5kZmF0aGVyaW5nCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bv
b2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lv
bklELCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyaW5nVGltZShtX3Nlc3Npb25JRCwgc2Vj
b25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNv
bmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
MjMxLDIwICsxMjM1LDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVC
ZXQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9z
ZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogICAgIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vz
cy0+ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wgaXNQcmV2YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI1NiwxMiAr
MTI1Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXIKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ByZXZhbGVudFJlc291cmNl
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjczLDEyICsxMjY1LDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoYwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
ICAgIHByb2Nlc3MtPmlzR3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc0dy
YW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI5Miw4ICsxMjc5LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdQogICAgIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVBy
b2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KS5zZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRl
YnVnTW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTMwNywxMCArMTI5Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UHJldmFsZW50UmVzb3UKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bv
b2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzVmVyeVByZXZhbGVudCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzIyLDEyICsxMzA1LDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgICAgICBwcm9jZXNzLT5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTM0MSwxMCArMTMxOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZh
bGVudFIKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRWZXJ5
UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92
YWwoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTM1Myw4ICsxMzI4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91
bGRDbGFzc2lmeQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9y
ZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBj
b25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xMzY4LDIyICsxMzQyLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0U3ViZnJhbWVVbmRlclQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgcHJvY2Vzcy0+c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJh
bWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgVVJMJiBzdWJGcmFtZVVS
TCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzk3LDIzICsx
MzYzLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmQKIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9t
YWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNl
VVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lz
dGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3Qg
VVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
ICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxl
dGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNT
dWJyZXNvdXJjZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVV
UkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHN1YnJlc291
cmNlVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQyNywxMCArMTM4NCw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmkKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNl
VVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJl
Y3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTE0NDIsMTIgKzEzOTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291
cmNlVW5pCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RG
cm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNl
VVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlx
dWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJl
Y3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xNDU5LDEyICsxNDA4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVu
aXF1ZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBV
UkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDc2LDI1ICsxNDIwLDE0
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWUKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0
ZWRGcm9tIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgVVJMJiB1cmxSZWRp
cmVjdGVkRnJvbSwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNSZWRpcmVj
dGluZ1RvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGly
ZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRv
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3Vy
Y2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTE1MDYsNjAgKzE0MzksNDEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpj
bGVhclByZXZhbGVudFJlcwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFyUHJldmFsZW50UmVzb3VyY2Uo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmNsZWFyUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIHByb2Nlc3MtPnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Npb25J
RCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkucmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklE
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c3VibWl0VGVsZW1ldHJ5KCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25J
RCwgW10geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50KFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIFNob3VsZEdyYW5kZmF0
aGVyU3RhdGlzdGljcyBzaG91bGRHcmFuZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAgICAgCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNj
aGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVkU2lu
Y2UsIHNob3VsZEdyYW5kZmF0aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlB
bmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhl
ciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlE
YXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogCi0gICAgc3RydWN0IENhbGxiYWNrQWdncmVnYXRvciA6IFJlZkNvdW50ZWQ8Q2Fs
bGJhY2tBZ2dyZWdhdG9yPiB7Ci0gICAgICAgIENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJk
UGFydHlEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICBzdHJ1Y3QgTG9jYWxDYWxs
YmFja0FnZ3JlZ2F0b3IgOiBSZWZDb3VudGVkPExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yPiB7Cisg
ICAgICAgIExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVj
dG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICAgICAgOiBtX2NvbXBsZXRpb25IYW5kbGVyKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgICAgICB9OwogCi0gICAgICAgIH5DYWxsYmFja0FnZ3Jl
Z2F0b3IoKQorICAgICAgICB+TG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IoKQogICAgICAgICB7CiAg
ICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC0xNTc0LDM4ICsxNDg4
LDMxIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3QKICAgICAgICAg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+IG1fY29tcGxldGlvbkhhbmRsZXI7CiAgICAgICAgIFZl
Y3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiBtX3Jl
c3VsdHM7CiAgICAgfTsKLQotICAgIFJlZlB0cjxDYWxsYmFja0FnZ3JlZ2F0b3I+IGNhbGxiYWNr
QWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQ
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpLmdldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhU3VtbWFyeShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vz
c1Bvb2xdKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlE
YXRhPiYmIGRhdGEpIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFJl
c3VsdChXVEZNb3ZlKGRhdGEpKTsKLSAgICAgICAgICAgIH0pOworICAgIAorICAgIGF1dG8gbG9j
YWxDYWxsYmFja0FnZ3JlZ2F0b3IgPSBhZG9wdFJlZihuZXcgTG9jYWxDYWxsYmFja0FnZ3JlZ2F0
b3IoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKKyAgICAKKyAgICBhdXRvIHd0ZkNhbGxi
YWNrQWdncmVnYXRvciA9IFdURjo6Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3JdIHsK
KyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1
bW1hcnkobV9zZXNzaW9uSUQsIFtsb2NhbENhbGxiYWNrQWdncmVnYXRvcl0oVmVjdG9yPFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYgZGF0YSkgeworICAg
ICAgICAgICAgbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFJlc3VsdChXVEZNb3ZlKGRhdGEp
KTsKICAgICAgICAgfSk7Ci0gICAgfQorICAgIH0pOworICAgIAorICAgIGZvciAoYXV0byogcHJv
Y2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHBy
b2Nlc3NQb29sLT5zZW5kUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShbd3Rm
Q2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNj
aGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0
aWNzIHNob3VsZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDbGVh
ckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgeyB9LCBzaG91bGRHcmFuZGZhdGhl
ciwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Np
b25JRCwgeyB9LCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRh
dGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNvb2tp
ZUJsb2NraW5nVXBkYXRlKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNvb2tpZUJs
b2NraW5nVXBkYXRlKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRz
UHJvY2Vzc2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xNjE0LDI0ICsxNTIxLDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVT
dGF0aXN0aWMKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nl
c3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9j
ZXNzaW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+c3RhdGlzdGljc0RhdGFi
YXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb21wbGV0aW9u
SGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdGF0aXN0aWNzRGF0YWJhc2VI
YXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vj
b25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xNjQzLDIyICsxNTM5LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFz
dFNlZW4oY29uc3QKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9j
ZXNzLT5zZXRMYXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZG9tYWluSURFeGlzdHNJ
bkRhdGFiYXNlKGludCBkb21haW5JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAg
ICAgICAgIHByb2Nlc3MtPmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9t
YWluSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZG9tYWluSURFeGlzdHNJbkRh
dGFiYXNlKG1fc2Vzc2lvbklELCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhj
b25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDEsIGNvbnN0IFVSTCYgdG9wRnJh
bWVVcmwyLCBTZWNvbmRzIGxhc3RTZWVuLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgU2Vjb25k
cyBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgYm9vbCBp
c1ByZXZhbGVudCwgYm9vbCBpc1ZlcnlQcmV2YWxlbnQsIHVuc2lnbmVkIGRhdGFSZWNvcmRzUmVt
b3ZlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTY3MCwxMCArMTU1OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNG
b3IKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5tZXJn
ZVN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwxIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVuLCBo
YWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRo
ZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5tZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVcmwxIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwy
IH0sIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJl
Y29yZHNSZW1vdmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYg
dXJsLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFsbEJ1dENv
b2tpZURhdGFSZW1vdmFsLCBib29sIGlzUHJldmFsZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjg1LDE4ICsxNTcwLDE0IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGlu
ZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNl
ckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1By
ZXZhbGVudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRl
cmFjdGlvbiwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxl
bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZh
bHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNz
aW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wg
dmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTE3MDQsOCArMTU4NSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVz
b3UKICAgICB1c2VFeHBsaWNpdElUUFN0YXRlKCk7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0SXNS
dW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFs
bFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucyk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xNzE2LDcgKzE1OTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omdl
dEFsbFN0b3JhZ2VBY2NlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB3ZWJQYWdlLT5w
cm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3Jh
Z2VBY2Nlc3NFbnRyaWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhtX3Nlc3Np
b25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAKQEAgLTE3MjQsOCArMTYw
NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXIKIHsKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1l
VG9MaXZlVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFj
dGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTczOSwxMCArMTYxOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
bG9nVXNlckludGVyYWN0aW8KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgcHJvY2Vzcy0+bG9nVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmxvZ1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24o
Y29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xNzU0LDEzICsxNjMwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpo
YXNIYWRVc2VySW50ZXJhYwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBw
cm9jZXNzLT5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hp
cE9ubHlJbkRhdGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVybCwgY29uc3QgVVJMJiB0b3BVcmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
NzcyLDEzICsxNjQyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9u
bAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlbGF0
aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3OTIs
MTAgKzE2NTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0CiAg
ICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFy
VXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wg
aXNHcmFuZGZhdGhlcmVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xODA5LDEwICsxNjcwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRH
cmFuZGZhdGhlcmVkKAogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgcHJvY2Vzcy0+c2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyZWQo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRm
YXRoZXJlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODIxLDEwICsxNjc5LDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZQogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0YWJhc2UobV9z
ZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRD
cm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGZyb21V
UkwsIGNvbnN0IFVSTCYgdG9VUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE4MzMsNjIgKzE2ODgsMzggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRDcm9zc1NpdGVMb2FkVwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZv
clRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgZnJvbVVS
TCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvVVJMIH0sIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB0b1VSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25G
b3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3Rp
bmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkucmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRl
c3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmws
IGJvb2wgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5kZWxldGVDb29raWVzRm9yVGVzdGluZyht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5jbHVkZUh0
dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5kZWxldGVDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNM
b2NhbFN0b3JhZ2VGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPmhhc0xvY2FsU3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVy
KGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0xvY2FsU3RvcmFnZShtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0lzb2xhdGVkU2Vzc2lv
bkZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+aGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2Up
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0
U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkRG93bmdy
YWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0xOTE5LDEwICsxNzUwLDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29vawogICAgICAgICAgICAgd2ViUHJvY2Vz
cy5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKGJsb2NraW5nTW9kZSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2Rl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9k
ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50Rm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5MzAsMTAgKzE3NTgsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0CiAgICAgYXV0byBmbGFnID0gZW5hYmxlZCA/IFdl
YkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZZXMgOiBXZWJDb3JlOjpT
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87CiAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRW5ibGVT
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRT
aG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklE
LCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZUZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTQxLDIwICsxNzY2LDE0IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3QKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICBhdXRvIG1vZGUgPSBlbmFibGVkID8gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tpZXMgOiBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0
ZURhdGFSZW1vdmFsTW9kZTo6Tm9uZTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5z
ZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IG1vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29v
a2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0Zv
clRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJz
dFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhjb25zdCBVUkwmIGZpcnN0UGFydHlVUkws
IGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE5NjYsOCArMTc4NSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3QKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWlu
Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURv
bWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZpcnN0UGFydHlVUkwuaG9zdCgpLnRvU3RyaW5n
KCksIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhjb25zdCBVUkwmIGNu
YW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xOTc5LDE4ICsxNzk3LDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3QKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q05B
TUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAjZW5kaWYgLy8g
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U3luY0xvY2FsU3RvcmFnZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3JhZ2UoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFs
ZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk5OCw4ICsxODExLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJ
U1RJQ1MpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNl
cyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1f
c2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0oc2Vjb25kcyk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTIw
MDksMjYgKzE4MjEsMTIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNh
cAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50
UmVzb3VyY2VzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNldENh
Y2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0Q2FjaGVN
YXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRpZgog
fQogCi1ib29sIFdlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlBy
b2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bv
b2xEYXRhU3RvcmUgPSBwcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCkpCi0gICAgICAgIHJl
dHVybiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9PSB0aGlzOwotICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2Vzc1Byb3h5ID0gcHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgcmV0
dXJuIG5ldHdvcmtQcm9jZXNzUHJveHktPmhhc1Nlc3Npb24obV9zZXNzaW9uSUQpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQogSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRl
RGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBjb25zdAogewogICAgIEhhc2hT
ZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gcHJvY2Vzc1Bvb2xzOwpAQCAtMjA0Myw5ICsxODQx
LDYgQEAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRAogICAgIGlmIChw
cm9jZXNzUG9vbHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9uZSBv
ZiB0aGUgbGVnYWN5IGRhdGEgc3RvcmVzLgogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAo
IWlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKCpwcm9jZXNzUG9vbCkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0KICAgICAgICAgICAgIHByb2Nlc3NQb29scy5hZGQocHJvY2Vzc1Bvb2wpOwog
ICAgICAgICAgICAgaWYgKHByb2Nlc3NQb29scy5zaXplKCkgPT0gbGltaXQpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC0yMDg0LDggKzE4NzksNyBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVN
ZWRpYUtleUZpbGUoY29uc3QgCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dTcGVjaWZp
Y0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNlcnRpZmljYXRlSW5mbyogY2VydGlm
aWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFND
ZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwg
MCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZp
Y2F0ZUluZm8oKSwgaG9zdCksIDApOwogfQogCiBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmln
aW5EYXRhPiBXZWJzaXRlRGF0YVN0b3JlOjptZWRpYUtleU9yaWdpbnMoY29uc3QgU3RyaW5nJiBt
ZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KQpAQCAtMjE0MCw2ICsxOTM0LDQ5IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVtb3ZlTWVkaWFLZXlzKGMKICAgICB9CiB9CiAKK3ZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYg
d2ViUHJvY2Vzc1Byb3h5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbkluZm8mKT4mJiByZXBseSkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgd2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2Vi
UHJvY2Vzc1Byb3h5KSwgcmVwbHkgPSBXVEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25J
bmZvKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246Omlk
ZW50aWZpZXJJc1ZhbGlkKGNvbm5lY3Rpb25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vz
c1Byb3h5ICYmIHdlYWtUaGlzKSkgeworICAgICAgICAgICAgdGVybWluYXRlTmV0d29ya1Byb2Nl
c3MoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lGKGlzUGVyc2lzdGVudCgpLCBQcm9jZXNz
LCAiZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOiBGYWlsZWQgZmlyc3QgYXR0ZW1wdCwgcmV0
cnlpbmciKTsKKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKCp3ZWJQcm9jZXNzUHJveHksIFdURk1vdmUocmVwbHkpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7CisgICAg
fSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5l
dHdvcmtQcm9jZXNzUHJveHkmKQoreworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5kaWRUZXJtaW5hdGUoKTsKKyAgICBtX25ldHdvcmtQcm9jZXNz
ID0gbnVsbHB0cjsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp0ZXJtaW5hdGVOZXR3b3Jr
UHJvY2VzcygpCit7CisgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICByZXR1cm47
CisgICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7CisgICAgbV9uZXR3b3JrUHJvY2Vz
cyA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9j
ZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByZXBhcmVU
b1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzV2ls
bFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKK30KKwordm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQoreworICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsKK30KKwogYm9vbCBXZWJzaXRl
RGF0YVN0b3JlOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpIGNvbnN0CiB7CiAjaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIxNjksMTcgKzIwMDYsMTUgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdAogICAgICAgICAKICAgICAg
ICAgcmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgCi0gICAgICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgcHJv
Y2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpKTsK
KyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpLCAwKTsK
KyAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAgICAg
ICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6
OldlYlByb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHRydWUpLCBtX3Nl
c3Npb25JRCk7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9v
bC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpKTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpLCAwKTsKKyAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgIHByb2Nlc3NQb29s
LT5zZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChmYWxzZSksIG1fc2Vzc2lvbklEKTsKLSAgICB9
CiAKICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkID0gZmFsc2U7CiAjZWxzZQpA
QCAtMjE5MSw4ICsyMDI2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNr
KEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKGNh
bGxiYWNrKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5n
RXZlbnQodHJ1ZSkpOworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRy
dWUpLCAwKTsKICAgICB9CiAgICAgCiAgICAgbV9zdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayk7CkBAIC0yMjExLDggKzIwNDUsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFJlc291cmNlTG9hZFN0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGVidWdNb2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CiAgICAgVU5VU0VEX1BBUkFNKGNv
bXBsZXRpb25IYW5kbGVyKTsKQEAgLTIyMjcsMjAgKzIwNjAsMTUgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjppc1Jlc291cmNlTG9hZFN0YQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1l
cmFsKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7
CisjZW5kaWYKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRp
b25EZWJ1Z01vZGUoYm9vbCBlbmFibGVkKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOwogfQog
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIyNjIsNDggKzIwOTAs
MTkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZAogfQogI2VuZGlm
CiAKLVZlY3RvcjxXZWJDb3JlOjpDb29raWU+IFdlYnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29r
aWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29weVRvVmVjdG9yKG1fcGVuZGluZ0Nvb2tpZXMp
OwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFkZFBlbmRpbmdDb29raWUoY29uc3QgV2Vi
Q29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmVJZihb
JmNvb2tpZV0oYXV0byYgcGVuZGluZ0Nvb2tpZSkgewotICAgICAgICByZXR1cm4gcGVuZGluZ0Nv
b2tpZS5pc0tleUVxdWFsKGNvb2tpZSk7Ci0gICAgfSk7Ci0gICAgbV9wZW5kaW5nQ29va2llcy5h
ZGQoY29va2llKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29v
a2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tp
ZXMucmVtb3ZlKGNvb2tpZSk7Ci19Ci0gICAgCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFy
UGVuZGluZ0Nvb2tpZXMoKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMuY2xlYXIoKTsKLX0KLQog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgIGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNz
UG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmZsdXNoQ29va2llcyhzZXNzaW9uSUQoKSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmZsdXNoQ29v
a2llcyhzZXNzaW9uSUQoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0
KGJvb2wgYWxsb3dzKQogewotICAgIGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNT
TENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQ6OlJlcGx5KCksIDApOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwgTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNv
Y2tldDo6UmVwbHkoKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJDYWNo
ZWRDcmVkZW50aWFscygpCiB7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vz
c1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+Y2xlYXJDYWNo
ZWRDcmVkZW50aWFscyhzZXNzaW9uSUQoKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9uSUQo
KSksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpc3BhdGNoT25RdWV1ZShGdW5j
dGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pCkBAIC0yMzI5LDggKzIxMjgsNiBAQCBXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0CiAKICAgICByZXNvbHZlRGlyZWN0b3JpZXNJ
Zk5lY2Vzc2FyeSgpOwogCi0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBlbmRpbmdD
b29raWVzKCk7Ci0KICAgICBhdXRvIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBt
X2NvbmZpZ3VyYXRpb24tPnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUhh
bmRsZTsKICAgICBpZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgp
KQpAQCAtMjQzNSw3ICsyMjMyLDEwIEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNp
dGVEYXRhU3QKICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVkID0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZDsKICNlbmRpZgogICAgIHBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMocGFy
YW1ldGVycyk7Ci0KKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1p
c3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKKyNl
bmRpZgorICAgIAogICAgIHJldHVybiBwYXJhbWV0ZXJzOwogfQogCkBAIC0yNDY1LDEwICsyMjY1
LDYgQEAgQVBJOjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6OgogICAgIHJldHVy
biAqbV9jb29raWVTdG9yZTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkaWRDcmVhdGVO
ZXR3b3JrUHJvY2VzcygpCi17Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxT
dG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRy
YWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlm
ICghaXNQZXJzaXN0ZW50KCkpIHsKQEAgLTI0NzYsMjMgKzIyNzIsMTUgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKS5nZXRMb2NhbFN0b3Jh
Z2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUoZGV0YWlscykpOwotICAgICAgICB9KTsKLSAgICAgICAgLy8gRklYTUU6
IFN1cHBvcnQgZmV0Y2hpbmcgZnJvbSBtdWx0aXBsZSBwb29scy4KLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIEFTU0VSVCghY29tcGxldGlvbkhhbmRsZXIpOworICAgIG5ldHdvcmtQcm9jZXNz
KCkuZ2V0TG9jYWxTdG9yYWdlRGV0YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7CisgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWlscykpOworICAgIH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgcHJvY2Vzcy0+cmVzZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldFF1b3RhKG1fc2Vzc2lvbklE
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpA
QCAtMjUxOCw3ICsyMzA2LDEyIEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6aHR0cDNFbmFibGVk
KCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9Ci0jZW5kaWYKKworYm9vbCBXZWJzaXRlRGF0YVN0
b3JlOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcm
KQoreworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oQ09DT0EpCiAK
ICNpZiAhVVNFKEdMSUIpCiBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2
aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkKQEAgLTI1MzAsMzUgKzIzMjMsMTggQEAg
V1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERldgogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEoVVJMJiYgb2xkTmFtZSwgVVJMJiYg
bmV3TmFtZSwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29s
OjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOwotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJl
bmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRh
dGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICAgICAgfQotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQs
IG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKQogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0
aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNBcHBCb3VuZFNlc3Np
b24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y2xlYXJBcHBCb3VuZFNlc3Npb24o
bV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklE
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZChDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yNTgwLDcgKzIzNTYsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvCiAKICAgICBwcm9wYWdhdGVB
cHBCb3VuZERvbWFpbnMoZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpLmdldCgpLCAqYXBwQm91bmRE
b21haW5zKTsKIAotICAgIGZvciAoYXV0byogc3RvcmUgOiBub25EZWZhdWx0RGF0YVN0b3Jlcygp
LnZhbHVlcygpKQorICAgIGZvciAoYXV0byogc3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVz
KCkpCiAgICAgICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhzdG9yZSwgKmFwcEJvdW5kRG9t
YWlucyk7CiB9CiAKQEAgLTI1ODgsMTAgKzIzNjQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldEFwcEJvdW5kRG9tYWluCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0QXBwQm91bmREb21haW5zRm9yUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBcHBCb3VuZERvbWFpbnNGb3JS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogI2VuZGlmCiAKQEAgLTI1OTksMTYgKzIzNzIsMjYgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjp1cGRhdGVCdW5kbGVJZGVudAogewogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5k
bGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50
aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxl
SWRlbnRpZmllcihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNz
KCkuY2xlYXJCdW5kbGVJZGVudGlmaWVyKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cit9CisK
K3N0YXRpYyBib29sIG5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaFNob3VsZEZhaWxGb3JUZXN0aW5n
IHsgZmFsc2UgfTsKKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYWtlTmV4dE5ldHdvcmtQcm9j
ZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKQoreworICAgIG5leHROZXR3b3JrUHJvY2Vzc0xhdW5j
aFNob3VsZEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKK30KKworYm9vbCBXZWJzaXRlRGF0YVN0b3Jl
OjpzaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKQorewor
ICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaFNob3VsZEZh
aWxGb3JUZXN0aW5nLCBmYWxzZSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgJKHJldmlzaW9u
IDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQAogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAjaW5jbHVkZSA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KKyNpbmNsdWRl
IDx3dGYvT1NPYmplY3RQdHIuaD4KKyNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4K
ICNlbmRpZgogCiAjaWYgVVNFKENVUkwpCkBAIC03OSw2ICs4MSw3IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7CiBjbGFzcyBTZWNLZXlQcm94eVN0b3Jl
OwogY2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1By
b3h5OwogY2xhc3MgU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBXZWJDZXJ0aWZp
Y2F0ZUluZm87CiBjbGFzcyBXZWJQYWdlUHJveHk7CkBAIC04OCw2ICs5MSw4IEBAIGNsYXNzIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKIGVudW0gY2xhc3MgQ2FjaGVNb2RlbCA6IHVp
bnQ4X3Q7CiBlbnVtIGNsYXNzIFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24gOiB1aW50OF90OwogZW51
bSBjbGFzcyBXZWJzaXRlRGF0YVR5cGUgOiB1aW50MzJfdDsKKworc3RydWN0IE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbkluZm87CiBzdHJ1Y3QgV2Vic2l0ZURhdGFSZWNvcmQ7CiBzdHJ1Y3QgV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM7CiAKQEAgLTExMyw3ICsxMTgsMTIgQEAgcHVibGljOgog
ICAgIFdlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYm
LCBQQUw6OlNlc3Npb25JRCk7CiAgICAgfldlYnNpdGVEYXRhU3RvcmUoKTsKIAotICAgIHN0YXRp
YyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9u
SUQoUEFMOjpTZXNzaW9uSUQpOworICAgIHN0YXRpYyB2b2lkIGZvckVhY2hXZWJzaXRlRGF0YVN0
b3JlKEZ1bmN0aW9uPHZvaWQoV2Vic2l0ZURhdGFTdG9yZSYpPiYmKTsKKyAgICAKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0OworICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKCk7CisKKyAgICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9y
ZSogZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOwogCiAgICAg
Ym9vbCBpc1BlcnNpc3RlbnQoKSBjb25zdCB7IHJldHVybiAhbV9zZXNzaW9uSUQuaXNFcGhlbWVy
YWwoKTsgfQogICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2Vzc2lvbklEOyB9CkBAIC0xMjMsNiArMTMzLDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBjb25z
dCBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBwcm9jZXNzZXMoKSBjb25zdCB7IHJldHVy
biBtX3Byb2Nlc3NlczsgfQogCisgICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24o
V2ViUHJvY2Vzc1Byb3h5JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb25JbmZvJik+JiYpOworICAgIHZvaWQgdGVybWluYXRlTmV0d29ya1Byb2Nl
c3MoKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0
aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzZW5kTmV0d29ya1By
b2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7CisgICAgdm9pZCBzZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChO
ZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CisgICAgc3RhdGljIHZvaWQgbWFrZU5leHROZXR3b3JrUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCk7CisgICAgc3RhdGljIGJvb2wgc2hvdWxkTWFrZU5l
eHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCk7CisKICAgICBib29sIHJlc291
cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZChib29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUoKSBjb25zdDsKQEAgLTIzOSwxNSArMjU4LDggQEAgcHVibGljOgogCiAgICAg
RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1
cm4gbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bv
b2wqIHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlz
QXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycyBwYXJhbWV0ZXJzKCk7CiAKLSAgICBWZWN0b3I8V2ViQ29y
ZTo6Q29va2llPiBwZW5kaW5nQ29va2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nv
b2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29r
aWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVz
KCk7CiAgICAgdm9pZCBmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
ICAgICB2b2lkIGNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKIApAQCAtMjU1LDYgKzI2NywxMSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYp
OwogCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENF
bmRwb2ludFRvV2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmKTsKKyAgICB2b2lkIHNlbmROZXR3
b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMoKTsKKyNlbmRpZgorCiAjaWYg
VVNFKENVUkwpCiAgICAgdm9pZCBzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXZWJDb3JlOjpDdXJs
UHJveHlTZXR0aW5ncyYmKTsKICAgICBjb25zdCBXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5ncyYg
bmV0d29ya1Byb3h5U2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX3Byb3h5U2V0dGluZ3M7IH0K
QEAgLTI4MCw4ICsyOTcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNb2NrV2ViQXV0aGVudGlj
YXRpb25Db25maWd1cmF0aW9uKFdlYkNvcmU6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3Vy
YXRpb24mJik7CiAjZW5kaWYKIAotICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsK
LQogICAgIGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9u
KCkgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLmdldCgpOyB9CiAKICAgICBXZWJzaXRlRGF0YVN0
b3JlQ2xpZW50JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQpAQCAtMjkxLDYg
KzMwNiw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShV
UkwmJiwgVVJMJiYsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOwogCisgICAgYm9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9y
VGVzdGluZyhjb25zdCBTdHJpbmcmKTsKKwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04p
CiAgICAgV2ViRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyJiBkZXZp
Y2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXIoKSB7IHJldHVybiBtX2Rldmlj
ZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcjsgfQogI2VuZGlmCkBAIC0zNjcs
NyArMzg0LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29u
c3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNp
bmNlKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRp
YUtleXNTdG9yYWdlRGlyZWN0b3J5LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luRGF0YT4mKTsKIAotICAgIHZvaWQgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsK
KyAgICB2b2lkIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogCiAjaWYgRU5BQkxFKEFQUF9C
T1VORF9ET01BSU5TKQogICAgIHN0YXRpYyBPcHRpb25hbDxIYXNoU2V0PFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluPj4gYXBwQm91bmREb21haW5zSWZJbml0aWFsaXplZCgpOwpAQCAtNDA3LDgg
KzQyNCw2IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6U291cE5ldHdvcmtQcm94eVNldHRpbmdz
IG1fbmV0d29ya1Byb3h5U2V0dGluZ3M7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8V2ViQ29yZTo6
Q29va2llPiBtX3BlbmRpbmdDb29raWVzOwotICAgIAogICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nl
c3NQcm94eT4gbV9wcm9jZXNzZXM7CiAKICAgICBib29sIG1faXNJdHBTdGF0ZUV4cGxpY2l0bHlT
ZXQgeyBmYWxzZSB9OwpAQCAtNDI5LDYgKzQ0NCw3IEBAIHByaXZhdGU6CiAgICAgVW5pcXVlUmVm
PFdlYnNpdGVEYXRhU3RvcmVDbGllbnQ+IG1fY2xpZW50OwogCiAgICAgUmVmUHRyPEFQSTo6SFRU
UENvb2tpZVN0b3JlPiBtX2Nvb2tpZVN0b3JlOworICAgIFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1By
b3h5PiBtX25ldHdvcmtQcm9jZXNzOwogCiAjaWYgSEFWRShBUFBfU1NPKQogICAgIFVuaXF1ZVJl
ZjxTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcj4gbV9zb0F1dGhvcml6YXRpb25Db29yZGluYXRv
cjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNp
dGVEYXRhU3RvcmVDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0JKHJldmlzaW9uIDI2
NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNp
dGVEYXRhU3RvcmVDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEyIEBACiAK
ICNpbXBvcnQgIkNvb2tpZVN0b3JhZ2VVdGlsc0NGLmgiCiAjaW1wb3J0ICJEZWZhdWx0V2ViQnJv
d3NlckNoZWNrcy5oIgorI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2ltcG9ydCAi
U2FuZGJveFV0aWxpdGllcy5oIgogI2ltcG9ydCAiU3RvcmFnZU1hbmFnZXIuaCIKICNpbXBvcnQg
IldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oIgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNL
ZXlzLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIldlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogI2ltcG9ydCAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnMuaCIKICNpbXBvcnQgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CkBAIC00NCw2
ICs0Niw3IEBACiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9Q
cm9jZXNzUHJpdmlsZWdlLmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+CisjaW1wb3J0IDx3dGYvY29j
b2EvRW50aXRsZW1lbnRzLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNTYyLDQgKzU2NSwyOCBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlaW5pdGlhbGl6ZUFwcEJvCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJzaXRl
RGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBT
dHJpbmcmIGVudGl0bGVtZW50KQoreworICAgIHJldHVybiBXVEY6Omhhc0VudGl0bGVtZW50KG5l
dHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVudGl0bGVtZW50
LnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3Jr
UHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykK
K3sKKyAgICBpZiAocHJvY2Vzcy5zdGF0ZSgpICE9IEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6U3Rh
dGU6OlJ1bm5pbmcpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBjb25uZWN0aW9uID0gcHJv
Y2Vzcy5jb25uZWN0aW9uKCk7CisgICAgaWYgKCFjb25uZWN0aW9uKQorICAgICAgICByZXR1cm47
CisgICAgYXV0byBtZXNzYWdlID0gbmV0d29ya1Byb2Nlc3MoKS54cGNFbmRwb2ludE1lc3NhZ2Uo
KTsKKyAgICBpZiAoIW1lc3NhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICB4cGNfY29ubmVjdGlv
bl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbi0+eHBjQ29ubmVjdGlvbigpLCBtZXNzYWdlKTsKK30K
Kwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRv
QWxsV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3Nl
cykKKyAgICAgICAgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MocHJv
Y2Vzcyk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRh
L2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCShy
ZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9j
dXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE5ldHdvcmtQcm94eVNlCiB7CiAgICAgbV9w
cm94eVNldHRpbmdzID0gV1RGTW92ZShwcm94eVNldHRpbmdzKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRU
b05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1By
b3h5U2V0dGluZ3MobV9zZXNzaW9uSUQsIG1fcHJveHlTZXR0aW5ncykpOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNl
dHRpbmdzKG1fc2Vzc2lvbklELCBtX3Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3Jl
U291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNv
dXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6cGxhdGZvcm1TZXROZXR3b3IKICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaWdu
b3JlVExTRXJyb3JzID0gbV9pZ25vcmVUTFNFcnJvcnM7CiAgICAgbmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLnByb3h5U2V0dGluZ3MgPSBtX25ldHdvcmtQcm94eVNldHRpbmdzOwogCi0gICAgaWYg
KGF1dG8qIHByb2Nlc3NQb29sID0gcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9u
cygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Np
b25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0
aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9y
YWdlRW5hYmxlZChib29sIGVuYWJsZWQpCkBAIC01NCw4ICs1Myw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWQKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9wZXJz
aXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gZW5hYmxlZDsKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5k
VG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFBlcnNpc3Rl
bnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQobV9zZXNzaW9uSUQsIG1fcGVyc2lzdGVudENyZWRl
bnRpYWxTdG9yYWdlRW5hYmxlZCkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQo
bV9zZXNzaW9uSUQsIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCksIDApOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9y
ZVRMU0Vycm9ycykKQEAgLTY0LDE1ICs2MiwxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dElnbm9yZVRMU0Vycm9yCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faWdub3JlVExTRXJyb3Jz
ID0gaWdub3JlVExTRXJyb3JzOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0SWdub3JlVExTRXJyb3JzKG1fc2Vzc2lvbklELCBt
X2lnbm9yZVRMU0Vycm9ycykpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX3Nlc3Npb25JRCwgbV9pZ25vcmVU
TFNFcnJvcnMpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXROZXR3b3JrUHJv
eHlTZXR0aW5ncyhXZWJDb3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3MmJiBzZXR0aW5ncykK
IHsKICAgICBtX25ldHdvcmtQcm94eVNldHRpbmdzID0gV1RGTW92ZShzZXR0aW5ncyk7Ci0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX3Nlc3Npb25JRCwgbV9uZXR3b3JrUHJveHlTZXR0aW5n
cykpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fc2Vzc2lvbklELCBtX25ldHdvcmtQcm94eVNldHRp
bmdzKSwgMCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCShyZXZp
c2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQ
cm94eUdMaWIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE8KICAgICAgICAgaWYgKCFkYXRhU3RvcmUpIHsK
ICAgICAgICAgICAgIC8vIFByZXdhcm1lZCBwcm9jZXNzZXMgZG9uJ3QgaGF2ZSBhIFdlYnNpdGVE
YXRhU3RvcmUgeWV0LCBzbyB1c2UgdGhlIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSBmcm9tIHRo
ZSBXZWJQcm9jZXNzUG9vbC4KICAgICAgICAgICAgIC8vIFRoZSBwcm9jZXNzIHdvbid0IGJlIHVz
ZWQgaWYgY3VycmVudCBXZWJzaXRlRGF0YVN0b3JlIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBXZWJQ
cm9jZXNzUG9vbCBwcmltYXJ5IG9uZS4KLSAgICAgICAgICAgIGRhdGFTdG9yZSA9IG1fcHJvY2Vz
c1Bvb2wtPndlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICAgICAgICAgIGRhdGFTdG9yZSA9IFdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKICAgICAgICAgfQogCiAgICAg
ICAgIEFTU0VSVChkYXRhU3RvcmUpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291
cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCShyZXZpc2lv
biAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eVNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAKKyNpbmNs
dWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1l
c3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKIApAQCAtMzMsOCArMzQsOCBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3Ry
aW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9yYWdl
VHlwZSkKIHsKLSAgICBtX2Nvb2tpZVBlcnNpc3RlbnRTdG9yYWdlTWFwLnNldChzZXNzaW9uSUQs
IHN0ZDo6bWFrZV9wYWlyKHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOwotICAgIHByb2Nlc3NQ
b29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9y
YWdlVHlwZSkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0
ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSksIDApOwogfQog
CiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2ll
UGVyc2lzdGVudFN0b3JhZ2VUeXBlJiBzdG9yYWdlVHlwZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAJKHJl
dmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vz
c1Bvb2xTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTQgKzM3LDYgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQog
ewotICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiBkZWZhdWx0U2Vzc2lvblBh
cmFtZXRlcnMgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVyczsKLSAgICBzdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnNl
c3Npb25JRCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
UGF0aCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlw
ZSk7Ci0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBkZWZhdWx0U2Vzc2lv
blBhcmFtZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fd2Vic2l0
ZURhdGFTdG9yZS0+cGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpOwotICAgICAg
ICBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuaWdub3JlVExTRXJyb3JzID0gbV93ZWJzaXRlRGF0
YVN0b3JlLT5pZ25vcmVUTFNFcnJvcnMoKTsKLSAgICAgICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0
ZXJzLnByb3h5U2V0dGluZ3MgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm94eVNldHRp
bmdzKCk7Ci0gICAgfQotCiAgICAgcGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kgPSBtX2lu
aXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5OwogICAgIHBhcmFtZXRlcnMubGFuZ3VhZ2VzID0g
dXNlclByZWZlcnJlZExhbmd1YWdlcygpOwogICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQ
RGF0YWJhc2UgPSB0cnVlOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaAkocmV2
aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBA
CiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvSFRUUENvb2tpZUFjY2VwdFBvbGljeS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKSW5k
ZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI2NzUzNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDk4IEBACisyMDIwLTA5LTI0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9t
IFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVEYXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vc3QgY2hhbmdlcyB0byB0ZXN0cyBhcmUganVz
dCBjYWxsaW5nIGEgZnVuY3Rpb24gb24gdGhlIFdLV2Vic2l0ZURhdGFTdG9yZSBpbnN0ZWFkIG9m
IHRoZSBXS1Byb2Nlc3NQb29sCisgICAgICAgIGJlY2F1c2Ugd2Ugd2FudCB0byBkbyBzb21ldGhp
bmcgd2l0aCB0aGUgbmV0d29yayBwcm9jZXNzIGFuZCBpdCBoYXMgYSBuZXcgb3duZXIuCisgICAg
ICAgIEV4Y2VwdGlvbnMgYXJlIG5vdGVkIGlubGluZS4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24u
bW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6ZG93bmxvYWRBdFJhdGUpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW06CisgICAg
ICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lE
QkluZGV4VXBncmFkZVRvVjIubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1t
OgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVBy
b2Nlc3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5k
SW1taW5lbnRseS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tOgorICAgICAgICAoVEVT
VCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3Jh
Z2VQZXJzaXN0ZW5jZS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW06CisgICAgICAgIChURVNUKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNz
Q3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tOgorICAgICAgICAoY2hlY2tSZWNvdmVyeUFm
dGVyQ3Jhc2gpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJv
Y2Vzc1N3YXBPbk5hdmlnYXRpb24ubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgIFRoaXMgdGVzdCB3YXMgbWFraW5nIGEgV0tXZWJzaXRlRGF0YVN0b3JlLCBnZXR0aW5n
IGl0cyByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3MgZGlyZWN0b3J5LAorICAgICAgICBwdXR0aW5n
IHRoaW5ncyBpbiB0aGF0IGRpcmVjdG9yeSwgdGhlbiBzdGFydGluZyB0aGUgbmV0d29yayBwcm9j
ZXNzIGFuZCBtYWtpbmcgc3VyZSBldmVyeXRoaW5nCisgICAgICAgIHdvcmtzIHdoZW4gaW5pdGlh
bGl6aW5nIHRoZSBuZXR3b3JrIHByb2Nlc3MuICBOb3csIG5ldHdvcmsgcHJvY2VzcyBpbml0aWFs
aXphdGlvbiBoYXBwZW5zIHdoZW4gYQorICAgICAgICBXS1dlYnNpdGVEYXRhU3RvcmUgaXMgaW5z
dGFudGlhdGVkLCBzbyB3ZSBuZWVkIHRvIHB1dCB0aGluZ3MgdGhlcmUgYmVmb3JlIGluc3RhbnRp
YXRpbmcgYSBXS1dlYnNpdGVEYXRhU3RvcmUuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW06CisgICAgICAgIEJlZm9yZSB0aGlz
IGNoYW5nZSwgZWFjaCBXS1Byb2Nlc3NQb29sIGhhZCBpdHMgb3duIG5ldHdvcmsgcHJvY2Vzcywg
d2hpY2ggaG9sZHMgdGhlIHNlcnZpY2Ugd29ya2VyIHJlZ2lzdHJ5CisgICAgICAgIGZvciB0aGUg
V2Vic2l0ZURhdGFTdG9yZXMgdXNlZCB3aXRoIHRoYXQgcHJvY2VzcyBwb29sLiAgTm93LCB0aGUg
bmV0d29yayBwcm9jZXNzIHN0aWxsIG5lZWRzIHRvIGhhdmUgYSBzZXJ2aWNlCisgICAgICAgIHdv
cmtlciByZWdpc3RyeSBpbiBpdCwgYnV0IHdoZW4gd2UgcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBp
dCBsb29raW5nIGZvciBhIHdlYiBwcm9jZXNzIHRvIHJ1biB0aGUgc2VydmljZQorICAgICAgICB3
b3JrZXIsIHdlIGdvIGFyYml0cmFyaWx5IHRvIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wgdGhhdCBo
YXMgYSBwcm9jZXNzIHdlIGNhbiB1c2UuICBUaGlzIGxvZ2ljIGlzIGluIAorICAgICAgICBXZWJQ
cm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzLiAgQmVjYXVzZSB3ZSB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCBlYWNoCisgICAgICAg
IHRpbWUsIHNldHRpbmcgdGhlIGN1c3RvbSB1c2VyIGFnZW50IHRvIHR3byBkaWZmZXJlbnQgdGhp
bmdzIGluIHR3byBkaWZmZXJlbnQgcHJvY2VzcyBwb29scyBjYXVzZXMgb25seSBvbmUKKyAgICAg
ICAgdG8gYmUgdXNlZC4gIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBpbiBwcmFjdGljZSwgdGhvdWdo
LCBiZWNhdXNlIHRoZSBvbmx5IGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgU1BJIHRvCisgICAg
ICAgIHNldCBhIHNlcnZpY2Ugd29ya2VyJ3MgY3VzdG9tIHVzZXIgYWdlbnQgaXMgU2FmYXJpLCB3
aGljaCBvbmx5IGhhcyBvbmUgcHJvY2VzcyBwb29sLiAgVGhpcyB0ZXN0IHN0aWxsIHZlcmlmaWVz
CisgICAgICAgIHRoYXQgYSB1c2VyIGFnZWludCBpcyBjb3JyZWN0bHkgc2VudC4KKyAgICAgICAg
U2ltaWxhcmx5LCB0aGUgdGVzdHMgdGhhdCBjb3VudCBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzZXMg
ZWl0aGVyIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMgb3IgbmVlZCB0byBiZSBydW4gd2l0aAorICAg
ICAgICBvbmUgcHJvY2VzcyBwb29sIHBlciBwYXJlbnQgcHJvY2Vzcy4gIFRvIGtlZXAgdGhlIHJl
c3VsdHMgdGhlIHNhbWUsIEkgc2VwYXJhdGVkIHRoZSB0ZXN0cyBpbnRvIGRpZmZlcmVudAorICAg
ICAgICBURVNUKFNlcnZpY2VXb3JrZXJzLCAuLi4pIG1hY3JvcyB3aGljaCBhcmUgcnVuIGluIHNl
cGFyYXRlIHBhcmVudCBwcm9jZXNzZXMuCisgICAgICAgIFRoZSB0ZXN0IFJlc3RvcmVGcm9tRGlz
a05vbkRlZmF1bHRTdG9yZSBuZWVkcyB0byB1c2UgdGhlIHNhbWUgZGF0YSBzdG9yZSBmb3IgYm90
aCBXS1dlYlZpZXdzIG5vdyBiZWNhdXNlIG90aGVyd2lzZQorICAgICAgICB0aGVyZSB3YXMgYSBy
YWNlIGNvbmRpdGlvbiBpbiB0aGUgc3RhcnR1cCBvZiBhIG5ldyBuZXR3b3JrIHByb2Nlc3MgdGhh
dCB3YXNuJ3QgdGhlcmUgYmVmb3JlIGJlY2F1c2Ugd2Ugd2VyZSB1c2luZyB0aGUKKyAgICAgICAg
c2FtZSBwcm9jZXNzIHBvb2wgYW5kIHRoZXJlZm9yZSB0aGUgc2FtZSBuZXR3b3JrIHByb2Nlc3Mu
ICBJIGFkZGVkIHNwaW5uaW5nIHRoZSBydW4gbG9vcCBhbmQgc2xlZXBpbmcgdG8gYmUgYWJsZSB0
bworICAgICAgICByZXByb2R1Y2UgdGhlIHJhY2UgY29uZGl0aW9uIGZhaWx1cmUgYW5kIEkgdXNl
IHRoZSBzYW1lIFdLV2Vic2l0ZURhdGFTdG9yZSB0byB1c2UgdGhlIHNhbWUgbmV0d29yayBwcm9j
ZXNzLCB3aGljaCB3YXMKKyAgICAgICAgdGhlIGludGVudCBvZiB1c2luZyB0aGUgc2FtZSBXS1By
b2Nlc3NQb29sIGJlZm9yZS4gIFRoZSB0ZXN0IHN0aWxsIHRlc3RzIHRoYXQgdGhlIHJlZ2lzdHJh
dGlvbiBpcyByZS11c2VkIHdoZW4gd2UgYXJlCisgICAgICAgIG5vdCB1c2luZyB0aGUgZGVmYXVs
dCBkYXRhIHN0b3JlLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
U2VydmljZVdvcmtlckJhc2ljLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW06CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNv
b2tpZVVJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdl
OmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW0NoZWNr
U2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdKToKKyAgICAgICAgKC1bQ2hl
Y2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdKToKKyAgICAgICAgKFRF
U1QpOgorICAgICAgICBUaGlzIGlzIHRoZSB3aG9sZSBwb2ludCBvZiBtZSBkb2luZyB0aGlzLgor
ICAgICAgICBJIHRvb2sgYSB0ZXN0IHRoYXQgd2FzIGZsYWt5IG9ubHkgb24gaU9TIChiZWNhdXNl
IG9mIGRpZmZlcmVudCBOU0hUVFBDb29raWVTdG9yYWdlIHN5bmNpbmcgYmVoYXZpb3IpIGFuZCBt
YWRlCisgICAgICAgIGl0IGZsYWt5IG5vd2hlcmUgKGZpbmdlcnMgY3Jvc3NlZCEpIGFuZCBhZGRl
ZCBhIHRlc3QgdGhhdCBjb3JyZWN0bHkgaGFuZGxlcyBzZXNzaW9uIGNvb2tpZXMgbGlrZSB3ZSBj
b3VsZCBub3QKKyAgICAgICAgYmVmb3JlIHRoaXMgY2hhbmdlLgorICAgICAgICBJIGFsc28gcmUt
dXNlZCBzb21lIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgYW5kIG1hZGUgaXQgc3RvcCB1c2luZyBwcm9j
ZXNzLWdsb2JhbCBzdGF0aWMgdmFyaWFibGVzIGZvciB0ZXN0IHN0YXRlLgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1t
OgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW06CisgICAgICAgIChydW5XZWJzaXRl
RGF0YVN0b3JlQ3VzdG9tUGF0aHMpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW06CisgICAgICAg
ICgtW0Nsb3NlV2hpbGVTdGFydGluZ1Byb3RvY29sIHN0YXJ0TG9hZGluZ10pOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6cnVuVGVzdCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRl
VG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmZpbmRB
bmREdW1wV2ViS2l0UHJvY2Vzc0lkZW50aWZpZXJzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6Om5ldHdvcmtQcm9jZXNzRGlkQ3Jhc2gpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJv
bGxlcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KToKKyAgICAgICAgV0tDb250ZXh0U2V0QWxsb3dz
QW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyBpcyBub3QgbmVlZGVkLCBz
byBJIHJlbW92ZWQgaXQuCisgICAgICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0
b3JlIGlzbid0IG5lZWRlZCBhbnkgbW9yZSBiZWNhdXNlIFdLQ29udGV4dFJlZiAoV2ViUHJvY2Vz
c1Bvb2wpIGRvZXNuJ3QKKyAgICAgICAgb3duIGEgbmV0d29yayBwcm9jZXNzIGFueSBtb3JlLCBz
byBpdCBkb2Vzbid0IGNhcmUgd2hpY2ggaXMgdGhlIGRlZmF1bHQgV2Vic2l0ZURhdGFTdG9yZS4K
KyAgICAgICAgSW4gZmFjdCwgdGhlICJkZWZhdWx0IiBXZWJzaXRlRGF0YVN0b3JlIGlzbid0IHJl
YWxseSBpbXBvcnRhbnQgaW4gdGhlIG5ldHdvcmsgcHJvY2VzcyBhbnkgbW9yZS4KKwogMjAyMC0w
OS0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0dUS11bV1BFXSBNb3ZlIHByb3h5IHNldHRpbmdzIGZyb20gV2ViS2l0Q29udGV4dCB0byBX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3ND
cmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5n
Q29ubmVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8
V2ViS2l0L1dLUHJvY2Vzc0dyb3VwUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vz
c1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2lt
cG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktp
dC9XZWJLaXQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtODcsNyArODgsNyBA
QCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kCiAgICAgcGlkX3Qgd2Vi
VmlldzJQSUQgPSBbd2ViVmlldzIuZ2V0KCkgX3dlYlByb2Nlc3NJZGVudGlmaWVyXTsKICAgICBF
WFBFQ1RfTkUod2ViVmlldzFQSUQsIHdlYlZpZXcyUElEKTsKIAotICAgIHBpZF90IGluaXRpYWxO
ZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVyID0gW3Byb2Nlc3NQb29sLmdldCgpIF9uZXR3b3JrUHJv
Y2Vzc0lkZW50aWZpZXJdOworICAgIHBpZF90IGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZmVyID0gW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfbmV0d29ya1Byb2Nl
c3NJZGVudGlmaWVyXTsKICAgICBFWFBFQ1RfTkUoaW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRp
ZmlmZXIsIDApOwogICAgIGtpbGwoaW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlmZXIsIFNJ
R0tJTEwpOwogICAgIFV0aWw6OnJ1bigmbmV0d29ya1Byb2Nlc3NDcmFzaGVkKTsKQEAgLTk2LDcg
Kzk3LDcgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZAogICAgIFt3
ZWJWaWV3MS5nZXQoKSBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltb
TlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNp
b246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXV07CiAg
ICAgW3dlYlZpZXcxLmdldCgpIF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKIAot
ICAgIHBpZF90IHJlbGF1bmNoZWROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIgPSBbcHJvY2Vzc1Bv
b2wuZ2V0KCkgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl07CisgICAgcGlkX3QgcmVsYXVuY2hl
ZE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllciA9IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVE
YXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl07CiAgICAgRVhQRUNUX05FKGluaXRp
YWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVyLCByZWxhdW5jaGVkTmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKTsKICAgICBFWFBFQ1RfRkFMU0UobmV0d29ya1Byb2Nlc3NDcmFzaGVkKTsKIApAQCAt
MTQ2LDggKzE0Nyw4IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc1JlbGF1bmNoT25MYXUK
IAogICAgIC8vIENvbnN0dWN0aW5nIGEgV2ViVmlldyBzdGFydHMgYSBuZXR3b3JrIHByb2Nlc3Mg
c28gdGVybWluYXRlIHRoaXMgb25lLiBUaGUgcGFnZSBsb2FkIGJlbG93IHdpbGwgdGhlbiByZXF1
ZXN0IGEgbmV0d29yayBwcm9jZXNzIGFuZCB3ZQogICAgIC8vIG1ha2UgdGhpcyBuZXcgbmV0d29y
ayBwcm9jZXNzIGxhdW5jaCBjcmFzaCBvbiBzdGFydHVwLgotICAgIFtwcm9jZXNzUG9vbCBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOwotICAgIFtwcm9jZXNzUG9vbCBfbWFrZU5leHROZXR3b3Jr
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nXTsKKyAgICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9t
YWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmddOworICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
IAogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbTW9uaXRvcldlYkNvbnRlbnRDcmFzaE5h
dmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwogICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRp
b25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CkBAIC0xNTgsNyArMTU5LDcgQEAgVEVTVChXZWJL
aXQsIE5ldHdvcmtQcm9jZXNzUmVsYXVuY2hPbkxhdQogICAgIEVYUEVDVF9UUlVFKG5ldHdvcmtQ
cm9jZXNzQ3Jhc2hlZCk7CiAgICAgRVhQRUNUX0ZBTFNFKHdlYlByb2Nlc3NDcmFzaGVkKTsKICAg
ICBFWFBFQ1RfR1QoW3dlYlZpZXcgX3dlYlByb2Nlc3NJZGVudGlmaWVyXSwgMCk7Ci0gICAgRVhQ
RUNUX0dUKFtwcm9jZXNzUG9vbC5nZXQoKSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXSwgMCk7
CisgICAgRVhQRUNUX0dUKFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX25l
dHdvcmtQcm9jZXNzSWRlbnRpZmllcl0sIDApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25s
b2FkLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvRG93bmxvYWQubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0JKHdvcmtpbmcgY29weSkKQEAgLTg4OSw5ICs4
ODksOSBAQCB2b2lkIGRvd25sb2FkQXRSYXRlKGRvdWJsZSBkZXNpcmVkS2JwcywgCiAgICAgcmVj
ZWl2ZWREYXRhID0gZmFsc2U7CiAgICAgVXRpbDo6cnVuKCZyZWNlaXZlZERhdGEpOwogICAgIC8v
IFN0YXJ0IHRoZSBEb3dubG9hZE1vbml0b3IncyB0aW1lci4KLSAgICBbW3dlYlZpZXcgY29uZmln
dXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKKyAg
ICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFw
cElzQmFja2dyb3VuZDpZRVNdOwogICAgIGlmIChyZXR1cm5Ub0ZvcmVncm91bmQgPT0gQXBwUmV0
dXJuc1RvRm9yZWdyb3VuZDo6WWVzKQotICAgICAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0u
cHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9dOworICAgICAgICBbW3dl
YlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZDpOT107CiAgICAgZGlkQ2FuY2VsID0gZmFsc2U7CiAgICAgVXRpbDo6cnVuKCZkaWRD
YW5jZWwpOwogICAgIHRlcm1pbmF0ZVNlcnZlciA9IHRydWU7CkluZGV4OiBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FM
Lm1tCShyZXZpc2lvbiAyNjc1MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
V2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRl
RGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8
V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19X
S1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC04Niw3ICs4Nyw3IEBAIFRFU1QoSW5kZXhlZERCLCBDaGVj
a3BvaW50c1dBTEF1dG9tYXRpY2EKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlv
bj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9j
XSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRk
U2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsK
IAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmll
dyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3Zl
cnkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JREJEZWxldGVSZWNvdmVyeS5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBv
cnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+
CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAg
VEVTVChJbmRleGVkREIsIERlbGV0ZVJlY292ZXJ5KQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdD
b25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250
cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0
SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0
YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IHRoZSBpbmNv
bnNpc3RlbnQgZGF0YWJhc2UgZmlsZXMgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeQogICAgIE5T
VVJMICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklEQkRl
bGV0ZVJlY292ZXJ5IiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVz
dFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0JKHJl
dmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SURCSW5kZXhVcGdyYWRlVG9WMi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAog
I2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRh
U3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJL
aXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNl
clN0eWxlU2hlZXQuaD4KQEAgLTU4LDcgKzU5LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4VXBn
cmFkZVRvVjIpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3Vy
YXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwog
ICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3Nh
Z2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29u
ZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwor
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKIAogICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBmaWxl
cyB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxl
IG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiSW5kZXhVcGdyYWRlIiB3aXRoRXh0ZW5zaW9u
OkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJ
bmZvVXBncmFkZVRvVjIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQkocmV2aXNpb24g
MjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmpl
Y3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBA
QAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVE
YXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxX
ZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
VXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJbmRleGVkREIsIElEQk9i
amVjdFN0b3JlSW5mb1VwZ3JhZAogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9u
PiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2Nd
IGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRT
Y3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwog
Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IGRhdGFiYXNlIGZpbGVzIHdpdGgg
b2xkIE9iamVjdFN0b3JlSW5mbyBzY2hlbWEgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeS4KICAg
ICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJ
REJPYmplY3RTdG9yZUluZm9VcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGly
ZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4
ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2ls
bC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dL
UHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRy
b2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblBy
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC05Miw3ICs5Myw3
IEBAIFRFU1QoSW5kZXhlZERCLCBEYXRhYmFzZVByb2Nlc3NLaWxsKQogICAgICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgICAgIGlmICgh
a2lsbGVkREJQcm9jZXNzICYmIG9wZW5SZXF1ZXN0VXBncmFkZU5lZWRlZCkgewogICAgICAgICAg
ICAga2lsbGVkREJQcm9jZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgICAgICAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNz
Lm1tCShyZXZpc2lvbiAyNjc1MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZp
Z3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgogI2ltcG9y
dCA8d3RmL0RlcXVlLmg+CkBAIC02OSw3ICs3MCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVk
REJNdWx0aVByb2Nlc3MpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNv
bmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5p
dF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlw
dE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCUGVyc2lzdGVuY2UubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0JKHdvcmtp
bmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlBlcnNp
c3RlbmNlKQogICAgIHdlYlZpZXcgPSBuaWw7CiAKICAgICAvLyBUZXJtaW5hdGUgdGhlIG5ldHdv
cmsgcHJvY2VzcwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFT
dG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gTWFrZSBhIG5ldyB3ZWIg
dmlldyB0byBmaW5pc2ggdGhlIHRlc3QKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1
cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTI2OCw3ICsyNjgsNyBAQCBURVNUKElu
ZGV4ZWREQiwgSW5kZXhlZERCVGhpcmRQYXJ0eUZyYW1lCiAKICAgICB3ZWJWaWV3ID0gbmlsOwog
ICAgIHNlY29uZFdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vz
c1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBU
aGlyZC1wYXJ0eSBJREIgc3RvcmFnZSBpcyBzdG9yZWQgaW4gdGhlIG1lbW9yeSBvZiBuZXR3b3Jr
IHByb2Nlc3MuCiAgICAgYXV0byB0aGlyZFdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwpAQCAtMzg1LDcgKzM4NSw3IEBAIFRFU1QoSW5kZXhl
ZERCLCBJbmRleGVkREJUaGlyZFBhcnR5V29ya2UKIAogICAgIHdlYlZpZXcgPSBuaWw7CiAgICAg
c2Vjb25kV2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9v
bCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gdGhp
cmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01h
a2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCld
KTsKICAgICBsb2FkVGVzdFBhZ2VJbldlYlZpZXcodGhpcmRXZWJWaWV3LmdldCgpLCBAImRhdGFi
YXNlIGlzIGNyZWF0ZWQiKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRs
eS5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktp
dC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+
CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0
IDx3dGYvUmV0YWluUHRyLmg+CkBAIC04OCw4ICs4OSw4IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRl
eGVkREJTdXNwZW5kSW1taW5lbnQKIAogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkNvbnRp
bnVlIik7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdv
cmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3Rv
cmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBydW5UZXN0QW5kQ2hlY2tS
ZXN1bHQoQCJFeHBlY3RlZCBBYm9ydCBGb3IgU3VzcGVuc2lvbiIpOwogICAgIHJ1blRlc3RBbmRD
aGVja1Jlc3VsdChAIkV4cGVjdGVkIFN1Y2Nlc3MgQWZ0ZXIgUmVzdW1lIik7CkBAIC0xNTgsOCAr
MTU5LDggQEAgVEVTVChJbmRleGVkREIsIFN1c3BlbmRJbW1pbmVudGx5Rm9yVGhpcgogICAgIFt3
ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOm1haW5GcmFtZVN0cmluZyBiYXNlVVJMOltOU1VSTCBVUkxX
aXRoU3RyaW5nOkAiaHR0cDovL3dlYmtpdC5vcmciXV07CiAgICAgcnVuVGVzdEFuZENoZWNrUmVz
dWx0KEAiZGF0YWJhc2UgaXMgY3JlYXRlZCIpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCku
cHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07Ci0g
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0Rp
ZFJlc3VtZV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2Vu
ZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwog
CiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAidHJhbnNhY3Rpb24gaXMgY29tcGxldGVkIik7
CiB9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QlRlbXBGaWxlU2l6ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQkocmV2aXNpb24gMjY3NTM2KQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmls
ZVNpemUubW0JKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgVEVTVChJbmRleGVkREIs
IEluZGV4ZWREQlRlbXBGaWxlU2l6ZSkKIAogICAgIC8vIFRlcm1pbmF0ZSBuZXR3b3JrIHByb2Nl
c3MgdG8ga2VlcCBXQUwgb24gZGlzay4KICAgICB3ZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOwogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2Vy
XSBmaWxlRXhpc3RzQXRQYXRoOndhbEZpbGVQYXRoLmdldCgpLnBhdGhdKTsKICAgICBSZXRhaW5Q
dHI8TlNEaWN0aW9uYXJ5PiBmaWxlQXR0cmlidXRlcyA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0
TWFuYWdlcl0gYXR0cmlidXRlc09mSXRlbUF0UGF0aDp3YWxGaWxlUGF0aC5nZXQoKS5wYXRoIGVy
cm9yOm5pbF07CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xv
Y2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0JKHJldmlzaW9u
IDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxT
dG9yYWdlUGVyc2lzdGVuY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLV2VicGFnZVByZWZlcmVuY2VzUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQg
PFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9f
V0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtMTA5LDcgKzExMCw3IEBAIFRFU1QoV0tXZWJWaWV3LCBM
b2NhbFN0b3JhZ2VQcm9jZXNzQ3Jhc2gKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJl
Y2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAic2Vzc2lvbjpzdG9y
YWdlIiwgW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHldKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwog
CiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwpAQCAtMTYyLDcgKzE2Myw3IEBAIFRF
U1QoV0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzU3VzcGUKICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVR
KEAidmFsdWUiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCi0gICAgW3Byb2Nlc3NQb29s
LmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dp
bGxTdXNwZW5kSW1taW5lbnRseV07CiAKICAgICByZWFkeVRvQ29udGludWUgPSBmYWxzZTsKICAg
ICBbd2ViVmlldzEgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2luZG93LmxvY2FsU3RvcmFnZS5zZXRJ
dGVtKCdrZXknLCAnbmV3VmFsdWUnKSIgY29tcGxldGlvbkhhbmRsZXI6XihpZCwgTlNFcnJvciAq
KSB7CkBAIC0xNzcsNyArMTc4LDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nl
c3NTdXNwZQogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0Nv
bnRpbnVlKTsKICAgICAKLSAgICBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX3NlbmROZXR3b3JrUHJvY2Vz
c0RpZFJlc3VtZV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2Fn
ZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRN
ZXNzYWdlKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0
d29ya1Byb2Nlc3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2ltcG9ydCAiSFRUUFNlcnZlci5oIgogI2ltcG9y
dCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAiVXRpbGl0aWVzLmgiCi0jaW1wb3J0IDxXZWJL
aXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRh
U3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KQEAgLTM3LDE0ICszNywxNCBAQCBU
RVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NFbnRpdGxlbWVudHMpCiB7CiAgICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpbW1tXS1dlYlZpZXdDb25maWd1cmF0
aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV1dKTsKICAgICBbd2ViVmlldyBzeW5jaHJvbm91
c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJzaW1wbGUiXTsKLSAgICBXS1Byb2Nlc3NQb29sICpwb29s
ID0gW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2w7Ci0gICAgYm9vbCBoYXNFbnRp
dGxlbWVudCA9IFtwb29sIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpA
ImNvbS5hcHBsZS5yb290bGVzcy5zdG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94Il07Cisg
ICAgV0tXZWJzaXRlRGF0YVN0b3JlICpzdG9yZSA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndl
YnNpdGVEYXRhU3RvcmU7CisgICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9IFtzdG9yZSBfbmV0d29y
a1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Muc3Rv
cmFnZS5XZWJLaXROZXR3b3JraW5nU2FuZGJveCJdOwogI2lmIFBMQVRGT1JNKE1BQykgJiYgVVNF
KEFQUExFX0lOVEVSTkFMX1NESykKICAgICBFWFBFQ1RfVFJVRShoYXNFbnRpdGxlbWVudCk7CiAj
ZWxzZQogICAgIEVYUEVDVF9GQUxTRShoYXNFbnRpdGxlbWVudCk7CiAjZW5kaWYKLSAgICBFWFBF
Q1RfRkFMU0UoW3Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAi
dGVzdCBmYWlsdXJlIGNhc2UiXSk7CisgICAgRVhQRUNUX0ZBTFNFKFtzdG9yZSBfbmV0d29ya1By
b2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJdKTsKIH0K
IAogVEVTVChXZWJLaXQsIEhUVFBSZWZlcmVyKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9y
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCShyZXZpc2lvbiAy
Njc1MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQ
cm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03
Miw3ICs3Miw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrUmVjb3ZlcnlBZnRlckNyYXNoKFdLV2UKICAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAot
ICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOworICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3Jl
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05T
VVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpzaW1wbGUyXV07CiAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKIH0KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5t
bQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNTM4NSw3
ICs1Mzg1LDcgQEAgVEVTVChQcm9jZXNzU3dhcCwgVXNlUHJld2FybWVkUHJvY2Vzc0FmdAogCiAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbcHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAg
YXV0byB3ZWJWaWV3MiA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjp3ZWJWaWV3Q29uZmlndXJh
dGlvbi5nZXQoKV0pOwogICAgIFt3ZWJWaWV3MiBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdh
dGUuZ2V0KCldOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQkocmV2aXNpb24g
MjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MTksNyArNzE5LDcgQEAgVEVT
VChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBOZXR3b3JrUHJvYwogCiAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1
dG8gd2ViVmlldzIgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5T
TWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQo
KV0pOwogCkBAIC03NTIsNyArNzUyLDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBO
ZXR3b3JrUHJvYwogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAK
LSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzMgPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkBAIC0xNTU4LDEwICsxNTU4LDgg
QEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBNaWdyYXRlRGF0YQogCiBURVNUKFJlc291
cmNlTG9hZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2wp
CiB7CisgICAgTlNVUkwgKml0cFJvb3RVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1Rl
bXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkNhbkFj
Y2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2xUZXN0Il0gaXNEaXJlY3Rvcnk6WUVTXTsK
ICAgICBhdXRvIGRlZmF1bHRGaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5h
Z2VyXTsKLSAgICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29u
ZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRv
cmVsZWFzZV07Ci0gICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFs
bG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9y
ZWxlYXNlXTsKLSAgICBOU1VSTCAqaXRwUm9vdFVSTCA9IFtbZGF0YVN0b3JlIF9jb25maWd1cmF0
aW9uXSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeV07CiAgICAgTlNVUkwgKmZpbGVV
UkwgPSBbaXRwUm9vdFVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJvYnNlcnZhdGlv
bnMuZGIiXTsKICAgICBbZGVmYXVsdEZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFBhdGg6aXRwUm9v
dFVSTC5wYXRoIGVycm9yOm5pbF07CiAgICAgRVhQRUNUX0ZBTFNFKFtkZWZhdWx0RmlsZU1hbmFn
ZXIgZmlsZUV4aXN0c0F0UGF0aDppdHBSb290VVJMLnBhdGhdKTsKQEAgLTE1NzIsNiArMTU3MCwx
MCBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0RhCiAgICAgRVhQRUNU
X1RSVUUoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOm5ld0ZpbGVVUkwucGF0
aF0pOwogICAgIFtkZWZhdWx0RmlsZU1hbmFnZXIgY29weUl0ZW1BdFBhdGg6bmV3RmlsZVVSTC5w
YXRoIHRvUGF0aDpmaWxlVVJMLnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfVFJVRShbZGVm
YXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6ZmlsZVVSTC5wYXRoXSk7CisKKyAgICBf
V0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9
IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07Cisg
ICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eSA9IGl0cFJvb3RVUkw7CisgICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0
b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25d
IGF1dG9yZWxlYXNlXTsKICAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZDpZRVNdOwogCiAgICAgc3RhdGljIGJvb2wgZG9uZUZsYWcgPSBmYWxzZTsKQEAgLTE2
MzMsMTIgKzE2MzUsMTIgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBTdG9yZVN1c3Bl
bgogICAgIFt3ZWJWaWV3MiBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CiAKICAg
ICBkb25lRmxhZyA9IGZhbHNlOwotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQ
cm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeeworICAgIFtkYXRhU3RvcmUxIF9zZW5kTmV0d29ya1By
b2Nlc3NQcmVwYXJlVG9TdXNwZW5kOl57CiAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKICAgICB9
XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKIAotICAgIFtzaGFy
ZWRQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbZGF0YVN0
b3JlMSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIH0KIAogQGludGVyZmFjZSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU2NoZW1lSGFuZGxlciA6IE5TT2JqZWN0IDxXS1VSTFNjaGVtZUhh
bmRsZXI+CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZp
Y2VXb3JrZXJCYXNpYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQkocmV2aXNpb24gMjY3NTM2KQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTU1OCw3ICs1NTgsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJz
LCBVc2VyQWdlbnRPdmVycmlkZSkKIAogICAgIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogCi0gICAgbWVzc2FnZUhhbmRsZXIg
PSBhZG9wdE5TKFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhFeHBl
Y3RlZE1lc3NhZ2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBCYXIgQ3VzdG9tIFVzZXJBZ2VudCJd
KTsKKyAgICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5k
bGVyIGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6
IEZvbyBDdXN0b20gVXNlckFnZW50Il0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVu
dENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgp
IG5hbWU6QCJzdyJdOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpj
b25maWd1cmF0aW9uLmdldCgpXSk7CkBAIC02MzMsOCArNjMzLDYgQEAgVEVTVChTZXJ2aWNlV29y
a2VycywgQ2FjaGVTdG9yYWdlUmVzdG9yZQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
ZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwogCi0gICAgW1dLV2Vic2l0ZURhdGFTdG9yZSBfZGVs
ZXRlRGVmYXVsdERhdGFTdG9yZUZvclRlc3RpbmddOwotCiAgICAgU2VydmljZVdvcmtlclRDUFNl
cnZlciBzZXJ2ZXIoewogICAgICAgICB7ICJ0ZXh0L2h0bWwiLCBtYWluQ2FjaGVTdG9yYWdlQnl0
ZXMgfQogICAgIH0sIHsKQEAgLTk4Miw2ICs5ODAsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBT
ZXJ2aWNlV29ya2VyUHJvY2VzCiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlv
bj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9j
XSBpbml0XSk7CiAgICAgc2V0Q29uZmlndXJhdGlvbkluamVjdGVkQnVuZGxlUGF0aChjb25maWd1
cmF0aW9uLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gb3JpZ2luYWxQcm9j
ZXNzUG9vbCA9IGNvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2w7CiAKICAgICBkb25lID0g
ZmFsc2U7CiAKQEAgLTEwMzUsNyArMTAzNCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZp
Y2VXb3JrZXJQcm9jZXMKICAgICBkb25lID0gZmFsc2U7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhh
dCBsb2FkaW5nIHRoZSBzaW1wbGUgcGFnZSBkaWQgbm90IHN0YXJ0IHRoZSBzZXJ2aWNlIHdvcmtl
ciBwcm9jZXNzLgotICAgIEVYUEVDVF9FUSgwdSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9u
LnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKKyAgICBFWFBFQ1RfRVEo
MXUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtl
clByb2Nlc3NDb3VudCk7CiAKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9u
Om5ld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBFWFBFQ1RfRVEoMnUsIHdlYlZpZXcuZ2V0
KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fd2ViUHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3
YXJtZWQpOwpAQCAtMTA0Myw5ICsxMDQyLDggQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU2Vydmlj
ZVdvcmtlclByb2NlcwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAg
ZG9uZSA9IGZhbHNlOwogCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgbG9hZGluZyB0aGlzIHBhZ2Ug
ZGlkIHN0YXJ0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgogICAgIEVYUEVDVF9FUSgxdSwg
d2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJv
Y2Vzc0NvdW50KTsKLQorICAgIEVYUEVDVF9FUSgxdSwgb3JpZ2luYWxQcm9jZXNzUG9vbC5nZXQo
KS5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CiAgICAgW1tjb25maWd1cmF0aW9uIHdlYnNp
dGVEYXRhU3RvcmVdIHJlbW92ZURhdGFPZlR5cGVzOltXS1dlYnNpdGVEYXRhU3RvcmUgYWxsV2Vi
c2l0ZURhdGFUeXBlc10gbW9kaWZpZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQYXN0XSBjb21wbGV0
aW9uSGFuZGxlcjpeKCkgewogICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9XTsKQEAgLTE2MTgs
MjEgKzE2MTYsMzUgQEAgc3RhdGljIHNpemVfdCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcwog
ICAgIHJldHVybiB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlBy
b2Nlc3NDb3VudElnbm9yaW5nUHJld2FybWVkOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBP
dXRPZkFuZEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRP
ZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsK
IAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RF
U1QoU2VydmljZVdvcmtlcnMsIEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9h
ZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29y
a2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJv
dXRCbGFuaykpOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9y
ZU5hdmlnYXRpbmdUaHJvdWdoU2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMsIExv
YWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hPdXRPZlByb2Nlc3NTZXJ2aWNlV29y
a2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7
CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgx
dSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MsIGZpcnN0TG9hZEFib3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2Vycywg
TG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaEluUHJvY2Vzc1NlcnZpY2VXb3Jr
ZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsK
KyAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1
LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzLCBmaXJzdExvYWRBYm91dEJsYW5rKSk7CiB9CiAKQEAgLTE4NDcsOCArMTg1OSw4IEBAIFRF
U1QoU2VydmljZVdvcmtlcnMsIFJlc3RvcmVGcm9tRGlza05vbkQKICAgICBbW05TRmlsZU1hbmFn
ZXIgZGVmYXVsdE1hbmFnZXJdIGNyZWF0ZURpcmVjdG9yeUF0VVJMOnN3REJQYXRoIHdpdGhJbnRl
cm1lZGlhdGVEaXJlY3RvcmllczpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bmlsXTsKICAgICBF
WFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBh
dGg6c3dEQlBhdGgucGF0aF0pOwogCi0gICAgLy8gV2UgcHJvdGVjdCB0aGUgcHJvY2VzcyBwb29s
IHNvIHRoYXQgaXQgb3V0bGl2ZXMgdGhlIFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgUmV0YWluUHRy
PFdLUHJvY2Vzc1Bvb2w+IHByb3RlY3RlZFByb2Nlc3NQb29sOworICAgIFJldGFpblB0cjxXS1dl
YnNpdGVEYXRhU3RvcmU+IHByb3RlY3RlZFdlYnNpdGVEYXRhU3RvcmU7CiAKICAgICBTZXJ2aWNl
V29ya2VyVENQU2VydmVyIHNlcnZlcih7CiAgICAgICAgIHsgInRleHQvaHRtbCIsIG1haW5SZWdp
c3RlcmluZ1dvcmtlckJ5dGVzIH0sCkBAIC0xODcxLDYgKzE4ODMsNyBAQCBURVNUKFNlcnZpY2VX
b3JrZXJzLCBSZXN0b3JlRnJvbURpc2tOb25ECiAKICAgICAgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgw
MCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICAgICAgcHJv
dGVjdGVkUHJvY2Vzc1Bvb2wgPSB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bv
b2w7CisgICAgICAgIHByb3RlY3RlZFdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJWaWV3LmdldCgpLmNv
bmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZTsKIAogICAgICAgICBbd2ViVmlldyBsb2FkUmVx
dWVzdDpzZXJ2ZXIucmVxdWVzdCgpXTsKIApAQCAtMTg4MCwxMyArMTg5MywxNSBAQCBURVNUKFNl
cnZpY2VXb3JrZXJzLCBSZXN0b3JlRnJvbURpc2tOb25ECiAgICAgICAgIFt3ZWJWaWV3LmdldCgp
LmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzXTsKICAg
ICB9CiAKKyAgICAvLyBNYWtlIHVzIG1vcmUgbGlrZWx5IHRvIGxvc2UgYW55IHJhY2VzIHdpdGgg
c2VydmljZSB3b3JrZXIgaW5pdGlhbGl6YXRpb24uCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
c3BpblJ1bkxvb3AoMTApOworICAgIHVzbGVlcCgxMDAwMCk7CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6c3BpblJ1bkxvb3AoMTApOworCiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAgICAgICAg
IGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFs
bG9jXSBpbml0XSk7CiAKLSAgICAgICAgYXV0byB3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5p
dF0pOwotICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS5fc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IHN3REJQYXRoOwotICAgICAgICBhdXRvIG5v
bkRlZmF1bHREYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBf
aW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgp
XSk7Ci0gICAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSA9IG5vbkRl
ZmF1bHREYXRhU3RvcmUuZ2V0KCk7CisgICAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0
ZURhdGFTdG9yZSA9IHByb3RlY3RlZFdlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7CiAKICAgICAgICAg
YXV0byBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV01lc3NhZ2VIYW5kbGVyRm9yUmVzdG9y
ZUZyb21EaXNrVGVzdCBhbGxvY10gaW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJQQVNTOiBSZWdp
c3RyYXRpb24gYWxyZWFkeSBoYXMgYW4gYWN0aXZlIHdvcmtlciJdKTsKICAgICAgICAgW1tjb25m
aWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6
bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07CkBAIC0xOTQ0LDExICsxOTU5LDExIEBA
IFRFU1QoU2VydmljZVdvcmtlcnMsIFN1c3BlbmROZXR3b3JrUHJvY2UKIAogICAgIEVYUEVDVF9U
UlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RC
UGF0aC5wYXRoXSk7CiAKLSAgICBbIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNz
UG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbd2Vi
Vmlldy5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJv
Y2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0aF0pOwog
Ci0gICAgWyB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3NlbmROZXR3
b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW3dlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi53
ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgW3dl
YlZpZXcgbG9hZFJlcXVlc3Q6c2VydmVyLnJlcXVlc3QoKV07CiAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQkocmV2aXNpb24gMjY3
NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29r
aWVTdG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDc5LDggKzQ3OSw2IEBAIC0gKHZvaWQpd2Vi
VmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBydW4KIH0KIEBlbmQKIAotLy8gRklYTUU6IG9uIGlP
UywgVUkgcHJvY2VzcyBzaG91bGQgYmUgdXNpbmcgdGhlIHNhbWUgY29va2llIGZpbGUgYXMgdGhl
IG5ldHdvcmsgcHJvY2VzcyBmb3IgZGVmYXVsdCBzZXNzaW9uLgotI2lmIFBMQVRGT1JNKE1BQykK
IGVudW0gY2xhc3MgU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgeyBObywgWWVzIH07CiB2
b2lkIHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVBy
b2Nlc3NQcmV3YXJtaW5nIHNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nKQogewpAQCAtNTg5
LDIwICs1ODcsNjYgQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQbwog
ICAgIHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVBy
b2Nlc3NQcmV3YXJtaW5nOjpZZXMpOwogfQogCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCiBA
aW50ZXJmYWNlIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURl
bGVnYXRlPgorLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUw7CistIChOU1N0cmluZyAqKXdh
aXRGb3JNZXNzYWdlOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2ll
VUlEZWxlZ2F0ZQorQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUg
eworICAgIFJldGFpblB0cjxOU1N0cmluZz4gX21lc3NhZ2U7Cit9CisKIC0gKHZvaWQpd2ViVmll
dzooV0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdl
OihOU1N0cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFt
ZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKIHsK
LSAgICBFWFBFQ1RfU1RSRVEoIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIiwgbWVzc2Fn
ZS5VVEY4U3RyaW5nKTsKKyAgICBfbWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgZmluaXNoZWQgPSB0
cnVlOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CisKKy0gKE5TU3RyaW5nICopd2FpdEZv
ck1lc3NhZ2UKK3sKKyAgICB3aGlsZSAoIV9tZXNzYWdlKQorICAgICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpzcGluUnVuTG9vcCgpOworICAgIHJldHVybiBfbWVzc2FnZS5hdXRvcmVsZWFzZSgp
OworfQorCistIChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTAoreworICAgIHJldHVybiBAIjxz
Y3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQg
aSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tp
XS50cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9z
Y3JpcHQ+IjsKK30KKwogQGVuZAogCitURVNUKFdlYktpdCwgV0tIVFRQQ29va2llU3RvcmVNdWx0
aXBsZVZpZXdzKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcxID0gW1tUZXN0V0tXZWJW
aWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MSBzeW5jaHJvbm91c2x5TG9hZEhU
TUxTdHJpbmc6QCJzdGFydCBuZXR3b3JrIHByb2Nlc3MiXTsKKworICAgIE5TSFRUUENvb2tpZSAq
c2Vzc2lvbkNvb2tpZSA9IFtOU0hUVFBDb29raWUgY29va2llV2l0aFByb3BlcnRpZXM6QHsKKyAg
ICAgICAgTlNIVFRQQ29va2llUGF0aDogQCIvIiwKKyAgICAgICAgTlNIVFRQQ29va2llTmFtZTog
QCJTZXNzaW9uQ29va2llTmFtZSIsCisgICAgICAgIE5TSFRUUENvb2tpZVZhbHVlOiBAIkNvb2tp
ZVZhbHVlIiwKKyAgICAgICAgTlNIVFRQQ29va2llRG9tYWluOiBAIjEyNy4wLjAuMSIsCisgICAg
fV07CisKKyAgICBfX2Jsb2NrIGJvb2wgc2V0Q29va2llRG9uZSA9IGZhbHNlOworICAgIFt3ZWJW
aWV3MS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUuaHR0cENvb2tpZVN0b3JlIHNldENv
b2tpZTpzZXNzaW9uQ29va2llIGNvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIHNldENvb2tp
ZURvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmc2V0
Q29va2llRG9uZSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbQ2hlY2tTZXNzaW9u
Q29va2llVUlEZWxlZ2F0ZSBuZXddKTsKKyAgICBbd2ViVmlldzEgc2V0VUlEZWxlZ2F0ZTpkZWxl
Z2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldzEgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFs
ZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcu
MC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0s
ICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworCisgICAgVGVzdFdLV2ViVmlldyAq
d2ViVmlldzIgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZp
ZXcyIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3MiBsb2FkSFRN
TFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRo
U3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVn
YXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7Cit9
CisKIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNl
c3Npb24pCiB7CiAgICAgUmV0YWluUHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4gZXBoZW1lcmFsU3Rv
cmVXaXRoQ29va2llcyA9IFtXS1dlYnNpdGVEYXRhU3RvcmUgbm9uUGVyc2lzdGVudERhdGFTdG9y
ZV07CkBAIC02MjcsOSArNjcxLDggQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFBy
b2Nlc3NQbwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOwogICAgIGZp
bmlzaGVkID0gZmFsc2U7CiAgICAgCi0gICAgTlNTdHJpbmcgKmFsZXJ0Q29va2llSFRNTCA9IEAi
PHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxl
dCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVz
W2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8
L3NjcmlwdD4iOwotICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOmFsZXJ0Q29va2llSFRNTCBi
YXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKLSAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKKyAgICBbd2ViVmlldyBsb2FkSFRN
TFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRo
U3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVn
YXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CiB9
CiAKIHN0YXRpYyBib29sIGFyZUNvb2tpZXNFcXVhbChOU0hUVFBDb29raWUgKmZpcnN0LCBOU0hU
VFBDb29raWUgKnNlY29uZCkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1t
CShyZXZpc2lvbiAyNjc1MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNiAr
MzUsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3Rv
cmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0xNTIsNyArMTUzLDcgQEAgVEVT
VChVUkxTY2hlbWVIYW5kbGVyLCBMZWFrczMpCiAKICAgICBydW5VbnRpbFRhc2tzSW5GbGlnaHQo
Mik7CiAKLSAgICBbd2ViVmlldzEuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3MS5nZXQoKS5jb25maWd1cmF0aW9u
LndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJ1blVu
dGlsVGFza3NJbkZsaWdodCgwKTsKIH0KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1
c3RvbVBhdGhzLm1tCShyZXZpc2lvbiAyNjc1MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjQ0LDcgKzI0NCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3RvcmVD
dXN0b21QYXQKICAgICAvLyBOb3csIHdpdGggYnJhbmQgbmV3IFdLV2Vic2l0ZURhdGFTdG9yZXMg
cG9pbnRpbmcgYXQgdGhlIHNhbWUgY3VzdG9tIGNvb2tpZSBzdG9yYWdlIGxvY2F0aW9uLAogICAg
IC8vIGluIG5ld2x5IGZpcmVkIHVwIE5ldHdvcmtQcm9jZXNzZXMsIHZlcmlmeSB0aGF0IHRoZSBm
ZXRjaCBhbmQgZGVsZXRlIEFQSXMgd29yayBhcyBleHBlY3RlZC4KIAotICAgIFtwcm9jZXNzUG9v
bCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtkYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKICAgICBhdXRvIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFkb3B0TlMoW1tX
S1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0ZURh
dGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21EYXRhU3RvcmUg
ZmV0Y2hEYXRhUmVjb3Jkc09mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldLV2Vic2l0ZURh
dGFUeXBlQ29va2llcywgbmlsXSBjb21wbGV0aW9uSGFuZGxlcjpeKE5TQXJyYXk8V0tXZWJzaXRl
RGF0YVJlY29yZCAqPiAqIHJlY29yZHMpIHsKQEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0aWMgdm9p
ZCBydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0CiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdl
ID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1l
c3NhZ2UpOwogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107Cisg
ICAgW2RhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIG5ld0N1c3RvbURh
dGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENv
bmZpZ3VyYXRpb246d2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAg
IFtuZXdDdXN0b21EYXRhU3RvcmUgcmVtb3ZlRGF0YU9mVHlwZXM6W05TU2V0IHNldFdpdGhPYmpl
Y3RzOldLV2Vic2l0ZURhdGFUeXBlQ29va2llcywgbmlsXSBtb2RpZmllZFNpbmNlOltOU0RhdGUg
ZGlzdGFudFBhc3RdIGNvbXBsZXRpb25IYW5kbGVyOl4gewpAQCAtMzg1LDExICszODUsMTAgQEAg
VEVTVChXZWJLaXQsIEN1c3RvbURhdGFTdG9yZURlc3Ryb3lXaGlsZQogCiAgICAgICAgIC8vIFRl
cm1pbmF0ZSB0aGUgbmV0d29yayBwcm9jZXNzIHdoaWxlIGEgcXVlcnkgaXMgcGVuZGluZy4KICAg
ICAgICAgYXV0byogYWxsUHJvY2Vzc1Bvb2xzID0gW1dLUHJvY2Vzc1Bvb2wgX2FsbFByb2Nlc3NQ
b29sc0ZvclRlc3RpbmddOwotICAgICAgICBBU1NFUlRfRVEoMVUsIFthbGxQcm9jZXNzUG9vbHMg
Y291bnRdKTsKLSAgICAgICAgYXV0byogcHJvY2Vzc1Bvb2wgPSBhbGxQcm9jZXNzUG9vbHNbMF07
Ci0gICAgICAgIHdoaWxlICghW3Byb2Nlc3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJd
KQorICAgICAgICBBU1NFUlRfRVEoMFUsIFthbGxQcm9jZXNzUG9vbHMgY291bnRdKTsKKyAgICAg
ICAgd2hpbGUgKCFbZGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKQogICAgICAg
ICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c2xlZXAoMC4wMSk7Ci0gICAgICAgIGtpbGwoW3By
b2Nlc3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCBTSUdLSUxMKTsKKyAgICAgICAg
a2lsbChbZGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCBTSUdLSUxMKTsKICAg
ICAgICAgYWxsUHJvY2Vzc1Bvb2xzID0gbmlsOwogICAgICAgICBkYXRhU3RvcmUgPSBuaWw7CiAg
ICAgfQpAQCAtNDY1LDcgKzQ2NCw5IEBAIFRFU1QoV2ViS2l0LCBBbHRlcm5hdGl2ZVNlcnZpY2Vz
RGVmYXVsdEQKICAgICAKICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRz
XSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5OmtleV07CiAK
LSAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRdIGF1dG9yZWxlYXNlXTsKKyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0
aW9uID0gW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGNv
bmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxv
Y10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJh
dGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdXSBhdXRvcmVsZWFzZV07CisgICAgVGVzdFdL
V2ViVmlldyAqd2ViVmlldzIgPSBbW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0g
YXV0b3JlbGVhc2VdOwogICAgIFt3ZWJWaWV3MiBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6
QCJzdGFydCBhdXhpbGlhcnkgcHJvY2Vzc2VzIiBiYXNlVVJMOm5pbF07CiAKICAgICBFWFBFQ1Rf
VFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6ZGVm
YXVsdERpcmVjdG9yeS5wYXRoXSk7CkBAIC01MzksNyArNTQwLDcgQEAgVEVTVChXZWJLaXQsIERv
TG9hZFdpdGhOb25EZWZhdWx0RGF0YVN0bwogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3Bp
blJ1bkxvb3AoMSk7CiAKLSAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAg
cmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVu
ZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJk
aXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKICAgICBbd2ViVmlldyBsb2Fk
UmVxdWVzdDpyZXF1ZXN0XTsKQEAgLTg1Nyw3ICs4NTgsNyBAQCBURVNUKFdlYktpdCwgTWVkaWFD
YWNoZSkKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwogCiAgICAgZG9uZSA9IHRydWU7Ci0gICAg
W1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRQ
YXRoOnBhdGggZXJyb3I6JmVycm9yXTsKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwpJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVByb3RvY29sc1Rlc3Qu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRPYmpDL0N1
c3RvbVByb3RvY29sc1Rlc3QubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0T2JqQy9DdXN0b21Qcm90b2NvbHNUZXN0Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw2ICszNCw4IEBACiAjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKICNpbXBvcnQg
PFdlYktpdC9XS0NvbnRleHRQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzR3Jv
dXBQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8
V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgogCiBzdGF0aWMgYm9vbCB0ZXN0RmluaXNoZWQ7CkBAIC03Miw2ICs3NCw4IEBAIHN0YXRpYyBX
S1Byb2Nlc3NHcm91cCAqcHJvY2Vzc0dyb3VwKCkKICAgICByZXR1cm4gcHJvY2Vzc0dyb3VwOwog
fQogCitzdGF0aWMgUmV0YWluUHRyPFdLVmlldz4gd2tWaWV3OworCiBAaW50ZXJmYWNlIENsb3Nl
V2hpbGVTdGFydGluZ1Byb3RvY29sIDogVGVzdFByb3RvY29sCiBAZW5kCiAKQEAgLTg5LDcgKzkz
LDcgQEAgLSAodm9pZClzdGFydExvYWRpbmcKICAgICAgICAgfTsKICAgICAgICAgV0tDb250ZXh0
U2V0Q2xpZW50KFtwcm9jZXNzR3JvdXAoKSBfY29udGV4dFJlZl0sICZjbGllbnQuYmFzZSk7CiAK
LSAgICAgICAga2lsbChXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoW3Byb2Nl
c3NHcm91cCgpIF9jb250ZXh0UmVmXSksIFNJR0tJTEwpOworICAgICAgICBraWxsKFdLV2Vic2l0
ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihXS1BhZ2VHZXRXZWJzaXRlRGF0
YVN0b3JlKFt3a1ZpZXcgcGFnZVJlZl0pKSwgU0lHS0lMTCk7CiAgICAgICAgIFtzZWxmLmNsaWVu
dCBVUkxQcm90b2NvbDpzZWxmIGRpZEZhaWxXaXRoRXJyb3I6W05TRXJyb3IgZXJyb3JXaXRoRG9t
YWluOk5TQ29jb2FFcnJvckRvbWFpbiBjb2RlOjAgdXNlckluZm86bmlsXV07CiAgICAgfSk7CiB9
CkBAIC0xNDIsNyArMTQ2LDcgQEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogc3RhdGljIHZv
aWQgcnVuVGVzdCgpCiB7CiAgICAgUmV0YWluUHRyPFdLQnJvd3NpbmdDb250ZXh0R3JvdXA+IGJy
b3dzaW5nQ29udGV4dEdyb3VwID0gYWRvcHROUyhbW1dLQnJvd3NpbmdDb250ZXh0R3JvdXAgYWxs
b2NdIGluaXRXaXRoSWRlbnRpZmllcjpAIlRlc3RJZGVudGlmaWVyIl0pOwotICAgIFJldGFpblB0
cjxXS1ZpZXc+IHdrVmlldyA9IGFkb3B0TlMoW1tXS1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgcHJvY2Vzc0dyb3VwOnByb2Nlc3NHcm91cCgpIGJy
b3dzaW5nQ29udGV4dEdyb3VwOmJyb3dzaW5nQ29udGV4dEdyb3VwLmdldCgpXSk7CisgICAgd2tW
aWV3ID0gYWRvcHROUyhbW1dLVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDgwMCwgNjAwKSBwcm9jZXNzR3JvdXA6cHJvY2Vzc0dyb3VwKCkgYnJvd3NpbmdDb250ZXh0
R3JvdXA6YnJvd3NpbmdDb250ZXh0R3JvdXAuZ2V0KCldKTsKICAgICBSZXRhaW5QdHI8Q3VzdG9t
UHJvdG9jb2xzTG9hZERlbGVnYXRlPiBsb2FkRGVsZWdhdGUgPSBhZG9wdE5TKFtbQ3VzdG9tUHJv
dG9jb2xzTG9hZERlbGVnYXRlIGFsbG9jXSBpbml0XSk7CiAgICAgW3drVmlldyBicm93c2luZ0Nv
bnRleHRDb250cm9sbGVyXS5sb2FkRGVsZWdhdGUgPSBsb2FkRGVsZWdhdGUuZ2V0KCk7CiAgICAg
W1t3a1ZpZXcgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcl0gbG9hZFJlcXVlc3Q6W05TVVJMUmVx
dWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIiVAOi8vcmVkaXJlY3Q/dGVzdCIsIFtUZXN0UHJvdG9jb2wgc2NoZW1lXV1d
XV07CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMjY3NTM2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNjIsOCArMTA2Miw2IEBAIGJvb2wgVGVzdENvbnRyb2xs
ZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3QKIAogICAgIHJlc2V0UXVvdGEoKTsKIAotICAgIFdLQ29u
dGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcocGxh
dGZvcm1Db250ZXh0KCksIHRydWUpOwotCiAgICAgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZp
ZXJTdGF0ZUZvclRlc3RpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSk7
CiAKICAgICBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCksIGZhbHNlKTsKQEAgLTEyMzgsNyArMTIz
Niw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmZpbmRBbmREdW1wV2ViS2l0UHIKICAgICBkdW1w
UmVzcG9uc2UobWFrZVN0cmluZyhUZXN0Q29udHJvbGxlcjo6d2ViUHJvY2Vzc05hbWUoKSwgIjog
IiwKICAgICAgICAgV0tQYWdlR2V0UHJvY2Vzc0lkZW50aWZpZXIoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSksICdcbicsCiAgICAgICAgIFRlc3RDb250
cm9sbGVyOjpuZXR3b3JrUHJvY2Vzc05hbWUoKSwgIjogIiwKLSAgICAgICAgV0tDb250ZXh0R2V0
TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKG1fY29udGV4dC5nZXQoKSksICdcbicpKTsKKyAgICAg
ICAgV0tXZWJzaXRlRGF0YVN0b3JlR2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKHdlYnNpdGVE
YXRhU3RvcmUoKSksICdcbicpKTsKICNlbHNlCiAgICAgZHVtcFJlc3BvbnNlKCJcbiJfcyk7CiAj
ZW5kaWYKQEAgLTIyOTgsNyArMjI5Niw3IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdENv
bnRyb2xsZXI6OmcKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6bmV0d29ya1Byb2Nlc3NEaWRDcmFz
aCgpCiB7Ci0gICAgcGlkX3QgcGlkID0gV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyKG1fY29udGV4dC5nZXQoKSk7CisgICAgcGlkX3QgcGlkID0gV0tXZWJzaXRlRGF0YVN0b3Jl
R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKHdlYnNpdGVEYXRhU3RvcmUoKSk7CiAgICAgZnBy
aW50ZihzdGRlcnIsICIjQ1JBU0hFRCAtICVzIChwaWQgJWxkKVxuIiwgbmV0d29ya1Byb2Nlc3NO
YW1lKCksIHN0YXRpY19jYXN0PGxvbmc+KHBpZCkpOwogICAgIGV4aXQoMSk7CiB9CkBAIC0zMTM3
LDcgKzMxMzUsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRJZ25vcmVzVmlld3BvcnRTCiAK
IHZvaWQgVGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKLSAgICBX
S0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAg
V0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3Mod2Vic2l0ZURhdGFTdG9y
ZSgpKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdvcmtlcnMo
KQpAQCAtMzE2OCw5ICszMTY2LDggQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxlcjo6
cGxhdGZvcgogICAgIHJldHVybiBuZXcgUGxhdGZvcm1XZWJWaWV3KGNvbmZpZ3VyYXRpb24sIG9w
dGlvbnMpOwogfQogCi1XS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0
Q29udGV4dChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBj
b250ZXh0Q29uZmlndXJhdGlvbikKK1dLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxhdGZv
cm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1cmF0
aW9uUmVmKQogewotICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKGNvbnRl
eHQsIGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCkpOwogICAgIHJldHVybiBjb250ZXh0OwogfQog
Cg==
</data>
<flag name="commit-queue"
          id="425358"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409600</attachid>
            <date>2020-09-24 11:00:37 -0700</date>
            <delta_ts>2020-09-24 11:12:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200924110036.patch</filename>
            <type>text/plain</type>
            <size>352936</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxOCBAQAorMjAyMC0wOS0yNCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgTmV0d29y
a1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgZnJvbSBXZWJQcm9jZXNzUG9vbCB0byBXZWJzaXRlRGF0
YVN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTYwNDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIG1vdmVzIHRoZSB0aGluZ3Mgb24gV2ViUHJvY2Vzc1Bvb2wgYXNzb2NpYXRlZCB3
aXRoIE5ldHdvcmtQcm9jZXNzUHJveHkgb3duZXJzaGlwIGFuZCBtb3ZlcyB0aGVtCisgICAgICAg
IHRvIFdlYnNpdGVEYXRhU3RvcmUuICBJdCdzIHByZXR0eSBtZWNoYW5pY2FsLCBidXQgaXQgcmVh
Y2hlcyBpdHMgZmluZ2VycyBpbnRvIGEgbG90IG9mIHRoaW5ncy4gIFNvbWUgY29tbWVudHMKKyAg
ICAgICAgb24gaW50ZXJlc3RpbmcgcGFydHMgYXJlIGJlbG93LgorCisgICAgICAgIFdoeSBhbSBJ
IGRvaW5nIHRoaXM/ICBJJ20gZ2xhZCB5b3UgYXNrZWQuCisKKyAgICAgICAgV0tXZWJWaWV3IGhh
ZCBhIGZ1bmRhbWVudGFsIGNvb2tpZSBwcm9ibGVtIGJlZm9yZSB0aGlzIGNoYW5nZS4gIEl0IGhh
ZCBhIFdLV2Vic2l0ZURhdGFTdG9yZSB0aGF0IGNvdWxkIHBvaW50IHRvIGEgY29va2llIHN0b3Jl
IG9uIGRpc2sKKyAgICAgICAgdGhhdCBjb3VsZCBiZSB1c2VkIGluIG11bHRpcGxlIG5ldHdvcmsg
cHJvY2Vzc2VzIGF0IHRoZSBzYW1lIHRpbWUuICBUaGlzIGxlZCB0byBwcm9ibGVtcyB3aXRoIGNv
b2tpZXMgYmVpbmcgcmVjZWl2ZWQgb3ZlciB0aGUgbmV0d29yaworICAgICAgICBpbiB0aG9zZSBk
aWZmZXJlbnQgcHJvY2Vzc2VzIGJlaW5nIHVuYWJsZSB0byBiZSBzaGFyZWQgdW50aWwgdGhleSB3
ZXJlIHdyaXR0ZW4gdG8gZGlzaywgc29tZXRoaW5nIHRoYXQgZG9lcyBub3QgaGFwcGVuIGltbWVk
aWF0ZWx5LCBlc3BlY2lhbGx5CisgICAgICAgIG9uIGlPUy4gIFRoaXMgcHJvYmxlbSBpcyBldmVu
IHdvcnNlIHdpdGggc2Vzc2lvbiBjb29raWVzLCB3aGljaCBzaG91bGQgYmUga2VwdCBpbiBtZW1v
cnkgYW5kIG5ldmVyIGJlIHdyaXR0ZW4gdG8gZGlzay4gIFRob3NlIHByb2Nlc3NlcworICAgICAg
ICBkaWQgbm90IHVzZSBzaGFyZWQgbWVtb3J5IHRvIHNoYXJlIHRoZSBjb29raWVzLiAgVGhleSBq
dXN0IGRpZG4ndCBzaGFyZSB0aGVtLCB3aGljaCBsZWQgdG8gY29va2llIGluY29ycmVjdG5lc3Mu
ICBUaGlzIHdhcyB1bmZvcnR1bmF0ZWx5CisgICAgICAgIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRp
b24gaWYgeW91IGNhbGwgW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRdIG1vcmUgdGhhbiBvbmNlLCB3
aGljaCBtYW55IGRldmVsb3BlcnMgZG8uICBUaGVyZSB3YXMgYWxzbyBvY2Nhc2lvbmFsIGNvb2tp
ZQorICAgICAgICBjb3JydXB0aW9uIGFuZCBsb3NzIGZyb20gbXVsdGlwbGUgcHJvY2Vzc2VzIHdy
aXRpbmcgY29va2llcyB0byB0aGUgc2FtZSBmaWxlLiAgQWxsIHRoZXNlIHByb2JsZW1zIGNhbiBi
ZSB3b3JrZWQgYXJvdW5kIGJ5IGRvaW5nIHdoYXQgU2FmYXJpIGRvZXM6CisgICAgICAgIG1hbnVh
bGx5IHNldHRpbmcgdGhlIFdLUHJvY2Vzc1Bvb2wgb2YgYWxsIFdLV2ViVmlld0NvbmZpZ3VyYXRp
b25zIHRvIHRoZSBzYW1lIHByb2Nlc3MgcG9vbCB0byBvbmx5IHVzZSBvbmUgbmV0d29yayBwcm9j
ZXNzLiAgVGhpcyBpcyBub3QgaW50dWl0aXZlCisgICAgICAgIG9yIHdlbGwgZG9jdW1lbnRlZCwg
YW5kIGV2ZW4gdGhvdWdoIEkgaGF2ZSBzcGVudCB0aGUgbWFqb3JpdHkgb2YgV1dEQyBsYWJzIGZv
ciB0aGUgbGFzdCAzIHllYXJzIHRlbGxpbmcgZGV2ZWxvcGVycyB0byBkbyBpdCwgbW9zdCBkZXZl
bG9wZXJzIGRvIG5vdC4KKyAgICAgICAgVGhlIGRlZmF1bHQgYmVoYXZpb3Igc2hvdWxkIG5vdCBs
ZWFkIHRvIGNvb2tpZSBpbmNvcnJlY3RuZXNzLCBjb3JydXB0aW9uLCBvciBsb3NzLiAgVGhpcyBh
Y2NvbXBsaXNoZXMgdGhhdC4KKworICAgICAgICBBIGJpZ2dlciBwcm9ibGVtIHRoYXQgY2FuJ3Qg
cmVhbGx5IGJlIHdvcmtlZCBhcm91bmQgd2VsbCBpcyB3aGF0IHdlIHdlcmUgZG9pbmcgaW4gb3Vy
IFdLSFRUUENvb2tpZVN0b3JlIEFQSS4gIE1hbnkgZGV2ZWxvcGVycyBjYWxsIHNldENvb2tpZTpj
b21wbGV0aW9uSGFuZGxlcjoKKyAgICAgICAgdG8gImxvZyBpbiIgdGhlIHVzZXIgYnkgc2V0dGlu
ZyBhIGNvb2tpZSwgdGhlbiBpbiB0aGUgY29tcGxldGlvbiBoYW5kbGVyLCB0aGV5IG9wZW4gYSBX
S1dlYlZpZXcgdG8gdGhlaXIgcGFnZSBhbmQgZXhwZWN0IHRoZSBjb29raWUgdG8gYmUgc2VudC4g
IEJlZm9yZSB0aGlzCisgICAgICAgIGNoYW5nZSwgd2Ugd291bGQgbm90IGtub3cgd2hpY2ggcHJv
Y2VzcyBwb29sIHRvIHNldCB0aGUgY29va2llIGluIHNvIHdlIHdvdWxkIGd1ZXNzLiAgSWYgdGhl
cmUgd2VyZSBubyBwcm9jZXNzIHBvb2xzLCB3ZSB3b3VsZCBzdGFydCB3cml0aW5nIHRvIGRpc2sg
YW5kIGhvcGUKKyAgICAgICAgaXQgd3JpdGVzIGZhc3QgZW5vdWdoLiAgV2UgY2FuJ3Qgd2FpdCBm
b3IgaXQgdG8gY29tcGxldGUgYmVjYXVzZSBpdCBjYXVzZXMgaGFuZ3MgbGlrZSByZGFyOi8vcHJv
YmxlbS82Njk2MTA2Ni4gIFRoaXMgc29sdXRpb24gYWxsb3dzIHRvIHN0YXJ0IHRoZSBuZXR3b3Jr
CisgICAgICAgIHByb2Nlc3Mgb2YgdGhhdCBXZWJzaXRlRGF0YVN0b3JlIGFuZCBzZXQgdGhlIGNv
b2tpZSBpbiB0aGF0IHByb2Nlc3MuICBXZSBub3cga25vdyB0aGF0IGlzIHRoZSBvbmx5IHByb2Nl
c3MgdGhpcyBXZWJzaXRlRGF0YVN0b3JlIHdpbGwgZXZlciB1c2UuICBOb3csIHVzZXJzCisgICAg
ICAgIHdpbGwgYmUgYWJsZSB0byBhY3R1YWxseSBiZSBsb2dnZWQgaW4gYWxsIHRoZSB0aW1lIGlu
IHN1Y2ggYXBwcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2ll
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBD
b29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29r
aWVzL1dlYkNvb2tpZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVz
L1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9X
ZWJDb29raWVNYW5hZ2VyU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURh
dGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3Nl
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1t
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6OnNhdmVDb29raWVzKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFT
dG9yZVNlc3Npb24pOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nl
c3NTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBQbGF0
Zm9ybS9JUEMvQXR0YWNobWVudC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAg
ICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQ
STo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0
b3JlOjpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRD
b29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAg
ICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRp
b25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVy
Rm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFT
dG9yZSk6CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtl
clRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1By
b2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZUdldFdlYnNpdGVE
YXRhU3RvcmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdLV2Vi
c2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBf
c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczpdKToKKyAgICAgICAgKC1bV0tQcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1By
ZXBhcmVUb1N1c3BlbmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3Nl
bmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tQcm9jZXNzUG9vbCBfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tQcm9jZXNzUG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6
XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29s
UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0
b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9y
ZSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpdKToKKyAgICAgICAgKC1bV0tX
ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHld
KToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRS
ZXN1bWVdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBwSXNC
YWNrZ3JvdW5kOl0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9j
ZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoK1tXS1dlYnNpdGVEYXRhU3RvcmUgX21ha2VOZXh0
TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZ10pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKF9XZWJLaXRD
b29raWVNYW5hZ2VyUHJpdmF0ZTo6Y29va2llTWFuYWdlciBjb25zdCk6CisgICAgICAgIChfV2Vi
S2l0Q29va2llTWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUpOgor
ICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfY29v
a2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRfY29v
a2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdl
cl9hZGRfY29va2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2ll
cyk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAo
d2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4
dF9wcmVmZXRjaF9kbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246
OmFkZFNpbmdsZUNvb2tpZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9u
OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vz
c1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9v
bENvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vz
c1N1cHByZXNzaW9uU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxh
dGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRm
b3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnhwY0VuZHBvaW50TWVzc2FnZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29y
a1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6cHVi
bGlzaFByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94
eTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGVj
aWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyk6CisgICAgICAgICogVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5k
KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktp
dDo6ZGVmYXVsdFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkZWZhdWx0TmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5Ojp0ZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWRUZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
ZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6YW55
UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkpOgorICAgICAgICAoV2Vi
S2l0OjphbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRp
b25zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxv
YWRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQ
cm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRp
ZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGlkQ2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0
Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNz
UG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9j
ZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENF
dmVudCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFu
YWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2Vi
Q29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5j
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9w
T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xE
ZXN0cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJF
bnRpdGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVj
b25uZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRG
b3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJl
ZEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3Rv
Y29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vz
c1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29s
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFT
dG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdD
b250ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xv
YmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3Nlcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9u
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdl
SUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3Vu
ZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdv
cmtQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgVGhlcmUgc2VlbXMgdG8gYmUgYSBsb3Qgb2Yg
Y29kZSByZW1vdmFsIGhlcmUsIGJ1dCBtb3N0IG9mIGl0IHdhcyBkdXBsaWNhdGUgY29kZSB3aXRo
CisgICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMgd2hpY2ggaXMgdXNlZCBpbnN0
ZWFkLiAgVGhhdCB3aGljaCB3YXMgbm90IGR1cGxpY2F0ZSB3YXMKKyAgICAgICAgbW92ZWQgdG8g
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcy4g
IFRoaXMgd2FzIHRoZSBoYXJkZXN0IHBhcnQgb2YgdGhpcyBwYXRjaC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1By
b2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHlGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpmbHVzaENvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1By
b2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpzZXRXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NY
UENFbmRwb2ludFRvV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXAp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZv
clNlc3Npb25JRCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nl
c3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFB
bmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGlt
ZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNl
dFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNl
TG9hZFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1By
ZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNH
cmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJl
dmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQ
cmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRh
UmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGlu
Z1RvKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1l
dGVyc1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnN1Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNj
aGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBk
YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0
aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRl
cmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25z
aGlwT25seUluRGF0YWJhc2VPbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0VXNlSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0Rl
Y29yYXRpb25Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1No
b3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQ
YXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJp
Y3RDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVz
dGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3Vy
Y2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFn
ZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnByb2Nlc3NQb29scyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9j
ZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VwaGVtZXJhbCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmZsdXNoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRl
RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vz
c2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBw
Qm91bmRTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2Fy
ZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVu
dGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6Om1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lv
bklEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vz
c1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphZGRQ
ZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5ldHdvcmtQcm94eVNl
dHRpbmdzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0
YVN0b3JlU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRm
b3JtU2V0TmV0d29ya1BhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKToK
KyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3Jz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRp
bmdzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uSW5mby5oOgorCiAyMDIwLTA5LTI0ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeCB0aGUgYnVpbGQgZm9yIHJlY2VudCBTREtz
LgpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNiArMTczLDcgQEAgTmV0
d29ya1Byb2Nlc3M6Ok5ldHdvcmtQcm9jZXNzKEF1eGlsaWFyeQogI2VuZGlmCiAKICNpZiBVU0Uo
U09VUCkKKyAgICAvLyBGSVhNRTogRG8gbm90IHVzZSB0aGUgZGVmYXVsdCBzZXNzaW9uIElELgog
ICAgIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFjY2Vz
c29yKFt0aGlzXSgpIC0+IFNvdXBTZXNzaW9uKiB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxOZXR3b3JrU2Vzc2lvblNvdXAmPigqbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSkpLnNvdXBTZXNzaW9uKCk7CiAgICAgfSk7CkBAIC0zNDcsMzAgKzM0
OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHIKIAogICAgIHNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRy
aWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwot
ICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBX
VEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVu
dGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdl
cihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3Jp
Z2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBl
clRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0K
LSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNz
aW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0j
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGJvb2wgc2VydmljZVdvcmtlclByb2Nlc3NU
ZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCA9IHRydWU7Ci0gICAgYWRkU2VydmljZVdvcmtlclNlc3Np
b24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc2VydmljZVdvcmtlclByb2Nl
c3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBtX3N0b3JhZ2VN
YW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAg
YXV0byogZGVmYXVsdFNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKTsKLSAgICBhdXRvKiBkZWZhdWx0U3RvcmFnZVNlc3Npb24gPSBkZWZh
dWx0U2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgZm9yIChjb25zdCBhdXRv
JiBjb29raWUgOiBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRpbmdD
b29raWVzKQotICAgICAgICBkZWZhdWx0U3RvcmFnZVNlc3Npb24tPnNldENvb2tpZShjb29raWUp
OwotCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkK
ICAgICAgICAgc3VwcGxlbWVudC0+aW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKIApAQCAtNTA1LDgg
KzQ4Miw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QKIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Np
b25JRCwgYm9vbCBzaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYg
aWRlbnRpZmllckJhc2UpCiAjZW5kaWYKIHsKLSAgICBBU1NFUlQoc2Vzc2lvbklEICE9IFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotCiAgICAgYXV0byBhZGRSZXN1bHQgPSBt
X25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMuYWRkKHNlc3Npb25JRCwgbnVsbHB0cik7CiAgICAgaWYg
KCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTIxLDcgKzQ5Niw3
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QKICAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllciA9IG1ha2VTdHJpbmcoaWRlbnRpZmllckJhc2Us
ICIuUHJpdmF0ZUJyb3dzaW5nLiIsIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSkuY3JlYXRl
Q0ZTdHJpbmcoKTsKICAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHN0
b3JhZ2VTZXNzaW9uID0gYWRvcHRDRihjcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oY2ZJZGVu
dGlmaWVyLmdldCgpKSk7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKHNlc3Npb25JRCAhPSBQQUw6
OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAgICBzdG9yYWdlU2Vzc2lvbiA9
IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlQ0ZTdG9yYWdlU2Vzc2lvbkZv
cklkZW50aWZpZXIoY2ZJZGVudGlmaWVyLmdldCgpKTsKIAogICAgIGlmIChOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OnByb2Nlc3NNYXlVc2VDb29raWVBUEkoKSkgewpAQCAtNTQ0LDIxICs1MTksMTEg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y29va2llQWNjZXB0UG9saWN5QwogCiBXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNzaW9uSUQg
PT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0dXJuICZk
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFnZVNlc3Np
b25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIGlm
ICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1bHROZXR3
b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigp
OwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQotCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0
aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9yKQogewot
ICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0byYgc3Rv
cmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAgICAgICAg
IGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMTcwLDcgKzE3MCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZm9yRWFjaE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYpPiYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5ld1Rlc3RpbmdTZXNz
aW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJik7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9p
ZCBlbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgYm9vbCBzaG91bGRVc2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYpOwpAQCAtMzc1LDcgKzM3NCw2IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSBjb25zdDsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNz
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKIApAQCAtNTQ0LDcgKzU0
Miw2IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiBtX25ldHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPj4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zOwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbV9kZWZhdWx0TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOwogCiAgICAgUmVmUHRyPFN0b3JhZ2VNYW5hZ2VyU2V0PiBtX3N0b3JhZ2VNYW5h
Z2VyU2V0OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNp
b24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDYgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZQogICAgIGVuY29kZXIgPDwg
dWlQcm9jZXNzU0RLVmVyc2lvbjsKICAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBuZXR3b3JrQVRT
Q29udGV4dC5nZXQoKSk7CiAjZW5kaWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzOwogI2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIgPDwgY29va2llQWNjZXB0UG9s
aWN5OwogICAgIGVuY29kZXIgPDwgbGFuZ3VhZ2VzOwpAQCAtNjYsOSArNjUsNiBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplCiAgICAgZW5jb2RlciA8PCB1cmxTY2hl
bWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgZW5jb2RlciA8
PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxkRGlzYWJsZVNlcnZpY2VX
b3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAgIGVuY29kZXIgPDwgc2hv
dWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFibGVBZENsaWNrQXR0cmli
dXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTQsMTIgKzExMCw2IEBAIGJvb2wgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnM6OmQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAK
LSAgICBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnM7Ci0gICAgZGVjb2RlciA+PiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsK
LSAgICBpZiAoIWRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOwotCiAjaWYgVVNFKFNPVVApCiAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQuY29va2llQWNjZXB0UG9saWN5KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTM2LDIwICsxMjYsNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzOjpkCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsU2NoZW1lc1JlZ2lz
dGVyZWRBc05vQWNjZXNzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0jaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBzZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIXNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXN1bHQuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
c2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiQ2FjaGVN
b2RlbC5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llLmg+CiAjaW5j
bHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTcwLDgg
KzY5LDYgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIAogICAgIFJl
dGFpblB0cjxDRkRhdGFSZWY+IG5ldHdvcmtBVFNDb250ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycyBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICAK
ICNpZiBVU0UoU09VUCkKICAgICBXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IGNvb2tp
ZUFjY2VwdFBvbGljeSB7IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k6OkFsd2F5c0Fj
Y2VwdCB9OwogICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlczsKQEAgLTgyLDEyICs3OSw3IEBA
IHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyAKICAgICBWZWN0b3I8U3Ry
aW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQotICAgIFN0cmluZyBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5OwotICAgIFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlOwotICAgIGJvb2wgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzVGVybWluYXRpb25EZWxheSB7IGZhbHNlIH07Ci0jZW5kaWYKLSAgICBib29sIHNob3VsZEVu
YWJsZUlUUERhdGFiYXNlIHsgZmFsc2UgfTsKKyAgICBib29sIHNob3VsZEVuYWJsZUlUUERhdGFi
YXNlIHsgdHJ1ZSB9OwogICAgIGJvb2wgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2Rl
IHsgZmFsc2UgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29v
a2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAJKHJldmlzaW9uIDI2NzUz
NikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5h
Z2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIldlYkNv
cmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Db29raWVTdG9yYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVFRQQ29va2ll
QWNjZXB0UG9saWN5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24u
aD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KQEAg
LTE0MywxNSArMTQ0LDE4IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6c3RvcE9ic2VydmluZ0Nv
b2sKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhU
VFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSk7Ci0gICAgbV9wcm9jZXNzLmNvb2tpZUFjY2VwdFBvbGljeUNoYW5nZWQocG9s
aWN5KTsKLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgcGxhdGZvcm1TZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KHBvbGljeSwgW3BvbGljeSwgcHJvY2VzcyA9IG1ha2VSZWYobV9wcm9j
ZXNzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
bXV0YWJsZSB7CisgICAgICAgIHByb2Nlc3MtPmNvb2tpZUFjY2VwdFBvbGljeUNoYW5nZWQocG9s
aWN5KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9KTsKIH0KIAotdm9pZCBX
ZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2
b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1f
cHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7Cisg
ICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKHNl
c3Npb25JRCkpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5jb29r
aWVBY2NlcHRQb2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihI
VFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1h
bmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tp
ZXMvV2ViQ29va2llTWFuYWdlci5oCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAiU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
VHlwZS5oIgogI2VuZGlmCiAKK09CSkNfQ0xBU1MgTlNIVFRQQ29va2llU3RvcmFnZTsKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IENvb2tpZTsKIGVudW0gY2xhc3MgSFRUUENvb2tpZUFj
Y2VwdFBvbGljeSA6IHVpbnQ4X3Q7CkBAIC03OSw4ICs4MSw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBnZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmKTsKICAgICB2b2lkIGdldENvb2tpZXMoUEFMOjpT
ZXNzaW9uSUQsIGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mJik+JiYpOwogCi0gICAgdm9pZCBwbGF0Zm9ybVNldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSk7Ci0gICAgdm9pZCBnZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SFRU
UENvb2tpZUFjY2VwdFBvbGljeSk+JiYpOworICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3ksIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBB
TDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkhUVFBDb29raWVB
Y2NlcHRQb2xpY3kpPiYmKTsKIAogICAgIHZvaWQgc3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2Vz
KFBBTDo6U2Vzc2lvbklEKTsKICAgICB2b2lkIHN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBB
TDo6U2Vzc2lvbklEKTsKQEAgLTg4LDQgKzkwLDggQEAgcHJpdmF0ZToKICAgICBOZXR3b3JrUHJv
Y2VzcyYgbV9wcm9jZXNzOwogfTsKIAorI2lmIFBMQVRGT1JNKENPQ09BKQordm9pZCBzYXZlQ29v
a2llcyhOU0hUVFBDb29raWVTdG9yYWdlICosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFu
YWdlci5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbWVzc2FnZXMgLT4gV2ViQ29va2llTWFuYWdlciBOb3RS
ZWZDb3VudAogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3luYwogCiAgICAgdm9pZCBT
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJDb3JlOjpIVFRQQ29va2ll
QWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lkIEdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQ
b2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRUUENv
b2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAgdm9pZCBTdGFydE9ic2Vy
dmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIHZvaWQgU3Rv
cE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFuYWdl
ckN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29v
a2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysg
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFuYWdl
ckN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotdm9pZCBXZWJDb29raWVNYW5hZ2Vy
OjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIENvb2tpZUFjY2VwdFBvbGlj
eSBjdXJsUG9saWN5ID0gQ29va2llQWNjZXB0UG9saWN5OjpPbmx5RnJvbU1haW5Eb2N1bWVudERv
bWFpbjsKICAgICBzd2l0Y2ggKHBvbGljeSkgewpAQCAtNTUsNiArNTUsNyBAQCB2b2lkIFdlYkNv
b2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvCiAgICAgbV9wcm9jZXNzLmZvckVhY2hOZXR3
b3JrU3RvcmFnZVNlc3Npb24oW2N1cmxQb2xpY3ldIChjb25zdCBhdXRvJiBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24pIHsKICAgICAgICAgbmV0d29ya1N0b3JhZ2VTZXNzaW9uLnNldENvb2tpZUFjY2Vw
dFBvbGljeShjdXJsUG9saWN5KTsKICAgICB9KTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcigpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ29va2llcy9tYWMvV2ViQ29va2llTWFuYWdlck1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJN
YWMubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9tYWMvV2ViQ29va2llTWFuYWdlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9IVFRQQ29va2llQWNjZXB0UG9saWN5Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9ydCA8cGFsL3Nw
aS9jZi9DRk5ldHdvcmtTUEkuaD4KKyNpbXBvcnQgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4K
ICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpA
QCAtNTMsMTUgKzU0LDE5IEBAIHN0YXRpYyBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5
IHQKICAgICByZXR1cm4gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeUFsd2F5czsKIH0K
IAotdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6
OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5
IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFj
Y2Vzc1Jhd0Nvb2tpZXMpKTsKIAorICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIFtb
TlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2llQWNj
ZXB0UG9saWN5OnN0YXRpY19jYXN0PE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeT4ocG9saWN5KV07
CisgICAgc2F2ZUNvb2tpZXMoW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0
b3JhZ2VdLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogCiAgICAgbV9wcm9jZXNzLmZvckVh
Y2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oWyZdIChjb25zdCBhdXRvJiBuZXR3b3JrU3RvcmFnZVNl
c3Npb24pIHsKICAgICAgICAgaWYgKGF1dG8gY29va2llU3RvcmFnZSA9IG5ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5jb29raWVTdG9yYWdlKCkpCiAgICAgICAgICAgICBDRkhUVFBDb29raWVTdG9yYWdl
U2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHRvQ0ZIVFRQQ29va2ll
U3RvcmFnZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKKyAgICAgICAgaWYgKGF1dG8gKnN0b3JhZ2Ug
PSBuZXR3b3JrU3RvcmFnZVNlc3Npb24ubnNDb29raWVTdG9yYWdlKCkpCisgICAgICAgICAgICBz
YXZlQ29va2llcyhzdG9yYWdlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0pOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJD
b29raWVNYW5hZ2VyU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCShyZXZpc2lvbiAy
Njc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJD
b29raWVNYW5hZ2VyU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDExICszNywxMiBAQAog
bmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotdm9pZCBXZWJD
b29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0
SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fcHJv
Y2Vzcy5mb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtwb2xpY3ldIChhdXRvJiBzZXNzaW9u
KSB7CiAgICAgICAgIHNlc3Npb24uc2V0Q29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7CiAgICAg
fSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUg
c3RvcmFnZVR5cGUpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3Jh
Z2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAJKHJldmlz
aW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9M
b2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw3ICsyMTQsOCBA
QCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpjbGVhcigpCiAKIHZvaWQgTG9jYWxTdG9yYWdl
RGF0YWJhc2U6OmNsb3NlKCkKIHsKLSAgICBBU1NFUlQoIW1faXNDbG9zZWQpOworICAgIGlmICht
X2lzQ2xvc2VkKQorICAgICAgICByZXR1cm47CiAgICAgbV9pc0Nsb3NlZCA9IHRydWU7CiAKICAg
ICBpZiAobV9kaWRTY2hlZHVsZURhdGFiYXNlVXBkYXRlKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29h
Lm1tCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nv
Y29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbXBvcnQgIk5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgogI2ltcG9ydCAiTmV0d29ya1Nl
c3Npb25Db2NvYS5oIgogI2ltcG9ydCAiU2FuZGJveEV4dGVuc2lvbi5oIgorI2ltcG9ydCAiV2Vi
Q29va2llTWFuYWdlci5oIgogI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24u
aD4KICNpbXBvcnQgPFdlYkNvcmUvUHVibGljU3VmZml4Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jl
c291cmNlUmVxdWVzdENGTmV0Lmg+CkBAIC03OCw5ICs3OSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVy
bWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5j
b250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRl
bnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9DRk5ldHdvcmtTZXRBVFNDb250ZXh0KHBh
cmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwpAQCAtMTA1LDExICsxMDMsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAgICAgW05TVVJMQ2FjaGUg
c2V0U2hhcmVkVVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1D
cmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5p
cXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNz
Ojpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9B
UFBMSUNBVElPTl9BVURJVF9EQVRBKQpAQCAtMjIxLDcgKzIxNCw3IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmZsdXNoQ29va2llcyhjb25zdCAKICAgICBwbGF0Zm9ybUZsdXNoQ29va2llcyhzZXNz
aW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotc3RhdGljIHZvaWQgc2F2
ZUNvb2tpZXMoTlNIVFRQQ29va2llU3RvcmFnZSAqY29va2llU3RvcmFnZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBzYXZlQ29va2llcyhOU0hU
VFBDb29raWVTdG9yYWdlICpjb29raWVTdG9yYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
ICAgICBBU1NFUlQoY29va2llU3RvcmFnZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAkocmV2aXNp
b24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQ
cm9jZXNzQ3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSw2IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3Jt
Q3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVu
aXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmlj
SFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0
ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRl
eHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVt
b3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01NSwxNSArNTUsMTEgQEAgdm9pZCBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6
ZW5zdXJlV2VicwogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHko
cGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBSZXRh
aW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gdWlQcm9jZXNzQ29va2llU3RvcmFnZTsKLSAg
ICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nv
b2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSkKKyAgICBpZiAoIXNlc3Npb25JRC5pc0Vw
aGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVy
LmlzRW1wdHkoKSAmJiBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9u
SUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAgICAgICAgdWlQcm9j
ZXNzQ29va2llU3RvcmFnZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlpbmdEYXRhKHBhcmFt
ZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIpOwogCiAgICAgbmV0d29ya1By
b2Nlc3MuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgbWFrZVN0cmluZyhiYXNl
LCAnLicsIHNlc3Npb25JRC50b1VJbnQ2NCgpKSwgV1RGTW92ZSh1aVByb2Nlc3NDb29raWVTdG9y
YWdlKSk7CiAKLSAgICBhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Byb2Nlc3Muc3RvcmFnZVNlc3Np
b24oc2Vzc2lvbklEKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMu
cGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHNlc3Npb24tPnNldENvb2tpZShjb29raWUpOwotCiAg
ICAgbmV0d29ya1Byb2Nlc3Muc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpj
cmVhdGUobmV0d29ya1Byb2Nlc3MsIFdURk1vdmUocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMpKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5jcHAJKHJldmlzaW9u
IDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJv
Y2Vzc01haW5Tb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBjbGFzcyBO
ZXR3b3JrUHJvY2Vzc01haW5Tb3VwIGZpbmFsOiBwdWJsCiBwdWJsaWM6CiAgICAgdm9pZCBwbGF0
Zm9ybUZpbmFsaXplKCkgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJcyB0aGlz
IHN0aWxsIG5lZWRlZD8gV2Ugc2hvdWxkIHByb2JhYmx5IGRlc3Ryb3kgYWxsIGV4aXN0aW5nIHNl
c3Npb25zIGF0IHRoaXMgcG9pbnQgaW5zdGVhZC4KICAgICAgICAgLy8gTmVlZGVkIHRvIGRlc3Ry
b3kgdGhlIFNvdXBTZXNzaW9uIGFuZCBTb3VwQ29va2llSmFyLCBlLmcuIHRvIGF2b2lkCiAgICAg
ICAgIC8vIGxlYWtpbmcgU1FMaXRlIHRlbXBvcmFyeSBqb3VybmFsaW5nIGZpbGVzLgogICAgICAg
ICBnbG9iYWxOZXR3b3JrUHJvY2Vzcy0+ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAkocmV2aXNpb24gMjY3NTM2
KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwxMSArMTM1LDYgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogICAgICAgICB1c2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
Q2hhbmdlZChwYXJhbWV0ZXJzLmxhbmd1YWdlcyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3Jz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgYm9vbCBpZ25vcmVUTFNFcnJvcnMpCiB7CiAgICAg
aWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKQpJbmRleDogU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0F0dGFjaG1lbnQuaAkocmV2aXNpb24gMjY3NTM2KQorKysg
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC05NSw4ICs5NSw4IEBAIHByaXZhdGU6CiAgICAgaW50IG1fZmlsZURlc2NyaXB0b3IgeyAtMSB9
OwogICAgIHNpemVfdCBtX3NpemU7CiAjZWxpZiBPUyhEQVJXSU4pCi0gICAgbWFjaF9wb3J0X25h
bWVfdCBtX3BvcnQ7Ci0gICAgbWFjaF9tc2dfdHlwZV9uYW1lX3QgbV9kaXNwb3NpdGlvbjsKKyAg
ICBtYWNoX3BvcnRfbmFtZV90IG1fcG9ydCB7IDAgfTsKKyAgICBtYWNoX21zZ190eXBlX25hbWVf
dCBtX2Rpc3Bvc2l0aW9uIHsgMCB9OwogI2VsaWYgT1MoV0lORE9XUykKICAgICBIQU5ETEUgbV9o
YW5kbGUgeyBJTlZBTElEX0hBTkRMRV9WQUxVRSB9OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCShyZXZp
c2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEzICs0MCw5IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZSgKICAgICBlbmNvZGVyIDw8IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVu
dGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7
Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2llczsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5IDw8IGluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+
IFdlYgogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMuY29va2ll
U3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpjb29raWVTdG9yYWdlUGF0aEV4
dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBPcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6Q29va2llPj4g
cGVuZGluZ0Nvb2tpZXM7Ci0gICAgZGVjb2RlciA+PiBwZW5kaW5nQ29va2llczsKLSAgICBpZiAo
IXBlbmRpbmdDb29raWVzKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHBhcmFt
ZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBXVEZNb3ZlKCpwZW5kaW5nQ29va2llcyk7Ci0KICNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBPcHRpb25hbDxTdHJpbmc+IGluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeTsKICAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsK
QEAgLTEwMSwxNCArOTEsNiBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4g
V2ViCiAgICAgaWYgKCFpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBP
cHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9i
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNl
VGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFpbmRleGVkRGF0YWJh
c2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNF
X1dPUktFUikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9TaGFy
ZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTUg
KzUxLDExIEBAIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyB7CiAKICAgICBWZWN0
b3I8dWludDhfdD4gdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAg
IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29raWVzOwogICAgIE5ldHdvcmtTZXNz
aW9uQ3JlYXRpb25QYXJhbWV0ZXJzIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKIAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIFN0cmluZyBpbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHku
aAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5
UHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94eSgpOwogCiAgICAgdm9pZCBjb25uZWN0
KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGVybWluYXRlKCk7
CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigpID0gMDsKIApJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
Y3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29r
aWVNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1
ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1By
b3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgiCiAjaW5jbHVkZSAiV2ViQ29v
a2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5TWVz
c2FnZXMuaCIKQEAgLTM5LDI0ICs0MCwxNiBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAotY29uc3QgY2hhciogV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
dXBwbGVtZW50TmFtZSgpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykKKyAgICA6IG1fbmV0d29y
a1Byb2Nlc3MobWFrZVdlYWtQdHIobmV0d29ya1Byb2Nlc3MpKQogewotICAgIHJldHVybiAiV2Vi
Q29va2llTWFuYWdlclByb3h5IjsKLX0KLQotUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gV2Vi
Q29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94eShwcm9jZXNz
UG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQcm94
eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi0gICAgOiBXZWJDb250ZXh0U3VwcGxlbWVu
dChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250ZXh0U3VwcGxlbWVudDo6cHJvY2Vzc1Bvb2wo
KS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIG5ldHdvcmtQcm9jZXNzLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksICp0aGlzKTsKIH0KIAogV2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2ll
TWFuYWdlclByb3h5KCkKIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CiAgICAgQVNTRVJUKG1fY29va2ll
T2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiB9CiAKQEAgLTY1LDEwMiArNTgsODQgQEAgdm9pZCBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmluaXRpYWxpemVDbAogICAgIG1fY2xpZW50LmluaXRpYWxpemUo
Y2xpZW50KTsKIH0KIAotLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLQotdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnByb2Nlc3NQb29sRGVzdHJveWVkKCkKLXsKLSAgICBWZWN0b3I8T2JzZXJ2
ZXIqPiBvYnNlcnZlcnM7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlclNldCA6IG1fY29va2llT2Jz
ZXJ2ZXJzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZl
clNldCkKLSAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQob2JzZXJ2ZXIpOwotICAgIH0KLQot
ICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyLT5t
YW5hZ2VyRGVzdHJveWVkKCk7Ci0KLSAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0
eSgpKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShX
ZWJQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJv
Y2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2Jq
ZWN0OjpyZWYoKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29u
dGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpkZXJlZigpOwotfQotCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYp
PiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQor
ICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBwcm9jZXNzUG9vbCgp
LT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklELCBo
b3N0bmFtZXMpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyksIDApOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQp
CiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGlu
Z0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVz
KHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29r
aWVzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVs
ZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ29va2llJiBjb29raWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1
dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFtjYWxsYmFja0Z1
bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKV0oKSBtdXRhYmxlIHsKKyAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklE
LCBjb29raWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCiAgICAgICAg
IGNhbGxiYWNrRnVuY3Rpb24oKTsKLSAgICB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgV2FsbFRpbWUgdGltZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNr
RnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVk
U2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01v
ZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7
CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
YWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9u
SUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBjb29raWVz
KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFj
a0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMs
IGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdv
cmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RG
TW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3Vt
ZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBj
YWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRB
bGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAg
ICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29v
a2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisg
ICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmdldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwp
LCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
KyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShjYWxs
YmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7
CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNo
YW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOwor
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMo
c2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJv
Y2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhz
ZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nv
b2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpzZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
V1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmIGNhbGxiYWNrKQpAQCAtMjExLDE4ICsxODYsMTggQEAg
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNvb2tpZXNEaWRDaAogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwg
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotI2lmIFVTRShTT1VQKQotICAgIHByb2Nlc3NQb29sKCkt
PnNldEluaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAg
IGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgV1RGTW92
ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0K
IAotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBv
bGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1bmN0
aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzZXNzaW9uSUQpLCBXVEZN
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rp
b24oSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6TmV2ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5oCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTEgKzU2LDkgQEAg
dHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpBcnJheSo+IEFycgogdHlwZWRlZiBHZW5lcmlj
Q2FsbGJhY2s8V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeT4gSFRUUENvb2tpZUFjY2Vw
dFBvbGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7CiAKLWNsYXNzIFdlYkNvb2tpZU1h
bmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNv
b2tpZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1lbnQsIHByaXZhdGUgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQ
STo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHByaXZhdGUg
SVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBz
dXBwbGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+
IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRpYyBSZWY8V2ViQ29va2llTWFuYWdl
clByb3h5PiBjcmVhdGUoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KG5ldHdvcmtQcm9jZXNzKSk7
IH0KICAgICB2aXJ0dWFsIH5XZWJDb29raWVNYW5hZ2VyUHJveHkoKTsKIAogICAgIHZvaWQgaW5p
dGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKik7CkBAIC0xMDQs
MTcgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQVBJOjpPYmplY3Q6OmRlcmVmOwogCiBw
cml2YXRlOgotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCopOworICAg
IFdlYkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAKICAgICB2b2lk
IGNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gV2ViQ29udGV4dFN1
cHBsZW1lbnQKLSAgICB2b2lkIHByb2Nlc3NQb29sRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZv
aWQgcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlcmVmV2Vi
Q29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLQogICAgIC8vIElQQzo6TWVzc2FnZVJlY2Vp
dmVyCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKSBvdmVycmlkZTsKIApAQCAtMTI1LDYgKzExNiw3IEBAIHByaXZhdGU6CiAgICAgSGFz
aE1hcDxQQUw6OlNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPj4gbV9sZWdhY3lDb29r
aWVPYnNlcnZlcnM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgSGFzaFNldDxPYnNlcnZl
cio+PiBtX2Nvb2tpZU9ic2VydmVyczsKIAorICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94
eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHlDbGllbnQgbV9j
bGllbnQ7CiAKICNpZiBVU0UoU09VUCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0Niw3ICsxNzQ2LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYQogICAgICAgICByZXR1cm47
CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb250cm9sbGVkQnlBdXRvbWF0aW9u
KGNvbnRyb2xsZWQpKTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9s
bGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJv
bGxlZEJ5QXV0b21hdGlvbikpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9sbGVk
QnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJvbGxl
ZEJ5QXV0b21hdGlvbiksIDApOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y3JlYXRlSW5zcGVj
dG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFy
Z2V0VHlwZSB0eXBlKQpAQCAtMzIxMCwxMSArMzIxMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpp
c0ZvcmNlZEludG9BcHBCb3VuZE0KIHZvaWQgV2ViUGFnZVByb3h5OjpkaXNhYmxlU2VydmljZVdv
cmtlckVudGl0bGVtZW50SW5OZXR3b3JrUHJvY2VzcygpCiB7CiAjaWYgRU5BQkxFKEFQUF9CT1VO
RF9ET01BSU5TKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCksIDApOwotICAgIH0K
KyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCAwKTsKICNl
bmRpZgogfQogCkBAIC0zMjIzLDEzICszMjE5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFy
U2VydmljZVdvcmtlckVudAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykgJiYgIVBMQVRG
T1JNKE1BQ0NBVEFMWVNUKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIHNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRs
ZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJp
ZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFT
dG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwog
I2VuZGlmCkBAIC00NDIzLDcgKzQ0MTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cHJlY29ubmVj
dFRvKGNvbnN0IFVSCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3kgPSBtX2NhblVzZUNyZWRlbnRpYWxTdG9yYWdlID8gV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3k6OlVzZSA6IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpE
b05vdFVzZTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5wcmVjb25uZWN0VG8oc2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlEKCks
IHVybCwgdXNlckFnZW50KCksIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRpbmdU
b0FwcEJvdW5kRG9tYWluKCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vz
cygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQoKSwg
dXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1Rv
QXBwQm91bmREb21haW4oKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDYW5Vc2VDcmVk
ZW50aWFsU3RvcmFnZShib29sIGNhblVzZUNyZWRlbnRpYWxTdG9yYWdlKQpAQCAtNDcxOSw3ICs0
NzA5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZQogICAgICAg
ICAgICAgUmVnaXN0cmFibGVEb21haW4gY3VycmVudERvbWFpbiB7IGN1cnJlbnRSZXF1ZXN0LnVy
bCgpIH07CiAgICAgICAgICAgICBVUkwgcmVxdWVzdGVyVVJMIHsgVVJMKCksIHJlcXVlc3Rlck9y
aWdpbi50b1N0cmluZygpIH07CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnREb21haW4ubWF0Y2hl
cyhyZXF1ZXN0ZXJVUkwpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2wo
KS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9LCBjdXJy
ZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50aWZpZXIsIG1fd2ViUGFn
ZUlEKTsKKyAgICAgICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNz
KCkuZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwgY3Vy
cmVudERvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dlYlBh
Z2VJRCk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTQ3NTcsNyArNDc0Nyw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUKICAgICBpZiAobmF2aWdhdGlv
biAmJiBmcmFtZS0+aXNNYWluRnJhbWUoKSkgewogICAgICAgICBpZiAoYXV0byYgYWRDbGlja0F0
dHJpYnV0aW9uID0gbmF2aWdhdGlvbi0+YWRDbGlja0F0dHJpYnV0aW9uKCkpIHsKICAgICAgICAg
ICAgIGlmIChhZENsaWNrQXR0cmlidXRpb24tPmRlc3RpbmF0aW9uKCkubWF0Y2hlcyhmcmFtZS0+
dXJsKCkpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9O
ZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0
dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmli
dXRpb24pKTsKKyAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3RvcmVBZENsaWNrQXR0cmlidXRp
b24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKmFkQ2xpY2tBdHRyaWJ1dGlvbiks
IDApOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MzcxLDcgKzUzNjEsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvCiAgICAgaWYgKHRhcmdldEhvc3QuaXNFbXB0
eSgpIHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3QgPT0gc291cmNlVVJM
Lmhvc3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgp
LnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TG9nRnJh
bWVOYXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxl
RG9tYWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVSTCB9LCBSZWdp
c3RyYWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5pc01haW5GcmFt
ZSgpLCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yTWFp
bkZyYW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlcikpOworICAgIHdl
YnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBw
YWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVkaXJlY3QsIGZy
YW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRGaW5pc2hEb2N1
bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlV
c2VyKSwgMCk7CiB9CiAjZW5kaWYKIApAQCAtOTk5Niw1OCArOTk4NiwyNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6c3lzdGVtUHJldmlld0FjdGlvblRyCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkdW1w
QWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYg
KCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAg
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5l
dHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2Fn
ZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1ZSks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9y
ZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcobV93
ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFsdWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25D
b252ZXJzaW9uVVJMRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1f
d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCku
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0
dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgp
KSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJl
ZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQ
cm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFy
a0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKICNpZiBF
TkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBA
QAogI2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nSW5pdGlh
bGl6YXRpb24uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uSW5mby5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtQcm9jZXNzUHJveHkuaCIKQEAgLTE0Myw4ICsxNDIsMTAgQEAKICNlbmRpZgogCiAj
ZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxF
QVNFX0xPRyhjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19W
QV9BUkdTX18pCisjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhjaGFu
bmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZt
dCwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJS
T1IoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIlcCAtIFdl
YlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJP
Q0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFT
RV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAi
JXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5l
IFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5uZWwsIGZt
dCwgLi4uKSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2Vk
KCksIGNoYW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIsNiArMjMz
LDExIEBAIHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXQKICAgICByZXR1
cm4gc2V0OwogfQogCitWZWN0b3I8U3RyaW5nPiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dp
dGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkKK3sKKyAgICByZXR1cm4gY29weVRvVmVjdG9yKGds
b2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKTsKK30KKwogV2ViUHJv
Y2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBj
b25maWd1cmF0aW9uKQogICAgIDogbV9jb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24uY29weSgp
KQogICAgICwgbV9kZWZhdWx0UGFnZUdyb3VwKFdlYlBhZ2VHcm91cDo6Y3JlYXRlKCkpCkBAIC0y
MzksNyArMjQ1LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvYwog
ICAgICwgbV9hdXRvbWF0aW9uQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpBdXRvbWF0aW9uQ2xpZW50
PigpKQogICAgICwgbV9kb3dubG9hZENsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRD
bGllbnQ+KCkpCiAgICAgLCBtX2hpc3RvcnlDbGllbnQobWFrZVVuaXF1ZTxBUEk6OkxlZ2FjeUNv
bnRleHRIaXN0b3J5Q2xpZW50PigpKQotICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQobWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICAgICAs
IG1fdmlzaXRlZExpbmtTdG9yZShWaXNpdGVkTGlua1N0b3JlOjpjcmVhdGUoKSkKICNpZiBQTEFU
Rk9STShNQUMpCiAgICAgLCBtX2hpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyKG1h
a2VVbmlxdWU8SGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXI+KCp0aGlzKSkKQEAg
LTI2Nyw5ICsyNzIsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9j
CiAjZW5kaWYKICAgICB9KTsKIAotICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlICYmIFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBt
X3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKTsKLQogICAgIGZvciAoYXV0byYgc2NoZW1lIDogbV9jb25maWd1cmF0aW9uLT5hbHdh
eXNSZXZhbGlkYXRlZFVSTFNjaGVtZXMoKSkKICAgICAgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFz
QWx3YXlzUmV2YWxpZGF0ZWQuYWRkKHNjaGVtZSk7CiAKQEAgLTI4NSw3ICsyODcsNiBAQCBXZWJQ
cm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jCiAgICAgYWRkTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhp
cyk7CiAKICAgICAvLyBOT1RFOiBUaGVzZSBzdWItb2JqZWN0cyBtdXN0IGJlIGluaXRpYWxpemVk
IGFmdGVyIG1fbWVzc2FnZVJlY2VpdmVyTWFwLi4KLSAgICBhZGRTdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdl
clByb3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5
PigpOwogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQpAQCAtMzQyLDkgKzM0Myw2IEBAIFdlYlBy
b2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2woKQogICAgIHByb2Nlc3NQb29sQ291bnRlci5kZWNy
ZW1lbnQoKTsKICNlbmRpZgogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNodXREb3duUHJvY2VzcygpOwotCiAjaWYgRU5BQkxFKEdBTUVQQUQp
CiAgICAgaWYgKCFtX3Byb2Nlc3Nlc1VzaW5nR2FtZXBhZHMuaXNFbXB0eSgpKQogICAgICAgICBV
SUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkucHJvY2Vzc1Bvb2xTdG9wcGVkVXNpbmdHYW1l
cGFkcygqdGhpcyk7CkBAIC00MDIsMTYgKzQwMCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
dEF1dG9tYXRpb25DbGllbnQKICAgICAgICAgbV9hdXRvbWF0aW9uQ2xpZW50ID0gV1RGTW92ZShh
dXRvbWF0aW9uQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudD4mJiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi17Ci0jaWYg
RU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKLSAgICBpZiAoIWN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCkKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQgPSBtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpOwotICAg
IGVsc2UKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBXVEZNb3ZlKGN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0
cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKQogewogICAgIC8v
IEd1YXJkIGFnYWluc3QgQVBJIG1pc3VzZS4KQEAgLTQyMSwxMSArNDA5LDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudAogICAgIG1fY29uZmlndXJhdGlvbi0+c2V0
Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGN1c3RvbVdlYkNvbnRlbnRT
ZXJ2aWNlQnVuZGxlSWRlbnRpZmllcik7CiB9CiAKLUlQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fbmV0
d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFu
Z3VhZ2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViUHJvY2Vz
c1Bvb2wqPihjb250ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7CkBAIC00MzUsOCArNDE4LDcgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9BbGxQ
cm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFu
Z2VkKCkpOwogI2lmIFVTRShTT1VQKQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclBy
ZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7Cisg
ICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5uZXR3b3JrUHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hh
bmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKICNlbmRpZgogfQogCkBAIC00NDks
NyArNDMxLDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZnVsbEtleWJvYXJkQWNjZXNzTQogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE1lbW9yeVByZXNzdXJlRXZlbnQoYm9vbCBpc0NyaXRpY2Fs
KQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6
RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCkpOwotICAgIHNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVt
b3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSk7CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9j
ZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVj
ZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCksIDApOwogI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQogICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5z
ZW5kTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKTsKICNlbmRpZgpAQCAtNDc0LDI3NSAr
NDU3LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2NyZWVuUHJvcGVydGllc1N0YQogI2VuZGlm
CiB9CiAKLU5ldHdvcmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3Jr
UHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKLXsKLSAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEg
dGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFp
biB0aHJlYWRzLgotICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2Ug
dGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KLSAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlmICghUnVuTG9vcDo6
aXNNYWluKCkpIHsKLSAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7
Ci0gICAgfQotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgaWYgKHdpdGhX
ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNz
aW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICB3aXRoV2Vi
c2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBhdXRvIG5ldHdvcmtQcm9j
ZXNzID0gbWFrZVVuaXF1ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7Ci0KLSAgICBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCi0gICAgaWYgKG1fd2Vi
c2l0ZURhdGFTdG9yZSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLnBlbmRpbmdDb29raWVzID0gY29weVRvVmVjdG9yKG1fd2Vic2l0ZURhdGFTdG9yZS0+
cGVuZGluZ0Nvb2tpZXMoKSk7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5k
aW5nQ29va2llcygpOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VB
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3Vy
YXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVy
KCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lH
bG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotCi0gICAgZm9yIChhdXRv
JiBzY2hlbWUgOiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkK
LSAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29s
cy5hcHBlbmQoc2NoZW1lKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU3RyaW5n
IGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURp
cmVjdG9yeSgpOwotICAgIGlmICghY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0g
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9y
eSA9IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYg
KCFjb250YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVz
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7Ci0KLSAgICBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bv
b2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyZW50QnVuZGxlRGlyZWN0
b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBh
cmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBh
cmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclRlbXBvcmFyeUZpbGUoZW1wdHlTdHJpbmcoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6
UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWRE
YXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotI2VuZGlm
Ci0KLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9W
ZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVy
QXNTZWN1cmUoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNz
aW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRp
bmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3Vy
aXR5UG9saWN5KCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2Fs
ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVz
VG9SZWdpc3RlckFzTG9jYWwoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRv
bigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotICAgIC8vICoqKioqKioqKgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNo
YW5nZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlz
ayB3aXRob3V0IGZpcnN0IGNvbnN1bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjov
L3Byb2JsZW0vMTc0NTQ3MTI+KQotICAgIC8vICoqKioqKioqKgotICAgIGlmIChtX3dlYnNpdGVE
YXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZElu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVj
dG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+Y3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQot
I2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQot
ICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBt
X3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSgpOwotICAgIGlmICghcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5KQotICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnkgPSAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExv
Y2FsU3RvcmFnZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9y
YWdlRGlyZWN0b3J5KQotICAgICAgICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9
IGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0KLSAgICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURh
dGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBu
dWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVj
dG9yeShjYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3Rv
cnkgPSBXVEZNb3ZlKGNhY2hlU3RvcmFnZURpcmVjdG9yeSk7Ci0gICAgfQotCi0gICAgU3RyaW5n
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0g
ICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGFyYW1ldGVycy5kaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NE
aXJlY3RvcnksIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwotCi0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAg
Ym9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7
Ci0gICAgYm9vbCBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoUkVT
T1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGUgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IFdlYkNvcmU6OlRoaXJkUGFy
dHlDb29raWVCbG9ja2luZ01vZGU6OkFsbDsKLSAgICBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZCBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IFdlYkNv
cmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKLSNlbmRpZgotICAgIFdl
YkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJzaXRl
RGF0YVJlbW92YWxNb2RlID0gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGU6OkFsbEJ1dENvb2tpZXM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gc3RhbmRh
bG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4+IGFwcEJvdW5kRG9tYWluczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBt
YW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fdGNj
UHJlZmVyZW5jZUVuYWJsZWQgPSBkb2VzQXBwSGF2ZUlUUEVuYWJsZWQoKTsKLSAgICBpZiAod2l0
aFdlYnNpdGVEYXRhU3RvcmUgJiYgIXdpdGhXZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhw
bGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBt
X3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyk7Ci0gICAgfSBlbHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUgJiYgIW1fd2Vic2l0ZURhdGFT
dG9yZS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgbV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmVFeGlzdHMoKSAmJiAhV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZSgpLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZQotICAg
ICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxl
ZDsKLSNlbmRpZgotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2
ZW50ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2so
KTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewot
ICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURh
dGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAg
ICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAg
ICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxl
RGVidWdNb2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAg
ICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5zYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAg
Zmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
c3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5z
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLmFwcEJvdW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNl
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLm1hbnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3
aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0
b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3Rv
cmFnZVF1b3RhKCk7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVE
aXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsK
LSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURp
cmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3
b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNvbnN0IGF1dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRh
U3RvcmUtPnJlc29sdmVkSFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3Rz
U3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3Jh
Z2VEaXJlY3RvcnkgPSBoc3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVu
c2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkg
ewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NM
b2dUZXN0aW5nRXZlbnQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5n
Q2FsbGJhY2soKTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljcykgewotICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dl
YnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0g
ICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhv
c3Q7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
LmVuYWJsZURlYnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQot
ICAgICAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29v
a2llQmxvY2tpbmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVu
YWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMuc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlOwotICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9t
YWluID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJh
bWV0ZXJzLnN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5k
RG9tYWlucyA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5hcHBCb3VuZERvbWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5tYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1
b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAg
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3Jp
Z2luU3RvcmFnZVF1b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2lu
U3RvcmFnZVF1b3RhKCk7Ci0KLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgp
OwotICAgICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAg
ICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5
OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNo
ZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3
b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y29uc3QgYXV0byYgaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJl
c29sdmVkSFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURp
cmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3Rv
cnkgPSBoc3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlw
ZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7
Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVj
dG9yeTsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNo
ZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3
b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lmIEhBVkUoQ0ZO
RVRXT1JLX0FMVEVSTkFUSVZFX1NFUlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6Omh0
dHAzRW5hYmxlZCgpKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9y
eSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2VzRGlyZWN0b3J5
KCk7Ci0gICAgICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnksIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFs
dGVybmF0aXZlU2VydmljZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
Lmh0dHAzRW5hYmxlZCA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBpc0l0cFN0YXRl
RXhwbGljaXRseVNldCA9IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXJhbWV0ZXJzID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewotICAgICAgICBX
VEZNb3ZlKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAgICBXVEZNb3Zl
KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpLAotICAgICAg
ICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0YXRlRXhwbGlj
aXRseVNldCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdF
dmVudCwKLSAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAgZW5hYmxlUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQotICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlLAotICAgICAg
ICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0
aW9uRG9tYWluLAotICAgICAgICBhcHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZh
bGVudFJlc291cmNlLAotICAgIH07Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmlj
IHBhcmFtZXRlcnMKLSAgICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0
ZXJzKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3
b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3
b3JrUHJvY2Vzc0xhdGVuY3lRT1MoKSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAw
KTsKLSNlbmRpZgotCi0gICAgbmV0d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24o
KTsKLQotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAg
ICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQot
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUg
c2Vzc2lvbnMgdGhhdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAg
ICBmb3IgKGF1dG8mIHNlc3Npb25JRCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpl
eGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAg
ICB9Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0g
ICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpu
ZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQ
cm94eSkKIHsKLSAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3
b3JrUHJvY2Vzc1Byb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChh
dXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxl
bWVudC0+cHJvY2Vzc0RpZENsb3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzUxLDkg
KzQ2Nyw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2gKICAgICBp
ZiAobV9hdXRvbWF0aW9uU2Vzc2lvbikKICAgICAgICAgbV9hdXRvbWF0aW9uU2Vzc2lvbi0+dGVy
bWluYXRlKCk7CiAKLSAgICAvLyBMZWF2ZSB0aGUgcHJvY2VzcyBwcm94eSBhcm91bmQgZHVyaW5n
IGNsaWVudCBjYWxsLCBzbyB0aGF0IHRoZSBjbGllbnQgY291bGQgcXVlcnkgdGhlIHByb2Nlc3Mg
aWRlbnRpZmllci4KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKLQogICAgIHRlcm1p
bmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKQEAgLTc2NCwyMCArNDc3LDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2NlcwogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdl
YlByb2Nlc3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAgICBlbnN1cmVOZXR3b3Jr
UHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KSwgd2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwgcmVwbHkg
PSBXVEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc1ZhbGlkKGNvbm5l
Y3Rpb25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5ICYmIHdlYWtUaGlzKSkg
ewotICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoUHJvY2Vzcywg
ImdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0IGF0dGVtcHQsIHJldHJ5
aW5nIik7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3ZWJQcm9jZXNz
UHJveHksIFdURk1vdmUocmVwbHkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7Ci0gICAgfSk7Ci19Ci0KICNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpncHVQcm9jZXNzQ3Jhc2hlZChQcm9j
ZXNzSUQgaWRlbnRpZmllcikKIHsKQEAgLTgwMSwyMyArNTAwLDI2IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmdldEdQVVByb2Nlc3NDb25uZWMKIH0KICNlbmRpZgogCitib29sIFdlYlByb2Nlc3NQ
b29sOjpzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSBmYWxzZTsKKwogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiBw
cm94eSwgUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChwcm94eSwgJnByb3h5ID09IG1fbmV0d29ya1Byb2Nl
c3MuZ2V0KCkpOwotCi0gICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3Rv
cmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwot
Ci0gICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0
YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0gICAgICAgIHdlYnNpdGVEYXRh
U3RvcmUgPSBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7Ci0gICAgfQorICAgIGF1dG8qIHdlYnNp
dGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Np
b25JRChzZXNzaW9uSUQpOworICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAgd2Vi
c2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIo
KTsKKyAgICBpZiAoIXByb2Nlc3NQb29scygpLnNpemUoKSkKKyAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFJlZjxXZWJQcm9jZXNzUG9vbD4+IHNlcnZpY2VXb3JrZXJQcm9jZXNzUG9vbChX
ZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjcmVh
dGUoKS5nZXQoKSkpOworCisgICAgLy8gQXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdCBwcm9j
ZXNzIHBvb2wgdG8gaG9zdCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vzcy4KKyAgICBhdXRvKiBw
cm9jZXNzUG9vbCA9IHByb2Nlc3NQb29scygpWzBdOworICAgIEFTU0VSVChwcm9jZXNzUG9vbCk7
CiAKICAgICBXZWJQcm9jZXNzUHJveHkqIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgeyBudWxs
cHRyIH07Ci0gICAgaWYgKCFtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGlm
IChwcm9jZXNzID09IG1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9jZXNzLT5pc0R1bW15UHJvY2Vz
c1Byb3h5KCkpCisKKyAgICBpZiAoIXNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcykg
eworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMp
IHsKKyAgICAgICAgICAgIGlmIChwcm9jZXNzID09IHByb2Nlc3NQb29sLT5tX3ByZXdhcm1lZFBy
b2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94eSgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCZwcm9jZXNzLT53ZWJzaXRlRGF0YVN0b3JlKCkg
IT0gd2Vic2l0ZURhdGFTdG9yZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTgyNSwz
NSArNTI3LDM1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnQKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eSA9IHByb2Nlc3MuZ2V0KCk7Ci0gICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyh1c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlm
aWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CisgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyhwcm9jZXNzUG9vbC0+dXNlckNvbnRlbnRDb250
cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkpOwogCi0gICAgICAgICAgICBXRUJQ
Uk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxp
c2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgcmV1c2luZyBhbiBleGlz
dGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkp
OworICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFU
SUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3
b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdlYiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQ
SUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KIAogICAgIGlmICghc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkgewotICAgICAg
ICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6Y3JlYXRlRm9yU2Vydmlj
ZVdvcmtlcnMoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFT
dG9yZSk7CisgICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5ID0gV2ViUHJvY2Vzc1Byb3h5Ojpj
cmVhdGVGb3JTZXJ2aWNlV29ya2VycygqcHJvY2Vzc1Bvb2wsIFdURk1vdmUocmVnaXN0cmFibGVE
b21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CiAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNz
UHJveHkgPSBuZXdQcm9jZXNzUHJveHkucHRyKCk7CiAKLSAgICAgICAgV0VCUFJPQ0VTU1BPT0xf
UkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29y
a2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJv
eHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAg
ICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2aWNl
V29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
IGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVk
KSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkt
PnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCi0gICAgICAgIGluaXRpYWxpemVOZXdXZWJQcm9jZXNz
KG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFTdG9yZSk7Ci0gICAgICAgIG1fcHJvY2Vzc2Vz
LmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOworICAgICAgICBwcm9jZXNzUG9vbC0+
aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJvY2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3Jl
KTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1By
b2Nlc3NQcm94eSkpOwogICAgIH0KIAotICAgIEFTU0VSVCghbV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSk7Ci0gICAgbV9zZXJ2aWNl
V29ya2VyUHJvY2Vzc2VzLmFkZCgqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSk7CisgICAgQVNT
RVJUKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29udGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHkpKTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuYWRkKCpzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5KTsKIAotICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVzdGFi
bGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzID8gbV9z
ZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJl
ZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgaWYg
KCFtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxsKCkpCi0gICAgICAgIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQobV9zZXJ2aWNlV29ya2Vy
VXNlckFnZW50KTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lc3RhYmxpc2hTZXJ2
aWNlV29ya2VyQ29udGV4dChwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMg
PyBwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IHByb2Nl
c3NQb29sLT5tX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmICghcHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdv
cmtlclVzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94
eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2Vy
VXNlckFnZW50KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVtb3ZlRnJvbVNlcnZpY2VX
b3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogewotICAgIEFTU0VSVCht
X3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFpbnMocHJvY2VzcykpOwotICAgIG1fc2Vydmlj
ZVdvcmtlclByb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CisgICAgQVNTRVJUKHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzZXMoKS5jb250YWlucyhwcm9jZXNzKSk7CisgICAgc2VydmljZVdvcmtlclByb2Nl
c3NlcygpLnJlbW92ZShwcm9jZXNzKTsKIH0KICNlbmRpZgogCkBAIC05MjIsNyArNjI0LDcgQEAg
UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OgogI2lmIFBMQVRGT1JNKEdU
SykgfHwgUExBVEZPUk0oV1BFKQogICAgIC8vIEluIHBsYXRmb3JtcyB1c2luZyBCdWJibGV3cmFw
IGZvciBzYW5kYm94aW5nLCBwcmV3YXJtZWQgcHJvY2VzcyBpcyBsYXVuY2hlZCB1c2luZyB0aGUg
V2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlLAogICAgIC8vIHNvIHdlIGRv
bid0IHVzZSBpdCBpbiBjYXNlIG9mIHVzaW5nIGEgZGlmZmVyZW50IFdlYnNpdGVEYXRhU3RvcmUu
Ci0gICAgaWYgKG1fc2FuZGJveEVuYWJsZWQgJiYgbV93ZWJzaXRlRGF0YVN0b3JlICYmIG1fd2Vi
c2l0ZURhdGFTdG9yZS5nZXQoKSAhPSAmd2Vic2l0ZURhdGFTdG9yZSkKKyAgICBpZiAobV9zYW5k
Ym94RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIApAQCAtMTAzMiw4
ICs3MzQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjppbml0aWFsaXplTmV3V2ViUHJvCiAgICAg
ICAgIHByb2Nlc3MuaXNSZXNwb25zaXZlKFtpbml0aWFsaXphdGlvbkFjdGl2aXR5ID0gV1RGTW92
ZShpbml0aWFsaXphdGlvbkFjdGl2aXR5KV0gKGJvb2wpIHsgfSk7CiAgICAgfSk7CiAKLSAgICBl
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyBwYXJhbWV0ZXJzOwogCiAgICAgcGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGggPSBtX3Jl
c29sdmVkUGF0aHMuaW5qZWN0ZWRCdW5kbGVQYXRoOwpAQCAtMTE5OCw5ICs4OTgsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1CiAgICAgICAgIHByb2Nlc3MtPmNv
bm5lY3Rpb24oKS0+aWdub3JlVGltZW91dHNGb3JUZXN0aW5nKCk7CiAKICAgICBtX2Nvbm5lY3Rp
b25DbGllbnQuZGlkQ3JlYXRlQ29ubmVjdGlvbih0aGlzLCBwcm9jZXNzLT53ZWJDb25uZWN0aW9u
KCkpOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgbV93ZWJzaXRlRGF0
YVN0b3JlLT5kaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCkBAIC0xMjk1
LDEwICs5OTIsNyBAQCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlCiAg
ICAgaWYgKCFwYWdlQ29uZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpKSB7CiAgICAgICAg
IC8vIFdlIHRyeSB0byBhdm9pZCBjcmVhdGluZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxv
bmcgYXMgcG9zc2libGUuCiAgICAgICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRv
IGNyZWF0ZSBhIHdlYiBwYWdlIHdpdGhvdXQgYW55IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVu
IHdlIGhhdmUgdG8gY3JlYXRlIGl0LgotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkK
LSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotCi0gICAgICAgIHBhZ2VDb25maWd1cmF0aW9u
LT5zZXRXZWJzaXRlRGF0YVN0b3JlKG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAg
IHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpKTsKICAgICB9CiAKICAgICBSZWZQdHI8
V2ViUHJvY2Vzc1Byb3h5PiBwcm9jZXNzOwpAQCAtMTMyOSw3ICsxMDIzLDcgQEAgUmVmPFdlYlBh
Z2VQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZQogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKICAgICBpZiAoIW1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKSB7CiAgICAgICAgIG1fc2Vy
dmljZVdvcmtlclByZWZlcmVuY2VzID0gcGFnZS0+cHJlZmVyZW5jZXNTdG9yZSgpOwotICAgICAg
ICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzKQorICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdv
cmtlclByb2Nlc3NlcygpKQogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRl
U2VydmljZVdvcmtlclByZWZlcmVuY2VzU3RvcmUoKm1fc2VydmljZVdvcmtlclByZWZlcmVuY2Vz
KTsKICAgICB9CiAgICAgaWYgKHVzZXJDb250ZW50Q29udHJvbGxlcikKQEAgLTEzNTYsNyArMTA1
MCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXIKICAgICBpZiAo
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50ID09IHVzZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwog
ICAgIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9IHVzZXJBZ2VudDsKLSAgICBmb3IgKGF1dG8m
IHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgIGZv
ciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkp
CiAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzLnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQo
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KICNlbmRpZgpAQCAtMTM2NSwxNSArMTA1OSw2
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2kKIHsKICAgICBhdXRv
IHJlc3VsdCA9IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5hZGQoZGF0YVN0b3JlLnNlc3Npb25JRCgp
LCBIYXNoU2V0PFdlYlBhZ2VQcm94eUlkZW50aWZpZXI+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQo
cGFnZUlEKTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwot
Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7Ci0gICAgaWYgKHNl
c3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAg
IEFTU0VSVCghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgfHwgZGF0YVN0b3JlLnBhcmFtZXRlcnMo
KS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEID09IHNlc3Npb25JRCk7Ci0gICAg
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5hZGRTZXNzaW9uKG1ha2VSZWYoZGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICBkYXRhU3RvcmUu
Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgfQogfQogCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpwYWdlRW5kVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50
aWZpZXIgcGFnZUlELCBXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpCkBAIC0xNDAxLDcgKzEw
ODYsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNQYWdlc1VzaW5nV2Vic2l0CiBEb3dubG9h
ZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0
b3JlLCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCiB7CiAgICAgYXV0byYg
ZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCByZXF1ZXN0LCBp
bml0aWF0aW5nUGFnZSwgeyB9KTsKLSAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBkYXRh
U3RvcmUuc2Vzc2lvbklEKCk7CiAKICAgICBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpbj4gaXNBcHBCb3VuZCA9IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpObzsKICAgICBp
ZiAoaW5pdGlhdGluZ1BhZ2UpIHsKQEAgLTE0MTEsMjYgKzEwOTUsMjMgQEAgRG93bmxvYWRQcm94
eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKAogI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKG5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0
KHJlcXVlc3QpOwotICAgICAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2ls
bCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KLSAgICAg
ICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3AgbGV2ZWwgZG9jdW1lbnQncyBVUkwuCi0gICAg
ICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewotICAgICAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdl
VVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwo
KSB9OwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMo
aW5pdGlhdGluZ1BhZ2VVUkwpOwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1l
U2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVz
dC51cmwoKSkpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVy
RmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRl
ZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChpbml0aWF0aW5nUGFnZS0+dXNlckFnZW50Rm9yVVJM
KHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHVwZGF0ZWRS
ZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKLSAgICAgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVk
UmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0g
ICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJv
eHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZWRSZXF1
ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3du
bG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dl
c3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5OworICAgIFJl
c291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAvLyBSZXF1ZXN0J3Mg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUg
ZG93bmxvYWQgcmVxdWVzdC4KKyAgICAvLyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBk
b2N1bWVudCdzIFVSTC4KKyAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKKyAgICAgICAgVVJMIGlu
aXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2Fk
U3RhdGUoKS51cmwoKSB9OworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9y
Q29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElz
U2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJl
cXVlc3QudXJsKCkpKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVy
RmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVx
dWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVx
dWVzdC51cmwoKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZp
cnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNT
YW1lU2l0ZShmYWxzZSk7CisgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQorICAgICAgICAgICAgdXBkYXRlZFJl
cXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkp
OwogICAgIH0KKyAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1RvcFNpdGUoZmFsc2UpOworICAgIGRh
dGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpE
b3dubG9hZFJlcXVlc3QoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBkb3dubG9hZFByb3h5LmRvd25s
b2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwg
MCk7CiAKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KQEAgLTE0MzgsMTcgKzExMTksMTIg
QEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKAogRG93bmxvYWRQcm94
eSYgV2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFT
dG9yZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgQVBJOjpEYXRhJiByZXN1
bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgYXV0byYgZG93bmxvYWRQcm94eSA9
IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBSZXNvdXJjZVJlcXVlc3QoKSwgaW5pdGlh
dGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0b3Jl
LnNlc3Npb25JRCgpOwogCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRl
bnNpb25IYW5kbGU7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRX
cml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAobmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQo
KSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5k
bGUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7Ci0gICAgfQotCisgICAgZGF0
YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJl
c3VtZURvd25sb2FkKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgZG93bmxvYWRQcm94eS5kb3dubG9h
ZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlKSwgMCk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CiAKQEAgLTE1MTcsMTEg
KzExOTMsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWZyZXNoUGx1Z2lucygpCiAKICNlbmRp
ZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAotUHJvY2Vzc0lEIFdlYlByb2Nlc3NQ
b29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQotewotICAgIHJldHVybiBtX25ldHdvcmtQ
cm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7Ci19Ci0K
IFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6cHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKQog
ewogICAgIHJldHVybiBtX3ByZXdhcm1lZFByb2Nlc3MgPyBtX3ByZXdhcm1lZFByb2Nlc3MtPnBy
b2Nlc3NJZGVudGlmaWVyKCkgOiAwOwpAQCAtMTU1OCwxNCArMTIyOSwxOCBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGlu
Z3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKTsKICAg
ICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2No
ZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVt
ZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxT
Y2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3Jl
Lm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVy
VVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQ
b2xpY3koY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGlu
Z3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJp
dHlQb2xpY3kodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6Oldl
YlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xp
Y3kodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5
UG9saWN5KHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRl
RGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAg
ICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3ko
dXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERv
bWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiB1cmxTY2hl
bWUpCkBAIC0xNTc4LDE0ICsxMjUzLDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVy
VVJMU2NoZW1lQXMKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2Vz
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1l
KSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFT
dG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3Rv
cmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNj
aGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVS
TFNjaGVtZUFzTm9BY2Nlc3MoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1
cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6
UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVB
c05vQWNjZXNzKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJz
aXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsK
KyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpLCAwKTsKKyAg
ICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3Bs
YXlJc29sYXRlZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MDYsMTAgKzEyODUsOCBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLmFk
ZCh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdpc3RlclNj
aGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAo
YXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9j
ZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5
Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5y
ZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25z
dCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MTgsMTAgKzEyOTUsOCBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMCiAgICAgICAgIHJldHVybjsKIAogICAgIGdsb2Jh
bFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLnJlbW92ZSh1cmxTY2hlbWUp
OwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1lRm9yTGVn
YWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRvIG5ldHdv
cmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQor
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVBy
b3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJM
U2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTY1
NSwxNiArMTMzMCwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKENhY2hl
CiAKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldENhY2hl
TW9kZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNo
ZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vi
c2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkg
eworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAgfSk7CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGlu
ZyhDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB7CiAgICAgdXBkYXRlQmFja0ZvcndhcmRDYWNoZUNh
cGFjaXR5KCk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVs
U3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsKKyAgICBXZWJz
aXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5j
aHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCAwKTsKKyAgICB9KTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91
YmxlIHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE2NzQsMTIgKzEzNTEsNyBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpCiAKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQ
b29sOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFn
ZSwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvKQogewotICAgIHJldHVybiBlbnN1cmVO
ZXR3b3JrUHJvY2VzcygmZGF0YVN0b3JlKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwg
cmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwotfQotCi12b2lkIFdlYlByb2Nl
c3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKLXsKLSAg
ICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dy
b3VuZCk7CisgICAgcmV0dXJuIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURvd25s
b2FkUHJveHkoZGF0YVN0b3JlLCAqdGhpcywgcmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGlu
Z1BhZ2UpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIoSVBD
OjpSZWNlaXZlck5hbWUgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpNZXNzYWdlUmVjZWl2ZXIm
IG1lc3NhZ2VSZWNlaXZlcikKQEAgLTE3NTAsMzAgKzE0MjIsNiBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9OZXR3b3Jr
aW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KQotewotICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpm
b3J3YXJkPFU+KHJlcGx5KSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2Fj
aGVkQ3JlZGVudGlhbHMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkKLXsKLSAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKSwg
MCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkK
LXsKLSAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwotCi0gICAgaWYgKCFtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVy
bWluYXRlKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci19Ci0KIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQogewogICAgIFZl
Y3RvcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzID0gbV9wcm9jZXNzZXM7CkBA
IC0xNzgxLDQwICsxNDI5LDE1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdl
YkNvbnQKICAgICAgICAgcHJvY2Vzcy0+dGVybWluYXRlKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0g
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1t
aW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcoKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0KLQot
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkKLXsKLSAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFBy
b2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2Vy
dmljZVdvcmtlcnMoKQogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBhdXRvIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICB3aGlsZSAobV9zZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzLmNvbXB1dGVTaXplKCkpCi0gICAgICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cy5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKKyAgICB3aGlsZSAoc2VydmljZVdv
cmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoKS5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKICNlbmRpZgogfQogCi12
b2lkIFdlYlByb2Nlc3NQb29sOjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNl
c3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQot
ewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRh
dGVBdXRvbWF0aW9uQ2FwYWJpbGl0aWVzKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoUkVNT1RFX0lO
U1BFQ1RPUikKQEAgLTIwODksMTUgKzE3MTIsMjEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVw
b3J0V2ViQ29udGVudENQVQogI2VuZGlmCiB9CiAKK1dlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94
eT4mIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2Vz
OworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9CisKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0
ZVByb2Nlc3NBc3NlcnRpb25zKCkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnVwZGF0
ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0
ZURhdGFTdG9yZShbXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRh
dGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICB9
KTsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gQ2hlY2sgb24gbmV4dCBydW4g
bG9vcCBzaW5jZSB0aGUgd2ViIHByb2Nlc3MgcHJveHkgdG9rZW5zIGFyZSBwcm9iYWJseSBiZWlu
ZyB1cGRhdGVkLgotICAgIGNhbGxPbk1haW5SdW5Mb29wKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKHRoaXMpXSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VX
b3JrZXJQcm9jZXNzZXMpCisgICAgY2FsbE9uTWFpblJ1bkxvb3AoW10geworICAgICAgICBmb3Ig
KGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQog
ICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclByb2Nl
c3NBc3NlcnRpb24oKTsKICAgICB9KTsKICNlbmRpZgpAQCAtMjEwNyw3ICsxNzM2LDcgQEAgYm9v
bCBXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29ya2VyUGFnZQogewogI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmVmZmljaWVudC4KLSAgICByZXR1
cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtwYWdlSURdKGF1dG8mIHBy
b2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCks
IFtwYWdlSURdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2Vy
dmljZVdvcmtlclBhZ2VQcm94eShwYWdlSUQpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMzI5LDE0
ICsxOTU4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDdXJyZW50TW9kaWZpZQogfQog
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0ZU5hdmlnYXRpb25E
YXRhVHJhbnNmZXI6OkZsYWc+IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIFdlYlBhZ2VQcm94eUlk
ZW50aWZpZXIgd2ViUGFnZVByb3h5SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCkKLXsKLSAg
ICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmV0d29y
a1Byb2Nlc3MtPmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25J
RCwgZnJvbURvbWFpbiwgdG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQ
cm94eUlELCB3ZWJQYWdlSUQpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5z
V2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYm
IGRvbWFpbnMpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpTZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihkb21haW5zKSk7CkBAIC0yMzg3LDI3ICsy
MDA4LDI3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1ZGlibGVNZWRpYUEKIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29s
IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgaWYgKG1fdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KQorICAgIGlmIChzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0VCUFJPQ0VT
U1BPT0xfUkVMRUFTRV9MT0coU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3M6ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0Vf
TE9HX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiAKLSAgICBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwotICAgIHRlcm1pbmF0ZVNl
cnZpY2VXb3JrZXJzKCk7Ci0gICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBzX3Vz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxs
UHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycygpOwogfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogYm9vbCBXZWJQcm9jZXNz
UG9vbDo6aGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25z
dAogewotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10o
YXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoKSwgW10oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNT
ZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQog
CiBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5
Rm9yVGVzdGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yo
c2VydmljZVdvcmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJl
dHVybiBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5n
KCk7CiAgICAgfSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDYgQEAgT0JKQ19DTEFTUyBX
S1ByZWZlcmVuY2VPYnNlcnZlcjsKIAogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBBdXRvbWF0aW9u
Q2xpZW50OwotY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogY2xhc3MgRG93bmxv
YWRDbGllbnQ7CiBjbGFzcyBIVFRQQ29va2llU3RvcmU7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZUNs
aWVudDsKQEAgLTE3Niw3ICsxNzUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIaXN0b3J5Q2xp
ZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiYmKTsK
ICAgICB2b2lkIHNldERvd25sb2FkQ2xpZW50KFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50
PiYmKTsKICAgICB2b2lkIHNldEF1dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6
QXV0b21hdGlvbkNsaWVudD4mJik7Ci0gICAgdm9pZCBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50PiYmKTsKIAogICAgIHZvaWQgc2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVu
dGlmaWVyKGNvbnN0IFN0cmluZyYpOwogICAgIGNvbnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVu
dFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCkgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT5jdXN0
b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKTsgfQpAQCAtMTg3LDE3ICsxODUs
OSBAQCBwdWJsaWM6CiAgICAgLy8gbnVsbCBjaGVja3MgaW4gV2ViUGFnZVByb3h5LgogICAgIFdl
YlByb2Nlc3NQcm94eSogZHVtbXlQcm9jZXNzUHJveHkoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KSBjb25zdCB7IHJldHVybiBtX2R1bW15UHJvY2Vzc1Byb3hpZXMuZ2V0KHNlc3Npb25JRCkuZ2V0
KCk7IH0KIAotICAgIC8vIFdlYlByb2Nlc3Mgb3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3Jp
YXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9kZWwuIFRoZSBjb25uZWN0aW9uIG11c3QgYmUgbm9u
LW51bGwuCi0gICAgSVBDOjpDb25uZWN0aW9uKiBuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24o
KTsKLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzKGNv
bnN0IFQmIG1lc3NhZ2UpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxs
UHJvY2Vzc2VzRm9yU2Vzc2lvbihjb25zdCBUJiBtZXNzYWdlLCBQQUw6OlNlc3Npb25JRCk7CiAK
LSAgICAvLyBTZW5kcyB0aGUgbWVzc2FnZSB0byBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNz
IGFzIGFwcHJvcG9yaWF0ZSBmb3IgY3VycmVudCBwcm9jZXNzIG1vZGVsLgotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpOwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHZvaWQgc2VuZFN5bmNUb05ldHdv
cmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBVJiYgcmVwbHkpOwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHZvaWQgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5
KFQmJiBtZXNzYWdlKTsKLQogICAgIHZvaWQgcHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQ
cm9jZXNzUHJveHkqKTsKIAogICAgIFdlYlByb2Nlc3NDYWNoZSYgd2ViUHJvY2Vzc0NhY2hlKCkg
eyByZXR1cm4gbV93ZWJQcm9jZXNzQ2FjaGUuZ2V0KCk7IH0KQEAgLTIwNSw5ICsxOTUsNiBAQCBw
dWJsaWM6CiAgICAgLy8gRGlzY29ubmVjdCB0aGUgcHJvY2VzcyBmcm9tIHRoZSBjb250ZXh0Lgog
ICAgIHZvaWQgZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKLSAgICBXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmUqIHdlYnNpdGVEYXRhU3RvcmUoKSBjb25zdCB7IHJldHVybiBt
X3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFByaW1hcnlEYXRhU3RvcmUo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsgbV93ZWJzaXRlRGF0YVN0b3Jl
ID0gJmRhdGFTdG9yZTsgfQotCiAgICAgUmVmPFdlYlBhZ2VQcm94eT4gY3JlYXRlV2ViUGFnZShQ
YWdlQ2xpZW50JiwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogCiAgICAgdm9pZCBw
YWdlQmVnaW5Vc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2Vi
c2l0ZURhdGFTdG9yZSYpOwpAQCAtMjU4LDEwICsyNDUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
ZGRTdXBwb3J0ZWRQbHVnaW4oU3RyaW5nJiYgbWF0Y2hpbmdEb21haW4sIFN0cmluZyYmIG5hbWUs
IEhhc2hTZXQ8U3RyaW5nPiYmIG1pbWVUeXBlcywgSGFzaFNldDxTdHJpbmc+IGV4dGVuc2lvbnMp
OwogICAgIHZvaWQgY2xlYXJTdXBwb3J0ZWRQbHVnaW5zKCk7CiAKLSAgICBQcm9jZXNzSUQgbmV0
d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CiAgICAgUHJvY2Vzc0lEIHByZXdhcm1lZFByb2Nlc3NJ
ZGVudGlmaWVyKCk7CiAgICAgdm9pZCBhY3RpdmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JU
ZXN0aW5nKFByb2Nlc3NJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYm
KT4mJik7Ci0gICAgYm9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhj
b25zdCBTdHJpbmcmKTsKIAogICAgIFdlYlBhZ2VHcm91cCYgZGVmYXVsdFBhZ2VHcm91cCgpIHsg
cmV0dXJuIG1fZGVmYXVsdFBhZ2VHcm91cC5nZXQoKTsgfQogCkBAIC0zMDIsOCArMjg3LDYgQEAg
cHVibGljOgogICAgIEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlDbGll
bnQoKSB7IHJldHVybiAqbV9oaXN0b3J5Q2xpZW50OyB9CiAgICAgV2ViQ29udGV4dENsaWVudCYg
Y2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KIAotICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50JiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVy
biAqbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7IH0KLQogICAgIHN0cnVjdCBTdGF0aXN0
aWNzIHsKICAgICAgICAgdW5zaWduZWQgd2tWaWV3Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHdr
UGFnZUNvdW50OwpAQCAtMzE5LDEyICszMDIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKICAgICB2b2lkIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
KCk7CiAKLSAgICB2b2lkIGZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0KICAgICB2b2lkIHNldFNob3VsZE1ha2VOZXh0V2Vi
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRNYWtlTmV4
dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9CiAgICAgYm9vbCBzaG91
bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmc7IH0KLSAgICB2
b2lkIHNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhi
b29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JU
ZXN0aW5nID0gdmFsdWU7IH0KLSAgICBib29sIHNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkTWFrZU5leHROZXR3
b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nOyB9CiAKICAgICB2b2lkIHJlcG9ydFdlYkNv
bnRlbnRDUFVUaW1lKFNlY29uZHMgY3B1VGltZSwgdWludDY0X3QgYWN0aXZpdHlTdGF0ZSk7CiAK
QEAgLTM4MywxOSArMzYyLDEzIEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgLy8gTmV0d29yayBQ
cm9jZXNzIE1hbmFnZW1lbnQKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBlbnN1cmVOZXR3b3Jr
UHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSA9IG51bGxwdHIp
OwotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzKCkgY29uc3QgeyByZXR1
cm4gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKTsgfQogICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFz
aGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKTsKIAotICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6Okdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKLQogICAgIGJvb2wgaXNT
ZXJ2aWNlV29ya2VyUGFnZUlEKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIpIGNvbnN0OwogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLSAgICB2b2lkIGVzdGFibGlzaFdvcmtlckNvbnRleHRDb25u
ZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CisgICAgc3RhdGljIHZvaWQgZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25U
b05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmLCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
ICAgICB2b2lkIHJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKFdlYlByb2Nlc3NQcm94
eSYpOwotICAgIHNpemVfdCBzZXJ2aWNlV29ya2VyUHJveGllc0NvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbXB1dGVTaXplKCk7IH0KLSAgICB2b2lkIHNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihib29sIGFsbG93cykgeyBt
X2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlciA9IGFsbG93czsgfQotICAg
IGJvb2wgYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI7IH0KKyAgICBz
aXplX3Qgc2VydmljZVdvcmtlclByb3hpZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHNlcnZpY2VX
b3JrZXJQcm9jZXNzZXMoKS5jb21wdXRlU2l6ZSgpOyB9CiAgICAgdm9pZCB1cGRhdGVTZXJ2aWNl
V29ya2VyVXNlckFnZW50KGNvbnN0IFN0cmluZyYgdXNlckFnZW50KTsKICAgICBjb25zdCBPcHRp
b25hbDxVc2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyPiYgdXNlckNvbnRlbnRDb250cm9s
bGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkgY29uc3QgeyByZXR1cm4gbV91c2VyQ29u
dGVudENvbnRyb2xsZXJJREZvclNlcnZpY2VXb3JrZXI7IH0KICAgICBib29sIGhhc1NlcnZpY2VX
b3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3Q7CkBAIC00NDksOCArNDIy
LDYgQEAgcHVibGljOgogICAgIGJvb2wgYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gbV9hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHk7IH0KICAgICBi
b29sIHNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSBjb25zdCB7IHJldHVybiBtX3No
b3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb247IH0KIAotICAgIHZvaWQgc3ludGhlc2l6ZUFw
cElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpOwotICAgIAogI2lmIEVOQUJMRShHQU1FUEFE
KQogICAgIHZvaWQgZ2FtZXBhZENvbm5lY3RlZChjb25zdCBVSUdhbWVwYWQmLCBXZWJDb3JlOjpF
dmVudE1ha2VzR2FtZXBhZHNWaXNpYmxlKTsKICAgICB2b2lkIGdhbWVwYWREaXNjb25uZWN0ZWQo
Y29uc3QgVUlHYW1lcGFkJik7CkBAIC00ODgsNyArNDU5LDYgQEAgcHVibGljOgogICAgIHZvaWQg
Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKTsKIAogI2lmIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgdm9pZCBkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0
aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4mIGZyb21Eb21haW4sIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiB0b0Rv
bWFpbiwgT3B0aW9uU2V0PFdlYkNvcmU6OkNyb3NzU2l0ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6
OkZsYWc+LCBXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllcik7
CiAgICAgdm9pZCBzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluPiYmKTsKICAgICB2b2lkIHNlZWRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRm9yVGVzdGluZyhjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgZmlyc3RQYXJ0
eURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIHRoaXJkUGFydHlEb21h
aW4sIGJvb2wgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CiAgICAgdm9pZCBzZW5kUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFJbW1lZGlh
dGVseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwpAQCAtNTE1LDggKzQ4NSw4IEBAIHB1
YmxpYzoKICAgICAKICAgICBQbHVnSW5BdXRvU3RhcnRQcm92aWRlciYgcGx1Z0luQXV0b1N0YXJ0
UHJvdmlkZXIoKSB7IHJldHVybiBtX3BsdWdJbkF1dG9TdGFydFByb3ZpZGVyOyB9CiAKLSAgICB2
b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCk7Ci0gICAgYm9vbCB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV91c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOyB9CisgICAgc3RhdGljIHZvaWQgc2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKKyAgICBzdGF0aWMgYm9vbCB1c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkgeyByZXR1cm4gc191c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzOyB9CiAKICNpZiBFTkFCTEUoQ0ZQUkVGU19ESVJFQ1RfTU9ERSkKICAgICB2b2lk
IG5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZChjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IE9wdGlvbmFsPFN0cmluZz4mIGVuY29kZWRWYWx1ZSk7CkBAIC01Mjgs
OSArNDk4LDE1IEBAIHB1YmxpYzoKICAgICBpbnQzMl90IHVzZXJJZCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlcklkOyB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIE9TT2JqZWN0
UHRyPHhwY19vYmplY3RfdD4geHBjRW5kcG9pbnRNZXNzYWdlKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0cjx4cGNf
b2JqZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSk7CisgICAgc3RhdGljIHZvaWQgcGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsK
KyAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhh
bmRsZXJzKCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHN0YXRpYyBTdHJpbmcg
Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgcGFyZW50QnVuZGxl
RGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5
KCk7CisgICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGlyZWN0b3J5KCk7CisgICAg
c3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsKICNlbmRpZgogCiBw
cml2YXRlOgpAQCAtNTQ2LDggKzUyMiw2IEBAIHByaXZhdGU6CiAgICAgV2ViUHJvY2Vzc1Byb3h5
JiBjcmVhdGVOZXdXZWJQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9jZXNzUHJveHk6
OklzUHJld2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8pOwogICAgIHZv
aWQgaW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiwgV2Vic2l0ZURhdGFT
dG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6Oklz
UHJld2FybWVkOjpObyk7CiAKLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0KICAgICB2b2lkIGhhbmRs
ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29u
c3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5KTsKICAgICB2b2lkIGhhbmRsZVN5bmNocm9ub3VzTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBV
c2VyRGF0YSYgbWVzc2FnZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlckRhdGEmJik+
JiYpOwogCkBAIC01NzEsMTQgKzU0NSw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIHVzZXNTaW5n
bGVXZWJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT51c2VzU2luZ2xl
V2ViUHJvY2VzcygpOyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyBT
dHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgcGFyZW50
QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5nQ2FjaGVzRGly
ZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGlyZWN0b3J5KCk7
Ci0gICAgc3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsKLSNlbmRp
ZgotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCByZWdpc3Rlck5vdGlmaWNhdGlvbk9i
c2VydmVycygpOwogICAgIHZvaWQgdW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpOwpA
QCAtNjIwLDkgKzU4Niw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwg
V2Vha1B0cjxXZWJQcm9jZXNzUHJveHk+PiBtX2R1bW15UHJvY2Vzc1Byb3hpZXM7IC8vIExpZ2h0
d2VpZ2h0IFdlYlByb2Nlc3NQcm94eSBvYmplY3RzIHdpdGhvdXQgYmFja2luZyBwcm9jZXNzLgog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQ
cm94eT4gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzOworICAgIHN0YXRpYyBXZWFrSGFzaFNldDxX
ZWJQcm9jZXNzUHJveHk+JiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCk7CiAgICAgYm9vbCBtX3dh
aXRpbmdGb3JXb3JrZXJDb250ZXh0UHJvY2Vzc0Nvbm5lY3Rpb24geyBmYWxzZSB9OwotICAgIGJv
b2wgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIgeyBmYWxzZSB9Owog
ICAgIFN0cmluZyBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQ7CiAgICAgT3B0aW9uYWw8V2ViUHJl
ZmVyZW5jZXNTdG9yZT4gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXM7CiAgICAgT3B0aW9uYWw8
VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllcj4gbV91c2VyQ29udGVudENvbnRyb2xsZXJJ
REZvclNlcnZpY2VXb3JrZXI7CkBAIC02MzgsNyArNjAzLDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiBtX2F1dG9tYXRpb25DbGllbnQ7CiAg
ICAgVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+IG1fZG93bmxvYWRDbGllbnQ7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+IG1faGlzdG9y
eUNsaWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogCiAgICAgUmVmUHRyPFdlYkF1
dG9tYXRpb25TZXNzaW9uPiBtX2F1dG9tYXRpb25TZXNzaW9uOwogCkBAIC02NzAsOCArNjM0LDYg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQgeyBmYWxzZSB9Owog
ICAgIGRvdWJsZSBtX21lbW9yeVNhbXBsZXJJbnRlcnZhbCB7IDE0MDAuMCB9OwogCi0gICAgUmVm
UHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRlRGF0YVN0b3JlOwotCiAgICAg
dHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIqLCBSZWZQdHI8V2ViQ29udGV4dFN1cHBsZW1lbnQ+
LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4gV2ViQ29udGV4dFN1cHBsZW1lbnRNYXA7CiAgICAgV2Vi
Q29udGV4dFN1cHBsZW1lbnRNYXAgbV9zdXBwbGVtZW50czsKIApAQCAtNzAzLDggKzY2NSw2IEBA
IHByaXZhdGU6CiAKICAgICBib29sIG1fcHJvY2Vzc1Rlcm1pbmF0aW9uRW5hYmxlZCB7IHRydWUg
fTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQ
cm9jZXNzOwotCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPERpY3Rpb25hcnlDYWxsYmFj
az4+IG1fZGljdGlvbmFyeUNhbGxiYWNrczsKIAogICAgIGJvb2wgbV9tZW1vcnlDYWNoZURpc2Fi
bGVkIHsgZmFsc2UgfTsKQEAgLTcxMyw3ICs2NzMsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9h
bHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHk7CiAgICAgYm9vbCBtX3Nob3VsZFRha2VVSUJh
Y2tncm91bmRBc3NlcnRpb247CiAgICAgYm9vbCBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2hvdWxkTWFrZU5leHRO
ZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nIHsgZmFsc2UgfTsKICAgICBib29sIG1f
dGNjUHJlZmVyZW5jZUVuYWJsZWQgeyBmYWxzZSB9OwogCiAgICAgVXNlck9ic2VydmFibGVQYWdl
Q291bnRlciBtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXI7CkBAIC04MDUsMzIgKzc2NCwxNCBA
QCBwcml2YXRlOgogI2Vsc2UKICAgICBib29sIG1faXNEZWxheWVkV2ViUHJvY2Vzc0xhdW5jaERp
c2FibGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgbV91c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzIHsgZmFsc2UgfTsKKyAgICBzdGF0aWMgYm9vbCBzX3VzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3M7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQogICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IG1fZG9tYWluc1dpdGhV
c2VySW50ZXJhY3Rpb247CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIE9TT2Jq
ZWN0UHRyPHhwY19vYmplY3RfdD4gbV9lbmRwb2ludE1lc3NhZ2U7Ci0jZW5kaWYKIH07CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5n
UHJvY2VzcyhUJiYgbWVzc2FnZSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25l
dHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1
bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdl
KSwgMCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZW5kVG9BbGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSkKIHsKICAgICBzaXplX3QgcHJvY2Vz
c0NvdW50ID0gbV9wcm9jZXNzZXMuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgs
NiArMjY4LDkgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnNldFdlYnNpdGVEYXRhU3Rvcgogewog
ICAgIEFTU0VSVCghbV93ZWJzaXRlRGF0YVN0b3JlKTsKICAgICBtX3dlYnNpdGVEYXRhU3RvcmUg
PSAmZGF0YVN0b3JlOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGRhdGFTdG9yZS5zZW5kTmV0
d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcygqdGhpcyk7CisjZW5kaWYKICAgICB1
cGRhdGVSZWdpc3RyYXRpb25XaXRoRGF0YVN0b3JlKCk7CiAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UHJvY2Vzczo6U2V0V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMocHJvY2Vzc1Bvb2woKS53ZWJQ
cm9jZXNzRGF0YVN0b3JlUGFyYW1ldGVycygqdGhpcywgZGF0YVN0b3JlKSksIDApOwogfQpAQCAt
NzM4LDcgKzc0MSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXRQbHVnaW5Qcm9jZXNzQ28K
IAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihNZXNz
YWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5
ZWRSZXBseSYmIHJlcGx5KQogewotICAgIG1fcHJvY2Vzc1Bvb2wtPmdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUo
KS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKnRoaXMsIFdURk1vdmUocmVwbHkpKTsKIH0K
IAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKQEAgLTk1NSw5ICs5NTgsOCBAQCB2b2lkIFdlYlBy
b2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nCiAgICAgfQogCiAjaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgYXV0byBlbmRwb2ludE1lc3NhZ2UgPSBwcm9jZXNzUG9vbCgpLnhwY0VuZHBvaW50
TWVzc2FnZSgpOwotICAgIGlmIChlbmRwb2ludE1lc3NhZ2UpCi0gICAgICAgIHhwY19jb25uZWN0
aW9uX3NlbmRfbWVzc2FnZShjb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwgZW5kcG9pbnRN
ZXNzYWdlLmdldCgpKTsKKyAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQorICAgICAgICBtX3dl
YnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNz
KCp0aGlzKTsKICNlbmRpZgogCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fd2ViQ29ubmVjdGlvbik7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tp
ZVN0b3JlLmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDYg
QEAgbmFtZXNwYWNlIEFQSSB7CiBIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0Rh
dGFTdG9yZSh3ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUt
PnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3Jl
Ojp+SFRUUENvb2tpZVN0b3JlKCkKQEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+
SFRUUENvb2tpZVN0b3JlKCkKICAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAg
ICBBU1NFUlQoIW1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9j
b29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vz
c1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJB
cHBCb3VuZENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC04MSwzMyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZp
bHRlckFwcEJvdW5kQ29vawogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0g
ICAgICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGFsbENvb2tpZXM7Ci0gICAgICAgIGlmICht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSkKLSAgICAgICAgICAgIGFsbENvb2tpZXMgPSBnZXRBbGxEZWZhdWx0VUlQcm9j
ZXNzQ29va2llU3RvcmVDb29raWVzKCk7Ci0gICAgICAgIGFsbENvb2tpZXMuYXBwZW5kVmVjdG9y
KG1fb3duaW5nRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLQotICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgYWxsQ29va2ll
c10gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoYWxsQ29v
a2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICB9KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmdldEFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwb29sID0gV1RGTW92ZShwb29sKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBjb29raWVNYW5h
Z2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigp
OworICAgIGNvb2tpZU1hbmFnZXIuZ2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5k
Q29va2llcyhjb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9
CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjo6VVJMJiYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkKLSAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0KLSAgICBhdXRvKiBjb29raWVN
YW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2Vy
ID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwor
ICAgIGNvb2tpZU1hbmFnZXIuZ2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIHVybCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiYgY29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2ll
cyhjb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC0x
MTUsNzggKzk0LDI5IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjoK
IHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgYXBwQm91bmRDb29raWVzKSBtdXRhYmxlIHsKLSAg
ICAgICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tp
ZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgICAgIGlmICghcG9vbCkgewotICAgICAgICAgICAg
Zm9yIChhdXRvJiBjb29raWUgOiBhcHBCb3VuZENvb2tpZXMpIHsKLSAgICAgICAgICAgICAgICAv
LyBGSVhNRTogcGVuZGluZ0Nvb2tpZXMgdXNlZCBmb3IgZGVmYXVsdFNlc3Npb24gYmVjYXVzZSBz
ZXNzaW9uIGNvb2tpZXMgY2Fubm90IGJlIHByb3BhZ2F0ZWQgdG8gTmV0d29yayBQcm9jZXNzIHdp
dGggdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuCi0gICAgICAgICAgICAgICAgaWYg
KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgICAgICAgICAgc2V0
Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5hZGRQZW5k
aW5nQ29va2llKGNvb2tpZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9v
bC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAg
Y29va2llTWFuYWdlci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IGFwcEJvdW5kQ29va2llcywgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOworICAgICAgICBhdXRvJiBjb29raWVN
YW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdl
cigpOworICAgICAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCBhcHBCb3VuZENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZShjb25z
dCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+
cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkg
ewotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAg
ICAgZGVsZXRlQ29va2llRnJvbURlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+cmVtb3ZlUGVuZGlu
Z0Nvb2tpZShjb29raWUpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7
Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgW3Bv
b2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAg
IH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29y
a1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29r
aWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tp
ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9y
YWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5n
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAgZGVsZXRl
Q29va2llc0luRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVu
dDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5k
ZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgYXV0
byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNv
b2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUFsbENvb2tpZXMobV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKICAgICAvLyBGSVhNRTogVGhlIENvbXBsZXRpb25I
YW5kbGVyIHNob3VsZCBiZSBwYXNzZWQgdG8gV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVB
bGxDb29raWVzLgogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9v
bCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRp
b25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBzZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUocG9saWN5KTsKLSAgICAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5z
dXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1h
bmFnZXItPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9
KTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQ
cm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1
c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTIyNywyMSArMTU3LDcgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2
ZXIoTwogCiAgICAgbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA9IG1ha2VVbmlxdWU8QVBJ
V2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI+KCp0aGlzKTsKIAotICAgIGF1dG8qIHBvb2wg
PSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9u
cygpOwotCi0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIEFTU0VSVCghbV9vYnNlcnZpbmdVSVBy
b2Nlc3NDb29raWVzKTsKLQotICAgICAgICAvLyBMaXN0ZW4gZm9yIGNvb2tpZSBub3RpZmljYXRp
b25zIGluIHRoZSBVSVByb2Nlc3MgaW4gdGhlIG1lYW50aW1lLgotICAgICAgICBzdGFydE9ic2Vy
dmluZ0NoYW5nZXNUb0RlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShbdGhpc10gKCkgewotICAg
ICAgICAgICAgY29va2llc0RpZENoYW5nZSgpOwotICAgICAgICB9KTsKLQotICAgICAgICBtX29i
c2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eSA9ICZtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5h
Z2VyKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZl
cihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9i
c2VydmVyKTsKIH0KIApAQCAtMjc2LDQ2ICsxOTIsMTAgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6
OmNvb2tpZXNEaWRDaGFuZ2UoKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJE
ZXN0cm95ZWQoKQogewogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnVucmVnaXN0
ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFn
ZXJQcm94eU9ic2VydmVyKTsKLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbnVs
bHB0cjsKLQotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xG
b3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gcG9vbC0+c3VwcGxl
bWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNv
b2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rl
ck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdl
clByb3h5T2JzZXJ2ZXIpOwogfQogCi12b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JO
ZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIEFTU0VSVCghbV9wcm9jZXNzUG9v
bENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlv
bkxpc3RlbmVySWRlbnRpZmllciA9IFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclByb2Nlc3NQb29s
Q3JlYXRpb25MaXN0ZW5lcihbdGhpc10oV2ViUHJvY2Vzc1Bvb2wmIG5ld1Byb2Nlc3NQb29sKSB7
Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPmlzQXNzb2NpYXRlZFByb2Nlc3NQb29s
KG5ld1Byb2Nlc3NQb29sKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBOb3cg
dGhhdCBhbiBhc3NvY2lhdGVkIHByb2Nlc3MgcG9vbCBleGlzdHMsIHdlIG5lZWQgdG8gZmx1c2gg
dGhlIFVJIHByb2Nlc3MgY29va2llIHN0b3JlCi0gICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBhbnkg
Y2hhbmdlcyBhcmUgcmVmbGVjdGVkIHdpdGhpbiB0aGUgbmV3IHByb2Nlc3MgcG9vbC4KLSAgICAg
ICAgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgbmV3UHJvY2Vz
c1Bvb2wuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQotICAgICAgICBpZiAobV9jb29raWVNYW5h
Z2VyUHJveHlPYnNlcnZlcikgewotICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQ
cm94eSA9IG5ld1Byb2Nlc3NQb29sLnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7Ci0gICAgICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdp
c3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFu
YWdlclByb3h5T2JzZXJ2ZXIpOwotICAgICAgICB9Ci0gICAgICAgIHVucmVnaXN0ZXJGb3JOZXdQ
cm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBIVFRQQ29va2ll
U3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAg
IGlmIChtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpCi0gICAgICAgIFdl
YlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKG1fcHJv
Y2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29s
Q3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSAwOwotfQotCiAjaWYgIVBMQVRGT1JNKENPQ09B
KQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
KCkgeyB9CiBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBIVFRQQ29va2llU3RvcmU6OmdldEFsbERl
ZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKSB7IHJldHVybiB7IH07IH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgJ
KHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQ
Q29va2llU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtODMsOSArODMsNiBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmKTsK
IAotICAgIHZvaWQgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAg
ICB2b2lkIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLQogICAg
IHZvaWQgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKICAgICBzdGF0aWMgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29v
a2llcygpOwogICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZUluRGVmYXVsdFVJUHJvY2Vzc0Nvb2tp
ZVN0b3JlKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MTEsMTEgKzQxMSw2IEBAIHZvaWQgV0tDb250ZXh0UHJlY29ubmVjdFRvU2VydmVyKFdLQ29udGUK
IHsKIH0KIAotV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0
Ojp0b0ltcGwoY29udGV4dFJlZiktPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCkpOwotfQotCiBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0
ZURhdGFTdG9yZShXS0NvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdLV2Vic2l0ZURhdGFTdG9y
ZUdldERlZmF1bHREYXRhU3RvcmUoKTsKQEAgLTUyNywxMyArNTIyLDYgQEAgdm9pZCBXS0NvbnRl
eHRTZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlYwogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRS
ZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChlbmFibGUpOwog
fQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdv
cmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgYWxsb3dzKQotewotI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+c2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0K
LQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNo
ZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEko
JldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMo
KS5sZWFrUmVmKCkpOwpAQCAtNTc1LDIxICs1NjMsMTEgQEAgdm9pZCBXS0NvbnRleHRTZXRGb250
QWxsb3dMaXN0KFdLQ29udGV4dAogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRG
b250QWxsb3dMaXN0KFdlYktpdDo6dG9JbXBsKGFycmF5UmVmKSk7CiB9CiAKLXZvaWQgV0tDb250
ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAg
V2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0K
IHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmIGNvbnRl
eHQpCiB7CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZVNlcnZpY2VXb3Jr
ZXJzKCk7CiB9CiAKLVByb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9JbXBs
KGNvbnRleHRSZWYpLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKLX0KLQogdm9pZCBXS0Nv
bnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4oV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5n
UmVmIGRvbWFpblJlZiwgV0tTdHJpbmdSZWYgbmFtZVJlZiwgV0tBcnJheVJlZiBtaW1lVHlwZXNS
ZWYsIFdLQXJyYXlSZWYgZXh0ZW5zaW9uc1JlZikKIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKQEAgLTYxOSwxMiArNTk3LDExIEBAIHZvaWQgV0tDb250ZXh0Q2xlYXJDdXJyZW50
TW9kaWZpZXJTdGF0ZUYKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+Y2xlYXJDdXJy
ZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBib29s
IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCit2b2lkIFdLQ29udGV4dFNldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoV0tDb250ZXh0UmVmLCBib29sIHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZikt
PnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2Vzcyk7CisgICAgV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIH0K
IAotdm9pZCBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYg
Y29udGV4dFJlZiwgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3RvcmUpCit2b2lk
IFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiwgV0tXZWJz
aXRlRGF0YVN0b3JlUmVmKQogewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRQ
cmltYXJ5RGF0YVN0b3JlKCpXZWJLaXQ6OnRvSW1wbCh3ZWJzaXRlRGF0YVN0b3JlKSk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaAkocmV2aXNpb24g
MjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNiBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRT
dG9wTWVtb3J5U2FtcGxlCiBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4
dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJF
Q0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0
b3JlKTsKIAogV0tfRVhQT1JUIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0
R2V0QXBwbGljYXRpb25DYWNoZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJ
X0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0
RGF0YVN0b3JlKTsKLVdLX0VYUE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29v
a2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdL
X0VYUE9SVCBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1h
bmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVm
IFdLQ29udGV4dEdldEljb25EYXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBP
UlQgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFn
ZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9S
RVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgJ
KHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29u
dGV4dFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtODMsMTEgKzgzLDggQEAgV0tfRVhQT1JU
IHZvaWQgV0tDb250ZXh0V2FybUluaXRpYWxQcm9jZQogLy8gQXQgc29tZSBwb2ludCBpdCBzaG91
bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJv
Y2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRUZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250
ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmKTsKIAotV0tfRVhQT1JUIHZv
aWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVz
dGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0eXBlZGVmIHZvaWQgKCpXS0NvbnRleHRJbnZh
bGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSk7CiBXS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKFdLQ29udGV4dEludmFsaWRN
ZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VGdW5jdGlvbik7CiAgICAgCkBAIC05Nyw4ICs5
NCw2IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEZvbnRBbGxvd0xpc3QKIAogV0tfRVhQ
T1JUIHZvaWQgV0tDb250ZXh0UHJlY29ubmVjdFRvU2VydmVyKFdLQ29udGV4dFJlZiBjb250ZXh0
LCBXS1VSTFJlZiBzZXJ2ZXJVUkwpIFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiAKLVdLX0VYUE9SVCBX
S1Byb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tDb250ZXh0
UmVmIGNvbnRleHQpOwotCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVn
aW4oV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLU3RyaW5nUmVmIGRvbWFpbiwgV0tTdHJpbmdSZWYg
bmFtZSwgV0tBcnJheVJlZiBtaW1lVHlwZXMsIFdLQXJyYXlSZWYgZXh0ZW5zaW9ucyk7CiBXS19F
WFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhclN1cHBvcnRlZFBsdWdpbnMoV0tDb250ZXh0UmVmIGNv
bnRleHQpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJ
KHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCw2ICszOTgsMTEgQEAgdWludDY0X3QgV0tQYWdl
R2V0UmVuZGVyVHJlZVNpemUoV0tQYWdlUgogICAgIHJldHVybiB0b0ltcGwocGFnZSktPnJlbmRl
clRyZWVTaXplKCk7CiB9CiAKK1dLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1BhZ2VHZXRXZWJzaXRl
RGF0YVN0b3JlKFdLUGFnZVJlZiBwYWdlKQoreworICAgIHJldHVybiB0b0FQSSgmdG9JbXBsKHBh
Z2UpLT53ZWJzaXRlRGF0YVN0b3JlKCkpOworfQorCiBXS0luc3BlY3RvclJlZiBXS1BhZ2VHZXRJ
bnNwZWN0b3IoV0tQYWdlUmVmIHBhZ2VSZWYpCiB7CiAgICAgcmV0dXJuIHRvQVBJKHRvSW1wbChw
YWdlUmVmKS0+aW5zcGVjdG9yKCkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tQYWdlLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDggQEAgV0tfRVhQT1JU
IGRvdWJsZSBXS1BhZ2VHZXRFc3RpbWF0ZWRQcm9ncgogCiBXS19FWFBPUlQgdWludDY0X3QgV0tQ
YWdlR2V0UmVuZGVyVHJlZVNpemUoV0tQYWdlUmVmIHBhZ2UpOwogCitXS19FWFBPUlQgV0tXZWJz
aXRlRGF0YVN0b3JlUmVmIFdLUGFnZUdldFdlYnNpdGVEYXRhU3RvcmUoV0tQYWdlUmVmIHBhZ2Up
OworCiBXS19FWFBPUlQgV0tJbnNwZWN0b3JSZWYgV0tQYWdlR2V0SW5zcGVjdG9yKFdLUGFnZVJl
ZiBwYWdlKTsKIAogV0tfRVhQT1JUIFdLU3RyaW5nUmVmIFdLUGFnZUNvcHlVc2VyQWdlbnQoV0tQ
YWdlUmVmIHBhZ2UpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJBUElBcnJheS5oIgog
I2luY2x1ZGUgIkFQSUhUVFBDb29raWVTdG9yZS5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNz
UHJveHkuaCIKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNs
dWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0RpY3Rpb25hcnkuaCIKQEAgLTY5LDYgKzcw
LDE2IEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1dlYnNpdGVEYXRhU3RvcmUKICAgICByZXR1
cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoKldlYktp
dDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLCBzZXNzaW9uSUQpLmxlYWtSZWYoKSk7CiB9CiAKK3Zv
aWQgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0
YVN0b3JlUmVmIGRhdGFTdG9yZSkKK3sKKyAgICBXZWJLaXQ6OnRvSW1wbChkYXRhU3RvcmUpLT50
ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworfQorCitXS1Byb2Nlc3NJRCBXS1dlYnNpdGVEYXRh
U3RvcmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRh
dGFTdG9yZSkKK3sKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoZGF0YVN0b3JlKS0+bmV0d29y
a1Byb2Nlc3MoKS5wcm9jZXNzSWRlbnRpZmllcigpOworfQorCiB2b2lkIFdLV2Vic2l0ZURhdGFT
dG9yZVJlbW92ZUlUUERhdGFGb3JEb21haW4oV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9y
ZVJlZiwgV0tTdHJpbmdSZWYgaG9zdCwgdm9pZCogY29udGV4dCwgV0tXZWJzaXRlRGF0YVN0b3Jl
UmVtb3ZlSVRQRGF0YUZvckRvbWFpbkZ1bmN0aW9uIGNhbGxiYWNrKQogewogI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAkocmV2aXNpb24gMjY3NTM2
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVm
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDEzIEBACiAjaW5jbHVkZSA8V2ViS2l0L1dL
QmFzZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS0RlcHJlY2F0ZWQuaD4KIAorI2lmIGRlZmluZWQo
V0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyKQordHlwZWRlZiBpbnQgV0tQcm9jZXNzSUQ7CisjZWxz
ZQorI2luY2x1ZGUgPHVuaXN0ZC5oPgordHlwZWRlZiBwaWRfdCBXS1Byb2Nlc3NJRDsKKyNlbmRp
ZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCkBAIC01MCw2ICs1
NywxMSBAQCBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRBbGxvCiAKIFdLX0VY
UE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tXZWJz
aXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZik7CiAKK1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0
ZURhdGFTdG9yZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRh
dGFTdG9yZSk7CitXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3
b3JrUHJvY2VzcyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKKworV0tfRVhQT1JU
IFdLUHJvY2Vzc0lEIFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmll
cihXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKKwogV0tfRVhQT1JUIGJvb2wgV0tX
ZWJzaXRlRGF0YVN0b3JlR2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJzaXRl
RGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZik7CiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRh
U3RvcmVTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChXS1dlYnNpdGVEYXRhU3RvcmVS
ZWYgZGF0YVN0b3JlUmVmLCBib29sIGVuYWJsZSk7CiB0eXBlZGVmIHZvaWQgKCpXS1dlYnNpdGVE
YXRhU3RvcmVTdGF0aXN0aWNzRXBoZW1lcmFsRnVuY3Rpb24pKGJvb2wgaXNFcGhlbWVyYWwsIHZv
aWQqIGZ1bmN0aW9uQ29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTQwNiwyOCArNDA2LDYgQEAgLSAodm9pZClfY2xlYXJTdXBwb3J0ZWRQbHVnaW5z
CiAgICAgX3Byb2Nlc3NQb29sLT5jbGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIH0KIAotLSAodm9p
ZClfdGVybWluYXRlTmV0d29ya1Byb2Nlc3MKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0KLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxT
dXNwZW5kSW1taW5lbnRseQotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOwotfQotCi0tICh2b2lkKV9zZW5kTmV0
d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5k
bGVyCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNw
ZW5kRm9yVGVzdGluZyhbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlv
bkhhbmRsZXIpXSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7Ci19Ci0K
LS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQotewotICAgIF9wcm9jZXNzUG9v
bC0+c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7Ci19Ci0KIC0gKHZvaWQpX3Rlcm1pbmF0
ZVNlcnZpY2VXb3JrZXJzCiB7CiAgICAgX3Byb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycygpOwpAQCAtNDM1LDEyICs0MTMsNyBAQCAtICh2b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycwogCiAtICh2b2lkKV9zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOihCT09M
KXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MKIHsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNl
dFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyk7Ci19Ci0KLS0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIKLXsKLSAg
ICByZXR1cm4gX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKKyAgICBX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCiAtIChwaWRfdClfcHJld2Fy
bWVkUHJvY2Vzc0lkZW50aWZpZXIKQEAgLTQ2NywxMSArNDQwLDYgQEAgLSAodm9pZClfbWFrZU5l
eHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvcgogICAgIF9wcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFr
ZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcodHJ1ZSk7CiB9CiAKLS0gKHZvaWQp
X21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZwotewotICAgIF9wcm9j
ZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nKHRydWUpOwotfQotCiAtIChCT09MKV9oYXNQcmV3YXJtZWRXZWJQcm9jZXNzCiB7CiAgICAg
Zm9yIChhdXRvJiBwcm9jZXNzIDogX3Byb2Nlc3NQb29sLT5wcm9jZXNzZXMoKSkgewpAQCAtNTYw
LDE4ICs1MjgsNiBAQCAtICh2b2lkKV9zZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hCiAg
ICAgX3Byb2Nlc3NQb29sLT5zZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZChlbmFi
bGVkKTsKIH0KIAotLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNr
Z3JvdW5kCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJh
Y2tncm91bmQpOwotfQotCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNl
cnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzCi17Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQot
ICAgIF9wcm9jZXNzUG9vbC0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAtIChp
ZCA8X1dLR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRlcj4pX2NvcmVMb2NhdGlvblByb3Zp
ZGVyCiB7CkBAIC02MDQsMTEgKzU2MCw2IEBAIC0gKHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2lu
c0luV2ViUHJvY2UKICAgICB9KTsKIH0KIAotLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQKLXsKLSAgICByZXR1cm4g
X3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhlbnRp
dGxlbWVudCk7Ci19Ci0KIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90
ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVjdGlvblNwYWNlCiB7CiAg
ICAgX3Byb2Nlc3NQb29sLT5jbGVhclBlcm1hbmVudENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNw
YWNlKFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZShwcm90ZWN0aW9uU3BhY2UpKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQ
b29sUHJpdmF0ZS5oCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtODcs
MTQgKzg3LDkgQEAKIC0gKF9XS0Rvd25sb2FkICopX3Jlc3VtZURvd25sb2FkRnJvbURhdGE6KE5T
RGF0YSAqKXJlc3VtZURhdGEgd2Vic2l0ZURhdGFTdG9yZTooV0tXZWJzaXRlRGF0YVN0b3JlICop
ZGF0YVN0b3JlICBwYXRoOihOU1N0cmluZyAqKXBhdGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dl
YlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4gU2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoaWxl
IG5vIHdlYiBjb250ZW50IHByb2Nlc3NlcyBhcmUgcnVubmluZy4KLS0gKHZvaWQpX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkp
OwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwot
LSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9pZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4wKSk7CiAKIC8vIFRlc3Qgb25s
eS4KLS0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMyksIGlvcygxMS4wKSk7CiAtIChwaWRfdClfcHJld2FybWVkUHJvY2Vzc0lkZW50
aWZpZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIC8vIFRl
c3Qgb25seS4KQEAgLTEwNiw3ICsxMDEsNiBAQAogLSAoc2l6ZV90KV9zZXJ2aWNlV29ya2VyUHJv
Y2Vzc0NvdW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogLSAo
dm9pZClfc3luY05ldHdvcmtQcm9jZXNzQ29va2llcyBXS19BUElfREVQUkVDQVRFRF9XSVRIX1JF
UExBQ0VNRU5UKCJXS0hUVFBDb29raWVTdG9yZS5fZmx1c2hDb29raWVzVG9EaXNrV2l0aENvbXBs
ZXRpb25IYW5kbGVyOiIsIG1hY29zKDEwLjEzLCBXS19NQUNfVEJBKSwgaW9zKDExLjAsIFdLX0lP
U19UQkEpKTsKIC0gKHZvaWQpX21ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwotLSAodm9pZClfbWFr
ZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogLSAoTlNVSW50ZWdlcilfbWF4aW11bVN1c3BlbmRl
ZFBhZ2VDb3VudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwog
LSAoTlNVSW50ZWdlcilfcHJvY2Vzc0NhY2hlQ2FwYWNpdHkgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKE5TVUludGVnZXIpX3Byb2Nlc3NDYWNoZVNpemUg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CkBAIC0xMjIsMTMgKzEx
NiwxMCBAQAogLSAodm9pZClfcHJlY29ubmVjdFRvU2VydmVyOihOU1VSTCAqKXNlcnZlclVSTCBX
S19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKCJXS1dlYlZpZXcuX3ByZWNvbm5lY3RU
b1NlcnZlciIsIG1hY29zKDEwLjEzLjQsIFdLX01BQ19UQkEpLCBpb3MoMTEuMywgV0tfSU9TX1RC
QSkpOwogCiAvLyBUZXN0IG9ubHkuCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTMuNCksIGlvcygxMS4zKSk7CiAtICh2b2lkKV9nZXRBY3RpdmVQYWdlc09yaWdpbnNJbldlYlBy
b2Nlc3NGb3JUZXN0aW5nOihwaWRfdClwaWQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNB
cnJheTxOU1N0cmluZyAqPiAqKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwotLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50Q3Jl
ZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVj
dGlvblNwYWNlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogCiBA
cHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0Nvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdF
bmFibGVkLCBzZXR0ZXI9X3NldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkOikgQk9P
TCBfY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQgV0tfQVBJX0RFUFJFQ0FURUQoIlBh
cnRpdGlvbmVkIGNvb2tpZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQiLCBtYWNvcygxMC4xMi4z
LCAxMC4xNC40KSwgaW9zKDEwLjMsIDEyLjIpKTsKLS0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwg
aW9zKDEzLjApKTsKIAogLy8gVGVzdCBvbmx5LgogLSAodm9pZClfc2VlZFJlc291cmNlTG9hZFN0
YXRpc3RpY3NGb3JUZXN0aW5nV2l0aEZpcnN0UGFydHk6KE5TVVJMICopZmlyc3RQYXJ0eVVSTCB0
aGlyZFBhcnR5OihOU1VSTCAqKXRoaXJkUGFydHlVUkwgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRp
b246KEJPT0wpc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24gY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0JKHJldmlzaW9u
IDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVE
YXRhU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTYxNyw2ICs2MTcsMTEgQEAgLSAodm9pZClf
cmVuYW1lT3JpZ2luOihOU1VSTCAqKW9sZE5hbWUgdAogICAgIH0pOwogfQogCistIChCT09MKV9u
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxl
bWVudAoreworICAgIHJldHVybiBfd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcoZW50aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0
ZURhdGFTdG9yZURlbGVnYXRlPilfZGVsZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdl
dCgpLmdldCgpOwpAQCAtNjY4LDQgKzY3Myw0MiBAQCAtICh2b2lkKV9hcHBCb3VuZFNjaGVtZXM6
KHZvaWQgKF4pKE5TQXJyCiAjZW5kaWYKIH0KIAorLSAodm9pZClfdGVybWluYXRlTmV0d29ya1By
b2Nlc3MKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3Mo
KTsKK30KKworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9p
ZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5z
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhbY29tcGxldGlvbkhh
bmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseQoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7CisKK30KKworLSAo
dm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lCit7CisgICAgX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOworfQorCistICh2b2lkKV9zeW50aGVz
aXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQKK3sKKyAgICBfd2Vic2l0ZURhdGFT
dG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91
bmQpOworfQorCistIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCit7CisgICAgcmV0
dXJuIF93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnByb2Nlc3NJZGVudGlmaWVy
KCk7Cit9CisKKysgKHZvaWQpX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZworeworICAgIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bWFrZU5leHROZXR3b3JrUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCk7Cit9CisKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFT
dG9yZVByaXZhdGUuaAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtODUsOSArODUsMTkgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dlYnNp
dAogCiAtICh2b2lkKV9yZW5hbWVPcmlnaW46KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKilu
ZXdOYW1lIGZvckRhdGFPZlR5cGVzOihOU1NldDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJP
T0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVu
dGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CisKIEBwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dl
YnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2RlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTUpLCBpb3MoMTMuMCkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5
KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0g
KHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQ
cmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3Jr
UHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3Mo
V0tfSU9TX1RCQSkpOworLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCli
YWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CistIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisrICh2b2lkKV9tYWtlTmV4
dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwogQGVuZAogCiBOU19BU1NVTUVfTk9O
TlVMTF9FTkQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIldlYktpdENvb2tpZU1hbmFnZXIuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJv
eHkuaCIKICNpbmNsdWRlICJTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlLmgiCiAjaW5j
bHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFu
YWdlclByaXZhdGUuaCIKQEAgLTU2LDYgKzU3LDEyIEBAIGVudW0gewogfTsKIAogc3RydWN0IF9X
ZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBj
b29raWVNYW5hZ2VyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChkYXRhTWFuYWdlcik7
CisgICAgICAgIHJldHVybiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoZGF0
YU1hbmFnZXIpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIH0KKwogICAg
IFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
ZGF0YU1hbmFnZXIpOwpAQCAtNjQsOCArNzEsNyBAQCBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFn
ZXJQcml2YXRlIHsKIAogICAgIH5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUoKQogICAgIHsK
LSAgICAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldFByb2Nlc3NQb29scyhkYXRhTWFuYWdlcikpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+
c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2Fs
bGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOworICAgICAgICBjb29raWVNYW5hZ2VyKCkuc2V0
Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CiAgICAgfQogCiAg
ICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuYWdlcjsKQEAgLTEzOSwxMSArMTQ1
LDkgQEAgV2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0Q29va2llTWFuYWdlcgogewogICAgIFdl
YktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdl
ci0+cHJpdi0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nl
c3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXIt
PnByaXYtPmRhdGFNYW5hZ2VyKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9l
bWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9Cisg
ICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJh
Y2sobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2ln
bmFsX2VtaXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0
dXJuIG1hbmFnZXI7CiB9CiAKQEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVf
bWFuYWdlcl9zZXRfcGVyc2lzdGVuCiAgICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2Vy
KSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5
PigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVU
RjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkp
OworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE5Miw4ICsx
OTUsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvCiB7CiAgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlcikpOwogCi0g
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFBy
b2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0
UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5h
Z2VyKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQo
KSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKIH0KIAogLyoq
CkBAIC0yMTcsMTQgKzIxOSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2Nl
cHRfcG8KIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyht
YW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7CiAKLSAgICAvLyBUaGUg
cG9saWN5IGlzIHRoZSBzYW1lIGluIGFsbCBwcm9jZXNzIHBvb2xzIGhhdmluZyB0aGUgc2FtZSBz
ZXNzaW9uIElELCBzbyBqdXN0IGFzayBhbnkuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xz
ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKTsKLSAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkgewotICAgICAg
ICBnX3Rhc2tfcmV0dXJuX2ludCh0YXNrLmdldCgpLCBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NF
UFRfTk9fVEhJUkRfUEFSVFkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcHJvY2Vz
c1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZN
b3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgeworICAg
IG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CiAgICAgICAgIGdfdGFza19yZXR1
cm5faW50KHRhc2suZ2V0KCksIHRvV2ViS2l0Q29va2llQWNjZXB0UG9saWN5KHBvbGljeSkpOwog
ICAgIH0pOwogfQpAQCAtMjY5LDExICsyNjQsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9hZGRfY29va2llKFdlCiAgICAgZ19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAgICAgR1Jl
ZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxh
YmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3Jp
dHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MK
LSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0
aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRh
TWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKS0+c2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgeyBXZWJD
b3JlOjpDb29raWUoY29va2llKSB9LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIG1h
bmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNl
c3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0
YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVF
KTsKICAgICB9KTsKIH0KQEAgLTMyMCwxMSArMzExLDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21h
bmFnZXJfZ2V0X2Nvb2tpZXMoVwogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAogICAgIEdS
ZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxs
YWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dy
aXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNz
Ci0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2Ug
dGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3
ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0
YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5h
Z2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVSTChV
UkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25z
dCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIG1hbmFnZXItPnByaXYt
PmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBV
UkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0o
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAgR0xpc3Qq
IGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBjb29r
aWVzKQogICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29raWVzTGlz
dCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzY1LDcgQEAgdm9pZCB3ZWJr
aXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZQogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29v
a2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyht
YW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29r
aWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24g
ZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJv
bSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBw
cm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFu
YWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmRlbGV0ZUNvb2tpZShtYW5hZ2VyLT5wcml2LT5z
ZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RGTW92ZSh0YXNr
KV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLmRlbGV0ZUNvb2tpZSht
YW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNr
ID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNr
LmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCShyZXZpc2lvbiAyNjc1
MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAyLDcgKzQwMiw2IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dFdlYkNvbnRleHRDb25zdHJ1Y3RlZCgKICAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2Vy
ID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcoImxvY2FsLXN0b3Jh
Z2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEoKSwgbnVsbHB0
cikpOwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKGNv
bmZpZ3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRQcmltYXJ5RGF0YVN0b3Jl
KHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJzaXRlRGF0YU1h
bmFnZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1lc3NhZ2VIYW5k
bGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgLy8g
U2luayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRyPFdlYktpdFVzZXJNZXNzYWdl
PiB1c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRlKFdURk1vdmUobWVzc2FnZSks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTQxMCw4ICs0MDksNiBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoCiAgICAgICAgIGdfc2lnbmFsX2VtaXQo
d2ViQ29udGV4dCwgc2lnbmFsc1tVU0VSX01FU1NBR0VfUkVDRUlWRURdLCAwLCB1c2VyTWVzc2Fn
ZS5nZXQoKSwgJnJldHVyblZhbHVlKTsKICAgICB9KTsKIAotICAgIHdlYmtpdFdlYnNpdGVEYXRh
TWFuYWdlckFkZFByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwgKnBy
aXYtPnByb2Nlc3NQb29sKTsKLQogICAgIHByaXYtPnByb2Nlc3NNb2RlbCA9IFdFQktJVF9QUk9D
RVNTX01PREVMX01VTFRJUExFX1NFQ09OREFSWV9QUk9DRVNTRVM7CiAKICNpZiBFTkFCTEUoTUVN
T1JZX1NBTVBMRVIpCkBAIC00MzksMTEgKzQzNiw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNv
bnRleHREaXNwb3NlKEdPYmoKICAgICAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldERvd25sb2Fk
Q2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSk7CiAgICAgfQogCi0g
ICAgaWYgKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlcikgewotICAgICAgICB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJSZW1vdmVQcm9jZXNzUG9vbChwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0
KCksICpwcml2LT5wcm9jZXNzUG9vbCk7Ci0gICAgICAgIHByaXYtPndlYnNpdGVEYXRhTWFuYWdl
ciA9IG51bGxwdHI7Ci0gICAgfQotCiAgICAgaWYgKHByaXYtPmZhdmljb25EYXRhYmFzZSkgewog
ICAgICAgICB3ZWJraXRGYXZpY29uRGF0YWJhc2VDbG9zZShwcml2LT5mYXZpY29uRGF0YWJhc2Uu
Z2V0KCkpOwogICAgICAgICBwcml2LT5mYXZpY29uRGF0YWJhc2UgPSBudWxscHRyOwpAQCAtMTU4
MSw4ICsxNTczLDggQEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfcHJlZmV0Y2hfZG5zKFdlYgog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpKTsKICAg
ICBnX3JldHVybl9pZl9mYWlsKGhvc3RuYW1lKTsKIAotICAgIGlmIChjb250ZXh0LT5wcml2LT5k
bnNQcmVmZXRjaGVkSG9zdHMuYWRkKGhvc3RuYW1lKS5pc05ld0VudHJ5KQotICAgICAgICBjb250
ZXh0LT5wcml2LT5wcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpQcmVmZXRjaEROUyhTdHJpbmc6OmZyb21VVEY4KGhvc3RuYW1lKSkp
OworICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXREYXRhU3RvcmUoY29udGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKKyAg
ICB3ZWJzaXRlRGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlByZWZldGNoRE5TKFN0cmluZzo6ZnJvbVVURjgoaG9zdG5hbWUpKSwgMCk7CiAg
ICAgY29udGV4dC0+cHJpdi0+ZG5zUHJlZmV0Y2hIeXN0ZXJlcmlzLmltcHVsc2UoKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vi
Vmlldy5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTksNyArNzU5LDYg
QEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYgogICAgICAgICB3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHByaXYtPndlYnNp
dGVEYXRhTWFuYWdlci5nZXQoKSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90bHNf
ZXJyb3JzX3BvbGljeShjb250ZXh0RGF0YU1hbmFnZXIpKTsKICAgICAgICAgYXV0byBwcm94eVNl
dHRpbmdzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGNvbnRleHREYXRh
TWFuYWdlcikubmV0d29ya1Byb3h5U2V0dGluZ3MoKTsKICAgICAgICAgd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkuc2V0
TmV0d29ya1Byb3h5U2V0dGluZ3MoV1RGTW92ZShwcm94eVNldHRpbmdzKSk7Ci0gICAgICAgIHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckFkZFByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFu
YWdlci5nZXQoKSwgd2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHByaXYtPmNvbnRleHQu
Z2V0KCkpKTsKICAgICB9CiAKICAgICBpZiAoIXByaXYtPndlYnNpdGVQb2xpY2llcykKQEAgLTk0
NSwxMSArOTQ0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Rpc3Bvc2UoR09iamVjdAog
ICAgICAgICB3ZWJraXRXZWJDb250ZXh0V2ViVmlld0Rlc3Ryb3llZCh3ZWJWaWV3LT5wcml2LT5j
b250ZXh0LmdldCgpLCB3ZWJWaWV3KTsKICAgICB9CiAKLSAgICBpZiAod2ViVmlldy0+cHJpdi0+
d2Vic2l0ZURhdGFNYW5hZ2VyKSB7Ci0gICAgICAgIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlclJl
bW92ZVByb2Nlc3NQb29sKHdlYlZpZXctPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwg
d2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHdlYlZpZXctPnByaXYtPmNvbnRleHQuZ2V0
KCkpKTsKLSAgICAgICAgd2ViVmlldy0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gbnVsbHB0
cjsKLSAgICB9Ci0KICAgICBpZiAod2ViVmlldy0+cHJpdi0+Y3VycmVudFNjcmlwdERpYWxvZykg
ewogICAgICAgICB3ZWJraXRfc2NyaXB0X2RpYWxvZ19jbG9zZSh3ZWJWaWV3LT5wcml2LT5jdXJy
ZW50U2NyaXB0RGlhbG9nKTsKICAgICAgICAgQVNTRVJUKCF3ZWJWaWV3LT5wcml2LT5jdXJyZW50
U2NyaXB0RGlhbG9nKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcAkocmV2aXNpb24g
MjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTEgKzk1LDYgQEAgZW51bSB7
CiB9OwogCiBzdHJ1Y3QgX1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUgewotICAgIH5f
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQo
cHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSk7Ci0gICAgfQotCiAgICAgUmVmUHRyPFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZT4gd2Vic2l0ZURhdGFTdG9yZTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGJh
c2VEYXRhRGlyZWN0b3J5OwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gYmFzZUNhY2hlRGlyZWN0b3J5
OwpAQCAtMTE1LDcgKzExMCw2IEBAIHN0cnVjdCBfV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJp
dmF0ZSAKICAgICBXZWJLaXRUTFNFcnJvcnNQb2xpY3kgdGxzRXJyb3JzUG9saWN5OwogCiAgICAg
R1JlZlB0cjxXZWJLaXRDb29raWVNYW5hZ2VyPiBjb29raWVNYW5hZ2VyOwotICAgIFZlY3RvcjxX
ZWJQcm9jZXNzUG9vbCo+IHByb2Nlc3NQb29sczsKIH07CiAKIFdFQktJVF9ERUZJTkVfVFlQRShX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIsIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlciwgR19U
WVBFX09CSkVDVCkKQEAgLTIwOCw3ICsyMDIsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJTZXRQCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUFJPUF9JU19FUEhFTUVS
QUw6CiAgICAgICAgIGlmIChnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSkKLSAgICAgICAgICAg
IG1hbmFnZXItPnByaXYtPndlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmNyZWF0ZU5vblBlcnNpc3RlbnQoKTsKKyAgICAgICAgICAgIG1hbmFnZXItPnByaXYtPndl
YnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZShXVEZNb3Zl
KGNvbmZpZ3VyYXRpb24pLCBQQUw6OlNlc3Npb25JRDo6Z2VuZXJhdGVQZXJzaXN0ZW50U2Vzc2lv
bklEKCkpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBhcmFtU3BlYyk7CkBAIC01
MDEsMjMgKzQ5NSw2IEBAIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgd2Via2l0V2Vic2l0ZUQK
ICAgICByZXR1cm4gKnByaXYtPndlYnNpdGVEYXRhU3RvcmU7CiB9CiAKLXZvaWQgd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyQWRkUHJvY2Vzc1Bvb2woV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBt
YW5hZ2VyLCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCi17Ci0gICAgQVNTRVJUKCFtYW5h
Z2VyLT5wcml2LT5wcm9jZXNzUG9vbHMuY29udGFpbnMoJnByb2Nlc3NQb29sKSk7Ci0gICAgbWFu
YWdlci0+cHJpdi0+cHJvY2Vzc1Bvb2xzLmFwcGVuZCgmcHJvY2Vzc1Bvb2wpOwotfQotCi12b2lk
IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlclJlbW92ZVByb2Nlc3NQb29sKFdlYktpdFdlYnNpdGVE
YXRhTWFuYWdlciogbWFuYWdlciwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotewotICAg
IEFTU0VSVChtYW5hZ2VyLT5wcml2LT5wcm9jZXNzUG9vbHMuY29udGFpbnMoJnByb2Nlc3NQb29s
KSk7Ci0gICAgbWFuYWdlci0+cHJpdi0+cHJvY2Vzc1Bvb2xzLnJlbW92ZUZpcnN0KCZwcm9jZXNz
UG9vbCk7Ci19Ci0KLWNvbnN0IFZlY3RvcjxXZWJQcm9jZXNzUG9vbCo+JiB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5h
Z2VyKQotewotICAgIHJldHVybiBtYW5hZ2VyLT5wcml2LT5wcm9jZXNzUG9vbHM7Ci19Ci0KIC8q
KgogICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldzoKICAqIEBmaXJzdF9vcHRpb25f
bmFtZTogbmFtZSBvZiB0aGUgZmlyc3Qgb3B0aW9uIHRvIHNldApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNp
dGVEYXRhTWFuYWdlclByaXZhdGUuaAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xOSwxMSArMTksNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1
ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgogCiBX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFT
dG9yZShXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqKTsKLXZvaWQgd2Via2l0V2Vic2l0ZURhdGFN
YW5hZ2VyQWRkUHJvY2Vzc1Bvb2woV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiwgV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbCYpOwotdm9pZCB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJSZW1vdmVQcm9j
ZXNzUG9vbChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqLCBXZWJLaXQ6OldlYlByb2Nlc3NQb29s
Jik7Ci1jb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJQcm9jZXNzUG9vbCo+JiB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKik7Ci0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNl
c3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTM5Miw4ICsxMzkyLDggQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6YWRkU2luZ2xlQ29vawogCiAgICAgY29va2llLmh0dHBPbmx5ID0gKmh0dHBPbmx5OwogCi0g
ICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+
c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+
c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2ll
IH0sIFtjYWxsYmFja10oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5h
Z2VyID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFu
YWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0
b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CiAgICAgICAgIGNh
bGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAtMTQwOSw4ICsxNDA5LDggQEAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPgogCiAgICAgU3RyaW5nIGhv
c3QgPSBhY3RpdmVVUkwuaG9zdCgpLnRvU3RyaW5nKCk7CiAKLSAgICBXZWJDb29raWVNYW5hZ2Vy
UHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVDb29raWVzRm9ySG9z
dG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21h
aW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOworICAgIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eSYgY29va2llTWFuYWdlciA9IHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3Jr
UHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tp
ZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhv
c3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoaG9zdCkgfSk7CiAKICAgICByZXR1
cm4geyB9OwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgJKHJldmlz
aW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSArNDEsMTEg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQ
cm94eTsKIAogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IGZpbmFsIDog
cHVibGljIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IHsKLXByaXZhdGU6CitwdWJs
aWM6CiAgICAgdm9pZCBzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJv
eHkmLCBMZWdhY3lDdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmKSBmaW5hbDsKICAgICB2b2lkIHN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCkgZmluYWw7CiAgICAgdm9pZCBpbnZh
bGlkYXRlKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5JikgZmluYWw7Ci0KK3ByaXZh
dGU6CiAgICAgSGFzaE1hcDxMZWdhY3lDdXN0b21Qcm90b2NvbElELCBSZXRhaW5QdHI8V0tDdXN0
b21Qcm90b2NvbExvYWRlcj4+IG1fbG9hZGVyTWFwOwogfTsKIApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCShyZXZp
c2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNz
UG9vbENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsOCArMTM0LDkgQEAgc3RhdGljIHZv
aWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZAogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1
cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJs
ZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpm
b3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbZW5hYmxlZCA9IHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJs
ZWQoKV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUu
bmV0d29ya1Byb2Nlc3MoKS5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGVuYWJsZWQpOwor
ICAgIH0pOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKCFtX3By
b2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkKQEAgLTE2Niw4
ICsxNjcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUoCiAgICAg
aWYgKCFbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAi
V2ViS2l0U3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIiXSkKICAgICAgICAgaW5zdGFsbE1l
bW9yeVByZXNzdXJlSGFuZGxlcigpOwogCi0gICAgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KG1ha2VVbmlxdWU8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Pigp
KTsKLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkK
ICAgICBpZiAoIV9NR0NhY2hlVmFsaWQoKSkgewogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDAp
LCBeewpAQCAtNDk1LDIyICs0OTQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUlu
aXRpYWxpemVOCiAKICAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVs
dHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwogCi0gICAgewotICAgICAgICBib29sIGlzU2FmYXJp
ID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgaXNNaW5pQnJvd3NlciA9IGZhbHNlOwotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6SU9TQXBwbGljYXRp
b246OmlzTW9iaWxlU2FmYXJpKCk7Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpJ
T1NBcHBsaWNhdGlvbjo6aXNNaW5pQnJvd3NlcigpOwotI2VsaWYgUExBVEZPUk0oTUFDKQotICAg
ICAgICBpc1NhZmFyaSA9IFdlYkNvcmU6Ok1hY0FwcGxpY2F0aW9uOjppc1NhZmFyaSgpOwotICAg
ICAgICBpc01pbmlCcm93c2VyID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzTWluaUJyb3dz
ZXIoKTsKLSNlbmRpZgotICAgICAgICBpZiAoaXNTYWZhcmkgfHwgaXNNaW5pQnJvd3Nlcikgewot
ICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuaHR0cFByb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5n
Rm9yS2V5OihOU1N0cmluZyAqKVdlYktpdDJIVFRQUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAg
ICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuaHR0cHNQcm94eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0Zvcktl
eTooTlNTdHJpbmcgKilXZWJLaXQySFRUUFNQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0ID0gYWRvcHRDRihfQ0ZO
ZXR3b3JrQ29weUFUU0NvbnRleHQoKSk7CiAKICAgICBwYXJhbWV0ZXJzLnNob3VsZFN1cHByZXNz
TWVtb3J5UHJlc3N1cmVIYW5kbGVyID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0U3VwcHJl
c3NNZW1vcnlQcmVzc3VyZUhhbmRsZXJEZWZhdWx0c0tleV07CkBAIC01MjQsMTIgKzUwNyw4IEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICBOU051bWJlciAq
ZGF0YWJhc2VFbmFibGVkVmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6Omlz
SVRQRGF0YWJhc2VFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogICAgIGlm
IChkYXRhYmFzZUVuYWJsZWRWYWx1ZSkKICAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJ
VFBEYXRhYmFzZSA9IGRhdGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAgICBlbHNlCi0g
ICAgICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQYWdl
R3JvdXAtPnByZWZlcmVuY2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBhcmFt
ZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xG
b3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlBy
ZWZlcmVuY2VzS2V5OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3Jl
YXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwotCi0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NX
ZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tp
bmdQZXJtaXNzaW9uKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxp
ZGF0ZUNvbnRleHQoKQpAQCAtNjA4LDExICs1ODcsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpw
cm9jZXNzU3VwcHJlc3Npb25FCiAgICAgcmV0dXJuICFtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50
ZXIudmFsdWUoKSAmJiAhbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVy
LnZhbHVlKCk7CiB9CiAKLWJvb2wgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYgZW50aXRsZW1lbnQpCi17Ci0gICAgcmV0
dXJuIFdURjo6aGFzRW50aXRsZW1lbnQoZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9u
KCktPnhwY0Nvbm5lY3Rpb24oKSwgZW50aXRsZW1lbnQudXRmOCgpLmRhdGEoKSk7Ci19Ci0KICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiBmbG9hdCBX
ZWJQcm9jZXNzUG9vbDo6ZGlzcGxheUJyaWdodG5lc3MoKQogewpAQCAtOTQ5LDIzICs5MjMsNCBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlckhpZ2hEeW5hbWljCiB9CiAjZW5kaWYKIAot
T1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBXZWJQcm9jZXNzUG9vbDo6eHBjRW5kcG9pbnRNZXNz
YWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lbmRwb2ludE1lc3NhZ2U7Ci19Ci0KLXZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNz
KE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4gZW5kcG9pbnRNZXNzYWdlKQotewotICAgIG1fZW5k
cG9pbnRNZXNzYWdlID0gZW5kcG9pbnRNZXNzYWdlOwotCi0gICAgZm9yIChhdXRvIHByb2Nlc3Mg
OiBtX3Byb2Nlc3NlcykgewotICAgICAgICBpZiAocHJvY2Vzcy0+c3RhdGUoKSAhPSBBdXhpbGlh
cnlQcm9jZXNzUHJveHk6OlN0YXRlOjpSdW5uaW5nKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGlmICghcHJvY2Vzcy0+Y29ubmVjdGlvbigpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGF1dG8gY29ubmVjdGlvbiA9IHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+eHBjQ29u
bmVjdGlvbigpOwotICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlv
biwgZW5kcG9pbnRNZXNzYWdlLmdldCgpKTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5LmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw4
ICs3NSw4IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6Y2FuY2VsKCkKICAgICBpZiAoIW1fcHJvY2Vz
c1Bvb2wpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5KiBu
ZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93
bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CisgICAgaWYgKG1fZGF0YVN0b3JlKQorICAgICAgICBt
X2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CiB9CiAKIHZvaWQgRG93bmxvYWRQ
cm94eTo6aW52YWxpZGF0ZSgpCkBAIC0xMDMsMTUgKzEwMywxMyBAQCBXZWJQYWdlUHJveHkqIERv
d25sb2FkUHJveHk6Om9yaWdpbmF0aW5nCiAjaWYgUExBVEZPUk0oQ09DT0EpCiB2b2lkIERvd25s
b2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVzcyhjb25zdCBVUkwmIFVSTCkKIHsKLSAgICBpZiAoIW1f
cHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOwotICAgICAg
ICBib29sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlKFVSTC5maWxlU3lzdGVtUGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFk
V3JpdGUsIGhhbmRsZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRl
bnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9ncmVzcyht
X2Rvd25sb2FkSUQsIFVSTCwgaGFuZGxlKSwgMCk7Ci0gICAgfQorICAgIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSBoYW5kbGU7CisgICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9IFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJv
eEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOworICAgIEFTU0VSVF9VTlVTRUQo
Y3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsKKyAgICBt
X2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDAp
OwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQogCkBAIC0xMzEsMTEgKzEyOSwxMCBAQCB2
b2lkIERvd25sb2FkUHJveHk6OmRpZFN0YXJ0KGNvbnN0IFJlc291CiAKIHZvaWQgRG93bmxvYWRQ
cm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJiYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIHVpbnQ2NF90IGNoYWxsZW5nZUlEKQog
ewotICAgIGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wgfHwgIW1f
ZGF0YVN0b3JlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlUHJveHkgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92
ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX3Byb2Nl
c3NQb29sLT5uZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKSksIG51bGxwdHIpOwotCisgICAg
YXV0byBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VQcm94eTo6Y3JlYXRlKFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBjaGFsbGVu
Z2VJRCwgbWFrZVJlZigqbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigp
KSwgbnVsbHB0cik7CiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKnRoaXMsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
UHJveHkuZ2V0KCkpOwogfQogCkBAIC0xNDYsMTUgKzE0MywxMCBAQCB2b2lkIERvd25sb2FkUHJv
eHk6OndpbGxTZW5kUmVxdWVzdChSZXNvCiAKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENs
aWVudCgpLndpbGxTZW5kUmVxdWVzdCgqdGhpcywgV1RGTW92ZShwcm9wb3NlZFJlcXVlc3QpLCBy
ZWRpcmVjdFJlc3BvbnNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXShS
ZXNvdXJjZVJlcXVlc3QmJiBuZXdSZXF1ZXN0KSB7CiAgICAgICAgIG1fcmVkaXJlY3RDaGFpbi5h
cHBlbmQobmV3UmVxdWVzdC51cmwoKSk7Ci0KLSAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5t
X3Byb2Nlc3NQb29sKQorICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fZGF0YVN0b3JlKQog
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkg
PSBwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpOwotICAgICAg
ICBpZiAoIW5ldHdvcmtQcm9jZXNzUHJveHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgbmV0d29ya1Byb2Nlc3NQcm94eS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNv
bnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVx
dWVzdCksIDApOworICAgICAgICBhdXRvJiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVjdGVk
VGhpcy0+bV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIG5ldHdvcmtQcm9j
ZXNzUHJveHkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRS
ZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOwogICAg
IH0pOwogfQogCkBAIC0xNzksMTYgKzE3MSwxNCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRlY2lk
ZURlc3RpbmF0aW9uV2l0CiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5h
dGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNh
bml0aXplU3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBkb3dubG9hZElEID0gZG93bmxvYWRJRF0gKEFsbG93
T3ZlcndyaXRlIGFsbG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsKKyAgICBtX3By
b2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3Rl
ZEZpbGVuYW1lKCp0aGlzLCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRG
aWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGRvd25sb2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3Ry
aW5nIGRlc3RpbmF0aW9uKSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlOwogICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQog
ICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGRlc3RpbmF0aW9uLCBT
YW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUp
OwogCi0gICAgICAgIGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICAgICAgaWYgKCFtX2RhdGFTdG9y
ZSkKICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBl
bmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94
RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwg
MCk7CisgICAgICAgIG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9u
KGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092
ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CiAgICAgfSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQ
cm94eU1hcC5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyAr
NDQsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIERvd25sb2FkUHJveHlNYXA6OkRvd25sb2Fk
UHJveHlNYXAoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJvY2VzcykKLSAgICA6IG1fcHJvY2Vzcyht
YWtlV2Vha1B0cihwcm9jZXNzKSkKKyAgICA6IG1fcHJvY2Vzcyhwcm9jZXNzKQogI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgICwgbV9zaG91bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJvY2Vzc0hhc0Vu
dGl0bGVtZW50KCJjb20uYXBwbGUubXVsdGl0YXNraW5nLnN5c3RlbWFwcGFzc2VydGlvbnMiKSkK
ICNlbmRpZgpAQCAtNzAsMTQgKzcwLDEyIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxhdGZv
cm1EZXN0cm95KCkKIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVudGVy
QmFja2dyb3VuZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91
bmQoKSwgMCk7CisgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpB
cHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFBy
b3h5TWFwOjphcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKQogewotICAgIGlmIChtX3By
b2Nlc3MpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Muc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3Vu
ZCgpLCAwKTsKIH0KIAogRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93
bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBw
cm9jZXNzUG9vbCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVl
c3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5h
dGluZ1BhZ2UpCkBAIC05MiwxMyArOTAsMTIgQEAgRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94
eU1hcDo6Y3JlYXRlRAogICAgICAgICBtX2Rvd25sb2FkVUlBc3NlcnRpb24gPSBtYWtlVW5pcXVl
PFByb2Nlc3NBc3NlcnRpb24+KGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIldlYktpdCBkb3dubG9h
ZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAogICAg
ICAgICBBU1NFUlQoIW1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uKTsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQobV9wcm9jZXNzKTsKLSAgICAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3Nl
cnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy0+cHJvY2Vzc0lk
ZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpV
bmJvdW5kZWROZXR3b3JraW5nKTsKKyAgICAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRp
b24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy5wcm9jZXNzSWRlbnRp
ZmllcigpLCAiV2ViS2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVuYm91
bmRlZE5ldHdvcmtpbmcpOwogCiAgICAgICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9u
LCAiVUlQcm9jZXNzIHRvb2sgJ1dlYktpdCBkb3dubG9hZHMnIGFzc2VydGlvbnMgZm9yIFVJUHJv
Y2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKICAgICB9CiAKLSAgICBtX3Byb2Nlc3MtPmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3dubG9hZFBy
b3h5LmdldCgpKTsKKyAgICBtX3Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpE
b3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkUHJveHktPmRvd25s
b2FkSUQoKS5kb3dubG9hZElEKCksIGRvd25sb2FkUHJveHkuZ2V0KCkpOwogCiAgICAgcmV0dXJu
IGRvd25sb2FkUHJveHk7CiB9CkBAIC0xMDksMTIgKzEwNiw5IEBAIHZvaWQgRG93bmxvYWRQcm94
eU1hcDo6ZG93bmxvYWRGaW5pc2hlZCgKIAogICAgIFJFTEVBU0VfTE9HKExvYWRpbmcsICJSZW1v
dmluZyBkb3dubG9hZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFw
IiwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJveHkg
bWF5IGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCi0g
ICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9j
ZXNzUG9vbCgpKTsKLQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElE
KSk7CiAKLSAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93
bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQo
KSk7CisgICAgbV9wcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxv
YWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7
CiAgICAgZG93bmxvYWRQcm94eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9kb3dubG9hZHMucmVtb3Zl
KGRvd25sb2FkSUQpOwogCkBAIC0xMzMsMTUgKzEyNywxMyBAQCB2b2lkIERvd25sb2FkUHJveHlN
YXA6OmludmFsaWRhdGUoKQogICAgIGZvciAoY29uc3QgYXV0byYgZG93bmxvYWQgOiBtX2Rvd25s
b2Fkcy52YWx1ZXMoKSkgewogICAgICAgICBkb3dubG9hZC0+cHJvY2Vzc0RpZENsb3NlKCk7CiAg
ICAgICAgIGRvd25sb2FkLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+cmVtb3Zl
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIGRvd25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKKyAgICAgICAgbV9w
cm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7
CiAgICAgfQogCiAgICAgbV9kb3dubG9hZHMuY2xlYXIoKTsKICAgICBtX2Rvd25sb2FkVUlBc3Nl
cnRpb24gPSBudWxscHRyOwogICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbnVs
bHB0cjsKICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyBEb3du
bG9hZFByb3h5TWFwIGludmFsaWRhdGVkIC0gUmVsZWFzZWQgJ1dlYktpdCBkb3dubG9hZHMnIGFz
c2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKLQotICAgIG1fcHJv
Y2VzcyA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5o
CShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWRQcm94eU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZSgpOwogICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95
KCk7CiAKLSAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fcHJvY2VzczsKKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5JiBtX3Byb2Nlc3M7CiAgICAgSGFzaE1hcDxEb3dubG9hZElELCBS
ZWZQdHI8RG93bmxvYWRQcm94eT4+IG1fZG93bmxvYWRzOwogCiAgICAgYm9vbCBtX3Nob3VsZFRh
a2VBc3NlcnRpb24geyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyNjc1
MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiTmV0d29y
a1Byb2Nlc3NQcm94eS5oIgogCiAjaW5jbHVkZSAiQVBJQ29udGVudFJ1bGVMaXN0LmgiCisjaW5j
bHVkZSAiQVBJQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdl
ci5oIgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHlNYXAuaCIKQEAgLTM1LDYgKzM2LDcgQEAKICNp
bmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUg
IkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNlbmRpZgorI2lu
Y2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRl
ICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC00OCw2ICs1MCw3IEBACiAjaW5j
bHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFj
Y2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmgiCisj
aW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3Nh
Z2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01l
c3NhZ2VzLmgiCkBAIC01OCw4ICs2MSwxMCBAQAogI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGEuaCIKICNpbmNsdWRlICJXZWJz
aXRlRGF0YVN0b3JlQ2xpZW50LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUmVnaXN0cmFibGVEb21haW4uaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9y
Lmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKICNpZiBFTkFCTEUoU0VD
X0lURU1fU0hJTSkKQEAgLTcwLDIwICs3NSwxMjIgQEAKICNpbmNsdWRlIDx3dGYvc3BpL2Rhcndp
bi9YUENTUEkuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwogI2RlZmluZSBNRVNT
QUdFX0NIRUNLKGFzc2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlvbiwgY29ubmVj
dGlvbigpKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
Ci1OZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29s
JiBwcm9jZXNzUG9vbCkKLSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShwcm9jZXNzUG9vbC5h
bHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJvY2Vzc1Bvb2wocHJv
Y2Vzc1Bvb2wpCitzdGF0aWMgSGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5Kj4mIG5ldHdvcmtQ
cm9jZXNzZXNTZXQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5Kj4+
IHNldDsKKyAgICByZXR1cm4gc2V0OworfQorCitWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJv
eHk+PiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkKK3sKKyAgICBW
ZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXM7CisgICAgcHJvY2Vzc2Vz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobmV0d29ya1Byb2Nlc3Nlc1NldCgpLnNpemUoKSk7Cisg
ICAgZm9yIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA6IG5ldHdvcmtQcm9jZXNzZXNTZXQoKSkKKyAg
ICAgICAgcHJvY2Vzc2VzLnVuY2hlY2tlZEFwcGVuZCgqbmV0d29ya1Byb2Nlc3MpOworICAgIHJl
dHVybiBwcm9jZXNzZXM7Cit9CisKK3N0YXRpYyBSZWZQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4m
IGRlZmF1bHRQcm9jZXNzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPE5l
dHdvcmtQcm9jZXNzUHJveHk+PiBwcm9jZXNzOworICAgIHJldHVybiBwcm9jZXNzLmdldCgpOwor
fQorCitSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVs
dE5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBpZiAoIWRlZmF1bHRQcm9jZXNzKCkpCisgICAgICAg
IGRlZmF1bHRQcm9jZXNzKCkgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGUoKTsKKyAgICBy
ZXR1cm4gKmRlZmF1bHRQcm9jZXNzKCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
dGVybWluYXRlKCkKK3sKKyAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpOwor
ICAgIGRpZFRlcm1pbmF0ZSgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFRl
cm1pbmF0ZSgpCit7CisgICAgaWYgKHRoaXMgPT0gZGVmYXVsdFByb2Nlc3MoKS5nZXQoKSkKKyAg
ICAgICAgZGVmYXVsdFByb2Nlc3MoKSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpCit7CisgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9y
YXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJl
YWRzLgorICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFk
aW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgorICAgIGlmICghUnVuTG9vcDo6aXNNYWlu
KCkpIHsKKyAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzXSB7CisgICAgICAg
ICAgICBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgICAgIH0pOwor
ICAgIH0KKworICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7
CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJlID0gY29weVRvVmVj
dG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFz
U2VjdXJlKCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2lu
Z0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5n
czo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0
eVBvbGljeSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9
IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1Rv
UmVnaXN0ZXJBc0xvY2FsKCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRB
c05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24o
KS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7CisgICAgcGFyYW1ldGVycy5jYWNoZU1v
ZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwoKTsKKyAg
ICBmb3IgKGF1dG8mIHNjaGVtZSA6IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3Rv
bVByb3RvY29sSGFuZGxlcnMoKSkKKyAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0
ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgIGlmIChTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdlYlByb2Nl
c3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7ICFjb29raWVTdG9yYWdlRGlyZWN0b3J5
LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVh
ZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29va2ll
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgaWYgKFN0cmluZyBjb250YWlu
ZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ0NhY2hlc0RpcmVj
dG9yeSgpOyAhY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnRhaW5l
ckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2Vi
UHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOyAhcGFyZW50QnVuZGxlRGlyZWN0
b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBh
cmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBh
cmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyNlbmRpZgor
ICAgIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJh
bWV0ZXJzKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5l
dHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vz
c1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKQoreworICAgIGZvciAoYXV0byog
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAg
ICAgaWYgKHByb2Nlc3NQb29sLT5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0
YXRpYyBib29sIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigp
Cit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9j
ZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNob3VsZFRha2VVSUJhY2tn
cm91bmRBc3NlcnRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJv
eHkoKQorICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KGFueVByb2Nlc3NQb29sQWx3YXlzUnVu
c0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9D
T0xfTUFOQUdFUikKKyAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlx
dWVSZWY8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogICAgICwgbV9jdXN0
b21Qcm90b2NvbE1hbmFnZXJQcm94eSgqdGhpcykKKyNlbHNlCisgICAgLCBtX2N1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50PigpKQogI2VuZGlmCi0gICAgLCBtX3Rocm90dGxlcigqdGhpcywgcHJvY2Vzc1Bvb2wu
c2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV90aHJvdHRsZXIoKnRo
aXMsIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAg
ICwgbV9jb29raWVNYW5hZ2VyKFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzKSkK
IHsKICAgICBjb25uZWN0KCk7CisgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vz
cygpOworICAgIHVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICBuZXR3b3JrUHJvY2Vzc2Vz
U2V0KCkuYWRkKHRoaXMpOwogfQogCiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nl
c3NQcm94eSgpCkBAIC05OCw2ICsyMDUsNyBAQCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29y
a1Byb2Nlc3NQcm94CiAKICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rv
d25sb2FkUHJveHlNYXAtPmludmFsaWRhdGUoKTsKKyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCku
cmVtb3ZlKHRoaXMpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9w
dGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuY2hPcHRpb25zKQpAQCAt
MTA1LDE1ICsyMTMsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
CiAgICAgbGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSA9IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vz
c1R5cGU6Ok5ldHdvcms7CiAgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRp
b25zKGxhdW5jaE9wdGlvbnMpOwogCi0gICAgaWYgKHByb2Nlc3NQb29sKCkuc2hvdWxkTWFrZU5l
eHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKLSAgICAgICAgcHJvY2Vz
c1Bvb2woKS5zZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmcoZmFsc2UpOworICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpzaG91bGRNYWtlTmV4dE5ldHdv
cmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkKICAgICAgICAgbGF1bmNoT3B0aW9ucy5z
aG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKLSAgICB9Ci0KLSNp
ZiBQTEFURk9STShQTEFZU1RBVElPTikKLSAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NQYXRoID0g
bV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc1BhdGgoKTsKLSAgICBsYXVuY2hPcHRpb25zLnVz
ZXJJZCA9IG1fcHJvY2Vzc1Bvb2wudXNlcklkKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0
aW9uKQpAQCAtMTY2LDEyICsyNjcsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzeW50
aGVzaXplQXBwSQogICAgIH0KIH0KIAotRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94
eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBm
cmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQorRG93bmxvYWRQcm94eSYg
TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3Jl
JiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywg
V2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAgICAgaWYgKCFtX2Rvd25sb2FkUHJv
eHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1ha2VVbmlxdWU8RG93bmxvYWRQ
cm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRl
RG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwg
ZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlN
YXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBwcm9jZXNzUG9vbCwgcmVzb3VyY2VS
ZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRh
RmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoV2Vic2l0
ZURhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjM3LDggKzMzOCwxMSBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9jZXNzCiB7CiAgICAgY2xlYXJDYWxsYmFja1N0
YXRlcygpOwogCi0gICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIgdG8gZm9y
Z2V0IGFib3V0IHRoaXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1c2UgdXMg
dG8gYmUgZGVsZXRlZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgq
dGhpcyk7CisgICAgUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IHByb3RlY3RlZFRoaXMoKnRoaXMp
OworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vz
c1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRo
aXMpOworICAgIGZvciAoYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA6IG1fd2Vic2l0ZURhdGFTdG9y
ZXMpCisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlz
KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjbGVhckNhbGxiYWNrU3RhdGVzKCkK
QEAgLTI1OCw5ICszNjIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVN
ZXNzCiAgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wuZGlzcGF0Y2hNZXNzYWdlKGNvbm5l
Y3Rpb24sIGRlY29kZXIpKQotICAgICAgICByZXR1cm47Ci0KICAgICBkaWRSZWNlaXZlTmV0d29y
a1Byb2Nlc3NQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAKQEAgLTI3NCw4
ICszNzUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVTeW5jCiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKLSAg
ICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZihtX3Byb2Nlc3NQb29sKTsKLQog
ICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+
aW52YWxpZGF0ZSgpOwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIp
CkBAIC0zMzEsMTEgKzQzMCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2
ZUF1dGgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdG9wT3JpZ2luIHx8ICFt
X3Byb2Nlc3NQb29sLmlzU2VydmljZVdvcmtlclBhZ2VJRChwYWdlSUQpKSB7Ci0gICAgICAgIHBy
b2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShzZXNzaW9uSUQsIFdURk1vdmUoYXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFdlYlBhZ2VQ
cm94eTo6Zm9yTW9zdFZpc2libGVXZWJQYWdlSWZBbnkoc2Vzc2lvbklELCAqdG9wT3JpZ2luLCBb
dGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSA9IFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBuZWdvdGlh
dGVkTGVnYWN5VExTXShhdXRvKiBwYWdlKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhp
cykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM5MiwxMSArNDg2LDYgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuYwogICAgICAgICBuZXR3b3JrUHJvY2Vzc0NyYXNo
ZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAg
IGlmIChtX3Byb2Nlc3NQb29sLnByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSkKLSAgICAgICAg
c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgogICAgIAogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiA9
IHRoaXMtPmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpKQpAQCAtMTIwNSw3ICsxMjk0LDgg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXRUaGlyZFBhcnR5QwogfQogdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2wo
KS5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihXVEZNb3ZlKGRvbWFpbnMpKTsKKyAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygp
KQorICAgICAgICBwcm9jZXNzUG9vbC0+c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFz
aFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4geyBkb21haW5zIH0pOwogfQogI2VuZGlm
IC8vIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKQEAgLTEyNTIsNDUgKzEzNDIs
MzEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpmbHVzaENvb2tpZXMoYwogICAgIHNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkZsdXNoQ29va2llcyhzZXNz
aW9uSUQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3Zv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9y
ZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMuYWRkKHN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgbV93
ZWJzaXRlRGF0YVN0b3Jlcy5hZGQoc3RvcmUpOwogCiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkp
Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0
b3JlIHsgc3RvcmUtPnBhcmFtZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0
b3JlLT5zZXNzaW9uSUQoKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCk7CisgICAgYXV0
byBzZXNzaW9uSUQgPSBzdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAoIXNlc3Npb25JRC5pc0Vw
aGVtZXJhbCgpKSB7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0
ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnkoKSk7CisgICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNv
bHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgogICAgIH0KIH0KIAotYm9v
bCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zZXNzaW9uSURzLmNvbnRhaW5zKHNlc3Npb25JRCk7
Ci19Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24o
V2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMu
cmVtb3ZlKHNlc3Npb25JRCk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5yZW1vdmUod2Vic2l0
ZURhdGFTdG9yZSk7CiAKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRlc3Ryb3lTZXNzaW9uIHsgc2Vzc2lvbklEIH0sIDAp
OworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24g
eyB3ZWJzaXRlRGF0YVN0b3JlLnNlc3Npb25JRCgpIH0sIDApOwogfQogCiBXZWJzaXRlRGF0YVN0
b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJz
aXRlRGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAg
ICAgICBpZiAod2Vic2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSA9PSBzZXNzaW9uSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpLnB0cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhp
c3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0
dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Np
b25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3Jh
Z2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEzMzcsNyArMTQxMyw3
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVdlYlUKICNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHJl
Z2lzdHJhYmxlRG9tYWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX3Byb2Nlc3NQb29sLmVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgV1RG
TW92ZShyZWdpc3RyYWJsZURvbWFpbiksIHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOworICAgIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVj
dGlvblRvTmV0d29ya1Byb2Nlc3MoKnRoaXMsIFJlZ2lzdHJhYmxlRG9tYWluIHtyZWdpc3RyYWJs
ZURvbWFpbn0sIHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OndvcmtlckNvbnRleHRDb25uZWN0aW9uTm9Mb25nZXJO
ZWVkZWQoV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTE1MDAsMTYg
KzE1NzYsMzQgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpwcmVjb25uZWN0VG8oUAogICAg
IHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vzc2lvbklELCB3
ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0KIAorc3RhdGlj
IGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygp
KSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlByb2Nlc3Nlcygp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
Kworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkK
K3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dyb3VuZFdlYlBy
b2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0
aW9uKCkKIHsKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2Vz
KCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkp
IHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdyb3VuZEFjdGl2
aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0
eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHkoIk5ldHdv
cmtpbmcgZm9yIGZvcmVncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91bmQoKSwg
MCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAocHJvY2Vzc1Bv
b2woKS5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bv
b2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhy
b3R0bGVyOjppc1ZhbGlkQmFja2dyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vz
c2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRs
ZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91bmQgdmlldyhz
KSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vz
c0RpZFRyYW5zaXRpb25Ub0JhY2tncm91bmQoKSwgMCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAkocmV2aXNp
b24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEyICs0NiwxNyBAQAogCiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiWFBDRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSA8d3Rm
L09TT2JqZWN0UHRyLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBGb3JtRGF0
YVJlZmVyZW5jZTsKIH0KIAorbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xhc3MgU2Vzc2lvbklEOwogfQpA
QCAtNzMsOCArNzgsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWRQcm94
eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHk7
CiBjbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5OwogCiBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVy
U3RhdGlzdGljcyA6IGJvb2w7CkBAIC04Niw4ICs5MSw5IEBAIHN0cnVjdCBGcmFtZUluZm9EYXRh
Owogc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFJlc291
cmNlTG9hZEluZm87CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CitzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnM7CiAKLWNsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkgZmluYWwgOiBwdWJsaWMg
QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQsIHB1
YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CitjbGFzcyBOZXR3b3Jr
UHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0
ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1By
b2Nlc3NQcm94eT4sIHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB1c2luZyBSZWdpc3RyYWJs
ZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwpAQCAtMTAyLDEyICsxMDgsMTgg
QEAgcHVibGljOgogICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eShX
ZWJQcm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gZGVm
YXVsdE5ldHdvcmtQcm9jZXNzKCk7CisgICAgc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5
PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtQcm9jZXNzUHJveHkpOyB9
CiAgICAgfk5ldHdvcmtQcm9jZXNzUHJveHkoKTsKIAorICAgIHN0YXRpYyBWZWN0b3I8UmVmPE5l
dHdvcmtQcm9jZXNzUHJveHk+PiBhbGxOZXR3b3JrUHJvY2Vzc2VzKCk7CisgICAgCisgICAgdm9p
ZCB0ZXJtaW5hdGUoKSBmaW5hbDsKKyAgICB2b2lkIGRpZFRlcm1pbmF0ZSgpOworCiAgICAgdm9p
ZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6
OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5
JiYpOwogCi0gICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0
YVN0b3JlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZv
RGF0YSYsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsKKyAgICBEb3dubG9hZFByb3h5
JiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBXZWJQcm9jZXNzUG9vbCYs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBX
ZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSk7CiAKICAgICB2b2lkIGZldGNoV2Vic2l0ZURh
dGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURh
dGEpPiYmKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRp
b25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIwNiwxNSArMjE4LDEy
IEBAIHB1YmxpYzoKICAgICBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSBmaW5hbCB7IHJl
dHVybiBtX3Rocm90dGxlcjsgfQogICAgIHZvaWQgdXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwog
Ci0gICAgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKCkgeyByZXR1cm4gbV9wcm9jZXNzUG9v
bDsgfQotCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICB2b2lkIGRpZERlc3Ry
b3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQ
cm94eSYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3Rv
cmU+JiYpOwotICAgIGJvb2wgaGFzU2Vzc2lvbihQQUw6OlNlc3Npb25JRCkgY29uc3Q7Ci0gICAg
dm9pZCByZW1vdmVTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKKyAgICB2b2lkIGFkZFNlc3Npb24o
V2Vic2l0ZURhdGFTdG9yZSYpOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihXZWJzaXRlRGF0YVN0
b3JlJik7CiAgICAgCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgdm9pZCBjcmVh
dGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoY29uc3QgU3RyaW5nJiBpbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnkpOwpAQCAtMjI5LDYgKzIzOCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyU2No
ZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1bnJl
Z2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAKKyAg
ICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQgcmVzZXRRdW90
YShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIHZv
aWQgcmVzb3VyY2VMb2FkRGlkU2VuZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVz
b3VyY2VMb2FkSW5mbyYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgT3B0aW9uYWw8SVBD
OjpGb3JtRGF0YVJlZmVyZW5jZT4mJik7CkBAIC0yNDgsNyArMjU5LDE5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyQnVuZGxlSWRlbnRpZmllcihDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29r
aWVNYW5hZ2VyKCkgeyByZXR1cm4gbV9jb29raWVNYW5hZ2VyLmdldCgpOyB9CisKKyAgICBBUEk6
OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
KCkgeyByZXR1cm4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuZ2V0KCk7IH0KKworI2lm
IFBMQVRGT1JNKENPQ09BKQorICAgIHhwY19vYmplY3RfdCB4cGNFbmRwb2ludE1lc3NhZ2UoKSBj
b25zdCB7IHJldHVybiBtX2VuZHBvaW50TWVzc2FnZS5nZXQoKTsgfQorI2VuZGlmCisKIHByaXZh
dGU6CisgICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eSgpOworCisgICAgdm9pZCBzZW5k
Q3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisKICAgICAvLyBBdXhpbGlhcnlQcm9j
ZXNzUHJveHkKICAgICBBU0NJSUxpdGVyYWwgcHJvY2Vzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiTmV0d29ya2luZyJfczsgfQogCkBAIC0yNTYsNyArMjc5LDYgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAg
ICB2b2lkIHByb2Nlc3NXaWxsU2h1dERvd24oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgIHZvaWQgY2xlYXJDYWxsYmFj
a1N0YXRlcygpOwogCiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKQEAgLTMxMiwxNiAr
MzM0LDE3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShQQUw6OlNlc3Npb25JRCwgUmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+JiYp
OwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBIYXNoTWFwPENh
bGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPj4gbV9wZW5kaW5n
RmV0Y2hXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJhY2tz
OwogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9w
ZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zQ2FsbGJhY2tzOwogCiAgICAgc3RkOjp1
bmlxdWVfcHRyPERvd25sb2FkUHJveHlNYXA+IG1fZG93bmxvYWRQcm94eU1hcDsKKworICAgIFVu
aXF1ZVJlZjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQ7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdF
UikKICAgICBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSBtX2N1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5OwogI2VuZGlmCisKICAgICBQcm9jZXNzVGhyb3R0bGVyIG1fdGhyb3R0bGVy
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9jZXNzVGhyb3R0bGVyOjpCYWNrZ3JvdW5kQWN0aXZp
dHk+IG1fYWN0aXZpdHlGb3JIb2xkaW5nTG9ja2VkRmlsZXM7CiAgICAgUHJvY2Vzc1Rocm90dGxl
cjo6QWN0aXZpdHlWYXJpYW50IG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzOwpAQCAtMzQ3LDkg
KzM3MCwxMSBAQCBwcml2YXRlOgogICAgIHByaXZhdGU6CiAgICAgICAgIFdlYWtQdHI8TmV0d29y
a1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICB9OworICAgIE9TT2JqZWN0UHRy
PHhwY19vYmplY3RfdD4gbV9lbmRwb2ludE1lc3NhZ2U7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8
UEFMOjpTZXNzaW9uSUQ+IG1fc2Vzc2lvbklEczsKKyAgICBXZWFrSGFzaFNldDxXZWJzaXRlRGF0
YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmVzOworICAgIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+IG1fY29va2llTWFuYWdlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2Eu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5Q29jb2EubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw4ICs1MSwxMSBAQCBib29sIE5ldHdvcmtQcm9jZXNzUHJveHk6OlhQQ0V2ZW50
SGFuZGxlCiAgICAgaWYgKG1lc3NhZ2VOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUEND
b25zdGFudHM6OnhwY0xhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1l
KQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmROZXR3b3JrUHJv
Y2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICBpZiAobWVzc2FnZU5hbWUg
PT0gTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNE
YXRhYmFzZVhQQ0VuZHBvaW50TWVzc2FnZU5hbWUpIHsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+bV9lbmRwb2ludE1lc3NhZ2UgPSBldmVudDsKKyAgICAgICAgZm9yIChhdXRvJiBkYXRhU3Rv
cmUgOiBtX25ldHdvcmtQcm9jZXNzLT5tX3dlYnNpdGVEYXRhU3RvcmVzKQorICAgICAgICAgICAg
ZGF0YVN0b3JlLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMo
KTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3Jr
L0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAJKHJl
dmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9t
UHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQsMTcgKzQ0LDE3IEBAIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5
Ojp+TGVnYWMKIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRM
b2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQ
cm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9h
ZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisgICAgbV9uZXR3b3JrUHJv
Y2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhp
cywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3Vz
dG9tUHJvdG9jb2xJRCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2wo
KS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9t
UHJvdG9jb2xJRCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKIH0KIAog
dm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0g
ICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KCkuaW52YWxpZGF0ZSgqdGhpcyk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5
LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUoKnRoaXMpOwogfQogCiB2
b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3YXNSZWRpcmVjdGVkVG9SZXF1
ZXN0KExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiByZWRpcmVjdFJlc3BvbnNlKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHJldmlzaW9uIDI2
NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRh
U3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTQgQEAKICNpbmNsdWRlICJB
dXRoZW50aWNhdG9yTWFuYWdlci5oIgogI2luY2x1ZGUgIkRldmljZUlkSGFzaFNhbHRTdG9yYWdl
LmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgog
I2luY2x1ZGUgIk1vY2tBdXRoZW50aWNhdG9yTWFuYWdlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAi
U3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkQ2FjaGUuaCIK
KyNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXQySW5p
dGlhbGl6ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nl
c3NDYWNoZS5oIgpAQCAtNzUsNiArNzgsMTAgQEAKICNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25D
b29yZGluYXRvci5oIgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJE
ZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBzdGF0aWMgYm9vbCBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zOwpAQCAt
ODMsMTMgKzkwLDE5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dXZWJzaXRlRGF0YVIK
ICAgICBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zID0gdHJ1ZTsKIH0KIAot
c3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgbm9uRGVm
YXVsdERhdGFTdG9yZXMoKQorc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVE
YXRhU3RvcmUqPiYgYWxsRGF0YVN0b3JlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNVSVRo
cmVhZCgpKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6OlNlc3Npb25J
RCwgV2Vic2l0ZURhdGFTdG9yZSo+PiBtYXA7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAordm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lkKFdl
YnNpdGVEYXRhU3RvcmUmKT4mJiBmdW5jdGlvbikKK3sKKyAgICBmb3IgKGF1dG8qIGRhdGFTdG9y
ZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICAgICAgZnVuY3Rpb24oKmRhdGFTdG9y
ZSk7Cit9CisKIFJlZjxXZWJzaXRlRGF0YVN0b3JlPiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGVO
b25QZXJzaXN0ZW50KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJzaXRlRGF0YVN0
b3JlKFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpO
byksIFBBTDo6U2Vzc2lvbklEOjpnZW5lcmF0ZUVwaGVtZXJhbFNlc3Npb25JRCgpKSk7CkBAIC0x
MTUsNyArMTI4LDcgQEAgV2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShSZWY8Vwog
I2VuZGlmCiB7CiAgICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkp
OwotICAgIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVnaXN0ZXJXaXRo
U2Vzc2lvbklETWFwKCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMTI4LDE3ICsxNDEsMTIgQEAgV2Vic2l0ZURhdGFTdG9y
ZTo6fldlYnNpdGVEYXRhU3RvcmUoKQogCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBp
ZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewot
ICAgICAgICBBU1NFUlQobm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09
IHRoaXMpOwotICAgICAgICBub25EZWZhdWx0RGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25J
RCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxs
UHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQotICAgIH0KKyAg
ICBBU1NFUlQoYWxsRGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7CisgICAg
YWxsRGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5yZW1vdmVTZXNzaW9uKCp0aGlzKTsKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0gICAgICAg
IGlmIChhdXRvKiBncHVQcm9jZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklm
Q3JlYXRlZCgpKQotICAgICAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1f
c2Vzc2lvbklEKTsKKyAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkKKyAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1v
dmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKICNlbmRpZgogfQogCkBAIC0xNTAsOCArMTU4LDEwIEBA
IHN0YXRpYyBSZWZQdHI8V2Vic2l0ZURhdGFTdG9yZT4mIGdsb2JhbEQKIAogUmVmPFdlYnNpdGVE
YXRhU3RvcmU+IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKQogeworI2lmIFBM
QVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisjZW5kaWYKICAgICBJbml0aWFsaXplV2ViS2l0MigpOwotCiAgICAgYXV0byYgc3Rv
cmUgPSBnbG9iYWxEZWZhdWx0RGF0YVN0b3JlKCk7CiAgICAgaWYgKCFzdG9yZSkKICAgICAgICAg
c3RvcmUgPSBhZG9wdFJlZihuZXcgV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvbjo6Y3JlYXRlKElzUGVyc2lzdGVudDo6WWVzKSwgUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSkpOwpAQCAtMTY5LDE3ICsxNzksNDcgQEAgYm9vbCBXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRQogICAgIHJldHVybiAhIWdsb2JhbERlZmF1bHREYXRh
U3RvcmUoKTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNl
c3Npb25JRE1hcCgpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyV2l0aFNlc3Npb25J
RE1hcCgpCiB7Ci0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBub25EZWZhdWx0RGF0YVN0b3Jl
cygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0
LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0byByZXN1bHQgPSBhbGxEYXRhU3RvcmVzKCku
YWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0
LmlzTmV3RW50cnkpOworfQorCitXZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpl
eGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7
CisgICAgcmV0dXJuIGFsbERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklEKTsKK30KKworc3RhdGlj
IFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBuZXR3b3JrUHJvY2Vzc0ZvclNlc3Npb24oUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEKQoreworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BF
KQorICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgeworICAgICAgICAvLyBSZXVzZSBh
IHByZXZpb3VzIHBlcnNpc3RlbnQgc2Vzc2lvbiBuZXR3b3JrIHByb2Nlc3MgZm9yIGVwaGVtZXJh
bCBzZXNzaW9ucy4KKyAgICAgICAgZm9yIChhdXRvKiBkYXRhU3RvcmUgOiBhbGxEYXRhU3RvcmVz
KCkudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGlmIChkYXRhU3RvcmUtPmlzUGVyc2lzdGVudCgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlUmVmKGRhdGFTdG9yZS0+bmV0d29ya1Byb2Nl
c3MoKSk7CisgICAgICAgIH0KICAgICB9CisgICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmNyZWF0ZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vzc2lvbklEKTsKKyAgICByZXR1
cm4gTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7CisjZW5kaWYK
IH0KIAotV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZh
dWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK05ldHdv
cmtQcm9jZXNzUHJveHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkKIHsKLSAg
ICByZXR1cm4gc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkg
PyBub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0cjsKKyAgICBp
ZiAoIW1fbmV0d29ya1Byb2Nlc3MpIHsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IG5ldHdv
cmtQcm9jZXNzRm9yU2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPmFkZFNlc3Npb24oKnRoaXMpOworICAgIH0KKworICAgIHJldHVybiAqbV9uZXR3b3JrUHJv
Y2VzczsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29y
a1Byb2Nlc3MoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYnNpdGVEYXRhU3Rv
cmUmPigqdGhpcykubmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpyZWdpc3RlclByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQpAQCAtMTk1LDEyICsy
MzUsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVucmVnaXN0ZXJQcm9jZXNzCiAgICAgbV9w
cm9jZXNzZXMucmVtb3ZlKHByb2Nlc3MpOwogfQogCi1XZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURh
dGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpCi17Ci0gICAg
YXV0byBwb29scyA9IHByb2Nlc3NQb29scygxKTsKLSAgICByZXR1cm4gcG9vbHMuaXNFbXB0eSgp
ID8gbnVsbHB0ciA6IHBvb2xzLmJlZ2luKCktPmdldCgpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9oYXNS
ZXNvbHZlZERpcmVjdG9yaWVzKQpAQCAtNDQwLDI4ICs0NzQsMjEgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseQogI2VuZGlmCiAKICAgICBhdXRvIG5ldHdvcmtQcm9j
ZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0
Y2goZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwotICAgIGlmIChuZXR3b3JrUHJvY2Vzc0Fj
Y2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsKLSAgICAgICAgYXV0byBwb29s
cyA9IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNo
ID8gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNzUG9vbHMoKTsKLSAgICAgICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQ
cm9jZXNzQWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6
T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoK
LSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vz
c1R5cGU6Ok5vbmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICB9Ci0KKyAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgeworICAg
IGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKKyAgICAgICAgbmV0d29ya1Byb2Nlc3Mo
KTsKKyAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOworICAgICAgICBGQUxMVEhST1VH
SDsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKKyAgICAgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKS0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBmZXRjaE9w
dGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXShXZWJzaXRlRGF0YSB3ZWJz
aXRlRGF0YSkgeworICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZmV0Y2hXZWJzaXRlRGF0
YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwog
ICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm9j
ZXNzQWNjZXNzVHlwZTo6Tm9uZToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgYXV0byB3
ZWJQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVXZWJQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFG
ZXRjaChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CkBAIC03MjQsMzEgKzc1MSwyNCBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uCiAgICAgYm9vbCBkaWROb3Rp
ZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEgPSBmYWxzZTsKICNlbmRpZgogICAg
IGF1dG8gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZU5ldHdvcmtQcm9jZXNzQWNj
ZXNzVHlwZUZvckRhdGFSZW1vdmFsKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgpKTsKLSAgICBp
ZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lKSB7
Ci0gICAgICAgIGF1dG8gcG9vbHMgPSBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPT0gUHJvY2Vz
c0FjY2Vzc1R5cGU6OkxhdW5jaCA/IGVuc3VyZVByb2Nlc3NQb29scygpIDogcHJvY2Vzc1Bvb2xz
KCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewotICAgICAgICAg
ICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKLSAgICAgICAgICAgIGNhc2Ug
UHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICgh
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFByb2Nlc3NB
Y2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKHRoaXMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgotICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotCisgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vz
c0FjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6CisgICAg
ICAgIG5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsK
KyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlm
TGF1bmNoZWQ6CisgICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7CiAgICAgICAgICAgICBj
YWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklE
LCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQ
b29sXSB7CisgICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5kZWxldGVXZWJzaXRlRGF0YSht
X3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2Fs
bGJhY2soKTsKICAgICAgICAgICAgIH0pOwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJ
U1RJQ1MpCiAgICAgICAgICAgICBkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0
ZURhdGEgPSB0cnVlOwogI2VuZGlmCiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAg
YXV0byB3ZWJQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVXZWJQcm9jZXNzQWNjZXNzVHlwZUZv
ckRhdGFSZW1vdmFsKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgpKTsKQEAgLTg5MywxNCArOTEz
LDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvbgogI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhX
ZWJzaXRlRGF0YVR5cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MpKSB7CiAgICAgICAgIGlmICgh
ZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhKSB7Ci0gICAgICAgICAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxi
YWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRhKG1f
c2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVu
ZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vi
c2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geworICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3Zl
UGVuZGluZ0NhbGxiYWNrKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAg
IGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CkBAIC05OTQsMTIgKzEw
MDksMTAgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvbgogICAgICAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAo
bmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nl
c3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6
TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cyh0aGlzKTsKKyAgICAgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgpA
QCAtMTAyMSw3ICsxMDM0LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9w
dGlvbgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFk
ZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVz
LCBvcmlnaW5zLCBjb29raWVIb3N0TmFtZXMsIEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0cmFi
bGVEb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9u
SUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFt
ZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xd
IHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxs
YmFjaygpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTExODAsMTggKzExOTMsMTIg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvbgogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyhTZWNvbmRzIHNl
Y29uZHMpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjph
bGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRj
aFRpbWVvdXRGb3JUZXN0aW5nKHNlY29uZHMpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKHNlY29uZHMpLCBNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5n
OjpSZXBseSgpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFNlcnZpY2VX
b3JrZXJUaW1lb3V0Rm9yVGVzdGluZygpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJl
c2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSwgTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBs
eSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmco
KSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVv
dXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCkBAIC0xMjAxLDggKzEyMDgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldE1heFN0YXRpc3RpY3NFCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vz
c1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9z
ZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVz
KG1fc2Vzc2lvbklELCBtYXhpbXVtRW50cnlDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6
ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTEyMTEsOCArMTIxNyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UHJ1bmVFbnRyaWVzRG8KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1f
c2Vzc2lvbklELCBwcnVuZVRhcmdldENvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rvd25Ubyht
X3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25k
cyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xMjIxLDggKzEyMjYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0
aGVyaW5nCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNv
bmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNldEdyYW5kZmF0aGVyaW5nVGltZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRN
aW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjMxLDIwICsx
MjM1LDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXQKIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5zZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQs
IHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1f
c2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogICAgIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+ZHVtcFJl
c291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZh
bGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wg
aXNQcmV2YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI1NiwxMiArMTI1Myw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXIKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xMjczLDEyICsxMjY1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpp
c0dyYW5kZmF0aGVyZWQoYwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nl
c3MtPmlzR3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc0dyYW5kZmF0aGVy
ZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI5Miw4ICsxMjc5LDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29s
cygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2
YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTMwNywxMCArMTI5Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJl
dmFsZW50UmVzb3UKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3MtPnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2
YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzVmVyeVByZXZhbGVudCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xMzIyLDEyICsxMzA1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpp
c1ZlcnlQcmV2YWxlbnRSZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBw
cm9jZXNzLT5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5p
c1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM0MSwx
MCArMTMxOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFIKICAg
ICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+c2V0VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRWZXJ5UHJldmFsZW50
UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2
YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTM1Myw4ICsxMzI4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lm
eQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNv
cmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNv
dXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZy
YW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwm
IHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xMzY4LDIyICsxMzQyLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3Vi
ZnJhbWVVbmRlclQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1
YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpp
c1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3Qg
VVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAg
IHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBV
UkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzk3LDIzICsxMzYzLDE0IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmQKIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVV
UkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1
YnJlc291cmNlVW5kZXIoY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BG
cmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9j
ZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRs
ZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJj
ZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291
cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBj
b25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTQyNywxMCArMTM4NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0U3VicmVzb3VyY2VVbmkKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9t
KGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20s
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NDIs
MTIgKzEzOTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDU5LDEy
ICsxNDA4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9wRnJh
bWVVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJl
Y3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZy
YW1lVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDc2LDI1ICsxNDIwLDE0IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWUKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJv
bSwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9t
IH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTE1MDYsNjAgKzE0MzksNDEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZh
bGVudFJlcwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFyUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFy
UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3MtPnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Npb25JRCwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkucmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3VibWl0
VGVsZW1ldHJ5KCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgcHJvY2Vzcy0+c3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25JRCwgW10geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50KFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlz
dGljcyBzaG91bGRHcmFuZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0g
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ2xl
YXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UsIHNob3Vs
ZEdyYW5kZmF0aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50KG1fc2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
Ci0gICAgc3RydWN0IENhbGxiYWNrQWdncmVnYXRvciA6IFJlZkNvdW50ZWQ8Q2FsbGJhY2tBZ2dy
ZWdhdG9yPiB7Ci0gICAgICAgIENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRh
PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICBzdHJ1Y3QgTG9jYWxDYWxsYmFja0FnZ3Jl
Z2F0b3IgOiBSZWZDb3VudGVkPExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yPiB7CisgICAgICAgIExv
Y2FsQ2FsbGJhY2tBZ2dyZWdhdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogICAgICAgICAgICAgOiBtX2NvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogICAgICAgICB9OwogCi0gICAgICAgIH5DYWxsYmFja0FnZ3JlZ2F0b3IoKQor
ICAgICAgICB+TG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IoKQogICAgICAgICB7CiAgICAgICAgICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC0xNTc0LDM4ICsxNDg4LDMxIEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3QKICAgICAgICAgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGly
ZFBhcnR5RGF0YT4mJik+IG1fY29tcGxldGlvbkhhbmRsZXI7CiAgICAgICAgIFZlY3RvcjxXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiBtX3Jlc3VsdHM7CiAg
ICAgfTsKLQotICAgIFJlZlB0cjxDYWxsYmFja0FnZ3JlZ2F0b3I+IGNhbGxiYWNrQWdncmVnYXRv
ciA9IGFkb3B0UmVmKG5ldyBDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhSW1tZWRpYXRlbHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
U3VtbWFyeShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFZl
Y3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmIGRh
dGEpIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFJlc3VsdChXVEZN
b3ZlKGRhdGEpKTsKLSAgICAgICAgICAgIH0pOworICAgIAorICAgIGF1dG8gbG9jYWxDYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBhZG9wdFJlZihuZXcgTG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKKyAgICAKKyAgICBhdXRvIHd0ZkNhbGxiYWNrQWdncmVn
YXRvciA9IFdURjo6Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAgICAgICAg
bmV0d29ya1Byb2Nlc3MoKS5nZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkobV9z
ZXNzaW9uSUQsIFtsb2NhbENhbGxiYWNrQWdncmVnYXRvcl0oVmVjdG9yPFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYgZGF0YSkgeworICAgICAgICAgICAg
bG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFJlc3VsdChXVEZNb3ZlKGRhdGEpKTsKICAgICAg
ICAgfSk7Ci0gICAgfQorICAgIH0pOworICAgIAorICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wg
OiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29s
LT5zZW5kUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShbd3RmQ2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ2xl
YXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIHNob3Vs
ZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgeyB9LCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgeyB9
LCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNvb2tpZUJsb2NraW5n
VXBkYXRlKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBk
YXRlKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2lu
ZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjE0
LDI0ICsxNTIxLDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWMK
ICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1f
c2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxs
VGFibGVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJs
ZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNv
bmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
NjQzLDIyICsxNTM5LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29u
c3QKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRM
YXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
c2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNl
KGludCBkb21haW5JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHBy
b2Nlc3MtPmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKG1f
c2Vzc2lvbklELCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwm
IHVybCwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDEsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwyLCBT
ZWNvbmRzIGxhc3RTZWVuLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgU2Vjb25kcyBtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgYm9vbCBpc1ByZXZhbGVu
dCwgYm9vbCBpc1ZlcnlQcmV2YWxlbnQsIHVuc2lnbmVkIGRhdGFSZWNvcmRzUmVtb3ZlZCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY3MCwxMCAr
MTU1OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3IKIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5tZXJnZVN0YXRpc3Rp
Y0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwxIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVuLCBoYWRVc2VySW50
ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQ
cmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCBbcHJvY2Vzc1Bv
b2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5tZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVV
cmwxIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RT
ZWVuLCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3Jh
bmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1v
dmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29s
IGhhZFVzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFS
ZW1vdmFsLCBib29sIGlzUHJldmFsZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xNjg1LDE4ICsxNTcwLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0
aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwg
aXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZh
bHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MDQsOCAr
MTU4NSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3UKICAgICB1
c2VFeHBsaWNpdElUUFN0YXRlKCk7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VB
Y2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucyk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xNzE2LDcgKzE1OTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3Jh
Z2VBY2NlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB3ZWJQYWdlLT5wcm9jZXNzKCku
cHJvY2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NF
bnRyaWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhtX3Nlc3Npb25JRCwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAKQEAgLTE3MjQsOCArMTYwNCw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXIKIHsKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNl
dFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNl
ckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25z
dCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTczOSwxMCArMTYxOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlcklu
dGVyYWN0aW8KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJv
Y2Vzcy0+bG9nVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmxvZ1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJM
JiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xNzU0LDEzICsxNjMwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2Vy
SW50ZXJhYwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5o
YXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRh
dGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVybCwgY29uc3QgVVJMJiB0b3BVcmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzcyLDEzICsx
NjQyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubAogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlbGF0aW9uc2hpcE9u
bHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwgfSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3OTIsMTAgKzE2NTYs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0CiAgICAgCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFyVXNlckludGVy
YWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNs
ZWFyVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wgaXNHcmFuZGZh
dGhlcmVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xODA5LDEwICsxNjcwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhl
cmVkKAogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJv
Y2Vzcy0+c2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyZWQobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODIxLDEwICsxNjc5LDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQs
IHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVM
b2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGZyb21VUkwsIGNvbnN0
IFVSTCYgdG9VUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE4MzMsNjIgKzE2ODgsMzggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9z
c1NpdGVMb2FkVwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgcHJvY2Vzcy0+c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3Rpbmco
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENyb3NzU2l0
ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB0b1VSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5n
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNz
aW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkucmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9z
ZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaW5j
bHVkZUh0dHBPbmx5Q29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5kZWxldGVDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29v
a2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5kZWxldGVDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNMb2NhbFN0b3Jh
Z2VGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MtPmhhc0xvY2FsU3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0xvY2FsU3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3Rp
bmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFz
SXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuaGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3Vs
ZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRG93
bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkRG93bmdyYWRlUmVmZXJy
ZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNp
ZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0xOTE5LDEwICsxNzUwLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29vawogICAgICAgICAgICAgd2ViUHJvY2Vzcy5zZXRUaGly
ZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VGhpcmRQ
YXJ0eUNvb2tpZUJsb2NraW5nTW9kZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRoaXJk
UGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9y
VGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE5MzAsMTAgKzE3NTgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0CiAgICAgYXV0byBmbGFnID0gZW5hYmxlZCA/IFdlYkNvcmU6OlNh
bWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZZXMgOiBXZWJDb3JlOjpTYW1lU2l0ZVN0
cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0
cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRFbmJs
ZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZv
clRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xOTQxLDIwICsxNzY2LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3QKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBh
dXRvIG1vZGUgPSBlbmFibGVkID8gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGU6OkFsbEJ1dENvb2tpZXMgOiBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZTo6Tm9uZTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRGaXJzdFBh
cnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0
Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBt
b2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRl
c3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3Rpbmco
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9TYW1l
U2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9z
dENOQU1FRG9tYWluRm9yVGVzdGluZyhjb25zdCBVUkwmIGZpcnN0UGFydHlVUkwsIGNvbnN0IFVS
TCYgY25hbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE5NjYsOCArMTc4NSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3Vy
Y2VMb2FkU3QKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGlu
ZyhtX3Nlc3Npb25JRCwgZmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRl
c3RpbmcobV9zZXNzaW9uSUQsIGZpcnN0UGFydHlVUkwuaG9zdCgpLnRvU3RyaW5nKCksIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhjb25zdCBVUkwmIGNuYW1lVVJMLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTc5LDE4
ICsxNzk3LDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3QKIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVEb21haW5G
b3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1l
VVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzeW5jTG9j
YWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xv
Y2FsU3RvcmFnZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlN5bmNMb2NhbFN0b3JhZ2UoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3Vy
Y2VzKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTk5OCw4ICsxODExLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRDYWNoZU1heEFnZUNhcAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Np
b25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklE
LCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0oc2Vjb25kcyk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTIwMDksMjYgKzE4
MjEsMTIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpyZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2Vz
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICNpZiBF
TkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNldENhY2hlTWF4QWdl
Q2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0Q2FjaGVNYXhBZ2VDYXBG
b3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRpZgogfQogCi1ib29s
IFdlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29s
JiBwcm9jZXNzUG9vbCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2xEYXRhU3Rv
cmUgPSBwcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCkpCi0gICAgICAgIHJldHVybiBwcm9j
ZXNzUG9vbERhdGFTdG9yZSA9PSB0aGlzOwotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vzc1By
b3h5ID0gcHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuIG5ldHdv
cmtQcm9jZXNzUHJveHktPmhhc1Nlc3Npb24obV9zZXNzaW9uSUQpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQogSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3Jl
Ojpwcm9jZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBjb25zdAogewogICAgIEhhc2hTZXQ8UmVmUHRy
PFdlYlByb2Nlc3NQb29sPj4gcHJvY2Vzc1Bvb2xzOwpAQCAtMjA0Myw5ICsxODQxLDYgQEAgSGFz
aFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRAogICAgIGlmIChwcm9jZXNzUG9v
bHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9uZSBvZiB0aGUgbGVn
YWN5IGRhdGEgc3RvcmVzLgogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJv
Y2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQXNzb2Np
YXRlZFByb2Nlc3NQb29sKCpwcm9jZXNzUG9vbCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0KICAgICAgICAgICAgIHByb2Nlc3NQb29scy5hZGQocHJvY2Vzc1Bvb2wpOwogICAgICAgICAg
ICAgaWYgKHByb2Nlc3NQb29scy5zaXplKCkgPT0gbGltaXQpCiAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0yMDg0LDggKzE4NzksNyBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVNZWRpYUtleUZp
bGUoY29uc3QgCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dTcGVjaWZpY0hUVFBTQ2Vy
dGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNlcnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGUsIGNv
bnN0IFN0cmluZyYgaG9zdCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0
ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVj
aWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8o
KSwgaG9zdCksIDApOwogfQogCiBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBX
ZWJzaXRlRGF0YVN0b3JlOjptZWRpYUtleU9yaWdpbnMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNT
dG9yYWdlRGlyZWN0b3J5KQpAQCAtMjE0MCw2ICsxOTM0LDQ5IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6cmVtb3ZlTWVkaWFLZXlzKGMKICAgICB9CiB9CiAKK3ZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vz
c1Byb3h5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbkluZm8mKT4mJiByZXBseSkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKCp0aGlzKSwgd2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1By
b3h5KSwgcmVwbHkgPSBXVEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRh
YmxlIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJ
c1ZhbGlkKGNvbm5lY3Rpb25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5ICYm
IHdlYWtUaGlzKSkgeworICAgICAgICAgICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0lGKGlzUGVyc2lzdGVudCgpLCBQcm9jZXNzLCAiZ2V0TmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uOiBGYWlsZWQgZmlyc3QgYXR0ZW1wdCwgcmV0cnlpbmciKTsK
KyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
KCp3ZWJQcm9jZXNzUHJveHksIFdURk1vdmUocmVwbHkpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7CisgICAgfSk7Cit9CisK
K3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9j
ZXNzUHJveHkmKQoreworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5kaWRUZXJtaW5hdGUoKTsKKyAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0
cjsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcygp
Cit7CisgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICByZXR1cm47CisgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7CisgICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxw
dHI7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFy
ZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByZXBhcmVUb1N1c3BlbmQo
SXNTdXNwZW5zaW9uSW1taW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9
CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5Rm9yVGVzdGluZygpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKK30KKwordm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQoreworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsKK30KKwogYm9vbCBXZWJzaXRlRGF0YVN0b3Jl
OjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIxNjksMTcgKzIwMDYsMTUgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdAogICAgICAgICAKICAgICAgICAgcmVzb2x2
ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wt
PnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpKTsKKyAgICAgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpLCAwKTsKKyAgICAgICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAgICAgICAgICAgcHJv
Y2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlByb2Nl
c3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHRydWUpLCBtX3Nlc3Npb25JRCk7
Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpKTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpLCAwKTsKKyAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9B
bGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZChmYWxzZSksIG1fc2Vzc2lvbklEKTsKLSAgICB9CiAKICAgICBt
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkID0gZmFsc2U7CiAjZWxzZQpAQCAtMjE5MSw4
ICsyMDI2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKEZ1bmN0aW9u
PHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKGNhbGxiYWNrKSB7
Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAg
ICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQodHJ1
ZSkpOworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpLCAwKTsK
ICAgICB9CiAgICAgCiAgICAgbV9zdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayk7CkBAIC0yMjExLDggKzIwNDUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nl
c3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2Rl
KG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CiAgICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb25I
YW5kbGVyKTsKQEAgLTIyMjcsMjAgKzIwNjAsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpp
c1Jlc291cmNlTG9hZFN0YQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vz
c2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOworI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisjZW5kaWYK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01v
ZGUoYm9vbCBlbmFibGVkKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0
QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOworICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOwogfQogCiAjaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIyNjIsNDggKzIwOTAsMTkgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZAogfQogI2VuZGlmCiAKLVZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+IFdlYnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gY29weVRvVmVjdG9yKG1fcGVuZGluZ0Nvb2tpZXMpOwotfQotCi12
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFkZFBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29v
a2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmVJZihbJmNvb2tpZV0o
YXV0byYgcGVuZGluZ0Nvb2tpZSkgewotICAgICAgICByZXR1cm4gcGVuZGluZ0Nvb2tpZS5pc0tl
eUVxdWFsKGNvb2tpZSk7Ci0gICAgfSk7Ci0gICAgbV9wZW5kaW5nQ29va2llcy5hZGQoY29va2ll
KTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKGNvbnN0
IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMucmVtb3Zl
KGNvb2tpZSk7Ci19Ci0gICAgCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nv
b2tpZXMoKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMuY2xlYXIoKTsKLX0KLQogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZv
ciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkK
LSAgICAgICAgcHJvY2Vzc1Bvb2wtPmZsdXNoQ29va2llcyhzZXNzaW9uSUQoKSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmZsdXNoQ29va2llcyhzZXNz
aW9uSUQoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJvb2wgYWxs
b3dzKQogewotICAgIGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQ
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5z
ZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yV2ViU29ja2V0KGFsbG93cyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQ6OlJlcGx5KCksIDApOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwgTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldDo6UmVw
bHkoKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50
aWFscygpCiB7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFs
bFByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+Y2xlYXJDYWNoZWRDcmVkZW50
aWFscyhzZXNzaW9uSUQoKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9uSUQoKSksIDApOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lk
KCk+JiYgZnVuY3Rpb24pCkBAIC0yMzI5LDggKzIxMjgsNiBAQCBXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycyBXZWJzaXRlRGF0YVN0CiAKICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2Fy
eSgpOwogCi0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBlbmRpbmdDb29raWVzKCk7
Ci0KICAgICBhdXRvIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX2NvbmZpZ3Vy
YXRpb24tPnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUhhbmRsZTsKICAg
ICBpZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAtMjQz
NSw3ICsyMjMyLDEwIEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3QK
ICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGFyYW1ldGVycy5lbmFibGVkID0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZDsKICNlbmRpZgogICAgIHBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMocGFyYW1ldGVycyk7
Ci0KKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24gPSBo
YXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKKyNlbmRpZgorICAg
IAogICAgIHJldHVybiBwYXJhbWV0ZXJzOwogfQogCkBAIC0yNDY1LDEwICsyMjY1LDYgQEAgQVBJ
OjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6OgogICAgIHJldHVybiAqbV9jb29r
aWVTdG9yZTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJv
Y2VzcygpCi17Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0
YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9y
aWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghaXNQZXJz
aXN0ZW50KCkpIHsKQEAgLTI0NzYsMjMgKzIyNzIsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpnZXRMb2NhbFN0b3JhZ2VEZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nl
c3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxz
KG1fc2Vzc2lvbklELCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oYXV0byYmIGRldGFpbHMpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdU
Rk1vdmUoZGV0YWlscykpOwotICAgICAgICB9KTsKLSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQg
ZmV0Y2hpbmcgZnJvbSBtdWx0aXBsZSBwb29scy4KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IEFTU0VSVCghY29tcGxldGlvbkhhbmRsZXIpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0TG9j
YWxTdG9yYWdlRGV0YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7CisgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKFdURk1vdmUoZGV0YWlscykpOworICAgIH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnJlc2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+cmVzZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpAQCAtMjUxOCw3
ICsyMzA2LDEyIEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6aHR0cDNFbmFibGVkKCkKIHsKICAg
ICByZXR1cm4gZmFsc2U7CiB9Ci0jZW5kaWYKKworYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3
b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oQ09DT0EpCiAKICNpZiAhVVNF
KEdMSUIpCiBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNo
U2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkKQEAgLTI1MzAsMzUgKzIzMjMsMTggQEAgV1RGOjpTdHJp
bmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERldgogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEoVVJMJiYgb2xkTmFtZSwgVVJMJiYgbmV3TmFtZSwg
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFk
ZFNlc3Npb24oKnRoaXMpOwotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbmFtZU9yaWdp
bkluV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUs
IG5ld05hbWUsIGRhdGFUeXBlcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAj
aWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNB
cHBCb3VuZFNlc3Npb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNBcHBC
b3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxl
cihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNz
aW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9u
SUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2Fy
ZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yNTgwLDcgKzIzNTYsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvCiAKICAgICBwcm9wYWdhdGVBcHBCb3VuZERv
bWFpbnMoZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpLmdldCgpLCAqYXBwQm91bmREb21haW5zKTsK
IAotICAgIGZvciAoYXV0byogc3RvcmUgOiBub25EZWZhdWx0RGF0YVN0b3JlcygpLnZhbHVlcygp
KQorICAgIGZvciAoYXV0byogc3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkpCiAgICAg
ICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhzdG9yZSwgKmFwcEJvdW5kRG9tYWlucyk7CiB9
CiAKQEAgLTI1ODgsMTAgKzIzNjQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFwcEJv
dW5kRG9tYWluCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2V0QXBwQm91bmREb21haW5zRm9yUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyhtX3Nlc3Npb25JRCwgZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogI2VuZGlmCiAKQEAgLTI1OTksMTYgKzIzNzIsMjYgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjp1cGRhdGVCdW5kbGVJZGVudAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlm
aWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xl
YXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmll
cihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJC
dW5kbGVJZGVudGlmaWVyKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cit9CisKK3N0YXRpYyBi
b29sIG5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaFNob3VsZEZhaWxGb3JUZXN0aW5nIHsgZmFsc2Ug
fTsKKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNo
RmFpbEZvclRlc3RpbmcoKQoreworICAgIG5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaFNob3VsZEZh
aWxGb3JUZXN0aW5nID0gdHJ1ZTsKK30KKworYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpzaG91bGRN
YWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKQoreworICAgIHJldHVy
biBzdGQ6OmV4Y2hhbmdlKG5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaFNob3VsZEZhaWxGb3JUZXN0
aW5nLCBmYWxzZSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgJKHJldmlzaW9uIDI2NzUzNikK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUu
aAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAjaW5jbHVkZSA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KKyNpbmNsdWRlIDx3dGYvT1NP
YmplY3RQdHIuaD4KKyNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KICNlbmRpZgog
CiAjaWYgVVNFKENVUkwpCkBAIC03OSw2ICs4MSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xh
c3MgQXV0aGVudGljYXRvck1hbmFnZXI7CiBjbGFzcyBTZWNLZXlQcm94eVN0b3JlOwogY2xhc3Mg
RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5OwogY2xh
c3MgU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBXZWJDZXJ0aWZpY2F0ZUluZm87
CiBjbGFzcyBXZWJQYWdlUHJveHk7CkBAIC04OCw2ICs5MSw4IEBAIGNsYXNzIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTsKIGVudW0gY2xhc3MgQ2FjaGVNb2RlbCA6IHVpbnQ4X3Q7CiBl
bnVtIGNsYXNzIFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24gOiB1aW50OF90OwogZW51bSBjbGFzcyBX
ZWJzaXRlRGF0YVR5cGUgOiB1aW50MzJfdDsKKworc3RydWN0IE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbkluZm87CiBzdHJ1Y3QgV2Vic2l0ZURhdGFSZWNvcmQ7CiBzdHJ1Y3QgV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM7CiAKQEAgLTExMyw3ICsxMTgsMTIgQEAgcHVibGljOgogICAgIFdlYnNp
dGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYmLCBQQUw6OlNl
c3Npb25JRCk7CiAgICAgfldlYnNpdGVEYXRhU3RvcmUoKTsKIAotICAgIHN0YXRpYyBXZWJzaXRl
RGF0YVN0b3JlKiBleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpT
ZXNzaW9uSUQpOworICAgIHN0YXRpYyB2b2lkIGZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKEZ1bmN0
aW9uPHZvaWQoV2Vic2l0ZURhdGFTdG9yZSYpPiYmKTsKKyAgICAKKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5JiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHkm
IG5ldHdvcmtQcm9jZXNzKCk7CisKKyAgICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhpc3Rp
bmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOwogCiAgICAgYm9vbCBpc1Bl
cnNpc3RlbnQoKSBjb25zdCB7IHJldHVybiAhbV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKTsgfQog
ICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklE
OyB9CkBAIC0xMjMsNiArMTMzLDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBjb25zdCBXZWFrSGFz
aFNldDxXZWJQcm9jZXNzUHJveHk+JiBwcm9jZXNzZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nl
c3NlczsgfQogCisgICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vz
c1Byb3h5JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBOZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb25JbmZvJik+JiYpOworICAgIHZvaWQgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAg
ICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NXaWxs
U3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nl
c3NEaWRSZXN1bWUoKTsKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJv
Y2Vzc1Byb3h5Jik7CisgICAgc3RhdGljIHZvaWQgbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5j
aEZhaWxGb3JUZXN0aW5nKCk7CisgICAgc3RhdGljIGJvb2wgc2hvdWxkTWFrZU5leHROZXR3b3Jr
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCk7CisKICAgICBib29sIHJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZChib29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01v
ZGUoKSBjb25zdDsKQEAgLTIzOSwxNSArMjU4LDggQEAgcHVibGljOgogCiAgICAgRGV2aWNlSWRI
YXNoU2FsdFN0b3JhZ2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4gbV9kZXZp
Y2VJZEhhc2hTYWx0U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nl
c3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlzQXNzb2NpYXRl
ZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycyBwYXJhbWV0ZXJzKCk7CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2ll
PiBwZW5kaW5nQ29va2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShjb25z
dCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29raWUoY29uc3Qg
V2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVzKCk7CiAgICAg
dm9pZCBmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lk
IGNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKIApAQCAtMjU1LDYgKzI2NywxMSBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYpOwogCisjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRv
V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vz
c1hQQ0VuZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMoKTsKKyNlbmRpZgorCiAjaWYgVVNFKENVUkwp
CiAgICAgdm9pZCBzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXZWJDb3JlOjpDdXJsUHJveHlTZXR0
aW5ncyYmKTsKICAgICBjb25zdCBXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5ncyYgbmV0d29ya1By
b3h5U2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX3Byb3h5U2V0dGluZ3M7IH0KQEAgLTI4MCw4
ICsyOTcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNb2NrV2ViQXV0aGVudGljYXRpb25Db25m
aWd1cmF0aW9uKFdlYkNvcmU6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24mJik7
CiAjZW5kaWYKIAotICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKLQogICAgIGNv
bnN0IFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKCkgeyByZXR1
cm4gbV9jb25maWd1cmF0aW9uLmdldCgpOyB9CiAKICAgICBXZWJzaXRlRGF0YVN0b3JlQ2xpZW50
JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQpAQCAtMjkxLDYgKzMwNiw4IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgcmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiwgVVJM
JiYsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwogCisgICAgYm9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhj
b25zdCBTdHJpbmcmKTsKKwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgV2Vi
RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyJiBkZXZpY2VPcmllbnRh
dGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXIoKSB7IHJldHVybiBtX2RldmljZU9yaWVudGF0
aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcjsgfQogI2VuZGlmCkBAIC0zNjcsNyArMzg0LDcg
QEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5n
JiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKTsKICAg
ICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9y
YWdlRGlyZWN0b3J5LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4m
KTsKIAotICAgIHZvaWQgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICB2b2lk
IHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01B
SU5TKQogICAgIHN0YXRpYyBPcHRpb25hbDxIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluPj4gYXBwQm91bmREb21haW5zSWZJbml0aWFsaXplZCgpOwpAQCAtNDA3LDggKzQyNCw2IEBA
IHByaXZhdGU6CiAgICAgV2ViQ29yZTo6U291cE5ldHdvcmtQcm94eVNldHRpbmdzIG1fbmV0d29y
a1Byb3h5U2V0dGluZ3M7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29va2llPiBt
X3BlbmRpbmdDb29raWVzOwotICAgIAogICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4g
bV9wcm9jZXNzZXM7CiAKICAgICBib29sIG1faXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQgeyBmYWxz
ZSB9OwpAQCAtNDI5LDYgKzQ0NCw3IEBAIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPFdlYnNpdGVE
YXRhU3RvcmVDbGllbnQ+IG1fY2xpZW50OwogCiAgICAgUmVmUHRyPEFQSTo6SFRUUENvb2tpZVN0
b3JlPiBtX2Nvb2tpZVN0b3JlOworICAgIFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25l
dHdvcmtQcm9jZXNzOwogCiAjaWYgSEFWRShBUFBfU1NPKQogICAgIFVuaXF1ZVJlZjxTT0F1dGhv
cml6YXRpb25Db29yZGluYXRvcj4gbV9zb0F1dGhvcml6YXRpb25Db29yZGluYXRvcjsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3Rv
cmVDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0JKHJldmlzaW9uIDI2NzUzNikKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3Rv
cmVDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEyIEBACiAKICNpbXBvcnQg
IkNvb2tpZVN0b3JhZ2VVdGlsc0NGLmgiCiAjaW1wb3J0ICJEZWZhdWx0V2ViQnJvd3NlckNoZWNr
cy5oIgorI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2ltcG9ydCAiU2FuZGJveFV0
aWxpdGllcy5oIgogI2ltcG9ydCAiU3RvcmFnZU1hbmFnZXIuaCIKICNpbXBvcnQgIldlYkZyYW1l
UG9saWN5TGlzdGVuZXJQcm94eS5oIgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNLZXlzLmgiCisj
aW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oIgogI2ltcG9ydCAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKICNp
bXBvcnQgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CkBAIC00NCw2ICs0Niw3IEBA
CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJp
dmlsZWdlLmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvRW50aXRs
ZW1lbnRzLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQpAQCAtNTYyLDQgKzU2NSwyOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlaW5pdGlhbGl6ZUFwcEJvCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJzaXRlRGF0YVN0b3Jl
OjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmIGVu
dGl0bGVtZW50KQoreworICAgIHJldHVybiBXVEY6Omhhc0VudGl0bGVtZW50KG5ldHdvcmtQcm9j
ZXNzKCkuY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVudGl0bGVtZW50LnV0ZjgoKS5k
YXRhKCkpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1hQ
Q0VuZHBvaW50VG9XZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKK3sKKyAgICBp
ZiAocHJvY2Vzcy5zdGF0ZSgpICE9IEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6U3RhdGU6OlJ1bm5p
bmcpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBjb25uZWN0aW9uID0gcHJvY2Vzcy5jb25u
ZWN0aW9uKCk7CisgICAgaWYgKCFjb25uZWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgYXV0
byBtZXNzYWdlID0gbmV0d29ya1Byb2Nlc3MoKS54cGNFbmRwb2ludE1lc3NhZ2UoKTsKKyAgICBp
ZiAoIW1lc3NhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21l
c3NhZ2UoY29ubmVjdGlvbi0+eHBjQ29ubmVjdGlvbigpLCBtZXNzYWdlKTsKK30KKwordm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvQWxsV2ViUHJv
Y2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykKKyAgICAg
ICAgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MocHJvY2Vzcyk7Cit9
CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vi
c2l0ZURhdGFTdG9yZUN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCShyZXZpc2lvbiAy
Njc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNp
dGVEYXRhU3RvcmVDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldE5ldHdvcmtQcm94eVNlCiB7CiAgICAgbV9wcm94eVNldHRp
bmdzID0gV1RGTW92ZShwcm94eVNldHRpbmdzKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtp
bmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGlu
Z3MobV9zZXNzaW9uSUQsIG1fcHJveHlTZXR0aW5ncykpOworICAgIG5ldHdvcmtQcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1f
c2Vzc2lvbklELCBtX3Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9X
ZWJzaXRlRGF0YVN0b3JlU291cC5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cGxh
dGZvcm1TZXROZXR3b3IKICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaWdub3JlVExTRXJy
b3JzID0gbV9pZ25vcmVUTFNFcnJvcnM7CiAgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnBy
b3h5U2V0dGluZ3MgPSBtX25ldHdvcmtQcm94eVNldHRpbmdzOwogCi0gICAgaWYgKGF1dG8qIHBy
b2Nlc3NQb29sID0gcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpKQotICAg
ICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdl
dENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmNv
b2tpZU1hbmFnZXIoKS5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxl
ZChib29sIGVuYWJsZWQpCkBAIC01NCw4ICs1Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UGVyc2lzdGVudENyZWQKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9wZXJzaXN0ZW50Q3Jl
ZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gZW5hYmxlZDsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3Jr
aW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFBlcnNpc3RlbnRDcmVkZW50
aWFsU3RvcmFnZUVuYWJsZWQobV9zZXNzaW9uSUQsIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9y
YWdlRW5hYmxlZCkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQobV9zZXNzaW9u
SUQsIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCksIDApOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9y
cykKQEAgLTY0LDE1ICs2MiwxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElnbm9yZVRM
U0Vycm9yCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faWdub3JlVExTRXJyb3JzID0gaWdub3Jl
VExTRXJyb3JzOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkK
LSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0SWdub3JlVExTRXJyb3JzKG1fc2Vzc2lvbklELCBtX2lnbm9yZVRM
U0Vycm9ycykpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX3Nlc3Npb25JRCwgbV9pZ25vcmVUTFNFcnJvcnMp
LCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXROZXR3b3JrUHJveHlTZXR0aW5n
cyhXZWJDb3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3MmJiBzZXR0aW5ncykKIHsKICAgICBt
X25ldHdvcmtQcm94eVNldHRpbmdzID0gV1RGTW92ZShzZXR0aW5ncyk7Ci0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c2Vu
ZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXROZXR3b3Jr
UHJveHlTZXR0aW5ncyhtX3Nlc3Npb25JRCwgbV9uZXR3b3JrUHJveHlTZXR0aW5ncykpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdv
cmtQcm94eVNldHRpbmdzKG1fc2Vzc2lvbklELCBtX25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCShyZXZpc2lvbiAyNjc1
MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5
OjpwbGF0Zm9ybUdldExhdW5jaE8KICAgICAgICAgaWYgKCFkYXRhU3RvcmUpIHsKICAgICAgICAg
ICAgIC8vIFByZXdhcm1lZCBwcm9jZXNzZXMgZG9uJ3QgaGF2ZSBhIFdlYnNpdGVEYXRhU3RvcmUg
eWV0LCBzbyB1c2UgdGhlIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSBmcm9tIHRoZSBXZWJQcm9j
ZXNzUG9vbC4KICAgICAgICAgICAgIC8vIFRoZSBwcm9jZXNzIHdvbid0IGJlIHVzZWQgaWYgY3Vy
cmVudCBXZWJzaXRlRGF0YVN0b3JlIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBXZWJQcm9jZXNzUG9v
bCBwcmltYXJ5IG9uZS4KLSAgICAgICAgICAgIGRhdGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wtPndl
YnNpdGVEYXRhU3RvcmUoKTsKKyAgICAgICAgICAgIGRhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VS
VChkYXRhU3RvcmUpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29r
aWVNYW5hZ2VyUHJveHlTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCShyZXZpc2lvbiAyNjc1MzYp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNv
dXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAKKyNpbmNsdWRlICJOZXR3
b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKIApAQCAtMzMsOCArMzQsOCBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdG9y
YWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsK
LSAgICBtX2Nvb2tpZVBlcnNpc3RlbnRTdG9yYWdlTWFwLnNldChzZXNzaW9uSUQsIHN0ZDo6bWFr
ZV9wYWlyKHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOwotICAgIHByb2Nlc3NQb29sKCktPnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkp
OworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFn
ZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSksIDApOwogfQogCiB2b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVu
dFN0b3JhZ2VUeXBlJiBzdG9yYWdlVHlwZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAJKHJldmlzaW9uIDI2
NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3Vw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTQgKzM3LDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
KE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewotICAgIE5l
dHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMg
PSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVyczsKLSAgICBzdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29v
a2llUGVyc2lzdGVudFN0b3JhZ2UoZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwg
ZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgZGVm
YXVsdFNlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7Ci0gICAg
aWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBkZWZhdWx0U2Vzc2lvblBhcmFtZXRl
cnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fd2Vic2l0ZURhdGFTdG9y
ZS0+cGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpOwotICAgICAgICBkZWZhdWx0
U2Vzc2lvblBhcmFtZXRlcnMuaWdub3JlVExTRXJyb3JzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5p
Z25vcmVUTFNFcnJvcnMoKTsKLSAgICAgICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnByb3h5
U2V0dGluZ3MgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm94eVNldHRpbmdzKCk7Ci0g
ICAgfQotCiAgICAgcGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kgPSBtX2luaXRpYWxIVFRQ
Q29va2llQWNjZXB0UG9saWN5OwogICAgIHBhcmFtZXRlcnMubGFuZ3VhZ2VzID0gdXNlclByZWZl
cnJlZExhbmd1YWdlcygpOwogICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2Ug
PSB0cnVlOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaAkocmV2aXNpb24gMjY3
NTM2KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSFRU
UENvb2tpZUFjY2VwdFBvbGljeS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKSW5kZXg6IFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NzUz
NikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisy
MDIwLTA5LTI0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgTW92ZSBOZXR3b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nl
c3NQb29sIHRvIFdlYnNpdGVEYXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE1vc3QgY2hhbmdlcyB0byB0ZXN0cyBhcmUganVzdCBjYWxsaW5n
IGEgZnVuY3Rpb24gb24gdGhlIFdLV2Vic2l0ZURhdGFTdG9yZSBpbnN0ZWFkIG9mIHRoZSBXS1By
b2Nlc3NQb29sCisgICAgICAgIGJlY2F1c2Ugd2Ugd2FudCB0byBkbyBzb21ldGhpbmcgd2l0aCB0
aGUgbmV0d29yayBwcm9jZXNzIGFuZCBpdCBoYXMgYSBuZXcgb3duZXIuCisgICAgICAgIEV4Y2Vw
dGlvbnMgYXJlIG5vdGVkIGlubGluZS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW06CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0Rvd25sb2FkLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZG93bmxv
YWRBdFJhdGUpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURC
Q2hlY2twb2ludFdBTC5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW06CisgICAgICAgIChURVNU
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBn
cmFkZVRvVjIubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tOgorICAgICAg
ICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW06
CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRs
eS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tOgorICAgICAgICAoVEVTVCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0
ZW5jZS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25Q
ZXJzaXN0ZW50RGF0YVN0b3JlLm1tOgorICAgICAgICAoY2hlY2tSZWNvdmVyeUFmdGVyQ3Jhc2gp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBP
bk5hdmlnYXRpb24ubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgIFRo
aXMgdGVzdCB3YXMgbWFraW5nIGEgV0tXZWJzaXRlRGF0YVN0b3JlLCBnZXR0aW5nIGl0cyByZXNv
dXJjZSBsb2FkIHN0YXRpc3RpY3MgZGlyZWN0b3J5LAorICAgICAgICBwdXR0aW5nIHRoaW5ncyBp
biB0aGF0IGRpcmVjdG9yeSwgdGhlbiBzdGFydGluZyB0aGUgbmV0d29yayBwcm9jZXNzIGFuZCBt
YWtpbmcgc3VyZSBldmVyeXRoaW5nCisgICAgICAgIHdvcmtzIHdoZW4gaW5pdGlhbGl6aW5nIHRo
ZSBuZXR3b3JrIHByb2Nlc3MuICBOb3csIG5ldHdvcmsgcHJvY2VzcyBpbml0aWFsaXphdGlvbiBo
YXBwZW5zIHdoZW4gYQorICAgICAgICBXS1dlYnNpdGVEYXRhU3RvcmUgaXMgaW5zdGFudGlhdGVk
LCBzbyB3ZSBuZWVkIHRvIHB1dCB0aGluZ3MgdGhlcmUgYmVmb3JlIGluc3RhbnRpYXRpbmcgYSBX
S1dlYnNpdGVEYXRhU3RvcmUuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW06CisgICAgICAgIEJlZm9yZSB0aGlzIGNoYW5nZSwg
ZWFjaCBXS1Byb2Nlc3NQb29sIGhhZCBpdHMgb3duIG5ldHdvcmsgcHJvY2Vzcywgd2hpY2ggaG9s
ZHMgdGhlIHNlcnZpY2Ugd29ya2VyIHJlZ2lzdHJ5CisgICAgICAgIGZvciB0aGUgV2Vic2l0ZURh
dGFTdG9yZXMgdXNlZCB3aXRoIHRoYXQgcHJvY2VzcyBwb29sLiAgTm93LCB0aGUgbmV0d29yayBw
cm9jZXNzIHN0aWxsIG5lZWRzIHRvIGhhdmUgYSBzZXJ2aWNlCisgICAgICAgIHdvcmtlciByZWdp
c3RyeSBpbiBpdCwgYnV0IHdoZW4gd2UgcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBpdCBsb29raW5n
IGZvciBhIHdlYiBwcm9jZXNzIHRvIHJ1biB0aGUgc2VydmljZQorICAgICAgICB3b3JrZXIsIHdl
IGdvIGFyYml0cmFyaWx5IHRvIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wgdGhhdCBoYXMgYSBwcm9j
ZXNzIHdlIGNhbiB1c2UuICBUaGlzIGxvZ2ljIGlzIGluIAorICAgICAgICBXZWJQcm9jZXNzUG9v
bDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzLiAgQmVj
YXVzZSB3ZSB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCBlYWNoCisgICAgICAgIHRpbWUsIHNl
dHRpbmcgdGhlIGN1c3RvbSB1c2VyIGFnZW50IHRvIHR3byBkaWZmZXJlbnQgdGhpbmdzIGluIHR3
byBkaWZmZXJlbnQgcHJvY2VzcyBwb29scyBjYXVzZXMgb25seSBvbmUKKyAgICAgICAgdG8gYmUg
dXNlZC4gIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBpbiBwcmFjdGljZSwgdGhvdWdoLCBiZWNhdXNl
IHRoZSBvbmx5IGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgU1BJIHRvCisgICAgICAgIHNldCBh
IHNlcnZpY2Ugd29ya2VyJ3MgY3VzdG9tIHVzZXIgYWdlbnQgaXMgU2FmYXJpLCB3aGljaCBvbmx5
IGhhcyBvbmUgcHJvY2VzcyBwb29sLiAgVGhpcyB0ZXN0IHN0aWxsIHZlcmlmaWVzCisgICAgICAg
IHRoYXQgYSB1c2VyIGFnZWludCBpcyBjb3JyZWN0bHkgc2VudC4KKyAgICAgICAgU2ltaWxhcmx5
LCB0aGUgdGVzdHMgdGhhdCBjb3VudCBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzZXMgZWl0aGVyIGhh
dmUgZGlmZmVyZW50IHJlc3VsdHMgb3IgbmVlZCB0byBiZSBydW4gd2l0aAorICAgICAgICBvbmUg
cHJvY2VzcyBwb29sIHBlciBwYXJlbnQgcHJvY2Vzcy4gIFRvIGtlZXAgdGhlIHJlc3VsdHMgdGhl
IHNhbWUsIEkgc2VwYXJhdGVkIHRoZSB0ZXN0cyBpbnRvIGRpZmZlcmVudAorICAgICAgICBURVNU
KFNlcnZpY2VXb3JrZXJzLCAuLi4pIG1hY3JvcyB3aGljaCBhcmUgcnVuIGluIHNlcGFyYXRlIHBh
cmVudCBwcm9jZXNzZXMuCisgICAgICAgIFRoZSB0ZXN0IFJlc3RvcmVGcm9tRGlza05vbkRlZmF1
bHRTdG9yZSBuZWVkcyB0byB1c2UgdGhlIHNhbWUgZGF0YSBzdG9yZSBmb3IgYm90aCBXS1dlYlZp
ZXdzIG5vdyBiZWNhdXNlIG90aGVyd2lzZQorICAgICAgICB0aGVyZSB3YXMgYSByYWNlIGNvbmRp
dGlvbiBpbiB0aGUgc3RhcnR1cCBvZiBhIG5ldyBuZXR3b3JrIHByb2Nlc3MgdGhhdCB3YXNuJ3Qg
dGhlcmUgYmVmb3JlIGJlY2F1c2Ugd2Ugd2VyZSB1c2luZyB0aGUKKyAgICAgICAgc2FtZSBwcm9j
ZXNzIHBvb2wgYW5kIHRoZXJlZm9yZSB0aGUgc2FtZSBuZXR3b3JrIHByb2Nlc3MuICBJIGFkZGVk
IHNwaW5uaW5nIHRoZSBydW4gbG9vcCBhbmQgc2xlZXBpbmcgdG8gYmUgYWJsZSB0bworICAgICAg
ICByZXByb2R1Y2UgdGhlIHJhY2UgY29uZGl0aW9uIGZhaWx1cmUgYW5kIEkgdXNlIHRoZSBzYW1l
IFdLV2Vic2l0ZURhdGFTdG9yZSB0byB1c2UgdGhlIHNhbWUgbmV0d29yayBwcm9jZXNzLCB3aGlj
aCB3YXMKKyAgICAgICAgdGhlIGludGVudCBvZiB1c2luZyB0aGUgc2FtZSBXS1Byb2Nlc3NQb29s
IGJlZm9yZS4gIFRoZSB0ZXN0IHN0aWxsIHRlc3RzIHRoYXQgdGhlIHJlZ2lzdHJhdGlvbiBpcyBy
ZS11c2VkIHdoZW4gd2UgYXJlCisgICAgICAgIG5vdCB1c2luZyB0aGUgZGVmYXVsdCBkYXRhIHN0
b3JlLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdv
cmtlckJhc2ljLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V0tIVFRQQ29va2llU3RvcmUubW06CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVs
ZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmluaXRpYXRl
ZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNv
b2tpZVVJRGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdKToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9u
Q29va2llVUlEZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdKToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICBUaGlzIGlzIHRoZSB3aG9sZSBwb2ludCBvZiBtZSBkb2luZyB0aGlzLgorICAgICAgICBJ
IHRvb2sgYSB0ZXN0IHRoYXQgd2FzIGZsYWt5IG9ubHkgb24gaU9TIChiZWNhdXNlIG9mIGRpZmZl
cmVudCBOU0hUVFBDb29raWVTdG9yYWdlIHN5bmNpbmcgYmVoYXZpb3IpIGFuZCBtYWRlCisgICAg
ICAgIGl0IGZsYWt5IG5vd2hlcmUgKGZpbmdlcnMgY3Jvc3NlZCEpIGFuZCBhZGRlZCBhIHRlc3Qg
dGhhdCBjb3JyZWN0bHkgaGFuZGxlcyBzZXNzaW9uIGNvb2tpZXMgbGlrZSB3ZSBjb3VsZCBub3QK
KyAgICAgICAgYmVmb3JlIHRoaXMgY2hhbmdlLgorICAgICAgICBJIGFsc28gcmUtdXNlZCBzb21l
IHRlc3QgaW5mcmFzdHJ1Y3R1cmUgYW5kIG1hZGUgaXQgc3RvcCB1c2luZyBwcm9jZXNzLWdsb2Jh
bCBzdGF0aWMgdmFyaWFibGVzIGZvciB0ZXN0IHN0YXRlLgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tOgorICAgICAg
ICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJz
aXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW06CisgICAgICAgIChydW5XZWJzaXRlRGF0YVN0b3Jl
Q3VzdG9tUGF0aHMpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW06CisgICAgICAgICgtW0Nsb3Nl
V2hpbGVTdGFydGluZ1Byb3RvY29sIHN0YXJ0TG9hZGluZ10pOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6cnVuVGVzdCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0
ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmZpbmRBbmREdW1wV2Vi
S2l0UHJvY2Vzc0lkZW50aWZpZXJzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6Om5l
dHdvcmtQcm9jZXNzRGlkQ3Jhc2gpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dGVy
bWluYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1BZGp1c3RDb250ZXh0KToKKyAgICAgICAgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2Vy
dGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyBpcyBub3QgbmVlZGVkLCBzbyBJIHJlbW92
ZWQgaXQuCisgICAgICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlIGlzbid0
IG5lZWRlZCBhbnkgbW9yZSBiZWNhdXNlIFdLQ29udGV4dFJlZiAoV2ViUHJvY2Vzc1Bvb2wpIGRv
ZXNuJ3QKKyAgICAgICAgb3duIGEgbmV0d29yayBwcm9jZXNzIGFueSBtb3JlLCBzbyBpdCBkb2Vz
bid0IGNhcmUgd2hpY2ggaXMgdGhlIGRlZmF1bHQgV2Vic2l0ZURhdGFTdG9yZS4KKyAgICAgICAg
SW4gZmFjdCwgdGhlICJkZWZhdWx0IiBXZWJzaXRlRGF0YVN0b3JlIGlzbid0IHJlYWxseSBpbXBv
cnRhbnQgaW4gdGhlIG5ldHdvcmsgcHJvY2VzcyBhbnkgbW9yZS4KKwogMjAyMC0wOS0yNCAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11b
V1BFXSBNb3ZlIHByb3h5IHNldHRpbmdzIGZyb20gV2ViS2l0Q29udGV4dCB0byBXZWJLaXRXZWJz
aXRlRGF0YU1hbmFnZXIKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05l
dHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQ
ZW5kaW5nQ29ubmVjdGlvbi5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlv
bi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dL
UHJvY2Vzc0dyb3VwUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQu
aD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtODcsNyArODgsNyBAQCBURVNUKFdl
YktpdCwgTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kCiAgICAgcGlkX3Qgd2ViVmlldzJQSUQg
PSBbd2ViVmlldzIuZ2V0KCkgX3dlYlByb2Nlc3NJZGVudGlmaWVyXTsKICAgICBFWFBFQ1RfTkUo
d2ViVmlldzFQSUQsIHdlYlZpZXcyUElEKTsKIAotICAgIHBpZF90IGluaXRpYWxOZXR3b3JrUHJv
Y2Vzc0lkZW50aWZpZmVyID0gW3Byb2Nlc3NQb29sLmdldCgpIF9uZXR3b3JrUHJvY2Vzc0lkZW50
aWZpZXJdOworICAgIHBpZF90IGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVyID0gW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfbmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyXTsKICAgICBFWFBFQ1RfTkUoaW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlmZXIsIDAp
OwogICAgIGtpbGwoaW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlmZXIsIFNJR0tJTEwpOwog
ICAgIFV0aWw6OnJ1bigmbmV0d29ya1Byb2Nlc3NDcmFzaGVkKTsKQEAgLTk2LDcgKzk3LDcgQEAg
VEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZAogICAgIFt3ZWJWaWV3MS5n
ZXQoKSBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNCdW5kbGUg
bWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1s
IiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXV07CiAgICAgW3dlYlZp
ZXcxLmdldCgpIF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKIAotICAgIHBpZF90
IHJlbGF1bmNoZWROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIgPSBbcHJvY2Vzc1Bvb2wuZ2V0KCkg
X25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl07CisgICAgcGlkX3QgcmVsYXVuY2hlZE5ldHdvcmtQ
cm9jZXNzSWRlbnRpZmllciA9IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUg
X25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl07CiAgICAgRVhQRUNUX05FKGluaXRpYWxOZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZmVyLCByZWxhdW5jaGVkTmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKTsK
ICAgICBFWFBFQ1RfRkFMU0UobmV0d29ya1Byb2Nlc3NDcmFzaGVkKTsKIApAQCAtMTQ2LDggKzE0
Nyw4IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc1JlbGF1bmNoT25MYXUKIAogICAgIC8v
IENvbnN0dWN0aW5nIGEgV2ViVmlldyBzdGFydHMgYSBuZXR3b3JrIHByb2Nlc3Mgc28gdGVybWlu
YXRlIHRoaXMgb25lLiBUaGUgcGFnZSBsb2FkIGJlbG93IHdpbGwgdGhlbiByZXF1ZXN0IGEgbmV0
d29yayBwcm9jZXNzIGFuZCB3ZQogICAgIC8vIG1ha2UgdGhpcyBuZXcgbmV0d29yayBwcm9jZXNz
IGxhdW5jaCBjcmFzaCBvbiBzdGFydHVwLgotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwotICAgIFtwcm9jZXNzUG9vbCBfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nXTsKKyAgICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9tYWtlTmV4dE5l
dHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmddOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1
dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbTW9uaXRvcldlYkNvbnRlbnRDcmFzaE5hdmlnYXRpb25E
ZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwogICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0
ZTpkZWxlZ2F0ZS5nZXQoKV07CkBAIC0xNTgsNyArMTU5LDcgQEAgVEVTVChXZWJLaXQsIE5ldHdv
cmtQcm9jZXNzUmVsYXVuY2hPbkxhdQogICAgIEVYUEVDVF9UUlVFKG5ldHdvcmtQcm9jZXNzQ3Jh
c2hlZCk7CiAgICAgRVhQRUNUX0ZBTFNFKHdlYlByb2Nlc3NDcmFzaGVkKTsKICAgICBFWFBFQ1Rf
R1QoW3dlYlZpZXcgX3dlYlByb2Nlc3NJZGVudGlmaWVyXSwgMCk7Ci0gICAgRVhQRUNUX0dUKFtw
cm9jZXNzUG9vbC5nZXQoKSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXSwgMCk7CisgICAgRVhQ
RUNUX0dUKFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9j
ZXNzSWRlbnRpZmllcl0sIDApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxv
YWQubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvRG93bmxvYWQubW0JKHdvcmtpbmcgY29weSkKQEAgLTg4OSw5ICs4ODksOSBAQCB2
b2lkIGRvd25sb2FkQXRSYXRlKGRvdWJsZSBkZXNpcmVkS2JwcywgCiAgICAgcmVjZWl2ZWREYXRh
ID0gZmFsc2U7CiAgICAgVXRpbDo6cnVuKCZyZWNlaXZlZERhdGEpOwogICAgIC8vIFN0YXJ0IHRo
ZSBEb3dubG9hZE1vbml0b3IncyB0aW1lci4KLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0u
cHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKKyAgICBbW3dlYlZp
ZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dy
b3VuZDpZRVNdOwogICAgIGlmIChyZXR1cm5Ub0ZvcmVncm91bmQgPT0gQXBwUmV0dXJuc1RvRm9y
ZWdyb3VuZDo6WWVzKQotICAgICAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bv
b2wgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9dOworICAgICAgICBbW3dlYlZpZXcgY29u
ZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpO
T107CiAgICAgZGlkQ2FuY2VsID0gZmFsc2U7CiAgICAgVXRpbDo6cnVuKCZkaWRDYW5jZWwpOwog
ICAgIHRlcm1pbmF0ZVNlcnZlciA9IHRydWU7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tCShyZXZp
c2lvbiAyNjc1MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lE
QkNoZWNrcG9pbnRXQUwubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBv
cnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3Jl
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19X
S1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHls
ZVNoZWV0Lmg+CkBAIC04Niw3ICs4Nyw3IEBAIFRFU1QoSW5kZXhlZERCLCBDaGVja3BvaW50c1dB
TEF1dG9tYXRpY2EKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7
CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVz
c2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0
TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAs
IDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxl
dGVSZWNvdmVyeS5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktp
dC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+
CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0
IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJbmRl
eGVkREIsIERlbGV0ZVJlY292ZXJ5KQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0
aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxs
b2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBh
ZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJd
OwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IHRoZSBpbmNvbnNpc3RlbnQg
ZGF0YWJhc2UgZmlsZXMgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeQogICAgIE5TVVJMICp1cmwx
ID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklEQkRlbGV0ZVJlY292
ZXJ5IiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQ
SS5yZXNvdXJjZXMiXTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0JKHJldmlzaW9uIDI2
NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhV
cGdyYWRlVG9WMi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8
V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29u
dGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmln
dXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJv
Y2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hl
ZXQuaD4KQEAgLTU4LDcgKzU5LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4VXBncmFkZVRvVjIp
CiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29u
ZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVy
OmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKIAogICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0aGUg
ZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5k
bGVdIFVSTEZvclJlc291cmNlOkAiSW5kZXhVcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRl
MyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFk
ZVRvVjIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQkocmV2aXNpb24gMjY3NTM2KQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUlu
Zm9VcGdyYWRlVG9WMi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9y
dCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2Vy
Q29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29u
ZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxl
U2hlZXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJbmRleGVkREIsIElEQk9iamVjdFN0b3Jl
SW5mb1VwZ3JhZAogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1
cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsK
ICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNz
YWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
KyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IGRhdGFiYXNlIGZpbGVzIHdpdGggb2xkIE9iamVj
dFN0b3JlSW5mbyBzY2hlbWEgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeS4KICAgICBOU1VSTCAq
dXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJPYmplY3RT
dG9yZUluZm9VcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAi
VGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFi
YXNlUHJvY2Vzc0tpbGwubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bv
b2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4K
KyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC05Miw3ICs5Myw3IEBAIFRFU1Qo
SW5kZXhlZERCLCBEYXRhYmFzZVByb2Nlc3NLaWxsKQogICAgICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgICAgIGlmICgha2lsbGVkREJQ
cm9jZXNzICYmIG9wZW5SZXF1ZXN0VXBncmFkZU5lZWRlZCkgewogICAgICAgICAgICAga2lsbGVk
REJQcm9jZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nl
c3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgICAgICAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAg
ICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCShyZXZp
c2lvbiAyNjc1MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4ZWREQk11bHRpUHJvY2Vzcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9y
ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24u
aD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgogI2ltcG9ydCA8d3RmL0Rl
cXVlLmg+CkBAIC02OSw3ICs3MCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJNdWx0aVBy
b2Nlc3MpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRp
b24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAg
IFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VI
YW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtb
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDAp
IGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkluZGV4OiBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERC
UGVyc2lzdGVuY2UubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0JKHdvcmtpbmcgY29weSkK
QEAgLTc4LDcgKzc4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlBlcnNpc3RlbmNlKQog
ICAgIHdlYlZpZXcgPSBuaWw7CiAKICAgICAvLyBUZXJtaW5hdGUgdGhlIG5ldHdvcmsgcHJvY2Vz
cwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gTWFrZSBhIG5ldyB3ZWIgdmlldyB0byBm
aW5pc2ggdGhlIHRlc3QKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTI2OCw3ICsyNjgsNyBAQCBURVNUKEluZGV4ZWREQiwg
SW5kZXhlZERCVGhpcmRQYXJ0eUZyYW1lCiAKICAgICB3ZWJWaWV3ID0gbmlsOwogICAgIHNlY29u
ZFdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRl
RGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBUaGlyZC1wYXJ0
eSBJREIgc3RvcmFnZSBpcyBzdG9yZWQgaW4gdGhlIG1lbW9yeSBvZiBuZXR3b3JrIHByb2Nlc3Mu
CiAgICAgYXV0byB0aGlyZFdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOwpAQCAtMzg1LDcgKzM4NSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRl
eGVkREJUaGlyZFBhcnR5V29ya2UKIAogICAgIHdlYlZpZXcgPSBuaWw7CiAgICAgc2Vjb25kV2Vi
VmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRh
U3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gdGhpcmRXZWJWaWV3
ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBs
b2FkVGVzdFBhZ2VJbldlYlZpZXcodGhpcmRXZWJWaWV3LmdldCgpLCBAImRhdGFiYXNlIGlzIGNy
ZWF0ZWQiKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5k
ZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbQkocmV2
aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNp
dGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0
IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CkBAIC04OCw4ICs4OSw4IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJTdXNw
ZW5kSW1taW5lbnQKIAogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkNvbnRpbnVlIik7CiAK
LSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNz
UG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5n
ZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJF
eHBlY3RlZCBBYm9ydCBGb3IgU3VzcGVuc2lvbiIpOwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3Vs
dChAIkV4cGVjdGVkIFN1Y2Nlc3MgQWZ0ZXIgUmVzdW1lIik7CkBAIC0xNTgsOCArMTU5LDggQEAg
VEVTVChJbmRleGVkREIsIFN1c3BlbmRJbW1pbmVudGx5Rm9yVGhpcgogICAgIFt3ZWJWaWV3IGxv
YWRIVE1MU3RyaW5nOm1haW5GcmFtZVN0cmluZyBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5n
OkAiaHR0cDovL3dlYmtpdC5vcmciXV07CiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiZGF0
YWJhc2UgaXMgY3JlYXRlZCIpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07Ci0gICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07
CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQ
cm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgcnVu
VGVzdEFuZENoZWNrUmVzdWx0KEAidHJhbnNhY3Rpb24gaXMgY29tcGxldGVkIik7CiB9CkluZGV4
OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxl
U2l6ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0J
KHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWRE
QlRlbXBGaWxlU2l6ZSkKIAogICAgIC8vIFRlcm1pbmF0ZSBuZXR3b3JrIHByb2Nlc3MgdG8ga2Vl
cCBXQUwgb24gZGlzay4KICAgICB3ZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwog
CiAgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhp
c3RzQXRQYXRoOndhbEZpbGVQYXRoLmdldCgpLnBhdGhdKTsKICAgICBSZXRhaW5QdHI8TlNEaWN0
aW9uYXJ5PiBmaWxlQXR0cmlidXRlcyA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0g
YXR0cmlidXRlc09mSXRlbUF0UGF0aDp3YWxGaWxlUGF0aC5nZXQoKS5wYXRoIGVycm9yOm5pbF07
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFn
ZVBlcnNpc3RlbmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0JKHJldmlzaW9uIDI2NzUzNikK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVy
c2lzdGVuY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdl
YktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
S1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2VicGFn
ZVByZWZlcmVuY2VzUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9y
ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9f
V0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5
bGVTaGVldC5oPgpAQCAtMTA5LDcgKzExMCw3IEBAIFRFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3Jh
Z2VQcm9jZXNzQ3Jhc2gKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2Ny
aXB0TWVzc2FnZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAic2Vzc2lvbjpzdG9yYWdlIiwgW2xh
c3RTY3JpcHRNZXNzYWdlIGJvZHldKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nl
c3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0
KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgcmVj
ZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwpAQCAtMTYyLDcgKzE2Myw3IEBAIFRFU1QoV0tXZWJW
aWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzU3VzcGUKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAidmFsdWUi
LCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCi0gICAgW3Byb2Nlc3NQb29sLmdldCgpIF9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5k
SW1taW5lbnRseV07CiAKICAgICByZWFkeVRvQ29udGludWUgPSBmYWxzZTsKICAgICBbd2ViVmll
dzEgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdrZXkn
LCAnbmV3VmFsdWUnKSIgY29tcGxldGlvbkhhbmRsZXI6XihpZCwgTlNFcnJvciAqKSB7CkBAIC0x
NzcsNyArMTc4LDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZQog
ICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0NvbnRpbnVlKTsK
ICAgICAKLSAgICBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3Vt
ZV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdv
cmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNl
OwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nl
c3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9OZXR3b3JrUHJvY2Vzcy5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjgsNyArMjgsNyBAQAogI2ltcG9ydCAiSFRUUFNlcnZlci5oIgogI2ltcG9ydCAiVGVzdFdL
V2ViVmlldy5oIgogI2ltcG9ydCAiVXRpbGl0aWVzLmgiCi0jaW1wb3J0IDxXZWJLaXQvV0tQcm9j
ZXNzUG9vbFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2
YXRlLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KQEAgLTM3LDE0ICszNywxNCBAQCBURVNUKFdlYktp
dCwgTmV0d29ya1Byb2Nlc3NFbnRpdGxlbWVudHMpCiB7CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAw
LCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpbW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9j
XSBpbml0XSBhdXRvcmVsZWFzZV1dKTsKICAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRl
c3RQYWdlTmFtZWQ6QCJzaW1wbGUiXTsKLSAgICBXS1Byb2Nlc3NQb29sICpwb29sID0gW3dlYlZp
ZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2w7Ci0gICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9
IFtwb29sIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAImNvbS5hcHBs
ZS5yb290bGVzcy5zdG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94Il07CisgICAgV0tXZWJz
aXRlRGF0YVN0b3JlICpzdG9yZSA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRh
U3RvcmU7CisgICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9IFtzdG9yZSBfbmV0d29ya1Byb2Nlc3NI
YXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Muc3RvcmFnZS5XZWJL
aXROZXR3b3JraW5nU2FuZGJveCJdOwogI2lmIFBMQVRGT1JNKE1BQykgJiYgVVNFKEFQUExFX0lO
VEVSTkFMX1NESykKICAgICBFWFBFQ1RfVFJVRShoYXNFbnRpdGxlbWVudCk7CiAjZWxzZQogICAg
IEVYUEVDVF9GQUxTRShoYXNFbnRpdGxlbWVudCk7CiAjZW5kaWYKLSAgICBFWFBFQ1RfRkFMU0Uo
W3Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAidGVzdCBmYWls
dXJlIGNhc2UiXSk7CisgICAgRVhQRUNUX0ZBTFNFKFtzdG9yZSBfbmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJdKTsKIH0KIAogVEVTVChX
ZWJLaXQsIEhUVFBSZWZlcmVyKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQ
cm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCShyZXZpc2lvbiAyNjc1MzYpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jh
c2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3
IEBAIHN0YXRpYyB2b2lkIGNoZWNrUmVjb3ZlcnlBZnRlckNyYXNoKFdLV2UKICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtbd2Vi
VmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OworICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVz
dCByZXF1ZXN0V2l0aFVSTDpzaW1wbGUyXV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lKTsKIH0KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQkocmV2aXNp
b24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9j
ZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNTM4NSw3ICs1Mzg1LDcg
QEAgVEVTVChQcm9jZXNzU3dhcCwgVXNlUHJld2FybWVkUHJvY2Vzc0FmdAogCiAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJW
aWV3MiA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVj
dCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjp3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQo
KV0pOwogICAgIFt3ZWJWaWV3MiBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCld
OwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQkocmV2aXNpb24gMjY3NTM2KQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MTksNyArNzE5LDcgQEAgVEVTVChSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLCBOZXR3b3JrUHJvYwogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNp
dGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmll
dzIgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3Qo
MCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkBA
IC03NTIsNyArNzUyLDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBOZXR3b3JrUHJv
YwogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbY29u
ZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwor
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzMgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkBAIC0xNTU4LDEwICsxNTU4LDggQEAgVEVTVChS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBNaWdyYXRlRGF0YQogCiBURVNUKFJlc291cmNlTG9hZFN0
YXRpc3RpY3MsIENhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2wpCiB7CisgICAg
TlNVUkwgKml0cFJvb3RVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1RlbXBvcmFyeURp
cmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkNhbkFjY2Vzc0RhdGFT
dW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2xUZXN0Il0gaXNEaXJlY3Rvcnk6WUVTXTsKICAgICBhdXRv
IGRlZmF1bHRGaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKLSAg
ICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlv
biA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07
Ci0gICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5p
dFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsK
LSAgICBOU1VSTCAqaXRwUm9vdFVSTCA9IFtbZGF0YVN0b3JlIF9jb25maWd1cmF0aW9uXSBfcmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeV07CiAgICAgTlNVUkwgKmZpbGVVUkwgPSBbaXRw
Um9vdFVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJvYnNlcnZhdGlvbnMuZGIiXTsK
ICAgICBbZGVmYXVsdEZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFBhdGg6aXRwUm9vdFVSTC5wYXRo
IGVycm9yOm5pbF07CiAgICAgRVhQRUNUX0ZBTFNFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4
aXN0c0F0UGF0aDppdHBSb290VVJMLnBhdGhdKTsKQEAgLTE1NzIsNiArMTU3MCwxMCBAQCBURVNU
KFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0RhCiAgICAgRVhQRUNUX1RSVUUoW2Rl
ZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOm5ld0ZpbGVVUkwucGF0aF0pOwogICAg
IFtkZWZhdWx0RmlsZU1hbmFnZXIgY29weUl0ZW1BdFBhdGg6bmV3RmlsZVVSTC5wYXRoIHRvUGF0
aDpmaWxlVVJMLnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVN
YW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6ZmlsZVVSTC5wYXRoXSk7CisKKyAgICBfV0tXZWJzaXRl
RGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vi
c2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgZGF0YVN0
b3JlQ29uZmlndXJhdGlvbi5fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IGl0cFJv
b3RVUkw7CisgICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9j
XSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxl
YXNlXTsKICAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZ
RVNdOwogCiAgICAgc3RhdGljIGJvb2wgZG9uZUZsYWcgPSBmYWxzZTsKQEAgLTE2MzMsMTIgKzE2
MzUsMTIgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBTdG9yZVN1c3BlbgogICAgIFt3
ZWJWaWV3MiBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CiAKICAgICBkb25lRmxh
ZyA9IGZhbHNlOwotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJl
cGFyZVRvU3VzcGVuZDpeeworICAgIFtkYXRhU3RvcmUxIF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVw
YXJlVG9TdXNwZW5kOl57CiAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKICAgICB9XTsKICAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKIAotICAgIFtzaGFyZWRQcm9jZXNz
UG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbZGF0YVN0b3JlMSBfc2Vu
ZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIH0KIAogQGludGVyZmFjZSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU2NoZW1lSGFuZGxlciA6IE5TT2JqZWN0IDxXS1VSTFNjaGVtZUhhbmRsZXI+Cklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJC
YXNpYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTU1OCw3ICs1NTgsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBVc2VyQWdl
bnRPdmVycmlkZSkKIAogICAgIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogCi0gICAgbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5T
KFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhFeHBlY3RlZE1lc3Nh
Z2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBCYXIgQ3VzdG9tIFVzZXJBZ2VudCJdKTsKKyAgICBt
ZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5kbGVyIGFsbG9j
XSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6IEZvbyBDdXN0
b20gVXNlckFnZW50Il0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xs
ZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJz
dyJdOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0
aW9uLmdldCgpXSk7CkBAIC02MzMsOCArNjMzLDYgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgQ2Fj
aGVTdG9yYWdlUmVzdG9yZQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAg
ICAgZG9uZSA9IGZhbHNlOwogCi0gICAgW1dLV2Vic2l0ZURhdGFTdG9yZSBfZGVsZXRlRGVmYXVs
dERhdGFTdG9yZUZvclRlc3RpbmddOwotCiAgICAgU2VydmljZVdvcmtlclRDUFNlcnZlciBzZXJ2
ZXIoewogICAgICAgICB7ICJ0ZXh0L2h0bWwiLCBtYWluQ2FjaGVTdG9yYWdlQnl0ZXMgfQogICAg
IH0sIHsKQEAgLTk4Miw2ICs5ODAsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29y
a2VyUHJvY2VzCiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7
CiAgICAgc2V0Q29uZmlndXJhdGlvbkluamVjdGVkQnVuZGxlUGF0aChjb25maWd1cmF0aW9uLmdl
dCgpKTsKKyAgICBSZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gb3JpZ2luYWxQcm9jZXNzUG9vbCA9
IGNvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2w7CiAKICAgICBkb25lID0gZmFsc2U7CiAK
QEAgLTEwMzUsNyArMTAzNCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQ
cm9jZXMKICAgICBkb25lID0gZmFsc2U7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5n
IHRoZSBzaW1wbGUgcGFnZSBkaWQgbm90IHN0YXJ0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNz
LgotICAgIEVYUEVDVF9FUSgwdSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQ
b29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIHdlYlZp
ZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3ND
b3VudCk7CiAKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOm5ld0NvbmZp
Z3VyYXRpb24uZ2V0KCldKTsKICAgICBFWFBFQ1RfRVEoMnUsIHdlYlZpZXcuZ2V0KCkuY29uZmln
dXJhdGlvbi5wcm9jZXNzUG9vbC5fd2ViUHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3YXJtZWQpOwpA
QCAtMTA0Myw5ICsxMDQyLDggQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU2VydmljZVdvcmtlclBy
b2NlcwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZh
bHNlOwogCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgbG9hZGluZyB0aGlzIHBhZ2UgZGlkIHN0YXJ0
IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgogICAgIEVYUEVDVF9FUSgxdSwgd2ViVmlldy5n
ZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50
KTsKLQorICAgIEVYUEVDVF9FUSgxdSwgb3JpZ2luYWxQcm9jZXNzUG9vbC5nZXQoKS5fc2Vydmlj
ZVdvcmtlclByb2Nlc3NDb3VudCk7CiAgICAgW1tjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3Rv
cmVdIHJlbW92ZURhdGFPZlR5cGVzOltXS1dlYnNpdGVEYXRhU3RvcmUgYWxsV2Vic2l0ZURhdGFU
eXBlc10gbW9kaWZpZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQYXN0XSBjb21wbGV0aW9uSGFuZGxl
cjpeKCkgewogICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9XTsKQEAgLTE2MTgsMjEgKzE2MTYs
MzUgQEAgc3RhdGljIHNpemVfdCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2VzcwogICAgIHJldHVy
biB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3Vu
dElnbm9yaW5nUHJld2FybWVkOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZkFuZElu
UHJvY2Vzc1NlcnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZlByb2Nlc3NT
ZXJ2aWNlV29ya2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyA9IHRydWU7CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVY
UEVDVF9FUSgxdSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RFU1QoU2Vydmlj
ZVdvcmtlcnMsIEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0Qmxh
bmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vz
cyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykp
OwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRp
bmdUaHJvdWdoU2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJs
YW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hPdXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewog
ICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9v
bCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNo
U2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGZp
cnN0TG9hZEFib3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0
QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7Cisg
ICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29s
IGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJz
dExvYWRBYm91dEJsYW5rKSk7CiB9CiAKQEAgLTE4NDcsOCArMTg1OSw4IEBAIFRFU1QoU2Vydmlj
ZVdvcmtlcnMsIFJlc3RvcmVGcm9tRGlza05vbkQKICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVs
dE1hbmFnZXJdIGNyZWF0ZURpcmVjdG9yeUF0VVJMOnN3REJQYXRoIHdpdGhJbnRlcm1lZGlhdGVE
aXJlY3RvcmllczpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfVFJV
RShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6c3dEQlBh
dGgucGF0aF0pOwogCi0gICAgLy8gV2UgcHJvdGVjdCB0aGUgcHJvY2VzcyBwb29sIHNvIHRoYXQg
aXQgb3V0bGl2ZXMgdGhlIFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgUmV0YWluUHRyPFdLUHJvY2Vz
c1Bvb2w+IHByb3RlY3RlZFByb2Nlc3NQb29sOworICAgIFJldGFpblB0cjxXS1dlYnNpdGVEYXRh
U3RvcmU+IHByb3RlY3RlZFdlYnNpdGVEYXRhU3RvcmU7CiAKICAgICBTZXJ2aWNlV29ya2VyVENQ
U2VydmVyIHNlcnZlcih7CiAgICAgICAgIHsgInRleHQvaHRtbCIsIG1haW5SZWdpc3RlcmluZ1dv
cmtlckJ5dGVzIH0sCkBAIC0xODcxLDYgKzE4ODMsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBS
ZXN0b3JlRnJvbURpc2tOb25ECiAKICAgICAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBj
b25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICAgICAgcHJvdGVjdGVkUHJv
Y2Vzc1Bvb2wgPSB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2w7CisgICAg
ICAgIHByb3RlY3RlZFdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRp
b24ud2Vic2l0ZURhdGFTdG9yZTsKIAogICAgICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpzZXJ2
ZXIucmVxdWVzdCgpXTsKIApAQCAtMTg4MCwxMyArMTg5MywxNSBAQCBURVNUKFNlcnZpY2VXb3Jr
ZXJzLCBSZXN0b3JlRnJvbURpc2tOb25ECiAgICAgICAgIFt3ZWJWaWV3LmdldCgpLmNvbmZpZ3Vy
YXRpb24ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzXTsKICAgICB9CiAKKyAg
ICAvLyBNYWtlIHVzIG1vcmUgbGlrZWx5IHRvIGxvc2UgYW55IHJhY2VzIHdpdGggc2VydmljZSB3
b3JrZXIgaW5pdGlhbGl6YXRpb24uCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxv
b3AoMTApOworICAgIHVzbGVlcCgxMDAwMCk7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3Bp
blJ1bkxvb3AoMTApOworCiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAgICAgICAgIGF1dG8gY29u
ZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0
XSk7CiAKLSAgICAgICAgYXV0byB3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IGFkb3B0
TlMoW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwotICAg
ICAgICB3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS5fc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeSA9IHN3REJQYXRoOwotICAgICAgICBhdXRvIG5vbkRlZmF1bHRE
YXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhD
b25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpXSk7Ci0gICAg
ICAgIGNvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSA9IG5vbkRlZmF1bHREYXRh
U3RvcmUuZ2V0KCk7CisgICAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9y
ZSA9IHByb3RlY3RlZFdlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7CiAKICAgICAgICAgYXV0byBtZXNz
YWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV01lc3NhZ2VIYW5kbGVyRm9yUmVzdG9yZUZyb21EaXNr
VGVzdCBhbGxvY10gaW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJQQVNTOiBSZWdpc3RyYXRpb24g
YWxyZWFkeSBoYXMgYW4gYWN0aXZlIHdvcmtlciJdKTsKICAgICAgICAgW1tjb25maWd1cmF0aW9u
IHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhh
bmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07CkBAIC0xOTQ0LDExICsxOTU5LDExIEBAIFRFU1QoU2Vy
dmljZVdvcmtlcnMsIFN1c3BlbmROZXR3b3JrUHJvY2UKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNG
aWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRo
XSk7CiAKLSAgICBbIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2Vu
ZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbd2ViVmlldy5nZXQo
KS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxT
dXNwZW5kSW1taW5lbnRseV07CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVm
YXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0aF0pOwogCi0gICAgWyB3
ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vz
c0RpZFJlc3VtZV07CisgICAgW3dlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0
YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgW3dlYlZpZXcgbG9h
ZFJlcXVlc3Q6c2VydmVyLnJlcXVlc3QoKV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tI
VFRQQ29va2llU3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQkocmV2aXNpb24gMjY3NTM2KQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDc5LDggKzQ3OSw2IEBAIC0gKHZvaWQpd2ViVmlldzooV0tX
ZWJWaWV3ICopd2ViVmlldyBydW4KIH0KIEBlbmQKIAotLy8gRklYTUU6IG9uIGlPUywgVUkgcHJv
Y2VzcyBzaG91bGQgYmUgdXNpbmcgdGhlIHNhbWUgY29va2llIGZpbGUgYXMgdGhlIG5ldHdvcmsg
cHJvY2VzcyBmb3IgZGVmYXVsdCBzZXNzaW9uLgotI2lmIFBMQVRGT1JNKE1BQykKIGVudW0gY2xh
c3MgU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgeyBObywgWWVzIH07CiB2b2lkIHJ1bldL
SFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3
YXJtaW5nIHNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nKQogewpAQCAtNTg5LDIwICs1ODcs
NjYgQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQbwogICAgIHJ1bldL
SFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3
YXJtaW5nOjpZZXMpOwogfQogCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCiBAaW50ZXJmYWNl
IENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVnYXRlPgor
LSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUw7CistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNz
YWdlOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0
ZQorQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgeworICAgIFJl
dGFpblB0cjxOU1N0cmluZz4gX21lc3NhZ2U7Cit9CisKIC0gKHZvaWQpd2ViVmlldzooV0tXZWJW
aWV3ICopd2ViVmlldyBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOihOU1N0cmlu
ZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBFWFBF
Q1RfU1RSRVEoIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIiwgbWVzc2FnZS5VVEY4U3Ry
aW5nKTsKKyAgICBfbWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgZmluaXNoZWQgPSB0cnVlOwogICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CisKKy0gKE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2UK
K3sKKyAgICB3aGlsZSAoIV9tZXNzYWdlKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpz
cGluUnVuTG9vcCgpOworICAgIHJldHVybiBfbWVzc2FnZS5hdXRvcmVsZWFzZSgpOworfQorCist
IChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTAoreworICAgIHJldHVybiBAIjxzY3JpcHQ+dmFy
IGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkg
PCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50cmltKCk7
IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsK
K30KKwogQGVuZAogCitURVNUKFdlYktpdCwgV0tIVFRQQ29va2llU3RvcmVNdWx0aXBsZVZpZXdz
KQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcxID0gW1tUZXN0V0tXZWJWaWV3IG5ld10g
YXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MSBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6
QCJzdGFydCBuZXR3b3JrIHByb2Nlc3MiXTsKKworICAgIE5TSFRUUENvb2tpZSAqc2Vzc2lvbkNv
b2tpZSA9IFtOU0hUVFBDb29raWUgY29va2llV2l0aFByb3BlcnRpZXM6QHsKKyAgICAgICAgTlNI
VFRQQ29va2llUGF0aDogQCIvIiwKKyAgICAgICAgTlNIVFRQQ29va2llTmFtZTogQCJTZXNzaW9u
Q29va2llTmFtZSIsCisgICAgICAgIE5TSFRUUENvb2tpZVZhbHVlOiBAIkNvb2tpZVZhbHVlIiwK
KyAgICAgICAgTlNIVFRQQ29va2llRG9tYWluOiBAIjEyNy4wLjAuMSIsCisgICAgfV07CisKKyAg
ICBfX2Jsb2NrIGJvb2wgc2V0Q29va2llRG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3MS5jb25m
aWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUuaHR0cENvb2tpZVN0b3JlIHNldENvb2tpZTpzZXNz
aW9uQ29va2llIGNvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIHNldENvb2tpZURvbmUgPSB0
cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmc2V0Q29va2llRG9u
ZSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbQ2hlY2tTZXNzaW9uQ29va2llVUlE
ZWxlZ2F0ZSBuZXddKTsKKyAgICBbd2ViVmlldzEgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQo
KV07CisKKyAgICBbd2ViVmlldzEgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2ll
SFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07
CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9u
Q29va2llTmFtZT1Db29raWVWYWx1ZSIpOworCisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzIg
PSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcyIHNldFVJ
RGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3MiBsb2FkSFRNTFN0cmluZzpb
ZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAi
aHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRG
b3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7Cit9CisKIFRFU1Qo
V0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Npb24pCiB7
CiAgICAgUmV0YWluUHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4gZXBoZW1lcmFsU3RvcmVXaXRoQ29v
a2llcyA9IFtXS1dlYnNpdGVEYXRhU3RvcmUgbm9uUGVyc2lzdGVudERhdGFTdG9yZV07CkBAIC02
MjcsOSArNjcxLDggQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQbwog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOwogICAgIGZpbmlzaGVkID0g
ZmFsc2U7CiAgICAgCi0gICAgTlNTdHJpbmcgKmFsZXJ0Q29va2llSFRNTCA9IEAiPHNjcmlwdD52
YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsg
aSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0o
KTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4i
OwotICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOmFsZXJ0Q29va2llSFRNTCBiYXNlVVJMOltO
U1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKLSAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzpb
ZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAi
aHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRG
b3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CiB9CiAKIHN0YXRp
YyBib29sIGFyZUNvb2tpZXNFcXVhbChOU0hUVFBDb29raWUgKmZpcnN0LCBOU0hUVFBDb29raWUg
KnNlY29uZCkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tV
UkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tCShyZXZpc2lv
biAyNjc1MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJM
U2NoZW1lSGFuZGxlci1sZWFrcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAog
I2ltcG9ydCA8V2ViS2l0L1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0xNTIsNyArMTUzLDcgQEAgVEVTVChVUkxTY2hl
bWVIYW5kbGVyLCBMZWFrczMpCiAKICAgICBydW5VbnRpbFRhc2tzSW5GbGlnaHQoMik7CiAKLSAg
ICBbd2ViVmlldzEuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3MS5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVE
YXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJ1blVudGlsVGFza3NJ
bkZsaWdodCgwKTsKIH0KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhz
Lm1tCShyZXZpc2lvbiAyNjc1MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjQ0LDcgKzI0NCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXQK
ICAgICAvLyBOb3csIHdpdGggYnJhbmQgbmV3IFdLV2Vic2l0ZURhdGFTdG9yZXMgcG9pbnRpbmcg
YXQgdGhlIHNhbWUgY3VzdG9tIGNvb2tpZSBzdG9yYWdlIGxvY2F0aW9uLAogICAgIC8vIGluIG5l
d2x5IGZpcmVkIHVwIE5ldHdvcmtQcm9jZXNzZXMsIHZlcmlmeSB0aGF0IHRoZSBmZXRjaCBhbmQg
ZGVsZXRlIEFQSXMgd29yayBhcyBleHBlY3RlZC4KIAotICAgIFtwcm9jZXNzUG9vbCBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtkYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKICAgICBhdXRvIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVE
YXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0ZURhdGFTdG9yZUNv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21EYXRhU3RvcmUgZmV0Y2hEYXRh
UmVjb3Jkc09mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldLV2Vic2l0ZURhdGFUeXBlQ29v
a2llcywgbmlsXSBjb21wbGV0aW9uSGFuZGxlcjpeKE5TQXJyYXk8V0tXZWJzaXRlRGF0YVJlY29y
ZCAqPiAqIHJlY29yZHMpIHsKQEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0aWMgdm9pZCBydW5XZWJz
aXRlRGF0YVN0b3JlQ3VzdG9tUGF0CiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwog
Ci0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2RhdGFT
dG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIG5ld0N1c3RvbURhdGFTdG9yZSA9
IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRp
b246d2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIFtuZXdDdXN0
b21EYXRhU3RvcmUgcmVtb3ZlRGF0YU9mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldLV2Vi
c2l0ZURhdGFUeXBlQ29va2llcywgbmlsXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBh
c3RdIGNvbXBsZXRpb25IYW5kbGVyOl4gewpAQCAtMzg1LDExICszODUsMTAgQEAgVEVTVChXZWJL
aXQsIEN1c3RvbURhdGFTdG9yZURlc3Ryb3lXaGlsZQogCiAgICAgICAgIC8vIFRlcm1pbmF0ZSB0
aGUgbmV0d29yayBwcm9jZXNzIHdoaWxlIGEgcXVlcnkgaXMgcGVuZGluZy4KICAgICAgICAgYXV0
byogYWxsUHJvY2Vzc1Bvb2xzID0gW1dLUHJvY2Vzc1Bvb2wgX2FsbFByb2Nlc3NQb29sc0ZvclRl
c3RpbmddOwotICAgICAgICBBU1NFUlRfRVEoMVUsIFthbGxQcm9jZXNzUG9vbHMgY291bnRdKTsK
LSAgICAgICAgYXV0byogcHJvY2Vzc1Bvb2wgPSBhbGxQcm9jZXNzUG9vbHNbMF07Ci0gICAgICAg
IHdoaWxlICghW3Byb2Nlc3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKQorICAgICAg
ICBBU1NFUlRfRVEoMFUsIFthbGxQcm9jZXNzUG9vbHMgY291bnRdKTsKKyAgICAgICAgd2hpbGUg
KCFbZGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKQogICAgICAgICAgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6c2xlZXAoMC4wMSk7Ci0gICAgICAgIGtpbGwoW3Byb2Nlc3NQb29s
IF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCBTSUdLSUxMKTsKKyAgICAgICAga2lsbChbZGF0
YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCBTSUdLSUxMKTsKICAgICAgICAgYWxs
UHJvY2Vzc1Bvb2xzID0gbmlsOwogICAgICAgICBkYXRhU3RvcmUgPSBuaWw7CiAgICAgfQpAQCAt
NDY1LDcgKzQ2NCw5IEBAIFRFU1QoV2ViS2l0LCBBbHRlcm5hdGl2ZVNlcnZpY2VzRGVmYXVsdEQK
ICAgICAKICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzZXRPYmpl
Y3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5OmtleV07CiAKLSAgICBUZXN0
V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRdIGF1dG9y
ZWxlYXNlXTsKKyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1tX
S1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGNvbmZpZ3VyYXRp
b24ud2Vic2l0ZURhdGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRX
aXRoQ29uZmlndXJhdGlvbjpbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxv
Y10gaW5pdF0gYXV0b3JlbGVhc2VdXSBhdXRvcmVsZWFzZV07CisgICAgVGVzdFdLV2ViVmlldyAq
d2ViVmlldzIgPSBbW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJl
Y3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0gYXV0b3JlbGVh
c2VdOwogICAgIFt3ZWJWaWV3MiBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCJzdGFydCBh
dXhpbGlhcnkgcHJvY2Vzc2VzIiBiYXNlVVJMOm5pbF07CiAKICAgICBFWFBFQ1RfVFJVRShbW05T
RmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6ZGVmYXVsdERpcmVj
dG9yeS5wYXRoXSk7CkBAIC01MzksNyArNTQwLDcgQEAgVEVTVChXZWJLaXQsIERvTG9hZFdpdGhO
b25EZWZhdWx0RGF0YVN0bwogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3Ao
MSk7CiAKLSAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgcmVxdWVzdCA9
IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxG
b3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6
QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpy
ZXF1ZXN0XTsKQEAgLTg1Nyw3ICs4NTgsNyBAQCBURVNUKFdlYktpdCwgTWVkaWFDYWNoZSkKICAg
ICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwogCiAgICAgZG9uZSA9IHRydWU7Ci0gICAgW1t3ZWJWaWV3
IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107Cisg
ICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKIAogICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRQYXRoOnBhdGgg
ZXJyb3I6JmVycm9yXTsKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwpJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVByb3Rv
Y29sc1Rlc3QubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0T2JqQy9DdXN0b21Qcm90b2NvbHNUZXN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw2ICszNCw4IEBACiAjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKICNpbXBvcnQgPFdlYktpdC9X
S0NvbnRleHRQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzR3JvdXBQcml2YXRl
Lmg+CisjaW1wb3J0IDxXZWJLaXQvV0tWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dL
V2Vic2l0ZURhdGFTdG9yZVJlZi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBzdGF0
aWMgYm9vbCB0ZXN0RmluaXNoZWQ7CkBAIC03Miw2ICs3NCw4IEBAIHN0YXRpYyBXS1Byb2Nlc3NH
cm91cCAqcHJvY2Vzc0dyb3VwKCkKICAgICByZXR1cm4gcHJvY2Vzc0dyb3VwOwogfQogCitzdGF0
aWMgUmV0YWluUHRyPFdLVmlldz4gd2tWaWV3OworCiBAaW50ZXJmYWNlIENsb3NlV2hpbGVTdGFy
dGluZ1Byb3RvY29sIDogVGVzdFByb3RvY29sCiBAZW5kCiAKQEAgLTg5LDcgKzkzLDcgQEAgLSAo
dm9pZClzdGFydExvYWRpbmcKICAgICAgICAgfTsKICAgICAgICAgV0tDb250ZXh0U2V0Q2xpZW50
KFtwcm9jZXNzR3JvdXAoKSBfY29udGV4dFJlZl0sICZjbGllbnQuYmFzZSk7CiAKLSAgICAgICAg
a2lsbChXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoW3Byb2Nlc3NHcm91cCgp
IF9jb250ZXh0UmVmXSksIFNJR0tJTEwpOworICAgICAgICBraWxsKFdLV2Vic2l0ZURhdGFTdG9y
ZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihXS1BhZ2VHZXRXZWJzaXRlRGF0YVN0b3JlKFt3
a1ZpZXcgcGFnZVJlZl0pKSwgU0lHS0lMTCk7CiAgICAgICAgIFtzZWxmLmNsaWVudCBVUkxQcm90
b2NvbDpzZWxmIGRpZEZhaWxXaXRoRXJyb3I6W05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOk5TQ29j
b2FFcnJvckRvbWFpbiBjb2RlOjAgdXNlckluZm86bmlsXV07CiAgICAgfSk7CiB9CkBAIC0xNDIs
NyArMTQ2LDcgQEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogc3RhdGljIHZvaWQgcnVuVGVz
dCgpCiB7CiAgICAgUmV0YWluUHRyPFdLQnJvd3NpbmdDb250ZXh0R3JvdXA+IGJyb3dzaW5nQ29u
dGV4dEdyb3VwID0gYWRvcHROUyhbW1dLQnJvd3NpbmdDb250ZXh0R3JvdXAgYWxsb2NdIGluaXRX
aXRoSWRlbnRpZmllcjpAIlRlc3RJZGVudGlmaWVyIl0pOwotICAgIFJldGFpblB0cjxXS1ZpZXc+
IHdrVmlldyA9IGFkb3B0TlMoW1tXS1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVj
dCgwLCAwLCA4MDAsIDYwMCkgcHJvY2Vzc0dyb3VwOnByb2Nlc3NHcm91cCgpIGJyb3dzaW5nQ29u
dGV4dEdyb3VwOmJyb3dzaW5nQ29udGV4dEdyb3VwLmdldCgpXSk7CisgICAgd2tWaWV3ID0gYWRv
cHROUyhbW1dLVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwg
NjAwKSBwcm9jZXNzR3JvdXA6cHJvY2Vzc0dyb3VwKCkgYnJvd3NpbmdDb250ZXh0R3JvdXA6YnJv
d3NpbmdDb250ZXh0R3JvdXAuZ2V0KCldKTsKICAgICBSZXRhaW5QdHI8Q3VzdG9tUHJvdG9jb2xz
TG9hZERlbGVnYXRlPiBsb2FkRGVsZWdhdGUgPSBhZG9wdE5TKFtbQ3VzdG9tUHJvdG9jb2xzTG9h
ZERlbGVnYXRlIGFsbG9jXSBpbml0XSk7CiAgICAgW3drVmlldyBicm93c2luZ0NvbnRleHRDb250
cm9sbGVyXS5sb2FkRGVsZWdhdGUgPSBsb2FkRGVsZWdhdGUuZ2V0KCk7CiAgICAgW1t3a1ZpZXcg
YnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcl0gbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1
ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIiVAOi8vcmVkaXJlY3Q/dGVzdCIsIFtUZXN0UHJvdG9jb2wgc2NoZW1lXV1dXV07CkluZGV4
OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjY3
NTM2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNjIsOCArMTA2Miw2IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0
U3RhdGVUb0NvbnNpc3QKIAogICAgIHJlc2V0UXVvdGEoKTsKIAotICAgIFdLQ29udGV4dFNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcocGxhdGZvcm1Db250
ZXh0KCksIHRydWUpOwotCiAgICAgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZv
clRlc3RpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSk7CiAKICAgICBX
S0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5jb250ZXh0KCksIGZhbHNlKTsKQEAgLTEyMzgsNyArMTIzNiw3IEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OmZpbmRBbmREdW1wV2ViS2l0UHIKICAgICBkdW1wUmVzcG9uc2Uo
bWFrZVN0cmluZyhUZXN0Q29udHJvbGxlcjo6d2ViUHJvY2Vzc05hbWUoKSwgIjogIiwKICAgICAg
ICAgV0tQYWdlR2V0UHJvY2Vzc0lkZW50aWZpZXIoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
Lm1haW5XZWJWaWV3KCktPnBhZ2UoKSksICdcbicsCiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpu
ZXR3b3JrUHJvY2Vzc05hbWUoKSwgIjogIiwKLSAgICAgICAgV0tDb250ZXh0R2V0TmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyKG1fY29udGV4dC5nZXQoKSksICdcbicpKTsKKyAgICAgICAgV0tXZWJz
aXRlRGF0YVN0b3JlR2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKHdlYnNpdGVEYXRhU3RvcmUo
KSksICdcbicpKTsKICNlbHNlCiAgICAgZHVtcFJlc3BvbnNlKCJcbiJfcyk7CiAjZW5kaWYKQEAg
LTIyOTgsNyArMjI5Niw3IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdENvbnRyb2xsZXI6
OmcKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6bmV0d29ya1Byb2Nlc3NEaWRDcmFzaCgpCiB7Ci0g
ICAgcGlkX3QgcGlkID0gV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKG1fY29u
dGV4dC5nZXQoKSk7CisgICAgcGlkX3QgcGlkID0gV0tXZWJzaXRlRGF0YVN0b3JlR2V0TmV0d29y
a1Byb2Nlc3NJZGVudGlmaWVyKHdlYnNpdGVEYXRhU3RvcmUoKSk7CiAgICAgZnByaW50ZihzdGRl
cnIsICIjQ1JBU0hFRCAtICVzIChwaWQgJWxkKVxuIiwgbmV0d29ya1Byb2Nlc3NOYW1lKCksIHN0
YXRpY19jYXN0PGxvbmc+KHBpZCkpOwogICAgIGV4aXQoMSk7CiB9CkBAIC0zMTM3LDcgKzMxMzUs
NyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRJZ25vcmVzVmlld3BvcnRTCiAKIHZvaWQgVGVz
dENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKLSAgICBXS0NvbnRleHRU
ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgV0tXZWJzaXRl
RGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3Mod2Vic2l0ZURhdGFTdG9yZSgpKTsKIH0K
IAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdvcmtlcnMoKQpAQCAtMzE2
OCw5ICszMTY2LDggQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcgog
ICAgIHJldHVybiBuZXcgUGxhdGZvcm1XZWJWaWV3KGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpOwog
fQogCi1XS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChX
S0NvbnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBjb250ZXh0Q29u
ZmlndXJhdGlvbikKK1dLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RD
b250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmKQog
ewotICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKGNvbnRleHQsIGRlZmF1
bHRXZWJzaXRlRGF0YVN0b3JlKCkpOwogICAgIHJldHVybiBjb250ZXh0OwogfQogCg==
</data>
<flag name="commit-queue"
          id="425362"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409603</attachid>
            <date>2020-09-24 11:11:59 -0700</date>
            <delta_ts>2020-09-24 11:18:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200924111158.patch</filename>
            <type>text/plain</type>
            <size>353152</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxOCBAQAorMjAyMC0wOS0yNCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgTmV0d29y
a1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgZnJvbSBXZWJQcm9jZXNzUG9vbCB0byBXZWJzaXRlRGF0
YVN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTYwNDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIG1vdmVzIHRoZSB0aGluZ3Mgb24gV2ViUHJvY2Vzc1Bvb2wgYXNzb2NpYXRlZCB3
aXRoIE5ldHdvcmtQcm9jZXNzUHJveHkgb3duZXJzaGlwIGFuZCBtb3ZlcyB0aGVtCisgICAgICAg
IHRvIFdlYnNpdGVEYXRhU3RvcmUuICBJdCdzIHByZXR0eSBtZWNoYW5pY2FsLCBidXQgaXQgcmVh
Y2hlcyBpdHMgZmluZ2VycyBpbnRvIGEgbG90IG9mIHRoaW5ncy4gIFNvbWUgY29tbWVudHMKKyAg
ICAgICAgb24gaW50ZXJlc3RpbmcgcGFydHMgYXJlIGJlbG93LgorCisgICAgICAgIFdoeSBhbSBJ
IGRvaW5nIHRoaXM/ICBJJ20gZ2xhZCB5b3UgYXNrZWQuCisKKyAgICAgICAgV0tXZWJWaWV3IGhh
ZCBhIGZ1bmRhbWVudGFsIGNvb2tpZSBwcm9ibGVtIGJlZm9yZSB0aGlzIGNoYW5nZS4gIEl0IGhh
ZCBhIFdLV2Vic2l0ZURhdGFTdG9yZSB0aGF0IGNvdWxkIHBvaW50IHRvIGEgY29va2llIHN0b3Jl
IG9uIGRpc2sKKyAgICAgICAgdGhhdCBjb3VsZCBiZSB1c2VkIGluIG11bHRpcGxlIG5ldHdvcmsg
cHJvY2Vzc2VzIGF0IHRoZSBzYW1lIHRpbWUuICBUaGlzIGxlZCB0byBwcm9ibGVtcyB3aXRoIGNv
b2tpZXMgYmVpbmcgcmVjZWl2ZWQgb3ZlciB0aGUgbmV0d29yaworICAgICAgICBpbiB0aG9zZSBk
aWZmZXJlbnQgcHJvY2Vzc2VzIGJlaW5nIHVuYWJsZSB0byBiZSBzaGFyZWQgdW50aWwgdGhleSB3
ZXJlIHdyaXR0ZW4gdG8gZGlzaywgc29tZXRoaW5nIHRoYXQgZG9lcyBub3QgaGFwcGVuIGltbWVk
aWF0ZWx5LCBlc3BlY2lhbGx5CisgICAgICAgIG9uIGlPUy4gIFRoaXMgcHJvYmxlbSBpcyBldmVu
IHdvcnNlIHdpdGggc2Vzc2lvbiBjb29raWVzLCB3aGljaCBzaG91bGQgYmUga2VwdCBpbiBtZW1v
cnkgYW5kIG5ldmVyIGJlIHdyaXR0ZW4gdG8gZGlzay4gIFRob3NlIHByb2Nlc3NlcworICAgICAg
ICBkaWQgbm90IHVzZSBzaGFyZWQgbWVtb3J5IHRvIHNoYXJlIHRoZSBjb29raWVzLiAgVGhleSBq
dXN0IGRpZG4ndCBzaGFyZSB0aGVtLCB3aGljaCBsZWQgdG8gY29va2llIGluY29ycmVjdG5lc3Mu
ICBUaGlzIHdhcyB1bmZvcnR1bmF0ZWx5CisgICAgICAgIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRp
b24gaWYgeW91IGNhbGwgW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRdIG1vcmUgdGhhbiBvbmNlLCB3
aGljaCBtYW55IGRldmVsb3BlcnMgZG8uICBUaGVyZSB3YXMgYWxzbyBvY2Nhc2lvbmFsIGNvb2tp
ZQorICAgICAgICBjb3JydXB0aW9uIGFuZCBsb3NzIGZyb20gbXVsdGlwbGUgcHJvY2Vzc2VzIHdy
aXRpbmcgY29va2llcyB0byB0aGUgc2FtZSBmaWxlLiAgQWxsIHRoZXNlIHByb2JsZW1zIGNhbiBi
ZSB3b3JrZWQgYXJvdW5kIGJ5IGRvaW5nIHdoYXQgU2FmYXJpIGRvZXM6CisgICAgICAgIG1hbnVh
bGx5IHNldHRpbmcgdGhlIFdLUHJvY2Vzc1Bvb2wgb2YgYWxsIFdLV2ViVmlld0NvbmZpZ3VyYXRp
b25zIHRvIHRoZSBzYW1lIHByb2Nlc3MgcG9vbCB0byBvbmx5IHVzZSBvbmUgbmV0d29yayBwcm9j
ZXNzLiAgVGhpcyBpcyBub3QgaW50dWl0aXZlCisgICAgICAgIG9yIHdlbGwgZG9jdW1lbnRlZCwg
YW5kIGV2ZW4gdGhvdWdoIEkgaGF2ZSBzcGVudCB0aGUgbWFqb3JpdHkgb2YgV1dEQyBsYWJzIGZv
ciB0aGUgbGFzdCAzIHllYXJzIHRlbGxpbmcgZGV2ZWxvcGVycyB0byBkbyBpdCwgbW9zdCBkZXZl
bG9wZXJzIGRvIG5vdC4KKyAgICAgICAgVGhlIGRlZmF1bHQgYmVoYXZpb3Igc2hvdWxkIG5vdCBs
ZWFkIHRvIGNvb2tpZSBpbmNvcnJlY3RuZXNzLCBjb3JydXB0aW9uLCBvciBsb3NzLiAgVGhpcyBh
Y2NvbXBsaXNoZXMgdGhhdC4KKworICAgICAgICBBIGJpZ2dlciBwcm9ibGVtIHRoYXQgY2FuJ3Qg
cmVhbGx5IGJlIHdvcmtlZCBhcm91bmQgd2VsbCBpcyB3aGF0IHdlIHdlcmUgZG9pbmcgaW4gb3Vy
IFdLSFRUUENvb2tpZVN0b3JlIEFQSS4gIE1hbnkgZGV2ZWxvcGVycyBjYWxsIHNldENvb2tpZTpj
b21wbGV0aW9uSGFuZGxlcjoKKyAgICAgICAgdG8gImxvZyBpbiIgdGhlIHVzZXIgYnkgc2V0dGlu
ZyBhIGNvb2tpZSwgdGhlbiBpbiB0aGUgY29tcGxldGlvbiBoYW5kbGVyLCB0aGV5IG9wZW4gYSBX
S1dlYlZpZXcgdG8gdGhlaXIgcGFnZSBhbmQgZXhwZWN0IHRoZSBjb29raWUgdG8gYmUgc2VudC4g
IEJlZm9yZSB0aGlzCisgICAgICAgIGNoYW5nZSwgd2Ugd291bGQgbm90IGtub3cgd2hpY2ggcHJv
Y2VzcyBwb29sIHRvIHNldCB0aGUgY29va2llIGluIHNvIHdlIHdvdWxkIGd1ZXNzLiAgSWYgdGhl
cmUgd2VyZSBubyBwcm9jZXNzIHBvb2xzLCB3ZSB3b3VsZCBzdGFydCB3cml0aW5nIHRvIGRpc2sg
YW5kIGhvcGUKKyAgICAgICAgaXQgd3JpdGVzIGZhc3QgZW5vdWdoLiAgV2UgY2FuJ3Qgd2FpdCBm
b3IgaXQgdG8gY29tcGxldGUgYmVjYXVzZSBpdCBjYXVzZXMgaGFuZ3MgbGlrZSByZGFyOi8vcHJv
YmxlbS82Njk2MTA2Ni4gIFRoaXMgc29sdXRpb24gYWxsb3dzIHRvIHN0YXJ0IHRoZSBuZXR3b3Jr
CisgICAgICAgIHByb2Nlc3Mgb2YgdGhhdCBXZWJzaXRlRGF0YVN0b3JlIGFuZCBzZXQgdGhlIGNv
b2tpZSBpbiB0aGF0IHByb2Nlc3MuICBXZSBub3cga25vdyB0aGF0IGlzIHRoZSBvbmx5IHByb2Nl
c3MgdGhpcyBXZWJzaXRlRGF0YVN0b3JlIHdpbGwgZXZlciB1c2UuICBOb3csIHVzZXJzCisgICAg
ICAgIHdpbGwgYmUgYWJsZSB0byBhY3R1YWxseSBiZSBsb2dnZWQgaW4gYWxsIHRoZSB0aW1lIGlu
IHN1Y2ggYXBwcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2ll
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBD
b29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29r
aWVzL1dlYkNvb2tpZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVz
L1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9X
ZWJDb29raWVNYW5hZ2VyU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURh
dGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3Nl
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1t
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6OnNhdmVDb29raWVzKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFT
dG9yZVNlc3Npb24pOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nl
c3NTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBQbGF0
Zm9ybS9JUEMvQXR0YWNobWVudC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAg
ICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQ
STo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0
b3JlOjpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRD
b29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAg
ICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRp
b25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVy
Rm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFT
dG9yZSk6CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtl
clRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1By
b2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZUdldFdlYnNpdGVE
YXRhU3RvcmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdLV2Vi
c2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBf
c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczpdKToKKyAgICAgICAgKC1bV0tQcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1By
ZXBhcmVUb1N1c3BlbmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3Nl
bmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tQcm9jZXNzUG9vbCBfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tQcm9jZXNzUG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6
XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29s
UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0
b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9y
ZSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpdKToKKyAgICAgICAgKC1bV0tX
ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHld
KToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRS
ZXN1bWVdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBwSXNC
YWNrZ3JvdW5kOl0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9j
ZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoK1tXS1dlYnNpdGVEYXRhU3RvcmUgX21ha2VOZXh0
TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZ10pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKF9XZWJLaXRD
b29raWVNYW5hZ2VyUHJpdmF0ZTo6Y29va2llTWFuYWdlciBjb25zdCk6CisgICAgICAgIChfV2Vi
S2l0Q29va2llTWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUpOgor
ICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfY29v
a2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRfY29v
a2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdl
cl9hZGRfY29va2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2ll
cyk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAo
d2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4
dF9wcmVmZXRjaF9kbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246
OmFkZFNpbmdsZUNvb2tpZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9u
OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vz
c1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9v
bENvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vz
c1N1cHByZXNzaW9uU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxh
dGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRm
b3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnhwY0VuZHBvaW50TWVzc2FnZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29y
a1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6cHVi
bGlzaFByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94
eTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGVj
aWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyk6CisgICAgICAgICogVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5k
KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktp
dDo6ZGVmYXVsdFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkZWZhdWx0TmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5Ojp0ZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWRUZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
ZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6YW55
UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkpOgorICAgICAgICAoV2Vi
S2l0OjphbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRp
b25zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxv
YWRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQ
cm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRp
ZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGlkQ2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0
Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNz
UG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9j
ZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENF
dmVudCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFu
YWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2Vi
Q29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5j
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9w
T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xE
ZXN0cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJF
bnRpdGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVj
b25uZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRG
b3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJl
ZEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3Rv
Y29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vz
c1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29s
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFT
dG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdD
b250ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xv
YmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3Nlcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9u
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdl
SUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3Vu
ZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdv
cmtQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgVGhlcmUgc2VlbXMgdG8gYmUgYSBsb3Qgb2Yg
Y29kZSByZW1vdmFsIGhlcmUsIGJ1dCBtb3N0IG9mIGl0IHdhcyBkdXBsaWNhdGUgY29kZSB3aXRo
CisgICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMgd2hpY2ggaXMgdXNlZCBpbnN0
ZWFkLiAgVGhhdCB3aGljaCB3YXMgbm90IGR1cGxpY2F0ZSB3YXMKKyAgICAgICAgbW92ZWQgdG8g
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcy4g
IFRoaXMgd2FzIHRoZSBoYXJkZXN0IHBhcnQgb2YgdGhpcyBwYXRjaC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1By
b2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHlGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpmbHVzaENvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1By
b2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpzZXRXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NY
UENFbmRwb2ludFRvV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXAp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZv
clNlc3Npb25JRCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nl
c3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFB
bmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGlt
ZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNl
dFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNl
TG9hZFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1By
ZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNH
cmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJl
dmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQ
cmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRh
UmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGlu
Z1RvKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1l
dGVyc1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnN1Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNj
aGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBk
YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0
aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRl
cmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25z
aGlwT25seUluRGF0YWJhc2VPbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0VXNlSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0Rl
Y29yYXRpb25Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1No
b3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQ
YXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJp
Y3RDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVz
dGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3Vy
Y2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFn
ZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnByb2Nlc3NQb29scyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9j
ZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VwaGVtZXJhbCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmZsdXNoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRl
RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vz
c2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBw
Qm91bmRTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2Fy
ZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVu
dGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6Om1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lv
bklEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vz
c1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphZGRQ
ZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5ldHdvcmtQcm94eVNl
dHRpbmdzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0
YVN0b3JlU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRm
b3JtU2V0TmV0d29ya1BhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKToK
KyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3Jz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRp
bmdzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uSW5mby5oOgorCiAyMDIwLTA5LTI0ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeCB0aGUgYnVpbGQgZm9yIHJlY2VudCBTREtz
LgpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNiArMTczLDcgQEAgTmV0
d29ya1Byb2Nlc3M6Ok5ldHdvcmtQcm9jZXNzKEF1eGlsaWFyeQogI2VuZGlmCiAKICNpZiBVU0Uo
U09VUCkKKyAgICAvLyBGSVhNRTogRG8gbm90IHVzZSB0aGUgZGVmYXVsdCBzZXNzaW9uIElELgog
ICAgIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFjY2Vz
c29yKFt0aGlzXSgpIC0+IFNvdXBTZXNzaW9uKiB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxOZXR3b3JrU2Vzc2lvblNvdXAmPigqbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSkpLnNvdXBTZXNzaW9uKCk7CiAgICAgfSk7CkBAIC0zNDcsMzAgKzM0
OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHIKIAogICAgIHNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRy
aWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwot
ICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBX
VEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVu
dGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdl
cihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3Jp
Z2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBl
clRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0K
LSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNz
aW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0j
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGJvb2wgc2VydmljZVdvcmtlclByb2Nlc3NU
ZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCA9IHRydWU7Ci0gICAgYWRkU2VydmljZVdvcmtlclNlc3Np
b24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc2VydmljZVdvcmtlclByb2Nl
c3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBtX3N0b3JhZ2VN
YW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAg
YXV0byogZGVmYXVsdFNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKTsKLSAgICBhdXRvKiBkZWZhdWx0U3RvcmFnZVNlc3Npb24gPSBkZWZh
dWx0U2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgZm9yIChjb25zdCBhdXRv
JiBjb29raWUgOiBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRpbmdD
b29raWVzKQotICAgICAgICBkZWZhdWx0U3RvcmFnZVNlc3Npb24tPnNldENvb2tpZShjb29raWUp
OwotCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkK
ICAgICAgICAgc3VwcGxlbWVudC0+aW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKIApAQCAtNTA1LDgg
KzQ4Miw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QKIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Np
b25JRCwgYm9vbCBzaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYg
aWRlbnRpZmllckJhc2UpCiAjZW5kaWYKIHsKLSAgICBBU1NFUlQoc2Vzc2lvbklEICE9IFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotCiAgICAgYXV0byBhZGRSZXN1bHQgPSBt
X25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMuYWRkKHNlc3Npb25JRCwgbnVsbHB0cik7CiAgICAgaWYg
KCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTIxLDcgKzQ5Niw3
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QKICAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllciA9IG1ha2VTdHJpbmcoaWRlbnRpZmllckJhc2Us
ICIuUHJpdmF0ZUJyb3dzaW5nLiIsIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSkuY3JlYXRl
Q0ZTdHJpbmcoKTsKICAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHN0
b3JhZ2VTZXNzaW9uID0gYWRvcHRDRihjcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oY2ZJZGVu
dGlmaWVyLmdldCgpKSk7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKHNlc3Npb25JRCAhPSBQQUw6
OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAgICBzdG9yYWdlU2Vzc2lvbiA9
IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlQ0ZTdG9yYWdlU2Vzc2lvbkZv
cklkZW50aWZpZXIoY2ZJZGVudGlmaWVyLmdldCgpKTsKIAogICAgIGlmIChOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OnByb2Nlc3NNYXlVc2VDb29raWVBUEkoKSkgewpAQCAtNTQ0LDIxICs1MTksMTEg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y29va2llQWNjZXB0UG9saWN5QwogCiBXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNzaW9uSUQg
PT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0dXJuICZk
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFnZVNlc3Np
b25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIGlm
ICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1bHROZXR3
b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigp
OwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQotCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0
aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9yKQogewot
ICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0byYgc3Rv
cmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAgICAgICAg
IGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMTcwLDcgKzE3MCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZm9yRWFjaE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYpPiYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5ld1Rlc3RpbmdTZXNz
aW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJik7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9p
ZCBlbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgYm9vbCBzaG91bGRVc2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYpOwpAQCAtMzc1LDcgKzM3NCw2IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSBjb25zdDsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNz
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKIApAQCAtNTQ0LDcgKzU0
Miw2IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiBtX25ldHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPj4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zOwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbV9kZWZhdWx0TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOwogCiAgICAgUmVmUHRyPFN0b3JhZ2VNYW5hZ2VyU2V0PiBtX3N0b3JhZ2VNYW5h
Z2VyU2V0OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNp
b24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDYgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZQogICAgIGVuY29kZXIgPDwg
dWlQcm9jZXNzU0RLVmVyc2lvbjsKICAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBuZXR3b3JrQVRT
Q29udGV4dC5nZXQoKSk7CiAjZW5kaWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzOwogI2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIgPDwgY29va2llQWNjZXB0UG9s
aWN5OwogICAgIGVuY29kZXIgPDwgbGFuZ3VhZ2VzOwpAQCAtNjYsOSArNjUsNiBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplCiAgICAgZW5jb2RlciA8PCB1cmxTY2hl
bWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgZW5jb2RlciA8
PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxkRGlzYWJsZVNlcnZpY2VX
b3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAgIGVuY29kZXIgPDwgc2hv
dWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFibGVBZENsaWNrQXR0cmli
dXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTQsMTIgKzExMCw2IEBAIGJvb2wgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnM6OmQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAK
LSAgICBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnM7Ci0gICAgZGVjb2RlciA+PiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsK
LSAgICBpZiAoIWRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOwotCiAjaWYgVVNFKFNPVVApCiAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQuY29va2llQWNjZXB0UG9saWN5KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTM2LDIwICsxMjYsNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzOjpkCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsU2NoZW1lc1JlZ2lz
dGVyZWRBc05vQWNjZXNzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0jaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBzZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIXNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXN1bHQuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
c2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiQ2FjaGVN
b2RlbC5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llLmg+CiAjaW5j
bHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTcwLDgg
KzY5LDYgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIAogICAgIFJl
dGFpblB0cjxDRkRhdGFSZWY+IG5ldHdvcmtBVFNDb250ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycyBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICAK
ICNpZiBVU0UoU09VUCkKICAgICBXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IGNvb2tp
ZUFjY2VwdFBvbGljeSB7IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k6OkFsd2F5c0Fj
Y2VwdCB9OwogICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlczsKQEAgLTgyLDEyICs3OSw3IEBA
IHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyAKICAgICBWZWN0b3I8U3Ry
aW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQotICAgIFN0cmluZyBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5OwotICAgIFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlOwotICAgIGJvb2wgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzVGVybWluYXRpb25EZWxheSB7IGZhbHNlIH07Ci0jZW5kaWYKLSAgICBib29sIHNob3VsZEVu
YWJsZUlUUERhdGFiYXNlIHsgZmFsc2UgfTsKKyAgICBib29sIHNob3VsZEVuYWJsZUlUUERhdGFi
YXNlIHsgdHJ1ZSB9OwogICAgIGJvb2wgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2Rl
IHsgZmFsc2UgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29v
a2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAJKHJldmlzaW9uIDI2NzUz
NikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5h
Z2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIldlYkNv
cmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Db29raWVTdG9yYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVFRQQ29va2ll
QWNjZXB0UG9saWN5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24u
aD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KQEAg
LTE0MywxNSArMTQ0LDE4IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6c3RvcE9ic2VydmluZ0Nv
b2sKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhU
VFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSk7Ci0gICAgbV9wcm9jZXNzLmNvb2tpZUFjY2VwdFBvbGljeUNoYW5nZWQocG9s
aWN5KTsKLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgcGxhdGZvcm1TZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KHBvbGljeSwgW3BvbGljeSwgcHJvY2VzcyA9IG1ha2VSZWYobV9wcm9j
ZXNzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
bXV0YWJsZSB7CisgICAgICAgIHByb2Nlc3MtPmNvb2tpZUFjY2VwdFBvbGljeUNoYW5nZWQocG9s
aWN5KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9KTsKIH0KIAotdm9pZCBX
ZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2
b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1f
cHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7Cisg
ICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKHNl
c3Npb25JRCkpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5jb29r
aWVBY2NlcHRQb2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihI
VFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1h
bmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tp
ZXMvV2ViQ29va2llTWFuYWdlci5oCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAiU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
VHlwZS5oIgogI2VuZGlmCiAKK09CSkNfQ0xBU1MgTlNIVFRQQ29va2llU3RvcmFnZTsKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IENvb2tpZTsKIGVudW0gY2xhc3MgSFRUUENvb2tpZUFj
Y2VwdFBvbGljeSA6IHVpbnQ4X3Q7CkBAIC03OSw4ICs4MSw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBnZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmKTsKICAgICB2b2lkIGdldENvb2tpZXMoUEFMOjpT
ZXNzaW9uSUQsIGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mJik+JiYpOwogCi0gICAgdm9pZCBwbGF0Zm9ybVNldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSk7Ci0gICAgdm9pZCBnZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SFRU
UENvb2tpZUFjY2VwdFBvbGljeSk+JiYpOworICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3ksIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBB
TDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkhUVFBDb29raWVB
Y2NlcHRQb2xpY3kpPiYmKTsKIAogICAgIHZvaWQgc3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2Vz
KFBBTDo6U2Vzc2lvbklEKTsKICAgICB2b2lkIHN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBB
TDo6U2Vzc2lvbklEKTsKQEAgLTg4LDQgKzkwLDggQEAgcHJpdmF0ZToKICAgICBOZXR3b3JrUHJv
Y2VzcyYgbV9wcm9jZXNzOwogfTsKIAorI2lmIFBMQVRGT1JNKENPQ09BKQordm9pZCBzYXZlQ29v
a2llcyhOU0hUVFBDb29raWVTdG9yYWdlICosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFu
YWdlci5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbWVzc2FnZXMgLT4gV2ViQ29va2llTWFuYWdlciBOb3RS
ZWZDb3VudAogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3luYwogCiAgICAgdm9pZCBT
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJDb3JlOjpIVFRQQ29va2ll
QWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lkIEdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQ
b2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRUUENv
b2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAgdm9pZCBTdGFydE9ic2Vy
dmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIHZvaWQgU3Rv
cE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFuYWdl
ckN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29v
a2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysg
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFuYWdl
ckN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotdm9pZCBXZWJDb29raWVNYW5hZ2Vy
OjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIENvb2tpZUFjY2VwdFBvbGlj
eSBjdXJsUG9saWN5ID0gQ29va2llQWNjZXB0UG9saWN5OjpPbmx5RnJvbU1haW5Eb2N1bWVudERv
bWFpbjsKICAgICBzd2l0Y2ggKHBvbGljeSkgewpAQCAtNTUsNiArNTUsNyBAQCB2b2lkIFdlYkNv
b2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvCiAgICAgbV9wcm9jZXNzLmZvckVhY2hOZXR3
b3JrU3RvcmFnZVNlc3Npb24oW2N1cmxQb2xpY3ldIChjb25zdCBhdXRvJiBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24pIHsKICAgICAgICAgbmV0d29ya1N0b3JhZ2VTZXNzaW9uLnNldENvb2tpZUFjY2Vw
dFBvbGljeShjdXJsUG9saWN5KTsKICAgICB9KTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcigpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ29va2llcy9tYWMvV2ViQ29va2llTWFuYWdlck1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJN
YWMubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9tYWMvV2ViQ29va2llTWFuYWdlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9IVFRQQ29va2llQWNjZXB0UG9saWN5Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9ydCA8cGFsL3Nw
aS9jZi9DRk5ldHdvcmtTUEkuaD4KKyNpbXBvcnQgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4K
ICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpA
QCAtNTMsMTUgKzU0LDE5IEBAIHN0YXRpYyBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5
IHQKICAgICByZXR1cm4gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeUFsd2F5czsKIH0K
IAotdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6
OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5
IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFj
Y2Vzc1Jhd0Nvb2tpZXMpKTsKIAorICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIFtb
TlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2llQWNj
ZXB0UG9saWN5OnN0YXRpY19jYXN0PE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeT4ocG9saWN5KV07
CisgICAgc2F2ZUNvb2tpZXMoW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0
b3JhZ2VdLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogCiAgICAgbV9wcm9jZXNzLmZvckVh
Y2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oWyZdIChjb25zdCBhdXRvJiBuZXR3b3JrU3RvcmFnZVNl
c3Npb24pIHsKICAgICAgICAgaWYgKGF1dG8gY29va2llU3RvcmFnZSA9IG5ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5jb29raWVTdG9yYWdlKCkpCiAgICAgICAgICAgICBDRkhUVFBDb29raWVTdG9yYWdl
U2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHRvQ0ZIVFRQQ29va2ll
U3RvcmFnZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKKyAgICAgICAgaWYgKGF1dG8gKnN0b3JhZ2Ug
PSBuZXR3b3JrU3RvcmFnZVNlc3Npb24ubnNDb29raWVTdG9yYWdlKCkpCisgICAgICAgICAgICBz
YXZlQ29va2llcyhzdG9yYWdlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0pOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJD
b29raWVNYW5hZ2VyU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCShyZXZpc2lvbiAy
Njc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJD
b29raWVNYW5hZ2VyU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDExICszNywxMiBAQAog
bmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotdm9pZCBXZWJD
b29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0
SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fcHJv
Y2Vzcy5mb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtwb2xpY3ldIChhdXRvJiBzZXNzaW9u
KSB7CiAgICAgICAgIHNlc3Npb24uc2V0Q29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7CiAgICAg
fSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUg
c3RvcmFnZVR5cGUpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3Jh
Z2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAJKHJldmlz
aW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9M
b2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw3ICsyMTQsOCBA
QCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpjbGVhcigpCiAKIHZvaWQgTG9jYWxTdG9yYWdl
RGF0YWJhc2U6OmNsb3NlKCkKIHsKLSAgICBBU1NFUlQoIW1faXNDbG9zZWQpOworICAgIGlmICht
X2lzQ2xvc2VkKQorICAgICAgICByZXR1cm47CiAgICAgbV9pc0Nsb3NlZCA9IHRydWU7CiAKICAg
ICBpZiAobV9kaWRTY2hlZHVsZURhdGFiYXNlVXBkYXRlKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29h
Lm1tCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nv
Y29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbXBvcnQgIk5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgogI2ltcG9ydCAiTmV0d29ya1Nl
c3Npb25Db2NvYS5oIgogI2ltcG9ydCAiU2FuZGJveEV4dGVuc2lvbi5oIgorI2ltcG9ydCAiV2Vi
Q29va2llTWFuYWdlci5oIgogI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24u
aD4KICNpbXBvcnQgPFdlYkNvcmUvUHVibGljU3VmZml4Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jl
c291cmNlUmVxdWVzdENGTmV0Lmg+CkBAIC03OCw5ICs3OSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVy
bWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5j
b250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRl
bnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9DRk5ldHdvcmtTZXRBVFNDb250ZXh0KHBh
cmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwpAQCAtMTA1LDExICsxMDMsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAgICAgW05TVVJMQ2FjaGUg
c2V0U2hhcmVkVVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1D
cmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5p
cXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNz
Ojpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9B
UFBMSUNBVElPTl9BVURJVF9EQVRBKQpAQCAtMjIxLDcgKzIxNCw3IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmZsdXNoQ29va2llcyhjb25zdCAKICAgICBwbGF0Zm9ybUZsdXNoQ29va2llcyhzZXNz
aW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotc3RhdGljIHZvaWQgc2F2
ZUNvb2tpZXMoTlNIVFRQQ29va2llU3RvcmFnZSAqY29va2llU3RvcmFnZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBzYXZlQ29va2llcyhOU0hU
VFBDb29raWVTdG9yYWdlICpjb29raWVTdG9yYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
ICAgICBBU1NFUlQoY29va2llU3RvcmFnZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAkocmV2aXNp
b24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQ
cm9jZXNzQ3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSw2IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3Jt
Q3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVu
aXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmlj
SFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0
ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRl
eHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVt
b3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01NSwxNSArNTUsMTEgQEAgdm9pZCBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6
ZW5zdXJlV2VicwogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHko
cGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBSZXRh
aW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gdWlQcm9jZXNzQ29va2llU3RvcmFnZTsKLSAg
ICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nv
b2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSkKKyAgICBpZiAoIXNlc3Npb25JRC5pc0Vw
aGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVy
LmlzRW1wdHkoKSAmJiBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9u
SUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAgICAgICAgdWlQcm9j
ZXNzQ29va2llU3RvcmFnZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlpbmdEYXRhKHBhcmFt
ZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIpOwogCiAgICAgbmV0d29ya1By
b2Nlc3MuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgbWFrZVN0cmluZyhiYXNl
LCAnLicsIHNlc3Npb25JRC50b1VJbnQ2NCgpKSwgV1RGTW92ZSh1aVByb2Nlc3NDb29raWVTdG9y
YWdlKSk7CiAKLSAgICBhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Byb2Nlc3Muc3RvcmFnZVNlc3Np
b24oc2Vzc2lvbklEKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMu
cGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHNlc3Npb24tPnNldENvb2tpZShjb29raWUpOwotCiAg
ICAgbmV0d29ya1Byb2Nlc3Muc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpj
cmVhdGUobmV0d29ya1Byb2Nlc3MsIFdURk1vdmUocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMpKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5jcHAJKHJldmlzaW9u
IDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJv
Y2Vzc01haW5Tb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBjbGFzcyBO
ZXR3b3JrUHJvY2Vzc01haW5Tb3VwIGZpbmFsOiBwdWJsCiBwdWJsaWM6CiAgICAgdm9pZCBwbGF0
Zm9ybUZpbmFsaXplKCkgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJcyB0aGlz
IHN0aWxsIG5lZWRlZD8gV2Ugc2hvdWxkIHByb2JhYmx5IGRlc3Ryb3kgYWxsIGV4aXN0aW5nIHNl
c3Npb25zIGF0IHRoaXMgcG9pbnQgaW5zdGVhZC4KICAgICAgICAgLy8gTmVlZGVkIHRvIGRlc3Ry
b3kgdGhlIFNvdXBTZXNzaW9uIGFuZCBTb3VwQ29va2llSmFyLCBlLmcuIHRvIGF2b2lkCiAgICAg
ICAgIC8vIGxlYWtpbmcgU1FMaXRlIHRlbXBvcmFyeSBqb3VybmFsaW5nIGZpbGVzLgogICAgICAg
ICBnbG9iYWxOZXR3b3JrUHJvY2Vzcy0+ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAkocmV2aXNpb24gMjY3NTM2
KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwxMSArMTM1LDYgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogICAgICAgICB1c2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
Q2hhbmdlZChwYXJhbWV0ZXJzLmxhbmd1YWdlcyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3Jz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgYm9vbCBpZ25vcmVUTFNFcnJvcnMpCiB7CiAgICAg
aWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKQpJbmRleDogU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0F0dGFjaG1lbnQuaAkocmV2aXNpb24gMjY3NTM2KQorKysg
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC05NSw4ICs5NSw4IEBAIHByaXZhdGU6CiAgICAgaW50IG1fZmlsZURlc2NyaXB0b3IgeyAtMSB9
OwogICAgIHNpemVfdCBtX3NpemU7CiAjZWxpZiBPUyhEQVJXSU4pCi0gICAgbWFjaF9wb3J0X25h
bWVfdCBtX3BvcnQ7Ci0gICAgbWFjaF9tc2dfdHlwZV9uYW1lX3QgbV9kaXNwb3NpdGlvbjsKKyAg
ICBtYWNoX3BvcnRfbmFtZV90IG1fcG9ydCB7IDAgfTsKKyAgICBtYWNoX21zZ190eXBlX25hbWVf
dCBtX2Rpc3Bvc2l0aW9uIHsgMCB9OwogI2VsaWYgT1MoV0lORE9XUykKICAgICBIQU5ETEUgbV9o
YW5kbGUgeyBJTlZBTElEX0hBTkRMRV9WQUxVRSB9OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCShyZXZp
c2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEzICs0MCw5IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZSgKICAgICBlbmNvZGVyIDw8IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVu
dGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7
Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2llczsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5IDw8IGluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+
IFdlYgogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMuY29va2ll
U3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpjb29raWVTdG9yYWdlUGF0aEV4
dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBPcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6Q29va2llPj4g
cGVuZGluZ0Nvb2tpZXM7Ci0gICAgZGVjb2RlciA+PiBwZW5kaW5nQ29va2llczsKLSAgICBpZiAo
IXBlbmRpbmdDb29raWVzKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHBhcmFt
ZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBXVEZNb3ZlKCpwZW5kaW5nQ29va2llcyk7Ci0KICNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBPcHRpb25hbDxTdHJpbmc+IGluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeTsKICAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsK
QEAgLTEwMSwxNCArOTEsNiBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4g
V2ViCiAgICAgaWYgKCFpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBP
cHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9i
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNl
VGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFpbmRleGVkRGF0YWJh
c2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNF
X1dPUktFUikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9TaGFy
ZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTUg
KzUxLDExIEBAIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyB7CiAKICAgICBWZWN0
b3I8dWludDhfdD4gdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAg
IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29raWVzOwogICAgIE5ldHdvcmtTZXNz
aW9uQ3JlYXRpb25QYXJhbWV0ZXJzIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKIAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIFN0cmluZyBpbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHku
aAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5
UHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94eSgpOwogCiAgICAgdm9pZCBjb25uZWN0
KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGVybWluYXRlKCk7
CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigpID0gMDsKIApJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
Y3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29r
aWVNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1
ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1By
b3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgiCiAjaW5jbHVkZSAiV2ViQ29v
a2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5TWVz
c2FnZXMuaCIKQEAgLTM5LDI0ICs0MCwxNiBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAotY29uc3QgY2hhciogV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
dXBwbGVtZW50TmFtZSgpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykKKyAgICA6IG1fbmV0d29y
a1Byb2Nlc3MobWFrZVdlYWtQdHIobmV0d29ya1Byb2Nlc3MpKQogewotICAgIHJldHVybiAiV2Vi
Q29va2llTWFuYWdlclByb3h5IjsKLX0KLQotUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gV2Vi
Q29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94eShwcm9jZXNz
UG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQcm94
eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi0gICAgOiBXZWJDb250ZXh0U3VwcGxlbWVu
dChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250ZXh0U3VwcGxlbWVudDo6cHJvY2Vzc1Bvb2wo
KS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIG5ldHdvcmtQcm9jZXNzLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksICp0aGlzKTsKIH0KIAogV2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2ll
TWFuYWdlclByb3h5KCkKIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CiAgICAgQVNTRVJUKG1fY29va2ll
T2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiB9CiAKQEAgLTY1LDEwMiArNTgsODQgQEAgdm9pZCBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmluaXRpYWxpemVDbAogICAgIG1fY2xpZW50LmluaXRpYWxpemUo
Y2xpZW50KTsKIH0KIAotLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLQotdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnByb2Nlc3NQb29sRGVzdHJveWVkKCkKLXsKLSAgICBWZWN0b3I8T2JzZXJ2
ZXIqPiBvYnNlcnZlcnM7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlclNldCA6IG1fY29va2llT2Jz
ZXJ2ZXJzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZl
clNldCkKLSAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQob2JzZXJ2ZXIpOwotICAgIH0KLQot
ICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyLT5t
YW5hZ2VyRGVzdHJveWVkKCk7Ci0KLSAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0
eSgpKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShX
ZWJQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJv
Y2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2Jq
ZWN0OjpyZWYoKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29u
dGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpkZXJlZigpOwotfQotCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYp
PiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQor
ICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBwcm9jZXNzUG9vbCgp
LT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklELCBo
b3N0bmFtZXMpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyksIDApOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQp
CiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGlu
Z0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVz
KHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29r
aWVzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVs
ZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ29va2llJiBjb29raWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1
dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFtjYWxsYmFja0Z1
bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKV0oKSBtdXRhYmxlIHsKKyAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklE
LCBjb29raWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCiAgICAgICAg
IGNhbGxiYWNrRnVuY3Rpb24oKTsKLSAgICB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgV2FsbFRpbWUgdGltZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNr
RnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVk
U2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01v
ZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7
CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
YWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9u
SUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBjb29raWVz
KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFj
a0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMs
IGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdv
cmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RG
TW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3Vt
ZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBj
YWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRB
bGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAg
ICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29v
a2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisg
ICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmdldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwp
LCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
KyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShjYWxs
YmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7
CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNo
YW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOwor
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMo
c2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJv
Y2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhz
ZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nv
b2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpzZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
V1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmIGNhbGxiYWNrKQpAQCAtMjExLDE4ICsxODYsMTggQEAg
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNvb2tpZXNEaWRDaAogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwg
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotI2lmIFVTRShTT1VQKQotICAgIHByb2Nlc3NQb29sKCkt
PnNldEluaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAg
IGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgV1RGTW92
ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0K
IAotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBv
bGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1bmN0
aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzZXNzaW9uSUQpLCBXVEZN
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rp
b24oSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6TmV2ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5oCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTEgKzU2LDkgQEAg
dHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpBcnJheSo+IEFycgogdHlwZWRlZiBHZW5lcmlj
Q2FsbGJhY2s8V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeT4gSFRUUENvb2tpZUFjY2Vw
dFBvbGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7CiAKLWNsYXNzIFdlYkNvb2tpZU1h
bmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNv
b2tpZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1lbnQsIHByaXZhdGUgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQ
STo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHByaXZhdGUg
SVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBz
dXBwbGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+
IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRpYyBSZWY8V2ViQ29va2llTWFuYWdl
clByb3h5PiBjcmVhdGUoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KG5ldHdvcmtQcm9jZXNzKSk7
IH0KICAgICB2aXJ0dWFsIH5XZWJDb29raWVNYW5hZ2VyUHJveHkoKTsKIAogICAgIHZvaWQgaW5p
dGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKik7CkBAIC0xMDQs
MTcgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQVBJOjpPYmplY3Q6OmRlcmVmOwogCiBw
cml2YXRlOgotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCopOworICAg
IFdlYkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAKICAgICB2b2lk
IGNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gV2ViQ29udGV4dFN1
cHBsZW1lbnQKLSAgICB2b2lkIHByb2Nlc3NQb29sRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZv
aWQgcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlcmVmV2Vi
Q29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLQogICAgIC8vIElQQzo6TWVzc2FnZVJlY2Vp
dmVyCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKSBvdmVycmlkZTsKIApAQCAtMTI1LDYgKzExNiw3IEBAIHByaXZhdGU6CiAgICAgSGFz
aE1hcDxQQUw6OlNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPj4gbV9sZWdhY3lDb29r
aWVPYnNlcnZlcnM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgSGFzaFNldDxPYnNlcnZl
cio+PiBtX2Nvb2tpZU9ic2VydmVyczsKIAorICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94
eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHlDbGllbnQgbV9j
bGllbnQ7CiAKICNpZiBVU0UoU09VUCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0Niw3ICsxNzQ2LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYQogICAgICAgICByZXR1cm47
CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb250cm9sbGVkQnlBdXRvbWF0aW9u
KGNvbnRyb2xsZWQpKTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9s
bGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJv
bGxlZEJ5QXV0b21hdGlvbikpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9sbGVk
QnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJvbGxl
ZEJ5QXV0b21hdGlvbiksIDApOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y3JlYXRlSW5zcGVj
dG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFy
Z2V0VHlwZSB0eXBlKQpAQCAtMzIxMCwxMSArMzIxMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpp
c0ZvcmNlZEludG9BcHBCb3VuZE0KIHZvaWQgV2ViUGFnZVByb3h5OjpkaXNhYmxlU2VydmljZVdv
cmtlckVudGl0bGVtZW50SW5OZXR3b3JrUHJvY2VzcygpCiB7CiAjaWYgRU5BQkxFKEFQUF9CT1VO
RF9ET01BSU5TKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCksIDApOwotICAgIH0K
KyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCAwKTsKICNl
bmRpZgogfQogCkBAIC0zMjIzLDEzICszMjE5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFy
U2VydmljZVdvcmtlckVudAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykgJiYgIVBMQVRG
T1JNKE1BQ0NBVEFMWVNUKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIHNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRs
ZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJp
ZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFT
dG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwog
I2VuZGlmCkBAIC00NDIzLDcgKzQ0MTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cHJlY29ubmVj
dFRvKGNvbnN0IFVSCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3kgPSBtX2NhblVzZUNyZWRlbnRpYWxTdG9yYWdlID8gV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3k6OlVzZSA6IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpE
b05vdFVzZTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5wcmVjb25uZWN0VG8oc2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlEKCks
IHVybCwgdXNlckFnZW50KCksIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRpbmdU
b0FwcEJvdW5kRG9tYWluKCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vz
cygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQoKSwg
dXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1Rv
QXBwQm91bmREb21haW4oKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDYW5Vc2VDcmVk
ZW50aWFsU3RvcmFnZShib29sIGNhblVzZUNyZWRlbnRpYWxTdG9yYWdlKQpAQCAtNDcxOSw3ICs0
NzA5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZQogICAgICAg
ICAgICAgUmVnaXN0cmFibGVEb21haW4gY3VycmVudERvbWFpbiB7IGN1cnJlbnRSZXF1ZXN0LnVy
bCgpIH07CiAgICAgICAgICAgICBVUkwgcmVxdWVzdGVyVVJMIHsgVVJMKCksIHJlcXVlc3Rlck9y
aWdpbi50b1N0cmluZygpIH07CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnREb21haW4ubWF0Y2hl
cyhyZXF1ZXN0ZXJVUkwpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2wo
KS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9LCBjdXJy
ZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50aWZpZXIsIG1fd2ViUGFn
ZUlEKTsKKyAgICAgICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNz
KCkuZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwgY3Vy
cmVudERvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dlYlBh
Z2VJRCk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTQ3NTcsNyArNDc0Nyw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUKICAgICBpZiAobmF2aWdhdGlv
biAmJiBmcmFtZS0+aXNNYWluRnJhbWUoKSkgewogICAgICAgICBpZiAoYXV0byYgYWRDbGlja0F0
dHJpYnV0aW9uID0gbmF2aWdhdGlvbi0+YWRDbGlja0F0dHJpYnV0aW9uKCkpIHsKICAgICAgICAg
ICAgIGlmIChhZENsaWNrQXR0cmlidXRpb24tPmRlc3RpbmF0aW9uKCkubWF0Y2hlcyhmcmFtZS0+
dXJsKCkpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9O
ZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0
dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmli
dXRpb24pKTsKKyAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3RvcmVBZENsaWNrQXR0cmlidXRp
b24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKmFkQ2xpY2tBdHRyaWJ1dGlvbiks
IDApOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MzcxLDcgKzUzNjEsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvCiAgICAgaWYgKHRhcmdldEhvc3QuaXNFbXB0
eSgpIHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3QgPT0gc291cmNlVVJM
Lmhvc3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgp
LnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TG9nRnJh
bWVOYXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxl
RG9tYWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVSTCB9LCBSZWdp
c3RyYWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5pc01haW5GcmFt
ZSgpLCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yTWFp
bkZyYW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlcikpOworICAgIHdl
YnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBw
YWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVkaXJlY3QsIGZy
YW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRGaW5pc2hEb2N1
bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlV
c2VyKSwgMCk7CiB9CiAjZW5kaWYKIApAQCAtOTk5Niw1OCArOTk4NiwyNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6c3lzdGVtUHJldmlld0FjdGlvblRyCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkdW1w
QWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYg
KCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAg
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5l
dHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2Fn
ZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1ZSks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9y
ZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcobV93
ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFsdWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25D
b252ZXJzaW9uVVJMRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1f
d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCku
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0
dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgp
KSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJl
ZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQ
cm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFy
a0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKICNpZiBF
TkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBA
QAogI2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nSW5pdGlh
bGl6YXRpb24uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uSW5mby5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtQcm9jZXNzUHJveHkuaCIKQEAgLTE0Myw4ICsxNDIsMTAgQEAKICNlbmRpZgogCiAj
ZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxF
QVNFX0xPRyhjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19W
QV9BUkdTX18pCisjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhjaGFu
bmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZt
dCwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJS
T1IoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIlcCAtIFdl
YlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJP
Q0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFT
RV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAi
JXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5l
IFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5uZWwsIGZt
dCwgLi4uKSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2Vk
KCksIGNoYW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIsNiArMjMz
LDExIEBAIHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXQKICAgICByZXR1
cm4gc2V0OwogfQogCitWZWN0b3I8U3RyaW5nPiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dp
dGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkKK3sKKyAgICByZXR1cm4gY29weVRvVmVjdG9yKGds
b2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKTsKK30KKwogV2ViUHJv
Y2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBj
b25maWd1cmF0aW9uKQogICAgIDogbV9jb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24uY29weSgp
KQogICAgICwgbV9kZWZhdWx0UGFnZUdyb3VwKFdlYlBhZ2VHcm91cDo6Y3JlYXRlKCkpCkBAIC0y
MzksNyArMjQ1LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvYwog
ICAgICwgbV9hdXRvbWF0aW9uQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpBdXRvbWF0aW9uQ2xpZW50
PigpKQogICAgICwgbV9kb3dubG9hZENsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRD
bGllbnQ+KCkpCiAgICAgLCBtX2hpc3RvcnlDbGllbnQobWFrZVVuaXF1ZTxBUEk6OkxlZ2FjeUNv
bnRleHRIaXN0b3J5Q2xpZW50PigpKQotICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQobWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICAgICAs
IG1fdmlzaXRlZExpbmtTdG9yZShWaXNpdGVkTGlua1N0b3JlOjpjcmVhdGUoKSkKICNpZiBQTEFU
Rk9STShNQUMpCiAgICAgLCBtX2hpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyKG1h
a2VVbmlxdWU8SGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXI+KCp0aGlzKSkKQEAg
LTI2Nyw5ICsyNzIsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9j
CiAjZW5kaWYKICAgICB9KTsKIAotICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlICYmIFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBt
X3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKTsKLQogICAgIGZvciAoYXV0byYgc2NoZW1lIDogbV9jb25maWd1cmF0aW9uLT5hbHdh
eXNSZXZhbGlkYXRlZFVSTFNjaGVtZXMoKSkKICAgICAgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFz
QWx3YXlzUmV2YWxpZGF0ZWQuYWRkKHNjaGVtZSk7CiAKQEAgLTI4NSw3ICsyODcsNiBAQCBXZWJQ
cm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jCiAgICAgYWRkTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhp
cyk7CiAKICAgICAvLyBOT1RFOiBUaGVzZSBzdWItb2JqZWN0cyBtdXN0IGJlIGluaXRpYWxpemVk
IGFmdGVyIG1fbWVzc2FnZVJlY2VpdmVyTWFwLi4KLSAgICBhZGRTdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdl
clByb3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5
PigpOwogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQpAQCAtMzQyLDkgKzM0Myw2IEBAIFdlYlBy
b2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2woKQogICAgIHByb2Nlc3NQb29sQ291bnRlci5kZWNy
ZW1lbnQoKTsKICNlbmRpZgogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNodXREb3duUHJvY2VzcygpOwotCiAjaWYgRU5BQkxFKEdBTUVQQUQp
CiAgICAgaWYgKCFtX3Byb2Nlc3Nlc1VzaW5nR2FtZXBhZHMuaXNFbXB0eSgpKQogICAgICAgICBV
SUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkucHJvY2Vzc1Bvb2xTdG9wcGVkVXNpbmdHYW1l
cGFkcygqdGhpcyk7CkBAIC00MDIsMTYgKzQwMCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
dEF1dG9tYXRpb25DbGllbnQKICAgICAgICAgbV9hdXRvbWF0aW9uQ2xpZW50ID0gV1RGTW92ZShh
dXRvbWF0aW9uQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudD4mJiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi17Ci0jaWYg
RU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKLSAgICBpZiAoIWN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCkKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQgPSBtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpOwotICAg
IGVsc2UKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBXVEZNb3ZlKGN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0
cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKQogewogICAgIC8v
IEd1YXJkIGFnYWluc3QgQVBJIG1pc3VzZS4KQEAgLTQyMSwxMSArNDA5LDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudAogICAgIG1fY29uZmlndXJhdGlvbi0+c2V0
Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGN1c3RvbVdlYkNvbnRlbnRT
ZXJ2aWNlQnVuZGxlSWRlbnRpZmllcik7CiB9CiAKLUlQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fbmV0
d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFu
Z3VhZ2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViUHJvY2Vz
c1Bvb2wqPihjb250ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7CkBAIC00MzUsOCArNDE4LDcgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9BbGxQ
cm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFu
Z2VkKCkpOwogI2lmIFVTRShTT1VQKQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclBy
ZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7Cisg
ICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5uZXR3b3JrUHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hh
bmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKICNlbmRpZgogfQogCkBAIC00NDks
NyArNDMxLDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZnVsbEtleWJvYXJkQWNjZXNzTQogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE1lbW9yeVByZXNzdXJlRXZlbnQoYm9vbCBpc0NyaXRpY2Fs
KQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6
RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCkpOwotICAgIHNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVt
b3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSk7CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9j
ZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVj
ZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCksIDApOwogI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQogICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5z
ZW5kTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKTsKICNlbmRpZgpAQCAtNDc0LDI3NSAr
NDU3LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2NyZWVuUHJvcGVydGllc1N0YQogI2VuZGlm
CiB9CiAKLU5ldHdvcmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3Jr
UHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKLXsKLSAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEg
dGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFp
biB0aHJlYWRzLgotICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2Ug
dGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KLSAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlmICghUnVuTG9vcDo6
aXNNYWluKCkpIHsKLSAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7
Ci0gICAgfQotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgaWYgKHdpdGhX
ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNz
aW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICB3aXRoV2Vi
c2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBhdXRvIG5ldHdvcmtQcm9j
ZXNzID0gbWFrZVVuaXF1ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7Ci0KLSAgICBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCi0gICAgaWYgKG1fd2Vi
c2l0ZURhdGFTdG9yZSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLnBlbmRpbmdDb29raWVzID0gY29weVRvVmVjdG9yKG1fd2Vic2l0ZURhdGFTdG9yZS0+
cGVuZGluZ0Nvb2tpZXMoKSk7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5k
aW5nQ29va2llcygpOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VB
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3Vy
YXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVy
KCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lH
bG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotCi0gICAgZm9yIChhdXRv
JiBzY2hlbWUgOiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkK
LSAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29s
cy5hcHBlbmQoc2NoZW1lKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU3RyaW5n
IGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURp
cmVjdG9yeSgpOwotICAgIGlmICghY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0g
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9y
eSA9IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYg
KCFjb250YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVz
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7Ci0KLSAgICBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bv
b2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyZW50QnVuZGxlRGlyZWN0
b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBh
cmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBh
cmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclRlbXBvcmFyeUZpbGUoZW1wdHlTdHJpbmcoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6
UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWRE
YXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotI2VuZGlm
Ci0KLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9W
ZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVy
QXNTZWN1cmUoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNz
aW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRp
bmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3Vy
aXR5UG9saWN5KCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2Fs
ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVz
VG9SZWdpc3RlckFzTG9jYWwoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRv
bigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotICAgIC8vICoqKioqKioqKgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNo
YW5nZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlz
ayB3aXRob3V0IGZpcnN0IGNvbnN1bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjov
L3Byb2JsZW0vMTc0NTQ3MTI+KQotICAgIC8vICoqKioqKioqKgotICAgIGlmIChtX3dlYnNpdGVE
YXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZElu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVj
dG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+Y3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQot
I2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQot
ICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBt
X3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSgpOwotICAgIGlmICghcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5KQotICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnkgPSAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExv
Y2FsU3RvcmFnZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9y
YWdlRGlyZWN0b3J5KQotICAgICAgICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9
IGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0KLSAgICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURh
dGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBu
dWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVj
dG9yeShjYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3Rv
cnkgPSBXVEZNb3ZlKGNhY2hlU3RvcmFnZURpcmVjdG9yeSk7Ci0gICAgfQotCi0gICAgU3RyaW5n
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0g
ICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGFyYW1ldGVycy5kaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NE
aXJlY3RvcnksIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwotCi0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAg
Ym9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7
Ci0gICAgYm9vbCBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoUkVT
T1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGUgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IFdlYkNvcmU6OlRoaXJkUGFy
dHlDb29raWVCbG9ja2luZ01vZGU6OkFsbDsKLSAgICBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZCBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IFdlYkNv
cmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKLSNlbmRpZgotICAgIFdl
YkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJzaXRl
RGF0YVJlbW92YWxNb2RlID0gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGU6OkFsbEJ1dENvb2tpZXM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gc3RhbmRh
bG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4+IGFwcEJvdW5kRG9tYWluczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBt
YW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fdGNj
UHJlZmVyZW5jZUVuYWJsZWQgPSBkb2VzQXBwSGF2ZUlUUEVuYWJsZWQoKTsKLSAgICBpZiAod2l0
aFdlYnNpdGVEYXRhU3RvcmUgJiYgIXdpdGhXZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhw
bGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBt
X3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyk7Ci0gICAgfSBlbHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUgJiYgIW1fd2Vic2l0ZURhdGFT
dG9yZS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgbV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmVFeGlzdHMoKSAmJiAhV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZSgpLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZQotICAg
ICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxl
ZDsKLSNlbmRpZgotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2
ZW50ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2so
KTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewot
ICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURh
dGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAg
ICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAg
ICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxl
RGVidWdNb2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAg
ICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5zYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAg
Zmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
c3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5z
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLmFwcEJvdW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNl
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLm1hbnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3
aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0
b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3Rv
cmFnZVF1b3RhKCk7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVE
aXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsK
LSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURp
cmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3
b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNvbnN0IGF1dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRh
U3RvcmUtPnJlc29sdmVkSFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3Rz
U3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3Jh
Z2VEaXJlY3RvcnkgPSBoc3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVu
c2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkg
ewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NM
b2dUZXN0aW5nRXZlbnQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5n
Q2FsbGJhY2soKTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljcykgewotICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dl
YnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0g
ICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhv
c3Q7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
LmVuYWJsZURlYnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQot
ICAgICAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29v
a2llQmxvY2tpbmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVu
YWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMuc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlOwotICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9t
YWluID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJh
bWV0ZXJzLnN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5k
RG9tYWlucyA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5hcHBCb3VuZERvbWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5tYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1
b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAg
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3Jp
Z2luU3RvcmFnZVF1b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2lu
U3RvcmFnZVF1b3RhKCk7Ci0KLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgp
OwotICAgICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAg
ICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5
OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNo
ZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3
b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y29uc3QgYXV0byYgaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJl
c29sdmVkSFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURp
cmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3Rv
cnkgPSBoc3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlw
ZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7
Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVj
dG9yeTsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNo
ZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3
b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lmIEhBVkUoQ0ZO
RVRXT1JLX0FMVEVSTkFUSVZFX1NFUlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6Omh0
dHAzRW5hYmxlZCgpKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9y
eSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2VzRGlyZWN0b3J5
KCk7Ci0gICAgICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnksIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFs
dGVybmF0aXZlU2VydmljZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
Lmh0dHAzRW5hYmxlZCA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBpc0l0cFN0YXRl
RXhwbGljaXRseVNldCA9IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXJhbWV0ZXJzID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewotICAgICAgICBX
VEZNb3ZlKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAgICBXVEZNb3Zl
KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpLAotICAgICAg
ICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0YXRlRXhwbGlj
aXRseVNldCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdF
dmVudCwKLSAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAgZW5hYmxlUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQotICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlLAotICAgICAg
ICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0
aW9uRG9tYWluLAotICAgICAgICBhcHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZh
bGVudFJlc291cmNlLAotICAgIH07Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmlj
IHBhcmFtZXRlcnMKLSAgICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0
ZXJzKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3
b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3
b3JrUHJvY2Vzc0xhdGVuY3lRT1MoKSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAw
KTsKLSNlbmRpZgotCi0gICAgbmV0d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24o
KTsKLQotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAg
ICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQot
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUg
c2Vzc2lvbnMgdGhhdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAg
ICBmb3IgKGF1dG8mIHNlc3Npb25JRCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpl
eGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAg
ICB9Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0g
ICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpu
ZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQ
cm94eSkKIHsKLSAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3
b3JrUHJvY2Vzc1Byb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChh
dXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxl
bWVudC0+cHJvY2Vzc0RpZENsb3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzUxLDkg
KzQ2Nyw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2gKICAgICBp
ZiAobV9hdXRvbWF0aW9uU2Vzc2lvbikKICAgICAgICAgbV9hdXRvbWF0aW9uU2Vzc2lvbi0+dGVy
bWluYXRlKCk7CiAKLSAgICAvLyBMZWF2ZSB0aGUgcHJvY2VzcyBwcm94eSBhcm91bmQgZHVyaW5n
IGNsaWVudCBjYWxsLCBzbyB0aGF0IHRoZSBjbGllbnQgY291bGQgcXVlcnkgdGhlIHByb2Nlc3Mg
aWRlbnRpZmllci4KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKLQogICAgIHRlcm1p
bmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKQEAgLTc2NCwyMCArNDc3LDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2NlcwogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdl
YlByb2Nlc3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAgICBlbnN1cmVOZXR3b3Jr
UHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KSwgd2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwgcmVwbHkg
PSBXVEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc1ZhbGlkKGNvbm5l
Y3Rpb25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5ICYmIHdlYWtUaGlzKSkg
ewotICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoUHJvY2Vzcywg
ImdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0IGF0dGVtcHQsIHJldHJ5
aW5nIik7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3ZWJQcm9jZXNz
UHJveHksIFdURk1vdmUocmVwbHkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7Ci0gICAgfSk7Ci19Ci0KICNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpncHVQcm9jZXNzQ3Jhc2hlZChQcm9j
ZXNzSUQgaWRlbnRpZmllcikKIHsKQEAgLTgwMSwyMyArNTAwLDI2IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmdldEdQVVByb2Nlc3NDb25uZWMKIH0KICNlbmRpZgogCitib29sIFdlYlByb2Nlc3NQ
b29sOjpzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSBmYWxzZTsKKwogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiBw
cm94eSwgUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChwcm94eSwgJnByb3h5ID09IG1fbmV0d29ya1Byb2Nl
c3MuZ2V0KCkpOwotCi0gICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3Rv
cmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwot
Ci0gICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0
YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0gICAgICAgIHdlYnNpdGVEYXRh
U3RvcmUgPSBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7Ci0gICAgfQorICAgIGF1dG8qIHdlYnNp
dGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Np
b25JRChzZXNzaW9uSUQpOworICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAgd2Vi
c2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIo
KTsKKyAgICBpZiAoIXByb2Nlc3NQb29scygpLnNpemUoKSkKKyAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFJlZjxXZWJQcm9jZXNzUG9vbD4+IHNlcnZpY2VXb3JrZXJQcm9jZXNzUG9vbChX
ZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjcmVh
dGUoKS5nZXQoKSkpOworCisgICAgLy8gQXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdCBwcm9j
ZXNzIHBvb2wgdG8gaG9zdCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vzcy4KKyAgICBhdXRvKiBw
cm9jZXNzUG9vbCA9IHByb2Nlc3NQb29scygpWzBdOworICAgIEFTU0VSVChwcm9jZXNzUG9vbCk7
CiAKICAgICBXZWJQcm9jZXNzUHJveHkqIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgeyBudWxs
cHRyIH07Ci0gICAgaWYgKCFtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGlm
IChwcm9jZXNzID09IG1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9jZXNzLT5pc0R1bW15UHJvY2Vz
c1Byb3h5KCkpCisKKyAgICBpZiAoIXNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcykg
eworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMp
IHsKKyAgICAgICAgICAgIGlmIChwcm9jZXNzID09IHByb2Nlc3NQb29sLT5tX3ByZXdhcm1lZFBy
b2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94eSgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCZwcm9jZXNzLT53ZWJzaXRlRGF0YVN0b3JlKCkg
IT0gd2Vic2l0ZURhdGFTdG9yZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTgyNSwz
NSArNTI3LDM1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnQKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eSA9IHByb2Nlc3MuZ2V0KCk7Ci0gICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyh1c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlm
aWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CisgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyhwcm9jZXNzUG9vbC0+dXNlckNvbnRlbnRDb250
cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkpOwogCi0gICAgICAgICAgICBXRUJQ
Uk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxp
c2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgcmV1c2luZyBhbiBleGlz
dGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkp
OworICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFU
SUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3
b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdlYiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQ
SUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KIAogICAgIGlmICghc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkgewotICAgICAg
ICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6Y3JlYXRlRm9yU2Vydmlj
ZVdvcmtlcnMoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFT
dG9yZSk7CisgICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5ID0gV2ViUHJvY2Vzc1Byb3h5Ojpj
cmVhdGVGb3JTZXJ2aWNlV29ya2VycygqcHJvY2Vzc1Bvb2wsIFdURk1vdmUocmVnaXN0cmFibGVE
b21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CiAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNz
UHJveHkgPSBuZXdQcm9jZXNzUHJveHkucHRyKCk7CiAKLSAgICAgICAgV0VCUFJPQ0VTU1BPT0xf
UkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29y
a2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJv
eHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAg
ICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2aWNl
V29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
IGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVk
KSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkt
PnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCi0gICAgICAgIGluaXRpYWxpemVOZXdXZWJQcm9jZXNz
KG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFTdG9yZSk7Ci0gICAgICAgIG1fcHJvY2Vzc2Vz
LmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOworICAgICAgICBwcm9jZXNzUG9vbC0+
aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJvY2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3Jl
KTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1By
b2Nlc3NQcm94eSkpOwogICAgIH0KIAotICAgIEFTU0VSVCghbV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSk7Ci0gICAgbV9zZXJ2aWNl
V29ya2VyUHJvY2Vzc2VzLmFkZCgqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSk7CisgICAgQVNT
RVJUKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29udGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHkpKTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuYWRkKCpzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5KTsKIAotICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVzdGFi
bGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzID8gbV9z
ZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJl
ZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgaWYg
KCFtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxsKCkpCi0gICAgICAgIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQobV9zZXJ2aWNlV29ya2Vy
VXNlckFnZW50KTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lc3RhYmxpc2hTZXJ2
aWNlV29ya2VyQ29udGV4dChwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMg
PyBwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IHByb2Nl
c3NQb29sLT5tX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmICghcHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdv
cmtlclVzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94
eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2Vy
VXNlckFnZW50KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVtb3ZlRnJvbVNlcnZpY2VX
b3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogewotICAgIEFTU0VSVCht
X3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFpbnMocHJvY2VzcykpOwotICAgIG1fc2Vydmlj
ZVdvcmtlclByb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CisgICAgQVNTRVJUKHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzZXMoKS5jb250YWlucyhwcm9jZXNzKSk7CisgICAgc2VydmljZVdvcmtlclByb2Nl
c3NlcygpLnJlbW92ZShwcm9jZXNzKTsKIH0KICNlbmRpZgogCkBAIC05MjIsNyArNjI0LDcgQEAg
UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OgogI2lmIFBMQVRGT1JNKEdU
SykgfHwgUExBVEZPUk0oV1BFKQogICAgIC8vIEluIHBsYXRmb3JtcyB1c2luZyBCdWJibGV3cmFw
IGZvciBzYW5kYm94aW5nLCBwcmV3YXJtZWQgcHJvY2VzcyBpcyBsYXVuY2hlZCB1c2luZyB0aGUg
V2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlLAogICAgIC8vIHNvIHdlIGRv
bid0IHVzZSBpdCBpbiBjYXNlIG9mIHVzaW5nIGEgZGlmZmVyZW50IFdlYnNpdGVEYXRhU3RvcmUu
Ci0gICAgaWYgKG1fc2FuZGJveEVuYWJsZWQgJiYgbV93ZWJzaXRlRGF0YVN0b3JlICYmIG1fd2Vi
c2l0ZURhdGFTdG9yZS5nZXQoKSAhPSAmd2Vic2l0ZURhdGFTdG9yZSkKKyAgICBpZiAobV9zYW5k
Ym94RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIApAQCAtMTAzMiw4
ICs3MzQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjppbml0aWFsaXplTmV3V2ViUHJvCiAgICAg
ICAgIHByb2Nlc3MuaXNSZXNwb25zaXZlKFtpbml0aWFsaXphdGlvbkFjdGl2aXR5ID0gV1RGTW92
ZShpbml0aWFsaXphdGlvbkFjdGl2aXR5KV0gKGJvb2wpIHsgfSk7CiAgICAgfSk7CiAKLSAgICBl
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyBwYXJhbWV0ZXJzOwogCiAgICAgcGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGggPSBtX3Jl
c29sdmVkUGF0aHMuaW5qZWN0ZWRCdW5kbGVQYXRoOwpAQCAtMTE5OCw5ICs4OTgsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1CiAgICAgICAgIHByb2Nlc3MtPmNv
bm5lY3Rpb24oKS0+aWdub3JlVGltZW91dHNGb3JUZXN0aW5nKCk7CiAKICAgICBtX2Nvbm5lY3Rp
b25DbGllbnQuZGlkQ3JlYXRlQ29ubmVjdGlvbih0aGlzLCBwcm9jZXNzLT53ZWJDb25uZWN0aW9u
KCkpOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgbV93ZWJzaXRlRGF0
YVN0b3JlLT5kaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCkBAIC0xMjk1
LDEwICs5OTIsNyBAQCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlCiAg
ICAgaWYgKCFwYWdlQ29uZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpKSB7CiAgICAgICAg
IC8vIFdlIHRyeSB0byBhdm9pZCBjcmVhdGluZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxv
bmcgYXMgcG9zc2libGUuCiAgICAgICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRv
IGNyZWF0ZSBhIHdlYiBwYWdlIHdpdGhvdXQgYW55IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVu
IHdlIGhhdmUgdG8gY3JlYXRlIGl0LgotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkK
LSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotCi0gICAgICAgIHBhZ2VDb25maWd1cmF0aW9u
LT5zZXRXZWJzaXRlRGF0YVN0b3JlKG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAg
IHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpKTsKICAgICB9CiAKICAgICBSZWZQdHI8
V2ViUHJvY2Vzc1Byb3h5PiBwcm9jZXNzOwpAQCAtMTMyOSw3ICsxMDIzLDcgQEAgUmVmPFdlYlBh
Z2VQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZQogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKICAgICBpZiAoIW1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKSB7CiAgICAgICAgIG1fc2Vy
dmljZVdvcmtlclByZWZlcmVuY2VzID0gcGFnZS0+cHJlZmVyZW5jZXNTdG9yZSgpOwotICAgICAg
ICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzKQorICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdv
cmtlclByb2Nlc3NlcygpKQogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRl
U2VydmljZVdvcmtlclByZWZlcmVuY2VzU3RvcmUoKm1fc2VydmljZVdvcmtlclByZWZlcmVuY2Vz
KTsKICAgICB9CiAgICAgaWYgKHVzZXJDb250ZW50Q29udHJvbGxlcikKQEAgLTEzNTYsNyArMTA1
MCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXIKICAgICBpZiAo
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50ID09IHVzZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwog
ICAgIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9IHVzZXJBZ2VudDsKLSAgICBmb3IgKGF1dG8m
IHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgIGZv
ciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkp
CiAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzLnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQo
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KICNlbmRpZgpAQCAtMTM2NSwxNSArMTA1OSw2
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2kKIHsKICAgICBhdXRv
IHJlc3VsdCA9IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5hZGQoZGF0YVN0b3JlLnNlc3Npb25JRCgp
LCBIYXNoU2V0PFdlYlBhZ2VQcm94eUlkZW50aWZpZXI+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQo
cGFnZUlEKTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwot
Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7Ci0gICAgaWYgKHNl
c3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAg
IEFTU0VSVCghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgfHwgZGF0YVN0b3JlLnBhcmFtZXRlcnMo
KS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEID09IHNlc3Npb25JRCk7Ci0gICAg
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5hZGRTZXNzaW9uKG1ha2VSZWYoZGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICBkYXRhU3RvcmUu
Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgfQogfQogCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpwYWdlRW5kVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50
aWZpZXIgcGFnZUlELCBXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpCkBAIC0xNDAxLDcgKzEw
ODYsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNQYWdlc1VzaW5nV2Vic2l0CiBEb3dubG9h
ZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0
b3JlLCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCiB7CiAgICAgYXV0byYg
ZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCByZXF1ZXN0LCBp
bml0aWF0aW5nUGFnZSwgeyB9KTsKLSAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBkYXRh
U3RvcmUuc2Vzc2lvbklEKCk7CiAKICAgICBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpbj4gaXNBcHBCb3VuZCA9IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpObzsKICAgICBp
ZiAoaW5pdGlhdGluZ1BhZ2UpIHsKQEAgLTE0MTEsMjYgKzEwOTUsMjMgQEAgRG93bmxvYWRQcm94
eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKAogI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKG5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0
KHJlcXVlc3QpOwotICAgICAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2ls
bCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KLSAgICAg
ICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3AgbGV2ZWwgZG9jdW1lbnQncyBVUkwuCi0gICAg
ICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewotICAgICAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdl
VVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwo
KSB9OwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMo
aW5pdGlhdGluZ1BhZ2VVUkwpOwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1l
U2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVz
dC51cmwoKSkpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVy
RmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRl
ZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChpbml0aWF0aW5nUGFnZS0+dXNlckFnZW50Rm9yVVJM
KHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHVwZGF0ZWRS
ZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKLSAgICAgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVk
UmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0g
ICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJv
eHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZWRSZXF1
ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3du
bG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dl
c3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5OworICAgIFJl
c291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAvLyBSZXF1ZXN0J3Mg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUg
ZG93bmxvYWQgcmVxdWVzdC4KKyAgICAvLyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBk
b2N1bWVudCdzIFVSTC4KKyAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKKyAgICAgICAgVVJMIGlu
aXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2Fk
U3RhdGUoKS51cmwoKSB9OworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9y
Q29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElz
U2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJl
cXVlc3QudXJsKCkpKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVy
RmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVx
dWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVx
dWVzdC51cmwoKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZp
cnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNT
YW1lU2l0ZShmYWxzZSk7CisgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQorICAgICAgICAgICAgdXBkYXRlZFJl
cXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkp
OwogICAgIH0KKyAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1RvcFNpdGUoZmFsc2UpOworICAgIGRh
dGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpE
b3dubG9hZFJlcXVlc3QoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBkb3dubG9hZFByb3h5LmRvd25s
b2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwg
MCk7CiAKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KQEAgLTE0MzgsMTcgKzExMTksMTIg
QEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKAogRG93bmxvYWRQcm94
eSYgV2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFT
dG9yZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgQVBJOjpEYXRhJiByZXN1
bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgYXV0byYgZG93bmxvYWRQcm94eSA9
IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBSZXNvdXJjZVJlcXVlc3QoKSwgaW5pdGlh
dGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0b3Jl
LnNlc3Npb25JRCgpOwogCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRl
bnNpb25IYW5kbGU7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRX
cml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAobmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQo
KSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5k
bGUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7Ci0gICAgfQotCisgICAgZGF0
YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJl
c3VtZURvd25sb2FkKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgZG93bmxvYWRQcm94eS5kb3dubG9h
ZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlKSwgMCk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CiAKQEAgLTE1MTcsMTEg
KzExOTMsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWZyZXNoUGx1Z2lucygpCiAKICNlbmRp
ZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAotUHJvY2Vzc0lEIFdlYlByb2Nlc3NQ
b29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQotewotICAgIHJldHVybiBtX25ldHdvcmtQ
cm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7Ci19Ci0K
IFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6cHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKQog
ewogICAgIHJldHVybiBtX3ByZXdhcm1lZFByb2Nlc3MgPyBtX3ByZXdhcm1lZFByb2Nlc3MtPnBy
b2Nlc3NJZGVudGlmaWVyKCkgOiAwOwpAQCAtMTU1OCwxNCArMTIyOSwxOCBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGlu
Z3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKTsKICAg
ICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2No
ZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVt
ZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxT
Y2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3Jl
Lm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVy
VVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQ
b2xpY3koY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGlu
Z3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJp
dHlQb2xpY3kodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6Oldl
YlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xp
Y3kodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5
UG9saWN5KHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRl
RGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAg
ICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3ko
dXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERv
bWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiB1cmxTY2hl
bWUpCkBAIC0xNTc4LDE0ICsxMjUzLDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVy
VVJMU2NoZW1lQXMKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2Vz
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1l
KSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFT
dG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3Rv
cmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNj
aGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVS
TFNjaGVtZUFzTm9BY2Nlc3MoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1
cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6
UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVB
c05vQWNjZXNzKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJz
aXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsK
KyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpLCAwKTsKKyAg
ICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3Bs
YXlJc29sYXRlZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MDYsMTAgKzEyODUsOCBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLmFk
ZCh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdpc3RlclNj
aGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAo
YXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9j
ZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5
Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5y
ZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25z
dCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MTgsMTAgKzEyOTUsOCBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMCiAgICAgICAgIHJldHVybjsKIAogICAgIGdsb2Jh
bFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLnJlbW92ZSh1cmxTY2hlbWUp
OwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1lRm9yTGVn
YWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRvIG5ldHdv
cmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQor
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVBy
b3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJM
U2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTY1
NSwxNiArMTMzMCwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKENhY2hl
CiAKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldENhY2hl
TW9kZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNo
ZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vi
c2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkg
eworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAgfSk7CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGlu
ZyhDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB7CiAgICAgdXBkYXRlQmFja0ZvcndhcmRDYWNoZUNh
cGFjaXR5KCk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVs
U3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsKKyAgICBXZWJz
aXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5j
aHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCAwKTsKKyAgICB9KTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91
YmxlIHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE2NzQsMTIgKzEzNTEsNyBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpCiAKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQ
b29sOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFn
ZSwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvKQogewotICAgIHJldHVybiBlbnN1cmVO
ZXR3b3JrUHJvY2VzcygmZGF0YVN0b3JlKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwg
cmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwotfQotCi12b2lkIFdlYlByb2Nl
c3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKLXsKLSAg
ICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dy
b3VuZCk7CisgICAgcmV0dXJuIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURvd25s
b2FkUHJveHkoZGF0YVN0b3JlLCAqdGhpcywgcmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGlu
Z1BhZ2UpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIoSVBD
OjpSZWNlaXZlck5hbWUgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpNZXNzYWdlUmVjZWl2ZXIm
IG1lc3NhZ2VSZWNlaXZlcikKQEAgLTE3NTAsMzAgKzE0MjIsNiBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9OZXR3b3Jr
aW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KQotewotICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpm
b3J3YXJkPFU+KHJlcGx5KSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2Fj
aGVkQ3JlZGVudGlhbHMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkKLXsKLSAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKSwg
MCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkK
LXsKLSAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwotCi0gICAgaWYgKCFtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVy
bWluYXRlKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci19Ci0KIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQogewogICAgIFZl
Y3RvcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzID0gbV9wcm9jZXNzZXM7CkBA
IC0xNzgxLDQwICsxNDI5LDE1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdl
YkNvbnQKICAgICAgICAgcHJvY2Vzcy0+dGVybWluYXRlKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0g
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1t
aW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcoKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0KLQot
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkKLXsKLSAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFBy
b2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2Vy
dmljZVdvcmtlcnMoKQogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBhdXRvIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICB3aGlsZSAobV9zZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzLmNvbXB1dGVTaXplKCkpCi0gICAgICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cy5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKKyAgICB3aGlsZSAoc2VydmljZVdv
cmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoKS5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKICNlbmRpZgogfQogCi12
b2lkIFdlYlByb2Nlc3NQb29sOjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNl
c3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQot
ewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRh
dGVBdXRvbWF0aW9uQ2FwYWJpbGl0aWVzKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoUkVNT1RFX0lO
U1BFQ1RPUikKQEAgLTIwODksMTUgKzE3MTIsMjEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVw
b3J0V2ViQ29udGVudENQVQogI2VuZGlmCiB9CiAKK1dlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94
eT4mIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2Vz
OworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9CisKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0
ZVByb2Nlc3NBc3NlcnRpb25zKCkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnVwZGF0
ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0
ZURhdGFTdG9yZShbXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRh
dGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICB9
KTsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gQ2hlY2sgb24gbmV4dCBydW4g
bG9vcCBzaW5jZSB0aGUgd2ViIHByb2Nlc3MgcHJveHkgdG9rZW5zIGFyZSBwcm9iYWJseSBiZWlu
ZyB1cGRhdGVkLgotICAgIGNhbGxPbk1haW5SdW5Mb29wKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKHRoaXMpXSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VX
b3JrZXJQcm9jZXNzZXMpCisgICAgY2FsbE9uTWFpblJ1bkxvb3AoW10geworICAgICAgICBmb3Ig
KGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQog
ICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclByb2Nl
c3NBc3NlcnRpb24oKTsKICAgICB9KTsKICNlbmRpZgpAQCAtMjEwNyw3ICsxNzM2LDcgQEAgYm9v
bCBXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29ya2VyUGFnZQogewogI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmVmZmljaWVudC4KLSAgICByZXR1
cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtwYWdlSURdKGF1dG8mIHBy
b2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCks
IFtwYWdlSURdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2Vy
dmljZVdvcmtlclBhZ2VQcm94eShwYWdlSUQpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMzI5LDE0
ICsxOTU4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDdXJyZW50TW9kaWZpZQogfQog
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0ZU5hdmlnYXRpb25E
YXRhVHJhbnNmZXI6OkZsYWc+IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIFdlYlBhZ2VQcm94eUlk
ZW50aWZpZXIgd2ViUGFnZVByb3h5SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCkKLXsKLSAg
ICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmV0d29y
a1Byb2Nlc3MtPmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25J
RCwgZnJvbURvbWFpbiwgdG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQ
cm94eUlELCB3ZWJQYWdlSUQpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5z
V2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYm
IGRvbWFpbnMpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpTZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihkb21haW5zKSk7CkBAIC0yMzg3LDI3ICsy
MDA4LDI3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1ZGlibGVNZWRpYUEKIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29s
IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgaWYgKG1fdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KQorICAgIGlmIChzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0VCUFJPQ0VT
U1BPT0xfUkVMRUFTRV9MT0coU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3M6ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0Vf
TE9HX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiAKLSAgICBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwotICAgIHRlcm1pbmF0ZVNl
cnZpY2VXb3JrZXJzKCk7Ci0gICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBzX3Vz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxs
UHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycygpOwogfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogYm9vbCBXZWJQcm9jZXNz
UG9vbDo6aGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25z
dAogewotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10o
YXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoKSwgW10oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNT
ZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQog
CiBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5
Rm9yVGVzdGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yo
c2VydmljZVdvcmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJl
dHVybiBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5n
KCk7CiAgICAgfSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDYgQEAgT0JKQ19DTEFTUyBX
S1ByZWZlcmVuY2VPYnNlcnZlcjsKIAogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBBdXRvbWF0aW9u
Q2xpZW50OwotY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogY2xhc3MgRG93bmxv
YWRDbGllbnQ7CiBjbGFzcyBIVFRQQ29va2llU3RvcmU7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZUNs
aWVudDsKQEAgLTE3Niw3ICsxNzUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIaXN0b3J5Q2xp
ZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiYmKTsK
ICAgICB2b2lkIHNldERvd25sb2FkQ2xpZW50KFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50
PiYmKTsKICAgICB2b2lkIHNldEF1dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6
QXV0b21hdGlvbkNsaWVudD4mJik7Ci0gICAgdm9pZCBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50PiYmKTsKIAogICAgIHZvaWQgc2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVu
dGlmaWVyKGNvbnN0IFN0cmluZyYpOwogICAgIGNvbnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVu
dFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCkgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT5jdXN0
b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKTsgfQpAQCAtMTg3LDE3ICsxODUs
OSBAQCBwdWJsaWM6CiAgICAgLy8gbnVsbCBjaGVja3MgaW4gV2ViUGFnZVByb3h5LgogICAgIFdl
YlByb2Nlc3NQcm94eSogZHVtbXlQcm9jZXNzUHJveHkoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KSBjb25zdCB7IHJldHVybiBtX2R1bW15UHJvY2Vzc1Byb3hpZXMuZ2V0KHNlc3Npb25JRCkuZ2V0
KCk7IH0KIAotICAgIC8vIFdlYlByb2Nlc3Mgb3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3Jp
YXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9kZWwuIFRoZSBjb25uZWN0aW9uIG11c3QgYmUgbm9u
LW51bGwuCi0gICAgSVBDOjpDb25uZWN0aW9uKiBuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24o
KTsKLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzKGNv
bnN0IFQmIG1lc3NhZ2UpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxs
UHJvY2Vzc2VzRm9yU2Vzc2lvbihjb25zdCBUJiBtZXNzYWdlLCBQQUw6OlNlc3Npb25JRCk7CiAK
LSAgICAvLyBTZW5kcyB0aGUgbWVzc2FnZSB0byBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNz
IGFzIGFwcHJvcG9yaWF0ZSBmb3IgY3VycmVudCBwcm9jZXNzIG1vZGVsLgotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpOwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHZvaWQgc2VuZFN5bmNUb05ldHdv
cmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBVJiYgcmVwbHkpOwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHZvaWQgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5
KFQmJiBtZXNzYWdlKTsKLQogICAgIHZvaWQgcHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQ
cm9jZXNzUHJveHkqKTsKIAogICAgIFdlYlByb2Nlc3NDYWNoZSYgd2ViUHJvY2Vzc0NhY2hlKCkg
eyByZXR1cm4gbV93ZWJQcm9jZXNzQ2FjaGUuZ2V0KCk7IH0KQEAgLTIwNSw5ICsxOTUsNiBAQCBw
dWJsaWM6CiAgICAgLy8gRGlzY29ubmVjdCB0aGUgcHJvY2VzcyBmcm9tIHRoZSBjb250ZXh0Lgog
ICAgIHZvaWQgZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKLSAgICBXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmUqIHdlYnNpdGVEYXRhU3RvcmUoKSBjb25zdCB7IHJldHVybiBt
X3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFByaW1hcnlEYXRhU3RvcmUo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsgbV93ZWJzaXRlRGF0YVN0b3Jl
ID0gJmRhdGFTdG9yZTsgfQotCiAgICAgUmVmPFdlYlBhZ2VQcm94eT4gY3JlYXRlV2ViUGFnZShQ
YWdlQ2xpZW50JiwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogCiAgICAgdm9pZCBw
YWdlQmVnaW5Vc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2Vi
c2l0ZURhdGFTdG9yZSYpOwpAQCAtMjU4LDEwICsyNDUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
ZGRTdXBwb3J0ZWRQbHVnaW4oU3RyaW5nJiYgbWF0Y2hpbmdEb21haW4sIFN0cmluZyYmIG5hbWUs
IEhhc2hTZXQ8U3RyaW5nPiYmIG1pbWVUeXBlcywgSGFzaFNldDxTdHJpbmc+IGV4dGVuc2lvbnMp
OwogICAgIHZvaWQgY2xlYXJTdXBwb3J0ZWRQbHVnaW5zKCk7CiAKLSAgICBQcm9jZXNzSUQgbmV0
d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CiAgICAgUHJvY2Vzc0lEIHByZXdhcm1lZFByb2Nlc3NJ
ZGVudGlmaWVyKCk7CiAgICAgdm9pZCBhY3RpdmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JU
ZXN0aW5nKFByb2Nlc3NJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYm
KT4mJik7Ci0gICAgYm9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhj
b25zdCBTdHJpbmcmKTsKIAogICAgIFdlYlBhZ2VHcm91cCYgZGVmYXVsdFBhZ2VHcm91cCgpIHsg
cmV0dXJuIG1fZGVmYXVsdFBhZ2VHcm91cC5nZXQoKTsgfQogCkBAIC0zMDIsOCArMjg3LDYgQEAg
cHVibGljOgogICAgIEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlDbGll
bnQoKSB7IHJldHVybiAqbV9oaXN0b3J5Q2xpZW50OyB9CiAgICAgV2ViQ29udGV4dENsaWVudCYg
Y2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KIAotICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50JiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVy
biAqbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7IH0KLQogICAgIHN0cnVjdCBTdGF0aXN0
aWNzIHsKICAgICAgICAgdW5zaWduZWQgd2tWaWV3Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHdr
UGFnZUNvdW50OwpAQCAtMzE5LDEyICszMDIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKICAgICB2b2lkIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
KCk7CiAKLSAgICB2b2lkIGZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0KICAgICB2b2lkIHNldFNob3VsZE1ha2VOZXh0V2Vi
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRNYWtlTmV4
dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9CiAgICAgYm9vbCBzaG91
bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmc7IH0KLSAgICB2
b2lkIHNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhi
b29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JU
ZXN0aW5nID0gdmFsdWU7IH0KLSAgICBib29sIHNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkTWFrZU5leHROZXR3
b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nOyB9CiAKICAgICB2b2lkIHJlcG9ydFdlYkNv
bnRlbnRDUFVUaW1lKFNlY29uZHMgY3B1VGltZSwgdWludDY0X3QgYWN0aXZpdHlTdGF0ZSk7CiAK
QEAgLTM4MywxOSArMzYyLDEzIEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgLy8gTmV0d29yayBQ
cm9jZXNzIE1hbmFnZW1lbnQKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBlbnN1cmVOZXR3b3Jr
UHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSA9IG51bGxwdHIp
OwotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzKCkgY29uc3QgeyByZXR1
cm4gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKTsgfQogICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFz
aGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKTsKIAotICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6Okdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKLQogICAgIGJvb2wgaXNT
ZXJ2aWNlV29ya2VyUGFnZUlEKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIpIGNvbnN0OwogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLSAgICB2b2lkIGVzdGFibGlzaFdvcmtlckNvbnRleHRDb25u
ZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CisgICAgc3RhdGljIHZvaWQgZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25U
b05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmLCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
ICAgICB2b2lkIHJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKFdlYlByb2Nlc3NQcm94
eSYpOwotICAgIHNpemVfdCBzZXJ2aWNlV29ya2VyUHJveGllc0NvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbXB1dGVTaXplKCk7IH0KLSAgICB2b2lkIHNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihib29sIGFsbG93cykgeyBt
X2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlciA9IGFsbG93czsgfQotICAg
IGJvb2wgYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI7IH0KKyAgICBz
aXplX3Qgc2VydmljZVdvcmtlclByb3hpZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHNlcnZpY2VX
b3JrZXJQcm9jZXNzZXMoKS5jb21wdXRlU2l6ZSgpOyB9CiAgICAgdm9pZCB1cGRhdGVTZXJ2aWNl
V29ya2VyVXNlckFnZW50KGNvbnN0IFN0cmluZyYgdXNlckFnZW50KTsKICAgICBjb25zdCBPcHRp
b25hbDxVc2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyPiYgdXNlckNvbnRlbnRDb250cm9s
bGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkgY29uc3QgeyByZXR1cm4gbV91c2VyQ29u
dGVudENvbnRyb2xsZXJJREZvclNlcnZpY2VXb3JrZXI7IH0KICAgICBib29sIGhhc1NlcnZpY2VX
b3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3Q7CkBAIC00NDksOCArNDIy
LDYgQEAgcHVibGljOgogICAgIGJvb2wgYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gbV9hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHk7IH0KICAgICBi
b29sIHNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSBjb25zdCB7IHJldHVybiBtX3No
b3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb247IH0KIAotICAgIHZvaWQgc3ludGhlc2l6ZUFw
cElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpOwotICAgIAogI2lmIEVOQUJMRShHQU1FUEFE
KQogICAgIHZvaWQgZ2FtZXBhZENvbm5lY3RlZChjb25zdCBVSUdhbWVwYWQmLCBXZWJDb3JlOjpF
dmVudE1ha2VzR2FtZXBhZHNWaXNpYmxlKTsKICAgICB2b2lkIGdhbWVwYWREaXNjb25uZWN0ZWQo
Y29uc3QgVUlHYW1lcGFkJik7CkBAIC00ODgsNyArNDU5LDYgQEAgcHVibGljOgogICAgIHZvaWQg
Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKTsKIAogI2lmIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgdm9pZCBkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0
aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4mIGZyb21Eb21haW4sIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiB0b0Rv
bWFpbiwgT3B0aW9uU2V0PFdlYkNvcmU6OkNyb3NzU2l0ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6
OkZsYWc+LCBXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllcik7
CiAgICAgdm9pZCBzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluPiYmKTsKICAgICB2b2lkIHNlZWRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRm9yVGVzdGluZyhjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgZmlyc3RQYXJ0
eURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIHRoaXJkUGFydHlEb21h
aW4sIGJvb2wgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CiAgICAgdm9pZCBzZW5kUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFJbW1lZGlh
dGVseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwpAQCAtNTE1LDggKzQ4NSw4IEBAIHB1
YmxpYzoKICAgICAKICAgICBQbHVnSW5BdXRvU3RhcnRQcm92aWRlciYgcGx1Z0luQXV0b1N0YXJ0
UHJvdmlkZXIoKSB7IHJldHVybiBtX3BsdWdJbkF1dG9TdGFydFByb3ZpZGVyOyB9CiAKLSAgICB2
b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCk7Ci0gICAgYm9vbCB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV91c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOyB9CisgICAgc3RhdGljIHZvaWQgc2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKKyAgICBzdGF0aWMgYm9vbCB1c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkgeyByZXR1cm4gc191c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzOyB9CiAKICNpZiBFTkFCTEUoQ0ZQUkVGU19ESVJFQ1RfTU9ERSkKICAgICB2b2lk
IG5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZChjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IE9wdGlvbmFsPFN0cmluZz4mIGVuY29kZWRWYWx1ZSk7CkBAIC01Mjgs
OSArNDk4LDE1IEBAIHB1YmxpYzoKICAgICBpbnQzMl90IHVzZXJJZCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlcklkOyB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIE9TT2JqZWN0
UHRyPHhwY19vYmplY3RfdD4geHBjRW5kcG9pbnRNZXNzYWdlKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0cjx4cGNf
b2JqZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSk7CisgICAgc3RhdGljIHZvaWQgcGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsK
KyAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhh
bmRsZXJzKCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHN0YXRpYyBTdHJpbmcg
Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgcGFyZW50QnVuZGxl
RGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5
KCk7CisgICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGlyZWN0b3J5KCk7CisgICAg
c3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsKICNlbmRpZgogCiBw
cml2YXRlOgpAQCAtNTQ2LDggKzUyMiw2IEBAIHByaXZhdGU6CiAgICAgV2ViUHJvY2Vzc1Byb3h5
JiBjcmVhdGVOZXdXZWJQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9jZXNzUHJveHk6
OklzUHJld2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8pOwogICAgIHZv
aWQgaW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiwgV2Vic2l0ZURhdGFT
dG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6Oklz
UHJld2FybWVkOjpObyk7CiAKLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0KICAgICB2b2lkIGhhbmRs
ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29u
c3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5KTsKICAgICB2b2lkIGhhbmRsZVN5bmNocm9ub3VzTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBV
c2VyRGF0YSYgbWVzc2FnZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlckRhdGEmJik+
JiYpOwogCkBAIC01NzEsMTQgKzU0NSw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIHVzZXNTaW5n
bGVXZWJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT51c2VzU2luZ2xl
V2ViUHJvY2VzcygpOyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyBT
dHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgcGFyZW50
QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5nQ2FjaGVzRGly
ZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGlyZWN0b3J5KCk7
Ci0gICAgc3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsKLSNlbmRp
ZgotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCByZWdpc3Rlck5vdGlmaWNhdGlvbk9i
c2VydmVycygpOwogICAgIHZvaWQgdW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpOwpA
QCAtNjIwLDkgKzU4Niw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwg
V2Vha1B0cjxXZWJQcm9jZXNzUHJveHk+PiBtX2R1bW15UHJvY2Vzc1Byb3hpZXM7IC8vIExpZ2h0
d2VpZ2h0IFdlYlByb2Nlc3NQcm94eSBvYmplY3RzIHdpdGhvdXQgYmFja2luZyBwcm9jZXNzLgog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQ
cm94eT4gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzOworICAgIHN0YXRpYyBXZWFrSGFzaFNldDxX
ZWJQcm9jZXNzUHJveHk+JiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCk7CiAgICAgYm9vbCBtX3dh
aXRpbmdGb3JXb3JrZXJDb250ZXh0UHJvY2Vzc0Nvbm5lY3Rpb24geyBmYWxzZSB9OwotICAgIGJv
b2wgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIgeyBmYWxzZSB9Owog
ICAgIFN0cmluZyBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQ7CiAgICAgT3B0aW9uYWw8V2ViUHJl
ZmVyZW5jZXNTdG9yZT4gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXM7CiAgICAgT3B0aW9uYWw8
VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllcj4gbV91c2VyQ29udGVudENvbnRyb2xsZXJJ
REZvclNlcnZpY2VXb3JrZXI7CkBAIC02MzgsNyArNjAzLDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiBtX2F1dG9tYXRpb25DbGllbnQ7CiAg
ICAgVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+IG1fZG93bmxvYWRDbGllbnQ7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+IG1faGlzdG9y
eUNsaWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogCiAgICAgUmVmUHRyPFdlYkF1
dG9tYXRpb25TZXNzaW9uPiBtX2F1dG9tYXRpb25TZXNzaW9uOwogCkBAIC02NzAsOCArNjM0LDYg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQgeyBmYWxzZSB9Owog
ICAgIGRvdWJsZSBtX21lbW9yeVNhbXBsZXJJbnRlcnZhbCB7IDE0MDAuMCB9OwogCi0gICAgUmVm
UHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRlRGF0YVN0b3JlOwotCiAgICAg
dHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIqLCBSZWZQdHI8V2ViQ29udGV4dFN1cHBsZW1lbnQ+
LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4gV2ViQ29udGV4dFN1cHBsZW1lbnRNYXA7CiAgICAgV2Vi
Q29udGV4dFN1cHBsZW1lbnRNYXAgbV9zdXBwbGVtZW50czsKIApAQCAtNzAzLDggKzY2NSw2IEBA
IHByaXZhdGU6CiAKICAgICBib29sIG1fcHJvY2Vzc1Rlcm1pbmF0aW9uRW5hYmxlZCB7IHRydWUg
fTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQ
cm9jZXNzOwotCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPERpY3Rpb25hcnlDYWxsYmFj
az4+IG1fZGljdGlvbmFyeUNhbGxiYWNrczsKIAogICAgIGJvb2wgbV9tZW1vcnlDYWNoZURpc2Fi
bGVkIHsgZmFsc2UgfTsKQEAgLTcxMyw3ICs2NzMsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9h
bHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHk7CiAgICAgYm9vbCBtX3Nob3VsZFRha2VVSUJh
Y2tncm91bmRBc3NlcnRpb247CiAgICAgYm9vbCBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2hvdWxkTWFrZU5leHRO
ZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nIHsgZmFsc2UgfTsKICAgICBib29sIG1f
dGNjUHJlZmVyZW5jZUVuYWJsZWQgeyBmYWxzZSB9OwogCiAgICAgVXNlck9ic2VydmFibGVQYWdl
Q291bnRlciBtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXI7CkBAIC04MDUsMzIgKzc2NCwxNCBA
QCBwcml2YXRlOgogI2Vsc2UKICAgICBib29sIG1faXNEZWxheWVkV2ViUHJvY2Vzc0xhdW5jaERp
c2FibGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgbV91c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzIHsgZmFsc2UgfTsKKyAgICBzdGF0aWMgYm9vbCBzX3VzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3M7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQogICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IG1fZG9tYWluc1dpdGhV
c2VySW50ZXJhY3Rpb247CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIE9TT2Jq
ZWN0UHRyPHhwY19vYmplY3RfdD4gbV9lbmRwb2ludE1lc3NhZ2U7Ci0jZW5kaWYKIH07CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5n
UHJvY2VzcyhUJiYgbWVzc2FnZSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25l
dHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1
bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdl
KSwgMCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZW5kVG9BbGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSkKIHsKICAgICBzaXplX3QgcHJvY2Vz
c0NvdW50ID0gbV9wcm9jZXNzZXMuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgs
NiArMjY4LDkgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnNldFdlYnNpdGVEYXRhU3Rvcgogewog
ICAgIEFTU0VSVCghbV93ZWJzaXRlRGF0YVN0b3JlKTsKICAgICBtX3dlYnNpdGVEYXRhU3RvcmUg
PSAmZGF0YVN0b3JlOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGRhdGFTdG9yZS5zZW5kTmV0
d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcygqdGhpcyk7CisjZW5kaWYKICAgICB1
cGRhdGVSZWdpc3RyYXRpb25XaXRoRGF0YVN0b3JlKCk7CiAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UHJvY2Vzczo6U2V0V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMocHJvY2Vzc1Bvb2woKS53ZWJQ
cm9jZXNzRGF0YVN0b3JlUGFyYW1ldGVycygqdGhpcywgZGF0YVN0b3JlKSksIDApOwogfQpAQCAt
NzM4LDcgKzc0MSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXRQbHVnaW5Qcm9jZXNzQ28K
IAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihNZXNz
YWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5
ZWRSZXBseSYmIHJlcGx5KQogewotICAgIG1fcHJvY2Vzc1Bvb2wtPmdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUo
KS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKnRoaXMsIFdURk1vdmUocmVwbHkpKTsKIH0K
IAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKQEAgLTk1NSw5ICs5NTgsOCBAQCB2b2lkIFdlYlBy
b2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nCiAgICAgfQogCiAjaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgYXV0byBlbmRwb2ludE1lc3NhZ2UgPSBwcm9jZXNzUG9vbCgpLnhwY0VuZHBvaW50
TWVzc2FnZSgpOwotICAgIGlmIChlbmRwb2ludE1lc3NhZ2UpCi0gICAgICAgIHhwY19jb25uZWN0
aW9uX3NlbmRfbWVzc2FnZShjb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwgZW5kcG9pbnRN
ZXNzYWdlLmdldCgpKTsKKyAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQorICAgICAgICBtX3dl
YnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNz
KCp0aGlzKTsKICNlbmRpZgogCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fd2ViQ29ubmVjdGlvbik7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tp
ZVN0b3JlLmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDYg
QEAgbmFtZXNwYWNlIEFQSSB7CiBIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0Rh
dGFTdG9yZSh3ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUt
PnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3Jl
Ojp+SFRUUENvb2tpZVN0b3JlKCkKQEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+
SFRUUENvb2tpZVN0b3JlKCkKICAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAg
ICBBU1NFUlQoIW1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9j
b29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vz
c1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJB
cHBCb3VuZENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC04MSwzMyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZp
bHRlckFwcEJvdW5kQ29vawogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0g
ICAgICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGFsbENvb2tpZXM7Ci0gICAgICAgIGlmICht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSkKLSAgICAgICAgICAgIGFsbENvb2tpZXMgPSBnZXRBbGxEZWZhdWx0VUlQcm9j
ZXNzQ29va2llU3RvcmVDb29raWVzKCk7Ci0gICAgICAgIGFsbENvb2tpZXMuYXBwZW5kVmVjdG9y
KG1fb3duaW5nRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLQotICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgYWxsQ29va2ll
c10gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoYWxsQ29v
a2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICB9KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmdldEFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwb29sID0gV1RGTW92ZShwb29sKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBjb29raWVNYW5h
Z2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigp
OworICAgIGNvb2tpZU1hbmFnZXIuZ2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5k
Q29va2llcyhjb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9
CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjo6VVJMJiYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkKLSAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0KLSAgICBhdXRvKiBjb29raWVN
YW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2Vy
ID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwor
ICAgIGNvb2tpZU1hbmFnZXIuZ2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIHVybCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiYgY29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2ll
cyhjb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC0x
MTUsNzggKzk0LDI5IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjoK
IHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgYXBwQm91bmRDb29raWVzKSBtdXRhYmxlIHsKLSAg
ICAgICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tp
ZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgICAgIGlmICghcG9vbCkgewotICAgICAgICAgICAg
Zm9yIChhdXRvJiBjb29raWUgOiBhcHBCb3VuZENvb2tpZXMpIHsKLSAgICAgICAgICAgICAgICAv
LyBGSVhNRTogcGVuZGluZ0Nvb2tpZXMgdXNlZCBmb3IgZGVmYXVsdFNlc3Npb24gYmVjYXVzZSBz
ZXNzaW9uIGNvb2tpZXMgY2Fubm90IGJlIHByb3BhZ2F0ZWQgdG8gTmV0d29yayBQcm9jZXNzIHdp
dGggdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuCi0gICAgICAgICAgICAgICAgaWYg
KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgICAgICAgICAgc2V0
Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5hZGRQZW5k
aW5nQ29va2llKGNvb2tpZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9v
bC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAg
Y29va2llTWFuYWdlci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IGFwcEJvdW5kQ29va2llcywgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOworICAgICAgICBhdXRvJiBjb29raWVN
YW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdl
cigpOworICAgICAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCBhcHBCb3VuZENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZShjb25z
dCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+
cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkg
ewotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAg
ICAgZGVsZXRlQ29va2llRnJvbURlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+cmVtb3ZlUGVuZGlu
Z0Nvb2tpZShjb29raWUpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7
Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgW3Bv
b2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAg
IH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29y
a1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29r
aWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tp
ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9y
YWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5n
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAgZGVsZXRl
Q29va2llc0luRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVu
dDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5k
ZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgYXV0
byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNv
b2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUFsbENvb2tpZXMobV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKICAgICAvLyBGSVhNRTogVGhlIENvbXBsZXRpb25I
YW5kbGVyIHNob3VsZCBiZSBwYXNzZWQgdG8gV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVB
bGxDb29raWVzLgogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9v
bCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRp
b25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBzZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUocG9saWN5KTsKLSAgICAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5z
dXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1h
bmFnZXItPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9
KTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQ
cm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1
c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTIyNywyMSArMTU3LDcgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2
ZXIoTwogCiAgICAgbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA9IG1ha2VVbmlxdWU8QVBJ
V2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI+KCp0aGlzKTsKIAotICAgIGF1dG8qIHBvb2wg
PSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9u
cygpOwotCi0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIEFTU0VSVCghbV9vYnNlcnZpbmdVSVBy
b2Nlc3NDb29raWVzKTsKLQotICAgICAgICAvLyBMaXN0ZW4gZm9yIGNvb2tpZSBub3RpZmljYXRp
b25zIGluIHRoZSBVSVByb2Nlc3MgaW4gdGhlIG1lYW50aW1lLgotICAgICAgICBzdGFydE9ic2Vy
dmluZ0NoYW5nZXNUb0RlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShbdGhpc10gKCkgewotICAg
ICAgICAgICAgY29va2llc0RpZENoYW5nZSgpOwotICAgICAgICB9KTsKLQotICAgICAgICBtX29i
c2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eSA9ICZtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5h
Z2VyKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZl
cihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9i
c2VydmVyKTsKIH0KIApAQCAtMjc2LDQ2ICsxOTIsMTAgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6
OmNvb2tpZXNEaWRDaGFuZ2UoKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJE
ZXN0cm95ZWQoKQogewogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnVucmVnaXN0
ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFn
ZXJQcm94eU9ic2VydmVyKTsKLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbnVs
bHB0cjsKLQotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xG
b3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gcG9vbC0+c3VwcGxl
bWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNv
b2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rl
ck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdl
clByb3h5T2JzZXJ2ZXIpOwogfQogCi12b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JO
ZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIEFTU0VSVCghbV9wcm9jZXNzUG9v
bENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlv
bkxpc3RlbmVySWRlbnRpZmllciA9IFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclByb2Nlc3NQb29s
Q3JlYXRpb25MaXN0ZW5lcihbdGhpc10oV2ViUHJvY2Vzc1Bvb2wmIG5ld1Byb2Nlc3NQb29sKSB7
Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPmlzQXNzb2NpYXRlZFByb2Nlc3NQb29s
KG5ld1Byb2Nlc3NQb29sKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBOb3cg
dGhhdCBhbiBhc3NvY2lhdGVkIHByb2Nlc3MgcG9vbCBleGlzdHMsIHdlIG5lZWQgdG8gZmx1c2gg
dGhlIFVJIHByb2Nlc3MgY29va2llIHN0b3JlCi0gICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBhbnkg
Y2hhbmdlcyBhcmUgcmVmbGVjdGVkIHdpdGhpbiB0aGUgbmV3IHByb2Nlc3MgcG9vbC4KLSAgICAg
ICAgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgbmV3UHJvY2Vz
c1Bvb2wuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQotICAgICAgICBpZiAobV9jb29raWVNYW5h
Z2VyUHJveHlPYnNlcnZlcikgewotICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQ
cm94eSA9IG5ld1Byb2Nlc3NQb29sLnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7Ci0gICAgICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdp
c3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFu
YWdlclByb3h5T2JzZXJ2ZXIpOwotICAgICAgICB9Ci0gICAgICAgIHVucmVnaXN0ZXJGb3JOZXdQ
cm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBIVFRQQ29va2ll
U3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAg
IGlmIChtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpCi0gICAgICAgIFdl
YlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKG1fcHJv
Y2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29s
Q3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSAwOwotfQotCiAjaWYgIVBMQVRGT1JNKENPQ09B
KQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
KCkgeyB9CiBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBIVFRQQ29va2llU3RvcmU6OmdldEFsbERl
ZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKSB7IHJldHVybiB7IH07IH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgJ
KHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQ
Q29va2llU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtODMsOSArODMsNiBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmKTsK
IAotICAgIHZvaWQgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAg
ICB2b2lkIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLQogICAg
IHZvaWQgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKICAgICBzdGF0aWMgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29v
a2llcygpOwogICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZUluRGVmYXVsdFVJUHJvY2Vzc0Nvb2tp
ZVN0b3JlKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MTEsMTEgKzQxMSw2IEBAIHZvaWQgV0tDb250ZXh0UHJlY29ubmVjdFRvU2VydmVyKFdLQ29udGUK
IHsKIH0KIAotV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0
Ojp0b0ltcGwoY29udGV4dFJlZiktPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCkpOwotfQotCiBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0
ZURhdGFTdG9yZShXS0NvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdLV2Vic2l0ZURhdGFTdG9y
ZUdldERlZmF1bHREYXRhU3RvcmUoKTsKQEAgLTUyNywxMyArNTIyLDYgQEAgdm9pZCBXS0NvbnRl
eHRTZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlYwogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRS
ZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChlbmFibGUpOwog
fQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdv
cmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgYWxsb3dzKQotewotI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+c2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0K
LQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNo
ZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEko
JldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMo
KS5sZWFrUmVmKCkpOwpAQCAtNTc1LDIxICs1NjMsMTEgQEAgdm9pZCBXS0NvbnRleHRTZXRGb250
QWxsb3dMaXN0KFdLQ29udGV4dAogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRG
b250QWxsb3dMaXN0KFdlYktpdDo6dG9JbXBsKGFycmF5UmVmKSk7CiB9CiAKLXZvaWQgV0tDb250
ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAg
V2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0K
IHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmIGNvbnRl
eHQpCiB7CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZVNlcnZpY2VXb3Jr
ZXJzKCk7CiB9CiAKLVByb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9JbXBs
KGNvbnRleHRSZWYpLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKLX0KLQogdm9pZCBXS0Nv
bnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4oV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5n
UmVmIGRvbWFpblJlZiwgV0tTdHJpbmdSZWYgbmFtZVJlZiwgV0tBcnJheVJlZiBtaW1lVHlwZXNS
ZWYsIFdLQXJyYXlSZWYgZXh0ZW5zaW9uc1JlZikKIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKQEAgLTYxOSwxMiArNTk3LDExIEBAIHZvaWQgV0tDb250ZXh0Q2xlYXJDdXJyZW50
TW9kaWZpZXJTdGF0ZUYKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+Y2xlYXJDdXJy
ZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBib29s
IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCit2b2lkIFdLQ29udGV4dFNldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoV0tDb250ZXh0UmVmLCBib29sIHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZikt
PnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2Vzcyk7CisgICAgV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIH0K
IAotdm9pZCBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYg
Y29udGV4dFJlZiwgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3RvcmUpCit2b2lk
IFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiwgV0tXZWJz
aXRlRGF0YVN0b3JlUmVmKQogewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRQ
cmltYXJ5RGF0YVN0b3JlKCpXZWJLaXQ6OnRvSW1wbCh3ZWJzaXRlRGF0YVN0b3JlKSk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaAkocmV2aXNpb24g
MjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNiBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRT
dG9wTWVtb3J5U2FtcGxlCiBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4
dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJF
Q0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0
b3JlKTsKIAogV0tfRVhQT1JUIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0
R2V0QXBwbGljYXRpb25DYWNoZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJ
X0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0
RGF0YVN0b3JlKTsKLVdLX0VYUE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29v
a2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdL
X0VYUE9SVCBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1h
bmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVm
IFdLQ29udGV4dEdldEljb25EYXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBP
UlQgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFn
ZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9S
RVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgJ
KHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29u
dGV4dFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtODMsMTEgKzgzLDggQEAgV0tfRVhQT1JU
IHZvaWQgV0tDb250ZXh0V2FybUluaXRpYWxQcm9jZQogLy8gQXQgc29tZSBwb2ludCBpdCBzaG91
bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJv
Y2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRUZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250
ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmKTsKIAotV0tfRVhQT1JUIHZv
aWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVz
dGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0eXBlZGVmIHZvaWQgKCpXS0NvbnRleHRJbnZh
bGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSk7CiBXS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKFdLQ29udGV4dEludmFsaWRN
ZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VGdW5jdGlvbik7CiAgICAgCkBAIC05Nyw4ICs5
NCw2IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEZvbnRBbGxvd0xpc3QKIAogV0tfRVhQ
T1JUIHZvaWQgV0tDb250ZXh0UHJlY29ubmVjdFRvU2VydmVyKFdLQ29udGV4dFJlZiBjb250ZXh0
LCBXS1VSTFJlZiBzZXJ2ZXJVUkwpIFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiAKLVdLX0VYUE9SVCBX
S1Byb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tDb250ZXh0
UmVmIGNvbnRleHQpOwotCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVn
aW4oV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLU3RyaW5nUmVmIGRvbWFpbiwgV0tTdHJpbmdSZWYg
bmFtZSwgV0tBcnJheVJlZiBtaW1lVHlwZXMsIFdLQXJyYXlSZWYgZXh0ZW5zaW9ucyk7CiBXS19F
WFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhclN1cHBvcnRlZFBsdWdpbnMoV0tDb250ZXh0UmVmIGNv
bnRleHQpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJ
KHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCw2ICszOTgsMTEgQEAgdWludDY0X3QgV0tQYWdl
R2V0UmVuZGVyVHJlZVNpemUoV0tQYWdlUgogICAgIHJldHVybiB0b0ltcGwocGFnZSktPnJlbmRl
clRyZWVTaXplKCk7CiB9CiAKK1dLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1BhZ2VHZXRXZWJzaXRl
RGF0YVN0b3JlKFdLUGFnZVJlZiBwYWdlKQoreworICAgIHJldHVybiB0b0FQSSgmdG9JbXBsKHBh
Z2UpLT53ZWJzaXRlRGF0YVN0b3JlKCkpOworfQorCiBXS0luc3BlY3RvclJlZiBXS1BhZ2VHZXRJ
bnNwZWN0b3IoV0tQYWdlUmVmIHBhZ2VSZWYpCiB7CiAgICAgcmV0dXJuIHRvQVBJKHRvSW1wbChw
YWdlUmVmKS0+aW5zcGVjdG9yKCkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tQYWdlLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDggQEAgV0tfRVhQT1JU
IGRvdWJsZSBXS1BhZ2VHZXRFc3RpbWF0ZWRQcm9ncgogCiBXS19FWFBPUlQgdWludDY0X3QgV0tQ
YWdlR2V0UmVuZGVyVHJlZVNpemUoV0tQYWdlUmVmIHBhZ2UpOwogCitXS19FWFBPUlQgV0tXZWJz
aXRlRGF0YVN0b3JlUmVmIFdLUGFnZUdldFdlYnNpdGVEYXRhU3RvcmUoV0tQYWdlUmVmIHBhZ2Up
OworCiBXS19FWFBPUlQgV0tJbnNwZWN0b3JSZWYgV0tQYWdlR2V0SW5zcGVjdG9yKFdLUGFnZVJl
ZiBwYWdlKTsKIAogV0tfRVhQT1JUIFdLU3RyaW5nUmVmIFdLUGFnZUNvcHlVc2VyQWdlbnQoV0tQ
YWdlUmVmIHBhZ2UpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJBUElBcnJheS5oIgog
I2luY2x1ZGUgIkFQSUhUVFBDb29raWVTdG9yZS5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNz
UHJveHkuaCIKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNs
dWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0RpY3Rpb25hcnkuaCIKQEAgLTY5LDYgKzcw
LDE2IEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1dlYnNpdGVEYXRhU3RvcmUKICAgICByZXR1
cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoKldlYktp
dDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLCBzZXNzaW9uSUQpLmxlYWtSZWYoKSk7CiB9CiAKK3Zv
aWQgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0
YVN0b3JlUmVmIGRhdGFTdG9yZSkKK3sKKyAgICBXZWJLaXQ6OnRvSW1wbChkYXRhU3RvcmUpLT50
ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworfQorCitXS1Byb2Nlc3NJRCBXS1dlYnNpdGVEYXRh
U3RvcmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRh
dGFTdG9yZSkKK3sKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoZGF0YVN0b3JlKS0+bmV0d29y
a1Byb2Nlc3MoKS5wcm9jZXNzSWRlbnRpZmllcigpOworfQorCiB2b2lkIFdLV2Vic2l0ZURhdGFT
dG9yZVJlbW92ZUlUUERhdGFGb3JEb21haW4oV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9y
ZVJlZiwgV0tTdHJpbmdSZWYgaG9zdCwgdm9pZCogY29udGV4dCwgV0tXZWJzaXRlRGF0YVN0b3Jl
UmVtb3ZlSVRQRGF0YUZvckRvbWFpbkZ1bmN0aW9uIGNhbGxiYWNrKQogewogI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAkocmV2aXNpb24gMjY3NTM2
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVm
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDEzIEBACiAjaW5jbHVkZSA8V2ViS2l0L1dL
QmFzZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS0RlcHJlY2F0ZWQuaD4KIAorI2lmIGRlZmluZWQo
V0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyKQordHlwZWRlZiBpbnQgV0tQcm9jZXNzSUQ7CisjZWxz
ZQorI2luY2x1ZGUgPHVuaXN0ZC5oPgordHlwZWRlZiBwaWRfdCBXS1Byb2Nlc3NJRDsKKyNlbmRp
ZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCkBAIC01MCw2ICs1
NywxMSBAQCBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRBbGxvCiAKIFdLX0VY
UE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tXZWJz
aXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZik7CiAKK1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0
ZURhdGFTdG9yZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRh
dGFTdG9yZSk7CitXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3
b3JrUHJvY2VzcyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKKworV0tfRVhQT1JU
IFdLUHJvY2Vzc0lEIFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmll
cihXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKKwogV0tfRVhQT1JUIGJvb2wgV0tX
ZWJzaXRlRGF0YVN0b3JlR2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJzaXRl
RGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZik7CiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRh
U3RvcmVTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChXS1dlYnNpdGVEYXRhU3RvcmVS
ZWYgZGF0YVN0b3JlUmVmLCBib29sIGVuYWJsZSk7CiB0eXBlZGVmIHZvaWQgKCpXS1dlYnNpdGVE
YXRhU3RvcmVTdGF0aXN0aWNzRXBoZW1lcmFsRnVuY3Rpb24pKGJvb2wgaXNFcGhlbWVyYWwsIHZv
aWQqIGZ1bmN0aW9uQ29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTQwNiwyOCArNDA2LDYgQEAgLSAodm9pZClfY2xlYXJTdXBwb3J0ZWRQbHVnaW5z
CiAgICAgX3Byb2Nlc3NQb29sLT5jbGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIH0KIAotLSAodm9p
ZClfdGVybWluYXRlTmV0d29ya1Byb2Nlc3MKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0KLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxT
dXNwZW5kSW1taW5lbnRseQotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOwotfQotCi0tICh2b2lkKV9zZW5kTmV0
d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5k
bGVyCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNw
ZW5kRm9yVGVzdGluZyhbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlv
bkhhbmRsZXIpXSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7Ci19Ci0K
LS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQotewotICAgIF9wcm9jZXNzUG9v
bC0+c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7Ci19Ci0KIC0gKHZvaWQpX3Rlcm1pbmF0
ZVNlcnZpY2VXb3JrZXJzCiB7CiAgICAgX3Byb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycygpOwpAQCAtNDM1LDEyICs0MTMsNyBAQCAtICh2b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycwogCiAtICh2b2lkKV9zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOihCT09M
KXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MKIHsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNl
dFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyk7Ci19Ci0KLS0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIKLXsKLSAg
ICByZXR1cm4gX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKKyAgICBX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCiAtIChwaWRfdClfcHJld2Fy
bWVkUHJvY2Vzc0lkZW50aWZpZXIKQEAgLTQ2NywxMSArNDQwLDYgQEAgLSAodm9pZClfbWFrZU5l
eHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvcgogICAgIF9wcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFr
ZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcodHJ1ZSk7CiB9CiAKLS0gKHZvaWQp
X21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZwotewotICAgIF9wcm9j
ZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nKHRydWUpOwotfQotCiAtIChCT09MKV9oYXNQcmV3YXJtZWRXZWJQcm9jZXNzCiB7CiAgICAg
Zm9yIChhdXRvJiBwcm9jZXNzIDogX3Byb2Nlc3NQb29sLT5wcm9jZXNzZXMoKSkgewpAQCAtNTYw
LDE4ICs1MjgsNiBAQCAtICh2b2lkKV9zZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hCiAg
ICAgX3Byb2Nlc3NQb29sLT5zZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZChlbmFi
bGVkKTsKIH0KIAotLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNr
Z3JvdW5kCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJh
Y2tncm91bmQpOwotfQotCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNl
cnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzCi17Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQot
ICAgIF9wcm9jZXNzUG9vbC0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAtIChp
ZCA8X1dLR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRlcj4pX2NvcmVMb2NhdGlvblByb3Zp
ZGVyCiB7CkBAIC02MDQsMTEgKzU2MCw2IEBAIC0gKHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2lu
c0luV2ViUHJvY2UKICAgICB9KTsKIH0KIAotLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQKLXsKLSAgICByZXR1cm4g
X3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhlbnRp
dGxlbWVudCk7Ci19Ci0KIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90
ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVjdGlvblNwYWNlCiB7CiAg
ICAgX3Byb2Nlc3NQb29sLT5jbGVhclBlcm1hbmVudENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNw
YWNlKFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZShwcm90ZWN0aW9uU3BhY2UpKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQ
b29sUHJpdmF0ZS5oCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtODcs
MTQgKzg3LDkgQEAKIC0gKF9XS0Rvd25sb2FkICopX3Jlc3VtZURvd25sb2FkRnJvbURhdGE6KE5T
RGF0YSAqKXJlc3VtZURhdGEgd2Vic2l0ZURhdGFTdG9yZTooV0tXZWJzaXRlRGF0YVN0b3JlICop
ZGF0YVN0b3JlICBwYXRoOihOU1N0cmluZyAqKXBhdGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dl
YlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4gU2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoaWxl
IG5vIHdlYiBjb250ZW50IHByb2Nlc3NlcyBhcmUgcnVubmluZy4KLS0gKHZvaWQpX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkp
OwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwot
LSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9pZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4wKSk7CiAKIC8vIFRlc3Qgb25s
eS4KLS0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMyksIGlvcygxMS4wKSk7CiAtIChwaWRfdClfcHJld2FybWVkUHJvY2Vzc0lkZW50
aWZpZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIC8vIFRl
c3Qgb25seS4KQEAgLTEwNiw3ICsxMDEsNiBAQAogLSAoc2l6ZV90KV9zZXJ2aWNlV29ya2VyUHJv
Y2Vzc0NvdW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogLSAo
dm9pZClfc3luY05ldHdvcmtQcm9jZXNzQ29va2llcyBXS19BUElfREVQUkVDQVRFRF9XSVRIX1JF
UExBQ0VNRU5UKCJXS0hUVFBDb29raWVTdG9yZS5fZmx1c2hDb29raWVzVG9EaXNrV2l0aENvbXBs
ZXRpb25IYW5kbGVyOiIsIG1hY29zKDEwLjEzLCBXS19NQUNfVEJBKSwgaW9zKDExLjAsIFdLX0lP
U19UQkEpKTsKIC0gKHZvaWQpX21ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwotLSAodm9pZClfbWFr
ZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogLSAoTlNVSW50ZWdlcilfbWF4aW11bVN1c3BlbmRl
ZFBhZ2VDb3VudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwog
LSAoTlNVSW50ZWdlcilfcHJvY2Vzc0NhY2hlQ2FwYWNpdHkgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKE5TVUludGVnZXIpX3Byb2Nlc3NDYWNoZVNpemUg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CkBAIC0xMjIsMTMgKzEx
NiwxMCBAQAogLSAodm9pZClfcHJlY29ubmVjdFRvU2VydmVyOihOU1VSTCAqKXNlcnZlclVSTCBX
S19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKCJXS1dlYlZpZXcuX3ByZWNvbm5lY3RU
b1NlcnZlciIsIG1hY29zKDEwLjEzLjQsIFdLX01BQ19UQkEpLCBpb3MoMTEuMywgV0tfSU9TX1RC
QSkpOwogCiAvLyBUZXN0IG9ubHkuCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTMuNCksIGlvcygxMS4zKSk7CiAtICh2b2lkKV9nZXRBY3RpdmVQYWdlc09yaWdpbnNJbldlYlBy
b2Nlc3NGb3JUZXN0aW5nOihwaWRfdClwaWQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNB
cnJheTxOU1N0cmluZyAqPiAqKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwotLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50Q3Jl
ZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVj
dGlvblNwYWNlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogCiBA
cHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0Nvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdF
bmFibGVkLCBzZXR0ZXI9X3NldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkOikgQk9P
TCBfY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQgV0tfQVBJX0RFUFJFQ0FURUQoIlBh
cnRpdGlvbmVkIGNvb2tpZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQiLCBtYWNvcygxMC4xMi4z
LCAxMC4xNC40KSwgaW9zKDEwLjMsIDEyLjIpKTsKLS0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwg
aW9zKDEzLjApKTsKIAogLy8gVGVzdCBvbmx5LgogLSAodm9pZClfc2VlZFJlc291cmNlTG9hZFN0
YXRpc3RpY3NGb3JUZXN0aW5nV2l0aEZpcnN0UGFydHk6KE5TVVJMICopZmlyc3RQYXJ0eVVSTCB0
aGlyZFBhcnR5OihOU1VSTCAqKXRoaXJkUGFydHlVUkwgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRp
b246KEJPT0wpc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24gY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0JKHJldmlzaW9u
IDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVE
YXRhU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTYxNyw2ICs2MTcsMTEgQEAgLSAodm9pZClf
cmVuYW1lT3JpZ2luOihOU1VSTCAqKW9sZE5hbWUgdAogICAgIH0pOwogfQogCistIChCT09MKV9u
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxl
bWVudAoreworICAgIHJldHVybiBfd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcoZW50aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0
ZURhdGFTdG9yZURlbGVnYXRlPilfZGVsZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdl
dCgpLmdldCgpOwpAQCAtNjY4LDQgKzY3Myw0MiBAQCAtICh2b2lkKV9hcHBCb3VuZFNjaGVtZXM6
KHZvaWQgKF4pKE5TQXJyCiAjZW5kaWYKIH0KIAorLSAodm9pZClfdGVybWluYXRlTmV0d29ya1By
b2Nlc3MKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3Mo
KTsKK30KKworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9p
ZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5z
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhbY29tcGxldGlvbkhh
bmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseQoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7CisKK30KKworLSAo
dm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lCit7CisgICAgX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOworfQorCistICh2b2lkKV9zeW50aGVz
aXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQKK3sKKyAgICBfd2Vic2l0ZURhdGFT
dG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91
bmQpOworfQorCistIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCit7CisgICAgcmV0
dXJuIF93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnByb2Nlc3NJZGVudGlmaWVy
KCk7Cit9CisKKysgKHZvaWQpX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZworeworICAgIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bWFrZU5leHROZXR3b3JrUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCk7Cit9CisKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFT
dG9yZVByaXZhdGUuaAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtODUsOSArODUsMTkgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dlYnNp
dAogCiAtICh2b2lkKV9yZW5hbWVPcmlnaW46KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKilu
ZXdOYW1lIGZvckRhdGFPZlR5cGVzOihOU1NldDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJP
T0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVu
dGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CisKIEBwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dl
YnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2RlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTUpLCBpb3MoMTMuMCkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5
KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0g
KHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQ
cmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3Jr
UHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3Mo
V0tfSU9TX1RCQSkpOworLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCli
YWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CistIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisrICh2b2lkKV9tYWtlTmV4
dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwogQGVuZAogCiBOU19BU1NVTUVfTk9O
TlVMTF9FTkQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIldlYktpdENvb2tpZU1hbmFnZXIuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJv
eHkuaCIKICNpbmNsdWRlICJTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlLmgiCiAjaW5j
bHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFu
YWdlclByaXZhdGUuaCIKQEAgLTU2LDYgKzU3LDEyIEBAIGVudW0gewogfTsKIAogc3RydWN0IF9X
ZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBj
b29raWVNYW5hZ2VyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChkYXRhTWFuYWdlcik7
CisgICAgICAgIHJldHVybiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoZGF0
YU1hbmFnZXIpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIH0KKwogICAg
IFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
ZGF0YU1hbmFnZXIpOwpAQCAtNjQsOCArNzEsNyBAQCBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFn
ZXJQcml2YXRlIHsKIAogICAgIH5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUoKQogICAgIHsK
LSAgICAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldFByb2Nlc3NQb29scyhkYXRhTWFuYWdlcikpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+
c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2Fs
bGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOworICAgICAgICBjb29raWVNYW5hZ2VyKCkuc2V0
Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CiAgICAgfQogCiAg
ICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuYWdlcjsKQEAgLTEzOSwxMSArMTQ1
LDkgQEAgV2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0Q29va2llTWFuYWdlcgogewogICAgIFdl
YktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdl
ci0+cHJpdi0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nl
c3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXIt
PnByaXYtPmRhdGFNYW5hZ2VyKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9l
bWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9Cisg
ICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJh
Y2sobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2ln
bmFsX2VtaXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0
dXJuIG1hbmFnZXI7CiB9CiAKQEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVf
bWFuYWdlcl9zZXRfcGVyc2lzdGVuCiAgICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2Vy
KSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5
PigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVU
RjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkp
OworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE5Miw4ICsx
OTUsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvCiB7CiAgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlcikpOwogCi0g
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFBy
b2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0
UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5h
Z2VyKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQo
KSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKIH0KIAogLyoq
CkBAIC0yMTcsMTQgKzIxOSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2Nl
cHRfcG8KIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyht
YW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7CiAKLSAgICAvLyBUaGUg
cG9saWN5IGlzIHRoZSBzYW1lIGluIGFsbCBwcm9jZXNzIHBvb2xzIGhhdmluZyB0aGUgc2FtZSBz
ZXNzaW9uIElELCBzbyBqdXN0IGFzayBhbnkuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xz
ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKTsKLSAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkgewotICAgICAg
ICBnX3Rhc2tfcmV0dXJuX2ludCh0YXNrLmdldCgpLCBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NF
UFRfTk9fVEhJUkRfUEFSVFkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcHJvY2Vz
c1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZN
b3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgeworICAg
IG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CiAgICAgICAgIGdfdGFza19yZXR1
cm5faW50KHRhc2suZ2V0KCksIHRvV2ViS2l0Q29va2llQWNjZXB0UG9saWN5KHBvbGljeSkpOwog
ICAgIH0pOwogfQpAQCAtMjY5LDExICsyNjQsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9hZGRfY29va2llKFdlCiAgICAgZ19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAgICAgR1Jl
ZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxh
YmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3Jp
dHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MK
LSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0
aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRh
TWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKS0+c2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgeyBXZWJD
b3JlOjpDb29raWUoY29va2llKSB9LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIG1h
bmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNl
c3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0
YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVF
KTsKICAgICB9KTsKIH0KQEAgLTMyMCwxMSArMzExLDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21h
bmFnZXJfZ2V0X2Nvb2tpZXMoVwogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAogICAgIEdS
ZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxs
YWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dy
aXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNz
Ci0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2Ug
dGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3
ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0
YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5h
Z2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVSTChV
UkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25z
dCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIG1hbmFnZXItPnByaXYt
PmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBV
UkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0o
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAgR0xpc3Qq
IGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBjb29r
aWVzKQogICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29raWVzTGlz
dCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzY1LDcgQEAgdm9pZCB3ZWJr
aXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZQogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29v
a2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyht
YW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29r
aWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24g
ZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJv
bSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBw
cm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFu
YWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmRlbGV0ZUNvb2tpZShtYW5hZ2VyLT5wcml2LT5z
ZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RGTW92ZSh0YXNr
KV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLmRlbGV0ZUNvb2tpZSht
YW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNr
ID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNr
LmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCShyZXZpc2lvbiAyNjc1
MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAyLDcgKzQwMiw2IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dFdlYkNvbnRleHRDb25zdHJ1Y3RlZCgKICAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2Vy
ID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcoImxvY2FsLXN0b3Jh
Z2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEoKSwgbnVsbHB0
cikpOwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKGNv
bmZpZ3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRQcmltYXJ5RGF0YVN0b3Jl
KHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJzaXRlRGF0YU1h
bmFnZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1lc3NhZ2VIYW5k
bGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgLy8g
U2luayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRyPFdlYktpdFVzZXJNZXNzYWdl
PiB1c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRlKFdURk1vdmUobWVzc2FnZSks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTQxMCw4ICs0MDksNiBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoCiAgICAgICAgIGdfc2lnbmFsX2VtaXQo
d2ViQ29udGV4dCwgc2lnbmFsc1tVU0VSX01FU1NBR0VfUkVDRUlWRURdLCAwLCB1c2VyTWVzc2Fn
ZS5nZXQoKSwgJnJldHVyblZhbHVlKTsKICAgICB9KTsKIAotICAgIHdlYmtpdFdlYnNpdGVEYXRh
TWFuYWdlckFkZFByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwgKnBy
aXYtPnByb2Nlc3NQb29sKTsKLQogICAgIHByaXYtPnByb2Nlc3NNb2RlbCA9IFdFQktJVF9QUk9D
RVNTX01PREVMX01VTFRJUExFX1NFQ09OREFSWV9QUk9DRVNTRVM7CiAKICNpZiBFTkFCTEUoTUVN
T1JZX1NBTVBMRVIpCkBAIC00MzksMTEgKzQzNiw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNv
bnRleHREaXNwb3NlKEdPYmoKICAgICAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldERvd25sb2Fk
Q2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSk7CiAgICAgfQogCi0g
ICAgaWYgKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlcikgewotICAgICAgICB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJSZW1vdmVQcm9jZXNzUG9vbChwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0
KCksICpwcml2LT5wcm9jZXNzUG9vbCk7Ci0gICAgICAgIHByaXYtPndlYnNpdGVEYXRhTWFuYWdl
ciA9IG51bGxwdHI7Ci0gICAgfQotCiAgICAgaWYgKHByaXYtPmZhdmljb25EYXRhYmFzZSkgewog
ICAgICAgICB3ZWJraXRGYXZpY29uRGF0YWJhc2VDbG9zZShwcml2LT5mYXZpY29uRGF0YWJhc2Uu
Z2V0KCkpOwogICAgICAgICBwcml2LT5mYXZpY29uRGF0YWJhc2UgPSBudWxscHRyOwpAQCAtMTU4
MSw4ICsxNTczLDggQEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfcHJlZmV0Y2hfZG5zKFdlYgog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpKTsKICAg
ICBnX3JldHVybl9pZl9mYWlsKGhvc3RuYW1lKTsKIAotICAgIGlmIChjb250ZXh0LT5wcml2LT5k
bnNQcmVmZXRjaGVkSG9zdHMuYWRkKGhvc3RuYW1lKS5pc05ld0VudHJ5KQotICAgICAgICBjb250
ZXh0LT5wcml2LT5wcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpQcmVmZXRjaEROUyhTdHJpbmc6OmZyb21VVEY4KGhvc3RuYW1lKSkp
OworICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXREYXRhU3RvcmUoY29udGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKKyAg
ICB3ZWJzaXRlRGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlByZWZldGNoRE5TKFN0cmluZzo6ZnJvbVVURjgoaG9zdG5hbWUpKSwgMCk7CiAg
ICAgY29udGV4dC0+cHJpdi0+ZG5zUHJlZmV0Y2hIeXN0ZXJlcmlzLmltcHVsc2UoKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vi
Vmlldy5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTksNyArNzU5LDYg
QEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYgogICAgICAgICB3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHByaXYtPndlYnNp
dGVEYXRhTWFuYWdlci5nZXQoKSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90bHNf
ZXJyb3JzX3BvbGljeShjb250ZXh0RGF0YU1hbmFnZXIpKTsKICAgICAgICAgYXV0byBwcm94eVNl
dHRpbmdzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGNvbnRleHREYXRh
TWFuYWdlcikubmV0d29ya1Byb3h5U2V0dGluZ3MoKTsKICAgICAgICAgd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkuc2V0
TmV0d29ya1Byb3h5U2V0dGluZ3MoV1RGTW92ZShwcm94eVNldHRpbmdzKSk7Ci0gICAgICAgIHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckFkZFByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFu
YWdlci5nZXQoKSwgd2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHByaXYtPmNvbnRleHQu
Z2V0KCkpKTsKICAgICB9CiAKICAgICBpZiAoIXByaXYtPndlYnNpdGVQb2xpY2llcykKQEAgLTk0
NSwxMSArOTQ0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Rpc3Bvc2UoR09iamVjdAog
ICAgICAgICB3ZWJraXRXZWJDb250ZXh0V2ViVmlld0Rlc3Ryb3llZCh3ZWJWaWV3LT5wcml2LT5j
b250ZXh0LmdldCgpLCB3ZWJWaWV3KTsKICAgICB9CiAKLSAgICBpZiAod2ViVmlldy0+cHJpdi0+
d2Vic2l0ZURhdGFNYW5hZ2VyKSB7Ci0gICAgICAgIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlclJl
bW92ZVByb2Nlc3NQb29sKHdlYlZpZXctPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwg
d2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHdlYlZpZXctPnByaXYtPmNvbnRleHQuZ2V0
KCkpKTsKLSAgICAgICAgd2ViVmlldy0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gbnVsbHB0
cjsKLSAgICB9Ci0KICAgICBpZiAod2ViVmlldy0+cHJpdi0+Y3VycmVudFNjcmlwdERpYWxvZykg
ewogICAgICAgICB3ZWJraXRfc2NyaXB0X2RpYWxvZ19jbG9zZSh3ZWJWaWV3LT5wcml2LT5jdXJy
ZW50U2NyaXB0RGlhbG9nKTsKICAgICAgICAgQVNTRVJUKCF3ZWJWaWV3LT5wcml2LT5jdXJyZW50
U2NyaXB0RGlhbG9nKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcAkocmV2aXNpb24g
MjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTEgKzk1LDYgQEAgZW51bSB7
CiB9OwogCiBzdHJ1Y3QgX1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUgewotICAgIH5f
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQo
cHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSk7Ci0gICAgfQotCiAgICAgUmVmUHRyPFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZT4gd2Vic2l0ZURhdGFTdG9yZTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGJh
c2VEYXRhRGlyZWN0b3J5OwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gYmFzZUNhY2hlRGlyZWN0b3J5
OwpAQCAtMTE1LDcgKzExMCw2IEBAIHN0cnVjdCBfV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJp
dmF0ZSAKICAgICBXZWJLaXRUTFNFcnJvcnNQb2xpY3kgdGxzRXJyb3JzUG9saWN5OwogCiAgICAg
R1JlZlB0cjxXZWJLaXRDb29raWVNYW5hZ2VyPiBjb29raWVNYW5hZ2VyOwotICAgIFZlY3RvcjxX
ZWJQcm9jZXNzUG9vbCo+IHByb2Nlc3NQb29sczsKIH07CiAKIFdFQktJVF9ERUZJTkVfVFlQRShX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIsIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlciwgR19U
WVBFX09CSkVDVCkKQEAgLTQ5NCwzMCArNDg4LDEzIEBAIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZSYgd2Via2l0V2Vic2l0ZUQKICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24tPnNldFNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoRmlsZVN5c3RlbTo6c3RyaW5nRnJvbUZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihwcml2LT5zd1JlZ2lzdHJhdGlvbnNEaXJlY3RvcnkuZ2V0KCkpKTsK
ICAgICAgICAgaWYgKHByaXYtPmRvbUNhY2hlRGlyZWN0b3J5KQogICAgICAgICAgICAgY29uZmln
dXJhdGlvbi0+c2V0Q2FjaGVTdG9yYWdlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnN0cmluZ0Zyb21G
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocHJpdi0+ZG9tQ2FjaGVEaXJlY3RvcnkuZ2V0KCkpKTsK
LSAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6Y3JlYXRlKFdURk1vdmUoY29uZmlndXJhdGlvbiksIFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkpOworICAgICAgICBwcml2LT53ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoV1RGTW92ZShjb25maWd1cmF0aW9uKSwgUEFMOjpTZXNz
aW9uSUQ6OmdlbmVyYXRlUGVyc2lzdGVudFNlc3Npb25JRCgpKTsKICAgICAgICAgcHJpdi0+d2Vi
c2l0ZURhdGFTdG9yZS0+c2V0SWdub3JlVExTRXJyb3JzKHByaXYtPnRsc0Vycm9yc1BvbGljeSA9
PSBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKICAgICB9CiAKICAgICByZXR1cm4g
KnByaXYtPndlYnNpdGVEYXRhU3RvcmU7CiB9CiAKLXZvaWQgd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyQWRkUHJvY2Vzc1Bvb2woV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBXZWJQ
cm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCi17Ci0gICAgQVNTRVJUKCFtYW5hZ2VyLT5wcml2LT5w
cm9jZXNzUG9vbHMuY29udGFpbnMoJnByb2Nlc3NQb29sKSk7Ci0gICAgbWFuYWdlci0+cHJpdi0+
cHJvY2Vzc1Bvb2xzLmFwcGVuZCgmcHJvY2Vzc1Bvb2wpOwotfQotCi12b2lkIHdlYmtpdFdlYnNp
dGVEYXRhTWFuYWdlclJlbW92ZVByb2Nlc3NQb29sKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciog
bWFuYWdlciwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotewotICAgIEFTU0VSVChtYW5h
Z2VyLT5wcml2LT5wcm9jZXNzUG9vbHMuY29udGFpbnMoJnByb2Nlc3NQb29sKSk7Ci0gICAgbWFu
YWdlci0+cHJpdi0+cHJvY2Vzc1Bvb2xzLnJlbW92ZUZpcnN0KCZwcm9jZXNzUG9vbCk7Ci19Ci0K
LWNvbnN0IFZlY3RvcjxXZWJQcm9jZXNzUG9vbCo+JiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXRQcm9jZXNzUG9vbHMoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyKQotewotICAg
IHJldHVybiBtYW5hZ2VyLT5wcml2LT5wcm9jZXNzUG9vbHM7Ci19Ci0KIC8qKgogICogd2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldzoKICAqIEBmaXJzdF9vcHRpb25fbmFtZTogbmFtZSBv
ZiB0aGUgZmlyc3Qgb3B0aW9uIHRvIHNldApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdl
clByaXZhdGUuaAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xOSwxMSArMTksNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIldlYlByb2Nl
c3NQb29sLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgogCiBXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmUmIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIqKTsKLXZvaWQgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQWRkUHJv
Y2Vzc1Bvb2woV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiwgV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bCYpOwotdm9pZCB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJSZW1vdmVQcm9jZXNzUG9vbChXZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXIqLCBXZWJLaXQ6OldlYlByb2Nlc3NQb29sJik7Ci1jb25zdCBW
ZWN0b3I8V2ViS2l0OjpXZWJQcm9jZXNzUG9vbCo+JiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXRQcm9jZXNzUG9vbHMoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKik7Ci0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21h
dGlvblNlc3Npb24uY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM5Miw4ICsxMzkyLDggQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xl
Q29vawogCiAgICAgY29va2llLmh0dHBPbmx5ID0gKmh0dHBPbmx5OwogCi0gICAgV2ViQ29va2ll
TWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhw
YWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFj
a10oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyID0gcGFnZS0+
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAg
IGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lv
bklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5k
U3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAtMTQwOSw4ICsxNDA5LDggQEAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPgogCiAgICAgU3RyaW5nIGhvc3QgPSBhY3RpdmVV
UkwuaG9zdCgpLnRvU3RyaW5nKCk7CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tp
ZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2Ut
PndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0Rv
dFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29v
a2llTWFuYWdlciA9IHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmNv
b2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5
QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoaG9zdCkgfSk7CiAKICAgICByZXR1cm4geyB9OwogfQpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgJKHJldmlzaW9uIDI2NzUzNikK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSArNDEsMTEgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiBjbGFzcyBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTsKIAogY2xh
c3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IGZpbmFsIDogcHVibGljIEFQSTo6
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IHsKLXByaXZhdGU6CitwdWJsaWM6CiAgICAgdm9p
ZCBzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkmLCBMZWdhY3lD
dXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBmaW5hbDsK
ICAgICB2b2lkIHN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Jiwg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCkgZmluYWw7CiAgICAgdm9pZCBpbnZhbGlkYXRlKExlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5JikgZmluYWw7Ci0KK3ByaXZhdGU6CiAgICAgSGFz
aE1hcDxMZWdhY3lDdXN0b21Qcm90b2NvbElELCBSZXRhaW5QdHI8V0tDdXN0b21Qcm90b2NvbExv
YWRlcj4+IG1fbG9hZGVyTWFwOwogfTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCShyZXZpc2lvbiAyNjc1MzYp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsOCArMTM0LDkgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJV
c2VyRGVmYXVsdHNJZk5lZWRlZAogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNz
U3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1
cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0
ZURhdGFTdG9yZShbZW5hYmxlZCA9IHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKV0gKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3MoKS5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGVuYWJsZWQpOworICAgIH0pOwogCiAj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVz
c2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkKQEAgLTE2Niw4ICsxNjcsNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUoCiAgICAgaWYgKCFbW05TVXNl
ckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiV2ViS2l0U3VwcHJl
c3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIiXSkKICAgICAgICAgaW5zdGFsbE1lbW9yeVByZXNzdXJl
SGFuZGxlcigpOwogCi0gICAgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1h
a2VVbmlxdWU8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKTsKLQogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBpZiAoIV9N
R0NhY2hlVmFsaWQoKSkgewogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfZ2xv
YmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBeewpAQCAtNDk1
LDIyICs0OTQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAK
ICAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdOwogCi0gICAgewotICAgICAgICBib29sIGlzU2FmYXJpID0gZmFsc2U7Ci0g
ICAgICAgIGJvb2wgaXNNaW5pQnJvd3NlciA9IGZhbHNlOwotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTW9iaWxl
U2FmYXJpKCk7Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlv
bjo6aXNNaW5pQnJvd3NlcigpOwotI2VsaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBpc1NhZmFy
aSA9IFdlYkNvcmU6Ok1hY0FwcGxpY2F0aW9uOjppc1NhZmFyaSgpOwotICAgICAgICBpc01pbmlC
cm93c2VyID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzTWluaUJyb3dzZXIoKTsKLSNlbmRp
ZgotICAgICAgICBpZiAoaXNTYWZhcmkgfHwgaXNNaW5pQnJvd3NlcikgewotICAgICAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuaHR0cFByb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0
cmluZyAqKVdlYktpdDJIVFRQUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
aHR0cHNQcm94eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcg
KilXZWJLaXQySFRUUFNQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAg
ICBwYXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0ID0gYWRvcHRDRihfQ0ZOZXR3b3JrQ29weUFU
U0NvbnRleHQoKSk7CiAKICAgICBwYXJhbWV0ZXJzLnNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1
cmVIYW5kbGVyID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0U3VwcHJlc3NNZW1vcnlQcmVz
c3VyZUhhbmRsZXJEZWZhdWx0c0tleV07CkBAIC01MjQsMTIgKzUwNyw4IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICBOU051bWJlciAqZGF0YWJhc2VFbmFi
bGVkVmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VF
bmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogICAgIGlmIChkYXRhYmFzZUVu
YWJsZWRWYWx1ZSkKICAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9
IGRhdGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIHBhcmFt
ZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZl
cmVuY2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuZW5hYmxl
QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5
OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKV1dOwotCi0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tp
bmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9u
KCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQo
KQpAQCAtNjA4LDExICs1ODcsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzU3VwcHJl
c3Npb25FCiAgICAgcmV0dXJuICFtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIudmFsdWUoKSAm
JiAhbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCk7CiB9
CiAKLWJvb2wgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JU
ZXN0aW5nKGNvbnN0IFN0cmluZyYgZW50aXRsZW1lbnQpCi17Ci0gICAgcmV0dXJuIFdURjo6aGFz
RW50aXRsZW1lbnQoZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCktPnhwY0Nvbm5l
Y3Rpb24oKSwgZW50aXRsZW1lbnQudXRmOCgpLmRhdGEoKSk7Ci19Ci0KICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiBmbG9hdCBXZWJQcm9jZXNzUG9v
bDo6ZGlzcGxheUJyaWdodG5lc3MoKQogewpAQCAtOTQ5LDIzICs5MjMsNCBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpyZWdpc3RlckhpZ2hEeW5hbWljCiB9CiAjZW5kaWYKIAotT1NPYmplY3RQdHI8
eHBjX29iamVjdF90PiBXZWJQcm9jZXNzUG9vbDo6eHBjRW5kcG9pbnRNZXNzYWdlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9lbmRwb2ludE1lc3NhZ2U7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKE9TT2JqZWN0UHRy
PHhwY19vYmplY3RfdD4gZW5kcG9pbnRNZXNzYWdlKQotewotICAgIG1fZW5kcG9pbnRNZXNzYWdl
ID0gZW5kcG9pbnRNZXNzYWdlOwotCi0gICAgZm9yIChhdXRvIHByb2Nlc3MgOiBtX3Byb2Nlc3Nl
cykgewotICAgICAgICBpZiAocHJvY2Vzcy0+c3RhdGUoKSAhPSBBdXhpbGlhcnlQcm9jZXNzUHJv
eHk6OlN0YXRlOjpSdW5uaW5nKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICgh
cHJvY2Vzcy0+Y29ubmVjdGlvbigpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1
dG8gY29ubmVjdGlvbiA9IHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpOwot
ICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbiwgZW5kcG9pbnRN
ZXNzYWdlLmdldCgpKTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
LmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw4ICs3NSw4IEBAIHZv
aWQgRG93bmxvYWRQcm94eTo6Y2FuY2VsKCkKICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2Vz
cyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3du
bG9hZElEKSwgMCk7CisgICAgaWYgKG1fZGF0YVN0b3JlKQorICAgICAgICBtX2RhdGFTdG9yZS0+
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93
bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6aW52YWxp
ZGF0ZSgpCkBAIC0xMDMsMTUgKzEwMywxMyBAQCBXZWJQYWdlUHJveHkqIERvd25sb2FkUHJveHk6
Om9yaWdpbmF0aW5nCiAjaWYgUExBVEZPUk0oQ09DT0EpCiB2b2lkIERvd25sb2FkUHJveHk6OnB1
Ymxpc2hQcm9ncmVzcyhjb25zdCBVUkwmIFVSTCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wp
CisgICAgaWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOwotICAgICAgICBib29sIGNyZWF0
ZWRTYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKFVSTC5m
aWxlU3lzdGVtUGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIGhhbmRs
ZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0
ZWRTYW5kYm94RXh0ZW5zaW9uKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9ncmVzcyhtX2Rvd25sb2FkSUQs
IFVSTCwgaGFuZGxlKSwgMCk7Ci0gICAgfQorICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBo
YW5kbGU7CisgICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6
VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOworICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRi
b3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsKKyAgICBtX2RhdGFTdG9yZS0+
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERv
d25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwogfQogI2VuZGlm
IC8vIFBMQVRGT1JNKENPQ09BKQogCkBAIC0xMzEsMTEgKzEyOSwxMCBAQCB2b2lkIERvd25sb2Fk
UHJveHk6OmRpZFN0YXJ0KGNvbnN0IFJlc291CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYgYXV0
aGVudGljYXRpb25DaGFsbGVuZ2UsIHVpbnQ2NF90IGNoYWxsZW5nZUlEKQogewotICAgIGlmICgh
bV9wcm9jZXNzUG9vbCkKKyAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wgfHwgIW1fZGF0YVN0b3JlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkg
PSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX3Byb2Nlc3NQb29sLT5uZXR3
b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKSksIG51bGxwdHIpOwotCisgICAgYXV0byBhdXRoZW50
aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eTo6Y3Jl
YXRlKFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBjaGFsbGVuZ2VJRCwgbWFrZVJl
ZigqbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpKSwgbnVsbHB0cik7
CiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoKnRoaXMsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuZ2V0KCkp
OwogfQogCkBAIC0xNDYsMTUgKzE0MywxMCBAQCB2b2lkIERvd25sb2FkUHJveHk6OndpbGxTZW5k
UmVxdWVzdChSZXNvCiAKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLndpbGxT
ZW5kUmVxdWVzdCgqdGhpcywgV1RGTW92ZShwcm9wb3NlZFJlcXVlc3QpLCByZWRpcmVjdFJlc3Bv
bnNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXShSZXNvdXJjZVJlcXVl
c3QmJiBuZXdSZXF1ZXN0KSB7CiAgICAgICAgIG1fcmVkaXJlY3RDaGFpbi5hcHBlbmQobmV3UmVx
dWVzdC51cmwoKSk7Ci0KLSAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29s
KQorICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fZGF0YVN0b3JlKQogICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRU
aGlzLT5tX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpOwotICAgICAgICBpZiAoIW5ldHdv
cmtQcm9jZXNzUHJveHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbmV0d29ya1By
b2Nlc3NQcm94eS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNl
bmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOwor
ICAgICAgICBhdXRvJiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVjdGVkVGhpcy0+bV9kYXRh
U3RvcmUtPm5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzUHJveHkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3Rl
Y3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOwogICAgIH0pOwogfQogCkBA
IC0xNzksMTYgKzE3MSwxNCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9u
V2l0CiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
bV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdn
ZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2Vz
dGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBkb3dubG9hZElEID0gZG93bmxvYWRJRF0gKEFsbG93T3ZlcndyaXRlIGFs
bG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsKKyAgICBtX3Byb2Nlc3NQb29sLT5k
b3dubG9hZENsaWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKCp0
aGlzLCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRGaWxlbmFtZShzdWdn
ZXN0ZWRGaWxlbmFtZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRv
d25sb2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0
aW9uKSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlOwogICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGRlc3RpbmF0aW9uLCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgICAg
IGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICAgICAgaWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9h
ZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CisgICAgICAg
IG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQs
IGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBB
bGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CiAgICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAJ
KHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIERvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlNYXAoTmV0
d29ya1Byb2Nlc3NQcm94eSYgcHJvY2VzcykKLSAgICA6IG1fcHJvY2VzcyhtYWtlV2Vha1B0cihw
cm9jZXNzKSkKKyAgICA6IG1fcHJvY2Vzcyhwcm9jZXNzKQogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgICwgbV9zaG91bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJvY2Vzc0hhc0VudGl0bGVtZW50KCJj
b20uYXBwbGUubXVsdGl0YXNraW5nLnN5c3RlbWFwcGFzc2VydGlvbnMiKSkKICNlbmRpZgpAQCAt
NzAsMTQgKzcwLDEyIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxhdGZvcm1EZXN0cm95KCkK
IAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgp
CiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7Cisg
ICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbkRp
ZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBs
aWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKQogewotICAgIGlmIChtX3Byb2Nlc3MpCi0gICAg
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9u
V2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKIH0K
IAogRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShX
ZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZy
YW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCkBA
IC05MiwxMyArOTAsMTIgQEAgRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRl
RAogICAgICAgICBtX2Rvd25sb2FkVUlBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3Nl
cnRpb24+KGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nl
c3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAogICAgICAgICBBU1NFUlQo
IW1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9wcm9jZXNzKTsKLSAgICAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtl
VW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSwg
IldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3
b3JraW5nKTsKKyAgICAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtlVW5p
cXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy5wcm9jZXNzSWRlbnRpZmllcigpLCAiV2Vi
S2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVuYm91bmRlZE5ldHdvcmtp
bmcpOwogCiAgICAgICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiVUlQcm9jZXNz
IHRvb2sgJ1dlYktpdCBkb3dubG9hZHMnIGFzc2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0
d29ya1Byb2Nlc3MiKTsKICAgICB9CiAKLSAgICBtX3Byb2Nlc3MtPmFkZE1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9h
ZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsK
KyAgICBtX3Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKS5kb3du
bG9hZElEKCksIGRvd25sb2FkUHJveHkuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGRvd25sb2FkUHJv
eHk7CiB9CkBAIC0xMDksMTIgKzEwNiw5IEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxv
YWRGaW5pc2hlZCgKIAogICAgIFJFTEVBU0VfTE9HKExvYWRpbmcsICJSZW1vdmluZyBkb3dubG9h
ZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIiwgZG93bmxvYWRJ
RC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJveHkgbWF5IGJlIGhvbGRp
bmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCi0gICAgYXV0byBwcm90
ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsK
LQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CiAKLSAgICBt
X3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CisgICAgbV9w
cm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CiAgICAgZG93bmxv
YWRQcm94eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9kb3dubG9hZHMucmVtb3ZlKGRvd25sb2FkSUQp
OwogCkBAIC0xMzMsMTUgKzEyNywxMyBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmludmFsaWRh
dGUoKQogICAgIGZvciAoY29uc3QgYXV0byYgZG93bmxvYWQgOiBtX2Rvd25sb2Fkcy52YWx1ZXMo
KSkgewogICAgICAgICBkb3dubG9hZC0+cHJvY2Vzc0RpZENsb3NlKCk7CiAgICAgICAgIGRvd25s
b2FkLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25s
b2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKKyAgICAgICAgbV9wcm9jZXNzLnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7CiAgICAgfQogCiAg
ICAgbV9kb3dubG9hZHMuY2xlYXIoKTsKICAgICBtX2Rvd25sb2FkVUlBc3NlcnRpb24gPSBudWxs
cHRyOwogICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbnVsbHB0cjsKICAgICBS
RUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFw
IGludmFsaWRhdGVkIC0gUmVsZWFzZWQgJ1dlYktpdCBkb3dubG9hZHMnIGFzc2VydGlvbnMgZm9y
IFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKLQotICAgIG1fcHJvY2VzcyA9IG51bGxw
dHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCShyZXZpc2lvbiAy
Njc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94
eU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwbGF0Zm9ybUNyZWF0ZSgpOwogICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBX
ZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fcHJvY2VzczsKKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5JiBtX3Byb2Nlc3M7CiAgICAgSGFzaE1hcDxEb3dubG9hZElELCBSZWZQdHI8RG93bmxv
YWRQcm94eT4+IG1fZG93bmxvYWRzOwogCiAgICAgYm9vbCBtX3Nob3VsZFRha2VBc3NlcnRpb24g
eyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94
eS5oIgogCiAjaW5jbHVkZSAiQVBJQ29udGVudFJ1bGVMaXN0LmgiCisjaW5jbHVkZSAiQVBJQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VQcm94eS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdlci5oIgogI2luY2x1
ZGUgIkRvd25sb2FkUHJveHlNYXAuaCIKQEAgLTM1LDYgKzM2LDcgQEAKICNpbmNsdWRlICJMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkxlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNlbmRpZgorI2luY2x1ZGUgIkxlZ2Fj
eUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdv
cmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC00OCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiU2hvdWxk
R3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5o
IgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmgiCisjaW5jbHVkZSAiV2Vi
Q29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCkBA
IC01OCw4ICs2MSwxMCBAQAogI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGEuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3Jl
Q2xpZW50LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaXN0cmFi
bGVEb21haW4uaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKICNpZiBFTkFCTEUoU0VDX0lURU1fU0hJTSkK
QEAgLTcwLDIwICs3NSwxMjIgQEAKICNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4K
ICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwogI2RlZmluZSBNRVNTQUdFX0NIRUNLKGFz
c2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlvbiwgY29ubmVjdGlvbigpKQogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1OZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9v
bCkKLSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShwcm9jZXNzUG9vbC5hbHdheXNSdW5zQXRC
YWNrZ3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJvY2Vzc1Bvb2wocHJvY2Vzc1Bvb2wpCitz
dGF0aWMgSGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5Kj4mIG5ldHdvcmtQcm9jZXNzZXNTZXQo
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5Kj4+IHNldDsKKyAgICBy
ZXR1cm4gc2V0OworfQorCitWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkKK3sKKyAgICBWZWN0b3I8UmVmPE5l
dHdvcmtQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXM7CisgICAgcHJvY2Vzc2VzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobmV0d29ya1Byb2Nlc3Nlc1NldCgpLnNpemUoKSk7CisgICAgZm9yIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA6IG5ldHdvcmtQcm9jZXNzZXNTZXQoKSkKKyAgICAgICAgcHJvY2Vz
c2VzLnVuY2hlY2tlZEFwcGVuZCgqbmV0d29ya1Byb2Nlc3MpOworICAgIHJldHVybiBwcm9jZXNz
ZXM7Cit9CisKK3N0YXRpYyBSZWZQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4mIGRlZmF1bHRQcm9j
ZXNzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPE5ldHdvcmtQcm9jZXNz
UHJveHk+PiBwcm9jZXNzOworICAgIHJldHVybiBwcm9jZXNzLmdldCgpOworfQorCitSZWY8TmV0
d29ya1Byb2Nlc3NQcm94eT4gTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQcm9j
ZXNzKCkKK3sKKyAgICBpZiAoIWRlZmF1bHRQcm9jZXNzKCkpCisgICAgICAgIGRlZmF1bHRQcm9j
ZXNzKCkgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gKmRlZmF1
bHRQcm9jZXNzKCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKCkK
K3sKKyAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpOworICAgIGRpZFRlcm1p
bmF0ZSgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFRlcm1pbmF0ZSgpCit7
CisgICAgaWYgKHRoaXMgPT0gZGVmYXVsdFByb2Nlc3MoKS5nZXQoKSkKKyAgICAgICAgZGVmYXVs
dFByb2Nlc3MoKSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2Vu
ZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91
bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgorICAgIC8v
IFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xhdGlv
biBjaGVjayBvbiBvdXIgQVBJcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgorICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsKKyAgICAg
ICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzXSB7CisgICAgICAgICAgICBzZW5kQ3Jl
YXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcGFyYW1l
dGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUds
b2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOwor
ICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1
cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9u
KCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsK
KyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3Rv
cihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xv
Y2FsKCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0g
Y29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9S
ZWdpc3RlckFzTm9BY2Nlc3MoKSk7CisgICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwoKTsKKyAgICBmb3IgKGF1dG8m
IHNjaGVtZSA6IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFu
ZGxlcnMoKSkKKyAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3Rv
bVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAg
IGlmIChTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29r
aWVTdG9yYWdlRGlyZWN0b3J5KCk7ICFjb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkK
KyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgaWYgKFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJl
Y3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOyAhY29u
dGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVj
dG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OworICAgIGlmIChTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6
OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOyAhcGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHko
KSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURp
cmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFy
ZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyNlbmRpZgorICAgIFdlYlByb2Nl
c3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
KHBhcmFtZXRlcnMpLCAwKTsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xBbHdheXNS
dW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wg
OiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nl
c3NQb29sLT5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGFu
eVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpCit7CisgICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkg
eworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRp
b24oKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoKQorICAgIDog
QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3Vu
ZFByaW9yaXR5KCkpCiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikK
KyAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWVSZWY8TGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogICAgICwgbV9jdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eSgqdGhpcykKKyNlbHNlCisgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudChtYWtlVW5pcXVlUmVmPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQog
I2VuZGlmCi0gICAgLCBtX3Rocm90dGxlcigqdGhpcywgcHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJ
QmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIGFueVByb2Nl
c3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV9jb29raWVN
YW5hZ2VyKFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzKSkKIHsKICAgICBjb25u
ZWN0KCk7CisgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgIHVw
ZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuYWRkKHRo
aXMpOwogfQogCiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgpCkBA
IC05OCw2ICsyMDUsNyBAQCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94
CiAKICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlN
YXAtPmludmFsaWRhdGUoKTsKKyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkucmVtb3ZlKHRoaXMp
OwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vz
c0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuY2hPcHRpb25zKQpAQCAtMTA1LDE1ICsyMTMs
OCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvCiAgICAgbGF1bmNo
T3B0aW9ucy5wcm9jZXNzVHlwZSA9IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6Ok5ldHdv
cms7CiAgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKGxhdW5jaE9w
dGlvbnMpOwogCi0gICAgaWYgKHByb2Nlc3NQb29sKCkuc2hvdWxkTWFrZU5leHROZXR3b3JrUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2woKS5zZXRT
aG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoZmFsc2UpOwor
ICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpzaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1
bmNoRmFpbEZvclRlc3RpbmcoKSkKICAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShQ
TEFZU1RBVElPTikKLSAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NQYXRoID0gbV9wcm9jZXNzUG9v
bC5uZXR3b3JrUHJvY2Vzc1BhdGgoKTsKLSAgICBsYXVuY2hPcHRpb25zLnVzZXJJZCA9IG1fcHJv
Y2Vzc1Bvb2wudXNlcklkKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMTY2
LDEyICsyNjcsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBwSQog
ICAgIH0KIH0KIAotRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93
bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdl
YlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQorRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nl
c3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUs
IFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNv
dXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5
KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAgICAgaWYgKCFtX2Rvd25sb2FkUHJveHlNYXApCiAgICAg
ICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1ha2VVbmlxdWU8RG93bmxvYWRQcm94eU1hcD4oKnRo
aXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94
eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBv
cmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURv
d25sb2FkUHJveHkoZGF0YVN0b3JlLCBwcm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFt
ZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+
IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoV2Vic2l0ZURhdGEpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMjM3LDggKzMzOCwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6Om5ldHdvcmtQcm9jZXNzCiB7CiAgICAgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCi0g
ICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRo
aXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1c2UgdXMgdG8gYmUgZGVsZXRl
ZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CisgICAg
UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IHByb3RlY3RlZFRoaXMoKnRoaXMpOworICAgIGZvciAo
YXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisg
ICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMpOworICAgIGZv
ciAoYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA6IG1fd2Vic2l0ZURhdGFTdG9yZXMpCisgICAgICAg
IHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKIH0KIAogdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjbGVhckNhbGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICsz
NjIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzCiAgICAgaWYg
KGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29k
ZXIpKQotICAgICAgICByZXR1cm47Ci0KICAgICBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NQcm94
eU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAKQEAgLTI3NCw4ICszNzUsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVTeW5jCiAKIHZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKLSAgICBhdXRvIHByb3Rl
Y3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZihtX3Byb2Nlc3NQb29sKTsKLQogICAgIGlmIChtX2Rv
d25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+aW52YWxpZGF0ZSgp
OwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCkBAIC0zMzEsMTEg
KzQzMCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZUF1dGgKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nlc3NQb29s
LmlzU2VydmljZVdvcmtlclBhZ2VJRChwYWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShzZXNzaW9uSUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVu
Z2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6Zm9yTW9z
dFZpc2libGVXZWJQYWdlSWZBbnkoc2Vzc2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywgd2Vha1Ro
aXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSA9IFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVnYWN5VExT
XShhdXRvKiBwYWdlKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTM5MiwxMSArNDg2LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWRGaW5pc2hMYXVuYwogICAgICAgICBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChtX3Byb2Nl
c3NQb29sLnByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSkKLSAgICAgICAgc2V0UHJvY2Vzc1N1
cHByZXNzaW9uRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgogICAgIAogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgaWYgKHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiA9IHRoaXMtPmNvbm5l
Y3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpKQpAQCAtMTIwNSw3ICsxMjk0LDggQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzZXRUaGlyZFBhcnR5QwogfQogdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS5zZXREb21haW5z
V2l0aFVzZXJJbnRlcmFjdGlvbihXVEZNb3ZlKGRvbWFpbnMpKTsKKyAgICBmb3IgKGF1dG8qIHBy
b2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBw
cm9jZXNzUG9vbC0+c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbj4geyBkb21haW5zIH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKQEAgLTEyNTIsNDUgKzEzNDIsMzEgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpmbHVzaENvb2tpZXMoYwogICAgIHNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkZsdXNoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
YWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9yZSkKIHsKLSAgICBt
X3Nlc3Npb25JRHMuYWRkKHN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgbV93ZWJzaXRlRGF0YVN0
b3Jlcy5hZGQoc3RvcmUpOwogCiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUt
PnBhcmFtZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0b3JlLT5zZXNzaW9u
SUQoKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVE
YXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCk7CisgICAgYXV0byBzZXNzaW9uSUQg
PSBzdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JG
aWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7Cisg
ICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNvbHZlZEluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgogICAgIH0KIH0KIAotYm9vbCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpoYXNTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9zZXNzaW9uSURzLmNvbnRhaW5zKHNlc3Npb25JRCk7Ci19Ci0KLXZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFT
dG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMucmVtb3ZlKHNlc3Np
b25JRCk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5yZW1vdmUod2Vic2l0ZURhdGFTdG9yZSk7
CiAKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkRlc3Ryb3lTZXNzaW9uIHsgc2Vzc2lvbklEIH0sIDApOworICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24geyB3ZWJzaXRlRGF0
YVN0b3JlLnNlc3Npb25JRCgpIH0sIDApOwogfQogCiBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3Jl
ID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAgICAgICBpZiAod2Vi
c2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBzZXNzaW9u
SUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0
cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZh
dWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFdlYnNpdGVE
YXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3JhZ2VQYXJhbWV0ZXJz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEzMzcsNyArMTQxMyw3IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVdlYlUKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25u
ZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9t
YWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX3Byb2Nlc3NQb29sLmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgV1RGTW92ZShyZWdpc3Ry
YWJsZURvbWFpbiksIHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
IFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29y
a1Byb2Nlc3MoKnRoaXMsIFJlZ2lzdHJhYmxlRG9tYWluIHtyZWdpc3RyYWJsZURvbWFpbn0sIHNl
c3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OndvcmtlckNvbnRleHRDb25uZWN0aW9uTm9Mb25nZXJOZWVkZWQoV2ViQ29y
ZTo6UHJvY2Vzc0lkZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTE1MDAsMTYgKzE1NzYsMzQgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpwcmVjb25uZWN0VG8oUAogICAgIHNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vzc2lvbklELCB3ZWJQYWdlUHJveHlJ
RCwgd2ViUGFnZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlz
TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0KIAorc3RhdGljIGJvb2wgYW55UHJv
Y2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8qIHBy
b2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAg
IGlmIChwcm9jZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJv
b2wgYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3Ig
KGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwog
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCkKIHsKLSAg
ICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBp
ZiAoYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAg
aWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdyb3VuZEFjdGl2aXR5KG1fYWN0aXZp
dHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9j
ZXNzZXMgPSB0aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGZv
cmVncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91bmQoKSwgMCk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNCYWNr
Z3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3Jv
dW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1Zh
bGlkQmFja2dyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAg
ICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5iYWNrZ3Jv
dW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91bmQgdmlldyhzKSJfcyk7CiAgICAg
ICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRp
b25Ub0JhY2tncm91bmQoKSwgMCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjY3NTM2KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDEyICs0NiwxNyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAjaW5jbHVkZSAiWFBDRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRy
Lmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBGb3JtRGF0YVJlZmVyZW5jZTsK
IH0KIAorbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7
Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xhc3MgU2Vzc2lvbklEOwogfQpAQCAtNzMsOCArNzgs
OCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERv
d25sb2FkUHJveHlNYXA7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJQ
YWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5OwogCiBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyA6
IGJvb2w7CkBAIC04Niw4ICs5MSw5IEBAIHN0cnVjdCBGcmFtZUluZm9EYXRhOwogc3RydWN0IE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFJlc291cmNlTG9hZEluZm87
CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CitzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM7
CiAKLWNsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkgZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQsIHB1YmxpYyBDYW5NYWtl
V2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5
IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhy
b3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4s
IHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB1c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwpAQCAtMTAyLDEyICsxMDgsMTggQEAgcHVibGljOgog
ICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluOwogICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluOwogCi0gICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9v
bCYpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gZGVmYXVsdE5ldHdvcmtQ
cm9jZXNzKCk7CisgICAgc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtQcm9jZXNzUHJveHkpOyB9CiAgICAgfk5ldHdv
cmtQcm9jZXNzUHJveHkoKTsKIAorICAgIHN0YXRpYyBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNz
UHJveHk+PiBhbGxOZXR3b3JrUHJvY2Vzc2VzKCk7CisgICAgCisgICAgdm9pZCB0ZXJtaW5hdGUo
KSBmaW5hbDsKKyAgICB2b2lkIGRpZFRlcm1pbmF0ZSgpOworCiAgICAgdm9pZCBnZXROZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQ
cm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwogCi0gICAg
RG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBh
Z2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsKKyAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3du
bG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBXZWJQcm9jZXNzUG9vbCYsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkq
IG9yaWdpbmF0aW5nUGFnZSk7CiAKICAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNz
aW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFG
ZXRjaE9wdGlvbj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPiYmKTsKICAg
ICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0
ZURhdGFUeXBlPiwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIwNiwxNSArMjE4LDEyIEBAIHB1YmxpYzoK
ICAgICBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSBmaW5hbCB7IHJldHVybiBtX3Rocm90
dGxlcjsgfQogICAgIHZvaWQgdXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwogCi0gICAgV2ViUHJv
Y2Vzc1Bvb2wmIHByb2Nlc3NQb29sKCkgeyByZXR1cm4gbV9wcm9jZXNzUG9vbDsgfQotCiAjaWYg
RU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICB2b2lkIGRpZERlc3Ryb3lXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYpOwogI2Vu
ZGlmCiAKLSAgICB2b2lkIGFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYpOwotICAg
IGJvb2wgaGFzU2Vzc2lvbihQQUw6OlNlc3Npb25JRCkgY29uc3Q7Ci0gICAgdm9pZCByZW1vdmVT
ZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKKyAgICB2b2lkIGFkZFNlc3Npb24oV2Vic2l0ZURhdGFT
dG9yZSYpOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CiAgICAg
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgdm9pZCBjcmVhdGVTeW1MaW5rRm9y
RmlsZVVwZ3JhZGUoY29uc3QgU3RyaW5nJiBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwpAQCAt
MjI5LDYgKzIzOCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5
Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1l
Rm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAKKyAgICB2b2lkIG5ldHdv
cmtQcm9jZXNzQ3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIHZvaWQgcmVzb3VyY2VM
b2FkRGlkU2VuZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVzb3VyY2VMb2FkSW5m
byYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgT3B0aW9uYWw8SVBDOjpGb3JtRGF0YVJl
ZmVyZW5jZT4mJik7CkBAIC0yNDgsNyArMjU5LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0
ZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKICAgICB2b2lkIGNsZWFyQnVuZGxlSWRlbnRpZmllcihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwogCisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyKCkg
eyByZXR1cm4gbV9jb29raWVNYW5hZ2VyLmdldCgpOyB9CisKKyAgICBBUEk6OkN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgeyByZXR1cm4g
bV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuZ2V0KCk7IH0KKworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIHhwY19vYmplY3RfdCB4cGNFbmRwb2ludE1lc3NhZ2UoKSBjb25zdCB7IHJldHVy
biBtX2VuZHBvaW50TWVzc2FnZS5nZXQoKTsgfQorI2VuZGlmCisKIHByaXZhdGU6CisgICAgZXhw
bGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eSgpOworCisgICAgdm9pZCBzZW5kQ3JlYXRpb25QYXJh
bWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisKICAgICAvLyBBdXhpbGlhcnlQcm9jZXNzUHJveHkKICAg
ICBBU0NJSUxpdGVyYWwgcHJvY2Vzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiTmV0d29y
a2luZyJfczsgfQogCkBAIC0yNTYsNyArMjc5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbm5l
Y3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHByb2Nl
c3NXaWxsU2h1dERvd24oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIG5l
dHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgIHZvaWQgY2xlYXJDYWxsYmFja1N0YXRlcygpOwog
CiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKQEAgLTMxMiwxNiArMzM0LDE3IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNl
c3Npb25JRCwgUmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+JiYpOwogCi0gICAgV2Vi
UHJvY2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPj4gbV9wZW5kaW5nRmV0Y2hXZWJzaXRl
RGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hN
YXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRl
V2Vic2l0ZURhdGFGb3JPcmlnaW5zQ2FsbGJhY2tzOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPERv
d25sb2FkUHJveHlNYXA+IG1fZG93bmxvYWRQcm94eU1hcDsKKworICAgIFVuaXF1ZVJlZjxBUEk6
OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQ7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKICAgICBMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSBtX2N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5
OwogI2VuZGlmCisKICAgICBQcm9jZXNzVGhyb3R0bGVyIG1fdGhyb3R0bGVyOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxQcm9jZXNzVGhyb3R0bGVyOjpCYWNrZ3JvdW5kQWN0aXZpdHk+IG1fYWN0aXZp
dHlGb3JIb2xkaW5nTG9ja2VkRmlsZXM7CiAgICAgUHJvY2Vzc1Rocm90dGxlcjo6QWN0aXZpdHlW
YXJpYW50IG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzOwpAQCAtMzQ3LDkgKzM3MCwxMSBAQCBw
cml2YXRlOgogICAgIHByaXZhdGU6CiAgICAgICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94
eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICB9OworICAgIE9TT2JqZWN0UHRyPHhwY19vYmplY3Rf
dD4gbV9lbmRwb2ludE1lc3NhZ2U7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8UEFMOjpTZXNzaW9u
SUQ+IG1fc2Vzc2lvbklEczsKKyAgICBXZWFrSGFzaFNldDxXZWJzaXRlRGF0YVN0b3JlPiBtX3dl
YnNpdGVEYXRhU3RvcmVzOworICAgIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IG1fY29va2ll
TWFuYWdlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
Q29jb2EubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4
ICs1MSwxMSBAQCBib29sIE5ldHdvcmtQcm9jZXNzUHJveHk6OlhQQ0V2ZW50SGFuZGxlCiAgICAg
aWYgKG1lc3NhZ2VOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6Onhw
Y0xhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKQotICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBv
aW50VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2Vy
dmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0Vu
ZHBvaW50TWVzc2FnZU5hbWUpIHsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+bV9lbmRwb2lu
dE1lc3NhZ2UgPSBldmVudDsKKyAgICAgICAgZm9yIChhdXRvJiBkYXRhU3RvcmUgOiBtX25ldHdv
cmtQcm9jZXNzLT5tX3dlYnNpdGVEYXRhU3RvcmVzKQorICAgICAgICAgICAgZGF0YVN0b3JlLnNl
bmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMoKTsKKyAgICB9CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3Rv
Y29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAJKHJldmlzaW9uIDI2NzUz
NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
MTcgKzQ0LDE3IEBAIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp+TGVnYWMKIAog
dm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKExlZ2Fj
eUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNz
UG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywg
Y3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJv
dG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJ
RCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7
CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgp
LnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKIH0KIAogdm9pZCBMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgbV9uZXR3b3Jr
UHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCku
aW52YWxpZGF0ZSgqdGhpcyk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUoKnRoaXMpOwogfQogCiB2b2lkIExlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3YXNSZWRpcmVjdGVkVG9SZXF1ZXN0KExlZ2FjeUN1
c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVj
dFJlc3BvbnNlKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTQgQEAKICNpbmNsdWRlICJBdXRoZW50aWNhdG9y
TWFuYWdlci5oIgogI2luY2x1ZGUgIkRldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgiCiAjaW5jbHVk
ZSAiR1BVUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1v
Y2tBdXRoZW50aWNhdG9yTWFuYWdlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbkluZm8uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vz
c1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkQ2FjaGUuaCIKKyNpbmNsdWRlICJX
ZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXQySW5pdGlhbGl6ZS5oIgog
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDYWNoZS5oIgpA
QCAtNzUsNiArNzgsMTAgQEAKICNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5o
IgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJEZWZhdWx0V2ViQnJv
d3NlckNoZWNrcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgYm9v
bCBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zOwpAQCAtODMsMTMgKzkwLDE5
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dXZWJzaXRlRGF0YVIKICAgICBhbGxvd3NX
ZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zID0gdHJ1ZTsKIH0KIAotc3RhdGljIEhhc2hN
YXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgbm9uRGVmYXVsdERhdGFTdG9y
ZXMoKQorc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYg
YWxsRGF0YVN0b3JlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNVSVRocmVhZCgpKTsKICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURh
dGFTdG9yZSo+PiBtYXA7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRhU3Rv
cmUmKT4mJiBmdW5jdGlvbikKK3sKKyAgICBmb3IgKGF1dG8qIGRhdGFTdG9yZSA6IGFsbERhdGFT
dG9yZXMoKS52YWx1ZXMoKSkKKyAgICAgICAgZnVuY3Rpb24oKmRhdGFTdG9yZSk7Cit9CisKIFJl
ZjxXZWJzaXRlRGF0YVN0b3JlPiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGVOb25QZXJzaXN0ZW50
KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpObyksIFBBTDo6U2Vz
c2lvbklEOjpnZW5lcmF0ZUVwaGVtZXJhbFNlc3Npb25JRCgpKSk7CkBAIC0xMTUsNyArMTI4LDcg
QEAgV2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShSZWY8VwogI2VuZGlmCiB7CiAg
ICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1heWJl
UmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwpAQCAtMTI4LDE3ICsxNDEsMTIgQEAgV2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVE
YXRhU3RvcmUoKQogCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBpZiAobV9zZXNzaW9u
SUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBBU1NF
UlQobm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOwotICAg
ICAgICBub25EZWZhdWx0RGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7Ci0gICAgICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW1v
dmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBBU1NFUlQoYWxs
RGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7CisgICAgYWxsRGF0YVN0b3Jl
cygpLnJlbW92ZShtX3Nlc3Npb25JRCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW1vdmVTZXNz
aW9uKCp0aGlzKTsKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0gICAgICAgIGlmIChhdXRvKiBn
cHVQcm9jZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQot
ICAgICAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsK
KyAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b25JZkNyZWF0ZWQoKSkKKyAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1f
c2Vzc2lvbklEKTsKICNlbmRpZgogfQogCkBAIC0xNTAsOCArMTU4LDEwIEBAIHN0YXRpYyBSZWZQ
dHI8V2Vic2l0ZURhdGFTdG9yZT4mIGdsb2JhbEQKIAogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKQogeworI2lmIFBMQVRGT1JNKEdUSykg
fHwgUExBVEZPUk0oV1BFKQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5k
aWYKICAgICBJbml0aWFsaXplV2ViS2l0MigpOwotCiAgICAgYXV0byYgc3RvcmUgPSBnbG9iYWxE
ZWZhdWx0RGF0YVN0b3JlKCk7CiAgICAgaWYgKCFzdG9yZSkKICAgICAgICAgc3RvcmUgPSBhZG9w
dFJlZihuZXcgV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbjo6
Y3JlYXRlKElzUGVyc2lzdGVudDo6WWVzKSwgUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSkpOwpAQCAtMTY5LDE3ICsxNzksNDcgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlRQogICAgIHJldHVybiAhIWdsb2JhbERlZmF1bHREYXRhU3RvcmUoKTsKIH0K
IAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgp
Cit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpCiB7Ci0g
ICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkp
IHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBub25EZWZhdWx0RGF0YVN0b3JlcygpLmFkZChtX3Nl
c3Npb25JRCwgdGhpcyk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNO
ZXdFbnRyeSk7CisgICAgYXV0byByZXN1bHQgPSBhbGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lv
bklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkp
OworfQorCitXZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFT
dG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgcmV0dXJu
IGFsbERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklEKTsKK30KKworc3RhdGljIFJlZjxOZXR3b3Jr
UHJvY2Vzc1Byb3h5PiBuZXR3b3JrUHJvY2Vzc0ZvclNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQoreworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQorICAgIGlmIChz
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgeworICAgICAgICAvLyBSZXVzZSBhIHByZXZpb3VzIHBl
cnNpc3RlbnQgc2Vzc2lvbiBuZXR3b3JrIHByb2Nlc3MgZm9yIGVwaGVtZXJhbCBzZXNzaW9ucy4K
KyAgICAgICAgZm9yIChhdXRvKiBkYXRhU3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkp
IHsKKyAgICAgICAgICAgIGlmIChkYXRhU3RvcmUtPmlzUGVyc2lzdGVudCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBtYWtlUmVmKGRhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKSk7CisgICAg
ICAgIH0KICAgICB9CisgICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZSgpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vzc2lvbklEKTsKKyAgICByZXR1cm4gTmV0d29ya1By
b2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7CisjZW5kaWYKIH0KIAotV2Vic2l0
ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3Jl
Rm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK05ldHdvcmtQcm9jZXNzUHJv
eHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkKIHsKLSAgICByZXR1cm4gc2Vz
c2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgPyBub25EZWZhdWx0
RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0cjsKKyAgICBpZiAoIW1fbmV0d29y
a1Byb2Nlc3MpIHsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IG5ldHdvcmtQcm9jZXNzRm9y
U2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Np
b24oKnRoaXMpOworICAgIH0KKworICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKK30KKwor
TmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3MoKSBj
b25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYnNpdGVEYXRhU3RvcmUmPigqdGhpcyku
bmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlclBy
b2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQpAQCAtMTk1LDEyICsyMzUsNiBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnVucmVnaXN0ZXJQcm9jZXNzCiAgICAgbV9wcm9jZXNzZXMucmVt
b3ZlKHByb2Nlc3MpOwogfQogCi1XZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURhdGFTdG9yZTo6cHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpCi17Ci0gICAgYXV0byBwb29scyA9
IHByb2Nlc3NQb29scygxKTsKLSAgICByZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8gbnVsbHB0ciA6
IHBvb2xzLmJlZ2luKCktPmdldCgpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc29s
dmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9oYXNSZXNvbHZlZERpcmVj
dG9yaWVzKQpAQCAtNDQwLDI4ICs0NzQsMjEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRj
aERhdGFBbmRBcHBseQogI2VuZGlmCiAKICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlw
ZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5cGVz
LCAhaXNQZXJzaXN0ZW50KCkpOwotICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0g
UHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsKLSAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQ
cm9jZXNzQWNjZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJv
Y2Vzc1Bvb2xzKCkgOiBwcm9jZXNzUG9vbHMoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHBvb2xzKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNz
VHlwZSkgewotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNo
ZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAg
ICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6
Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0K
KyAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgeworICAgIGNhc2UgUHJvY2Vz
c0FjY2Vzc1R5cGU6OkxhdW5jaDoKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAg
QVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNl
IFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKKyAgICAgICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpIHsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0Nh
bGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZmV0
Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxs
YmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkgewor
ICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25J
RCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKFdlYnNpdGVE
YXRhIHdlYnNpdGVEYXRhKSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5y
ZW1vdmVQZW5kaW5nQ2FsbGJhY2soV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlw
ZTo6Tm9uZToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgYXV0byB3ZWJQcm9jZXNzQWNj
ZXNzVHlwZSA9IGNvbXB1dGVXZWJQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFGZXRjaChkYXRhVHlw
ZXMsICFpc1BlcnNpc3RlbnQoKSk7CkBAIC03MjQsMzEgKzc1MSwyNCBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uCiAgICAgYm9vbCBkaWROb3RpZnlOZXR3b3JrUHJv
Y2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEgPSBmYWxzZTsKICNlbmRpZgogICAgIGF1dG8gbmV0d29y
a1Byb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZU5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZUZvckRh
dGFSZW1vdmFsKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgpKTsKLSAgICBpZiAobmV0d29ya1By
b2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lKSB7Ci0gICAgICAgIGF1
dG8gcG9vbHMgPSBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPT0gUHJvY2Vzc0FjY2Vzc1R5cGU6
OkxhdW5jaCA/IGVuc3VyZVByb2Nlc3NQb29scygpIDogcHJvY2Vzc1Bvb2xzKCk7Ci0gICAgICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewotICAgICAgICAgICAgc3dpdGNoIChu
ZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vz
c1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpM
YXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KHRoaXMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFByb2Nl
c3NBY2Nlc3NUeXBlOjpOb25lOgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgfQotCisgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUp
IHsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6CisgICAgICAgIG5ldHdvcmtQ
cm9jZXNzKCk7CisgICAgICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsKKyAgICAgICAgRkFM
TFRIUk9VR0g7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Cisg
ICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3Jl
Z2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMs
IG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CisgICAg
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwg
ZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CiAgICAgICAg
ICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKICAg
ICAgICAgICAgIH0pOwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAg
ICAgICAgICBkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEgPSB0cnVl
OwogI2VuZGlmCiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm9jZXNzQWNj
ZXNzVHlwZTo6Tm9uZToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgYXV0byB3ZWJQcm9j
ZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVXZWJQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFSZW1vdmFs
KGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgpKTsKQEAgLTg5MywxNCArOTEzLDkgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvbgogI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MpKSB7CiAgICAgICAgIGlmICghZGlkTm90aWZ5TmV0
d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHByb2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBk
YXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNr
KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGEobV9z
ZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eworICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxi
YWNrKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhbGxiYWNrQWdn
cmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CkBAIC05OTQsMTIgKzEwMDksMTAgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvbgogICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nl
c3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5
SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAg
ICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAg
ICAgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgpAQCAtMTAyMSw3ICsx
MDM0LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvbgogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxs
YmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmRlbGV0
ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBvcmlnaW5zLCBj
b29raWVIb3N0TmFtZXMsIEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0cmFibGVEb21haW5zLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRhdGFUeXBl
cywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJh
YmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAg
ICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTExODAsMTggKzExOTMsMTIgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvbgogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyhTZWNvbmRzIHNlY29uZHMpCiB7Ci0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JU
ZXN0aW5nKHNlY29uZHMpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3Jr
ZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VX
b3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKHNlY29uZHMpLCBNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAw
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFNlcnZpY2VXb3JrZXJUaW1lb3V0
Rm9yVGVzdGluZygpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdv
cmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpS
ZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSwgTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5n
OjpSZXBseSgpLCAwKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
CkBAIC0xMjAxLDggKzEyMDgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1heFN0YXRp
c3RpY3NFCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1h
eGltdW1FbnRyeUNvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lvbklE
LCBtYXhpbXVtRW50cnlDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFy
Z2V0Q291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTEyMTEsOCArMTIxNyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRy
aWVzRG8KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVu
c3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1fc2Vzc2lvbklELCBw
cnVuZVRhcmdldENvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwg
cHJ1bmVUYXJnZXRDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjIxLDgg
KzEyMjYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nCiAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dEdyYW5kZmF0aGVyaW5nVGltZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJl
dHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjMxLDIwICsxMjM1LDEzIEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXQKIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5p
bXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCBz
ZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogICAgIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+ZHVtcFJlc291cmNlTG9hZFN0
YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZHVt
cFJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNl
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNQcmV2YWxlbnQp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI1NiwxMiArMTI1Myw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgICAgICBwcm9jZXNzLT5pc1ByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xMjczLDEyICsxMjY1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVy
ZWQoYwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzR3JhbmRm
YXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTI5Miw4ICsxMjc5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRQcmV2YWxlbnRSZXNvdQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJj
ZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTMw
NywxMCArMTI5Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3UK
ICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJj
ZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sIGlzVmVyeVByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xMzIyLDEyICsxMzA1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxl
bnRSZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1Zl
cnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM0MSwxMCArMTMxOSw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFIKICAgICAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
c2V0VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM1Myw4ICsxMzI4
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeQogICAgIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5zZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCht
X3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJM
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzY4
LDIyICsxMzQyLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclQK
IAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0
U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRB
c1N1YkZyYW1lVW5kZXIoY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFt
ZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlz
UmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRv
cEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVk
QXNTdWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291
cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzk3LDIzICsxMzYzLDE0IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9t
YWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNl
VVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIoY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lz
dGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0
b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHVy
bFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTQyNywxMCArMTM4NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3Vi
cmVzb3VyY2VVbmkKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJl
ZGlyZWN0ZWRUbyB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYg
c3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NDIsMTIgKzEzOTYsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmxSZWRpcmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVS
TCYgdG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDU5LDEyICsxNDA4LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9j
ZXNzLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9wRnJhbWVVbmlxdWVSZWRp
cmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1l
VVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25z
dCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xNDc2LDI1ICsxNDIwLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0VG9wRnJhbWVVbmlxdWUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVj
dGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVy
ZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJM
JiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
b21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVy
ZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxS
ZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE1MDYsNjAg
KzE0MzksNDEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlcwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3MtPmNsZWFyUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyUHJldmFsZW50UmVz
b3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnJlc2V0
UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRQ
YXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3VibWl0VGVsZW1ldHJ5KCkK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
c3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25JRCwgW10geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KFdh
bGxUaW1lIG1vZGlmaWVkU2luY2UsIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyBzaG91bGRH
cmFuZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFu
ZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UsIHNob3VsZEdyYW5kZmF0aGVy
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lv
bklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgc3RydWN0
IENhbGxiYWNrQWdncmVnYXRvciA6IFJlZkNvdW50ZWQ8Q2FsbGJhY2tBZ2dyZWdhdG9yPiB7Ci0g
ICAgICAgIENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKKyAgICBzdHJ1Y3QgTG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IgOiBSZWZD
b3VudGVkPExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yPiB7CisgICAgICAgIExvY2FsQ2FsbGJhY2tB
Z2dyZWdhdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ICAgICAgICAgICAgOiBtX2NvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
ICAgICAgICB9OwogCi0gICAgICAgIH5DYWxsYmFja0FnZ3JlZ2F0b3IoKQorICAgICAgICB+TG9j
YWxDYWxsYmFja0FnZ3JlZ2F0b3IoKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogCkBAIC0xNTc0LDM4ICsxNDg4LDMxIEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3QKICAgICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4m
Jik+IG1fY29tcGxldGlvbkhhbmRsZXI7CiAgICAgICAgIFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiBtX3Jlc3VsdHM7CiAgICAgfTsKLQotICAg
IFJlZlB0cjxDYWxsYmFja0FnZ3JlZ2F0b3I+IGNhbGxiYWNrQWdncmVnYXRvciA9IGFkb3B0UmVm
KG5ldyBDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKLQot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBwcm9jZXNzUG9vbC0+c2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRl
bHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKHRoaXMpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShtX3Nl
c3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFZlY3RvcjxXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmIGRhdGEpIHsKLSAgICAg
ICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFJlc3VsdChXVEZNb3ZlKGRhdGEpKTsK
LSAgICAgICAgICAgIH0pOworICAgIAorICAgIGF1dG8gbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBhZG9wdFJlZihuZXcgTG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpKTsKKyAgICAKKyAgICBhdXRvIHd0ZkNhbGxiYWNrQWdncmVnYXRvciA9IFdURjo6
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAgICAgICAgbmV0d29ya1Byb2Nl
c3MoKS5nZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQsIFts
b2NhbENhbGxiYWNrQWdncmVnYXRvcl0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYgZGF0YSkgeworICAgICAgICAgICAgbG9jYWxDYWxsYmFj
a0FnZ3JlZ2F0b3ItPmFkZFJlc3VsdChXVEZNb3ZlKGRhdGEpKTsKICAgICAgICAgfSk7Ci0gICAg
fQorICAgIH0pOworICAgIAorICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShbd3RmQ2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFu
ZFBlcnNpc3RlbnQoU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIHNob3VsZEdyYW5kZmF0aGVy
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dChtX3Nlc3Npb25JRCwgeyB9LCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1
bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgeyB9LCBzaG91bGRHcmFu
ZGZhdGhlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKG1fc2Vz
c2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKG1fc2Vzc2lv
bklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjE0LDI0ICsxNTIxLDEz
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWMKICAgICAKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlU3Rh
dGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lvbklELCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN0
YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICAgICAgcHJvY2Vzcy0+c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKG1fc2Vz
c2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9u
SUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjQzLDIyICsxNTM5
LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QKIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRMYXN0U2VlbihtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgc2Vjb25kcywgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKGludCBkb21haW5J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmRvbWFp
bklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKG1fc2Vzc2lvbklELCBk
b21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29uc3Qg
VVJMJiB0b3BGcmFtZVVybDEsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwyLCBTZWNvbmRzIGxhc3RT
ZWVuLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgU2Vjb25kcyBtb3N0UmVjZW50VXNlckludGVy
YWN0aW9uLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgYm9vbCBpc1ByZXZhbGVudCwgYm9vbCBpc1Zl
cnlQcmV2YWxlbnQsIHVuc2lnbmVkIGRhdGFSZWNvcmRzUmVtb3ZlZCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY3MCwxMCArMTU1OCw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3IKIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5tZXJnZVN0YXRpc3RpY0ZvclRlc3Rpbmco
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwxIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rpb24sIG1v
c3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlz
VmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5tZXJnZVN0YXRp
c3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwxIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVuLCBoYWRVc2Vy
SW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwg
aXNQcmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4
cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGhhZFVzZXJJbnRl
cmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBib29s
IGlzUHJldmFsZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xNjg1LDE4ICsxNTcwLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0
RXhwaXJlZFN0YXQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9j
ZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVk
dWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRG
b3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElzUnVu
bmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MDQsOCArMTU4NSw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3UKICAgICB1c2VFeHBsaWNpdElU
UFN0YXRlKCk7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1Rlc3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVz
KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxTdHJpbmc+JiYgZG9tYWlucyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzE2LDcg
KzE1OTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2NlCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICB3ZWJQYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2wo
KS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1fc2Vz
c2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiAKQEAgLTE3MjQsOCArMTYwNCw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXIKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFRpbWVUb0xpdmVV
c2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9u
KG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTczOSwx
MCArMTYxOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlckludGVyYWN0aW8KICAg
ICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+bG9nVXNl
ckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmxvZ1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzU0LDEz
ICsxNjMwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhYwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5oYXNIYWRVc2VySW50
ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShj
b25zdCBVUkwmIHN1YlVybCwgY29uc3QgVVJMJiB0b3BVcmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzcyLDEzICsxNjQyLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubAogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNl
T25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJVcmwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwgfSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVsYXRpb25z
aGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcFVybCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3OTIsMTAgKzE2NTYsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0CiAgICAgCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyVXNlckludGVy
YWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODA5LDEwICsx
NjcwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKAogICAgIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0R3Jh
bmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRh
YmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xODIxLDEwICsxNjc5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRV
c2VJVFBEYXRhYmFzZQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFVz
ZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtE
ZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGZyb21VUkwsIGNvbnN0IFVSTCYgdG9VUkws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MzMs
NjIgKzE2ODgsMzggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2FkVwog
ICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENyb3NzU2l0ZUxvYWRXaXRoTGlu
a0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDcm9z
c1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRD
cm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGVs
ZXRlQ29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaW5jbHVkZUh0dHBPbmx5
Q29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5kZWxldGVDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVD
b29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5n
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0xv
Y2FsU3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLmhhc0xvY2FsU3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcoY29uc3QgVVJM
JiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
IGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzSXNvbGF0ZWRTZXNz
aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNz
KCkuaGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJl
ZmVycmVyRm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJy
ZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5n
KGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0o
Q09DT0EpCkBAIC0xOTE5LDEwICsxNzUwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRU
aGlyZFBhcnR5Q29vawogICAgICAgICAgICAgd2ViUHJvY2Vzcy5zZXRUaGlyZFBhcnR5Q29va2ll
QmxvY2tpbmdNb2RlKGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICAg
ICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VGhpcmRQYXJ0eUNvb2tpZUJs
b2NraW5nTW9kZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDb29raWVC
bG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhib29s
IGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTE5MzAsMTAgKzE3NTgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0CiAgICAgYXV0byBmbGFnID0gZW5hYmxlZCA/IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0
RW5mb3JjZW1lbnRFbmFibGVkOjpZZXMgOiBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50RW5hYmxlZDo6Tm87CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3Ry
aWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcoYm9v
bCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xOTQxLDIwICsxNzY2LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3Vy
Y2VMb2FkU3QKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBhdXRvIG1vZGUgPSBl
bmFibGVkID8gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1
dENvb2tpZXMgOiBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6Tm9u
ZTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRGaXJzdFBhcnR5V2Vic2l0ZURh
dGFSZW1vdmFsTW9kZUZvclRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eVdl
YnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9TYW1lU2l0ZVN0cmljdENv
b2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWlu
Rm9yVGVzdGluZyhjb25zdCBVUkwmIGZpcnN0UGFydHlVUkwsIGNvbnN0IFVSTCYgY25hbWVVUkws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NjYs
OCArMTc4NSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3QKIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25J
RCwgZmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNz
aW9uSUQsIGZpcnN0UGFydHlVUkwuaG9zdCgpLnRvU3RyaW5nKCksIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0
eUNOQU1FRG9tYWluRm9yVGVzdGluZyhjb25zdCBVUkwmIGNuYW1lVVJMLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTc5LDE4ICsxNzk3LDEzIEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3QKIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRU
aGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzeW5jTG9jYWxTdG9yYWdlKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZSgp
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0
b3JhZ2UoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMg
c2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTk5OCw4ICsxODExLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFn
ZUNhcAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5z
ZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25k
cywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENh
Y2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Vjb25k
cyk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTIwMDksMjYgKzE4MjEsMTIgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpyZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFs
ZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICNlbHNl
CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRpZgogfQogCi1ib29sIFdlYnNpdGVEYXRh
U3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9v
bCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPSBwcm9jZXNz
UG9vbC53ZWJzaXRlRGF0YVN0b3JlKCkpCi0gICAgICAgIHJldHVybiBwcm9jZXNzUG9vbERhdGFT
dG9yZSA9PSB0aGlzOwotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvY2Vz
c1Bvb2wubmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuIG5ldHdvcmtQcm9jZXNzUHJv
eHktPmhhc1Nlc3Npb24obV9zZXNzaW9uSUQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogSGFz
aFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9v
bHMoc2l6ZV90IGxpbWl0KSBjb25zdAogewogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQ
b29sPj4gcHJvY2Vzc1Bvb2xzOwpAQCAtMjA0Myw5ICsxODQxLDYgQEAgSGFzaFNldDxSZWZQdHI8
V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRAogICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgp
KSB7CiAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9uZSBvZiB0aGUgbGVnYWN5IGRhdGEgc3Rv
cmVzLgogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFs
bFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQXNzb2NpYXRlZFByb2Nlc3NQ
b29sKCpwcm9jZXNzUG9vbCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAg
ICAgIHByb2Nlc3NQb29scy5hZGQocHJvY2Vzc1Bvb2wpOwogICAgICAgICAgICAgaWYgKHByb2Nl
c3NQb29scy5zaXplKCkgPT0gbGltaXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDg0
LDggKzE4NzksNyBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVNZWRpYUtleUZpbGUoY29uc3QgCiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KGNvbnN0IFdlYkNlcnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYg
aG9zdCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2Vy
dGlmaWNhdGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2Vy
dGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDAp
OwogfQogCiBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBXZWJzaXRlRGF0YVN0
b3JlOjptZWRpYUtleU9yaWdpbnMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0
b3J5KQpAQCAtMjE0MCw2ICsxOTM0LDQ5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3Zl
TWVkaWFLZXlzKGMKICAgICB9CiB9CiAKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1Byb3h5LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8mKT4m
JiByZXBseSkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KSwgd2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwgcmVwbHkg
PSBXVEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc1ZhbGlkKGNvbm5l
Y3Rpb25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5ICYmIHdlYWtUaGlzKSkg
eworICAgICAgICAgICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0lGKGlzUGVyc2lzdGVudCgpLCBQcm9jZXNzLCAiZ2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uOiBGYWlsZWQgZmlyc3QgYXR0ZW1wdCwgcmV0cnlpbmciKTsKKyAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3ZWJQcm9jZXNz
UHJveHksIFdURk1vdmUocmVwbHkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKQor
eworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5k
aWRUZXJtaW5hdGUoKTsKKyAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKK30KKwordm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCit7CisgICAgaWYg
KCFtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICByZXR1cm47CisgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+dGVybWluYXRlKCk7CisgICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Cit9CisKK3Zv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZv
clRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQor
eworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9u
SW1taW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9y
VGVzdGluZygpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5k
SW1taW5lbnRseUZvclRlc3RpbmcoKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5k
TmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFBy
b2Nlc3NEaWRSZXN1bWUoKTsKK30KKwogYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKQEAgLTIxNjksMTcgKzIwMDYsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRSZXNvdXJjZUxvYWRTdAogICAgICAgICAKICAgICAgICAgcmVzb2x2ZURpcmVjdG9yaWVz
SWZOZWNlc3NhcnkoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpKTsKKyAgICAgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpLCAwKTsKKyAgICAgICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNl
bmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHRydWUpLCBtX3Nlc3Npb25JRCk7Ci0gICAgICAgIH0K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1By
b2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZChtX3Nlc3Npb25JRCwgZmFsc2UpLCAwKTsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXNG
b3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZChmYWxzZSksIG1fc2Vzc2lvbklEKTsKLSAgICB9CiAKICAgICBtX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkID0gZmFsc2U7CiAjZWxzZQpAQCAtMjE5MSw4ICsyMDI2LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKEZ1bmN0aW9uPHZvaWQoY29uc3Qg
U3RyaW5nJik+JiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKGNhbGxiYWNrKSB7Ci0gICAgICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgICAgIHByb2Nl
c3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQodHJ1ZSkpOworICAgICAg
ICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpLCAwKTsKICAgICB9CiAgICAg
CiAgICAgbV9zdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CkBA
IC0yMjExLDggKzIwNDUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9z
ZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKG1fc2Vzc2lvbklE
LCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0oZW5hYmxlZCk7CiAgICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb25IYW5kbGVyKTsKQEAg
LTIyMjcsMjAgKzIwNjAsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1Jlc291cmNlTG9h
ZFN0YQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vzc2lvbklELCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9Ci0jZW5kaWYKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwor
I2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisjZW5kaWYKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoYm9vbCBlbmFi
bGVkKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0QWRDbGlja0F0dHJp
YnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0QWRDbGlj
a0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKQEAgLTIyNjIsNDggKzIwOTAsMTkgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZAogfQogI2VuZGlmCiAKLVZlY3RvcjxXZWJDb3JlOjpD
b29raWU+IFdlYnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gY29weVRvVmVjdG9yKG1fcGVuZGluZ0Nvb2tpZXMpOwotfQotCi12b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmFkZFBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUp
Ci17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmVJZihbJmNvb2tpZV0oYXV0byYgcGVuZGlu
Z0Nvb2tpZSkgewotICAgICAgICByZXR1cm4gcGVuZGluZ0Nvb2tpZS5pc0tleUVxdWFsKGNvb2tp
ZSk7Ci0gICAgfSk7Ci0gICAgbV9wZW5kaW5nQ29va2llcy5hZGQoY29va2llKTsKLX0KLQotdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNv
b2tpZSYgY29va2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMucmVtb3ZlKGNvb2tpZSk7Ci19
Ci0gICAgCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tpZXMoKQotewot
ICAgIG1fcGVuZGluZ0Nvb2tpZXMuY2xlYXIoKTsKLX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmZsdXNoQ29va2llcyhzZXNzaW9uSUQoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmZsdXNoQ29va2llcyhzZXNzaW9uSUQoKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJvb2wgYWxsb3dzKQogewotICAg
IGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29j
a2V0KGFsbG93cyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2Vy
dGlmaWNhdGVGb3JXZWJTb2NrZXQ6OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldDo6UmVwbHkoKSwgMCk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpCiB7Ci0g
ICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29s
cygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+Y2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9u
SUQoKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9uSUQoKSksIDApOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rp
b24pCkBAIC0yMzI5LDggKzIxMjgsNiBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJz
aXRlRGF0YVN0CiAKICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwogCi0gICAg
cGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBlbmRpbmdDb29raWVzKCk7Ci0KICAgICBhdXRv
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPnJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUhhbmRsZTsKICAgICBpZiAoIXJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAtMjQzNSw3ICsyMjMyLDEw
IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3QKICAgICBwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy5lbmFibGVkID0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDsKICNlbmRpZgog
ICAgIHBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMocGFyYW1ldGVycyk7Ci0KKyNpZiBQTEFU
Rk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBI
YXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRD
cm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKKyNlbmRpZgorICAgIAogICAgIHJldHVy
biBwYXJhbWV0ZXJzOwogfQogCkBAIC0yNDY1LDEwICsyMjY1LDYgQEAgQVBJOjpIVFRQQ29va2ll
U3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6OgogICAgIHJldHVybiAqbV9jb29raWVTdG9yZTsKIH0K
IAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpCi17Ci19
Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlv
bjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghaXNQZXJzaXN0ZW50KCkpIHsK
QEAgLTI0NzYsMjMgKzIyNzIsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0
b3JhZ2VEZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklE
LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYm
IGRldGFpbHMpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWls
cykpOwotICAgICAgICB9KTsKLSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgZmV0Y2hpbmcgZnJv
bSBtdWx0aXBsZSBwb29scy4KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIEFTU0VSVCghY29t
cGxldGlvbkhhbmRsZXIpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0TG9jYWxTdG9yYWdlRGV0
YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdU
Rk1vdmUoZGV0YWlscykpOworICAgIH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+cmVzZXRRdW90
YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpAQCAtMjUxOCw3ICsyMzA2LDEyIEBA
IGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6aHR0cDNFbmFibGVkKCkKIHsKICAgICByZXR1cm4gZmFs
c2U7CiB9Ci0jZW5kaWYKKworYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hh
c0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oQ09DT0EpCiAKICNpZiAhVVNFKEdMSUIpCiBXVEY6
OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdl
RGlyZWN0b3J5KCkKQEAgLTI1MzAsMzUgKzIzMjMsMTggQEAgV1RGOjpTdHJpbmcgV2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERldgogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbmFtZU9yaWdp
bkluV2Vic2l0ZURhdGEoVVJMJiYgb2xkTmFtZSwgVVJMJiYgbmV3TmFtZSwgT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRo
aXMpOwotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbmFtZU9yaWdpbkluV2Vic2l0ZURh
dGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJl
bmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRh
dGFUeXBlcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxFKEFQ
UF9CT1VORF9ET01BSU5TKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Np
b24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29u
c3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNBcHBCb3VuZFNlc3Npb24o
bV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVh
ckFwcEJvdW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+Y2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9t
YWluc1RvSVRQSWZJbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0yNTgwLDcgKzIzNTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmZvcndhcmRBcHBCb3VuZERvCiAKICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoZ2xvYmFs
RGVmYXVsdERhdGFTdG9yZSgpLmdldCgpLCAqYXBwQm91bmREb21haW5zKTsKIAotICAgIGZvciAo
YXV0byogc3RvcmUgOiBub25EZWZhdWx0RGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgIGZvciAo
YXV0byogc3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkpCiAgICAgICAgIHByb3BhZ2F0
ZUFwcEJvdW5kRG9tYWlucyhzdG9yZSwgKmFwcEJvdW5kRG9tYWlucyk7CiB9CiAKQEAgLTI1ODgs
MTAgKzIzNjQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluCiB7
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2V0QXBwQm91bmREb21haW5zRm9yUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Np
b25JRCwgZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
KG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogI2Vu
ZGlmCiAKQEAgLTI1OTksMTYgKzIzNzIsMjYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1cGRh
dGVCdW5kbGVJZGVudAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlk
ZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVu
dGlmaWVySW5OZXR3b3JrUHJvY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlm
aWVyKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cit9CisKK3N0YXRpYyBib29sIG5leHROZXR3
b3JrUHJvY2Vzc0xhdW5jaFNob3VsZEZhaWxGb3JUZXN0aW5nIHsgZmFsc2UgfTsKKwordm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjptYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmcoKQoreworICAgIG5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaFNob3VsZEZhaWxGb3JUZXN0aW5n
ID0gdHJ1ZTsKK30KKworYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpzaG91bGRNYWtlTmV4dE5ldHdv
cmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKQoreworICAgIHJldHVybiBzdGQ6OmV4Y2hh
bmdlKG5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaFNob3VsZEZhaWxGb3JUZXN0aW5nLCBmYWxzZSk7
CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTMsNiArNTMsOCBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSA8
cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KKyNpbmNsdWRlIDx3dGYvT1NPYmplY3RQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KICNlbmRpZgogCiAjaWYgVVNFKENV
UkwpCkBAIC03OSw2ICs4MSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgQXV0aGVudGlj
YXRvck1hbmFnZXI7CiBjbGFzcyBTZWNLZXlQcm94eVN0b3JlOwogY2xhc3MgRGV2aWNlSWRIYXNo
U2FsdFN0b3JhZ2U7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5OwogY2xhc3MgU09BdXRob3Jp
emF0aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBXZWJDZXJ0aWZpY2F0ZUluZm87CiBjbGFzcyBXZWJQ
YWdlUHJveHk7CkBAIC04OCw2ICs5MSw4IEBAIGNsYXNzIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTsKIGVudW0gY2xhc3MgQ2FjaGVNb2RlbCA6IHVpbnQ4X3Q7CiBlbnVtIGNsYXNzIFdl
YnNpdGVEYXRhRmV0Y2hPcHRpb24gOiB1aW50OF90OwogZW51bSBjbGFzcyBXZWJzaXRlRGF0YVR5
cGUgOiB1aW50MzJfdDsKKworc3RydWN0IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm87CiBz
dHJ1Y3QgV2Vic2l0ZURhdGFSZWNvcmQ7CiBzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnM7CiAKQEAgLTExMyw3ICsxMTgsMTIgQEAgcHVibGljOgogICAgIFdlYnNpdGVEYXRhU3RvcmUo
UmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYmLCBQQUw6OlNlc3Npb25JRCk7CiAg
ICAgfldlYnNpdGVEYXRhU3RvcmUoKTsKIAotICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBl
eGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOwor
ICAgIHN0YXRpYyB2b2lkIGZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKEZ1bmN0aW9uPHZvaWQoV2Vi
c2l0ZURhdGFTdG9yZSYpPiYmKTsKKyAgICAKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3
b3JrUHJvY2VzcygpIGNvbnN0OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9j
ZXNzKCk7CisKKyAgICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhpc3RpbmdEYXRhU3RvcmVG
b3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOwogCiAgICAgYm9vbCBpc1BlcnNpc3RlbnQoKSBj
b25zdCB7IHJldHVybiAhbV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKTsgfQogICAgIFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9CkBAIC0xMjMs
NiArMTMzLDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBjb25zdCBXZWFrSGFzaFNldDxXZWJQcm9j
ZXNzUHJveHk+JiBwcm9jZXNzZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3NlczsgfQogCisg
ICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvJik+
JiYpOworICAgIHZvaWQgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICB2b2lkIHNlbmRO
ZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHlGb3JUZXN0aW5nKCk7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUo
KTsKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7
CisgICAgc3RhdGljIHZvaWQgbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nKCk7CisgICAgc3RhdGljIGJvb2wgc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5j
aEZhaWxGb3JUZXN0aW5nKCk7CisKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChi
b29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoKSBjb25zdDsK
QEAgLTIzOSwxNSArMjU4LDggQEAgcHVibGljOgogCiAgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4gbV9kZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sRm9yQ29v
a2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlzQXNzb2NpYXRlZFByb2Nlc3NQb29s
KFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cyBwYXJhbWV0ZXJzKCk7CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5kaW5nQ29v
a2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpD
b29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29v
a2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVzKCk7CiAgICAgdm9pZCBmbHVzaENv
b2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyQ2FjaGVk
Q3JlZGVudGlhbHMoKTsKIApAQCAtMjU1LDYgKzI2NywxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYpOwogCisjaWYgUExBVEZPUk0oQ09D
T0EpCisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhX
ZWJQcm9jZXNzUHJveHkmKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50
VG9BbGxXZWJQcm9jZXNzZXMoKTsKKyNlbmRpZgorCiAjaWYgVVNFKENVUkwpCiAgICAgdm9pZCBz
ZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5ncyYmKTsKICAg
ICBjb25zdCBXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5ncyYgbmV0d29ya1Byb3h5U2V0dGluZ3Mo
KSBjb25zdCB7IHJldHVybiBtX3Byb3h5U2V0dGluZ3M7IH0KQEAgLTI4MCw4ICsyOTcsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uKFdl
YkNvcmU6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24mJik7CiAjZW5kaWYKIAot
ICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKLQogICAgIGNvbnN0IFdlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKCkgeyByZXR1cm4gbV9jb25maWd1
cmF0aW9uLmdldCgpOyB9CiAKICAgICBXZWJzaXRlRGF0YVN0b3JlQ2xpZW50JiBjbGllbnQoKSB7
IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQpAQCAtMjkxLDYgKzMwNiw4IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgcmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiwgVVJMJiYsIE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAg
Ym9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcm
KTsKKwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgV2ViRGV2aWNlT3JpZW50
YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyJiBkZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlv
bkFjY2Vzc0NvbnRyb2xsZXIoKSB7IHJldHVybiBtX2RldmljZU9yaWVudGF0aW9uQW5kTW90aW9u
QWNjZXNzQ29udHJvbGxlcjsgfQogI2VuZGlmCkBAIC0zNjcsNyArMzg0LDcgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNT
dG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKTsKICAgICBzdGF0aWMgdm9p
ZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5
LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mKTsKIAotICAgIHZv
aWQgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICB2b2lkIHJlZ2lzdGVyV2l0
aFNlc3Npb25JRE1hcCgpOwogCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKQogICAgIHN0
YXRpYyBPcHRpb25hbDxIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPj4gYXBwQm91
bmREb21haW5zSWZJbml0aWFsaXplZCgpOwpAQCAtNDA3LDggKzQyNCw2IEBAIHByaXZhdGU6CiAg
ICAgV2ViQ29yZTo6U291cE5ldHdvcmtQcm94eVNldHRpbmdzIG1fbmV0d29ya1Byb3h5U2V0dGlu
Z3M7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29va2llPiBtX3BlbmRpbmdDb29r
aWVzOwotICAgIAogICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4gbV9wcm9jZXNzZXM7
CiAKICAgICBib29sIG1faXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQgeyBmYWxzZSB9OwpAQCAtNDI5
LDYgKzQ0NCw3IEBAIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPFdlYnNpdGVEYXRhU3RvcmVDbGll
bnQ+IG1fY2xpZW50OwogCiAgICAgUmVmUHRyPEFQSTo6SFRUUENvb2tpZVN0b3JlPiBtX2Nvb2tp
ZVN0b3JlOworICAgIFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNz
OwogCiAjaWYgSEFWRShBUFBfU1NPKQogICAgIFVuaXF1ZVJlZjxTT0F1dGhvcml6YXRpb25Db29y
ZGluYXRvcj4gbV9zb0F1dGhvcml6YXRpb25Db29yZGluYXRvcjsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9X
ZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEyIEBACiAKICNpbXBvcnQgIkNvb2tpZVN0b3Jh
Z2VVdGlsc0NGLmgiCiAjaW1wb3J0ICJEZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5oIgorI2ltcG9y
dCAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2ltcG9ydCAiU2FuZGJveFV0aWxpdGllcy5oIgog
I2ltcG9ydCAiU3RvcmFnZU1hbmFnZXIuaCIKICNpbXBvcnQgIldlYkZyYW1lUG9saWN5TGlzdGVu
ZXJQcm94eS5oIgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNLZXlzLmgiCisjaW1wb3J0ICJXZWJQ
cm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5o
IgogI2ltcG9ydCAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKICNpbXBvcnQgPFdlYkNv
cmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CkBAIC00NCw2ICs0Niw3IEBACiAjaW1wb3J0IDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAj
aW1wb3J0IDx3dGYvVVJMLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvRW50aXRsZW1lbnRzLmg+CiAj
aW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQpAQCAtNTYyLDQgKzU2NSwyOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlaW5pdGlh
bGl6ZUFwcEJvCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJv
Y2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmIGVudGl0bGVtZW50KQor
eworICAgIHJldHVybiBXVEY6Omhhc0VudGl0bGVtZW50KG5ldHdvcmtQcm9jZXNzKCkuY29ubmVj
dGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVudGl0bGVtZW50LnV0ZjgoKS5kYXRhKCkpOworfQor
Cit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9X
ZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKK3sKKyAgICBpZiAocHJvY2Vzcy5z
dGF0ZSgpICE9IEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6U3RhdGU6OlJ1bm5pbmcpCisgICAgICAg
IHJldHVybjsKKyAgICBhdXRvKiBjb25uZWN0aW9uID0gcHJvY2Vzcy5jb25uZWN0aW9uKCk7Cisg
ICAgaWYgKCFjb25uZWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgYXV0byBtZXNzYWdlID0g
bmV0d29ya1Byb2Nlc3MoKS54cGNFbmRwb2ludE1lc3NhZ2UoKTsKKyAgICBpZiAoIW1lc3NhZ2Up
CisgICAgICAgIHJldHVybjsKKyAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVj
dGlvbi0+eHBjQ29ubmVjdGlvbigpLCBtZXNzYWdlKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvQWxsV2ViUHJvY2Vzc2VzKCkKK3sK
KyAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykKKyAgICAgICAgc2VuZE5ldHdv
cmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MocHJvY2Vzcyk7Cit9CisKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9y
ZUN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVD
dXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldE5ldHdvcmtQcm94eVNlCiB7CiAgICAgbV9wcm94eVNldHRpbmdzID0gV1RGTW92
ZShwcm94eVNldHRpbmdzKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9zZXNzaW9u
SUQsIG1fcHJveHlTZXR0aW5ncykpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fc2Vzc2lvbklELCBt
X3Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0
b3JlU291cC5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw4ICs0MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3
b3IKICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaWdub3JlVExTRXJyb3JzID0gbV9pZ25v
cmVUTFNFcnJvcnM7CiAgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnByb3h5U2V0dGluZ3Mg
PSBtX25ldHdvcmtQcm94eVNldHRpbmdzOwogCi0gICAgaWYgKGF1dG8qIHByb2Nlc3NQb29sID0g
cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2ll
UGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVy
c2lzdGVudFN0b3JhZ2VUeXBlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIo
KS5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChib29sIGVuYWJs
ZWQpCkBAIC01NCw4ICs1Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVu
dENyZWQKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3Jh
Z2VFbmFibGVkID0gZW5hYmxlZDsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVu
YWJsZWQobV9zZXNzaW9uSUQsIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCkp
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQobV9zZXNzaW9uSUQsIG1fcGVyc2lz
dGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKQEAgLTY0LDE1
ICs2MiwxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElnbm9yZVRMU0Vycm9yCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1faWdub3JlVExTRXJyb3JzID0gaWdub3JlVExTRXJyb3JzOwot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0SWdub3JlVExTRXJyb3JzKG1fc2Vzc2lvbklELCBtX2lnbm9yZVRMU0Vycm9ycykpOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEln
bm9yZVRMU0Vycm9ycyhtX3Nlc3Npb25JRCwgbV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXZWJDb3JlOjpT
b3VwTmV0d29ya1Byb3h5U2V0dGluZ3MmJiBzZXR0aW5ncykKIHsKICAgICBtX25ldHdvcmtQcm94
eVNldHRpbmdzID0gV1RGTW92ZShzZXR0aW5ncyk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5n
cyhtX3Nlc3Npb25JRCwgbV9uZXR3b3JrUHJveHlTZXR0aW5ncykpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRp
bmdzKG1fc2Vzc2lvbklELCBtX25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQ
cm9jZXNzUHJveHlHTGliLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdl
dExhdW5jaE8KICAgICAgICAgaWYgKCFkYXRhU3RvcmUpIHsKICAgICAgICAgICAgIC8vIFByZXdh
cm1lZCBwcm9jZXNzZXMgZG9uJ3QgaGF2ZSBhIFdlYnNpdGVEYXRhU3RvcmUgeWV0LCBzbyB1c2Ug
dGhlIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSBmcm9tIHRoZSBXZWJQcm9jZXNzUG9vbC4KICAg
ICAgICAgICAgIC8vIFRoZSBwcm9jZXNzIHdvbid0IGJlIHVzZWQgaWYgY3VycmVudCBXZWJzaXRl
RGF0YVN0b3JlIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IG9u
ZS4KLSAgICAgICAgICAgIGRhdGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wtPndlYnNpdGVEYXRhU3Rv
cmUoKTsKKyAgICAgICAgICAgIGRhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
YXRhU3RvcmUoKS5wdHIoKTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChkYXRhU3RvcmUp
OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJv
eHlTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dl
YkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1By
b3h5LmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAi
V2ViUHJvY2Vzc1Bvb2wuaCIKIApAQCAtMzMsOCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291
cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKLSAgICBtX2Nvb2tp
ZVBlcnNpc3RlbnRTdG9yYWdlTWFwLnNldChzZXNzaW9uSUQsIHN0ZDo6bWFrZV9wYWlyKHN0b3Jh
Z2VQYXRoLCBzdG9yYWdlVHlwZSkpOwotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtp
bmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOworICAgIGlmICht
X25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQs
IHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBl
JiBzdG9yYWdlVHlwZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAv
V2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsMTQgKzM3LDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewotICAgIE5ldHdvcmtTZXNzaW9u
Q3JlYXRpb25QYXJhbWV0ZXJzJiBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAg
ICBzdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVu
dFN0b3JhZ2UoZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgZGVmYXVsdFNlc3Np
b25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgZGVmYXVsdFNlc3Npb25Q
YXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7Ci0gICAgaWYgKG1fd2Vic2l0
ZURhdGFTdG9yZSkgewotICAgICAgICBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMucGVyc2lzdGVu
dENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyc2lzdGVu
dENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpOwotICAgICAgICBkZWZhdWx0U2Vzc2lvblBhcmFt
ZXRlcnMuaWdub3JlVExTRXJyb3JzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5pZ25vcmVUTFNFcnJv
cnMoKTsKLSAgICAgICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnByb3h5U2V0dGluZ3MgPSBt
X3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm94eVNldHRpbmdzKCk7Ci0gICAgfQotCiAgICAg
cGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kgPSBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0
UG9saWN5OwogICAgIHBhcmFtZXRlcnMubGFuZ3VhZ2VzID0gdXNlclByZWZlcnJlZExhbmd1YWdl
cygpOwogICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSB0cnVlOwpJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaAkocmV2aXNpb24gMjY3NTM2KQorKysgU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5m
by5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisj
aW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSFRUUENvb2tpZUFjY2Vw
dFBvbGljeS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDIwLTA5LTI0ICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92
ZSBOZXR3b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdl
YnNpdGVEYXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE1vc3QgY2hhbmdlcyB0byB0ZXN0cyBhcmUganVzdCBjYWxsaW5nIGEgZnVuY3Rpb24g
b24gdGhlIFdLV2Vic2l0ZURhdGFTdG9yZSBpbnN0ZWFkIG9mIHRoZSBXS1Byb2Nlc3NQb29sCisg
ICAgICAgIGJlY2F1c2Ugd2Ugd2FudCB0byBkbyBzb21ldGhpbmcgd2l0aCB0aGUgbmV0d29yayBw
cm9jZXNzIGFuZCBpdCBoYXMgYSBuZXcgb3duZXIuCisgICAgICAgIEV4Y2VwdGlvbnMgYXJlIG5v
dGVkIGlubGluZS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdv
cmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW06CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0Rvd25sb2FkLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZG93bmxvYWRBdFJhdGUpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdB
TC5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW06
CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFz
ZVByb2Nlc3NLaWxsLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW06CisgICAgICAgIChU
RVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QlBlcnNpc3RlbmNlLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbToKKyAgICAg
ICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5k
ZXhlZERCVGVtcEZpbGVTaXplLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbToKKyAg
ICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
TmV0d29ya1Byb2Nlc3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0
YVN0b3JlLm1tOgorICAgICAgICAoY2hlY2tSZWNvdmVyeUFmdGVyQ3Jhc2gpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24u
bW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgIFRoaXMgdGVzdCB3YXMg
bWFraW5nIGEgV0tXZWJzaXRlRGF0YVN0b3JlLCBnZXR0aW5nIGl0cyByZXNvdXJjZSBsb2FkIHN0
YXRpc3RpY3MgZGlyZWN0b3J5LAorICAgICAgICBwdXR0aW5nIHRoaW5ncyBpbiB0aGF0IGRpcmVj
dG9yeSwgdGhlbiBzdGFydGluZyB0aGUgbmV0d29yayBwcm9jZXNzIGFuZCBtYWtpbmcgc3VyZSBl
dmVyeXRoaW5nCisgICAgICAgIHdvcmtzIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBuZXR3b3JrIHBy
b2Nlc3MuICBOb3csIG5ldHdvcmsgcHJvY2VzcyBpbml0aWFsaXphdGlvbiBoYXBwZW5zIHdoZW4g
YQorICAgICAgICBXS1dlYnNpdGVEYXRhU3RvcmUgaXMgaW5zdGFudGlhdGVkLCBzbyB3ZSBuZWVk
IHRvIHB1dCB0aGluZ3MgdGhlcmUgYmVmb3JlIGluc3RhbnRpYXRpbmcgYSBXS1dlYnNpdGVEYXRh
U3RvcmUuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNl
V29ya2VyQmFzaWMubW06CisgICAgICAgIEJlZm9yZSB0aGlzIGNoYW5nZSwgZWFjaCBXS1Byb2Nl
c3NQb29sIGhhZCBpdHMgb3duIG5ldHdvcmsgcHJvY2Vzcywgd2hpY2ggaG9sZHMgdGhlIHNlcnZp
Y2Ugd29ya2VyIHJlZ2lzdHJ5CisgICAgICAgIGZvciB0aGUgV2Vic2l0ZURhdGFTdG9yZXMgdXNl
ZCB3aXRoIHRoYXQgcHJvY2VzcyBwb29sLiAgTm93LCB0aGUgbmV0d29yayBwcm9jZXNzIHN0aWxs
IG5lZWRzIHRvIGhhdmUgYSBzZXJ2aWNlCisgICAgICAgIHdvcmtlciByZWdpc3RyeSBpbiBpdCwg
YnV0IHdoZW4gd2UgcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBpdCBsb29raW5nIGZvciBhIHdlYiBw
cm9jZXNzIHRvIHJ1biB0aGUgc2VydmljZQorICAgICAgICB3b3JrZXIsIHdlIGdvIGFyYml0cmFy
aWx5IHRvIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wgdGhhdCBoYXMgYSBwcm9jZXNzIHdlIGNhbiB1
c2UuICBUaGlzIGxvZ2ljIGlzIGluIAorICAgICAgICBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNo
V29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzLiAgQmVjYXVzZSB3ZSB1c2Ug
dGhlIGZpcnN0IHByb2Nlc3MgcG9vbCBlYWNoCisgICAgICAgIHRpbWUsIHNldHRpbmcgdGhlIGN1
c3RvbSB1c2VyIGFnZW50IHRvIHR3byBkaWZmZXJlbnQgdGhpbmdzIGluIHR3byBkaWZmZXJlbnQg
cHJvY2VzcyBwb29scyBjYXVzZXMgb25seSBvbmUKKyAgICAgICAgdG8gYmUgdXNlZC4gIFRoaXMg
aXMgbm90IGEgcHJvYmxlbSBpbiBwcmFjdGljZSwgdGhvdWdoLCBiZWNhdXNlIHRoZSBvbmx5IGFw
cGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgU1BJIHRvCisgICAgICAgIHNldCBhIHNlcnZpY2Ugd29y
a2VyJ3MgY3VzdG9tIHVzZXIgYWdlbnQgaXMgU2FmYXJpLCB3aGljaCBvbmx5IGhhcyBvbmUgcHJv
Y2VzcyBwb29sLiAgVGhpcyB0ZXN0IHN0aWxsIHZlcmlmaWVzCisgICAgICAgIHRoYXQgYSB1c2Vy
IGFnZWludCBpcyBjb3JyZWN0bHkgc2VudC4KKyAgICAgICAgU2ltaWxhcmx5LCB0aGUgdGVzdHMg
dGhhdCBjb3VudCBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzZXMgZWl0aGVyIGhhdmUgZGlmZmVyZW50
IHJlc3VsdHMgb3IgbmVlZCB0byBiZSBydW4gd2l0aAorICAgICAgICBvbmUgcHJvY2VzcyBwb29s
IHBlciBwYXJlbnQgcHJvY2Vzcy4gIFRvIGtlZXAgdGhlIHJlc3VsdHMgdGhlIHNhbWUsIEkgc2Vw
YXJhdGVkIHRoZSB0ZXN0cyBpbnRvIGRpZmZlcmVudAorICAgICAgICBURVNUKFNlcnZpY2VXb3Jr
ZXJzLCAuLi4pIG1hY3JvcyB3aGljaCBhcmUgcnVuIGluIHNlcGFyYXRlIHBhcmVudCBwcm9jZXNz
ZXMuCisgICAgICAgIFRoZSB0ZXN0IFJlc3RvcmVGcm9tRGlza05vbkRlZmF1bHRTdG9yZSBuZWVk
cyB0byB1c2UgdGhlIHNhbWUgZGF0YSBzdG9yZSBmb3IgYm90aCBXS1dlYlZpZXdzIG5vdyBiZWNh
dXNlIG90aGVyd2lzZQorICAgICAgICB0aGVyZSB3YXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUg
c3RhcnR1cCBvZiBhIG5ldyBuZXR3b3JrIHByb2Nlc3MgdGhhdCB3YXNuJ3QgdGhlcmUgYmVmb3Jl
IGJlY2F1c2Ugd2Ugd2VyZSB1c2luZyB0aGUKKyAgICAgICAgc2FtZSBwcm9jZXNzIHBvb2wgYW5k
IHRoZXJlZm9yZSB0aGUgc2FtZSBuZXR3b3JrIHByb2Nlc3MuICBJIGFkZGVkIHNwaW5uaW5nIHRo
ZSBydW4gbG9vcCBhbmQgc2xlZXBpbmcgdG8gYmUgYWJsZSB0bworICAgICAgICByZXByb2R1Y2Ug
dGhlIHJhY2UgY29uZGl0aW9uIGZhaWx1cmUgYW5kIEkgdXNlIHRoZSBzYW1lIFdLV2Vic2l0ZURh
dGFTdG9yZSB0byB1c2UgdGhlIHNhbWUgbmV0d29yayBwcm9jZXNzLCB3aGljaCB3YXMKKyAgICAg
ICAgdGhlIGludGVudCBvZiB1c2luZyB0aGUgc2FtZSBXS1Byb2Nlc3NQb29sIGJlZm9yZS4gIFRo
ZSB0ZXN0IHN0aWxsIHRlc3RzIHRoYXQgdGhlIHJlZ2lzdHJhdGlvbiBpcyByZS11c2VkIHdoZW4g
d2UgYXJlCisgICAgICAgIG5vdCB1c2luZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlLgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1t
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2ll
U3RvcmUubW06CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2ViVmll
dzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdh
dGUgd2FpdEZvck1lc3NhZ2VdKToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxl
Z2F0ZSBhbGVydENvb2tpZUhUTUxdKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICBUaGlzIGlz
IHRoZSB3aG9sZSBwb2ludCBvZiBtZSBkb2luZyB0aGlzLgorICAgICAgICBJIHRvb2sgYSB0ZXN0
IHRoYXQgd2FzIGZsYWt5IG9ubHkgb24gaU9TIChiZWNhdXNlIG9mIGRpZmZlcmVudCBOU0hUVFBD
b29raWVTdG9yYWdlIHN5bmNpbmcgYmVoYXZpb3IpIGFuZCBtYWRlCisgICAgICAgIGl0IGZsYWt5
IG5vd2hlcmUgKGZpbmdlcnMgY3Jvc3NlZCEpIGFuZCBhZGRlZCBhIHRlc3QgdGhhdCBjb3JyZWN0
bHkgaGFuZGxlcyBzZXNzaW9uIGNvb2tpZXMgbGlrZSB3ZSBjb3VsZCBub3QKKyAgICAgICAgYmVm
b3JlIHRoaXMgY2hhbmdlLgorICAgICAgICBJIGFsc28gcmUtdXNlZCBzb21lIHRlc3QgaW5mcmFz
dHJ1Y3R1cmUgYW5kIG1hZGUgaXQgc3RvcCB1c2luZyBwcm9jZXNzLWdsb2JhbCBzdGF0aWMgdmFy
aWFibGVzIGZvciB0ZXN0IHN0YXRlLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3Jl
Q3VzdG9tUGF0aHMubW06CisgICAgICAgIChydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMp
OgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRP
YmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW06CisgICAgICAgICgtW0Nsb3NlV2hpbGVTdGFydGlu
Z1Byb3RvY29sIHN0YXJ0TG9hZGluZ10pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6cnVuVGVz
dCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToK
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmZpbmRBbmREdW1wV2ViS2l0UHJvY2Vzc0lk
ZW50aWZpZXJzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6Om5ldHdvcmtQcm9jZXNz
RGlkQ3Jhc2gpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlTmV0d29y
a1Byb2Nlc3MpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RD
b250ZXh0KToKKyAgICAgICAgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JT
ZXJ2aWNlV29ya2VyVGVzdGluZyBpcyBub3QgbmVlZGVkLCBzbyBJIHJlbW92ZWQgaXQuCisgICAg
ICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlIGlzbid0IG5lZWRlZCBhbnkg
bW9yZSBiZWNhdXNlIFdLQ29udGV4dFJlZiAoV2ViUHJvY2Vzc1Bvb2wpIGRvZXNuJ3QKKyAgICAg
ICAgb3duIGEgbmV0d29yayBwcm9jZXNzIGFueSBtb3JlLCBzbyBpdCBkb2Vzbid0IGNhcmUgd2hp
Y2ggaXMgdGhlIGRlZmF1bHQgV2Vic2l0ZURhdGFTdG9yZS4KKyAgICAgICAgSW4gZmFjdCwgdGhl
ICJkZWZhdWx0IiBXZWJzaXRlRGF0YVN0b3JlIGlzbid0IHJlYWxseSBpbXBvcnRhbnQgaW4gdGhl
IG5ldHdvcmsgcHJvY2VzcyBhbnkgbW9yZS4KKwogMjAyMC0wOS0yNCAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bV1BFXSBNb3ZlIHBy
b3h5IHNldHRpbmdzIGZyb20gV2ViS2l0Q29udGV4dCB0byBXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNz
Q3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVj
dGlvbi5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc0dyb3Vw
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtODcsNyArODgsNyBAQCBURVNUKFdlYktpdCwgTmV0d29y
a1Byb2Nlc3NDcmFzaFdpdGhQZW5kCiAgICAgcGlkX3Qgd2ViVmlldzJQSUQgPSBbd2ViVmlldzIu
Z2V0KCkgX3dlYlByb2Nlc3NJZGVudGlmaWVyXTsKICAgICBFWFBFQ1RfTkUod2ViVmlldzFQSUQs
IHdlYlZpZXcyUElEKTsKIAotICAgIHBpZF90IGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZmVyID0gW3Byb2Nlc3NQb29sLmdldCgpIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdOworICAg
IHBpZF90IGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVyID0gW2NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXTsKICAgICBF
WFBFQ1RfTkUoaW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlmZXIsIDApOwogICAgIGtpbGwo
aW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlmZXIsIFNJR0tJTEwpOwogICAgIFV0aWw6OnJ1
bigmbmV0d29ya1Byb2Nlc3NDcmFzaGVkKTsKQEAgLTk2LDcgKzk3LDcgQEAgVEVTVChXZWJLaXQs
IE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZAogICAgIFt3ZWJWaWV3MS5nZXQoKSBsb2FkUmVx
dWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
VVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rv
cnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXV07CiAgICAgW3dlYlZpZXcxLmdldCgpIF90
ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKIAotICAgIHBpZF90IHJlbGF1bmNoZWRO
ZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIgPSBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX25ldHdvcmtQcm9j
ZXNzSWRlbnRpZmllcl07CisgICAgcGlkX3QgcmVsYXVuY2hlZE5ldHdvcmtQcm9jZXNzSWRlbnRp
ZmllciA9IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9j
ZXNzSWRlbnRpZmllcl07CiAgICAgRVhQRUNUX05FKGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50
aWZpZmVyLCByZWxhdW5jaGVkTmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKTsKICAgICBFWFBFQ1Rf
RkFMU0UobmV0d29ya1Byb2Nlc3NDcmFzaGVkKTsKIApAQCAtMTQ2LDggKzE0Nyw4IEBAIFRFU1Qo
V2ViS2l0LCBOZXR3b3JrUHJvY2Vzc1JlbGF1bmNoT25MYXUKIAogICAgIC8vIENvbnN0dWN0aW5n
IGEgV2ViVmlldyBzdGFydHMgYSBuZXR3b3JrIHByb2Nlc3Mgc28gdGVybWluYXRlIHRoaXMgb25l
LiBUaGUgcGFnZSBsb2FkIGJlbG93IHdpbGwgdGhlbiByZXF1ZXN0IGEgbmV0d29yayBwcm9jZXNz
IGFuZCB3ZQogICAgIC8vIG1ha2UgdGhpcyBuZXcgbmV0d29yayBwcm9jZXNzIGxhdW5jaCBjcmFz
aCBvbiBzdGFydHVwLgotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OwotICAgIFtwcm9jZXNzUG9vbCBfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JU
ZXN0aW5nXTsKKyAgICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9tYWtlTmV4dE5ldHdvcmtQcm9jZXNz
TGF1bmNoRmFpbEZvclRlc3RpbmddOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVE
YXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gZGVsZWdhdGUg
PSBhZG9wdE5TKFtbTW9uaXRvcldlYkNvbnRlbnRDcmFzaE5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxv
Y10gaW5pdF0pOwogICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5n
ZXQoKV07CkBAIC0xNTgsNyArMTU5LDcgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzUmVs
YXVuY2hPbkxhdQogICAgIEVYUEVDVF9UUlVFKG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk7CiAgICAg
RVhQRUNUX0ZBTFNFKHdlYlByb2Nlc3NDcmFzaGVkKTsKICAgICBFWFBFQ1RfR1QoW3dlYlZpZXcg
X3dlYlByb2Nlc3NJZGVudGlmaWVyXSwgMCk7Ci0gICAgRVhQRUNUX0dUKFtwcm9jZXNzUG9vbC5n
ZXQoKSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXSwgMCk7CisgICAgRVhQRUNUX0dUKFtjb25m
aWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmll
cl0sIDApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0JKHJldmlz
aW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93
bmxvYWQubW0JKHdvcmtpbmcgY29weSkKQEAgLTg4OSw5ICs4ODksOSBAQCB2b2lkIGRvd25sb2Fk
QXRSYXRlKGRvdWJsZSBkZXNpcmVkS2JwcywgCiAgICAgcmVjZWl2ZWREYXRhID0gZmFsc2U7CiAg
ICAgVXRpbDo6cnVuKCZyZWNlaXZlZERhdGEpOwogICAgIC8vIFN0YXJ0IHRoZSBEb3dubG9hZE1v
bml0b3IncyB0aW1lci4KLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wg
X3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKKyAgICBbW3dlYlZpZXcgY29uZmlndXJh
dGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpZRVNdOwog
ICAgIGlmIChyZXR1cm5Ub0ZvcmVncm91bmQgPT0gQXBwUmV0dXJuc1RvRm9yZWdyb3VuZDo6WWVz
KQotICAgICAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3N5bnRoZXNp
emVBcHBJc0JhY2tncm91bmQ6Tk9dOworICAgICAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0u
d2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpOT107CiAgICAgZGlk
Q2FuY2VsID0gZmFsc2U7CiAgICAgVXRpbDo6cnVuKCZkaWRDYW5jZWwpOwogICAgIHRlcm1pbmF0
ZVNlcnZlciA9IHRydWU7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0lEQkNoZWNrcG9pbnRXQUwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tCShyZXZpc2lvbiAyNjc1MzYp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRX
QUwubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9X
S1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250
cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Q
cml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29s
Q29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBA
IC04Niw3ICs4Nyw3IEBAIFRFU1QoSW5kZXhlZERCLCBDaGVja3BvaW50c1dBTEF1dG9tYXRpY2EK
ICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFk
b3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25m
aWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6
aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OwogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5t
bQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVE
YXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxX
ZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
VXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJbmRleGVkREIsIERlbGV0
ZVJlY292ZXJ5KQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1
cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsK
ICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNz
YWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
KyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IHRoZSBpbmNvbnNpc3RlbnQgZGF0YWJhc2UgZmls
ZXMgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeQogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1bmRs
ZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklEQkRlbGV0ZVJlY292ZXJ5IiB3aXRoRXh0
ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMi
XTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhV
cGdyYWRlVG9WMi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJv
Y2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xs
ZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZh
dGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25m
aWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU4
LDcgKzU5LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4VXBncmFkZVRvVjIpCiAgICAgUmV0YWlu
UHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1
c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0
KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8v
IENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0aGUgZGF0YWJhc2UgZGly
ZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJl
c291cmNlOkAiSW5kZXhVcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0
b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmpl
Y3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9W
Mi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dL
UHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRy
b2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblBy
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAg
LTU3LDcgKzU4LDcgQEAgVEVTVChJbmRleGVkREIsIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZAog
ICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRv
cHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZp
Z3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpo
YW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CiAKICAgICAvLyBDb3B5IGRhdGFiYXNlIGZpbGVzIHdpdGggb2xkIE9iamVjdFN0b3JlSW5mbyBz
Y2hlbWEgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeS4KICAgICBOU1VSTCAqdXJsMSA9IFtbTlNC
dW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJPYmplY3RTdG9yZUluZm9VcGdy
YWRlIiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQ
SS5yZXNvdXJjZXMiXTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tp
bGwubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdl
YktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC05Miw3ICs5Myw3IEBAIFRFU1QoSW5kZXhlZERCLCBE
YXRhYmFzZVByb2Nlc3NLaWxsKQogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJl
Y2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgICAgIGlmICgha2lsbGVkREJQcm9jZXNzICYmIG9w
ZW5SZXF1ZXN0VXBncmFkZU5lZWRlZCkgewogICAgICAgICAgICAga2lsbGVkREJQcm9jZXNzID0g
dHJ1ZTsKLSAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgICAgICAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgICAgIH0KICAg
ICB9CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhl
ZERCTXVsdGlQcm9jZXNzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCShyZXZpc2lvbiAyNjc1MzYp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRp
UHJvY2Vzcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2Vi
S2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
V2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3
UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQg
PFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgogI2ltcG9ydCA8d3RmL0RlcXVlLmg+CkBAIC02
OSw3ICs3MCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJNdWx0aVByb2Nlc3MpCiAgICAg
UmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJh
dGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRs
ZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAog
ICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2Uu
bW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4
LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlBlcnNpc3RlbmNlKQogICAgIHdlYlZpZXcg
PSBuaWw7CiAKICAgICAvLyBUZXJtaW5hdGUgdGhlIG5ldHdvcmsgcHJvY2VzcwotICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107Cisg
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOwogCiAgICAgLy8gTWFrZSBhIG5ldyB3ZWIgdmlldyB0byBmaW5pc2ggdGhlIHRl
c3QKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24u
Z2V0KCldKTsKQEAgLTI2OCw3ICsyNjgsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCVGhp
cmRQYXJ0eUZyYW1lCiAKICAgICB3ZWJWaWV3ID0gbmlsOwogICAgIHNlY29uZFdlYlZpZXcgPSBu
aWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBUaGlyZC1wYXJ0eSBJREIgc3RvcmFn
ZSBpcyBzdG9yZWQgaW4gdGhlIG1lbW9yeSBvZiBuZXR3b3JrIHByb2Nlc3MuCiAgICAgYXV0byB0
aGlyZFdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5T
TWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQo
KV0pOwpAQCAtMzg1LDcgKzM4NSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUaGlyZFBh
cnR5V29ya2UKIAogICAgIHdlYlZpZXcgPSBuaWw7CiAgICAgc2Vjb25kV2ViVmlldyA9IG5pbDsK
LSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHROUyhb
W1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAw
KSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBsb2FkVGVzdFBhZ2VJ
bldlYlZpZXcodGhpcmRXZWJWaWV3LmdldCgpLCBAImRhdGFiYXNlIGlzIGNyZWF0ZWQiKTsKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVu
ZEltbWluZW50bHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbQkocmV2aXNpb24gMjY3NTM2
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNw
ZW5kSW1taW5lbnRseS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9y
dCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2Vy
Q29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29u
ZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBA
IC04OCw4ICs4OSw4IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJTdXNwZW5kSW1taW5lbnQK
IAogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkNvbnRpbnVlIik7CiAKLSAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5XTsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5l
dHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRl
RGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vz
c0RpZFJlc3VtZV07CiAKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJFeHBlY3RlZCBBYm9y
dCBGb3IgU3VzcGVuc2lvbiIpOwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkV4cGVjdGVk
IFN1Y2Nlc3MgQWZ0ZXIgUmVzdW1lIik7CkBAIC0xNTgsOCArMTU5LDggQEAgVEVTVChJbmRleGVk
REIsIFN1c3BlbmRJbW1pbmVudGx5Rm9yVGhpcgogICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5n
Om1haW5GcmFtZVN0cmluZyBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL3dl
YmtpdC5vcmciXV07CiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiZGF0YWJhc2UgaXMgY3Jl
YXRlZCIpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3
b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0
KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1
c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0
b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgcnVuVGVzdEFuZENoZWNr
UmVzdWx0KEAidHJhbnNhY3Rpb24gaXMgY29tcGxldGVkIik7CiB9CkluZGV4OiBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QlRlbXBGaWxlU2l6ZS5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTk1LDcgKzk1LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlRlbXBGaWxlU2l6
ZSkKIAogICAgIC8vIFRlcm1pbmF0ZSBuZXR3b3JrIHByb2Nlc3MgdG8ga2VlcCBXQUwgb24gZGlz
ay4KICAgICB3ZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQ
b29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCku
d2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgRVhQRUNU
X1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOndh
bEZpbGVQYXRoLmdldCgpLnBhdGhdKTsKICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBmaWxl
QXR0cmlidXRlcyA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gYXR0cmlidXRlc09m
SXRlbUF0UGF0aDp3YWxGaWxlUGF0aC5nZXQoKS5wYXRoIGVycm9yOm5pbF07CkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
TG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0J
KHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VzZXJD
b250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25m
aWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2VicGFnZVByZWZlcmVuY2Vz
UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpA
QCAtMTA5LDcgKzExMCw3IEBAIFRFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzQ3Jh
c2gKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7
CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAic2Vzc2lvbjpzdG9yYWdlIiwgW2xhc3RTY3JpcHRNZXNz
YWdlIGJvZHldKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURh
dGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgcmVjZWl2ZWRTY3JpcHRN
ZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNj
cmlwdE1lc3NhZ2UpOwpAQCAtMTYyLDcgKzE2Myw3IEBAIFRFU1QoV0tXZWJWaWV3LCBMb2NhbFN0
b3JhZ2VQcm9jZXNzU3VzcGUKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVk
U2NyaXB0TWVzc2FnZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAidmFsdWUiLCBbbGFzdFNjcmlw
dE1lc3NhZ2UgYm9keV0pOwogCi0gICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29ya1By
b2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndl
YnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07
CiAKICAgICByZWFkeVRvQ29udGludWUgPSBmYWxzZTsKICAgICBbd2ViVmlldzEgZXZhbHVhdGVK
YXZhU2NyaXB0OkAid2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdrZXknLCAnbmV3VmFsdWUn
KSIgY29tcGxldGlvbkhhbmRsZXI6XihpZCwgTlNFcnJvciAqKSB7CkBAIC0xNzcsNyArMTc4LDcg
QEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZQogICAgIH1dOwogICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0NvbnRpbnVlKTsKICAgICAKLSAgICBb
cHJvY2Vzc1Bvb2wuZ2V0KCkgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lXTsKIAogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwogICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJv
Y2Vzcy5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NyBAQAogI2ltcG9ydCAiSFRUUFNlcnZlci5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgog
I2ltcG9ydCAiVXRpbGl0aWVzLmgiCi0jaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZh
dGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1w
b3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQg
PHd0Zi9WZWN0b3IuaD4KQEAgLTM3LDE0ICszNywxNCBAQCBURVNUKFdlYktpdCwgTmV0d29ya1By
b2Nlc3NFbnRpdGxlbWVudHMpCiB7CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkg
Y29uZmlndXJhdGlvbjpbW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRv
cmVsZWFzZV1dKTsKICAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6
QCJzaW1wbGUiXTsKLSAgICBXS1Byb2Nlc3NQb29sICpwb29sID0gW3dlYlZpZXcgY29uZmlndXJh
dGlvbl0ucHJvY2Vzc1Bvb2w7Ci0gICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9IFtwb29sIF9uZXR3
b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAImNvbS5hcHBsZS5yb290bGVzcy5z
dG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94Il07CisgICAgV0tXZWJzaXRlRGF0YVN0b3Jl
ICpzdG9yZSA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmU7CisgICAg
Ym9vbCBoYXNFbnRpdGxlbWVudCA9IFtzdG9yZSBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVu
dEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Muc3RvcmFnZS5XZWJLaXROZXR3b3JraW5n
U2FuZGJveCJdOwogI2lmIFBMQVRGT1JNKE1BQykgJiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykK
ICAgICBFWFBFQ1RfVFJVRShoYXNFbnRpdGxlbWVudCk7CiAjZWxzZQogICAgIEVYUEVDVF9GQUxT
RShoYXNFbnRpdGxlbWVudCk7CiAjZW5kaWYKLSAgICBFWFBFQ1RfRkFMU0UoW3Bvb2wgX25ldHdv
cmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7
CisgICAgRVhQRUNUX0ZBTFNFKFtzdG9yZSBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZv
clRlc3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJdKTsKIH0KIAogVEVTVChXZWJLaXQsIEhUVFBS
ZWZlcmVyKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3
b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hO
b25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCShyZXZpc2lvbiAyNjc1MzYpCisrKyBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0
ZW50RGF0YVN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyB2
b2lkIGNoZWNrUmVjb3ZlcnlBZnRlckNyYXNoKFdLV2UKICAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtbd2ViVmlldyBjb25maWd1
cmF0aW9uXS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtbd2Vi
VmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0
aFVSTDpzaW1wbGUyXV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIH0K
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBP
bk5hdmlnYXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQkocmV2aXNpb24gMjY3NTM2KQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2
aWdhdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNTM4NSw3ICs1Mzg1LDcgQEAgVEVTVChQcm9j
ZXNzU3dhcCwgVXNlUHJld2FybWVkUHJvY2Vzc0FmdAogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9y
ZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MiA9IGFkb3B0
TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAs
IDYwMCkgY29uZmlndXJhdGlvbjp3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIFt3
ZWJWaWV3MiBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwpJbmRleDogVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
UmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC03MTksNyArNzE5LDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLCBOZXR3b3JrUHJvYwogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3Ao
MSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9wdE5T
KFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2
MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkBAIC03NTIsNyArNzUy
LDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBOZXR3b3JrUHJvYwogCiAgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5n
ZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
IAogICAgIGF1dG8gd2ViVmlldzMgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJh
dGlvbi5nZXQoKV0pOwogCkBAIC0xNTU4LDEwICsxNTU4LDggQEAgVEVTVChSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLCBNaWdyYXRlRGF0YQogCiBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENh
bkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2wpCiB7CisgICAgTlNVUkwgKml0cFJv
b3RVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0
cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkNhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5v
UHJvY2Vzc1Bvb2xUZXN0Il0gaXNEaXJlY3Rvcnk6WUVTXTsKICAgICBhdXRvIGRlZmF1bHRGaWxl
TWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKLSAgICBfV0tXZWJzaXRl
RGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vi
c2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07Ci0gICAgYXV0byAq
ZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1
cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKLSAgICBOU1VSTCAq
aXRwUm9vdFVSTCA9IFtbZGF0YVN0b3JlIF9jb25maWd1cmF0aW9uXSBfcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RpcmVjdG9yeV07CiAgICAgTlNVUkwgKmZpbGVVUkwgPSBbaXRwUm9vdFVSTCBVUkxC
eUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJvYnNlcnZhdGlvbnMuZGIiXTsKICAgICBbZGVmYXVs
dEZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFBhdGg6aXRwUm9vdFVSTC5wYXRoIGVycm9yOm5pbF07
CiAgICAgRVhQRUNUX0ZBTFNFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpp
dHBSb290VVJMLnBhdGhdKTsKQEAgLTE1NzIsNiArMTU3MCwxMCBAQCBURVNUKFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0RhCiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1bHRGaWxlTWFu
YWdlciBmaWxlRXhpc3RzQXRQYXRoOm5ld0ZpbGVVUkwucGF0aF0pOwogICAgIFtkZWZhdWx0Rmls
ZU1hbmFnZXIgY29weUl0ZW1BdFBhdGg6bmV3RmlsZVVSTC5wYXRoIHRvUGF0aDpmaWxlVVJMLnBh
dGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVF
eGlzdHNBdFBhdGg6ZmlsZVVSTC5wYXRoXSk7CisKKyAgICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFTdG9y
ZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgZGF0YVN0b3JlQ29uZmlndXJh
dGlvbi5fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IGl0cFJvb3RVUkw7CisgICAg
YXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhD
b25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKICAgICBb
ZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZRVNdOwogCiAgICAg
c3RhdGljIGJvb2wgZG9uZUZsYWcgPSBmYWxzZTsKQEAgLTE2MzMsMTIgKzE2MzUsMTIgQEAgVEVT
VChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBTdG9yZVN1c3BlbgogICAgIFt3ZWJWaWV3MiBfdGVz
dF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CiAKICAgICBkb25lRmxhZyA9IGZhbHNlOwot
ICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVu
ZDpeeworICAgIFtkYXRhU3RvcmUxIF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5k
Ol57CiAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKICAgICB9XTsKICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKIAotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VuZE5l
dHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbZGF0YVN0b3JlMSBfc2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lXTsKIH0KIAogQGludGVyZmFjZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2No
ZW1lSGFuZGxlciA6IE5TT2JqZWN0IDxXS1VSTFNjaGVtZUhhbmRsZXI+CkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VX
b3JrZXJCYXNpYy5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTU1OCw3ICs1NTgsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBVc2VyQWdlbnRPdmVycmlkZSkK
IAogICAgIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBh
bGxvY10gaW5pdF0pOwogCi0gICAgbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbU1dVc2VyQWdl
bnRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJNZXNzYWdl
IGZyb20gd29ya2VyOiBCYXIgQ3VzdG9tIFVzZXJBZ2VudCJdKTsKKyAgICBtZXNzYWdlSGFuZGxl
ciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0aEV4
cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6IEZvbyBDdXN0b20gVXNlckFnZW50
Il0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlw
dE1lc3NhZ2VIYW5kbGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJzdyJdOwogCiAgICAg
d2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7
CkBAIC02MzMsOCArNjMzLDYgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgQ2FjaGVTdG9yYWdlUmVz
dG9yZQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZh
bHNlOwogCi0gICAgW1dLV2Vic2l0ZURhdGFTdG9yZSBfZGVsZXRlRGVmYXVsdERhdGFTdG9yZUZv
clRlc3RpbmddOwotCiAgICAgU2VydmljZVdvcmtlclRDUFNlcnZlciBzZXJ2ZXIoewogICAgICAg
ICB7ICJ0ZXh0L2h0bWwiLCBtYWluQ2FjaGVTdG9yYWdlQnl0ZXMgfQogICAgIH0sIHsKQEAgLTk4
Miw2ICs5ODAsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2VzCiAK
ICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFk
b3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgc2V0Q29u
ZmlndXJhdGlvbkluamVjdGVkQnVuZGxlUGF0aChjb25maWd1cmF0aW9uLmdldCgpKTsKKyAgICBS
ZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gb3JpZ2luYWxQcm9jZXNzUG9vbCA9IGNvbmZpZ3VyYXRp
b24uZ2V0KCkucHJvY2Vzc1Bvb2w7CiAKICAgICBkb25lID0gZmFsc2U7CiAKQEAgLTEwMzUsNyAr
MTAzNCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXMKICAgICBk
b25lID0gZmFsc2U7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5nIHRoZSBzaW1wbGUg
cGFnZSBkaWQgbm90IHN0YXJ0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgotICAgIEVYUEVD
VF9FUSgwdSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNl
V29ya2VyUHJvY2Vzc0NvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29u
ZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CiAKICAg
ICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01h
a2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOm5ld0NvbmZpZ3VyYXRpb24uZ2V0
KCldKTsKICAgICBFWFBFQ1RfRVEoMnUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9j
ZXNzUG9vbC5fd2ViUHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3YXJtZWQpOwpAQCAtMTA0Myw5ICsx
MDQyLDggQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU2VydmljZVdvcmtlclByb2NlcwogICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwogCi0gICAg
Ly8gTWFrZSBzdXJlIHRoYXQgbG9hZGluZyB0aGlzIHBhZ2UgZGlkIHN0YXJ0IHRoZSBzZXJ2aWNl
IHdvcmtlciBwcm9jZXNzLgogICAgIEVYUEVDVF9FUSgxdSwgd2ViVmlldy5nZXQoKS5jb25maWd1
cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKLQorICAgIEVY
UEVDVF9FUSgxdSwgb3JpZ2luYWxQcm9jZXNzUG9vbC5nZXQoKS5fc2VydmljZVdvcmtlclByb2Nl
c3NDb3VudCk7CiAgICAgW1tjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVdIHJlbW92ZURh
dGFPZlR5cGVzOltXS1dlYnNpdGVEYXRhU3RvcmUgYWxsV2Vic2l0ZURhdGFUeXBlc10gbW9kaWZp
ZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQYXN0XSBjb21wbGV0aW9uSGFuZGxlcjpeKCkgewogICAg
ICAgICBkb25lID0gdHJ1ZTsKICAgICB9XTsKQEAgLTE2MTgsMjEgKzE2MTYsMzUgQEAgc3RhdGlj
IHNpemVfdCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2VzcwogICAgIHJldHVybiB3ZWJWaWV3Lmdl
dCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudElnbm9yaW5nUHJl
d2FybWVkOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZkFuZEluUHJvY2Vzc1NlcnZp
Y2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZlByb2Nlc3NTZXJ2aWNlV29ya2Vy
KQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CiAg
ICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwg
bGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RFU1QoU2VydmljZVdvcmtlcnMsIElu
UHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOwor
CiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykpOwogfQogCi1URVNU
KFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoU2Vy
dmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5rQmVmb3JlTmF2
aWdhdGluZ1Rocm91Z2hPdXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewogICAgIGJvb2wgdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9vbCBmaXJzdExvYWRB
Ym91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNoU2VydmljZVdvcmtl
clByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGZpcnN0TG9hZEFib3V0
QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZvcmVO
YXZpZ2F0aW5nVGhyb3VnaEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9hZEFi
b3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJzdExvYWRBYm91dEJs
YW5rKSk7CiB9CiAKQEAgLTE4NDcsOCArMTg1OSw4IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFJl
c3RvcmVGcm9tRGlza05vbkQKICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNy
ZWF0ZURpcmVjdG9yeUF0VVJMOnN3REJQYXRoIHdpdGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpZ
RVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0aF0pOwog
Ci0gICAgLy8gV2UgcHJvdGVjdCB0aGUgcHJvY2VzcyBwb29sIHNvIHRoYXQgaXQgb3V0bGl2ZXMg
dGhlIFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgUmV0YWluUHRyPFdLUHJvY2Vzc1Bvb2w+IHByb3Rl
Y3RlZFByb2Nlc3NQb29sOworICAgIFJldGFpblB0cjxXS1dlYnNpdGVEYXRhU3RvcmU+IHByb3Rl
Y3RlZFdlYnNpdGVEYXRhU3RvcmU7CiAKICAgICBTZXJ2aWNlV29ya2VyVENQU2VydmVyIHNlcnZl
cih7CiAgICAgICAgIHsgInRleHQvaHRtbCIsIG1haW5SZWdpc3RlcmluZ1dvcmtlckJ5dGVzIH0s
CkBAIC0xODcxLDYgKzE4ODMsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBSZXN0b3JlRnJvbURp
c2tOb25ECiAKICAgICAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9u
OmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICAgICAgcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSB3
ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2w7CisgICAgICAgIHByb3RlY3Rl
ZFdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURh
dGFTdG9yZTsKIAogICAgICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpzZXJ2ZXIucmVxdWVzdCgp
XTsKIApAQCAtMTg4MCwxMyArMTg5MywxNSBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBSZXN0b3Jl
RnJvbURpc2tOb25ECiAgICAgICAgIFt3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vz
c1Bvb2wgX3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzXTsKICAgICB9CiAKKyAgICAvLyBNYWtlIHVz
IG1vcmUgbGlrZWx5IHRvIGxvc2UgYW55IHJhY2VzIHdpdGggc2VydmljZSB3b3JrZXIgaW5pdGlh
bGl6YXRpb24uCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMTApOworICAg
IHVzbGVlcCgxMDAwMCk7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMTAp
OworCiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAgICAgICAgIGF1dG8gY29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAKLSAgICAg
ICAgYXV0byB3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tfV0tXZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwotICAgICAgICB3ZWJzaXRl
RGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS5fc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeSA9IHN3REJQYXRoOwotICAgICAgICBhdXRvIG5vbkRlZmF1bHREYXRhU3RvcmUgPSBh
ZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9u
OndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpXSk7Ci0gICAgICAgIGNvbmZpZ3Vy
YXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSA9IG5vbkRlZmF1bHREYXRhU3RvcmUuZ2V0KCk7
CisgICAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSA9IHByb3RlY3Rl
ZFdlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7CiAKICAgICAgICAgYXV0byBtZXNzYWdlSGFuZGxlciA9
IGFkb3B0TlMoW1tTV01lc3NhZ2VIYW5kbGVyRm9yUmVzdG9yZUZyb21EaXNrVGVzdCBhbGxvY10g
aW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJQQVNTOiBSZWdpc3RyYXRpb24gYWxyZWFkeSBoYXMg
YW4gYWN0aXZlIHdvcmtlciJdKTsKICAgICAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50
Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkg
bmFtZTpAInN3Il07CkBAIC0xOTQ0LDExICsxOTU5LDExIEBAIFRFU1QoU2VydmljZVdvcmtlcnMs
IFN1c3BlbmROZXR3b3JrUHJvY2UKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBk
ZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAgICBb
IHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9j
ZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0
aW9uLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseV07CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IGZpbGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0aF0pOwogCi0gICAgWyB3ZWJWaWV3LmdldCgp
LmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07
CisgICAgW3dlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9zZW5k
TmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6c2Vy
dmVyLnJlcXVlc3QoKV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3Rv
cmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS0hUVFBDb29raWVTdG9yZS5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQkod29ya2luZyBj
b3B5KQpAQCAtNDc5LDggKzQ3OSw2IEBAIC0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2Vi
VmlldyBydW4KIH0KIEBlbmQKIAotLy8gRklYTUU6IG9uIGlPUywgVUkgcHJvY2VzcyBzaG91bGQg
YmUgdXNpbmcgdGhlIHNhbWUgY29va2llIGZpbGUgYXMgdGhlIG5ldHdvcmsgcHJvY2VzcyBmb3Ig
ZGVmYXVsdCBzZXNzaW9uLgotI2lmIFBMQVRGT1JNKE1BQykKIGVudW0gY2xhc3MgU2hvdWxkRW5h
YmxlUHJvY2Vzc1ByZXdhcm1pbmcgeyBObywgWWVzIH07CiB2b2lkIHJ1bldLSFRUUENvb2tpZVN0
b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3Vs
ZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nKQogewpAQCAtNTg5LDIwICs1ODcsNjYgQEAgVEVTVChX
S0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQbwogICAgIHJ1bldLSFRUUENvb2tpZVN0
b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nOjpZZXMp
OwogfQogCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCiBAaW50ZXJmYWNlIENoZWNrU2Vzc2lv
bkNvb2tpZVVJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVnYXRlPgorLSAoTlNTdHJpbmcg
KilhbGVydENvb2tpZUhUTUw7CistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNzYWdlOwogQGVuZAog
Ci1AaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZQorQGltcGxlbWVu
dGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgeworICAgIFJldGFpblB0cjxOU1N0
cmluZz4gX21lc3NhZ2U7Cit9CisKIC0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmll
dyBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2Ug
aW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBFWFBFQ1RfU1RSRVEoIlNl
c3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIiwgbWVzc2FnZS5VVEY4U3RyaW5nKTsKKyAgICBf
bWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgZmluaXNoZWQgPSB0cnVlOwogICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CiB9CisKKy0gKE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2UKK3sKKyAgICB3aGls
ZSAoIV9tZXNzYWdlKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgp
OworICAgIHJldHVybiBfbWVzc2FnZS5hdXRvcmVsZWFzZSgpOworfQorCistIChOU1N0cmluZyAq
KWFsZXJ0Q29va2llSFRNTAoreworICAgIHJldHVybiBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBk
b2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxl
bmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2llcy5z
b3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsKK30KKwogQGVuZAog
CitURVNUKFdlYktpdCwgV0tIVFRQQ29va2llU3RvcmVNdWx0aXBsZVZpZXdzKQoreworICAgIFRl
c3RXS1dlYlZpZXcgKndlYlZpZXcxID0gW1tUZXN0V0tXZWJWaWV3IG5ld10gYXV0b3JlbGVhc2Vd
OworICAgIFt3ZWJWaWV3MSBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCJzdGFydCBuZXR3
b3JrIHByb2Nlc3MiXTsKKworICAgIE5TSFRUUENvb2tpZSAqc2Vzc2lvbkNvb2tpZSA9IFtOU0hU
VFBDb29raWUgY29va2llV2l0aFByb3BlcnRpZXM6QHsKKyAgICAgICAgTlNIVFRQQ29va2llUGF0
aDogQCIvIiwKKyAgICAgICAgTlNIVFRQQ29va2llTmFtZTogQCJTZXNzaW9uQ29va2llTmFtZSIs
CisgICAgICAgIE5TSFRUUENvb2tpZVZhbHVlOiBAIkNvb2tpZVZhbHVlIiwKKyAgICAgICAgTlNI
VFRQQ29va2llRG9tYWluOiBAIjEyNy4wLjAuMSIsCisgICAgfV07CisKKyAgICBfX2Jsb2NrIGJv
b2wgc2V0Q29va2llRG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3MS5jb25maWd1cmF0aW9uLndl
YnNpdGVEYXRhU3RvcmUuaHR0cENvb2tpZVN0b3JlIHNldENvb2tpZTpzZXNzaW9uQ29va2llIGNv
bXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIHNldENvb2tpZURvbmUgPSB0cnVlOworICAgIH1d
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmc2V0Q29va2llRG9uZSk7CisKKyAgICBh
dXRvIGRlbGVnYXRlID0gYWRvcHROUyhbQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBuZXdd
KTsKKyAgICBbd2ViVmlldzEgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBb
d2ViVmlldzEgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVS
TDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNU
X1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1D
b29raWVWYWx1ZSIpOworCisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzIgPSBbW1Rlc3RXS1dl
YlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcyIHNldFVJRGVsZWdhdGU6ZGVs
ZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3MiBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxl
cnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4w
LjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwg
IlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7Cit9CisKIFRFU1QoV0tIVFRQQ29va2ll
U3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Npb24pCiB7CiAgICAgUmV0YWlu
UHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4gZXBoZW1lcmFsU3RvcmVXaXRoQ29va2llcyA9IFtXS1dl
YnNpdGVEYXRhU3RvcmUgbm9uUGVyc2lzdGVudERhdGFTdG9yZV07CkBAIC02MjcsOSArNjcxLDgg
QEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQbwogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOwogICAgIGZpbmlzaGVkID0gZmFsc2U7CiAgICAg
Ci0gICAgTlNTdHJpbmcgKmFsZXJ0Q29va2llSFRNTCA9IEAiPHNjcmlwdD52YXIgY29va2llcyA9
IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMu
bGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVz
LnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOwotICAgIFt3ZWJW
aWV3IGxvYWRIVE1MU3RyaW5nOmFsZXJ0Q29va2llSFRNTCBiYXNlVVJMOltOU1VSTCBVUkxXaXRo
U3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmZpbmlzaGVkKTsKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxl
cnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4w
LjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwg
IlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CiB9CiAKIHN0YXRpYyBib29sIGFyZUNv
b2tpZXNFcXVhbChOU0hUVFBDb29raWUgKmZpcnN0LCBOU0hUVFBDb29raWUgKnNlY29uZCkKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5k
bGVyLWxlYWtzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tCShyZXZpc2lvbiAyNjc1MzYpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxl
ci1sZWFrcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCA8V2Vi
S2l0L1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdD
b25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3
dGYvVmVjdG9yLmg+CkBAIC0xNTIsNyArMTUzLDcgQEAgVEVTVChVUkxTY2hlbWVIYW5kbGVyLCBM
ZWFrczMpCiAKICAgICBydW5VbnRpbFRhc2tzSW5GbGlnaHQoMik7CiAKLSAgICBbd2ViVmlldzEu
Z2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OworICAgIFt3ZWJWaWV3MS5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJ1blVudGlsVGFza3NJbkZsaWdodCgwKTsK
IH0KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURh
dGFTdG9yZUN1c3RvbVBhdGhzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCShyZXZpc2lv
biAyNjc1MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNp
dGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDcgKzI0NCw3
IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXQKICAgICAvLyBOb3cs
IHdpdGggYnJhbmQgbmV3IFdLV2Vic2l0ZURhdGFTdG9yZXMgcG9pbnRpbmcgYXQgdGhlIHNhbWUg
Y3VzdG9tIGNvb2tpZSBzdG9yYWdlIGxvY2F0aW9uLAogICAgIC8vIGluIG5ld2x5IGZpcmVkIHVw
IE5ldHdvcmtQcm9jZXNzZXMsIHZlcmlmeSB0aGF0IHRoZSBmZXRjaCBhbmQgZGVsZXRlIEFQSXMg
d29yayBhcyBleHBlY3RlZC4KIAotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOworICAgIFtkYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBh
dXRvIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxs
b2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24u
Z2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21EYXRhU3RvcmUgZmV0Y2hEYXRhUmVjb3Jkc09mVHlw
ZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldLV2Vic2l0ZURhdGFUeXBlQ29va2llcywgbmlsXSBj
b21wbGV0aW9uSGFuZGxlcjpeKE5TQXJyYXk8V0tXZWJzaXRlRGF0YVJlY29yZCAqPiAqIHJlY29y
ZHMpIHsKQEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0aWMgdm9pZCBydW5XZWJzaXRlRGF0YVN0b3Jl
Q3VzdG9tUGF0CiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogCi0gICAgW3Byb2Nl
c3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2RhdGFTdG9yZSBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFkb3B0TlMoW1tX
S1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0ZURh
dGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21EYXRhU3RvcmUg
cmVtb3ZlRGF0YU9mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldLV2Vic2l0ZURhdGFUeXBl
Q29va2llcywgbmlsXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNvbXBsZXRp
b25IYW5kbGVyOl4gewpAQCAtMzg1LDExICszODUsMTAgQEAgVEVTVChXZWJLaXQsIEN1c3RvbURh
dGFTdG9yZURlc3Ryb3lXaGlsZQogCiAgICAgICAgIC8vIFRlcm1pbmF0ZSB0aGUgbmV0d29yayBw
cm9jZXNzIHdoaWxlIGEgcXVlcnkgaXMgcGVuZGluZy4KICAgICAgICAgYXV0byogYWxsUHJvY2Vz
c1Bvb2xzID0gW1dLUHJvY2Vzc1Bvb2wgX2FsbFByb2Nlc3NQb29sc0ZvclRlc3RpbmddOwotICAg
ICAgICBBU1NFUlRfRVEoMVUsIFthbGxQcm9jZXNzUG9vbHMgY291bnRdKTsKLSAgICAgICAgYXV0
byogcHJvY2Vzc1Bvb2wgPSBhbGxQcm9jZXNzUG9vbHNbMF07Ci0gICAgICAgIHdoaWxlICghW3By
b2Nlc3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKQorICAgICAgICBBU1NFUlRfRVEo
MFUsIFthbGxQcm9jZXNzUG9vbHMgY291bnRdKTsKKyAgICAgICAgd2hpbGUgKCFbZGF0YVN0b3Jl
IF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKQogICAgICAgICAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6c2xlZXAoMC4wMSk7Ci0gICAgICAgIGtpbGwoW3Byb2Nlc3NQb29sIF9uZXR3b3JrUHJv
Y2Vzc0lkZW50aWZpZXJdLCBTSUdLSUxMKTsKKyAgICAgICAga2lsbChbZGF0YVN0b3JlIF9uZXR3
b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCBTSUdLSUxMKTsKICAgICAgICAgYWxsUHJvY2Vzc1Bvb2xz
ID0gbmlsOwogICAgICAgICBkYXRhU3RvcmUgPSBuaWw7CiAgICAgfQpAQCAtNDY1LDcgKzQ2NCw5
IEBAIFRFU1QoV2ViS2l0LCBBbHRlcm5hdGl2ZVNlcnZpY2VzRGVmYXVsdEQKICAgICAKICAgICBb
W05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzZXRPYmplY3Q6W05TTnVtYmVy
IG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5OmtleV07CiAKLSAgICBUZXN0V0tXZWJWaWV3ICp3
ZWJWaWV3MiA9IFtbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAg
ICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1tXS1dlYlZpZXdDb25m
aWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGNvbmZpZ3VyYXRpb24ud2Vic2l0ZURh
dGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJh
dGlvbjpbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0
b3JlbGVhc2VdXSBhdXRvcmVsZWFzZV07CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzIgPSBb
W1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAw
LCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwogICAgIFt3
ZWJWaWV3MiBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCJzdGFydCBhdXhpbGlhcnkgcHJv
Y2Vzc2VzIiBiYXNlVVJMOm5pbF07CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIg
ZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6ZGVmYXVsdERpcmVjdG9yeS5wYXRoXSk7
CkBAIC01MzksNyArNTQwLDcgQEAgVEVTVChXZWJLaXQsIERvTG9hZFdpdGhOb25EZWZhdWx0RGF0
YVN0bwogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBb
d2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9y
ZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgcmVxdWVzdCA9IFtOU1VSTFJlcXVl
c3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpA
InNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0
QVBJLnJlc291cmNlcyJdXTsKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKQEAg
LTg1Nyw3ICs4NTgsNyBAQCBURVNUKFdlYktpdCwgTWVkaWFDYWNoZSkKICAgICBFWFBFQ1RfRkFM
U0UoZXJyb3IpOwogCiAgICAgZG9uZSA9IHRydWU7Ci0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRp
b25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW1t3ZWJWaWV3
IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKIAogICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRQYXRoOnBhdGggZXJyb3I6JmVycm9y
XTsKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW0J
KHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2Jq
Qy9DdXN0b21Qcm90b2NvbHNUZXN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBA
CiAjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKICNpbXBvcnQgPFdlYktpdC9XS0NvbnRleHRQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzR3JvdXBQcml2YXRlLmg+CisjaW1wb3J0
IDxXZWJLaXQvV0tWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBzdGF0aWMgYm9vbCB0ZXN0
RmluaXNoZWQ7CkBAIC03Miw2ICs3NCw4IEBAIHN0YXRpYyBXS1Byb2Nlc3NHcm91cCAqcHJvY2Vz
c0dyb3VwKCkKICAgICByZXR1cm4gcHJvY2Vzc0dyb3VwOwogfQogCitzdGF0aWMgUmV0YWluUHRy
PFdLVmlldz4gd2tWaWV3OworCiBAaW50ZXJmYWNlIENsb3NlV2hpbGVTdGFydGluZ1Byb3RvY29s
IDogVGVzdFByb3RvY29sCiBAZW5kCiAKQEAgLTg5LDcgKzkzLDcgQEAgLSAodm9pZClzdGFydExv
YWRpbmcKICAgICAgICAgfTsKICAgICAgICAgV0tDb250ZXh0U2V0Q2xpZW50KFtwcm9jZXNzR3Jv
dXAoKSBfY29udGV4dFJlZl0sICZjbGllbnQuYmFzZSk7CiAKLSAgICAgICAga2lsbChXS0NvbnRl
eHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoW3Byb2Nlc3NHcm91cCgpIF9jb250ZXh0UmVm
XSksIFNJR0tJTEwpOworICAgICAgICBraWxsKFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQ
cm9jZXNzSWRlbnRpZmllcihXS1BhZ2VHZXRXZWJzaXRlRGF0YVN0b3JlKFt3a1ZpZXcgcGFnZVJl
Zl0pKSwgU0lHS0lMTCk7CiAgICAgICAgIFtzZWxmLmNsaWVudCBVUkxQcm90b2NvbDpzZWxmIGRp
ZEZhaWxXaXRoRXJyb3I6W05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOk5TQ29jb2FFcnJvckRvbWFp
biBjb2RlOjAgdXNlckluZm86bmlsXV07CiAgICAgfSk7CiB9CkBAIC0xNDIsNyArMTQ2LDcgQEAg
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogc3RhdGljIHZvaWQgcnVuVGVzdCgpCiB7CiAgICAg
UmV0YWluUHRyPFdLQnJvd3NpbmdDb250ZXh0R3JvdXA+IGJyb3dzaW5nQ29udGV4dEdyb3VwID0g
YWRvcHROUyhbW1dLQnJvd3NpbmdDb250ZXh0R3JvdXAgYWxsb2NdIGluaXRXaXRoSWRlbnRpZmll
cjpAIlRlc3RJZGVudGlmaWVyIl0pOwotICAgIFJldGFpblB0cjxXS1ZpZXc+IHdrVmlldyA9IGFk
b3B0TlMoW1tXS1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAs
IDYwMCkgcHJvY2Vzc0dyb3VwOnByb2Nlc3NHcm91cCgpIGJyb3dzaW5nQ29udGV4dEdyb3VwOmJy
b3dzaW5nQ29udGV4dEdyb3VwLmdldCgpXSk7CisgICAgd2tWaWV3ID0gYWRvcHROUyhbW1dLVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBwcm9jZXNz
R3JvdXA6cHJvY2Vzc0dyb3VwKCkgYnJvd3NpbmdDb250ZXh0R3JvdXA6YnJvd3NpbmdDb250ZXh0
R3JvdXAuZ2V0KCldKTsKICAgICBSZXRhaW5QdHI8Q3VzdG9tUHJvdG9jb2xzTG9hZERlbGVnYXRl
PiBsb2FkRGVsZWdhdGUgPSBhZG9wdE5TKFtbQ3VzdG9tUHJvdG9jb2xzTG9hZERlbGVnYXRlIGFs
bG9jXSBpbml0XSk7CiAgICAgW3drVmlldyBicm93c2luZ0NvbnRleHRDb250cm9sbGVyXS5sb2Fk
RGVsZWdhdGUgPSBsb2FkRGVsZWdhdGUuZ2V0KCk7CiAgICAgW1t3a1ZpZXcgYnJvd3NpbmdDb250
ZXh0Q29udHJvbGxlcl0gbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpb
TlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAOi8vcmVk
aXJlY3Q/dGVzdCIsIFtUZXN0UHJvdG9jb2wgc2NoZW1lXV1dXV07CkluZGV4OiBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNjIsOCArMTA2Miw2IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNp
c3QKIAogICAgIHJlc2V0UXVvdGEoKTsKIAotICAgIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENl
cnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcocGxhdGZvcm1Db250ZXh0KCksIHRydWUp
OwotCiAgICAgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSk7CiAKICAgICBXS0NvbnRleHRTZXRV
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5jb250ZXh0KCksIGZhbHNlKTsKQEAgLTEyMzgsNyArMTIzNiw3IEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OmZpbmRBbmREdW1wV2ViS2l0UHIKICAgICBkdW1wUmVzcG9uc2UobWFrZVN0cmluZyhU
ZXN0Q29udHJvbGxlcjo6d2ViUHJvY2Vzc05hbWUoKSwgIjogIiwKICAgICAgICAgV0tQYWdlR2V0
UHJvY2Vzc0lkZW50aWZpZXIoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3
KCktPnBhZ2UoKSksICdcbicsCiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpuZXR3b3JrUHJvY2Vz
c05hbWUoKSwgIjogIiwKLSAgICAgICAgV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyKG1fY29udGV4dC5nZXQoKSksICdcbicpKTsKKyAgICAgICAgV0tXZWJzaXRlRGF0YVN0b3Jl
R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKHdlYnNpdGVEYXRhU3RvcmUoKSksICdcbicpKTsK
ICNlbHNlCiAgICAgZHVtcFJlc3BvbnNlKCJcbiJfcyk7CiAjZW5kaWYKQEAgLTIyOTgsNyArMjI5
Niw3IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdENvbnRyb2xsZXI6OmcKIAogdm9pZCBU
ZXN0Q29udHJvbGxlcjo6bmV0d29ya1Byb2Nlc3NEaWRDcmFzaCgpCiB7Ci0gICAgcGlkX3QgcGlk
ID0gV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKG1fY29udGV4dC5nZXQoKSk7
CisgICAgcGlkX3QgcGlkID0gV0tXZWJzaXRlRGF0YVN0b3JlR2V0TmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKHdlYnNpdGVEYXRhU3RvcmUoKSk7CiAgICAgZnByaW50ZihzdGRlcnIsICIjQ1JBU0hF
RCAtICVzIChwaWQgJWxkKVxuIiwgbmV0d29ya1Byb2Nlc3NOYW1lKCksIHN0YXRpY19jYXN0PGxv
bmc+KHBpZCkpOwogICAgIGV4aXQoMSk7CiB9CkBAIC0zMTM3LDcgKzMxMzUsNyBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpzZXRJZ25vcmVzVmlld3BvcnRTCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6
OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKLSAgICBXS0NvbnRleHRUZXJtaW5hdGVOZXR3
b3JrUHJvY2VzcyhwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlVGVy
bWluYXRlTmV0d29ya1Byb2Nlc3Mod2Vic2l0ZURhdGFTdG9yZSgpKTsKIH0KIAogdm9pZCBUZXN0
Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdvcmtlcnMoKQpAQCAtMzE2OCw5ICszMTY2LDgg
QEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcgogICAgIHJldHVybiBu
ZXcgUGxhdGZvcm1XZWJWaWV3KGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpOwogfQogCi1XS0NvbnRl
eHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0NvbnRleHRSZWYg
Y29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBjb250ZXh0Q29uZmlndXJhdGlvbikK
K1dLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KFdLQ29u
dGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmKQogewotICAgIFdLQ29u
dGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKGNvbnRleHQsIGRlZmF1bHRXZWJzaXRlRGF0
YVN0b3JlKCkpOwogICAgIHJldHVybiBjb250ZXh0OwogfQogCg==
</data>
<flag name="commit-queue"
          id="425366"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409604</attachid>
            <date>2020-09-24 11:17:44 -0700</date>
            <delta_ts>2020-09-24 11:38:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200924111743.patch</filename>
            <type>text/plain</type>
            <size>353155</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxOCBAQAorMjAyMC0wOS0yNCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgTmV0d29y
a1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgZnJvbSBXZWJQcm9jZXNzUG9vbCB0byBXZWJzaXRlRGF0
YVN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTYwNDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIG1vdmVzIHRoZSB0aGluZ3Mgb24gV2ViUHJvY2Vzc1Bvb2wgYXNzb2NpYXRlZCB3
aXRoIE5ldHdvcmtQcm9jZXNzUHJveHkgb3duZXJzaGlwIGFuZCBtb3ZlcyB0aGVtCisgICAgICAg
IHRvIFdlYnNpdGVEYXRhU3RvcmUuICBJdCdzIHByZXR0eSBtZWNoYW5pY2FsLCBidXQgaXQgcmVh
Y2hlcyBpdHMgZmluZ2VycyBpbnRvIGEgbG90IG9mIHRoaW5ncy4gIFNvbWUgY29tbWVudHMKKyAg
ICAgICAgb24gaW50ZXJlc3RpbmcgcGFydHMgYXJlIGJlbG93LgorCisgICAgICAgIFdoeSBhbSBJ
IGRvaW5nIHRoaXM/ICBJJ20gZ2xhZCB5b3UgYXNrZWQuCisKKyAgICAgICAgV0tXZWJWaWV3IGhh
ZCBhIGZ1bmRhbWVudGFsIGNvb2tpZSBwcm9ibGVtIGJlZm9yZSB0aGlzIGNoYW5nZS4gIEl0IGhh
ZCBhIFdLV2Vic2l0ZURhdGFTdG9yZSB0aGF0IGNvdWxkIHBvaW50IHRvIGEgY29va2llIHN0b3Jl
IG9uIGRpc2sKKyAgICAgICAgdGhhdCBjb3VsZCBiZSB1c2VkIGluIG11bHRpcGxlIG5ldHdvcmsg
cHJvY2Vzc2VzIGF0IHRoZSBzYW1lIHRpbWUuICBUaGlzIGxlZCB0byBwcm9ibGVtcyB3aXRoIGNv
b2tpZXMgYmVpbmcgcmVjZWl2ZWQgb3ZlciB0aGUgbmV0d29yaworICAgICAgICBpbiB0aG9zZSBk
aWZmZXJlbnQgcHJvY2Vzc2VzIGJlaW5nIHVuYWJsZSB0byBiZSBzaGFyZWQgdW50aWwgdGhleSB3
ZXJlIHdyaXR0ZW4gdG8gZGlzaywgc29tZXRoaW5nIHRoYXQgZG9lcyBub3QgaGFwcGVuIGltbWVk
aWF0ZWx5LCBlc3BlY2lhbGx5CisgICAgICAgIG9uIGlPUy4gIFRoaXMgcHJvYmxlbSBpcyBldmVu
IHdvcnNlIHdpdGggc2Vzc2lvbiBjb29raWVzLCB3aGljaCBzaG91bGQgYmUga2VwdCBpbiBtZW1v
cnkgYW5kIG5ldmVyIGJlIHdyaXR0ZW4gdG8gZGlzay4gIFRob3NlIHByb2Nlc3NlcworICAgICAg
ICBkaWQgbm90IHVzZSBzaGFyZWQgbWVtb3J5IHRvIHNoYXJlIHRoZSBjb29raWVzLiAgVGhleSBq
dXN0IGRpZG4ndCBzaGFyZSB0aGVtLCB3aGljaCBsZWQgdG8gY29va2llIGluY29ycmVjdG5lc3Mu
ICBUaGlzIHdhcyB1bmZvcnR1bmF0ZWx5CisgICAgICAgIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRp
b24gaWYgeW91IGNhbGwgW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRdIG1vcmUgdGhhbiBvbmNlLCB3
aGljaCBtYW55IGRldmVsb3BlcnMgZG8uICBUaGVyZSB3YXMgYWxzbyBvY2Nhc2lvbmFsIGNvb2tp
ZQorICAgICAgICBjb3JydXB0aW9uIGFuZCBsb3NzIGZyb20gbXVsdGlwbGUgcHJvY2Vzc2VzIHdy
aXRpbmcgY29va2llcyB0byB0aGUgc2FtZSBmaWxlLiAgQWxsIHRoZXNlIHByb2JsZW1zIGNhbiBi
ZSB3b3JrZWQgYXJvdW5kIGJ5IGRvaW5nIHdoYXQgU2FmYXJpIGRvZXM6CisgICAgICAgIG1hbnVh
bGx5IHNldHRpbmcgdGhlIFdLUHJvY2Vzc1Bvb2wgb2YgYWxsIFdLV2ViVmlld0NvbmZpZ3VyYXRp
b25zIHRvIHRoZSBzYW1lIHByb2Nlc3MgcG9vbCB0byBvbmx5IHVzZSBvbmUgbmV0d29yayBwcm9j
ZXNzLiAgVGhpcyBpcyBub3QgaW50dWl0aXZlCisgICAgICAgIG9yIHdlbGwgZG9jdW1lbnRlZCwg
YW5kIGV2ZW4gdGhvdWdoIEkgaGF2ZSBzcGVudCB0aGUgbWFqb3JpdHkgb2YgV1dEQyBsYWJzIGZv
ciB0aGUgbGFzdCAzIHllYXJzIHRlbGxpbmcgZGV2ZWxvcGVycyB0byBkbyBpdCwgbW9zdCBkZXZl
bG9wZXJzIGRvIG5vdC4KKyAgICAgICAgVGhlIGRlZmF1bHQgYmVoYXZpb3Igc2hvdWxkIG5vdCBs
ZWFkIHRvIGNvb2tpZSBpbmNvcnJlY3RuZXNzLCBjb3JydXB0aW9uLCBvciBsb3NzLiAgVGhpcyBh
Y2NvbXBsaXNoZXMgdGhhdC4KKworICAgICAgICBBIGJpZ2dlciBwcm9ibGVtIHRoYXQgY2FuJ3Qg
cmVhbGx5IGJlIHdvcmtlZCBhcm91bmQgd2VsbCBpcyB3aGF0IHdlIHdlcmUgZG9pbmcgaW4gb3Vy
IFdLSFRUUENvb2tpZVN0b3JlIEFQSS4gIE1hbnkgZGV2ZWxvcGVycyBjYWxsIHNldENvb2tpZTpj
b21wbGV0aW9uSGFuZGxlcjoKKyAgICAgICAgdG8gImxvZyBpbiIgdGhlIHVzZXIgYnkgc2V0dGlu
ZyBhIGNvb2tpZSwgdGhlbiBpbiB0aGUgY29tcGxldGlvbiBoYW5kbGVyLCB0aGV5IG9wZW4gYSBX
S1dlYlZpZXcgdG8gdGhlaXIgcGFnZSBhbmQgZXhwZWN0IHRoZSBjb29raWUgdG8gYmUgc2VudC4g
IEJlZm9yZSB0aGlzCisgICAgICAgIGNoYW5nZSwgd2Ugd291bGQgbm90IGtub3cgd2hpY2ggcHJv
Y2VzcyBwb29sIHRvIHNldCB0aGUgY29va2llIGluIHNvIHdlIHdvdWxkIGd1ZXNzLiAgSWYgdGhl
cmUgd2VyZSBubyBwcm9jZXNzIHBvb2xzLCB3ZSB3b3VsZCBzdGFydCB3cml0aW5nIHRvIGRpc2sg
YW5kIGhvcGUKKyAgICAgICAgaXQgd3JpdGVzIGZhc3QgZW5vdWdoLiAgV2UgY2FuJ3Qgd2FpdCBm
b3IgaXQgdG8gY29tcGxldGUgYmVjYXVzZSBpdCBjYXVzZXMgaGFuZ3MgbGlrZSByZGFyOi8vcHJv
YmxlbS82Njk2MTA2Ni4gIFRoaXMgc29sdXRpb24gYWxsb3dzIHRvIHN0YXJ0IHRoZSBuZXR3b3Jr
CisgICAgICAgIHByb2Nlc3Mgb2YgdGhhdCBXZWJzaXRlRGF0YVN0b3JlIGFuZCBzZXQgdGhlIGNv
b2tpZSBpbiB0aGF0IHByb2Nlc3MuICBXZSBub3cga25vdyB0aGF0IGlzIHRoZSBvbmx5IHByb2Nl
c3MgdGhpcyBXZWJzaXRlRGF0YVN0b3JlIHdpbGwgZXZlciB1c2UuICBOb3csIHVzZXJzCisgICAg
ICAgIHdpbGwgYmUgYWJsZSB0byBhY3R1YWxseSBiZSBsb2dnZWQgaW4gYWxsIHRoZSB0aW1lIGlu
IHN1Y2ggYXBwcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2ll
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBD
b29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29r
aWVzL1dlYkNvb2tpZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVz
L1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9X
ZWJDb29raWVNYW5hZ2VyU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURh
dGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3Nl
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1t
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6OnNhdmVDb29raWVzKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFT
dG9yZVNlc3Npb24pOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nl
c3NTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBQbGF0
Zm9ybS9JUEMvQXR0YWNobWVudC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAg
ICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQ
STo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0
b3JlOjpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRD
b29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAg
ICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRp
b25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVy
Rm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFT
dG9yZSk6CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtl
clRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1By
b2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZUdldFdlYnNpdGVE
YXRhU3RvcmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdLV2Vi
c2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBf
c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczpdKToKKyAgICAgICAgKC1bV0tQcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1By
ZXBhcmVUb1N1c3BlbmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3Nl
bmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tQcm9jZXNzUG9vbCBfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tQcm9jZXNzUG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6
XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29s
UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0
b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9y
ZSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpdKToKKyAgICAgICAgKC1bV0tX
ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHld
KToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRS
ZXN1bWVdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBwSXNC
YWNrZ3JvdW5kOl0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9j
ZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoK1tXS1dlYnNpdGVEYXRhU3RvcmUgX21ha2VOZXh0
TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZ10pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKF9XZWJLaXRD
b29raWVNYW5hZ2VyUHJpdmF0ZTo6Y29va2llTWFuYWdlciBjb25zdCk6CisgICAgICAgIChfV2Vi
S2l0Q29va2llTWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUpOgor
ICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfY29v
a2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRfY29v
a2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdl
cl9hZGRfY29va2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2ll
cyk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAo
d2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4
dF9wcmVmZXRjaF9kbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246
OmFkZFNpbmdsZUNvb2tpZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9u
OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vz
c1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9v
bENvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vz
c1N1cHByZXNzaW9uU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxh
dGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRm
b3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnhwY0VuZHBvaW50TWVzc2FnZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29y
a1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6cHVi
bGlzaFByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94
eTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGVj
aWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyk6CisgICAgICAgICogVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5k
KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktp
dDo6ZGVmYXVsdFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkZWZhdWx0TmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5Ojp0ZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWRUZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
ZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6YW55
UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkpOgorICAgICAgICAoV2Vi
S2l0OjphbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRp
b25zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxv
YWRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQ
cm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRp
ZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGlkQ2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0
Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNz
UG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9j
ZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENF
dmVudCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFu
YWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2Vi
Q29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5j
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9w
T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xE
ZXN0cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJF
bnRpdGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVj
b25uZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRG
b3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJl
ZEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3Rv
Y29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vz
c1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29s
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFT
dG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdD
b250ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xv
YmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3Nlcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9u
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdl
SUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3Vu
ZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdv
cmtQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgVGhlcmUgc2VlbXMgdG8gYmUgYSBsb3Qgb2Yg
Y29kZSByZW1vdmFsIGhlcmUsIGJ1dCBtb3N0IG9mIGl0IHdhcyBkdXBsaWNhdGUgY29kZSB3aXRo
CisgICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMgd2hpY2ggaXMgdXNlZCBpbnN0
ZWFkLiAgVGhhdCB3aGljaCB3YXMgbm90IGR1cGxpY2F0ZSB3YXMKKyAgICAgICAgbW92ZWQgdG8g
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcy4g
IFRoaXMgd2FzIHRoZSBoYXJkZXN0IHBhcnQgb2YgdGhpcyBwYXRjaC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1By
b2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHlGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpmbHVzaENvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1By
b2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpzZXRXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NY
UENFbmRwb2ludFRvV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXAp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZv
clNlc3Npb25JRCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nl
c3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFB
bmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGlt
ZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNl
dFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNl
TG9hZFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1By
ZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNH
cmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJl
dmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQ
cmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRh
UmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGlu
Z1RvKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1l
dGVyc1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnN1Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNj
aGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBk
YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0
aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRl
cmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25z
aGlwT25seUluRGF0YWJhc2VPbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0VXNlSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0Rl
Y29yYXRpb25Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1No
b3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQ
YXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJp
Y3RDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVz
dGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3Vy
Y2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFn
ZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnByb2Nlc3NQb29scyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9j
ZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VwaGVtZXJhbCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmZsdXNoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRl
RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vz
c2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBw
Qm91bmRTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2Fy
ZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVu
dGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6Om1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lv
bklEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vz
c1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphZGRQ
ZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5ldHdvcmtQcm94eVNl
dHRpbmdzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0
YVN0b3JlU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRm
b3JtU2V0TmV0d29ya1BhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKToK
KyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3Jz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRp
bmdzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uSW5mby5oOgorCiAyMDIwLTA5LTI0ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeCB0aGUgYnVpbGQgZm9yIHJlY2VudCBTREtz
LgpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNiArMTczLDcgQEAgTmV0
d29ya1Byb2Nlc3M6Ok5ldHdvcmtQcm9jZXNzKEF1eGlsaWFyeQogI2VuZGlmCiAKICNpZiBVU0Uo
U09VUCkKKyAgICAvLyBGSVhNRTogRG8gbm90IHVzZSB0aGUgZGVmYXVsdCBzZXNzaW9uIElELgog
ICAgIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFjY2Vz
c29yKFt0aGlzXSgpIC0+IFNvdXBTZXNzaW9uKiB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxOZXR3b3JrU2Vzc2lvblNvdXAmPigqbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSkpLnNvdXBTZXNzaW9uKCk7CiAgICAgfSk7CkBAIC0zNDcsMzAgKzM0
OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHIKIAogICAgIHNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRy
aWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwot
ICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBX
VEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVu
dGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdl
cihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3Jp
Z2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBl
clRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0K
LSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNz
aW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0j
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGJvb2wgc2VydmljZVdvcmtlclByb2Nlc3NU
ZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCA9IHRydWU7Ci0gICAgYWRkU2VydmljZVdvcmtlclNlc3Np
b24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc2VydmljZVdvcmtlclByb2Nl
c3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBtX3N0b3JhZ2VN
YW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAg
YXV0byogZGVmYXVsdFNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKTsKLSAgICBhdXRvKiBkZWZhdWx0U3RvcmFnZVNlc3Npb24gPSBkZWZh
dWx0U2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgZm9yIChjb25zdCBhdXRv
JiBjb29raWUgOiBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRpbmdD
b29raWVzKQotICAgICAgICBkZWZhdWx0U3RvcmFnZVNlc3Npb24tPnNldENvb2tpZShjb29raWUp
OwotCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkK
ICAgICAgICAgc3VwcGxlbWVudC0+aW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKIApAQCAtNTA1LDgg
KzQ4Miw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QKIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Np
b25JRCwgYm9vbCBzaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYg
aWRlbnRpZmllckJhc2UpCiAjZW5kaWYKIHsKLSAgICBBU1NFUlQoc2Vzc2lvbklEICE9IFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotCiAgICAgYXV0byBhZGRSZXN1bHQgPSBt
X25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMuYWRkKHNlc3Npb25JRCwgbnVsbHB0cik7CiAgICAgaWYg
KCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTIxLDcgKzQ5Niw3
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QKICAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllciA9IG1ha2VTdHJpbmcoaWRlbnRpZmllckJhc2Us
ICIuUHJpdmF0ZUJyb3dzaW5nLiIsIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSkuY3JlYXRl
Q0ZTdHJpbmcoKTsKICAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHN0
b3JhZ2VTZXNzaW9uID0gYWRvcHRDRihjcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oY2ZJZGVu
dGlmaWVyLmdldCgpKSk7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKHNlc3Npb25JRCAhPSBQQUw6
OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAgICBzdG9yYWdlU2Vzc2lvbiA9
IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlQ0ZTdG9yYWdlU2Vzc2lvbkZv
cklkZW50aWZpZXIoY2ZJZGVudGlmaWVyLmdldCgpKTsKIAogICAgIGlmIChOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OnByb2Nlc3NNYXlVc2VDb29raWVBUEkoKSkgewpAQCAtNTQ0LDIxICs1MTksMTEg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y29va2llQWNjZXB0UG9saWN5QwogCiBXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNzaW9uSUQg
PT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0dXJuICZk
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFnZVNlc3Np
b25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIGlm
ICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1bHROZXR3
b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigp
OwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQotCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0
aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9yKQogewot
ICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0byYgc3Rv
cmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAgICAgICAg
IGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMTcwLDcgKzE3MCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZm9yRWFjaE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYpPiYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5ld1Rlc3RpbmdTZXNz
aW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJik7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9p
ZCBlbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgYm9vbCBzaG91bGRVc2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYpOwpAQCAtMzc1LDcgKzM3NCw2IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSBjb25zdDsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNz
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKIApAQCAtNTQ0LDcgKzU0
Miw2IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiBtX25ldHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPj4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zOwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbV9kZWZhdWx0TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOwogCiAgICAgUmVmUHRyPFN0b3JhZ2VNYW5hZ2VyU2V0PiBtX3N0b3JhZ2VNYW5h
Z2VyU2V0OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNp
b24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDYgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZQogICAgIGVuY29kZXIgPDwg
dWlQcm9jZXNzU0RLVmVyc2lvbjsKICAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBuZXR3b3JrQVRT
Q29udGV4dC5nZXQoKSk7CiAjZW5kaWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzOwogI2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIgPDwgY29va2llQWNjZXB0UG9s
aWN5OwogICAgIGVuY29kZXIgPDwgbGFuZ3VhZ2VzOwpAQCAtNjYsOSArNjUsNiBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplCiAgICAgZW5jb2RlciA8PCB1cmxTY2hl
bWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgZW5jb2RlciA8
PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxkRGlzYWJsZVNlcnZpY2VX
b3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAgIGVuY29kZXIgPDwgc2hv
dWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFibGVBZENsaWNrQXR0cmli
dXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTQsMTIgKzExMCw2IEBAIGJvb2wgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnM6OmQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAK
LSAgICBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnM7Ci0gICAgZGVjb2RlciA+PiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsK
LSAgICBpZiAoIWRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOwotCiAjaWYgVVNFKFNPVVApCiAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQuY29va2llQWNjZXB0UG9saWN5KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTM2LDIwICsxMjYsNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzOjpkCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsU2NoZW1lc1JlZ2lz
dGVyZWRBc05vQWNjZXNzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0jaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBzZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIXNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXN1bHQuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
c2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiQ2FjaGVN
b2RlbC5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llLmg+CiAjaW5j
bHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTcwLDgg
KzY5LDYgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIAogICAgIFJl
dGFpblB0cjxDRkRhdGFSZWY+IG5ldHdvcmtBVFNDb250ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycyBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICAK
ICNpZiBVU0UoU09VUCkKICAgICBXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IGNvb2tp
ZUFjY2VwdFBvbGljeSB7IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k6OkFsd2F5c0Fj
Y2VwdCB9OwogICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlczsKQEAgLTgyLDEyICs3OSw3IEBA
IHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyAKICAgICBWZWN0b3I8U3Ry
aW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQotICAgIFN0cmluZyBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5OwotICAgIFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlOwotICAgIGJvb2wgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzVGVybWluYXRpb25EZWxheSB7IGZhbHNlIH07Ci0jZW5kaWYKLSAgICBib29sIHNob3VsZEVu
YWJsZUlUUERhdGFiYXNlIHsgZmFsc2UgfTsKKyAgICBib29sIHNob3VsZEVuYWJsZUlUUERhdGFi
YXNlIHsgdHJ1ZSB9OwogICAgIGJvb2wgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2Rl
IHsgZmFsc2UgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29v
a2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAJKHJldmlzaW9uIDI2NzUz
NikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5h
Z2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIldlYkNv
cmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Db29raWVTdG9yYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVFRQQ29va2ll
QWNjZXB0UG9saWN5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24u
aD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KQEAg
LTE0MywxNSArMTQ0LDE4IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6c3RvcE9ic2VydmluZ0Nv
b2sKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhU
VFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSk7Ci0gICAgbV9wcm9jZXNzLmNvb2tpZUFjY2VwdFBvbGljeUNoYW5nZWQocG9s
aWN5KTsKLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgcGxhdGZvcm1TZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KHBvbGljeSwgW3BvbGljeSwgcHJvY2VzcyA9IG1ha2VSZWYobV9wcm9j
ZXNzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
bXV0YWJsZSB7CisgICAgICAgIHByb2Nlc3MtPmNvb2tpZUFjY2VwdFBvbGljeUNoYW5nZWQocG9s
aWN5KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9KTsKIH0KIAotdm9pZCBX
ZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2
b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1f
cHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7Cisg
ICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKHNl
c3Npb25JRCkpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5jb29r
aWVBY2NlcHRQb2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihI
VFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1h
bmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tp
ZXMvV2ViQ29va2llTWFuYWdlci5oCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAiU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
VHlwZS5oIgogI2VuZGlmCiAKK09CSkNfQ0xBU1MgTlNIVFRQQ29va2llU3RvcmFnZTsKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IENvb2tpZTsKIGVudW0gY2xhc3MgSFRUUENvb2tpZUFj
Y2VwdFBvbGljeSA6IHVpbnQ4X3Q7CkBAIC03OSw4ICs4MSw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBnZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmKTsKICAgICB2b2lkIGdldENvb2tpZXMoUEFMOjpT
ZXNzaW9uSUQsIGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mJik+JiYpOwogCi0gICAgdm9pZCBwbGF0Zm9ybVNldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSk7Ci0gICAgdm9pZCBnZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SFRU
UENvb2tpZUFjY2VwdFBvbGljeSk+JiYpOworICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3ksIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBB
TDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkhUVFBDb29raWVB
Y2NlcHRQb2xpY3kpPiYmKTsKIAogICAgIHZvaWQgc3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2Vz
KFBBTDo6U2Vzc2lvbklEKTsKICAgICB2b2lkIHN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBB
TDo6U2Vzc2lvbklEKTsKQEAgLTg4LDQgKzkwLDggQEAgcHJpdmF0ZToKICAgICBOZXR3b3JrUHJv
Y2VzcyYgbV9wcm9jZXNzOwogfTsKIAorI2lmIFBMQVRGT1JNKENPQ09BKQordm9pZCBzYXZlQ29v
a2llcyhOU0hUVFBDb29raWVTdG9yYWdlICosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFu
YWdlci5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbWVzc2FnZXMgLT4gV2ViQ29va2llTWFuYWdlciBOb3RS
ZWZDb3VudAogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3luYwogCiAgICAgdm9pZCBT
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJDb3JlOjpIVFRQQ29va2ll
QWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lkIEdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQ
b2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRUUENv
b2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAgdm9pZCBTdGFydE9ic2Vy
dmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIHZvaWQgU3Rv
cE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFuYWdl
ckN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29v
a2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysg
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFuYWdl
ckN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotdm9pZCBXZWJDb29raWVNYW5hZ2Vy
OjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIENvb2tpZUFjY2VwdFBvbGlj
eSBjdXJsUG9saWN5ID0gQ29va2llQWNjZXB0UG9saWN5OjpPbmx5RnJvbU1haW5Eb2N1bWVudERv
bWFpbjsKICAgICBzd2l0Y2ggKHBvbGljeSkgewpAQCAtNTUsNiArNTUsNyBAQCB2b2lkIFdlYkNv
b2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvCiAgICAgbV9wcm9jZXNzLmZvckVhY2hOZXR3
b3JrU3RvcmFnZVNlc3Npb24oW2N1cmxQb2xpY3ldIChjb25zdCBhdXRvJiBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24pIHsKICAgICAgICAgbmV0d29ya1N0b3JhZ2VTZXNzaW9uLnNldENvb2tpZUFjY2Vw
dFBvbGljeShjdXJsUG9saWN5KTsKICAgICB9KTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcigpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ29va2llcy9tYWMvV2ViQ29va2llTWFuYWdlck1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJN
YWMubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9tYWMvV2ViQ29va2llTWFuYWdlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9IVFRQQ29va2llQWNjZXB0UG9saWN5Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9ydCA8cGFsL3Nw
aS9jZi9DRk5ldHdvcmtTUEkuaD4KKyNpbXBvcnQgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4K
ICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpA
QCAtNTMsMTUgKzU0LDE5IEBAIHN0YXRpYyBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5
IHQKICAgICByZXR1cm4gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeUFsd2F5czsKIH0K
IAotdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6
OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5
IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFj
Y2Vzc1Jhd0Nvb2tpZXMpKTsKIAorICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIFtb
TlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2llQWNj
ZXB0UG9saWN5OnN0YXRpY19jYXN0PE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeT4ocG9saWN5KV07
CisgICAgc2F2ZUNvb2tpZXMoW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0
b3JhZ2VdLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogCiAgICAgbV9wcm9jZXNzLmZvckVh
Y2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oWyZdIChjb25zdCBhdXRvJiBuZXR3b3JrU3RvcmFnZVNl
c3Npb24pIHsKICAgICAgICAgaWYgKGF1dG8gY29va2llU3RvcmFnZSA9IG5ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5jb29raWVTdG9yYWdlKCkpCiAgICAgICAgICAgICBDRkhUVFBDb29raWVTdG9yYWdl
U2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHRvQ0ZIVFRQQ29va2ll
U3RvcmFnZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKKyAgICAgICAgaWYgKGF1dG8gKnN0b3JhZ2Ug
PSBuZXR3b3JrU3RvcmFnZVNlc3Npb24ubnNDb29raWVTdG9yYWdlKCkpCisgICAgICAgICAgICBz
YXZlQ29va2llcyhzdG9yYWdlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0pOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJD
b29raWVNYW5hZ2VyU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCShyZXZpc2lvbiAy
Njc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJD
b29raWVNYW5hZ2VyU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDExICszNywxMiBAQAog
bmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotdm9pZCBXZWJD
b29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0
SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fcHJv
Y2Vzcy5mb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtwb2xpY3ldIChhdXRvJiBzZXNzaW9u
KSB7CiAgICAgICAgIHNlc3Npb24uc2V0Q29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7CiAgICAg
fSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUg
c3RvcmFnZVR5cGUpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3Jh
Z2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAJKHJldmlz
aW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9M
b2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw3ICsyMTQsOCBA
QCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpjbGVhcigpCiAKIHZvaWQgTG9jYWxTdG9yYWdl
RGF0YWJhc2U6OmNsb3NlKCkKIHsKLSAgICBBU1NFUlQoIW1faXNDbG9zZWQpOworICAgIGlmICht
X2lzQ2xvc2VkKQorICAgICAgICByZXR1cm47CiAgICAgbV9pc0Nsb3NlZCA9IHRydWU7CiAKICAg
ICBpZiAobV9kaWRTY2hlZHVsZURhdGFiYXNlVXBkYXRlKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29h
Lm1tCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nv
Y29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbXBvcnQgIk5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgogI2ltcG9ydCAiTmV0d29ya1Nl
c3Npb25Db2NvYS5oIgogI2ltcG9ydCAiU2FuZGJveEV4dGVuc2lvbi5oIgorI2ltcG9ydCAiV2Vi
Q29va2llTWFuYWdlci5oIgogI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24u
aD4KICNpbXBvcnQgPFdlYkNvcmUvUHVibGljU3VmZml4Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jl
c291cmNlUmVxdWVzdENGTmV0Lmg+CkBAIC03OCw5ICs3OSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVy
bWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5j
b250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRl
bnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9DRk5ldHdvcmtTZXRBVFNDb250ZXh0KHBh
cmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwpAQCAtMTA1LDExICsxMDMsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAgICAgW05TVVJMQ2FjaGUg
c2V0U2hhcmVkVVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1D
cmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5p
cXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNz
Ojpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9B
UFBMSUNBVElPTl9BVURJVF9EQVRBKQpAQCAtMjIxLDcgKzIxNCw3IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmZsdXNoQ29va2llcyhjb25zdCAKICAgICBwbGF0Zm9ybUZsdXNoQ29va2llcyhzZXNz
aW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotc3RhdGljIHZvaWQgc2F2
ZUNvb2tpZXMoTlNIVFRQQ29va2llU3RvcmFnZSAqY29va2llU3RvcmFnZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBzYXZlQ29va2llcyhOU0hU
VFBDb29raWVTdG9yYWdlICpjb29raWVTdG9yYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
ICAgICBBU1NFUlQoY29va2llU3RvcmFnZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAkocmV2aXNp
b24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQ
cm9jZXNzQ3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSw2IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3Jt
Q3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVu
aXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmlj
SFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0
ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRl
eHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVt
b3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01NSwxNSArNTUsMTEgQEAgdm9pZCBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6
ZW5zdXJlV2VicwogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHko
cGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBSZXRh
aW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gdWlQcm9jZXNzQ29va2llU3RvcmFnZTsKLSAg
ICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nv
b2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSkKKyAgICBpZiAoIXNlc3Npb25JRC5pc0Vw
aGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVy
LmlzRW1wdHkoKSAmJiBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9u
SUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAgICAgICAgdWlQcm9j
ZXNzQ29va2llU3RvcmFnZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlpbmdEYXRhKHBhcmFt
ZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIpOwogCiAgICAgbmV0d29ya1By
b2Nlc3MuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgbWFrZVN0cmluZyhiYXNl
LCAnLicsIHNlc3Npb25JRC50b1VJbnQ2NCgpKSwgV1RGTW92ZSh1aVByb2Nlc3NDb29raWVTdG9y
YWdlKSk7CiAKLSAgICBhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Byb2Nlc3Muc3RvcmFnZVNlc3Np
b24oc2Vzc2lvbklEKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMu
cGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHNlc3Npb24tPnNldENvb2tpZShjb29raWUpOwotCiAg
ICAgbmV0d29ya1Byb2Nlc3Muc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpj
cmVhdGUobmV0d29ya1Byb2Nlc3MsIFdURk1vdmUocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMpKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5jcHAJKHJldmlzaW9u
IDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJv
Y2Vzc01haW5Tb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBjbGFzcyBO
ZXR3b3JrUHJvY2Vzc01haW5Tb3VwIGZpbmFsOiBwdWJsCiBwdWJsaWM6CiAgICAgdm9pZCBwbGF0
Zm9ybUZpbmFsaXplKCkgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJcyB0aGlz
IHN0aWxsIG5lZWRlZD8gV2Ugc2hvdWxkIHByb2JhYmx5IGRlc3Ryb3kgYWxsIGV4aXN0aW5nIHNl
c3Npb25zIGF0IHRoaXMgcG9pbnQgaW5zdGVhZC4KICAgICAgICAgLy8gTmVlZGVkIHRvIGRlc3Ry
b3kgdGhlIFNvdXBTZXNzaW9uIGFuZCBTb3VwQ29va2llSmFyLCBlLmcuIHRvIGF2b2lkCiAgICAg
ICAgIC8vIGxlYWtpbmcgU1FMaXRlIHRlbXBvcmFyeSBqb3VybmFsaW5nIGZpbGVzLgogICAgICAg
ICBnbG9iYWxOZXR3b3JrUHJvY2Vzcy0+ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAkocmV2aXNpb24gMjY3NTM2
KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwxMSArMTM1LDYgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogICAgICAgICB1c2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
Q2hhbmdlZChwYXJhbWV0ZXJzLmxhbmd1YWdlcyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3Jz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgYm9vbCBpZ25vcmVUTFNFcnJvcnMpCiB7CiAgICAg
aWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKQpJbmRleDogU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0F0dGFjaG1lbnQuaAkocmV2aXNpb24gMjY3NTM2KQorKysg
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC05NSw4ICs5NSw4IEBAIHByaXZhdGU6CiAgICAgaW50IG1fZmlsZURlc2NyaXB0b3IgeyAtMSB9
OwogICAgIHNpemVfdCBtX3NpemU7CiAjZWxpZiBPUyhEQVJXSU4pCi0gICAgbWFjaF9wb3J0X25h
bWVfdCBtX3BvcnQ7Ci0gICAgbWFjaF9tc2dfdHlwZV9uYW1lX3QgbV9kaXNwb3NpdGlvbjsKKyAg
ICBtYWNoX3BvcnRfbmFtZV90IG1fcG9ydCB7IDAgfTsKKyAgICBtYWNoX21zZ190eXBlX25hbWVf
dCBtX2Rpc3Bvc2l0aW9uIHsgMCB9OwogI2VsaWYgT1MoV0lORE9XUykKICAgICBIQU5ETEUgbV9o
YW5kbGUgeyBJTlZBTElEX0hBTkRMRV9WQUxVRSB9OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCShyZXZp
c2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEzICs0MCw5IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZSgKICAgICBlbmNvZGVyIDw8IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVu
dGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7
Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2llczsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5IDw8IGluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+
IFdlYgogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMuY29va2ll
U3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpjb29raWVTdG9yYWdlUGF0aEV4
dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBPcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6Q29va2llPj4g
cGVuZGluZ0Nvb2tpZXM7Ci0gICAgZGVjb2RlciA+PiBwZW5kaW5nQ29va2llczsKLSAgICBpZiAo
IXBlbmRpbmdDb29raWVzKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHBhcmFt
ZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBXVEZNb3ZlKCpwZW5kaW5nQ29va2llcyk7Ci0KICNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBPcHRpb25hbDxTdHJpbmc+IGluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeTsKICAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsK
QEAgLTEwMSwxNCArOTEsNiBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4g
V2ViCiAgICAgaWYgKCFpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBP
cHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9i
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNl
VGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFpbmRleGVkRGF0YWJh
c2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNF
X1dPUktFUikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9TaGFy
ZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTUg
KzUxLDExIEBAIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyB7CiAKICAgICBWZWN0
b3I8dWludDhfdD4gdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAg
IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29raWVzOwogICAgIE5ldHdvcmtTZXNz
aW9uQ3JlYXRpb25QYXJhbWV0ZXJzIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKIAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIFN0cmluZyBpbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHku
aAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5
UHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94eSgpOwogCiAgICAgdm9pZCBjb25uZWN0
KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGVybWluYXRlKCk7
CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigpID0gMDsKIApJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
Y3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29r
aWVNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1
ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1By
b3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgiCiAjaW5jbHVkZSAiV2ViQ29v
a2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5TWVz
c2FnZXMuaCIKQEAgLTM5LDI0ICs0MCwxNiBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAotY29uc3QgY2hhciogV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
dXBwbGVtZW50TmFtZSgpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykKKyAgICA6IG1fbmV0d29y
a1Byb2Nlc3MobWFrZVdlYWtQdHIobmV0d29ya1Byb2Nlc3MpKQogewotICAgIHJldHVybiAiV2Vi
Q29va2llTWFuYWdlclByb3h5IjsKLX0KLQotUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gV2Vi
Q29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94eShwcm9jZXNz
UG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQcm94
eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi0gICAgOiBXZWJDb250ZXh0U3VwcGxlbWVu
dChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250ZXh0U3VwcGxlbWVudDo6cHJvY2Vzc1Bvb2wo
KS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIG5ldHdvcmtQcm9jZXNzLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksICp0aGlzKTsKIH0KIAogV2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2ll
TWFuYWdlclByb3h5KCkKIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CiAgICAgQVNTRVJUKG1fY29va2ll
T2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiB9CiAKQEAgLTY1LDEwMiArNTgsODQgQEAgdm9pZCBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmluaXRpYWxpemVDbAogICAgIG1fY2xpZW50LmluaXRpYWxpemUo
Y2xpZW50KTsKIH0KIAotLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLQotdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnByb2Nlc3NQb29sRGVzdHJveWVkKCkKLXsKLSAgICBWZWN0b3I8T2JzZXJ2
ZXIqPiBvYnNlcnZlcnM7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlclNldCA6IG1fY29va2llT2Jz
ZXJ2ZXJzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZl
clNldCkKLSAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQob2JzZXJ2ZXIpOwotICAgIH0KLQot
ICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyLT5t
YW5hZ2VyRGVzdHJveWVkKCk7Ci0KLSAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0
eSgpKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShX
ZWJQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJv
Y2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2Jq
ZWN0OjpyZWYoKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29u
dGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpkZXJlZigpOwotfQotCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYp
PiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQor
ICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBwcm9jZXNzUG9vbCgp
LT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklELCBo
b3N0bmFtZXMpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyksIDApOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQp
CiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGlu
Z0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVz
KHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29r
aWVzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVs
ZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ29va2llJiBjb29raWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1
dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFtjYWxsYmFja0Z1
bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKV0oKSBtdXRhYmxlIHsKKyAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklE
LCBjb29raWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCiAgICAgICAg
IGNhbGxiYWNrRnVuY3Rpb24oKTsKLSAgICB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgV2FsbFRpbWUgdGltZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNr
RnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVk
U2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01v
ZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7
CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
YWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9u
SUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBjb29raWVz
KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFj
a0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMs
IGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdv
cmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RG
TW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3Vt
ZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBj
YWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRB
bGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAg
ICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29v
a2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisg
ICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmdldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwp
LCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
KyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShjYWxs
YmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7
CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNo
YW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOwor
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMo
c2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJv
Y2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhz
ZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nv
b2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpzZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
V1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmIGNhbGxiYWNrKQpAQCAtMjExLDE4ICsxODYsMTggQEAg
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNvb2tpZXNEaWRDaAogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwg
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotI2lmIFVTRShTT1VQKQotICAgIHByb2Nlc3NQb29sKCkt
PnNldEluaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAg
IGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgV1RGTW92
ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0K
IAotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBv
bGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1bmN0
aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzZXNzaW9uSUQpLCBXVEZN
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rp
b24oSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6TmV2ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5oCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTEgKzU2LDkgQEAg
dHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpBcnJheSo+IEFycgogdHlwZWRlZiBHZW5lcmlj
Q2FsbGJhY2s8V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeT4gSFRUUENvb2tpZUFjY2Vw
dFBvbGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7CiAKLWNsYXNzIFdlYkNvb2tpZU1h
bmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNv
b2tpZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1lbnQsIHByaXZhdGUgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQ
STo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHByaXZhdGUg
SVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBz
dXBwbGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+
IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRpYyBSZWY8V2ViQ29va2llTWFuYWdl
clByb3h5PiBjcmVhdGUoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KG5ldHdvcmtQcm9jZXNzKSk7
IH0KICAgICB2aXJ0dWFsIH5XZWJDb29raWVNYW5hZ2VyUHJveHkoKTsKIAogICAgIHZvaWQgaW5p
dGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKik7CkBAIC0xMDQs
MTcgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQVBJOjpPYmplY3Q6OmRlcmVmOwogCiBw
cml2YXRlOgotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCopOworICAg
IFdlYkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAKICAgICB2b2lk
IGNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gV2ViQ29udGV4dFN1
cHBsZW1lbnQKLSAgICB2b2lkIHByb2Nlc3NQb29sRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZv
aWQgcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlcmVmV2Vi
Q29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLQogICAgIC8vIElQQzo6TWVzc2FnZVJlY2Vp
dmVyCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKSBvdmVycmlkZTsKIApAQCAtMTI1LDYgKzExNiw3IEBAIHByaXZhdGU6CiAgICAgSGFz
aE1hcDxQQUw6OlNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPj4gbV9sZWdhY3lDb29r
aWVPYnNlcnZlcnM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgSGFzaFNldDxPYnNlcnZl
cio+PiBtX2Nvb2tpZU9ic2VydmVyczsKIAorICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94
eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHlDbGllbnQgbV9j
bGllbnQ7CiAKICNpZiBVU0UoU09VUCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0Niw3ICsxNzQ2LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYQogICAgICAgICByZXR1cm47
CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb250cm9sbGVkQnlBdXRvbWF0aW9u
KGNvbnRyb2xsZWQpKTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9s
bGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJv
bGxlZEJ5QXV0b21hdGlvbikpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9sbGVk
QnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJvbGxl
ZEJ5QXV0b21hdGlvbiksIDApOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y3JlYXRlSW5zcGVj
dG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFy
Z2V0VHlwZSB0eXBlKQpAQCAtMzIxMCwxMSArMzIxMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpp
c0ZvcmNlZEludG9BcHBCb3VuZE0KIHZvaWQgV2ViUGFnZVByb3h5OjpkaXNhYmxlU2VydmljZVdv
cmtlckVudGl0bGVtZW50SW5OZXR3b3JrUHJvY2VzcygpCiB7CiAjaWYgRU5BQkxFKEFQUF9CT1VO
RF9ET01BSU5TKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCksIDApOwotICAgIH0K
KyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCAwKTsKICNl
bmRpZgogfQogCkBAIC0zMjIzLDEzICszMjE5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFy
U2VydmljZVdvcmtlckVudAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykgJiYgIVBMQVRG
T1JNKE1BQ0NBVEFMWVNUKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIHNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRs
ZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJp
ZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFT
dG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwog
I2VuZGlmCkBAIC00NDIzLDcgKzQ0MTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cHJlY29ubmVj
dFRvKGNvbnN0IFVSCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3kgPSBtX2NhblVzZUNyZWRlbnRpYWxTdG9yYWdlID8gV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3k6OlVzZSA6IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpE
b05vdFVzZTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5wcmVjb25uZWN0VG8oc2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlEKCks
IHVybCwgdXNlckFnZW50KCksIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRpbmdU
b0FwcEJvdW5kRG9tYWluKCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vz
cygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQoKSwg
dXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1Rv
QXBwQm91bmREb21haW4oKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDYW5Vc2VDcmVk
ZW50aWFsU3RvcmFnZShib29sIGNhblVzZUNyZWRlbnRpYWxTdG9yYWdlKQpAQCAtNDcxOSw3ICs0
NzA5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZQogICAgICAg
ICAgICAgUmVnaXN0cmFibGVEb21haW4gY3VycmVudERvbWFpbiB7IGN1cnJlbnRSZXF1ZXN0LnVy
bCgpIH07CiAgICAgICAgICAgICBVUkwgcmVxdWVzdGVyVVJMIHsgVVJMKCksIHJlcXVlc3Rlck9y
aWdpbi50b1N0cmluZygpIH07CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnREb21haW4ubWF0Y2hl
cyhyZXF1ZXN0ZXJVUkwpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2wo
KS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9LCBjdXJy
ZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50aWZpZXIsIG1fd2ViUGFn
ZUlEKTsKKyAgICAgICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNz
KCkuZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwgY3Vy
cmVudERvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dlYlBh
Z2VJRCk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTQ3NTcsNyArNDc0Nyw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUKICAgICBpZiAobmF2aWdhdGlv
biAmJiBmcmFtZS0+aXNNYWluRnJhbWUoKSkgewogICAgICAgICBpZiAoYXV0byYgYWRDbGlja0F0
dHJpYnV0aW9uID0gbmF2aWdhdGlvbi0+YWRDbGlja0F0dHJpYnV0aW9uKCkpIHsKICAgICAgICAg
ICAgIGlmIChhZENsaWNrQXR0cmlidXRpb24tPmRlc3RpbmF0aW9uKCkubWF0Y2hlcyhmcmFtZS0+
dXJsKCkpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9O
ZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0
dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmli
dXRpb24pKTsKKyAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3RvcmVBZENsaWNrQXR0cmlidXRp
b24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKmFkQ2xpY2tBdHRyaWJ1dGlvbiks
IDApOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MzcxLDcgKzUzNjEsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvCiAgICAgaWYgKHRhcmdldEhvc3QuaXNFbXB0
eSgpIHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3QgPT0gc291cmNlVVJM
Lmhvc3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgp
LnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TG9nRnJh
bWVOYXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxl
RG9tYWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVSTCB9LCBSZWdp
c3RyYWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5pc01haW5GcmFt
ZSgpLCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yTWFp
bkZyYW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlcikpOworICAgIHdl
YnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBw
YWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVkaXJlY3QsIGZy
YW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRGaW5pc2hEb2N1
bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlV
c2VyKSwgMCk7CiB9CiAjZW5kaWYKIApAQCAtOTk5Niw1OCArOTk4NiwyNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6c3lzdGVtUHJldmlld0FjdGlvblRyCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkdW1w
QWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYg
KCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAg
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5l
dHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2Fn
ZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1ZSks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9y
ZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcobV93
ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFsdWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25D
b252ZXJzaW9uVVJMRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1f
d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCku
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0
dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgp
KSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJl
ZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQ
cm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFy
a0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKICNpZiBF
TkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBA
QAogI2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nSW5pdGlh
bGl6YXRpb24uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uSW5mby5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtQcm9jZXNzUHJveHkuaCIKQEAgLTE0Myw4ICsxNDIsMTAgQEAKICNlbmRpZgogCiAj
ZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxF
QVNFX0xPRyhjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19W
QV9BUkdTX18pCisjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhjaGFu
bmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZt
dCwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJS
T1IoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIlcCAtIFdl
YlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJP
Q0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFT
RV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAi
JXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5l
IFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5uZWwsIGZt
dCwgLi4uKSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2Vk
KCksIGNoYW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIsNiArMjMz
LDExIEBAIHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXQKICAgICByZXR1
cm4gc2V0OwogfQogCitWZWN0b3I8U3RyaW5nPiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dp
dGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkKK3sKKyAgICByZXR1cm4gY29weVRvVmVjdG9yKGds
b2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKTsKK30KKwogV2ViUHJv
Y2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBj
b25maWd1cmF0aW9uKQogICAgIDogbV9jb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24uY29weSgp
KQogICAgICwgbV9kZWZhdWx0UGFnZUdyb3VwKFdlYlBhZ2VHcm91cDo6Y3JlYXRlKCkpCkBAIC0y
MzksNyArMjQ1LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvYwog
ICAgICwgbV9hdXRvbWF0aW9uQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpBdXRvbWF0aW9uQ2xpZW50
PigpKQogICAgICwgbV9kb3dubG9hZENsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRD
bGllbnQ+KCkpCiAgICAgLCBtX2hpc3RvcnlDbGllbnQobWFrZVVuaXF1ZTxBUEk6OkxlZ2FjeUNv
bnRleHRIaXN0b3J5Q2xpZW50PigpKQotICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQobWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICAgICAs
IG1fdmlzaXRlZExpbmtTdG9yZShWaXNpdGVkTGlua1N0b3JlOjpjcmVhdGUoKSkKICNpZiBQTEFU
Rk9STShNQUMpCiAgICAgLCBtX2hpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyKG1h
a2VVbmlxdWU8SGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXI+KCp0aGlzKSkKQEAg
LTI2Nyw5ICsyNzIsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9j
CiAjZW5kaWYKICAgICB9KTsKIAotICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlICYmIFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBt
X3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKTsKLQogICAgIGZvciAoYXV0byYgc2NoZW1lIDogbV9jb25maWd1cmF0aW9uLT5hbHdh
eXNSZXZhbGlkYXRlZFVSTFNjaGVtZXMoKSkKICAgICAgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFz
QWx3YXlzUmV2YWxpZGF0ZWQuYWRkKHNjaGVtZSk7CiAKQEAgLTI4NSw3ICsyODcsNiBAQCBXZWJQ
cm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jCiAgICAgYWRkTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhp
cyk7CiAKICAgICAvLyBOT1RFOiBUaGVzZSBzdWItb2JqZWN0cyBtdXN0IGJlIGluaXRpYWxpemVk
IGFmdGVyIG1fbWVzc2FnZVJlY2VpdmVyTWFwLi4KLSAgICBhZGRTdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdl
clByb3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5
PigpOwogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQpAQCAtMzQyLDkgKzM0Myw2IEBAIFdlYlBy
b2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2woKQogICAgIHByb2Nlc3NQb29sQ291bnRlci5kZWNy
ZW1lbnQoKTsKICNlbmRpZgogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNodXREb3duUHJvY2VzcygpOwotCiAjaWYgRU5BQkxFKEdBTUVQQUQp
CiAgICAgaWYgKCFtX3Byb2Nlc3Nlc1VzaW5nR2FtZXBhZHMuaXNFbXB0eSgpKQogICAgICAgICBV
SUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkucHJvY2Vzc1Bvb2xTdG9wcGVkVXNpbmdHYW1l
cGFkcygqdGhpcyk7CkBAIC00MDIsMTYgKzQwMCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
dEF1dG9tYXRpb25DbGllbnQKICAgICAgICAgbV9hdXRvbWF0aW9uQ2xpZW50ID0gV1RGTW92ZShh
dXRvbWF0aW9uQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudD4mJiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi17Ci0jaWYg
RU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKLSAgICBpZiAoIWN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCkKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQgPSBtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpOwotICAg
IGVsc2UKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBXVEZNb3ZlKGN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0
cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKQogewogICAgIC8v
IEd1YXJkIGFnYWluc3QgQVBJIG1pc3VzZS4KQEAgLTQyMSwxMSArNDA5LDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudAogICAgIG1fY29uZmlndXJhdGlvbi0+c2V0
Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGN1c3RvbVdlYkNvbnRlbnRT
ZXJ2aWNlQnVuZGxlSWRlbnRpZmllcik7CiB9CiAKLUlQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fbmV0
d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFu
Z3VhZ2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViUHJvY2Vz
c1Bvb2wqPihjb250ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7CkBAIC00MzUsOCArNDE4LDcgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9BbGxQ
cm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFu
Z2VkKCkpOwogI2lmIFVTRShTT1VQKQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclBy
ZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7Cisg
ICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5uZXR3b3JrUHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hh
bmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKICNlbmRpZgogfQogCkBAIC00NDks
NyArNDMxLDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZnVsbEtleWJvYXJkQWNjZXNzTQogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE1lbW9yeVByZXNzdXJlRXZlbnQoYm9vbCBpc0NyaXRpY2Fs
KQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6
RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCkpOwotICAgIHNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVt
b3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSk7CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9j
ZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVj
ZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCksIDApOwogI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQogICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5z
ZW5kTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKTsKICNlbmRpZgpAQCAtNDc0LDI3NSAr
NDU3LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2NyZWVuUHJvcGVydGllc1N0YQogI2VuZGlm
CiB9CiAKLU5ldHdvcmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3Jr
UHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKLXsKLSAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEg
dGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFp
biB0aHJlYWRzLgotICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2Ug
dGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KLSAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlmICghUnVuTG9vcDo6
aXNNYWluKCkpIHsKLSAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7
Ci0gICAgfQotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgaWYgKHdpdGhX
ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNz
aW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICB3aXRoV2Vi
c2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBhdXRvIG5ldHdvcmtQcm9j
ZXNzID0gbWFrZVVuaXF1ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7Ci0KLSAgICBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCi0gICAgaWYgKG1fd2Vi
c2l0ZURhdGFTdG9yZSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLnBlbmRpbmdDb29raWVzID0gY29weVRvVmVjdG9yKG1fd2Vic2l0ZURhdGFTdG9yZS0+
cGVuZGluZ0Nvb2tpZXMoKSk7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5k
aW5nQ29va2llcygpOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VB
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3Vy
YXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVy
KCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lH
bG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotCi0gICAgZm9yIChhdXRv
JiBzY2hlbWUgOiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkK
LSAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29s
cy5hcHBlbmQoc2NoZW1lKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU3RyaW5n
IGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURp
cmVjdG9yeSgpOwotICAgIGlmICghY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0g
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9y
eSA9IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYg
KCFjb250YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVz
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7Ci0KLSAgICBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bv
b2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyZW50QnVuZGxlRGlyZWN0
b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBh
cmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBh
cmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclRlbXBvcmFyeUZpbGUoZW1wdHlTdHJpbmcoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6
UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWRE
YXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotI2VuZGlm
Ci0KLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9W
ZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVy
QXNTZWN1cmUoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNz
aW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRp
bmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3Vy
aXR5UG9saWN5KCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2Fs
ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVz
VG9SZWdpc3RlckFzTG9jYWwoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRv
bigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotICAgIC8vICoqKioqKioqKgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNo
YW5nZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlz
ayB3aXRob3V0IGZpcnN0IGNvbnN1bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjov
L3Byb2JsZW0vMTc0NTQ3MTI+KQotICAgIC8vICoqKioqKioqKgotICAgIGlmIChtX3dlYnNpdGVE
YXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZElu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVj
dG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+Y3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQot
I2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQot
ICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBt
X3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSgpOwotICAgIGlmICghcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5KQotICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnkgPSAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExv
Y2FsU3RvcmFnZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9y
YWdlRGlyZWN0b3J5KQotICAgICAgICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9
IGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0KLSAgICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURh
dGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBu
dWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVj
dG9yeShjYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3Rv
cnkgPSBXVEZNb3ZlKGNhY2hlU3RvcmFnZURpcmVjdG9yeSk7Ci0gICAgfQotCi0gICAgU3RyaW5n
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0g
ICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGFyYW1ldGVycy5kaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NE
aXJlY3RvcnksIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwotCi0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAg
Ym9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7
Ci0gICAgYm9vbCBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoUkVT
T1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGUgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IFdlYkNvcmU6OlRoaXJkUGFy
dHlDb29raWVCbG9ja2luZ01vZGU6OkFsbDsKLSAgICBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZCBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IFdlYkNv
cmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKLSNlbmRpZgotICAgIFdl
YkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJzaXRl
RGF0YVJlbW92YWxNb2RlID0gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGU6OkFsbEJ1dENvb2tpZXM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gc3RhbmRh
bG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4+IGFwcEJvdW5kRG9tYWluczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBt
YW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fdGNj
UHJlZmVyZW5jZUVuYWJsZWQgPSBkb2VzQXBwSGF2ZUlUUEVuYWJsZWQoKTsKLSAgICBpZiAod2l0
aFdlYnNpdGVEYXRhU3RvcmUgJiYgIXdpdGhXZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhw
bGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBt
X3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyk7Ci0gICAgfSBlbHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUgJiYgIW1fd2Vic2l0ZURhdGFT
dG9yZS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgbV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmVFeGlzdHMoKSAmJiAhV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZSgpLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZQotICAg
ICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxl
ZDsKLSNlbmRpZgotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2
ZW50ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2so
KTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewot
ICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURh
dGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAg
ICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAg
ICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxl
RGVidWdNb2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAg
ICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5zYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAg
Zmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
c3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5z
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLmFwcEJvdW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNl
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLm1hbnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3
aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0
b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3Rv
cmFnZVF1b3RhKCk7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVE
aXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsK
LSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURp
cmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3
b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNvbnN0IGF1dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRh
U3RvcmUtPnJlc29sdmVkSFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3Rz
U3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3Jh
Z2VEaXJlY3RvcnkgPSBoc3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVu
c2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkg
ewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NM
b2dUZXN0aW5nRXZlbnQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5n
Q2FsbGJhY2soKTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljcykgewotICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dl
YnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0g
ICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhv
c3Q7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
LmVuYWJsZURlYnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQot
ICAgICAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29v
a2llQmxvY2tpbmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVu
YWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMuc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlOwotICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9t
YWluID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJh
bWV0ZXJzLnN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5k
RG9tYWlucyA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5hcHBCb3VuZERvbWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5tYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1
b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAg
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3Jp
Z2luU3RvcmFnZVF1b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2lu
U3RvcmFnZVF1b3RhKCk7Ci0KLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgp
OwotICAgICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAg
ICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5
OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNo
ZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3
b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y29uc3QgYXV0byYgaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJl
c29sdmVkSFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURp
cmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3Rv
cnkgPSBoc3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlw
ZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7
Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVj
dG9yeTsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNo
ZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3
b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lmIEhBVkUoQ0ZO
RVRXT1JLX0FMVEVSTkFUSVZFX1NFUlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6Omh0
dHAzRW5hYmxlZCgpKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9y
eSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2VzRGlyZWN0b3J5
KCk7Ci0gICAgICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnksIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFs
dGVybmF0aXZlU2VydmljZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
Lmh0dHAzRW5hYmxlZCA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBpc0l0cFN0YXRl
RXhwbGljaXRseVNldCA9IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXJhbWV0ZXJzID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewotICAgICAgICBX
VEZNb3ZlKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAgICBXVEZNb3Zl
KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpLAotICAgICAg
ICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0YXRlRXhwbGlj
aXRseVNldCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdF
dmVudCwKLSAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAgZW5hYmxlUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQotICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlLAotICAgICAg
ICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0
aW9uRG9tYWluLAotICAgICAgICBhcHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZh
bGVudFJlc291cmNlLAotICAgIH07Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmlj
IHBhcmFtZXRlcnMKLSAgICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0
ZXJzKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3
b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3
b3JrUHJvY2Vzc0xhdGVuY3lRT1MoKSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAw
KTsKLSNlbmRpZgotCi0gICAgbmV0d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24o
KTsKLQotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAg
ICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQot
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUg
c2Vzc2lvbnMgdGhhdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAg
ICBmb3IgKGF1dG8mIHNlc3Npb25JRCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpl
eGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAg
ICB9Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0g
ICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpu
ZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQ
cm94eSkKIHsKLSAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3
b3JrUHJvY2Vzc1Byb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChh
dXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxl
bWVudC0+cHJvY2Vzc0RpZENsb3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzUxLDkg
KzQ2Nyw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2gKICAgICBp
ZiAobV9hdXRvbWF0aW9uU2Vzc2lvbikKICAgICAgICAgbV9hdXRvbWF0aW9uU2Vzc2lvbi0+dGVy
bWluYXRlKCk7CiAKLSAgICAvLyBMZWF2ZSB0aGUgcHJvY2VzcyBwcm94eSBhcm91bmQgZHVyaW5n
IGNsaWVudCBjYWxsLCBzbyB0aGF0IHRoZSBjbGllbnQgY291bGQgcXVlcnkgdGhlIHByb2Nlc3Mg
aWRlbnRpZmllci4KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKLQogICAgIHRlcm1p
bmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKQEAgLTc2NCwyMCArNDc3LDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2NlcwogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdl
YlByb2Nlc3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAgICBlbnN1cmVOZXR3b3Jr
UHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KSwgd2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwgcmVwbHkg
PSBXVEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc1ZhbGlkKGNvbm5l
Y3Rpb25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5ICYmIHdlYWtUaGlzKSkg
ewotICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoUHJvY2Vzcywg
ImdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0IGF0dGVtcHQsIHJldHJ5
aW5nIik7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3ZWJQcm9jZXNz
UHJveHksIFdURk1vdmUocmVwbHkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7Ci0gICAgfSk7Ci19Ci0KICNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpncHVQcm9jZXNzQ3Jhc2hlZChQcm9j
ZXNzSUQgaWRlbnRpZmllcikKIHsKQEAgLTgwMSwyMyArNTAwLDI2IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmdldEdQVVByb2Nlc3NDb25uZWMKIH0KICNlbmRpZgogCitib29sIFdlYlByb2Nlc3NQ
b29sOjpzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSBmYWxzZTsKKwogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiBw
cm94eSwgUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChwcm94eSwgJnByb3h5ID09IG1fbmV0d29ya1Byb2Nl
c3MuZ2V0KCkpOwotCi0gICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3Rv
cmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwot
Ci0gICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0
YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0gICAgICAgIHdlYnNpdGVEYXRh
U3RvcmUgPSBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7Ci0gICAgfQorICAgIGF1dG8qIHdlYnNp
dGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Np
b25JRChzZXNzaW9uSUQpOworICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAgd2Vi
c2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIo
KTsKKyAgICBpZiAoIXByb2Nlc3NQb29scygpLnNpemUoKSkKKyAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFJlZjxXZWJQcm9jZXNzUG9vbD4+IHNlcnZpY2VXb3JrZXJQcm9jZXNzUG9vbChX
ZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjcmVh
dGUoKS5nZXQoKSkpOworCisgICAgLy8gQXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdCBwcm9j
ZXNzIHBvb2wgdG8gaG9zdCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vzcy4KKyAgICBhdXRvKiBw
cm9jZXNzUG9vbCA9IHByb2Nlc3NQb29scygpWzBdOworICAgIEFTU0VSVChwcm9jZXNzUG9vbCk7
CiAKICAgICBXZWJQcm9jZXNzUHJveHkqIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgeyBudWxs
cHRyIH07Ci0gICAgaWYgKCFtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGlm
IChwcm9jZXNzID09IG1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9jZXNzLT5pc0R1bW15UHJvY2Vz
c1Byb3h5KCkpCisKKyAgICBpZiAoIXNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcykg
eworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMp
IHsKKyAgICAgICAgICAgIGlmIChwcm9jZXNzID09IHByb2Nlc3NQb29sLT5tX3ByZXdhcm1lZFBy
b2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94eSgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCZwcm9jZXNzLT53ZWJzaXRlRGF0YVN0b3JlKCkg
IT0gd2Vic2l0ZURhdGFTdG9yZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTgyNSwz
NSArNTI3LDM1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnQKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eSA9IHByb2Nlc3MuZ2V0KCk7Ci0gICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyh1c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlm
aWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CisgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyhwcm9jZXNzUG9vbC0+dXNlckNvbnRlbnRDb250
cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkpOwogCi0gICAgICAgICAgICBXRUJQ
Uk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxp
c2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgcmV1c2luZyBhbiBleGlz
dGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkp
OworICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFU
SUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3
b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdlYiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQ
SUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KIAogICAgIGlmICghc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkgewotICAgICAg
ICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6Y3JlYXRlRm9yU2Vydmlj
ZVdvcmtlcnMoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFT
dG9yZSk7CisgICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5ID0gV2ViUHJvY2Vzc1Byb3h5Ojpj
cmVhdGVGb3JTZXJ2aWNlV29ya2VycygqcHJvY2Vzc1Bvb2wsIFdURk1vdmUocmVnaXN0cmFibGVE
b21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CiAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNz
UHJveHkgPSBuZXdQcm9jZXNzUHJveHkucHRyKCk7CiAKLSAgICAgICAgV0VCUFJPQ0VTU1BPT0xf
UkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29y
a2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJv
eHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAg
ICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2aWNl
V29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
IGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVk
KSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkt
PnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCi0gICAgICAgIGluaXRpYWxpemVOZXdXZWJQcm9jZXNz
KG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFTdG9yZSk7Ci0gICAgICAgIG1fcHJvY2Vzc2Vz
LmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOworICAgICAgICBwcm9jZXNzUG9vbC0+
aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJvY2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3Jl
KTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1By
b2Nlc3NQcm94eSkpOwogICAgIH0KIAotICAgIEFTU0VSVCghbV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSk7Ci0gICAgbV9zZXJ2aWNl
V29ya2VyUHJvY2Vzc2VzLmFkZCgqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSk7CisgICAgQVNT
RVJUKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29udGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHkpKTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuYWRkKCpzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5KTsKIAotICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVzdGFi
bGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzID8gbV9z
ZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJl
ZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgaWYg
KCFtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxsKCkpCi0gICAgICAgIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQobV9zZXJ2aWNlV29ya2Vy
VXNlckFnZW50KTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lc3RhYmxpc2hTZXJ2
aWNlV29ya2VyQ29udGV4dChwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMg
PyBwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IHByb2Nl
c3NQb29sLT5tX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmICghcHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdv
cmtlclVzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94
eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2Vy
VXNlckFnZW50KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVtb3ZlRnJvbVNlcnZpY2VX
b3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogewotICAgIEFTU0VSVCht
X3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFpbnMocHJvY2VzcykpOwotICAgIG1fc2Vydmlj
ZVdvcmtlclByb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CisgICAgQVNTRVJUKHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzZXMoKS5jb250YWlucyhwcm9jZXNzKSk7CisgICAgc2VydmljZVdvcmtlclByb2Nl
c3NlcygpLnJlbW92ZShwcm9jZXNzKTsKIH0KICNlbmRpZgogCkBAIC05MjIsNyArNjI0LDcgQEAg
UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OgogI2lmIFBMQVRGT1JNKEdU
SykgfHwgUExBVEZPUk0oV1BFKQogICAgIC8vIEluIHBsYXRmb3JtcyB1c2luZyBCdWJibGV3cmFw
IGZvciBzYW5kYm94aW5nLCBwcmV3YXJtZWQgcHJvY2VzcyBpcyBsYXVuY2hlZCB1c2luZyB0aGUg
V2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlLAogICAgIC8vIHNvIHdlIGRv
bid0IHVzZSBpdCBpbiBjYXNlIG9mIHVzaW5nIGEgZGlmZmVyZW50IFdlYnNpdGVEYXRhU3RvcmUu
Ci0gICAgaWYgKG1fc2FuZGJveEVuYWJsZWQgJiYgbV93ZWJzaXRlRGF0YVN0b3JlICYmIG1fd2Vi
c2l0ZURhdGFTdG9yZS5nZXQoKSAhPSAmd2Vic2l0ZURhdGFTdG9yZSkKKyAgICBpZiAobV9zYW5k
Ym94RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIApAQCAtMTAzMiw4
ICs3MzQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjppbml0aWFsaXplTmV3V2ViUHJvCiAgICAg
ICAgIHByb2Nlc3MuaXNSZXNwb25zaXZlKFtpbml0aWFsaXphdGlvbkFjdGl2aXR5ID0gV1RGTW92
ZShpbml0aWFsaXphdGlvbkFjdGl2aXR5KV0gKGJvb2wpIHsgfSk7CiAgICAgfSk7CiAKLSAgICBl
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyBwYXJhbWV0ZXJzOwogCiAgICAgcGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGggPSBtX3Jl
c29sdmVkUGF0aHMuaW5qZWN0ZWRCdW5kbGVQYXRoOwpAQCAtMTE5OCw5ICs4OTgsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1CiAgICAgICAgIHByb2Nlc3MtPmNv
bm5lY3Rpb24oKS0+aWdub3JlVGltZW91dHNGb3JUZXN0aW5nKCk7CiAKICAgICBtX2Nvbm5lY3Rp
b25DbGllbnQuZGlkQ3JlYXRlQ29ubmVjdGlvbih0aGlzLCBwcm9jZXNzLT53ZWJDb25uZWN0aW9u
KCkpOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgbV93ZWJzaXRlRGF0
YVN0b3JlLT5kaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCkBAIC0xMjk1
LDEwICs5OTIsNyBAQCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlCiAg
ICAgaWYgKCFwYWdlQ29uZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpKSB7CiAgICAgICAg
IC8vIFdlIHRyeSB0byBhdm9pZCBjcmVhdGluZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxv
bmcgYXMgcG9zc2libGUuCiAgICAgICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRv
IGNyZWF0ZSBhIHdlYiBwYWdlIHdpdGhvdXQgYW55IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVu
IHdlIGhhdmUgdG8gY3JlYXRlIGl0LgotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkK
LSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotCi0gICAgICAgIHBhZ2VDb25maWd1cmF0aW9u
LT5zZXRXZWJzaXRlRGF0YVN0b3JlKG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAg
IHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpKTsKICAgICB9CiAKICAgICBSZWZQdHI8
V2ViUHJvY2Vzc1Byb3h5PiBwcm9jZXNzOwpAQCAtMTMyOSw3ICsxMDIzLDcgQEAgUmVmPFdlYlBh
Z2VQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZQogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKICAgICBpZiAoIW1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKSB7CiAgICAgICAgIG1fc2Vy
dmljZVdvcmtlclByZWZlcmVuY2VzID0gcGFnZS0+cHJlZmVyZW5jZXNTdG9yZSgpOwotICAgICAg
ICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzKQorICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdv
cmtlclByb2Nlc3NlcygpKQogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRl
U2VydmljZVdvcmtlclByZWZlcmVuY2VzU3RvcmUoKm1fc2VydmljZVdvcmtlclByZWZlcmVuY2Vz
KTsKICAgICB9CiAgICAgaWYgKHVzZXJDb250ZW50Q29udHJvbGxlcikKQEAgLTEzNTYsNyArMTA1
MCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXIKICAgICBpZiAo
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50ID09IHVzZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwog
ICAgIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9IHVzZXJBZ2VudDsKLSAgICBmb3IgKGF1dG8m
IHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgIGZv
ciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkp
CiAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzLnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQo
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KICNlbmRpZgpAQCAtMTM2NSwxNSArMTA1OSw2
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2kKIHsKICAgICBhdXRv
IHJlc3VsdCA9IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5hZGQoZGF0YVN0b3JlLnNlc3Npb25JRCgp
LCBIYXNoU2V0PFdlYlBhZ2VQcm94eUlkZW50aWZpZXI+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQo
cGFnZUlEKTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwot
Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7Ci0gICAgaWYgKHNl
c3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAg
IEFTU0VSVCghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgfHwgZGF0YVN0b3JlLnBhcmFtZXRlcnMo
KS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEID09IHNlc3Npb25JRCk7Ci0gICAg
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5hZGRTZXNzaW9uKG1ha2VSZWYoZGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICBkYXRhU3RvcmUu
Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgfQogfQogCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpwYWdlRW5kVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50
aWZpZXIgcGFnZUlELCBXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpCkBAIC0xNDAxLDcgKzEw
ODYsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNQYWdlc1VzaW5nV2Vic2l0CiBEb3dubG9h
ZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0
b3JlLCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCiB7CiAgICAgYXV0byYg
ZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCByZXF1ZXN0LCBp
bml0aWF0aW5nUGFnZSwgeyB9KTsKLSAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBkYXRh
U3RvcmUuc2Vzc2lvbklEKCk7CiAKICAgICBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpbj4gaXNBcHBCb3VuZCA9IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpObzsKICAgICBp
ZiAoaW5pdGlhdGluZ1BhZ2UpIHsKQEAgLTE0MTEsMjYgKzEwOTUsMjMgQEAgRG93bmxvYWRQcm94
eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKAogI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKG5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0
KHJlcXVlc3QpOwotICAgICAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2ls
bCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KLSAgICAg
ICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3AgbGV2ZWwgZG9jdW1lbnQncyBVUkwuCi0gICAg
ICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewotICAgICAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdl
VVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwo
KSB9OwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMo
aW5pdGlhdGluZ1BhZ2VVUkwpOwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1l
U2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVz
dC51cmwoKSkpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVy
RmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRl
ZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChpbml0aWF0aW5nUGFnZS0+dXNlckFnZW50Rm9yVVJM
KHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHVwZGF0ZWRS
ZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKLSAgICAgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVk
UmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0g
ICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJv
eHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZWRSZXF1
ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3du
bG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dl
c3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5OworICAgIFJl
c291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAvLyBSZXF1ZXN0J3Mg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUg
ZG93bmxvYWQgcmVxdWVzdC4KKyAgICAvLyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBk
b2N1bWVudCdzIFVSTC4KKyAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKKyAgICAgICAgVVJMIGlu
aXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2Fk
U3RhdGUoKS51cmwoKSB9OworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9y
Q29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElz
U2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJl
cXVlc3QudXJsKCkpKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVy
RmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVx
dWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVx
dWVzdC51cmwoKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZp
cnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNT
YW1lU2l0ZShmYWxzZSk7CisgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQorICAgICAgICAgICAgdXBkYXRlZFJl
cXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkp
OwogICAgIH0KKyAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1RvcFNpdGUoZmFsc2UpOworICAgIGRh
dGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpE
b3dubG9hZFJlcXVlc3QoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBkb3dubG9hZFByb3h5LmRvd25s
b2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwg
MCk7CiAKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KQEAgLTE0MzgsMTcgKzExMTksMTIg
QEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKAogRG93bmxvYWRQcm94
eSYgV2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFT
dG9yZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgQVBJOjpEYXRhJiByZXN1
bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgYXV0byYgZG93bmxvYWRQcm94eSA9
IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBSZXNvdXJjZVJlcXVlc3QoKSwgaW5pdGlh
dGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0b3Jl
LnNlc3Npb25JRCgpOwogCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRl
bnNpb25IYW5kbGU7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRX
cml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAobmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQo
KSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5k
bGUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7Ci0gICAgfQotCisgICAgZGF0
YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJl
c3VtZURvd25sb2FkKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgZG93bmxvYWRQcm94eS5kb3dubG9h
ZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlKSwgMCk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CiAKQEAgLTE1MTcsMTEg
KzExOTMsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWZyZXNoUGx1Z2lucygpCiAKICNlbmRp
ZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAotUHJvY2Vzc0lEIFdlYlByb2Nlc3NQ
b29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQotewotICAgIHJldHVybiBtX25ldHdvcmtQ
cm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7Ci19Ci0K
IFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6cHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKQog
ewogICAgIHJldHVybiBtX3ByZXdhcm1lZFByb2Nlc3MgPyBtX3ByZXdhcm1lZFByb2Nlc3MtPnBy
b2Nlc3NJZGVudGlmaWVyKCkgOiAwOwpAQCAtMTU1OCwxNCArMTIyOSwxOCBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGlu
Z3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKTsKICAg
ICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2No
ZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVt
ZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxT
Y2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3Jl
Lm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVy
VVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQ
b2xpY3koY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGlu
Z3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJp
dHlQb2xpY3kodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6Oldl
YlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xp
Y3kodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5
UG9saWN5KHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRl
RGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAg
ICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3ko
dXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERv
bWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiB1cmxTY2hl
bWUpCkBAIC0xNTc4LDE0ICsxMjUzLDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVy
VVJMU2NoZW1lQXMKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2Vz
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1l
KSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFT
dG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3Rv
cmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNj
aGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVS
TFNjaGVtZUFzTm9BY2Nlc3MoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1
cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6
UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVB
c05vQWNjZXNzKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJz
aXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsK
KyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpLCAwKTsKKyAg
ICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3Bs
YXlJc29sYXRlZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MDYsMTAgKzEyODUsOCBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLmFk
ZCh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdpc3RlclNj
aGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAo
YXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9j
ZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5
Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5y
ZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25z
dCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MTgsMTAgKzEyOTUsOCBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMCiAgICAgICAgIHJldHVybjsKIAogICAgIGdsb2Jh
bFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLnJlbW92ZSh1cmxTY2hlbWUp
OwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1lRm9yTGVn
YWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRvIG5ldHdv
cmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQor
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVBy
b3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJM
U2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTY1
NSwxNiArMTMzMCwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKENhY2hl
CiAKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldENhY2hl
TW9kZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNo
ZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vi
c2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkg
eworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAgfSk7CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGlu
ZyhDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB7CiAgICAgdXBkYXRlQmFja0ZvcndhcmRDYWNoZUNh
cGFjaXR5KCk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVs
U3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsKKyAgICBXZWJz
aXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5j
aHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCAwKTsKKyAgICB9KTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91
YmxlIHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE2NzQsMTIgKzEzNTEsNyBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpCiAKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQ
b29sOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFn
ZSwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvKQogewotICAgIHJldHVybiBlbnN1cmVO
ZXR3b3JrUHJvY2VzcygmZGF0YVN0b3JlKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwg
cmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwotfQotCi12b2lkIFdlYlByb2Nl
c3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKLXsKLSAg
ICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dy
b3VuZCk7CisgICAgcmV0dXJuIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURvd25s
b2FkUHJveHkoZGF0YVN0b3JlLCAqdGhpcywgcmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGlu
Z1BhZ2UpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIoSVBD
OjpSZWNlaXZlck5hbWUgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpNZXNzYWdlUmVjZWl2ZXIm
IG1lc3NhZ2VSZWNlaXZlcikKQEAgLTE3NTAsMzAgKzE0MjIsNiBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9OZXR3b3Jr
aW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KQotewotICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpm
b3J3YXJkPFU+KHJlcGx5KSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2Fj
aGVkQ3JlZGVudGlhbHMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkKLXsKLSAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKSwg
MCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkK
LXsKLSAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwotCi0gICAgaWYgKCFtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVy
bWluYXRlKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci19Ci0KIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQogewogICAgIFZl
Y3RvcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzID0gbV9wcm9jZXNzZXM7CkBA
IC0xNzgxLDQwICsxNDI5LDE1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdl
YkNvbnQKICAgICAgICAgcHJvY2Vzcy0+dGVybWluYXRlKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0g
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1t
aW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcoKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0KLQot
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkKLXsKLSAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFBy
b2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2Vy
dmljZVdvcmtlcnMoKQogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBhdXRvIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICB3aGlsZSAobV9zZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzLmNvbXB1dGVTaXplKCkpCi0gICAgICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cy5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKKyAgICB3aGlsZSAoc2VydmljZVdv
cmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoKS5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKICNlbmRpZgogfQogCi12
b2lkIFdlYlByb2Nlc3NQb29sOjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNl
c3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQot
ewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRh
dGVBdXRvbWF0aW9uQ2FwYWJpbGl0aWVzKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoUkVNT1RFX0lO
U1BFQ1RPUikKQEAgLTIwODksMTUgKzE3MTIsMjEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVw
b3J0V2ViQ29udGVudENQVQogI2VuZGlmCiB9CiAKK1dlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94
eT4mIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2Vz
OworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9CisKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0
ZVByb2Nlc3NBc3NlcnRpb25zKCkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnVwZGF0
ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0
ZURhdGFTdG9yZShbXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRh
dGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICB9
KTsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gQ2hlY2sgb24gbmV4dCBydW4g
bG9vcCBzaW5jZSB0aGUgd2ViIHByb2Nlc3MgcHJveHkgdG9rZW5zIGFyZSBwcm9iYWJseSBiZWlu
ZyB1cGRhdGVkLgotICAgIGNhbGxPbk1haW5SdW5Mb29wKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKHRoaXMpXSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VX
b3JrZXJQcm9jZXNzZXMpCisgICAgY2FsbE9uTWFpblJ1bkxvb3AoW10geworICAgICAgICBmb3Ig
KGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQog
ICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclByb2Nl
c3NBc3NlcnRpb24oKTsKICAgICB9KTsKICNlbmRpZgpAQCAtMjEwNyw3ICsxNzM2LDcgQEAgYm9v
bCBXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29ya2VyUGFnZQogewogI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmVmZmljaWVudC4KLSAgICByZXR1
cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtwYWdlSURdKGF1dG8mIHBy
b2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCks
IFtwYWdlSURdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2Vy
dmljZVdvcmtlclBhZ2VQcm94eShwYWdlSUQpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMzI5LDE0
ICsxOTU4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDdXJyZW50TW9kaWZpZQogfQog
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0ZU5hdmlnYXRpb25E
YXRhVHJhbnNmZXI6OkZsYWc+IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIFdlYlBhZ2VQcm94eUlk
ZW50aWZpZXIgd2ViUGFnZVByb3h5SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCkKLXsKLSAg
ICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmV0d29y
a1Byb2Nlc3MtPmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25J
RCwgZnJvbURvbWFpbiwgdG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQ
cm94eUlELCB3ZWJQYWdlSUQpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5z
V2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYm
IGRvbWFpbnMpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpTZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihkb21haW5zKSk7CkBAIC0yMzg3LDI3ICsy
MDA4LDI3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1ZGlibGVNZWRpYUEKIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29s
IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgaWYgKG1fdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KQorICAgIGlmIChzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0VCUFJPQ0VT
U1BPT0xfUkVMRUFTRV9MT0coU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3M6ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0Vf
TE9HX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiAKLSAgICBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwotICAgIHRlcm1pbmF0ZVNl
cnZpY2VXb3JrZXJzKCk7Ci0gICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBzX3Vz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxs
UHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycygpOwogfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogYm9vbCBXZWJQcm9jZXNz
UG9vbDo6aGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25z
dAogewotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10o
YXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoKSwgW10oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNT
ZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQog
CiBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5
Rm9yVGVzdGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yo
c2VydmljZVdvcmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJl
dHVybiBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5n
KCk7CiAgICAgfSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDYgQEAgT0JKQ19DTEFTUyBX
S1ByZWZlcmVuY2VPYnNlcnZlcjsKIAogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBBdXRvbWF0aW9u
Q2xpZW50OwotY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogY2xhc3MgRG93bmxv
YWRDbGllbnQ7CiBjbGFzcyBIVFRQQ29va2llU3RvcmU7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZUNs
aWVudDsKQEAgLTE3Niw3ICsxNzUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIaXN0b3J5Q2xp
ZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiYmKTsK
ICAgICB2b2lkIHNldERvd25sb2FkQ2xpZW50KFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50
PiYmKTsKICAgICB2b2lkIHNldEF1dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6
QXV0b21hdGlvbkNsaWVudD4mJik7Ci0gICAgdm9pZCBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50PiYmKTsKIAogICAgIHZvaWQgc2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVu
dGlmaWVyKGNvbnN0IFN0cmluZyYpOwogICAgIGNvbnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVu
dFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCkgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT5jdXN0
b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKTsgfQpAQCAtMTg3LDE3ICsxODUs
OSBAQCBwdWJsaWM6CiAgICAgLy8gbnVsbCBjaGVja3MgaW4gV2ViUGFnZVByb3h5LgogICAgIFdl
YlByb2Nlc3NQcm94eSogZHVtbXlQcm9jZXNzUHJveHkoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KSBjb25zdCB7IHJldHVybiBtX2R1bW15UHJvY2Vzc1Byb3hpZXMuZ2V0KHNlc3Npb25JRCkuZ2V0
KCk7IH0KIAotICAgIC8vIFdlYlByb2Nlc3Mgb3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3Jp
YXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9kZWwuIFRoZSBjb25uZWN0aW9uIG11c3QgYmUgbm9u
LW51bGwuCi0gICAgSVBDOjpDb25uZWN0aW9uKiBuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24o
KTsKLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzKGNv
bnN0IFQmIG1lc3NhZ2UpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxs
UHJvY2Vzc2VzRm9yU2Vzc2lvbihjb25zdCBUJiBtZXNzYWdlLCBQQUw6OlNlc3Npb25JRCk7CiAK
LSAgICAvLyBTZW5kcyB0aGUgbWVzc2FnZSB0byBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNz
IGFzIGFwcHJvcG9yaWF0ZSBmb3IgY3VycmVudCBwcm9jZXNzIG1vZGVsLgotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpOwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHZvaWQgc2VuZFN5bmNUb05ldHdv
cmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBVJiYgcmVwbHkpOwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHZvaWQgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5
KFQmJiBtZXNzYWdlKTsKLQogICAgIHZvaWQgcHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQ
cm9jZXNzUHJveHkqKTsKIAogICAgIFdlYlByb2Nlc3NDYWNoZSYgd2ViUHJvY2Vzc0NhY2hlKCkg
eyByZXR1cm4gbV93ZWJQcm9jZXNzQ2FjaGUuZ2V0KCk7IH0KQEAgLTIwNSw5ICsxOTUsNiBAQCBw
dWJsaWM6CiAgICAgLy8gRGlzY29ubmVjdCB0aGUgcHJvY2VzcyBmcm9tIHRoZSBjb250ZXh0Lgog
ICAgIHZvaWQgZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKLSAgICBXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmUqIHdlYnNpdGVEYXRhU3RvcmUoKSBjb25zdCB7IHJldHVybiBt
X3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFByaW1hcnlEYXRhU3RvcmUo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsgbV93ZWJzaXRlRGF0YVN0b3Jl
ID0gJmRhdGFTdG9yZTsgfQotCiAgICAgUmVmPFdlYlBhZ2VQcm94eT4gY3JlYXRlV2ViUGFnZShQ
YWdlQ2xpZW50JiwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogCiAgICAgdm9pZCBw
YWdlQmVnaW5Vc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2Vi
c2l0ZURhdGFTdG9yZSYpOwpAQCAtMjU4LDEwICsyNDUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
ZGRTdXBwb3J0ZWRQbHVnaW4oU3RyaW5nJiYgbWF0Y2hpbmdEb21haW4sIFN0cmluZyYmIG5hbWUs
IEhhc2hTZXQ8U3RyaW5nPiYmIG1pbWVUeXBlcywgSGFzaFNldDxTdHJpbmc+IGV4dGVuc2lvbnMp
OwogICAgIHZvaWQgY2xlYXJTdXBwb3J0ZWRQbHVnaW5zKCk7CiAKLSAgICBQcm9jZXNzSUQgbmV0
d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CiAgICAgUHJvY2Vzc0lEIHByZXdhcm1lZFByb2Nlc3NJ
ZGVudGlmaWVyKCk7CiAgICAgdm9pZCBhY3RpdmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JU
ZXN0aW5nKFByb2Nlc3NJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYm
KT4mJik7Ci0gICAgYm9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhj
b25zdCBTdHJpbmcmKTsKIAogICAgIFdlYlBhZ2VHcm91cCYgZGVmYXVsdFBhZ2VHcm91cCgpIHsg
cmV0dXJuIG1fZGVmYXVsdFBhZ2VHcm91cC5nZXQoKTsgfQogCkBAIC0zMDIsOCArMjg3LDYgQEAg
cHVibGljOgogICAgIEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlDbGll
bnQoKSB7IHJldHVybiAqbV9oaXN0b3J5Q2xpZW50OyB9CiAgICAgV2ViQ29udGV4dENsaWVudCYg
Y2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KIAotICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50JiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVy
biAqbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7IH0KLQogICAgIHN0cnVjdCBTdGF0aXN0
aWNzIHsKICAgICAgICAgdW5zaWduZWQgd2tWaWV3Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHdr
UGFnZUNvdW50OwpAQCAtMzE5LDEyICszMDIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKICAgICB2b2lkIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
KCk7CiAKLSAgICB2b2lkIGZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0KICAgICB2b2lkIHNldFNob3VsZE1ha2VOZXh0V2Vi
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRNYWtlTmV4
dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9CiAgICAgYm9vbCBzaG91
bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmc7IH0KLSAgICB2
b2lkIHNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhi
b29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JU
ZXN0aW5nID0gdmFsdWU7IH0KLSAgICBib29sIHNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkTWFrZU5leHROZXR3
b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nOyB9CiAKICAgICB2b2lkIHJlcG9ydFdlYkNv
bnRlbnRDUFVUaW1lKFNlY29uZHMgY3B1VGltZSwgdWludDY0X3QgYWN0aXZpdHlTdGF0ZSk7CiAK
QEAgLTM4MywxOSArMzYyLDEzIEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgLy8gTmV0d29yayBQ
cm9jZXNzIE1hbmFnZW1lbnQKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBlbnN1cmVOZXR3b3Jr
UHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSA9IG51bGxwdHIp
OwotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzKCkgY29uc3QgeyByZXR1
cm4gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKTsgfQogICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFz
aGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKTsKIAotICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6Okdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKLQogICAgIGJvb2wgaXNT
ZXJ2aWNlV29ya2VyUGFnZUlEKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIpIGNvbnN0OwogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLSAgICB2b2lkIGVzdGFibGlzaFdvcmtlckNvbnRleHRDb25u
ZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CisgICAgc3RhdGljIHZvaWQgZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25U
b05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmLCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
ICAgICB2b2lkIHJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKFdlYlByb2Nlc3NQcm94
eSYpOwotICAgIHNpemVfdCBzZXJ2aWNlV29ya2VyUHJveGllc0NvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbXB1dGVTaXplKCk7IH0KLSAgICB2b2lkIHNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihib29sIGFsbG93cykgeyBt
X2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlciA9IGFsbG93czsgfQotICAg
IGJvb2wgYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI7IH0KKyAgICBz
aXplX3Qgc2VydmljZVdvcmtlclByb3hpZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHNlcnZpY2VX
b3JrZXJQcm9jZXNzZXMoKS5jb21wdXRlU2l6ZSgpOyB9CiAgICAgdm9pZCB1cGRhdGVTZXJ2aWNl
V29ya2VyVXNlckFnZW50KGNvbnN0IFN0cmluZyYgdXNlckFnZW50KTsKICAgICBjb25zdCBPcHRp
b25hbDxVc2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyPiYgdXNlckNvbnRlbnRDb250cm9s
bGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkgY29uc3QgeyByZXR1cm4gbV91c2VyQ29u
dGVudENvbnRyb2xsZXJJREZvclNlcnZpY2VXb3JrZXI7IH0KICAgICBib29sIGhhc1NlcnZpY2VX
b3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3Q7CkBAIC00NDksOCArNDIy
LDYgQEAgcHVibGljOgogICAgIGJvb2wgYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gbV9hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHk7IH0KICAgICBi
b29sIHNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSBjb25zdCB7IHJldHVybiBtX3No
b3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb247IH0KIAotICAgIHZvaWQgc3ludGhlc2l6ZUFw
cElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpOwotICAgIAogI2lmIEVOQUJMRShHQU1FUEFE
KQogICAgIHZvaWQgZ2FtZXBhZENvbm5lY3RlZChjb25zdCBVSUdhbWVwYWQmLCBXZWJDb3JlOjpF
dmVudE1ha2VzR2FtZXBhZHNWaXNpYmxlKTsKICAgICB2b2lkIGdhbWVwYWREaXNjb25uZWN0ZWQo
Y29uc3QgVUlHYW1lcGFkJik7CkBAIC00ODgsNyArNDU5LDYgQEAgcHVibGljOgogICAgIHZvaWQg
Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKTsKIAogI2lmIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgdm9pZCBkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0
aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4mIGZyb21Eb21haW4sIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiB0b0Rv
bWFpbiwgT3B0aW9uU2V0PFdlYkNvcmU6OkNyb3NzU2l0ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6
OkZsYWc+LCBXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllcik7
CiAgICAgdm9pZCBzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluPiYmKTsKICAgICB2b2lkIHNlZWRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRm9yVGVzdGluZyhjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgZmlyc3RQYXJ0
eURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIHRoaXJkUGFydHlEb21h
aW4sIGJvb2wgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CiAgICAgdm9pZCBzZW5kUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFJbW1lZGlh
dGVseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwpAQCAtNTE1LDggKzQ4NSw4IEBAIHB1
YmxpYzoKICAgICAKICAgICBQbHVnSW5BdXRvU3RhcnRQcm92aWRlciYgcGx1Z0luQXV0b1N0YXJ0
UHJvdmlkZXIoKSB7IHJldHVybiBtX3BsdWdJbkF1dG9TdGFydFByb3ZpZGVyOyB9CiAKLSAgICB2
b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCk7Ci0gICAgYm9vbCB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV91c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOyB9CisgICAgc3RhdGljIHZvaWQgc2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKKyAgICBzdGF0aWMgYm9vbCB1c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkgeyByZXR1cm4gc191c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzOyB9CiAKICNpZiBFTkFCTEUoQ0ZQUkVGU19ESVJFQ1RfTU9ERSkKICAgICB2b2lk
IG5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZChjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IE9wdGlvbmFsPFN0cmluZz4mIGVuY29kZWRWYWx1ZSk7CkBAIC01Mjgs
OSArNDk4LDE1IEBAIHB1YmxpYzoKICAgICBpbnQzMl90IHVzZXJJZCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlcklkOyB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIE9TT2JqZWN0
UHRyPHhwY19vYmplY3RfdD4geHBjRW5kcG9pbnRNZXNzYWdlKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0cjx4cGNf
b2JqZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSk7CisgICAgc3RhdGljIHZvaWQgcGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsK
KyAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhh
bmRsZXJzKCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHN0YXRpYyBTdHJpbmcg
Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgcGFyZW50QnVuZGxl
RGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5
KCk7CisgICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGlyZWN0b3J5KCk7CisgICAg
c3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsKICNlbmRpZgogCiBw
cml2YXRlOgpAQCAtNTQ2LDggKzUyMiw2IEBAIHByaXZhdGU6CiAgICAgV2ViUHJvY2Vzc1Byb3h5
JiBjcmVhdGVOZXdXZWJQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9jZXNzUHJveHk6
OklzUHJld2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8pOwogICAgIHZv
aWQgaW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiwgV2Vic2l0ZURhdGFT
dG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6Oklz
UHJld2FybWVkOjpObyk7CiAKLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0KICAgICB2b2lkIGhhbmRs
ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29u
c3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5KTsKICAgICB2b2lkIGhhbmRsZVN5bmNocm9ub3VzTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBV
c2VyRGF0YSYgbWVzc2FnZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlckRhdGEmJik+
JiYpOwogCkBAIC01NzEsMTQgKzU0NSw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIHVzZXNTaW5n
bGVXZWJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT51c2VzU2luZ2xl
V2ViUHJvY2VzcygpOyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyBT
dHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgcGFyZW50
QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5nQ2FjaGVzRGly
ZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGlyZWN0b3J5KCk7
Ci0gICAgc3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsKLSNlbmRp
ZgotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCByZWdpc3Rlck5vdGlmaWNhdGlvbk9i
c2VydmVycygpOwogICAgIHZvaWQgdW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpOwpA
QCAtNjIwLDkgKzU4Niw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwg
V2Vha1B0cjxXZWJQcm9jZXNzUHJveHk+PiBtX2R1bW15UHJvY2Vzc1Byb3hpZXM7IC8vIExpZ2h0
d2VpZ2h0IFdlYlByb2Nlc3NQcm94eSBvYmplY3RzIHdpdGhvdXQgYmFja2luZyBwcm9jZXNzLgog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQ
cm94eT4gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzOworICAgIHN0YXRpYyBXZWFrSGFzaFNldDxX
ZWJQcm9jZXNzUHJveHk+JiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCk7CiAgICAgYm9vbCBtX3dh
aXRpbmdGb3JXb3JrZXJDb250ZXh0UHJvY2Vzc0Nvbm5lY3Rpb24geyBmYWxzZSB9OwotICAgIGJv
b2wgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIgeyBmYWxzZSB9Owog
ICAgIFN0cmluZyBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQ7CiAgICAgT3B0aW9uYWw8V2ViUHJl
ZmVyZW5jZXNTdG9yZT4gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXM7CiAgICAgT3B0aW9uYWw8
VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllcj4gbV91c2VyQ29udGVudENvbnRyb2xsZXJJ
REZvclNlcnZpY2VXb3JrZXI7CkBAIC02MzgsNyArNjAzLDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiBtX2F1dG9tYXRpb25DbGllbnQ7CiAg
ICAgVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+IG1fZG93bmxvYWRDbGllbnQ7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+IG1faGlzdG9y
eUNsaWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogCiAgICAgUmVmUHRyPFdlYkF1
dG9tYXRpb25TZXNzaW9uPiBtX2F1dG9tYXRpb25TZXNzaW9uOwogCkBAIC02NzAsOCArNjM0LDYg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQgeyBmYWxzZSB9Owog
ICAgIGRvdWJsZSBtX21lbW9yeVNhbXBsZXJJbnRlcnZhbCB7IDE0MDAuMCB9OwogCi0gICAgUmVm
UHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRlRGF0YVN0b3JlOwotCiAgICAg
dHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIqLCBSZWZQdHI8V2ViQ29udGV4dFN1cHBsZW1lbnQ+
LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4gV2ViQ29udGV4dFN1cHBsZW1lbnRNYXA7CiAgICAgV2Vi
Q29udGV4dFN1cHBsZW1lbnRNYXAgbV9zdXBwbGVtZW50czsKIApAQCAtNzAzLDggKzY2NSw2IEBA
IHByaXZhdGU6CiAKICAgICBib29sIG1fcHJvY2Vzc1Rlcm1pbmF0aW9uRW5hYmxlZCB7IHRydWUg
fTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQ
cm9jZXNzOwotCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPERpY3Rpb25hcnlDYWxsYmFj
az4+IG1fZGljdGlvbmFyeUNhbGxiYWNrczsKIAogICAgIGJvb2wgbV9tZW1vcnlDYWNoZURpc2Fi
bGVkIHsgZmFsc2UgfTsKQEAgLTcxMyw3ICs2NzMsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9h
bHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHk7CiAgICAgYm9vbCBtX3Nob3VsZFRha2VVSUJh
Y2tncm91bmRBc3NlcnRpb247CiAgICAgYm9vbCBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2hvdWxkTWFrZU5leHRO
ZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nIHsgZmFsc2UgfTsKICAgICBib29sIG1f
dGNjUHJlZmVyZW5jZUVuYWJsZWQgeyBmYWxzZSB9OwogCiAgICAgVXNlck9ic2VydmFibGVQYWdl
Q291bnRlciBtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXI7CkBAIC04MDUsMzIgKzc2NCwxNCBA
QCBwcml2YXRlOgogI2Vsc2UKICAgICBib29sIG1faXNEZWxheWVkV2ViUHJvY2Vzc0xhdW5jaERp
c2FibGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgbV91c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzIHsgZmFsc2UgfTsKKyAgICBzdGF0aWMgYm9vbCBzX3VzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3M7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQogICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IG1fZG9tYWluc1dpdGhV
c2VySW50ZXJhY3Rpb247CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIE9TT2Jq
ZWN0UHRyPHhwY19vYmplY3RfdD4gbV9lbmRwb2ludE1lc3NhZ2U7Ci0jZW5kaWYKIH07CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5n
UHJvY2VzcyhUJiYgbWVzc2FnZSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25l
dHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1
bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdl
KSwgMCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZW5kVG9BbGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSkKIHsKICAgICBzaXplX3QgcHJvY2Vz
c0NvdW50ID0gbV9wcm9jZXNzZXMuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgs
NiArMjY4LDkgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnNldFdlYnNpdGVEYXRhU3Rvcgogewog
ICAgIEFTU0VSVCghbV93ZWJzaXRlRGF0YVN0b3JlKTsKICAgICBtX3dlYnNpdGVEYXRhU3RvcmUg
PSAmZGF0YVN0b3JlOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGRhdGFTdG9yZS5zZW5kTmV0
d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcygqdGhpcyk7CisjZW5kaWYKICAgICB1
cGRhdGVSZWdpc3RyYXRpb25XaXRoRGF0YVN0b3JlKCk7CiAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UHJvY2Vzczo6U2V0V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMocHJvY2Vzc1Bvb2woKS53ZWJQ
cm9jZXNzRGF0YVN0b3JlUGFyYW1ldGVycygqdGhpcywgZGF0YVN0b3JlKSksIDApOwogfQpAQCAt
NzM4LDcgKzc0MSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXRQbHVnaW5Qcm9jZXNzQ28K
IAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihNZXNz
YWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5
ZWRSZXBseSYmIHJlcGx5KQogewotICAgIG1fcHJvY2Vzc1Bvb2wtPmdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUo
KS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKnRoaXMsIFdURk1vdmUocmVwbHkpKTsKIH0K
IAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKQEAgLTk1NSw5ICs5NTgsOCBAQCB2b2lkIFdlYlBy
b2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nCiAgICAgfQogCiAjaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgYXV0byBlbmRwb2ludE1lc3NhZ2UgPSBwcm9jZXNzUG9vbCgpLnhwY0VuZHBvaW50
TWVzc2FnZSgpOwotICAgIGlmIChlbmRwb2ludE1lc3NhZ2UpCi0gICAgICAgIHhwY19jb25uZWN0
aW9uX3NlbmRfbWVzc2FnZShjb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwgZW5kcG9pbnRN
ZXNzYWdlLmdldCgpKTsKKyAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQorICAgICAgICBtX3dl
YnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNz
KCp0aGlzKTsKICNlbmRpZgogCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fd2ViQ29ubmVjdGlvbik7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tp
ZVN0b3JlLmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDYg
QEAgbmFtZXNwYWNlIEFQSSB7CiBIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0Rh
dGFTdG9yZSh3ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUt
PnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3Jl
Ojp+SFRUUENvb2tpZVN0b3JlKCkKQEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+
SFRUUENvb2tpZVN0b3JlKCkKICAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAg
ICBBU1NFUlQoIW1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9j
b29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vz
c1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJB
cHBCb3VuZENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC04MSwzMyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZp
bHRlckFwcEJvdW5kQ29vawogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0g
ICAgICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGFsbENvb2tpZXM7Ci0gICAgICAgIGlmICht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSkKLSAgICAgICAgICAgIGFsbENvb2tpZXMgPSBnZXRBbGxEZWZhdWx0VUlQcm9j
ZXNzQ29va2llU3RvcmVDb29raWVzKCk7Ci0gICAgICAgIGFsbENvb2tpZXMuYXBwZW5kVmVjdG9y
KG1fb3duaW5nRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLQotICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgYWxsQ29va2ll
c10gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoYWxsQ29v
a2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICB9KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmdldEFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwb29sID0gV1RGTW92ZShwb29sKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBjb29raWVNYW5h
Z2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigp
OworICAgIGNvb2tpZU1hbmFnZXIuZ2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5k
Q29va2llcyhjb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9
CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjo6VVJMJiYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkKLSAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0KLSAgICBhdXRvKiBjb29raWVN
YW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2Vy
ID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwor
ICAgIGNvb2tpZU1hbmFnZXIuZ2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIHVybCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiYgY29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2ll
cyhjb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC0x
MTUsNzggKzk0LDI5IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjoK
IHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgYXBwQm91bmRDb29raWVzKSBtdXRhYmxlIHsKLSAg
ICAgICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tp
ZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgICAgIGlmICghcG9vbCkgewotICAgICAgICAgICAg
Zm9yIChhdXRvJiBjb29raWUgOiBhcHBCb3VuZENvb2tpZXMpIHsKLSAgICAgICAgICAgICAgICAv
LyBGSVhNRTogcGVuZGluZ0Nvb2tpZXMgdXNlZCBmb3IgZGVmYXVsdFNlc3Npb24gYmVjYXVzZSBz
ZXNzaW9uIGNvb2tpZXMgY2Fubm90IGJlIHByb3BhZ2F0ZWQgdG8gTmV0d29yayBQcm9jZXNzIHdp
dGggdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuCi0gICAgICAgICAgICAgICAgaWYg
KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgICAgICAgICAgc2V0
Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5hZGRQZW5k
aW5nQ29va2llKGNvb2tpZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9v
bC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAg
Y29va2llTWFuYWdlci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IGFwcEJvdW5kQ29va2llcywgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOworICAgICAgICBhdXRvJiBjb29raWVN
YW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdl
cigpOworICAgICAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCBhcHBCb3VuZENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZShjb25z
dCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+
cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkg
ewotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAg
ICAgZGVsZXRlQ29va2llRnJvbURlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+cmVtb3ZlUGVuZGlu
Z0Nvb2tpZShjb29raWUpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7
Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgW3Bv
b2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAg
IH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29y
a1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29r
aWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tp
ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9y
YWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5n
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAgZGVsZXRl
Q29va2llc0luRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVu
dDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5k
ZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgYXV0
byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNv
b2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUFsbENvb2tpZXMobV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKICAgICAvLyBGSVhNRTogVGhlIENvbXBsZXRpb25I
YW5kbGVyIHNob3VsZCBiZSBwYXNzZWQgdG8gV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVB
bGxDb29raWVzLgogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9v
bCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRp
b25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBzZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUocG9saWN5KTsKLSAgICAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5z
dXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1h
bmFnZXItPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9
KTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQ
cm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1
c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTIyNywyMSArMTU3LDcgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2
ZXIoTwogCiAgICAgbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA9IG1ha2VVbmlxdWU8QVBJ
V2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI+KCp0aGlzKTsKIAotICAgIGF1dG8qIHBvb2wg
PSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9u
cygpOwotCi0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIEFTU0VSVCghbV9vYnNlcnZpbmdVSVBy
b2Nlc3NDb29raWVzKTsKLQotICAgICAgICAvLyBMaXN0ZW4gZm9yIGNvb2tpZSBub3RpZmljYXRp
b25zIGluIHRoZSBVSVByb2Nlc3MgaW4gdGhlIG1lYW50aW1lLgotICAgICAgICBzdGFydE9ic2Vy
dmluZ0NoYW5nZXNUb0RlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShbdGhpc10gKCkgewotICAg
ICAgICAgICAgY29va2llc0RpZENoYW5nZSgpOwotICAgICAgICB9KTsKLQotICAgICAgICBtX29i
c2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eSA9ICZtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5h
Z2VyKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZl
cihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9i
c2VydmVyKTsKIH0KIApAQCAtMjc2LDQ2ICsxOTIsMTAgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6
OmNvb2tpZXNEaWRDaGFuZ2UoKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJE
ZXN0cm95ZWQoKQogewogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnVucmVnaXN0
ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFn
ZXJQcm94eU9ic2VydmVyKTsKLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbnVs
bHB0cjsKLQotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xG
b3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gcG9vbC0+c3VwcGxl
bWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNv
b2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rl
ck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdl
clByb3h5T2JzZXJ2ZXIpOwogfQogCi12b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JO
ZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIEFTU0VSVCghbV9wcm9jZXNzUG9v
bENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlv
bkxpc3RlbmVySWRlbnRpZmllciA9IFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclByb2Nlc3NQb29s
Q3JlYXRpb25MaXN0ZW5lcihbdGhpc10oV2ViUHJvY2Vzc1Bvb2wmIG5ld1Byb2Nlc3NQb29sKSB7
Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPmlzQXNzb2NpYXRlZFByb2Nlc3NQb29s
KG5ld1Byb2Nlc3NQb29sKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBOb3cg
dGhhdCBhbiBhc3NvY2lhdGVkIHByb2Nlc3MgcG9vbCBleGlzdHMsIHdlIG5lZWQgdG8gZmx1c2gg
dGhlIFVJIHByb2Nlc3MgY29va2llIHN0b3JlCi0gICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBhbnkg
Y2hhbmdlcyBhcmUgcmVmbGVjdGVkIHdpdGhpbiB0aGUgbmV3IHByb2Nlc3MgcG9vbC4KLSAgICAg
ICAgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgbmV3UHJvY2Vz
c1Bvb2wuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQotICAgICAgICBpZiAobV9jb29raWVNYW5h
Z2VyUHJveHlPYnNlcnZlcikgewotICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQ
cm94eSA9IG5ld1Byb2Nlc3NQb29sLnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7Ci0gICAgICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdp
c3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFu
YWdlclByb3h5T2JzZXJ2ZXIpOwotICAgICAgICB9Ci0gICAgICAgIHVucmVnaXN0ZXJGb3JOZXdQ
cm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBIVFRQQ29va2ll
U3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAg
IGlmIChtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpCi0gICAgICAgIFdl
YlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKG1fcHJv
Y2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29s
Q3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSAwOwotfQotCiAjaWYgIVBMQVRGT1JNKENPQ09B
KQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
KCkgeyB9CiBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBIVFRQQ29va2llU3RvcmU6OmdldEFsbERl
ZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKSB7IHJldHVybiB7IH07IH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgJ
KHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQ
Q29va2llU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtODMsOSArODMsNiBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmKTsK
IAotICAgIHZvaWQgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAg
ICB2b2lkIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLQogICAg
IHZvaWQgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKICAgICBzdGF0aWMgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29v
a2llcygpOwogICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZUluRGVmYXVsdFVJUHJvY2Vzc0Nvb2tp
ZVN0b3JlKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MTEsMTEgKzQxMSw2IEBAIHZvaWQgV0tDb250ZXh0UHJlY29ubmVjdFRvU2VydmVyKFdLQ29udGUK
IHsKIH0KIAotV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0
Ojp0b0ltcGwoY29udGV4dFJlZiktPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCkpOwotfQotCiBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0
ZURhdGFTdG9yZShXS0NvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdLV2Vic2l0ZURhdGFTdG9y
ZUdldERlZmF1bHREYXRhU3RvcmUoKTsKQEAgLTUyNywxMyArNTIyLDYgQEAgdm9pZCBXS0NvbnRl
eHRTZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlYwogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRS
ZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChlbmFibGUpOwog
fQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdv
cmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgYWxsb3dzKQotewotI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+c2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0K
LQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNo
ZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEko
JldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMo
KS5sZWFrUmVmKCkpOwpAQCAtNTc1LDIxICs1NjMsMTEgQEAgdm9pZCBXS0NvbnRleHRTZXRGb250
QWxsb3dMaXN0KFdLQ29udGV4dAogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRG
b250QWxsb3dMaXN0KFdlYktpdDo6dG9JbXBsKGFycmF5UmVmKSk7CiB9CiAKLXZvaWQgV0tDb250
ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAg
V2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0K
IHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmIGNvbnRl
eHQpCiB7CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZVNlcnZpY2VXb3Jr
ZXJzKCk7CiB9CiAKLVByb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9JbXBs
KGNvbnRleHRSZWYpLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKLX0KLQogdm9pZCBXS0Nv
bnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4oV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5n
UmVmIGRvbWFpblJlZiwgV0tTdHJpbmdSZWYgbmFtZVJlZiwgV0tBcnJheVJlZiBtaW1lVHlwZXNS
ZWYsIFdLQXJyYXlSZWYgZXh0ZW5zaW9uc1JlZikKIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKQEAgLTYxOSwxMiArNTk3LDExIEBAIHZvaWQgV0tDb250ZXh0Q2xlYXJDdXJyZW50
TW9kaWZpZXJTdGF0ZUYKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+Y2xlYXJDdXJy
ZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBib29s
IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCit2b2lkIFdLQ29udGV4dFNldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoV0tDb250ZXh0UmVmLCBib29sIHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZikt
PnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2Vzcyk7CisgICAgV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIH0K
IAotdm9pZCBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYg
Y29udGV4dFJlZiwgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3RvcmUpCit2b2lk
IFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiwgV0tXZWJz
aXRlRGF0YVN0b3JlUmVmKQogewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRQ
cmltYXJ5RGF0YVN0b3JlKCpXZWJLaXQ6OnRvSW1wbCh3ZWJzaXRlRGF0YVN0b3JlKSk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaAkocmV2aXNpb24g
MjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNiBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRT
dG9wTWVtb3J5U2FtcGxlCiBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4
dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJF
Q0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0
b3JlKTsKIAogV0tfRVhQT1JUIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0
R2V0QXBwbGljYXRpb25DYWNoZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJ
X0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0
RGF0YVN0b3JlKTsKLVdLX0VYUE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29v
a2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdL
X0VYUE9SVCBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1h
bmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVm
IFdLQ29udGV4dEdldEljb25EYXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBP
UlQgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFn
ZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9S
RVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgJ
KHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29u
dGV4dFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtODMsMTEgKzgzLDggQEAgV0tfRVhQT1JU
IHZvaWQgV0tDb250ZXh0V2FybUluaXRpYWxQcm9jZQogLy8gQXQgc29tZSBwb2ludCBpdCBzaG91
bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJv
Y2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRUZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250
ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmKTsKIAotV0tfRVhQT1JUIHZv
aWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVz
dGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0eXBlZGVmIHZvaWQgKCpXS0NvbnRleHRJbnZh
bGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSk7CiBXS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKFdLQ29udGV4dEludmFsaWRN
ZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VGdW5jdGlvbik7CiAgICAgCkBAIC05Nyw4ICs5
NCw2IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEZvbnRBbGxvd0xpc3QKIAogV0tfRVhQ
T1JUIHZvaWQgV0tDb250ZXh0UHJlY29ubmVjdFRvU2VydmVyKFdLQ29udGV4dFJlZiBjb250ZXh0
LCBXS1VSTFJlZiBzZXJ2ZXJVUkwpIFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiAKLVdLX0VYUE9SVCBX
S1Byb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tDb250ZXh0
UmVmIGNvbnRleHQpOwotCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVn
aW4oV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLU3RyaW5nUmVmIGRvbWFpbiwgV0tTdHJpbmdSZWYg
bmFtZSwgV0tBcnJheVJlZiBtaW1lVHlwZXMsIFdLQXJyYXlSZWYgZXh0ZW5zaW9ucyk7CiBXS19F
WFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhclN1cHBvcnRlZFBsdWdpbnMoV0tDb250ZXh0UmVmIGNv
bnRleHQpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJ
KHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCw2ICszOTgsMTEgQEAgdWludDY0X3QgV0tQYWdl
R2V0UmVuZGVyVHJlZVNpemUoV0tQYWdlUgogICAgIHJldHVybiB0b0ltcGwocGFnZSktPnJlbmRl
clRyZWVTaXplKCk7CiB9CiAKK1dLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1BhZ2VHZXRXZWJzaXRl
RGF0YVN0b3JlKFdLUGFnZVJlZiBwYWdlKQoreworICAgIHJldHVybiB0b0FQSSgmdG9JbXBsKHBh
Z2UpLT53ZWJzaXRlRGF0YVN0b3JlKCkpOworfQorCiBXS0luc3BlY3RvclJlZiBXS1BhZ2VHZXRJ
bnNwZWN0b3IoV0tQYWdlUmVmIHBhZ2VSZWYpCiB7CiAgICAgcmV0dXJuIHRvQVBJKHRvSW1wbChw
YWdlUmVmKS0+aW5zcGVjdG9yKCkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tQYWdlLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDggQEAgV0tfRVhQT1JU
IGRvdWJsZSBXS1BhZ2VHZXRFc3RpbWF0ZWRQcm9ncgogCiBXS19FWFBPUlQgdWludDY0X3QgV0tQ
YWdlR2V0UmVuZGVyVHJlZVNpemUoV0tQYWdlUmVmIHBhZ2UpOwogCitXS19FWFBPUlQgV0tXZWJz
aXRlRGF0YVN0b3JlUmVmIFdLUGFnZUdldFdlYnNpdGVEYXRhU3RvcmUoV0tQYWdlUmVmIHBhZ2Up
OworCiBXS19FWFBPUlQgV0tJbnNwZWN0b3JSZWYgV0tQYWdlR2V0SW5zcGVjdG9yKFdLUGFnZVJl
ZiBwYWdlKTsKIAogV0tfRVhQT1JUIFdLU3RyaW5nUmVmIFdLUGFnZUNvcHlVc2VyQWdlbnQoV0tQ
YWdlUmVmIHBhZ2UpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJBUElBcnJheS5oIgog
I2luY2x1ZGUgIkFQSUhUVFBDb29raWVTdG9yZS5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNz
UHJveHkuaCIKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNs
dWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0RpY3Rpb25hcnkuaCIKQEAgLTY5LDYgKzcw
LDE2IEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1dlYnNpdGVEYXRhU3RvcmUKICAgICByZXR1
cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoKldlYktp
dDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLCBzZXNzaW9uSUQpLmxlYWtSZWYoKSk7CiB9CiAKK3Zv
aWQgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0
YVN0b3JlUmVmIGRhdGFTdG9yZSkKK3sKKyAgICBXZWJLaXQ6OnRvSW1wbChkYXRhU3RvcmUpLT50
ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworfQorCitXS1Byb2Nlc3NJRCBXS1dlYnNpdGVEYXRh
U3RvcmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRh
dGFTdG9yZSkKK3sKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoZGF0YVN0b3JlKS0+bmV0d29y
a1Byb2Nlc3MoKS5wcm9jZXNzSWRlbnRpZmllcigpOworfQorCiB2b2lkIFdLV2Vic2l0ZURhdGFT
dG9yZVJlbW92ZUlUUERhdGFGb3JEb21haW4oV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9y
ZVJlZiwgV0tTdHJpbmdSZWYgaG9zdCwgdm9pZCogY29udGV4dCwgV0tXZWJzaXRlRGF0YVN0b3Jl
UmVtb3ZlSVRQRGF0YUZvckRvbWFpbkZ1bmN0aW9uIGNhbGxiYWNrKQogewogI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAkocmV2aXNpb24gMjY3NTM2
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVm
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDEzIEBACiAjaW5jbHVkZSA8V2ViS2l0L1dL
QmFzZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS0RlcHJlY2F0ZWQuaD4KIAorI2lmIGRlZmluZWQo
V0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyKQordHlwZWRlZiBpbnQgV0tQcm9jZXNzSUQ7CisjZWxz
ZQorI2luY2x1ZGUgPHVuaXN0ZC5oPgordHlwZWRlZiBwaWRfdCBXS1Byb2Nlc3NJRDsKKyNlbmRp
ZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCkBAIC01MCw2ICs1
NywxMSBAQCBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRBbGxvCiAKIFdLX0VY
UE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tXZWJz
aXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZik7CiAKK1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0
ZURhdGFTdG9yZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRh
dGFTdG9yZSk7CitXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3
b3JrUHJvY2VzcyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKKworV0tfRVhQT1JU
IFdLUHJvY2Vzc0lEIFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmll
cihXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKKwogV0tfRVhQT1JUIGJvb2wgV0tX
ZWJzaXRlRGF0YVN0b3JlR2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJzaXRl
RGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZik7CiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRh
U3RvcmVTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChXS1dlYnNpdGVEYXRhU3RvcmVS
ZWYgZGF0YVN0b3JlUmVmLCBib29sIGVuYWJsZSk7CiB0eXBlZGVmIHZvaWQgKCpXS1dlYnNpdGVE
YXRhU3RvcmVTdGF0aXN0aWNzRXBoZW1lcmFsRnVuY3Rpb24pKGJvb2wgaXNFcGhlbWVyYWwsIHZv
aWQqIGZ1bmN0aW9uQ29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTQwNiwyOCArNDA2LDYgQEAgLSAodm9pZClfY2xlYXJTdXBwb3J0ZWRQbHVnaW5z
CiAgICAgX3Byb2Nlc3NQb29sLT5jbGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIH0KIAotLSAodm9p
ZClfdGVybWluYXRlTmV0d29ya1Byb2Nlc3MKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0KLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxT
dXNwZW5kSW1taW5lbnRseQotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOwotfQotCi0tICh2b2lkKV9zZW5kTmV0
d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5k
bGVyCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNw
ZW5kRm9yVGVzdGluZyhbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlv
bkhhbmRsZXIpXSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7Ci19Ci0K
LS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQotewotICAgIF9wcm9jZXNzUG9v
bC0+c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7Ci19Ci0KIC0gKHZvaWQpX3Rlcm1pbmF0
ZVNlcnZpY2VXb3JrZXJzCiB7CiAgICAgX3Byb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycygpOwpAQCAtNDM1LDEyICs0MTMsNyBAQCAtICh2b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycwogCiAtICh2b2lkKV9zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOihCT09M
KXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MKIHsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNl
dFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyk7Ci19Ci0KLS0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIKLXsKLSAg
ICByZXR1cm4gX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKKyAgICBX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCiAtIChwaWRfdClfcHJld2Fy
bWVkUHJvY2Vzc0lkZW50aWZpZXIKQEAgLTQ2NywxMSArNDQwLDYgQEAgLSAodm9pZClfbWFrZU5l
eHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvcgogICAgIF9wcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFr
ZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcodHJ1ZSk7CiB9CiAKLS0gKHZvaWQp
X21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZwotewotICAgIF9wcm9j
ZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nKHRydWUpOwotfQotCiAtIChCT09MKV9oYXNQcmV3YXJtZWRXZWJQcm9jZXNzCiB7CiAgICAg
Zm9yIChhdXRvJiBwcm9jZXNzIDogX3Byb2Nlc3NQb29sLT5wcm9jZXNzZXMoKSkgewpAQCAtNTYw
LDE4ICs1MjgsNiBAQCAtICh2b2lkKV9zZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hCiAg
ICAgX3Byb2Nlc3NQb29sLT5zZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZChlbmFi
bGVkKTsKIH0KIAotLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNr
Z3JvdW5kCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJh
Y2tncm91bmQpOwotfQotCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNl
cnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzCi17Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQot
ICAgIF9wcm9jZXNzUG9vbC0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAtIChp
ZCA8X1dLR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRlcj4pX2NvcmVMb2NhdGlvblByb3Zp
ZGVyCiB7CkBAIC02MDQsMTEgKzU2MCw2IEBAIC0gKHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2lu
c0luV2ViUHJvY2UKICAgICB9KTsKIH0KIAotLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQKLXsKLSAgICByZXR1cm4g
X3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhlbnRp
dGxlbWVudCk7Ci19Ci0KIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90
ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVjdGlvblNwYWNlCiB7CiAg
ICAgX3Byb2Nlc3NQb29sLT5jbGVhclBlcm1hbmVudENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNw
YWNlKFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZShwcm90ZWN0aW9uU3BhY2UpKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQ
b29sUHJpdmF0ZS5oCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtODcs
MTQgKzg3LDkgQEAKIC0gKF9XS0Rvd25sb2FkICopX3Jlc3VtZURvd25sb2FkRnJvbURhdGE6KE5T
RGF0YSAqKXJlc3VtZURhdGEgd2Vic2l0ZURhdGFTdG9yZTooV0tXZWJzaXRlRGF0YVN0b3JlICop
ZGF0YVN0b3JlICBwYXRoOihOU1N0cmluZyAqKXBhdGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dl
YlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4gU2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoaWxl
IG5vIHdlYiBjb250ZW50IHByb2Nlc3NlcyBhcmUgcnVubmluZy4KLS0gKHZvaWQpX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkp
OwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwot
LSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9pZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4wKSk7CiAKIC8vIFRlc3Qgb25s
eS4KLS0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMyksIGlvcygxMS4wKSk7CiAtIChwaWRfdClfcHJld2FybWVkUHJvY2Vzc0lkZW50
aWZpZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIC8vIFRl
c3Qgb25seS4KQEAgLTEwNiw3ICsxMDEsNiBAQAogLSAoc2l6ZV90KV9zZXJ2aWNlV29ya2VyUHJv
Y2Vzc0NvdW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogLSAo
dm9pZClfc3luY05ldHdvcmtQcm9jZXNzQ29va2llcyBXS19BUElfREVQUkVDQVRFRF9XSVRIX1JF
UExBQ0VNRU5UKCJXS0hUVFBDb29raWVTdG9yZS5fZmx1c2hDb29raWVzVG9EaXNrV2l0aENvbXBs
ZXRpb25IYW5kbGVyOiIsIG1hY29zKDEwLjEzLCBXS19NQUNfVEJBKSwgaW9zKDExLjAsIFdLX0lP
U19UQkEpKTsKIC0gKHZvaWQpX21ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwotLSAodm9pZClfbWFr
ZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogLSAoTlNVSW50ZWdlcilfbWF4aW11bVN1c3BlbmRl
ZFBhZ2VDb3VudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwog
LSAoTlNVSW50ZWdlcilfcHJvY2Vzc0NhY2hlQ2FwYWNpdHkgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKE5TVUludGVnZXIpX3Byb2Nlc3NDYWNoZVNpemUg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CkBAIC0xMjIsMTMgKzEx
NiwxMCBAQAogLSAodm9pZClfcHJlY29ubmVjdFRvU2VydmVyOihOU1VSTCAqKXNlcnZlclVSTCBX
S19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKCJXS1dlYlZpZXcuX3ByZWNvbm5lY3RU
b1NlcnZlciIsIG1hY29zKDEwLjEzLjQsIFdLX01BQ19UQkEpLCBpb3MoMTEuMywgV0tfSU9TX1RC
QSkpOwogCiAvLyBUZXN0IG9ubHkuCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTMuNCksIGlvcygxMS4zKSk7CiAtICh2b2lkKV9nZXRBY3RpdmVQYWdlc09yaWdpbnNJbldlYlBy
b2Nlc3NGb3JUZXN0aW5nOihwaWRfdClwaWQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNB
cnJheTxOU1N0cmluZyAqPiAqKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwotLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50Q3Jl
ZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVj
dGlvblNwYWNlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogCiBA
cHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0Nvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdF
bmFibGVkLCBzZXR0ZXI9X3NldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkOikgQk9P
TCBfY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQgV0tfQVBJX0RFUFJFQ0FURUQoIlBh
cnRpdGlvbmVkIGNvb2tpZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQiLCBtYWNvcygxMC4xMi4z
LCAxMC4xNC40KSwgaW9zKDEwLjMsIDEyLjIpKTsKLS0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwg
aW9zKDEzLjApKTsKIAogLy8gVGVzdCBvbmx5LgogLSAodm9pZClfc2VlZFJlc291cmNlTG9hZFN0
YXRpc3RpY3NGb3JUZXN0aW5nV2l0aEZpcnN0UGFydHk6KE5TVVJMICopZmlyc3RQYXJ0eVVSTCB0
aGlyZFBhcnR5OihOU1VSTCAqKXRoaXJkUGFydHlVUkwgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRp
b246KEJPT0wpc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24gY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0JKHJldmlzaW9u
IDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVE
YXRhU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTYxNyw2ICs2MTcsMTEgQEAgLSAodm9pZClf
cmVuYW1lT3JpZ2luOihOU1VSTCAqKW9sZE5hbWUgdAogICAgIH0pOwogfQogCistIChCT09MKV9u
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxl
bWVudAoreworICAgIHJldHVybiBfd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcoZW50aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0
ZURhdGFTdG9yZURlbGVnYXRlPilfZGVsZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdl
dCgpLmdldCgpOwpAQCAtNjY4LDQgKzY3Myw0MiBAQCAtICh2b2lkKV9hcHBCb3VuZFNjaGVtZXM6
KHZvaWQgKF4pKE5TQXJyCiAjZW5kaWYKIH0KIAorLSAodm9pZClfdGVybWluYXRlTmV0d29ya1By
b2Nlc3MKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3Mo
KTsKK30KKworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9p
ZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5z
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhbY29tcGxldGlvbkhh
bmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseQoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7CisKK30KKworLSAo
dm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lCit7CisgICAgX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOworfQorCistICh2b2lkKV9zeW50aGVz
aXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQKK3sKKyAgICBfd2Vic2l0ZURhdGFT
dG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91
bmQpOworfQorCistIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCit7CisgICAgcmV0
dXJuIF93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnByb2Nlc3NJZGVudGlmaWVy
KCk7Cit9CisKKysgKHZvaWQpX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZworeworICAgIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bWFrZU5leHROZXR3b3JrUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCk7Cit9CisKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFT
dG9yZVByaXZhdGUuaAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtODUsOSArODUsMTkgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dlYnNp
dAogCiAtICh2b2lkKV9yZW5hbWVPcmlnaW46KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKilu
ZXdOYW1lIGZvckRhdGFPZlR5cGVzOihOU1NldDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJP
T0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVu
dGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CisKIEBwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dl
YnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2RlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTUpLCBpb3MoMTMuMCkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5
KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0g
KHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQ
cmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3Jr
UHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3Mo
V0tfSU9TX1RCQSkpOworLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCli
YWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CistIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisrICh2b2lkKV9tYWtlTmV4
dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwogQGVuZAogCiBOU19BU1NVTUVfTk9O
TlVMTF9FTkQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIldlYktpdENvb2tpZU1hbmFnZXIuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJv
eHkuaCIKICNpbmNsdWRlICJTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlLmgiCiAjaW5j
bHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFu
YWdlclByaXZhdGUuaCIKQEAgLTU2LDYgKzU3LDEyIEBAIGVudW0gewogfTsKIAogc3RydWN0IF9X
ZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBj
b29raWVNYW5hZ2VyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChkYXRhTWFuYWdlcik7
CisgICAgICAgIHJldHVybiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoZGF0
YU1hbmFnZXIpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIH0KKwogICAg
IFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
ZGF0YU1hbmFnZXIpOwpAQCAtNjQsOCArNzEsNyBAQCBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFn
ZXJQcml2YXRlIHsKIAogICAgIH5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUoKQogICAgIHsK
LSAgICAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldFByb2Nlc3NQb29scyhkYXRhTWFuYWdlcikpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+
c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2Fs
bGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOworICAgICAgICBjb29raWVNYW5hZ2VyKCkuc2V0
Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CiAgICAgfQogCiAg
ICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuYWdlcjsKQEAgLTEzOSwxMSArMTQ1
LDkgQEAgV2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0Q29va2llTWFuYWdlcgogewogICAgIFdl
YktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdl
ci0+cHJpdi0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nl
c3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXIt
PnByaXYtPmRhdGFNYW5hZ2VyKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9l
bWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9Cisg
ICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJh
Y2sobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2ln
bmFsX2VtaXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0
dXJuIG1hbmFnZXI7CiB9CiAKQEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVf
bWFuYWdlcl9zZXRfcGVyc2lzdGVuCiAgICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2Vy
KSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5
PigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVU
RjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkp
OworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE5Miw4ICsx
OTUsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvCiB7CiAgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlcikpOwogCi0g
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFBy
b2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0
UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5h
Z2VyKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQo
KSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKIH0KIAogLyoq
CkBAIC0yMTcsMTQgKzIxOSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2Nl
cHRfcG8KIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyht
YW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7CiAKLSAgICAvLyBUaGUg
cG9saWN5IGlzIHRoZSBzYW1lIGluIGFsbCBwcm9jZXNzIHBvb2xzIGhhdmluZyB0aGUgc2FtZSBz
ZXNzaW9uIElELCBzbyBqdXN0IGFzayBhbnkuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xz
ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKTsKLSAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkgewotICAgICAg
ICBnX3Rhc2tfcmV0dXJuX2ludCh0YXNrLmdldCgpLCBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NF
UFRfTk9fVEhJUkRfUEFSVFkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcHJvY2Vz
c1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZN
b3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgeworICAg
IG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CiAgICAgICAgIGdfdGFza19yZXR1
cm5faW50KHRhc2suZ2V0KCksIHRvV2ViS2l0Q29va2llQWNjZXB0UG9saWN5KHBvbGljeSkpOwog
ICAgIH0pOwogfQpAQCAtMjY5LDExICsyNjQsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9hZGRfY29va2llKFdlCiAgICAgZ19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAgICAgR1Jl
ZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxh
YmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3Jp
dHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MK
LSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0
aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRh
TWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKS0+c2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgeyBXZWJD
b3JlOjpDb29raWUoY29va2llKSB9LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIG1h
bmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNl
c3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0
YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVF
KTsKICAgICB9KTsKIH0KQEAgLTMyMCwxMSArMzExLDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21h
bmFnZXJfZ2V0X2Nvb2tpZXMoVwogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAogICAgIEdS
ZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxs
YWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dy
aXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNz
Ci0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2Ug
dGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3
ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0
YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5h
Z2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVSTChV
UkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25z
dCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIG1hbmFnZXItPnByaXYt
PmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBV
UkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0o
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAgR0xpc3Qq
IGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBjb29r
aWVzKQogICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29raWVzTGlz
dCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzY1LDcgQEAgdm9pZCB3ZWJr
aXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZQogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29v
a2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyht
YW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29r
aWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24g
ZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJv
bSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBw
cm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFu
YWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmRlbGV0ZUNvb2tpZShtYW5hZ2VyLT5wcml2LT5z
ZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RGTW92ZSh0YXNr
KV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLmRlbGV0ZUNvb2tpZSht
YW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNr
ID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNr
LmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCShyZXZpc2lvbiAyNjc1
MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAyLDcgKzQwMiw2IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dFdlYkNvbnRleHRDb25zdHJ1Y3RlZCgKICAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2Vy
ID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcoImxvY2FsLXN0b3Jh
Z2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEoKSwgbnVsbHB0
cikpOwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKGNv
bmZpZ3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRQcmltYXJ5RGF0YVN0b3Jl
KHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJzaXRlRGF0YU1h
bmFnZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1lc3NhZ2VIYW5k
bGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgLy8g
U2luayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRyPFdlYktpdFVzZXJNZXNzYWdl
PiB1c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRlKFdURk1vdmUobWVzc2FnZSks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTQxMCw4ICs0MDksNiBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoCiAgICAgICAgIGdfc2lnbmFsX2VtaXQo
d2ViQ29udGV4dCwgc2lnbmFsc1tVU0VSX01FU1NBR0VfUkVDRUlWRURdLCAwLCB1c2VyTWVzc2Fn
ZS5nZXQoKSwgJnJldHVyblZhbHVlKTsKICAgICB9KTsKIAotICAgIHdlYmtpdFdlYnNpdGVEYXRh
TWFuYWdlckFkZFByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwgKnBy
aXYtPnByb2Nlc3NQb29sKTsKLQogICAgIHByaXYtPnByb2Nlc3NNb2RlbCA9IFdFQktJVF9QUk9D
RVNTX01PREVMX01VTFRJUExFX1NFQ09OREFSWV9QUk9DRVNTRVM7CiAKICNpZiBFTkFCTEUoTUVN
T1JZX1NBTVBMRVIpCkBAIC00MzksMTEgKzQzNiw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNv
bnRleHREaXNwb3NlKEdPYmoKICAgICAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldERvd25sb2Fk
Q2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSk7CiAgICAgfQogCi0g
ICAgaWYgKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlcikgewotICAgICAgICB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJSZW1vdmVQcm9jZXNzUG9vbChwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0
KCksICpwcml2LT5wcm9jZXNzUG9vbCk7Ci0gICAgICAgIHByaXYtPndlYnNpdGVEYXRhTWFuYWdl
ciA9IG51bGxwdHI7Ci0gICAgfQotCiAgICAgaWYgKHByaXYtPmZhdmljb25EYXRhYmFzZSkgewog
ICAgICAgICB3ZWJraXRGYXZpY29uRGF0YWJhc2VDbG9zZShwcml2LT5mYXZpY29uRGF0YWJhc2Uu
Z2V0KCkpOwogICAgICAgICBwcml2LT5mYXZpY29uRGF0YWJhc2UgPSBudWxscHRyOwpAQCAtMTU4
MSw4ICsxNTczLDggQEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfcHJlZmV0Y2hfZG5zKFdlYgog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpKTsKICAg
ICBnX3JldHVybl9pZl9mYWlsKGhvc3RuYW1lKTsKIAotICAgIGlmIChjb250ZXh0LT5wcml2LT5k
bnNQcmVmZXRjaGVkSG9zdHMuYWRkKGhvc3RuYW1lKS5pc05ld0VudHJ5KQotICAgICAgICBjb250
ZXh0LT5wcml2LT5wcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpQcmVmZXRjaEROUyhTdHJpbmc6OmZyb21VVEY4KGhvc3RuYW1lKSkp
OworICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXREYXRhU3RvcmUoY29udGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKKyAg
ICB3ZWJzaXRlRGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlByZWZldGNoRE5TKFN0cmluZzo6ZnJvbVVURjgoaG9zdG5hbWUpKSwgMCk7CiAg
ICAgY29udGV4dC0+cHJpdi0+ZG5zUHJlZmV0Y2hIeXN0ZXJlcmlzLmltcHVsc2UoKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vi
Vmlldy5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTksNyArNzU5LDYg
QEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYgogICAgICAgICB3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHByaXYtPndlYnNp
dGVEYXRhTWFuYWdlci5nZXQoKSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90bHNf
ZXJyb3JzX3BvbGljeShjb250ZXh0RGF0YU1hbmFnZXIpKTsKICAgICAgICAgYXV0byBwcm94eVNl
dHRpbmdzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGNvbnRleHREYXRh
TWFuYWdlcikubmV0d29ya1Byb3h5U2V0dGluZ3MoKTsKICAgICAgICAgd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkuc2V0
TmV0d29ya1Byb3h5U2V0dGluZ3MoV1RGTW92ZShwcm94eVNldHRpbmdzKSk7Ci0gICAgICAgIHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckFkZFByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFu
YWdlci5nZXQoKSwgd2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHByaXYtPmNvbnRleHQu
Z2V0KCkpKTsKICAgICB9CiAKICAgICBpZiAoIXByaXYtPndlYnNpdGVQb2xpY2llcykKQEAgLTk0
NSwxMSArOTQ0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Rpc3Bvc2UoR09iamVjdAog
ICAgICAgICB3ZWJraXRXZWJDb250ZXh0V2ViVmlld0Rlc3Ryb3llZCh3ZWJWaWV3LT5wcml2LT5j
b250ZXh0LmdldCgpLCB3ZWJWaWV3KTsKICAgICB9CiAKLSAgICBpZiAod2ViVmlldy0+cHJpdi0+
d2Vic2l0ZURhdGFNYW5hZ2VyKSB7Ci0gICAgICAgIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlclJl
bW92ZVByb2Nlc3NQb29sKHdlYlZpZXctPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwg
d2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHdlYlZpZXctPnByaXYtPmNvbnRleHQuZ2V0
KCkpKTsKLSAgICAgICAgd2ViVmlldy0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gbnVsbHB0
cjsKLSAgICB9Ci0KICAgICBpZiAod2ViVmlldy0+cHJpdi0+Y3VycmVudFNjcmlwdERpYWxvZykg
ewogICAgICAgICB3ZWJraXRfc2NyaXB0X2RpYWxvZ19jbG9zZSh3ZWJWaWV3LT5wcml2LT5jdXJy
ZW50U2NyaXB0RGlhbG9nKTsKICAgICAgICAgQVNTRVJUKCF3ZWJWaWV3LT5wcml2LT5jdXJyZW50
U2NyaXB0RGlhbG9nKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcAkocmV2aXNpb24g
MjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTEgKzk1LDYgQEAgZW51bSB7
CiB9OwogCiBzdHJ1Y3QgX1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUgewotICAgIH5f
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQo
cHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSk7Ci0gICAgfQotCiAgICAgUmVmUHRyPFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZT4gd2Vic2l0ZURhdGFTdG9yZTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGJh
c2VEYXRhRGlyZWN0b3J5OwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gYmFzZUNhY2hlRGlyZWN0b3J5
OwpAQCAtMTE1LDcgKzExMCw2IEBAIHN0cnVjdCBfV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJp
dmF0ZSAKICAgICBXZWJLaXRUTFNFcnJvcnNQb2xpY3kgdGxzRXJyb3JzUG9saWN5OwogCiAgICAg
R1JlZlB0cjxXZWJLaXRDb29raWVNYW5hZ2VyPiBjb29raWVNYW5hZ2VyOwotICAgIFZlY3RvcjxX
ZWJQcm9jZXNzUG9vbCo+IHByb2Nlc3NQb29sczsKIH07CiAKIFdFQktJVF9ERUZJTkVfVFlQRShX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIsIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlciwgR19U
WVBFX09CSkVDVCkKQEAgLTQ5NCwzMCArNDg4LDEzIEBAIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZSYgd2Via2l0V2Vic2l0ZUQKICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24tPnNldFNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoRmlsZVN5c3RlbTo6c3RyaW5nRnJvbUZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihwcml2LT5zd1JlZ2lzdHJhdGlvbnNEaXJlY3RvcnkuZ2V0KCkpKTsK
ICAgICAgICAgaWYgKHByaXYtPmRvbUNhY2hlRGlyZWN0b3J5KQogICAgICAgICAgICAgY29uZmln
dXJhdGlvbi0+c2V0Q2FjaGVTdG9yYWdlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnN0cmluZ0Zyb21G
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocHJpdi0+ZG9tQ2FjaGVEaXJlY3RvcnkuZ2V0KCkpKTsK
LSAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6Y3JlYXRlKFdURk1vdmUoY29uZmlndXJhdGlvbiksIFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkpOworICAgICAgICBwcml2LT53ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoV1RGTW92ZShjb25maWd1cmF0aW9uKSwgUEFMOjpTZXNz
aW9uSUQ6OmdlbmVyYXRlUGVyc2lzdGVudFNlc3Npb25JRCgpKTsKICAgICAgICAgcHJpdi0+d2Vi
c2l0ZURhdGFTdG9yZS0+c2V0SWdub3JlVExTRXJyb3JzKHByaXYtPnRsc0Vycm9yc1BvbGljeSA9
PSBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKICAgICB9CiAKICAgICByZXR1cm4g
KnByaXYtPndlYnNpdGVEYXRhU3RvcmU7CiB9CiAKLXZvaWQgd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyQWRkUHJvY2Vzc1Bvb2woV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBXZWJQ
cm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCi17Ci0gICAgQVNTRVJUKCFtYW5hZ2VyLT5wcml2LT5w
cm9jZXNzUG9vbHMuY29udGFpbnMoJnByb2Nlc3NQb29sKSk7Ci0gICAgbWFuYWdlci0+cHJpdi0+
cHJvY2Vzc1Bvb2xzLmFwcGVuZCgmcHJvY2Vzc1Bvb2wpOwotfQotCi12b2lkIHdlYmtpdFdlYnNp
dGVEYXRhTWFuYWdlclJlbW92ZVByb2Nlc3NQb29sKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciog
bWFuYWdlciwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotewotICAgIEFTU0VSVChtYW5h
Z2VyLT5wcml2LT5wcm9jZXNzUG9vbHMuY29udGFpbnMoJnByb2Nlc3NQb29sKSk7Ci0gICAgbWFu
YWdlci0+cHJpdi0+cHJvY2Vzc1Bvb2xzLnJlbW92ZUZpcnN0KCZwcm9jZXNzUG9vbCk7Ci19Ci0K
LWNvbnN0IFZlY3RvcjxXZWJQcm9jZXNzUG9vbCo+JiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXRQcm9jZXNzUG9vbHMoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyKQotewotICAg
IHJldHVybiBtYW5hZ2VyLT5wcml2LT5wcm9jZXNzUG9vbHM7Ci19Ci0KIC8qKgogICogd2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldzoKICAqIEBmaXJzdF9vcHRpb25fbmFtZTogbmFtZSBv
ZiB0aGUgZmlyc3Qgb3B0aW9uIHRvIHNldApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdl
clByaXZhdGUuaAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xOSwxMSArMTksNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIldlYlByb2Nl
c3NQb29sLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgogCiBXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmUmIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIqKTsKLXZvaWQgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQWRkUHJv
Y2Vzc1Bvb2woV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiwgV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bCYpOwotdm9pZCB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJSZW1vdmVQcm9jZXNzUG9vbChXZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXIqLCBXZWJLaXQ6OldlYlByb2Nlc3NQb29sJik7Ci1jb25zdCBW
ZWN0b3I8V2ViS2l0OjpXZWJQcm9jZXNzUG9vbCo+JiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXRQcm9jZXNzUG9vbHMoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKik7Ci0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21h
dGlvblNlc3Npb24uY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM5Miw4ICsxMzkyLDggQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xl
Q29vawogCiAgICAgY29va2llLmh0dHBPbmx5ID0gKmh0dHBPbmx5OwogCi0gICAgV2ViQ29va2ll
TWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhw
YWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFj
a10oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyID0gcGFnZS0+
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAg
IGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lv
bklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5k
U3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAtMTQwOSw4ICsxNDA5LDggQEAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPgogCiAgICAgU3RyaW5nIGhvc3QgPSBhY3RpdmVV
UkwuaG9zdCgpLnRvU3RyaW5nKCk7CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tp
ZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2Ut
PndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0Rv
dFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29v
a2llTWFuYWdlciA9IHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmNv
b2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5
QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoaG9zdCkgfSk7CiAKICAgICByZXR1cm4geyB9OwogfQpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgJKHJldmlzaW9uIDI2NzUzNikK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSArNDEsMTEgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiBjbGFzcyBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTsKIAogY2xh
c3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IGZpbmFsIDogcHVibGljIEFQSTo6
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IHsKLXByaXZhdGU6CitwdWJsaWM6CiAgICAgdm9p
ZCBzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkmLCBMZWdhY3lD
dXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBmaW5hbDsK
ICAgICB2b2lkIHN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Jiwg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCkgZmluYWw7CiAgICAgdm9pZCBpbnZhbGlkYXRlKExlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5JikgZmluYWw7Ci0KK3ByaXZhdGU6CiAgICAgSGFz
aE1hcDxMZWdhY3lDdXN0b21Qcm90b2NvbElELCBSZXRhaW5QdHI8V0tDdXN0b21Qcm90b2NvbExv
YWRlcj4+IG1fbG9hZGVyTWFwOwogfTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCShyZXZpc2lvbiAyNjc1MzYp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsOCArMTM0LDkgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJV
c2VyRGVmYXVsdHNJZk5lZWRlZAogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNz
U3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1
cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0
ZURhdGFTdG9yZShbZW5hYmxlZCA9IHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKV0gKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3MoKS5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGVuYWJsZWQpOworICAgIH0pOwogCiAj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVz
c2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkKQEAgLTE2Niw4ICsxNjcsNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUoCiAgICAgaWYgKCFbW05TVXNl
ckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiV2ViS2l0U3VwcHJl
c3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIiXSkKICAgICAgICAgaW5zdGFsbE1lbW9yeVByZXNzdXJl
SGFuZGxlcigpOwogCi0gICAgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1h
a2VVbmlxdWU8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKTsKLQogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBpZiAoIV9N
R0NhY2hlVmFsaWQoKSkgewogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfZ2xv
YmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBeewpAQCAtNDk1
LDIyICs0OTQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAK
ICAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdOwogCi0gICAgewotICAgICAgICBib29sIGlzU2FmYXJpID0gZmFsc2U7Ci0g
ICAgICAgIGJvb2wgaXNNaW5pQnJvd3NlciA9IGZhbHNlOwotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTW9iaWxl
U2FmYXJpKCk7Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlv
bjo6aXNNaW5pQnJvd3NlcigpOwotI2VsaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBpc1NhZmFy
aSA9IFdlYkNvcmU6Ok1hY0FwcGxpY2F0aW9uOjppc1NhZmFyaSgpOwotICAgICAgICBpc01pbmlC
cm93c2VyID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzTWluaUJyb3dzZXIoKTsKLSNlbmRp
ZgotICAgICAgICBpZiAoaXNTYWZhcmkgfHwgaXNNaW5pQnJvd3NlcikgewotICAgICAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuaHR0cFByb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0
cmluZyAqKVdlYktpdDJIVFRQUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
aHR0cHNQcm94eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcg
KilXZWJLaXQySFRUUFNQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAg
ICBwYXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0ID0gYWRvcHRDRihfQ0ZOZXR3b3JrQ29weUFU
U0NvbnRleHQoKSk7CiAKICAgICBwYXJhbWV0ZXJzLnNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1
cmVIYW5kbGVyID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0U3VwcHJlc3NNZW1vcnlQcmVz
c3VyZUhhbmRsZXJEZWZhdWx0c0tleV07CkBAIC01MjQsMTIgKzUwNyw4IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICBOU051bWJlciAqZGF0YWJhc2VFbmFi
bGVkVmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VF
bmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogICAgIGlmIChkYXRhYmFzZUVu
YWJsZWRWYWx1ZSkKICAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9
IGRhdGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIHBhcmFt
ZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZl
cmVuY2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuZW5hYmxl
QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5
OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKV1dOwotCi0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tp
bmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9u
KCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQo
KQpAQCAtNjA4LDExICs1ODcsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzU3VwcHJl
c3Npb25FCiAgICAgcmV0dXJuICFtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIudmFsdWUoKSAm
JiAhbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCk7CiB9
CiAKLWJvb2wgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JU
ZXN0aW5nKGNvbnN0IFN0cmluZyYgZW50aXRsZW1lbnQpCi17Ci0gICAgcmV0dXJuIFdURjo6aGFz
RW50aXRsZW1lbnQoZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCktPnhwY0Nvbm5l
Y3Rpb24oKSwgZW50aXRsZW1lbnQudXRmOCgpLmRhdGEoKSk7Ci19Ci0KICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiBmbG9hdCBXZWJQcm9jZXNzUG9v
bDo6ZGlzcGxheUJyaWdodG5lc3MoKQogewpAQCAtOTQ5LDIzICs5MjMsNCBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpyZWdpc3RlckhpZ2hEeW5hbWljCiB9CiAjZW5kaWYKIAotT1NPYmplY3RQdHI8
eHBjX29iamVjdF90PiBXZWJQcm9jZXNzUG9vbDo6eHBjRW5kcG9pbnRNZXNzYWdlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9lbmRwb2ludE1lc3NhZ2U7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKE9TT2JqZWN0UHRy
PHhwY19vYmplY3RfdD4gZW5kcG9pbnRNZXNzYWdlKQotewotICAgIG1fZW5kcG9pbnRNZXNzYWdl
ID0gZW5kcG9pbnRNZXNzYWdlOwotCi0gICAgZm9yIChhdXRvIHByb2Nlc3MgOiBtX3Byb2Nlc3Nl
cykgewotICAgICAgICBpZiAocHJvY2Vzcy0+c3RhdGUoKSAhPSBBdXhpbGlhcnlQcm9jZXNzUHJv
eHk6OlN0YXRlOjpSdW5uaW5nKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICgh
cHJvY2Vzcy0+Y29ubmVjdGlvbigpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1
dG8gY29ubmVjdGlvbiA9IHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpOwot
ICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbiwgZW5kcG9pbnRN
ZXNzYWdlLmdldCgpKTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
LmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw4ICs3NSw4IEBAIHZv
aWQgRG93bmxvYWRQcm94eTo6Y2FuY2VsKCkKICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2Vz
cyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3du
bG9hZElEKSwgMCk7CisgICAgaWYgKG1fZGF0YVN0b3JlKQorICAgICAgICBtX2RhdGFTdG9yZS0+
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93
bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6aW52YWxp
ZGF0ZSgpCkBAIC0xMDMsMTUgKzEwMywxMyBAQCBXZWJQYWdlUHJveHkqIERvd25sb2FkUHJveHk6
Om9yaWdpbmF0aW5nCiAjaWYgUExBVEZPUk0oQ09DT0EpCiB2b2lkIERvd25sb2FkUHJveHk6OnB1
Ymxpc2hQcm9ncmVzcyhjb25zdCBVUkwmIFVSTCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wp
CisgICAgaWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOwotICAgICAgICBib29sIGNyZWF0
ZWRTYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKFVSTC5m
aWxlU3lzdGVtUGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIGhhbmRs
ZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0
ZWRTYW5kYm94RXh0ZW5zaW9uKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9ncmVzcyhtX2Rvd25sb2FkSUQs
IFVSTCwgaGFuZGxlKSwgMCk7Ci0gICAgfQorICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBo
YW5kbGU7CisgICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6
VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOworICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRi
b3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsKKyAgICBtX2RhdGFTdG9yZS0+
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERv
d25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwogfQogI2VuZGlm
IC8vIFBMQVRGT1JNKENPQ09BKQogCkBAIC0xMzEsMTEgKzEyOSwxMCBAQCB2b2lkIERvd25sb2Fk
UHJveHk6OmRpZFN0YXJ0KGNvbnN0IFJlc291CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYgYXV0
aGVudGljYXRpb25DaGFsbGVuZ2UsIHVpbnQ2NF90IGNoYWxsZW5nZUlEKQogewotICAgIGlmICgh
bV9wcm9jZXNzUG9vbCkKKyAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wgfHwgIW1fZGF0YVN0b3JlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkg
PSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX3Byb2Nlc3NQb29sLT5uZXR3
b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKSksIG51bGxwdHIpOwotCisgICAgYXV0byBhdXRoZW50
aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eTo6Y3Jl
YXRlKFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBjaGFsbGVuZ2VJRCwgbWFrZVJl
ZigqbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpKSwgbnVsbHB0cik7
CiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoKnRoaXMsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuZ2V0KCkp
OwogfQogCkBAIC0xNDYsMTUgKzE0MywxMCBAQCB2b2lkIERvd25sb2FkUHJveHk6OndpbGxTZW5k
UmVxdWVzdChSZXNvCiAKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLndpbGxT
ZW5kUmVxdWVzdCgqdGhpcywgV1RGTW92ZShwcm9wb3NlZFJlcXVlc3QpLCByZWRpcmVjdFJlc3Bv
bnNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXShSZXNvdXJjZVJlcXVl
c3QmJiBuZXdSZXF1ZXN0KSB7CiAgICAgICAgIG1fcmVkaXJlY3RDaGFpbi5hcHBlbmQobmV3UmVx
dWVzdC51cmwoKSk7Ci0KLSAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29s
KQorICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fZGF0YVN0b3JlKQogICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRU
aGlzLT5tX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpOwotICAgICAgICBpZiAoIW5ldHdv
cmtQcm9jZXNzUHJveHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbmV0d29ya1By
b2Nlc3NQcm94eS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNl
bmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOwor
ICAgICAgICBhdXRvJiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVjdGVkVGhpcy0+bV9kYXRh
U3RvcmUtPm5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzUHJveHkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3Rl
Y3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOwogICAgIH0pOwogfQogCkBA
IC0xNzksMTYgKzE3MSwxNCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9u
V2l0CiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
bV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdn
ZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2Vz
dGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBkb3dubG9hZElEID0gZG93bmxvYWRJRF0gKEFsbG93T3ZlcndyaXRlIGFs
bG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsKKyAgICBtX3Byb2Nlc3NQb29sLT5k
b3dubG9hZENsaWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKCp0
aGlzLCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRGaWxlbmFtZShzdWdn
ZXN0ZWRGaWxlbmFtZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRv
d25sb2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0
aW9uKSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlOwogICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGRlc3RpbmF0aW9uLCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgICAg
IGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICAgICAgaWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9h
ZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CisgICAgICAg
IG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQs
IGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBB
bGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CiAgICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAJ
KHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIERvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlNYXAoTmV0
d29ya1Byb2Nlc3NQcm94eSYgcHJvY2VzcykKLSAgICA6IG1fcHJvY2VzcyhtYWtlV2Vha1B0cihw
cm9jZXNzKSkKKyAgICA6IG1fcHJvY2Vzcyhwcm9jZXNzKQogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgICwgbV9zaG91bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJvY2Vzc0hhc0VudGl0bGVtZW50KCJj
b20uYXBwbGUubXVsdGl0YXNraW5nLnN5c3RlbWFwcGFzc2VydGlvbnMiKSkKICNlbmRpZgpAQCAt
NzAsMTQgKzcwLDEyIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxhdGZvcm1EZXN0cm95KCkK
IAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgp
CiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7Cisg
ICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbkRp
ZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBs
aWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKQogewotICAgIGlmIChtX3Byb2Nlc3MpCi0gICAg
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9u
V2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKIH0K
IAogRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShX
ZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZy
YW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCkBA
IC05MiwxMyArOTAsMTIgQEAgRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRl
RAogICAgICAgICBtX2Rvd25sb2FkVUlBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3Nl
cnRpb24+KGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nl
c3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAogICAgICAgICBBU1NFUlQo
IW1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9wcm9jZXNzKTsKLSAgICAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtl
VW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSwg
IldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3
b3JraW5nKTsKKyAgICAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtlVW5p
cXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy5wcm9jZXNzSWRlbnRpZmllcigpLCAiV2Vi
S2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVuYm91bmRlZE5ldHdvcmtp
bmcpOwogCiAgICAgICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiVUlQcm9jZXNz
IHRvb2sgJ1dlYktpdCBkb3dubG9hZHMnIGFzc2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0
d29ya1Byb2Nlc3MiKTsKICAgICB9CiAKLSAgICBtX3Byb2Nlc3MtPmFkZE1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9h
ZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsK
KyAgICBtX3Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKS5kb3du
bG9hZElEKCksIGRvd25sb2FkUHJveHkuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGRvd25sb2FkUHJv
eHk7CiB9CkBAIC0xMDksMTIgKzEwNiw5IEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxv
YWRGaW5pc2hlZCgKIAogICAgIFJFTEVBU0VfTE9HKExvYWRpbmcsICJSZW1vdmluZyBkb3dubG9h
ZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIiwgZG93bmxvYWRJ
RC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJveHkgbWF5IGJlIGhvbGRp
bmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCi0gICAgYXV0byBwcm90
ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsK
LQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CiAKLSAgICBt
X3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CisgICAgbV9w
cm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CiAgICAgZG93bmxv
YWRQcm94eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9kb3dubG9hZHMucmVtb3ZlKGRvd25sb2FkSUQp
OwogCkBAIC0xMzMsMTUgKzEyNywxMyBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmludmFsaWRh
dGUoKQogICAgIGZvciAoY29uc3QgYXV0byYgZG93bmxvYWQgOiBtX2Rvd25sb2Fkcy52YWx1ZXMo
KSkgewogICAgICAgICBkb3dubG9hZC0+cHJvY2Vzc0RpZENsb3NlKCk7CiAgICAgICAgIGRvd25s
b2FkLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25s
b2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKKyAgICAgICAgbV9wcm9jZXNzLnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7CiAgICAgfQogCiAg
ICAgbV9kb3dubG9hZHMuY2xlYXIoKTsKICAgICBtX2Rvd25sb2FkVUlBc3NlcnRpb24gPSBudWxs
cHRyOwogICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbnVsbHB0cjsKICAgICBS
RUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFw
IGludmFsaWRhdGVkIC0gUmVsZWFzZWQgJ1dlYktpdCBkb3dubG9hZHMnIGFzc2VydGlvbnMgZm9y
IFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKLQotICAgIG1fcHJvY2VzcyA9IG51bGxw
dHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCShyZXZpc2lvbiAy
Njc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94
eU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwbGF0Zm9ybUNyZWF0ZSgpOwogICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBX
ZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fcHJvY2VzczsKKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5JiBtX3Byb2Nlc3M7CiAgICAgSGFzaE1hcDxEb3dubG9hZElELCBSZWZQdHI8RG93bmxv
YWRQcm94eT4+IG1fZG93bmxvYWRzOwogCiAgICAgYm9vbCBtX3Nob3VsZFRha2VBc3NlcnRpb24g
eyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94
eS5oIgogCiAjaW5jbHVkZSAiQVBJQ29udGVudFJ1bGVMaXN0LmgiCisjaW5jbHVkZSAiQVBJQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VQcm94eS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdlci5oIgogI2luY2x1
ZGUgIkRvd25sb2FkUHJveHlNYXAuaCIKQEAgLTM1LDYgKzM2LDcgQEAKICNpbmNsdWRlICJMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkxlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNlbmRpZgorI2luY2x1ZGUgIkxlZ2Fj
eUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdv
cmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC00OCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiU2hvdWxk
R3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5o
IgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmgiCisjaW5jbHVkZSAiV2Vi
Q29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCkBA
IC01OCw4ICs2MSwxMCBAQAogI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGEuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3Jl
Q2xpZW50LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaXN0cmFi
bGVEb21haW4uaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKICNpZiBFTkFCTEUoU0VDX0lURU1fU0hJTSkK
QEAgLTcwLDIwICs3NSwxMjIgQEAKICNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4K
ICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwogI2RlZmluZSBNRVNTQUdFX0NIRUNLKGFz
c2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlvbiwgY29ubmVjdGlvbigpKQogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1OZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9v
bCkKLSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShwcm9jZXNzUG9vbC5hbHdheXNSdW5zQXRC
YWNrZ3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJvY2Vzc1Bvb2wocHJvY2Vzc1Bvb2wpCitz
dGF0aWMgSGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5Kj4mIG5ldHdvcmtQcm9jZXNzZXNTZXQo
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5Kj4+IHNldDsKKyAgICBy
ZXR1cm4gc2V0OworfQorCitWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkKK3sKKyAgICBWZWN0b3I8UmVmPE5l
dHdvcmtQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXM7CisgICAgcHJvY2Vzc2VzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobmV0d29ya1Byb2Nlc3Nlc1NldCgpLnNpemUoKSk7CisgICAgZm9yIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA6IG5ldHdvcmtQcm9jZXNzZXNTZXQoKSkKKyAgICAgICAgcHJvY2Vz
c2VzLnVuY2hlY2tlZEFwcGVuZCgqbmV0d29ya1Byb2Nlc3MpOworICAgIHJldHVybiBwcm9jZXNz
ZXM7Cit9CisKK3N0YXRpYyBSZWZQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4mIGRlZmF1bHRQcm9j
ZXNzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPE5ldHdvcmtQcm9jZXNz
UHJveHk+PiBwcm9jZXNzOworICAgIHJldHVybiBwcm9jZXNzLmdldCgpOworfQorCitSZWY8TmV0
d29ya1Byb2Nlc3NQcm94eT4gTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQcm9j
ZXNzKCkKK3sKKyAgICBpZiAoIWRlZmF1bHRQcm9jZXNzKCkpCisgICAgICAgIGRlZmF1bHRQcm9j
ZXNzKCkgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gKmRlZmF1
bHRQcm9jZXNzKCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKCkK
K3sKKyAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpOworICAgIGRpZFRlcm1p
bmF0ZSgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFRlcm1pbmF0ZSgpCit7
CisgICAgaWYgKHRoaXMgPT0gZGVmYXVsdFByb2Nlc3MoKS5nZXQoKSkKKyAgICAgICAgZGVmYXVs
dFByb2Nlc3MoKSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2Vu
ZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91
bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgorICAgIC8v
IFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xhdGlv
biBjaGVjayBvbiBvdXIgQVBJcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgorICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsKKyAgICAg
ICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzXSB7CisgICAgICAgICAgICBzZW5kQ3Jl
YXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcGFyYW1l
dGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUds
b2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOwor
ICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1
cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9u
KCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsK
KyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3Rv
cihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xv
Y2FsKCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0g
Y29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9S
ZWdpc3RlckFzTm9BY2Nlc3MoKSk7CisgICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwoKTsKKyAgICBmb3IgKGF1dG8m
IHNjaGVtZSA6IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFu
ZGxlcnMoKSkKKyAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3Rv
bVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAg
IGlmIChTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29r
aWVTdG9yYWdlRGlyZWN0b3J5KCk7ICFjb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkK
KyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgaWYgKFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJl
Y3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOyAhY29u
dGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVj
dG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OworICAgIGlmIChTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6
OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOyAhcGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHko
KSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURp
cmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFy
ZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyNlbmRpZgorICAgIFdlYlByb2Nl
c3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
KHBhcmFtZXRlcnMpLCAwKTsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xBbHdheXNS
dW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wg
OiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nl
c3NQb29sLT5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGFu
eVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpCit7CisgICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkg
eworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRp
b24oKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoKQorICAgIDog
QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3Vu
ZFByaW9yaXR5KCkpCiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikK
KyAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWVSZWY8TGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogICAgICwgbV9jdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eSgqdGhpcykKKyNlbHNlCisgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudChtYWtlVW5pcXVlUmVmPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQog
I2VuZGlmCi0gICAgLCBtX3Rocm90dGxlcigqdGhpcywgcHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJ
QmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIGFueVByb2Nl
c3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV9jb29raWVN
YW5hZ2VyKFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzKSkKIHsKICAgICBjb25u
ZWN0KCk7CisgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgIHVw
ZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuYWRkKHRo
aXMpOwogfQogCiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgpCkBA
IC05OCw2ICsyMDUsNyBAQCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94
CiAKICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlN
YXAtPmludmFsaWRhdGUoKTsKKyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkucmVtb3ZlKHRoaXMp
OwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vz
c0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuY2hPcHRpb25zKQpAQCAtMTA1LDE1ICsyMTMs
OCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvCiAgICAgbGF1bmNo
T3B0aW9ucy5wcm9jZXNzVHlwZSA9IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6Ok5ldHdv
cms7CiAgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKGxhdW5jaE9w
dGlvbnMpOwogCi0gICAgaWYgKHByb2Nlc3NQb29sKCkuc2hvdWxkTWFrZU5leHROZXR3b3JrUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2woKS5zZXRT
aG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoZmFsc2UpOwor
ICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpzaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1
bmNoRmFpbEZvclRlc3RpbmcoKSkKICAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShQ
TEFZU1RBVElPTikKLSAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NQYXRoID0gbV9wcm9jZXNzUG9v
bC5uZXR3b3JrUHJvY2Vzc1BhdGgoKTsKLSAgICBsYXVuY2hPcHRpb25zLnVzZXJJZCA9IG1fcHJv
Y2Vzc1Bvb2wudXNlcklkKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMTY2
LDEyICsyNjcsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBwSQog
ICAgIH0KIH0KIAotRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93
bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdl
YlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQorRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nl
c3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUs
IFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNv
dXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5
KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAgICAgaWYgKCFtX2Rvd25sb2FkUHJveHlNYXApCiAgICAg
ICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1ha2VVbmlxdWU8RG93bmxvYWRQcm94eU1hcD4oKnRo
aXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94
eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBv
cmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURv
d25sb2FkUHJveHkoZGF0YVN0b3JlLCBwcm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFt
ZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+
IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoV2Vic2l0ZURhdGEpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMjM3LDggKzMzOCwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6Om5ldHdvcmtQcm9jZXNzCiB7CiAgICAgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCi0g
ICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRo
aXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1c2UgdXMgdG8gYmUgZGVsZXRl
ZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CisgICAg
UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IHByb3RlY3RlZFRoaXMoKnRoaXMpOworICAgIGZvciAo
YXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisg
ICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMpOworICAgIGZv
ciAoYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA6IG1fd2Vic2l0ZURhdGFTdG9yZXMpCisgICAgICAg
IHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKIH0KIAogdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjbGVhckNhbGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICsz
NjIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzCiAgICAgaWYg
KGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29k
ZXIpKQotICAgICAgICByZXR1cm47Ci0KICAgICBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NQcm94
eU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAKQEAgLTI3NCw4ICszNzUsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVTeW5jCiAKIHZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKLSAgICBhdXRvIHByb3Rl
Y3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZihtX3Byb2Nlc3NQb29sKTsKLQogICAgIGlmIChtX2Rv
d25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+aW52YWxpZGF0ZSgp
OwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCkBAIC0zMzEsMTEg
KzQzMCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZUF1dGgKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nlc3NQb29s
LmlzU2VydmljZVdvcmtlclBhZ2VJRChwYWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShzZXNzaW9uSUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVu
Z2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6Zm9yTW9z
dFZpc2libGVXZWJQYWdlSWZBbnkoc2Vzc2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywgd2Vha1Ro
aXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSA9IFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVnYWN5VExT
XShhdXRvKiBwYWdlKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTM5MiwxMSArNDg2LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWRGaW5pc2hMYXVuYwogICAgICAgICBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChtX3Byb2Nl
c3NQb29sLnByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSkKLSAgICAgICAgc2V0UHJvY2Vzc1N1
cHByZXNzaW9uRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgogICAgIAogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgaWYgKHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiA9IHRoaXMtPmNvbm5l
Y3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpKQpAQCAtMTIwNSw3ICsxMjk0LDggQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzZXRUaGlyZFBhcnR5QwogfQogdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS5zZXREb21haW5z
V2l0aFVzZXJJbnRlcmFjdGlvbihXVEZNb3ZlKGRvbWFpbnMpKTsKKyAgICBmb3IgKGF1dG8qIHBy
b2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBw
cm9jZXNzUG9vbC0+c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbj4geyBkb21haW5zIH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKQEAgLTEyNTIsNDUgKzEzNDIsMzEgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpmbHVzaENvb2tpZXMoYwogICAgIHNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkZsdXNoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
YWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9yZSkKIHsKLSAgICBt
X3Nlc3Npb25JRHMuYWRkKHN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgbV93ZWJzaXRlRGF0YVN0
b3Jlcy5hZGQoc3RvcmUpOwogCiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUt
PnBhcmFtZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0b3JlLT5zZXNzaW9u
SUQoKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVE
YXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCk7CisgICAgYXV0byBzZXNzaW9uSUQg
PSBzdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JG
aWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7Cisg
ICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNvbHZlZEluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgogICAgIH0KIH0KIAotYm9vbCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpoYXNTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9zZXNzaW9uSURzLmNvbnRhaW5zKHNlc3Npb25JRCk7Ci19Ci0KLXZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFT
dG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMucmVtb3ZlKHNlc3Np
b25JRCk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5yZW1vdmUod2Vic2l0ZURhdGFTdG9yZSk7
CiAKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkRlc3Ryb3lTZXNzaW9uIHsgc2Vzc2lvbklEIH0sIDApOworICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24geyB3ZWJzaXRlRGF0
YVN0b3JlLnNlc3Npb25JRCgpIH0sIDApOwogfQogCiBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3Jl
ID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAgICAgICBpZiAod2Vi
c2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBzZXNzaW9u
SUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0
cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZh
dWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFdlYnNpdGVE
YXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3JhZ2VQYXJhbWV0ZXJz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEzMzcsNyArMTQxMyw3IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVdlYlUKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25u
ZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9t
YWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX3Byb2Nlc3NQb29sLmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgV1RGTW92ZShyZWdpc3Ry
YWJsZURvbWFpbiksIHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
IFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29y
a1Byb2Nlc3MoKnRoaXMsIFJlZ2lzdHJhYmxlRG9tYWluIHtyZWdpc3RyYWJsZURvbWFpbn0sIHNl
c3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OndvcmtlckNvbnRleHRDb25uZWN0aW9uTm9Mb25nZXJOZWVkZWQoV2ViQ29y
ZTo6UHJvY2Vzc0lkZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTE1MDAsMTYgKzE1NzYsMzQgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpwcmVjb25uZWN0VG8oUAogICAgIHNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vzc2lvbklELCB3ZWJQYWdlUHJveHlJ
RCwgd2ViUGFnZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlz
TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0KIAorc3RhdGljIGJvb2wgYW55UHJv
Y2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8qIHBy
b2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAg
IGlmIChwcm9jZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJv
b2wgYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3Ig
KGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwog
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCkKIHsKLSAg
ICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBp
ZiAoYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAg
aWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdyb3VuZEFjdGl2aXR5KG1fYWN0aXZp
dHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9j
ZXNzZXMgPSB0aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGZv
cmVncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91bmQoKSwgMCk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNCYWNr
Z3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3Jv
dW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1Zh
bGlkQmFja2dyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAg
ICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5iYWNrZ3Jv
dW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91bmQgdmlldyhzKSJfcyk7CiAgICAg
ICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRp
b25Ub0JhY2tncm91bmQoKSwgMCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjY3NTM2KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDEyICs0NiwxNyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAjaW5jbHVkZSAiWFBDRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRy
Lmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBGb3JtRGF0YVJlZmVyZW5jZTsK
IH0KIAorbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7
Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xhc3MgU2Vzc2lvbklEOwogfQpAQCAtNzMsOCArNzgs
OCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERv
d25sb2FkUHJveHlNYXA7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJQ
YWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5OwogCiBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyA6
IGJvb2w7CkBAIC04Niw4ICs5MSw5IEBAIHN0cnVjdCBGcmFtZUluZm9EYXRhOwogc3RydWN0IE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFJlc291cmNlTG9hZEluZm87
CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CitzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM7
CiAKLWNsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkgZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQsIHB1YmxpYyBDYW5NYWtl
V2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5
IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhy
b3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4s
IHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB1c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwpAQCAtMTAyLDEyICsxMDgsMTggQEAgcHVibGljOgog
ICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluOwogICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluOwogCi0gICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9v
bCYpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gZGVmYXVsdE5ldHdvcmtQ
cm9jZXNzKCk7CisgICAgc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtQcm9jZXNzUHJveHkpOyB9CiAgICAgfk5ldHdv
cmtQcm9jZXNzUHJveHkoKTsKIAorICAgIHN0YXRpYyBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNz
UHJveHk+PiBhbGxOZXR3b3JrUHJvY2Vzc2VzKCk7CisgICAgCisgICAgdm9pZCB0ZXJtaW5hdGUo
KSBmaW5hbDsKKyAgICB2b2lkIGRpZFRlcm1pbmF0ZSgpOworCiAgICAgdm9pZCBnZXROZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQ
cm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwogCi0gICAg
RG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBh
Z2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsKKyAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3du
bG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBXZWJQcm9jZXNzUG9vbCYsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkq
IG9yaWdpbmF0aW5nUGFnZSk7CiAKICAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNz
aW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFG
ZXRjaE9wdGlvbj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPiYmKTsKICAg
ICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0
ZURhdGFUeXBlPiwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIwNiwxNSArMjE4LDEyIEBAIHB1YmxpYzoK
ICAgICBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSBmaW5hbCB7IHJldHVybiBtX3Rocm90
dGxlcjsgfQogICAgIHZvaWQgdXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwogCi0gICAgV2ViUHJv
Y2Vzc1Bvb2wmIHByb2Nlc3NQb29sKCkgeyByZXR1cm4gbV9wcm9jZXNzUG9vbDsgfQotCiAjaWYg
RU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICB2b2lkIGRpZERlc3Ryb3lXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYpOwogI2Vu
ZGlmCiAKLSAgICB2b2lkIGFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYpOwotICAg
IGJvb2wgaGFzU2Vzc2lvbihQQUw6OlNlc3Npb25JRCkgY29uc3Q7Ci0gICAgdm9pZCByZW1vdmVT
ZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKKyAgICB2b2lkIGFkZFNlc3Npb24oV2Vic2l0ZURhdGFT
dG9yZSYpOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CiAgICAg
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgdm9pZCBjcmVhdGVTeW1MaW5rRm9y
RmlsZVVwZ3JhZGUoY29uc3QgU3RyaW5nJiBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwpAQCAt
MjI5LDYgKzIzOCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5
Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1l
Rm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAKKyAgICB2b2lkIG5ldHdv
cmtQcm9jZXNzQ3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIHZvaWQgcmVzb3VyY2VM
b2FkRGlkU2VuZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVzb3VyY2VMb2FkSW5m
byYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgT3B0aW9uYWw8SVBDOjpGb3JtRGF0YVJl
ZmVyZW5jZT4mJik7CkBAIC0yNDgsNyArMjU5LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0
ZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKICAgICB2b2lkIGNsZWFyQnVuZGxlSWRlbnRpZmllcihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwogCisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyKCkg
eyByZXR1cm4gbV9jb29raWVNYW5hZ2VyLmdldCgpOyB9CisKKyAgICBBUEk6OkN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgeyByZXR1cm4g
bV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuZ2V0KCk7IH0KKworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIHhwY19vYmplY3RfdCB4cGNFbmRwb2ludE1lc3NhZ2UoKSBjb25zdCB7IHJldHVy
biBtX2VuZHBvaW50TWVzc2FnZS5nZXQoKTsgfQorI2VuZGlmCisKIHByaXZhdGU6CisgICAgZXhw
bGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eSgpOworCisgICAgdm9pZCBzZW5kQ3JlYXRpb25QYXJh
bWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisKICAgICAvLyBBdXhpbGlhcnlQcm9jZXNzUHJveHkKICAg
ICBBU0NJSUxpdGVyYWwgcHJvY2Vzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiTmV0d29y
a2luZyJfczsgfQogCkBAIC0yNTYsNyArMjc5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbm5l
Y3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHByb2Nl
c3NXaWxsU2h1dERvd24oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIG5l
dHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgIHZvaWQgY2xlYXJDYWxsYmFja1N0YXRlcygpOwog
CiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKQEAgLTMxMiwxNiArMzM0LDE3IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNl
c3Npb25JRCwgUmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+JiYpOwogCi0gICAgV2Vi
UHJvY2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPj4gbV9wZW5kaW5nRmV0Y2hXZWJzaXRl
RGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hN
YXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRl
V2Vic2l0ZURhdGFGb3JPcmlnaW5zQ2FsbGJhY2tzOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPERv
d25sb2FkUHJveHlNYXA+IG1fZG93bmxvYWRQcm94eU1hcDsKKworICAgIFVuaXF1ZVJlZjxBUEk6
OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQ7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKICAgICBMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSBtX2N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5
OwogI2VuZGlmCisKICAgICBQcm9jZXNzVGhyb3R0bGVyIG1fdGhyb3R0bGVyOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxQcm9jZXNzVGhyb3R0bGVyOjpCYWNrZ3JvdW5kQWN0aXZpdHk+IG1fYWN0aXZp
dHlGb3JIb2xkaW5nTG9ja2VkRmlsZXM7CiAgICAgUHJvY2Vzc1Rocm90dGxlcjo6QWN0aXZpdHlW
YXJpYW50IG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzOwpAQCAtMzQ3LDkgKzM3MCwxMSBAQCBw
cml2YXRlOgogICAgIHByaXZhdGU6CiAgICAgICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94
eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICB9OworICAgIE9TT2JqZWN0UHRyPHhwY19vYmplY3Rf
dD4gbV9lbmRwb2ludE1lc3NhZ2U7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8UEFMOjpTZXNzaW9u
SUQ+IG1fc2Vzc2lvbklEczsKKyAgICBXZWFrSGFzaFNldDxXZWJzaXRlRGF0YVN0b3JlPiBtX3dl
YnNpdGVEYXRhU3RvcmVzOworICAgIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IG1fY29va2ll
TWFuYWdlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
Q29jb2EubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4
ICs1MSwxMSBAQCBib29sIE5ldHdvcmtQcm9jZXNzUHJveHk6OlhQQ0V2ZW50SGFuZGxlCiAgICAg
aWYgKG1lc3NhZ2VOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6Onhw
Y0xhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKQotICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBv
aW50VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2Vy
dmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0Vu
ZHBvaW50TWVzc2FnZU5hbWUpIHsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+bV9lbmRwb2lu
dE1lc3NhZ2UgPSBldmVudDsKKyAgICAgICAgZm9yIChhdXRvJiBkYXRhU3RvcmUgOiBtX25ldHdv
cmtQcm9jZXNzLT5tX3dlYnNpdGVEYXRhU3RvcmVzKQorICAgICAgICAgICAgZGF0YVN0b3JlLnNl
bmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMoKTsKKyAgICB9CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3Rv
Y29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAJKHJldmlzaW9uIDI2NzUz
NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
MTcgKzQ0LDE3IEBAIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp+TGVnYWMKIAog
dm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKExlZ2Fj
eUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNz
UG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywg
Y3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJv
dG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJ
RCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7
CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgp
LnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKIH0KIAogdm9pZCBMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgbV9uZXR3b3Jr
UHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCku
aW52YWxpZGF0ZSgqdGhpcyk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUoKnRoaXMpOwogfQogCiB2b2lkIExlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3YXNSZWRpcmVjdGVkVG9SZXF1ZXN0KExlZ2FjeUN1
c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVj
dFJlc3BvbnNlKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTQgQEAKICNpbmNsdWRlICJBdXRoZW50aWNhdG9y
TWFuYWdlci5oIgogI2luY2x1ZGUgIkRldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgiCiAjaW5jbHVk
ZSAiR1BVUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1v
Y2tBdXRoZW50aWNhdG9yTWFuYWdlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbkluZm8uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vz
c1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkQ2FjaGUuaCIKKyNpbmNsdWRlICJX
ZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXQySW5pdGlhbGl6ZS5oIgog
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDYWNoZS5oIgpA
QCAtNzUsNiArNzgsMTAgQEAKICNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5o
IgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJEZWZhdWx0V2ViQnJv
d3NlckNoZWNrcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgYm9v
bCBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zOwpAQCAtODMsMTMgKzkwLDE5
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dXZWJzaXRlRGF0YVIKICAgICBhbGxvd3NX
ZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zID0gdHJ1ZTsKIH0KIAotc3RhdGljIEhhc2hN
YXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgbm9uRGVmYXVsdERhdGFTdG9y
ZXMoKQorc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYg
YWxsRGF0YVN0b3JlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNVSVRocmVhZCgpKTsKICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURh
dGFTdG9yZSo+PiBtYXA7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRhU3Rv
cmUmKT4mJiBmdW5jdGlvbikKK3sKKyAgICBmb3IgKGF1dG8qIGRhdGFTdG9yZSA6IGFsbERhdGFT
dG9yZXMoKS52YWx1ZXMoKSkKKyAgICAgICAgZnVuY3Rpb24oKmRhdGFTdG9yZSk7Cit9CisKIFJl
ZjxXZWJzaXRlRGF0YVN0b3JlPiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGVOb25QZXJzaXN0ZW50
KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpObyksIFBBTDo6U2Vz
c2lvbklEOjpnZW5lcmF0ZUVwaGVtZXJhbFNlc3Npb25JRCgpKSk7CkBAIC0xMTUsNyArMTI4LDcg
QEAgV2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShSZWY8VwogI2VuZGlmCiB7CiAg
ICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1heWJl
UmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwpAQCAtMTI4LDE3ICsxNDEsMTIgQEAgV2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVE
YXRhU3RvcmUoKQogCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBpZiAobV9zZXNzaW9u
SUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBBU1NF
UlQobm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOwotICAg
ICAgICBub25EZWZhdWx0RGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7Ci0gICAgICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW1v
dmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBBU1NFUlQoYWxs
RGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7CisgICAgYWxsRGF0YVN0b3Jl
cygpLnJlbW92ZShtX3Nlc3Npb25JRCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW1vdmVTZXNz
aW9uKCp0aGlzKTsKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0gICAgICAgIGlmIChhdXRvKiBn
cHVQcm9jZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQot
ICAgICAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsK
KyAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b25JZkNyZWF0ZWQoKSkKKyAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1f
c2Vzc2lvbklEKTsKICNlbmRpZgogfQogCkBAIC0xNTAsOCArMTU4LDEwIEBAIHN0YXRpYyBSZWZQ
dHI8V2Vic2l0ZURhdGFTdG9yZT4mIGdsb2JhbEQKIAogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKQogeworI2lmIFBMQVRGT1JNKEdUSykg
fHwgUExBVEZPUk0oV1BFKQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5k
aWYKICAgICBJbml0aWFsaXplV2ViS2l0MigpOwotCiAgICAgYXV0byYgc3RvcmUgPSBnbG9iYWxE
ZWZhdWx0RGF0YVN0b3JlKCk7CiAgICAgaWYgKCFzdG9yZSkKICAgICAgICAgc3RvcmUgPSBhZG9w
dFJlZihuZXcgV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbjo6
Y3JlYXRlKElzUGVyc2lzdGVudDo6WWVzKSwgUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSkpOwpAQCAtMTY5LDE3ICsxNzksNDcgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlRQogICAgIHJldHVybiAhIWdsb2JhbERlZmF1bHREYXRhU3RvcmUoKTsKIH0K
IAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgp
Cit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpCiB7Ci0g
ICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkp
IHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBub25EZWZhdWx0RGF0YVN0b3JlcygpLmFkZChtX3Nl
c3Npb25JRCwgdGhpcyk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNO
ZXdFbnRyeSk7CisgICAgYXV0byByZXN1bHQgPSBhbGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lv
bklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkp
OworfQorCitXZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFT
dG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgcmV0dXJu
IGFsbERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklEKTsKK30KKworc3RhdGljIFJlZjxOZXR3b3Jr
UHJvY2Vzc1Byb3h5PiBuZXR3b3JrUHJvY2Vzc0ZvclNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQoreworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQorICAgIGlmIChz
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgeworICAgICAgICAvLyBSZXVzZSBhIHByZXZpb3VzIHBl
cnNpc3RlbnQgc2Vzc2lvbiBuZXR3b3JrIHByb2Nlc3MgZm9yIGVwaGVtZXJhbCBzZXNzaW9ucy4K
KyAgICAgICAgZm9yIChhdXRvKiBkYXRhU3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkp
IHsKKyAgICAgICAgICAgIGlmIChkYXRhU3RvcmUtPmlzUGVyc2lzdGVudCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBtYWtlUmVmKGRhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKSk7CisgICAg
ICAgIH0KICAgICB9CisgICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZSgpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vzc2lvbklEKTsKKyAgICByZXR1cm4gTmV0d29ya1By
b2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7CisjZW5kaWYKIH0KIAotV2Vic2l0
ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3Jl
Rm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK05ldHdvcmtQcm9jZXNzUHJv
eHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkKIHsKLSAgICByZXR1cm4gc2Vz
c2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgPyBub25EZWZhdWx0
RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0cjsKKyAgICBpZiAoIW1fbmV0d29y
a1Byb2Nlc3MpIHsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IG5ldHdvcmtQcm9jZXNzRm9y
U2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Np
b24oKnRoaXMpOworICAgIH0KKworICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKK30KKwor
TmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3MoKSBj
b25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYnNpdGVEYXRhU3RvcmUmPigqdGhpcyku
bmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlclBy
b2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQpAQCAtMTk1LDEyICsyMzUsNiBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnVucmVnaXN0ZXJQcm9jZXNzCiAgICAgbV9wcm9jZXNzZXMucmVt
b3ZlKHByb2Nlc3MpOwogfQogCi1XZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURhdGFTdG9yZTo6cHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpCi17Ci0gICAgYXV0byBwb29scyA9
IHByb2Nlc3NQb29scygxKTsKLSAgICByZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8gbnVsbHB0ciA6
IHBvb2xzLmJlZ2luKCktPmdldCgpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc29s
dmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9oYXNSZXNvbHZlZERpcmVj
dG9yaWVzKQpAQCAtNDQwLDI4ICs0NzQsMjEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRj
aERhdGFBbmRBcHBseQogI2VuZGlmCiAKICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlw
ZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5cGVz
LCAhaXNQZXJzaXN0ZW50KCkpOwotICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0g
UHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsKLSAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQ
cm9jZXNzQWNjZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJv
Y2Vzc1Bvb2xzKCkgOiBwcm9jZXNzUG9vbHMoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHBvb2xzKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNz
VHlwZSkgewotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNo
ZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAg
ICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6
Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0K
KyAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgeworICAgIGNhc2UgUHJvY2Vz
c0FjY2Vzc1R5cGU6OkxhdW5jaDoKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAg
QVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNl
IFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKKyAgICAgICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpIHsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0Nh
bGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZmV0
Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxs
YmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkgewor
ICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25J
RCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKFdlYnNpdGVE
YXRhIHdlYnNpdGVEYXRhKSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5y
ZW1vdmVQZW5kaW5nQ2FsbGJhY2soV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlw
ZTo6Tm9uZToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgYXV0byB3ZWJQcm9jZXNzQWNj
ZXNzVHlwZSA9IGNvbXB1dGVXZWJQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFGZXRjaChkYXRhVHlw
ZXMsICFpc1BlcnNpc3RlbnQoKSk7CkBAIC03MjQsMzEgKzc1MSwyNCBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uCiAgICAgYm9vbCBkaWROb3RpZnlOZXR3b3JrUHJv
Y2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEgPSBmYWxzZTsKICNlbmRpZgogICAgIGF1dG8gbmV0d29y
a1Byb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZU5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZUZvckRh
dGFSZW1vdmFsKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgpKTsKLSAgICBpZiAobmV0d29ya1By
b2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lKSB7Ci0gICAgICAgIGF1
dG8gcG9vbHMgPSBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPT0gUHJvY2Vzc0FjY2Vzc1R5cGU6
OkxhdW5jaCA/IGVuc3VyZVByb2Nlc3NQb29scygpIDogcHJvY2Vzc1Bvb2xzKCk7Ci0gICAgICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewotICAgICAgICAgICAgc3dpdGNoIChu
ZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vz
c1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpM
YXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KHRoaXMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFByb2Nl
c3NBY2Nlc3NUeXBlOjpOb25lOgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgfQotCisgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUp
IHsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6CisgICAgICAgIG5ldHdvcmtQ
cm9jZXNzKCk7CisgICAgICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsKKyAgICAgICAgRkFM
TFRIUk9VR0g7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Cisg
ICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3Jl
Z2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMs
IG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CisgICAg
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwg
ZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CiAgICAgICAg
ICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKICAg
ICAgICAgICAgIH0pOwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAg
ICAgICAgICBkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEgPSB0cnVl
OwogI2VuZGlmCiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm9jZXNzQWNj
ZXNzVHlwZTo6Tm9uZToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgYXV0byB3ZWJQcm9j
ZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVXZWJQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFSZW1vdmFs
KGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgpKTsKQEAgLTg5MywxNCArOTEzLDkgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvbgogI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MpKSB7CiAgICAgICAgIGlmICghZGlkTm90aWZ5TmV0
d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHByb2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBk
YXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNr
KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGEobV9z
ZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eworICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxi
YWNrKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhbGxiYWNrQWdn
cmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CkBAIC05OTQsMTIgKzEwMDksMTAgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvbgogICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nl
c3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5
SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAg
ICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAg
ICAgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgpAQCAtMTAyMSw3ICsx
MDM0LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvbgogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxs
YmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmRlbGV0
ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBvcmlnaW5zLCBj
b29raWVIb3N0TmFtZXMsIEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0cmFibGVEb21haW5zLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRhdGFUeXBl
cywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJh
YmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAg
ICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTExODAsMTggKzExOTMsMTIgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvbgogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyhTZWNvbmRzIHNlY29uZHMpCiB7Ci0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JU
ZXN0aW5nKHNlY29uZHMpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VXb3Jr
ZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFNlcnZpY2VX
b3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKHNlY29uZHMpLCBNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAw
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFNlcnZpY2VXb3JrZXJUaW1lb3V0
Rm9yVGVzdGluZygpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdv
cmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpS
ZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nOjpSZXBseSgpLCAwKTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSwgTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5n
OjpSZXBseSgpLCAwKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
CkBAIC0xMjAxLDggKzEyMDgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1heFN0YXRp
c3RpY3NFCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1h
eGltdW1FbnRyeUNvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lvbklE
LCBtYXhpbXVtRW50cnlDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFy
Z2V0Q291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTEyMTEsOCArMTIxNyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRy
aWVzRG8KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVu
c3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1fc2Vzc2lvbklELCBw
cnVuZVRhcmdldENvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwg
cHJ1bmVUYXJnZXRDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjIxLDgg
KzEyMjYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nCiAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dEdyYW5kZmF0aGVyaW5nVGltZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJl
dHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjMxLDIwICsxMjM1LDEzIEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXQKIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5p
bXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCBz
ZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogICAgIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+ZHVtcFJlc291cmNlTG9hZFN0
YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZHVt
cFJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNl
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNQcmV2YWxlbnQp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI1NiwxMiArMTI1Myw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgICAgICBwcm9jZXNzLT5pc1ByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xMjczLDEyICsxMjY1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVy
ZWQoYwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzR3JhbmRm
YXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTI5Miw4ICsxMjc5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRQcmV2YWxlbnRSZXNvdQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJj
ZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTMw
NywxMCArMTI5Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3UK
ICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJj
ZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sIGlzVmVyeVByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xMzIyLDEyICsxMzA1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxl
bnRSZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1Zl
cnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM0MSwxMCArMTMxOSw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFIKICAgICAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
c2V0VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM1Myw4ICsxMzI4
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeQogICAgIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5zZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCht
X3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJM
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzY4
LDIyICsxMzQyLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclQK
IAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0
U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRB
c1N1YkZyYW1lVW5kZXIoY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFt
ZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlz
UmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRv
cEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVk
QXNTdWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291
cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzk3LDIzICsxMzYzLDE0IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9t
YWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNl
VVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIoY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lz
dGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0
b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHVy
bFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTQyNywxMCArMTM4NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3Vi
cmVzb3VyY2VVbmkKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJl
ZGlyZWN0ZWRUbyB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYg
c3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NDIsMTIgKzEzOTYsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmxSZWRpcmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVS
TCYgdG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDU5LDEyICsxNDA4LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9j
ZXNzLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9wRnJhbWVVbmlxdWVSZWRp
cmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1l
VVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25z
dCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xNDc2LDI1ICsxNDIwLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0VG9wRnJhbWVVbmlxdWUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVj
dGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVy
ZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJM
JiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
b21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVy
ZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxS
ZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE1MDYsNjAg
KzE0MzksNDEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlcwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3MtPmNsZWFyUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyUHJldmFsZW50UmVz
b3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnJlc2V0
UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRQ
YXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3VibWl0VGVsZW1ldHJ5KCkK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
c3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25JRCwgW10geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KFdh
bGxUaW1lIG1vZGlmaWVkU2luY2UsIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyBzaG91bGRH
cmFuZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFu
ZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UsIHNob3VsZEdyYW5kZmF0aGVy
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lv
bklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgc3RydWN0
IENhbGxiYWNrQWdncmVnYXRvciA6IFJlZkNvdW50ZWQ8Q2FsbGJhY2tBZ2dyZWdhdG9yPiB7Ci0g
ICAgICAgIENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKKyAgICBzdHJ1Y3QgTG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IgOiBSZWZD
b3VudGVkPExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yPiB7CisgICAgICAgIExvY2FsQ2FsbGJhY2tB
Z2dyZWdhdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ICAgICAgICAgICAgOiBtX2NvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
ICAgICAgICB9OwogCi0gICAgICAgIH5DYWxsYmFja0FnZ3JlZ2F0b3IoKQorICAgICAgICB+TG9j
YWxDYWxsYmFja0FnZ3JlZ2F0b3IoKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogCkBAIC0xNTc0LDM4ICsxNDg4LDMxIEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3QKICAgICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4m
Jik+IG1fY29tcGxldGlvbkhhbmRsZXI7CiAgICAgICAgIFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiBtX3Jlc3VsdHM7CiAgICAgfTsKLQotICAg
IFJlZlB0cjxDYWxsYmFja0FnZ3JlZ2F0b3I+IGNhbGxiYWNrQWdncmVnYXRvciA9IGFkb3B0UmVm
KG5ldyBDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKLQot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBwcm9jZXNzUG9vbC0+c2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRl
bHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKHRoaXMpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShtX3Nl
c3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFZlY3RvcjxXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmIGRhdGEpIHsKLSAgICAg
ICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFJlc3VsdChXVEZNb3ZlKGRhdGEpKTsK
LSAgICAgICAgICAgIH0pOworICAgIAorICAgIGF1dG8gbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBhZG9wdFJlZihuZXcgTG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpKTsKKyAgICAKKyAgICBhdXRvIHd0ZkNhbGxiYWNrQWdncmVnYXRvciA9IFdURjo6
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgbG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAgICAgICAgbmV0d29ya1Byb2Nl
c3MoKS5nZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkobV9zZXNzaW9uSUQsIFts
b2NhbENhbGxiYWNrQWdncmVnYXRvcl0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYgZGF0YSkgeworICAgICAgICAgICAgbG9jYWxDYWxsYmFj
a0FnZ3JlZ2F0b3ItPmFkZFJlc3VsdChXVEZNb3ZlKGRhdGEpKTsKICAgICAgICAgfSk7Ci0gICAg
fQorICAgIH0pOworICAgIAorICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShbd3RmQ2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFu
ZFBlcnNpc3RlbnQoU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIHNob3VsZEdyYW5kZmF0aGVy
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dChtX3Nlc3Npb25JRCwgeyB9LCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1
bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgeyB9LCBzaG91bGRHcmFu
ZGZhdGhlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKG1fc2Vz
c2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKG1fc2Vzc2lv
bklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjE0LDI0ICsxNTIxLDEz
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWMKICAgICAKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlU3Rh
dGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lvbklELCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN0
YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICAgICAgcHJvY2Vzcy0+c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKG1fc2Vz
c2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9u
SUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjQzLDIyICsxNTM5
LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QKIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRMYXN0U2VlbihtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgc2Vjb25kcywgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKGludCBkb21haW5J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmRvbWFp
bklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKG1fc2Vzc2lvbklELCBk
b21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29uc3Qg
VVJMJiB0b3BGcmFtZVVybDEsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwyLCBTZWNvbmRzIGxhc3RT
ZWVuLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgU2Vjb25kcyBtb3N0UmVjZW50VXNlckludGVy
YWN0aW9uLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgYm9vbCBpc1ByZXZhbGVudCwgYm9vbCBpc1Zl
cnlQcmV2YWxlbnQsIHVuc2lnbmVkIGRhdGFSZWNvcmRzUmVtb3ZlZCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY3MCwxMCArMTU1OCw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3IKIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5tZXJnZVN0YXRpc3RpY0ZvclRlc3Rpbmco
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwxIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rpb24sIG1v
c3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlz
VmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5tZXJnZVN0YXRp
c3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwxIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVuLCBoYWRVc2Vy
SW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwg
aXNQcmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4
cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGhhZFVzZXJJbnRl
cmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBib29s
IGlzUHJldmFsZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xNjg1LDE4ICsxNTcwLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0
RXhwaXJlZFN0YXQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9j
ZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVk
dWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRG
b3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElzUnVu
bmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MDQsOCArMTU4NSw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3UKICAgICB1c2VFeHBsaWNpdElU
UFN0YXRlKCk7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1Rlc3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVz
KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxTdHJpbmc+JiYgZG9tYWlucyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzE2LDcg
KzE1OTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2NlCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICB3ZWJQYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2wo
KS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1fc2Vz
c2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiAKQEAgLTE3MjQsOCArMTYwNCw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXIKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFRpbWVUb0xpdmVV
c2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9u
KG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTczOSwx
MCArMTYxOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlckludGVyYWN0aW8KICAg
ICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+bG9nVXNl
ckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmxvZ1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzU0LDEz
ICsxNjMwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhYwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5oYXNIYWRVc2VySW50
ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShj
b25zdCBVUkwmIHN1YlVybCwgY29uc3QgVVJMJiB0b3BVcmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzcyLDEzICsxNjQyLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubAogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNl
T25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJVcmwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwgfSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVsYXRpb25z
aGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcFVybCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3OTIsMTAgKzE2NTYsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0CiAgICAgCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyVXNlckludGVy
YWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODA5LDEwICsx
NjcwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKAogICAgIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0R3Jh
bmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRh
YmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xODIxLDEwICsxNjc5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRV
c2VJVFBEYXRhYmFzZQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFVz
ZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtE
ZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGZyb21VUkwsIGNvbnN0IFVSTCYgdG9VUkws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MzMs
NjIgKzE2ODgsMzggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2FkVwog
ICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENyb3NzU2l0ZUxvYWRXaXRoTGlu
a0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDcm9z
c1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRD
cm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGVs
ZXRlQ29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaW5jbHVkZUh0dHBPbmx5
Q29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5kZWxldGVDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVD
b29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5n
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0xv
Y2FsU3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLmhhc0xvY2FsU3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcoY29uc3QgVVJM
JiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
IGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzSXNvbGF0ZWRTZXNz
aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNz
KCkuaGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJl
ZmVycmVyRm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJy
ZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5n
KGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0o
Q09DT0EpCkBAIC0xOTE5LDEwICsxNzUwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRU
aGlyZFBhcnR5Q29vawogICAgICAgICAgICAgd2ViUHJvY2Vzcy5zZXRUaGlyZFBhcnR5Q29va2ll
QmxvY2tpbmdNb2RlKGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICAg
ICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VGhpcmRQYXJ0eUNvb2tpZUJs
b2NraW5nTW9kZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDb29raWVC
bG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhib29s
IGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTE5MzAsMTAgKzE3NTgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0CiAgICAgYXV0byBmbGFnID0gZW5hYmxlZCA/IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0
RW5mb3JjZW1lbnRFbmFibGVkOjpZZXMgOiBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50RW5hYmxlZDo6Tm87CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3Ry
aWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcoYm9v
bCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xOTQxLDIwICsxNzY2LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3Vy
Y2VMb2FkU3QKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBhdXRvIG1vZGUgPSBl
bmFibGVkID8gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1
dENvb2tpZXMgOiBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6Tm9u
ZTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRGaXJzdFBhcnR5V2Vic2l0ZURh
dGFSZW1vdmFsTW9kZUZvclRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eVdl
YnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9TYW1lU2l0ZVN0cmljdENv
b2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWlu
Rm9yVGVzdGluZyhjb25zdCBVUkwmIGZpcnN0UGFydHlVUkwsIGNvbnN0IFVSTCYgY25hbWVVUkws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NjYs
OCArMTc4NSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3QKIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25J
RCwgZmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNz
aW9uSUQsIGZpcnN0UGFydHlVUkwuaG9zdCgpLnRvU3RyaW5nKCksIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0
eUNOQU1FRG9tYWluRm9yVGVzdGluZyhjb25zdCBVUkwmIGNuYW1lVVJMLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTc5LDE4ICsxNzk3LDEzIEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3QKIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRU
aGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzeW5jTG9jYWxTdG9yYWdlKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZSgp
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0
b3JhZ2UoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMg
c2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTk5OCw4ICsxODExLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFn
ZUNhcAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5z
ZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25k
cywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENh
Y2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Vjb25k
cyk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTIwMDksMjYgKzE4MjEsMTIgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpyZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFs
ZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICNlbHNl
CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRpZgogfQogCi1ib29sIFdlYnNpdGVEYXRh
U3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9v
bCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPSBwcm9jZXNz
UG9vbC53ZWJzaXRlRGF0YVN0b3JlKCkpCi0gICAgICAgIHJldHVybiBwcm9jZXNzUG9vbERhdGFT
dG9yZSA9PSB0aGlzOwotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvY2Vz
c1Bvb2wubmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuIG5ldHdvcmtQcm9jZXNzUHJv
eHktPmhhc1Nlc3Npb24obV9zZXNzaW9uSUQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogSGFz
aFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9v
bHMoc2l6ZV90IGxpbWl0KSBjb25zdAogewogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQ
b29sPj4gcHJvY2Vzc1Bvb2xzOwpAQCAtMjA0Myw5ICsxODQxLDYgQEAgSGFzaFNldDxSZWZQdHI8
V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRAogICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgp
KSB7CiAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9uZSBvZiB0aGUgbGVnYWN5IGRhdGEgc3Rv
cmVzLgogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFs
bFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQXNzb2NpYXRlZFByb2Nlc3NQ
b29sKCpwcm9jZXNzUG9vbCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAg
ICAgIHByb2Nlc3NQb29scy5hZGQocHJvY2Vzc1Bvb2wpOwogICAgICAgICAgICAgaWYgKHByb2Nl
c3NQb29scy5zaXplKCkgPT0gbGltaXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDg0
LDggKzE4NzksNyBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVNZWRpYUtleUZpbGUoY29uc3QgCiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KGNvbnN0IFdlYkNlcnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYg
aG9zdCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2Vy
dGlmaWNhdGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2Vy
dGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDAp
OwogfQogCiBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBXZWJzaXRlRGF0YVN0
b3JlOjptZWRpYUtleU9yaWdpbnMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0
b3J5KQpAQCAtMjE0MCw2ICsxOTM0LDQ5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3Zl
TWVkaWFLZXlzKGMKICAgICB9CiB9CiAKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1Byb3h5LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8mKT4m
JiByZXBseSkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KSwgd2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwgcmVwbHkg
PSBXVEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc1ZhbGlkKGNvbm5l
Y3Rpb25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5ICYmIHdlYWtUaGlzKSkg
eworICAgICAgICAgICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0lGKGlzUGVyc2lzdGVudCgpLCBQcm9jZXNzLCAiZ2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uOiBGYWlsZWQgZmlyc3QgYXR0ZW1wdCwgcmV0cnlpbmciKTsKKyAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3ZWJQcm9jZXNz
UHJveHksIFdURk1vdmUocmVwbHkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKQor
eworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5k
aWRUZXJtaW5hdGUoKTsKKyAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKK30KKwordm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCit7CisgICAgaWYg
KCFtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICByZXR1cm47CisgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+dGVybWluYXRlKCk7CisgICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Cit9CisKK3Zv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZv
clRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQor
eworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9u
SW1taW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9y
VGVzdGluZygpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5k
SW1taW5lbnRseUZvclRlc3RpbmcoKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5k
TmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFBy
b2Nlc3NEaWRSZXN1bWUoKTsKK30KKwogYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKQEAgLTIxNjksMTcgKzIwMDYsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRSZXNvdXJjZUxvYWRTdAogICAgICAgICAKICAgICAgICAgcmVzb2x2ZURpcmVjdG9yaWVz
SWZOZWNlc3NhcnkoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpKTsKKyAgICAgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpLCAwKTsKKyAgICAgICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNl
bmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHRydWUpLCBtX3Nlc3Npb25JRCk7Ci0gICAgICAgIH0K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1By
b2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZChtX3Nlc3Npb25JRCwgZmFsc2UpLCAwKTsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXNG
b3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZChmYWxzZSksIG1fc2Vzc2lvbklEKTsKLSAgICB9CiAKICAgICBtX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkID0gZmFsc2U7CiAjZWxzZQpAQCAtMjE5MSw4ICsyMDI2LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKEZ1bmN0aW9uPHZvaWQoY29uc3Qg
U3RyaW5nJik+JiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKGNhbGxiYWNrKSB7Ci0gICAgICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgICAgIHByb2Nl
c3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQodHJ1ZSkpOworICAgICAg
ICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpLCAwKTsKICAgICB9CiAgICAg
CiAgICAgbV9zdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CkBA
IC0yMjExLDggKzIwNDUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9z
ZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKG1fc2Vzc2lvbklE
LCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0oZW5hYmxlZCk7CiAgICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb25IYW5kbGVyKTsKQEAg
LTIyMjcsMjAgKzIwNjAsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1Jlc291cmNlTG9h
ZFN0YQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vzc2lvbklELCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9Ci0jZW5kaWYKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwor
I2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisjZW5kaWYKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoYm9vbCBlbmFi
bGVkKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0QWRDbGlja0F0dHJp
YnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0QWRDbGlj
a0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKQEAgLTIyNjIsNDggKzIwOTAsMTkgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZAogfQogI2VuZGlmCiAKLVZlY3RvcjxXZWJDb3JlOjpD
b29raWU+IFdlYnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gY29weVRvVmVjdG9yKG1fcGVuZGluZ0Nvb2tpZXMpOwotfQotCi12b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmFkZFBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUp
Ci17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmVJZihbJmNvb2tpZV0oYXV0byYgcGVuZGlu
Z0Nvb2tpZSkgewotICAgICAgICByZXR1cm4gcGVuZGluZ0Nvb2tpZS5pc0tleUVxdWFsKGNvb2tp
ZSk7Ci0gICAgfSk7Ci0gICAgbV9wZW5kaW5nQ29va2llcy5hZGQoY29va2llKTsKLX0KLQotdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNv
b2tpZSYgY29va2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMucmVtb3ZlKGNvb2tpZSk7Ci19
Ci0gICAgCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tpZXMoKQotewot
ICAgIG1fcGVuZGluZ0Nvb2tpZXMuY2xlYXIoKTsKLX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmZsdXNoQ29va2llcyhzZXNzaW9uSUQoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmZsdXNoQ29va2llcyhzZXNzaW9uSUQoKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJvb2wgYWxsb3dzKQogewotICAg
IGZvciAoYXV0byBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29j
a2V0KGFsbG93cyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2Vy
dGlmaWNhdGVGb3JXZWJTb2NrZXQ6OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldDo6UmVwbHkoKSwgMCk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpCiB7Ci0g
ICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29s
cygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+Y2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9u
SUQoKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9uSUQoKSksIDApOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rp
b24pCkBAIC0yMzI5LDggKzIxMjgsNiBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJz
aXRlRGF0YVN0CiAKICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwogCi0gICAg
cGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBlbmRpbmdDb29raWVzKCk7Ci0KICAgICBhdXRv
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPnJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUhhbmRsZTsKICAgICBpZiAoIXJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAtMjQzNSw3ICsyMjMyLDEw
IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3QKICAgICBwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy5lbmFibGVkID0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDsKICNlbmRpZgog
ICAgIHBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMocGFyYW1ldGVycyk7Ci0KKyNpZiBQTEFU
Rk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBI
YXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRD
cm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKKyNlbmRpZgorICAgIAogICAgIHJldHVy
biBwYXJhbWV0ZXJzOwogfQogCkBAIC0yNDY1LDEwICsyMjY1LDYgQEAgQVBJOjpIVFRQQ29va2ll
U3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6OgogICAgIHJldHVybiAqbV9jb29raWVTdG9yZTsKIH0K
IAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpCi17Ci19
Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlv
bjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghaXNQZXJzaXN0ZW50KCkpIHsK
QEAgLTI0NzYsMjMgKzIyNzIsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0
b3JhZ2VEZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklE
LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYm
IGRldGFpbHMpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWls
cykpOwotICAgICAgICB9KTsKLSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgZmV0Y2hpbmcgZnJv
bSBtdWx0aXBsZSBwb29scy4KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIEFTU0VSVCghY29t
cGxldGlvbkhhbmRsZXIpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0TG9jYWxTdG9yYWdlRGV0
YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdU
Rk1vdmUoZGV0YWlscykpOworICAgIH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+cmVzZXRRdW90
YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpAQCAtMjUxOCw3ICsyMzA2LDEyIEBA
IGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6aHR0cDNFbmFibGVkKCkKIHsKICAgICByZXR1cm4gZmFs
c2U7CiB9Ci0jZW5kaWYKKworYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hh
c0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oQ09DT0EpCiAKICNpZiAhVVNFKEdMSUIpCiBXVEY6
OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdl
RGlyZWN0b3J5KCkKQEAgLTI1MzAsMzUgKzIzMjMsMTggQEAgV1RGOjpTdHJpbmcgV2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERldgogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbmFtZU9yaWdp
bkluV2Vic2l0ZURhdGEoVVJMJiYgb2xkTmFtZSwgVVJMJiYgbmV3TmFtZSwgT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRo
aXMpOwotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbmFtZU9yaWdpbkluV2Vic2l0ZURh
dGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJl
bmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRh
dGFUeXBlcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxFKEFQ
UF9CT1VORF9ET01BSU5TKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Np
b24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29u
c3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNBcHBCb3VuZFNlc3Npb24o
bV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVh
ckFwcEJvdW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+Y2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9t
YWluc1RvSVRQSWZJbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0yNTgwLDcgKzIzNTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmZvcndhcmRBcHBCb3VuZERvCiAKICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoZ2xvYmFs
RGVmYXVsdERhdGFTdG9yZSgpLmdldCgpLCAqYXBwQm91bmREb21haW5zKTsKIAotICAgIGZvciAo
YXV0byogc3RvcmUgOiBub25EZWZhdWx0RGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgIGZvciAo
YXV0byogc3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkpCiAgICAgICAgIHByb3BhZ2F0
ZUFwcEJvdW5kRG9tYWlucyhzdG9yZSwgKmFwcEJvdW5kRG9tYWlucyk7CiB9CiAKQEAgLTI1ODgs
MTAgKzIzNjQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluCiB7
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2V0QXBwQm91bmREb21haW5zRm9yUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Np
b25JRCwgZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
KG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogI2Vu
ZGlmCiAKQEAgLTI1OTksMTYgKzIzNzIsMjYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1cGRh
dGVCdW5kbGVJZGVudAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlk
ZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVu
dGlmaWVySW5OZXR3b3JrUHJvY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlm
aWVyKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cit9CisKK3N0YXRpYyBib29sIG5leHROZXR3
b3JrUHJvY2Vzc0xhdW5jaFNob3VsZEZhaWxGb3JUZXN0aW5nIHsgZmFsc2UgfTsKKwordm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjptYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmcoKQoreworICAgIG5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaFNob3VsZEZhaWxGb3JUZXN0aW5n
ID0gdHJ1ZTsKK30KKworYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpzaG91bGRNYWtlTmV4dE5ldHdv
cmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKQoreworICAgIHJldHVybiBzdGQ6OmV4Y2hh
bmdlKG5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaFNob3VsZEZhaWxGb3JUZXN0aW5nLCBmYWxzZSk7
CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTMsNiArNTMsOCBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSA8
cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KKyNpbmNsdWRlIDx3dGYvT1NPYmplY3RQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KICNlbmRpZgogCiAjaWYgVVNFKENV
UkwpCkBAIC03OSw2ICs4MSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgQXV0aGVudGlj
YXRvck1hbmFnZXI7CiBjbGFzcyBTZWNLZXlQcm94eVN0b3JlOwogY2xhc3MgRGV2aWNlSWRIYXNo
U2FsdFN0b3JhZ2U7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5OwogY2xhc3MgU09BdXRob3Jp
emF0aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBXZWJDZXJ0aWZpY2F0ZUluZm87CiBjbGFzcyBXZWJQ
YWdlUHJveHk7CkBAIC04OCw2ICs5MSw4IEBAIGNsYXNzIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTsKIGVudW0gY2xhc3MgQ2FjaGVNb2RlbCA6IHVpbnQ4X3Q7CiBlbnVtIGNsYXNzIFdl
YnNpdGVEYXRhRmV0Y2hPcHRpb24gOiB1aW50OF90OwogZW51bSBjbGFzcyBXZWJzaXRlRGF0YVR5
cGUgOiB1aW50MzJfdDsKKworc3RydWN0IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm87CiBz
dHJ1Y3QgV2Vic2l0ZURhdGFSZWNvcmQ7CiBzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnM7CiAKQEAgLTExMyw3ICsxMTgsMTIgQEAgcHVibGljOgogICAgIFdlYnNpdGVEYXRhU3RvcmUo
UmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYmLCBQQUw6OlNlc3Npb25JRCk7CiAg
ICAgfldlYnNpdGVEYXRhU3RvcmUoKTsKIAotICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBl
eGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOwor
ICAgIHN0YXRpYyB2b2lkIGZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKEZ1bmN0aW9uPHZvaWQoV2Vi
c2l0ZURhdGFTdG9yZSYpPiYmKTsKKyAgICAKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3
b3JrUHJvY2VzcygpIGNvbnN0OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9j
ZXNzKCk7CisKKyAgICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhpc3RpbmdEYXRhU3RvcmVG
b3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOwogCiAgICAgYm9vbCBpc1BlcnNpc3RlbnQoKSBj
b25zdCB7IHJldHVybiAhbV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKTsgfQogICAgIFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9CkBAIC0xMjMs
NiArMTMzLDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBjb25zdCBXZWFrSGFzaFNldDxXZWJQcm9j
ZXNzUHJveHk+JiBwcm9jZXNzZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3NlczsgfQogCisg
ICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvJik+
JiYpOworICAgIHZvaWQgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICB2b2lkIHNlbmRO
ZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHlGb3JUZXN0aW5nKCk7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUo
KTsKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7
CisgICAgc3RhdGljIHZvaWQgbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nKCk7CisgICAgc3RhdGljIGJvb2wgc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5j
aEZhaWxGb3JUZXN0aW5nKCk7CisKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChi
b29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoKSBjb25zdDsK
QEAgLTIzOSwxNSArMjU4LDggQEAgcHVibGljOgogCiAgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4gbV9kZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sRm9yQ29v
a2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlzQXNzb2NpYXRlZFByb2Nlc3NQb29s
KFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cyBwYXJhbWV0ZXJzKCk7CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5kaW5nQ29v
a2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpD
b29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29v
a2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVzKCk7CiAgICAgdm9pZCBmbHVzaENv
b2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyQ2FjaGVk
Q3JlZGVudGlhbHMoKTsKIApAQCAtMjU1LDYgKzI2NywxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYpOwogCisjaWYgUExBVEZPUk0oQ09D
T0EpCisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhX
ZWJQcm9jZXNzUHJveHkmKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50
VG9BbGxXZWJQcm9jZXNzZXMoKTsKKyNlbmRpZgorCiAjaWYgVVNFKENVUkwpCiAgICAgdm9pZCBz
ZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5ncyYmKTsKICAg
ICBjb25zdCBXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5ncyYgbmV0d29ya1Byb3h5U2V0dGluZ3Mo
KSBjb25zdCB7IHJldHVybiBtX3Byb3h5U2V0dGluZ3M7IH0KQEAgLTI4MCw4ICsyOTcsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uKFdl
YkNvcmU6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24mJik7CiAjZW5kaWYKIAot
ICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKLQogICAgIGNvbnN0IFdlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKCkgeyByZXR1cm4gbV9jb25maWd1
cmF0aW9uLmdldCgpOyB9CiAKICAgICBXZWJzaXRlRGF0YVN0b3JlQ2xpZW50JiBjbGllbnQoKSB7
IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQpAQCAtMjkxLDYgKzMwNiw4IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgcmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiwgVVJMJiYsIE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAg
Ym9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcm
KTsKKwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgV2ViRGV2aWNlT3JpZW50
YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyJiBkZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlv
bkFjY2Vzc0NvbnRyb2xsZXIoKSB7IHJldHVybiBtX2RldmljZU9yaWVudGF0aW9uQW5kTW90aW9u
QWNjZXNzQ29udHJvbGxlcjsgfQogI2VuZGlmCkBAIC0zNjcsNyArMzg0LDcgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNT
dG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKTsKICAgICBzdGF0aWMgdm9p
ZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5
LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mKTsKIAotICAgIHZv
aWQgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICB2b2lkIHJlZ2lzdGVyV2l0
aFNlc3Npb25JRE1hcCgpOwogCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKQogICAgIHN0
YXRpYyBPcHRpb25hbDxIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPj4gYXBwQm91
bmREb21haW5zSWZJbml0aWFsaXplZCgpOwpAQCAtNDA3LDggKzQyNCw2IEBAIHByaXZhdGU6CiAg
ICAgV2ViQ29yZTo6U291cE5ldHdvcmtQcm94eVNldHRpbmdzIG1fbmV0d29ya1Byb3h5U2V0dGlu
Z3M7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29va2llPiBtX3BlbmRpbmdDb29r
aWVzOwotICAgIAogICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4gbV9wcm9jZXNzZXM7
CiAKICAgICBib29sIG1faXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQgeyBmYWxzZSB9OwpAQCAtNDI5
LDYgKzQ0NCw3IEBAIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPFdlYnNpdGVEYXRhU3RvcmVDbGll
bnQ+IG1fY2xpZW50OwogCiAgICAgUmVmUHRyPEFQSTo6SFRUUENvb2tpZVN0b3JlPiBtX2Nvb2tp
ZVN0b3JlOworICAgIFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNz
OwogCiAjaWYgSEFWRShBUFBfU1NPKQogICAgIFVuaXF1ZVJlZjxTT0F1dGhvcml6YXRpb25Db29y
ZGluYXRvcj4gbV9zb0F1dGhvcml6YXRpb25Db29yZGluYXRvcjsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9X
ZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEyIEBACiAKICNpbXBvcnQgIkNvb2tpZVN0b3Jh
Z2VVdGlsc0NGLmgiCiAjaW1wb3J0ICJEZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5oIgorI2ltcG9y
dCAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2ltcG9ydCAiU2FuZGJveFV0aWxpdGllcy5oIgog
I2ltcG9ydCAiU3RvcmFnZU1hbmFnZXIuaCIKICNpbXBvcnQgIldlYkZyYW1lUG9saWN5TGlzdGVu
ZXJQcm94eS5oIgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNLZXlzLmgiCisjaW1wb3J0ICJXZWJQ
cm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5o
IgogI2ltcG9ydCAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKICNpbXBvcnQgPFdlYkNv
cmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CkBAIC00NCw2ICs0Niw3IEBACiAjaW1wb3J0IDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAj
aW1wb3J0IDx3dGYvVVJMLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvRW50aXRsZW1lbnRzLmg+CiAj
aW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQpAQCAtNTYyLDQgKzU2NSwyOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlaW5pdGlh
bGl6ZUFwcEJvCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJv
Y2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmIGVudGl0bGVtZW50KQor
eworICAgIHJldHVybiBXVEY6Omhhc0VudGl0bGVtZW50KG5ldHdvcmtQcm9jZXNzKCkuY29ubmVj
dGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVudGl0bGVtZW50LnV0ZjgoKS5kYXRhKCkpOworfQor
Cit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9X
ZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKK3sKKyAgICBpZiAocHJvY2Vzcy5z
dGF0ZSgpICE9IEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6U3RhdGU6OlJ1bm5pbmcpCisgICAgICAg
IHJldHVybjsKKyAgICBhdXRvKiBjb25uZWN0aW9uID0gcHJvY2Vzcy5jb25uZWN0aW9uKCk7Cisg
ICAgaWYgKCFjb25uZWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgYXV0byBtZXNzYWdlID0g
bmV0d29ya1Byb2Nlc3MoKS54cGNFbmRwb2ludE1lc3NhZ2UoKTsKKyAgICBpZiAoIW1lc3NhZ2Up
CisgICAgICAgIHJldHVybjsKKyAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVj
dGlvbi0+eHBjQ29ubmVjdGlvbigpLCBtZXNzYWdlKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvQWxsV2ViUHJvY2Vzc2VzKCkKK3sK
KyAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykKKyAgICAgICAgc2VuZE5ldHdv
cmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MocHJvY2Vzcyk7Cit9CisKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9y
ZUN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVD
dXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldE5ldHdvcmtQcm94eVNlCiB7CiAgICAgbV9wcm94eVNldHRpbmdzID0gV1RGTW92
ZShwcm94eVNldHRpbmdzKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9zZXNzaW9u
SUQsIG1fcHJveHlTZXR0aW5ncykpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fc2Vzc2lvbklELCBt
X3Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0
b3JlU291cC5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw4ICs0MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3
b3IKICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaWdub3JlVExTRXJyb3JzID0gbV9pZ25v
cmVUTFNFcnJvcnM7CiAgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnByb3h5U2V0dGluZ3Mg
PSBtX25ldHdvcmtQcm94eVNldHRpbmdzOwogCi0gICAgaWYgKGF1dG8qIHByb2Nlc3NQb29sID0g
cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2ll
UGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVy
c2lzdGVudFN0b3JhZ2VUeXBlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIo
KS5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChib29sIGVuYWJs
ZWQpCkBAIC01NCw4ICs1Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVu
dENyZWQKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3Jh
Z2VFbmFibGVkID0gZW5hYmxlZDsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVu
YWJsZWQobV9zZXNzaW9uSUQsIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCkp
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQobV9zZXNzaW9uSUQsIG1fcGVyc2lz
dGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKQEAgLTY0LDE1
ICs2MiwxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElnbm9yZVRMU0Vycm9yCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1faWdub3JlVExTRXJyb3JzID0gaWdub3JlVExTRXJyb3JzOwot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0SWdub3JlVExTRXJyb3JzKG1fc2Vzc2lvbklELCBtX2lnbm9yZVRMU0Vycm9ycykpOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEln
bm9yZVRMU0Vycm9ycyhtX3Nlc3Npb25JRCwgbV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXZWJDb3JlOjpT
b3VwTmV0d29ya1Byb3h5U2V0dGluZ3MmJiBzZXR0aW5ncykKIHsKICAgICBtX25ldHdvcmtQcm94
eVNldHRpbmdzID0gV1RGTW92ZShzZXR0aW5ncyk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5n
cyhtX3Nlc3Npb25JRCwgbV9uZXR3b3JrUHJveHlTZXR0aW5ncykpOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRp
bmdzKG1fc2Vzc2lvbklELCBtX25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQ
cm9jZXNzUHJveHlHTGliLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdl
dExhdW5jaE8KICAgICAgICAgaWYgKCFkYXRhU3RvcmUpIHsKICAgICAgICAgICAgIC8vIFByZXdh
cm1lZCBwcm9jZXNzZXMgZG9uJ3QgaGF2ZSBhIFdlYnNpdGVEYXRhU3RvcmUgeWV0LCBzbyB1c2Ug
dGhlIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSBmcm9tIHRoZSBXZWJQcm9jZXNzUG9vbC4KICAg
ICAgICAgICAgIC8vIFRoZSBwcm9jZXNzIHdvbid0IGJlIHVzZWQgaWYgY3VycmVudCBXZWJzaXRl
RGF0YVN0b3JlIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IG9u
ZS4KLSAgICAgICAgICAgIGRhdGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wtPndlYnNpdGVEYXRhU3Rv
cmUoKTsKKyAgICAgICAgICAgIGRhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
YXRhU3RvcmUoKS5wdHIoKTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChkYXRhU3RvcmUp
OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJv
eHlTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dl
YkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1By
b3h5LmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAi
V2ViUHJvY2Vzc1Bvb2wuaCIKIApAQCAtMzMsOCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291
cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKLSAgICBtX2Nvb2tp
ZVBlcnNpc3RlbnRTdG9yYWdlTWFwLnNldChzZXNzaW9uSUQsIHN0ZDo6bWFrZV9wYWlyKHN0b3Jh
Z2VQYXRoLCBzdG9yYWdlVHlwZSkpOwotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtp
bmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOworICAgIGlmICht
X25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQs
IHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBl
JiBzdG9yYWdlVHlwZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAv
V2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsMTUgKzM3LDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewotICAgIE5ldHdvcmtTZXNzaW9u
Q3JlYXRpb25QYXJhbWV0ZXJzJiBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAg
ICBzdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVu
dFN0b3JhZ2UoZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgZGVmYXVsdFNlc3Np
b25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgZGVmYXVsdFNlc3Npb25Q
YXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7Ci0gICAgaWYgKG1fd2Vic2l0
ZURhdGFTdG9yZSkgewotICAgICAgICBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMucGVyc2lzdGVu
dENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyc2lzdGVu
dENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpOwotICAgICAgICBkZWZhdWx0U2Vzc2lvblBhcmFt
ZXRlcnMuaWdub3JlVExTRXJyb3JzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5pZ25vcmVUTFNFcnJv
cnMoKTsKLSAgICAgICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnByb3h5U2V0dGluZ3MgPSBt
X3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm94eVNldHRpbmdzKCk7Ci0gICAgfQotCi0gICAg
cGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kgPSBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0
UG9saWN5OwogICAgIHBhcmFtZXRlcnMubGFuZ3VhZ2VzID0gdXNlclByZWZlcnJlZExhbmd1YWdl
cygpOwogICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSB0cnVlOwogfQpJ
bmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaAkocmV2aXNpb24gMjY3NTM2KQorKysg
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQog
CisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSFRUUENvb2tpZUFj
Y2VwdFBvbGljeS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKSW5kZXg6IFRvb2xzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NzUzNikKKysrIFRv
b2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDIwLTA5LTI0
ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
TW92ZSBOZXR3b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRv
IFdlYnNpdGVEYXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1vc3QgY2hhbmdlcyB0byB0ZXN0cyBhcmUganVzdCBjYWxsaW5nIGEgZnVuY3Rp
b24gb24gdGhlIFdLV2Vic2l0ZURhdGFTdG9yZSBpbnN0ZWFkIG9mIHRoZSBXS1Byb2Nlc3NQb29s
CisgICAgICAgIGJlY2F1c2Ugd2Ugd2FudCB0byBkbyBzb21ldGhpbmcgd2l0aCB0aGUgbmV0d29y
ayBwcm9jZXNzIGFuZCBpdCBoYXMgYSBuZXcgb3duZXIuCisgICAgICAgIEV4Y2VwdGlvbnMgYXJl
IG5vdGVkIGlubGluZS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05l
dHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW06CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0Rvd25sb2FkLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZG93bmxvYWRBdFJhdGUp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2lu
dFdBTC5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW06CisgICAgICAgIChURVNUKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIu
bW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tOgorICAgICAgICAoVEVTVCk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRh
YmFzZVByb2Nlc3NLaWxsLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW06CisgICAgICAg
IChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4
ZWREQlBlcnNpc3RlbmNlLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbToKKyAg
ICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCVGVtcEZpbGVTaXplLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbToK
KyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTmV0d29ya1Byb2Nlc3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50
RGF0YVN0b3JlLm1tOgorICAgICAgICAoY2hlY2tSZWNvdmVyeUFmdGVyQ3Jhc2gpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRp
b24ubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgIFRoaXMgdGVzdCB3
YXMgbWFraW5nIGEgV0tXZWJzaXRlRGF0YVN0b3JlLCBnZXR0aW5nIGl0cyByZXNvdXJjZSBsb2Fk
IHN0YXRpc3RpY3MgZGlyZWN0b3J5LAorICAgICAgICBwdXR0aW5nIHRoaW5ncyBpbiB0aGF0IGRp
cmVjdG9yeSwgdGhlbiBzdGFydGluZyB0aGUgbmV0d29yayBwcm9jZXNzIGFuZCBtYWtpbmcgc3Vy
ZSBldmVyeXRoaW5nCisgICAgICAgIHdvcmtzIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBuZXR3b3Jr
IHByb2Nlc3MuICBOb3csIG5ldHdvcmsgcHJvY2VzcyBpbml0aWFsaXphdGlvbiBoYXBwZW5zIHdo
ZW4gYQorICAgICAgICBXS1dlYnNpdGVEYXRhU3RvcmUgaXMgaW5zdGFudGlhdGVkLCBzbyB3ZSBu
ZWVkIHRvIHB1dCB0aGluZ3MgdGhlcmUgYmVmb3JlIGluc3RhbnRpYXRpbmcgYSBXS1dlYnNpdGVE
YXRhU3RvcmUuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2
aWNlV29ya2VyQmFzaWMubW06CisgICAgICAgIEJlZm9yZSB0aGlzIGNoYW5nZSwgZWFjaCBXS1By
b2Nlc3NQb29sIGhhZCBpdHMgb3duIG5ldHdvcmsgcHJvY2Vzcywgd2hpY2ggaG9sZHMgdGhlIHNl
cnZpY2Ugd29ya2VyIHJlZ2lzdHJ5CisgICAgICAgIGZvciB0aGUgV2Vic2l0ZURhdGFTdG9yZXMg
dXNlZCB3aXRoIHRoYXQgcHJvY2VzcyBwb29sLiAgTm93LCB0aGUgbmV0d29yayBwcm9jZXNzIHN0
aWxsIG5lZWRzIHRvIGhhdmUgYSBzZXJ2aWNlCisgICAgICAgIHdvcmtlciByZWdpc3RyeSBpbiBp
dCwgYnV0IHdoZW4gd2UgcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBpdCBsb29raW5nIGZvciBhIHdl
YiBwcm9jZXNzIHRvIHJ1biB0aGUgc2VydmljZQorICAgICAgICB3b3JrZXIsIHdlIGdvIGFyYml0
cmFyaWx5IHRvIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wgdGhhdCBoYXMgYSBwcm9jZXNzIHdlIGNh
biB1c2UuICBUaGlzIGxvZ2ljIGlzIGluIAorICAgICAgICBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJs
aXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzLiAgQmVjYXVzZSB3ZSB1
c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCBlYWNoCisgICAgICAgIHRpbWUsIHNldHRpbmcgdGhl
IGN1c3RvbSB1c2VyIGFnZW50IHRvIHR3byBkaWZmZXJlbnQgdGhpbmdzIGluIHR3byBkaWZmZXJl
bnQgcHJvY2VzcyBwb29scyBjYXVzZXMgb25seSBvbmUKKyAgICAgICAgdG8gYmUgdXNlZC4gIFRo
aXMgaXMgbm90IGEgcHJvYmxlbSBpbiBwcmFjdGljZSwgdGhvdWdoLCBiZWNhdXNlIHRoZSBvbmx5
IGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgU1BJIHRvCisgICAgICAgIHNldCBhIHNlcnZpY2Ug
d29ya2VyJ3MgY3VzdG9tIHVzZXIgYWdlbnQgaXMgU2FmYXJpLCB3aGljaCBvbmx5IGhhcyBvbmUg
cHJvY2VzcyBwb29sLiAgVGhpcyB0ZXN0IHN0aWxsIHZlcmlmaWVzCisgICAgICAgIHRoYXQgYSB1
c2VyIGFnZWludCBpcyBjb3JyZWN0bHkgc2VudC4KKyAgICAgICAgU2ltaWxhcmx5LCB0aGUgdGVz
dHMgdGhhdCBjb3VudCBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzZXMgZWl0aGVyIGhhdmUgZGlmZmVy
ZW50IHJlc3VsdHMgb3IgbmVlZCB0byBiZSBydW4gd2l0aAorICAgICAgICBvbmUgcHJvY2VzcyBw
b29sIHBlciBwYXJlbnQgcHJvY2Vzcy4gIFRvIGtlZXAgdGhlIHJlc3VsdHMgdGhlIHNhbWUsIEkg
c2VwYXJhdGVkIHRoZSB0ZXN0cyBpbnRvIGRpZmZlcmVudAorICAgICAgICBURVNUKFNlcnZpY2VX
b3JrZXJzLCAuLi4pIG1hY3JvcyB3aGljaCBhcmUgcnVuIGluIHNlcGFyYXRlIHBhcmVudCBwcm9j
ZXNzZXMuCisgICAgICAgIFRoZSB0ZXN0IFJlc3RvcmVGcm9tRGlza05vbkRlZmF1bHRTdG9yZSBu
ZWVkcyB0byB1c2UgdGhlIHNhbWUgZGF0YSBzdG9yZSBmb3IgYm90aCBXS1dlYlZpZXdzIG5vdyBi
ZWNhdXNlIG90aGVyd2lzZQorICAgICAgICB0aGVyZSB3YXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0
aGUgc3RhcnR1cCBvZiBhIG5ldyBuZXR3b3JrIHByb2Nlc3MgdGhhdCB3YXNuJ3QgdGhlcmUgYmVm
b3JlIGJlY2F1c2Ugd2Ugd2VyZSB1c2luZyB0aGUKKyAgICAgICAgc2FtZSBwcm9jZXNzIHBvb2wg
YW5kIHRoZXJlZm9yZSB0aGUgc2FtZSBuZXR3b3JrIHByb2Nlc3MuICBJIGFkZGVkIHNwaW5uaW5n
IHRoZSBydW4gbG9vcCBhbmQgc2xlZXBpbmcgdG8gYmUgYWJsZSB0bworICAgICAgICByZXByb2R1
Y2UgdGhlIHJhY2UgY29uZGl0aW9uIGZhaWx1cmUgYW5kIEkgdXNlIHRoZSBzYW1lIFdLV2Vic2l0
ZURhdGFTdG9yZSB0byB1c2UgdGhlIHNhbWUgbmV0d29yayBwcm9jZXNzLCB3aGljaCB3YXMKKyAg
ICAgICAgdGhlIGludGVudCBvZiB1c2luZyB0aGUgc2FtZSBXS1Byb2Nlc3NQb29sIGJlZm9yZS4g
IFRoZSB0ZXN0IHN0aWxsIHRlc3RzIHRoYXQgdGhlIHJlZ2lzdHJhdGlvbiBpcyByZS11c2VkIHdo
ZW4gd2UgYXJlCisgICAgICAgIG5vdCB1c2luZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlLgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2lj
Lm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29v
a2llU3RvcmUubW06CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2Vi
VmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6
Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVs
ZWdhdGUgd2FpdEZvck1lc3NhZ2VdKToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlE
ZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICBUaGlz
IGlzIHRoZSB3aG9sZSBwb2ludCBvZiBtZSBkb2luZyB0aGlzLgorICAgICAgICBJIHRvb2sgYSB0
ZXN0IHRoYXQgd2FzIGZsYWt5IG9ubHkgb24gaU9TIChiZWNhdXNlIG9mIGRpZmZlcmVudCBOU0hU
VFBDb29raWVTdG9yYWdlIHN5bmNpbmcgYmVoYXZpb3IpIGFuZCBtYWRlCisgICAgICAgIGl0IGZs
YWt5IG5vd2hlcmUgKGZpbmdlcnMgY3Jvc3NlZCEpIGFuZCBhZGRlZCBhIHRlc3QgdGhhdCBjb3Jy
ZWN0bHkgaGFuZGxlcyBzZXNzaW9uIGNvb2tpZXMgbGlrZSB3ZSBjb3VsZCBub3QKKyAgICAgICAg
YmVmb3JlIHRoaXMgY2hhbmdlLgorICAgICAgICBJIGFsc28gcmUtdXNlZCBzb21lIHRlc3QgaW5m
cmFzdHJ1Y3R1cmUgYW5kIG1hZGUgaXQgc3RvcCB1c2luZyBwcm9jZXNzLWdsb2JhbCBzdGF0aWMg
dmFyaWFibGVzIGZvciB0ZXN0IHN0YXRlLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tOgorICAgICAgICAoVEVTVCk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0
b3JlQ3VzdG9tUGF0aHMubW06CisgICAgICAgIChydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0
aHMpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRPYmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW06CisgICAgICAgICgtW0Nsb3NlV2hpbGVTdGFy
dGluZ1Byb3RvY29sIHN0YXJ0TG9hZGluZ10pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6cnVu
VGVzdCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVz
KToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmZpbmRBbmREdW1wV2ViS2l0UHJvY2Vz
c0lkZW50aWZpZXJzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6Om5ldHdvcmtQcm9j
ZXNzRGlkQ3Jhc2gpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlTmV0
d29ya1Byb2Nlc3MpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1
c3RDb250ZXh0KToKKyAgICAgICAgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVG
b3JTZXJ2aWNlV29ya2VyVGVzdGluZyBpcyBub3QgbmVlZGVkLCBzbyBJIHJlbW92ZWQgaXQuCisg
ICAgICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlIGlzbid0IG5lZWRlZCBh
bnkgbW9yZSBiZWNhdXNlIFdLQ29udGV4dFJlZiAoV2ViUHJvY2Vzc1Bvb2wpIGRvZXNuJ3QKKyAg
ICAgICAgb3duIGEgbmV0d29yayBwcm9jZXNzIGFueSBtb3JlLCBzbyBpdCBkb2Vzbid0IGNhcmUg
d2hpY2ggaXMgdGhlIGRlZmF1bHQgV2Vic2l0ZURhdGFTdG9yZS4KKyAgICAgICAgSW4gZmFjdCwg
dGhlICJkZWZhdWx0IiBXZWJzaXRlRGF0YVN0b3JlIGlzbid0IHJlYWxseSBpbXBvcnRhbnQgaW4g
dGhlIG5ldHdvcmsgcHJvY2VzcyBhbnkgbW9yZS4KKwogMjAyMC0wOS0yNCAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bV1BFXSBNb3Zl
IHByb3h5IHNldHRpbmdzIGZyb20gV2ViS2l0Q29udGV4dCB0byBXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29u
bmVjdGlvbi5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc0dy
b3VwUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
c2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtODcsNyArODgsNyBAQCBURVNUKFdlYktpdCwgTmV0
d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kCiAgICAgcGlkX3Qgd2ViVmlldzJQSUQgPSBbd2ViVmll
dzIuZ2V0KCkgX3dlYlByb2Nlc3NJZGVudGlmaWVyXTsKICAgICBFWFBFQ1RfTkUod2ViVmlldzFQ
SUQsIHdlYlZpZXcyUElEKTsKIAotICAgIHBpZF90IGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50
aWZpZmVyID0gW3Byb2Nlc3NQb29sLmdldCgpIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdOwor
ICAgIHBpZF90IGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVyID0gW2NvbmZpZ3VyYXRp
b24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXTsKICAg
ICBFWFBFQ1RfTkUoaW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlmZXIsIDApOwogICAgIGtp
bGwoaW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlmZXIsIFNJR0tJTEwpOwogICAgIFV0aWw6
OnJ1bigmbmV0d29ya1Byb2Nlc3NDcmFzaGVkKTsKQEAgLTk2LDcgKzk3LDcgQEAgVEVTVChXZWJL
aXQsIE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZAogICAgIFt3ZWJWaWV3MS5nZXQoKSBsb2Fk
UmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRs
ZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJl
Y3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXV07CiAgICAgW3dlYlZpZXcxLmdldCgp
IF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKIAotICAgIHBpZF90IHJlbGF1bmNo
ZWROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIgPSBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX25ldHdvcmtQ
cm9jZXNzSWRlbnRpZmllcl07CisgICAgcGlkX3QgcmVsYXVuY2hlZE5ldHdvcmtQcm9jZXNzSWRl
bnRpZmllciA9IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQ
cm9jZXNzSWRlbnRpZmllcl07CiAgICAgRVhQRUNUX05FKGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZmVyLCByZWxhdW5jaGVkTmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKTsKICAgICBFWFBF
Q1RfRkFMU0UobmV0d29ya1Byb2Nlc3NDcmFzaGVkKTsKIApAQCAtMTQ2LDggKzE0Nyw4IEBAIFRF
U1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc1JlbGF1bmNoT25MYXUKIAogICAgIC8vIENvbnN0dWN0
aW5nIGEgV2ViVmlldyBzdGFydHMgYSBuZXR3b3JrIHByb2Nlc3Mgc28gdGVybWluYXRlIHRoaXMg
b25lLiBUaGUgcGFnZSBsb2FkIGJlbG93IHdpbGwgdGhlbiByZXF1ZXN0IGEgbmV0d29yayBwcm9j
ZXNzIGFuZCB3ZQogICAgIC8vIG1ha2UgdGhpcyBuZXcgbmV0d29yayBwcm9jZXNzIGxhdW5jaCBj
cmFzaCBvbiBzdGFydHVwLgotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdOwotICAgIFtwcm9jZXNzUG9vbCBfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxG
b3JUZXN0aW5nXTsKKyAgICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9tYWtlTmV4dE5ldHdvcmtQcm9j
ZXNzTGF1bmNoRmFpbEZvclRlc3RpbmddOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNp
dGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gZGVsZWdh
dGUgPSBhZG9wdE5TKFtbTW9uaXRvcldlYkNvbnRlbnRDcmFzaE5hdmlnYXRpb25EZWxlZ2F0ZSBh
bGxvY10gaW5pdF0pOwogICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0
ZS5nZXQoKV07CkBAIC0xNTgsNyArMTU5LDcgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNz
UmVsYXVuY2hPbkxhdQogICAgIEVYUEVDVF9UUlVFKG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk7CiAg
ICAgRVhQRUNUX0ZBTFNFKHdlYlByb2Nlc3NDcmFzaGVkKTsKICAgICBFWFBFQ1RfR1QoW3dlYlZp
ZXcgX3dlYlByb2Nlc3NJZGVudGlmaWVyXSwgMCk7Ci0gICAgRVhQRUNUX0dUKFtwcm9jZXNzUG9v
bC5nZXQoKSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXSwgMCk7CisgICAgRVhQRUNUX0dUKFtj
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRp
Zmllcl0sIDApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0JKHJl
dmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
RG93bmxvYWQubW0JKHdvcmtpbmcgY29weSkKQEAgLTg4OSw5ICs4ODksOSBAQCB2b2lkIGRvd25s
b2FkQXRSYXRlKGRvdWJsZSBkZXNpcmVkS2JwcywgCiAgICAgcmVjZWl2ZWREYXRhID0gZmFsc2U7
CiAgICAgVXRpbDo6cnVuKCZyZWNlaXZlZERhdGEpOwogICAgIC8vIFN0YXJ0IHRoZSBEb3dubG9h
ZE1vbml0b3IncyB0aW1lci4KLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bv
b2wgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKKyAgICBbW3dlYlZpZXcgY29uZmln
dXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpZRVNd
OwogICAgIGlmIChyZXR1cm5Ub0ZvcmVncm91bmQgPT0gQXBwUmV0dXJuc1RvRm9yZWdyb3VuZDo6
WWVzKQotICAgICAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3N5bnRo
ZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9dOworICAgICAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlv
bl0ud2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpOT107CiAgICAg
ZGlkQ2FuY2VsID0gZmFsc2U7CiAgICAgVXRpbDo6cnVuKCZkaWRDYW5jZWwpOwogICAgIHRlcm1p
bmF0ZVNlcnZlciA9IHRydWU7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tCShyZXZpc2lvbiAyNjc1
MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9p
bnRXQUwubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktp
dC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRD
b250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRp
b25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQ
b29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+
CkBAIC04Niw3ICs4Nyw3IEBAIFRFU1QoSW5kZXhlZERCLCBDaGVja3BvaW50c1dBTEF1dG9tYXRp
Y2EKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tj
b25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRs
ZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdOwogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29u
ZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVy
eS5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JREJEZWxldGVSZWNvdmVyeS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNp
dGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0
IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQv
X1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJbmRleGVkREIsIERl
bGV0ZVJlY292ZXJ5KQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25m
aWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRd
KTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRN
ZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IHRoZSBpbmNvbnNpc3RlbnQgZGF0YWJhc2Ug
ZmlsZXMgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeQogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1
bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklEQkRlbGV0ZVJlY292ZXJ5IiB3aXRo
RXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJj
ZXMiXTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5k
ZXhVcGdyYWRlVG9WMi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0JKHJldmlzaW9uIDI2NzUzNikKKysr
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9W
Mi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dL
UHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRy
b2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblBy
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAg
LTU4LDcgKzU5LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4VXBncmFkZVRvVjIpCiAgICAgUmV0
YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtb
V0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlv
biB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIu
Z2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5w
cm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAg
IC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0aGUgZGF0YWJhc2Ug
ZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZv
clJlc291cmNlOkAiSW5kZXhVcGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGly
ZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJP
YmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRl
VG9WMi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0
L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENv
bnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlv
blByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bv
b2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4K
QEAgLTU3LDcgKzU4LDcgQEAgVEVTVChJbmRleGVkREIsIElEQk9iamVjdFN0b3JlSW5mb1VwZ3Jh
ZAogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0g
YWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2Nv
bmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxl
cjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRp
b24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29u
ZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CiAKICAgICAvLyBDb3B5IGRhdGFiYXNlIGZpbGVzIHdpdGggb2xkIE9iamVjdFN0b3JlSW5m
byBzY2hlbWEgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeS4KICAgICBOU1VSTCAqdXJsMSA9IFtb
TlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJPYmplY3RTdG9yZUluZm9V
cGdyYWRlIiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktp
dEFQSS5yZXNvdXJjZXMiXTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vz
c0tpbGwubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2Vi
S2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC05Miw3ICs5Myw3IEBAIFRFU1QoSW5kZXhlZERC
LCBEYXRhYmFzZVByb2Nlc3NLaWxsKQogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgICAgIGlmICgha2lsbGVkREJQcm9jZXNzICYm
IG9wZW5SZXF1ZXN0VXBncmFkZU5lZWRlZCkgewogICAgICAgICAgICAga2lsbGVkREJQcm9jZXNz
ID0gdHJ1ZTsKLSAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgICAgICAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgICAgIH0K
ICAgICB9CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5k
ZXhlZERCTXVsdGlQcm9jZXNzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCShyZXZpc2lvbiAyNjc1
MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11
bHRpUHJvY2Vzcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8
V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBv
cnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgogI2ltcG9ydCA8d3RmL0RlcXVlLmg+CkBA
IC02OSw3ICs3MCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJNdWx0aVByb2Nlc3MpCiAg
ICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9w
dE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmln
dXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhh
bmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5n
ZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
IAogICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3Vy
YXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVu
Y2UubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTc4LDcg
Kzc4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlBlcnNpc3RlbmNlKQogICAgIHdlYlZp
ZXcgPSBuaWw7CiAKICAgICAvLyBUZXJtaW5hdGUgdGhlIG5ldHdvcmsgcHJvY2VzcwotICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gTWFrZSBhIG5ldyB3ZWIgdmlldyB0byBmaW5pc2ggdGhl
IHRlc3QKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRp
b24uZ2V0KCldKTsKQEAgLTI2OCw3ICsyNjgsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERC
VGhpcmRQYXJ0eUZyYW1lCiAKICAgICB3ZWJWaWV3ID0gbmlsOwogICAgIHNlY29uZFdlYlZpZXcg
PSBuaWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3Jl
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBUaGlyZC1wYXJ0eSBJREIgc3Rv
cmFnZSBpcyBzdG9yZWQgaW4gdGhlIG1lbW9yeSBvZiBuZXR3b3JrIHByb2Nlc3MuCiAgICAgYXV0
byB0aGlyZFdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5n
ZXQoKV0pOwpAQCAtMzg1LDcgKzM4NSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUaGly
ZFBhcnR5V29ya2UKIAogICAgIHdlYlZpZXcgPSBuaWw7CiAgICAgc2Vjb25kV2ViVmlldyA9IG5p
bDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0gYWRvcHRO
UyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwg
NjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBsb2FkVGVzdFBh
Z2VJbldlYlZpZXcodGhpcmRXZWJWaWV3LmdldCgpLCBAImRhdGFiYXNlIGlzIGNyZWF0ZWQiKTsK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3Vz
cGVuZEltbWluZW50bHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbQkocmV2aXNpb24gMjY3
NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJT
dXNwZW5kSW1taW5lbnRseS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lt
cG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tV
c2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3
Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3Rv
cmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQv
X1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CkBAIC04OCw4ICs4OSw4IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJTdXNwZW5kSW1taW5l
bnQKIAogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkNvbnRpbnVlIik7CiAKLSAgICBbY29u
ZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5XTsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2Vu
ZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJz
aXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwor
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJv
Y2Vzc0RpZFJlc3VtZV07CiAKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJFeHBlY3RlZCBB
Ym9ydCBGb3IgU3VzcGVuc2lvbiIpOwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAIkV4cGVj
dGVkIFN1Y2Nlc3MgQWZ0ZXIgUmVzdW1lIik7CkBAIC0xNTgsOCArMTU5LDggQEAgVEVTVChJbmRl
eGVkREIsIFN1c3BlbmRJbW1pbmVudGx5Rm9yVGhpcgogICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3Ry
aW5nOm1haW5GcmFtZVN0cmluZyBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDov
L3dlYmtpdC5vcmciXV07CiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiZGF0YWJhc2UgaXMg
Y3JlYXRlZCIpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmRO
ZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07Ci0gICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2ls
bFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0
YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgcnVuVGVzdEFuZENo
ZWNrUmVzdWx0KEAidHJhbnNhY3Rpb24gaXMgY29tcGxldGVkIik7CiB9CkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4
ZWREQlRlbXBGaWxlU2l6ZS5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTk1LDcgKzk1LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlRlbXBGaWxl
U2l6ZSkKIAogICAgIC8vIFRlcm1pbmF0ZSBuZXR3b3JrIHByb2Nlc3MgdG8ga2VlcCBXQUwgb24g
ZGlzay4KICAgICB3ZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nl
c3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0
KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgRVhQ
RUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRo
OndhbEZpbGVQYXRoLmdldCgpLnBhdGhdKTsKICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBm
aWxlQXR0cmlidXRlcyA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gYXR0cmlidXRl
c09mSXRlbUF0UGF0aDp3YWxGaWxlUGF0aC5nZXQoKS5wYXRoIGVycm9yOm5pbF07CkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3Rl
bmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2Uu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Vz
ZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdD
b25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2VicGFnZVByZWZlcmVu
Y2VzUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5o
PgpAQCAtMTA5LDcgKzExMCw3IEBAIFRFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNz
Q3Jhc2gKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2Fn
ZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAic2Vzc2lvbjpzdG9yYWdlIiwgW2xhc3RTY3JpcHRN
ZXNzYWdlIGJvZHldKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0
ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgcmVjZWl2ZWRTY3Jp
cHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZl
ZFNjcmlwdE1lc3NhZ2UpOwpAQCAtMTYyLDcgKzE2Myw3IEBAIFRFU1QoV0tXZWJWaWV3LCBMb2Nh
bFN0b3JhZ2VQcm9jZXNzU3VzcGUKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2Vp
dmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAidmFsdWUiLCBbbGFzdFNj
cmlwdE1lc3NhZ2UgYm9keV0pOwogCi0gICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29y
a1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRs
eV07CiAKICAgICByZWFkeVRvQ29udGludWUgPSBmYWxzZTsKICAgICBbd2ViVmlldzEgZXZhbHVh
dGVKYXZhU2NyaXB0OkAid2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdrZXknLCAnbmV3VmFs
dWUnKSIgY29tcGxldGlvbkhhbmRsZXI6XihpZCwgTlNFcnJvciAqKSB7CkBAIC0xNzcsNyArMTc4
LDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZQogICAgIH1dOwog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0NvbnRpbnVlKTsKICAgICAKLSAg
ICBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNz
RGlkUmVzdW1lXTsKIAogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwogICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3Jr
UHJvY2Vzcy5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgsNyAr
MjgsNyBAQAogI2ltcG9ydCAiSFRUUFNlcnZlci5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5o
IgogI2ltcG9ydCAiVXRpbGl0aWVzLmgiCi0jaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFBy
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAj
aW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBv
cnQgPHd0Zi9WZWN0b3IuaD4KQEAgLTM3LDE0ICszNywxNCBAQCBURVNUKFdlYktpdCwgTmV0d29y
a1Byb2Nlc3NFbnRpdGxlbWVudHMpCiB7CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYw
MCkgY29uZmlndXJhdGlvbjpbW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBh
dXRvcmVsZWFzZV1dKTsKICAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFt
ZWQ6QCJzaW1wbGUiXTsKLSAgICBXS1Byb2Nlc3NQb29sICpwb29sID0gW3dlYlZpZXcgY29uZmln
dXJhdGlvbl0ucHJvY2Vzc1Bvb2w7Ci0gICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9IFtwb29sIF9u
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAImNvbS5hcHBsZS5yb290bGVz
cy5zdG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94Il07CisgICAgV0tXZWJzaXRlRGF0YVN0
b3JlICpzdG9yZSA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmU7Cisg
ICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9IFtzdG9yZSBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxl
bWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Muc3RvcmFnZS5XZWJLaXROZXR3b3Jr
aW5nU2FuZGJveCJdOwogI2lmIFBMQVRGT1JNKE1BQykgJiYgVVNFKEFQUExFX0lOVEVSTkFMX1NE
SykKICAgICBFWFBFQ1RfVFJVRShoYXNFbnRpdGxlbWVudCk7CiAjZWxzZQogICAgIEVYUEVDVF9G
QUxTRShoYXNFbnRpdGxlbWVudCk7CiAjZW5kaWYKLSAgICBFWFBFQ1RfRkFMU0UoW3Bvb2wgX25l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAidGVzdCBmYWlsdXJlIGNhc2Ui
XSk7CisgICAgRVhQRUNUX0ZBTFNFKFtzdG9yZSBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVu
dEZvclRlc3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJdKTsKIH0KIAogVEVTVChXZWJLaXQsIEhU
VFBSZWZlcmVyKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9O
ZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jh
c2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCShyZXZpc2lvbiAyNjc1MzYpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJz
aXN0ZW50RGF0YVN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRp
YyB2b2lkIGNoZWNrUmVjb3ZlcnlBZnRlckNyYXNoKFdLV2UKICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtbd2ViVmlldyBjb25m
aWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtb
d2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0
V2l0aFVSTDpzaW1wbGUyXV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsK
IH0KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3
YXBPbk5hdmlnYXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQkocmV2aXNpb24gMjY3NTM2
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9u
TmF2aWdhdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNTM4NSw3ICs1Mzg1LDcgQEAgVEVTVChQ
cm9jZXNzU3dhcCwgVXNlUHJld2FybWVkUHJvY2Vzc0FmdAogCiAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFT
dG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MiA9IGFk
b3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4
MDAsIDYwMCkgY29uZmlndXJhdGlvbjp3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAg
IFt3ZWJWaWV3MiBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwpJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC03MTksNyArNzE5LDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLCBOZXR3b3JrUHJvYwogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxv
b3AoMSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3Rv
cmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9w
dE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAw
LCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkBAIC03NTIsNyAr
NzUyLDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBOZXR3b3JrUHJvYwogCiAgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKIAogICAgIGF1dG8gd2ViVmlldzMgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOwogCkBAIC0xNTU4LDEwICsxNTU4LDggQEAgVEVTVChSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLCBNaWdyYXRlRGF0YQogCiBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3Ms
IENhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2wpCiB7CisgICAgTlNVUkwgKml0
cFJvb3RVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1RlbXBvcmFyeURpcmVjdG9yeSgp
IHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkNhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0
aE5vUHJvY2Vzc1Bvb2xUZXN0Il0gaXNEaXJlY3Rvcnk6WUVTXTsKICAgICBhdXRvIGRlZmF1bHRG
aWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKLSAgICBfV0tXZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dL
V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07Ci0gICAgYXV0
byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25m
aWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKLSAgICBOU1VS
TCAqaXRwUm9vdFVSTCA9IFtbZGF0YVN0b3JlIF9jb25maWd1cmF0aW9uXSBfcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RpcmVjdG9yeV07CiAgICAgTlNVUkwgKmZpbGVVUkwgPSBbaXRwUm9vdFVSTCBV
UkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJvYnNlcnZhdGlvbnMuZGIiXTsKICAgICBbZGVm
YXVsdEZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFBhdGg6aXRwUm9vdFVSTC5wYXRoIGVycm9yOm5p
bF07CiAgICAgRVhQRUNUX0ZBTFNFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0
aDppdHBSb290VVJMLnBhdGhdKTsKQEAgLTE1NzIsNiArMTU3MCwxMCBAQCBURVNUKFJlc291cmNl
TG9hZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0RhCiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1bHRGaWxl
TWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOm5ld0ZpbGVVUkwucGF0aF0pOwogICAgIFtkZWZhdWx0
RmlsZU1hbmFnZXIgY29weUl0ZW1BdFBhdGg6bmV3RmlsZVVSTC5wYXRoIHRvUGF0aDpmaWxlVVJM
LnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZp
bGVFeGlzdHNBdFBhdGg6ZmlsZVVSTC5wYXRoXSk7CisKKyAgICBfV0tXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFT
dG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgZGF0YVN0b3JlQ29uZmln
dXJhdGlvbi5fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IGl0cFJvb3RVUkw7Cisg
ICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdp
dGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKICAg
ICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZRVNdOwogCiAg
ICAgc3RhdGljIGJvb2wgZG9uZUZsYWcgPSBmYWxzZTsKQEAgLTE2MzMsMTIgKzE2MzUsMTIgQEAg
VEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBTdG9yZVN1c3BlbgogICAgIFt3ZWJWaWV3MiBf
dGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CiAKICAgICBkb25lRmxhZyA9IGZhbHNl
OwotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZDpeeworICAgIFtkYXRhU3RvcmUxIF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNw
ZW5kOl57CiAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKICAgICB9XTsKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKIAotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2Vu
ZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbZGF0YVN0b3JlMSBfc2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lXTsKIH0KIAogQGludGVyZmFjZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U2NoZW1lSGFuZGxlciA6IE5TT2JqZWN0IDxXS1VSTFNjaGVtZUhhbmRsZXI+CkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZp
Y2VXb3JrZXJCYXNpYy5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTU1OCw3ICs1NTgsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBVc2VyQWdlbnRPdmVycmlk
ZSkKIAogICAgIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlv
biBhbGxvY10gaW5pdF0pOwogCi0gICAgbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbU1dVc2Vy
QWdlbnRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJNZXNz
YWdlIGZyb20gd29ya2VyOiBCYXIgQ3VzdG9tIFVzZXJBZ2VudCJdKTsKKyAgICBtZXNzYWdlSGFu
ZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0
aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6IEZvbyBDdXN0b20gVXNlckFn
ZW50Il0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNj
cmlwdE1lc3NhZ2VIYW5kbGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJzdyJdOwogCiAg
ICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNN
YWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgp
XSk7CkBAIC02MzMsOCArNjMzLDYgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgQ2FjaGVTdG9yYWdl
UmVzdG9yZQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9
IGZhbHNlOwogCi0gICAgW1dLV2Vic2l0ZURhdGFTdG9yZSBfZGVsZXRlRGVmYXVsdERhdGFTdG9y
ZUZvclRlc3RpbmddOwotCiAgICAgU2VydmljZVdvcmtlclRDUFNlcnZlciBzZXJ2ZXIoewogICAg
ICAgICB7ICJ0ZXh0L2h0bWwiLCBtYWluQ2FjaGVTdG9yYWdlQnl0ZXMgfQogICAgIH0sIHsKQEAg
LTk4Miw2ICs5ODAsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vz
CiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgc2V0
Q29uZmlndXJhdGlvbkluamVjdGVkQnVuZGxlUGF0aChjb25maWd1cmF0aW9uLmdldCgpKTsKKyAg
ICBSZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gb3JpZ2luYWxQcm9jZXNzUG9vbCA9IGNvbmZpZ3Vy
YXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2w7CiAKICAgICBkb25lID0gZmFsc2U7CiAKQEAgLTEwMzUs
NyArMTAzNCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXMKICAg
ICBkb25lID0gZmFsc2U7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5nIHRoZSBzaW1w
bGUgcGFnZSBkaWQgbm90IHN0YXJ0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgotICAgIEVY
UEVDVF9FUSgwdSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2
aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCku
Y29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CiAK
ICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOm5ld0NvbmZpZ3VyYXRpb24u
Z2V0KCldKTsKICAgICBFWFBFQ1RfRVEoMnUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5w
cm9jZXNzUG9vbC5fd2ViUHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3YXJtZWQpOwpAQCAtMTA0Myw5
ICsxMDQyLDggQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU2VydmljZVdvcmtlclByb2NlcwogICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwogCi0g
ICAgLy8gTWFrZSBzdXJlIHRoYXQgbG9hZGluZyB0aGlzIHBhZ2UgZGlkIHN0YXJ0IHRoZSBzZXJ2
aWNlIHdvcmtlciBwcm9jZXNzLgogICAgIEVYUEVDVF9FUSgxdSwgd2ViVmlldy5nZXQoKS5jb25m
aWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKLQorICAg
IEVYUEVDVF9FUSgxdSwgb3JpZ2luYWxQcm9jZXNzUG9vbC5nZXQoKS5fc2VydmljZVdvcmtlclBy
b2Nlc3NDb3VudCk7CiAgICAgW1tjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVdIHJlbW92
ZURhdGFPZlR5cGVzOltXS1dlYnNpdGVEYXRhU3RvcmUgYWxsV2Vic2l0ZURhdGFUeXBlc10gbW9k
aWZpZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQYXN0XSBjb21wbGV0aW9uSGFuZGxlcjpeKCkgewog
ICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9XTsKQEAgLTE2MTgsMjEgKzE2MTYsMzUgQEAgc3Rh
dGljIHNpemVfdCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2VzcwogICAgIHJldHVybiB3ZWJWaWV3
LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudElnbm9yaW5n
UHJld2FybWVkOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZkFuZEluUHJvY2Vzc1Nl
cnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZlByb2Nlc3NTZXJ2aWNlV29y
a2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7
CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgx
dSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RFU1QoU2VydmljZVdvcmtlcnMs
IEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVl
OworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykpOwogfQogCi1U
RVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdo
U2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5rQmVmb3Jl
TmF2aWdhdGluZ1Rocm91Z2hPdXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewogICAgIGJvb2wg
dXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9vbCBmaXJzdExv
YWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNoU2VydmljZVdv
cmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGZpcnN0TG9hZEFi
b3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZv
cmVOYXZpZ2F0aW5nVGhyb3VnaEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9h
ZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29y
a2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJzdExvYWRBYm91
dEJsYW5rKSk7CiB9CiAKQEAgLTE4NDcsOCArMTg1OSw4IEBAIFRFU1QoU2VydmljZVdvcmtlcnMs
IFJlc3RvcmVGcm9tRGlza05vbkQKICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IGNyZWF0ZURpcmVjdG9yeUF0VVJMOnN3REJQYXRoIHdpdGhJbnRlcm1lZGlhdGVEaXJlY3Rvcmll
czpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfVFJVRShbW05TRmls
ZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0aF0p
OwogCi0gICAgLy8gV2UgcHJvdGVjdCB0aGUgcHJvY2VzcyBwb29sIHNvIHRoYXQgaXQgb3V0bGl2
ZXMgdGhlIFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgUmV0YWluUHRyPFdLUHJvY2Vzc1Bvb2w+IHBy
b3RlY3RlZFByb2Nlc3NQb29sOworICAgIFJldGFpblB0cjxXS1dlYnNpdGVEYXRhU3RvcmU+IHBy
b3RlY3RlZFdlYnNpdGVEYXRhU3RvcmU7CiAKICAgICBTZXJ2aWNlV29ya2VyVENQU2VydmVyIHNl
cnZlcih7CiAgICAgICAgIHsgInRleHQvaHRtbCIsIG1haW5SZWdpc3RlcmluZ1dvcmtlckJ5dGVz
IH0sCkBAIC0xODcxLDYgKzE4ODMsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBSZXN0b3JlRnJv
bURpc2tOb25ECiAKICAgICAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0
aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICAgICAgcHJvdGVjdGVkUHJvY2Vzc1Bvb2wg
PSB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2w7CisgICAgICAgIHByb3Rl
Y3RlZFdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0
ZURhdGFTdG9yZTsKIAogICAgICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpzZXJ2ZXIucmVxdWVz
dCgpXTsKIApAQCAtMTg4MCwxMyArMTg5MywxNSBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBSZXN0
b3JlRnJvbURpc2tOb25ECiAgICAgICAgIFt3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJv
Y2Vzc1Bvb2wgX3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzXTsKICAgICB9CiAKKyAgICAvLyBNYWtl
IHVzIG1vcmUgbGlrZWx5IHRvIGxvc2UgYW55IHJhY2VzIHdpdGggc2VydmljZSB3b3JrZXIgaW5p
dGlhbGl6YXRpb24uCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMTApOwor
ICAgIHVzbGVlcCgxMDAwMCk7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3Ao
MTApOworCiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAgICAgICAgIGF1dG8gY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAKLSAg
ICAgICAgYXV0byB3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tfV0tX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwotICAgICAgICB3ZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS5fc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSA9IHN3REJQYXRoOwotICAgICAgICBhdXRvIG5vbkRlZmF1bHREYXRhU3RvcmUg
PSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0
aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpXSk7Ci0gICAgICAgIGNvbmZp
Z3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSA9IG5vbkRlZmF1bHREYXRhU3RvcmUuZ2V0
KCk7CisgICAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSA9IHByb3Rl
Y3RlZFdlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7CiAKICAgICAgICAgYXV0byBtZXNzYWdlSGFuZGxl
ciA9IGFkb3B0TlMoW1tTV01lc3NhZ2VIYW5kbGVyRm9yUmVzdG9yZUZyb21EaXNrVGVzdCBhbGxv
Y10gaW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJQQVNTOiBSZWdpc3RyYXRpb24gYWxyZWFkeSBo
YXMgYW4gYWN0aXZlIHdvcmtlciJdKTsKICAgICAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250
ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0
KCkgbmFtZTpAInN3Il07CkBAIC0xOTQ0LDExICsxOTU5LDExIEBAIFRFU1QoU2VydmljZVdvcmtl
cnMsIFN1c3BlbmROZXR3b3JrUHJvY2UKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdl
ciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAg
ICBbIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQ
cm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1
cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1t
aW5lbnRseV07CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFn
ZXJdIGZpbGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0aF0pOwogCi0gICAgWyB3ZWJWaWV3Lmdl
dCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3Vt
ZV07CisgICAgW3dlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9z
ZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6
c2VydmVyLnJlcXVlc3QoKV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2ll
U3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDc5LDggKzQ3OSw2IEBAIC0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICop
d2ViVmlldyBydW4KIH0KIEBlbmQKIAotLy8gRklYTUU6IG9uIGlPUywgVUkgcHJvY2VzcyBzaG91
bGQgYmUgdXNpbmcgdGhlIHNhbWUgY29va2llIGZpbGUgYXMgdGhlIG5ldHdvcmsgcHJvY2VzcyBm
b3IgZGVmYXVsdCBzZXNzaW9uLgotI2lmIFBMQVRGT1JNKE1BQykKIGVudW0gY2xhc3MgU2hvdWxk
RW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgeyBObywgWWVzIH07CiB2b2lkIHJ1bldLSFRUUENvb2tp
ZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNo
b3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nKQogewpAQCAtNTg5LDIwICs1ODcsNjYgQEAgVEVT
VChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQbwogICAgIHJ1bldLSFRUUENvb2tp
ZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nOjpZ
ZXMpOwogfQogCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCiBAaW50ZXJmYWNlIENoZWNrU2Vz
c2lvbkNvb2tpZVVJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVnYXRlPgorLSAoTlNTdHJp
bmcgKilhbGVydENvb2tpZUhUTUw7CistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNzYWdlOwogQGVu
ZAogCi1AaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZQorQGltcGxl
bWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgeworICAgIFJldGFpblB0cjxO
U1N0cmluZz4gX21lc3NhZ2U7Cit9CisKIC0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2Vi
VmlldyBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3Nh
Z2UgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBFWFBFQ1RfU1RSRVEo
IlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIiwgbWVzc2FnZS5VVEY4U3RyaW5nKTsKKyAg
ICBfbWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgZmluaXNoZWQgPSB0cnVlOwogICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CiB9CisKKy0gKE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2UKK3sKKyAgICB3
aGlsZSAoIV9tZXNzYWdlKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9v
cCgpOworICAgIHJldHVybiBfbWVzc2FnZS5hdXRvcmVsZWFzZSgpOworfQorCistIChOU1N0cmlu
ZyAqKWFsZXJ0Q29va2llSFRNTAoreworICAgIHJldHVybiBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMg
PSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVz
Lmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2ll
cy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsKK30KKwogQGVu
ZAogCitURVNUKFdlYktpdCwgV0tIVFRQQ29va2llU3RvcmVNdWx0aXBsZVZpZXdzKQoreworICAg
IFRlc3RXS1dlYlZpZXcgKndlYlZpZXcxID0gW1tUZXN0V0tXZWJWaWV3IG5ld10gYXV0b3JlbGVh
c2VdOworICAgIFt3ZWJWaWV3MSBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCJzdGFydCBu
ZXR3b3JrIHByb2Nlc3MiXTsKKworICAgIE5TSFRUUENvb2tpZSAqc2Vzc2lvbkNvb2tpZSA9IFtO
U0hUVFBDb29raWUgY29va2llV2l0aFByb3BlcnRpZXM6QHsKKyAgICAgICAgTlNIVFRQQ29va2ll
UGF0aDogQCIvIiwKKyAgICAgICAgTlNIVFRQQ29va2llTmFtZTogQCJTZXNzaW9uQ29va2llTmFt
ZSIsCisgICAgICAgIE5TSFRUUENvb2tpZVZhbHVlOiBAIkNvb2tpZVZhbHVlIiwKKyAgICAgICAg
TlNIVFRQQ29va2llRG9tYWluOiBAIjEyNy4wLjAuMSIsCisgICAgfV07CisKKyAgICBfX2Jsb2Nr
IGJvb2wgc2V0Q29va2llRG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3MS5jb25maWd1cmF0aW9u
LndlYnNpdGVEYXRhU3RvcmUuaHR0cENvb2tpZVN0b3JlIHNldENvb2tpZTpzZXNzaW9uQ29va2ll
IGNvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIHNldENvb2tpZURvbmUgPSB0cnVlOworICAg
IH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmc2V0Q29va2llRG9uZSk7CisKKyAg
ICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBu
ZXddKTsKKyAgICBbd2ViVmlldzEgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAg
ICBbd2ViVmlldzEgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFz
ZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQ
RUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFt
ZT1Db29raWVWYWx1ZSIpOworCisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzIgPSBbW1Rlc3RX
S1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcyIHNldFVJRGVsZWdhdGU6
ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3MiBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUg
YWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEy
Ny4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdl
XSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7Cit9CisKIFRFU1QoV0tIVFRQQ29v
a2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Npb24pCiB7CiAgICAgUmV0
YWluUHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4gZXBoZW1lcmFsU3RvcmVXaXRoQ29va2llcyA9IFtX
S1dlYnNpdGVEYXRhU3RvcmUgbm9uUGVyc2lzdGVudERhdGFTdG9yZV07CkBAIC02MjcsOSArNjcx
LDggQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQbwogICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOwogICAgIGZpbmlzaGVkID0gZmFsc2U7CiAg
ICAgCi0gICAgTlNTdHJpbmcgKmFsZXJ0Q29va2llSFRNTCA9IEAiPHNjcmlwdD52YXIgY29va2ll
cyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tp
ZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29r
aWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOwotICAgIFt3
ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOmFsZXJ0Q29va2llSFRNTCBiYXNlVVJMOltOU1VSTCBVUkxX
aXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmZpbmlzaGVkKTsKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUg
YWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEy
Ny4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdl
XSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CiB9CiAKIHN0YXRpYyBib29sIGFy
ZUNvb2tpZXNFcXVhbChOU0hUVFBDb29raWUgKmZpcnN0LCBOU0hUVFBDb29raWUgKnNlY29uZCkK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVI
YW5kbGVyLWxlYWtzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tCShyZXZpc2lvbiAyNjc1MzYp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFu
ZGxlci1sZWFrcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCA8
V2ViS2l0L1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZp
ZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZh
dGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0
IDx3dGYvVmVjdG9yLmg+CkBAIC0xNTIsNyArMTUzLDcgQEAgVEVTVChVUkxTY2hlbWVIYW5kbGVy
LCBMZWFrczMpCiAKICAgICBydW5VbnRpbFRhc2tzSW5GbGlnaHQoMik7CiAKLSAgICBbd2ViVmll
dzEuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdOworICAgIFt3ZWJWaWV3MS5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJ1blVudGlsVGFza3NJbkZsaWdodCgw
KTsKIH0KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0
ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCShyZXZp
c2lvbiAyNjc1MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dl
YnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDcgKzI0
NCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXQKICAgICAvLyBO
b3csIHdpdGggYnJhbmQgbmV3IFdLV2Vic2l0ZURhdGFTdG9yZXMgcG9pbnRpbmcgYXQgdGhlIHNh
bWUgY3VzdG9tIGNvb2tpZSBzdG9yYWdlIGxvY2F0aW9uLAogICAgIC8vIGluIG5ld2x5IGZpcmVk
IHVwIE5ldHdvcmtQcm9jZXNzZXMsIHZlcmlmeSB0aGF0IHRoZSBmZXRjaCBhbmQgZGVsZXRlIEFQ
SXMgd29yayBhcyBleHBlY3RlZC4KIAotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOworICAgIFtkYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAg
ICBhdXRvIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUg
YWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRp
b24uZ2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21EYXRhU3RvcmUgZmV0Y2hEYXRhUmVjb3Jkc09m
VHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldLV2Vic2l0ZURhdGFUeXBlQ29va2llcywgbmls
XSBjb21wbGV0aW9uSGFuZGxlcjpeKE5TQXJyYXk8V0tXZWJzaXRlRGF0YVJlY29yZCAqPiAqIHJl
Y29yZHMpIHsKQEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0aWMgdm9pZCBydW5XZWJzaXRlRGF0YVN0
b3JlQ3VzdG9tUGF0CiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogCi0gICAgW3By
b2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2RhdGFTdG9yZSBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFkb3B0TlMo
W1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0
ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21EYXRhU3Rv
cmUgcmVtb3ZlRGF0YU9mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldLV2Vic2l0ZURhdGFU
eXBlQ29va2llcywgbmlsXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNvbXBs
ZXRpb25IYW5kbGVyOl4gewpAQCAtMzg1LDExICszODUsMTAgQEAgVEVTVChXZWJLaXQsIEN1c3Rv
bURhdGFTdG9yZURlc3Ryb3lXaGlsZQogCiAgICAgICAgIC8vIFRlcm1pbmF0ZSB0aGUgbmV0d29y
ayBwcm9jZXNzIHdoaWxlIGEgcXVlcnkgaXMgcGVuZGluZy4KICAgICAgICAgYXV0byogYWxsUHJv
Y2Vzc1Bvb2xzID0gW1dLUHJvY2Vzc1Bvb2wgX2FsbFByb2Nlc3NQb29sc0ZvclRlc3RpbmddOwot
ICAgICAgICBBU1NFUlRfRVEoMVUsIFthbGxQcm9jZXNzUG9vbHMgY291bnRdKTsKLSAgICAgICAg
YXV0byogcHJvY2Vzc1Bvb2wgPSBhbGxQcm9jZXNzUG9vbHNbMF07Ci0gICAgICAgIHdoaWxlICgh
W3Byb2Nlc3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKQorICAgICAgICBBU1NFUlRf
RVEoMFUsIFthbGxQcm9jZXNzUG9vbHMgY291bnRdKTsKKyAgICAgICAgd2hpbGUgKCFbZGF0YVN0
b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKQogICAgICAgICAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6c2xlZXAoMC4wMSk7Ci0gICAgICAgIGtpbGwoW3Byb2Nlc3NQb29sIF9uZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXJdLCBTSUdLSUxMKTsKKyAgICAgICAga2lsbChbZGF0YVN0b3JlIF9u
ZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCBTSUdLSUxMKTsKICAgICAgICAgYWxsUHJvY2Vzc1Bv
b2xzID0gbmlsOwogICAgICAgICBkYXRhU3RvcmUgPSBuaWw7CiAgICAgfQpAQCAtNDY1LDcgKzQ2
NCw5IEBAIFRFU1QoV2ViS2l0LCBBbHRlcm5hdGl2ZVNlcnZpY2VzRGVmYXVsdEQKICAgICAKICAg
ICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzZXRPYmplY3Q6W05TTnVt
YmVyIG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5OmtleV07CiAKLSAgICBUZXN0V0tXZWJWaWV3
ICp3ZWJWaWV3MiA9IFtbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsK
KyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1tXS1dlYlZpZXdD
b25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGNvbmZpZ3VyYXRpb24ud2Vic2l0
ZURhdGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmln
dXJhdGlvbjpbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0g
YXV0b3JlbGVhc2VdXSBhdXRvcmVsZWFzZV07CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzIg
PSBbW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwogICAg
IFt3ZWJWaWV3MiBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCJzdGFydCBhdXhpbGlhcnkg
cHJvY2Vzc2VzIiBiYXNlVVJMOm5pbF07CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFn
ZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6ZGVmYXVsdERpcmVjdG9yeS5wYXRo
XSk7CkBAIC01MzksNyArNTQwLDcgQEAgVEVTVChXZWJLaXQsIERvTG9hZFdpdGhOb25EZWZhdWx0
RGF0YVN0bwogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAg
ICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFT
dG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgcmVxdWVzdCA9IFtOU1VSTFJl
cXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJj
ZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2Vi
S2l0QVBJLnJlc291cmNlcyJdXTsKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsK
QEAgLTg1Nyw3ICs4NTgsNyBAQCBURVNUKFdlYktpdCwgTWVkaWFDYWNoZSkKICAgICBFWFBFQ1Rf
RkFMU0UoZXJyb3IpOwogCiAgICAgZG9uZSA9IHRydWU7Ci0gICAgW1t3ZWJWaWV3IGNvbmZpZ3Vy
YXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW1t3ZWJW
aWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKIAogICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRQYXRoOnBhdGggZXJyb3I6JmVy
cm9yXTsKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVByb3RvY29sc1Rlc3Qu
bW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
T2JqQy9DdXN0b21Qcm90b2NvbHNUZXN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4
IEBACiAjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKICNpbXBvcnQgPFdlYktpdC9XS0NvbnRleHRQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzR3JvdXBQcml2YXRlLmg+CisjaW1w
b3J0IDxXZWJLaXQvV0tWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURh
dGFTdG9yZVJlZi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBzdGF0aWMgYm9vbCB0
ZXN0RmluaXNoZWQ7CkBAIC03Miw2ICs3NCw4IEBAIHN0YXRpYyBXS1Byb2Nlc3NHcm91cCAqcHJv
Y2Vzc0dyb3VwKCkKICAgICByZXR1cm4gcHJvY2Vzc0dyb3VwOwogfQogCitzdGF0aWMgUmV0YWlu
UHRyPFdLVmlldz4gd2tWaWV3OworCiBAaW50ZXJmYWNlIENsb3NlV2hpbGVTdGFydGluZ1Byb3Rv
Y29sIDogVGVzdFByb3RvY29sCiBAZW5kCiAKQEAgLTg5LDcgKzkzLDcgQEAgLSAodm9pZClzdGFy
dExvYWRpbmcKICAgICAgICAgfTsKICAgICAgICAgV0tDb250ZXh0U2V0Q2xpZW50KFtwcm9jZXNz
R3JvdXAoKSBfY29udGV4dFJlZl0sICZjbGllbnQuYmFzZSk7CiAKLSAgICAgICAga2lsbChXS0Nv
bnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoW3Byb2Nlc3NHcm91cCgpIF9jb250ZXh0
UmVmXSksIFNJR0tJTEwpOworICAgICAgICBraWxsKFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdv
cmtQcm9jZXNzSWRlbnRpZmllcihXS1BhZ2VHZXRXZWJzaXRlRGF0YVN0b3JlKFt3a1ZpZXcgcGFn
ZVJlZl0pKSwgU0lHS0lMTCk7CiAgICAgICAgIFtzZWxmLmNsaWVudCBVUkxQcm90b2NvbDpzZWxm
IGRpZEZhaWxXaXRoRXJyb3I6W05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOk5TQ29jb2FFcnJvckRv
bWFpbiBjb2RlOjAgdXNlckluZm86bmlsXV07CiAgICAgfSk7CiB9CkBAIC0xNDIsNyArMTQ2LDcg
QEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogc3RhdGljIHZvaWQgcnVuVGVzdCgpCiB7CiAg
ICAgUmV0YWluUHRyPFdLQnJvd3NpbmdDb250ZXh0R3JvdXA+IGJyb3dzaW5nQ29udGV4dEdyb3Vw
ID0gYWRvcHROUyhbW1dLQnJvd3NpbmdDb250ZXh0R3JvdXAgYWxsb2NdIGluaXRXaXRoSWRlbnRp
ZmllcjpAIlRlc3RJZGVudGlmaWVyIl0pOwotICAgIFJldGFpblB0cjxXS1ZpZXc+IHdrVmlldyA9
IGFkb3B0TlMoW1tXS1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4
MDAsIDYwMCkgcHJvY2Vzc0dyb3VwOnByb2Nlc3NHcm91cCgpIGJyb3dzaW5nQ29udGV4dEdyb3Vw
OmJyb3dzaW5nQ29udGV4dEdyb3VwLmdldCgpXSk7CisgICAgd2tWaWV3ID0gYWRvcHROUyhbW1dL
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBwcm9j
ZXNzR3JvdXA6cHJvY2Vzc0dyb3VwKCkgYnJvd3NpbmdDb250ZXh0R3JvdXA6YnJvd3NpbmdDb250
ZXh0R3JvdXAuZ2V0KCldKTsKICAgICBSZXRhaW5QdHI8Q3VzdG9tUHJvdG9jb2xzTG9hZERlbGVn
YXRlPiBsb2FkRGVsZWdhdGUgPSBhZG9wdE5TKFtbQ3VzdG9tUHJvdG9jb2xzTG9hZERlbGVnYXRl
IGFsbG9jXSBpbml0XSk7CiAgICAgW3drVmlldyBicm93c2luZ0NvbnRleHRDb250cm9sbGVyXS5s
b2FkRGVsZWdhdGUgPSBsb2FkRGVsZWdhdGUuZ2V0KCk7CiAgICAgW1t3a1ZpZXcgYnJvd3NpbmdD
b250ZXh0Q29udHJvbGxlcl0gbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDpbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAOi8v
cmVkaXJlY3Q/dGVzdCIsIFtUZXN0UHJvdG9jb2wgc2NoZW1lXV1dXV07CkluZGV4OiBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNjIsOCArMTA2Miw2IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0Nv
bnNpc3QKIAogICAgIHJlc2V0UXVvdGEoKTsKIAotICAgIFdLQ29udGV4dFNldEFsbG93c0FueVNT
TENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcocGxhdGZvcm1Db250ZXh0KCksIHRy
dWUpOwotCiAgICAgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3Rpbmco
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSk7CiAKICAgICBXS0NvbnRleHRT
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5jb250ZXh0KCksIGZhbHNlKTsKQEAgLTEyMzgsNyArMTIzNiw3IEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OmZpbmRBbmREdW1wV2ViS2l0UHIKICAgICBkdW1wUmVzcG9uc2UobWFrZVN0cmlu
ZyhUZXN0Q29udHJvbGxlcjo6d2ViUHJvY2Vzc05hbWUoKSwgIjogIiwKICAgICAgICAgV0tQYWdl
R2V0UHJvY2Vzc0lkZW50aWZpZXIoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJW
aWV3KCktPnBhZ2UoKSksICdcbicsCiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpuZXR3b3JrUHJv
Y2Vzc05hbWUoKSwgIjogIiwKLSAgICAgICAgV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKG1fY29udGV4dC5nZXQoKSksICdcbicpKTsKKyAgICAgICAgV0tXZWJzaXRlRGF0YVN0
b3JlR2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKHdlYnNpdGVEYXRhU3RvcmUoKSksICdcbicp
KTsKICNlbHNlCiAgICAgZHVtcFJlc3BvbnNlKCJcbiJfcyk7CiAjZW5kaWYKQEAgLTIyOTgsNyAr
MjI5Niw3IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdENvbnRyb2xsZXI6OmcKIAogdm9p
ZCBUZXN0Q29udHJvbGxlcjo6bmV0d29ya1Byb2Nlc3NEaWRDcmFzaCgpCiB7Ci0gICAgcGlkX3Qg
cGlkID0gV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKG1fY29udGV4dC5nZXQo
KSk7CisgICAgcGlkX3QgcGlkID0gV0tXZWJzaXRlRGF0YVN0b3JlR2V0TmV0d29ya1Byb2Nlc3NJ
ZGVudGlmaWVyKHdlYnNpdGVEYXRhU3RvcmUoKSk7CiAgICAgZnByaW50ZihzdGRlcnIsICIjQ1JB
U0hFRCAtICVzIChwaWQgJWxkKVxuIiwgbmV0d29ya1Byb2Nlc3NOYW1lKCksIHN0YXRpY19jYXN0
PGxvbmc+KHBpZCkpOwogICAgIGV4aXQoMSk7CiB9CkBAIC0zMTM3LDcgKzMxMzUsNyBAQCB2b2lk
IFRlc3RDb250cm9sbGVyOjpzZXRJZ25vcmVzVmlld3BvcnRTCiAKIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKLSAgICBXS0NvbnRleHRUZXJtaW5hdGVO
ZXR3b3JrUHJvY2VzcyhwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3Jl
VGVybWluYXRlTmV0d29ya1Byb2Nlc3Mod2Vic2l0ZURhdGFTdG9yZSgpKTsKIH0KIAogdm9pZCBU
ZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdvcmtlcnMoKQpAQCAtMzE2OCw5ICszMTY2
LDggQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcgogICAgIHJldHVy
biBuZXcgUGxhdGZvcm1XZWJWaWV3KGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpOwogfQogCi1XS0Nv
bnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0NvbnRleHRS
ZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBjb250ZXh0Q29uZmlndXJhdGlv
bikKK1dLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KFdL
Q29udGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmKQogewotICAgIFdL
Q29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKGNvbnRleHQsIGRlZmF1bHRXZWJzaXRl
RGF0YVN0b3JlKCkpOwogICAgIHJldHVybiBjb250ZXh0OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409607</attachid>
            <date>2020-09-24 11:38:55 -0700</date>
            <delta_ts>2020-09-24 16:06:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200924113854.patch</filename>
            <type>text/plain</type>
            <size>353073</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxOCBAQAorMjAyMC0wOS0yNCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgTmV0d29y
a1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgZnJvbSBXZWJQcm9jZXNzUG9vbCB0byBXZWJzaXRlRGF0
YVN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTYwNDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIG1vdmVzIHRoZSB0aGluZ3Mgb24gV2ViUHJvY2Vzc1Bvb2wgYXNzb2NpYXRlZCB3
aXRoIE5ldHdvcmtQcm9jZXNzUHJveHkgb3duZXJzaGlwIGFuZCBtb3ZlcyB0aGVtCisgICAgICAg
IHRvIFdlYnNpdGVEYXRhU3RvcmUuICBJdCdzIHByZXR0eSBtZWNoYW5pY2FsLCBidXQgaXQgcmVh
Y2hlcyBpdHMgZmluZ2VycyBpbnRvIGEgbG90IG9mIHRoaW5ncy4gIFNvbWUgY29tbWVudHMKKyAg
ICAgICAgb24gaW50ZXJlc3RpbmcgcGFydHMgYXJlIGJlbG93LgorCisgICAgICAgIFdoeSBhbSBJ
IGRvaW5nIHRoaXM/ICBJJ20gZ2xhZCB5b3UgYXNrZWQuCisKKyAgICAgICAgV0tXZWJWaWV3IGhh
ZCBhIGZ1bmRhbWVudGFsIGNvb2tpZSBwcm9ibGVtIGJlZm9yZSB0aGlzIGNoYW5nZS4gIEl0IGhh
ZCBhIFdLV2Vic2l0ZURhdGFTdG9yZSB0aGF0IGNvdWxkIHBvaW50IHRvIGEgY29va2llIHN0b3Jl
IG9uIGRpc2sKKyAgICAgICAgdGhhdCBjb3VsZCBiZSB1c2VkIGluIG11bHRpcGxlIG5ldHdvcmsg
cHJvY2Vzc2VzIGF0IHRoZSBzYW1lIHRpbWUuICBUaGlzIGxlZCB0byBwcm9ibGVtcyB3aXRoIGNv
b2tpZXMgYmVpbmcgcmVjZWl2ZWQgb3ZlciB0aGUgbmV0d29yaworICAgICAgICBpbiB0aG9zZSBk
aWZmZXJlbnQgcHJvY2Vzc2VzIGJlaW5nIHVuYWJsZSB0byBiZSBzaGFyZWQgdW50aWwgdGhleSB3
ZXJlIHdyaXR0ZW4gdG8gZGlzaywgc29tZXRoaW5nIHRoYXQgZG9lcyBub3QgaGFwcGVuIGltbWVk
aWF0ZWx5LCBlc3BlY2lhbGx5CisgICAgICAgIG9uIGlPUy4gIFRoaXMgcHJvYmxlbSBpcyBldmVu
IHdvcnNlIHdpdGggc2Vzc2lvbiBjb29raWVzLCB3aGljaCBzaG91bGQgYmUga2VwdCBpbiBtZW1v
cnkgYW5kIG5ldmVyIGJlIHdyaXR0ZW4gdG8gZGlzay4gIFRob3NlIHByb2Nlc3NlcworICAgICAg
ICBkaWQgbm90IHVzZSBzaGFyZWQgbWVtb3J5IHRvIHNoYXJlIHRoZSBjb29raWVzLiAgVGhleSBq
dXN0IGRpZG4ndCBzaGFyZSB0aGVtLCB3aGljaCBsZWQgdG8gY29va2llIGluY29ycmVjdG5lc3Mu
ICBUaGlzIHdhcyB1bmZvcnR1bmF0ZWx5CisgICAgICAgIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRp
b24gaWYgeW91IGNhbGwgW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRdIG1vcmUgdGhhbiBvbmNlLCB3
aGljaCBtYW55IGRldmVsb3BlcnMgZG8uICBUaGVyZSB3YXMgYWxzbyBvY2Nhc2lvbmFsIGNvb2tp
ZQorICAgICAgICBjb3JydXB0aW9uIGFuZCBsb3NzIGZyb20gbXVsdGlwbGUgcHJvY2Vzc2VzIHdy
aXRpbmcgY29va2llcyB0byB0aGUgc2FtZSBmaWxlLiAgQWxsIHRoZXNlIHByb2JsZW1zIGNhbiBi
ZSB3b3JrZWQgYXJvdW5kIGJ5IGRvaW5nIHdoYXQgU2FmYXJpIGRvZXM6CisgICAgICAgIG1hbnVh
bGx5IHNldHRpbmcgdGhlIFdLUHJvY2Vzc1Bvb2wgb2YgYWxsIFdLV2ViVmlld0NvbmZpZ3VyYXRp
b25zIHRvIHRoZSBzYW1lIHByb2Nlc3MgcG9vbCB0byBvbmx5IHVzZSBvbmUgbmV0d29yayBwcm9j
ZXNzLiAgVGhpcyBpcyBub3QgaW50dWl0aXZlCisgICAgICAgIG9yIHdlbGwgZG9jdW1lbnRlZCwg
YW5kIGV2ZW4gdGhvdWdoIEkgaGF2ZSBzcGVudCB0aGUgbWFqb3JpdHkgb2YgV1dEQyBsYWJzIGZv
ciB0aGUgbGFzdCAzIHllYXJzIHRlbGxpbmcgZGV2ZWxvcGVycyB0byBkbyBpdCwgbW9zdCBkZXZl
bG9wZXJzIGRvIG5vdC4KKyAgICAgICAgVGhlIGRlZmF1bHQgYmVoYXZpb3Igc2hvdWxkIG5vdCBs
ZWFkIHRvIGNvb2tpZSBpbmNvcnJlY3RuZXNzLCBjb3JydXB0aW9uLCBvciBsb3NzLiAgVGhpcyBh
Y2NvbXBsaXNoZXMgdGhhdC4KKworICAgICAgICBBIGJpZ2dlciBwcm9ibGVtIHRoYXQgY2FuJ3Qg
cmVhbGx5IGJlIHdvcmtlZCBhcm91bmQgd2VsbCBpcyB3aGF0IHdlIHdlcmUgZG9pbmcgaW4gb3Vy
IFdLSFRUUENvb2tpZVN0b3JlIEFQSS4gIE1hbnkgZGV2ZWxvcGVycyBjYWxsIHNldENvb2tpZTpj
b21wbGV0aW9uSGFuZGxlcjoKKyAgICAgICAgdG8gImxvZyBpbiIgdGhlIHVzZXIgYnkgc2V0dGlu
ZyBhIGNvb2tpZSwgdGhlbiBpbiB0aGUgY29tcGxldGlvbiBoYW5kbGVyLCB0aGV5IG9wZW4gYSBX
S1dlYlZpZXcgdG8gdGhlaXIgcGFnZSBhbmQgZXhwZWN0IHRoZSBjb29raWUgdG8gYmUgc2VudC4g
IEJlZm9yZSB0aGlzCisgICAgICAgIGNoYW5nZSwgd2Ugd291bGQgbm90IGtub3cgd2hpY2ggcHJv
Y2VzcyBwb29sIHRvIHNldCB0aGUgY29va2llIGluIHNvIHdlIHdvdWxkIGd1ZXNzLiAgSWYgdGhl
cmUgd2VyZSBubyBwcm9jZXNzIHBvb2xzLCB3ZSB3b3VsZCBzdGFydCB3cml0aW5nIHRvIGRpc2sg
YW5kIGhvcGUKKyAgICAgICAgaXQgd3JpdGVzIGZhc3QgZW5vdWdoLiAgV2UgY2FuJ3Qgd2FpdCBm
b3IgaXQgdG8gY29tcGxldGUgYmVjYXVzZSBpdCBjYXVzZXMgaGFuZ3MgbGlrZSByZGFyOi8vcHJv
YmxlbS82Njk2MTA2Ni4gIFRoaXMgc29sdXRpb24gYWxsb3dzIHRvIHN0YXJ0IHRoZSBuZXR3b3Jr
CisgICAgICAgIHByb2Nlc3Mgb2YgdGhhdCBXZWJzaXRlRGF0YVN0b3JlIGFuZCBzZXQgdGhlIGNv
b2tpZSBpbiB0aGF0IHByb2Nlc3MuICBXZSBub3cga25vdyB0aGF0IGlzIHRoZSBvbmx5IHByb2Nl
c3MgdGhpcyBXZWJzaXRlRGF0YVN0b3JlIHdpbGwgZXZlciB1c2UuICBOb3csIHVzZXJzCisgICAg
ICAgIHdpbGwgYmUgYWJsZSB0byBhY3R1YWxseSBiZSBsb2dnZWQgaW4gYWxsIHRoZSB0aW1lIGlu
IHN1Y2ggYXBwcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2ll
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBD
b29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29r
aWVzL1dlYkNvb2tpZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVz
L1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9X
ZWJDb29raWVNYW5hZ2VyU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURh
dGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3Nl
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1t
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6OnNhdmVDb29raWVzKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFT
dG9yZVNlc3Npb24pOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nl
c3NTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBQbGF0
Zm9ybS9JUEMvQXR0YWNobWVudC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAg
ICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQ
STo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0
b3JlOjpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRD
b29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAg
ICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRp
b25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVy
Rm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFT
dG9yZSk6CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtl
clRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1By
b2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZUdldFdlYnNpdGVE
YXRhU3RvcmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdLV2Vi
c2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBf
c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczpdKToKKyAgICAgICAgKC1bV0tQcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1By
ZXBhcmVUb1N1c3BlbmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3Nl
bmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tQcm9jZXNzUG9vbCBfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tQcm9jZXNzUG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6
XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29s
UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0
b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9y
ZSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpdKToKKyAgICAgICAgKC1bV0tX
ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHld
KToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRS
ZXN1bWVdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBwSXNC
YWNrZ3JvdW5kOl0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9j
ZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoK1tXS1dlYnNpdGVEYXRhU3RvcmUgX21ha2VOZXh0
TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZ10pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKF9XZWJLaXRD
b29raWVNYW5hZ2VyUHJpdmF0ZTo6Y29va2llTWFuYWdlciBjb25zdCk6CisgICAgICAgIChfV2Vi
S2l0Q29va2llTWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUpOgor
ICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfY29v
a2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRfY29v
a2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdl
cl9hZGRfY29va2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2ll
cyk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAo
d2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4
dF9wcmVmZXRjaF9kbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246
OmFkZFNpbmdsZUNvb2tpZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9u
OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vz
c1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9v
bENvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vz
c1N1cHByZXNzaW9uU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxh
dGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRm
b3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnhwY0VuZHBvaW50TWVzc2FnZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29y
a1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6cHVi
bGlzaFByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94
eTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGVj
aWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyk6CisgICAgICAgICogVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5k
KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktp
dDo6ZGVmYXVsdFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkZWZhdWx0TmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5Ojp0ZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWRUZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
ZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6YW55
UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkpOgorICAgICAgICAoV2Vi
S2l0OjphbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRp
b25zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxv
YWRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQ
cm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRp
ZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGlkQ2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0
Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNz
UG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9j
ZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENF
dmVudCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFu
YWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2Vi
Q29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5j
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9w
T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xE
ZXN0cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJF
bnRpdGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVj
b25uZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRG
b3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJl
ZEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3Rv
Y29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vz
c1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29s
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFT
dG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdD
b250ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xv
YmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3Nlcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9u
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdl
SUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3Vu
ZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdv
cmtQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgVGhlcmUgc2VlbXMgdG8gYmUgYSBsb3Qgb2Yg
Y29kZSByZW1vdmFsIGhlcmUsIGJ1dCBtb3N0IG9mIGl0IHdhcyBkdXBsaWNhdGUgY29kZSB3aXRo
CisgICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMgd2hpY2ggaXMgdXNlZCBpbnN0
ZWFkLiAgVGhhdCB3aGljaCB3YXMgbm90IGR1cGxpY2F0ZSB3YXMKKyAgICAgICAgbW92ZWQgdG8g
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcy4g
IFRoaXMgd2FzIHRoZSBoYXJkZXN0IHBhcnQgb2YgdGhpcyBwYXRjaC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1By
b2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHlGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpmbHVzaENvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1By
b2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpzZXRXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NY
UENFbmRwb2ludFRvV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXAp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZv
clNlc3Npb25JRCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nl
c3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFB
bmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGlt
ZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNl
dFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNl
TG9hZFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1By
ZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNH
cmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJl
dmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQ
cmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRh
UmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGlu
Z1RvKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1l
dGVyc1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnN1Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNj
aGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBk
YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0
aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRl
cmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25z
aGlwT25seUluRGF0YWJhc2VPbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0VXNlSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0Rl
Y29yYXRpb25Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1No
b3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQ
YXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJp
Y3RDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVz
dGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3Vy
Y2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFn
ZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnByb2Nlc3NQb29scyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9j
ZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VwaGVtZXJhbCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmZsdXNoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRl
RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vz
c2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBw
Qm91bmRTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2Fy
ZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVu
dGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6Om1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lv
bklEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vz
c1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphZGRQ
ZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5ldHdvcmtQcm94eVNl
dHRpbmdzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0
YVN0b3JlU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRm
b3JtU2V0TmV0d29ya1BhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKToK
KyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3Jz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRp
bmdzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uSW5mby5oOgorCiAyMDIwLTA5LTI0ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeCB0aGUgYnVpbGQgZm9yIHJlY2VudCBTREtz
LgpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNiArMTczLDcgQEAgTmV0
d29ya1Byb2Nlc3M6Ok5ldHdvcmtQcm9jZXNzKEF1eGlsaWFyeQogI2VuZGlmCiAKICNpZiBVU0Uo
U09VUCkKKyAgICAvLyBGSVhNRTogRG8gbm90IHVzZSB0aGUgZGVmYXVsdCBzZXNzaW9uIElELgog
ICAgIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFjY2Vz
c29yKFt0aGlzXSgpIC0+IFNvdXBTZXNzaW9uKiB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxOZXR3b3JrU2Vzc2lvblNvdXAmPigqbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSkpLnNvdXBTZXNzaW9uKCk7CiAgICAgfSk7CkBAIC0zNDcsMzAgKzM0
OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHIKIAogICAgIHNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRy
aWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwot
ICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBX
VEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVu
dGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdl
cihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3Jp
Z2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBl
clRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0K
LSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNz
aW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0j
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGJvb2wgc2VydmljZVdvcmtlclByb2Nlc3NU
ZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCA9IHRydWU7Ci0gICAgYWRkU2VydmljZVdvcmtlclNlc3Np
b24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc2VydmljZVdvcmtlclByb2Nl
c3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBtX3N0b3JhZ2VN
YW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAg
YXV0byogZGVmYXVsdFNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKTsKLSAgICBhdXRvKiBkZWZhdWx0U3RvcmFnZVNlc3Npb24gPSBkZWZh
dWx0U2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgZm9yIChjb25zdCBhdXRv
JiBjb29raWUgOiBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRpbmdD
b29raWVzKQotICAgICAgICBkZWZhdWx0U3RvcmFnZVNlc3Npb24tPnNldENvb2tpZShjb29raWUp
OwotCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkK
ICAgICAgICAgc3VwcGxlbWVudC0+aW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKIApAQCAtNTA1LDgg
KzQ4Miw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QKIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Np
b25JRCwgYm9vbCBzaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYg
aWRlbnRpZmllckJhc2UpCiAjZW5kaWYKIHsKLSAgICBBU1NFUlQoc2Vzc2lvbklEICE9IFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotCiAgICAgYXV0byBhZGRSZXN1bHQgPSBt
X25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMuYWRkKHNlc3Npb25JRCwgbnVsbHB0cik7CiAgICAgaWYg
KCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTIxLDcgKzQ5Niw3
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QKICAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllciA9IG1ha2VTdHJpbmcoaWRlbnRpZmllckJhc2Us
ICIuUHJpdmF0ZUJyb3dzaW5nLiIsIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSkuY3JlYXRl
Q0ZTdHJpbmcoKTsKICAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHN0
b3JhZ2VTZXNzaW9uID0gYWRvcHRDRihjcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oY2ZJZGVu
dGlmaWVyLmdldCgpKSk7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKHNlc3Npb25JRCAhPSBQQUw6
OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAgICBzdG9yYWdlU2Vzc2lvbiA9
IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlQ0ZTdG9yYWdlU2Vzc2lvbkZv
cklkZW50aWZpZXIoY2ZJZGVudGlmaWVyLmdldCgpKTsKIAogICAgIGlmIChOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OnByb2Nlc3NNYXlVc2VDb29raWVBUEkoKSkgewpAQCAtNTQ0LDIxICs1MTksMTEg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y29va2llQWNjZXB0UG9saWN5QwogCiBXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNzaW9uSUQg
PT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0dXJuICZk
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFnZVNlc3Np
b25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIGlm
ICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1bHROZXR3
b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigp
OwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQotCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0
aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9yKQogewot
ICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0byYgc3Rv
cmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAgICAgICAg
IGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMTcwLDcgKzE3MCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZm9yRWFjaE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYpPiYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5ld1Rlc3RpbmdTZXNz
aW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJik7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9p
ZCBlbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgYm9vbCBzaG91bGRVc2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYpOwpAQCAtMzc1LDcgKzM3NCw2IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSBjb25zdDsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNz
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKIApAQCAtNTQ0LDcgKzU0
Miw2IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiBtX25ldHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPj4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zOwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbV9kZWZhdWx0TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOwogCiAgICAgUmVmUHRyPFN0b3JhZ2VNYW5hZ2VyU2V0PiBtX3N0b3JhZ2VNYW5h
Z2VyU2V0OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNp
b24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDYgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZQogICAgIGVuY29kZXIgPDwg
dWlQcm9jZXNzU0RLVmVyc2lvbjsKICAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBuZXR3b3JrQVRT
Q29udGV4dC5nZXQoKSk7CiAjZW5kaWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzOwogI2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIgPDwgY29va2llQWNjZXB0UG9s
aWN5OwogICAgIGVuY29kZXIgPDwgbGFuZ3VhZ2VzOwpAQCAtNjYsOSArNjUsNiBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplCiAgICAgZW5jb2RlciA8PCB1cmxTY2hl
bWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgZW5jb2RlciA8
PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2hvdWxkRGlzYWJsZVNlcnZpY2VX
b3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNlbmRpZgogICAgIGVuY29kZXIgPDwgc2hv
dWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2RlciA8PCBlbmFibGVBZENsaWNrQXR0cmli
dXRpb25EZWJ1Z01vZGU7CiB9CkBAIC0xMTQsMTIgKzExMCw2IEBAIGJvb2wgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnM6OmQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAK
LSAgICBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnM7Ci0gICAgZGVjb2RlciA+PiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsK
LSAgICBpZiAoIWRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOwotCiAjaWYgVVNFKFNPVVApCiAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQuY29va2llQWNjZXB0UG9saWN5KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTM2LDIwICsxMjYsNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzOjpkCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsU2NoZW1lc1JlZ2lz
dGVyZWRBc05vQWNjZXNzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0jaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBzZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIXNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXN1bHQuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
c2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiQ2FjaGVN
b2RlbC5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llLmg+CiAjaW5j
bHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTcwLDgg
KzY5LDYgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIAogICAgIFJl
dGFpblB0cjxDRkRhdGFSZWY+IG5ldHdvcmtBVFNDb250ZXh0OwogI2VuZGlmCiAKLSAgICBXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycyBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICAK
ICNpZiBVU0UoU09VUCkKICAgICBXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IGNvb2tp
ZUFjY2VwdFBvbGljeSB7IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k6OkFsd2F5c0Fj
Y2VwdCB9OwogICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlczsKQEAgLTgyLDEyICs3OSw3IEBA
IHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyAKICAgICBWZWN0b3I8U3Ry
aW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQotICAgIFN0cmluZyBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5OwotICAgIFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlOwotICAgIGJvb2wgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzVGVybWluYXRpb25EZWxheSB7IGZhbHNlIH07Ci0jZW5kaWYKLSAgICBib29sIHNob3VsZEVu
YWJsZUlUUERhdGFiYXNlIHsgZmFsc2UgfTsKKyAgICBib29sIHNob3VsZEVuYWJsZUlUUERhdGFi
YXNlIHsgdHJ1ZSB9OwogICAgIGJvb2wgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2Rl
IHsgZmFsc2UgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29v
a2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAJKHJldmlzaW9uIDI2NzUz
NikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5h
Z2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIldlYkNv
cmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Db29raWVTdG9yYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVFRQQ29va2ll
QWNjZXB0UG9saWN5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24u
aD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KQEAg
LTE0MywxNSArMTQ0LDE4IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6c3RvcE9ic2VydmluZ0Nv
b2sKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhU
VFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSk7Ci0gICAgbV9wcm9jZXNzLmNvb2tpZUFjY2VwdFBvbGljeUNoYW5nZWQocG9s
aWN5KTsKLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgcGxhdGZvcm1TZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KHBvbGljeSwgW3BvbGljeSwgcHJvY2VzcyA9IG1ha2VSZWYobV9wcm9j
ZXNzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
bXV0YWJsZSB7CisgICAgICAgIHByb2Nlc3MtPmNvb2tpZUFjY2VwdFBvbGljeUNoYW5nZWQocG9s
aWN5KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9KTsKIH0KIAotdm9pZCBX
ZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2
b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1f
cHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7Cisg
ICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKHNl
c3Npb25JRCkpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5jb29r
aWVBY2NlcHRQb2xpY3koKSk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihI
VFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1h
bmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tp
ZXMvV2ViQ29va2llTWFuYWdlci5oCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAiU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
VHlwZS5oIgogI2VuZGlmCiAKK09CSkNfQ0xBU1MgTlNIVFRQQ29va2llU3RvcmFnZTsKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IENvb2tpZTsKIGVudW0gY2xhc3MgSFRUUENvb2tpZUFj
Y2VwdFBvbGljeSA6IHVpbnQ4X3Q7CkBAIC03OSw4ICs4MSw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBnZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmKTsKICAgICB2b2lkIGdldENvb2tpZXMoUEFMOjpT
ZXNzaW9uSUQsIGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mJik+JiYpOwogCi0gICAgdm9pZCBwbGF0Zm9ybVNldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSk7Ci0gICAgdm9pZCBnZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SFRU
UENvb2tpZUFjY2VwdFBvbGljeSk+JiYpOworICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3ksIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBB
TDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkhUVFBDb29raWVB
Y2NlcHRQb2xpY3kpPiYmKTsKIAogICAgIHZvaWQgc3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2Vz
KFBBTDo6U2Vzc2lvbklEKTsKICAgICB2b2lkIHN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBB
TDo6U2Vzc2lvbklEKTsKQEAgLTg4LDQgKzkwLDggQEAgcHJpdmF0ZToKICAgICBOZXR3b3JrUHJv
Y2VzcyYgbV9wcm9jZXNzOwogfTsKIAorI2lmIFBMQVRGT1JNKENPQ09BKQordm9pZCBzYXZlQ29v
a2llcyhOU0hUVFBDb29raWVTdG9yYWdlICosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFu
YWdlci5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbWVzc2FnZXMgLT4gV2ViQ29va2llTWFuYWdlciBOb3RS
ZWZDb3VudAogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3luYwogCiAgICAgdm9pZCBT
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJDb3JlOjpIVFRQQ29va2ll
QWNjZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lkIEdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQ
b2xpY3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRUUENv
b2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAgdm9pZCBTdGFydE9ic2Vy
dmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIHZvaWQgU3Rv
cE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFuYWdl
ckN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29v
a2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysg
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFuYWdl
ckN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotdm9pZCBXZWJDb29raWVNYW5hZ2Vy
OjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIENvb2tpZUFjY2VwdFBvbGlj
eSBjdXJsUG9saWN5ID0gQ29va2llQWNjZXB0UG9saWN5OjpPbmx5RnJvbU1haW5Eb2N1bWVudERv
bWFpbjsKICAgICBzd2l0Y2ggKHBvbGljeSkgewpAQCAtNTUsNiArNTUsNyBAQCB2b2lkIFdlYkNv
b2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvCiAgICAgbV9wcm9jZXNzLmZvckVhY2hOZXR3
b3JrU3RvcmFnZVNlc3Npb24oW2N1cmxQb2xpY3ldIChjb25zdCBhdXRvJiBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24pIHsKICAgICAgICAgbmV0d29ya1N0b3JhZ2VTZXNzaW9uLnNldENvb2tpZUFjY2Vw
dFBvbGljeShjdXJsUG9saWN5KTsKICAgICB9KTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcigpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ29va2llcy9tYWMvV2ViQ29va2llTWFuYWdlck1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJN
YWMubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9tYWMvV2ViQ29va2llTWFuYWdlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9IVFRQQ29va2llQWNjZXB0UG9saWN5Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9ydCA8cGFsL3Nw
aS9jZi9DRk5ldHdvcmtTUEkuaD4KKyNpbXBvcnQgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4K
ICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpA
QCAtNTMsMTUgKzU0LDE5IEBAIHN0YXRpYyBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5
IHQKICAgICByZXR1cm4gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeUFsd2F5czsKIH0K
IAotdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6
OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5
IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFj
Y2Vzc1Jhd0Nvb2tpZXMpKTsKIAorICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIFtb
TlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2llQWNj
ZXB0UG9saWN5OnN0YXRpY19jYXN0PE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeT4ocG9saWN5KV07
CisgICAgc2F2ZUNvb2tpZXMoW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0
b3JhZ2VdLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogCiAgICAgbV9wcm9jZXNzLmZvckVh
Y2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oWyZdIChjb25zdCBhdXRvJiBuZXR3b3JrU3RvcmFnZVNl
c3Npb24pIHsKICAgICAgICAgaWYgKGF1dG8gY29va2llU3RvcmFnZSA9IG5ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5jb29raWVTdG9yYWdlKCkpCiAgICAgICAgICAgICBDRkhUVFBDb29raWVTdG9yYWdl
U2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHRvQ0ZIVFRQQ29va2ll
U3RvcmFnZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKKyAgICAgICAgaWYgKGF1dG8gKnN0b3JhZ2Ug
PSBuZXR3b3JrU3RvcmFnZVNlc3Npb24ubnNDb29raWVTdG9yYWdlKCkpCisgICAgICAgICAgICBz
YXZlQ29va2llcyhzdG9yYWdlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0pOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJD
b29raWVNYW5hZ2VyU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCShyZXZpc2lvbiAy
Njc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJD
b29raWVNYW5hZ2VyU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDExICszNywxMiBAQAog
bmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotdm9pZCBXZWJD
b29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0
SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fcHJv
Y2Vzcy5mb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtwb2xpY3ldIChhdXRvJiBzZXNzaW9u
KSB7CiAgICAgICAgIHNlc3Npb24uc2V0Q29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7CiAgICAg
fSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUg
c3RvcmFnZVR5cGUpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3Jh
Z2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAJKHJldmlz
aW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9M
b2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw3ICsyMTQsOCBA
QCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpjbGVhcigpCiAKIHZvaWQgTG9jYWxTdG9yYWdl
RGF0YWJhc2U6OmNsb3NlKCkKIHsKLSAgICBBU1NFUlQoIW1faXNDbG9zZWQpOworICAgIGlmICht
X2lzQ2xvc2VkKQorICAgICAgICByZXR1cm47CiAgICAgbV9pc0Nsb3NlZCA9IHRydWU7CiAKICAg
ICBpZiAobV9kaWRTY2hlZHVsZURhdGFiYXNlVXBkYXRlKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29h
Lm1tCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nv
Y29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbXBvcnQgIk5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgogI2ltcG9ydCAiTmV0d29ya1Nl
c3Npb25Db2NvYS5oIgogI2ltcG9ydCAiU2FuZGJveEV4dGVuc2lvbi5oIgorI2ltcG9ydCAiV2Vi
Q29va2llTWFuYWdlci5oIgogI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24u
aD4KICNpbXBvcnQgPFdlYkNvcmUvUHVibGljU3VmZml4Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jl
c291cmNlUmVxdWVzdENGTmV0Lmg+CkBAIC03OCw5ICs3OSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVy
bWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5j
b250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRl
bnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9DRk5ldHdvcmtTZXRBVFNDb250ZXh0KHBh
cmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwpAQCAtMTA1LDExICsxMDMsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAgICAgW05TVVJMQ2FjaGUg
c2V0U2hhcmVkVVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1D
cmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5p
cXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNz
Ojpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9B
UFBMSUNBVElPTl9BVURJVF9EQVRBKQpAQCAtMjIxLDcgKzIxNCw3IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmZsdXNoQ29va2llcyhjb25zdCAKICAgICBwbGF0Zm9ybUZsdXNoQ29va2llcyhzZXNz
aW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotc3RhdGljIHZvaWQgc2F2
ZUNvb2tpZXMoTlNIVFRQQ29va2llU3RvcmFnZSAqY29va2llU3RvcmFnZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBzYXZlQ29va2llcyhOU0hU
VFBDb29raWVTdG9yYWdlICpjb29raWVTdG9yYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
ICAgICBBU1NFUlQoY29va2llU3RvcmFnZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAkocmV2aXNp
b24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQ
cm9jZXNzQ3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSw2IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3Jt
Q3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVu
aXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmlj
SFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0
ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRl
eHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVt
b3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01NSwxNSArNTUsMTEgQEAgdm9pZCBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6
ZW5zdXJlV2VicwogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHko
cGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBSZXRh
aW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gdWlQcm9jZXNzQ29va2llU3RvcmFnZTsKLSAg
ICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nv
b2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSkKKyAgICBpZiAoIXNlc3Npb25JRC5pc0Vw
aGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVy
LmlzRW1wdHkoKSAmJiBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9u
SUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAgICAgICAgdWlQcm9j
ZXNzQ29va2llU3RvcmFnZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlpbmdEYXRhKHBhcmFt
ZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIpOwogCiAgICAgbmV0d29ya1By
b2Nlc3MuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgbWFrZVN0cmluZyhiYXNl
LCAnLicsIHNlc3Npb25JRC50b1VJbnQ2NCgpKSwgV1RGTW92ZSh1aVByb2Nlc3NDb29raWVTdG9y
YWdlKSk7CiAKLSAgICBhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Byb2Nlc3Muc3RvcmFnZVNlc3Np
b24oc2Vzc2lvbklEKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMu
cGVuZGluZ0Nvb2tpZXMpCi0gICAgICAgIHNlc3Npb24tPnNldENvb2tpZShjb29raWUpOwotCiAg
ICAgbmV0d29ya1Byb2Nlc3Muc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpj
cmVhdGUobmV0d29ya1Byb2Nlc3MsIFdURk1vdmUocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMpKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5jcHAJKHJldmlzaW9u
IDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJv
Y2Vzc01haW5Tb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBjbGFzcyBO
ZXR3b3JrUHJvY2Vzc01haW5Tb3VwIGZpbmFsOiBwdWJsCiBwdWJsaWM6CiAgICAgdm9pZCBwbGF0
Zm9ybUZpbmFsaXplKCkgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJcyB0aGlz
IHN0aWxsIG5lZWRlZD8gV2Ugc2hvdWxkIHByb2JhYmx5IGRlc3Ryb3kgYWxsIGV4aXN0aW5nIHNl
c3Npb25zIGF0IHRoaXMgcG9pbnQgaW5zdGVhZC4KICAgICAgICAgLy8gTmVlZGVkIHRvIGRlc3Ry
b3kgdGhlIFNvdXBTZXNzaW9uIGFuZCBTb3VwQ29va2llSmFyLCBlLmcuIHRvIGF2b2lkCiAgICAg
ICAgIC8vIGxlYWtpbmcgU1FMaXRlIHRlbXBvcmFyeSBqb3VybmFsaW5nIGZpbGVzLgogICAgICAg
ICBnbG9iYWxOZXR3b3JrUHJvY2Vzcy0+ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAkocmV2aXNpb24gMjY3NTM2
KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwxMSArMTM1LDYgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogICAgICAgICB1c2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
Q2hhbmdlZChwYXJhbWV0ZXJzLmxhbmd1YWdlcyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0
ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3Jz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgYm9vbCBpZ25vcmVUTFNFcnJvcnMpCiB7CiAgICAg
aWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKQpJbmRleDogU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0F0dGFjaG1lbnQuaAkocmV2aXNpb24gMjY3NTM2KQorKysg
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC05NSw4ICs5NSw4IEBAIHByaXZhdGU6CiAgICAgaW50IG1fZmlsZURlc2NyaXB0b3IgeyAtMSB9
OwogICAgIHNpemVfdCBtX3NpemU7CiAjZWxpZiBPUyhEQVJXSU4pCi0gICAgbWFjaF9wb3J0X25h
bWVfdCBtX3BvcnQ7Ci0gICAgbWFjaF9tc2dfdHlwZV9uYW1lX3QgbV9kaXNwb3NpdGlvbjsKKyAg
ICBtYWNoX3BvcnRfbmFtZV90IG1fcG9ydCB7IDAgfTsKKyAgICBtYWNoX21zZ190eXBlX25hbWVf
dCBtX2Rpc3Bvc2l0aW9uIHsgMCB9OwogI2VsaWYgT1MoV0lORE9XUykKICAgICBIQU5ETEUgbV9o
YW5kbGUgeyBJTlZBTElEX0hBTkRMRV9WQUxVRSB9OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCShyZXZp
c2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEzICs0MCw5IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZSgKICAgICBlbmNvZGVyIDw8IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVu
dGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7
Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2llczsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5IDw8IGluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+
IFdlYgogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMuY29va2ll
U3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpjb29raWVTdG9yYWdlUGF0aEV4
dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBPcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6Q29va2llPj4g
cGVuZGluZ0Nvb2tpZXM7Ci0gICAgZGVjb2RlciA+PiBwZW5kaW5nQ29va2llczsKLSAgICBpZiAo
IXBlbmRpbmdDb29raWVzKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHBhcmFt
ZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBXVEZNb3ZlKCpwZW5kaW5nQ29va2llcyk7Ci0KICNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBPcHRpb25hbDxTdHJpbmc+IGluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeTsKICAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsK
QEAgLTEwMSwxNCArOTEsNiBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4g
V2ViCiAgICAgaWYgKCFpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBP
cHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9i
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNl
VGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFpbmRleGVkRGF0YWJh
c2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNF
X1dPUktFUikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9TaGFy
ZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTUg
KzUxLDExIEBAIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyB7CiAKICAgICBWZWN0
b3I8dWludDhfdD4gdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAg
IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29raWVzOwogICAgIE5ldHdvcmtTZXNz
aW9uQ3JlYXRpb25QYXJhbWV0ZXJzIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKIAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIFN0cmluZyBpbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHku
aAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5
UHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94eSgpOwogCiAgICAgdm9pZCBjb25uZWN0
KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGVybWluYXRlKCk7
CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigpID0gMDsKIApJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
Y3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29r
aWVNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1
ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1By
b3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgiCiAjaW5jbHVkZSAiV2ViQ29v
a2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5TWVz
c2FnZXMuaCIKQEAgLTM5LDI0ICs0MCwxNiBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAotY29uc3QgY2hhciogV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
dXBwbGVtZW50TmFtZSgpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykKKyAgICA6IG1fbmV0d29y
a1Byb2Nlc3MobWFrZVdlYWtQdHIobmV0d29ya1Byb2Nlc3MpKQogewotICAgIHJldHVybiAiV2Vi
Q29va2llTWFuYWdlclByb3h5IjsKLX0KLQotUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gV2Vi
Q29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94eShwcm9jZXNz
UG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQcm94
eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi0gICAgOiBXZWJDb250ZXh0U3VwcGxlbWVu
dChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250ZXh0U3VwcGxlbWVudDo6cHJvY2Vzc1Bvb2wo
KS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIG5ldHdvcmtQcm9jZXNzLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksICp0aGlzKTsKIH0KIAogV2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2ll
TWFuYWdlclByb3h5KCkKIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CiAgICAgQVNTRVJUKG1fY29va2ll
T2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiB9CiAKQEAgLTY1LDEwMiArNTgsODQgQEAgdm9pZCBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmluaXRpYWxpemVDbAogICAgIG1fY2xpZW50LmluaXRpYWxpemUo
Y2xpZW50KTsKIH0KIAotLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLQotdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnByb2Nlc3NQb29sRGVzdHJveWVkKCkKLXsKLSAgICBWZWN0b3I8T2JzZXJ2
ZXIqPiBvYnNlcnZlcnM7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlclNldCA6IG1fY29va2llT2Jz
ZXJ2ZXJzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZl
clNldCkKLSAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQob2JzZXJ2ZXIpOwotICAgIH0KLQot
ICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyLT5t
YW5hZ2VyRGVzdHJveWVkKCk7Ci0KLSAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0
eSgpKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShX
ZWJQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJv
Y2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2Jq
ZWN0OjpyZWYoKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29u
dGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpkZXJlZigpOwotfQotCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYp
PiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQor
ICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBwcm9jZXNzUG9vbCgp
LT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklELCBo
b3N0bmFtZXMpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyksIDApOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQp
CiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGlu
Z0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVz
KHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29r
aWVzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVs
ZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ29va2llJiBjb29raWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1
dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFtjYWxsYmFja0Z1
bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKV0oKSBtdXRhYmxlIHsKKyAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklE
LCBjb29raWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCiAgICAgICAg
IGNhbGxiYWNrRnVuY3Rpb24oKTsKLSAgICB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgV2FsbFRpbWUgdGltZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNr
RnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVk
U2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01v
ZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7
CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
YWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9u
SUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBjb29raWVz
KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFj
a0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMs
IGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdv
cmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RG
TW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3Vt
ZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBj
YWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRB
bGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAg
ICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29v
a2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisg
ICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmdldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwp
LCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
KyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShjYWxs
YmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7
CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNo
YW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOwor
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMo
c2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJv
Y2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhz
ZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nv
b2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpzZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
V1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmIGNhbGxiYWNrKQpAQCAtMjExLDE4ICsxODYsMTggQEAg
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNvb2tpZXNEaWRDaAogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwg
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotI2lmIFVTRShTT1VQKQotICAgIHByb2Nlc3NQb29sKCkt
PnNldEluaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAg
IGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgV1RGTW92
ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKIH0K
IAotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBv
bGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1bmN0
aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzZXNzaW9uSUQpLCBXVEZN
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrRnVuY3Rp
b24oSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6TmV2ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5oCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTEgKzU2LDkgQEAg
dHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpBcnJheSo+IEFycgogdHlwZWRlZiBHZW5lcmlj
Q2FsbGJhY2s8V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeT4gSFRUUENvb2tpZUFjY2Vw
dFBvbGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7CiAKLWNsYXNzIFdlYkNvb2tpZU1h
bmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNv
b2tpZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1lbnQsIHByaXZhdGUgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQ
STo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHByaXZhdGUg
SVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBz
dXBwbGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+
IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRpYyBSZWY8V2ViQ29va2llTWFuYWdl
clByb3h5PiBjcmVhdGUoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KG5ldHdvcmtQcm9jZXNzKSk7
IH0KICAgICB2aXJ0dWFsIH5XZWJDb29raWVNYW5hZ2VyUHJveHkoKTsKIAogICAgIHZvaWQgaW5p
dGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKik7CkBAIC0xMDQs
MTcgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQVBJOjpPYmplY3Q6OmRlcmVmOwogCiBw
cml2YXRlOgotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCopOworICAg
IFdlYkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAKICAgICB2b2lk
IGNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gV2ViQ29udGV4dFN1
cHBsZW1lbnQKLSAgICB2b2lkIHByb2Nlc3NQb29sRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZv
aWQgcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlcmVmV2Vi
Q29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLQogICAgIC8vIElQQzo6TWVzc2FnZVJlY2Vp
dmVyCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKSBvdmVycmlkZTsKIApAQCAtMTI1LDYgKzExNiw3IEBAIHByaXZhdGU6CiAgICAgSGFz
aE1hcDxQQUw6OlNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPj4gbV9sZWdhY3lDb29r
aWVPYnNlcnZlcnM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgSGFzaFNldDxPYnNlcnZl
cio+PiBtX2Nvb2tpZU9ic2VydmVyczsKIAorICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94
eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHlDbGllbnQgbV9j
bGllbnQ7CiAKICNpZiBVU0UoU09VUCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0Niw3ICsxNzQ2LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYQogICAgICAgICByZXR1cm47
CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb250cm9sbGVkQnlBdXRvbWF0aW9u
KGNvbnRyb2xsZWQpKTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9s
bGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJv
bGxlZEJ5QXV0b21hdGlvbikpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9sbGVk
QnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJvbGxl
ZEJ5QXV0b21hdGlvbiksIDApOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y3JlYXRlSW5zcGVj
dG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFy
Z2V0VHlwZSB0eXBlKQpAQCAtMzIxMCwxMSArMzIxMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpp
c0ZvcmNlZEludG9BcHBCb3VuZE0KIHZvaWQgV2ViUGFnZVByb3h5OjpkaXNhYmxlU2VydmljZVdv
cmtlckVudGl0bGVtZW50SW5OZXR3b3JrUHJvY2VzcygpCiB7CiAjaWYgRU5BQkxFKEFQUF9CT1VO
RF9ET01BSU5TKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCksIDApOwotICAgIH0K
KyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpLCAwKTsKICNl
bmRpZgogfQogCkBAIC0zMjIzLDEzICszMjE5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFy
U2VydmljZVdvcmtlckVudAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykgJiYgIVBMQVRG
T1JNKE1BQ0NBVEFMWVNUKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIHNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRs
ZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJp
ZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFT
dG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwog
I2VuZGlmCkBAIC00NDIzLDcgKzQ0MTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cHJlY29ubmVj
dFRvKGNvbnN0IFVSCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3kgPSBtX2NhblVzZUNyZWRlbnRpYWxTdG9yYWdlID8gV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3k6OlVzZSA6IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpE
b05vdFVzZTsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5wcmVjb25uZWN0VG8oc2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFnZUlEKCks
IHVybCwgdXNlckFnZW50KCksIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRpbmdU
b0FwcEJvdW5kRG9tYWluKCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vz
cygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigpLCB3ZWJQYWdlSUQoKSwg
dXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1Rv
QXBwQm91bmREb21haW4oKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDYW5Vc2VDcmVk
ZW50aWFsU3RvcmFnZShib29sIGNhblVzZUNyZWRlbnRpYWxTdG9yYWdlKQpAQCAtNDcxOSw3ICs0
NzA5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZQogICAgICAg
ICAgICAgUmVnaXN0cmFibGVEb21haW4gY3VycmVudERvbWFpbiB7IGN1cnJlbnRSZXF1ZXN0LnVy
bCgpIH07CiAgICAgICAgICAgICBVUkwgcmVxdWVzdGVyVVJMIHsgVVJMKCksIHJlcXVlc3Rlck9y
aWdpbi50b1N0cmluZygpIH07CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnREb21haW4ubWF0Y2hl
cyhyZXF1ZXN0ZXJVUkwpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2wo
KS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9LCBjdXJy
ZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50aWZpZXIsIG1fd2ViUGFn
ZUlEKTsKKyAgICAgICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNz
KCkuZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwgY3Vy
cmVudERvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dlYlBh
Z2VJRCk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTQ3NTcsNyArNDc0Nyw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUKICAgICBpZiAobmF2aWdhdGlv
biAmJiBmcmFtZS0+aXNNYWluRnJhbWUoKSkgewogICAgICAgICBpZiAoYXV0byYgYWRDbGlja0F0
dHJpYnV0aW9uID0gbmF2aWdhdGlvbi0+YWRDbGlja0F0dHJpYnV0aW9uKCkpIHsKICAgICAgICAg
ICAgIGlmIChhZENsaWNrQXR0cmlidXRpb24tPmRlc3RpbmF0aW9uKCkubWF0Y2hlcyhmcmFtZS0+
dXJsKCkpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9O
ZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0
dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmli
dXRpb24pKTsKKyAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3RvcmVBZENsaWNrQXR0cmlidXRp
b24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKmFkQ2xpY2tBdHRyaWJ1dGlvbiks
IDApOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MzcxLDcgKzUzNjEsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvCiAgICAgaWYgKHRhcmdldEhvc3QuaXNFbXB0
eSgpIHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3QgPT0gc291cmNlVVJM
Lmhvc3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgp
LnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TG9nRnJh
bWVOYXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxl
RG9tYWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVSTCB9LCBSZWdp
c3RyYWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5pc01haW5GcmFt
ZSgpLCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yTWFp
bkZyYW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlcikpOworICAgIHdl
YnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBw
YWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVkaXJlY3QsIGZy
YW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRGaW5pc2hEb2N1
bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlV
c2VyKSwgMCk7CiB9CiAjZW5kaWYKIApAQCAtOTk5Niw1OCArOTk4NiwyNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6c3lzdGVtUHJldmlld0FjdGlvblRyCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkdW1w
QWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYg
KCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAg
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5l
dHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2Fn
ZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1ZSks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9y
ZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcobV93
ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFsdWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25D
b252ZXJzaW9uVVJMRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1f
d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCku
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0
dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgp
KSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJl
ZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQ
cm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFy
a0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKICNpZiBF
TkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBA
QAogI2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nSW5pdGlh
bGl6YXRpb24uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uSW5mby5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtQcm9jZXNzUHJveHkuaCIKQEAgLTE0Myw4ICsxNDIsMTAgQEAKICNlbmRpZgogCiAj
ZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxF
QVNFX0xPRyhjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19W
QV9BUkdTX18pCisjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhjaGFu
bmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZt
dCwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJS
T1IoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIlcCAtIFdl
YlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJP
Q0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFT
RV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAi
JXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5l
IFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5uZWwsIGZt
dCwgLi4uKSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2Vk
KCksIGNoYW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIsNiArMjMz
LDExIEBAIHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXQKICAgICByZXR1
cm4gc2V0OwogfQogCitWZWN0b3I8U3RyaW5nPiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dp
dGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkKK3sKKyAgICByZXR1cm4gY29weVRvVmVjdG9yKGds
b2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKTsKK30KKwogV2ViUHJv
Y2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBj
b25maWd1cmF0aW9uKQogICAgIDogbV9jb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24uY29weSgp
KQogICAgICwgbV9kZWZhdWx0UGFnZUdyb3VwKFdlYlBhZ2VHcm91cDo6Y3JlYXRlKCkpCkBAIC0y
MzksNyArMjQ1LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvYwog
ICAgICwgbV9hdXRvbWF0aW9uQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpBdXRvbWF0aW9uQ2xpZW50
PigpKQogICAgICwgbV9kb3dubG9hZENsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRD
bGllbnQ+KCkpCiAgICAgLCBtX2hpc3RvcnlDbGllbnQobWFrZVVuaXF1ZTxBUEk6OkxlZ2FjeUNv
bnRleHRIaXN0b3J5Q2xpZW50PigpKQotICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQobWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICAgICAs
IG1fdmlzaXRlZExpbmtTdG9yZShWaXNpdGVkTGlua1N0b3JlOjpjcmVhdGUoKSkKICNpZiBQTEFU
Rk9STShNQUMpCiAgICAgLCBtX2hpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyKG1h
a2VVbmlxdWU8SGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXI+KCp0aGlzKSkKQEAg
LTI2Nyw5ICsyNzIsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9j
CiAjZW5kaWYKICAgICB9KTsKIAotICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlICYmIFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBt
X3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKTsKLQogICAgIGZvciAoYXV0byYgc2NoZW1lIDogbV9jb25maWd1cmF0aW9uLT5hbHdh
eXNSZXZhbGlkYXRlZFVSTFNjaGVtZXMoKSkKICAgICAgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFz
QWx3YXlzUmV2YWxpZGF0ZWQuYWRkKHNjaGVtZSk7CiAKQEAgLTI4NSw3ICsyODcsNiBAQCBXZWJQ
cm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jCiAgICAgYWRkTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhp
cyk7CiAKICAgICAvLyBOT1RFOiBUaGVzZSBzdWItb2JqZWN0cyBtdXN0IGJlIGluaXRpYWxpemVk
IGFmdGVyIG1fbWVzc2FnZVJlY2VpdmVyTWFwLi4KLSAgICBhZGRTdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdl
clByb3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5
PigpOwogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQpAQCAtMzQyLDkgKzM0Myw2IEBAIFdlYlBy
b2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2woKQogICAgIHByb2Nlc3NQb29sQ291bnRlci5kZWNy
ZW1lbnQoKTsKICNlbmRpZgogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNodXREb3duUHJvY2VzcygpOwotCiAjaWYgRU5BQkxFKEdBTUVQQUQp
CiAgICAgaWYgKCFtX3Byb2Nlc3Nlc1VzaW5nR2FtZXBhZHMuaXNFbXB0eSgpKQogICAgICAgICBV
SUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkucHJvY2Vzc1Bvb2xTdG9wcGVkVXNpbmdHYW1l
cGFkcygqdGhpcyk7CkBAIC00MDIsMTYgKzQwMCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
dEF1dG9tYXRpb25DbGllbnQKICAgICAgICAgbV9hdXRvbWF0aW9uQ2xpZW50ID0gV1RGTW92ZShh
dXRvbWF0aW9uQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudD4mJiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi17Ci0jaWYg
RU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKLSAgICBpZiAoIWN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCkKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQgPSBtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpOwotICAg
IGVsc2UKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBXVEZNb3ZlKGN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0
cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKQogewogICAgIC8v
IEd1YXJkIGFnYWluc3QgQVBJIG1pc3VzZS4KQEAgLTQyMSwxMSArNDA5LDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudAogICAgIG1fY29uZmlndXJhdGlvbi0+c2V0
Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGN1c3RvbVdlYkNvbnRlbnRT
ZXJ2aWNlQnVuZGxlSWRlbnRpZmllcik7CiB9CiAKLUlQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fbmV0
d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFu
Z3VhZ2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViUHJvY2Vz
c1Bvb2wqPihjb250ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7CkBAIC00MzUsOCArNDE4LDcgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9BbGxQ
cm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFu
Z2VkKCkpOwogI2lmIFVTRShTT1VQKQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclBy
ZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7Cisg
ICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5uZXR3b3JrUHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hh
bmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKICNlbmRpZgogfQogCkBAIC00NDks
NyArNDMxLDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZnVsbEtleWJvYXJkQWNjZXNzTQogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE1lbW9yeVByZXNzdXJlRXZlbnQoYm9vbCBpc0NyaXRpY2Fs
KQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6
RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCkpOwotICAgIHNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVt
b3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSk7CisgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9j
ZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQorICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVj
ZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCksIDApOwogI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQogICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5z
ZW5kTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKTsKICNlbmRpZgpAQCAtNDc0LDI3NSAr
NDU3LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2NyZWVuUHJvcGVydGllc1N0YQogI2VuZGlm
CiB9CiAKLU5ldHdvcmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3Jr
UHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKLXsKLSAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEg
dGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFp
biB0aHJlYWRzLgotICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2Ug
dGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KLSAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlmICghUnVuTG9vcDo6
aXNNYWluKCkpIHsKLSAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7
Ci0gICAgfQotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgaWYgKHdpdGhX
ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNz
aW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICB3aXRoV2Vi
c2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBhdXRvIG5ldHdvcmtQcm9j
ZXNzID0gbWFrZVVuaXF1ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7Ci0KLSAgICBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCi0gICAgaWYgKG1fd2Vi
c2l0ZURhdGFTdG9yZSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLnBlbmRpbmdDb29raWVzID0gY29weVRvVmVjdG9yKG1fd2Vic2l0ZURhdGFTdG9yZS0+
cGVuZGluZ0Nvb2tpZXMoKSk7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5k
aW5nQ29va2llcygpOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VB
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3Vy
YXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVy
KCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lH
bG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotCi0gICAgZm9yIChhdXRv
JiBzY2hlbWUgOiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkK
LSAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29s
cy5hcHBlbmQoc2NoZW1lKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU3RyaW5n
IGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURp
cmVjdG9yeSgpOwotICAgIGlmICghY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0g
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9y
eSA9IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYg
KCFjb250YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVz
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7Ci0KLSAgICBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bv
b2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyZW50QnVuZGxlRGlyZWN0
b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBh
cmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBh
cmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclRlbXBvcmFyeUZpbGUoZW1wdHlTdHJpbmcoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6
UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWRE
YXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotI2VuZGlm
Ci0KLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9W
ZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVy
QXNTZWN1cmUoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNz
aW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRp
bmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3Vy
aXR5UG9saWN5KCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2Fs
ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVz
VG9SZWdpc3RlckFzTG9jYWwoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRv
bigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotICAgIC8vICoqKioqKioqKgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNo
YW5nZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlz
ayB3aXRob3V0IGZpcnN0IGNvbnN1bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjov
L3Byb2JsZW0vMTc0NTQ3MTI+KQotICAgIC8vICoqKioqKioqKgotICAgIGlmIChtX3dlYnNpdGVE
YXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZElu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVj
dG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+Y3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQot
I2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQot
ICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBt
X3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSgpOwotICAgIGlmICghcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5KQotICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnkgPSAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExv
Y2FsU3RvcmFnZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9y
YWdlRGlyZWN0b3J5KQotICAgICAgICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9
IGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0KLSAgICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURh
dGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBu
dWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVj
dG9yeShjYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3Rv
cnkgPSBXVEZNb3ZlKGNhY2hlU3RvcmFnZURpcmVjdG9yeSk7Ci0gICAgfQotCi0gICAgU3RyaW5n
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0g
ICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGFyYW1ldGVycy5kaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NE
aXJlY3RvcnksIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwotCi0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAg
Ym9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7
Ci0gICAgYm9vbCBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoUkVT
T1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGUgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IFdlYkNvcmU6OlRoaXJkUGFy
dHlDb29raWVCbG9ja2luZ01vZGU6OkFsbDsKLSAgICBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZCBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IFdlYkNv
cmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKLSNlbmRpZgotICAgIFdl
YkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJzaXRl
RGF0YVJlbW92YWxNb2RlID0gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGU6OkFsbEJ1dENvb2tpZXM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gc3RhbmRh
bG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4+IGFwcEJvdW5kRG9tYWluczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBt
YW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fdGNj
UHJlZmVyZW5jZUVuYWJsZWQgPSBkb2VzQXBwSGF2ZUlUUEVuYWJsZWQoKTsKLSAgICBpZiAod2l0
aFdlYnNpdGVEYXRhU3RvcmUgJiYgIXdpdGhXZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhw
bGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBt
X3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyk7Ci0gICAgfSBlbHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUgJiYgIW1fd2Vic2l0ZURhdGFT
dG9yZS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgbV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmVFeGlzdHMoKSAmJiAhV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZSgpLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZQotICAg
ICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxl
ZDsKLSNlbmRpZgotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2
ZW50ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2so
KTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewot
ICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURh
dGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAg
ICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAg
ICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxl
RGVidWdNb2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAg
ICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5zYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAg
Zmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
c3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5z
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLmFwcEJvdW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNl
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLm1hbnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3
aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0
b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3Rv
cmFnZVF1b3RhKCk7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVE
aXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsK
LSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURp
cmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3
b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNvbnN0IGF1dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRh
U3RvcmUtPnJlc29sdmVkSFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3Rz
U3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3Jh
Z2VEaXJlY3RvcnkgPSBoc3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVu
c2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkg
ewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NM
b2dUZXN0aW5nRXZlbnQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5n
Q2FsbGJhY2soKTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljcykgewotICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dl
YnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0g
ICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhv
c3Q7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
LmVuYWJsZURlYnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQot
ICAgICAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29v
a2llQmxvY2tpbmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVu
YWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMuc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlOwotICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9t
YWluID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJh
bWV0ZXJzLnN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5k
RG9tYWlucyA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5hcHBCb3VuZERvbWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5tYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1
b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAg
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3Jp
Z2luU3RvcmFnZVF1b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2lu
U3RvcmFnZVF1b3RhKCk7Ci0KLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgp
OwotICAgICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAg
ICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5
OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNo
ZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3
b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y29uc3QgYXV0byYgaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJl
c29sdmVkSFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURp
cmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3Rv
cnkgPSBoc3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlw
ZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7
Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVj
dG9yeTsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNo
ZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3
b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lmIEhBVkUoQ0ZO
RVRXT1JLX0FMVEVSTkFUSVZFX1NFUlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6Omh0
dHAzRW5hYmxlZCgpKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9y
eSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2VzRGlyZWN0b3J5
KCk7Ci0gICAgICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnksIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFs
dGVybmF0aXZlU2VydmljZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
Lmh0dHAzRW5hYmxlZCA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBpc0l0cFN0YXRl
RXhwbGljaXRseVNldCA9IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXJhbWV0ZXJzID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewotICAgICAgICBX
VEZNb3ZlKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAgICBXVEZNb3Zl
KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpLAotICAgICAg
ICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0YXRlRXhwbGlj
aXRseVNldCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdF
dmVudCwKLSAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAgZW5hYmxlUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQotICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlLAotICAgICAg
ICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0
aW9uRG9tYWluLAotICAgICAgICBhcHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZh
bGVudFJlc291cmNlLAotICAgIH07Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmlj
IHBhcmFtZXRlcnMKLSAgICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0
ZXJzKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3
b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3
b3JrUHJvY2Vzc0xhdGVuY3lRT1MoKSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAw
KTsKLSNlbmRpZgotCi0gICAgbmV0d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24o
KTsKLQotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAg
ICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQot
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUg
c2Vzc2lvbnMgdGhhdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAg
ICBmb3IgKGF1dG8mIHNlc3Npb25JRCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpl
eGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAg
ICB9Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0g
ICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpu
ZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQ
cm94eSkKIHsKLSAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3
b3JrUHJvY2Vzc1Byb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChh
dXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxl
bWVudC0+cHJvY2Vzc0RpZENsb3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzUxLDkg
KzQ2Nyw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2gKICAgICBp
ZiAobV9hdXRvbWF0aW9uU2Vzc2lvbikKICAgICAgICAgbV9hdXRvbWF0aW9uU2Vzc2lvbi0+dGVy
bWluYXRlKCk7CiAKLSAgICAvLyBMZWF2ZSB0aGUgcHJvY2VzcyBwcm94eSBhcm91bmQgZHVyaW5n
IGNsaWVudCBjYWxsLCBzbyB0aGF0IHRoZSBjbGllbnQgY291bGQgcXVlcnkgdGhlIHByb2Nlc3Mg
aWRlbnRpZmllci4KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKLQogICAgIHRlcm1p
bmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKQEAgLTc2NCwyMCArNDc3LDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2NlcwogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdl
YlByb2Nlc3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAgICBlbnN1cmVOZXR3b3Jr
UHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KSwgd2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwgcmVwbHkg
PSBXVEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc1ZhbGlkKGNvbm5l
Y3Rpb25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5ICYmIHdlYWtUaGlzKSkg
ewotICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoUHJvY2Vzcywg
ImdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0IGF0dGVtcHQsIHJldHJ5
aW5nIik7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3ZWJQcm9jZXNz
UHJveHksIFdURk1vdmUocmVwbHkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7Ci0gICAgfSk7Ci19Ci0KICNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpncHVQcm9jZXNzQ3Jhc2hlZChQcm9j
ZXNzSUQgaWRlbnRpZmllcikKIHsKQEAgLTgwMSwyMyArNTAwLDI2IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmdldEdQVVByb2Nlc3NDb25uZWMKIH0KICNlbmRpZgogCitib29sIFdlYlByb2Nlc3NQ
b29sOjpzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSBmYWxzZTsKKwogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiBw
cm94eSwgUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChwcm94eSwgJnByb3h5ID09IG1fbmV0d29ya1Byb2Nl
c3MuZ2V0KCkpOwotCi0gICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3Rv
cmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwot
Ci0gICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0
YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0gICAgICAgIHdlYnNpdGVEYXRh
U3RvcmUgPSBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7Ci0gICAgfQorICAgIGF1dG8qIHdlYnNp
dGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Np
b25JRChzZXNzaW9uSUQpOworICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAgd2Vi
c2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIo
KTsKKyAgICBpZiAoIXByb2Nlc3NQb29scygpLnNpemUoKSkKKyAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFJlZjxXZWJQcm9jZXNzUG9vbD4+IHNlcnZpY2VXb3JrZXJQcm9jZXNzUG9vbChX
ZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjcmVh
dGUoKS5nZXQoKSkpOworCisgICAgLy8gQXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdCBwcm9j
ZXNzIHBvb2wgdG8gaG9zdCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vzcy4KKyAgICBhdXRvKiBw
cm9jZXNzUG9vbCA9IHByb2Nlc3NQb29scygpWzBdOworICAgIEFTU0VSVChwcm9jZXNzUG9vbCk7
CiAKICAgICBXZWJQcm9jZXNzUHJveHkqIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgeyBudWxs
cHRyIH07Ci0gICAgaWYgKCFtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGlm
IChwcm9jZXNzID09IG1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9jZXNzLT5pc0R1bW15UHJvY2Vz
c1Byb3h5KCkpCisKKyAgICBpZiAoIXNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcykg
eworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMp
IHsKKyAgICAgICAgICAgIGlmIChwcm9jZXNzID09IHByb2Nlc3NQb29sLT5tX3ByZXdhcm1lZFBy
b2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94eSgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCZwcm9jZXNzLT53ZWJzaXRlRGF0YVN0b3JlKCkg
IT0gd2Vic2l0ZURhdGFTdG9yZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTgyNSwz
NSArNTI3LDM1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnQKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eSA9IHByb2Nlc3MuZ2V0KCk7Ci0gICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyh1c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlm
aWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CisgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyhwcm9jZXNzUG9vbC0+dXNlckNvbnRlbnRDb250
cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkpOwogCi0gICAgICAgICAgICBXRUJQ
Uk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxp
c2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgcmV1c2luZyBhbiBleGlz
dGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkp
OworICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFU
SUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3
b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdlYiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQ
SUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwgc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KIAogICAgIGlmICghc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkgewotICAgICAg
ICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6Y3JlYXRlRm9yU2Vydmlj
ZVdvcmtlcnMoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFT
dG9yZSk7CisgICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5ID0gV2ViUHJvY2Vzc1Byb3h5Ojpj
cmVhdGVGb3JTZXJ2aWNlV29ya2VycygqcHJvY2Vzc1Bvb2wsIFdURk1vdmUocmVnaXN0cmFibGVE
b21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CiAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNz
UHJveHkgPSBuZXdQcm9jZXNzUHJveHkucHRyKCk7CiAKLSAgICAgICAgV0VCUFJPQ0VTU1BPT0xf
UkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29y
a2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJv
eHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAg
ICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEX1NUQVRJQyhTZXJ2aWNl
V29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
IGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVk
KSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkt
PnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCi0gICAgICAgIGluaXRpYWxpemVOZXdXZWJQcm9jZXNz
KG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFTdG9yZSk7Ci0gICAgICAgIG1fcHJvY2Vzc2Vz
LmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOworICAgICAgICBwcm9jZXNzUG9vbC0+
aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJvY2Vzc1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3Jl
KTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1By
b2Nlc3NQcm94eSkpOwogICAgIH0KIAotICAgIEFTU0VSVCghbV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSk7Ci0gICAgbV9zZXJ2aWNl
V29ya2VyUHJvY2Vzc2VzLmFkZCgqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSk7CisgICAgQVNT
RVJUKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29udGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHkpKTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuYWRkKCpzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5KTsKIAotICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVzdGFi
bGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzID8gbV9z
ZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJl
ZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgaWYg
KCFtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxsKCkpCi0gICAgICAgIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQobV9zZXJ2aWNlV29ya2Vy
VXNlckFnZW50KTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lc3RhYmxpc2hTZXJ2
aWNlV29ya2VyQ29udGV4dChwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMg
PyBwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IHByb2Nl
c3NQb29sLT5tX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmICghcHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdv
cmtlclVzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94
eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2Vy
VXNlckFnZW50KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVtb3ZlRnJvbVNlcnZpY2VX
b3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogewotICAgIEFTU0VSVCht
X3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFpbnMocHJvY2VzcykpOwotICAgIG1fc2Vydmlj
ZVdvcmtlclByb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CisgICAgQVNTRVJUKHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzZXMoKS5jb250YWlucyhwcm9jZXNzKSk7CisgICAgc2VydmljZVdvcmtlclByb2Nl
c3NlcygpLnJlbW92ZShwcm9jZXNzKTsKIH0KICNlbmRpZgogCkBAIC05MjIsNyArNjI0LDcgQEAg
UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OgogI2lmIFBMQVRGT1JNKEdU
SykgfHwgUExBVEZPUk0oV1BFKQogICAgIC8vIEluIHBsYXRmb3JtcyB1c2luZyBCdWJibGV3cmFw
IGZvciBzYW5kYm94aW5nLCBwcmV3YXJtZWQgcHJvY2VzcyBpcyBsYXVuY2hlZCB1c2luZyB0aGUg
V2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlLAogICAgIC8vIHNvIHdlIGRv
bid0IHVzZSBpdCBpbiBjYXNlIG9mIHVzaW5nIGEgZGlmZmVyZW50IFdlYnNpdGVEYXRhU3RvcmUu
Ci0gICAgaWYgKG1fc2FuZGJveEVuYWJsZWQgJiYgbV93ZWJzaXRlRGF0YVN0b3JlICYmIG1fd2Vi
c2l0ZURhdGFTdG9yZS5nZXQoKSAhPSAmd2Vic2l0ZURhdGFTdG9yZSkKKyAgICBpZiAobV9zYW5k
Ym94RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIApAQCAtMTAzMiw4
ICs3MzQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjppbml0aWFsaXplTmV3V2ViUHJvCiAgICAg
ICAgIHByb2Nlc3MuaXNSZXNwb25zaXZlKFtpbml0aWFsaXphdGlvbkFjdGl2aXR5ID0gV1RGTW92
ZShpbml0aWFsaXphdGlvbkFjdGl2aXR5KV0gKGJvb2wpIHsgfSk7CiAgICAgfSk7CiAKLSAgICBl
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyBwYXJhbWV0ZXJzOwogCiAgICAgcGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGggPSBtX3Jl
c29sdmVkUGF0aHMuaW5qZWN0ZWRCdW5kbGVQYXRoOwpAQCAtMTE5OCw5ICs4OTgsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1CiAgICAgICAgIHByb2Nlc3MtPmNv
bm5lY3Rpb24oKS0+aWdub3JlVGltZW91dHNGb3JUZXN0aW5nKCk7CiAKICAgICBtX2Nvbm5lY3Rp
b25DbGllbnQuZGlkQ3JlYXRlQ29ubmVjdGlvbih0aGlzLCBwcm9jZXNzLT53ZWJDb25uZWN0aW9u
KCkpOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgbV93ZWJzaXRlRGF0
YVN0b3JlLT5kaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCkBAIC0xMjk1
LDEwICs5OTIsNyBAQCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlCiAg
ICAgaWYgKCFwYWdlQ29uZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpKSB7CiAgICAgICAg
IC8vIFdlIHRyeSB0byBhdm9pZCBjcmVhdGluZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxv
bmcgYXMgcG9zc2libGUuCiAgICAgICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRv
IGNyZWF0ZSBhIHdlYiBwYWdlIHdpdGhvdXQgYW55IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVu
IHdlIGhhdmUgdG8gY3JlYXRlIGl0LgotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkK
LSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotCi0gICAgICAgIHBhZ2VDb25maWd1cmF0aW9u
LT5zZXRXZWJzaXRlRGF0YVN0b3JlKG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAg
IHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpKTsKICAgICB9CiAKICAgICBSZWZQdHI8
V2ViUHJvY2Vzc1Byb3h5PiBwcm9jZXNzOwpAQCAtMTMyOSw3ICsxMDIzLDcgQEAgUmVmPFdlYlBh
Z2VQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZQogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKICAgICBpZiAoIW1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKSB7CiAgICAgICAgIG1fc2Vy
dmljZVdvcmtlclByZWZlcmVuY2VzID0gcGFnZS0+cHJlZmVyZW5jZXNTdG9yZSgpOwotICAgICAg
ICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzKQorICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdv
cmtlclByb2Nlc3NlcygpKQogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRl
U2VydmljZVdvcmtlclByZWZlcmVuY2VzU3RvcmUoKm1fc2VydmljZVdvcmtlclByZWZlcmVuY2Vz
KTsKICAgICB9CiAgICAgaWYgKHVzZXJDb250ZW50Q29udHJvbGxlcikKQEAgLTEzNTYsNyArMTA1
MCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXIKICAgICBpZiAo
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50ID09IHVzZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwog
ICAgIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9IHVzZXJBZ2VudDsKLSAgICBmb3IgKGF1dG8m
IHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgIGZv
ciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkp
CiAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzLnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQo
bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KICNlbmRpZgpAQCAtMTM2NSwxNSArMTA1OSw2
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2kKIHsKICAgICBhdXRv
IHJlc3VsdCA9IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5hZGQoZGF0YVN0b3JlLnNlc3Npb25JRCgp
LCBIYXNoU2V0PFdlYlBhZ2VQcm94eUlkZW50aWZpZXI+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQo
cGFnZUlEKTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwot
Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7Ci0gICAgaWYgKHNl
c3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAg
IEFTU0VSVCghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgfHwgZGF0YVN0b3JlLnBhcmFtZXRlcnMo
KS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEID09IHNlc3Npb25JRCk7Ci0gICAg
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5hZGRTZXNzaW9uKG1ha2VSZWYoZGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICBkYXRhU3RvcmUu
Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgfQogfQogCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpwYWdlRW5kVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50
aWZpZXIgcGFnZUlELCBXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpCkBAIC0xNDAxLDcgKzEw
ODYsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNQYWdlc1VzaW5nV2Vic2l0CiBEb3dubG9h
ZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0
b3JlLCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCiB7CiAgICAgYXV0byYg
ZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCByZXF1ZXN0LCBp
bml0aWF0aW5nUGFnZSwgeyB9KTsKLSAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBkYXRh
U3RvcmUuc2Vzc2lvbklEKCk7CiAKICAgICBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpbj4gaXNBcHBCb3VuZCA9IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpObzsKICAgICBp
ZiAoaW5pdGlhdGluZ1BhZ2UpIHsKQEAgLTE0MTEsMjYgKzEwOTUsMjMgQEAgRG93bmxvYWRQcm94
eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKAogI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKG5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0
KHJlcXVlc3QpOwotICAgICAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2ls
bCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KLSAgICAg
ICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3AgbGV2ZWwgZG9jdW1lbnQncyBVUkwuCi0gICAg
ICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewotICAgICAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdl
VVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwo
KSB9OwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMo
aW5pdGlhdGluZ1BhZ2VVUkwpOwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1l
U2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVz
dC51cmwoKSkpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVy
RmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRl
ZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChpbml0aWF0aW5nUGFnZS0+dXNlckFnZW50Rm9yVVJM
KHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHVwZGF0ZWRS
ZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKLSAgICAgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVk
UmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0g
ICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJv
eHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZWRSZXF1
ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3du
bG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dl
c3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5OworICAgIFJl
c291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAvLyBSZXF1ZXN0J3Mg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUg
ZG93bmxvYWQgcmVxdWVzdC4KKyAgICAvLyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBk
b2N1bWVudCdzIFVSTC4KKyAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKKyAgICAgICAgVVJMIGlu
aXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2Fk
U3RhdGUoKS51cmwoKSB9OworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9y
Q29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElz
U2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJl
cXVlc3QudXJsKCkpKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVy
RmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVx
dWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVx
dWVzdC51cmwoKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZp
cnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNT
YW1lU2l0ZShmYWxzZSk7CisgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQorICAgICAgICAgICAgdXBkYXRlZFJl
cXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkp
OwogICAgIH0KKyAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1RvcFNpdGUoZmFsc2UpOworICAgIGRh
dGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpE
b3dubG9hZFJlcXVlc3QoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBkb3dubG9hZFByb3h5LmRvd25s
b2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwg
MCk7CiAKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KQEAgLTE0MzgsMTcgKzExMTksMTIg
QEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKAogRG93bmxvYWRQcm94
eSYgV2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFT
dG9yZSwgV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgQVBJOjpEYXRhJiByZXN1
bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgYXV0byYgZG93bmxvYWRQcm94eSA9
IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBSZXNvdXJjZVJlcXVlc3QoKSwgaW5pdGlh
dGluZ1BhZ2UsIHsgfSk7Ci0gICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0b3Jl
LnNlc3Npb25JRCgpOwogCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRl
bnNpb25IYW5kbGU7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRX
cml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAobmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQo
KSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5k
bGUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7Ci0gICAgfQotCisgICAgZGF0
YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJl
c3VtZURvd25sb2FkKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgZG93bmxvYWRQcm94eS5kb3dubG9h
ZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlKSwgMCk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CiAKQEAgLTE1MTcsMTEg
KzExOTMsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWZyZXNoUGx1Z2lucygpCiAKICNlbmRp
ZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAotUHJvY2Vzc0lEIFdlYlByb2Nlc3NQ
b29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQotewotICAgIHJldHVybiBtX25ldHdvcmtQ
cm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7Ci19Ci0K
IFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6cHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKQog
ewogICAgIHJldHVybiBtX3ByZXdhcm1lZFByb2Nlc3MgPyBtX3ByZXdhcm1lZFByb2Nlc3MtPnBy
b2Nlc3NJZGVudGlmaWVyKCkgOiAwOwpAQCAtMTU1OCwxNCArMTIyOSwxOCBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGlu
Z3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKTsKICAg
ICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2No
ZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVt
ZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxT
Y2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3Jl
Lm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVy
VVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQ
b2xpY3koY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGlu
Z3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJp
dHlQb2xpY3kodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6Oldl
YlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xp
Y3kodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5
UG9saWN5KHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRl
RGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAg
ICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3ko
dXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERv
bWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiB1cmxTY2hl
bWUpCkBAIC0xNTc4LDE0ICsxMjUzLDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVy
VVJMU2NoZW1lQXMKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2Vz
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1l
KSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFT
dG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3Rv
cmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNj
aGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVS
TFNjaGVtZUFzTm9BY2Nlc3MoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1
cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6
UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSkpOwotICAgIHNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVB
c05vQWNjZXNzKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJz
aXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsK
KyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpLCAwKTsKKyAg
ICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3Bs
YXlJc29sYXRlZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MDYsMTAgKzEyODUsOCBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLmFk
ZCh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdpc3RlclNj
aGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAo
YXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9j
ZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5
Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5y
ZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25z
dCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MTgsMTAgKzEyOTUsOCBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMCiAgICAgICAgIHJldHVybjsKIAogICAgIGdsb2Jh
bFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLnJlbW92ZSh1cmxTY2hlbWUp
OwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1lRm9yTGVn
YWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgZm9yIChhdXRvIG5ldHdv
cmtQcm9jZXNzIDogTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQor
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVBy
b3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJM
U2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTY1
NSwxNiArMTMzMCwxOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKENhY2hl
CiAKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldENhY2hl
TW9kZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNo
ZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vi
c2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkg
eworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAgfSk7CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGlu
ZyhDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB7CiAgICAgdXBkYXRlQmFja0ZvcndhcmRDYWNoZUNh
cGFjaXR5KCk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVs
U3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsKKyAgICBXZWJz
aXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3MoKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5j
aHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCAwKTsKKyAgICB9KTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91
YmxlIHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE2NzQsMTIgKzEzNTEsNyBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpCiAKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQ
b29sOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFn
ZSwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvKQogewotICAgIHJldHVybiBlbnN1cmVO
ZXR3b3JrUHJvY2VzcygmZGF0YVN0b3JlKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwg
cmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwotfQotCi12b2lkIFdlYlByb2Nl
c3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkKLXsKLSAg
ICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dy
b3VuZCk7CisgICAgcmV0dXJuIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURvd25s
b2FkUHJveHkoZGF0YVN0b3JlLCAqdGhpcywgcmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGlu
Z1BhZ2UpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIoSVBD
OjpSZWNlaXZlck5hbWUgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpNZXNzYWdlUmVjZWl2ZXIm
IG1lc3NhZ2VSZWNlaXZlcikKQEAgLTE3NTAsMzAgKzE0MjIsNiBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9OZXR3b3Jr
aW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KQotewotICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpm
b3J3YXJkPFU+KHJlcGx5KSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2Fj
aGVkQ3JlZGVudGlhbHMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkKLXsKLSAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKSwg
MCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkK
LXsKLSAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwotCi0gICAgaWYgKCFtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVy
bWluYXRlKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci19Ci0KIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQogewogICAgIFZl
Y3RvcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzID0gbV9wcm9jZXNzZXM7CkBA
IC0xNzgxLDQwICsxNDI5LDE1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdl
YkNvbnQKICAgICAgICAgcHJvY2Vzcy0+dGVybWluYXRlKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0g
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1t
aW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcoKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0KLQot
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkKLXsKLSAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFBy
b2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2Vy
dmljZVdvcmtlcnMoKQogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBhdXRvIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICB3aGlsZSAobV9zZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzLmNvbXB1dGVTaXplKCkpCi0gICAgICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cy5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKKyAgICB3aGlsZSAoc2VydmljZVdv
cmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoKS5iZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKICNlbmRpZgogfQogCi12
b2lkIFdlYlByb2Nlc3NQb29sOjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNl
c3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQot
ewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRh
dGVBdXRvbWF0aW9uQ2FwYWJpbGl0aWVzKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoUkVNT1RFX0lO
U1BFQ1RPUikKQEAgLTIwODksMTUgKzE3MTIsMjEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVw
b3J0V2ViQ29udGVudENQVQogI2VuZGlmCiB9CiAKK1dlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94
eT4mIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2Vz
OworICAgIHJldHVybiBwcm9jZXNzZXM7Cit9CisKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0
ZVByb2Nlc3NBc3NlcnRpb25zKCkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnVwZGF0
ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0
ZURhdGFTdG9yZShbXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRh
dGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICB9
KTsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gQ2hlY2sgb24gbmV4dCBydW4g
bG9vcCBzaW5jZSB0aGUgd2ViIHByb2Nlc3MgcHJveHkgdG9rZW5zIGFyZSBwcm9iYWJseSBiZWlu
ZyB1cGRhdGVkLgotICAgIGNhbGxPbk1haW5SdW5Mb29wKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKHRoaXMpXSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VX
b3JrZXJQcm9jZXNzZXMpCisgICAgY2FsbE9uTWFpblJ1bkxvb3AoW10geworICAgICAgICBmb3Ig
KGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQog
ICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclByb2Nl
c3NBc3NlcnRpb24oKTsKICAgICB9KTsKICNlbmRpZgpAQCAtMjEwNyw3ICsxNzM2LDcgQEAgYm9v
bCBXZWJQcm9jZXNzUG9vbDo6aXNTZXJ2aWNlV29ya2VyUGFnZQogewogI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmVmZmljaWVudC4KLSAgICByZXR1
cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtwYWdlSURdKGF1dG8mIHBy
b2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCks
IFtwYWdlSURdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2Vy
dmljZVdvcmtlclBhZ2VQcm94eShwYWdlSUQpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMzI5LDE0
ICsxOTU4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDdXJyZW50TW9kaWZpZQogfQog
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0ZU5hdmlnYXRpb25E
YXRhVHJhbnNmZXI6OkZsYWc+IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIFdlYlBhZ2VQcm94eUlk
ZW50aWZpZXIgd2ViUGFnZVByb3h5SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCkKLXsKLSAg
ICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmV0d29y
a1Byb2Nlc3MtPmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25J
RCwgZnJvbURvbWFpbiwgdG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQ
cm94eUlELCB3ZWJQYWdlSUQpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5z
V2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYm
IGRvbWFpbnMpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpTZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihkb21haW5zKSk7CkBAIC0yMzg3LDI3ICsy
MDA4LDI3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1ZGlibGVNZWRpYUEKIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29s
IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgaWYgKG1fdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KQorICAgIGlmIChzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0VCUFJPQ0VT
U1BPT0xfUkVMRUFTRV9MT0coU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3M6ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0Vf
TE9HX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiAKLSAgICBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwotICAgIHRlcm1pbmF0ZVNl
cnZpY2VXb3JrZXJzKCk7Ci0gICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBzX3Vz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxs
UHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycygpOwogfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogYm9vbCBXZWJQcm9jZXNz
UG9vbDo6aGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25z
dAogewotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10o
YXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoKSwgW10oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNT
ZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQog
CiBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5
Rm9yVGVzdGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yo
c2VydmljZVdvcmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJl
dHVybiBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5n
KCk7CiAgICAgfSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDYgQEAgT0JKQ19DTEFTUyBX
S1ByZWZlcmVuY2VPYnNlcnZlcjsKIAogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBBdXRvbWF0aW9u
Q2xpZW50OwotY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogY2xhc3MgRG93bmxv
YWRDbGllbnQ7CiBjbGFzcyBIVFRQQ29va2llU3RvcmU7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZUNs
aWVudDsKQEAgLTE3Niw3ICsxNzUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIaXN0b3J5Q2xp
ZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiYmKTsK
ICAgICB2b2lkIHNldERvd25sb2FkQ2xpZW50KFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50
PiYmKTsKICAgICB2b2lkIHNldEF1dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6
QXV0b21hdGlvbkNsaWVudD4mJik7Ci0gICAgdm9pZCBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50PiYmKTsKIAogICAgIHZvaWQgc2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVu
dGlmaWVyKGNvbnN0IFN0cmluZyYpOwogICAgIGNvbnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVu
dFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCkgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT5jdXN0
b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKTsgfQpAQCAtMTg3LDE3ICsxODUs
OSBAQCBwdWJsaWM6CiAgICAgLy8gbnVsbCBjaGVja3MgaW4gV2ViUGFnZVByb3h5LgogICAgIFdl
YlByb2Nlc3NQcm94eSogZHVtbXlQcm9jZXNzUHJveHkoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KSBjb25zdCB7IHJldHVybiBtX2R1bW15UHJvY2Vzc1Byb3hpZXMuZ2V0KHNlc3Npb25JRCkuZ2V0
KCk7IH0KIAotICAgIC8vIFdlYlByb2Nlc3Mgb3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3Jp
YXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9kZWwuIFRoZSBjb25uZWN0aW9uIG11c3QgYmUgbm9u
LW51bGwuCi0gICAgSVBDOjpDb25uZWN0aW9uKiBuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24o
KTsKLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzKGNv
bnN0IFQmIG1lc3NhZ2UpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxs
UHJvY2Vzc2VzRm9yU2Vzc2lvbihjb25zdCBUJiBtZXNzYWdlLCBQQUw6OlNlc3Npb25JRCk7CiAK
LSAgICAvLyBTZW5kcyB0aGUgbWVzc2FnZSB0byBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNz
IGFzIGFwcHJvcG9yaWF0ZSBmb3IgY3VycmVudCBwcm9jZXNzIG1vZGVsLgotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpOwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHZvaWQgc2VuZFN5bmNUb05ldHdv
cmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBVJiYgcmVwbHkpOwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHZvaWQgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5
KFQmJiBtZXNzYWdlKTsKLQogICAgIHZvaWQgcHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQ
cm9jZXNzUHJveHkqKTsKIAogICAgIFdlYlByb2Nlc3NDYWNoZSYgd2ViUHJvY2Vzc0NhY2hlKCkg
eyByZXR1cm4gbV93ZWJQcm9jZXNzQ2FjaGUuZ2V0KCk7IH0KQEAgLTIwNSw5ICsxOTUsNiBAQCBw
dWJsaWM6CiAgICAgLy8gRGlzY29ubmVjdCB0aGUgcHJvY2VzcyBmcm9tIHRoZSBjb250ZXh0Lgog
ICAgIHZvaWQgZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKLSAgICBXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmUqIHdlYnNpdGVEYXRhU3RvcmUoKSBjb25zdCB7IHJldHVybiBt
X3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFByaW1hcnlEYXRhU3RvcmUo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsgbV93ZWJzaXRlRGF0YVN0b3Jl
ID0gJmRhdGFTdG9yZTsgfQotCiAgICAgUmVmPFdlYlBhZ2VQcm94eT4gY3JlYXRlV2ViUGFnZShQ
YWdlQ2xpZW50JiwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogCiAgICAgdm9pZCBw
YWdlQmVnaW5Vc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2Vi
c2l0ZURhdGFTdG9yZSYpOwpAQCAtMjU4LDEwICsyNDUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
ZGRTdXBwb3J0ZWRQbHVnaW4oU3RyaW5nJiYgbWF0Y2hpbmdEb21haW4sIFN0cmluZyYmIG5hbWUs
IEhhc2hTZXQ8U3RyaW5nPiYmIG1pbWVUeXBlcywgSGFzaFNldDxTdHJpbmc+IGV4dGVuc2lvbnMp
OwogICAgIHZvaWQgY2xlYXJTdXBwb3J0ZWRQbHVnaW5zKCk7CiAKLSAgICBQcm9jZXNzSUQgbmV0
d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CiAgICAgUHJvY2Vzc0lEIHByZXdhcm1lZFByb2Nlc3NJ
ZGVudGlmaWVyKCk7CiAgICAgdm9pZCBhY3RpdmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JU
ZXN0aW5nKFByb2Nlc3NJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYm
KT4mJik7Ci0gICAgYm9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhj
b25zdCBTdHJpbmcmKTsKIAogICAgIFdlYlBhZ2VHcm91cCYgZGVmYXVsdFBhZ2VHcm91cCgpIHsg
cmV0dXJuIG1fZGVmYXVsdFBhZ2VHcm91cC5nZXQoKTsgfQogCkBAIC0zMDIsOCArMjg3LDYgQEAg
cHVibGljOgogICAgIEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlDbGll
bnQoKSB7IHJldHVybiAqbV9oaXN0b3J5Q2xpZW50OyB9CiAgICAgV2ViQ29udGV4dENsaWVudCYg
Y2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KIAotICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50JiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVy
biAqbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7IH0KLQogICAgIHN0cnVjdCBTdGF0aXN0
aWNzIHsKICAgICAgICAgdW5zaWduZWQgd2tWaWV3Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHdr
UGFnZUNvdW50OwpAQCAtMzE5LDEyICszMDIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKICAgICB2b2lkIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
KCk7CiAKLSAgICB2b2lkIGZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0KICAgICB2b2lkIHNldFNob3VsZE1ha2VOZXh0V2Vi
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRNYWtlTmV4
dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9CiAgICAgYm9vbCBzaG91
bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmc7IH0KLSAgICB2
b2lkIHNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhi
b29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JU
ZXN0aW5nID0gdmFsdWU7IH0KLSAgICBib29sIHNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkTWFrZU5leHROZXR3
b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nOyB9CiAKICAgICB2b2lkIHJlcG9ydFdlYkNv
bnRlbnRDUFVUaW1lKFNlY29uZHMgY3B1VGltZSwgdWludDY0X3QgYWN0aXZpdHlTdGF0ZSk7CiAK
QEAgLTM4MywxOSArMzYyLDEzIEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgLy8gTmV0d29yayBQ
cm9jZXNzIE1hbmFnZW1lbnQKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBlbnN1cmVOZXR3b3Jr
UHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSA9IG51bGxwdHIp
OwotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzKCkgY29uc3QgeyByZXR1
cm4gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKTsgfQogICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFz
aGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKTsKIAotICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6Okdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKLQogICAgIGJvb2wgaXNT
ZXJ2aWNlV29ya2VyUGFnZUlEKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIpIGNvbnN0OwogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLSAgICB2b2lkIGVzdGFibGlzaFdvcmtlckNvbnRleHRDb25u
ZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CisgICAgc3RhdGljIHZvaWQgZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25U
b05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmLCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
ICAgICB2b2lkIHJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKFdlYlByb2Nlc3NQcm94
eSYpOwotICAgIHNpemVfdCBzZXJ2aWNlV29ya2VyUHJveGllc0NvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbXB1dGVTaXplKCk7IH0KLSAgICB2b2lkIHNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihib29sIGFsbG93cykgeyBt
X2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlciA9IGFsbG93czsgfQotICAg
IGJvb2wgYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI7IH0KKyAgICBz
aXplX3Qgc2VydmljZVdvcmtlclByb3hpZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHNlcnZpY2VX
b3JrZXJQcm9jZXNzZXMoKS5jb21wdXRlU2l6ZSgpOyB9CiAgICAgdm9pZCB1cGRhdGVTZXJ2aWNl
V29ya2VyVXNlckFnZW50KGNvbnN0IFN0cmluZyYgdXNlckFnZW50KTsKICAgICBjb25zdCBPcHRp
b25hbDxVc2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyPiYgdXNlckNvbnRlbnRDb250cm9s
bGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkgY29uc3QgeyByZXR1cm4gbV91c2VyQ29u
dGVudENvbnRyb2xsZXJJREZvclNlcnZpY2VXb3JrZXI7IH0KICAgICBib29sIGhhc1NlcnZpY2VX
b3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3Q7CkBAIC00NDksOCArNDIy
LDYgQEAgcHVibGljOgogICAgIGJvb2wgYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gbV9hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHk7IH0KICAgICBi
b29sIHNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSBjb25zdCB7IHJldHVybiBtX3No
b3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb247IH0KIAotICAgIHZvaWQgc3ludGhlc2l6ZUFw
cElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpOwotICAgIAogI2lmIEVOQUJMRShHQU1FUEFE
KQogICAgIHZvaWQgZ2FtZXBhZENvbm5lY3RlZChjb25zdCBVSUdhbWVwYWQmLCBXZWJDb3JlOjpF
dmVudE1ha2VzR2FtZXBhZHNWaXNpYmxlKTsKICAgICB2b2lkIGdhbWVwYWREaXNjb25uZWN0ZWQo
Y29uc3QgVUlHYW1lcGFkJik7CkBAIC00ODgsNyArNDU5LDYgQEAgcHVibGljOgogICAgIHZvaWQg
Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKTsKIAogI2lmIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgdm9pZCBkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0
aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4mIGZyb21Eb21haW4sIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiB0b0Rv
bWFpbiwgT3B0aW9uU2V0PFdlYkNvcmU6OkNyb3NzU2l0ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6
OkZsYWc+LCBXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllcik7
CiAgICAgdm9pZCBzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluPiYmKTsKICAgICB2b2lkIHNlZWRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRm9yVGVzdGluZyhjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgZmlyc3RQYXJ0
eURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIHRoaXJkUGFydHlEb21h
aW4sIGJvb2wgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CiAgICAgdm9pZCBzZW5kUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFJbW1lZGlh
dGVseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwpAQCAtNTE1LDggKzQ4NSw4IEBAIHB1
YmxpYzoKICAgICAKICAgICBQbHVnSW5BdXRvU3RhcnRQcm92aWRlciYgcGx1Z0luQXV0b1N0YXJ0
UHJvdmlkZXIoKSB7IHJldHVybiBtX3BsdWdJbkF1dG9TdGFydFByb3ZpZGVyOyB9CiAKLSAgICB2
b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCk7Ci0gICAgYm9vbCB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV91c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOyB9CisgICAgc3RhdGljIHZvaWQgc2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKKyAgICBzdGF0aWMgYm9vbCB1c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkgeyByZXR1cm4gc191c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzOyB9CiAKICNpZiBFTkFCTEUoQ0ZQUkVGU19ESVJFQ1RfTU9ERSkKICAgICB2b2lk
IG5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZChjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IE9wdGlvbmFsPFN0cmluZz4mIGVuY29kZWRWYWx1ZSk7CkBAIC01Mjgs
OSArNDk4LDE1IEBAIHB1YmxpYzoKICAgICBpbnQzMl90IHVzZXJJZCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlcklkOyB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIE9TT2JqZWN0
UHRyPHhwY19vYmplY3RfdD4geHBjRW5kcG9pbnRNZXNzYWdlKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0cjx4cGNf
b2JqZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSk7CisgICAgc3RhdGljIHZvaWQgcGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsK
KyAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhh
bmRsZXJzKCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHN0YXRpYyBTdHJpbmcg
Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgcGFyZW50QnVuZGxl
RGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5
KCk7CisgICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGlyZWN0b3J5KCk7CisgICAg
c3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsKICNlbmRpZgogCiBw
cml2YXRlOgpAQCAtNTQ2LDggKzUyMiw2IEBAIHByaXZhdGU6CiAgICAgV2ViUHJvY2Vzc1Byb3h5
JiBjcmVhdGVOZXdXZWJQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9jZXNzUHJveHk6
OklzUHJld2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8pOwogICAgIHZv
aWQgaW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiwgV2Vic2l0ZURhdGFT
dG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6Oklz
UHJld2FybWVkOjpObyk7CiAKLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0KICAgICB2b2lkIGhhbmRs
ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29u
c3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5KTsKICAgICB2b2lkIGhhbmRsZVN5bmNocm9ub3VzTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBV
c2VyRGF0YSYgbWVzc2FnZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlckRhdGEmJik+
JiYpOwogCkBAIC01NzEsMTQgKzU0NSw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIHVzZXNTaW5n
bGVXZWJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT51c2VzU2luZ2xl
V2ViUHJvY2VzcygpOyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyBT
dHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgcGFyZW50
QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5nQ2FjaGVzRGly
ZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGlyZWN0b3J5KCk7
Ci0gICAgc3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsKLSNlbmRp
ZgotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCByZWdpc3Rlck5vdGlmaWNhdGlvbk9i
c2VydmVycygpOwogICAgIHZvaWQgdW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpOwpA
QCAtNjIwLDkgKzU4Niw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwg
V2Vha1B0cjxXZWJQcm9jZXNzUHJveHk+PiBtX2R1bW15UHJvY2Vzc1Byb3hpZXM7IC8vIExpZ2h0
d2VpZ2h0IFdlYlByb2Nlc3NQcm94eSBvYmplY3RzIHdpdGhvdXQgYmFja2luZyBwcm9jZXNzLgog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQ
cm94eT4gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzOworICAgIHN0YXRpYyBXZWFrSGFzaFNldDxX
ZWJQcm9jZXNzUHJveHk+JiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCk7CiAgICAgYm9vbCBtX3dh
aXRpbmdGb3JXb3JrZXJDb250ZXh0UHJvY2Vzc0Nvbm5lY3Rpb24geyBmYWxzZSB9OwotICAgIGJv
b2wgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIgeyBmYWxzZSB9Owog
ICAgIFN0cmluZyBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQ7CiAgICAgT3B0aW9uYWw8V2ViUHJl
ZmVyZW5jZXNTdG9yZT4gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXM7CiAgICAgT3B0aW9uYWw8
VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllcj4gbV91c2VyQ29udGVudENvbnRyb2xsZXJJ
REZvclNlcnZpY2VXb3JrZXI7CkBAIC02MzgsNyArNjAzLDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiBtX2F1dG9tYXRpb25DbGllbnQ7CiAg
ICAgVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+IG1fZG93bmxvYWRDbGllbnQ7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+IG1faGlzdG9y
eUNsaWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogCiAgICAgUmVmUHRyPFdlYkF1
dG9tYXRpb25TZXNzaW9uPiBtX2F1dG9tYXRpb25TZXNzaW9uOwogCkBAIC02NzAsOCArNjM0LDYg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQgeyBmYWxzZSB9Owog
ICAgIGRvdWJsZSBtX21lbW9yeVNhbXBsZXJJbnRlcnZhbCB7IDE0MDAuMCB9OwogCi0gICAgUmVm
UHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRlRGF0YVN0b3JlOwotCiAgICAg
dHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIqLCBSZWZQdHI8V2ViQ29udGV4dFN1cHBsZW1lbnQ+
LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4gV2ViQ29udGV4dFN1cHBsZW1lbnRNYXA7CiAgICAgV2Vi
Q29udGV4dFN1cHBsZW1lbnRNYXAgbV9zdXBwbGVtZW50czsKIApAQCAtNzAzLDggKzY2NSw2IEBA
IHByaXZhdGU6CiAKICAgICBib29sIG1fcHJvY2Vzc1Rlcm1pbmF0aW9uRW5hYmxlZCB7IHRydWUg
fTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQ
cm9jZXNzOwotCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPERpY3Rpb25hcnlDYWxsYmFj
az4+IG1fZGljdGlvbmFyeUNhbGxiYWNrczsKIAogICAgIGJvb2wgbV9tZW1vcnlDYWNoZURpc2Fi
bGVkIHsgZmFsc2UgfTsKQEAgLTcxMyw3ICs2NzMsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9h
bHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHk7CiAgICAgYm9vbCBtX3Nob3VsZFRha2VVSUJh
Y2tncm91bmRBc3NlcnRpb247CiAgICAgYm9vbCBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2hvdWxkTWFrZU5leHRO
ZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nIHsgZmFsc2UgfTsKICAgICBib29sIG1f
dGNjUHJlZmVyZW5jZUVuYWJsZWQgeyBmYWxzZSB9OwogCiAgICAgVXNlck9ic2VydmFibGVQYWdl
Q291bnRlciBtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXI7CkBAIC04MDUsMzIgKzc2NCwxNCBA
QCBwcml2YXRlOgogI2Vsc2UKICAgICBib29sIG1faXNEZWxheWVkV2ViUHJvY2Vzc0xhdW5jaERp
c2FibGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgbV91c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzIHsgZmFsc2UgfTsKKyAgICBzdGF0aWMgYm9vbCBzX3VzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3M7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQogICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IG1fZG9tYWluc1dpdGhV
c2VySW50ZXJhY3Rpb247CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIE9TT2Jq
ZWN0UHRyPHhwY19vYmplY3RfdD4gbV9lbmRwb2ludE1lc3NhZ2U7Ci0jZW5kaWYKIH07CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5n
UHJvY2VzcyhUJiYgbWVzc2FnZSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25l
dHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1
bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdl
KSwgMCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZW5kVG9BbGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSkKIHsKICAgICBzaXplX3QgcHJvY2Vz
c0NvdW50ID0gbV9wcm9jZXNzZXMuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgs
NiArMjY4LDkgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnNldFdlYnNpdGVEYXRhU3Rvcgogewog
ICAgIEFTU0VSVCghbV93ZWJzaXRlRGF0YVN0b3JlKTsKICAgICBtX3dlYnNpdGVEYXRhU3RvcmUg
PSAmZGF0YVN0b3JlOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGRhdGFTdG9yZS5zZW5kTmV0
d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcygqdGhpcyk7CisjZW5kaWYKICAgICB1
cGRhdGVSZWdpc3RyYXRpb25XaXRoRGF0YVN0b3JlKCk7CiAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UHJvY2Vzczo6U2V0V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMocHJvY2Vzc1Bvb2woKS53ZWJQ
cm9jZXNzRGF0YVN0b3JlUGFyYW1ldGVycygqdGhpcywgZGF0YVN0b3JlKSksIDApOwogfQpAQCAt
NzM4LDcgKzc0MSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXRQbHVnaW5Qcm9jZXNzQ28K
IAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihNZXNz
YWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5
ZWRSZXBseSYmIHJlcGx5KQogewotICAgIG1fcHJvY2Vzc1Bvb2wtPmdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUo
KS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKnRoaXMsIFdURk1vdmUocmVwbHkpKTsKIH0K
IAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKQEAgLTk1NSw5ICs5NTgsOCBAQCB2b2lkIFdlYlBy
b2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nCiAgICAgfQogCiAjaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgYXV0byBlbmRwb2ludE1lc3NhZ2UgPSBwcm9jZXNzUG9vbCgpLnhwY0VuZHBvaW50
TWVzc2FnZSgpOwotICAgIGlmIChlbmRwb2ludE1lc3NhZ2UpCi0gICAgICAgIHhwY19jb25uZWN0
aW9uX3NlbmRfbWVzc2FnZShjb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwgZW5kcG9pbnRN
ZXNzYWdlLmdldCgpKTsKKyAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQorICAgICAgICBtX3dl
YnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNz
KCp0aGlzKTsKICNlbmRpZgogCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fd2ViQ29ubmVjdGlvbik7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tp
ZVN0b3JlLmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDYg
QEAgbmFtZXNwYWNlIEFQSSB7CiBIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0Rh
dGFTdG9yZSh3ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUt
PnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3Jl
Ojp+SFRUUENvb2tpZVN0b3JlKCkKQEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+
SFRUUENvb2tpZVN0b3JlKCkKICAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAg
ICBBU1NFUlQoIW1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9j
b29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vz
c1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJB
cHBCb3VuZENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC04MSwzMyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZp
bHRlckFwcEJvdW5kQ29vawogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0g
ICAgICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGFsbENvb2tpZXM7Ci0gICAgICAgIGlmICht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSkKLSAgICAgICAgICAgIGFsbENvb2tpZXMgPSBnZXRBbGxEZWZhdWx0VUlQcm9j
ZXNzQ29va2llU3RvcmVDb29raWVzKCk7Ci0gICAgICAgIGFsbENvb2tpZXMuYXBwZW5kVmVjdG9y
KG1fb3duaW5nRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLQotICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgYWxsQ29va2ll
c10gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoYWxsQ29v
a2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICB9KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmdldEFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwb29sID0gV1RGTW92ZShwb29sKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBjb29raWVNYW5h
Z2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigp
OworICAgIGNvb2tpZU1hbmFnZXIuZ2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5k
Q29va2llcyhjb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9
CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjo6VVJMJiYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkKLSAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0KLSAgICBhdXRvKiBjb29raWVN
YW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2Vy
ID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwor
ICAgIGNvb2tpZU1hbmFnZXIuZ2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIHVybCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiYgY29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2ll
cyhjb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC0x
MTUsNzggKzk0LDI5IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjoK
IHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgYXBwQm91bmRDb29raWVzKSBtdXRhYmxlIHsKLSAg
ICAgICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tp
ZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgICAgIGlmICghcG9vbCkgewotICAgICAgICAgICAg
Zm9yIChhdXRvJiBjb29raWUgOiBhcHBCb3VuZENvb2tpZXMpIHsKLSAgICAgICAgICAgICAgICAv
LyBGSVhNRTogcGVuZGluZ0Nvb2tpZXMgdXNlZCBmb3IgZGVmYXVsdFNlc3Npb24gYmVjYXVzZSBz
ZXNzaW9uIGNvb2tpZXMgY2Fubm90IGJlIHByb3BhZ2F0ZWQgdG8gTmV0d29yayBQcm9jZXNzIHdp
dGggdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuCi0gICAgICAgICAgICAgICAgaWYg
KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgICAgICAgICAgc2V0
Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5hZGRQZW5k
aW5nQ29va2llKGNvb2tpZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9v
bC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAg
Y29va2llTWFuYWdlci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IGFwcEJvdW5kQ29va2llcywgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOworICAgICAgICBhdXRvJiBjb29raWVN
YW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdl
cigpOworICAgICAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCBhcHBCb3VuZENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZShjb25z
dCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+
cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkg
ewotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAg
ICAgZGVsZXRlQ29va2llRnJvbURlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+cmVtb3ZlUGVuZGlu
Z0Nvb2tpZShjb29raWUpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7
Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgW3Bv
b2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAg
IH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29y
a1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29r
aWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tp
ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9y
YWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5n
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAgZGVsZXRl
Q29va2llc0luRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVu
dDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5k
ZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgYXV0
byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNv
b2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUFsbENvb2tpZXMobV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKICAgICAvLyBGSVhNRTogVGhlIENvbXBsZXRpb25I
YW5kbGVyIHNob3VsZCBiZSBwYXNzZWQgdG8gV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVB
bGxDb29raWVzLgogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9v
bCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRp
b25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBzZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUocG9saWN5KTsKLSAgICAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5z
dXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1h
bmFnZXItPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9
KTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQ
cm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1
c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTIyNywyMSArMTU3LDcgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2
ZXIoTwogCiAgICAgbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA9IG1ha2VVbmlxdWU8QVBJ
V2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI+KCp0aGlzKTsKIAotICAgIGF1dG8qIHBvb2wg
PSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9u
cygpOwotCi0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIEFTU0VSVCghbV9vYnNlcnZpbmdVSVBy
b2Nlc3NDb29raWVzKTsKLQotICAgICAgICAvLyBMaXN0ZW4gZm9yIGNvb2tpZSBub3RpZmljYXRp
b25zIGluIHRoZSBVSVByb2Nlc3MgaW4gdGhlIG1lYW50aW1lLgotICAgICAgICBzdGFydE9ic2Vy
dmluZ0NoYW5nZXNUb0RlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShbdGhpc10gKCkgewotICAg
ICAgICAgICAgY29va2llc0RpZENoYW5nZSgpOwotICAgICAgICB9KTsKLQotICAgICAgICBtX29i
c2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eSA9ICZtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5h
Z2VyKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZl
cihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9i
c2VydmVyKTsKIH0KIApAQCAtMjc2LDQ2ICsxOTIsMTAgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6
OmNvb2tpZXNEaWRDaGFuZ2UoKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJE
ZXN0cm95ZWQoKQogewogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnVucmVnaXN0
ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFn
ZXJQcm94eU9ic2VydmVyKTsKLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbnVs
bHB0cjsKLQotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xG
b3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gcG9vbC0+c3VwcGxl
bWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNv
b2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rl
ck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdl
clByb3h5T2JzZXJ2ZXIpOwogfQogCi12b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JO
ZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIEFTU0VSVCghbV9wcm9jZXNzUG9v
bENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlv
bkxpc3RlbmVySWRlbnRpZmllciA9IFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclByb2Nlc3NQb29s
Q3JlYXRpb25MaXN0ZW5lcihbdGhpc10oV2ViUHJvY2Vzc1Bvb2wmIG5ld1Byb2Nlc3NQb29sKSB7
Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPmlzQXNzb2NpYXRlZFByb2Nlc3NQb29s
KG5ld1Byb2Nlc3NQb29sKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBOb3cg
dGhhdCBhbiBhc3NvY2lhdGVkIHByb2Nlc3MgcG9vbCBleGlzdHMsIHdlIG5lZWQgdG8gZmx1c2gg
dGhlIFVJIHByb2Nlc3MgY29va2llIHN0b3JlCi0gICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBhbnkg
Y2hhbmdlcyBhcmUgcmVmbGVjdGVkIHdpdGhpbiB0aGUgbmV3IHByb2Nlc3MgcG9vbC4KLSAgICAg
ICAgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgbmV3UHJvY2Vz
c1Bvb2wuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQotICAgICAgICBpZiAobV9jb29raWVNYW5h
Z2VyUHJveHlPYnNlcnZlcikgewotICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQ
cm94eSA9IG5ld1Byb2Nlc3NQb29sLnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7Ci0gICAgICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdp
c3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFu
YWdlclByb3h5T2JzZXJ2ZXIpOwotICAgICAgICB9Ci0gICAgICAgIHVucmVnaXN0ZXJGb3JOZXdQ
cm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBIVFRQQ29va2ll
U3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAg
IGlmIChtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpCi0gICAgICAgIFdl
YlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKG1fcHJv
Y2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29s
Q3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSAwOwotfQotCiAjaWYgIVBMQVRGT1JNKENPQ09B
KQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
KCkgeyB9CiBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBIVFRQQ29va2llU3RvcmU6OmdldEFsbERl
ZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKSB7IHJldHVybiB7IH07IH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgJ
KHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQ
Q29va2llU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtODMsOSArODMsNiBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmKTsK
IAotICAgIHZvaWQgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAg
ICB2b2lkIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLQogICAg
IHZvaWQgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKICAgICBzdGF0aWMgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29v
a2llcygpOwogICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZUluRGVmYXVsdFVJUHJvY2Vzc0Nvb2tp
ZVN0b3JlKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MTEsMTEgKzQxMSw2IEBAIHZvaWQgV0tDb250ZXh0UHJlY29ubmVjdFRvU2VydmVyKFdLQ29udGUK
IHsKIH0KIAotV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0
Ojp0b0ltcGwoY29udGV4dFJlZiktPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCkpOwotfQotCiBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0
ZURhdGFTdG9yZShXS0NvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdLV2Vic2l0ZURhdGFTdG9y
ZUdldERlZmF1bHREYXRhU3RvcmUoKTsKQEAgLTUyNywxMyArNTIyLDYgQEAgdm9pZCBXS0NvbnRl
eHRTZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlYwogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRS
ZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChlbmFibGUpOwog
fQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdv
cmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgYWxsb3dzKQotewotI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+c2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0K
LQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNo
ZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEko
JldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMo
KS5sZWFrUmVmKCkpOwpAQCAtNTc1LDIxICs1NjMsMTEgQEAgdm9pZCBXS0NvbnRleHRTZXRGb250
QWxsb3dMaXN0KFdLQ29udGV4dAogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRG
b250QWxsb3dMaXN0KFdlYktpdDo6dG9JbXBsKGFycmF5UmVmKSk7CiB9CiAKLXZvaWQgV0tDb250
ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAg
V2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0K
IHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmIGNvbnRl
eHQpCiB7CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZVNlcnZpY2VXb3Jr
ZXJzKCk7CiB9CiAKLVByb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9JbXBs
KGNvbnRleHRSZWYpLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKLX0KLQogdm9pZCBXS0Nv
bnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4oV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5n
UmVmIGRvbWFpblJlZiwgV0tTdHJpbmdSZWYgbmFtZVJlZiwgV0tBcnJheVJlZiBtaW1lVHlwZXNS
ZWYsIFdLQXJyYXlSZWYgZXh0ZW5zaW9uc1JlZikKIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKQEAgLTYxOSwxMiArNTk3LDExIEBAIHZvaWQgV0tDb250ZXh0Q2xlYXJDdXJyZW50
TW9kaWZpZXJTdGF0ZUYKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+Y2xlYXJDdXJy
ZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBib29s
IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCit2b2lkIFdLQ29udGV4dFNldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoV0tDb250ZXh0UmVmLCBib29sIHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZikt
PnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2Vzcyk7CisgICAgV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIH0K
IAotdm9pZCBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYg
Y29udGV4dFJlZiwgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3RvcmUpCit2b2lk
IFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiwgV0tXZWJz
aXRlRGF0YVN0b3JlUmVmKQogewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRQ
cmltYXJ5RGF0YVN0b3JlKCpXZWJLaXQ6OnRvSW1wbCh3ZWJzaXRlRGF0YVN0b3JlKSk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaAkocmV2aXNpb24g
MjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNiBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRT
dG9wTWVtb3J5U2FtcGxlCiBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4
dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJF
Q0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0
b3JlKTsKIAogV0tfRVhQT1JUIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0
R2V0QXBwbGljYXRpb25DYWNoZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJ
X0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0
RGF0YVN0b3JlKTsKLVdLX0VYUE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29v
a2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdL
X0VYUE9SVCBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1h
bmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVm
IFdLQ29udGV4dEdldEljb25EYXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBP
UlQgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFn
ZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9S
RVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgJ
KHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29u
dGV4dFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtODMsMTEgKzgzLDggQEAgV0tfRVhQT1JU
IHZvaWQgV0tDb250ZXh0V2FybUluaXRpYWxQcm9jZQogLy8gQXQgc29tZSBwb2ludCBpdCBzaG91
bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJv
Y2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRUZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250
ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmKTsKIAotV0tfRVhQT1JUIHZv
aWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVz
dGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0eXBlZGVmIHZvaWQgKCpXS0NvbnRleHRJbnZh
bGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSk7CiBXS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKFdLQ29udGV4dEludmFsaWRN
ZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VGdW5jdGlvbik7CiAgICAgCkBAIC05Nyw4ICs5
NCw2IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEZvbnRBbGxvd0xpc3QKIAogV0tfRVhQ
T1JUIHZvaWQgV0tDb250ZXh0UHJlY29ubmVjdFRvU2VydmVyKFdLQ29udGV4dFJlZiBjb250ZXh0
LCBXS1VSTFJlZiBzZXJ2ZXJVUkwpIFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiAKLVdLX0VYUE9SVCBX
S1Byb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tDb250ZXh0
UmVmIGNvbnRleHQpOwotCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVn
aW4oV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLU3RyaW5nUmVmIGRvbWFpbiwgV0tTdHJpbmdSZWYg
bmFtZSwgV0tBcnJheVJlZiBtaW1lVHlwZXMsIFdLQXJyYXlSZWYgZXh0ZW5zaW9ucyk7CiBXS19F
WFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhclN1cHBvcnRlZFBsdWdpbnMoV0tDb250ZXh0UmVmIGNv
bnRleHQpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJ
KHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCw2ICszOTgsMTEgQEAgdWludDY0X3QgV0tQYWdl
R2V0UmVuZGVyVHJlZVNpemUoV0tQYWdlUgogICAgIHJldHVybiB0b0ltcGwocGFnZSktPnJlbmRl
clRyZWVTaXplKCk7CiB9CiAKK1dLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1BhZ2VHZXRXZWJzaXRl
RGF0YVN0b3JlKFdLUGFnZVJlZiBwYWdlKQoreworICAgIHJldHVybiB0b0FQSSgmdG9JbXBsKHBh
Z2UpLT53ZWJzaXRlRGF0YVN0b3JlKCkpOworfQorCiBXS0luc3BlY3RvclJlZiBXS1BhZ2VHZXRJ
bnNwZWN0b3IoV0tQYWdlUmVmIHBhZ2VSZWYpCiB7CiAgICAgcmV0dXJuIHRvQVBJKHRvSW1wbChw
YWdlUmVmKS0+aW5zcGVjdG9yKCkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tQYWdlLmgJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDggQEAgV0tfRVhQT1JU
IGRvdWJsZSBXS1BhZ2VHZXRFc3RpbWF0ZWRQcm9ncgogCiBXS19FWFBPUlQgdWludDY0X3QgV0tQ
YWdlR2V0UmVuZGVyVHJlZVNpemUoV0tQYWdlUmVmIHBhZ2UpOwogCitXS19FWFBPUlQgV0tXZWJz
aXRlRGF0YVN0b3JlUmVmIFdLUGFnZUdldFdlYnNpdGVEYXRhU3RvcmUoV0tQYWdlUmVmIHBhZ2Up
OworCiBXS19FWFBPUlQgV0tJbnNwZWN0b3JSZWYgV0tQYWdlR2V0SW5zcGVjdG9yKFdLUGFnZVJl
ZiBwYWdlKTsKIAogV0tfRVhQT1JUIFdLU3RyaW5nUmVmIFdLUGFnZUNvcHlVc2VyQWdlbnQoV0tQ
YWdlUmVmIHBhZ2UpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJBUElBcnJheS5oIgog
I2luY2x1ZGUgIkFQSUhUVFBDb29raWVTdG9yZS5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNz
UHJveHkuaCIKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNs
dWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0RpY3Rpb25hcnkuaCIKQEAgLTY5LDYgKzcw
LDE2IEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1dlYnNpdGVEYXRhU3RvcmUKICAgICByZXR1
cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoKldlYktp
dDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLCBzZXNzaW9uSUQpLmxlYWtSZWYoKSk7CiB9CiAKK3Zv
aWQgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0
YVN0b3JlUmVmIGRhdGFTdG9yZSkKK3sKKyAgICBXZWJLaXQ6OnRvSW1wbChkYXRhU3RvcmUpLT50
ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworfQorCitXS1Byb2Nlc3NJRCBXS1dlYnNpdGVEYXRh
U3RvcmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRh
dGFTdG9yZSkKK3sKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoZGF0YVN0b3JlKS0+bmV0d29y
a1Byb2Nlc3MoKS5wcm9jZXNzSWRlbnRpZmllcigpOworfQorCiB2b2lkIFdLV2Vic2l0ZURhdGFT
dG9yZVJlbW92ZUlUUERhdGFGb3JEb21haW4oV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9y
ZVJlZiwgV0tTdHJpbmdSZWYgaG9zdCwgdm9pZCogY29udGV4dCwgV0tXZWJzaXRlRGF0YVN0b3Jl
UmVtb3ZlSVRQRGF0YUZvckRvbWFpbkZ1bmN0aW9uIGNhbGxiYWNrKQogewogI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAkocmV2aXNpb24gMjY3NTM2
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVm
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDEzIEBACiAjaW5jbHVkZSA8V2ViS2l0L1dL
QmFzZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS0RlcHJlY2F0ZWQuaD4KIAorI2lmIGRlZmluZWQo
V0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyKQordHlwZWRlZiBpbnQgV0tQcm9jZXNzSUQ7CisjZWxz
ZQorI2luY2x1ZGUgPHVuaXN0ZC5oPgordHlwZWRlZiBwaWRfdCBXS1Byb2Nlc3NJRDsKKyNlbmRp
ZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCkBAIC01MCw2ICs1
NywxMSBAQCBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRBbGxvCiAKIFdLX0VY
UE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tXZWJz
aXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZik7CiAKK1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0
ZURhdGFTdG9yZUNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRh
dGFTdG9yZSk7CitXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3
b3JrUHJvY2VzcyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKKworV0tfRVhQT1JU
IFdLUHJvY2Vzc0lEIFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmll
cihXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKKwogV0tfRVhQT1JUIGJvb2wgV0tX
ZWJzaXRlRGF0YVN0b3JlR2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJzaXRl
RGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZik7CiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRh
U3RvcmVTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChXS1dlYnNpdGVEYXRhU3RvcmVS
ZWYgZGF0YVN0b3JlUmVmLCBib29sIGVuYWJsZSk7CiB0eXBlZGVmIHZvaWQgKCpXS1dlYnNpdGVE
YXRhU3RvcmVTdGF0aXN0aWNzRXBoZW1lcmFsRnVuY3Rpb24pKGJvb2wgaXNFcGhlbWVyYWwsIHZv
aWQqIGZ1bmN0aW9uQ29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTQwNiwyOCArNDA2LDYgQEAgLSAodm9pZClfY2xlYXJTdXBwb3J0ZWRQbHVnaW5z
CiAgICAgX3Byb2Nlc3NQb29sLT5jbGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKIH0KIAotLSAodm9p
ZClfdGVybWluYXRlTmV0d29ya1Byb2Nlc3MKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0KLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxT
dXNwZW5kSW1taW5lbnRseQotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOwotfQotCi0tICh2b2lkKV9zZW5kTmV0
d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5k
bGVyCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNw
ZW5kRm9yVGVzdGluZyhbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlv
bkhhbmRsZXIpXSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7Ci19Ci0K
LS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQotewotICAgIF9wcm9jZXNzUG9v
bC0+c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7Ci19Ci0KIC0gKHZvaWQpX3Rlcm1pbmF0
ZVNlcnZpY2VXb3JrZXJzCiB7CiAgICAgX3Byb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycygpOwpAQCAtNDM1LDEyICs0MTMsNyBAQCAtICh2b2lkKV90ZXJtaW5hdGVTZXJ2aWNlV29y
a2VycwogCiAtICh2b2lkKV9zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOihCT09M
KXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MKIHsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNl
dFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyk7Ci19Ci0KLS0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIKLXsKLSAg
ICByZXR1cm4gX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKKyAgICBX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCiAtIChwaWRfdClfcHJld2Fy
bWVkUHJvY2Vzc0lkZW50aWZpZXIKQEAgLTQ2NywxMSArNDQwLDYgQEAgLSAodm9pZClfbWFrZU5l
eHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvcgogICAgIF9wcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFr
ZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcodHJ1ZSk7CiB9CiAKLS0gKHZvaWQp
X21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZwotewotICAgIF9wcm9j
ZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0
aW5nKHRydWUpOwotfQotCiAtIChCT09MKV9oYXNQcmV3YXJtZWRXZWJQcm9jZXNzCiB7CiAgICAg
Zm9yIChhdXRvJiBwcm9jZXNzIDogX3Byb2Nlc3NQb29sLT5wcm9jZXNzZXMoKSkgewpAQCAtNTYw
LDE4ICs1MjgsNiBAQCAtICh2b2lkKV9zZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hCiAg
ICAgX3Byb2Nlc3NQb29sLT5zZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZChlbmFi
bGVkKTsKIH0KIAotLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNr
Z3JvdW5kCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJh
Y2tncm91bmQpOwotfQotCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNl
cnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzCi17Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQot
ICAgIF9wcm9jZXNzUG9vbC0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAtIChp
ZCA8X1dLR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRlcj4pX2NvcmVMb2NhdGlvblByb3Zp
ZGVyCiB7CkBAIC02MDQsMTEgKzU2MCw2IEBAIC0gKHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2lu
c0luV2ViUHJvY2UKICAgICB9KTsKIH0KIAotLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQKLXsKLSAgICByZXR1cm4g
X3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhlbnRp
dGxlbWVudCk7Ci19Ci0KIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90
ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVjdGlvblNwYWNlCiB7CiAg
ICAgX3Byb2Nlc3NQb29sLT5jbGVhclBlcm1hbmVudENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNw
YWNlKFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZShwcm90ZWN0aW9uU3BhY2UpKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQ
b29sUHJpdmF0ZS5oCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtODcs
MTQgKzg3LDkgQEAKIC0gKF9XS0Rvd25sb2FkICopX3Jlc3VtZURvd25sb2FkRnJvbURhdGE6KE5T
RGF0YSAqKXJlc3VtZURhdGEgd2Vic2l0ZURhdGFTdG9yZTooV0tXZWJzaXRlRGF0YVN0b3JlICop
ZGF0YVN0b3JlICBwYXRoOihOU1N0cmluZyAqKXBhdGggb3JpZ2luYXRpbmdXZWJWaWV3OihXS1dl
YlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4gU2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoaWxl
IG5vIHdlYiBjb250ZW50IHByb2Nlc3NlcyBhcmUgcnVubmluZy4KLS0gKHZvaWQpX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkp
OwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwot
LSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9pZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4wKSk7CiAKIC8vIFRlc3Qgb25s
eS4KLS0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMyksIGlvcygxMS4wKSk7CiAtIChwaWRfdClfcHJld2FybWVkUHJvY2Vzc0lkZW50
aWZpZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIC8vIFRl
c3Qgb25seS4KQEAgLTEwNiw3ICsxMDEsNiBAQAogLSAoc2l6ZV90KV9zZXJ2aWNlV29ya2VyUHJv
Y2Vzc0NvdW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogLSAo
dm9pZClfc3luY05ldHdvcmtQcm9jZXNzQ29va2llcyBXS19BUElfREVQUkVDQVRFRF9XSVRIX1JF
UExBQ0VNRU5UKCJXS0hUVFBDb29raWVTdG9yZS5fZmx1c2hDb29raWVzVG9EaXNrV2l0aENvbXBs
ZXRpb25IYW5kbGVyOiIsIG1hY29zKDEwLjEzLCBXS19NQUNfVEJBKSwgaW9zKDExLjAsIFdLX0lP
U19UQkEpKTsKIC0gKHZvaWQpX21ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwotLSAodm9pZClfbWFr
ZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogLSAoTlNVSW50ZWdlcilfbWF4aW11bVN1c3BlbmRl
ZFBhZ2VDb3VudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwog
LSAoTlNVSW50ZWdlcilfcHJvY2Vzc0NhY2hlQ2FwYWNpdHkgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKE5TVUludGVnZXIpX3Byb2Nlc3NDYWNoZVNpemUg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CkBAIC0xMjIsMTMgKzEx
NiwxMCBAQAogLSAodm9pZClfcHJlY29ubmVjdFRvU2VydmVyOihOU1VSTCAqKXNlcnZlclVSTCBX
S19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKCJXS1dlYlZpZXcuX3ByZWNvbm5lY3RU
b1NlcnZlciIsIG1hY29zKDEwLjEzLjQsIFdLX01BQ19UQkEpLCBpb3MoMTEuMywgV0tfSU9TX1RC
QSkpOwogCiAvLyBUZXN0IG9ubHkuCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTMuNCksIGlvcygxMS4zKSk7CiAtICh2b2lkKV9nZXRBY3RpdmVQYWdlc09yaWdpbnNJbldlYlBy
b2Nlc3NGb3JUZXN0aW5nOihwaWRfdClwaWQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNB
cnJheTxOU1N0cmluZyAqPiAqKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwotLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50Q3Jl
ZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVj
dGlvblNwYWNlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogCiBA
cHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0Nvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdF
bmFibGVkLCBzZXR0ZXI9X3NldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkOikgQk9P
TCBfY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQgV0tfQVBJX0RFUFJFQ0FURUQoIlBh
cnRpdGlvbmVkIGNvb2tpZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQiLCBtYWNvcygxMC4xMi4z
LCAxMC4xNC40KSwgaW9zKDEwLjMsIDEyLjIpKTsKLS0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwg
aW9zKDEzLjApKTsKIAogLy8gVGVzdCBvbmx5LgogLSAodm9pZClfc2VlZFJlc291cmNlTG9hZFN0
YXRpc3RpY3NGb3JUZXN0aW5nV2l0aEZpcnN0UGFydHk6KE5TVVJMICopZmlyc3RQYXJ0eVVSTCB0
aGlyZFBhcnR5OihOU1VSTCAqKXRoaXJkUGFydHlVUkwgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRp
b246KEJPT0wpc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24gY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0JKHJldmlzaW9u
IDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVE
YXRhU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTYxNyw2ICs2MTcsMTEgQEAgLSAodm9pZClf
cmVuYW1lT3JpZ2luOihOU1VSTCAqKW9sZE5hbWUgdAogICAgIH0pOwogfQogCistIChCT09MKV9u
ZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxl
bWVudAoreworICAgIHJldHVybiBfd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNF
bnRpdGxlbWVudEZvclRlc3RpbmcoZW50aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0
ZURhdGFTdG9yZURlbGVnYXRlPilfZGVsZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdl
dCgpLmdldCgpOwpAQCAtNjY4LDQgKzY3Myw0MiBAQCAtICh2b2lkKV9hcHBCb3VuZFNjaGVtZXM6
KHZvaWQgKF4pKE5TQXJyCiAjZW5kaWYKIH0KIAorLSAodm9pZClfdGVybWluYXRlTmV0d29ya1By
b2Nlc3MKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3Mo
KTsKK30KKworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9p
ZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5z
ZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhbY29tcGxldGlvbkhh
bmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseQoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7CisKK30KKworLSAo
dm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lCit7CisgICAgX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOworfQorCistICh2b2lkKV9zeW50aGVz
aXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQKK3sKKyAgICBfd2Vic2l0ZURhdGFT
dG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91
bmQpOworfQorCistIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCit7CisgICAgcmV0
dXJuIF93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnByb2Nlc3NJZGVudGlmaWVy
KCk7Cit9CisKKysgKHZvaWQpX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZworeworICAgIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bWFrZU5leHROZXR3b3JrUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCk7Cit9CisKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFT
dG9yZVByaXZhdGUuaAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtODUsOSArODUsMTkgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dlYnNp
dAogCiAtICh2b2lkKV9yZW5hbWVPcmlnaW46KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKilu
ZXdOYW1lIGZvckRhdGFPZlR5cGVzOihOU1NldDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJP
T0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVu
dGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CisKIEBwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dl
YnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2RlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTUpLCBpb3MoMTMuMCkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5
KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0g
KHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQ
cmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9z
ZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3Jr
UHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3Mo
V0tfSU9TX1RCQSkpOworLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCli
YWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CistIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisrICh2b2lkKV9tYWtlTmV4
dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwogQGVuZAogCiBOU19BU1NVTUVfTk9O
TlVMTF9FTkQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIldlYktpdENvb2tpZU1hbmFnZXIuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJv
eHkuaCIKICNpbmNsdWRlICJTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlLmgiCiAjaW5j
bHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFu
YWdlclByaXZhdGUuaCIKQEAgLTU2LDYgKzU3LDEyIEBAIGVudW0gewogfTsKIAogc3RydWN0IF9X
ZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBj
b29raWVNYW5hZ2VyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChkYXRhTWFuYWdlcik7
CisgICAgICAgIHJldHVybiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoZGF0
YU1hbmFnZXIpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIH0KKwogICAg
IFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
ZGF0YU1hbmFnZXIpOwpAQCAtNjQsOCArNzEsNyBAQCBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFn
ZXJQcml2YXRlIHsKIAogICAgIH5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUoKQogICAgIHsK
LSAgICAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldFByb2Nlc3NQb29scyhkYXRhTWFuYWdlcikpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+
c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2Fs
bGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOworICAgICAgICBjb29raWVNYW5hZ2VyKCkuc2V0
Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CiAgICAgfQogCiAg
ICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuYWdlcjsKQEAgLTEzOSwxMSArMTQ1
LDkgQEAgV2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0Q29va2llTWFuYWdlcgogewogICAgIFdl
YktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdl
ci0+cHJpdi0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nl
c3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXIt
PnByaXYtPmRhdGFNYW5hZ2VyKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9l
bWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9Cisg
ICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJh
Y2sobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2ln
bmFsX2VtaXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0
dXJuIG1hbmFnZXI7CiB9CiAKQEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVf
bWFuYWdlcl9zZXRfcGVyc2lzdGVuCiAgICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2Vy
KSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5
PigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVU
RjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkp
OworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE5Miw4ICsx
OTUsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvCiB7CiAgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlcikpOwogCi0g
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFBy
b2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0
UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5h
Z2VyKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQo
KSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKIH0KIAogLyoq
CkBAIC0yMTcsMTQgKzIxOSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2Nl
cHRfcG8KIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyht
YW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7CiAKLSAgICAvLyBUaGUg
cG9saWN5IGlzIHRoZSBzYW1lIGluIGFsbCBwcm9jZXNzIHBvb2xzIGhhdmluZyB0aGUgc2FtZSBz
ZXNzaW9uIElELCBzbyBqdXN0IGFzayBhbnkuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xz
ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKTsKLSAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkgewotICAgICAg
ICBnX3Rhc2tfcmV0dXJuX2ludCh0YXNrLmdldCgpLCBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NF
UFRfTk9fVEhJUkRfUEFSVFkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcHJvY2Vz
c1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZN
b3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgeworICAg
IG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNv
cmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CiAgICAgICAgIGdfdGFza19yZXR1
cm5faW50KHRhc2suZ2V0KCksIHRvV2ViS2l0Q29va2llQWNjZXB0UG9saWN5KHBvbGljeSkpOwog
ICAgIH0pOwogfQpAQCAtMjY5LDExICsyNjQsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9hZGRfY29va2llKFdlCiAgICAgZ19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAgICAgR1Jl
ZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxh
YmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3Jp
dHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MK
LSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0
aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRh
TWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKS0+c2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgeyBXZWJD
b3JlOjpDb29raWUoY29va2llKSB9LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIG1h
bmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNl
c3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0
YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVF
KTsKICAgICB9KTsKIH0KQEAgLTMyMCwxMSArMzExLDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21h
bmFnZXJfZ2V0X2Nvb2tpZXMoVwogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAogICAgIEdS
ZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxs
YWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dy
aXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNz
Ci0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2Ug
dGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3
ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0
YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5h
Z2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVSTChV
UkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25z
dCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIG1hbmFnZXItPnByaXYt
PmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBV
UkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0o
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAgR0xpc3Qq
IGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBjb29r
aWVzKQogICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29raWVzTGlz
dCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzY1LDcgQEAgdm9pZCB3ZWJr
aXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZQogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29v
a2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyht
YW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29r
aWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24g
ZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJv
bSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBw
cm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFu
YWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmRlbGV0ZUNvb2tpZShtYW5hZ2VyLT5wcml2LT5z
ZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RGTW92ZSh0YXNr
KV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLmRlbGV0ZUNvb2tpZSht
YW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNr
ID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNr
LmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCShyZXZpc2lvbiAyNjc1
MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAyLDcgKzQwMiw2IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dFdlYkNvbnRleHRDb25zdHJ1Y3RlZCgKICAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2Vy
ID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcoImxvY2FsLXN0b3Jh
Z2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEoKSwgbnVsbHB0
cikpOwogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKGNv
bmZpZ3VyYXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRQcmltYXJ5RGF0YVN0b3Jl
KHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJzaXRlRGF0YU1h
bmFnZXIuZ2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1lc3NhZ2VIYW5k
bGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgLy8g
U2luayB0aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRyPFdlYktpdFVzZXJNZXNzYWdl
PiB1c2VyTWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRlKFdURk1vdmUobWVzc2FnZSks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTQxMCw4ICs0MDksNiBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoCiAgICAgICAgIGdfc2lnbmFsX2VtaXQo
d2ViQ29udGV4dCwgc2lnbmFsc1tVU0VSX01FU1NBR0VfUkVDRUlWRURdLCAwLCB1c2VyTWVzc2Fn
ZS5nZXQoKSwgJnJldHVyblZhbHVlKTsKICAgICB9KTsKIAotICAgIHdlYmtpdFdlYnNpdGVEYXRh
TWFuYWdlckFkZFByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwgKnBy
aXYtPnByb2Nlc3NQb29sKTsKLQogICAgIHByaXYtPnByb2Nlc3NNb2RlbCA9IFdFQktJVF9QUk9D
RVNTX01PREVMX01VTFRJUExFX1NFQ09OREFSWV9QUk9DRVNTRVM7CiAKICNpZiBFTkFCTEUoTUVN
T1JZX1NBTVBMRVIpCkBAIC00MzksMTEgKzQzNiw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNv
bnRleHREaXNwb3NlKEdPYmoKICAgICAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldERvd25sb2Fk
Q2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSk7CiAgICAgfQogCi0g
ICAgaWYgKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlcikgewotICAgICAgICB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJSZW1vdmVQcm9jZXNzUG9vbChwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0
KCksICpwcml2LT5wcm9jZXNzUG9vbCk7Ci0gICAgICAgIHByaXYtPndlYnNpdGVEYXRhTWFuYWdl
ciA9IG51bGxwdHI7Ci0gICAgfQotCiAgICAgaWYgKHByaXYtPmZhdmljb25EYXRhYmFzZSkgewog
ICAgICAgICB3ZWJraXRGYXZpY29uRGF0YWJhc2VDbG9zZShwcml2LT5mYXZpY29uRGF0YWJhc2Uu
Z2V0KCkpOwogICAgICAgICBwcml2LT5mYXZpY29uRGF0YWJhc2UgPSBudWxscHRyOwpAQCAtMTU4
MSw4ICsxNTczLDggQEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfcHJlZmV0Y2hfZG5zKFdlYgog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpKTsKICAg
ICBnX3JldHVybl9pZl9mYWlsKGhvc3RuYW1lKTsKIAotICAgIGlmIChjb250ZXh0LT5wcml2LT5k
bnNQcmVmZXRjaGVkSG9zdHMuYWRkKGhvc3RuYW1lKS5pc05ld0VudHJ5KQotICAgICAgICBjb250
ZXh0LT5wcml2LT5wcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpQcmVmZXRjaEROUyhTdHJpbmc6OmZyb21VVEY4KGhvc3RuYW1lKSkp
OworICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXREYXRhU3RvcmUoY29udGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKKyAg
ICB3ZWJzaXRlRGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlByZWZldGNoRE5TKFN0cmluZzo6ZnJvbVVURjgoaG9zdG5hbWUpKSwgMCk7CiAg
ICAgY29udGV4dC0+cHJpdi0+ZG5zUHJlZmV0Y2hIeXN0ZXJlcmlzLmltcHVsc2UoKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vi
Vmlldy5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTksNyArNzU5LDYg
QEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYgogICAgICAgICB3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHByaXYtPndlYnNp
dGVEYXRhTWFuYWdlci5nZXQoKSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90bHNf
ZXJyb3JzX3BvbGljeShjb250ZXh0RGF0YU1hbmFnZXIpKTsKICAgICAgICAgYXV0byBwcm94eVNl
dHRpbmdzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGNvbnRleHREYXRh
TWFuYWdlcikubmV0d29ya1Byb3h5U2V0dGluZ3MoKTsKICAgICAgICAgd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkuc2V0
TmV0d29ya1Byb3h5U2V0dGluZ3MoV1RGTW92ZShwcm94eVNldHRpbmdzKSk7Ci0gICAgICAgIHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckFkZFByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFu
YWdlci5nZXQoKSwgd2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHByaXYtPmNvbnRleHQu
Z2V0KCkpKTsKICAgICB9CiAKICAgICBpZiAoIXByaXYtPndlYnNpdGVQb2xpY2llcykKQEAgLTk0
NSwxMSArOTQ0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Rpc3Bvc2UoR09iamVjdAog
ICAgICAgICB3ZWJraXRXZWJDb250ZXh0V2ViVmlld0Rlc3Ryb3llZCh3ZWJWaWV3LT5wcml2LT5j
b250ZXh0LmdldCgpLCB3ZWJWaWV3KTsKICAgICB9CiAKLSAgICBpZiAod2ViVmlldy0+cHJpdi0+
d2Vic2l0ZURhdGFNYW5hZ2VyKSB7Ci0gICAgICAgIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlclJl
bW92ZVByb2Nlc3NQb29sKHdlYlZpZXctPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwg
d2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHdlYlZpZXctPnByaXYtPmNvbnRleHQuZ2V0
KCkpKTsKLSAgICAgICAgd2ViVmlldy0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gbnVsbHB0
cjsKLSAgICB9Ci0KICAgICBpZiAod2ViVmlldy0+cHJpdi0+Y3VycmVudFNjcmlwdERpYWxvZykg
ewogICAgICAgICB3ZWJraXRfc2NyaXB0X2RpYWxvZ19jbG9zZSh3ZWJWaWV3LT5wcml2LT5jdXJy
ZW50U2NyaXB0RGlhbG9nKTsKICAgICAgICAgQVNTRVJUKCF3ZWJWaWV3LT5wcml2LT5jdXJyZW50
U2NyaXB0RGlhbG9nKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcAkocmV2aXNpb24g
MjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTEgKzk1LDYgQEAgZW51bSB7
CiB9OwogCiBzdHJ1Y3QgX1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUgewotICAgIH5f
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQo
cHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSk7Ci0gICAgfQotCiAgICAgUmVmUHRyPFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZT4gd2Vic2l0ZURhdGFTdG9yZTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGJh
c2VEYXRhRGlyZWN0b3J5OwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gYmFzZUNhY2hlRGlyZWN0b3J5
OwpAQCAtMTE1LDcgKzExMCw2IEBAIHN0cnVjdCBfV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJp
dmF0ZSAKICAgICBXZWJLaXRUTFNFcnJvcnNQb2xpY3kgdGxzRXJyb3JzUG9saWN5OwogCiAgICAg
R1JlZlB0cjxXZWJLaXRDb29raWVNYW5hZ2VyPiBjb29raWVNYW5hZ2VyOwotICAgIFZlY3RvcjxX
ZWJQcm9jZXNzUG9vbCo+IHByb2Nlc3NQb29sczsKIH07CiAKIFdFQktJVF9ERUZJTkVfVFlQRShX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIsIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlciwgR19U
WVBFX09CSkVDVCkKQEAgLTQ5NCwzMCArNDg4LDEzIEBAIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZSYgd2Via2l0V2Vic2l0ZUQKICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24tPnNldFNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoRmlsZVN5c3RlbTo6c3RyaW5nRnJvbUZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihwcml2LT5zd1JlZ2lzdHJhdGlvbnNEaXJlY3RvcnkuZ2V0KCkpKTsK
ICAgICAgICAgaWYgKHByaXYtPmRvbUNhY2hlRGlyZWN0b3J5KQogICAgICAgICAgICAgY29uZmln
dXJhdGlvbi0+c2V0Q2FjaGVTdG9yYWdlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnN0cmluZ0Zyb21G
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocHJpdi0+ZG9tQ2FjaGVEaXJlY3RvcnkuZ2V0KCkpKTsK
LSAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6Y3JlYXRlKFdURk1vdmUoY29uZmlndXJhdGlvbiksIFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkpOworICAgICAgICBwcml2LT53ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoV1RGTW92ZShjb25maWd1cmF0aW9uKSwgUEFMOjpTZXNz
aW9uSUQ6OmdlbmVyYXRlUGVyc2lzdGVudFNlc3Npb25JRCgpKTsKICAgICAgICAgcHJpdi0+d2Vi
c2l0ZURhdGFTdG9yZS0+c2V0SWdub3JlVExTRXJyb3JzKHByaXYtPnRsc0Vycm9yc1BvbGljeSA9
PSBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKICAgICB9CiAKICAgICByZXR1cm4g
KnByaXYtPndlYnNpdGVEYXRhU3RvcmU7CiB9CiAKLXZvaWQgd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyQWRkUHJvY2Vzc1Bvb2woV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBXZWJQ
cm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCi17Ci0gICAgQVNTRVJUKCFtYW5hZ2VyLT5wcml2LT5w
cm9jZXNzUG9vbHMuY29udGFpbnMoJnByb2Nlc3NQb29sKSk7Ci0gICAgbWFuYWdlci0+cHJpdi0+
cHJvY2Vzc1Bvb2xzLmFwcGVuZCgmcHJvY2Vzc1Bvb2wpOwotfQotCi12b2lkIHdlYmtpdFdlYnNp
dGVEYXRhTWFuYWdlclJlbW92ZVByb2Nlc3NQb29sKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciog
bWFuYWdlciwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotewotICAgIEFTU0VSVChtYW5h
Z2VyLT5wcml2LT5wcm9jZXNzUG9vbHMuY29udGFpbnMoJnByb2Nlc3NQb29sKSk7Ci0gICAgbWFu
YWdlci0+cHJpdi0+cHJvY2Vzc1Bvb2xzLnJlbW92ZUZpcnN0KCZwcm9jZXNzUG9vbCk7Ci19Ci0K
LWNvbnN0IFZlY3RvcjxXZWJQcm9jZXNzUG9vbCo+JiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXRQcm9jZXNzUG9vbHMoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyKQotewotICAg
IHJldHVybiBtYW5hZ2VyLT5wcml2LT5wcm9jZXNzUG9vbHM7Ci19Ci0KIC8qKgogICogd2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldzoKICAqIEBmaXJzdF9vcHRpb25fbmFtZTogbmFtZSBv
ZiB0aGUgZmlyc3Qgb3B0aW9uIHRvIHNldApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdl
clByaXZhdGUuaAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xOSwxMSArMTksNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIldlYlByb2Nl
c3NQb29sLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgogCiBXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmUmIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIqKTsKLXZvaWQgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQWRkUHJv
Y2Vzc1Bvb2woV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiwgV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bCYpOwotdm9pZCB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJSZW1vdmVQcm9jZXNzUG9vbChXZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXIqLCBXZWJLaXQ6OldlYlByb2Nlc3NQb29sJik7Ci1jb25zdCBW
ZWN0b3I8V2ViS2l0OjpXZWJQcm9jZXNzUG9vbCo+JiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXRQcm9jZXNzUG9vbHMoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKik7Ci0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21h
dGlvblNlc3Npb24uY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM5Miw4ICsxMzkyLDggQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xl
Q29vawogCiAgICAgY29va2llLmh0dHBPbmx5ID0gKmh0dHBPbmx5OwogCi0gICAgV2ViQ29va2ll
TWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhw
YWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFj
a10oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyID0gcGFnZS0+
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAg
IGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lv
bklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5k
U3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAtMTQwOSw4ICsxNDA5LDggQEAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPgogCiAgICAgU3RyaW5nIGhvc3QgPSBhY3RpdmVV
UkwuaG9zdCgpLnRvU3RyaW5nKCk7CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tp
ZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2Ut
PndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0Rv
dFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29v
a2llTWFuYWdlciA9IHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLmNv
b2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5
QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoaG9zdCkgfSk7CiAKICAgICByZXR1cm4geyB9OwogfQpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgJKHJldmlzaW9uIDI2NzUzNikK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSArNDEsMTEgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiBjbGFzcyBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTsKIAogY2xh
c3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IGZpbmFsIDogcHVibGljIEFQSTo6
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IHsKLXByaXZhdGU6CitwdWJsaWM6CiAgICAgdm9p
ZCBzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkmLCBMZWdhY3lD
dXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBmaW5hbDsK
ICAgICB2b2lkIHN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Jiwg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCkgZmluYWw7CiAgICAgdm9pZCBpbnZhbGlkYXRlKExlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5JikgZmluYWw7Ci0KK3ByaXZhdGU6CiAgICAgSGFz
aE1hcDxMZWdhY3lDdXN0b21Qcm90b2NvbElELCBSZXRhaW5QdHI8V0tDdXN0b21Qcm90b2NvbExv
YWRlcj4+IG1fbG9hZGVyTWFwOwogfTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCShyZXZpc2lvbiAyNjc1MzYp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsOCArMTM0LDkgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJV
c2VyRGVmYXVsdHNJZk5lZWRlZAogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNz
U3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1
cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0
ZURhdGFTdG9yZShbZW5hYmxlZCA9IHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKV0gKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3MoKS5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGVuYWJsZWQpOworICAgIH0pOwogCiAj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVz
c2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkKQEAgLTE2Niw4ICsxNjcsNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUoCiAgICAgaWYgKCFbW05TVXNl
ckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiV2ViS2l0U3VwcHJl
c3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIiXSkKICAgICAgICAgaW5zdGFsbE1lbW9yeVByZXNzdXJl
SGFuZGxlcigpOwogCi0gICAgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1h
a2VVbmlxdWU8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKTsKLQogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBpZiAoIV9N
R0NhY2hlVmFsaWQoKSkgewogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfZ2xv
YmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBeewpAQCAtNDk1
LDIyICs0OTQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAK
ICAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdOwogCi0gICAgewotICAgICAgICBib29sIGlzU2FmYXJpID0gZmFsc2U7Ci0g
ICAgICAgIGJvb2wgaXNNaW5pQnJvd3NlciA9IGZhbHNlOwotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTW9iaWxl
U2FmYXJpKCk7Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlv
bjo6aXNNaW5pQnJvd3NlcigpOwotI2VsaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBpc1NhZmFy
aSA9IFdlYkNvcmU6Ok1hY0FwcGxpY2F0aW9uOjppc1NhZmFyaSgpOwotICAgICAgICBpc01pbmlC
cm93c2VyID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzTWluaUJyb3dzZXIoKTsKLSNlbmRp
ZgotICAgICAgICBpZiAoaXNTYWZhcmkgfHwgaXNNaW5pQnJvd3NlcikgewotICAgICAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuaHR0cFByb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0
cmluZyAqKVdlYktpdDJIVFRQUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
aHR0cHNQcm94eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcg
KilXZWJLaXQySFRUUFNQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAg
ICBwYXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0ID0gYWRvcHRDRihfQ0ZOZXR3b3JrQ29weUFU
U0NvbnRleHQoKSk7CiAKICAgICBwYXJhbWV0ZXJzLnNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1
cmVIYW5kbGVyID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0U3VwcHJlc3NNZW1vcnlQcmVz
c3VyZUhhbmRsZXJEZWZhdWx0c0tleV07CkBAIC01MjQsMTIgKzUwNyw4IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICBOU051bWJlciAqZGF0YWJhc2VFbmFi
bGVkVmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VF
bmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogICAgIGlmIChkYXRhYmFzZUVu
YWJsZWRWYWx1ZSkKICAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9
IGRhdGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIHBhcmFt
ZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZl
cmVuY2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuZW5hYmxl
QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5
OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKV1dOwotCi0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tp
bmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9u
KCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQo
KQpAQCAtNjA4LDExICs1ODcsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzU3VwcHJl
c3Npb25FCiAgICAgcmV0dXJuICFtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIudmFsdWUoKSAm
JiAhbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCk7CiB9
CiAKLWJvb2wgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JU
ZXN0aW5nKGNvbnN0IFN0cmluZyYgZW50aXRsZW1lbnQpCi17Ci0gICAgcmV0dXJuIFdURjo6aGFz
RW50aXRsZW1lbnQoZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCktPnhwY0Nvbm5l
Y3Rpb24oKSwgZW50aXRsZW1lbnQudXRmOCgpLmRhdGEoKSk7Ci19Ci0KICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiBmbG9hdCBXZWJQcm9jZXNzUG9v
bDo6ZGlzcGxheUJyaWdodG5lc3MoKQogewpAQCAtOTQ5LDIzICs5MjMsNCBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpyZWdpc3RlckhpZ2hEeW5hbWljCiB9CiAjZW5kaWYKIAotT1NPYmplY3RQdHI8
eHBjX29iamVjdF90PiBXZWJQcm9jZXNzUG9vbDo6eHBjRW5kcG9pbnRNZXNzYWdlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9lbmRwb2ludE1lc3NhZ2U7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKE9TT2JqZWN0UHRy
PHhwY19vYmplY3RfdD4gZW5kcG9pbnRNZXNzYWdlKQotewotICAgIG1fZW5kcG9pbnRNZXNzYWdl
ID0gZW5kcG9pbnRNZXNzYWdlOwotCi0gICAgZm9yIChhdXRvIHByb2Nlc3MgOiBtX3Byb2Nlc3Nl
cykgewotICAgICAgICBpZiAocHJvY2Vzcy0+c3RhdGUoKSAhPSBBdXhpbGlhcnlQcm9jZXNzUHJv
eHk6OlN0YXRlOjpSdW5uaW5nKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICgh
cHJvY2Vzcy0+Y29ubmVjdGlvbigpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1
dG8gY29ubmVjdGlvbiA9IHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpOwot
ICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbiwgZW5kcG9pbnRN
ZXNzYWdlLmdldCgpKTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
LmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw4ICs3NSw4IEBAIHZv
aWQgRG93bmxvYWRQcm94eTo6Y2FuY2VsKCkKICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2Vz
cyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3du
bG9hZElEKSwgMCk7CisgICAgaWYgKG1fZGF0YVN0b3JlKQorICAgICAgICBtX2RhdGFTdG9yZS0+
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93
bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6aW52YWxp
ZGF0ZSgpCkBAIC0xMDMsMTUgKzEwMywxMyBAQCBXZWJQYWdlUHJveHkqIERvd25sb2FkUHJveHk6
Om9yaWdpbmF0aW5nCiAjaWYgUExBVEZPUk0oQ09DT0EpCiB2b2lkIERvd25sb2FkUHJveHk6OnB1
Ymxpc2hQcm9ncmVzcyhjb25zdCBVUkwmIFVSTCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wp
CisgICAgaWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOwotICAgICAgICBib29sIGNyZWF0
ZWRTYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKFVSTC5m
aWxlU3lzdGVtUGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIGhhbmRs
ZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0
ZWRTYW5kYm94RXh0ZW5zaW9uKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9ncmVzcyhtX2Rvd25sb2FkSUQs
IFVSTCwgaGFuZGxlKSwgMCk7Ci0gICAgfQorICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBo
YW5kbGU7CisgICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6
VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOworICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRi
b3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsKKyAgICBtX2RhdGFTdG9yZS0+
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERv
d25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwogfQogI2VuZGlm
IC8vIFBMQVRGT1JNKENPQ09BKQogCkBAIC0xMzEsMTEgKzEyOSwxMCBAQCB2b2lkIERvd25sb2Fk
UHJveHk6OmRpZFN0YXJ0KGNvbnN0IFJlc291CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYgYXV0
aGVudGljYXRpb25DaGFsbGVuZ2UsIHVpbnQ2NF90IGNoYWxsZW5nZUlEKQogewotICAgIGlmICgh
bV9wcm9jZXNzUG9vbCkKKyAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wgfHwgIW1fZGF0YVN0b3JlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkg
PSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX3Byb2Nlc3NQb29sLT5uZXR3
b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKSksIG51bGxwdHIpOwotCisgICAgYXV0byBhdXRoZW50
aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eTo6Y3Jl
YXRlKFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBjaGFsbGVuZ2VJRCwgbWFrZVJl
ZigqbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpKSwgbnVsbHB0cik7
CiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoKnRoaXMsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuZ2V0KCkp
OwogfQogCkBAIC0xNDYsMTUgKzE0MywxMCBAQCB2b2lkIERvd25sb2FkUHJveHk6OndpbGxTZW5k
UmVxdWVzdChSZXNvCiAKICAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLndpbGxT
ZW5kUmVxdWVzdCgqdGhpcywgV1RGTW92ZShwcm9wb3NlZFJlcXVlc3QpLCByZWRpcmVjdFJlc3Bv
bnNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXShSZXNvdXJjZVJlcXVl
c3QmJiBuZXdSZXF1ZXN0KSB7CiAgICAgICAgIG1fcmVkaXJlY3RDaGFpbi5hcHBlbmQobmV3UmVx
dWVzdC51cmwoKSk7Ci0KLSAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29s
KQorICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fZGF0YVN0b3JlKQogICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRU
aGlzLT5tX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpOwotICAgICAgICBpZiAoIW5ldHdv
cmtQcm9jZXNzUHJveHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbmV0d29ya1By
b2Nlc3NQcm94eS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNl
bmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOwor
ICAgICAgICBhdXRvJiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVjdGVkVGhpcy0+bV9kYXRh
U3RvcmUtPm5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzUHJveHkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3Rl
Y3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOwogICAgIH0pOwogfQogCkBA
IC0xNzksMTYgKzE3MSwxNCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9u
V2l0CiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
bV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdn
ZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2Vz
dGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBkb3dubG9hZElEID0gZG93bmxvYWRJRF0gKEFsbG93T3ZlcndyaXRlIGFs
bG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsKKyAgICBtX3Byb2Nlc3NQb29sLT5k
b3dubG9hZENsaWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKCp0
aGlzLCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRGaWxlbmFtZShzdWdn
ZXN0ZWRGaWxlbmFtZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRv
d25sb2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0
aW9uKSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlOwogICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGRlc3RpbmF0aW9uLCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgICAg
IGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICAgICAgaWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9h
ZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CisgICAgICAg
IG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQs
IGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBB
bGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CiAgICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAJ
KHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIERvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlNYXAoTmV0
d29ya1Byb2Nlc3NQcm94eSYgcHJvY2VzcykKLSAgICA6IG1fcHJvY2VzcyhtYWtlV2Vha1B0cihw
cm9jZXNzKSkKKyAgICA6IG1fcHJvY2Vzcyhwcm9jZXNzKQogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgICwgbV9zaG91bGRUYWtlQXNzZXJ0aW9uKFdURjo6cHJvY2Vzc0hhc0VudGl0bGVtZW50KCJj
b20uYXBwbGUubXVsdGl0YXNraW5nLnN5c3RlbWFwcGFzc2VydGlvbnMiKSkKICNlbmRpZgpAQCAt
NzAsMTQgKzcwLDEyIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6cGxhdGZvcm1EZXN0cm95KCkK
IAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgp
CiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKSwgMCk7Cisg
ICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbkRp
ZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5TWFwOjphcHBs
aWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKQogewotICAgIGlmIChtX3Byb2Nlc3MpCi0gICAg
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9u
V2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpLCAwKTsKIH0K
IAogRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eShX
ZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZy
YW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCkBA
IC05MiwxMyArOTAsMTIgQEAgRG93bmxvYWRQcm94eSYgRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRl
RAogICAgICAgICBtX2Rvd25sb2FkVUlBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3Nl
cnRpb24+KGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nl
c3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKIAogICAgICAgICBBU1NFUlQo
IW1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9wcm9jZXNzKTsKLSAgICAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtl
VW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSwg
IldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3
b3JraW5nKTsKKyAgICAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtlVW5p
cXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy5wcm9jZXNzSWRlbnRpZmllcigpLCAiV2Vi
S2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVuYm91bmRlZE5ldHdvcmtp
bmcpOwogCiAgICAgICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiVUlQcm9jZXNz
IHRvb2sgJ1dlYktpdCBkb3dubG9hZHMnIGFzc2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0
d29ya1Byb2Nlc3MiKTsKICAgICB9CiAKLSAgICBtX3Byb2Nlc3MtPmFkZE1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9h
ZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsK
KyAgICBtX3Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKS5kb3du
bG9hZElEKCksIGRvd25sb2FkUHJveHkuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGRvd25sb2FkUHJv
eHk7CiB9CkBAIC0xMDksMTIgKzEwNiw5IEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxv
YWRGaW5pc2hlZCgKIAogICAgIFJFTEVBU0VfTE9HKExvYWRpbmcsICJSZW1vdmluZyBkb3dubG9h
ZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIiwgZG93bmxvYWRJ
RC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJveHkgbWF5IGJlIGhvbGRp
bmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCi0gICAgYXV0byBwcm90
ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsK
LQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CiAKLSAgICBt
X3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CisgICAgbV9w
cm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CiAgICAgZG93bmxv
YWRQcm94eS5pbnZhbGlkYXRlKCk7CiAgICAgbV9kb3dubG9hZHMucmVtb3ZlKGRvd25sb2FkSUQp
OwogCkBAIC0xMzMsMTUgKzEyNywxMyBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmludmFsaWRh
dGUoKQogICAgIGZvciAoY29uc3QgYXV0byYgZG93bmxvYWQgOiBtX2Rvd25sb2Fkcy52YWx1ZXMo
KSkgewogICAgICAgICBkb3dubG9hZC0+cHJvY2Vzc0RpZENsb3NlKCk7CiAgICAgICAgIGRvd25s
b2FkLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25s
b2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKKyAgICAgICAgbV9wcm9jZXNzLnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7CiAgICAgfQogCiAg
ICAgbV9kb3dubG9hZHMuY2xlYXIoKTsKICAgICBtX2Rvd25sb2FkVUlBc3NlcnRpb24gPSBudWxs
cHRyOwogICAgIG1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uID0gbnVsbHB0cjsKICAgICBS
RUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFw
IGludmFsaWRhdGVkIC0gUmVsZWFzZWQgJ1dlYktpdCBkb3dubG9hZHMnIGFzc2VydGlvbnMgZm9y
IFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKLQotICAgIG1fcHJvY2VzcyA9IG51bGxw
dHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCShyZXZpc2lvbiAy
Njc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94
eU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwbGF0Zm9ybUNyZWF0ZSgpOwogICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBX
ZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fcHJvY2VzczsKKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5JiBtX3Byb2Nlc3M7CiAgICAgSGFzaE1hcDxEb3dubG9hZElELCBSZWZQdHI8RG93bmxv
YWRQcm94eT4+IG1fZG93bmxvYWRzOwogCiAgICAgYm9vbCBtX3Nob3VsZFRha2VBc3NlcnRpb24g
eyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94
eS5oIgogCiAjaW5jbHVkZSAiQVBJQ29udGVudFJ1bGVMaXN0LmgiCisjaW5jbHVkZSAiQVBJQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VQcm94eS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdlci5oIgogI2luY2x1
ZGUgIkRvd25sb2FkUHJveHlNYXAuaCIKQEAgLTM1LDYgKzM2LDcgQEAKICNpbmNsdWRlICJMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkxlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNlbmRpZgorI2luY2x1ZGUgIkxlZ2Fj
eUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdv
cmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC00OCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiU2hvdWxk
R3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5o
IgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmgiCisjaW5jbHVkZSAiV2Vi
Q29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCkBA
IC01OCw4ICs2MSwxMCBAQAogI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGEuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3Jl
Q2xpZW50LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaXN0cmFi
bGVEb21haW4uaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKICNpZiBFTkFCTEUoU0VDX0lURU1fU0hJTSkK
QEAgLTcwLDIwICs3NSwxMjIgQEAKICNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4K
ICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwogI2RlZmluZSBNRVNTQUdFX0NIRUNLKGFz
c2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlvbiwgY29ubmVjdGlvbigpKQogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1OZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9v
bCkKLSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShwcm9jZXNzUG9vbC5hbHdheXNSdW5zQXRC
YWNrZ3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJvY2Vzc1Bvb2wocHJvY2Vzc1Bvb2wpCitz
dGF0aWMgSGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5Kj4mIG5ldHdvcmtQcm9jZXNzZXNTZXQo
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxOZXR3b3JrUHJvY2Vzc1Byb3h5Kj4+IHNldDsKKyAgICBy
ZXR1cm4gc2V0OworfQorCitWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkKK3sKKyAgICBWZWN0b3I8UmVmPE5l
dHdvcmtQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXM7CisgICAgcHJvY2Vzc2VzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobmV0d29ya1Byb2Nlc3Nlc1NldCgpLnNpemUoKSk7CisgICAgZm9yIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA6IG5ldHdvcmtQcm9jZXNzZXNTZXQoKSkKKyAgICAgICAgcHJvY2Vz
c2VzLnVuY2hlY2tlZEFwcGVuZCgqbmV0d29ya1Byb2Nlc3MpOworICAgIHJldHVybiBwcm9jZXNz
ZXM7Cit9CisKK3N0YXRpYyBSZWZQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4mIGRlZmF1bHRQcm9j
ZXNzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPE5ldHdvcmtQcm9jZXNz
UHJveHk+PiBwcm9jZXNzOworICAgIHJldHVybiBwcm9jZXNzLmdldCgpOworfQorCitSZWY8TmV0
d29ya1Byb2Nlc3NQcm94eT4gTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQcm9j
ZXNzKCkKK3sKKyAgICBpZiAoIWRlZmF1bHRQcm9jZXNzKCkpCisgICAgICAgIGRlZmF1bHRQcm9j
ZXNzKCkgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gKmRlZmF1
bHRQcm9jZXNzKCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKCkK
K3sKKyAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpOworICAgIGRpZFRlcm1p
bmF0ZSgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFRlcm1pbmF0ZSgpCit7
CisgICAgaWYgKHRoaXMgPT0gZGVmYXVsdFByb2Nlc3MoKS5nZXQoKSkKKyAgICAgICAgZGVmYXVs
dFByb2Nlc3MoKSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2Vu
ZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91
bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgorICAgIC8v
IFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xhdGlv
biBjaGVjayBvbiBvdXIgQVBJcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgorICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsKKyAgICAg
ICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzXSB7CisgICAgICAgICAgICBzZW5kQ3Jl
YXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcGFyYW1l
dGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUds
b2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOwor
ICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1
cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9u
KCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsK
KyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3Rv
cihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xv
Y2FsKCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0g
Y29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9S
ZWdpc3RlckFzTm9BY2Nlc3MoKSk7CisgICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwoKTsKKyAgICBmb3IgKGF1dG8m
IHNjaGVtZSA6IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFu
ZGxlcnMoKSkKKyAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3Rv
bVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAg
IGlmIChTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29r
aWVTdG9yYWdlRGlyZWN0b3J5KCk7ICFjb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkK
KyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgaWYgKFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJl
Y3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOyAhY29u
dGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVj
dG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OworICAgIGlmIChTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6
OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOyAhcGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHko
KSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURp
cmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFy
ZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyNlbmRpZgorICAgIFdlYlByb2Nl
c3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
KHBhcmFtZXRlcnMpLCAwKTsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xBbHdheXNS
dW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wg
OiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nl
c3NQb29sLT5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGFu
eVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpCit7CisgICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkg
eworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRp
b24oKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoKQorICAgIDog
QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3Vu
ZFByaW9yaXR5KCkpCiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikK
KyAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWVSZWY8TGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogICAgICwgbV9jdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eSgqdGhpcykKKyNlbHNlCisgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudChtYWtlVW5pcXVlUmVmPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQog
I2VuZGlmCi0gICAgLCBtX3Rocm90dGxlcigqdGhpcywgcHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJ
QmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIGFueVByb2Nl
c3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV9jb29raWVN
YW5hZ2VyKFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKCp0aGlzKSkKIHsKICAgICBjb25u
ZWN0KCk7CisgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgIHVw
ZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKKyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuYWRkKHRo
aXMpOwogfQogCiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgpCkBA
IC05OCw2ICsyMDUsNyBAQCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94
CiAKICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlN
YXAtPmludmFsaWRhdGUoKTsKKyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkucmVtb3ZlKHRoaXMp
OwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vz
c0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuY2hPcHRpb25zKQpAQCAtMTA1LDE1ICsyMTMs
OCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvCiAgICAgbGF1bmNo
T3B0aW9ucy5wcm9jZXNzVHlwZSA9IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6Ok5ldHdv
cms7CiAgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKGxhdW5jaE9w
dGlvbnMpOwogCi0gICAgaWYgKHByb2Nlc3NQb29sKCkuc2hvdWxkTWFrZU5leHROZXR3b3JrUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2woKS5zZXRT
aG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoZmFsc2UpOwor
ICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpzaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1
bmNoRmFpbEZvclRlc3RpbmcoKSkKICAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShQ
TEFZU1RBVElPTikKLSAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NQYXRoID0gbV9wcm9jZXNzUG9v
bC5uZXR3b3JrUHJvY2Vzc1BhdGgoKTsKLSAgICBsYXVuY2hPcHRpb25zLnVzZXJJZCA9IG1fcHJv
Y2Vzc1Bvb2wudXNlcklkKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMTY2
LDEyICsyNjcsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBwSQog
ICAgIH0KIH0KIAotRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93
bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdl
YlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQorRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nl
c3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUs
IFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNv
dXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5
KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAgICAgaWYgKCFtX2Rvd25sb2FkUHJveHlNYXApCiAgICAg
ICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1ha2VVbmlxdWU8RG93bmxvYWRQcm94eU1hcD4oKnRo
aXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94
eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBv
cmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURv
d25sb2FkUHJveHkoZGF0YVN0b3JlLCBwcm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFt
ZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+
IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoV2Vic2l0ZURhdGEpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMjM3LDggKzMzOCwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6Om5ldHdvcmtQcm9jZXNzCiB7CiAgICAgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCi0g
ICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRo
aXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1c2UgdXMgdG8gYmUgZGVsZXRl
ZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CisgICAg
UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IHByb3RlY3RlZFRoaXMoKnRoaXMpOworICAgIGZvciAo
YXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisg
ICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMpOworICAgIGZv
ciAoYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA6IG1fd2Vic2l0ZURhdGFTdG9yZXMpCisgICAgICAg
IHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKIH0KIAogdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjbGVhckNhbGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICsz
NjIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzCiAgICAgaWYg
KGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29k
ZXIpKQotICAgICAgICByZXR1cm47Ci0KICAgICBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NQcm94
eU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAKQEAgLTI3NCw4ICszNzUsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVTeW5jCiAKIHZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKLSAgICBhdXRvIHByb3Rl
Y3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZihtX3Byb2Nlc3NQb29sKTsKLQogICAgIGlmIChtX2Rv
d25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+aW52YWxpZGF0ZSgp
OwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCkBAIC0zMzEsMTEg
KzQzMCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZUF1dGgKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nlc3NQb29s
LmlzU2VydmljZVdvcmtlclBhZ2VJRChwYWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShzZXNzaW9uSUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVu
Z2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6Zm9yTW9z
dFZpc2libGVXZWJQYWdlSWZBbnkoc2Vzc2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywgd2Vha1Ro
aXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSA9IFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVnYWN5VExT
XShhdXRvKiBwYWdlKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTM5MiwxMSArNDg2LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWRGaW5pc2hMYXVuYwogICAgICAgICBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChtX3Byb2Nl
c3NQb29sLnByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSkKLSAgICAgICAgc2V0UHJvY2Vzc1N1
cHByZXNzaW9uRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgogICAgIAogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgaWYgKHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiA9IHRoaXMtPmNvbm5l
Y3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpKQpAQCAtMTIwNSw3ICsxMjk0LDggQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzZXRUaGlyZFBhcnR5QwogfQogdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS5zZXREb21haW5z
V2l0aFVzZXJJbnRlcmFjdGlvbihXVEZNb3ZlKGRvbWFpbnMpKTsKKyAgICBmb3IgKGF1dG8qIHBy
b2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBw
cm9jZXNzUG9vbC0+c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbj4geyBkb21haW5zIH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKQEAgLTEyNTIsNDUgKzEzNDIsMzEgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpmbHVzaENvb2tpZXMoYwogICAgIHNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkZsdXNoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
YWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9yZSkKIHsKLSAgICBt
X3Nlc3Npb25JRHMuYWRkKHN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgbV93ZWJzaXRlRGF0YVN0
b3Jlcy5hZGQoc3RvcmUpOwogCiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUt
PnBhcmFtZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0b3JlLT5zZXNzaW9u
SUQoKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVE
YXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCk7CisgICAgYXV0byBzZXNzaW9uSUQg
PSBzdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JG
aWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7Cisg
ICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNvbHZlZEluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgogICAgIH0KIH0KIAotYm9vbCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpoYXNTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9zZXNzaW9uSURzLmNvbnRhaW5zKHNlc3Npb25JRCk7Ci19Ci0KLXZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFT
dG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMucmVtb3ZlKHNlc3Np
b25JRCk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5yZW1vdmUod2Vic2l0ZURhdGFTdG9yZSk7
CiAKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkRlc3Ryb3lTZXNzaW9uIHsgc2Vzc2lvbklEIH0sIDApOworICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24geyB3ZWJzaXRlRGF0
YVN0b3JlLnNlc3Npb25JRCgpIH0sIDApOwogfQogCiBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3Jl
ID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAgICAgICBpZiAod2Vi
c2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBzZXNzaW9u
SUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0
cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZh
dWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFdlYnNpdGVE
YXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3JhZ2VQYXJhbWV0ZXJz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEzMzcsNyArMTQxMyw3IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVdlYlUKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25u
ZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9t
YWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX3Byb2Nlc3NQb29sLmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgV1RGTW92ZShyZWdpc3Ry
YWJsZURvbWFpbiksIHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
IFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29y
a1Byb2Nlc3MoKnRoaXMsIFJlZ2lzdHJhYmxlRG9tYWluIHtyZWdpc3RyYWJsZURvbWFpbn0sIHNl
c3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OndvcmtlckNvbnRleHRDb25uZWN0aW9uTm9Mb25nZXJOZWVkZWQoV2ViQ29y
ZTo6UHJvY2Vzc0lkZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTE1MDAsMTYgKzE1NzYsMzQgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpwcmVjb25uZWN0VG8oUAogICAgIHNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vzc2lvbklELCB3ZWJQYWdlUHJveHlJ
RCwgd2ViUGFnZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlz
TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0KIAorc3RhdGljIGJvb2wgYW55UHJv
Y2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8qIHBy
b2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAg
IGlmIChwcm9jZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJv
b2wgYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3Ig
KGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwog
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCkKIHsKLSAg
ICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBp
ZiAoYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAg
aWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdyb3VuZEFjdGl2aXR5KG1fYWN0aXZp
dHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9j
ZXNzZXMgPSB0aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGZv
cmVncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91bmQoKSwgMCk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNCYWNr
Z3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3Jv
dW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1Zh
bGlkQmFja2dyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAg
ICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5iYWNrZ3Jv
dW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91bmQgdmlldyhzKSJfcyk7CiAgICAg
ICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRp
b25Ub0JhY2tncm91bmQoKSwgMCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjY3NTM2KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDEyICs0NiwxNyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAjaW5jbHVkZSAiWFBDRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRy
Lmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBGb3JtRGF0YVJlZmVyZW5jZTsK
IH0KIAorbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7
Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xhc3MgU2Vzc2lvbklEOwogfQpAQCAtNzMsOCArNzgs
OCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERv
d25sb2FkUHJveHlNYXA7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJQ
YWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5OwogCiBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyA6
IGJvb2w7CkBAIC04Niw4ICs5MSw5IEBAIHN0cnVjdCBGcmFtZUluZm9EYXRhOwogc3RydWN0IE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFJlc291cmNlTG9hZEluZm87
CiBzdHJ1Y3QgV2Vic2l0ZURhdGE7CitzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM7
CiAKLWNsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkgZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQsIHB1YmxpYyBDYW5NYWtl
V2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5
IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhy
b3R0bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4s
IHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB1c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwpAQCAtMTAyLDEyICsxMDgsMTggQEAgcHVibGljOgog
ICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluOwogICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluOwogCi0gICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9v
bCYpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gZGVmYXVsdE5ldHdvcmtQ
cm9jZXNzKCk7CisgICAgc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtQcm9jZXNzUHJveHkpOyB9CiAgICAgfk5ldHdv
cmtQcm9jZXNzUHJveHkoKTsKIAorICAgIHN0YXRpYyBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNz
UHJveHk+PiBhbGxOZXR3b3JrUHJvY2Vzc2VzKCk7CisgICAgCisgICAgdm9pZCB0ZXJtaW5hdGUo
KSBmaW5hbDsKKyAgICB2b2lkIGRpZFRlcm1pbmF0ZSgpOworCiAgICAgdm9pZCBnZXROZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQ
cm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwogCi0gICAg
RG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBh
Z2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsKKyAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3du
bG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBXZWJQcm9jZXNzUG9vbCYsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkq
IG9yaWdpbmF0aW5nUGFnZSk7CiAKICAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNz
aW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFG
ZXRjaE9wdGlvbj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPiYmKTsKICAg
ICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0
ZURhdGFUeXBlPiwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIwNiwxNSArMjE4LDEyIEBAIHB1YmxpYzoK
ICAgICBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSBmaW5hbCB7IHJldHVybiBtX3Rocm90
dGxlcjsgfQogICAgIHZvaWQgdXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwogCi0gICAgV2ViUHJv
Y2Vzc1Bvb2wmIHByb2Nlc3NQb29sKCkgeyByZXR1cm4gbV9wcm9jZXNzUG9vbDsgfQotCiAjaWYg
RU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICB2b2lkIGRpZERlc3Ryb3lXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYpOwogI2Vu
ZGlmCiAKLSAgICB2b2lkIGFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYpOwotICAg
IGJvb2wgaGFzU2Vzc2lvbihQQUw6OlNlc3Npb25JRCkgY29uc3Q7Ci0gICAgdm9pZCByZW1vdmVT
ZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKKyAgICB2b2lkIGFkZFNlc3Npb24oV2Vic2l0ZURhdGFT
dG9yZSYpOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CiAgICAg
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgdm9pZCBjcmVhdGVTeW1MaW5rRm9y
RmlsZVVwZ3JhZGUoY29uc3QgU3RyaW5nJiBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwpAQCAt
MjI5LDYgKzIzOCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5
Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1l
Rm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAKKyAgICB2b2lkIG5ldHdv
cmtQcm9jZXNzQ3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIHZvaWQgcmVzb3VyY2VM
b2FkRGlkU2VuZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVzb3VyY2VMb2FkSW5m
byYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgT3B0aW9uYWw8SVBDOjpGb3JtRGF0YVJl
ZmVyZW5jZT4mJik7CkBAIC0yNDgsNyArMjU5LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0
ZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKICAgICB2b2lkIGNsZWFyQnVuZGxlSWRlbnRpZmllcihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwogCisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyKCkg
eyByZXR1cm4gbV9jb29raWVNYW5hZ2VyLmdldCgpOyB9CisKKyAgICBBUEk6OkN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgeyByZXR1cm4g
bV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuZ2V0KCk7IH0KKworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIHhwY19vYmplY3RfdCB4cGNFbmRwb2ludE1lc3NhZ2UoKSBjb25zdCB7IHJldHVy
biBtX2VuZHBvaW50TWVzc2FnZS5nZXQoKTsgfQorI2VuZGlmCisKIHByaXZhdGU6CisgICAgZXhw
bGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eSgpOworCisgICAgdm9pZCBzZW5kQ3JlYXRpb25QYXJh
bWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisKICAgICAvLyBBdXhpbGlhcnlQcm9jZXNzUHJveHkKICAg
ICBBU0NJSUxpdGVyYWwgcHJvY2Vzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiTmV0d29y
a2luZyJfczsgfQogCkBAIC0yNTYsNyArMjc5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbm5l
Y3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHByb2Nl
c3NXaWxsU2h1dERvd24oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIG5l
dHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgIHZvaWQgY2xlYXJDYWxsYmFja1N0YXRlcygpOwog
CiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKQEAgLTMxMiwxNiArMzM0LDE3IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNl
c3Npb25JRCwgUmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+JiYpOwogCi0gICAgV2Vi
UHJvY2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPj4gbV9wZW5kaW5nRmV0Y2hXZWJzaXRl
RGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hN
YXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRl
V2Vic2l0ZURhdGFGb3JPcmlnaW5zQ2FsbGJhY2tzOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPERv
d25sb2FkUHJveHlNYXA+IG1fZG93bmxvYWRQcm94eU1hcDsKKworICAgIFVuaXF1ZVJlZjxBUEk6
OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQ7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKICAgICBMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSBtX2N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5
OwogI2VuZGlmCisKICAgICBQcm9jZXNzVGhyb3R0bGVyIG1fdGhyb3R0bGVyOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxQcm9jZXNzVGhyb3R0bGVyOjpCYWNrZ3JvdW5kQWN0aXZpdHk+IG1fYWN0aXZp
dHlGb3JIb2xkaW5nTG9ja2VkRmlsZXM7CiAgICAgUHJvY2Vzc1Rocm90dGxlcjo6QWN0aXZpdHlW
YXJpYW50IG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzOwpAQCAtMzQ3LDkgKzM3MCwxMSBAQCBw
cml2YXRlOgogICAgIHByaXZhdGU6CiAgICAgICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94
eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICB9OworICAgIE9TT2JqZWN0UHRyPHhwY19vYmplY3Rf
dD4gbV9lbmRwb2ludE1lc3NhZ2U7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8UEFMOjpTZXNzaW9u
SUQ+IG1fc2Vzc2lvbklEczsKKyAgICBXZWFrSGFzaFNldDxXZWJzaXRlRGF0YVN0b3JlPiBtX3dl
YnNpdGVEYXRhU3RvcmVzOworICAgIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IG1fY29va2ll
TWFuYWdlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
Q29jb2EubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4
ICs1MSwxMSBAQCBib29sIE5ldHdvcmtQcm9jZXNzUHJveHk6OlhQQ0V2ZW50SGFuZGxlCiAgICAg
aWYgKG1lc3NhZ2VOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKG1lc3NhZ2VOYW1lID09IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6Onhw
Y0xhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKQotICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBv
aW50VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2Vy
dmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0Vu
ZHBvaW50TWVzc2FnZU5hbWUpIHsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+bV9lbmRwb2lu
dE1lc3NhZ2UgPSBldmVudDsKKyAgICAgICAgZm9yIChhdXRvJiBkYXRhU3RvcmUgOiBtX25ldHdv
cmtQcm9jZXNzLT5tX3dlYnNpdGVEYXRhU3RvcmVzKQorICAgICAgICAgICAgZGF0YVN0b3JlLnNl
bmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMoKTsKKyAgICB9CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3Rv
Y29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAJKHJldmlzaW9uIDI2NzUz
NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
MTcgKzQ0LDE3IEBAIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp+TGVnYWMKIAog
dm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKExlZ2Fj
eUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNz
UG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywg
Y3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJv
dG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJ
RCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7
CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgp
LnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKIH0KIAogdm9pZCBMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgbV9uZXR3b3Jr
UHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCku
aW52YWxpZGF0ZSgqdGhpcyk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUoKnRoaXMpOwogfQogCiB2b2lkIExlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3YXNSZWRpcmVjdGVkVG9SZXF1ZXN0KExlZ2FjeUN1
c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVj
dFJlc3BvbnNlKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTQgQEAKICNpbmNsdWRlICJBdXRoZW50aWNhdG9y
TWFuYWdlci5oIgogI2luY2x1ZGUgIkRldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgiCiAjaW5jbHVk
ZSAiR1BVUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1v
Y2tBdXRoZW50aWNhdG9yTWFuYWdlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbkluZm8uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vz
c1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkQ2FjaGUuaCIKKyNpbmNsdWRlICJX
ZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXQySW5pdGlhbGl6ZS5oIgog
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDYWNoZS5oIgpA
QCAtNzUsNiArNzgsMTAgQEAKICNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5o
IgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJEZWZhdWx0V2ViQnJv
d3NlckNoZWNrcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgYm9v
bCBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zOwpAQCAtODMsMTMgKzkwLDE5
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dXZWJzaXRlRGF0YVIKICAgICBhbGxvd3NX
ZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zID0gdHJ1ZTsKIH0KIAotc3RhdGljIEhhc2hN
YXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgbm9uRGVmYXVsdERhdGFTdG9y
ZXMoKQorc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYg
YWxsRGF0YVN0b3JlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNVSVRocmVhZCgpKTsKICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURh
dGFTdG9yZSo+PiBtYXA7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRhU3Rv
cmUmKT4mJiBmdW5jdGlvbikKK3sKKyAgICBmb3IgKGF1dG8qIGRhdGFTdG9yZSA6IGFsbERhdGFT
dG9yZXMoKS52YWx1ZXMoKSkKKyAgICAgICAgZnVuY3Rpb24oKmRhdGFTdG9yZSk7Cit9CisKIFJl
ZjxXZWJzaXRlRGF0YVN0b3JlPiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGVOb25QZXJzaXN0ZW50
KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpObyksIFBBTDo6U2Vz
c2lvbklEOjpnZW5lcmF0ZUVwaGVtZXJhbFNlc3Npb25JRCgpKSk7CkBAIC0xMTUsNyArMTI4LDcg
QEAgV2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShSZWY8VwogI2VuZGlmCiB7CiAg
ICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1heWJl
UmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwpAQCAtMTI4LDE3ICsxNDEsMTIgQEAgV2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVE
YXRhU3RvcmUoKQogCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBpZiAobV9zZXNzaW9u
SUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBBU1NF
UlQobm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOwotICAg
ICAgICBub25EZWZhdWx0RGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7Ci0gICAgICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW1v
dmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBBU1NFUlQoYWxs
RGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7CisgICAgYWxsRGF0YVN0b3Jl
cygpLnJlbW92ZShtX3Nlc3Npb25JRCk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW1vdmVTZXNz
aW9uKCp0aGlzKTsKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0gICAgICAgIGlmIChhdXRvKiBn
cHVQcm9jZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQot
ICAgICAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsK
KyAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b25JZkNyZWF0ZWQoKSkKKyAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1f
c2Vzc2lvbklEKTsKICNlbmRpZgogfQogCkBAIC0xNTEsNyArMTU5LDYgQEAgc3RhdGljIFJlZlB0
cjxXZWJzaXRlRGF0YVN0b3JlPiYgZ2xvYmFsRAogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKQogewogICAgIEluaXRpYWxpemVXZWJLaXQy
KCk7Ci0KICAgICBhdXRvJiBzdG9yZSA9IGdsb2JhbERlZmF1bHREYXRhU3RvcmUoKTsKICAgICBp
ZiAoIXN0b3JlKQogICAgICAgICBzdG9yZSA9IGFkb3B0UmVmKG5ldyBXZWJzaXRlRGF0YVN0b3Jl
KFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpZZXMp
LCBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSk7CkBAIC0xNjksMTcgKzE3Niw0
NyBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFCiAgICAgcmV0dXJu
ICEhZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpOwogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6
Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKIHsKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBhdXRvIHJlc3VsdCA9
IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKLSAgICAgICAg
QVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBhdXRvIHJlc3Vs
dCA9IGFsbERhdGFTdG9yZXMoKS5hZGQobV9zZXNzaW9uSUQsIHRoaXMpOworICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK1dlYnNpdGVEYXRhU3RvcmUq
IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCkKK3sKKyAgICByZXR1cm4gYWxsRGF0YVN0b3JlcygpLmdldChzZXNz
aW9uSUQpOworfQorCitzdGF0aWMgUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IG5ldHdvcmtQcm9j
ZXNzRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisjaWYgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShXUEUpCisgICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7
CisgICAgICAgIC8vIFJldXNlIGEgcHJldmlvdXMgcGVyc2lzdGVudCBzZXNzaW9uIG5ldHdvcmsg
cHJvY2VzcyBmb3IgZXBoZW1lcmFsIHNlc3Npb25zLgorICAgICAgICBmb3IgKGF1dG8qIGRhdGFT
dG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1ZXMoKSkgeworICAgICAgICAgICAgaWYgKGRhdGFT
dG9yZS0+aXNQZXJzaXN0ZW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VSZWYoZGF0
YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpKTsKKyAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm4g
TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShz
ZXNzaW9uSUQpOworICAgIHJldHVybiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkZWZhdWx0TmV0d29y
a1Byb2Nlc3MoKTsKKyNlbmRpZgogfQogCi1XZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0
b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklEKQorTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0
d29ya1Byb2Nlc3MoKQogewotICAgIHJldHVybiBzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSA/IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25J
RCkgOiBudWxscHRyOworICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykgeworICAgICAgICBtX25l
dHdvcmtQcm9jZXNzID0gbmV0d29ya1Byb2Nlc3NGb3JTZXNzaW9uKG1fc2Vzc2lvbklEKTsKKyAg
ICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigqdGhpcyk7CisgICAgfQorCisgICAg
cmV0dXJuICptX25ldHdvcmtQcm9jZXNzOworfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJz
aXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2VzcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0
X2Nhc3Q8V2Vic2l0ZURhdGFTdG9yZSY+KCp0aGlzKS5uZXR3b3JrUHJvY2VzcygpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHBy
b2Nlc3MpCkBAIC0xOTUsMTIgKzIzMiw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dW5yZWdp
c3RlclByb2Nlc3MKICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CiB9CiAKLVdlYlBy
b2Nlc3NQb29sKiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VP
cGVyYXRpb25zKCkKLXsKLSAgICBhdXRvIHBvb2xzID0gcHJvY2Vzc1Bvb2xzKDEpOwotICAgIHJl
dHVybiBwb29scy5pc0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVnaW4oKS0+Z2V0KCk7Ci19
Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3Nhcnko
KQogewogICAgIGlmIChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBAIC00NDAsMjggKzQ3MSwy
MSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5CiAjZW5kaWYKIAog
ICAgIGF1dG8gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZU5ldHdvcmtQcm9jZXNz
QWNjZXNzVHlwZUZvckRhdGFGZXRjaChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7Ci0gICAg
aWYgKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkg
ewotICAgICAgICBhdXRvIHBvb2xzID0gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09IFByb2Nl
c3NBY2Nlc3NUeXBlOjpMYXVuY2ggPyBlbnN1cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nlc3NQb29s
cygpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKLSAgICAgICAg
ICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7Ci0gICAgICAgICAgICBjYXNl
IFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAo
IXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBQcm9jZXNz
QWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVO
ZXR3b3JrUHJvY2Vzcyh0aGlzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
ICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKLSAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLQorICAgIHN3aXRjaCAobmV0d29ya1Byb2Nl
c3NBY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgorICAg
ICAgICBuZXR3b3JrUHJvY2VzcygpOworICAgICAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7
CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJ
ZkxhdW5jaGVkOgorICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewogICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5mZXRjaFdlYnNpdGVEYXRhKG1fc2Vzc2lvbklE
LCBkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bv
b2xdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CisgICAgICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5mZXRjaFdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIGZldGNoT3B0aW9u
cywgW2NhbGxiYWNrQWdncmVnYXRvcl0oV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsKICAgICAg
ICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjayhXVEZN
b3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgorICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBhdXRvIHdlYlByb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZVdlYlByb2Nl
c3NBY2Nlc3NUeXBlRm9yRGF0YUZldGNoKGRhdGFUeXBlcywgIWlzUGVyc2lzdGVudCgpKTsKQEAg
LTcyNCwzMSArNzQ4LDI0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRp
b24KICAgICBib29sIGRpZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSA9
IGZhbHNlOwogI2VuZGlmCiAgICAgYXV0byBuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21w
dXRlTmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQ
ZXJzaXN0ZW50KCkpOwotICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vz
c0FjY2Vzc1R5cGU6Ok5vbmUpIHsKLSAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNz
QWNjZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bv
b2xzKCkgOiBwcm9jZXNzUG9vbHMoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHBvb2xzKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkg
ewotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICBz
d2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgeworICAgIGNhc2UgUHJvY2Vzc0FjY2Vz
c1R5cGU6OkxhdW5jaDoKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgQVNTRVJU
KG1fbmV0d29ya1Byb2Nlc3MpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFByb2Nl
c3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpIHsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNr
KCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vi
c2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNr
QWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2Us
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0
b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAjaWYgRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICAgICAgICAgIGRpZE5vdGlmeU5ldHdvcmtQ
cm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgorICAgICAgICBi
cmVhazsKICAgICB9CiAKICAgICBhdXRvIHdlYlByb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0ZVdl
YlByb2Nlc3NBY2Nlc3NUeXBlRm9yRGF0YVJlbW92YWwoZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50
KCkpOwpAQCAtODkzLDE0ICs5MTAsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURh
dGEoT3B0aW9uCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBpZiAo
ZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
cykpIHsKICAgICAgICAgaWYgKCFkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0
ZURhdGEpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdh
dG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy0+
ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2Rp
ZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgICAgICAgICAgY2FsbGJh
Y2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0pOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJh
Y2soKTsKQEAgLTk5NCwxMiArMTAwNiwxMCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92
ZURhdGEoT3B0aW9uCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewog
ICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAg
ICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAg
ICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNl
IFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpOworICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vz
c0FjY2Vzc1R5cGU6Ok5vbmU6CkBAIC0xMDIxLDcgKzEwMzEsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNh
bGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKG1f
c2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1lcywgSFNUU0NhY2hl
SG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nl
c3NQb29sXSB7CisgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmRlbGV0ZVdlYnNpdGVEYXRh
Rm9yT3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBvcmlnaW5zLCBjb29raWVIb3N0TmFt
ZXMsIEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0cmFibGVEb21haW5zLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yLCBwcm9jZXNzUG9vbF0gewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRv
ci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpA
QCAtMTE4MCwxOCArMTE5MCwxMiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEo
T3B0aW9uCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRG
b3JUZXN0aW5nKFNlY29uZHMgc2Vjb25kcykKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6
OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rp
bmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZl
dGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnJlc2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKCkKIHsKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGlu
ZygpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGlt
ZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0
Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2Vy
dmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwogfQogCiAjaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTEyMDEsOCArMTIwNSw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0UKIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRNYXhT
dGF0aXN0aWNzRW50cmllcyhtX3Nlc3Npb25JRCwgbWF4aW11bUVudHJ5Q291bnQsIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0
TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBy
dW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTIxMSw4ICsxMjE0LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEbwogICAgIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRQ
cnVuZUVudHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0
UHJ1bmVFbnRyaWVzRG93blRvKG1fc2Vzc2lvbklELCBwcnVuZVRhcmdldENvdW50LCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5k
ZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMjEsOCArMTIyMyw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmcKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1Rp
bWUobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vz
c2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChT
ZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTEyMzEsMjAgKzEyMzIsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRN
aW5pbXVtVGltZUJldAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRz
UmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CiB9CiAgICAgCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
ICAgICBwcm9jZXNzLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyht
X3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xMjU2LDEyICsxMjUwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZhbGVudFJl
c291cgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUHJldmFs
ZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNQcmV2YWxlbnRSZXNvdXJjZSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRm
YXRoZXJlZChjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzUHJl
dmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyNzMsMTIgKzEyNjIsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLmlzR3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjkyLDggKzEy
NzYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291CiAgICAgCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNlKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJl
c291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzA3LDEwICsxMjkwLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0UHJldmFsZW50UmVzb3VyY2VGb3JE
ZWJ1Z01vZGUobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291
cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNWZXJ5UHJl
dmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzMjIsMTIgKzEzMDIsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzVmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLmlzVmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291
cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xMzQxLDEwICsxMzE2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRWZXJ5UHJldmFsZW50UgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2Uo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFS
ZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xMzUzLDggKzEzMjUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFNob3VsZENsYXNzaWZ5CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZENsYXNzaWZ5UmVz
b3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Np
b25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3Vi
RnJhbWVVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzNjgsMjIgKzEzMzksMTQgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwg
fSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbcHJvY2Vzc1Bv
b2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBVUkwm
IHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVy
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdG9wRnJh
bWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTEzOTcsMjMgKzEzNjAsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJj
ZVVuZAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNz
LT5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
c3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVS
TCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBVUkwmIHN1YnJlc291cmNl
VVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
IHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1Jl
Z2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVS
TCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDI3LDEwICsxMzgxLDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaQogCiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
c3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVj
dGVkVG8gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJM
JiB1cmxSZWRpcmVjdGVkRnJvbSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTQ0MiwxMiArMTM5Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
c3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVj
dGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QgVVJM
JiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTE0NTksMTIgKzE0MDUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFRvcEZyYW1lVW5pcXVlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RG
cm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20s
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NzYs
MjUgKzE0MTcsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBwcm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsUmVkaXJlY3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBV
UkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVy
ZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxS
ZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTUwNiw2MCArMTQzNiw0MSBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+Y2xlYXJQcmV2YWxl
bnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkuY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZh
bHVlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVz
KG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMo
bV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zdWJtaXRUZWxlbWV0cnkobV9zZXNzaW9u
SUQsIFtdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc3VibWl0VGVsZW1ldHJ5
KG1fc2Vzc2lvbklELCBbXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgU2hv
dWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIHNob3VsZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKICAgICAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwg
bW9kaWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ2xl
YXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UsIHNob3Vs
ZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBzdHJ1Y3QgQ2FsbGJhY2tBZ2dyZWdhdG9yIDogUmVm
Q291bnRlZDxDYWxsYmFja0FnZ3JlZ2F0b3I+IHsKLSAgICAgICAgQ2FsbGJhY2tBZ2dyZWdhdG9y
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAgIHN0cnVj
dCBMb2NhbENhbGxiYWNrQWdncmVnYXRvciA6IFJlZkNvdW50ZWQ8TG9jYWxDYWxsYmFja0FnZ3Jl
Z2F0b3I+IHsKKyAgICAgICAgTG9jYWxDYWxsYmFja0FnZ3JlZ2F0b3IoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5
RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgICAgICA6IG1fY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgICAgIH07CiAKLSAgICAgICAgfkNh
bGxiYWNrQWdncmVnYXRvcigpCisgICAgICAgIH5Mb2NhbENhbGxiYWNrQWdncmVnYXRvcigpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTE1
NzQsMzggKzE0ODUsMzEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRT
dAogICAgICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4gbV9jb21wbGV0aW9uSGFuZGxlcjsK
ICAgICAgICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0
eURhdGE+IG1fcmVzdWx0czsKICAgICB9OwotCi0gICAgUmVmUHRyPENhbGxiYWNrQWdncmVnYXRv
cj4gY2FsbGJhY2tBZ2dyZWdhdG9yID0gYWRvcHRSZWYobmV3IENhbGxiYWNrQWdncmVnYXRvcihX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IGVuc3VyZVByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Ci0gICAg
ICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcykuZ2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdh
dG9yLCBwcm9jZXNzUG9vbF0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
VGhpcmRQYXJ0eURhdGE+JiYgZGF0YSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVn
YXRvci0+YWRkUmVzdWx0KFdURk1vdmUoZGF0YSkpOwotICAgICAgICAgICAgfSk7CisgICAgCisg
ICAgYXV0byBsb2NhbENhbGxiYWNrQWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBMb2NhbENhbGxi
YWNrQWdncmVnYXRvcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworICAgIAorICAgIGF1
dG8gd3RmQ2FsbGJhY2tBZ2dyZWdhdG9yID0gV1RGOjpDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBsb2NhbENhbGxiYWNrQWdn
cmVnYXRvcl0geworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmdldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhU3VtbWFyeShtX3Nlc3Npb25JRCwgW2xvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yXShW
ZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiBk
YXRhKSB7CisgICAgICAgICAgICBsb2NhbENhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVzdWx0KFdU
Rk1vdmUoZGF0YSkpOwogICAgICAgICB9KTsKLSAgICB9CisgICAgfSk7CisgICAgCisgICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkK
KyAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVk
aWF0ZWx5KFt3dGZDYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZh
dGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5z
Y2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3Vs
ZEdyYW5kZmF0aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVC
bG9ja2luZ1VwZGF0ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNj
aGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVk
dWxlQ29va2llQmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5k
RGF0YVJlY29yZHNQcm9jZXNzaW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE2MTQsMjQgKzE1MTgsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzY2hlZHVsZVN0YXRpc3RpYwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9j
ZXNzaW5nKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRh
UmVjb3Jkc1Byb2Nlc3NpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFi
bGVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5zdGF0
aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnN0YXRpc3Rp
Y3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFVS
TCYgdXJsLCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTE2NDMsMjIgKzE1MzYsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRMYXN0U2Vlbihjb25zdAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIHByb2Nlc3MtPnNldExhc3RTZWVuKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRMYXN0U2VlbihtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgc2Vjb25kcywgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkb21h
aW5JREV4aXN0c0luRGF0YWJhc2UoaW50IGRvbWFpbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKG1fc2Vz
c2lvbklELCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kb21haW5J
REV4aXN0c0luRGF0YWJhc2UobV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNG
b3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHRvcEZyYW1lVXJsMSwgY29uc3Qg
VVJMJiB0b3BGcmFtZVVybDIsIFNlY29uZHMgbGFzdFNlZW4sIGJvb2wgaGFkVXNlckludGVyYWN0
aW9uLCBTZWNvbmRzIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGJvb2wgaXNHcmFuZGZhdGhl
cmVkLCBib29sIGlzUHJldmFsZW50LCBib29sIGlzVmVyeVByZXZhbGVudCwgdW5zaWduZWQgZGF0
YVJlY29yZHNSZW1vdmVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xNjcwLDEwICsxNTU1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJn
ZVN0YXRpc3RpY0ZvcgogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3MtPm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BG
cmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwg
bGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwg
aXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jk
c1JlbW92ZWQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0
b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFs
ZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3Rpbmco
Y29uc3QgVVJMJiB1cmwsIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2ODUsMTggKzE1NjcsMTQg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdAogCiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmluc2VydEV4cGlyZWRTdGF0aXN0
aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJl
bW92YWwsIGlzUHJldmFsZW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9y
VGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
aGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFs
LCBpc1ByZXZhbGVudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJv
b2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChtX3Nl
c3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTcwNCw4ICsxNTgyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRJ
c1J1bm5pbmdSZXNvdQogICAgIHVzZUV4cGxpY2l0SVRQU3RhdGUoKTsKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNl
dElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1fc2Vzc2lvbklELCB2YWx1ZSwg
W3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwg
dmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoV2ViUGFnZVByb3h5SWRlbnRpZmllciBw
YWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJiBkb21haW5zKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MTYsNyArMTU5Myw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IHdlYlBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRy
aWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIApAQCAt
MTcyNCw4ICsxNjAxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNl
cgogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25J
RCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9n
VXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzM5LDEwICsxNjE1LDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3RpbwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkubG9nVXNlckludGVyYWN0aW9uKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJ
bnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3NTQsMTMgKzE2MjcsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgICAgIHByb2Nlc3MtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRp
b25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0hhZFVzZXJJbnRlcmFj
dGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omlz
UmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25zdCBV
UkwmIHRvcFVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE3NzIsMTMgKzE2MzksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVs
YXRpb25zaGlwT25sCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nl
c3MtPmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25z
dCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTc5MiwxMCArMTY1Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2Vy
SW50ZXJhY3QKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJv
Y2Vzcy0+Y2xlYXJVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwm
IHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MDksMTAgKzE2NjcsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0R3Jh
bmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MjEsMTAgKzE2NzYs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlCiAgICAgCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRVc2VJVFBE
YXRhYmFzZShtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQs
IHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0
IFVSTCYgZnJvbVVSTCwgY29uc3QgVVJMJiB0b1VSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgzMyw2MiArMTY4NSwzOCBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtE
ZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9VUkwgfSwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5r
RGVjb3JhdGlvbkZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0
aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5yZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNv
cmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyhjb25z
dCBVUkwmIHVybCwgYm9vbCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmRlbGV0ZUNvb2tpZXNG
b3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpbmNsdWRlSHR0cE9ubHlD
b29raWVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzTG9jYWxTdG9yYWdlKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxl
dGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzTG9jYWxTdG9yYWdl
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSXNv
bGF0ZWRTZXNzaW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5oYXNJc29sYXRlZFNlc3Npb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFu
ZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNJc29sYXRlZFNlc3Npb24obV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGJvb2wgZW5h
YmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoZW5hYmxlZCwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRT
aG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKQEAgLTE5MTksMTAgKzE3NDcs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29rCiAgICAgICAgICAg
ICB3ZWJQcm9jZXNzLnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoYmxvY2tpbmdNb2Rl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lvbklELCBi
bG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShtX3Nlc3Npb25JRCwg
YmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkzMCwxMCArMTc1NSw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3QKICAgICBhdXRvIGZsYWcgPSBl
bmFibGVkID8gV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6OlllcyA6
IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRT
aG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklE
LCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNldFNob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3Rpbmco
bV9zZXNzaW9uSUQsIGZsYWcsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NDEsMjAgKzE3NjMsMTQgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIGF1dG8gbW9kZSA9IGVuYWJsZWQgPyBXZWJDb3JlOjpGaXJzdFBh
cnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llcyA6IFdlYkNvcmU6OkZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpOb25lOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyht
X3Nlc3Npb25JRCwgbW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRl
c3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNp
dGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFRvU2FtZVNpdGVTdHJp
Y3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZmly
c3RQYXJ0eVVSTCwgY29uc3QgVVJMJiBjbmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk2Niw4ICsxNzgyLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFydHlIb3N0
Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJzdFBhcnR5VVJMLmhvc3QoKS50
b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5
SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmlyc3RQYXJ0eVVSTC5ob3N0
KCkudG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBjbmFtZVVSTCB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKGNv
bnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTE5NzksMTggKzE3OTQsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRSZXNvdXJjZUxvYWRTdAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRl
c3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRo
aXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
ICNlbmRpZiAvLyBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnN5bmNMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTeW5jTG9jYWxTdG9yYWdlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZSgpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VD
YXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTk4LDggKzE4MDgsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwCiAjaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nl
c3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFs
ZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzZWNvbmRzKTsKICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwpAQCAtMjAwOSwyNiArMTgxOCwxMiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENh
Y2hlTWF4QWdlQ2FwCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBG
b3JQcmV2YWxlbnRSZXNvdXJjZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwogI2VuZGlmCiB9CiAKLWJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vz
c1Bvb2woV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKSBjb25zdAotewotICAgIGlmIChhdXRv
KiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9IHByb2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUoKSkK
LSAgICAgICAgcmV0dXJuIHByb2Nlc3NQb29sRGF0YVN0b3JlID09IHRoaXM7Ci0gICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICByZXR1cm4gbmV0d29ya1Byb2Nlc3NQcm94eS0+aGFzU2Vzc2lvbihtX3Nlc3Npb25J
RCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9v
bD4+IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyhzaXplX3QgbGltaXQpIGNvbnN0CiB7
CiAgICAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBwcm9jZXNzUG9vbHM7CkBAIC0y
MDQzLDkgKzE4MzgsNiBAQCBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVE
CiAgICAgaWYgKHByb2Nlc3NQb29scy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYg
d2UncmUgb25lIG9mIHRoZSBsZWdhY3kgZGF0YSBzdG9yZXMuCiAgICAgICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgICAgIGlmICghaXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woKnByb2Nlc3NQb29sKSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLQogICAgICAgICAgICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9j
ZXNzUG9vbCk7CiAgICAgICAgICAgICBpZiAocHJvY2Vzc1Bvb2xzLnNpemUoKSA9PSBsaW1pdCkK
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIwODQsOCArMTg3Niw3IEBAIHN0YXRpYyBTdHJp
bmcgY29tcHV0ZU1lZGlhS2V5RmlsZShjb25zdCAKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjph
bGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJ
bmZvKiBjZXJ0aWZpY2F0ZSwgY29uc3QgU3RyaW5nJiBob3N0KQogewotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3Bl
Y2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZv
KCksIGhvc3QpLCAwKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNh
dGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CiB9CiAKIFZlY3RvcjxXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbkRhdGE+IFdlYnNpdGVEYXRhU3RvcmU6Om1lZGlhS2V5T3JpZ2lucyhjb25z
dCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkpCkBAIC0yMTQwLDYgKzE5MzEsNDkg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVNZWRpYUtleXMoYwogICAgIH0KIH0KIAor
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJv
Y2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mbyYpPiYmIHJlcGx5KQoreworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKHdlYlByb2Nlc3NQcm94eSwgW3Ro
aXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB3ZWJQcm9jZXNzUHJveHkgPSBtYWtl
V2Vha1B0cih3ZWJQcm9jZXNzUHJveHkpLCByZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYXV0byYg
Y29ubmVjdGlvbkluZm8pIG11dGFibGUgeworICAgICAgICBpZiAoVU5MSUtFTFkoIUlQQzo6Q29u
bmVjdGlvbjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVjdGlvbkluZm8uaWRlbnRpZmllcigpKSAm
JiB3ZWJQcm9jZXNzUHJveHkgJiYgd2Vha1RoaXMpKSB7CisgICAgICAgICAgICB0ZXJtaW5hdGVO
ZXR3b3JrUHJvY2VzcygpOworICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUYoaXNQZXJzaXN0ZW50
KCksIFByb2Nlc3MsICJnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246IEZhaWxlZCBmaXJzdCBh
dHRlbXB0LCByZXRyeWluZyIpOworICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5nZXROZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKndlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJlcGx5KGNvbm5lY3Rpb25J
bmZvKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vz
c0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYpCit7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRpZFRlcm1pbmF0ZSgpOworICAgIG1fbmV0
d29ya1Byb2Nlc3MgPSBudWxscHRyOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnRlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX25ldHdvcmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsKKyAgICBtX25l
dHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5k
TmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZW5kUHJlcGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25JbW1pbmVudDo6Tm8sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29y
a1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCkKK3sKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOwor
fQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgp
Cit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOworfQorCiBi
b29sIFdlYnNpdGVEYXRhU3RvcmU6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgY29u
c3QKIHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjE2OSwxNyAr
MjAwMywxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0CiAgICAg
ICAgIAogICAgICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwogICAgICAgICAK
LSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25J
RCwgdHJ1ZSkpOworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwg
dHJ1ZSksIDApOworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCiAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lv
bihNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
dHJ1ZSksIG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxz
ZSkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSksIDAp
OworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAgICAg
cHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGZhbHNlKSwgbV9zZXNzaW9u
SUQpOwotICAgIH0KIAogICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgPSBmYWxz
ZTsKICNlbHNlCkBAIC0yMTkxLDggKzIwMjMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0
aW5nQ2FsbGJhY2soRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjYWxsYmFjaykKIHsK
ICAgICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKQotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQ
cm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0
aW5nRXZlbnQodHJ1ZSksIDApOwogICAgIH0KICAgICAKICAgICBtX3N0YXRpc3RpY3NUZXN0aW5n
Q2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKQEAgLTIyMTEsOCArMjA0Miw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3QKIAogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShtX3Nlc3Npb25JRCwgZW5hYmxlZCwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKICAgICBVTlVT
RURfUEFSQU0oY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMjIyNywyMCArMjA1NywxNSBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5pc1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgorICAgIG5ldHdv
cmtQcm9jZXNzKCkuaXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vzc2lvbklE
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisjZWxzZQogICAgIGNvbXBsZXRpb25IYW5k
bGVyKGZhbHNlKTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShib29sIGVuYWJsZWQpCiB7Ci0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoZW5hYmxlZCk7
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoZW5h
YmxlZCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjI2
Miw0OCArMjA4NywxOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUmVzb3VyY2VMb2Fk
CiB9CiAjZW5kaWYKIAotVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gV2Vic2l0ZURhdGFTdG9yZTo6
cGVuZGluZ0Nvb2tpZXMoKSBjb25zdAotewotICAgIHJldHVybiBjb3B5VG9WZWN0b3IobV9wZW5k
aW5nQ29va2llcyk7Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tp
ZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVz
LnJlbW92ZUlmKFsmY29va2llXShhdXRvJiBwZW5kaW5nQ29va2llKSB7Ci0gICAgICAgIHJldHVy
biBwZW5kaW5nQ29va2llLmlzS2V5RXF1YWwoY29va2llKTsKLSAgICB9KTsKLSAgICBtX3BlbmRp
bmdDb29raWVzLmFkZChjb29raWUpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92
ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9w
ZW5kaW5nQ29va2llcy5yZW1vdmUoY29va2llKTsKLX0KLSAgICAKLXZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcygpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5jbGVh
cigpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZsdXNoQ29va2llcyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6
OmFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+Zmx1c2hDb29raWVzKHNl
c3Npb25JRCgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNz
KCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVG
b3JXZWJTb2NrZXQoYm9vbCBhbGxvd3MpCiB7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDog
V2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKSwgTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldDo6UmVw
bHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChh
bGxvd3MpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yV2ViU29ja2V0OjpSZXBseSgpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKCkKIHsKLSAgICBmb3IgKGF1dG8gcHJvY2Vzc1Bvb2wg
OiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5jbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCgpKTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckNhY2hlZENyZWRlbnRpYWxz
KHNlc3Npb25JRCgpKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGlzcGF0Y2hP
blF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKQEAgLTIzMjksOCArMjEyNSw2IEBA
IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3QKIAogICAgIHJlc29sdmVE
aXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7CiAKLSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVz
ID0gcGVuZGluZ0Nvb2tpZXMoKTsKLQogICAgIGF1dG8gcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eSgpOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5SGFuZGxlOwogICAgIGlmICghcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eS5pc0VtcHR5KCkpCkBAIC0yNDM1LDcgKzIyMjksMTAgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMgV2Vic2l0ZURhdGFTdAogICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZWQgPSBtX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkOwogI2VuZGlmCiAgICAgcGxhdGZvcm1TZXROZXR3b3JrUGFy
YW1ldGVycyhwYXJhbWV0ZXJzKTsKLQorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFwcEhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRy
YWNraW5nUGVybWlzc2lvbiA9IGhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlz
c2lvbigpOworI2VuZGlmCisgICAgCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiB9CiAKQEAgLTI0
NjUsMTAgKzIyNjIsNiBAQCBBUEk6OkhUVFBDb29raWVTdG9yZSYgV2Vic2l0ZURhdGFTdG9yZTo6
CiAgICAgcmV0dXJuICptX2Nvb2tpZVN0b3JlOwogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCkKLXsKLX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFn
ZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgaWYgKCFpc1BlcnNpc3RlbnQoKSkgewpAQCAtMjQ3NiwyMyArMjI2OSwxNSBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURlCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpLmdl
dExvY2FsU3RvcmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgewotICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7Ci0gICAgICAgIH0pOwotICAgICAg
ICAvLyBGSVhNRTogU3VwcG9ydCBmZXRjaGluZyBmcm9tIG11bHRpcGxlIHBvb2xzLgotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUKCFjb21wbGV0aW9uSGFuZGxlcik7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMp
IHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7CisgICAgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YShDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UXVvdGEo
bV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZP
Uk0oQ09DT0EpCkBAIC0yNTE4LDcgKzIzMDMsMTIgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpo
dHRwM0VuYWJsZWQoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZgorCitib29sIFdl
YnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNv
bnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmIC8vICFQTEFURk9S
TShDT0NPQSkKIAogI2lmICFVU0UoR0xJQikKIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQpAQCAtMjUzMCwzNSAr
MjMyMCwxOCBAQCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiBvbGRO
YW1lLCBVUkwmJiBuZXdOYW1lLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigqdGhpcyk7Ci0gICAgICAgICAgICBuZXR3b3Jr
UHJvY2Vzcy0+cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgb2xkTmFtZSwg
bmV3TmFtZSwgZGF0YVR5cGVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgICAgICB9
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YSht
X3Nlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgZGF0YVR5cGVzLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPmhhc0FwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0Fw
cEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBwQm91bmRTZXNzaW9uKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jbGVhckFwcEJv
dW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJBcHBCb3VuZFNlc3Npb24o
bV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTI1ODAsNyAr
MjM1Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG8KIAogICAg
IHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhnbG9iYWxEZWZhdWx0RGF0YVN0b3JlKCkuZ2V0KCks
ICphcHBCb3VuZERvbWFpbnMpOwogCi0gICAgZm9yIChhdXRvKiBzdG9yZSA6IG5vbkRlZmF1bHRE
YXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAgZm9yIChhdXRvKiBzdG9yZSA6IGFsbERhdGFTdG9y
ZXMoKS52YWx1ZXMoKSkKICAgICAgICAgcHJvcGFnYXRlQXBwQm91bmREb21haW5zKHN0b3JlLCAq
YXBwQm91bmREb21haW5zKTsKIH0KIApAQCAtMjU4OCwxMCArMjM2MSw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW4KIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRBcHBCb3VuZERvbWFpbnNG
b3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEFwcEJvdW5k
RG9tYWluc0ZvclJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAjZW5kaWYKIApAQCAtMjU5OSwxNiArMjM2OSwy
NiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50CiB7CiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoYnVuZGxlSWRlbnRpZmllciwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIo
YnVuZGxlSWRlbnRpZmllciwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
Y2xlYXJCdW5kbGVJZGVudGlmaWVyKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKK30KKworc3RhdGljIGJvb2wgbmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoU2hvdWxkRmFp
bEZvclRlc3RpbmcgeyBmYWxzZSB9OworCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1ha2VOZXh0
TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpCit7CisgICAgbmV4dE5ldHdvcmtQ
cm9jZXNzTGF1bmNoU2hvdWxkRmFpbEZvclRlc3RpbmcgPSB0cnVlOworfQorCitib29sIFdlYnNp
dGVEYXRhU3RvcmU6OnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZygpCit7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobmV4dE5ldHdvcmtQcm9jZXNzTGF1
bmNoU2hvdWxkRmFpbEZvclRlc3RpbmcsIGZhbHNlKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUu
aAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBACiAK
ICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5o
PgorI2luY2x1ZGUgPHd0Zi9PU09iamVjdFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2lu
L1hQQ1NQSS5oPgogI2VuZGlmCiAKICNpZiBVU0UoQ1VSTCkKQEAgLTc5LDYgKzgxLDcgQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBBdXRoZW50aWNhdG9yTWFuYWdlcjsKIGNsYXNzIFNlY0tl
eVByb3h5U3RvcmU7CiBjbGFzcyBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTsKK2NsYXNzIE5ldHdv
cmtQcm9jZXNzUHJveHk7CiBjbGFzcyBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcjsKIGNsYXNz
IFdlYkNlcnRpZmljYXRlSW5mbzsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKQEAgLTg4LDYgKzkxLDgg
QEAgY2xhc3MgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOwogZW51bSBjbGFzcyBDYWNo
ZU1vZGVsIDogdWludDhfdDsKIGVudW0gY2xhc3MgV2Vic2l0ZURhdGFGZXRjaE9wdGlvbiA6IHVp
bnQ4X3Q7CiBlbnVtIGNsYXNzIFdlYnNpdGVEYXRhVHlwZSA6IHVpbnQzMl90OworCitzdHJ1Y3Qg
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mbzsKIHN0cnVjdCBXZWJzaXRlRGF0YVJlY29yZDsK
IHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczsKIApAQCAtMTEzLDcgKzExOCwxMiBA
QCBwdWJsaWM6CiAgICAgV2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURhdGFTdG9yZUNvbmZp
Z3VyYXRpb24+JiYsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB+V2Vic2l0ZURhdGFTdG9yZSgpOwog
Ci0gICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9y
ZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaFdl
YnNpdGVEYXRhU3RvcmUoRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0YVN0b3JlJik+JiYpOworICAg
IAorICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKCkgY29uc3Q7CisgICAg
TmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MoKTsKKworICAgIHN0YXRpYyBXZWJz
aXRlRGF0YVN0b3JlKiBleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25J
RCk7CiAKICAgICBib29sIGlzUGVyc2lzdGVudCgpIGNvbnN0IHsgcmV0dXJuICFtX3Nlc3Npb25J
RC5pc0VwaGVtZXJhbCgpOyB9CiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3Qg
eyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTEyMyw2ICsxMzMsMTUgQEAgcHVibGljOgogICAg
IAogICAgIGNvbnN0IFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIHByb2Nlc3NlcygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvY2Vzc2VzOyB9CiAKKyAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8mKT4mJik7CisgICAgdm9pZCB0ZXJtaW5hdGVO
ZXR3b3JrUHJvY2VzcygpOworICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3Vz
cGVuZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNl
bmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKKyAgICB2
b2lkIHNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOworICAgIHZvaWQgbmV0d29ya1Byb2Nl
c3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKTsKKyAgICBzdGF0aWMgdm9pZCBtYWtlTmV4
dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKTsKKyAgICBzdGF0aWMgYm9vbCBz
aG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKTsKKwogICAg
IGJvb2wgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wpOwogICAgIGJvb2wgcmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RlYnVnTW9kZSgpIGNvbnN0OwpAQCAtMjM5LDE1ICsyNTgsOCBAQCBwdWJs
aWM6CiAKICAgICBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSYgZGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UoKSB7IHJldHVybiBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlLmdldCgpOyB9CiAKLSAgICBX
ZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwot
ICAgIGJvb2wgaXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmKSBjb25zdDsK
LQogICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHBhcmFtZXRlcnMoKTsKIAotICAgIFZl
Y3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29raWVzKCkgY29uc3Q7Ci0gICAgdm9pZCBh
ZGRQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwotICAgIHZvaWQgcmVtb3Zl
UGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIGNsZWFyUGVu
ZGluZ0Nvb2tpZXMoKTsKICAgICB2b2lkIGZsdXNoQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJDYWNoZWRDcmVkZW50aWFscygpOwogCkBAIC0yNTUs
NiArMjY3LDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0aW9u
PHZvaWQoKT4mJik7CiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICB2b2lkIHNlbmROZXR3b3Jr
UHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYpOworICAgIHZv
aWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb0FsbFdlYlByb2Nlc3NlcygpOworI2Vu
ZGlmCisKICNpZiBVU0UoQ1VSTCkKICAgICB2b2lkIHNldE5ldHdvcmtQcm94eVNldHRpbmdzKFdl
YkNvcmU6OkN1cmxQcm94eVNldHRpbmdzJiYpOwogICAgIGNvbnN0IFdlYkNvcmU6OkN1cmxQcm94
eVNldHRpbmdzJiBuZXR3b3JrUHJveHlTZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fcHJveHlT
ZXR0aW5nczsgfQpAQCAtMjgwLDggKzI5Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1vY2tX
ZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24oV2ViQ29yZTo6TW9ja1dlYkF1dGhlbnRpY2F0
aW9uQ29uZmlndXJhdGlvbiYmKTsKICNlbmRpZgogCi0gICAgdm9pZCBkaWRDcmVhdGVOZXR3b3Jr
UHJvY2VzcygpOwotCiAgICAgY29uc3QgV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24mIGNv
bmZpZ3VyYXRpb24oKSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24uZ2V0KCk7IH0KIAogICAgIFdl
YnNpdGVEYXRhU3RvcmVDbGllbnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50LmdldCgpOyB9
CkBAIC0yOTEsNiArMzA2LDggQEAgcHVibGljOgogCiAgICAgdm9pZCByZW5hbWVPcmlnaW5Jbldl
YnNpdGVEYXRhKFVSTCYmLCBVUkwmJiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBib29sIG5ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpOworCiAjaWYgRU5BQkxFKERFVklDRV9P
UklFTlRBVElPTikKICAgICBXZWJEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRy
b2xsZXImIGRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcigpIHsgcmV0
dXJuIG1fZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyOyB9CiAjZW5k
aWYKQEAgLTM2Nyw3ICszODQsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1l
ZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksIFdhbGxUaW1l
IG1vZGlmaWVkU2luY2UpOwogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBT
dHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksIGNvbnN0IEhhc2hTZXQ8V2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhPiYpOwogCi0gICAgdm9pZCBtYXliZVJlZ2lzdGVyV2l0aFNlc3Np
b25JRE1hcCgpOworICAgIHZvaWQgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAKICNpZiBF
TkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpCiAgICAgc3RhdGljIE9wdGlvbmFsPEhhc2hTZXQ8V2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4+PiBhcHBCb3VuZERvbWFpbnNJZkluaXRpYWxpemVkKCk7
CkBAIC00MDcsOCArNDI0LDYgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpTb3VwTmV0d29ya1By
b3h5U2V0dGluZ3MgbV9uZXR3b3JrUHJveHlTZXR0aW5nczsKICNlbmRpZgogCi0gICAgSGFzaFNl
dDxXZWJDb3JlOjpDb29raWU+IG1fcGVuZGluZ0Nvb2tpZXM7Ci0gICAgCiAgICAgV2Vha0hhc2hT
ZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3NlczsKIAogICAgIGJvb2wgbV9pc0l0cFN0YXRl
RXhwbGljaXRseVNldCB7IGZhbHNlIH07CkBAIC00MjksNiArNDQ0LDcgQEAgcHJpdmF0ZToKICAg
ICBVbmlxdWVSZWY8V2Vic2l0ZURhdGFTdG9yZUNsaWVudD4gbV9jbGllbnQ7CiAKICAgICBSZWZQ
dHI8QVBJOjpIVFRQQ29va2llU3RvcmU+IG1fY29va2llU3RvcmU7CisgICAgUmVmUHRyPE5ldHdv
cmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAKICNpZiBIQVZFKEFQUF9TU08pCiAg
ICAgVW5pcXVlUmVmPFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yPiBtX3NvQXV0aG9yaXphdGlv
bkNvb3JkaW5hdG9yOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEv
Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQko
cmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEv
Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCAr
MjgsMTIgQEAKIAogI2ltcG9ydCAiQ29va2llU3RvcmFnZVV0aWxzQ0YuaCIKICNpbXBvcnQgIkRl
ZmF1bHRXZWJCcm93c2VyQ2hlY2tzLmgiCisjaW1wb3J0ICJOZXR3b3JrUHJvY2Vzc1Byb3h5Lmgi
CiAjaW1wb3J0ICJTYW5kYm94VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJTdG9yYWdlTWFuYWdlci5o
IgogI2ltcG9ydCAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgiCiAjaW1wb3J0ICJXZWJQ
cmVmZXJlbmNlc0tleXMuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgogI2ltcG9ydCAi
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCiAjaW1wb3J0ICJXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycy5oIgogI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24u
aD4KQEAgLTQ0LDYgKzQ2LDcgQEAKICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2lt
cG9ydCA8d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4KKyNpbXBv
cnQgPHd0Zi9jb2NvYS9FbnRpdGxlbWVudHMuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC01NjIsNCArNTY1LDI4IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVpbml0aWFsaXplQXBwQm8KIH0KICNlbmRpZgogCiti
b29sIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0
aW5nKGNvbnN0IFN0cmluZyYgZW50aXRsZW1lbnQpCit7CisgICAgcmV0dXJuIFdURjo6aGFzRW50
aXRsZW1lbnQobmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSwg
ZW50aXRsZW1lbnQudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5
JiBwcm9jZXNzKQoreworICAgIGlmIChwcm9jZXNzLnN0YXRlKCkgIT0gQXV4aWxpYXJ5UHJvY2Vz
c1Byb3h5OjpTdGF0ZTo6UnVubmluZykKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIGNvbm5l
Y3Rpb24gPSBwcm9jZXNzLmNvbm5lY3Rpb24oKTsKKyAgICBpZiAoIWNvbm5lY3Rpb24pCisgICAg
ICAgIHJldHVybjsKKyAgICBhdXRvIG1lc3NhZ2UgPSBuZXR3b3JrUHJvY2VzcygpLnhwY0VuZHBv
aW50TWVzc2FnZSgpOworICAgIGlmICghbWVzc2FnZSkKKyAgICAgICAgcmV0dXJuOworICAgIHhw
Y19jb25uZWN0aW9uX3NlbmRfbWVzc2FnZShjb25uZWN0aW9uLT54cGNDb25uZWN0aW9uKCksIG1l
c3NhZ2UpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1hQ
Q0VuZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byYgcHJvY2VzcyA6
IG1fcHJvY2Vzc2VzKQorICAgICAgICBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2Vi
UHJvY2Vzcyhwcm9jZXNzKTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3Jl
Q3VybC5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw4ICs0Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TmV0d29ya1Byb3h5U2UK
IHsKICAgICBtX3Byb3h5U2V0dGluZ3MgPSBXVEZNb3ZlKHByb3h5U2V0dGluZ3MpOwogCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX3Nlc3Npb25JRCwgbV9wcm94eVNldHRpbmdzKSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0
d29ya1Byb3h5U2V0dGluZ3MobV9zZXNzaW9uSUQsIG1fcHJveHlTZXR0aW5ncyksIDApOwogfQog
CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNp
dGVEYXRhU3RvcmVTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcAkocmV2aXNpb24gMjY3
NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRl
RGF0YVN0b3JlU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQxLDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdvcgogICAgIG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5pZ25vcmVUTFNFcnJvcnMgPSBtX2lnbm9yZVRMU0Vycm9yczsKICAgICBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucHJveHlTZXR0aW5ncyA9IG1fbmV0d29ya1Byb3h5U2V0dGluZ3M7
CiAKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3Jh
Z2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9zZXNzaW9uSUQs
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpLmdldENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVu
dFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0
b3JhZ2VUeXBlKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3Jl
ZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKQEAgLTU0LDggKzUzLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZAogICAgICAgICByZXR1cm47CiAK
ICAgICBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBlbmFibGVkOwotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vz
c1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChtX3Nlc3Npb25JRCwgbV9wZXJz
aXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9y
YWdlRW5hYmxlZChtX3Nlc3Npb25JRCwgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFi
bGVkKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SWdub3JlVExTRXJyb3Jz
KGJvb2wgaWdub3JlVExTRXJyb3JzKQpAQCAtNjQsMTUgKzYyLDEzIEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0SWdub3JlVExTRXJyb3IKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9pZ25v
cmVUTFNFcnJvcnMgPSBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRJZ25vcmVUTFNFcnJvcnMobV9z
ZXNzaW9uSUQsIG1faWdub3JlVExTRXJyb3JzKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0SWdub3JlVExTRXJyb3JzKG1fc2Vzc2lvbklE
LCBtX2lnbm9yZVRMU0Vycm9ycyksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dE5ldHdvcmtQcm94eVNldHRpbmdzKFdlYkNvcmU6OlNvdXBOZXR3b3JrUHJveHlTZXR0aW5ncyYm
IHNldHRpbmdzKQogewogICAgIG1fbmV0d29ya1Byb3h5U2V0dGluZ3MgPSBXVEZNb3ZlKHNldHRp
bmdzKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fc2Vzc2lvbklELCBtX25ldHdvcmtQ
cm94eVNldHRpbmdzKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9zZXNzaW9uSUQsIG1fbmV0d29y
a1Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xp
Yi5jcHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIv
V2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAg
dm9pZCBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoTwogICAgICAgICBpZiAoIWRh
dGFTdG9yZSkgewogICAgICAgICAgICAgLy8gUHJld2FybWVkIHByb2Nlc3NlcyBkb24ndCBoYXZl
IGEgV2Vic2l0ZURhdGFTdG9yZSB5ZXQsIHNvIHVzZSB0aGUgcHJpbWFyeSBXZWJzaXRlRGF0YVN0
b3JlIGZyb20gdGhlIFdlYlByb2Nlc3NQb29sLgogICAgICAgICAgICAgLy8gVGhlIHByb2Nlc3Mg
d29uJ3QgYmUgdXNlZCBpZiBjdXJyZW50IFdlYnNpdGVEYXRhU3RvcmUgaXMgZGlmZmVyZW50IHRo
YW4gdGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgb25lLgotICAgICAgICAgICAgZGF0YVN0b3Jl
ID0gbV9wcm9jZXNzUG9vbC0+d2Vic2l0ZURhdGFTdG9yZSgpOworICAgICAgICAgICAgZGF0YVN0
b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwogICAgICAg
ICB9CiAKICAgICAgICAgQVNTRVJUKGRhdGFTdG9yZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5j
cHAJKHJldmlzaW9uIDI2NzUzNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2Vi
Q29va2llTWFuYWdlclByb3h5U291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHku
aCIKIAorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJDb29r
aWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogCkBAIC0z
Myw4ICszNCw4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VU
eXBlIHN0b3JhZ2VUeXBlKQogewotICAgIG1fY29va2llUGVyc2lzdGVudFN0b3JhZ2VNYXAuc2V0
KHNlc3Npb25JRCwgc3RkOjptYWtlX3BhaXIoc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSk7Ci0g
ICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFn
ZVBhdGgsIHN0b3JhZ2VUeXBlKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBl
KSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVQZXJzaXN0
ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyYgc3RvcmFnZVBhdGgs
IFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUmIHN0b3JhZ2VUeXBlKSBjb25zdApJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xT
b3VwLmNwcAkocmV2aXNpb24gMjY3NTM2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291
cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNSArMzcsNiBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBh
cmFtZXRlcnMpCiB7Ci0gICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmIGRlZmF1
bHRTZXNzaW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgIHN1cHBsZW1lbnQ8V2ViQ29va2llTWFu
YWdlclByb3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShkZWZhdWx0U2Vzc2lvblBh
cmFtZXRlcnMuc2Vzc2lvbklELCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lz
dGVudFN0b3JhZ2VQYXRoLCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVu
dFN0b3JhZ2VUeXBlKTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGRl
ZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVk
ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVk
KCk7Ci0gICAgICAgIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5pZ25vcmVUTFNFcnJvcnMgPSBt
X3dlYnNpdGVEYXRhU3RvcmUtPmlnbm9yZVRMU0Vycm9ycygpOwotICAgICAgICBkZWZhdWx0U2Vz
c2lvblBhcmFtZXRlcnMucHJveHlTZXR0aW5ncyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29y
a1Byb3h5U2V0dGluZ3MoKTsKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNvb2tpZUFjY2VwdFBv
bGljeSA9IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3k7CiAgICAgcGFyYW1ldGVycy5s
YW5ndWFnZXMgPSB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCk7CiAgICAgcGFyYW1ldGVycy5zaG91
bGRFbmFibGVJVFBEYXRhYmFzZSA9IHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uSW5mby5oCShyZXZpc2lvbiAyNjc1MzYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQQ29va2llQWNjZXB0UG9saWN5Lmg+CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0No
YW5nZUxvZwkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsOTggQEAKKzIwMjAtMDktMjQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBNb3ZlIE5ldHdvcmtQcm9jZXNzUHJveHkg
b3duZXJzaGlwIGZyb20gV2ViUHJvY2Vzc1Bvb2wgdG8gV2Vic2l0ZURhdGFTdG9yZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MDQxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW9zdCBjaGFuZ2VzIHRv
IHRlc3RzIGFyZSBqdXN0IGNhbGxpbmcgYSBmdW5jdGlvbiBvbiB0aGUgV0tXZWJzaXRlRGF0YVN0
b3JlIGluc3RlYWQgb2YgdGhlIFdLUHJvY2Vzc1Bvb2wKKyAgICAgICAgYmVjYXVzZSB3ZSB3YW50
IHRvIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBuZXR3b3JrIHByb2Nlc3MgYW5kIGl0IGhhcyBhIG5l
dyBvd25lci4KKyAgICAgICAgRXhjZXB0aW9ucyBhcmUgbm90ZWQgaW5saW5lLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5k
aW5nQ29ubmVjdGlvbi5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW06CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpkb3dubG9hZEF0UmF0ZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tOgorICAgICAgICAoVEVTVCk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNv
dmVyeS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZv
VXBncmFkZVRvVjIubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW06CisgICAg
ICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4ZWREQk11bHRpUHJvY2Vzcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW06CisgICAg
ICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW06
CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbToKKyAg
ICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
TmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW06CisgICAgICAgIChj
aGVja1JlY292ZXJ5QWZ0ZXJDcmFzaCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW06CisgICAg
ICAgIChURVNUKToKKyAgICAgICAgVGhpcyB0ZXN0IHdhcyBtYWtpbmcgYSBXS1dlYnNpdGVEYXRh
U3RvcmUsIGdldHRpbmcgaXRzIHJlc291cmNlIGxvYWQgc3RhdGlzdGljcyBkaXJlY3RvcnksCisg
ICAgICAgIHB1dHRpbmcgdGhpbmdzIGluIHRoYXQgZGlyZWN0b3J5LCB0aGVuIHN0YXJ0aW5nIHRo
ZSBuZXR3b3JrIHByb2Nlc3MgYW5kIG1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcKKyAgICAgICAgd29y
a3Mgd2hlbiBpbml0aWFsaXppbmcgdGhlIG5ldHdvcmsgcHJvY2Vzcy4gIE5vdywgbmV0d29yayBw
cm9jZXNzIGluaXRpYWxpemF0aW9uIGhhcHBlbnMgd2hlbiBhCisgICAgICAgIFdLV2Vic2l0ZURh
dGFTdG9yZSBpcyBpbnN0YW50aWF0ZWQsIHNvIHdlIG5lZWQgdG8gcHV0IHRoaW5ncyB0aGVyZSBi
ZWZvcmUgaW5zdGFudGlhdGluZyBhIFdLV2Vic2l0ZURhdGFTdG9yZS4KKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbToKKyAgICAg
ICAgQmVmb3JlIHRoaXMgY2hhbmdlLCBlYWNoIFdLUHJvY2Vzc1Bvb2wgaGFkIGl0cyBvd24gbmV0
d29yayBwcm9jZXNzLCB3aGljaCBob2xkcyB0aGUgc2VydmljZSB3b3JrZXIgcmVnaXN0cnkKKyAg
ICAgICAgZm9yIHRoZSBXZWJzaXRlRGF0YVN0b3JlcyB1c2VkIHdpdGggdGhhdCBwcm9jZXNzIHBv
b2wuICBOb3csIHRoZSBuZXR3b3JrIHByb2Nlc3Mgc3RpbGwgbmVlZHMgdG8gaGF2ZSBhIHNlcnZp
Y2UKKyAgICAgICAgd29ya2VyIHJlZ2lzdHJ5IGluIGl0LCBidXQgd2hlbiB3ZSByZWNlaXZlIGEg
bWVzc2FnZSBmcm9tIGl0IGxvb2tpbmcgZm9yIGEgd2ViIHByb2Nlc3MgdG8gcnVuIHRoZSBzZXJ2
aWNlCisgICAgICAgIHdvcmtlciwgd2UgZ28gYXJiaXRyYXJpbHkgdG8gdGhlIGZpcnN0IHByb2Nl
c3MgcG9vbCB0aGF0IGhhcyBhIHByb2Nlc3Mgd2UgY2FuIHVzZS4gIFRoaXMgbG9naWMgaXMgaW4g
CisgICAgICAgIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlv
blRvTmV0d29ya1Byb2Nlc3MuICBCZWNhdXNlIHdlIHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29s
IGVhY2gKKyAgICAgICAgdGltZSwgc2V0dGluZyB0aGUgY3VzdG9tIHVzZXIgYWdlbnQgdG8gdHdv
IGRpZmZlcmVudCB0aGluZ3MgaW4gdHdvIGRpZmZlcmVudCBwcm9jZXNzIHBvb2xzIGNhdXNlcyBv
bmx5IG9uZQorICAgICAgICB0byBiZSB1c2VkLiAgVGhpcyBpcyBub3QgYSBwcm9ibGVtIGluIHBy
YWN0aWNlLCB0aG91Z2gsIGJlY2F1c2UgdGhlIG9ubHkgYXBwbGljYXRpb24gdGhhdCB1c2VzIHRo
ZSBTUEkgdG8KKyAgICAgICAgc2V0IGEgc2VydmljZSB3b3JrZXIncyBjdXN0b20gdXNlciBhZ2Vu
dCBpcyBTYWZhcmksIHdoaWNoIG9ubHkgaGFzIG9uZSBwcm9jZXNzIHBvb2wuICBUaGlzIHRlc3Qg
c3RpbGwgdmVyaWZpZXMKKyAgICAgICAgdGhhdCBhIHVzZXIgYWdlaW50IGlzIGNvcnJlY3RseSBz
ZW50LgorICAgICAgICBTaW1pbGFybHksIHRoZSB0ZXN0cyB0aGF0IGNvdW50IHNlcnZpY2Ugd29y
a2VyIHByb2Nlc3NlcyBlaXRoZXIgaGF2ZSBkaWZmZXJlbnQgcmVzdWx0cyBvciBuZWVkIHRvIGJl
IHJ1biB3aXRoCisgICAgICAgIG9uZSBwcm9jZXNzIHBvb2wgcGVyIHBhcmVudCBwcm9jZXNzLiAg
VG8ga2VlcCB0aGUgcmVzdWx0cyB0aGUgc2FtZSwgSSBzZXBhcmF0ZWQgdGhlIHRlc3RzIGludG8g
ZGlmZmVyZW50CisgICAgICAgIFRFU1QoU2VydmljZVdvcmtlcnMsIC4uLikgbWFjcm9zIHdoaWNo
IGFyZSBydW4gaW4gc2VwYXJhdGUgcGFyZW50IHByb2Nlc3Nlcy4KKyAgICAgICAgVGhlIHRlc3Qg
UmVzdG9yZUZyb21EaXNrTm9uRGVmYXVsdFN0b3JlIG5lZWRzIHRvIHVzZSB0aGUgc2FtZSBkYXRh
IHN0b3JlIGZvciBib3RoIFdLV2ViVmlld3Mgbm93IGJlY2F1c2Ugb3RoZXJ3aXNlCisgICAgICAg
IHRoZXJlIHdhcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBzdGFydHVwIG9mIGEgbmV3IG5ldHdv
cmsgcHJvY2VzcyB0aGF0IHdhc24ndCB0aGVyZSBiZWZvcmUgYmVjYXVzZSB3ZSB3ZXJlIHVzaW5n
IHRoZQorICAgICAgICBzYW1lIHByb2Nlc3MgcG9vbCBhbmQgdGhlcmVmb3JlIHRoZSBzYW1lIG5l
dHdvcmsgcHJvY2Vzcy4gIEkgYWRkZWQgc3Bpbm5pbmcgdGhlIHJ1biBsb29wIGFuZCBzbGVlcGlu
ZyB0byBiZSBhYmxlIHRvCisgICAgICAgIHJlcHJvZHVjZSB0aGUgcmFjZSBjb25kaXRpb24gZmFp
bHVyZSBhbmQgSSB1c2UgdGhlIHNhbWUgV0tXZWJzaXRlRGF0YVN0b3JlIHRvIHVzZSB0aGUgc2Ft
ZSBuZXR3b3JrIHByb2Nlc3MsIHdoaWNoIHdhcworICAgICAgICB0aGUgaW50ZW50IG9mIHVzaW5n
IHRoZSBzYW1lIFdLUHJvY2Vzc1Bvb2wgYmVmb3JlLiAgVGhlIHRlc3Qgc3RpbGwgdGVzdHMgdGhh
dCB0aGUgcmVnaXN0cmF0aW9uIGlzIHJlLXVzZWQgd2hlbiB3ZSBhcmUKKyAgICAgICAgbm90IHVz
aW5nIHRoZSBkZWZhdWx0IGRhdGEgc3RvcmUuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW06CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbToKKyAgICAgICAgKC1b
Q2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3ZWJWaWV3OnJ1bkphdmFTY3JpcHRBbGVydFBh
bmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAg
ICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0pOgor
ICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0p
OgorICAgICAgICAoVEVTVCk6CisgICAgICAgIFRoaXMgaXMgdGhlIHdob2xlIHBvaW50IG9mIG1l
IGRvaW5nIHRoaXMuCisgICAgICAgIEkgdG9vayBhIHRlc3QgdGhhdCB3YXMgZmxha3kgb25seSBv
biBpT1MgKGJlY2F1c2Ugb2YgZGlmZmVyZW50IE5TSFRUUENvb2tpZVN0b3JhZ2Ugc3luY2luZyBi
ZWhhdmlvcikgYW5kIG1hZGUKKyAgICAgICAgaXQgZmxha3kgbm93aGVyZSAoZmluZ2VycyBjcm9z
c2VkISkgYW5kIGFkZGVkIGEgdGVzdCB0aGF0IGNvcnJlY3RseSBoYW5kbGVzIHNlc3Npb24gY29v
a2llcyBsaWtlIHdlIGNvdWxkIG5vdAorICAgICAgICBiZWZvcmUgdGhpcyBjaGFuZ2UuCisgICAg
ICAgIEkgYWxzbyByZS11c2VkIHNvbWUgdGVzdCBpbmZyYXN0cnVjdHVyZSBhbmQgbWFkZSBpdCBz
dG9wIHVzaW5nIHByb2Nlc3MtZ2xvYmFsIHN0YXRpYyB2YXJpYWJsZXMgZm9yIHRlc3Qgc3RhdGUu
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhh
bmRsZXItbGVha3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbToKKyAgICAg
ICAgKHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocyk6CisgICAgICAgIChURVNUKToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdE9iakMvQ3VzdG9tUHJvdG9jb2xzVGVz
dC5tbToKKyAgICAgICAgKC1bQ2xvc2VXaGlsZVN0YXJ0aW5nUHJvdG9jb2wgc3RhcnRMb2FkaW5n
XSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpydW5UZXN0KToKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6ZmluZEFuZER1bXBXZWJLaXRQcm9jZXNzSWRlbnRpZmllcnMpOgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6bmV0d29ya1Byb2Nlc3NEaWRDcmFzaCk6CisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQpOgorICAgICAgICBXS0Nv
bnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nIGlz
IG5vdCBuZWVkZWQsIHNvIEkgcmVtb3ZlZCBpdC4KKyAgICAgICAgV0tDb250ZXh0U2V0UHJpbWFy
eVdlYnNpdGVEYXRhU3RvcmUgaXNuJ3QgbmVlZGVkIGFueSBtb3JlIGJlY2F1c2UgV0tDb250ZXh0
UmVmIChXZWJQcm9jZXNzUG9vbCkgZG9lc24ndAorICAgICAgICBvd24gYSBuZXR3b3JrIHByb2Nl
c3MgYW55IG1vcmUsIHNvIGl0IGRvZXNuJ3QgY2FyZSB3aGljaCBpcyB0aGUgZGVmYXVsdCBXZWJz
aXRlRGF0YVN0b3JlLgorICAgICAgICBJbiBmYWN0LCB0aGUgImRlZmF1bHQiIFdlYnNpdGVEYXRh
U3RvcmUgaXNuJ3QgcmVhbGx5IGltcG9ydGFudCBpbiB0aGUgbmV0d29yayBwcm9jZXNzIGFueSBt
b3JlLgorCiAyMDIwLTA5LTI0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIE1vdmUgcHJveHkgc2V0dGluZ3MgZnJvbSBXZWJL
aXRDb250ZXh0IHRvIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgpJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVj
dGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCShyZXZpc2lvbiAyNjc1
MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0Ny
YXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzR3JvdXBQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQ
cml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCkBA
IC04Nyw3ICs4OCw3IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmQK
ICAgICBwaWRfdCB3ZWJWaWV3MlBJRCA9IFt3ZWJWaWV3Mi5nZXQoKSBfd2ViUHJvY2Vzc0lkZW50
aWZpZXJdOwogICAgIEVYUEVDVF9ORSh3ZWJWaWV3MVBJRCwgd2ViVmlldzJQSUQpOwogCi0gICAg
cGlkX3QgaW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlmZXIgPSBbcHJvY2Vzc1Bvb2wuZ2V0
KCkgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl07CisgICAgcGlkX3QgaW5pdGlhbE5ldHdvcmtQ
cm9jZXNzSWRlbnRpZmlmZXIgPSBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3Jl
IF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdOwogICAgIEVYUEVDVF9ORShpbml0aWFsTmV0d29y
a1Byb2Nlc3NJZGVudGlmaWZlciwgMCk7CiAgICAga2lsbChpbml0aWFsTmV0d29ya1Byb2Nlc3NJ
ZGVudGlmaWZlciwgU0lHS0lMTCk7CiAgICAgVXRpbDo6cnVuKCZuZXR3b3JrUHJvY2Vzc0NyYXNo
ZWQpOwpAQCAtOTYsNyArOTcsNyBAQCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NDcmFzaFdp
dGhQZW5kCiAgICAgW3dlYlZpZXcxLmdldCgpIGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVx
dWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBs
ZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVz
b3VyY2VzIl1dXTsKICAgICBbd2ViVmlldzEuZ2V0KCkgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5h
dmlnYXRpb25dOwogCi0gICAgcGlkX3QgcmVsYXVuY2hlZE5ldHdvcmtQcm9jZXNzSWRlbnRpZmll
ciA9IFtwcm9jZXNzUG9vbC5nZXQoKSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXTsKKyAgICBw
aWRfdCByZWxhdW5jaGVkTmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyID0gW2NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXTsKICAgICBF
WFBFQ1RfTkUoaW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlmZXIsIHJlbGF1bmNoZWROZXR3
b3JrUHJvY2Vzc0lkZW50aWZpZXIpOwogICAgIEVYUEVDVF9GQUxTRShuZXR3b3JrUHJvY2Vzc0Ny
YXNoZWQpOwogCkBAIC0xNDYsOCArMTQ3LDggQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNz
UmVsYXVuY2hPbkxhdQogCiAgICAgLy8gQ29uc3R1Y3RpbmcgYSBXZWJWaWV3IHN0YXJ0cyBhIG5l
dHdvcmsgcHJvY2VzcyBzbyB0ZXJtaW5hdGUgdGhpcyBvbmUuIFRoZSBwYWdlIGxvYWQgYmVsb3cg
d2lsbCB0aGVuIHJlcXVlc3QgYSBuZXR3b3JrIHByb2Nlc3MgYW5kIHdlCiAgICAgLy8gbWFrZSB0
aGlzIG5ldyBuZXR3b3JrIHByb2Nlc3MgbGF1bmNoIGNyYXNoIG9uIHN0YXJ0dXAuCi0gICAgW3By
b2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107Ci0gICAgW3Byb2Nlc3NQb29sIF9t
YWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmddOworICAgIFtXS1dlYnNp
dGVEYXRhU3RvcmUgX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZ107
CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tNb25pdG9yV2Vi
Q29udGVudENyYXNoTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CiAgICAgW3dlYlZp
ZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKQEAgLTE1OCw3ICsxNTks
NyBAQCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NSZWxhdW5jaE9uTGF1CiAgICAgRVhQRUNU
X1RSVUUobmV0d29ya1Byb2Nlc3NDcmFzaGVkKTsKICAgICBFWFBFQ1RfRkFMU0Uod2ViUHJvY2Vz
c0NyYXNoZWQpOwogICAgIEVYUEVDVF9HVChbd2ViVmlldyBfd2ViUHJvY2Vzc0lkZW50aWZpZXJd
LCAwKTsKLSAgICBFWFBFQ1RfR1QoW3Byb2Nlc3NQb29sLmdldCgpIF9uZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXJdLCAwKTsKKyAgICBFWFBFQ1RfR1QoW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0
ZURhdGFTdG9yZSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXSwgMCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvRG93bmxvYWQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQkod29ya2luZyBjb3B5
KQpAQCAtODg5LDkgKzg4OSw5IEBAIHZvaWQgZG93bmxvYWRBdFJhdGUoZG91YmxlIGRlc2lyZWRL
YnBzLCAKICAgICByZWNlaXZlZERhdGEgPSBmYWxzZTsKICAgICBVdGlsOjpydW4oJnJlY2VpdmVk
RGF0YSk7CiAgICAgLy8gU3RhcnQgdGhlIERvd25sb2FkTW9uaXRvcidzIHRpbWVyLgotICAgIFtb
d2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dy
b3VuZDpZRVNdOworICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3Jl
IF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOllFU107CiAgICAgaWYgKHJldHVyblRvRm9yZWdy
b3VuZCA9PSBBcHBSZXR1cm5zVG9Gb3JlZ3JvdW5kOjpZZXMpCi0gICAgICAgIFtbd2ViVmlldyBj
b25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpOT107
CisgICAgICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF9zeW50
aGVzaXplQXBwSXNCYWNrZ3JvdW5kOk5PXTsKICAgICBkaWRDYW5jZWwgPSBmYWxzZTsKICAgICBV
dGlsOjpydW4oJmRpZENhbmNlbCk7CiAgICAgdGVybWluYXRlU2VydmVyID0gdHJ1ZTsKSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lE
QkNoZWNrcG9pbnRXQUwubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdl
YktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1w
b3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTg2LDcgKzg3LDcgQEAgVEVTVChJ
bmRleGVkREIsIENoZWNrcG9pbnRzV0FMQXV0b21hdGljYQogICAgIFJldGFpblB0cjxXS1dlYlZp
ZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZp
Z3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRD
b250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0
ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRl
RGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBSZXRhaW5QdHI8V0tX
ZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24u
Z2V0KCldKTsKIApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJEZWxldGVSZWNvdmVyeS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCShyZXZpc2lvbiAyNjc1MzYpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQ
cm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJv
bGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJp
dmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENv
bmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAt
NTcsNyArNTgsNyBAQCBURVNUKEluZGV4ZWREQiwgRGVsZXRlUmVjb3ZlcnkpCiAgICAgUmV0YWlu
UHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1
c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0
KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8v
IENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0aGUgZGF0YWJhc2UgZGly
ZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJl
c291cmNlOkAiSURCRGVsZXRlUmVjb3ZlcnkiIHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJk
aXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwpJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdy
YWRlVG9WMi5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0
L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4K
ICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQg
PFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtNTgsNyArNTksNyBAQCBURVNUKEluZGV4
ZWREQiwgSW5kZXhVcGdyYWRlVG9WMikKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJh
dGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFs
bG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0g
YWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIi
XTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5jb25zaXN0ZW50
IGRhdGFiYXNlIGZpbGVzIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBOU1VSTCAqdXJs
MSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJbmRleFVwZ3JhZGUi
IHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJl
c291cmNlcyJdOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1Yy
Lm1tCShyZXZpc2lvbiAyNjc1MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQu
aD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBv
cnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtNTcsNyArNTgsNyBAQCBURVNUKElu
ZGV4ZWREQiwgSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkCiAgICAgUmV0YWluUHRyPFdLV2ViVmll
d0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmln
dXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENv
bnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRl
c3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVE
YXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIENvcHkgZGF0YWJh
c2UgZmlsZXMgd2l0aCBvbGQgT2JqZWN0U3RvcmVJbmZvIHNjaGVtYSB0byB0aGUgZGF0YWJhc2Ug
ZGlyZWN0b3J5LgogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxG
b3JSZXNvdXJjZTpAIklEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUiIHdpdGhFeHRlbnNpb246QCJz
cWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwpJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVBy
b2Nlc3NLaWxsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQkocmV2aXNpb24gMjY3NTM2
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRh
YmFzZVByb2Nlc3NLaWxsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW1w
b3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1Vz
ZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdD
b25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9y
ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9f
V0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4K
QEAgLTkyLDcgKzkzLDcgQEAgVEVTVChJbmRleGVkREIsIERhdGFiYXNlUHJvY2Vzc0tpbGwpCiAg
ICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsK
ICAgICAgICAgaWYgKCFraWxsZWREQlByb2Nlc3MgJiYgb3BlblJlcXVlc3RVcGdyYWRlTmVlZGVk
KSB7CiAgICAgICAgICAgICBraWxsZWREQlByb2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
KyAgICAgICAgICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJNdWx0aVByb2Nlc3MubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRy
b2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1By
b2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNo
ZWV0Lmg+CiAjaW1wb3J0IDx3dGYvRGVxdWUuaD4KQEAgLTY5LDcgKzcwLDcgQEAgVEVTVChJbmRl
eGVkREIsIEluZGV4ZWREQk11bHRpUHJvY2VzcykKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29u
ZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0
aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJv
bGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhh
bmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFT
dG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgUmV0YWluUHRyPFdLV2ViVmll
dz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNN
YWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgp
XSk7CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhl
ZERCUGVyc2lzdGVuY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQkocmV2aXNpb24gMjY3NTM2KQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0
ZW5jZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBURVNUKEluZGV4ZWREQiwg
SW5kZXhlZERCUGVyc2lzdGVuY2UpCiAgICAgd2ViVmlldyA9IG5pbDsKIAogICAgIC8vIFRlcm1p
bmF0ZSB0aGUgbmV0d29yayBwcm9jZXNzCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vz
c1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBN
YWtlIGEgbmV3IHdlYiB2aWV3IHRvIGZpbmlzaCB0aGUgdGVzdAogICAgIHdlYlZpZXcgPSBhZG9w
dE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAw
LCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwpAQCAtMjY4LDcgKzI2
OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUaGlyZFBhcnR5RnJhbWUKIAogICAgIHdl
YlZpZXcgPSBuaWw7CiAgICAgc2Vjb25kV2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKIAogICAgIC8vIFRoaXJkLXBhcnR5IElEQiBzdG9yYWdlIGlzIHN0b3JlZCBpbiB0aGUgbWVt
b3J5IG9mIG5ldHdvcmsgcHJvY2Vzcy4KICAgICBhdXRvIHRoaXJkV2ViVmlldyA9IGFkb3B0TlMo
W1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYw
MCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CkBAIC0zODUsNyArMzg1LDcg
QEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlRoaXJkUGFydHlXb3JrZQogCiAgICAgd2ViVmll
dyA9IG5pbDsKICAgICBzZWNvbmRXZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwog
CiAgICAgYXV0byB0aGlyZFdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOwogICAgIGxvYWRUZXN0UGFnZUluV2ViVmlldyh0aGlyZFdlYlZpZXcu
Z2V0KCksIEAiZGF0YWJhc2UgaXMgY3JlYXRlZCIpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1
c3BlbmRJbW1pbmVudGx5Lm1tCShyZXZpc2lvbiAyNjc1MzYpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9v
bFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTg4LDggKzg5LDggQEAgVEVTVChJ
bmRleGVkREIsIEluZGV4ZWREQlN1c3BlbmRJbW1pbmVudAogCiAgICAgcnVuVGVzdEFuZENoZWNr
UmVzdWx0KEAiQ29udGludWUiKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQ
b29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwotICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVd
OworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3Jr
UHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCku
d2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJ1
blRlc3RBbmRDaGVja1Jlc3VsdChAIkV4cGVjdGVkIEFib3J0IEZvciBTdXNwZW5zaW9uIik7CiAg
ICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiRXhwZWN0ZWQgU3VjY2VzcyBBZnRlciBSZXN1bWUi
KTsKQEAgLTE1OCw4ICsxNTksOCBAQCBURVNUKEluZGV4ZWREQiwgU3VzcGVuZEltbWluZW50bHlG
b3JUaGlyCiAgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6bWFpbkZyYW1lU3RyaW5nIGJhc2VV
Ukw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vd2Via2l0Lm9yZyJdXTsKICAgICBydW5U
ZXN0QW5kQ2hlY2tSZXN1bHQoQCJkYXRhYmFzZSBpcyBjcmVhdGVkIik7CiAKLSAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5XTsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5l
dHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRl
RGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vz
c0RpZFJlc3VtZV07CiAKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJ0cmFuc2FjdGlvbiBp
cyBjb21wbGV0ZWQiKTsKIH0KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCShyZXZp
c2lvbiAyNjc1MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBU
RVNUKEluZGV4ZWREQiwgSW5kZXhlZERCVGVtcEZpbGVTaXplKQogCiAgICAgLy8gVGVybWluYXRl
IG5ldHdvcmsgcHJvY2VzcyB0byBrZWVwIFdBTCBvbiBkaXNrLgogICAgIHdlYlZpZXcgPSBuaWw7
Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIg
ZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aF0p
OwogICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGZpbGVBdHRyaWJ1dGVzID0gW1tOU0ZpbGVN
YW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBhdHRyaWJ1dGVzT2ZJdGVtQXRQYXRoOndhbEZpbGVQYXRo
LmdldCgpLnBhdGggZXJyb3I6bmlsXTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5j
ZS5tbQkocmV2aXNpb24gMjY3NTM2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktp
dC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2lt
cG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC0xMDksNyArMTEwLDcgQEAgVEVT
VChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NDcmFzaAogICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEo
QCJzZXNzaW9uOnN0b3JhZ2UiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCi0gICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
KyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CiAKICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CkBAIC0xNjIs
NyArMTYzLDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZQogICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBF
WFBFQ1RfV0tfU1RSRVEoQCJ2YWx1ZSIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7CiAKLSAg
ICBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5l
dHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKIAogICAgIHJlYWR5VG9Db250aW51
ZSA9IGZhbHNlOwogICAgIFt3ZWJWaWV3MSBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ3aW5kb3cubG9j
YWxTdG9yYWdlLnNldEl0ZW0oJ2tleScsICduZXdWYWx1ZScpIiBjb21wbGV0aW9uSGFuZGxlcjpe
KGlkLCBOU0Vycm9yICopIHsKQEAgLTE3Nyw3ICsxNzgsNyBAQCBURVNUKFdLV2ViVmlldywgTG9j
YWxTdG9yYWdlUHJvY2Vzc1N1c3BlCiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZyZWFkeVRvQ29udGludWUpOwogICAgIAotICAgIFtwcm9jZXNzUG9vbC5nZXQoKSBfc2Vu
ZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJz
aXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgcmVjZWl2
ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZy
ZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCShyZXZpc2lvbiAyNjc1
MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9j
ZXNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW1wb3J0ICJIVFRQU2Vy
dmVyLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVdGlsaXRpZXMuaCIK
LSNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0
L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgog
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgpAQCAtMzcs
MTQgKzM3LDE0IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc0VudGl0bGVtZW50cykKIHsK
ICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOltbW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXV0pOwogICAgIFt3ZWJW
aWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBsZSJdOwotICAgIFdLUHJv
Y2Vzc1Bvb2wgKnBvb2wgPSBbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbDsKLSAg
ICBib29sIGhhc0VudGl0bGVtZW50ID0gW3Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1l
bnRGb3JUZXN0aW5nOkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0TmV0d29ya2lu
Z1NhbmRib3giXTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmUgKnN0b3JlID0gW3dlYlZpZXcgY29u
ZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZTsKKyAgICBib29sIGhhc0VudGl0bGVtZW50ID0g
W3N0b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAImNvbS5hcHBs
ZS5yb290bGVzcy5zdG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94Il07CiAjaWYgUExBVEZP
Uk0oTUFDKSAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogICAgIEVYUEVDVF9UUlVFKGhhc0Vu
dGl0bGVtZW50KTsKICNlbHNlCiAgICAgRVhQRUNUX0ZBTFNFKGhhc0VudGl0bGVtZW50KTsKICNl
bmRpZgotICAgIEVYUEVDVF9GQUxTRShbcG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVu
dEZvclRlc3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJdKTsKKyAgICBFWFBFQ1RfRkFMU0UoW3N0
b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVy
ZSBjYXNlIl0pOwogfQogCiBURVNUKFdlYktpdCwgSFRUUFJlZmVyZXIpCkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJz
aXN0ZW50RGF0YVN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUu
bW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0JKHdvcmtp
bmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIHZvaWQgY2hlY2tSZWNvdmVyeUFmdGVy
Q3Jhc2goV0tXZQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9u
ZSA9IGZhbHNlOwogCi0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBbd2ViVmlldyBs
b2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnNpbXBsZTJdXTsKICAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogfQpJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2Fw
T25OYXZpZ2F0aW9uLm1tCShyZXZpc2lvbiAyNjc1MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC01Mzg1LDcgKzUzODUsNyBAQCBURVNUKFByb2Nlc3NTd2FwLCBVc2VQcmV3YXJtZWRQ
cm9jZXNzQWZ0CiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAot
ICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3
Q29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXcyID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOndl
YlZpZXdDb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgW3dlYlZpZXcyIHNldE5hdmlnYXRpb25E
ZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Lm1tCShyZXZpc2lvbiAyNjc1MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0JKHdvcmtpbmcgY29weSkKQEAgLTcxOSw3
ICs3MTksNyBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jCiAKICAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MiA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uLmdldCgpXSk7CiAKQEAgLTc1Miw3ICs3NTIsNyBAQCBURVNUKFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGlu
UnVuTG9vcCgxKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURh
dGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MyA9
IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAw
LCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKQEAgLTE1
NTgsMTAgKzE1NTgsOCBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE1pZ3JhdGVEYXRh
CiAKIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRo
Tm9Qcm9jZXNzUG9vbCkKIHsKKyAgICBOU1VSTCAqaXRwUm9vdFVSTCA9IFtOU1VSTCBmaWxlVVJM
V2l0aFBhdGg6W05TVGVtcG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29t
cG9uZW50OkAiQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbFRlc3QiXSBpc0Rp
cmVjdG9yeTpZRVNdOwogICAgIGF1dG8gZGVmYXVsdEZpbGVNYW5hZ2VyID0gW05TRmlsZU1hbmFn
ZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9u
ICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJh
dGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKLSAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNp
dGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmln
dXJhdGlvbl0gYXV0b3JlbGVhc2VdOwotICAgIE5TVVJMICppdHBSb290VVJMID0gW1tkYXRhU3Rv
cmUgX2NvbmZpZ3VyYXRpb25dIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5XTsKICAg
ICBOU1VSTCAqZmlsZVVSTCA9IFtpdHBSb290VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVu
dDpAIm9ic2VydmF0aW9ucy5kYiJdOwogICAgIFtkZWZhdWx0RmlsZU1hbmFnZXIgcmVtb3ZlSXRl
bUF0UGF0aDppdHBSb290VVJMLnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfRkFMU0UoW2Rl
ZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOml0cFJvb3RVUkwucGF0aF0pOwpAQCAt
MTU3Miw2ICsxNTcwLDEwIEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgQ2FuQWNjZXNz
RGEKICAgICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6
bmV3RmlsZVVSTC5wYXRoXSk7CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciBjb3B5SXRlbUF0UGF0
aDpuZXdGaWxlVVJMLnBhdGggdG9QYXRoOmZpbGVVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVY
UEVDVF9UUlVFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpmaWxlVVJMLnBh
dGhdKTsKKworICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVD
b25maWd1cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1
dG9yZWxlYXNlXTsKKyAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLl9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5ID0gaXRwUm9vdFVSTDsKKyAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tX
S1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3Jl
Q29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkOllFU107CiAKICAgICBzdGF0aWMgYm9vbCBkb25lRmxhZyA9
IGZhbHNlOwpAQCAtMTYzMywxMiArMTYzNSwxMiBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MsIFN0b3JlU3VzcGVuCiAgICAgW3dlYlZpZXcyIF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZp
Z2F0aW9uXTsKIAogICAgIGRvbmVGbGFnID0gZmFsc2U7Ci0gICAgW3NoYXJlZFByb2Nlc3NQb29s
IF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOl57CisgICAgW2RhdGFTdG9yZTEg
X3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6XnsKICAgICAgICAgZG9uZUZsYWcg
PSB0cnVlOwogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcp
OwogCi0gICAgW3NoYXJlZFByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVd
OworICAgIFtkYXRhU3RvcmUxIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogfQogCiBA
aW50ZXJmYWNlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTY2hlbWVIYW5kbGVyIDogTlNPYmplY3Qg
PFdLVVJMU2NoZW1lSGFuZGxlcj4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCShyZXZpc2lv
biAyNjc1MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZp
Y2VXb3JrZXJCYXNpYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTU4LDcgKzU1OCw3IEBAIFRFU1Qo
U2VydmljZVdvcmtlcnMsIFVzZXJBZ2VudE92ZXJyaWRlKQogCiAgICAgY29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAKLSAgICBt
ZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5kbGVyIGFsbG9j
XSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6IEJhciBDdXN0
b20gVXNlckFnZW50Il0pOworICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1NXVXNlckFn
ZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNzYWdlOkAiTWVzc2Fn
ZSBmcm9tIHdvcmtlcjogRm9vIEN1c3RvbSBVc2VyQWdlbnQiXSk7CiAgICAgW1tjb25maWd1cmF0
aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6bWVzc2Fn
ZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07CiAKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBj
b25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTYzMyw4ICs2MzMsNiBAQCBU
RVNUKFNlcnZpY2VXb3JrZXJzLCBDYWNoZVN0b3JhZ2VSZXN0b3JlCiAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7CiAKLSAgICBbV0tXZWJzaXRl
RGF0YVN0b3JlIF9kZWxldGVEZWZhdWx0RGF0YVN0b3JlRm9yVGVzdGluZ107Ci0KICAgICBTZXJ2
aWNlV29ya2VyVENQU2VydmVyIHNlcnZlcih7CiAgICAgICAgIHsgInRleHQvaHRtbCIsIG1haW5D
YWNoZVN0b3JhZ2VCeXRlcyB9CiAgICAgfSwgewpAQCAtOTgyLDYgKzk4MCw3IEBAIFRFU1QoU2Vy
dmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXMKIAogICAgIFJldGFpblB0cjxXS1dlYlZp
ZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZp
Z3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBzZXRDb25maWd1cmF0aW9uSW5qZWN0ZWRCdW5k
bGVQYXRoKGNvbmZpZ3VyYXRpb24uZ2V0KCkpOworICAgIFJldGFpblB0cjxXS1Byb2Nlc3NQb29s
PiBvcmlnaW5hbFByb2Nlc3NQb29sID0gY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbDsK
IAogICAgIGRvbmUgPSBmYWxzZTsKIApAQCAtMTAzNSw3ICsxMDM0LDcgQEAgVEVTVChTZXJ2aWNl
V29ya2VycywgU2VydmljZVdvcmtlclByb2NlcwogICAgIGRvbmUgPSBmYWxzZTsKIAogICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IGxvYWRpbmcgdGhlIHNpbXBsZSBwYWdlIGRpZCBub3Qgc3RhcnQgdGhl
IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCi0gICAgRVhQRUNUX0VRKDB1LCB3ZWJWaWV3LmdldCgp
LmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwor
ICAgIEVYUEVDVF9FUSgxdSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29s
Ll9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKIAogICAgIHdlYlZpZXcgPSBhZG9wdE5TKFtb
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDAp
IGNvbmZpZ3VyYXRpb246bmV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIEVYUEVDVF9FUSgy
dSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl93ZWJQcm9jZXNzQ291
bnRJZ25vcmluZ1ByZXdhcm1lZCk7CkBAIC0xMDQzLDkgKzEwNDIsOCBAQCBURVNUKFNlcnZpY2VX
b3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2VzCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2Fk
aW5nIHRoaXMgcGFnZSBkaWQgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCiAgICAg
RVhQRUNUX0VRKDF1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3Nl
cnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwotCisgICAgRVhQRUNUX0VRKDF1LCBvcmlnaW5hbFBy
b2Nlc3NQb29sLmdldCgpLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKICAgICBbW2NvbmZp
Z3VyYXRpb24gd2Vic2l0ZURhdGFTdG9yZV0gcmVtb3ZlRGF0YU9mVHlwZXM6W1dLV2Vic2l0ZURh
dGFTdG9yZSBhbGxXZWJzaXRlRGF0YVR5cGVzXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFu
dFBhc3RdIGNvbXBsZXRpb25IYW5kbGVyOl4oKSB7CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAg
IH1dOwpAQCAtMTYxOCwyMSArMTYxNiwzNSBAQCBzdGF0aWMgc2l6ZV90IGxhdW5jaFNlcnZpY2VX
b3JrZXJQcm9jZXNzCiAgICAgcmV0dXJuIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9j
ZXNzUG9vbC5fd2ViUHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3YXJtZWQ7CiB9CiAKLVRFU1QoU2Vy
dmljZVdvcmtlcnMsIE91dE9mQW5kSW5Qcm9jZXNzU2VydmljZVdvcmtlcikKK1RFU1QoU2Vydmlj
ZVdvcmtlcnMsIE91dE9mUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCiB7CiAgICAgYm9vbCB1c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TG9hZEFib3V0
QmxhbmsgPSB0cnVlOwogCiAgICAgRVhQRUNUX0VRKDF1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJv
Y2VzcyghdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgIWZpcnN0TG9hZEFib3V0Qmxh
bmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2VycywgSW5Qcm9jZXNzU2VydmljZVdvcmtlcikK
K3sKKyAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOworICAg
IGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CisKICAgICBFWFBFQ1RfRVEoMnUsIGxh
dW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Ms
ICFmaXJzdExvYWRBYm91dEJsYW5rKSk7CiB9CiAKLVRFU1QoU2VydmljZVdvcmtlcnMsIExvYWRB
Ym91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hTZXJ2aWNlV29ya2VyKQorVEVTVChTZXJ2
aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaE91dE9mUHJv
Y2Vzc1NlcnZpY2VXb3JrZXIpCiB7CiAgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOwogCiAg
ICAgRVhQRUNUX0VRKDF1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2VzcyghdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcywgZmlyc3RMb2FkQWJvdXRCbGFuaykpOworfQorCitURVNUKFNl
cnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoSW5Qcm9j
ZXNzU2VydmljZVdvcmtlcikKK3sKKyAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MgPSB0cnVlOworICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CisKICAg
ICBFWFBFQ1RfRVEoMnUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MsIGZpcnN0TG9hZEFib3V0QmxhbmspKTsKIH0KIApAQCAtMTg0Nyw4
ICsxODU5LDggQEAgVEVTVChTZXJ2aWNlV29ya2VycywgUmVzdG9yZUZyb21EaXNrTm9uRAogICAg
IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY3JlYXRlRGlyZWN0b3J5QXRVUkw6c3dE
QlBhdGggd2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOllFUyBhdHRyaWJ1dGVzOm5pbCBlcnJv
cjpuaWxdOwogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0g
ZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAgICAvLyBXZSBwcm90ZWN0IHRo
ZSBwcm9jZXNzIHBvb2wgc28gdGhhdCBpdCBvdXRsaXZlcyB0aGUgV2Vic2l0ZURhdGFTdG9yZS4K
ICAgICBSZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gcHJvdGVjdGVkUHJvY2Vzc1Bvb2w7CisgICAg
UmV0YWluUHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4gcHJvdGVjdGVkV2Vic2l0ZURhdGFTdG9yZTsK
IAogICAgIFNlcnZpY2VXb3JrZXJUQ1BTZXJ2ZXIgc2VydmVyKHsKICAgICAgICAgeyAidGV4dC9o
dG1sIiwgbWFpblJlZ2lzdGVyaW5nV29ya2VyQnl0ZXMgfSwKQEAgLTE4NzEsNiArMTg4Myw3IEBA
IFRFU1QoU2VydmljZVdvcmtlcnMsIFJlc3RvcmVGcm9tRGlza05vbkQKIAogICAgICAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFr
ZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0p
OwogICAgICAgICBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IHdlYlZpZXcuZ2V0KCkuY29uZmlndXJh
dGlvbi5wcm9jZXNzUG9vbDsKKyAgICAgICAgcHJvdGVjdGVkV2Vic2l0ZURhdGFTdG9yZSA9IHdl
YlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlOwogCiAgICAgICAgIFt3
ZWJWaWV3IGxvYWRSZXF1ZXN0OnNlcnZlci5yZXF1ZXN0KCldOwogCkBAIC0xODgwLDEzICsxODkz
LDE1IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFJlc3RvcmVGcm9tRGlza05vbkQKICAgICAgICAg
W3dlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfdGVybWluYXRlU2Vydmlj
ZVdvcmtlcnNdOwogICAgIH0KIAorICAgIC8vIE1ha2UgdXMgbW9yZSBsaWtlbHkgdG8gbG9zZSBh
bnkgcmFjZXMgd2l0aCBzZXJ2aWNlIHdvcmtlciBpbml0aWFsaXphdGlvbi4KKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxMCk7CisgICAgdXNsZWVwKDEwMDAwKTsKKyAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxMCk7CisKICAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKICAgICAgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKIAotICAgICAgICBhdXRvIHdlYnNpdGVEYXRhU3Rv
cmVDb25maWd1cmF0aW9uID0gYWRvcHROUyhbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uIGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIHdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9u
LmdldCgpLl9zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gc3dEQlBhdGg7Ci0g
ICAgICAgIGF1dG8gbm9uRGVmYXVsdERhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRh
U3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0ZURhdGFTdG9yZUNvbmZp
Z3VyYXRpb24uZ2V0KCldKTsKLSAgICAgICAgY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0
YVN0b3JlID0gbm9uRGVmYXVsdERhdGFTdG9yZS5nZXQoKTsKKyAgICAgICAgY29uZmlndXJhdGlv
bi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlID0gcHJvdGVjdGVkV2Vic2l0ZURhdGFTdG9yZS5nZXQo
KTsKIAogICAgICAgICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1NXTWVzc2FnZUhh
bmRsZXJGb3JSZXN0b3JlRnJvbURpc2tUZXN0IGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2Fn
ZTpAIlBBU1M6IFJlZ2lzdHJhdGlvbiBhbHJlYWR5IGhhcyBhbiBhY3RpdmUgd29ya2VyIl0pOwog
ICAgICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRN
ZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAic3ciXTsKQEAgLTE5NDQs
MTEgKzE5NTksMTEgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU3VzcGVuZE5ldHdvcmtQcm9jZQog
CiAgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhp
c3RzQXRQYXRoOnN3REJQYXRoLnBhdGhdKTsKIAotICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1
cmF0aW9uLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHldOworICAgIFt3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBf
c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKIAogICAgIEVYUEVDVF9U
UlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RC
UGF0aC5wYXRoXSk7CiAKLSAgICBbIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNz
UG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbd2ViVmlldy5nZXQoKS5j
b25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3Vt
ZV07CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpzZXJ2ZXIucmVxdWVzdCgpXTsKICAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1t
CShyZXZpc2lvbiAyNjc1MzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NzksOCArNDc5LDYg
QEAgLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bgogfQogQGVuZAogCi0v
LyBGSVhNRTogb24gaU9TLCBVSSBwcm9jZXNzIHNob3VsZCBiZSB1c2luZyB0aGUgc2FtZSBjb29r
aWUgZmlsZSBhcyB0aGUgbmV0d29yayBwcm9jZXNzIGZvciBkZWZhdWx0IHNlc3Npb24uCi0jaWYg
UExBVEZPUk0oTUFDKQogZW51bSBjbGFzcyBTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyB7
IE5vLCBZZXMgfTsKIHZvaWQgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2wo
U2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1p
bmcpCiB7CkBAIC01ODksMjAgKzU4Nyw2NiBAQCBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRo
b3V0UHJvY2Vzc1BvCiAgICAgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2wo
U2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmc6Olllcyk7CiB9CiAKLSNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpCi0KIEBpbnRlcmZhY2UgQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSA6IE5T
T2JqZWN0IDxXS1VJRGVsZWdhdGU+CistIChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTDsKKy0g
KE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2U7CiBAZW5kCiAKLUBpbXBsZW1lbnRhdGlvbiBDaGVj
a1Nlc3Npb25Db29raWVVSURlbGVnYXRlCitAaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29v
a2llVUlEZWxlZ2F0ZSB7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfbWVzc2FnZTsKK30KKwog
LSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBh
bmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOihXS0Zy
YW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0
aW9uSGFuZGxlcgogewotICAgIEVYUEVDVF9TVFJFUSgiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2ll
VmFsdWUiLCBtZXNzYWdlLlVURjhTdHJpbmcpOworICAgIF9tZXNzYWdlID0gbWVzc2FnZTsKICAg
ICBmaW5pc2hlZCA9IHRydWU7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KKworLSAoTlNT
dHJpbmcgKil3YWl0Rm9yTWVzc2FnZQoreworICAgIHdoaWxlICghX21lc3NhZ2UpCisgICAgICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgcmV0dXJuIF9tZXNzYWdl
LmF1dG9yZWxlYXNlKCk7Cit9CisKKy0gKE5TU3RyaW5nICopYWxlcnRDb29raWVIVE1MCit7Cisg
ICAgcmV0dXJuIEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgn
OycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNb
aV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5q
b2luKCc7ICcpKTs8L3NjcmlwdD4iOworfQorCiBAZW5kCiAKK1RFU1QoV2ViS2l0LCBXS0hUVFBD
b29raWVTdG9yZU11bHRpcGxlVmlld3MpCit7CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzEg
PSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcxIHN5bmNo
cm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IG5ldHdvcmsgcHJvY2VzcyJdOworCisgICAg
TlNIVFRQQ29va2llICpzZXNzaW9uQ29va2llID0gW05TSFRUUENvb2tpZSBjb29raWVXaXRoUHJv
cGVydGllczpAeworICAgICAgICBOU0hUVFBDb29raWVQYXRoOiBAIi8iLAorICAgICAgICBOU0hU
VFBDb29raWVOYW1lOiBAIlNlc3Npb25Db29raWVOYW1lIiwKKyAgICAgICAgTlNIVFRQQ29va2ll
VmFsdWU6IEAiQ29va2llVmFsdWUiLAorICAgICAgICBOU0hUVFBDb29raWVEb21haW46IEAiMTI3
LjAuMC4xIiwKKyAgICB9XTsKKworICAgIF9fYmxvY2sgYm9vbCBzZXRDb29raWVEb25lID0gZmFs
c2U7CisgICAgW3dlYlZpZXcxLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZS5odHRwQ29v
a2llU3RvcmUgc2V0Q29va2llOnNlc3Npb25Db29raWUgY29tcGxldGlvbkhhbmRsZXI6XnsKKyAg
ICAgICAgc2V0Q29va2llRG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZzZXRDb29raWVEb25lKTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5T
KFtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIG5ld10pOworICAgIFt3ZWJWaWV3MSBzZXRV
SURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3MSBsb2FkSFRNTFN0cmlu
ZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5n
OkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdh
aXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CisKKyAgICBU
ZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtbVGVzdFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNl
XTsKKyAgICBbd2ViVmlldzIgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dl
YlZpZXcyIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6
W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9X
S19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29v
a2llVmFsdWUiKTsKK30KKwogVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQ
b29sRXBoZW1lcmFsU2Vzc2lvbikKIHsKICAgICBSZXRhaW5QdHI8V0tXZWJzaXRlRGF0YVN0b3Jl
PiBlcGhlbWVyYWxTdG9yZVdpdGhDb29raWVzID0gW1dLV2Vic2l0ZURhdGFTdG9yZSBub25QZXJz
aXN0ZW50RGF0YVN0b3JlXTsKQEAgLTYyNyw5ICs2NzEsOCBAQCBURVNUKFdLSFRUUENvb2tpZVN0
b3JlLCBXaXRob3V0UHJvY2Vzc1BvCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5p
c2hlZCk7CiAgICAgZmluaXNoZWQgPSBmYWxzZTsKICAgICAKLSAgICBOU1N0cmluZyAqYWxlcnRD
b29raWVIVE1MID0gQCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0
KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkgKyspIHsgY29va2ll
c1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgpOyBhbGVydChjb29raWVz
LmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Ci0gICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6YWxl
cnRDb29raWVIVE1MIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAu
MC4xIl1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOworICAgIFt3
ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6
W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9X
S19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29v
a2llVmFsdWUiKTsKIH0KIAogc3RhdGljIGJvb2wgYXJlQ29va2llc0VxdWFsKE5TSFRUUENvb2tp
ZSAqZmlyc3QsIE5TSFRUUENvb2tpZSAqc2Vjb25kKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhh
bmRsZXItbGVha3MubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVUkxTY2hlbWVUYXNrUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dL
V2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KQEAgLTE1Miw3
ICsxNTMsNyBAQCBURVNUKFVSTFNjaGVtZUhhbmRsZXIsIExlYWtzMykKIAogICAgIHJ1blVudGls
VGFza3NJbkZsaWdodCgyKTsKIAotICAgIFt3ZWJWaWV3MS5nZXQoKS5jb25maWd1cmF0aW9uLnBy
b2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW3dlYlZpZXcxLmdldCgp
LmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OwogCiAgICAgcnVuVW50aWxUYXNrc0luRmxpZ2h0KDApOwogfQpJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJz
aXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0JKHJldmlzaW9uIDI2NzUzNikKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhz
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vi
c2l0ZURhdGFTdG9yZUN1c3RvbVBhdAogICAgIC8vIE5vdywgd2l0aCBicmFuZCBuZXcgV0tXZWJz
aXRlRGF0YVN0b3JlcyBwb2ludGluZyBhdCB0aGUgc2FtZSBjdXN0b20gY29va2llIHN0b3JhZ2Ug
bG9jYXRpb24sCiAgICAgLy8gaW4gbmV3bHkgZmlyZWQgdXAgTmV0d29ya1Byb2Nlc3NlcywgdmVy
aWZ5IHRoYXQgdGhlIGZldGNoIGFuZCBkZWxldGUgQVBJcyB3b3JrIGFzIGV4cGVjdGVkLgogCi0g
ICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2RhdGFTdG9y
ZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIGF1dG8gbmV3Q3VzdG9tRGF0YVN0b3Jl
ID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJh
dGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKV0pOwogCiAgICAgW25ld0N1
c3RvbURhdGFTdG9yZSBmZXRjaERhdGFSZWNvcmRzT2ZUeXBlczpbTlNTZXQgc2V0V2l0aE9iamVj
dHM6V0tXZWJzaXRlRGF0YVR5cGVDb29raWVzLCBuaWxdIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNB
cnJheTxXS1dlYnNpdGVEYXRhUmVjb3JkICo+ICogcmVjb3JkcykgewpAQCAtMjU1LDcgKzI1NSw3
IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXQKICAgICByZWNlaXZl
ZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJl
Y2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAg
ICAgbmV3Q3VzdG9tRGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxv
Y10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5n
ZXQoKV0pOwogCiAgICAgW25ld0N1c3RvbURhdGFTdG9yZSByZW1vdmVEYXRhT2ZUeXBlczpbTlNT
ZXQgc2V0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVDb29raWVzLCBuaWxdIG1vZGlmaWVk
U2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XiB7CkBAIC0zODUs
MTEgKzM4NSwxMCBAQCBURVNUKFdlYktpdCwgQ3VzdG9tRGF0YVN0b3JlRGVzdHJveVdoaWxlCiAK
ICAgICAgICAgLy8gVGVybWluYXRlIHRoZSBuZXR3b3JrIHByb2Nlc3Mgd2hpbGUgYSBxdWVyeSBp
cyBwZW5kaW5nLgogICAgICAgICBhdXRvKiBhbGxQcm9jZXNzUG9vbHMgPSBbV0tQcm9jZXNzUG9v
bCBfYWxsUHJvY2Vzc1Bvb2xzRm9yVGVzdGluZ107Ci0gICAgICAgIEFTU0VSVF9FUSgxVSwgW2Fs
bFByb2Nlc3NQb29scyBjb3VudF0pOwotICAgICAgICBhdXRvKiBwcm9jZXNzUG9vbCA9IGFsbFBy
b2Nlc3NQb29sc1swXTsKLSAgICAgICAgd2hpbGUgKCFbcHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9j
ZXNzSWRlbnRpZmllcl0pCisgICAgICAgIEFTU0VSVF9FUSgwVSwgW2FsbFByb2Nlc3NQb29scyBj
b3VudF0pOworICAgICAgICB3aGlsZSAoIVtkYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRp
Zmllcl0pCiAgICAgICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzbGVlcCgwLjAxKTsKLSAg
ICAgICAga2lsbChbcHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0sIFNJR0tJ
TEwpOworICAgICAgICBraWxsKFtkYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0s
IFNJR0tJTEwpOwogICAgICAgICBhbGxQcm9jZXNzUG9vbHMgPSBuaWw7CiAgICAgICAgIGRhdGFT
dG9yZSA9IG5pbDsKICAgICB9CkBAIC00NjUsNyArNDY0LDkgQEAgVEVTVChXZWJLaXQsIEFsdGVy
bmF0aXZlU2VydmljZXNEZWZhdWx0RAogICAgIAogICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRh
cmRVc2VyRGVmYXVsdHNdIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSBm
b3JLZXk6a2V5XTsKIAotICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcyID0gW1tbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRp
b24gKmNvbmZpZ3VyYXRpb24gPSBbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVs
ZWFzZV07CisgICAgY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlID0gW1tbV0tXZWJzaXRl
RGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOltbW19XS1dlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV1dIGF1dG9yZWxlYXNl
XTsKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpj
b25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CiAgICAgW3dlYlZpZXcyIHN5bmNocm9ub3VzbHlM
b2FkSFRNTFN0cmluZzpAInN0YXJ0IGF1eGlsaWFyeSBwcm9jZXNzZXMiIGJhc2VVUkw6bmlsXTsK
IAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4
aXN0c0F0UGF0aDpkZWZhdWx0RGlyZWN0b3J5LnBhdGhdKTsKQEAgLTUzOSw3ICs1NDAsNyBAQCBU
RVNUKFdlYktpdCwgRG9Mb2FkV2l0aE5vbkRlZmF1bHREYXRhU3RvCiAKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5n
ZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3
Q29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CiAKICAgICByZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05T
QnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lv
bjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOwogICAg
IFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwpAQCAtODU3LDcgKzg1OCw3IEBAIFRFU1Qo
V2ViS2l0LCBNZWRpYUNhY2hlKQogICAgIEVYUEVDVF9GQUxTRShlcnJvcik7CiAKICAgICBkb25l
ID0gdHJ1ZTsKLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0
ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgW2ZpbGVNYW5hZ2Vy
IHJlbW92ZUl0ZW1BdFBhdGg6cGF0aCBlcnJvcjomZXJyb3JdOwogICAgIEVYUEVDVF9GQUxTRShl
cnJvcik7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdE9iakMvQ3VzdG9t
UHJvdG9jb2xzVGVzdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdE9iakMvQ3VzdG9tUHJvdG9jb2xzVGVzdC5tbQkocmV2aXNpb24gMjY3NTM2KQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVByb3RvY29sc1Rlc3Qu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAKICNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgogI2ltcG9ydCA8V2ViS2l0L1dLQ29udGV4dFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktp
dC9XS1Byb2Nlc3NHcm91cFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1ZpZXdQcml2YXRl
Lmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg+CiAjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CiAKIHN0YXRpYyBib29sIHRlc3RGaW5pc2hlZDsKQEAgLTcyLDYgKzc0
LDggQEAgc3RhdGljIFdLUHJvY2Vzc0dyb3VwICpwcm9jZXNzR3JvdXAoKQogICAgIHJldHVybiBw
cm9jZXNzR3JvdXA7CiB9CiAKK3N0YXRpYyBSZXRhaW5QdHI8V0tWaWV3PiB3a1ZpZXc7CisKIEBp
bnRlcmZhY2UgQ2xvc2VXaGlsZVN0YXJ0aW5nUHJvdG9jb2wgOiBUZXN0UHJvdG9jb2wKIEBlbmQK
IApAQCAtODksNyArOTMsNyBAQCAtICh2b2lkKXN0YXJ0TG9hZGluZwogICAgICAgICB9OwogICAg
ICAgICBXS0NvbnRleHRTZXRDbGllbnQoW3Byb2Nlc3NHcm91cCgpIF9jb250ZXh0UmVmXSwgJmNs
aWVudC5iYXNlKTsKIAotICAgICAgICBraWxsKFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRl
bnRpZmllcihbcHJvY2Vzc0dyb3VwKCkgX2NvbnRleHRSZWZdKSwgU0lHS0lMTCk7CisgICAgICAg
IGtpbGwoV0tXZWJzaXRlRGF0YVN0b3JlR2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLUGFn
ZUdldFdlYnNpdGVEYXRhU3RvcmUoW3drVmlldyBwYWdlUmVmXSkpLCBTSUdLSUxMKTsKICAgICAg
ICAgW3NlbGYuY2xpZW50IFVSTFByb3RvY29sOnNlbGYgZGlkRmFpbFdpdGhFcnJvcjpbTlNFcnJv
ciBlcnJvcldpdGhEb21haW46TlNDb2NvYUVycm9yRG9tYWluIGNvZGU6MCB1c2VySW5mbzpuaWxd
XTsKICAgICB9KTsKIH0KQEAgLTE0Miw3ICsxNDYsNyBAQCBuYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SSB7CiBzdGF0aWMgdm9pZCBydW5UZXN0KCkKIHsKICAgICBSZXRhaW5QdHI8V0tCcm93c2luZ0Nv
bnRleHRHcm91cD4gYnJvd3NpbmdDb250ZXh0R3JvdXAgPSBhZG9wdE5TKFtbV0tCcm93c2luZ0Nv
bnRleHRHcm91cCBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOkAiVGVzdElkZW50aWZpZXIiXSk7
Ci0gICAgUmV0YWluUHRyPFdLVmlldz4gd2tWaWV3ID0gYWRvcHROUyhbW1dLVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBwcm9jZXNzR3JvdXA6cHJv
Y2Vzc0dyb3VwKCkgYnJvd3NpbmdDb250ZXh0R3JvdXA6YnJvd3NpbmdDb250ZXh0R3JvdXAuZ2V0
KCldKTsKKyAgICB3a1ZpZXcgPSBhZG9wdE5TKFtbV0tWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIHByb2Nlc3NHcm91cDpwcm9jZXNzR3JvdXAoKSBi
cm93c2luZ0NvbnRleHRHcm91cDpicm93c2luZ0NvbnRleHRHcm91cC5nZXQoKV0pOwogICAgIFJl
dGFpblB0cjxDdXN0b21Qcm90b2NvbHNMb2FkRGVsZWdhdGU+IGxvYWREZWxlZ2F0ZSA9IGFkb3B0
TlMoW1tDdXN0b21Qcm90b2NvbHNMb2FkRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKICAgICBbd2tW
aWV3IGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJdLmxvYWREZWxlZ2F0ZSA9IGxvYWREZWxlZ2F0
ZS5nZXQoKTsKICAgICBbW3drVmlldyBicm93c2luZ0NvbnRleHRDb250cm9sbGVyXSBsb2FkUmVx
dWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOltO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUA6Ly9yZWRpcmVjdD90ZXN0IiwgW1Rlc3RQcm90
b2NvbCBzY2hlbWVdXV1dXTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAyNjc1MzYpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2Miw4ICsxMDYyLDYgQEAgYm9v
bCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdAogCiAgICAgcmVzZXRRdW90YSgp
OwogCi0gICAgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyVGVzdGluZyhwbGF0Zm9ybUNvbnRleHQoKSwgdHJ1ZSk7Ci0KICAgICBXS0NvbnRleHRDbGVh
ckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuY29udGV4dCgpKTsKIAogICAgIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgZmFsc2UpOwpA
QCAtMTIzOCw3ICsxMjM2LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZmluZEFuZER1bXBXZWJL
aXRQcgogICAgIGR1bXBSZXNwb25zZShtYWtlU3RyaW5nKFRlc3RDb250cm9sbGVyOjp3ZWJQcm9j
ZXNzTmFtZSgpLCAiOiAiLAogICAgICAgICBXS1BhZ2VHZXRQcm9jZXNzSWRlbnRpZmllcihUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpKSwgJ1xuJywKICAg
ICAgICAgVGVzdENvbnRyb2xsZXI6Om5ldHdvcmtQcm9jZXNzTmFtZSgpLCAiOiAiLAotICAgICAg
ICBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIobV9jb250ZXh0LmdldCgpKSwg
J1xuJykpOworICAgICAgICBXS1dlYnNpdGVEYXRhU3RvcmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50
aWZpZXIod2Vic2l0ZURhdGFTdG9yZSgpKSwgJ1xuJykpOwogI2Vsc2UKICAgICBkdW1wUmVzcG9u
c2UoIlxuIl9zKTsKICNlbmRpZgpAQCAtMjI5OCw3ICsyMjk2LDcgQEAgV0tSZXRhaW5QdHI8V0tU
eXBlUmVmPiBUZXN0Q29udHJvbGxlcjo6ZwogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpuZXR3b3Jr
UHJvY2Vzc0RpZENyYXNoKCkKIHsKLSAgICBwaWRfdCBwaWQgPSBXS0NvbnRleHRHZXROZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIobV9jb250ZXh0LmdldCgpKTsKKyAgICBwaWRfdCBwaWQgPSBXS1dl
YnNpdGVEYXRhU3RvcmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIod2Vic2l0ZURhdGFTdG9y
ZSgpKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiNDUkFTSEVEIC0gJXMgKHBpZCAlbGQpXG4iLCBu
ZXR3b3JrUHJvY2Vzc05hbWUoKSwgc3RhdGljX2Nhc3Q8bG9uZz4ocGlkKSk7CiAgICAgZXhpdCgx
KTsKIH0KQEAgLTMxMzcsNyArMzEzNSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldElnbm9y
ZXNWaWV3cG9ydFMKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlTmV0d29ya1Byb2Nl
c3MoKQogewotICAgIFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKHBsYXRmb3JtQ29u
dGV4dCgpKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyh3
ZWJzaXRlRGF0YVN0b3JlKCkpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjp0ZXJtaW5hdGVT
ZXJ2aWNlV29ya2VycygpCkBAIC0zMTY4LDkgKzMxNjYsOCBAQCBQbGF0Zm9ybVdlYlZpZXcqIFRl
c3RDb250cm9sbGVyOjpwbGF0Zm9yCiAgICAgcmV0dXJuIG5ldyBQbGF0Zm9ybVdlYlZpZXcoY29u
ZmlndXJhdGlvbiwgb3B0aW9ucyk7CiB9CiAKLVdLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6
cGxhdGZvcm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25m
aWd1cmF0aW9uUmVmIGNvbnRleHRDb25maWd1cmF0aW9uKQorV0tDb250ZXh0UmVmIFRlc3RDb250
cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLQ29u
dGV4dENvbmZpZ3VyYXRpb25SZWYpCiB7Ci0gICAgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVE
YXRhU3RvcmUoY29udGV4dCwgZGVmYXVsdFdlYnNpdGVEYXRhU3RvcmUoKSk7CiAgICAgcmV0dXJu
IGNvbnRleHQ7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409631</attachid>
            <date>2020-09-24 16:06:30 -0700</date>
            <delta_ts>2020-09-29 03:47:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200924160628.patch</filename>
            <type>text/plain</type>
            <size>366707</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NTQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDVjMTNlZDNhOGQ5MDRjY2Nh
ZWUwYzAxY2IzYjMzMTcyOWVmMjVhNGQuLjQ2ZDJlMzY3NGE5NmI3MmQ5NGU4YWUwY2FlMzQyYjA0
YmI2NDZhNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDE4IEBACisyMDIwLTA5LTI0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggbW92ZXMgdGhlIHRoaW5ncyBvbiBXZWJQcm9jZXNzUG9vbCBhc3NvY2lhdGVk
IHdpdGggTmV0d29ya1Byb2Nlc3NQcm94eSBvd25lcnNoaXAgYW5kIG1vdmVzIHRoZW0KKyAgICAg
ICAgdG8gV2Vic2l0ZURhdGFTdG9yZS4gIEl0J3MgcHJldHR5IG1lY2hhbmljYWwsIGJ1dCBpdCBy
ZWFjaGVzIGl0cyBmaW5nZXJzIGludG8gYSBsb3Qgb2YgdGhpbmdzLiAgU29tZSBjb21tZW50cwor
ICAgICAgICBvbiBpbnRlcmVzdGluZyBwYXJ0cyBhcmUgYmVsb3cuCisKKyAgICAgICAgV2h5IGFt
IEkgZG9pbmcgdGhpcz8gIEknbSBnbGFkIHlvdSBhc2tlZC4KKworICAgICAgICBXS1dlYlZpZXcg
aGFkIGEgZnVuZGFtZW50YWwgY29va2llIHByb2JsZW0gYmVmb3JlIHRoaXMgY2hhbmdlLiAgSXQg
aGFkIGEgV0tXZWJzaXRlRGF0YVN0b3JlIHRoYXQgY291bGQgcG9pbnQgdG8gYSBjb29raWUgc3Rv
cmUgb24gZGlzaworICAgICAgICB0aGF0IGNvdWxkIGJlIHVzZWQgaW4gbXVsdGlwbGUgbmV0d29y
ayBwcm9jZXNzZXMgYXQgdGhlIHNhbWUgdGltZS4gIFRoaXMgbGVkIHRvIHByb2JsZW1zIHdpdGgg
Y29va2llcyBiZWluZyByZWNlaXZlZCBvdmVyIHRoZSBuZXR3b3JrCisgICAgICAgIGluIHRob3Nl
IGRpZmZlcmVudCBwcm9jZXNzZXMgYmVpbmcgdW5hYmxlIHRvIGJlIHNoYXJlZCB1bnRpbCB0aGV5
IHdlcmUgd3JpdHRlbiB0byBkaXNrLCBzb21ldGhpbmcgdGhhdCBkb2VzIG5vdCBoYXBwZW4gaW1t
ZWRpYXRlbHksIGVzcGVjaWFsbHkKKyAgICAgICAgb24gaU9TLiAgVGhpcyBwcm9ibGVtIGlzIGV2
ZW4gd29yc2Ugd2l0aCBzZXNzaW9uIGNvb2tpZXMsIHdoaWNoIHNob3VsZCBiZSBrZXB0IGluIG1l
bW9yeSBhbmQgbmV2ZXIgYmUgd3JpdHRlbiB0byBkaXNrLiAgVGhvc2UgcHJvY2Vzc2VzCisgICAg
ICAgIGRpZCBub3QgdXNlIHNoYXJlZCBtZW1vcnkgdG8gc2hhcmUgdGhlIGNvb2tpZXMuICBUaGV5
IGp1c3QgZGlkbid0IHNoYXJlIHRoZW0sIHdoaWNoIGxlZCB0byBjb29raWUgaW5jb3JyZWN0bmVz
cy4gIFRoaXMgd2FzIHVuZm9ydHVuYXRlbHkKKyAgICAgICAgdGhlIGRlZmF1bHQgY29uZmlndXJh
dGlvbiBpZiB5b3UgY2FsbCBbW1dLV2ViVmlldyBhbGxvY10gaW5pdF0gbW9yZSB0aGFuIG9uY2Us
IHdoaWNoIG1hbnkgZGV2ZWxvcGVycyBkby4gIFRoZXJlIHdhcyBhbHNvIG9jY2FzaW9uYWwgY29v
a2llCisgICAgICAgIGNvcnJ1cHRpb24gYW5kIGxvc3MgZnJvbSBtdWx0aXBsZSBwcm9jZXNzZXMg
d3JpdGluZyBjb29raWVzIHRvIHRoZSBzYW1lIGZpbGUuICBBbGwgdGhlc2UgcHJvYmxlbXMgY2Fu
IGJlIHdvcmtlZCBhcm91bmQgYnkgZG9pbmcgd2hhdCBTYWZhcmkgZG9lczoKKyAgICAgICAgbWFu
dWFsbHkgc2V0dGluZyB0aGUgV0tQcm9jZXNzUG9vbCBvZiBhbGwgV0tXZWJWaWV3Q29uZmlndXJh
dGlvbnMgdG8gdGhlIHNhbWUgcHJvY2VzcyBwb29sIHRvIG9ubHkgdXNlIG9uZSBuZXR3b3JrIHBy
b2Nlc3MuICBUaGlzIGlzIG5vdCBpbnR1aXRpdmUKKyAgICAgICAgb3Igd2VsbCBkb2N1bWVudGVk
LCBhbmQgZXZlbiB0aG91Z2ggSSBoYXZlIHNwZW50IHRoZSBtYWpvcml0eSBvZiBXV0RDIGxhYnMg
Zm9yIHRoZSBsYXN0IDMgeWVhcnMgdGVsbGluZyBkZXZlbG9wZXJzIHRvIGRvIGl0LCBtb3N0IGRl
dmVsb3BlcnMgZG8gbm90LgorICAgICAgICBUaGUgZGVmYXVsdCBiZWhhdmlvciBzaG91bGQgbm90
IGxlYWQgdG8gY29va2llIGluY29ycmVjdG5lc3MsIGNvcnJ1cHRpb24sIG9yIGxvc3MuICBUaGlz
IGFjY29tcGxpc2hlcyB0aGF0LgorCisgICAgICAgIEEgYmlnZ2VyIHByb2JsZW0gdGhhdCBjYW4n
dCByZWFsbHkgYmUgd29ya2VkIGFyb3VuZCB3ZWxsIGlzIHdoYXQgd2Ugd2VyZSBkb2luZyBpbiBv
dXIgV0tIVFRQQ29va2llU3RvcmUgQVBJLiAgTWFueSBkZXZlbG9wZXJzIGNhbGwgc2V0Q29va2ll
OmNvbXBsZXRpb25IYW5kbGVyOgorICAgICAgICB0byAibG9nIGluIiB0aGUgdXNlciBieSBzZXR0
aW5nIGEgY29va2llLCB0aGVuIGluIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIsIHRoZXkgb3BlbiBh
IFdLV2ViVmlldyB0byB0aGVpciBwYWdlIGFuZCBleHBlY3QgdGhlIGNvb2tpZSB0byBiZSBzZW50
LiAgQmVmb3JlIHRoaXMKKyAgICAgICAgY2hhbmdlLCB3ZSB3b3VsZCBub3Qga25vdyB3aGljaCBw
cm9jZXNzIHBvb2wgdG8gc2V0IHRoZSBjb29raWUgaW4gc28gd2Ugd291bGQgZ3Vlc3MuICBJZiB0
aGVyZSB3ZXJlIG5vIHByb2Nlc3MgcG9vbHMsIHdlIHdvdWxkIHN0YXJ0IHdyaXRpbmcgdG8gZGlz
ayBhbmQgaG9wZQorICAgICAgICBpdCB3cml0ZXMgZmFzdCBlbm91Z2guICBXZSBjYW4ndCB3YWl0
IGZvciBpdCB0byBjb21wbGV0ZSBiZWNhdXNlIGl0IGNhdXNlcyBoYW5ncyBsaWtlIHJkYXI6Ly9w
cm9ibGVtLzY2OTYxMDY2LiAgVGhpcyBzb2x1dGlvbiBhbGxvd3MgdG8gc3RhcnQgdGhlIG5ldHdv
cmsKKyAgICAgICAgcHJvY2VzcyBvZiB0aGF0IFdlYnNpdGVEYXRhU3RvcmUgYW5kIHNldCB0aGUg
Y29va2llIGluIHRoYXQgcHJvY2Vzcy4gIFdlIG5vdyBrbm93IHRoYXQgaXMgdGhlIG9ubHkgcHJv
Y2VzcyB0aGlzIFdlYnNpdGVEYXRhU3RvcmUgd2lsbCBldmVyIHVzZS4gIE5vdywgdXNlcnMKKyAg
ICAgICAgd2lsbCBiZSBhYmxlIHRvIGFjdHVhbGx5IGJlIGxvZ2dlZCBpbiBhbGwgdGhlIHRpbWUg
aW4gc3VjaCBhcHBzLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29r
aWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6c2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6
OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nv
b2tpZXMvV2ViQ29va2llTWFuYWdlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tp
ZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFuYWdlckN1cmwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJNYWMu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9zb3Vw
L1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFu
YWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2Rl
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdl
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y2xv
c2UpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2Eu
bW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVO
ZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6c2F2ZUNvb2tpZXMpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFn
ZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwv
TmV0d29ya1Byb2Nlc3NDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW06Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0
YVN0b3JlU2Vzc2lvbik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJv
Y2Vzc1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1D
cmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFBs
YXRmb3JtL0lQQy9BdHRhY2htZW50Lmg6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cDoKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZXNGb3JVUkwpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNl
dENvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNlcnZlcik6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCk6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0
YVN0b3JlKToKKyAgICAgICAgKFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyVGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAgICAgICAoV0tQYWdlR2V0V2Vic2l0
ZURhdGFTdG9yZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwOgorICAgICAgICAo
V0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV0tX
ZWJzaXRlRGF0YVN0b3JlR2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29s
IF9zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOl0pOgorICAgICAgICAoLVtXS1By
b2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc10pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1Byb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHld
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNz
UHJlcGFyZVRvU3VzcGVuZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBf
c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJv
Y2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1Byb2Nlc3NQb29sIF9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElz
QmFja2dyb3VuZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOl0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1Byb2Nlc3NQb29sIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGlu
ZzpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bv
b2xQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRh
U3RvcmUubW06CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfbmV0d29ya1Byb2Nlc3NI
YXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9y
ZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0
b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOl0pOgorICAgICAgICAoLVtX
S1dlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRs
eV0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0Rp
ZFJlc3VtZV0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNpemVBcHBJ
c0JhY2tncm91bmQ6XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfbmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyXSk6CisgICAgICAgICgrW1dLV2Vic2l0ZURhdGFTdG9yZSBfbWFrZU5l
eHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nXSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwOgorICAgICAgICAoX1dlYktp
dENvb2tpZU1hbmFnZXJQcml2YXRlOjpjb29raWVNYW5hZ2VyIGNvbnN0KToKKyAgICAgICAgKF9X
ZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZTo6fl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSk6
CisgICAgICAgICh3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKToKKyAgICAgICAgKHdlYmtpdF9j
b29raWVfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKToKKyAgICAgICAgKHdlYmtpdF9j
b29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeSk6CisgICAgICAgICh3ZWJraXRfY29va2ll
X21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX2FkZF9jb29raWUpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29r
aWVzKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHA6CisgICAgICAg
ICh3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQpOgorICAgICAgICAod2Via2l0X3dlYl9jb250
ZXh0X3ByZWZldGNoX2Rucyk6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0
b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6YWRkU2luZ2xlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Np
b246OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXhpbGlhcnlQcm9j
ZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQ
b29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9j
ZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6eHBjRW5kcG9pbnRNZXNzYWdlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3
b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZFByb3h5OjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5Ojpw
dWJsaXNoUHJvZ3Jlc3MpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5OjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFBy
b3h5Ojp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5Ojpk
ZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZUFzeW5jKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwOgorICAgICAgICAoV2ViS2l0
OjpEb3dubG9hZFByb3h5TWFwOjpEb3dubG9hZFByb3h5TWFwKToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQpOgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjphcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91
bmQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFBy
b3h5KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5pc2hl
ZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmludmFsaWRhdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5OjpzdGFydExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJQcm94eTo6c3RvcExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMpOgorICAgICAgICAoV2Vi
S2l0OjpkZWZhdWx0UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OmRlZmF1bHROZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OnRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OmRpZFRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6
OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0Ojph
bnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSk6CisgICAgICAgIChX
ZWJLaXQ6OmFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQ
cm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9w
dGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3du
bG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29y
a1Byb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRl
eHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVByb2Nl
c3NQb29sSGFzRm9yZWdyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6OmFueVBy
b2Nlc3NQb29sSGFzQmFja2dyb3VuZFdlYlByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAg
ICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRsZXI6OmhhbmRsZVhQ
Q0V2ZW50IGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVN
YW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6On5X
ZWJDb29raWVNYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNp
bmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nv
b2tpZUNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0
b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9v
bERlc3Ryb3llZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6cHJvY2Vzc0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxl
bWVudCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94
eS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6ZGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtl
ckVudGl0bGVtZW50T3ZlcnJpZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBy
ZWNvbm5lY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9h
ZEZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpsb2dGcmFtZU5hdmln
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmli
dXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJp
YnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmli
dXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBp
cmVkRm9yVGVzdGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJv
dG9jb2xIYW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9j
ZXNzUG9vbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bv
b2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hl
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250
ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6cmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0
YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2lu
Z0NvbnRlbnRTZWN1cml0eVBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2Nv
bEhhbmRsZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJH
bG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NBc3NlcnRp
b25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmlzU2VydmljZVdvcmtlclBh
Z2VJRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6Omhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJCYWNrZ3Jv
dW5kQWN0aXZpdHlGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0
d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICBUaGVyZSBzZWVtcyB0byBiZSBhIGxvdCBv
ZiBjb2RlIHJlbW92YWwgaGVyZSwgYnV0IG1vc3Qgb2YgaXQgd2FzIGR1cGxpY2F0ZSBjb2RlIHdp
dGgKKyAgICAgICAgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyB3aGljaCBpcyB1c2VkIGlu
c3RlYWQuICBUaGF0IHdoaWNoIHdhcyBub3QgZHVwbGljYXRlIHdhcworICAgICAgICBtb3ZlZCB0
byBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNz
LiAgVGhpcyB3YXMgdGhlIGhhcmRlc3QgcGFydCBvZiB0aGlzIHBhdGNoLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRp
Zmllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzeW50aGVz
aXplQXBwSXNCYWNrZ3JvdW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3Jr
UHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseUZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmZsdXNoQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zl
cik6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5n
UHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJv
eHk6OnNldFdlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJv
eHk6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vz
c1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb0FsbFdlYlByb2Nlc3Nlcyk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OldlYnNpdGVEYXRhU3RvcmUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjp+V2Vic2l0ZURhdGFTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyV2l0aFNlc3Npb25JRE1h
cCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3Jl
Rm9yU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29y
a1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJv
Y2VzcyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0
YUFuZEFwcGx5KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0
YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFNlcnZpY2VXb3JrZXJU
aW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jk
c1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkdW1wUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omlz
UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpp
c0dyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQ
cmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcik6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3Vy
Y2VVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0
aW5nVG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVu
dFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRQYXJh
bWV0ZXJzVG9EZWZhdWx0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c3VibWl0VGVsZW1ldHJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdV
cGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZVN0YXRp
c3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlcklu
dGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlv
bnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRVc2VJVFBEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5r
RGVjb3JhdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpkZWxldGVDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0
cmljdENvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JU
ZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNv
dXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENhY2hlTWF4
QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6cHJvY2Vzc1Bvb2xzIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVk
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dGVybWluYXRlTmV0d29ya1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1By
b2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRl
c3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1By
b2Nlc3NEaWRSZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6Zmx1c2hDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW5hbWVPcmlnaW5JbldlYnNp
dGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFzQXBwQm91bmRT
ZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJB
cHBCb3VuZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmb3J3
YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1bmRsZUlk
ZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6bWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vz
c0xhdW5jaEZhaWxGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNz
aW9uSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwZW5kaW5nQ29va2ll
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmFk
ZFBlbmRpbmdDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TmV0d29ya1Byb3h5
U2V0dGluZ3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVE
YXRhU3RvcmVTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGxh
dGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoT3B0aW9ucyk6CisgICAgICAgICog
VUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Up
OgorICAgICAgICAqIFVJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJv
Y2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRJZ25vcmVUTFNFcnJv
cnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0TmV0d29ya1Byb3h5U2V0
dGluZ3MpOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb25JbmZvLmg6CisKIDIwMjAtMDktMjQgIEthdGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5l
eUBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2hUcmFjZXI6IGNvbS5hcHBsZS5XZWJLaXQuTmV0
d29ya2luZyBpbiBOZXR3b3JrU2Vzc2lvbjo6Zmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbigpIGNv
ZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJD
b29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9X
ZWJDb29raWVNYW5hZ2VyLmNwcAppbmRleCBmY2UyMzg5ODdhNzg1MGYxOGM5ZjMwNmM1MGU5OGNl
OTg4ZDEyNWZkLi41YzliNzcxODZmYjE4MTBjYjI4NTcxNGJjNTM3NTA5MWE0ODU3ZTI3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFu
YWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNv
b2tpZU1hbmFnZXIuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db29raWUuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0Nvb2tpZVN0b3JhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUVFBDb29raWVBY2NlcHRQ
b2xpY3kuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgpAQCAtMTQzLDE1
ICsxNDQsMTggQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hh
bmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6
c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIHBs
YXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpOwotICAgIG1fcHJvY2Vzcy5j
b29raWVBY2NlcHRQb2xpY3lDaGFuZ2VkKHBvbGljeSk7Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxl
cigpOworICAgIHBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3ksIFtwb2xp
Y3ksIHByb2Nlc3MgPSBtYWtlUmVmKG1fcHJvY2VzcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBwcm9jZXNzLT5j
b29raWVBY2NlcHRQb2xpY3lDaGFuZ2VkKHBvbGljeSk7CisgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7CisgICAgfSk7CiB9CiAKLXZvaWQgV2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQ
Q29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihtX3Byb2Nlc3MuZGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCkuY29va2llQWNjZXB0UG9saWN5KCkpOworICAgIGlmIChhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9
IG1fcHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQorICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihzdG9yYWdlU2Vzc2lvbi0+Y29va2llQWNjZXB0UG9saWN5KCkpOworICAgIGVsc2UK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6TmV2ZXIp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCmluZGV4IGNhN2Y1NWU4
NjZiZGFkNGIxZTM1MmU4ZjY0MDU3YmFiYzQ2MjgzMmQuLjM1Y2U4YTllY2ZjMjk0Y2Q2ZGUxZTdm
ZjkzMTBlMGE1N2VhNDlkN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaApAQCAtMzcsNiArMzcsOCBAQAogI2lu
Y2x1ZGUgIlNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUuaCIKICNlbmRpZgogCitPQkpD
X0NMQVNTIE5TSFRUUENvb2tpZVN0b3JhZ2U7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0cnVj
dCBDb29raWU7CiBlbnVtIGNsYXNzIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgOiB1aW50OF90OwpA
QCAtNzksOCArODEsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2V0QWxsQ29va2llcyhQQUw6OlNl
c3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYm
KT4mJik7CiAgICAgdm9pZCBnZXRDb29raWVzKFBBTDo6U2Vzc2lvbklELCBjb25zdCBVUkwmLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmKTsKIAot
ICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBD
b29raWVBY2NlcHRQb2xpY3kpOwotICAgIHZvaWQgZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYm
KTsKKyAgICB2b2lkIHBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShXZWJDb3JlOjpI
VFRQQ29va2llQWNjZXB0UG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAg
IHZvaWQgZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJik7CiAKICAg
ICB2b2lkIHN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCk7CiAgICAg
dm9pZCBzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCk7CkBAIC04OCw0
ICs5MCw4IEBAIHByaXZhdGU6CiAgICAgTmV0d29ya1Byb2Nlc3MmIG1fcHJvY2VzczsKIH07CiAK
KyNpZiBQTEFURk9STShDT0NPQSkKK3ZvaWQgc2F2ZUNvb2tpZXMoTlNIVFRQQ29va2llU3RvcmFn
ZSAqLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworI2VuZGlmCisKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29r
aWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgppbmRleCBhY2Q3NTQ0
MGQ4M2YzNDY2NTBjOWYzM2I3NWI1ZDVkMDkzNTIxM2JhLi42ZmRmNTc3MmFhNmFhZTM5NDAyYTlh
ODlmNTZjODRmN2JkNDM1ODVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgpA
QCAtMzYsNyArMzYsNyBAQCBtZXNzYWdlcyAtPiBXZWJDb29raWVNYW5hZ2VyIE5vdFJlZkNvdW50
ZWQgewogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lKSAtPiAoKSBBc3luYwogCiAgICAgdm9pZCBTZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KGVudW06dWludDhfdCBXZWJDb3JlOjpIVFRQQ29va2llQWNj
ZXB0UG9saWN5IHBvbGljeSkgLT4gKCkgQXN5bmMKLSAgICB2b2lkIEdldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3koKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xp
Y3kgcG9saWN5KSBBc3luYworICAgIHZvaWQgR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCiAgICAgCiAgICAgdm9pZCBTdGFydE9ic2Vydmlu
Z0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIHZvaWQgU3RvcE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFu
YWdlckN1cmwuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL2N1cmwv
V2ViQ29va2llTWFuYWdlckN1cmwuY3BwCmluZGV4IGMyZWYxNTY4NDUwNDIwMGY5OGVlNGZlNjBl
MzVhZGRhMjVjMTlkNmQuLmZhYWRhNTBmOWM0M2Q0NDNkNDkzODg4YzliZDY2YzRmNzA5MjAzZDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9jdXJsL1dl
YkNvb2tpZU1hbmFnZXJDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0Nvb2tpZXMvY3VybC9XZWJDb29raWVNYW5hZ2VyQ3VybC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi12b2lkIFdl
YkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29v
a2llQWNjZXB0UG9saWN5IHBvbGljeSkKK3ZvaWQgV2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1T
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQ29v
a2llQWNjZXB0UG9saWN5IGN1cmxQb2xpY3kgPSBDb29raWVBY2NlcHRQb2xpY3k6Ok9ubHlGcm9t
TWFpbkRvY3VtZW50RG9tYWluOwogICAgIHN3aXRjaCAocG9saWN5KSB7CkBAIC01NSw2ICs1NSw3
IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kKICAgICBtX3Byb2Nlc3MuZm9yRWFjaE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbihbY3VybFBvbGljeV0gKGNvbnN0IGF1dG8mIG5ldHdvcmtTdG9yYWdlU2Vz
c2lvbikgewogICAgICAgICBuZXR3b3JrU3RvcmFnZVNlc3Npb24uc2V0Q29va2llQWNjZXB0UG9s
aWN5KGN1cmxQb2xpY3kpOwogICAgIH0pOworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1tIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1tCmluZGV4
IDE5ZjU4NzhkNjYyYzM2YmJkN2ZjNjM4NDdiY2Q3OGFjOWJiYzJiOTYuLjdmOTEyMGNhMmUxZmMw
OGIyNWQ1OGYwZWE1YzA4M2QyNjRmMGViNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ29va2llcy9tYWMvV2ViQ29va2llTWFuYWdlck1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJNYWMu
bW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSFRUUENvb2tpZUFjY2VwdFBv
bGljeS5oPgogI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbXBv
cnQgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CisjaW1wb3J0IDx3dGYvQ2FsbGJhY2tBZ2dy
ZWdhdG9yLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKQEAgLTUzLDE1ICs1NCwxOSBAQCBzdGF0aWMgQ0ZIVFRQQ29va2llU3RvcmFnZUFj
Y2VwdFBvbGljeSB0b0NGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3koSFRUUENvbwogICAg
IHJldHVybiBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5QWx3YXlzOwogfQogCi12b2lk
IFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQ
Q29va2llQWNjZXB0UG9saWN5IHBvbGljeSkKK3ZvaWQgV2ViQ29va2llTWFuYWdlcjo6cGxhdGZv
cm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
QVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3
Q29va2llcykpOwogCisgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgW1tOU0hUVFBD
b29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBzZXRDb29raWVBY2NlcHRQb2xp
Y3k6c3RhdGljX2Nhc3Q8TlNIVFRQQ29va2llQWNjZXB0UG9saWN5Pihwb2xpY3kpXTsKKyAgICBz
YXZlQ29va2llcyhbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0s
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAKICAgICBtX3Byb2Nlc3MuZm9yRWFjaE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbihbJl0gKGNvbnN0IGF1dG8mIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbikg
ewogICAgICAgICBpZiAoYXV0byBjb29raWVTdG9yYWdlID0gbmV0d29ya1N0b3JhZ2VTZXNzaW9u
LmNvb2tpZVN0b3JhZ2UoKSkKICAgICAgICAgICAgIENGSFRUUENvb2tpZVN0b3JhZ2VTZXRDb29r
aWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFnZS5nZXQoKSwgdG9DRkhUVFBDb29raWVTdG9yYWdl
QWNjZXB0UG9saWN5KHBvbGljeSkpOworICAgICAgICBpZiAoYXV0byAqc3RvcmFnZSA9IG5ldHdv
cmtTdG9yYWdlU2Vzc2lvbi5uc0Nvb2tpZVN0b3JhZ2UoKSkKKyAgICAgICAgICAgIHNhdmVDb29r
aWVzKHN0b3JhZ2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAgICAgfSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNv
b2tpZU1hbmFnZXJTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2ll
cy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAppbmRleCA3NTRkMGJiYzZiNGZlNzI3ZjBl
YmVhNDFmYjE4YzhhNmJhYWIxNjYzLi5kNTc2YWZkZTQyZjhiNTEyZjM0YjdhZTM0MWM5ZDc1MWFl
OTQ0ODZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMv
c291cC9XZWJDb29raWVNYW5hZ2VyU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCkBAIC0zNywxMSAr
MzcsMTIgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
LXZvaWQgV2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KQordm9pZCBXZWJDb29raWVNYW5hZ2VyOjpw
bGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBtX3Byb2Nlc3MuZm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihbcG9saWN5XSAoYXV0
byYgc2Vzc2lvbikgewogICAgICAgICBzZXNzaW9uLnNldENvb2tpZUFjY2VwdFBvbGljeShwb2xp
Y3kpOwogICAgIH0pOworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlcjo6c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0
b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCBiZThkOTY2NjJiZTZkY2Q4NWZhM2MzMjkyOWFlMGYw
YjVkMTgyMzQzLi4zZTg1OWViN2JhYzgwMmQyZDUzOTk4ZDBiMGE2YWYwNThlMTRiMDFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAt
MTczLDYgKzE3Myw3IEBAIE5ldHdvcmtQcm9jZXNzOjpOZXR3b3JrUHJvY2VzcyhBdXhpbGlhcnlQ
cm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1lCiAjZW5kaWYKIAogI2lmIFVT
RShTT1VQKQorICAgIC8vIEZJWE1FOiBEbyBub3QgdXNlIHRoZSBkZWZhdWx0IHNlc3Npb24gSUQu
CiAgICAgRE5TUmVzb2x2ZVF1ZXVlU291cDo6c2V0R2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNj
ZXNzb3IoW3RoaXNdKCkgLT4gU291cFNlc3Npb24qIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PE5ldHdvcmtTZXNzaW9uU291cCY+KCpuZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpKSkuc291cFNlc3Npb24oKTsKICAgICB9KTsKQEAgLTM0NywzMCAr
MzQ4LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1
dGlvbkRlYnVnTW9kZShwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZSk7CiAKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
LQotICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24o
c2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkp
OwotCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLSAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3Rh
LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmln
aW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
LmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNFUlZJ
Q0VfV09SS0VSKQotICAgIGJvb2wgc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5
RW5hYmxlZCA9IHRydWU7Ci0gICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oUEFMOjpTZXNzaW9u
SUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRl
bGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQo
c2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3Rv
cmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2Nh
bFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0byogZGVmYXVsdFNl
c3Npb24gPSBuZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KTsKLSAgICBhdXRvKiBkZWZhdWx0U3RvcmFnZVNlc3Npb24gPSBkZWZhdWx0U2Vzc2lvbi0+bmV0
d29ya1N0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjb29raWUgOiBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzKQotICAgICAg
ICBkZWZhdWx0U3RvcmFnZVNlc3Npb24tPnNldENvb2tpZShjb29raWUpOwotCiAgICAgZm9yIChh
dXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxl
bWVudC0+aW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKIApAQCAtNTA1LDggKzQ4Miw2IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Np
b25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNv
bnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVXNlVGVzdGluZ05ldHdv
cmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXJCYXNlKQogI2VuZGlmCiB7Ci0gICAg
QVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsK
LQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmFkZChzZXNz
aW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAg
IHJldHVybjsKQEAgLTUyMSw3ICs0OTYsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVT
ZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQogICAg
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gbWFrZVN0cmluZyhpZGVudGlm
aWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygp
KS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAg
ICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lv
bihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAoc2Vzc2lvbklE
ICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgICAgIHN0b3JhZ2VT
ZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVDRlN0b3JhZ2VT
ZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkpOwogCiAgICAgaWYgKE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQSSgpKSB7CkBAIC01NDQsMjEg
KzUxOSwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVBY2NlcHRQb2xpY3lDaGFuZ2Vk
KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9saWN5KQogCiBXZWJDb3JlOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6OlNl
c3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0dXJuICZkZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmdldChz
ZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtQ
cm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIGlmICghbV9kZWZh
dWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1bHROZXR3b3JrU3RvcmFn
ZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwotICAgIHJl
dHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQotCiB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQo
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9yKQogewotICAgIGZ1bmN0
b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0byYgc3RvcmFnZVNlc3Np
b24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAgICAgICAgIGZ1bmN0b3Io
KnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuaAppbmRleCA2YWQzZDY5OWE4OTFjM2JmOTJkNWUyYzRkNDQ4M2MzNjJmMjY0
NmQwLi5jOGI0NTc3ZWJiNDdiYTQ0MzdlYTM4YmJjYjVkZTZkNjIyZWFlYTUyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0xNzAsNyArMTcw
LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNv
bnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7CiAg
ICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbihjb25zdCBQ
QUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
biYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nlc3Npb24oY29uc3QgUEFM
OjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIGVuc3VyZVNlc3Np
b24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vz
c2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4mJik7CkBAIC0zNzUsNyArMzc0LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAg
IHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigp
IGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBAIC01NDQsNyArNTQyLDYgQEAgcHJpdmF0
ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3Jr
U2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQs
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiBtX25ldHdv
cmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247CiAK
ICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggY2M1YzQ0YmNkZTRjMzZiNWQzMWZl
MjNhM2NiNWYyMzVjNDQ4ZTMwYy4uOTA2MzliNjkyMTgzZGViNGI2N2MzYWFkNjk4YWM4ZGFjYjdl
YWFkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTU1LDcgKzU1LDYg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5j
b2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc1NES1ZlcnNpb247
CiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwogI2Vu
ZGlmCi0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKICNpZiBVU0Uo
U09VUCkKICAgICBlbmNvZGVyIDw8IGNvb2tpZUFjY2VwdFBvbGljeTsKICAgICBlbmNvZGVyIDw8
IGxhbmd1YWdlczsKQEAgLTY2LDkgKzY1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNv
ZGVyIDw8IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbDsKICAgICBlbmNvZGVyIDw8IHVybFNj
aGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzczsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
LSAgICBlbmNvZGVyIDw8IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPDwgc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA8PCBzaG91bGRE
aXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5OwotI2VuZGlmCiAgICAg
ZW5jb2RlciA8PCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZTsKICAgICBlbmNvZGVyIDw8IGVuYWJs
ZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZTsKIH0KQEAgLTExNCwxMiArMTEwLDYgQEAgYm9v
bCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjb2RlciYg
ZGVjb2RlciwgTmV0d29ya1Byb2MKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKLSAg
ICBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnM7Ci0gICAgZGVjb2RlciA+PiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAg
ICBpZiAoIWRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMpOwotCiAjaWYgVVNFKFNPVVApCiAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQuY29va2llQWNjZXB0UG9saWN5KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTM2LDIwICsxMjYsNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcykpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlvbmFsPFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVz
dWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBX
VEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERpc2FibGVTZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0j
ZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJsZUlUUERh
dGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmgKaW5kZXggZGZmM2U1ZmYwNGI4ZGVmZDFkODY4ODYyYTAxYjE4MmVmYWFlZTAyYS4uYjAz
YmFjOTA3MmJjNGEwOWU5Y2IwY2NhMWU2ODgxNmFlMmRiNzljNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaApAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiQ2FjaGVNb2RlbC5o
IgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llLmg+CiAjaW5jbHVkZSA8
d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTcwLDggKzY5LDYg
QEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBuZXR3b3JrQVRTQ29udGV4dDsKICNlbmRpZgogCi0gICAgV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMgZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAgCiAjaWYg
VVNFKFNPVVApCiAgICAgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2Nl
cHRQb2xpY3kgeyBXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQg
fTsKICAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7CkBAIC04MiwxMiArNzksNyBAQCBzdHJ1
Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFZlY3RvcjxTdHJpbmc+
IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbDsKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxTY2hl
bWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0g
ICAgU3RyaW5nIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnk7Ci0gICAgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGU7Ci0gICAgYm9vbCBzaG91bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NU
ZXJtaW5hdGlvbkRlbGF5IHsgZmFsc2UgfTsKLSNlbmRpZgotICAgIGJvb2wgc2hvdWxkRW5hYmxl
SVRQRGF0YWJhc2UgeyBmYWxzZSB9OworICAgIGJvb2wgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2Ug
eyB0cnVlIH07CiAgICAgYm9vbCBlbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUgeyBm
YWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9X
ZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKaW5kZXggZjk5NWUw
MWQ0N2Q4YmRkOTY5ZjJjODBlNjc5YWRhZTE3YzlkNWI3Mi4uMDJjODY3M2QzOWIxYjY4MjY2MmE3
N2VkMWM2MTY2ZDk3MWE2MmY0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCkBA
IC0yMTQsNyArMjE0LDggQEAgdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y2xlYXIoKQogCiB2
b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpjbG9zZSgpCiB7Ci0gICAgQVNTRVJUKCFtX2lzQ2xv
c2VkKTsKKyAgICBpZiAobV9pc0Nsb3NlZCkKKyAgICAgICAgcmV0dXJuOwogICAgIG1faXNDbG9z
ZWQgPSB0cnVlOwogCiAgICAgaWYgKG1fZGlkU2NoZWR1bGVEYXRhYmFzZVVwZGF0ZSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vz
c0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJv
Y2Vzc0NvY29hLm1tCmluZGV4IGRhNjM1OTEyNDIyM2RiOTcwMzBkMWVhNzdiYzAwY2VlNTFmYjAx
N2QuLjgyZDQ0MjBhY2ZiYjdlZDIyMTM5MzEwYjIyYjE3YzJkYjIwY2JmMzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNz
Q29jb2EubW0KQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIk5ldHdvcmtSZXNvdXJjZUxvYWRl
ci5oIgogI2ltcG9ydCAiTmV0d29ya1Nlc3Npb25Db2NvYS5oIgogI2ltcG9ydCAiU2FuZGJveEV4
dGVuc2lvbi5oIgorI2ltcG9ydCAiV2ViQ29va2llTWFuYWdlci5oIgogI2ltcG9ydCA8V2ViQ29y
ZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvUHVibGljU3VmZml4
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdENGTmV0Lmg+CkBAIC03OCw5ICs3
OSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzQ29jb2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29u
c3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFt
ZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5wYXJlbnRCdW5kbGVE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQot
ICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgogI2VuZGlmCiAKICAgICBfQ0ZOZXR3b3JrU2V0QVRTQ29u
dGV4dChwYXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0LmdldCgpKTsKQEAgLTEwNSwxMSArMTAz
LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3NDb2NvYShjb25zdCBOZXR3b3JrUHJvY2Vzc0MKICAgICBbTlNVUkxDYWNoZSBzZXRTaGFyZWRV
UkxDYWNoZTp1cmxDYWNoZS5nZXQoKV07CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1
bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25J
RCgpKTsKLX0KLQogUmV0YWluUHRyPENGRGF0YVJlZj4gTmV0d29ya1Byb2Nlc3M6OnNvdXJjZUFw
cGxpY2F0aW9uQXVkaXREYXRhKCkgY29uc3QKIHsKICNpZiBVU0UoU09VUkNFX0FQUExJQ0FUSU9O
X0FVRElUX0RBVEEpCkBAIC0yMjEsNyArMjE0LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Zmx1
c2hDb29raWVzKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW4K
ICAgICBwbGF0Zm9ybUZsdXNoQ29va2llcyhzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAotc3RhdGljIHZvaWQgc2F2ZUNvb2tpZXMoTlNIVFRQQ29va2llU3RvcmFn
ZSAqY29va2llU3RvcmFnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQordm9pZCBzYXZlQ29va2llcyhOU0hUVFBDb29raWVTdG9yYWdlICpjb29raWVTdG9y
YWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBBU1NFUlQoY29va2llU3RvcmFnZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1By
b2Nlc3NDdXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3Jr
UHJvY2Vzc0N1cmwuY3BwCmluZGV4IGQ5OWY5ZGQ2NGJhZDZlNDJkY2M4ZTNmOWI4ZjE2OTI5OTdm
NjcxOTIuLjQ5NTM4MTFiMjE2NGU4OTg0NmY5Mjc5ZTYyMjlkNTkzZTIyNTZhMzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vz
c0N1cmwuY3BwCkBAIC0zOSwxMSArMzksNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogewog
fQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3
b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAot
ewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4o
UEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBDZXJ0aWZp
Y2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbywgY29uc3QgU3RyaW5nJiBob3N0KQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCmluZGV4IGMyNzM2ZTAyNmE1NWQz
ZDQwMjBmODRmNGQ2OTNkMTZiNDY1MmVkMjMuLjFlMTg0ODlmOTQ2MjBmMDJhN2Q5ZTllODY5ZWM4
NjQ5MWI3YmJkNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFj
L1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCkBAIC01NSwxNSArNTUsMTEgQEAg
dm9pZCBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Np
b24oTmV0d29ya1Byb2Nlc3MmIG5ldHcKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3Vt
ZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGUp
OwogCiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IHVpUHJvY2Vzc0Nvb2tp
ZVN0b3JhZ2U7Ci0gICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSAmJiAhcGFyYW1ldGVy
cy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci5pc0VtcHR5KCkpCisgICAgaWYgKCFz
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSAmJiAhcGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9y
YWdlSWRlbnRpZmllci5pc0VtcHR5KCkgJiYgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAg
ICAgICAgIHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UgPSBjb29raWVTdG9yYWdlRnJvbUlkZW50aWZ5
aW5nRGF0YShwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyKTsKIAog
ICAgIG5ldHdvcmtQcm9jZXNzLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIG1h
a2VTdHJpbmcoYmFzZSwgJy4nLCBzZXNzaW9uSUQudG9VSW50NjQoKSksIFdURk1vdmUodWlQcm9j
ZXNzQ29va2llU3RvcmFnZSkpOwogCi0gICAgYXV0byogc2Vzc2lvbiA9IG5ldHdvcmtQcm9jZXNz
LnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjb29raWUg
OiBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzKQotICAgICAgICBzZXNzaW9uLT5zZXRDb29raWUo
Y29va2llKTsKLQogICAgIG5ldHdvcmtQcm9jZXNzLnNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3
b3JrU2Vzc2lvbjo6Y3JlYXRlKG5ldHdvcmtQcm9jZXNzLCBXVEZNb3ZlKHBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5jcHAKaW5k
ZXggMGQzMWIzZDFiMzRmZTdjZDgwNDA1MWQ3ZjQxYjA0YzUxYTI5N2EyMC4uYTRjMDMxZDI4MzVl
ODQ0NDQ5Y2ZiYTMxYTA1NWE4MDMxYTJkM2QzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcApA
QCAtMzksNiArMzksNyBAQCBjbGFzcyBOZXR3b3JrUHJvY2Vzc01haW5Tb3VwIGZpbmFsOiBwdWJs
aWMgQXV4aWxpYXJ5UHJvY2Vzc01haW5CYXNlIHsKIHB1YmxpYzoKICAgICB2b2lkIHBsYXRmb3Jt
RmluYWxpemUoKSBvdmVycmlkZQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IElzIHRoaXMgc3Rp
bGwgbmVlZGVkPyBXZSBzaG91bGQgcHJvYmFibHkgZGVzdHJveSBhbGwgZXhpc3Rpbmcgc2Vzc2lv
bnMgYXQgdGhpcyBwb2ludCBpbnN0ZWFkLgogICAgICAgICAvLyBOZWVkZWQgdG8gZGVzdHJveSB0
aGUgU291cFNlc3Npb24gYW5kIFNvdXBDb29raWVKYXIsIGUuZy4gdG8gYXZvaWQKICAgICAgICAg
Ly8gbGVha2luZyBTUUxpdGUgdGVtcG9yYXJ5IGpvdXJuYWxpbmcgZmlsZXMuCiAgICAgICAgIGds
b2JhbE5ldHdvcmtQcm9jZXNzLT5kZXN0cm95U2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
c291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKaW5kZXggYTIxMjg0NTczM2E2YzQzMzA3NmM0
YmEyMjY5NGY2OGYzOTI2YWE5MC4uMDBmZjhiMmZlNTAzOGVjZDQzNGZjNDY3MzhmM2EwNWVlOGQ0
ODMzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdv
cmtQcm9jZXNzU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3Vw
L05ldHdvcmtQcm9jZXNzU291cC5jcHAKQEAgLTEzNSwxMSArMTM1LDYgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1By
b2Nlc3NDcmVhdGkKICAgICAgICAgdXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQocGFyYW1l
dGVycy5sYW5ndWFnZXMpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0
b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFn
ZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19
Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vycm9ycyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIGlmIChhdXRvKiBzZXNz
aW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0F0dGFjaG1lbnQuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0F0dGFjaG1lbnQuaAppbmRleCAxNzQzYzNiNzgzMGEwMzBmNTc1NzNjYjBlYWU4MjdkNDE5NTk0
YmFlLi5kNmZmM2MxN2ViYTBkMDRlMDdkZThiY2ExYWE3MmM1NDM3ZGM1YTM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9BdHRhY2htZW50LmgKKysrIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5oCkBAIC05NSw4ICs5NSw4IEBAIHByaXZhdGU6
CiAgICAgaW50IG1fZmlsZURlc2NyaXB0b3IgeyAtMSB9OwogICAgIHNpemVfdCBtX3NpemU7CiAj
ZWxpZiBPUyhEQVJXSU4pCi0gICAgbWFjaF9wb3J0X25hbWVfdCBtX3BvcnQ7Ci0gICAgbWFjaF9t
c2dfdHlwZV9uYW1lX3QgbV9kaXNwb3NpdGlvbjsKKyAgICBtYWNoX3BvcnRfbmFtZV90IG1fcG9y
dCB7IDAgfTsKKyAgICBtYWNoX21zZ190eXBlX25hbWVfdCBtX2Rpc3Bvc2l0aW9uIHsgMCB9Owog
I2VsaWYgT1MoV0lORE9XUykKICAgICBIQU5ETEUgbV9oYW5kbGUgeyBJTlZBTElEX0hBTkRMRV9W
QUxVRSB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXggNmQwYzEyOWE3NDA1MTBkMzg2OTczNzA1YWQwOTJl
ZjEzMmNjMDc1YS4uMDQ4MTBiM2UxOWJlOTZjYWQxYWQ4MmE0NGRjZWRiMjZlZjc4MjYxYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
LmNwcApAQCAtNDAsMTMgKzQwLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6
ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc0Nvb2tpZVN0b3Jh
Z2VJZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25I
YW5kbGU7Ci0gICAgZW5jb2RlciA8PCBwZW5kaW5nQ29va2llczsKIAogI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5IDw8
IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0Vf
V09SS0VSKQpAQCAtODMsMTIgKzc5LDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRo
RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5k
bGUpOwogCi0gICAgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4+IHBlbmRpbmdDb29r
aWVzOwotICAgIGRlY29kZXIgPj4gcGVuZGluZ0Nvb2tpZXM7Ci0gICAgaWYgKCFwZW5kaW5nQ29v
a2llcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLnBlbmRp
bmdDb29raWVzID0gV1RGTW92ZSgqcGVuZGluZ0Nvb2tpZXMpOwotCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBpbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnk7CiAgICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CkBAIC0xMDEsMTQg
KzkxLDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAgICBpZiAoIWluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9
IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIE9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZT4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0g
ICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKLSAgICBpZiAoIWluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMuaW5k
ZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpp
bmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKaW5kZXggZjI3ZGY0ODk4MDlm
MzE5NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQzOS4uZTFiMjMzNzAxOTlmZTM3MDMxZTlkYzVjMDU3
ODE1NTAyMWUzNGQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycy5oCkBAIC01MSwxNSArNTEsMTEgQEAgc3RydWN0IFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzIHsKIAogICAgIFZlY3Rvcjx1aW50OF90PiB1aVByb2Nlc3NDb29raWVT
dG9yYWdlSWRlbnRpZmllcjsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgY29va2llU3Rv
cmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gcGVu
ZGluZ0Nvb2tpZXM7CiAgICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMgbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzOwogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAg
U3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRh
YmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5kaWYKIAog
I2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKaW5kZXggYmMwNzg2NmZiYzM5NjhlNzZjYWE5
YTM1NjgxMGM2YTJmYjA5ZGNmZC4uZmY5NTU4OTJiZGEwYjgzYzIzYTk2YTA4MzllZjNiZDBkOTQ2
OWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29r
aWVTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29r
aWVTdG9yZS5jcHAKQEAgLTQ2LDggKzQ2LDYgQEAgbmFtZXNwYWNlIEFQSSB7CiBIVFRQQ29va2ll
U3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYnNpdGVE
YXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0RhdGFTdG9yZSh3ZWJzaXRlRGF0YVN0b3JlKQogewot
ICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9w
ZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlv
bnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkKQEAgLTU1LDgg
KzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkKICAgICBBU1NFUlQo
bV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoIW1fb2JzZXJ2ZWRDb29raWVNYW5h
Z2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0K
LSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIHZv
aWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC04MSwzMyArNzcsMTYg
QEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJvdW5kQ29va2llcyhjb25zdCBWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2kKIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tp
ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFT
dG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICgh
cG9vbCkgewotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBhbGxDb29raWVzOwotICAg
ICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgICAgICBhbGxDb29raWVzID0gZ2V0QWxsRGVm
YXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwotICAgICAgICBhbGxDb29raWVzLmFw
cGVuZFZlY3RvcihtX293bmluZ0RhdGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMoKSk7Ci0KLSAgICAg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IGFsbENvb2tpZXNdICgpIG11dGFibGUgewotICAgICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29r
aWVzKGFsbENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgfSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9v
bC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29r
aWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwg
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcG9vbCA9IFdURk1vdmUocG9v
bCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25z
dCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7CisgICAgYXV0byYg
Y29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tp
ZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldEFsbENvb2tpZXMobV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFibGUgewogICAgICAgICBmaWx0
ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0ZvclVSTChXVEY6OlVS
TCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRh
U3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAo
IXBvb2wpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwotCi0gICAgYXV0
byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5h
Z2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0Q29va2llcyhtX293bmluZ0RhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIHVybCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZl
Y3RvcjxXZWJDb3JlOjpDb29raWU+JiYgY29va2llcykgbXV0YWJsZSB7CisgICAgYXV0byYgY29v
a2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1h
bmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8
V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgewogICAgICAgICBmaWx0ZXJBcHBC
b3VuZENvb2tpZXMoY29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0p
OwogfQpAQCAtMTE1LDc4ICs5NCwyOSBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0Zv
clVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0bwogdm9pZCBI
VFRQQ29va2llU3RvcmU6OnNldENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4m
IGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0gKGF1dG8mJiBhcHBCb3VuZENvb2tpZXMpIG11dGFibGUgewotICAgICAgICBh
dXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFn
ZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7Ci0gICAgICAgICAgICBmb3IgKGF1
dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vzc2lvbiBiZWNhdXNlIHNlc3Npb24g
Y29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3b3JrIFByb2Nlc3Mgd2l0aCB1aVBy
b2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAgICAgICAgICAgICBpZiAobV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAgICAgICAgICAgICBzZXRDb29raWVJ
bkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgbV9vd25pbmdEYXRhU3RvcmUtPmFkZFBlbmRpbmdDb29r
aWUoY29va2llKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBw
bGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgICAgICBjb29raWVN
YW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgYXBwQm91
bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIg
PSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7Cisg
ICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lv
bklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29va2llKGNvbnN0IFdlYkNv
cmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNz
UG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAg
ICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Npb24pCi0gICAgICAgICAgICBkZWxl
dGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvb2tpZSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5yZW1vdmVQZW5kaW5nQ29va2ll
KGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRl
Q29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBbcG9vbCA9IFdU
Rk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7Cisg
ICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vz
cygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZShtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyhDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byog
cG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVy
YXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBkZWxldGVDb29raWVz
SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUFs
bENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBhdXRvJiBjb29r
aWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFu
YWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxsQ29va2llcyhtX293bmluZ0RhdGFT
dG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBUaGUgQ29tcGxldGlvbkhhbmRsZXIg
c2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tp
ZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9v
d25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsK
LSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lv
bklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xpY3kpOwotICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1l
bnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+
c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
ICgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAg
IGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3Mo
KS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5zZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmbHVzaENvb2tp
ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjI3
LDIxICsxNTcsNyBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNlcnZlcihPYnNl
cnZlciYgb2JzZXJ2ZXIpCiAKICAgICBtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyID0gbWFr
ZVVuaXF1ZTxBUElXZWJDb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcj4oKnRoaXMpOwogCi0gICAg
YXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3Jh
Z2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgQVNTRVJUKCFtX29i
c2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMpOwotCi0gICAgICAgIC8vIExpc3RlbiBmb3IgY29va2ll
IG5vdGlmaWNhdGlvbnMgaW4gdGhlIFVJUHJvY2VzcyBpbiB0aGUgbWVhbnRpbWUuCi0gICAgICAg
IHN0YXJ0T2JzZXJ2aW5nQ2hhbmdlc1RvRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKFt0aGlz
XSAoKSB7Ci0gICAgICAgICAgICBjb29raWVzRGlkQ2hhbmdlKCk7Ci0gICAgICAgIH0pOwotCi0g
ICAgICAgIG1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyA9IHRydWU7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gcG9vbC0+c3Vw
cGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBtX29ic2VydmVk
Q29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vzcygp
LmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdp
c3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFu
YWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCkBAIC0yNzYsNDYgKzE5MiwxMCBAQCB2b2lkIEhUVFBD
b29raWVTdG9yZTo6Y29va2llc0RpZENoYW5nZSgpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29v
a2llTWFuYWdlckRlc3Ryb3llZCgpCiB7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94
eS0+dW5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1f
Y29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2Vy
UHJveHkgPSBudWxscHRyOwotCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5w
cm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBw
b29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOworICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQ
cm9jZXNzKCkuY29va2llTWFuYWdlcigpOwogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJv
eHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9j
b29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKLXZvaWQgSFRUUENvb2tpZVN0b3JlOjpy
ZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAgQVNTRVJUKCFt
X3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAgbV9wcm9jZXNz
UG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVy
UHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKFt0aGlzXShXZWJQcm9jZXNzUG9vbCYgbmV3UHJv
Y2Vzc1Bvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+aXNBc3NvY2lhdGVk
UHJvY2Vzc1Bvb2wobmV3UHJvY2Vzc1Bvb2wpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIC8vIE5vdyB0aGF0IGFuIGFzc29jaWF0ZWQgcHJvY2VzcyBwb29sIGV4aXN0cywgd2UgbmVl
ZCB0byBmbHVzaCB0aGUgVUkgcHJvY2VzcyBjb29raWUgc3RvcmUKLSAgICAgICAgLy8gdG8gbWFr
ZSBzdXJlIGFueSBjaGFuZ2VzIGFyZSByZWZsZWN0ZWQgd2l0aGluIHRoZSBuZXcgcHJvY2VzcyBw
b29sLgotICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpOwotICAgICAg
ICBuZXdQcm9jZXNzUG9vbC5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCi0gICAgICAgIGlmICht
X2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKSB7Ci0gICAgICAgICAgICBtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5ID0gbmV3UHJvY2Vzc1Bvb2wuc3VwcGxlbWVudDxXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2Vy
UHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAq
bV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAgICAgIH0KLSAgICAgICAgdW5yZWdp
c3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotICAgIH0pOwotfQotCi12b2lk
IEhUVFBDb29raWVTdG9yZTo6dW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9u
cygpCi17Ci0gICAgaWYgKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcikK
LSAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlz
dGVuZXIobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsKLQotICAgIG1f
cHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IDA7Ci19Ci0KICNpZiAhUExB
VEZPUk0oQ09DT0EpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1c2hEZWZhdWx0VUlQcm9jZXNz
Q29va2llU3RvcmUoKSB7IH0KIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IEhUVFBDb29raWVTdG9y
ZTo6Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpIHsgcmV0dXJuIHsg
fTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29r
aWVTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9y
ZS5oCmluZGV4IGQ2MjBhZGRhNGU3Zjg5NDU2NjE4YTNlMjJlMWJmZDQzNTc3NzViMTkuLmEwNWY0
MTQzMGRiMmIyM2Q0MTc4NDA3OWE0ZmI4NmM3NDYwYTc1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKQEAgLTgzLDkgKzgzLDYgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRp
b25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25z
KCk7Ci0KICAgICB2b2lkIGZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7CiAgICAg
c3RhdGljIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29r
aWVTdG9yZUNvb2tpZXMoKTsKICAgICBzdGF0aWMgdm9pZCBzZXRDb29raWVJbkRlZmF1bHRVSVBy
b2Nlc3NDb29raWVTdG9yZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCmluZGV4IDU4YzU0NTNmNDg5ODdmNWUxYWZh
ZmVmMzRjNDMzMzVmMWI0Y2M5OTAuLjM3YmFhNjhmOTI0Yjk1ODcyZjAxZjdlNGE4MGQ1ZjQ5N2Q1
ZmU5YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcApA
QCAtNDExLDExICs0MTEsNiBAQCB2b2lkIFdLQ29udGV4dFByZWNvbm5lY3RUb1NlcnZlcihXS0Nv
bnRleHRSZWYsIFdLVVJMUmVmKQogewogfQogCi1XS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0
R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dFJlZikKLXsKLSAgICByZXR1cm4g
V2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c3VwcGxlbWVudDxXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSk7Ci19Ci0KIFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZikKIHsKICAgICByZXR1
cm4gV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERhdGFTdG9yZSgpOwpAQCAtNTI3LDEzICs1
MjIsNiBAQCB2b2lkIFdLQ29udGV4dFNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJF
bmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLAogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRl
eHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChlbmFibGUp
OwogfQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vydmlj
ZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgYWxsb3dzKQotewotI2lm
IEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+c2V0
QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5kaWYK
LX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQbHVnSW5BdXRvU3RhcnRPcmlnaW5I
YXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAgICAgcmV0dXJuIFdlYktpdDo6dG9B
UEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNo
ZXMoKS5sZWFrUmVmKCkpOwpAQCAtNTc1LDIxICs1NjMsMTEgQEAgdm9pZCBXS0NvbnRleHRTZXRG
b250QWxsb3dMaXN0KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS0FycmF5UmVmIGFycmF5UmVm
KQogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRGb250QWxsb3dMaXN0KFdlYktp
dDo6dG9JbXBsKGFycmF5UmVmKSk7CiB9CiAKLXZvaWQgV0tDb250ZXh0VGVybWluYXRlTmV0d29y
a1Byb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29u
dGV4dCktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0KIHZvaWQgV0tDb250ZXh0VGVy
bWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgV2ViS2l0
Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiB9CiAKLVByb2Nl
c3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tDb250ZXh0UmVmIGNv
bnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5uZXR3
b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKLX0KLQogdm9pZCBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQ
bHVnaW4oV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5nUmVmIGRvbWFpblJlZiwgV0tT
dHJpbmdSZWYgbmFtZVJlZiwgV0tBcnJheVJlZiBtaW1lVHlwZXNSZWYsIFdLQXJyYXlSZWYgZXh0
ZW5zaW9uc1JlZikKIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKQEAgLTYxOSwx
MiArNTk3LDExIEBAIHZvaWQgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRl
c3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4
dFJlZiktPmNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCk7CiB9CiAKLXZvaWQg
V0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0NvbnRleHRSZWYg
Y29udGV4dFJlZiwgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQordm9pZCBX
S0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFdLQ29udGV4dFJlZiwg
Ym9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogewotICAgIFdlYktpdDo6dG9J
bXBsKGNvbnRleHRSZWYpLT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2Vzcyk7CiB9CiAKLXZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3Rv
cmUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiB3ZWJzaXRl
RGF0YVN0b3JlKQordm9pZCBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShXS0Nv
bnRleHRSZWYsIFdLV2Vic2l0ZURhdGFTdG9yZVJlZikKIHsKLSAgICBXZWJLaXQ6OnRvSW1wbChj
b250ZXh0UmVmKS0+c2V0UHJpbWFyeURhdGFTdG9yZSgqV2ViS2l0Ojp0b0ltcGwod2Vic2l0ZURh
dGFTdG9yZSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaApp
bmRleCAxZDhmYWI4YTE0ODZhYWRiNDk0MTQ0Yjk4ZjEwZTkzNjM4ZDBjNWU2Li4yYWI2ZWY4NmY1
MzBlNzdmNzRjYmQ1ZGY1ODYyYWM0ZDMwYjc5ODc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS0NvbnRleHQuaApAQCAtMTY4LDcgKzE2OCw2IEBAIFdLX0VYUE9SVCB2b2lkIFdL
Q29udGV4dFN0b3BNZW1vcnlTYW1wbGVyKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIFdLX0VYUE9S
VCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFTdG9yZShXS0Nv
bnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKFdL
V2Vic2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUpOwogCiBXS19FWFBPUlQgV0tBcHBs
aWNhdGlvbkNhY2hlTWFuYWdlclJlZiBXS0NvbnRleHRHZXRBcHBsaWNhdGlvbkNhY2hlTWFuYWdl
cihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VN
RU5UKFdLV2Vic2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUpOwotV0tfRVhQT1JUIFdL
Q29va2llTWFuYWdlclJlZiBXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKFdLQ29udGV4dFJlZiBj
b250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEOwogV0tfRVhQT1JUIFdLR2VvbG9jYXRpb25NYW5h
Z2VyUmVmIFdLQ29udGV4dEdldEdlb2xvY2F0aW9uTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4
dCk7CiBXS19FWFBPUlQgV0tJY29uRGF0YWJhc2VSZWYgV0tDb250ZXh0R2V0SWNvbkRhdGFiYXNl
KFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIFdLX0VYUE9SVCBXS0tleVZhbHVlU3RvcmFnZU1hbmFn
ZXJSZWYgV0tDb250ZXh0R2V0S2V5VmFsdWVTdG9yYWdlTWFuYWdlcihXS0NvbnRleHRSZWYgY29u
dGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKFdLV2Vic2l0ZURhdGFT
dG9yZUdldERlZmF1bHREYXRhU3RvcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCmluZGV4IGEwMjUwMTFmNzBjYzY1OWY1ZmFhMDhhN2Q2
Y2JiM2ZmNTZlZTZhMzguLjQ4YTI5YzQ1NjhhYjY3YjNiN2UxZWY5ODE1NmY2ZWZhODk2YjFkZmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZh
dGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRl
LmgKQEAgLTgzLDExICs4Myw4IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFdhcm1Jbml0aWFs
UHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dCk7CiAvLyBBdCBzb21lIHBvaW50IGl0IHNob3Vs
ZCBiZSByZW1vdmVkLgogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0VXNlc05ldHdvcmtQcm9j
ZXNzKFdLQ29udGV4dFJlZiwgYm9vbCk7CiAKLVdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFRlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzKFdLQ29udGV4dFJlZik7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRl
eHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyhXS0NvbnRleHRSZWYpOwogCi1XS19FWFBPUlQgdm9p
ZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0
aW5nKFdLQ29udGV4dFJlZiwgYm9vbCk7Ci0KIHR5cGVkZWYgdm9pZCAoKldLQ29udGV4dEludmFs
aWRNZXNzYWdlRnVuY3Rpb24pKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lKTsKIFdLX0VYUE9SVCB2
b2lkIFdLQ29udGV4dFNldEludmFsaWRNZXNzYWdlRnVuY3Rpb24oV0tDb250ZXh0SW52YWxpZE1l
c3NhZ2VGdW5jdGlvbiBpbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKTsKICAgICAKQEAgLTk3LDggKzk0
LDYgQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0Rm9udEFsbG93TGlzdChXS0NvbnRleHRS
ZWYsIFdLQXJyYXlSZWYpOwogCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRQcmVjb25uZWN0VG9T
ZXJ2ZXIoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLVVJMUmVmIHNlcnZlclVSTCkgV0tfQ19BUElf
REVQUkVDQVRFRDsKIAotV0tfRVhQT1JUIFdLUHJvY2Vzc0lEIFdLQ29udGV4dEdldE5ldHdvcmtQ
cm9jZXNzSWRlbnRpZmllcihXS0NvbnRleHRSZWYgY29udGV4dCk7Ci0KIFdLX0VYUE9SVCB2b2lk
IFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihXS0NvbnRleHRSZWYgY29udGV4dCwgV0tTdHJp
bmdSZWYgZG9tYWluLCBXS1N0cmluZ1JlZiBuYW1lLCBXS0FycmF5UmVmIG1pbWVUeXBlcywgV0tB
cnJheVJlZiBleHRlbnNpb25zKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dENsZWFyU3VwcG9y
dGVkUGx1Z2lucyhXS0NvbnRleHRSZWYgY29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1BhZ2UuY3BwCmluZGV4IDY0OGYzMDA5NjFhNTA2MGM5Y2RmMDNlM2NmODA0NThi
ZjJiYjUwZGQuLmI0NDczNDIxMjAwNjEzYzE5ZWMzYWM5YWQ2Njk5NzUzNGFiZWYxOWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcApAQCAtMzk4LDYgKzM5OCwxMSBA
QCB1aW50NjRfdCBXS1BhZ2VHZXRSZW5kZXJUcmVlU2l6ZShXS1BhZ2VSZWYgcGFnZSkKICAgICBy
ZXR1cm4gdG9JbXBsKHBhZ2UpLT5yZW5kZXJUcmVlU2l6ZSgpOwogfQogCitXS1dlYnNpdGVEYXRh
U3RvcmVSZWYgV0tQYWdlR2V0V2Vic2l0ZURhdGFTdG9yZShXS1BhZ2VSZWYgcGFnZSkKK3sKKyAg
ICByZXR1cm4gdG9BUEkoJnRvSW1wbChwYWdlKS0+d2Vic2l0ZURhdGFTdG9yZSgpKTsKK30KKwog
V0tJbnNwZWN0b3JSZWYgV0tQYWdlR2V0SW5zcGVjdG9yKFdLUGFnZVJlZiBwYWdlUmVmKQogewog
ICAgIHJldHVybiB0b0FQSSh0b0ltcGwocGFnZVJlZiktPmluc3BlY3RvcigpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgKaW5kZXggNjcwYjVlOWZkNGI0NTRhMmI3ZWRmZDIy
MzJhYWU5NTFjNDY3ZDA4My4uYzUxYjgxNjJjODk3MzRhYjE1MmJlZjBlOTkyMzM3ZDU1ZjJkZThh
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgKQEAgLTExOCw2ICsxMTgs
OCBAQCBXS19FWFBPUlQgZG91YmxlIFdLUGFnZUdldEVzdGltYXRlZFByb2dyZXNzKFdLUGFnZVJl
ZiBwYWdlKTsKIAogV0tfRVhQT1JUIHVpbnQ2NF90IFdLUGFnZUdldFJlbmRlclRyZWVTaXplKFdL
UGFnZVJlZiBwYWdlKTsKIAorV0tfRVhQT1JUIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1BhZ2VH
ZXRXZWJzaXRlRGF0YVN0b3JlKFdLUGFnZVJlZiBwYWdlKTsKKwogV0tfRVhQT1JUIFdLSW5zcGVj
dG9yUmVmIFdLUGFnZUdldEluc3BlY3RvcihXS1BhZ2VSZWYgcGFnZSk7CiAKIFdLX0VYUE9SVCBX
S1N0cmluZ1JlZiBXS1BhZ2VDb3B5VXNlckFnZW50KFdLUGFnZVJlZiBwYWdlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYu
Y3BwCmluZGV4IDlkZGE1OTFjOTUxODlhYjBjMjVhYzU1NDY2YzBhMmJmYzM5MjdlYmMuLjY4NjEx
NGFhNWVkMGExMzE1ZTVhOWQ2MTk1MWI4ODAyYzc1ZjhhYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcApAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElIVFRQ
Q29va2llU3RvcmUuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVk
ZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0Lmgi
CiAjaW5jbHVkZSAiV0tEaWN0aW9uYXJ5LmgiCkBAIC02OSw2ICs3MCwxNiBAQCBXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgV0tXZWJzaXRlRGF0YVN0b3JlQ3JlYXRlV2l0aENvbmZpZ3VyYXRpb24oV0tX
ZWJzaXRlRGF0YVN0bwogICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmNyZWF0ZSgqV2ViS2l0Ojp0b0ltcGwoY29uZmlndXJhdGlvbiksIHNlc3Npb25J
RCkubGVha1JlZigpKTsKIH0KIAordm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3
b3JrUHJvY2VzcyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKQoreworICAgIFdlYktp
dDo6dG9JbXBsKGRhdGFTdG9yZSktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Cit9CisKK1dL
UHJvY2Vzc0lEIFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihX
S1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlKQoreworICAgIHJldHVybiBXZWJLaXQ6OnRv
SW1wbChkYXRhU3RvcmUpLT5uZXR3b3JrUHJvY2VzcygpLnByb2Nlc3NJZGVudGlmaWVyKCk7Cit9
CisKIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlUmVtb3ZlSVRQRGF0YUZvckRvbWFpbihXS1dlYnNp
dGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBXS1N0cmluZ1JlZiBob3N0LCB2b2lkKiBjb250
ZXh0LCBXS1dlYnNpdGVEYXRhU3RvcmVSZW1vdmVJVFBEYXRhRm9yRG9tYWluRnVuY3Rpb24gY2Fs
bGJhY2spCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgK
aW5kZXggZTc3ZDA5YzEwN2QxZGEwNzgzZDA5YzA3ZTI4MDNkMDg3MTI1ZTQ4Yi4uYWIyNjc3NDZi
ZTgwNzViMDE0YzlmZDgyMzM2MjJmYzU4ZjJlMjZiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKQEAgLTI5LDYgKzI5
LDEzIEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLQmFzZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS0Rl
cHJlY2F0ZWQuaD4KIAorI2lmIGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyKQordHlw
ZWRlZiBpbnQgV0tQcm9jZXNzSUQ7CisjZWxzZQorI2luY2x1ZGUgPHVuaXN0ZC5oPgordHlwZWRl
ZiBwaWRfdCBXS1Byb2Nlc3NJRDsKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVy
biAiQyIgewogI2VuZGlmCkBAIC01MCw2ICs1NywxMSBAQCBXS19FWFBPUlQgdm9pZCBXS1dlYnNp
dGVEYXRhU3RvcmVTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldFRlc3Rpbmco
VwogCiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRp
YWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogCitXS19FWFBPUlQgdm9p
ZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFT
dG9yZVJlZiBkYXRhU3RvcmUpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlVGVy
bWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSk7CisK
K1dLX0VYUE9SVCBXS1Byb2Nlc3NJRCBXS1dlYnNpdGVEYXRhU3RvcmVHZXROZXR3b3JrUHJvY2Vz
c0lkZW50aWZpZXIoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSk7CisKIFdLX0VYUE9S
VCBib29sIFdLV2Vic2l0ZURhdGFTdG9yZUdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVk
KFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tX
ZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJzaXRl
RGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUpOwogdHlwZWRlZiB2b2lkICgq
V0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0VwaGVtZXJhbEZ1bmN0aW9uKShib29sIGlzRXBo
ZW1lcmFsLCB2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQppbmRleCBmZjMwOTQ5ODZjMjQzZDA0
NzRmMjUyZDM5MWU2Y2NiNzRmMWZlZDViLi4xZjU2ZmJmYjY3OTUxNjQ4ZGYwYjRiYmRjYmYyYTU5
OWRjMDBiZGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tQcm9jZXNzUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tQcm9jZXNzUG9vbC5tbQpAQCAtNDA2LDI4ICs0MDYsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5
ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hN
YXA8UwogICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJTdXBwb3J0ZWRQbHVnaW5zKCk7CiB9CiAKLS0g
KHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCi17Ci0gICAgX3Byb2Nlc3NQb29sLT50ZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NX
aWxsU3VzcGVuZEltbWluZW50bHkKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJv
Y2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0KLQotLSAodm9pZClfc2Vu
ZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9u
SGFuZGxlcgotewotICAgIF9wcm9jZXNzUG9vbC0+c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRv
U3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBs
ZXRpb25IYW5kbGVyKV0gewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0pOwot
fQotCi0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUKLXsKLSAgICBfcHJvY2Vz
c1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpOwotfQotCiAtICh2b2lkKV90ZXJt
aW5hdGVTZXJ2aWNlV29ya2VycwogewogICAgIF9wcm9jZXNzUG9vbC0+dGVybWluYXRlU2Vydmlj
ZVdvcmtlcnMoKTsKQEAgLTQzNSwxMiArNDEzLDcgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqcG9s
aWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMK
IAogLSAodm9pZClfc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczooQk9PTCl1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzCiB7Ci0gICAgX3Byb2Nlc3NQb29sLT5zZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MpOwotfQotCi0tIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCi17Ci0gICAgcmV0
dXJuIF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7CisgICAgV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIH0KIAogLSAocGlkX3QpX3ByZXdhcm1lZFBy
b2Nlc3NJZGVudGlmaWVyCkBAIC00NjcsMTEgKzQ0MCw2IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkg
KnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1h
cDxTCiAgICAgX3Byb2Nlc3NQb29sLT5zZXRTaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hG
YWlsRm9yVGVzdGluZyh0cnVlKTsKIH0KIAotLSAodm9pZClfbWFrZU5leHROZXR3b3JrUHJvY2Vz
c0xhdW5jaEZhaWxGb3JUZXN0aW5nCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZXRTaG91bGRNYWtl
TmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcodHJ1ZSk7Ci19Ci0KIC0gKEJP
T0wpX2hhc1ByZXdhcm1lZFdlYlByb2Nlc3MKIHsKICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBf
cHJvY2Vzc1Bvb2wtPnByb2Nlc3NlcygpKSB7CkBAIC01NjAsMTggKzUyOCw2IEBAIHN0YXRpYyBO
U0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0
cmluZywgSGFzaE1hcDxTCiAgICAgX3Byb2Nlc3NQb29sLT5zZXRDb29raWVTdG9yYWdlUGFydGl0
aW9uaW5nRW5hYmxlZChlbmFibGVkKTsKIH0KIAotLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zeW50aGVzaXpl
QXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOwotfQotCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlT
U0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzCi17Ci0jaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQotICAgIF9wcm9jZXNzUG9vbC0+c2V0QWxsb3dzQW55U1NMQ2VydGlm
aWNhdGVGb3JTZXJ2aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCiAtIChpZCA8X1dLR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRlcj4p
X2NvcmVMb2NhdGlvblByb3ZpZGVyCiB7CkBAIC02MDQsMTEgKzU2MCw2IEBAIHN0YXRpYyBOU0Rp
Y3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmlu
ZywgSGFzaE1hcDxTCiAgICAgfSk7CiB9CiAKLS0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50Ci17Ci0gICAgcmV0dXJu
IF9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoZW50
aXRsZW1lbnQpOwotfQotCiAtICh2b2lkKV9jbGVhclBlcm1hbmVudENyZWRlbnRpYWxzRm9yUHJv
dGVjdGlvblNwYWNlOihOU1VSTFByb3RlY3Rpb25TcGFjZSAqKXByb3RlY3Rpb25TcGFjZQogewog
ICAgIF9wcm9jZXNzUG9vbC0+Y2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25T
cGFjZShXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UocHJvdGVjdGlvblNwYWNlKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJp
dmF0ZS5oCmluZGV4IDY3NjkwMTVlMDg1NTg5OTRjZDhhMjE5YTE3YTljNjhhZGUzYjUzODMuLjNi
OTMxNDA0YThlMmU0MzJkNTFjNTQ5NjVlMmRlZjVmOGVjZGMxMGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5o
CkBAIC04NywxNCArODcsOSBAQAogLSAoX1dLRG93bmxvYWQgKilfcmVzdW1lRG93bmxvYWRGcm9t
RGF0YTooTlNEYXRhICopcmVzdW1lRGF0YSB3ZWJzaXRlRGF0YVN0b3JlOihXS1dlYnNpdGVEYXRh
U3RvcmUgKilkYXRhU3RvcmUgIHBhdGg6KE5TU3RyaW5nICopcGF0aCBvcmlnaW5hdGluZ1dlYlZp
ZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJB
KSwgaW9zKFdLX0lPU19UQkEpKTsKIAogLy8gVGVzdCBvbmx5LiBTaG91bGQgYmUgY2FsbGVkIG9u
bHkgd2hpbGUgbm8gd2ViIGNvbnRlbnQgcHJvY2Vzc2VzIGFyZSBydW5uaW5nLgotLSAodm9pZClf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlv
cygxMy4wKSk7Ci0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2
b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Ci0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NX
aWxsU3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygx
My4wKSk7Ci0tICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAtICh2b2lkKV90ZXJtaW5hdGVTZXJ2aWNl
V29ya2VycyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSwgaW9zKDEyLjApKTsKIAogLy8g
VGVzdCBvbmx5LgotLSAocGlkX3QpX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllciBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjEzKSwgaW9zKDExLjApKTsKIC0gKHBpZF90KV9wcmV3YXJtZWRQcm9j
ZXNzSWRlbnRpZmllciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsK
IAogLy8gVGVzdCBvbmx5LgpAQCAtMTA2LDcgKzEwMSw2IEBACiAtIChzaXplX3QpX3NlcnZpY2VX
b3JrZXJQcm9jZXNzQ291bnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4w
KSk7CiAtICh2b2lkKV9zeW5jTmV0d29ya1Byb2Nlc3NDb29raWVzIFdLX0FQSV9ERVBSRUNBVEVE
X1dJVEhfUkVQTEFDRU1FTlQoIldLSFRUUENvb2tpZVN0b3JlLl9mbHVzaENvb2tpZXNUb0Rpc2tX
aXRoQ29tcGxldGlvbkhhbmRsZXI6IiwgbWFjb3MoMTAuMTMsIFdLX01BQ19UQkEpLCBpb3MoMTEu
MCwgV0tfSU9TX1RCQSkpOwogLSAodm9pZClfbWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZv
clRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4wKSk7Ci0tICh2
b2lkKV9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4wKSk7CiAtIChOU1VJbnRlZ2VyKV9tYXhpbXVt
U3VzcGVuZGVkUGFnZUNvdW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygx
Mi4yKSk7CiAtIChOU1VJbnRlZ2VyKV9wcm9jZXNzQ2FjaGVDYXBhY2l0eSBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogLSAoTlNVSW50ZWdlcilfcHJvY2Vzc0Nh
Y2hlU2l6ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKQEAgLTEy
MiwxMyArMTE2LDEwIEBACiAtICh2b2lkKV9wcmVjb25uZWN0VG9TZXJ2ZXI6KE5TVVJMICopc2Vy
dmVyVVJMIFdLX0FQSV9ERVBSRUNBVEVEX1dJVEhfUkVQTEFDRU1FTlQoIldLV2ViVmlldy5fcHJl
Y29ubmVjdFRvU2VydmVyIiwgbWFjb3MoMTAuMTMuNCwgV0tfTUFDX1RCQSksIGlvcygxMS4zLCBX
S19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4KLS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENl
cnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjooQk9PTClhbGxvd3MgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMy40KSwgaW9zKDExLjMpKTsKIC0gKHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2lu
c0luV2ViUHJvY2Vzc0ZvclRlc3Rpbmc6KHBpZF90KXBpZCBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCheKShOU0FycmF5PE5TU3RyaW5nICo+ICopKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7Ci0tIChCT09MKV9uZXR3b3JrUHJvY2Vz
c0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudCBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogLSAodm9pZClfY2xlYXJQZXJt
YW5lbnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2Ug
Kilwcm90ZWN0aW9uU3BhY2UgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4w
KSk7CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9X2lzQ29va2llU3RvcmFnZVBhcnRp
dGlvbmluZ0VuYWJsZWQsIHNldHRlcj1fc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJs
ZWQ6KSBCT09MIF9jb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZCBXS19BUElfREVQUkVD
QVRFRCgiUGFydGl0aW9uZWQgY29va2llcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCIsIG1hY29z
KDEwLjEyLjMsIDEwLjE0LjQpLCBpb3MoMTAuMywgMTIuMikpOwotLSAodm9pZClfc3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTUpLCBpb3MoMTMuMCkpOwogCiAvLyBUZXN0IG9ubHkuCiAtICh2b2lkKV9zZWVkUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0ZvclRlc3RpbmdXaXRoRmlyc3RQYXJ0eTooTlNVUkwgKilmaXJzdFBh
cnR5VVJMIHRoaXJkUGFydHk6KE5TVVJMICopdGhpcmRQYXJ0eVVSTCBzaG91bGRTY2hlZHVsZU5v
dGlmaWNhdGlvbjooQk9PTClzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiBjb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciAgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCmluZGV4IDI5
OGQ5Y2VjOWU4NGQ4YTUxMjIwNjVjYzk5MjMzZWY0ZjBiOTUzODkuLjgwZDMzMGYyOTI0ZDBmYmMw
YWU5YjYxZTk2NzA4Y2ZjZmMzMjhmM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQpAQCAtNjE3LDYgKzYxNywx
MSBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURh
dGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogICAgIH0pOwogfQogCistIChCT09MKV9uZXR3
b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVu
dAoreworICAgIHJldHVybiBfd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNFbnRp
dGxlbWVudEZvclRlc3RpbmcoZW50aXRsZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0ZURh
dGFTdG9yZURlbGVnYXRlPilfZGVsZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdldCgp
LmdldCgpOwpAQCAtNjY4LDQgKzY3Myw0MiBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0
ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogI2Vu
ZGlmCiB9CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzCit7CisgICAgX3dlYnNp
dGVEYXRhU3RvcmUtPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7Cit9CisKKy0gKHZvaWQpX3Nl
bmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlv
bkhhbmRsZXIKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzUHJl
cGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRy
KGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAg
IH0pOworfQorCistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHkKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworCit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJv
Y2Vzc0RpZFJlc3VtZQoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nl
c3NEaWRSZXN1bWUoKTsKK30KKworLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDoo
Qk9PTCliYWNrZ3JvdW5kCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNz
KCkuc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKK30KKworLSAocGlkX3Qp
X25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcgoreworICAgIHJldHVybiBfd2Vic2l0ZURhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3MoKS5wcm9jZXNzSWRlbnRpZmllcigpOworfQorCisrICh2b2lkKV9t
YWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcKK3sKKyAgICBXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6Om1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZygpOworfQorCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAppbmRleCA5OTMyMDEw
NDZiNTUxYzNmMjhkZjJkYzBhMDM0NmQ3YmM3OWFjNWY0Li5hODU2YmU2ZjU4YmQzMDNjNTk4MmI2
YmZmOGMyZWYzYzkwODUyMDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKQEAgLTg1LDkg
Kzg1LDE5IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tXZWJzaXRlRGF0YVN0
b3JlRmV0Y2hPcHRpb25zKSB7CiAKIC0gKHZvaWQpX3JlbmFtZU9yaWdpbjooTlNVUkwgKilvbGRO
YW1lIHRvOihOU1VSTCAqKW5ld05hbWUgZm9yRGF0YU9mVHlwZXM6KE5TU2V0PE5TU3RyaW5nICo+
ICopZGF0YVR5cGVzIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9u
SGFuZGxlcjsKIAorLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rp
bmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwogQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWlj
LCB3ZWFrKSBpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVnYXRlPiBfZGVsZWdhdGUgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiBAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHksIGNvcHkpIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpfY29u
ZmlndXJhdGlvbjsKIAorLSAodm9pZClfdGVybWluYXRlTmV0d29ya1Byb2Nlc3MgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3Nl
bmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlv
bkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseSBX
S19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAo
dm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zeW50aGVzaXplQXBwSXNC
YWNrZ3JvdW5kOihCT09MKWJhY2tncm91bmQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsK
KysgKHZvaWQpX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyBXS19B
UElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCiBAZW5k
CiAKIE5TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAppbmRleCAxZWU3M2ViYzBl
YTAzNmY4NmIzZmU5NDQxNDkwNzJlNmFjNGRjNzY3Li5kMTBkYjI5MzZjYThmNTJiOTA3NzY1ZDg2
Y2U2YjUxYmNlZThiM2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcApAQCAtMjEsNiArMjEsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdENvb2tpZU1hbmFnZXIuaCIKIAorI2lu
Y2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJTb3VwQ29va2llUGVyc2lz
dGVudFN0b3JhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAj
aW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUuaCIKQEAgLTU2LDYgKzU3LDEyIEBA
IGVudW0gewogfTsKIAogc3RydWN0IF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSB7CisgICAg
V2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChkYXRhTWFuYWdlcik7CisgICAgICAgIHJldHVybiB3ZWJraXRXZWJzaXRlRGF0
YU1hbmFnZXJHZXREYXRhU3RvcmUoZGF0YU1hbmFnZXIpLm5ldHdvcmtQcm9jZXNzKCkuY29va2ll
TWFuYWdlcigpOworICAgIH0KKwogICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoZGF0YU1hbmFnZXIpOwpAQCAtNjQsOCArNzEsNyBAQCBz
dHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKIAogICAgIH5fV2ViS2l0Q29va2ll
TWFuYWdlclByaXZhdGUoKQogICAgIHsKLSAgICAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6
IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhkYXRhTWFuYWdlcikpCi0g
ICAgICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+
KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOworICAg
ICAgICBjb29raWVNYW5hZ2VyKCkuc2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQo
KSwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRh
TWFuYWdlcjsKQEAgLTEzOSwxMSArMTQ1LDkgQEAgV2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0
Q29va2llTWFuYWdlckNyZWF0ZShXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW4KIHsK
ICAgICBXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyID0gV0VCS0lUX0NPT0tJRV9NQU5BR0VS
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT09LSUVfTUFOQUdFUiwgbnVsbHB0cikpOwogICAg
IG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyID0gZGF0YU1hbmFnZXI7Ci0gICAgZm9yIChhdXRv
KiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyht
YW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNr
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbbWFuYWdlcl0gewotICAgICAgICAgICAgZ19z
aWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxzW0NIQU5HRURdLCAwKTsKLSAgICAgICAgfSk7Ci0g
ICAgfQorICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVPYnNlcnZl
ckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbbWFuYWdlcl0geworICAgICAg
ICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOworICAgIH0pOwog
ICAgIHJldHVybiBtYW5hZ2VyOwogfQogCkBAIC0xNzMsOCArMTc3LDcgQEAgdm9pZCB3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZShXZWJLaXRDb29raWVNYW5hZ2Vy
KiBtYW5hZ2VyLAogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29v
a2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1l
KSwgdG9Tb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0b3JhZ2UpKTsKKyAgICBtYW5h
Z2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuc2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vz
c2lvbklELCBTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2llUGVyc2lzdGVu
dFN0b3JhZ2VUeXBlKHN0b3JhZ2UpKTsKIH0KIAogLyoqCkBAIC0xOTIsOCArMTk1LDcgQEAgdm9p
ZCB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3koV2ViS2l0Q29va2llTWFu
YWdlciogbWFuYWdlciwgV2ViS2kKIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19D
T09LSUVfTUFOQUdFUihtYW5hZ2VyKSk7CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDog
d2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRh
dGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFu
YWdlclByb3h5PigpLT5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNl
c3Npb25JRCgpLCB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0pOwor
ICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3ko
cG9saWN5KSwgW10oKSB7IH0pOwogfQogCiAvKioKQEAgLTIxNywxNCArMjE5LDcgQEAgdm9pZCB3
ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3koV2ViS2l0Q29va2llTWFuYWdl
ciogbWFuYWdlciwgR0NhbmMKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYo
Z190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7CiAK
LSAgICAvLyBUaGUgcG9saWN5IGlzIHRoZSBzYW1lIGluIGFsbCBwcm9jZXNzIHBvb2xzIGhhdmlu
ZyB0aGUgc2FtZSBzZXNzaW9uIElELCBzbyBqdXN0IGFzayBhbnkuCi0gICAgY29uc3QgYXV0byYg
cHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1h
bmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHko
KSkgewotICAgICAgICBnX3Rhc2tfcmV0dXJuX2ludCh0YXNrLmdldCgpLCBXRUJLSVRfQ09PS0lF
X1BPTElDWV9BQ0NFUFRfTk9fVEhJUkRfUEFSVFkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwg
W3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBv
bGljeSkgeworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUo
dGFzayldKFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CiAgICAgICAg
IGdfdGFza19yZXR1cm5faW50KHRhc2suZ2V0KCksIHRvV2ViS2l0Q29va2llQWNjZXB0UG9saWN5
KHBvbGljeSkpOwogICAgIH0pOwogfQpAQCAtMjY5LDExICsyNjQsNyBAQCB2b2lkIHdlYmtpdF9j
b29raWVfbWFuYWdlcl9hZGRfY29va2llKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIFNv
dXBDb29raWUqCiAgICAgZ19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAgICAgR1JlZlB0cjxH
VGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBj
YWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBm
cm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAv
LyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmly
c3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdl
YnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdl
cik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKS0+c2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgeyBXZWJDb3JlOjpD
b29raWUoY29va2llKSB9LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIG1hbmFnZXIt
PnByaXYtPmNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25J
RCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0o
KSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAg
ICB9KTsKIH0KQEAgLTMyMCwxMSArMzExLDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJf
Z2V0X2Nvb2tpZXMoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgY29uc3QgZ2NoYXIKICAg
ICBnX3JldHVybl9pZl9mYWlsKHVyaSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRv
cHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0
YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUg
U1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNz
IHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wu
Ci0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
R2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNz
UG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVz
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgo
dXJpKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tp
ZT4mIGNvb2tpZXMpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuZ2V0Q29v
a2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21V
VEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiBjb29raWVzKSB7CiAgICAgICAgIEdMaXN0KiBjb29raWVzTGlzdCA9IG51bGxwdHI7
CiAgICAgICAgIGZvciAoYXV0byYgY29va2llIDogY29va2llcykKICAgICAgICAgICAgIGNvb2tp
ZXNMaXN0ID0gZ19saXN0X3ByZXBlbmQoY29va2llc0xpc3QsIGNvb2tpZS50b1NvdXBDb29raWUo
KSk7CkBAIC0zNzgsMTEgKzM2NSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0
ZV9jb29raWUoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpCiAgICAgZ19y
ZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0
R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEp
KTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNR
TGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3
ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgot
ICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdl
dFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bv
b2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+ZGVsZXRlQ29va2ll
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBXZWJDb3JlOjpDb29raWUoY29va2llKSwgW3Rh
c2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2Vy
KCkuZGVsZXRlQ29va2llKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBXZWJDb3JlOjpDb29r
aWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3Jl
dHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcAppbmRl
eCA3MTY2N2NmNDczMmE3NzQwZDY4ZjdkMzNlODc3N2EyZjQxMGQ5ZDVjLi4zNmQwMDA4YmEyMTdh
YzEwNWY5ODQyZDkxMjJiZDZiMzE1YzViZTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtNDAyLDcgKzQwMiw2
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmpl
Y3QpCiAgICAgICAgIHByaXYtPndlYnNpdGVEYXRhTWFuYWdlciA9IGFkb3B0R1JlZih3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3KCJsb2NhbC1zdG9yYWdlLWRpcmVjdG9yeSIsIHByaXYt
PmxvY2FsU3RvcmFnZURpcmVjdG9yeS5kYXRhKCksIG51bGxwdHIpKTsKIAogICAgIHByaXYtPnBy
b2Nlc3NQb29sID0gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShjb25maWd1cmF0aW9uKTsKLSAgICBw
cml2LT5wcm9jZXNzUG9vbC0+c2V0UHJpbWFyeURhdGFTdG9yZSh3ZWJraXRXZWJzaXRlRGF0YU1h
bmFnZXJHZXREYXRhU3RvcmUocHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKSk7CiAgICAg
cHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFVzZXJNZXNzYWdlSGFuZGxlcihbd2ViQ29udGV4dF0oVXNl
ck1lc3NhZ2UmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJNZXNzYWdlJiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAgIC8vIFNpbmsgdGhlIGZsb2F0aW5nIHJl
Zi4KICAgICAgICAgR1JlZlB0cjxXZWJLaXRVc2VyTWVzc2FnZT4gdXNlck1lc3NhZ2UgPSB3ZWJr
aXRVc2VyTWVzc2FnZUNyZWF0ZShXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CkBAIC00MTAsOCArNDA5LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29udGV4
dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgZ19zaWduYWxfZW1pdCh3ZWJD
b250ZXh0LCBzaWduYWxzW1VTRVJfTUVTU0FHRV9SRUNFSVZFRF0sIDAsIHVzZXJNZXNzYWdlLmdl
dCgpLCAmcmV0dXJuVmFsdWUpOwogICAgIH0pOwogCi0gICAgd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyQWRkUHJvY2Vzc1Bvb2wocHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpLCAqcHJpdi0+
cHJvY2Vzc1Bvb2wpOwotCiAgICAgcHJpdi0+cHJvY2Vzc01vZGVsID0gV0VCS0lUX1BST0NFU1Nf
TU9ERUxfTVVMVElQTEVfU0VDT05EQVJZX1BST0NFU1NFUzsKIAogI2lmIEVOQUJMRShNRU1PUllf
U0FNUExFUikKQEAgLTQzOSwxMSArNDM2LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29udGV4
dERpc3Bvc2UoR09iamVjdCogb2JqZWN0KQogICAgICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0
RG93bmxvYWRDbGllbnQobWFrZVVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PigpKTsKICAg
ICB9CiAKLSAgICBpZiAocHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyKSB7Ci0gICAgICAgIHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlclJlbW92ZVByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFu
YWdlci5nZXQoKSwgKnByaXYtPnByb2Nlc3NQb29sKTsKLSAgICAgICAgcHJpdi0+d2Vic2l0ZURh
dGFNYW5hZ2VyID0gbnVsbHB0cjsKLSAgICB9Ci0KICAgICBpZiAocHJpdi0+ZmF2aWNvbkRhdGFi
YXNlKSB7CiAgICAgICAgIHdlYmtpdEZhdmljb25EYXRhYmFzZUNsb3NlKHByaXYtPmZhdmljb25E
YXRhYmFzZS5nZXQoKSk7CiAgICAgICAgIHByaXYtPmZhdmljb25EYXRhYmFzZSA9IG51bGxwdHI7
CkBAIC0xNTgxLDggKzE1NzMsOCBAQCB2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9wcmVmZXRjaF9k
bnMoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogaG9zdAogICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpKTsKICAgICBnX3JldHVy
bl9pZl9mYWlsKGhvc3RuYW1lKTsKIAotICAgIGlmIChjb250ZXh0LT5wcml2LT5kbnNQcmVmZXRj
aGVkSG9zdHMuYWRkKGhvc3RuYW1lKS5pc05ld0VudHJ5KQotICAgICAgICBjb250ZXh0LT5wcml2
LT5wcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpQcmVmZXRjaEROUyhTdHJpbmc6OmZyb21VVEY4KGhvc3RuYW1lKSkpOworICAgIGF1
dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3Rv
cmUoY29udGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKKyAgICB3ZWJzaXRl
RGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlByZWZldGNoRE5TKFN0cmluZzo6ZnJvbVVURjgoaG9zdG5hbWUpKSwgMCk7CiAgICAgY29udGV4
dC0+cHJpdi0+ZG5zUHJlZmV0Y2hIeXN0ZXJlcmlzLmltcHVsc2UoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCA0
MTM1YzI2NTQyODdmNWM3ZDZjYjUwOGQxM2JmNWY2Mjk2MTYxZjZmLi5kOGIzZjNjMTk5OTI4OGYy
YTE4ZGEzN2I2ZjI0YTljOGEzYzNjZjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcApAQCAtNzU5LDcgKzc1OSw2IEBAIHN0YXRp
YyB2b2lkIHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgICAg
IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfdGxzX2Vycm9yc19wb2xpY3kocHJpdi0+
d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpLCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0
X3Rsc19lcnJvcnNfcG9saWN5KGNvbnRleHREYXRhTWFuYWdlcikpOwogICAgICAgICBhdXRvIHBy
b3h5U2V0dGluZ3MgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoY29udGV4
dERhdGFNYW5hZ2VyKS5uZXR3b3JrUHJveHlTZXR0aW5ncygpOwogICAgICAgICB3ZWJraXRXZWJz
aXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUocHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgp
KS5zZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXVEZNb3ZlKHByb3h5U2V0dGluZ3MpKTsKLSAgICAg
ICAgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQWRkUHJvY2Vzc1Bvb2wocHJpdi0+d2Vic2l0ZURh
dGFNYW5hZ2VyLmdldCgpLCB3ZWJraXRXZWJDb250ZXh0R2V0UHJvY2Vzc1Bvb2wocHJpdi0+Y29u
dGV4dC5nZXQoKSkpOwogICAgIH0KIAogICAgIGlmICghcHJpdi0+d2Vic2l0ZVBvbGljaWVzKQpA
QCAtOTQ1LDExICs5NDQsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3RGlzcG9zZShHT2Jq
ZWN0KiBvYmplY3QpCiAgICAgICAgIHdlYmtpdFdlYkNvbnRleHRXZWJWaWV3RGVzdHJveWVkKHdl
YlZpZXctPnByaXYtPmNvbnRleHQuZ2V0KCksIHdlYlZpZXcpOwogICAgIH0KIAotICAgIGlmICh3
ZWJWaWV3LT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIpIHsKLSAgICAgICAgd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyUmVtb3ZlUHJvY2Vzc1Bvb2wod2ViVmlldy0+cHJpdi0+d2Vic2l0ZURhdGFN
YW5hZ2VyLmdldCgpLCB3ZWJraXRXZWJDb250ZXh0R2V0UHJvY2Vzc1Bvb2wod2ViVmlldy0+cHJp
di0+Y29udGV4dC5nZXQoKSkpOwotICAgICAgICB3ZWJWaWV3LT5wcml2LT53ZWJzaXRlRGF0YU1h
bmFnZXIgPSBudWxscHRyOwotICAgIH0KLQogICAgIGlmICh3ZWJWaWV3LT5wcml2LT5jdXJyZW50
U2NyaXB0RGlhbG9nKSB7CiAgICAgICAgIHdlYmtpdF9zY3JpcHRfZGlhbG9nX2Nsb3NlKHdlYlZp
ZXctPnByaXYtPmN1cnJlbnRTY3JpcHREaWFsb2cpOwogICAgICAgICBBU1NFUlQoIXdlYlZpZXct
PnByaXYtPmN1cnJlbnRTY3JpcHREaWFsb2cpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAKaW5k
ZXggZGE5YTNhYWRiODQ5ZTBlMTY2N2JhZDk3MDQ5OGMyZGY1OGUwMGEzNS4uNGM0ZWY1ZDY4YWMz
YTFiNWNiNmFjYjk1NTlhOGZkNTNmYWJkMThlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3Bw
CkBAIC05NSwxMSArOTUsNiBAQCBlbnVtIHsKIH07CiAKIHN0cnVjdCBfV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyUHJpdmF0ZSB7Ci0gICAgfl9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRl
KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChwcm9jZXNzUG9vbHMuaXNFbXB0eSgpKTsKLSAgICB9
Ci0KICAgICBSZWZQdHI8V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlPiB3ZWJzaXRlRGF0YVN0b3Jl
OwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gYmFzZURhdGFEaXJlY3Rvcnk7CiAgICAgR1VuaXF1ZVB0
cjxjaGFyPiBiYXNlQ2FjaGVEaXJlY3Rvcnk7CkBAIC0xMTUsNyArMTEwLDYgQEAgc3RydWN0IF9X
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlIHsKICAgICBXZWJLaXRUTFNFcnJvcnNQb2xp
Y3kgdGxzRXJyb3JzUG9saWN5OwogCiAgICAgR1JlZlB0cjxXZWJLaXRDb29raWVNYW5hZ2VyPiBj
b29raWVNYW5hZ2VyOwotICAgIFZlY3RvcjxXZWJQcm9jZXNzUG9vbCo+IHByb2Nlc3NQb29sczsK
IH07CiAKIFdFQktJVF9ERUZJTkVfVFlQRShXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIsIHdlYmtp
dF93ZWJzaXRlX2RhdGFfbWFuYWdlciwgR19UWVBFX09CSkVDVCkKQEAgLTQ5NCwzMCArNDg4LDEz
IEBAIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0
RGF0YVN0b3JlKFdlYktpdFdlYnNpdGVEYXRhCiAgICAgICAgICAgICBjb25maWd1cmF0aW9uLT5z
ZXRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnN0cmluZ0Zy
b21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocHJpdi0+c3dSZWdpc3RyYXRpb25zRGlyZWN0b3J5
LmdldCgpKSk7CiAgICAgICAgIGlmIChwcml2LT5kb21DYWNoZURpcmVjdG9yeSkKICAgICAgICAg
ICAgIGNvbmZpZ3VyYXRpb24tPnNldENhY2hlU3RvcmFnZURpcmVjdG9yeShGaWxlU3lzdGVtOjpz
dHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHByaXYtPmRvbUNhY2hlRGlyZWN0b3J5
LmdldCgpKSk7Ci0gICAgICAgIHByaXYtPndlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNyZWF0ZShXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pLCBQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKKyAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFTdG9yZSA9
IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlKFdURk1vdmUoY29uZmlndXJhdGlvbiks
IFBBTDo6U2Vzc2lvbklEOjpnZW5lcmF0ZVBlcnNpc3RlbnRTZXNzaW9uSUQoKSk7CiAgICAgICAg
IHByaXYtPndlYnNpdGVEYXRhU3RvcmUtPnNldElnbm9yZVRMU0Vycm9ycyhwcml2LT50bHNFcnJv
cnNQb2xpY3kgPT0gV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0lHTk9SRSk7CiAgICAgfQogCiAg
ICAgcmV0dXJuICpwcml2LT53ZWJzaXRlRGF0YVN0b3JlOwogfQogCi12b2lkIHdlYmtpdFdlYnNp
dGVEYXRhTWFuYWdlckFkZFByb2Nlc3NQb29sKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFu
YWdlciwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotewotICAgIEFTU0VSVCghbWFuYWdl
ci0+cHJpdi0+cHJvY2Vzc1Bvb2xzLmNvbnRhaW5zKCZwcm9jZXNzUG9vbCkpOwotICAgIG1hbmFn
ZXItPnByaXYtPnByb2Nlc3NQb29scy5hcHBlbmQoJnByb2Nlc3NQb29sKTsKLX0KLQotdm9pZCB3
ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJSZW1vdmVQcm9jZXNzUG9vbChXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIqIG1hbmFnZXIsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLXsKLSAgICBB
U1NFUlQobWFuYWdlci0+cHJpdi0+cHJvY2Vzc1Bvb2xzLmNvbnRhaW5zKCZwcm9jZXNzUG9vbCkp
OwotICAgIG1hbmFnZXItPnByaXYtPnByb2Nlc3NQb29scy5yZW1vdmVGaXJzdCgmcHJvY2Vzc1Bv
b2wpOwotfQotCi1jb25zdCBWZWN0b3I8V2ViUHJvY2Vzc1Bvb2wqPiYgd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdl
cikKLXsKLSAgICByZXR1cm4gbWFuYWdlci0+cHJpdi0+cHJvY2Vzc1Bvb2xzOwotfQotCiAvKioK
ICAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXc6CiAgKiBAZmlyc3Rfb3B0aW9uX25h
bWU6IG5hbWUgb2YgdGhlIGZpcnN0IG9wdGlvbiB0byBzZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFu
YWdlclByaXZhdGUuaAppbmRleCAyYTU4OWUyN2YxZmVkMjJhM2E3OGFmZjFhNGZmZjdkNjdkMGNh
ZDE3Li5mYzllODIyNmZiYjhmODk0YTdlMWVkN2RiNDU1NTQyYTE1ODg3NzM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oCkBAIC0xOSwxMSArMTksNiBAQAogCiAjcHJhZ21h
IG9uY2UKIAotI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURh
dGFTdG9yZS5oIgogCiBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYmtpdFdlYnNpdGVEYXRh
TWFuYWdlckdldERhdGFTdG9yZShXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqKTsKLXZvaWQgd2Vi
a2l0V2Vic2l0ZURhdGFNYW5hZ2VyQWRkUHJvY2Vzc1Bvb2woV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyKiwgV2ViS2l0OjpXZWJQcm9jZXNzUG9vbCYpOwotdm9pZCB3ZWJraXRXZWJzaXRlRGF0YU1h
bmFnZXJSZW1vdmVQcm9jZXNzUG9vbChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqLCBXZWJLaXQ6
OldlYlByb2Nlc3NQb29sJik7Ci1jb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJQcm9jZXNzUG9vbCo+
JiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMoV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyKik7Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9t
YXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKaW5kZXggNGFiNDdmZmY1OTExZWVj
MzdlNTZiYzViYmIzMjllYmFlYTdkMzg2NS4uMzAwNmY0ZmFlNmM0M2MyNmJmNDA4MjJiNmRlODY4
ZWYyZTAyY2ZiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlv
bi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKQEAgLTEzOTIsOCArMTM5Miw4IEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZShjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uCiAKICAgICBjb29raWUuaHR0cE9ubHkgPSAqaHR0cE9u
bHk7CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nl
c3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVN
YW5hZ2VyLT5zZXRDb29raWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwg
eyBjb29raWUgfSwgW2NhbGxiYWNrXSgpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkmIGNv
b2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5j
b29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5zZXRDb29raWVzKHBhZ2UtPndlYnNp
dGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2NhbGxiYWNrXSgpIHsKICAg
ICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAgICAgfSk7CiB9CkBAIC0xNDA5LDggKzE0
MDksOCBAQCBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKAogCiAgICAgU3RyaW5nIGhvc3QgPSBhY3Rp
dmVVUkwuaG9zdCgpLnRvU3RyaW5nKCk7CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNv
b2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQ
cm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBh
Z2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGlu
Z0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYg
Y29va2llTWFuYWdlciA9IHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vzcygp
LmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZXNGb3JIb3N0
bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFp
bkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoaG9zdCkgfSk7CiAKICAgICByZXR1cm4geyB9Owog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1By
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaApp
bmRleCA0MWMwYTBmYmY1MDZlZmExNDA4YmNlZjlhZjhhOTBiODVhMWFkMDhhLi40ZjM5OGI1MzBm
NjA4NTc1Yzk2N2I4M2M3NGZhMmY0MzI4ZjZjZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB+QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KCk7CiAKICAgICB2b2lkIGNvbm5l
Y3QoKTsKLSAgICB2b2lkIHRlcm1pbmF0ZSgpOworICAgIHZpcnR1YWwgdm9pZCB0ZXJtaW5hdGUo
KTsKIAogICAgIHZpcnR1YWwgUHJvY2Vzc1Rocm90dGxlciYgdGhyb3R0bGVyKCkgPSAwOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oCmluZGV4IGRiZTQ0Zjk1OTQxMDUxMTIxNTEy
OGQyOWQyMTRlZWUwNzRhYWY4NGMuLjRjODQ1YTBlYzcyNTY1OWNmZTc5Y2VhMzVkM2NiYTk2Njgz
NDYxNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oCkBAIC00MSwxMSArNDEs
MTEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTsKIAogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IGZpbmFs
IDogcHVibGljIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IHsKLXByaXZhdGU6Citw
dWJsaWM6CiAgICAgdm9pZCBzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHkmLCBMZWdhY3lDdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmKSBmaW5hbDsKICAgICB2b2lkIHN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCkgZmluYWw7CiAgICAgdm9pZCBp
bnZhbGlkYXRlKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5JikgZmluYWw7Ci0KK3By
aXZhdGU6CiAgICAgSGFzaE1hcDxMZWdhY3lDdXN0b21Qcm90b2NvbElELCBSZXRhaW5QdHI8V0tD
dXN0b21Qcm90b2NvbExvYWRlcj4+IG1fbG9hZGVyTWFwOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KaW5kZXggOTJh
ZDFjODQyNDhlZWIxZjgyODIwMTU3YTUzNjllMGUzOWEwZTNkMi4uMzMxM2JkZTEwYzI3MTQ0Mzdl
MGQxNTkzNTNhZmQ0MTE1NjgyODJlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCkBAIC0xMzQsOCArMTM0LDkgQEAgc3Rh
dGljIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpCiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCkKIHsKLSAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2V0UHJvY2Vzc1N1cHByZXNz
aW9uRW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpOworICAgIFdlYnNpdGVEYXRh
U3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtlbmFibGVkID0gcHJvY2Vzc1N1cHByZXNz
aW9uRW5hYmxlZCgpXSAoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRh
dGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoZW5h
YmxlZCk7CisgICAgfSk7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBp
ZiAoIW1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpKQpA
QCAtMTY2LDggKzE2Nyw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6
ZSgpCiAgICAgaWYgKCFbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29s
Rm9yS2V5OkAiV2ViS2l0U3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIiXSkKICAgICAgICAg
aW5zdGFsbE1lbW9yeVByZXNzdXJlSGFuZGxlcigpOwogCi0gICAgc2V0TGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50PigpKTsKLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUND
QVRBTFlTVCkKICAgICBpZiAoIV9NR0NhY2hlVmFsaWQoKSkgewogICAgICAgICBkaXNwYXRjaF9h
c3luYyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RF
RkFVTFQsIDApLCBeewpAQCAtNDk1LDIyICs0OTQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YQogCiAgICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5k
YXJkVXNlckRlZmF1bHRzXTsKIAotICAgIHsKLSAgICAgICAgYm9vbCBpc1NhZmFyaSA9IGZhbHNl
OwotICAgICAgICBib29sIGlzTWluaUJyb3dzZXIgPSBmYWxzZTsKLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotICAgICAgICBpc1NhZmFyaSA9IFdlYkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01v
YmlsZVNhZmFyaSgpOwotICAgICAgICBpc01pbmlCcm93c2VyID0gV2ViQ29yZTo6SU9TQXBwbGlj
YXRpb246OmlzTWluaUJyb3dzZXIoKTsKLSNlbGlmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgaXNT
YWZhcmkgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNTYWZhcmkoKTsKLSAgICAgICAgaXNN
aW5pQnJvd3NlciA9IFdlYkNvcmU6Ok1hY0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0j
ZW5kaWYKLSAgICAgICAgaWYgKGlzU2FmYXJpIHx8IGlzTWluaUJyb3dzZXIpIHsKLSAgICAgICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmh0dHBQcm94eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleToo
TlNTdHJpbmcgKilXZWJLaXQySFRUUFByb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLmh0dHBzUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3Ry
aW5nICopV2ViS2l0MkhUVFBTUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICB9Ci0gICAgfQot
CiAgICAgcGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dCA9IGFkb3B0Q0YoX0NGTmV0d29ya0Nv
cHlBVFNDb250ZXh0KCkpOwogCiAgICAgcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVBy
ZXNzdXJlSGFuZGxlciA9IFtkZWZhdWx0cyBib29sRm9yS2V5OldlYktpdFN1cHByZXNzTWVtb3J5
UHJlc3N1cmVIYW5kbGVyRGVmYXVsdHNLZXldOwpAQCAtNTI0LDEyICs1MDcsOCBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYQogICAgIE5TTnVtYmVyICpkYXRhYmFzZUVuYWJsZWRWYWx1ZSA9IFtk
ZWZhdWx0cyBvYmplY3RGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5h
bERlYnVnJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6aXNJVFBEYXRhYmFzZUVuYWJsZWRLZXkoKS5j
cmVhdGVDRlN0cmluZygpLmdldCgpXV07CiAgICAgaWYgKGRhdGFiYXNlRW5hYmxlZFZhbHVlKQog
ICAgICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gZGF0YWJhc2VFbmFi
bGVkVmFsdWUuYm9vbFZhbHVlOwotICAgIGVsc2UKLSAgICAgICAgcGFyYW1ldGVycy5zaG91bGRF
bmFibGVJVFBEYXRhYmFzZSA9IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5pc0lU
UERhdGFiYXNlRW5hYmxlZCgpOwogCiAgICAgcGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmli
dXRpb25EZWJ1Z01vZGUgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIkV4cGVyaW1lbnRhbCVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmFkQ2xpY2tBdHRy
aWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07Ci0K
LSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24g
PSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1JbnZhbGlkYXRlQ29udGV4dCgpCkBAIC02MDgsMTEg
KzU4Nyw2IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQo
KSBjb25zdAogICAgIHJldHVybiAhbV91c2VyT2JzZXJ2YWJsZVBhZ2VDb3VudGVyLnZhbHVlKCkg
JiYgIW1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpOwog
fQogCi1ib29sIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9y
VGVzdGluZyhjb25zdCBTdHJpbmcmIGVudGl0bGVtZW50KQotewotICAgIHJldHVybiBXVEY6Omhh
c0VudGl0bGVtZW50KGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpLT54cGNDb25u
ZWN0aW9uKCksIGVudGl0bGVtZW50LnV0ZjgoKS5kYXRhKCkpOwotfQotCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogZmxvYXQgV2ViUHJvY2Vzc1Bv
b2w6OmRpc3BsYXlCcmlnaHRuZXNzKCkKIHsKQEAgLTk0OSwyMyArOTIzLDQgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cmVnaXN0ZXJIaWdoRHluYW1pY1JhbmdlQ2hhbmdlQ2FsbGJhY2soKQogfQog
I2VuZGlmCiAKLU9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4gV2ViUHJvY2Vzc1Bvb2w6OnhwY0Vu
ZHBvaW50TWVzc2FnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZW5kcG9pbnRNZXNzYWdlOwot
fQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRv
V2ViUHJvY2VzcyhPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSkKLXsK
LSAgICBtX2VuZHBvaW50TWVzc2FnZSA9IGVuZHBvaW50TWVzc2FnZTsKLQotICAgIGZvciAoYXV0
byBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsKLSAgICAgICAgaWYgKHByb2Nlc3MtPnN0YXRlKCkg
IT0gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpTdGF0ZTo6UnVubmluZykKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBpZiAoIXByb2Nlc3MtPmNvbm5lY3Rpb24oKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBhdXRvIGNvbm5lY3Rpb24gPSBwcm9jZXNzLT5jb25uZWN0aW9u
KCktPnhwY0Nvbm5lY3Rpb24oKTsKLSAgICAgICAgeHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNzYWdl
KGNvbm5lY3Rpb24sIGVuZHBvaW50TWVzc2FnZS5nZXQoKSk7Ci0gICAgfQotfQotCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fk
cy9Eb3dubG9hZFByb3h5LmNwcAppbmRleCBjNWRlNGU3ZDBmNTkxOTRmNDNhMDIzYjA4OWUzNzJj
NThjZjhlZTA2Li5mN2NmZjg1MmYwYmE2ZDAxNTUxMTY1ZGQ4YTlmN2Q1NzYzYjAwN2QzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHku
Y3BwCkBAIC03NSw4ICs3NSw4IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6Y2FuY2VsKCkKICAgICBp
ZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChOZXR3b3JrUHJv
Y2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CisgICAgaWYgKG1fZGF0YVN0b3Jl
KQorICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CiB9CiAKIHZv
aWQgRG93bmxvYWRQcm94eTo6aW52YWxpZGF0ZSgpCkBAIC0xMDMsMTUgKzEwMywxMyBAQCBXZWJQ
YWdlUHJveHkqIERvd25sb2FkUHJveHk6Om9yaWdpbmF0aW5nUGFnZSgpIGNvbnN0CiAjaWYgUExB
VEZPUk0oQ09DT0EpCiB2b2lkIERvd25sb2FkUHJveHk6OnB1Ymxpc2hQcm9ncmVzcyhjb25zdCBV
UkwmIFVSTCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFtX2RhdGFTdG9y
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9w
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUgaGFuZGxlOwotICAgICAgICBib29sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uID0g
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKFVSTC5maWxlU3lzdGVtUGF0aCgpLCBTYW5k
Ym94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIGhhbmRsZSk7Ci0gICAgICAgIEFTU0VSVF9V
TlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsK
LSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQ
dWJsaXNoRG93bmxvYWRQcm9ncmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFuZGxlKSwgMCk7Ci0g
ICAgfQorICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7CisgICAgYm9vbCBjcmVh
dGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwu
ZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5k
bGUpOworICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRT
YW5kYm94RXh0ZW5zaW9uKTsKKyAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3du
bG9hZElELCBVUkwsIGhhbmRsZSksIDApOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQog
CkBAIC0xMzEsMTEgKzEyOSwxMCBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRpZFN0YXJ0KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBzdWdnZQogCiB2b2lkIERv
d25sb2FkUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCB1aW50NjRfdCBjaGFsbGVu
Z2VJRCkKIHsKLSAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgaWYgKCFtX3Byb2Nlc3NQb29s
IHx8ICFtX2RhdGFTdG9yZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eTo6Y3JlYXRl
KFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBjaGFsbGVuZ2VJRCwgbWFrZVJlZigq
bV9wcm9jZXNzUG9vbC0+bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkpLCBudWxscHRyKTsK
LQorICAgIGF1dG8gYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSA9IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlUHJveHk6OmNyZWF0ZShXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwg
Y2hhbGxlbmdlSUQsIG1ha2VSZWYoKm1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvbm5l
Y3Rpb24oKSksIG51bGxwdHIpOwogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCku
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCp0aGlzLCBhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZVByb3h5LmdldCgpKTsKIH0KIApAQCAtMTQ2LDE1ICsxNDMsMTAgQEAgdm9pZCBEb3du
bG9hZFByb3h5Ojp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYgcHJvcG9zZWRSZXF1
ZXN0LCBjb25zdCBSZXMKIAogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkud2ls
bFNlbmRSZXF1ZXN0KCp0aGlzLCBXVEZNb3ZlKHByb3Bvc2VkUmVxdWVzdCksIHJlZGlyZWN0UmVz
cG9uc2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKFJlc291cmNlUmVx
dWVzdCYmIG5ld1JlcXVlc3QpIHsKICAgICAgICAgbV9yZWRpcmVjdENoYWluLmFwcGVuZChuZXdS
ZXF1ZXN0LnVybCgpKTsKLQotICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fcHJvY2Vzc1Bv
b2wpCisgICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9kYXRhU3RvcmUpCiAgICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgYXV0byogbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb3RlY3Rl
ZFRoaXMtPm1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgIGlmICghbmV0
d29ya1Byb2Nlc3NQcm94eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBuZXR3b3Jr
UHJvY2Vzc1Byb3h5LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVXaWxs
U2VuZFJlcXVlc3QocHJvdGVjdGVkVGhpcy0+bV9kb3dubG9hZElELCBuZXdSZXF1ZXN0KSwgMCk7
CisgICAgICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRUaGlzLT5tX2Rh
dGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3NQcm94eS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVXaWxsU2VuZFJlcXVlc3QocHJv
dGVjdGVkVGhpcy0+bV9kb3dubG9hZElELCBuZXdSZXF1ZXN0KSwgMCk7CiAgICAgfSk7CiB9CiAK
QEAgLTE3OSwxNiArMTcxLDE0IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyhEb3dubG9hZElEIGRvd25sCiAgICAgaWYgKCFt
X3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9wcm9jZXNzUG9vbC0+
ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgq
dGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5hbWUoc3Vn
Z2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBk
b3dubG9hZElEID0gZG93bmxvYWRJRF0gKEFsbG93T3ZlcndyaXRlIGFsbG93T3ZlcndyaXRlLCBT
dHJpbmcgZGVzdGluYXRpb24pIHsKKyAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgp
LmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKCp0aGlzLCBSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSks
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRvd25sb2FkSURdIChBbGxv
d092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CiAgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAgICAg
ICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlKGRlc3RpbmF0aW9uLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFk
V3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgICAgIGlmICghbV9wcm9jZXNz
UG9vbCkKKyAgICAgICAgaWYgKCFtX2RhdGFTdG9yZSkKICAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRv
d25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3
cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CisgICAgICAgIG1fZGF0YVN0b3JlLT5u
ZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURl
Y2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBz
YW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6
WWVzKSwgMCk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAppbmRleCA3NmEwNzE1N2I1OTFhYWNl
NTBmMTVkMTUyNWRiY2ZiOGM2YTRiYmM4Li5kNzRhOGZhNmM2NGM4ODYzNWY5ZWI3NWNhNzNlNzBm
ZDk0NmNhMDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWRQcm94eU1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCkBAIC00NCw3ICs0NCw3IEBACiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogRG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcChOZXR3b3JrUHJvY2Vz
c1Byb3h5JiBwcm9jZXNzKQotICAgIDogbV9wcm9jZXNzKG1ha2VXZWFrUHRyKHByb2Nlc3MpKQor
ICAgIDogbV9wcm9jZXNzKHByb2Nlc3MpCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLCBtX3No
b3VsZFRha2VBc3NlcnRpb24oV1RGOjpwcm9jZXNzSGFzRW50aXRsZW1lbnQoImNvbS5hcHBsZS5t
dWx0aXRhc2tpbmcuc3lzdGVtYXBwYXNzZXJ0aW9ucyIpKQogI2VuZGlmCkBAIC03MCwxNCArNzAs
MTIgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFwOjpwbGF0Zm9ybURlc3Ryb3koKQogCiB2b2lkIERv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCkKIHsKLSAgICBp
ZiAobV9wcm9jZXNzKQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpBcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nl
c3Muc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uRGlkRW50ZXJCYWNr
Z3JvdW5kKCksIDApOwogfQogCiB2b2lkIERvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uV2ls
bEVudGVyRm9yZWdyb3VuZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25XaWxsRW50ZXJG
b3JlZ3JvdW5kKCksIDApOworICAgIG1fcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6QXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCksIDApOwogfQogCiBEb3dubG9h
ZFByb3h5JiBEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRh
U3RvcmUmIGRhdGFTdG9yZSwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0
YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKQEAgLTkyLDEzICs5
MCwxMiBAQCBEb3dubG9hZFByb3h5JiBEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFBy
b3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZQogICAgICAgICBtX2Rvd25sb2FkVUlBc3Nl
cnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KGdldEN1cnJlbnRQcm9jZXNzSUQo
KSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWRO
ZXR3b3JraW5nKTsKIAogICAgICAgICBBU1NFUlQoIW1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0
aW9uKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9wcm9jZXNzKTsKLSAgICAgICAgbV9kb3du
bG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1f
cHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nl
c3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKKyAgICAgICAgbV9kb3dubG9h
ZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJv
Y2Vzcy5wcm9jZXNzSWRlbnRpZmllcigpLCAiV2ViS2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fz
c2VydGlvblR5cGU6OlVuYm91bmRlZE5ldHdvcmtpbmcpOwogCiAgICAgICAgIFJFTEVBU0VfTE9H
KFByb2Nlc3NTdXNwZW5zaW9uLCAiVUlQcm9jZXNzIHRvb2sgJ1dlYktpdCBkb3dubG9hZHMnIGFz
c2VydGlvbnMgZm9yIFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKICAgICB9CiAKLSAg
ICBtX3Byb2Nlc3MtPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxv
YWRJRCgpLCBkb3dubG9hZFByb3h5LmdldCgpKTsKKyAgICBtX3Byb2Nlc3MuYWRkTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRv
d25sb2FkUHJveHktPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCksIGRvd25sb2FkUHJveHkuZ2V0
KCkpOwogCiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CkBAIC0xMDksMTIgKzEwNiw5IEBA
IHZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5pc2hlZChEb3dubG9hZFByb3h5JiBk
b3dubG9hZFByb3h5KQogCiAgICAgUkVMRUFTRV9MT0coTG9hZGluZywgIlJlbW92aW5nIGRvd25s
b2FkICUiIFBSSXU2NCAiIGZyb20gVUlQcm9jZXNzIERvd25sb2FkUHJveHlNYXAiLCBkb3dubG9h
ZElELmRvd25sb2FkSUQoKSk7CiAKLSAgICAvLyBUaGUgRG93bmxvYWRQcm94eSBtYXkgYmUgaG9s
ZGluZyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIHByb2Nlc3MgcG9vbC4KLSAgICBhdXRvIHBy
b3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZlB0cihtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkp
OwotCiAgICAgQVNTRVJUKG1fZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsKIAotICAg
IG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKKyAgICBt
X3Byb2Nlc3MucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKICAgICBkb3du
bG9hZFByb3h5LmludmFsaWRhdGUoKTsKICAgICBtX2Rvd25sb2Fkcy5yZW1vdmUoZG93bmxvYWRJ
RCk7CiAKQEAgLTEzMywxNSArMTI3LDEzIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6aW52YWxp
ZGF0ZSgpCiAgICAgZm9yIChjb25zdCBhdXRvJiBkb3dubG9hZCA6IG1fZG93bmxvYWRzLnZhbHVl
cygpKSB7CiAgICAgICAgIGRvd25sb2FkLT5wcm9jZXNzRGlkQ2xvc2UoKTsKICAgICAgICAgZG93
bmxvYWQtPmludmFsaWRhdGUoKTsKLSAgICAgICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93
bmxvYWQtPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgICAgICBtX3Byb2Nlc3MucmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIGRvd25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKICAgICB9CiAK
ICAgICBtX2Rvd25sb2Fkcy5jbGVhcigpOwogICAgIG1fZG93bmxvYWRVSUFzc2VydGlvbiA9IG51
bGxwdHI7CiAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBudWxscHRyOwogICAg
IFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiVUlQcm9jZXNzIERvd25sb2FkUHJveHlN
YXAgaW52YWxpZGF0ZWQgLSBSZWxlYXNlZCAnV2ViS2l0IGRvd25sb2FkcycgYXNzZXJ0aW9ucyBm
b3IgVUlQcm9jZXNzIGFuZCBOZXR3b3JrUHJvY2VzcyIpOwotCi0gICAgbV9wcm9jZXNzID0gbnVs
bHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAppbmRleCAzYmUyMDc5YTBm
MmM0YjUzNzA2MmNlMTMwMGUxY2Q1ZGE0NDRmZmJlLi40ZmEwMDFiZDdmYWUxY2VkMDI0ZDJiOTFm
MjAxNzBmZjk5NDUyOGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHBsYXRmb3JtQ3JlYXRlKCk7CiAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKIAot
ICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9wcm9jZXNzOworICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHkmIG1fcHJvY2VzczsKICAgICBIYXNoTWFwPERvd25sb2FkSUQsIFJlZlB0cjxE
b3dubG9hZFByb3h5Pj4gbV9kb3dubG9hZHM7CiAKICAgICBib29sIG1fc2hvdWxkVGFrZUFzc2Vy
dGlvbiB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKaW5kZXggOGMyM2JiZThjMDZhMTU5OWNiOWI5
MTZhMGIzMmFmYjM3NzgzZjMwNS4uZDZjMzMyM2RkOTNlNjlmNTZhZGY2YmUwZDJhMWIxNGYwODIy
NDUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Q
cm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5LmNwcApAQCAtNDQsMTcgKzQ0LDE3IEBAIExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5Ojp+TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKQog
CiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdGFydExvYWRpbmcoTGVn
YWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nl
c3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RhcnRMb2FkaW5nKCp0aGlz
LCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKKyAgICBtX25ldHdvcmtQcm9jZXNzUHJveHku
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RhcnRMb2FkaW5nKCp0aGlzLCBjdXN0b21Q
cm90b2NvbElELCByZXF1ZXN0KTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6c3RvcExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2Nv
bElEKQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElE
KTsKKyAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
KCkuc3RvcExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOwogfQogCiB2b2lkIExlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBtX25ldHdv
cmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQo
KS5pbnZhbGlkYXRlKCp0aGlzKTsKKyAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkuY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50KCkuaW52YWxpZGF0ZSgqdGhpcyk7CiB9CiAKIHZvaWQgTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3QoTGVnYWN5
Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGly
ZWN0UmVzcG9uc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBjMWY0NzA4YjgxY2ZhNTNhYjEyMmMyOTQ0
Njc1ZTc4MjUxNjcxMjFmLi4wMWExNTcxZThiZjhkMDU4NmE0ODFhNDYzZDBkZmQzZDY0ZDA1N2I2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc1Byb3h5LmgiCiAKICNpbmNsdWRlICJBUElDb250ZW50UnVsZUxpc3QuaCIKKyNpbmNsdWRl
ICJBUElDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIKICNpbmNsdWRlICJBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZVByb3h5LmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25NYW5hZ2VyLmgi
CiAjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1hcC5oIgpAQCAtMzUsNiArMzYsNyBAQAogI2luY2x1
ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2VuZGlmCisjaW5jbHVk
ZSAiTGVnYWN5R2xvYmFsU2V0dGluZ3MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVk
ZSAiTmV0d29ya0NvbnRlbnRSdWxlTGlzdE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKQEAgLTQ4LDYgKzUwLDcgQEAKICNpbmNsdWRl
ICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJTdG9yYWdlQWNjZXNz
U3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QuaCIKKyNpbmNs
dWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXMu
aCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2Fn
ZXMuaCIKQEAgLTU4LDggKzYxLDEwIEBACiAjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyUHJveHkuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5oIgogI2luY2x1ZGUgIldlYnNpdGVE
YXRhU3RvcmVDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZWdpc3RyYWJsZURvbWFpbi5oPgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KIAogI2lmIEVOQUJMRShTRUNfSVRF
TV9TSElNKQpAQCAtNzAsMjAgKzc1LDEyNCBAQAogI2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2luL1hQ
Q1NQSS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIKKyNlbmRpZgorCiAjZGVmaW5lIE1FU1NBR0Vf
Q0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0aW9uLCBjb25uZWN0aW9u
KCkpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLU5l
dHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmIHBy
b2Nlc3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KHByb2Nlc3NQb29sLmFsd2F5
c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQotICAgICwgbV9wcm9jZXNzUG9vbChwcm9jZXNz
UG9vbCkKK3N0YXRpYyBIYXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkqPiYgbmV0d29ya1Byb2Nl
c3Nlc1NldCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkqPj4gc2V0
OworICAgIHJldHVybiBzZXQ7Cit9CisKK1ZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKQoreworICAgIFZlY3Rv
cjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICBwcm9jZXNzZXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuc2l6ZSgpKTsKKyAgICBm
b3IgKGF1dG8qIG5ldHdvcmtQcm9jZXNzIDogbmV0d29ya1Byb2Nlc3Nlc1NldCgpKQorICAgICAg
ICBwcm9jZXNzZXMudW5jaGVja2VkQXBwZW5kKCpuZXR3b3JrUHJvY2Vzcyk7CisgICAgcmV0dXJu
IHByb2Nlc3NlczsKK30KKworc3RhdGljIFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiYgZGVm
YXVsdFByb2Nlc3MoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8TmV0d29y
a1Byb2Nlc3NQcm94eT4+IHByb2Nlc3M7CisgICAgcmV0dXJuIHByb2Nlc3MuZ2V0KCk7Cit9CisK
K1JlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkZWZhdWx0TmV0
d29ya1Byb2Nlc3MoKQoreworICAgIGlmICghZGVmYXVsdFByb2Nlc3MoKSkKKyAgICAgICAgZGVm
YXVsdFByb2Nlc3MoKSA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZSgpOworICAgIHJldHVy
biAqZGVmYXVsdFByb2Nlc3MoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp0ZXJt
aW5hdGUoKQoreworICAgIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6dGVybWluYXRlKCk7CisgICAg
aWYgKGF1dG8qIGNvbm5lY3Rpb24gPSB0aGlzLT5jb25uZWN0aW9uKCkpCisgICAgICAgIGNvbm5l
Y3Rpb24tPmludmFsaWRhdGUoKTsKKyAgICBkaWRUZXJtaW5hdGUoKTsKK30KKwordm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpkaWRUZXJtaW5hdGUoKQoreworICAgIGlmICh0aGlzID09IGRlZmF1
bHRQcm9jZXNzKCkuZ2V0KCkpCisgICAgICAgIGRlZmF1bHRQcm9jZXNzKCkgPSBudWxscHRyOwor
fQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05l
d1Byb2Nlc3MoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAvLyBG
SVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktp
dCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KKyAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMg
b25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCisg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KKyAg
ICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7CisgICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5k
V2FpdChbdGhpc10geworICAgICAgICAgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJv
Y2VzcygpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVy
ZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9u
KCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVt
ZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0
b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNC
eXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hl
bWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6
OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKKyAgICBwYXJhbWV0ZXJz
LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9i
YWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOwor
ICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0
b24oKS5jYWNoZU1vZGVsKCk7CisgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBXZWJQcm9jZXNzUG9v
bDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCisgICAgICAgIHBhcmFt
ZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVt
ZSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoU3RyaW5nIGNvb2tpZVN0b3Jh
Z2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOyAh
Y29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0
b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwor
ICAgIGlmIChTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6
Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsgIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5p
c0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFp
bmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIHBhcmVu
dEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3Rvcnko
KTsgIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNp
b246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CisjZW5kaWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFs
aXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CisgICAgc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKSwgMCk7Cit9CisK
K3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5
KCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFBy
b2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+YWx3YXlzUnVuc0F0QmFj
a2dyb3VuZFByaW9yaXR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbFNob3VsZFRha2VV
SUJhY2tncm91bmRBc3NlcnRpb24oKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBX
ZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQ
b29sLT5zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitOZXR3b3JrUHJvY2Vzc1By
b3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KCkKKyAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShh
bnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQogI2lmIEVOQUJM
RShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCisgICAgLCBtX2N1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudChtYWtlVW5pcXVlUmVmPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudD4oKSkKICAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKnRoaXMpCisjZWxz
ZQorICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZVJlZjxBUEk6
OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICNlbmRpZgotICAgICwgbV90aHJvdHRs
ZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkK
KyAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBhbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tn
cm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fY29va2llTWFuYWdlcihXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmNyZWF0ZSgqdGhpcykpCiB7CiAgICAgY29ubmVjdCgpOworICAgIHNlbmRDcmVhdGlv
blBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICB1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7
CisgICAgbmV0d29ya1Byb2Nlc3Nlc1NldCgpLmFkZCh0aGlzKTsKIH0KIAogTmV0d29ya1Byb2Nl
c3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkoKQpAQCAtOTgsNiArMjA3LDcgQEAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkoKQogCiAgICAgaWYgKG1fZG93bmxv
YWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5pbnZhbGlkYXRlKCk7Cisg
ICAgbmV0d29ya1Byb2Nlc3Nlc1NldCgpLnJlbW92ZSh0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0
aW9ucyYgbGF1bmNoT3B0aW9ucykKQEAgLTEwNSwxNSArMjE1LDggQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9u
cyYgbGF1bmMKICAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID0gUHJvY2Vzc0xhdW5jaGVy
OjpQcm9jZXNzVHlwZTo6TmV0d29yazsKICAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OmdldExh
dW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7CiAKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5zaG91
bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkgewotICAgICAg
ICBwcm9jZXNzUG9vbCgpLnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWls
Rm9yVGVzdGluZyhmYWxzZSk7CisgICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OnNob3VsZE1ha2VO
ZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpKQogICAgICAgICBsYXVuY2hP
cHRpb25zLnNob3VsZE1ha2VQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB0cnVlOwotICAg
IH0KLQotI2lmIFBMQVRGT1JNKFBMQVlTVEFUSU9OKQotICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vz
c1BhdGggPSBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzUGF0aCgpOwotICAgIGxhdW5jaE9w
dGlvbnMudXNlcklkID0gbV9wcm9jZXNzUG9vbC51c2VySWQoKTsKLSNlbmRpZgogfQogCiB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24pCkBAIC0xNjYsMTIgKzI2OSwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQogICAgIH0KIH0K
IAotRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94
eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVz
b3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94
eSogb3JpZ2luYXRpbmdQYWdlKQorRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6
Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nl
c3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVl
c3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5h
dGluZ1BhZ2UpCiB7CiAgICAgaWYgKCFtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93
bmxvYWRQcm94eU1hcCA9IG1ha2VVbmlxdWU8RG93bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0g
ICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3Rv
cmUsIG1fcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGlu
Z1BhZ2UpOworICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJv
eHkoZGF0YVN0b3JlLCBwcm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9y
aWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZmV0Y2hXZWJz
aXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0
aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoV2Vic2l0ZURhdGEpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMjM3LDggKzM0MCwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6Om5l
dHdvcmtQcm9jZXNzQ3Jhc2hlZCgpCiB7CiAgICAgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCi0g
ICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRo
aXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1c2UgdXMgdG8gYmUgZGVsZXRl
ZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CisgICAg
UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IHByb3RlY3RlZFRoaXMoKnRoaXMpOworICAgIGZvciAo
YXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisg
ICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMpOworICAgIGZv
ciAoYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA6IG1fd2Vic2l0ZURhdGFTdG9yZXMpCisgICAgICAg
IHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKIH0KIAogdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjbGVhckNhbGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICsz
NjQsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZQogICAgIGlmIChkaXNwYXRjaE1lc3NhZ2Uo
Y29ubmVjdGlvbiwgZGVjb2RlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Byb2Nl
c3NQb29sLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIpOwogfQogCkBAIC0yNzQsOCArMzc3LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBJUEMKIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rp
b24mKQogewotICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmKG1fcHJvY2Vz
c1Bvb2wpOwotCiAgICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9h
ZFByb3h5TWFwLT5pbnZhbGlkYXRlKCk7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9D
T0xfTUFOQUdFUikKQEAgLTMzMSwxMSArNDMyLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2kK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nl
c3NQb29sLmlzU2VydmljZVdvcmtlclBhZ2VJRChwYWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZShzZXNzaW9uSUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6
Zm9yTW9zdFZpc2libGVXZWJQYWdlSWZBbnkoc2Vzc2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywg
d2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSA9IFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVn
YWN5VExTXShhdXRvKiBwYWdlKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTM5MiwxMSArNDg4LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBD
OjpDb24KICAgICAgICAgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5wcm9j
ZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpCi0gICAgICAgIHNldFByb2Nlc3NTdXBwcmVzc2lvbkVu
YWJsZWQodHJ1ZSk7Ci0jZW5kaWYKICAgICAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAg
IGlmICh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24gPSB0aGlzLT5jb25uZWN0aW9uKCktPnhw
Y0Nvbm5lY3Rpb24oKSkKQEAgLTEyMDUsNyArMTI5Niw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBz
ZXNzCiB9CiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVy
YWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsK
LSAgICBwcm9jZXNzUG9vbCgpLnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKFdURk1vdmUo
ZG9tYWlucykpOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6
YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5zZXREb21haW5zV2l0aFVz
ZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiB7IGRvbWFp
bnMgfSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIApA
QCAtMTI1Miw0NSArMTM0NCwzMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZsdXNoQ29v
a2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21wbGV0aQogICAgIHNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkZsdXNoQ29va2llcyhzZXNz
aW9uSUQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3Zv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9y
ZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMuYWRkKHN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgbV93
ZWJzaXRlRGF0YVN0b3Jlcy5hZGQoc3RvcmUpOwogCiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkp
Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0
b3JlIHsgc3RvcmUtPnBhcmFtZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0
b3JlLT5zZXNzaW9uSUQoKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCk7CisgICAgYXV0
byBzZXNzaW9uSUQgPSBzdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAoIXNlc3Npb25JRC5pc0Vw
aGVtZXJhbCgpKSB7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0
ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnkoKSk7CisgICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNv
bHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgogICAgIH0KIH0KIAotYm9v
bCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zZXNzaW9uSURzLmNvbnRhaW5zKHNlc3Npb25JRCk7
Ci19Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24o
V2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMu
cmVtb3ZlKHNlc3Npb25JRCk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5yZW1vdmUod2Vic2l0
ZURhdGFTdG9yZSk7CiAKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRlc3Ryb3lTZXNzaW9uIHsgc2Vzc2lvbklEIH0sIDAp
OworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24g
eyB3ZWJzaXRlRGF0YVN0b3JlLnNlc3Npb25JRCgpIH0sIDApOwogfQogCiBXZWJzaXRlRGF0YVN0
b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJz
aXRlRGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAg
ICAgICBpZiAod2Vic2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSA9PSBzZXNzaW9uSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpLnB0cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhp
c3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0
dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Np
b25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3Jh
Z2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEzMzcsNyArMTQxNSw3
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5KFdlYlVzZXJDb250ZW50CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQog
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlv
blRvTmV0d29ya1Byb2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwg
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC5lc3RhYmxpc2hXb3JrZXJDb250
ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVE
b21haW4pLCBzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBXZWJQ
cm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzKCp0aGlzLCBSZWdpc3RyYWJsZURvbWFpbiB7cmVnaXN0cmFibGVEb21haW59LCBzZXNzaW9u
SUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5Ojp3b3JrZXJDb250ZXh0Q29ubmVjdGlvbk5vTG9uZ2VyTmVlZGVkKFdlYkNvcmU6OlBy
b2Nlc3NJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC0xNTAwLDE2ICsxNTc4LDM0IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6cHJlY29ubmVjdFRvKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgV2ViUGFnZVByb3h5SWRlCiAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlBy
ZWNvbm5lY3RUbyhzZXNzaW9uSUQsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQsIHVybCwgdXNl
ckFnZW50LCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpbiksIDApOwogfQogCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRX
ZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNG
b3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0Jh
Y2tncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBX
ZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQ
b29sLT5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKQogewotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhh
c0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0Zv
cmVncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6
OmlzVmFsaWRGb3JlZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7
CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmZv
cmVncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgZm9yZWdyb3VuZCB2aWV3KHMpIl9zKTsK
ICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJh
bnNpdGlvblRvRm9yZWdyb3VuZCgpLCAwKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkg
eworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgewog
ICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRCYWNrZ3JvdW5kQWN0aXZpdHko
bV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJv
bVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiTmV0d29ya2lu
ZyBmb3IgYmFja2dyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvQmFja2dyb3VuZCgpLCAwKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmgKaW5kZXggYTBiNGMxZDg5MzhlMjA1ZWMzNjFkZTVjMTA4MjVkMTgyNzc2NTNiNC4u
MGFkNjE4NzhiZDYwZGVjMmFlZjE0YTFlNWNmY2Q1YjdkNzBhNzczYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAg
LTQ2LDEyICs0NiwxNyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiWFBDRXZl
bnRIYW5kbGVyLmgiCisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRyLmg+CiAjZW5kaWYKIAogbmFt
ZXNwYWNlIElQQyB7CiBjbGFzcyBGb3JtRGF0YVJlZmVyZW5jZTsKIH0KIAorbmFtZXNwYWNlIEFQ
SSB7CitjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQ
QUwgewogY2xhc3MgU2Vzc2lvbklEOwogfQpAQCAtNzMsOCArNzgsOCBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7Citj
bGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBX
ZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OwogCiBl
bnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyA6IGJvb2w7CkBAIC04Niw4ICs5
MSw5IEBAIHN0cnVjdCBGcmFtZUluZm9EYXRhOwogc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOwogc3RydWN0IFJlc291cmNlTG9hZEluZm87CiBzdHJ1Y3QgV2Vic2l0ZURh
dGE7CitzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM7CiAKLWNsYXNzIE5ldHdvcmtQ
cm9jZXNzUHJveHkgZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRl
IFByb2Nlc3NUaHJvdHRsZXJDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJv
Y2Vzc1Byb3h5PiB7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1
eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4sIHB1YmxpYyBSZWZDb3VudGVk
PE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKICAgICB1c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluOwpAQCAtMTAyLDEyICsxMDgsMTggQEAgcHVibGljOgogICAgIHVzaW5nIERvbWFpbklu
TmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVz
aW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhw
bGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBS
ZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7CisgICAgc3Rh
dGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigq
bmV3IE5ldHdvcmtQcm9jZXNzUHJveHkpOyB9CiAgICAgfk5ldHdvcmtQcm9jZXNzUHJveHkoKTsK
IAorICAgIHN0YXRpYyBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBhbGxOZXR3b3Jr
UHJvY2Vzc2VzKCk7CisgICAgCisgICAgdm9pZCB0ZXJtaW5hdGUoKSBmaW5hbDsKKyAgICB2b2lk
IGRpZFRlcm1pbmF0ZSgpOworCiAgICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24o
V2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwogCi0gICAgRG93bmxvYWRQcm94eSYgY3Jl
YXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRp
bmdQYWdlKTsKKyAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVE
YXRhU3RvcmUmLCBXZWJQcm9jZXNzUG9vbCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSk7
CiAKICAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPiYmKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNp
dGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRp
bWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKTsKQEAgLTIwNiwxNSArMjE4LDEyIEBAIHB1YmxpYzoKICAgICBQcm9jZXNzVGhyb3R0
bGVyJiB0aHJvdHRsZXIoKSBmaW5hbCB7IHJldHVybiBtX3Rocm90dGxlcjsgfQogICAgIHZvaWQg
dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQ
b29sKCkgeyByZXR1cm4gbV9wcm9jZXNzUG9vbDsgfQotCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhU
RU5TSU9OUykKICAgICB2b2lkIGRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGFk
ZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYpOwotICAgIGJvb2wgaGFzU2Vzc2lvbihQ
QUw6OlNlc3Npb25JRCkgY29uc3Q7Ci0gICAgdm9pZCByZW1vdmVTZXNzaW9uKFBBTDo6U2Vzc2lv
bklEKTsKKyAgICB2b2lkIGFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYpOworICAgIHZvaWQg
cmVtb3ZlU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CiAgICAgCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCiAgICAgdm9pZCBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoY29uc3Qg
U3RyaW5nJiBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwpAQCAtMjI5LDYgKzIzOCw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29u
c3QgU3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJv
dG9jb2woY29uc3QgU3RyaW5nJik7CiAKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgp
OworICAgIAogICAgIHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIHZvaWQgcmVzb3VyY2VMb2FkRGlkU2VuZFJlcXVlc3Qo
V2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVzb3VyY2VMb2FkSW5mbyYmLCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmJiwgT3B0aW9uYWw8SVBDOjpGb3JtRGF0YVJlZmVyZW5jZT4mJik7CkBAIC0y
NDgsNyArMjU5LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIo
Y29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNs
ZWFyQnVuZGxlSWRlbnRpZmllcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAg
V2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyKCkgeyByZXR1cm4gbV9jb29raWVN
YW5hZ2VyLmdldCgpOyB9CisKKyAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYg
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgeyByZXR1cm4gbV9jdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQuZ2V0KCk7IH0KKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHhwY19vYmpl
Y3RfdCB4cGNFbmRwb2ludE1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2VuZHBvaW50TWVzc2Fn
ZS5nZXQoKTsgfQorI2VuZGlmCisKIHByaXZhdGU6CisgICAgZXhwbGljaXQgTmV0d29ya1Byb2Nl
c3NQcm94eSgpOworCisgICAgdm9pZCBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNz
KCk7CisKICAgICAvLyBBdXhpbGlhcnlQcm9jZXNzUHJveHkKICAgICBBU0NJSUxpdGVyYWwgcHJv
Y2Vzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiTmV0d29ya2luZyJfczsgfQogCkBAIC0y
NTYsNyArMjc5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbm5lY3Rpb25XaWxsT3BlbihJUEM6
OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHByb2Nlc3NXaWxsU2h1dERvd24oSVBD
OjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hl
ZCgpOwogICAgIHZvaWQgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCiAgICAgLy8gSVBDOjpDb25u
ZWN0aW9uOjpDbGllbnQKQEAgLTMxMiwxNiArMzM0LDE3IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCwgUmVmPEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+JiYpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIG1fcHJv
Y2Vzc1Bvb2w7Ci0KICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoV2Vic2l0ZURhdGEpPj4gbV9wZW5kaW5nRmV0Y2hXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAg
ICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGlu
Z0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmln
aW5zQ2FsbGJhY2tzOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkUHJveHlNYXA+IG1f
ZG93bmxvYWRQcm94eU1hcDsKKworICAgIFVuaXF1ZVJlZjxBUEk6OkN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiAjaWYgRU5BQkxFKExF
R0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKICAgICBMZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eSBtX2N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OwogI2VuZGlmCisKICAgICBQ
cm9jZXNzVGhyb3R0bGVyIG1fdGhyb3R0bGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9jZXNz
VGhyb3R0bGVyOjpCYWNrZ3JvdW5kQWN0aXZpdHk+IG1fYWN0aXZpdHlGb3JIb2xkaW5nTG9ja2Vk
RmlsZXM7CiAgICAgUHJvY2Vzc1Rocm90dGxlcjo6QWN0aXZpdHlWYXJpYW50IG1fYWN0aXZpdHlG
cm9tV2ViUHJvY2Vzc2VzOwpAQCAtMzQ3LDkgKzM3MCwxMSBAQCBwcml2YXRlOgogICAgIHByaXZh
dGU6CiAgICAgICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2Vz
czsKICAgICB9OworICAgIE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4gbV9lbmRwb2ludE1lc3Nh
Z2U7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8UEFMOjpTZXNzaW9uSUQ+IG1fc2Vzc2lvbklEczsK
KyAgICBXZWFrSGFzaFNldDxXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmVzOwor
ICAgIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IG1fY29va2llTWFuYWdlcjsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQppbmRleCBiOGRhZWRmN2Jl
YmExY2Q4MWY2ZTUyNDQ5NjAzMTBmMTMzMTBjMTFlLi4wZTVmYWVjMWIzYWFlNzkyNDU0YTg5OTAx
MmM5Njc0YzNjMmU4NDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQpAQCAtNTEsOCArNTEsMTEg
QEAgYm9vbCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRsZXI6OmhhbmRsZVhQQ0V2
ZW50KHhwY19vYmplY3RfdCBldmVudCkgY28KICAgICBpZiAobWVzc2FnZU5hbWUuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNo
U2VydmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQ
Q0VuZHBvaW50TWVzc2FnZU5hbWUpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NQ
b29sKCkuc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoZXZlbnQpOwor
ICAgIGlmIChtZXNzYWdlTmFtZSA9PSBMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDQ29uc3RhbnRz
Ojp4cGNMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDRW5kcG9pbnRNZXNzYWdlTmFtZSkgeworICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5tX2VuZHBvaW50TWVzc2FnZSA9IGV2ZW50OworICAgICAg
ICBmb3IgKGF1dG8mIGRhdGFTdG9yZSA6IG1fbmV0d29ya1Byb2Nlc3MtPm1fd2Vic2l0ZURhdGFT
dG9yZXMpCisgICAgICAgICAgICBkYXRhU3RvcmUuc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9p
bnRUb0FsbFdlYlByb2Nlc3NlcygpOworICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKaW5k
ZXggY2M1MjZhYWYzYWFmYjFjMTQ2ZGE0YjI0MTk0NTliMTA5MjAxYjYxMC4uMDg1ZTdkMjY1YTEz
NzM1YmU3YTEyNzhlYzFkZmI2M2ZkNWRkNWQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1
ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1By
b3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgiCiAjaW5jbHVkZSAiV2ViQ29v
a2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5TWVz
c2FnZXMuaCIKQEAgLTM5LDI0ICs0MCwxNiBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAotY29uc3QgY2hhciogV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
dXBwbGVtZW50TmFtZSgpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykKKyAgICA6IG1fbmV0d29y
a1Byb2Nlc3MobWFrZVdlYWtQdHIobmV0d29ya1Byb2Nlc3MpKQogewotICAgIHJldHVybiAiV2Vi
Q29va2llTWFuYWdlclByb3h5IjsKLX0KLQotUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gV2Vi
Q29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94eShwcm9jZXNz
UG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQcm94
eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi0gICAgOiBXZWJDb250ZXh0U3VwcGxlbWVu
dChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250ZXh0U3VwcGxlbWVudDo6cHJvY2Vzc1Bvb2wo
KS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIG5ldHdvcmtQcm9jZXNzLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksICp0aGlzKTsKIH0KIAogV2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2ll
TWFuYWdlclByb3h5KCkKIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CiAgICAgQVNTRVJUKG1fY29va2ll
T2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiB9CiAKQEAgLTY1LDEwMiArNTgsODQgQEAgdm9pZCBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmluaXRpYWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5hZ2Vy
Q2xpZW50QmFzZSogY2wKICAgICBtX2NsaWVudC5pbml0aWFsaXplKGNsaWVudCk7CiB9CiAKLS8v
IFdlYkNvbnRleHRTdXBwbGVtZW50Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9j
ZXNzUG9vbERlc3Ryb3llZCgpCi17Ci0gICAgVmVjdG9yPE9ic2VydmVyKj4gb2JzZXJ2ZXJzOwot
ICAgIGZvciAoYXV0byYgb2JzZXJ2ZXJTZXQgOiBtX2Nvb2tpZU9ic2VydmVycy52YWx1ZXMoKSkg
ewotICAgICAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJTZXQpCi0gICAgICAgICAg
ICBvYnNlcnZlcnMuYXBwZW5kKG9ic2VydmVyKTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8qIG9i
c2VydmVyIDogb2JzZXJ2ZXJzKQotICAgICAgICBvYnNlcnZlci0+bWFuYWdlckRlc3Ryb3llZCgp
OwotCi0gICAgQVNTRVJUKG1fY29va2llT2JzZXJ2ZXJzLmlzRW1wdHkoKSk7Ci19Ci0KLXZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5KikK
LXsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShOZXR3
b3JrUHJvY2Vzc1Byb3h5KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnJl
ZldlYkNvbnRleHRTdXBwbGVtZW50KCkKLXsKLSAgICBBUEk6Ok9iamVjdDo6cmVmKCk7Ci19Ci0K
LXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZXJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkK
LXsKLSAgICBBUEk6Ok9iamVjdDo6ZGVyZWYoKTsKLX0KLQogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBjYWxsYmFja0Z1bmN0
aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhvc3RuYW1lc1dpdGhDb29raWVzKHNlc3Np
b25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhvc3RuYW1lc1dpdGhDb29raWVzKHNlc3Npb25JRCks
IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tG
dW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBob3N0bmFtZXMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSk7CisgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lv
bklELCBob3N0bmFtZXMpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRl
bGV0ZUFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQ
b29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhzZXNzaW9uSUQpKTsKKyAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhzZXNzaW9uSUQpLCAw
KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1By
b2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxl
dGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUo
Y2FsbGJhY2tGdW5jdGlvbildKCkgbXV0YWJsZSB7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llKHNlc3Npb25JRCwgY29va2llKSwgV1RGTW92
ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQogICAgICAgICBjYWxsYmFja0Z1bmN0aW9u
KCk7Ci0gICAgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxD
b29raWVzTW9kaWZpZWRTaW5jZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdhbGxUaW1lIHRp
bWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAg
IGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKHNlc3Npb25JRCwg
dGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKHNlc3Np
b25JRCwgdGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAg
ICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
c2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxDb29raWU+
JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikK
IHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBjb29raWVzKSwgV1RG
TW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6U2V0Q29va2llKHNlc3Npb25JRCwgY29va2llcyksIFdURk1vdmUoY2FsbGJh
Y2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQog
CiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBjb25zdCBVUkwmIHVybCwg
Y29uc3QgVVJMJiBtYWluRG9jdW1lbnRVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
YWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZXMoc2Vzc2lv
bklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVudFVSTCksIFdURk1vdmUoY2FsbGJhY2tGdW5j
dGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENv
b2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVudFVSTCksIFdURk1vdmUo
Y2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigp
OwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENvb2tpZT4m
Jik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Mu
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRBbGxDb29r
aWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25l
dHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1
bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBh
dXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJD
b29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwor
ICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJv
Y2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0
YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCksIDApOwog
fQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5n
ZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRU
b05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSk7CisgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Np
b25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llT2Jz
ZXJ2ZXJDYWxsYmFjayhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9p
ZCAoKT4mJiBjYWxsYmFjaykKQEAgLTIxMSwxOCArMTg2LDE4IEBAIHZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5Ojpjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIAog
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFM
OjpTZXNzaW9uSUQsIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSNpZiBVU0UoU09VUCkKLSAgICBw
cm9jZXNzUG9vbCgpLT5zZXRJbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpOwot
I2VuZGlmCi0KLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBv
bGljeSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1
bmN0aW9uKCk7CiB9CiAKLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBD
b29raWVBY2NlcHRQb2xpY3kpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCit2b2lkIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYg
Y2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdv
cmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koc2Vz
c2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBj
YWxsYmFja0Z1bmN0aW9uKEhUVFBDb29raWVBY2NlcHRQb2xpY3k6Ok5ldmVyKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tp
ZU1hbmFnZXJQcm94eS5oCmluZGV4IDBiZGZjMGQ0ZTQ3YzQzNmY1ODVjZjI5YzA5ZDUxYTI5YmM4
MTFhOWQuLjZmNTFmMDNlNWMwY2E4OTQxMjMzNDM3N2I1NTQzZDgyMmNjMmZlYzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCkBAIC01Niwx
MSArNTYsOSBAQCB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJyYXlDYWxs
YmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQ
b2xpY3k+IEhUVFBDb29raWVBY2NlcHRQb2xpY3lDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0Nh
bGxiYWNrPGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jj4gR2V0Q29va2llc0NhbGxiYWNr
OwogCi1jbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBs
PEFQSTo6T2JqZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHVibGljIFdlYkNvbnRleHRTdXBw
bGVtZW50LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIFdlYkNvb2tpZU1h
bmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNv
b2tpZU1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKLQotICAgIHN0YXRpYyBSZWY8
V2ViQ29va2llTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBzdGF0
aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKE5ldHdvcmtQcm9jZXNzUHJveHkm
IG5ldHdvcmtQcm9jZXNzKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQ
cm94eShuZXR3b3JrUHJvY2VzcykpOyB9CiAgICAgdmlydHVhbCB+V2ViQ29va2llTWFuYWdlclBy
b3h5KCk7CiAKICAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5hZ2Vy
Q2xpZW50QmFzZSopOwpAQCAtMTA0LDE3ICsxMDIsMTAgQEAgcHVibGljOgogICAgIHVzaW5nIEFQ
STo6T2JqZWN0OjpkZXJlZjsKIAogcHJpdmF0ZToKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHko
V2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoTmV0d29ya1Byb2Nl
c3NQcm94eSYpOwogCiAgICAgdm9pZCBjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEKTsK
IAotICAgIC8vIFdlYkNvbnRleHRTdXBwbGVtZW50Ci0gICAgdm9pZCBwcm9jZXNzUG9vbERlc3Ry
b3llZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgcHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94
eSopIG92ZXJyaWRlOwotICAgIHZvaWQgcHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJv
eHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkZXJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0KICAg
ICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAKQEAgLTEyNSw2ICsxMTYs
NyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248
dm9pZCAoKT4+IG1fbGVnYWN5Q29va2llT2JzZXJ2ZXJzOwogICAgIEhhc2hNYXA8UEFMOjpTZXNz
aW9uSUQsIEhhc2hTZXQ8T2JzZXJ2ZXIqPj4gbV9jb29raWVPYnNlcnZlcnM7CiAKKyAgICBXZWFr
UHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAgICAgV2ViQ29va2ll
TWFuYWdlclByb3h5Q2xpZW50IG1fY2xpZW50OwogCiAjaWYgVVNFKFNPVVApCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAwODJhNWQ3MzAwMTdiOGJkYjliMDQ3
YzY3NzYwZDg4YTQ0OWU2ZTg4Li45NzExNTcwOTZkNjRjZWE5YTQ2NjliZjc4YWYyYjU3Mjg2N2Jl
ZDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE3NDYs
NyArMTc0Niw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDb250cm9sbGVkQnlBdXRvbWF0aW9u
KGJvb2wgY29udHJvbGxlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6U2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbihjb250cm9sbGVkKSk7Ci0gICAgbV9w
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0U2Vzc2lvbklzQ29udHJvbGxlZEJ5QXV0b21hdGlvbihtX3dlYnNp
dGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBtX2NvbnRyb2xsZWRCeUF1dG9tYXRpb24pKTsKKyAg
ICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0U2Vzc2lvbklzQ29udHJvbGxlZEJ5QXV0b21hdGlvbihtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCBtX2NvbnRyb2xsZWRCeUF1dG9tYXRpb24pLCAwKTsKIH0K
IAogdm9pZCBXZWJQYWdlUHJveHk6OmNyZWF0ZUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcm
IHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSkKQEAgLTMyMTAs
MTEgKzMyMTAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aXNGb3JjZWRJbnRvQXBwQm91bmRNb2Rl
VGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPgogdm9pZCBXZWJQYWdlUHJveHk6
OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKCkKIHsKICNp
ZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKLSAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVz
c2FnZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1l
bnQoKSwgMCk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0
bGVtZW50KCksIDApOwogI2VuZGlmCiB9CiAKQEAgLTMyMjMsMTMgKzMyMTksNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6Y2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZShDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykgJiYgIVBMQVRG
T1JNKE1BQ0NBVEFMWVNUKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIHNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRs
ZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJp
ZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFT
dG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwog
I2VuZGlmCkBAIC00NDIzLDcgKzQ0MTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cHJlY29ubmVj
dFRvKGNvbnN0IFVSTCYgdXJsKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5ID0gbV9jYW5Vc2VDcmVkZW50aWFsU3RvcmFnZSA/IFdlYkNvcmU6OlN0
b3JlZENyZWRlbnRpYWxzUG9saWN5OjpVc2UgOiBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1Bv
bGljeTo6RG9Ob3RVc2U7Ci0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkucHJlY29ubmVjdFRvKHNlc3Npb25JRCgpLCBpZGVudGlmaWVyKCksIHdlYlBh
Z2VJRCgpLCB1cmwsIHVzZXJBZ2VudCgpLCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZp
Z2F0aW5nVG9BcHBCb3VuZERvbWFpbigpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29y
a1Byb2Nlc3MoKS5wcmVjb25uZWN0VG8oc2Vzc2lvbklEKCksIGlkZW50aWZpZXIoKSwgd2ViUGFn
ZUlEKCksIHVybCwgdXNlckFnZW50KCksIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmln
YXRpbmdUb0FwcEJvdW5kRG9tYWluKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q2Fu
VXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCBjYW5Vc2VDcmVkZW50aWFsU3RvcmFnZSkKQEAgLTQ3
MTksNyArNDcwOSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUo
RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIEZyYW1lSW5mb0RhdGEmCiAgICAgICAgICAgICBSZWdp
c3RyYWJsZURvbWFpbiBjdXJyZW50RG9tYWluIHsgY3VycmVudFJlcXVlc3QudXJsKCkgfTsKICAg
ICAgICAgICAgIFVSTCByZXF1ZXN0ZXJVUkwgeyBVUkwoKSwgcmVxdWVzdGVyT3JpZ2luLnRvU3Ry
aW5nKCkgfTsKICAgICAgICAgICAgIGlmICghY3VycmVudERvbWFpbi5tYXRjaGVzKHJlcXVlc3Rl
clVSTCkpCi0gICAgICAgICAgICAgICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLmRpZENvbW1p
dENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lv
bklEKCksIFJlZ2lzdHJhYmxlRG9tYWluIHsgcmVxdWVzdGVyVVJMIH0sIGN1cnJlbnREb21haW4s
IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIG1faWRlbnRpZmllciwgbV93ZWJQYWdlSUQpOworICAg
ICAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5kaWRDb21t
aXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9LCBjdXJyZW50RG9tYWlu
LCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50aWZpZXIsIG1fd2ViUGFnZUlEKTsKICAg
ICAgICAgfQogI2VuZGlmCiAgICAgfQpAQCAtNDc1Nyw3ICs0NzQ3LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZShGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgRnJh
bWVJbmZvRGF0YSYKICAgICBpZiAobmF2aWdhdGlvbiAmJiBmcmFtZS0+aXNNYWluRnJhbWUoKSkg
ewogICAgICAgICBpZiAoYXV0byYgYWRDbGlja0F0dHJpYnV0aW9uID0gbmF2aWdhdGlvbi0+YWRD
bGlja0F0dHJpYnV0aW9uKCkpIHsKICAgICAgICAgICAgIGlmIChhZENsaWNrQXR0cmlidXRpb24t
PmRlc3RpbmF0aW9uKCkubWF0Y2hlcyhmcmFtZS0+dXJsKCkpKQotICAgICAgICAgICAgICAgIG1f
cHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmlidXRpb24pKTsKKyAgICAgICAgICAgICAgICB3
ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U3RvcmVBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgKmFkQ2xpY2tBdHRyaWJ1dGlvbiksIDApOwogICAgICAgICB9CiAgICAgfQogCkBA
IC01MzcxLDcgKzUzNjEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9u
KGNvbnN0IFdlYkZyYW1lUHJveHkmIGZyYW1lLCBjb25zdCBVUkwmIHBhZwogICAgIGlmICh0YXJn
ZXRIb3N0LmlzRW1wdHkoKSB8fCBtYWluRnJhbWVIb3N0LmlzRW1wdHkoKSB8fCB0YXJnZXRIb3N0
ID09IHNvdXJjZVVSTC5ob3N0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+
cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkxvZ0ZyYW1lTmF2aWdhdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCBSZWdpc3RyYWJsZURvbWFpbiB7IHRhcmdldFVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHBh
Z2VVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBzb3VyY2VVUkwgfSwgaXNSZWRpcmVjdCwgZnJh
bWUuaXNNYWluRnJhbWUoKSwgTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2RpZEZpbmlzaERvY3Vt
ZW50TG9hZEZvck1haW5GcmFtZVRpbWVzdGFtcCwgd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVz
ZXIpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6TG9nRnJhbWVOYXZpZ2F0aW9uKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxlRG9tYWluIHsgdGFyZ2V0VVJMIH0sIFJlZ2lzdHJh
YmxlRG9tYWluIHsgcGFnZVVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7IHNvdXJjZVVSTCB9LCBp
c1JlZGlyZWN0LCBmcmFtZS5pc01haW5GcmFtZSgpLCBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1f
ZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yTWFpbkZyYW1lVGltZXN0YW1wLCB3YXNQb3RlbnRpYWxs
eUluaXRpYXRlZEJ5VXNlciksIDApOwogfQogI2VuZGlmCiAKQEAgLTk5OTYsNTggKzk5ODYsMjcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OnN5c3RlbVByZXZpZXdBY3Rpb25UcmlnZ2VyZWQoY29uc3Qg
V2ViQ29yZTo6U3lzdGVtUHJldmlld0luZm8KIAogdm9pZCBXZWJQYWdlUHJveHk6OmR1bXBBZENs
aWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3By
b2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5l
dHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihlbXB0eVN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNl
c3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJz
aXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFT
dG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29y
a1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpD
bGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0
QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkp
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGlt
ZXJGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCku
bmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNp
dGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZl
cnNpb25VUkxGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
aWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmli
dXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9y
VGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nl
c3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRD
bGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJM
RShTUEVFQ0hfU1lOVEhFU0lTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuY3BwCmluZGV4IGQ5MjZiMzNjYmRmMmJiOGJiOTgwZDYzYzVkYzUyYWU1MjUwOTI1MjkuLjcx
ZjFmNjM4ZGMzM2Y0ZTQxODI1NmQ2NjgxY2Y4NDRmODJiOTQxYzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRl
ICJMZWdhY3lHbG9iYWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ0luaXRpYWxpemF0aW9uLmgi
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bkluZm8uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgog
I2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc1Byb3h5LmgiCkBAIC0xNDMsOCArMTQyLDEwIEBACiAjZW5kaWYKIAogI2RlZmluZSBXRUJQ
Uk9DRVNTUE9PTF9SRUxFQVNFX0xPRyhjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0coY2hh
bm5lbCwgIiVwIC0gV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQor
I2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19TVEFUSUMoY2hhbm5lbCwgZm10LCAu
Li4pIFJFTEVBU0VfTE9HKGNoYW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9B
UkdTX18pCiAjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWws
IGZtdCwgLi4uKSBSRUxFQVNFX0xPR19FUlJPUihjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9v
bDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JF
TEVBU0VfTE9HX0lGX0FMTE9XRUQoY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lGKHNl
c3Npb25JRC5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgY2hhbm5lbCwgIiVwIC0gV2ViUHJv
Y2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBXRUJQUk9DRVNT
UE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEX1NUQVRJQyhjaGFubmVsLCBmbXQsIC4uLikgUkVM
RUFTRV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVs
LCAiV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCAjI19fVkFfQVJHU19fKQogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMjMyLDYgKzIzMywxMSBAQCBzdGF0
aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIGdsb2JhbFVSTFNj
aGVtZXNXaXRoQ3VzdG9tUHJvdAogICAgIHJldHVybiBzZXQ7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+
IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQor
eworICAgIHJldHVybiBjb3B5VG9WZWN0b3IoZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90
b2NvbEhhbmRsZXJzKCkpOworfQorCiBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJ
OjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgOiBtX2NvbmZp
Z3VyYXRpb24oY29uZmlndXJhdGlvbi5jb3B5KCkpCiAgICAgLCBtX2RlZmF1bHRQYWdlR3JvdXAo
V2ViUGFnZUdyb3VwOjpjcmVhdGUoKSkKQEAgLTIzOSw3ICsyNDUsNiBAQCBXZWJQcm9jZXNzUG9v
bDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3Vy
YXRpb24pCiAgICAgLCBtX2F1dG9tYXRpb25DbGllbnQobWFrZVVuaXF1ZTxBUEk6OkF1dG9tYXRp
b25DbGllbnQ+KCkpCiAgICAgLCBtX2Rvd25sb2FkQ2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpE
b3dubG9hZENsaWVudD4oKSkKICAgICAsIG1faGlzdG9yeUNsaWVudChtYWtlVW5pcXVlPEFQSTo6
TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCkpCi0gICAgLCBtX2N1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudChtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Pigp
KQogICAgICwgbV92aXNpdGVkTGlua1N0b3JlKFZpc2l0ZWRMaW5rU3RvcmU6OmNyZWF0ZSgpKQog
I2lmIFBMQVRGT1JNKE1BQykKICAgICAsIG1faGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNh
bXBsZXIobWFrZVVuaXF1ZTxIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlcj4oKnRo
aXMpKQpAQCAtMjY3LDkgKzI3Miw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChB
UEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICNlbmRpZgogICAg
IH0pOwogCi0gICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUgJiYgV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIG1fd2Vic2l0ZURhdGFT
dG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpOwotCiAg
ICAgZm9yIChhdXRvJiBzY2hlbWUgOiBtX2NvbmZpZ3VyYXRpb24tPmFsd2F5c1JldmFsaWRhdGVk
VVJMU2NoZW1lcygpKQogICAgICAgICBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNBbHdheXNSZXZhbGlk
YXRlZC5hZGQoc2NoZW1lKTsKIApAQCAtMjg1LDcgKzI4Nyw2IEBAIFdlYlByb2Nlc3NQb29sOjpX
ZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlv
bikKICAgICBhZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIAogICAgIC8vIE5PVEU6IFRoZXNlIHN1Yi1vYmpl
Y3RzIG11c3QgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbV9tZXNzYWdlUmVjZWl2ZXJNYXAuLgotICAg
IGFkZFN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1cHBsZW1l
bnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxXZWJO
b3RpZmljYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCkBA
IC0zNDIsOSArMzQzLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6On5XZWJQcm9jZXNzUG9vbCgpCiAgICAg
cHJvY2Vzc1Bvb2xDb3VudGVyLmRlY3JlbWVudCgpOwogI2VuZGlmCiAKLSAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2h1dERvd25Qcm9jZXNzKCk7
Ci0KICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICBpZiAoIW1fcHJvY2Vzc2VzVXNpbmdHYW1lcGFk
cy5pc0VtcHR5KCkpCiAgICAgICAgIFVJR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5wcm9j
ZXNzUG9vbFN0b3BwZWRVc2luZ0dhbWVwYWRzKCp0aGlzKTsKQEAgLTQwMiwxNiArNDAwLDYgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8
QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYKICAgICAgICAgbV9hdXRvbWF0aW9uQ2xpZW50ID0gV1RG
TW92ZShhdXRvbWF0aW9uQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0TGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudD4mJiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi17
Ci0jaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKLSAgICBpZiAoIWN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQgPSBtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Pigp
OwotICAgIGVsc2UKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBXVEZN
b3ZlKGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNv
bnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKQogewog
ICAgIC8vIEd1YXJkIGFnYWluc3QgQVBJIG1pc3VzZS4KQEAgLTQyMSwxMSArNDA5LDYgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlm
aWVyKGNvbnN0IFN0cmluZyYgY3UKICAgICBtX2NvbmZpZ3VyYXRpb24tPnNldEN1c3RvbVdlYkNv
bnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRs
ZUlkZW50aWZpZXIpOwogfQogCi1JUEM6OkNvbm5lY3Rpb24qIFdlYlByb2Nlc3NQb29sOjpuZXR3
b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKQotewotICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNz
LT5jb25uZWN0aW9uKCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdl
ZCh2b2lkKiBjb250ZXh0KQogewogICAgIHN0YXRpY19jYXN0PFdlYlByb2Nlc3NQb29sKj4oY29u
dGV4dCktPmxhbmd1YWdlQ2hhbmdlZCgpOwpAQCAtNDM1LDggKzQxOCw3IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCgpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCgpKTsKICNp
ZiBVU0UoU09VUCkKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5n
dWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDApOworICAgIFdlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclBy
ZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtNDQ5LDcgKzQzMSw4IEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmZ1bGxLZXlib2FyZEFjY2Vzc01vZGVDaGFuZ2VkKGJvb2wg
ZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5
UHJlc3N1cmVFdmVudChib29sIGlzQ3JpdGljYWwpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2Vz
KE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVu
dChpc0NyaXRpY2FsKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OkF1
eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwp
KTsKKyAgICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojph
bGxOZXR3b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0Ny
aXRpY2FsKSwgMCk7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgUGx1Z2lu
UHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3Jp
dGljYWwpOwogI2VuZGlmCkBAIC00NzQsMjc1ICs0NTcsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpzY3JlZW5Qcm9wZXJ0aWVzU3RhdGVDaGFuZ2VkKCkKICNlbmRpZgogfQogCi1OZXR3b3JrUHJv
Y2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURh
dGFTdG9yZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKLSAgICAKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJv
dW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KLSAgICAv
LyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRp
b24gY2hlY2sgb24gb3VyIEFQSXMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMDI0Ni4KLSAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7Ci0gICAg
ICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXSB7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAg
ICB9KTsKLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotICAgIH0KLQotICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkg
ewotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRo
V2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNs
ZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKm1fbmV0d29y
a1Byb2Nlc3M7Ci0gICAgfQotCi0gICAgYXV0byBuZXR3b3JrUHJvY2VzcyA9IG1ha2VVbmlxdWU8
TmV0d29ya1Byb2Nlc3NQcm94eT4oKnRoaXMpOwotCi0gICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsK
LSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29v
a2llcyA9IGNvcHlUb1ZlY3RvcihtX3dlYnNpdGVEYXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkp
OwotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSNp
ZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25CdW5kbGVJ
ZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBw
bGljYXRpb25CdW5kbGVJZGVudGlmaWVyKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0
aW9uU2Vjb25kYXJ5SWRlbnRpZmllciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJhdGlv
bigpLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcigpOwotI2VuZGlmCi0gICAg
fQotCi0gICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNp
bmdsZXRvbigpLmNhY2hlTW9kZWwoKTsKLQotICAgIGZvciAoYXV0byYgc2NoZW1lIDogZ2xvYmFs
VVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCi0gICAgICAgIHBhcmFtZXRl
cnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7
Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFN0cmluZyBjb29raWVTdG9yYWdlRGly
ZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBp
ZiAoIWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURp
cmVjdG9yeSwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLQotICAgIFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9v
bDo6bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAgIGlmICghY29udGFpbmVyQ2FjaGVz
RGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1l
dGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3Ry
aW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVE
aXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0g
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3Rv
cnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1
bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxl
KGVtcHR5U3RyaW5nKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgcGFyYW1ldGVy
cy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2Jh
bFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOwotICAg
IHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0
eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCku
c2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKLSAg
ICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihM
ZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2Fs
KCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29w
eVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdp
c3RlckFzTm9BY2Nlc3MoKSk7Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAv
LyAqKioqKioqKioKLSAgICAvLyBJTVBPUlRBTlQ6IERvIG5vdCBjaGFuZ2UgdGhlIGRpcmVjdG9y
eSBzdHJ1Y3R1cmUgZm9yIGluZGV4ZWQgZGF0YWJhc2VzIG9uIGRpc2sgd2l0aG91dCBmaXJzdCBj
b25zdWx0aW5nIGEgcmV2aWV3ZXIgZnJvbSBBcHBsZSAoPHJkYXI6Ly9wcm9ibGVtLzE3NDU0NzEy
PikKLSAgICAvLyAqKioqKioqKioKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAg
ICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURp
cmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
YXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1ldGVycygpLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeTsKLSAgICAKLSAgICBpZiAoIXBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkgewotICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmNyZWF0ZVN5bUxpbmtG
b3JGaWxlVXBncmFkZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeSk7Ci0gICAgfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3Jl
LT5yZXNvbHZlZFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBpZiAo
IXBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSkKLSAgICAgICAg
cGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gIFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnkoKTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJl
Y3RvcnkocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwotI2VuZGlmCi0KLSAgICBhdXRvIGxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURh
dGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRMb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkoKSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAoIWxvY2FsU3RvcmFnZURpcmVjdG9yeSkKLSAg
ICAgICAgbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJl
Y3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGly
ZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAg
YXV0byBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNp
dGVEYXRhU3RvcmUtPmNhY2hlU3RvcmFnZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAg
IGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkgewotICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY2FjaGVTdG9yYWdl
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3Rv
cmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gV1RGTW92ZShjYWNo
ZVN0b3JhZ2VEaXJlY3RvcnkpOwotICAgIH0KLQotICAgIFN0cmluZyByZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSByZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlmIChtX3dlYnNpdGVE
YXRhU3RvcmUpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX3dl
YnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgp
OwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9y
ZUV4aXN0cygpKQotICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
ZGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJl
YWRXcml0ZURpcmVjdG9yeShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LCByZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGJvb2wgZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IGZhbHNlOwotICAgIGJvb2wgZW5hYmxlUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IGZhbHNlOwotICAgIGJvb2wgc2hvdWxk
SW5jbHVkZUxvY2FsaG9zdCA9IHRydWU7Ci0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWdNb2RlID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKLSAgICBXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlIHRoaXJkUGFy
dHlDb29raWVCbG9ja2luZ01vZGUgPSBXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdN
b2RlOjpBbGw7Ci0gICAgV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQg
c2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBXZWJDb3JlOjpTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87Ci0jZW5kaWYKLSAgICBXZWJDb3JlOjpGaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9
IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVz
OwotICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRv
bWFpbjsKLSAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBhcHBCb3VuZERv
bWFpbnM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gbWFudWFsUHJldmFsZW50UmVz
b3VyY2U7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBtX3RjY1ByZWZlcmVuY2VFbmFibGVk
ID0gZG9lc0FwcEhhdmVJVFBFbmFibGVkKCk7Ci0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3Jl
ICYmICF3aXRoV2Vic2l0ZURhdGFTdG9yZS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewot
ICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5h
YmxlZDsKLSAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBp
ZiAobV93ZWJzaXRlRGF0YVN0b3JlICYmICFtX3dlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVF
eHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9
IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyk7Ci0gICAgfSBlbHNlIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhp
c3RzKCkgJiYgIVdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+aXNJdHBTdGF0
ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
ID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZSgpLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZW5hYmxlUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0jZW5kaWYKLQotICAg
IGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAg
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IHdpdGhXZWJzaXRl
RGF0YVN0b3JlLT5oYXNTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAg
ICAgaWYgKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRl
cnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91bGRJbmNsdWRl
TG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3Q7Ci0gICAgICAgICAgICBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZURlYnVnTW9kZTsKLSNpZiBF
TkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICAgICAgdGhpcmRQYXJ0eUNv
b2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOwotICAgICAg
ICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZpcnN0UGFydHlXZWJzaXRl
RGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOwotICAg
ICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluID0gbmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnN0YW5kYWxvbmVBcHBsaWNh
dGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5kRG9tYWlucyA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5hcHBCb3VuZERvbWFp
bnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5tYW51YWxQcmV2YWxl
bnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0aFdlYnNpdGVEYXRhU3Rv
cmUtPnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRo
V2Vic2l0ZURhdGFTdG9yZS0+cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAg
ICAgICAKLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gd2l0aFdl
YnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAg
IGlmICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5
LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBhdXRv
JiBoc3RzU3RvcmFnZURpcmVjdG9yeSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEhT
VFNTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghaHN0c1N0b3JhZ2VEaXJlY3Rvcnku
aXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gaHN0
c1N0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGUoaHN0c1N0b3JhZ2VEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRX
cml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxl
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0g
bV93ZWJzaXRlRGF0YVN0b3JlLT5oYXNTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5k
aWYKLSAgICAgICAgaWYgKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAg
ICAgIGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5w
YXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxk
SW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGFyYW1ldGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAgICAgICAgICAg
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7
Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgICAgIHRoaXJk
UGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsK
LSAgICAgICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZTsKLSAgICAgICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25l
QXBwbGljYXRpb25Eb21haW47Ci0gICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91
bmREb21haW5zOwotICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFs
UHJldmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURh
dGFTdG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9
IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwot
Ci0gICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURh
dGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFu
ZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdv
cmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRi
b3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IGF1dG8mIGhzdHNT
dG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEhTVFNTdG9yYWdl
RGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghaHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkp
IHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gaHN0c1N0b3JhZ2VE
aXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoaHN0
c1N0b3JhZ2VEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVF
eGlzdHMoKSkKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnJlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkKCk7Ci0gICAgICAgIGF1dG8gbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gV2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5u
ZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRi
b3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICB9Ci0KLSNpZiBIQVZFKENGTkVUV09SS19BTFRFUk5BVElW
RV9TRVJWSUNFKQotICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpodHRwM0VuYWJsZWQoKSkgewot
ICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnkgPSBXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0QWx0ZXJuYXRpdmVTZXJ2aWNlc0RpcmVjdG9yeSgpOwotICAgICAgICBpZiAo
IXBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwM0VuYWJsZWQgPSB0
cnVlOwotICAgIH0KLSNlbmRpZgotICAgIGJvb2wgaXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQgPSBm
YWxzZTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycyA9IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzIHsKLSAgICAgICAgV1RGTW92ZShyZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGlyZWN0b3J5KSwKLSAgICAgICAgV1RGTW92ZShyZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKSwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljcywKLSAgICAgICAgaXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQsCi0gICAgICAg
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQsCi0gICAgICAgIHNo
b3VsZEluY2x1ZGVMb2NhbGhvc3QsCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUsCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAg
ICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSwKLSAgICAgICAgc2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudEVuYWJsZWQsCi0jZW5kaWYKLSAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGUsCi0gICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiwKLSAgICAg
ICAgYXBwQm91bmREb21haW5zLAotICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSwKLSAg
ICB9OwotCi0gICAgLy8gQWRkIGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBwYXJhbWV0ZXJzCi0gICAg
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7Ci0KLSAgICAvLyBJ
bml0aWFsaXplIHRoZSBuZXR3b3JrIHByb2Nlc3MuCi0gICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1l
dGVycyksIDApOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbmV0d29ya1Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRRT1MobmV0d29ya1Byb2Nlc3NMYXRlbmN5
UU9TKCksIG5ldHdvcmtQcm9jZXNzVGhyb3VnaHB1dFFPUygpKSwgMCk7Ci0jZW5kaWYKLQotICAg
IG5ldHdvcmtQcm9jZXNzLT51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7Ci0KLSAgICBpZiAod2l0
aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24o
bWFrZVJlZigqd2l0aFdlYnNpdGVEYXRhU3RvcmUpKTsKLSAgICAgICAgd2l0aFdlYnNpdGVEYXRh
U3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUg
dGhlIG5ldHdvcmsgcHJvY2VzcyBrbm93cyBhYm91dCBhbGwgdGhlIHNlc3Npb25zIHRoYXQgaGF2
ZSBiZWVuIHJlZ2lzdGVyZWQgYmVmb3JlIGl0IHN0YXJ0ZWQuCi0gICAgZm9yIChhdXRvJiBzZXNz
aW9uSUQgOiBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAua2V5cygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0
RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+YWRkU2Vzc2lvbigqd2Vic2l0ZURhdGFTdG9yZSk7Ci0gICAgfQotCi0gICAgbV9uZXR3
b3JrUHJvY2VzcyA9IFdURk1vdmUobmV0d29ya1Byb2Nlc3MpOwotICAgIHJldHVybiAqbV9uZXR3
b3JrUHJvY2VzczsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFz
aGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzUHJveHkpCiB7Ci0gICAgQVNT
RVJUKG1fbmV0d29ya1Byb2Nlc3MpOwotICAgIEFTU0VSVCgmbmV0d29ya1Byb2Nlc3NQcm94eSA9
PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsKLQogICAgIGZvciAoYXV0byYgc3VwcGxlbWVudCA6
IG1fc3VwcGxlbWVudHMudmFsdWVzKCkpCiAgICAgICAgIHN1cHBsZW1lbnQtPnByb2Nlc3NEaWRD
bG9zZSgmbmV0d29ya1Byb2Nlc3NQcm94eSk7CiAKQEAgLTc1MSw5ICs0NjcsNiBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYg
bmV0d29ya1Byb2Nlc3NQcgogICAgIGlmIChtX2F1dG9tYXRpb25TZXNzaW9uKQogICAgICAgICBt
X2F1dG9tYXRpb25TZXNzaW9uLT50ZXJtaW5hdGUoKTsKIAotICAgIC8vIExlYXZlIHRoZSBwcm9j
ZXNzIHByb3h5IGFyb3VuZCBkdXJpbmcgY2xpZW50IGNhbGwsIHNvIHRoYXQgdGhlIGNsaWVudCBj
b3VsZCBxdWVyeSB0aGUgcHJvY2VzcyBpZGVudGlmaWVyLgotICAgIG1fbmV0d29ya1Byb2Nlc3Mg
PSBudWxscHRyOwotCiAgICAgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIH0KIApAQCAtNzY0
LDIwICs0NzcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc0Ny
YXNoZWQoV2ViUHJvY2Vzc1Byb3h5JiBwcm94eSkKICNlbmRpZgogfQogCi12b2lkIFdlYlByb2Nl
c3NQb29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQ
cm9jZXNzUHJveHksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCi17Ci0gICAgZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24od2ViUHJvY2Vzc1Byb3h5LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyks
IHdlYlByb2Nlc3NQcm94eSA9IG1ha2VXZWFrUHRyKHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0g
V1RGTW92ZShyZXBseSldIChhdXRvJiBjb25uZWN0aW9uSW5mbykgbXV0YWJsZSB7Ci0gICAgICAg
IGlmIChVTkxJS0VMWSghSVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0
aW9uSW5mby5pZGVudGlmaWVyKCkpICYmIHdlYlByb2Nlc3NQcm94eSAmJiB3ZWFrVGhpcykpIHsK
LSAgICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKFByb2Nlc3MsICJn
ZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246IEZhaWxlZCBmaXJzdCBhdHRlbXB0LCByZXRyeWlu
ZyIpOwotICAgICAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqd2ViUHJvY2Vzc1By
b3h5LCBXVEZNb3ZlKHJlcGx5KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgcmVwbHkoY29ubmVjdGlvbkluZm8pOwotICAgIH0pOwotfQotCiAjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z3B1UHJvY2Vzc0NyYXNoZWQoUHJvY2Vz
c0lEIGlkZW50aWZpZXIpCiB7CkBAIC04MDEsMjMgKzUwMCwyNiBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpnZXRHUFVQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQ
cm94eSwgTQogfQogI2VuZGlmCiAKK2Jvb2wgV2ViUHJvY2Vzc1Bvb2w6OnNfdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcyA9IGZhbHNlOworCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25U
b05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmIHByb3h5LCBSZWdpc3RyYWJsZURv
bWFpbiYmIHJlZ2lzdHJhYmxlRG9tYWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBBU1NFUlRf
VU5VU0VEKHByb3h5LCAmcHJveHkgPT0gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKSk7CisgICAgYXV0
byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3Jl
Rm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKQorICAg
ICAgICB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9y
ZSgpLnB0cigpOworICAgIGlmICghcHJvY2Vzc1Bvb2xzKCkuc2l6ZSgpKQorICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmPFdlYlByb2Nlc3NQb29sPj4gc2VydmljZVdvcmtlclByb2Nl
c3NQb29sKFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b246OmNyZWF0ZSgpLmdldCgpKSk7CiAKLSAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vi
c2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNl
c3Npb25JRCk7Ci0KLSAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgaWYgKCFt
X3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLSAgICAgICAg
d2Vic2l0ZURhdGFTdG9yZSA9IG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsKLSAgICB9CisgICAg
Ly8gQXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wgdG8gaG9zdCB0aGUg
c2VydmljZSB3b3JrZXIgcHJvY2Vzcy4KKyAgICBhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQ
b29scygpWzBdOworICAgIEFTU0VSVChwcm9jZXNzUG9vbCk7CiAKICAgICBXZWJQcm9jZXNzUHJv
eHkqIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgeyBudWxscHRyIH07Ci0gICAgaWYgKCFtX3Vz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9j
ZXNzIDogbV9wcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGlmIChwcm9jZXNzID09IG1fcHJld2Fy
bWVkUHJvY2VzcyB8fCBwcm9jZXNzLT5pc0R1bW15UHJvY2Vzc1Byb3h5KCkpCisKKyAgICBpZiAo
IXNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgeworICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3MgOiBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMpIHsKKyAgICAgICAgICAgIGlmIChw
cm9jZXNzID09IHByb2Nlc3NQb29sLT5tX3ByZXdhcm1lZFByb2Nlc3MgfHwgcHJvY2Vzcy0+aXNE
dW1teVByb2Nlc3NQcm94eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgaWYgKCZwcm9jZXNzLT53ZWJzaXRlRGF0YVN0b3JlKCkgIT0gd2Vic2l0ZURhdGFTdG9yZSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTgyNSwzNSArNTI3LDM1IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJv
Y2VzcyhOZXR3b3JrUHJvCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAg
IHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgPSBwcm9jZXNzLmdldCgpOwotICAgICAgICAgICAg
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZW5hYmxlU2VydmljZVdvcmtlcnModXNlckNvbnRl
bnRDb250cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkpOworICAgICAgICAgICAg
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZW5hYmxlU2VydmljZVdvcmtlcnMocHJvY2Vzc1Bv
b2wtPnVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpKTsK
IAotICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2
aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzIHJldXNpbmcgYW4gZXhpc3Rpbmcgd2ViIHByb2Nlc3MgKHByb2Nlc3M9JXAsIFBJRD0lZCki
LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5w
cm9jZXNzSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0Vf
TE9HX0lGX0FMTE9XRURfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250
ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgcmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJv
Y2VzcyAocHJvY2Vzcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIXNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHkpIHsKLSAgICAgICAgYXV0byBuZXdQcm9jZXNzUHJveHkgPSBXZWJQcm9jZXNzUHJv
eHk6OmNyZWF0ZUZvclNlcnZpY2VXb3JrZXJzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9t
YWluKSwgKndlYnNpdGVEYXRhU3RvcmUpOworICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9
IFdlYlByb2Nlc3NQcm94eTo6Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMoKnByb2Nlc3NQb29sLCBX
VEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgKndlYnNpdGVEYXRhU3RvcmUpOwogICAgICAgICBz
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5ID0gbmV3UHJvY2Vzc1Byb3h5LnB0cigpOwogCi0gICAg
ICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQoU2VydmljZVdvcmtlciwg
ImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyBjcmVhdGlu
ZyBhIG5ldyBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzIChwcm9jZXM9JXAsIFBJRD0lZCkiLCBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNz
SWRlbnRpZmllcigpKTsKKyAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxM
T1dFRF9TVEFUSUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0
aW9uVG9OZXR3b3JrUHJvY2VzcyBjcmVhdGluZyBhIG5ldyBzZXJ2aWNlIHdvcmtlciBwcm9jZXNz
IChwcm9jZXM9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNl
V29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKIAotICAgICAgICBpbml0
aWFsaXplTmV3V2ViUHJvY2VzcyhuZXdQcm9jZXNzUHJveHksIHdlYnNpdGVEYXRhU3RvcmUpOwot
ICAgICAgICBtX3Byb2Nlc3Nlcy5hcHBlbmQoV1RGTW92ZShuZXdQcm9jZXNzUHJveHkpKTsKKyAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94
eSwgd2Vic2l0ZURhdGFTdG9yZSk7CisgICAgICAgIHByb2Nlc3NQb29sLT5tX3Byb2Nlc3Nlcy5h
cHBlbmQoV1RGTW92ZShuZXdQcm9jZXNzUHJveHkpKTsKICAgICB9CiAKLSAgICBBU1NFUlQoIW1f
c2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb250YWlucygqc2VydmljZVdvcmtlclByb2Nlc3NQcm94
eSkpOwotICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5hZGQoKnNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHkpOworICAgIEFTU0VSVCghc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5z
KCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3Nl
cygpLmFkZCgqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSk7CiAKLSAgICBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5LT5lc3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4dChtX3NlcnZpY2VXb3Jr
ZXJQcmVmZXJlbmNlcyA/IG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzLnZhbHVlKCkgOiBtX2Rl
ZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIGlmICghbV9zZXJ2aWNlV29ya2VyVXNlckFnZW50LmlzTnVsbCgpKQot
ICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNlckFn
ZW50KG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eS0+ZXN0YWJsaXNoU2VydmljZVdvcmtlckNvbnRleHQocHJvY2Vzc1Bvb2wtPm1fc2Vydmlj
ZVdvcmtlclByZWZlcmVuY2VzID8gcHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclByZWZlcmVu
Y2VzLnZhbHVlKCkgOiBwcm9jZXNzUG9vbC0+bV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNl
cygpLnN0b3JlKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBpZiAoIXByb2Nl
c3NQb29sLT5tX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxsKCkpCisgICAgICAgIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQocHJvY2Vzc1Bv
b2wtPm1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2Vz
cykKIHsKLSAgICBBU1NFUlQobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKHByb2Nl
c3MpKTsKLSAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMucmVtb3ZlKHByb2Nlc3MpOworICAg
IEFTU0VSVChzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29udGFpbnMocHJvY2VzcykpOworICAg
IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5yZW1vdmUocHJvY2Vzcyk7CiB9CiAjZW5kaWYKIApA
QCAtOTIyLDcgKzYyNCw3IEBAIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29s
Ojp0cnlUYWtlUHJld2FybWVkUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlCiAjaWYgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShXUEUpCiAgICAgLy8gSW4gcGxhdGZvcm1zIHVzaW5nIEJ1YmJsZXdy
YXAgZm9yIHNhbmRib3hpbmcsIHByZXdhcm1lZCBwcm9jZXNzIGlzIGxhdW5jaGVkIHVzaW5nIHRo
ZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IFdlYnNpdGVEYXRhU3RvcmUsCiAgICAgLy8gc28gd2Ug
ZG9uJ3QgdXNlIGl0IGluIGNhc2Ugb2YgdXNpbmcgYSBkaWZmZXJlbnQgV2Vic2l0ZURhdGFTdG9y
ZS4KLSAgICBpZiAobV9zYW5kYm94RW5hYmxlZCAmJiBtX3dlYnNpdGVEYXRhU3RvcmUgJiYgbV93
ZWJzaXRlRGF0YVN0b3JlLmdldCgpICE9ICZ3ZWJzaXRlRGF0YVN0b3JlKQorICAgIGlmIChtX3Nh
bmRib3hFbmFibGVkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRpZgogCkBAIC0xMDMy
LDggKzczNCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNz
KFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcywgV2Vic2l0ZURhCiAgICAgICAgIHByb2Nlc3MuaXNS
ZXNwb25zaXZlKFtpbml0aWFsaXphdGlvbkFjdGl2aXR5ID0gV1RGTW92ZShpbml0aWFsaXphdGlv
bkFjdGl2aXR5KV0gKGJvb2wpIHsgfSk7CiAgICAgfSk7CiAKLSAgICBlbnN1cmVOZXR3b3JrUHJv
Y2VzcygpOwotCiAgICAgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwog
CiAgICAgcGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGggPSBtX3Jlc29sdmVkUGF0aHMuaW5q
ZWN0ZWRCdW5kbGVQYXRoOwpAQCAtMTE5OCw5ICs4OTgsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
Ojpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKICAg
ICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5pZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcoKTsK
IAogICAgIG1fY29ubmVjdGlvbkNsaWVudC5kaWRDcmVhdGVDb25uZWN0aW9uKHRoaXMsIHByb2Nl
c3MtPndlYkNvbm5lY3Rpb24oKSk7Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAg
ICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSog
cHJvY2VzcykKQEAgLTEyOTUsMTAgKzk5Miw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nl
c3NQb29sOjpjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAg
ICAgaWYgKCFwYWdlQ29uZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpKSB7CiAgICAgICAg
IC8vIFdlIHRyeSB0byBhdm9pZCBjcmVhdGluZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxv
bmcgYXMgcG9zc2libGUuCiAgICAgICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRv
IGNyZWF0ZSBhIHdlYiBwYWdlIHdpdGhvdXQgYW55IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVu
IHdlIGhhdmUgdG8gY3JlYXRlIGl0LgotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkK
LSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotCi0gICAgICAgIHBhZ2VDb25maWd1cmF0aW9u
LT5zZXRXZWJzaXRlRGF0YVN0b3JlKG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAg
IHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpKTsKICAgICB9CiAKICAgICBSZWZQdHI8
V2ViUHJvY2Vzc1Byb3h5PiBwcm9jZXNzOwpAQCAtMTMyOSw3ICsxMDIzLDcgQEAgUmVmPFdlYlBh
Z2VQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNs
aWVudCwgUmVmPEFQSToKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgaWYgKCFtX3Nl
cnZpY2VXb3JrZXJQcmVmZXJlbmNlcykgewogICAgICAgICBtX3NlcnZpY2VXb3JrZXJQcmVmZXJl
bmNlcyA9IHBhZ2UtPnByZWZlcmVuY2VzU3RvcmUoKTsKLSAgICAgICAgZm9yIChhdXRvJiBzZXJ2
aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtlclByb2Nlc3NlcykKKyAgICAgICAgZm9y
IChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkK
ICAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzLnVwZGF0ZVNlcnZpY2VXb3JrZXJQcmVm
ZXJlbmNlc1N0b3JlKCptX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyk7CiAgICAgfQogICAgIGlm
ICh1c2VyQ29udGVudENvbnRyb2xsZXIpCkBAIC0xMzU2LDcgKzEwNTAsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KGNvbnN0IFN0cmluZyYgdXNl
ckFnZW50KQogICAgIGlmIChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQgPT0gdXNlckFnZW50KQog
ICAgICAgICByZXR1cm47CiAgICAgbV9zZXJ2aWNlV29ya2VyVXNlckFnZW50ID0gdXNlckFnZW50
OwotICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQ
cm9jZXNzZXMpCisgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IHNlcnZpY2VX
b3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3Muc2V0U2Vydmlj
ZVdvcmtlclVzZXJBZ2VudChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQpOwogfQogI2VuZGlmCkBA
IC0xMzY1LDE1ICsxMDU5LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdX
ZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUkKIHsKICAgICBhdXRv
IHJlc3VsdCA9IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5hZGQoZGF0YVN0b3JlLnNlc3Npb25JRCgp
LCBIYXNoU2V0PFdlYlBhZ2VQcm94eUlkZW50aWZpZXI+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQo
cGFnZUlEKTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwot
Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7Ci0gICAgaWYgKHNl
c3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAg
IEFTU0VSVCghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgfHwgZGF0YVN0b3JlLnBhcmFtZXRlcnMo
KS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEID09IHNlc3Npb25JRCk7Ci0gICAg
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5hZGRTZXNzaW9uKG1ha2VSZWYoZGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICBkYXRhU3RvcmUu
Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgfQogfQogCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpwYWdlRW5kVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50
aWZpZXIgcGFnZUlELCBXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpCkBAIC0xNDAxLDcgKzEw
ODYsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNQYWdlc1VzaW5nV2Vic2l0ZURhdGFTdG9y
ZShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNz
UG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveHkq
IGluaXRpYXRpbmdQYWdlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0
cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCiB7CiAgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGNy
ZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCByZXF1ZXN0LCBpbml0aWF0aW5nUGFnZSwgeyB9
KTsKLSAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7
CiAKICAgICBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4gaXNBcHBCb3VuZCA9
IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpObzsKICAgICBpZiAoaW5pdGlhdGluZ1BhZ2Up
IHsKQEAgLTE0MTEsMjYgKzEwOTUsMjMgQEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6
OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3gKICNlbmRp
ZgogICAgIH0KIAotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFJlc291cmNl
UmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgLy8gUmVxdWVzdCdzIGZp
cnN0UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwgb2YgdGhlIGRv
d25sb2FkIHJlcXVlc3QuCi0gICAgICAgIC8vIFdlIHNldCB0aGUgdmFsdWUgdG8gdG9wIGxldmVs
IGRvY3VtZW50J3MgVVJMLgotICAgICAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKLSAgICAgICAg
ICAgIFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGluaXRpYXRpbmdQYWdl
LT5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNl
dEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKLSAgICAgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5p
dGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgICAgIGlmICghdXBkYXRl
ZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQot
ICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlhdGlu
Z1BhZ2UtPnVzZXJBZ2VudEZvclVSTChyZXF1ZXN0LnVybCgpKSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhVUkwo
KSk7Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKLSAg
ICAgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFk
ZXJOYW1lOjpVc2VyQWdlbnQpKQotICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhU
VFBVc2VyQWdlbnQoV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudCgpKTsKLSAgICAgICAg
fQotICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1RvcFNpdGUoZmFsc2UpOwotICAgICAgICBu
ZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RG93bmxvYWRS
ZXF1ZXN0KHNlc3Npb25JRCwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1
ZXN0LCBpc0FwcEJvdW5kLCBzdWdnZXN0ZWRGaWxlbmFtZSksIDApOwotICAgICAgICByZXR1cm4g
ZG93bmxvYWRQcm94eTsKKyAgICBSZXNvdXJjZVJlcXVlc3QgdXBkYXRlZFJlcXVlc3QocmVxdWVz
dCk7CisgICAgLy8gUmVxdWVzdCdzIGZpcnN0UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBh
cyBPcmlnaW5hbCBVUkwgb2YgdGhlIGRvd25sb2FkIHJlcXVlc3QuCisgICAgLy8gV2Ugc2V0IHRo
ZSB2YWx1ZSB0byB0b3AgbGV2ZWwgZG9jdW1lbnQncyBVUkwuCisgICAgaWYgKGluaXRpYXRpbmdQ
YWdlKSB7CisgICAgICAgIFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGlu
aXRpYXRpbmdQYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKKyAgICAgICAgdXBkYXRlZFJl
cXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwpOworICAgICAg
ICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFs
KGluaXRpYXRpbmdQYWdlVVJMLCByZXF1ZXN0LnVybCgpKSk7CisgICAgICAgIGlmICghdXBkYXRl
ZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQor
ICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChpbml0aWF0aW5nUGFn
ZS0+dXNlckFnZW50Rm9yVVJMKHJlcXVlc3QudXJsKCkpKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhVUkwoKSk7CisgICAgICAg
IHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOworICAgICAgICBpZiAoIXVwZGF0
ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkK
KyAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoV2ViUGFnZVByb3h5
OjpzdGFuZGFyZFVzZXJBZ2VudCgpKTsKICAgICB9CisgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNU
b3BTaXRlKGZhbHNlKTsKKyAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6RG93bmxvYWRSZXF1ZXN0KGRhdGFTdG9yZS5zZXNzaW9uSUQo
KSwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0LCBpc0FwcEJvdW5k
LCBzdWdnZXN0ZWRGaWxlbmFtZSksIDApOwogCiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9
CkBAIC0xNDM4LDE3ICsxMTE5LDEyIEBAIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpk
b3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94CiBEb3dubG9h
ZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6cmVzdW1lRG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYg
ZGF0YVN0b3JlLCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBBUEk6OkRhdGEm
IHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBhdXRvJiBkb3dubG9hZFBy
b3h5ID0gY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIFJlc291cmNlUmVxdWVzdCgpLCBp
bml0aWF0aW5nUGFnZSwgeyB9KTsKLSAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBkYXRh
U3RvcmUuc2Vzc2lvbklEKCk7CiAKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZTsKICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQogICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6
UmVhZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIGlmIChuZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxv
YWRJRCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2FuZGJveEV4dGVuc2lv
bkhhbmRsZSksIDApOwotICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKLSAgICB9Ci0KKyAg
ICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6UmVzdW1lRG93bmxvYWQoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBkb3dubG9hZFByb3h5LmRv
d25sb2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRl
bnNpb25IYW5kbGUpLCAwKTsKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KIApAQCAtMTUx
NywxMSArMTE5Myw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZnJlc2hQbHVnaW5zKCkKIAog
I2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogCi1Qcm9jZXNzSUQgV2ViUHJv
Y2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpCi17Ci0gICAgcmV0dXJuIG1fbmV0
d29ya1Byb2Nlc3MgPyBtX25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpIDogMDsK
LX0KLQogUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmll
cigpCiB7CiAgICAgcmV0dXJuIG1fcHJld2FybWVkUHJvY2VzcyA/IG1fcHJld2FybWVkUHJvY2Vz
cy0+cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7CkBAIC0xNTU4LDE0ICsxMjI5LDE4IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUoY29uc3QgU3RyaW5nJiB1
cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lz
dGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMo
TWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1l
KSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRh
U3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0
b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJs
U2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVy
VVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koY29uc3QgU3RyaW5nJiB1
cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lz
dGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKTsK
ICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJM
U2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSk7Ci0gICAg
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3Rl
clVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOwor
ICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVd
IChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdv
cmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2No
ZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSwgMCk7CisgICAg
fSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRk
ZW5Gb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNTc4LDE0ICsxMjUz
LDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbChjb25z
dCBTdHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xl
dG9uKCkucmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxs
UHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwo
dXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7CisgICAgV2Vi
c2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNp
dGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xv
Y2FsKHVybFNjaGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpy
ZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAg
ICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNO
b0FjY2Vzcyh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2Vi
UHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSkpOwotICAgIHNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJV
UkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZv
ckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRh
U3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUp
LCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hl
bWVBc0Rpc3BsYXlJc29sYXRlZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MDYsMTAg
KzEyODUsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFz
SGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25zdAogICAgICAgICByZXR1cm47CiAKICAg
ICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5hZGQodXJsU2No
ZW1lKTsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVGb3JM
ZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwotICAgIH0KKyAgICBmb3IgKGF1dG8gbmV0
d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkp
CisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVBy
b3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJH
bG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QgU3RyaW5n
JiB1cmxTY2hlbWUpCkBAIC0xNjE4LDEwICsxMjk1LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
dW5yZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhj
b24KICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90
b2NvbEhhbmRsZXJzKCkucmVtb3ZlKHVybFNjaGVtZSk7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNz
UG9vbCA6IGFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hl
bWUpOwotICAgIH0KKyAgICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51
bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQo
Y29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNjU1LDE2ICsxMzMwLDE4IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogCiAgICAg
c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNh
Y2hlTW9kZWwpKTsKIAotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChj
YWNoZU1vZGVsKSwgMCk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRh
U3RvcmUoW2NhY2hlTW9kZWxdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAg
ICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoQ2FjaGVN
b2RlbCBjYWNoZU1vZGVsKQogewogICAgIHVwZGF0ZUJhY2tGb3J3YXJkQ2FjaGVDYXBhY2l0eSgp
OwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNocm9u
b3VzbHlGb3JUZXN0aW5nKGNhY2hlTW9kZWwpLCB7IH0sIHsgfSk7CisgICAgV2Vic2l0ZURhdGFT
dG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW2NhY2hlTW9kZWxdIChXZWJzaXRlRGF0YVN0
b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNs
eUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKGRvdWJsZSB0aW1l
b3V0SW50ZXJ2YWwpCkBAIC0xNjc0LDEyICsxMzUxLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkK
IAogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vi
c2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlLCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFt
ZUluZm8pCiB7Ci0gICAgcmV0dXJuIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCZkYXRhU3RvcmUpLmNy
ZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCByZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0
aW5nUGFnZSk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tn
cm91bmQoYm9vbCBiYWNrZ3JvdW5kKQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc3lu
dGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKKyAgICByZXR1cm4gZGF0YVN0b3Jl
Lm5ldHdvcmtQcm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsICp0aGlzLCBy
ZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmFkZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlJlY2VpdmVyTmFtZSBtZXNzYWdlUmVjZWl2
ZXJOYW1lLCBJUEM6Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQpAQCAtMTc1MCwz
MCArMTQyMiw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN0b3BNZW1vcnlTYW1wbGVyKCkKICAg
ICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlN0b3BNZW1vcnlTYW1w
bGVyKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBVJiYg
cmVwbHkpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+
Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoc3Rk
Ojpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCBzdGQ6OmZvcndhcmQ8VT4ocmVwbHkpLCAwKTsKLX0KLQot
dm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyhjb25zdCBQQUw6OlNl
c3Npb25JRCYgc2Vzc2lvbklEKQotewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJD
YWNoZWRDcmVkZW50aWFscyhzZXNzaW9uSUQpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9v
bDo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQotewotICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3Jr
ZXJzKCk7Ci0KLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBtX25ldHdvcmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsKLSAgICBtX25ldHdvcmtQcm9j
ZXNzID0gbnVsbHB0cjsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlQWxsV2Vi
Q29udGVudFByb2Nlc3NlcygpCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+
PiBwcm9jZXNzZXMgPSBtX3Byb2Nlc3NlczsKQEAgLTE3ODEsNDAgKzE0MjksMTUgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlQWxsV2ViQ29udGVudFByb2Nlc3NlcygpCiAgICAgICAg
IHByb2Nlc3MtPnRlcm1pbmF0ZSgpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0
d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNz
KQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoKTsKLQotICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmRQcmVwYXJlVG9TdXNwZW5kKElzU3VzcGVuc2lvbkltbWluZW50OjpObywgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCkKLXsKLSAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nl
c3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpCi17Ci0gICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzRGlkUmVzdW1l
KCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCkK
IHsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyk7Ci0gICAgd2hpbGUgKG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb21w
dXRlU2l6ZSgpKQotICAgICAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYmVnaW4oKS0+ZGlz
YWJsZVNlcnZpY2VXb3JrZXJzKCk7CisgICAgd2hpbGUgKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMo
KS5jb21wdXRlU2l6ZSgpKQorICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuYmVnaW4o
KS0+ZGlzYWJsZVNlcnZpY2VXb3JrZXJzKCk7CiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQcm9jZXNz
UG9vbDo6Zmx1c2hDb29raWVzKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBlbnN1cmVO
ZXR3b3JrUHJvY2VzcygpLmZsdXNoQ29va2llcyhzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlQXV0b21hdGlvbkNh
cGFiaWxpdGllcygpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCkBAIC0y
MDg5LDE1ICsxNzEyLDIxIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlcG9ydFdlYkNvbnRlbnRD
UFVUaW1lKFNlY29uZHMgY3B1VGltZSwgdWludDY0X3QgYWN0aXZpdHlTCiAjZW5kaWYKIH0KIAor
V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiYgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3Jr
ZXJQcm9jZXNzZXMoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWFrSGFzaFNldDxX
ZWJQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXM7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKwog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbnMoKQogewotICAgIGVu
c3VyZU5ldHdvcmtQcm9jZXNzKCkudXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOworICAgIFdlYnNp
dGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtdIChXZWJzaXRlRGF0YVN0b3Jl
JiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkudXBkYXRl
UHJvY2Vzc0Fzc2VydGlvbigpOworICAgIH0pOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
ICAgICAvLyBDaGVjayBvbiBuZXh0IHJ1biBsb29wIHNpbmNlIHRoZSB3ZWIgcHJvY2VzcyBwcm94
eSB0b2tlbnMgYXJlIHByb2JhYmx5IGJlaW5nIHVwZGF0ZWQuCi0gICAgY2FsbE9uTWFpblJ1bkxv
b3AoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyldIHsKLSAgICAgICAgaWYgKCF3
ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNl
V29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtlclByb2Nlc3NlcykKKyAgICBjYWxsT25NYWlu
UnVuTG9vcChbXSB7CisgICAgICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBz
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
cy51cGRhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzc0Fzc2VydGlvbigpOwogICAgIH0pOwogI2VuZGlm
CkBAIC0yMTA3LDcgKzE3MzYsNyBAQCBib29sIFdlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3Jr
ZXJQYWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQpIGNvbnN0CiB7CiAjaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluZWZmaWNpZW50Lgot
ICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW3BhZ2VJRF0o
YXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoKSwgW3BhZ2VJRF0oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vz
cy5oYXNTZXJ2aWNlV29ya2VyUGFnZVByb3h5KHBhZ2VJRCk7CiAgICAgfSk7CiAjZW5kaWYKQEAg
LTIzMjksMTQgKzE5NTgsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckN1cnJlbnRNb2Rp
ZmllclN0YXRlRm9yVGVzdGluZygpCiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhE
YXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgZnJvbURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvRG9tYWluLCBPcHRp
b25TZXQ8Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6RmxhZz4gbmF2aWdhdGlvbkRh
dGFUcmFuc2ZlciwgV2ViUGFnZVByb3h5SWRlbnRpZmllciB3ZWJQYWdlUHJveHlJRCwgUGFnZUlk
ZW50aWZpZXIgd2ViUGFnZUlEKQotewotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9h
ZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9tYWluLCB0b0RvbWFpbiwgbmF2aWdh
dGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJRCk7Ci19Ci0KIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsKICAgICBzZW5kVG9BbGxQcm9j
ZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9u
KGRvbWFpbnMpKTsKQEAgLTIzODcsMjcgKzIwMDgsMjcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
dXBkYXRlQXVkaWJsZU1lZGlhQXNzZXJ0aW9ucygpCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
dFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzKQogewotICAgIGlmIChtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MgPT0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKKyAgICBpZiAoc191c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID09IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKFNl
cnZpY2VXb3JrZXIsICJzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOiAodXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcz0lZCkiLCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzKTsKKyAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19TVEFUSUMoU2VydmljZVdv
cmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6ICh1c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mp
OwogCi0gICAgbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzczsKLSAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwotICAg
IHRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgc191c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzID0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsKKyAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAg
ICAgICBwcm9jZXNzUG9vbC0+dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIH0KIAogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3Jr
ZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RG
OjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsKKyAg
ICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8mIHBy
b2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckZvcmVncm91
bmRBY3Rpdml0eUZvclRlc3RpbmcoKTsKICAgICB9KTsKIH0KIAogYm9vbCBXZWJQcm9jZXNzUG9v
bDo6aGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdAog
ewotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10oYXV0
byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMoKSwgW10oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2
aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5kZXggOTkwNmI3ZDE5YjQ1ZGM1
YWQ3MzcwNmZiOWE0Nzc1ODFjN2Y4ZDU2MS4uNjY4YzFlNmQ4ZDk0ZWE5N2I1YjZhZTAxMGI3OTI4
NWJjZTk4NTE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCkBA
IC03Nyw3ICs3Nyw2IEBAIE9CSkNfQ0xBU1MgV0tQcmVmZXJlbmNlT2JzZXJ2ZXI7CiAKIG5hbWVz
cGFjZSBBUEkgewogY2xhc3MgQXV0b21hdGlvbkNsaWVudDsKLWNsYXNzIEN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudDsKIGNsYXNzIERvd25sb2FkQ2xpZW50OwogY2xhc3MgSFRUUENvb2tpZVN0
b3JlOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGVDbGllbnQ7CkBAIC0xNzYsNyArMTc1LDYgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0SGlzdG9yeUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdh
Y3lDb250ZXh0SGlzdG9yeUNsaWVudD4mJik7CiAgICAgdm9pZCBzZXREb3dubG9hZENsaWVudChV
bmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4mJik7CiAgICAgdm9pZCBzZXRBdXRvbWF0aW9u
Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JiYpOwotICAgIHZv
aWQgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxB
UEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJik7CiAKICAgICB2b2lkIHNldEN1c3Rv
bVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKICAgICBj
b25zdCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpIHsg
cmV0dXJuIG1fY29uZmlndXJhdGlvbi0+Y3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVu
dGlmaWVyKCk7IH0KQEAgLTE4NywxNyArMTg1LDkgQEAgcHVibGljOgogICAgIC8vIG51bGwgY2hl
Y2tzIGluIFdlYlBhZ2VQcm94eS4KICAgICBXZWJQcm9jZXNzUHJveHkqIGR1bW15UHJvY2Vzc1By
b3h5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QgeyByZXR1cm4gbV9kdW1teVByb2Nl
c3NQcm94aWVzLmdldChzZXNzaW9uSUQpLmdldCgpOyB9CiAKLSAgICAvLyBXZWJQcm9jZXNzIG9y
IE5ldHdvcmtQcm9jZXNzIGFzIGFwcHJvcG9yaWF0ZSBmb3IgY3VycmVudCBwcm9jZXNzIG1vZGVs
LiBUaGUgY29ubmVjdGlvbiBtdXN0IGJlIG5vbi1udWxsLgotICAgIElQQzo6Q29ubmVjdGlvbiog
bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCk7Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNzYWdlKTsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oY29uc3QgVCYg
bWVzc2FnZSwgUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gU2VuZHMgdGhlIG1lc3NhZ2UgdG8g
V2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2VzcyBhcyBhcHByb3BvcmlhdGUgZm9yIGN1cnJlbnQg
cHJvY2VzcyBtb2RlbC4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiB2b2lkIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYm
IHJlcGx5KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdvcmtpbmdQ
cm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSk7Ci0KICAgICB2b2lkIHBy
b2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKICAgICBXZWJQcm9j
ZXNzQ2FjaGUmIHdlYlByb2Nlc3NDYWNoZSgpIHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0NhY2hlLmdl
dCgpOyB9CkBAIC0yMDUsOSArMTk1LDYgQEAgcHVibGljOgogICAgIC8vIERpc2Nvbm5lY3QgdGhl
IHByb2Nlc3MgZnJvbSB0aGUgY29udGV4dC4KICAgICB2b2lkIGRpc2Nvbm5lY3RQcm9jZXNzKFdl
YlByb2Nlc3NQcm94eSopOwogCi0gICAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlKiB3ZWJzaXRl
RGF0YVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9Ci0g
ICAgdm9pZCBzZXRQcmltYXJ5RGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgZGF0
YVN0b3JlKSB7IG1fd2Vic2l0ZURhdGFTdG9yZSA9ICZkYXRhU3RvcmU7IH0KLQogICAgIFJlZjxX
ZWJQYWdlUHJveHk+IGNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYsIFJlZjxBUEk6OlBhZ2VDb25m
aWd1cmF0aW9uPiYmKTsKIAogICAgIHZvaWQgcGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3Jl
KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYnNpdGVEYXRhU3RvcmUmKTsKQEAgLTI1OCwxMCAr
MjQ1LDggQEAgcHVibGljOgogICAgIHZvaWQgYWRkU3VwcG9ydGVkUGx1Z2luKFN0cmluZyYmIG1h
dGNoaW5nRG9tYWluLCBTdHJpbmcmJiBuYW1lLCBIYXNoU2V0PFN0cmluZz4mJiBtaW1lVHlwZXMs
IEhhc2hTZXQ8U3RyaW5nPiBleHRlbnNpb25zKTsKICAgICB2b2lkIGNsZWFyU3VwcG9ydGVkUGx1
Z2lucygpOwogCi0gICAgUHJvY2Vzc0lEIG5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpOwogICAg
IFByb2Nlc3NJRCBwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcigpOwogICAgIHZvaWQgYWN0aXZl
UGFnZXNPcmlnaW5zSW5XZWJQcm9jZXNzRm9yVGVzdGluZyhQcm9jZXNzSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYpOwotICAgIGJvb2wgbmV0d29ya1Byb2Nl
c3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CiAKICAgICBXZWJQYWdl
R3JvdXAmIGRlZmF1bHRQYWdlR3JvdXAoKSB7IHJldHVybiBtX2RlZmF1bHRQYWdlR3JvdXAuZ2V0
KCk7IH0KIApAQCAtMzAyLDggKzI4Nyw2IEBAIHB1YmxpYzoKICAgICBBUEk6OkxlZ2FjeUNvbnRl
eHRIaXN0b3J5Q2xpZW50JiBoaXN0b3J5Q2xpZW50KCkgeyByZXR1cm4gKm1faGlzdG9yeUNsaWVu
dDsgfQogICAgIFdlYkNvbnRleHRDbGllbnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9
CiAKLSAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gKm1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50OyB9Ci0KICAgICBzdHJ1Y3QgU3RhdGlzdGljcyB7CiAgICAgICAgIHVuc2lnbmVkIHdrVmll
d0NvdW50OwogICAgICAgICB1bnNpZ25lZCB3a1BhZ2VDb3VudDsKQEAgLTMxOSwxMiArMzAyLDgg
QEAgcHVibGljOgogICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7CiAgICAg
dm9pZCB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogCi0gICAgdm9pZCBmbHVzaENvb2tpZXMo
Y29uc3QgUEFMOjpTZXNzaW9uSUQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCiAg
ICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhi
b29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmcgPSB2YWx1ZTsgfQogICAgIGJvb2wgc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFp
bEZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nOyB9Ci0gICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQ
cm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0
TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9Ci0gICAgYm9vbCBz
aG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSBjb25zdCB7
IHJldHVybiBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGlu
ZzsgfQogCiAgICAgdm9pZCByZXBvcnRXZWJDb250ZW50Q1BVVGltZShTZWNvbmRzIGNwdVRpbWUs
IHVpbnQ2NF90IGFjdGl2aXR5U3RhdGUpOwogCkBAIC0zODMsMTkgKzM2MiwxMyBAQCBwdWJsaWM6
CiAjZW5kaWYKIAogICAgIC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50Ci0gICAgTmV0d29y
a1Byb2Nlc3NQcm94eSYgZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0
aFdlYnNpdGVEYXRhU3RvcmUgPSBudWxscHRyKTsKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5KiBu
ZXR3b3JrUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCk7IH0K
ICAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAK
LSAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBN
ZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxh
eWVkUmVwbHkmJik7Ci0KICAgICBib29sIGlzU2VydmljZVdvcmtlclBhZ2VJRChXZWJQYWdlUHJv
eHlJZGVudGlmaWVyKSBjb25zdDsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgdm9p
ZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29y
a1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vzc2lv
bklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHN0YXRpYyB2b2lkIGVzdGFi
bGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vz
c1Byb3h5JiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNzaW9uSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCByZW1vdmVGcm9tU2VydmljZVdv
cmtlclByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkmKTsKLSAgICBzaXplX3Qgc2VydmljZVdvcmtl
clByb3hpZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5j
b21wdXRlU2l6ZSgpOyB9Ci0gICAgdm9pZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNl
cnZpY2VXb3JrZXIoYm9vbCBhbGxvd3MpIHsgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNl
cnZpY2VXb3JrZXIgPSBhbGxvd3M7IH0KLSAgICBib29sIGFsbG93c0FueVNTTENlcnRpZmljYXRl
Rm9yU2VydmljZVdvcmtlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JTZXJ2aWNlV29ya2VyOyB9CisgICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291
bnQoKSBjb25zdCB7IHJldHVybiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNpemUo
KTsgfQogICAgIHZvaWQgdXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25zdCBTdHJpbmcm
IHVzZXJBZ2VudCk7CiAgICAgY29uc3QgT3B0aW9uYWw8VXNlckNvbnRlbnRDb250cm9sbGVySWRl
bnRpZmllcj4mIHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2Vy
cygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNlV29y
a2VyOyB9CiAgICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVz
dGluZygpIGNvbnN0OwpAQCAtNDQ5LDggKzQyMiw2IEBAIHB1YmxpYzoKICAgICBib29sIGFsd2F5
c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx3YXlzUnVuc0F0
QmFja2dyb3VuZFByaW9yaXR5OyB9CiAgICAgYm9vbCBzaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNz
ZXJ0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9u
OyB9CiAKLSAgICB2b2lkIHN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5k
KTsKLSAgICAKICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICB2b2lkIGdhbWVwYWRDb25uZWN0ZWQo
Y29uc3QgVUlHYW1lcGFkJiwgV2ViQ29yZTo6RXZlbnRNYWtlc0dhbWVwYWRzVmlzaWJsZSk7CiAg
ICAgdm9pZCBnYW1lcGFkRGlzY29ubmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYpOwpAQCAtNDg4LDcg
KzQ1OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JU
ZXN0aW5nKCk7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIHZv
aWQgZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQs
IGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21haW4sIE9wdGlvblNldDxXZWJDb3JlOjpDcm9z
c1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiwgV2ViUGFnZVByb3h5SWRlbnRpZmll
ciwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIpOwogICAgIHZvaWQgc2V0RG9tYWluc1dpdGhVc2Vy
SW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJik7CiAgICAg
dm9pZCBzZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRlc3RpbmcoY29uc3QgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4mIGZpcnN0UGFydHlEb21haW4sIGNvbnN0IFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluJiB0aGlyZFBhcnR5RG9tYWluLCBib29sIHNob3VsZFNjaGVkdWxlTm90aWZp
Y2F0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgc2VuZFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKQEAgLTUxNSw4ICs0ODUsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgUGx1Z0luQXV0b1N0
YXJ0UHJvdmlkZXImIHBsdWdJbkF1dG9TdGFydFByb3ZpZGVyKCkgeyByZXR1cm4gbV9wbHVnSW5B
dXRvU3RhcnRQcm92aWRlcjsgfQogCi0gICAgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzKGJvb2wpOwotICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQor
ICAgIHN0YXRpYyB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCk7
CisgICAgc3RhdGljIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIHsgcmV0
dXJuIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQogCiAjaWYgRU5BQkxFKENG
UFJFRlNfRElSRUNUX01PREUpCiAgICAgdm9pZCBub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQoY29u
c3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBPcHRpb25hbDxTdHJp
bmc+JiBlbmNvZGVkVmFsdWUpOwpAQCAtNTI4LDkgKzQ5OCwxNSBAQCBwdWJsaWM6CiAgICAgaW50
MzJfdCB1c2VySWQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJJZDsgfQogI2VuZGlmCiAKLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICBPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IHhwY0VuZHBvaW50
TWVzc2FnZSgpIGNvbnN0OwotICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRU
b1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRwb2ludE1lc3NhZ2UpOwor
ICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHVy
bFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAg
ICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJp
bmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29u
dGVudENhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9y
YXJ5RGlyZWN0b3J5KCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTU0Niw4ICs1MjIsNiBAQCBw
cml2YXRlOgogICAgIFdlYlByb2Nlc3NQcm94eSYgY3JlYXRlTmV3V2ViUHJvY2VzcyhXZWJzaXRl
RGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94
eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKICAgICB2b2lkIGluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdl
YlByb2Nlc3NQcm94eSYsIFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9jZXNzUHJveHk6OklzUHJl
d2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8pOwogCi0gICAgdm9pZCBw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycyYpOwotCiAgICAgdm9pZCBoYW5kbGVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSk7CiAg
ICAgdm9pZCBoYW5kbGVTeW5jaHJvbm91c01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFVzZXJEYXRhJiYpPiYmKTsKIApAQCAtNTcxLDE0ICs1NDUsNiBAQCBw
cml2YXRlOgogCiAgICAgYm9vbCB1c2VzU2luZ2xlV2ViUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJu
IG1fY29uZmlndXJhdGlvbi0+dXNlc1NpbmdsZVdlYlByb2Nlc3MoKTsgfQogCi0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnko
KTsKLSAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIHN0YXRp
YyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcg
d2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVy
VGVtcG9yYXJ5RGlyZWN0b3J5KCk7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAg
IHZvaWQgcmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKICAgICB2b2lkIHVucmVnaXN0
ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKQEAgLTYyMCw5ICs1ODYsOCBAQCBwcml2YXRlOgog
ICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYWtQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4gbV9k
dW1teVByb2Nlc3NQcm94aWVzOyAvLyBMaWdodHdlaWdodCBXZWJQcm9jZXNzUHJveHkgb2JqZWN0
cyB3aXRob3V0IGJhY2tpbmcgcHJvY2Vzcy4KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
LSAgICBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+IG1fc2VydmljZVdvcmtlclByb2Nlc3Nl
czsKKyAgICBzdGF0aWMgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiYgc2VydmljZVdvcmtl
clByb2Nlc3NlcygpOwogICAgIGJvb2wgbV93YWl0aW5nRm9yV29ya2VyQ29udGV4dFByb2Nlc3ND
b25uZWN0aW9uIHsgZmFsc2UgfTsKLSAgICBib29sIG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVG
b3JTZXJ2aWNlV29ya2VyIHsgZmFsc2UgfTsKICAgICBTdHJpbmcgbV9zZXJ2aWNlV29ya2VyVXNl
ckFnZW50OwogICAgIE9wdGlvbmFsPFdlYlByZWZlcmVuY2VzU3RvcmU+IG1fc2VydmljZVdvcmtl
clByZWZlcmVuY2VzOwogICAgIE9wdGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZp
ZXI+IG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNlV29ya2VyOwpAQCAtNjM4LDcg
KzYwMyw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNs
aWVudD4gbV9hdXRvbWF0aW9uQ2xpZW50OwogICAgIFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xp
ZW50PiBtX2Rvd25sb2FkQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNv
bnRleHRIaXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudDsKIAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9uU2Vzc2lvbj4gbV9hdXRvbWF0aW9u
U2Vzc2lvbjsKIApAQCAtNjcwLDggKzYzNCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21lbW9y
eVNhbXBsZXJFbmFibGVkIHsgZmFsc2UgfTsKICAgICBkb3VibGUgbV9tZW1vcnlTYW1wbGVySW50
ZXJ2YWwgeyAxNDAwLjAgfTsKIAotICAgIFJlZlB0cjxXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU+
IG1fd2Vic2l0ZURhdGFTdG9yZTsKLQogICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBjaGFyKiwg
UmVmUHRyPFdlYkNvbnRleHRTdXBwbGVtZW50PiwgUHRySGFzaDxjb25zdCBjaGFyKj4+IFdlYkNv
bnRleHRTdXBwbGVtZW50TWFwOwogICAgIFdlYkNvbnRleHRTdXBwbGVtZW50TWFwIG1fc3VwcGxl
bWVudHM7CiAKQEAgLTcwMyw4ICs2NjUsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3Byb2Nl
c3NUZXJtaW5hdGlvbkVuYWJsZWQgeyB0cnVlIH07CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0
d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKLQogICAgIEhhc2hNYXA8dWludDY0
X3QsIFJlZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+PiBtX2RpY3Rpb25hcnlDYWxsYmFja3M7CiAK
ICAgICBib29sIG1fbWVtb3J5Q2FjaGVEaXNhYmxlZCB7IGZhbHNlIH07CkBAIC03MTMsNyArNjcz
LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5
OwogICAgIGJvb2wgbV9zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uOwogICAgIGJvb2wg
bV9zaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyB7IGZhbHNlIH07
Ci0gICAgYm9vbCBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3RjY1ByZWZlcmVuY2VFbmFibGVkIHsgZmFsc2Ug
fTsKIAogICAgIFVzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIgbV91c2VyT2JzZXJ2YWJsZVBhZ2VD
b3VudGVyOwpAQCAtODA1LDMxICs3NjQsMTMgQEAgcHJpdmF0ZToKICNlbHNlCiAgICAgYm9vbCBt
X2lzRGVsYXllZFdlYlByb2Nlc3NMYXVuY2hEaXNhYmxlZCB7IGZhbHNlIH07CiAjZW5kaWYKLSAg
ICBib29sIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyB7IGZhbHNlIH07CisgICAg
c3RhdGljIGJvb2wgc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwogCiAjaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluPiBtX2RvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uOwogI2VuZGlmCi0KLSNp
ZiBQTEFURk9STShDT0NPQSkKLSAgICBPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IG1fZW5kcG9p
bnRNZXNzYWdlOwotI2VuZGlmCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpCi17Ci0gICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2Uo
KSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2Fn
ZSksIDApOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdl
KQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+
c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1l
c3NhZ2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApp
bmRleCBkNjYxMDMzOGI2Y2Y2MGEyN2E2Zjc1ZGFlYzM0OWE4ZjcyYWIzYjg1Li41ZTJjNzA4ZjIy
Zjk3YmVhZjM3MDkzNTJjYjY5ZTNkNGMyOGUxZDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTI2OCw2ICsyNjgsOSBAQCB2b2lkIFdlYlByb2Nl
c3NQcm94eTo6c2V0V2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUp
CiB7CiAgICAgQVNTRVJUKCFtX3dlYnNpdGVEYXRhU3RvcmUpOwogICAgIG1fd2Vic2l0ZURhdGFT
dG9yZSA9ICZkYXRhU3RvcmU7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgZGF0YVN0b3JlLnNl
bmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKCp0aGlzKTsKKyNlbmRpZgog
ICAgIHVwZGF0ZVJlZ2lzdHJhdGlvbldpdGhEYXRhU3RvcmUoKTsKICAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpTZXRXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyhwcm9jZXNzUG9vbCgp
LndlYlByb2Nlc3NEYXRhU3RvcmVQYXJhbWV0ZXJzKCp0aGlzLCBkYXRhU3RvcmUpKSwgMCk7CiB9
CkBAIC03MzgsNyArNzQxLDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldFBsdWdpblByb2Nl
c3NDb25uZWN0aW9uKHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbiwgTWUKIAogdm9pZCBXZWJQ
cm9jZXNzUHJveHk6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihNZXNzYWdlczo6V2ViUHJv
Y2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYmIHJl
cGx5KQogewotICAgIG1fcHJvY2Vzc1Bvb2wtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigq
dGhpcywgV1RGTW92ZShyZXBseSkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5nZXROZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24oKnRoaXMsIFdURk1vdmUocmVwbHkpKTsKIH0KIAogI2lmIEVOQUJM
RShHUFVfUFJPQ0VTUykKQEAgLTk1NSw5ICs5NTgsOCBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6
ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hlciogbGF1bmNoZXIsIElQQzo6Q29ubmVj
dAogICAgIH0KIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGF1dG8gZW5kcG9pbnRNZXNzYWdl
ID0gcHJvY2Vzc1Bvb2woKS54cGNFbmRwb2ludE1lc3NhZ2UoKTsKLSAgICBpZiAoZW5kcG9pbnRN
ZXNzYWdlKQotICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbigp
LT54cGNDb25uZWN0aW9uKCksIGVuZHBvaW50TWVzc2FnZS5nZXQoKSk7CisgICAgaWYgKG1fd2Vi
c2l0ZURhdGFTdG9yZSkKKyAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0d29ya1By
b2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcygqdGhpcyk7CiAjZW5kaWYKIAogICAgIFJFTEVB
U0VfQVNTRVJUKCFtX3dlYkNvbm5lY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNv
Y29hLm1tCmluZGV4IDdjNDQwODUxNjc3MzY4YjVkZjg5YTg2ZmY0ZDNiNTE1MzRiOTBiYjcuLmNi
OGIzYmFhNGFkMGI1NjgxNTUxNWMwNWUxODEzNmIzMjRmM2EyZmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJz
aXRlRGF0YVN0b3JlQ29jb2EubW0KQEAgLTI4LDEwICsyOCwxMiBAQAogCiAjaW1wb3J0ICJDb29r
aWVTdG9yYWdlVXRpbHNDRi5oIgogI2ltcG9ydCAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIK
KyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIlNhbmRib3hVdGlsaXRp
ZXMuaCIKICNpbXBvcnQgIlN0b3JhZ2VNYW5hZ2VyLmgiCiAjaW1wb3J0ICJXZWJGcmFtZVBvbGlj
eUxpc3RlbmVyUHJveHkuaCIKICNpbXBvcnQgIldlYlByZWZlcmVuY2VzS2V5cy5oIgorI2ltcG9y
dCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0ICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuaCIKICNpbXBvcnQgIldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgiCiAjaW1wb3J0
IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgpAQCAtNDQsNiArNDYsNyBAQAogI2lt
cG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVn
ZS5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgorI2ltcG9ydCA8d3RmL2NvY29hL0VudGl0bGVtZW50
cy5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKQEAgLTU2Miw0ICs1NjUsMjggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZWluaXRpYWxpemVBcHBCb3VuZERvbWFpbnMoKQogfQogI2VuZGlmCiAKK2Jvb2wgV2Vic2l0ZURh
dGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3Ry
aW5nJiBlbnRpdGxlbWVudCkKK3sKKyAgICByZXR1cm4gV1RGOjpoYXNFbnRpdGxlbWVudChuZXR3
b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbnRpdGxlbWVudC51
dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1By
b2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCit7
CisgICAgaWYgKHByb2Nlc3Muc3RhdGUoKSAhPSBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OlN0YXRl
OjpSdW5uaW5nKQorICAgICAgICByZXR1cm47CisgICAgYXV0byogY29ubmVjdGlvbiA9IHByb2Nl
c3MuY29ubmVjdGlvbigpOworICAgIGlmICghY29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuOwor
ICAgIGF1dG8gbWVzc2FnZSA9IG5ldHdvcmtQcm9jZXNzKCkueHBjRW5kcG9pbnRNZXNzYWdlKCk7
CisgICAgaWYgKCFtZXNzYWdlKQorICAgICAgICByZXR1cm47CisgICAgeHBjX2Nvbm5lY3Rpb25f
c2VuZF9tZXNzYWdlKGNvbm5lY3Rpb24tPnhwY0Nvbm5lY3Rpb24oKSwgbWVzc2FnZSk7Cit9CisK
K3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb0Fs
bFdlYlByb2Nlc3NlcygpCit7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMp
CisgICAgICAgIHNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKHByb2Nl
c3MpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IDA4MzBjYTc1YTdmYzM4ZTY0NWI3NzVi
MzliMzM3NWQ0YzIwNTAzN2QuLjgwNzBmNTc2OTAzMTNkNjM0Yzk3MjQwNzhhZWM3NzUxZmNmMzA5
NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRh
L1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0zMiwxMSArMzIsMTQgQEAKICNpbmNsdWRlICJBdXRo
ZW50aWNhdG9yTWFuYWdlci5oIgogI2luY2x1ZGUgIkRldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgi
CiAjaW5jbHVkZSAiR1BVUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIk1vY2tBdXRoZW50aWNhdG9yTWFuYWdlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbkluZm8uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3Rv
cmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkQ2FjaGUuaCIKKyNp
bmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXQySW5pdGlh
bGl6ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3ND
YWNoZS5oIgpAQCAtNzUsNiArNzgsMTAgQEAKICNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25Db29y
ZGluYXRvci5oIgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJEZWZh
dWx0V2ViQnJvd3NlckNoZWNrcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBz
dGF0aWMgYm9vbCBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zOwpAQCAtODMs
MTMgKzkwLDE5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dXZWJzaXRlRGF0YVJlY29y
ZHNGb3JBbGxPcmlnaW5zKCkKICAgICBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmln
aW5zID0gdHJ1ZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVE
YXRhU3RvcmUqPiYgbm9uRGVmYXVsdERhdGFTdG9yZXMoKQorc3RhdGljIEhhc2hNYXA8UEFMOjpT
ZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgYWxsRGF0YVN0b3JlcygpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFz
aE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+PiBtYXA7CiAgICAgcmV0dXJu
IG1hcDsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9y
ZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRhU3RvcmUmKT4mJiBmdW5jdGlvbikKK3sKKyAgICBm
b3IgKGF1dG8qIGRhdGFTdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICAgICAg
ZnVuY3Rpb24oKmRhdGFTdG9yZSk7Cit9CisKIFJlZjxXZWJzaXRlRGF0YVN0b3JlPiBXZWJzaXRl
RGF0YVN0b3JlOjpjcmVhdGVOb25QZXJzaXN0ZW50KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVh
dGUoSXNQZXJzaXN0ZW50OjpObyksIFBBTDo6U2Vzc2lvbklEOjpnZW5lcmF0ZUVwaGVtZXJhbFNl
c3Npb25JRCgpKSk7CkBAIC0xMTUsNyArMTI4LDcgQEAgV2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0
ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYgY29uZmlndXIK
ICNlbmRpZgogewogICAgIFdURjo6c2V0UHJvY2Vzc1ByaXZpbGVnZXMoYWxsUHJpdmlsZWdlcygp
KTsKLSAgICBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOworICAgIHJlZ2lzdGVyV2l0
aFNlc3Npb25JRE1hcCgpOwogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTEyOCwxNyArMTQxLDEyIEBAIFdlYnNpdGVEYXRhU3Rv
cmU6On5XZWJzaXRlRGF0YVN0b3JlKCkKIAogICAgIHBsYXRmb3JtRGVzdHJveSgpOwogCi0gICAg
aWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsK
LSAgICAgICAgQVNTRVJUKG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9
PSB0aGlzKTsKLSAgICAgICAgbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9u
SUQpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFs
bFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICBuZXR3b3Jr
UHJvY2Vzcy0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAgICAgIH0KLSAgICB9Cisg
ICAgQVNTRVJUKGFsbERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOworICAg
IGFsbERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOworICAgIG5ldHdvcmtQcm9jZXNz
KCkucmVtb3ZlU2Vzc2lvbigqdGhpcyk7CiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQotICAgICAg
ICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25J
ZkNyZWF0ZWQoKSkKLSAgICAgICAgICAgIGdwdVByb2Nlc3NQcm94eS0+cmVtb3ZlU2Vzc2lvbiht
X3Nlc3Npb25JRCk7CisgICAgaWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94eSA9IEdQVVByb2Nlc3NQ
cm94eTo6c2luZ2xldG9uSWZDcmVhdGVkKCkpCisgICAgICAgIGdwdVByb2Nlc3NQcm94eS0+cmVt
b3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAjZW5kaWYKIH0KIApAQCAtMTUxLDcgKzE1OSw2IEBA
IHN0YXRpYyBSZWZQdHI8V2Vic2l0ZURhdGFTdG9yZT4mIGdsb2JhbERlZmF1bHREYXRhU3RvcmUo
KQogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3Rv
cmUoKQogewogICAgIEluaXRpYWxpemVXZWJLaXQyKCk7Ci0KICAgICBhdXRvJiBzdG9yZSA9IGds
b2JhbERlZmF1bHREYXRhU3RvcmUoKTsKICAgICBpZiAoIXN0b3JlKQogICAgICAgICBzdG9yZSA9
IGFkb3B0UmVmKG5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpZZXMpLCBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKSk7CkBAIC0xNjksMTcgKzE3Niw0NyBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKQogICAgIHJldHVybiAhIWdsb2JhbERlZmF1bHREYXRh
U3RvcmUoKTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNl
c3Npb25JRE1hcCgpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyV2l0aFNlc3Npb25J
RE1hcCgpCiB7Ci0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBub25EZWZhdWx0RGF0YVN0b3Jl
cygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0
LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0byByZXN1bHQgPSBhbGxEYXRhU3RvcmVzKCku
YWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0
LmlzTmV3RW50cnkpOworfQorCitXZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpl
eGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7
CisgICAgcmV0dXJuIGFsbERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklEKTsKK30KKworc3RhdGlj
IFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBuZXR3b3JrUHJvY2Vzc0ZvclNlc3Npb24oUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEKQoreworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BF
KQorICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgeworICAgICAgICAvLyBSZXVzZSBh
IHByZXZpb3VzIHBlcnNpc3RlbnQgc2Vzc2lvbiBuZXR3b3JrIHByb2Nlc3MgZm9yIGVwaGVtZXJh
bCBzZXNzaW9ucy4KKyAgICAgICAgZm9yIChhdXRvKiBkYXRhU3RvcmUgOiBhbGxEYXRhU3RvcmVz
KCkudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGlmIChkYXRhU3RvcmUtPmlzUGVyc2lzdGVudCgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlUmVmKGRhdGFTdG9yZS0+bmV0d29ya1Byb2Nl
c3MoKSk7CisgICAgICAgIH0KICAgICB9CisgICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmNyZWF0ZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vzc2lvbklEKTsKKyAgICByZXR1
cm4gTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7CisjZW5kaWYK
IH0KIAotV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZh
dWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK05ldHdv
cmtQcm9jZXNzUHJveHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzKCkKIHsKLSAg
ICByZXR1cm4gc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkg
PyBub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0cjsKKyAgICBp
ZiAoIW1fbmV0d29ya1Byb2Nlc3MpIHsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2VzcyA9IG5ldHdv
cmtQcm9jZXNzRm9yU2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPmFkZFNlc3Npb24oKnRoaXMpOworICAgIH0KKworICAgIHJldHVybiAqbV9uZXR3b3JrUHJv
Y2VzczsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29y
a1Byb2Nlc3MoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYnNpdGVEYXRhU3Rv
cmUmPigqdGhpcykubmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpyZWdpc3RlclByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQpAQCAtMTk1LDEyICsy
MzIsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVucmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nl
c3NQcm94eSYgcHJvY2VzcykKICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CiB9CiAK
LVdlYlByb2Nlc3NQb29sKiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0
b3JhZ2VPcGVyYXRpb25zKCkKLXsKLSAgICBhdXRvIHBvb2xzID0gcHJvY2Vzc1Bvb2xzKDEpOwot
ICAgIHJldHVybiBwb29scy5pc0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVnaW4oKS0+Z2V0
KCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNl
c3NhcnkoKQogewogICAgIGlmIChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBAIC00NDAsMjgg
KzQ3MSwyMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogI2VuZGlmCiAKICAgICBhdXRvIG5l
dHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVG
b3JEYXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwotICAgIGlmIChuZXR3b3Jr
UHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsKLSAgICAgICAg
YXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQcm9jZXNzQWNjZXNzVHlw
ZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNzUG9vbHMoKTsKLSAgICAg
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7Ci0gICAgICAgICAgICBzd2l0Y2gg
KG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNj
ZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6
OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3ModGhpcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJv
Y2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlw
ZSkgeworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKKyAgICAgICAgbmV0d29y
a1Byb2Nlc3MoKTsKKyAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOworICAgICAgICBG
QUxMVEhST1VHSDsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoK
KyAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAgICAgIGNhbGxiYWNrQWdn
cmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKS0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVz
LCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXShXZWJzaXRl
RGF0YSB3ZWJzaXRlRGF0YSkgeworICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZmV0Y2hX
ZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CiAgICAgICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soV1RGTW92ZSh3ZWJzaXRl
RGF0YSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgYXV0byB3ZWJQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVXZWJQcm9jZXNzQWNjZXNzVHlw
ZUZvckRhdGFGZXRjaChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CkBAIC03MjQsMzEgKzc0
OCwyNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogICAgIGJvb2wgZGlkTm90aWZ5TmV0d29y
a1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhID0gZmFsc2U7CiAjZW5kaWYKICAgICBhdXRvIG5l
dHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGVG
b3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7Ci0gICAgaWYgKG5ldHdv
cmtQcm9jZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkgewotICAgICAg
ICBhdXRvIHBvb2xzID0gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09IFByb2Nlc3NBY2Nlc3NU
eXBlOjpMYXVuY2ggPyBlbnN1cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nlc3NQb29scygpOwotICAg
ICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKLSAgICAgICAgICAgIHN3aXRj
aCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFByb2Nlc3NB
Y2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlw
ZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2Vzcyh0aGlzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBQ
cm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIH0KLQorICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NU
eXBlKSB7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgorICAgICAgICBuZXR3
b3JrUHJvY2VzcygpOworICAgICAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7CisgICAgICAg
IEZBTExUSFJPVUdIOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVk
OgorICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewogICAgICAgICAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5
cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0gewor
ICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9u
SUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewogICAg
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7
CiAgICAgICAgICAgICB9KTsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQog
ICAgICAgICAgICAgZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhID0g
dHJ1ZTsKICNlbmRpZgogICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvY2Vz
c0FjY2Vzc1R5cGU6Ok5vbmU6CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGF1dG8gd2Vi
UHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlV2ViUHJvY2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVt
b3ZhbChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CkBAIC04OTMsMTQgKzkxMCw5IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljcykpIHsKICAgICAgICAgaWYgKCFkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1Rv
RGVsZXRlV2Vic2l0ZURhdGEpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2Fs
bGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAg
ICAgcHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9k
aWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0
YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKKyAgICAg
ICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQ
ZW5kaW5nQ2FsbGJhY2soKTsKQEAgLTk5NCwxMiArMTAwNiwxMCBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBj
b25zdCBWZQogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKICAgICAg
ICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBj
YXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBp
ZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9j
ZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAgICAgICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcygp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nl
c3NUeXBlOjpOb25lOgpAQCAtMTAyMSw3ICsxMDMxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3Qg
VmUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQ
ZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpLT5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywg
b3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJhYmxl
RG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKKyAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKG1fc2Vzc2lvbklE
LCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1lcywgSFNUU0NhY2hlSG9zdE5hbWVz
LCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7
CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJh
Y2soKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC0xMTgwLDE4ICsxMTkwLDEyIEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U2Vy
dmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKFNlY29uZHMgc2Vjb25kcykKIHsKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmco
c2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNo
VGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZl
dGNoVGltZW91dEZvclRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0
aW5nKCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFs
bFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0
Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2Vy
dmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVz
ZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5
KCksIDApOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTEy
MDEsOCArMTIwNSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0Vu
dHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50LCBDb21wbGV0CiAKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4
U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50cnlDb3VudCwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQ
cnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMTEsOCArMTIxNCw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRh
cmdldENvdW50LCBDb21wbGV0aW9uCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rvd25U
byhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNEb3du
VG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNl
Y29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTIyMSw4ICsxMjIzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFu
ZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjwKIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0
R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0
d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMzEsMjAgKzEyMzIsMTMgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92
YWwoU2Vjb25kcyBzZWNvbmRzLAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nl
c3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFS
ZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGltZUJl
dHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAgICAgCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgICAgICBwcm9jZXNzLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25J
RCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kdW1wUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xMjU2LDEyICsxMjUwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZh
bGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2kKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ByZXZhbGVudFJlc291cmNl
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjczLDEyICsxMjYyLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc0dy
YW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNHcmFuZGZhdGhlcmVkKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTEyOTIsOCArMTI3Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJl
c291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzA3LDEwICsxMjkwLDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9k
ZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGkKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdN
b2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzVmVyeVByZXZhbGVu
dCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzIyLDEyICsxMzAyLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29t
cGxldGlvbkhhbmRsZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJv
Y2Vzcy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNW
ZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzNDEsMTAg
KzEzMTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZQogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRWZXJ5
UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzUzLDggKzEzMjUsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0
YVJlY29yZHNSZW1vdmFsKGJvb2wgdgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9j
ZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCku
c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNz
aW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1
YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzY4LDIyICsxMzM5LDE0IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYg
c3ViRnJhbWVVUkwsIGNvCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3MtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJM
IH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNv
bnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
ICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29u
c3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM5NywyMyArMTM2MCwx
NCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21h
aW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VV
UkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRl
cihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0
ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRv
cEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJs
UmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xNDI3LDEwICsxMzgxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwKIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
UmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RU
byhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVS
TCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNv
bnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NDIsMTIgKzEzOTMsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVz
b3VyY2VVUgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJj
ZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0s
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwmIHVybFJlZGly
ZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTQ1OSwxMiArMTQwNSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9w
RnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8g
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkws
IGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NzYsMjUgKzE0MTcsMTQgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZy
YW1lVVJMLCBjb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVV
UkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0
aW5nVG8oY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJMJiB1cmxSZWRpcmVj
dGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vz
cy0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFu
ZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0
aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJl
Y3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8g
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE1MDYsNjAgKzE0MzYsNDEgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclByZXZhbGVudFJl
c291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVz
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMobV9z
ZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nl
c3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25JRCwg
W10geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdWJtaXRUZWxlbWV0cnkobV9z
ZXNzaW9uSUQsIFtdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVD
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBTaG91bGRH
cmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9j
ZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCBtb2Rp
ZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1bGVDbGVhcklu
TWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgc2hvdWxkR3Jh
bmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGly
ZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKIAotICAgIHN0cnVjdCBDYWxsYmFja0FnZ3JlZ2F0b3IgOiBSZWZDb3Vu
dGVkPENhbGxiYWNrQWdncmVnYXRvcj4gewotICAgICAgICBDYWxsYmFja0FnZ3JlZ2F0b3IoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCisgICAgc3RydWN0IExv
Y2FsQ2FsbGJhY2tBZ2dyZWdhdG9yIDogUmVmQ291bnRlZDxMb2NhbENhbGxiYWNrQWdncmVnYXRv
cj4geworICAgICAgICBMb2NhbENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRh
PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIDogbV9jb21wbGV0aW9uSGFu
ZGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgewogICAgICAgICAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAgICAgfTsKIAotICAgICAgICB+Q2FsbGJh
Y2tBZ2dyZWdhdG9yKCkKKyAgICAgICAgfkxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yKCkKICAgICAg
ICAgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMTU3NCwz
OCArMTQ4NSwzMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgICAgICBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJk
UGFydHlEYXRhPiYmKT4gbV9jb21wbGV0aW9uSGFuZGxlcjsKICAgICAgICAgVmVjdG9yPFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IG1fcmVzdWx0czsKICAg
ICB9OwotCi0gICAgUmVmUHRyPENhbGxiYWNrQWdncmVnYXRvcj4gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gYWRvcHRSZWYobmV3IENhbGxiYWNrQWdncmVnYXRvcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFJbW1lZGlhdGVseShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwcm9j
ZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcykuZ2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFT
dW1tYXJ5KG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0oVmVj
dG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYgZGF0
YSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVzdWx0KFdURk1v
dmUoZGF0YSkpOwotICAgICAgICAgICAgfSk7CisgICAgCisgICAgYXV0byBsb2NhbENhbGxiYWNr
QWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBMb2NhbENhbGxiYWNrQWdncmVnYXRvcihXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSkpOworICAgIAorICAgIGF1dG8gd3RmQ2FsbGJhY2tBZ2dyZWdh
dG9yID0gV1RGOjpDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCBsb2NhbENhbGxiYWNrQWdncmVnYXRvcl0geworICAgICAgICBu
ZXR3b3JrUHJvY2VzcygpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShtX3Nl
c3Npb25JRCwgW2xvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yXShWZWN0b3I8V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7CisgICAgICAgICAgICBs
b2NhbENhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVzdWx0KFdURk1vdmUoZGF0YSkpOwogICAgICAg
ICB9KTsKLSAgICB9CisgICAgfSk7CisgICAgCisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6
IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wt
PnNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KFt3dGZDYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVh
ckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxk
R3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlB
bmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0s
IHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ29va2llQmxvY2tpbmdV
cGRhdGUobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRh
dGUobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5n
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2MTQs
MjQgKzE1MTgsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NB
bmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmQKICAgICAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlU3RhdGlzdGlj
c0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1
bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lvbklELCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3Rp
Y3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICAgICAgcHJvY2Vzcy0+c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lvbklE
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjQzLDIyICsxNTM2LDE0IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1cmwsIFNlY29u
ZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgcHJvY2Vzcy0+c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldExhc3RTZWVuKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBzZWNvbmRzLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRv
bWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kb21haW5JREV4aXN0c0luRGF0YWJhc2UobV9z
ZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmRvbWFp
bklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3Rp
Y0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwxLCBjb25z
dCBVUkwmIHRvcEZyYW1lVXJsMiwgU2Vjb25kcyBsYXN0U2VlbiwgYm9vbCBoYWRVc2VySW50ZXJh
Y3Rpb24sIFNlY29uZHMgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc0dyYW5kZmF0
aGVyZWQsIGJvb2wgaXNQcmV2YWxlbnQsIGJvb2wgaXNWZXJ5UHJldmFsZW50LCB1bnNpZ25lZCBk
YXRhUmVjb3Jkc1JlbW92ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTE2NzAsMTAgKzE1NTUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1l
cmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiB0b3BGcgog
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPm1lcmdlU3Rh
dGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDEgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVz
ZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVk
LCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtwcm9j
ZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJv
Y2VzcygpLm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BG
cmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwg
bGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwg
aXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jk
c1JlbW92ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmws
IGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2ODUsMTggKzE1NjcsMTQgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVy
bCwgYm9vbCBoYWQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9j
ZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVk
dWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRG
b3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElzUnVu
bmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MDQsOCArMTU4Miw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
c3QoYm9vbCB2YWx1ZSwgQ29tcGxlCiAgICAgdXNlRXhwbGljaXRJVFBTdGF0ZSgpOwogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9uSUQs
IHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1fc2Vz
c2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJZGVu
dGlmaWVyIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmIGRv
bWFpbnMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcxNiw3ICsxNTkzLDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJ
ZGVudGlmaWVyIHBhZ2VJRCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdlYlBhZ2Ut
PnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxsU3Rv
cmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1fc2Vz
c2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIApAQCAtMTcyNCw4ICsx
NjAxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0
aW9uKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkgKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFRpbWVU
b0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlckludGVy
YWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwm
IHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTczOSwxMCArMTYxNSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlckludGVyYWN0
aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkCiAgICAgCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmxvZ1VzZXJJbnRlcmFjdGlv
bihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5sb2dVc2Vy
SW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc1NCwxMyArMTYyNyw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAg
ICAgICAgIHByb2Nlc3MtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25I
YW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0hhZFVzZXJJbnRlcmFjdGlv
bihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVs
YXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25zdCBVUkwm
IHRvcFVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE3NzIsMTMgKzE2MzksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRp
b25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25zdAogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlbGF0aW9uc2hpcE9u
bHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwgfSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3OTIsMTAgKzE2NTMs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFVS
TCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclVzZXJJbnRlcmFjdGlv
bihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFu
ZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgwOSwxMCArMTY2Nyw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVy
bCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0
R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MjEsMTAgKzE2
NzYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFs
dWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0YWJhc2UobV9zZXNz
aW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9z
c1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGZyb21VUkws
IGNvbnN0IFVSTCYgdG9VUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTE4MzMsNjIgKzE2ODUsMzggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGYK
ICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB0b1VSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRDcm9zc1NpdGVMb2FkV2l0aExp
bmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9VUkwgfSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q3Jv
c3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0
Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRl
bGV0ZUNvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGluY2x1ZGVIdHRwT25s
eUNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRl
Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVzdGlu
Zyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNM
b2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5nKGNvbnN0IFVS
TCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0lzb2xhdGVkU2Vz
c2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVS
ZWZlcnJlckZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZERvd25ncmFkZVJlZmVy
cmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGlu
ZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JN
KENPQ09BKQpAQCAtMTkxOSwxMCArMTc0Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llCiAg
ICAgICAgICAgICB3ZWJQcm9jZXNzLnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoYmxv
Y2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0KIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vz
c2lvbklELCBibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShtX3Nl
c3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJs
ZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkzMCwxMCArMTc1
NSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1No
b3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlCiAgICAgYXV0byBmbGFnID0gZW5hYmxlZCA/
IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZZXMgOiBXZWJDb3Jl
OjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87CiAKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRW5i
bGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZUZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTQxLDIwICsxNzYzLDE0IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRl
RGF0YVJlbW92YWxNb2RlCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgYXV0byBt
b2RlID0gZW5hYmxlZCA/IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
OjpBbGxCdXRDb29raWVzIDogV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGU6Ok5vbmU7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0Rmlyc3RQYXJ0eVdl
YnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgbW9kZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5n
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRvU2FtZVNpdGVT
dHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFN
RURvbWFpbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmaXJzdFBhcnR5VVJMLCBjb25zdCBVUkwmIGNu
YW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xOTY2LDggKzE3ODIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdAogCiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNl
dEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJzdFBh
cnR5VVJMLmhvc3QoKS50b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNu
YW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmly
c3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21h
aW5Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NzksMTggKzE3OTQsMTMgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0eUNOQU1FRG9t
YWluRm9yVGVzdGluZygKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0
aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0s
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaGly
ZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAj
ZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3JhZ2UoKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2Fw
Rm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk5OCw4ICsxODA4LDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhT
ZWNvbmRzIHNlY29uZHMsIEMKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNz
aW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25J
RCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgVU5VU0VE
X1BBUkFNKHNlY29uZHMpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0yMDA5LDI2ICsx
ODE4LDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2
YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291
cmNlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogI2Vsc2UKICAg
ICBjb21wbGV0aW9uSGFuZGxlcigpOwogI2VuZGlmCiB9CiAKLWJvb2wgV2Vic2l0ZURhdGFTdG9y
ZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKSBj
b25zdAotewotICAgIGlmIChhdXRvKiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9IHByb2Nlc3NQb29s
LndlYnNpdGVEYXRhU3RvcmUoKSkKLSAgICAgICAgcmV0dXJuIHByb2Nlc3NQb29sRGF0YVN0b3Jl
ID09IHRoaXM7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm9jZXNzUG9v
bC5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICByZXR1cm4gbmV0d29ya1Byb2Nlc3NQcm94eS0+
aGFzU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBIYXNoU2V0
PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyhz
aXplX3QgbGltaXQpIGNvbnN0CiB7CiAgICAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+
PiBwcm9jZXNzUG9vbHM7CkBAIC0yMDQzLDkgKzE4MzgsNiBAQCBIYXNoU2V0PFJlZlB0cjxXZWJQ
cm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyhzaXplX3QgbGltaXQp
IGNvbgogICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIENoZWNr
IGlmIHdlJ3JlIG9uZSBvZiB0aGUgbGVnYWN5IGRhdGEgc3RvcmVzLgogICAgICAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgICAgICBpZiAoIWlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKCpwcm9jZXNzUG9vbCkpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAgICAgIHByb2Nlc3NQb29scy5hZGQo
cHJvY2Vzc1Bvb2wpOwogICAgICAgICAgICAgaWYgKHByb2Nlc3NQb29scy5zaXplKCkgPT0gbGlt
aXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDg0LDggKzE4NzYsNyBAQCBzdGF0aWMg
U3RyaW5nIGNvbXB1dGVNZWRpYUtleUZpbGUoY29uc3QgU3RyaW5nJiBtZWRpYUtleURpcmVjdG9y
eSkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0
ZUZvckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJbmZvKiBjZXJ0aWZpY2F0ZSwgY29uc3QgU3Ry
aW5nJiBob3N0KQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9z
dChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRU
UFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0
KSwgMCk7CiB9CiAKIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IFdlYnNpdGVE
YXRhU3RvcmU6Om1lZGlhS2V5T3JpZ2lucyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VE
aXJlY3RvcnkpCkBAIC0yMTQwLDYgKzE5MzEsNTIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LAog
ICAgIH0KIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoY29uc3QgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mbyYpPiYmIHJlcGx5KQorewor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKHdlYlByb2Nl
c3NQcm94eSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB3ZWJQcm9jZXNz
UHJveHkgPSBtYWtlV2Vha1B0cih3ZWJQcm9jZXNzUHJveHkpLCByZXBseSA9IFdURk1vdmUocmVw
bHkpXSAoYXV0byYgY29ubmVjdGlvbkluZm8pIG11dGFibGUgeworICAgICAgICBpZiAoVU5MSUtF
TFkoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVjdGlvbkluZm8uaWRl
bnRpZmllcigpKSAmJiB3ZWJQcm9jZXNzUHJveHkgJiYgd2Vha1RoaXMpKSB7CisgICAgICAgICAg
ICB0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUYo
aXNQZXJzaXN0ZW50KCksIFByb2Nlc3MsICJnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246IEZh
aWxlZCBmaXJzdCBhdHRlbXB0LCByZXRyeWluZyIpOworICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MoKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKndlYlByb2Nlc3NQcm94eSwgV1RGTW92
ZShyZXBseSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJlcGx5
KGNvbm5lY3Rpb25JbmZvKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpu
ZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYpCit7CisgICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRpZFRlcm1pbmF0ZSgp
OworICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOworfQorCit2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nl
c3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9j
ZXNzUG9vbC0+dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKKworICAgIGlmICghbV9uZXR3b3Jr
UHJvY2VzcykKKyAgICAgICAgcmV0dXJuOworICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0
ZSgpOworICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOworfQorCit2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNlbmRQcmVwYXJlVG9TdXNwZW5kKElzU3VzcGVuc2lvbkltbWluZW50OjpO
bywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKQor
eworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlG
b3JUZXN0aW5nKCk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lKCkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcm9jZXNzRGlkUmVz
dW1lKCk7Cit9CisKIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoKSBjb25zdAogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
CkBAIC0yMTY5LDE3ICsyMDA2LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgICAgICAKICAgICAgICAg
cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgcHJvY2Vz
c1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpKTsKKyAg
ICAgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpLCAwKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAgICAgICAg
ICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6Oldl
YlByb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHRydWUpLCBtX3Nlc3Np
b25JRCk7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpKTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpLCAwKTsKKyAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgIHByb2Nlc3NQb29sLT5z
ZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChmYWxzZSksIG1fc2Vzc2lvbklEKTsKLSAgICB9CiAK
ICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkID0gZmFsc2U7CiAjZWxzZQpAQCAt
MjE5MSw4ICsyMDI2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4m
JiBjYWxsYmFjaykKIHsKICAgICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSk7CisgICAgICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQodHJ1ZSksIDApOwogICAgIH0KICAgICAKICAgICBtX3N0
YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKQEAgLTIyMTEsOCAr
MjA0NSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RlYnVnTW9kZShib29sIGVuYWJsZWQsIENvbXBsZXRpCiAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGVidWdNb2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CiAgICAgVU5VU0VE
X1BBUkFNKGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIyMjcsMjAgKzIwNjAsMTUgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nl
c3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKKyNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworI2VuZGlm
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdN
b2RlKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKIH0KIAogI2lmIEVO
QUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMjYyLDQ4ICsyMDkwLDE5IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzSW5XZWJQcm9j
ZXNzZXMoQ29tcGxldGlvbkhhbmRsCiB9CiAjZW5kaWYKIAotVmVjdG9yPFdlYkNvcmU6OkNvb2tp
ZT4gV2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMoKSBjb25zdAotewotICAgIHJldHVy
biBjb3B5VG9WZWN0b3IobV9wZW5kaW5nQ29va2llcyk7Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6YWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSkKLXsK
LSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZUlmKFsmY29va2llXShhdXRvJiBwZW5kaW5nQ29v
a2llKSB7Ci0gICAgICAgIHJldHVybiBwZW5kaW5nQ29va2llLmlzS2V5RXF1YWwoY29va2llKTsK
LSAgICB9KTsKLSAgICBtX3BlbmRpbmdDb29raWVzLmFkZChjb29raWUpOwotfQotCi12b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2ll
JiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmUoY29va2llKTsKLX0KLSAg
ICAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcygpCi17Ci0gICAg
bV9wZW5kaW5nQ29va2llcy5jbGVhcigpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZs
dXNoQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQ
b29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+Zmx1c2hDb29raWVzKHNlc3Npb25JRCgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIG5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCgpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYm9vbCBhbGxvd3MpCiB7Ci0gICAgZm9y
IChhdXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQo
YWxsb3dzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZUZvcldlYlNvY2tldDo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZUZvcldlYlNvY2tldChhbGxvd3MpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0OjpSZXBseSgpLCAwKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKCkKIHsKLSAgICBm
b3IgKGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkp
Ci0gICAgICAgIHByb2Nlc3NQb29sLT5jbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCgp
KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpD
bGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCgpKSwgMCk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6ZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikK
QEAgLTIzMjksOCArMjEyOCw2IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVE
YXRhU3RvcmU6OnBhcmFtZXRlcnMoKQogCiAgICAgcmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3Nh
cnkoKTsKIAotICAgIHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBwZW5kaW5nQ29va2llcygp
OwotCiAgICAgYXV0byByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV9jb25maWd1
cmF0aW9uLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7CiAgICAgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlIYW5kbGU7CiAg
ICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKQEAgLTI0
MzUsNyArMjIzMiwxMCBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0
b3JlOjpwYXJhbWV0ZXJzKCkKICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVkID0gbV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZDsKICNlbmRpZgogICAgIHBsYXRmb3JtU2V0TmV0d29ya1BhcmFt
ZXRlcnMocGFyYW1ldGVycyk7Ci0KKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFj
a2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Np
b24oKTsKKyNlbmRpZgorICAgIAogICAgIHJldHVybiBwYXJhbWV0ZXJzOwogfQogCkBAIC0yNDY1
LDEwICsyMjY1LDYgQEAgQVBJOjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6OmNv
b2tpZVN0b3JlKCkKICAgICByZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAKLXZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQotewotfQotCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIWlzUGVyc2lzdGVudCgpKSB7CkBAIC0yNDc2LDIzICsy
MjcyLDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhG
dW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VECiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMpLmdldExvY2Fs
U3RvcmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgewotICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7Ci0gICAgICAgIH0pOwotICAgICAgICAvLyBG
SVhNRTogU3VwcG9ydCBmZXRjaGluZyBmcm9tIG11bHRpcGxlIHBvb2xzLgotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgQVNTRVJUKCFjb21wbGV0aW9uSGFuZGxlcik7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMpIHsKKyAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7CisgICAgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YShDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UXVvdGEobV9zZXNz
aW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09D
T0EpCkBAIC0yNTE4LDcgKzIzMDYsMTIgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpodHRwM0Vu
YWJsZWQoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZgorCitib29sIFdlYnNpdGVE
YXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0
cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmIC8vICFQTEFURk9STShDT0NP
QSkKIAogI2lmICFVU0UoR0xJQikKIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1
bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQpAQCAtMjUzMCwzNSArMjMyMywx
OCBAQCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2Fs
dHNTdG9yYWdlRGlyZWN0b3J5KCkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW5hbWVPcmln
aW5JbldlYnNpdGVEYXRhKFVSTCYmIG9sZE5hbWUsIFVSTCYmIG5ld05hbWUsIE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp0
aGlzKTsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW5hbWVPcmlnaW5JbldlYnNpdGVE
YXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5y
ZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBk
YXRhVHlwZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShB
UFBfQk9VTkRfRE9NQUlOUykKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzQXBwQm91bmRTZXNz
aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNv
bnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzQXBwQm91bmRTZXNzaW9u
KG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwor
ICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xl
YXJBcHBCb3VuZFNlc3Npb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5jbGVhckFwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERv
bWFpbnNUb0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMjU4MCw3ICsyMzU2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5k
bGUKIAogICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhnbG9iYWxEZWZhdWx0RGF0YVN0b3Jl
KCkuZ2V0KCksICphcHBCb3VuZERvbWFpbnMpOwogCi0gICAgZm9yIChhdXRvKiBzdG9yZSA6IG5v
bkRlZmF1bHREYXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAgZm9yIChhdXRvKiBzdG9yZSA6IGFs
bERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKICAgICAgICAgcHJvcGFnYXRlQXBwQm91bmREb21haW5z
KHN0b3JlLCAqYXBwQm91bmREb21haW5zKTsKIH0KIApAQCAtMjU4OCwxMCArMjM2NCw3IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKGNvbnN0IEhhc2hT
ZXQ8V2ViQ29yZTo6UmVnaXN0cmFiCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0QXBwQm91bmREb21haW5zRm9yUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBcHBCb3VuZERvbWFpbnNG
b3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogI2VuZGlmCiAKQEAgLTI1OTksMTYgKzIzNzIsMjYgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vz
cyhjb25zdCBTdHJpbmcmIGJ1bmQKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihi
dW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVyLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQnVu
ZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxl
SWRlbnRpZmllcihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworfQorCitzdGF0aWMgYm9vbCBu
ZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hTaG91bGRGYWlsRm9yVGVzdGluZyB7IGZhbHNlIH07CisK
K3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxG
b3JUZXN0aW5nKCkKK3sKKyAgICBuZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hTaG91bGRGYWlsRm9y
VGVzdGluZyA9IHRydWU7Cit9CisKK2Jvb2wgV2Vic2l0ZURhdGFTdG9yZTo6c2hvdWxkTWFrZU5l
eHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkKK3sKKyAgICByZXR1cm4gc3Rk
OjpleGNoYW5nZShuZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hTaG91bGRGYWlsRm9yVGVzdGluZywg
ZmFsc2UpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXggZTlkZWJhNDgwODhiOWYzMDY2NTdlZGQ5
NDM0OTk1MzA4NmIwZWQyZS4uYjgzNjFhYzczYzRmYzBkOTFjMWY0ZGFlYjQwNWUyMGQwNmM3M2E1
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuaApAQCAtNTMsNiArNTMsOCBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAjaW5jbHVkZSA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KKyNpbmNsdWRlIDx3dGYvT1NP
YmplY3RQdHIuaD4KKyNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KICNlbmRpZgog
CiAjaWYgVVNFKENVUkwpCkBAIC03OSw2ICs4MSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xh
c3MgQXV0aGVudGljYXRvck1hbmFnZXI7CiBjbGFzcyBTZWNLZXlQcm94eVN0b3JlOwogY2xhc3Mg
RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5OwogY2xh
c3MgU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBXZWJDZXJ0aWZpY2F0ZUluZm87
CiBjbGFzcyBXZWJQYWdlUHJveHk7CkBAIC04OCw2ICs5MSw4IEBAIGNsYXNzIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTsKIGVudW0gY2xhc3MgQ2FjaGVNb2RlbCA6IHVpbnQ4X3Q7CiBl
bnVtIGNsYXNzIFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24gOiB1aW50OF90OwogZW51bSBjbGFzcyBX
ZWJzaXRlRGF0YVR5cGUgOiB1aW50MzJfdDsKKworc3RydWN0IE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbkluZm87CiBzdHJ1Y3QgV2Vic2l0ZURhdGFSZWNvcmQ7CiBzdHJ1Y3QgV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM7CiAKQEAgLTExMyw3ICsxMTgsMTIgQEAgcHVibGljOgogICAgIFdlYnNp
dGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYmLCBQQUw6OlNl
c3Npb25JRCk7CiAgICAgfldlYnNpdGVEYXRhU3RvcmUoKTsKIAotICAgIHN0YXRpYyBXZWJzaXRl
RGF0YVN0b3JlKiBleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpT
ZXNzaW9uSUQpOworICAgIHN0YXRpYyB2b2lkIGZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKEZ1bmN0
aW9uPHZvaWQoV2Vic2l0ZURhdGFTdG9yZSYpPiYmKTsKKyAgICAKKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5JiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHkm
IG5ldHdvcmtQcm9jZXNzKCk7CisKKyAgICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhpc3Rp
bmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOwogCiAgICAgYm9vbCBpc1Bl
cnNpc3RlbnQoKSBjb25zdCB7IHJldHVybiAhbV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKTsgfQog
ICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklE
OyB9CkBAIC0xMjMsNiArMTMzLDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBjb25zdCBXZWFrSGFz
aFNldDxXZWJQcm9jZXNzUHJveHk+JiBwcm9jZXNzZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nl
c3NlczsgfQogCisgICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vz
c1Byb3h5JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBOZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb25JbmZvJik+JiYpOworICAgIHZvaWQgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAg
ICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NXaWxs
U3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nl
c3NEaWRSZXN1bWUoKTsKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJv
Y2Vzc1Byb3h5Jik7CisgICAgc3RhdGljIHZvaWQgbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5j
aEZhaWxGb3JUZXN0aW5nKCk7CisgICAgc3RhdGljIGJvb2wgc2hvdWxkTWFrZU5leHROZXR3b3Jr
UHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCk7CisKICAgICBib29sIHJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZChib29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01v
ZGUoKSBjb25zdDsKQEAgLTIzOSwxNSArMjU4LDggQEAgcHVibGljOgogCiAgICAgRGV2aWNlSWRI
YXNoU2FsdFN0b3JhZ2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4gbV9kZXZp
Y2VJZEhhc2hTYWx0U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nl
c3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlzQXNzb2NpYXRl
ZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycyBwYXJhbWV0ZXJzKCk7CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2ll
PiBwZW5kaW5nQ29va2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShjb25z
dCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29raWUoY29uc3Qg
V2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVzKCk7CiAgICAg
dm9pZCBmbHVzaENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lk
IGNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKIApAQCAtMjU1LDYgKzI2NywxMSBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYpOwogCisjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRv
V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vz
c1hQQ0VuZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMoKTsKKyNlbmRpZgorCiAjaWYgVVNFKENVUkwp
CiAgICAgdm9pZCBzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXZWJDb3JlOjpDdXJsUHJveHlTZXR0
aW5ncyYmKTsKICAgICBjb25zdCBXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5ncyYgbmV0d29ya1By
b3h5U2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX3Byb3h5U2V0dGluZ3M7IH0KQEAgLTI4MCw4
ICsyOTcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNb2NrV2ViQXV0aGVudGljYXRpb25Db25m
aWd1cmF0aW9uKFdlYkNvcmU6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24mJik7
CiAjZW5kaWYKIAotICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKLQogICAgIGNv
bnN0IFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKCkgeyByZXR1
cm4gbV9jb25maWd1cmF0aW9uLmdldCgpOyB9CiAKICAgICBXZWJzaXRlRGF0YVN0b3JlQ2xpZW50
JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQpAQCAtMjkxLDYgKzMwNiw4IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgcmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiwgVVJM
JiYsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwogCisgICAgYm9vbCBuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhj
b25zdCBTdHJpbmcmKTsKKwogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgV2Vi
RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyJiBkZXZpY2VPcmllbnRh
dGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXIoKSB7IHJldHVybiBtX2RldmljZU9yaWVudGF0
aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcjsgfQogI2VuZGlmCkBAIC0zNjcsNyArMzg0LDcg
QEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5n
JiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKTsKICAg
ICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9y
YWdlRGlyZWN0b3J5LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4m
KTsKIAotICAgIHZvaWQgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICB2b2lk
IHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01B
SU5TKQogICAgIHN0YXRpYyBPcHRpb25hbDxIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluPj4gYXBwQm91bmREb21haW5zSWZJbml0aWFsaXplZCgpOwpAQCAtNDA3LDggKzQyNCw2IEBA
IHByaXZhdGU6CiAgICAgV2ViQ29yZTo6U291cE5ldHdvcmtQcm94eVNldHRpbmdzIG1fbmV0d29y
a1Byb3h5U2V0dGluZ3M7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29va2llPiBt
X3BlbmRpbmdDb29raWVzOwotICAgIAogICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4g
bV9wcm9jZXNzZXM7CiAKICAgICBib29sIG1faXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQgeyBmYWxz
ZSB9OwpAQCAtNDI5LDYgKzQ0NCw3IEBAIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPFdlYnNpdGVE
YXRhU3RvcmVDbGllbnQ+IG1fY2xpZW50OwogCiAgICAgUmVmUHRyPEFQSTo6SFRUUENvb2tpZVN0
b3JlPiBtX2Nvb2tpZVN0b3JlOworICAgIFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25l
dHdvcmtQcm9jZXNzOwogCiAjaWYgSEFWRShBUFBfU1NPKQogICAgIFVuaXF1ZVJlZjxTT0F1dGhv
cml6YXRpb25Db29yZGluYXRvcj4gbV9zb0F1dGhvcml6YXRpb25Db29yZGluYXRvcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURh
dGFTdG9yZUN1cmwuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3Vy
bC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5jcHAKaW5kZXggMGUwYzA2ZTFkZWQ0MmMxNGI4MDJlMTU4
OWYzMWRjNjI5ODJhYzM5My4uNjRiNmM3NGQwODZlYzQ1YmI2MmRhNmVlMDgyMjNiMjhkYjczYTU3
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9X
ZWJzaXRlRGF0YVN0b3JlQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5jcHAKQEAgLTQyLDggKzQyLDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXZWJDb3JlOjpD
dXJsUHJveHlTZXR0aW5ncyYmIHByb3gKIHsKICAgICBtX3Byb3h5U2V0dGluZ3MgPSBXVEZNb3Zl
KHByb3h5U2V0dGluZ3MpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX3Nlc3Npb25J
RCwgbV9wcm94eVNldHRpbmdzKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9zZXNzaW9uSUQsIG1f
cHJveHlTZXR0aW5ncyksIDApOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAu
Y3BwCmluZGV4IGM1Njk3NjBmMTE4MjA0YTNiOWNlYmUwMzVjNTljZWJiZjY5YjIzNzYuLmYwZTk0
MmYzMzU5YjAyNjYzYTIzYzVhMGU0YjI0NTExNmZmOTFiOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURh
dGFTdG9yZVNvdXAuY3BwCkBAIC00MSw4ICs0MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyhXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYK
ICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaWdub3JlVExTRXJyb3JzID0gbV9pZ25vcmVU
TFNFcnJvcnM7CiAgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnByb3h5U2V0dGluZ3MgPSBt
X25ldHdvcmtQcm94eVNldHRpbmdzOwogCi0gICAgaWYgKGF1dG8qIHByb2Nlc3NQb29sID0gcHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVy
c2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lz
dGVudFN0b3JhZ2VUeXBlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKS5n
ZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChib29sIGVuYWJsZWQp
CkBAIC01NCw4ICs1Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENy
ZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKG1fc2Vzc2lvbklELCBtX3BlcnNp
c3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3Jh
Z2VFbmFibGVkKG1fc2Vzc2lvbklELCBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJs
ZWQpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRJZ25vcmVUTFNFcnJvcnMo
Ym9vbCBpZ25vcmVUTFNFcnJvcnMpCkBAIC02NCwxNSArNjIsMTMgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMpCiAgICAgICAg
IHJldHVybjsKIAogICAgIG1faWdub3JlVExTRXJyb3JzID0gaWdub3JlVExTRXJyb3JzOwotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vz
c1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0SWdub3JlVExTRXJyb3JzKG1fc2Vzc2lvbklELCBtX2lnbm9yZVRMU0Vycm9ycykpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldElnbm9y
ZVRMU0Vycm9ycyhtX3Nlc3Npb25JRCwgbV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXZWJDb3JlOjpTb3Vw
TmV0d29ya1Byb3h5U2V0dGluZ3MmJiBzZXR0aW5ncykKIHsKICAgICBtX25ldHdvcmtQcm94eVNl
dHRpbmdzID0gV1RGTW92ZShzZXR0aW5ncyk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1By
b2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyht
X3Nlc3Npb25JRCwgbV9uZXR3b3JrUHJveHlTZXR0aW5ncykpOworICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdz
KG1fc2Vzc2lvbklELCBtX25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9X
ZWJQcm9jZXNzUHJveHlHTGliLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2Vi
UHJvY2Vzc1Byb3h5R0xpYi5jcHAKaW5kZXggMGE4NGE3NTkwZDlhOTg1YmZjOTk2ODRhNDg5NTEz
NzRlNWIyOTQyOS4uMjdmMjNlYTA2NWRjNzVjZTRhODI3MGM1NzZlYTJhYTU1YWIwZGM4ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGli
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdM
aWIuY3BwCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdl
dExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsCiAgICAgICAg
IGlmICghZGF0YVN0b3JlKSB7CiAgICAgICAgICAgICAvLyBQcmV3YXJtZWQgcHJvY2Vzc2VzIGRv
bid0IGhhdmUgYSBXZWJzaXRlRGF0YVN0b3JlIHlldCwgc28gdXNlIHRoZSBwcmltYXJ5IFdlYnNp
dGVEYXRhU3RvcmUgZnJvbSB0aGUgV2ViUHJvY2Vzc1Bvb2wuCiAgICAgICAgICAgICAvLyBUaGUg
cHJvY2VzcyB3b24ndCBiZSB1c2VkIGlmIGN1cnJlbnQgV2Vic2l0ZURhdGFTdG9yZSBpcyBkaWZm
ZXJlbnQgdGhhbiB0aGUgV2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBvbmUuCi0gICAgICAgICAgICBk
YXRhU3RvcmUgPSBtX3Byb2Nlc3NQb29sLT53ZWJzaXRlRGF0YVN0b3JlKCk7CisgICAgICAgICAg
ICBkYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7
CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoZGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAu
Y3BwCmluZGV4IDlmN2JlM2M5NDFiNmNkMGExYjk0Y2IxMzYwOThmM2EwNDFjZWZmOTkuLmFjMDRl
MzhhNTdiMjE1OWJlYjQyZjM4NDc5YjQ0ZjVlMjZkZWRiYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNw
cApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNv
b2tpZU1hbmFnZXJQcm94eS5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgog
I2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nl
c3NQb29sLmgiCiAKQEAgLTMzLDggKzM0LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQ
ZXJzaXN0ZW50U3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUpCiB7Ci0gICAgbV9jb29raWVQZXJzaXN0
ZW50U3RvcmFnZU1hcC5zZXQoc2Vzc2lvbklELCBzdGQ6Om1ha2VfcGFpcihzdG9yYWdlUGF0aCwg
c3RvcmFnZVR5cGUpKTsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vz
cyhNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uo
c2Vzc2lvbklELCBzdG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpKTsKKyAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBzdG9yYWdl
UGF0aCwgc3RvcmFnZVR5cGUpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3Ry
aW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSYgc3RvcmFn
ZVR5cGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dl
YlByb2Nlc3NQb29sU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlBy
b2Nlc3NQb29sU291cC5jcHAKaW5kZXggNmI3YzViNDIyNGZhZTAyMmY4NTBjYmExMDJlNGVlZDUz
MTlmNmJjYy4uMDgxZjViZTFjZGFlN2I2MjRjMDE5ZWJjNzE2MTkwZTAzYWI5N2VkZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNw
cApAQCAtMzcsMTUgKzM3LDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewotICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRp
b25QYXJhbWV0ZXJzJiBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICBzdXBw
bGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3Jh
Z2UoZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgZGVmYXVsdFNlc3Npb25QYXJh
bWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0
ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7Ci0gICAgaWYgKG1fd2Vic2l0ZURhdGFT
dG9yZSkgewotICAgICAgICBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMucGVyc2lzdGVudENyZWRl
bnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyc2lzdGVudENyZWRl
bnRpYWxTdG9yYWdlRW5hYmxlZCgpOwotICAgICAgICBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMu
aWdub3JlVExTRXJyb3JzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5pZ25vcmVUTFNFcnJvcnMoKTsK
LSAgICAgICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnByb3h5U2V0dGluZ3MgPSBtX3dlYnNp
dGVEYXRhU3RvcmUtPm5ldHdvcmtQcm94eVNldHRpbmdzKCk7Ci0gICAgfQotCi0gICAgcGFyYW1l
dGVycy5jb29raWVBY2NlcHRQb2xpY3kgPSBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5
OwogICAgIHBhcmFtZXRlcnMubGFuZ3VhZ2VzID0gdXNlclByZWZlcnJlZExhbmd1YWdlcygpOwog
ICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSB0cnVlOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uSW5mby5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uSW5mby5oCmluZGV4IDgzNTBkYmFjZjhkNTU3ZTU3YzhiY2ZjM2U5M2Qw
OTdiODk0NmFiYjguLjlmNDY4NWQxM2FiZDJiNGFjOGM1Mzc4YjhlNTEyZjljMDI5ZGIzYjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbkluZm8uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdt
YSBvbmNlCiAKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQ
Q29va2llQWNjZXB0UG9saWN5Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGMwNmUwNzAwYzlkNTQ2MTZl
OTAyZDZhZTM0MWY2M2IyZGQyMjBkODEuLmYwNzIyZDhlMzlmNDVjMjE2ODhmMTAyYWYzODAyOGEw
ZmY4NTllYjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw5OCBAQAorMjAyMC0wOS0yNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJp
c3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgTmV0d29ya1Byb2Nlc3NQcm94eSBv
d25lcnNoaXAgZnJvbSBXZWJQcm9jZXNzUG9vbCB0byBXZWJzaXRlRGF0YVN0b3JlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYwNDEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3N0IGNoYW5nZXMgdG8g
dGVzdHMgYXJlIGp1c3QgY2FsbGluZyBhIGZ1bmN0aW9uIG9uIHRoZSBXS1dlYnNpdGVEYXRhU3Rv
cmUgaW5zdGVhZCBvZiB0aGUgV0tQcm9jZXNzUG9vbAorICAgICAgICBiZWNhdXNlIHdlIHdhbnQg
dG8gZG8gc29tZXRoaW5nIHdpdGggdGhlIG5ldHdvcmsgcHJvY2VzcyBhbmQgaXQgaGFzIGEgbmV3
IG93bmVyLgorICAgICAgICBFeGNlcHRpb25zIGFyZSBub3RlZCBpbmxpbmUuCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRp
bmdDb25uZWN0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OmRvd25sb2FkQXRSYXRlKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW06CisgICAgICAgIChURVNUKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292
ZXJ5Lm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tOgorICAgICAgICAoVEVTVCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9V
cGdyYWRlVG9WMi5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbToKKyAgICAg
ICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5k
ZXhlZERCTXVsdGlQcm9jZXNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbToKKyAgICAg
ICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5k
ZXhlZERCU3VzcGVuZEltbWluZW50bHkubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbToK
KyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tOgorICAg
ICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9O
ZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbToKKyAgICAgICAgKGNo
ZWNrUmVjb3ZlcnlBZnRlckNyYXNoKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbToKKyAgICAg
ICAgKFRFU1QpOgorICAgICAgICBUaGlzIHRlc3Qgd2FzIG1ha2luZyBhIFdLV2Vic2l0ZURhdGFT
dG9yZSwgZ2V0dGluZyBpdHMgcmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNzIGRpcmVjdG9yeSwKKyAg
ICAgICAgcHV0dGluZyB0aGluZ3MgaW4gdGhhdCBkaXJlY3RvcnksIHRoZW4gc3RhcnRpbmcgdGhl
IG5ldHdvcmsgcHJvY2VzcyBhbmQgbWFraW5nIHN1cmUgZXZlcnl0aGluZworICAgICAgICB3b3Jr
cyB3aGVuIGluaXRpYWxpemluZyB0aGUgbmV0d29yayBwcm9jZXNzLiAgTm93LCBuZXR3b3JrIHBy
b2Nlc3MgaW5pdGlhbGl6YXRpb24gaGFwcGVucyB3aGVuIGEKKyAgICAgICAgV0tXZWJzaXRlRGF0
YVN0b3JlIGlzIGluc3RhbnRpYXRlZCwgc28gd2UgbmVlZCB0byBwdXQgdGhpbmdzIHRoZXJlIGJl
Zm9yZSBpbnN0YW50aWF0aW5nIGEgV0tXZWJzaXRlRGF0YVN0b3JlLgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tOgorICAgICAg
ICBCZWZvcmUgdGhpcyBjaGFuZ2UsIGVhY2ggV0tQcm9jZXNzUG9vbCBoYWQgaXRzIG93biBuZXR3
b3JrIHByb2Nlc3MsIHdoaWNoIGhvbGRzIHRoZSBzZXJ2aWNlIHdvcmtlciByZWdpc3RyeQorICAg
ICAgICBmb3IgdGhlIFdlYnNpdGVEYXRhU3RvcmVzIHVzZWQgd2l0aCB0aGF0IHByb2Nlc3MgcG9v
bC4gIE5vdywgdGhlIG5ldHdvcmsgcHJvY2VzcyBzdGlsbCBuZWVkcyB0byBoYXZlIGEgc2Vydmlj
ZQorICAgICAgICB3b3JrZXIgcmVnaXN0cnkgaW4gaXQsIGJ1dCB3aGVuIHdlIHJlY2VpdmUgYSBt
ZXNzYWdlIGZyb20gaXQgbG9va2luZyBmb3IgYSB3ZWIgcHJvY2VzcyB0byBydW4gdGhlIHNlcnZp
Y2UKKyAgICAgICAgd29ya2VyLCB3ZSBnbyBhcmJpdHJhcmlseSB0byB0aGUgZmlyc3QgcHJvY2Vz
cyBwb29sIHRoYXQgaGFzIGEgcHJvY2VzcyB3ZSBjYW4gdXNlLiAgVGhpcyBsb2dpYyBpcyBpbiAK
KyAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9u
VG9OZXR3b3JrUHJvY2Vzcy4gIEJlY2F1c2Ugd2UgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wg
ZWFjaAorICAgICAgICB0aW1lLCBzZXR0aW5nIHRoZSBjdXN0b20gdXNlciBhZ2VudCB0byB0d28g
ZGlmZmVyZW50IHRoaW5ncyBpbiB0d28gZGlmZmVyZW50IHByb2Nlc3MgcG9vbHMgY2F1c2VzIG9u
bHkgb25lCisgICAgICAgIHRvIGJlIHVzZWQuICBUaGlzIGlzIG5vdCBhIHByb2JsZW0gaW4gcHJh
Y3RpY2UsIHRob3VnaCwgYmVjYXVzZSB0aGUgb25seSBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgdGhl
IFNQSSB0bworICAgICAgICBzZXQgYSBzZXJ2aWNlIHdvcmtlcidzIGN1c3RvbSB1c2VyIGFnZW50
IGlzIFNhZmFyaSwgd2hpY2ggb25seSBoYXMgb25lIHByb2Nlc3MgcG9vbC4gIFRoaXMgdGVzdCBz
dGlsbCB2ZXJpZmllcworICAgICAgICB0aGF0IGEgdXNlciBhZ2VpbnQgaXMgY29ycmVjdGx5IHNl
bnQuCisgICAgICAgIFNpbWlsYXJseSwgdGhlIHRlc3RzIHRoYXQgY291bnQgc2VydmljZSB3b3Jr
ZXIgcHJvY2Vzc2VzIGVpdGhlciBoYXZlIGRpZmZlcmVudCByZXN1bHRzIG9yIG5lZWQgdG8gYmUg
cnVuIHdpdGgKKyAgICAgICAgb25lIHByb2Nlc3MgcG9vbCBwZXIgcGFyZW50IHByb2Nlc3MuICBU
byBrZWVwIHRoZSByZXN1bHRzIHRoZSBzYW1lLCBJIHNlcGFyYXRlZCB0aGUgdGVzdHMgaW50byBk
aWZmZXJlbnQKKyAgICAgICAgVEVTVChTZXJ2aWNlV29ya2VycywgLi4uKSBtYWNyb3Mgd2hpY2gg
YXJlIHJ1biBpbiBzZXBhcmF0ZSBwYXJlbnQgcHJvY2Vzc2VzLgorICAgICAgICBUaGUgdGVzdCBS
ZXN0b3JlRnJvbURpc2tOb25EZWZhdWx0U3RvcmUgbmVlZHMgdG8gdXNlIHRoZSBzYW1lIGRhdGEg
c3RvcmUgZm9yIGJvdGggV0tXZWJWaWV3cyBub3cgYmVjYXVzZSBvdGhlcndpc2UKKyAgICAgICAg
dGhlcmUgd2FzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIHN0YXJ0dXAgb2YgYSBuZXcgbmV0d29y
ayBwcm9jZXNzIHRoYXQgd2Fzbid0IHRoZXJlIGJlZm9yZSBiZWNhdXNlIHdlIHdlcmUgdXNpbmcg
dGhlCisgICAgICAgIHNhbWUgcHJvY2VzcyBwb29sIGFuZCB0aGVyZWZvcmUgdGhlIHNhbWUgbmV0
d29yayBwcm9jZXNzLiAgSSBhZGRlZCBzcGlubmluZyB0aGUgcnVuIGxvb3AgYW5kIHNsZWVwaW5n
IHRvIGJlIGFibGUgdG8KKyAgICAgICAgcmVwcm9kdWNlIHRoZSByYWNlIGNvbmRpdGlvbiBmYWls
dXJlIGFuZCBJIHVzZSB0aGUgc2FtZSBXS1dlYnNpdGVEYXRhU3RvcmUgdG8gdXNlIHRoZSBzYW1l
IG5ldHdvcmsgcHJvY2Vzcywgd2hpY2ggd2FzCisgICAgICAgIHRoZSBpbnRlbnQgb2YgdXNpbmcg
dGhlIHNhbWUgV0tQcm9jZXNzUG9vbCBiZWZvcmUuICBUaGUgdGVzdCBzdGlsbCB0ZXN0cyB0aGF0
IHRoZSByZWdpc3RyYXRpb24gaXMgcmUtdXNlZCB3aGVuIHdlIGFyZQorICAgICAgICBub3QgdXNp
bmcgdGhlIGRlZmF1bHQgZGF0YSBzdG9yZS4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tOgorICAgICAgICAoLVtD
aGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdlYlZpZXc6cnVuSmF2YVNjcmlwdEFsZXJ0UGFu
ZWxXaXRoTWVzc2FnZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSk6Cisg
ICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSk6
CisgICAgICAgIChURVNUKToKKyAgICAgICAgVGhpcyBpcyB0aGUgd2hvbGUgcG9pbnQgb2YgbWUg
ZG9pbmcgdGhpcy4KKyAgICAgICAgSSB0b29rIGEgdGVzdCB0aGF0IHdhcyBmbGFreSBvbmx5IG9u
IGlPUyAoYmVjYXVzZSBvZiBkaWZmZXJlbnQgTlNIVFRQQ29va2llU3RvcmFnZSBzeW5jaW5nIGJl
aGF2aW9yKSBhbmQgbWFkZQorICAgICAgICBpdCBmbGFreSBub3doZXJlIChmaW5nZXJzIGNyb3Nz
ZWQhKSBhbmQgYWRkZWQgYSB0ZXN0IHRoYXQgY29ycmVjdGx5IGhhbmRsZXMgc2Vzc2lvbiBjb29r
aWVzIGxpa2Ugd2UgY291bGQgbm90CisgICAgICAgIGJlZm9yZSB0aGlzIGNoYW5nZS4KKyAgICAg
ICAgSSBhbHNvIHJlLXVzZWQgc29tZSB0ZXN0IGluZnJhc3RydWN0dXJlIGFuZCBtYWRlIGl0IHN0
b3AgdXNpbmcgcHJvY2Vzcy1nbG9iYWwgc3RhdGljIHZhcmlhYmxlcyBmb3IgdGVzdCBzdGF0ZS4K
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFu
ZGxlci1sZWFrcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tOgorICAgICAg
ICAocnVuV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzKToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2JqQy9DdXN0b21Qcm90b2NvbHNUZXN0
Lm1tOgorICAgICAgICAoLVtDbG9zZVdoaWxlU3RhcnRpbmdQcm90b2NvbCBzdGFydExvYWRpbmdd
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnJ1blRlc3QpOgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxl
cjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjpmaW5kQW5kRHVtcFdlYktpdFByb2Nlc3NJZGVudGlmaWVycyk6CisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpuZXR3b3JrUHJvY2Vzc0RpZENyYXNoKToKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dCk6CisgICAgICAgIFdLQ29u
dGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcgaXMg
bm90IG5lZWRlZCwgc28gSSByZW1vdmVkIGl0LgorICAgICAgICBXS0NvbnRleHRTZXRQcmltYXJ5
V2Vic2l0ZURhdGFTdG9yZSBpc24ndCBuZWVkZWQgYW55IG1vcmUgYmVjYXVzZSBXS0NvbnRleHRS
ZWYgKFdlYlByb2Nlc3NQb29sKSBkb2Vzbid0CisgICAgICAgIG93biBhIG5ldHdvcmsgcHJvY2Vz
cyBhbnkgbW9yZSwgc28gaXQgZG9lc24ndCBjYXJlIHdoaWNoIGlzIHRoZSBkZWZhdWx0IFdlYnNp
dGVEYXRhU3RvcmUuCisgICAgICAgIEluIGZhY3QsIHRoZSAiZGVmYXVsdCIgV2Vic2l0ZURhdGFT
dG9yZSBpc24ndCByZWFsbHkgaW1wb3J0YW50IGluIHRoZSBuZXR3b3JrIHByb2Nlc3MgYW55IG1v
cmUuCisKIDIwMjAtMDktMjQgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgog
CiAgICAgICAgIFtyZXN1bHRzLndlYmtpdC5vcmddIERyb3Agb2xkIGFyY2hpdmUgY2h1bmtzCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vz
c0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbQppbmRl
eCA5NzM4OWYwMWZmMmVlOTliNzgzYjBiNTIxMDgwNzRmMWE4MWI2OTgxLi45N2I3MmUwMTZkZWRl
NGEwN2Q0NjUzZjNhOWJjNTJiOGY0ZjMxOTJiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9u
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNz
Q3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQg
PFdlYktpdC9XS1Byb2Nlc3NHcm91cFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nl
c3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNp
bXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTg3LDcgKzg4LDcg
QEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24p
CiAgICAgcGlkX3Qgd2ViVmlldzJQSUQgPSBbd2ViVmlldzIuZ2V0KCkgX3dlYlByb2Nlc3NJZGVu
dGlmaWVyXTsKICAgICBFWFBFQ1RfTkUod2ViVmlldzFQSUQsIHdlYlZpZXcyUElEKTsKIAotICAg
IHBpZF90IGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVyID0gW3Byb2Nlc3NQb29sLmdl
dCgpIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdOworICAgIHBpZF90IGluaXRpYWxOZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZmVyID0gW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9y
ZSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXTsKICAgICBFWFBFQ1RfTkUoaW5pdGlhbE5ldHdv
cmtQcm9jZXNzSWRlbnRpZmlmZXIsIDApOwogICAgIGtpbGwoaW5pdGlhbE5ldHdvcmtQcm9jZXNz
SWRlbnRpZmlmZXIsIFNJR0tJTEwpOwogICAgIFV0aWw6OnJ1bigmbmV0d29ya1Byb2Nlc3NDcmFz
aGVkKTsKQEAgLTk2LDcgKzk3LDcgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzQ3Jhc2hX
aXRoUGVuZGluZ0Nvbm5lY3Rpb24pCiAgICAgW3dlYlZpZXcxLmdldCgpIGxvYWRSZXF1ZXN0OltO
U1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JS
ZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRl
c3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dXTsKICAgICBbd2ViVmlldzEuZ2V0KCkgX3Rlc3Rfd2Fp
dEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOwogCi0gICAgcGlkX3QgcmVsYXVuY2hlZE5ldHdvcmtQ
cm9jZXNzSWRlbnRpZmllciA9IFtwcm9jZXNzUG9vbC5nZXQoKSBfbmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyXTsKKyAgICBwaWRfdCByZWxhdW5jaGVkTmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyID0g
W2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfbmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyXTsKICAgICBFWFBFQ1RfTkUoaW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlmZXIs
IHJlbGF1bmNoZWROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIpOwogICAgIEVYUEVDVF9GQUxTRShu
ZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOwogCkBAIC0xNDYsOCArMTQ3LDggQEAgVEVTVChXZWJLaXQs
IE5ldHdvcmtQcm9jZXNzUmVsYXVuY2hPbkxhdW5jaEZhaWx1cmUpCiAKICAgICAvLyBDb25zdHVj
dGluZyBhIFdlYlZpZXcgc3RhcnRzIGEgbmV0d29yayBwcm9jZXNzIHNvIHRlcm1pbmF0ZSB0aGlz
IG9uZS4gVGhlIHBhZ2UgbG9hZCBiZWxvdyB3aWxsIHRoZW4gcmVxdWVzdCBhIG5ldHdvcmsgcHJv
Y2VzcyBhbmQgd2UKICAgICAvLyBtYWtlIHRoaXMgbmV3IG5ldHdvcmsgcHJvY2VzcyBsYXVuY2gg
Y3Jhc2ggb24gc3RhcnR1cC4KLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKLSAgICBbcHJvY2Vzc1Bvb2wgX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWls
Rm9yVGVzdGluZ107CisgICAgW1dLV2Vic2l0ZURhdGFTdG9yZSBfbWFrZU5leHROZXR3b3JrUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJz
aXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIGRlbGVn
YXRlID0gYWRvcHROUyhbW01vbml0b3JXZWJDb250ZW50Q3Jhc2hOYXZpZ2F0aW9uRGVsZWdhdGUg
YWxsb2NdIGluaXRdKTsKICAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdh
dGUuZ2V0KCldOwpAQCAtMTU4LDcgKzE1OSw3IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vz
c1JlbGF1bmNoT25MYXVuY2hGYWlsdXJlKQogICAgIEVYUEVDVF9UUlVFKG5ldHdvcmtQcm9jZXNz
Q3Jhc2hlZCk7CiAgICAgRVhQRUNUX0ZBTFNFKHdlYlByb2Nlc3NDcmFzaGVkKTsKICAgICBFWFBF
Q1RfR1QoW3dlYlZpZXcgX3dlYlByb2Nlc3NJZGVudGlmaWVyXSwgMCk7Ci0gICAgRVhQRUNUX0dU
KFtwcm9jZXNzUG9vbC5nZXQoKSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXSwgMCk7CisgICAg
RVhQRUNUX0dUKFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQ
cm9jZXNzSWRlbnRpZmllcl0sIDApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJ
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25s
b2FkLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5t
bQppbmRleCBiN2VkOTk5MzlmZDU5ZjIyOGE3ZThiZDc0OTcxMmY1MzY2MDE1NjE2Li4xODE5MTMx
YzlhMGZlYjMwYjFhMmYwY2ZjZDg3YmYyMDQ1ZWJiM2Y0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0KQEAgLTg4OSw5ICs4ODksOSBA
QCB2b2lkIGRvd25sb2FkQXRSYXRlKGRvdWJsZSBkZXNpcmVkS2JwcywgdW5zaWduZWQgc3BlZWRN
dWx0aXBsaWVyLCBBcHBSZXR1cm5zVG9GbwogICAgIHJlY2VpdmVkRGF0YSA9IGZhbHNlOwogICAg
IFV0aWw6OnJ1bigmcmVjZWl2ZWREYXRhKTsKICAgICAvLyBTdGFydCB0aGUgRG93bmxvYWRNb25p
dG9yJ3MgdGltZXIuCi0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9z
eW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOllFU107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRp
b25dLndlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKICAg
ICBpZiAocmV0dXJuVG9Gb3JlZ3JvdW5kID09IEFwcFJldHVybnNUb0ZvcmVncm91bmQ6OlllcykK
LSAgICAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9zeW50aGVzaXpl
QXBwSXNCYWNrZ3JvdW5kOk5PXTsKKyAgICAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndl
YnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9dOwogICAgIGRpZENh
bmNlbCA9IGZhbHNlOwogICAgIFV0aWw6OnJ1bigmZGlkQ2FuY2VsKTsKICAgICB0ZXJtaW5hdGVT
ZXJ2ZXIgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tCmluZGV4IDVjZDdhYmRhMDFkMTk3NDdkY2Vk
NDVhYmVlOTllY2IxYzE0ZDYxNjAuLmQ3N2E2ZmQ5ODc5ZTQzZjcwMTFkZGFmOTJjM2E3OTdmM2Zj
MTM3MzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SURCQ2hlY2twb2ludFdBTC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdl
YktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRl
bnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nl
c3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0
Lmg+CkBAIC04Niw3ICs4Nyw3IEBAIFRFU1QoSW5kZXhlZERCLCBDaGVja3BvaW50c1dBTEF1dG9t
YXRpY2FsbHkpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3Vy
YXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwog
ICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3Nh
Z2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29u
ZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwor
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5T
KFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2
MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVy
eS5tbQppbmRleCBjOGFmMWQyNDNjNGZlYjU4YWM5ODRkYWYxNGQ4MTUzMWE3Y2MzYzczLi5iYmYx
YTE1MjE1ZGMxZmQyOGRmZGRiOWUzNDFiNjRmOWMwMDhmNGM0IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3Zlcnku
bW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0
IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dl
YktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgog
I2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRF
U1QoSW5kZXhlZERCLCBEZWxldGVSZWNvdmVyeSkKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29u
ZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0
aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJv
bGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhh
bmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFT
dG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5jb25z
aXN0ZW50IGRhdGFiYXNlIGZpbGVzIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBOU1VS
TCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJEZWxl
dGVSZWNvdmVyeSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RX
ZWJLaXRBUEkucmVzb3VyY2VzIl07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KaW5kZXggOTVjY2Ew
Y2UyODE2ZmYxYTZhNDU1YWQwYmQyYzhhNGFhNGYyN2ZlZC4uODhhNTNmNjFkOWQ5ODI2NTdiOTY1
ZWY4YTZjZWJhNzkxZWZmMTc1NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbQpAQCAtMzEsNiAr
MzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1w
b3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJL
aXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU4LDcgKzU5LDcgQEAgVEVTVChJbmRleGVkREIs
IEluZGV4VXBncmFkZVRvVjIpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+
IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10g
aW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNj
cmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAK
LSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIENvcHkgdGhlIGluY29uc2lzdGVudCBkYXRh
YmFzZSBmaWxlcyB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5CiAgICAgTlNVUkwgKnVybDEgPSBb
W05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiSW5kZXhVcGdyYWRlIiB3aXRo
RXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJj
ZXMiXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCmluZGV4IGZm
YTVhNzg3OGE0NzMyYjhlYzI0NWM5MDUzZmQxN2VlNTk1NmZhM2QuLjQwM2UwZmZhODIxMjM0NTFj
NDY2ZmVlY2MzMjRmOWM2ZTc2MWQ0M2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9V
cGdyYWRlVG9WMi5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vz
c1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcg
KzU4LDcgQEAgVEVTVChJbmRleGVkREIsIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyKQog
ICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRv
cHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZp
Z3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpo
YW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CiAKICAgICAvLyBDb3B5IGRhdGFiYXNlIGZpbGVzIHdpdGggb2xkIE9iamVjdFN0b3JlSW5mbyBz
Y2hlbWEgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeS4KICAgICBOU1VSTCAqdXJsMSA9IFtbTlNC
dW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJPYmplY3RTdG9yZUluZm9VcGdy
YWRlIiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQ
SS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQpp
bmRleCA2ODc0NTI5ZWJiZjM3ODUxOGQ5M2UwYTA4MjFmNjMwMTJjZmE2ZDVmLi43MzA3N2VjZGZk
MzY1YjUyOTA1M2Q0N2NiYTJhMTRlZDA1MWVkNmVhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRh
YmFzZVByb2Nlc3NLaWxsLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQ
cm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJv
bGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJp
dmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENv
bmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTkyLDcgKzkzLDcg
QEAgVEVTVChJbmRleGVkREIsIERhdGFiYXNlUHJvY2Vzc0tpbGwpCiAgICAgICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICAgICAgaWYgKCFr
aWxsZWREQlByb2Nlc3MgJiYgb3BlblJlcXVlc3RVcGdyYWRlTmVlZGVkKSB7CiAgICAgICAgICAg
ICBraWxsZWREQlByb2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgW2NvbmZpZ3VyYXRpb24uZ2V0
KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICAgICAgICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbQppbmRl
eCA3ZjYyNjQ1ZDk5NjBlZGU5NjBjMDAxYzI3MmI2NTAzOTM5MDExNjMyLi42ZjY3ZGMyN2VkYzNk
Mjc0NWIxNzBlNDgyYmNkOTBlODQ5NGNiOTVhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5t
bQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9s
bGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVl
dC5oPgogI2ltcG9ydCA8d3RmL0RlcXVlLmg+CkBAIC02OSw3ICs3MCw3IEBAIFRFU1QoSW5kZXhl
ZERCLCBJbmRleGVkREJNdWx0aVByb2Nlc3MpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZp
Z3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlv
biBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xs
ZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5k
bGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3Rv
cmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXc+
IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFr
ZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0p
OwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4ZWREQlBlcnNpc3RlbmNlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQppbmRleCBiMzJjZTRhNWY3Mzg2M2FlZGRjYjkx
OTBiNWI0MzcwZTM3NDQzYjVlLi5kNjIyMDMyMmU0NzhkMWRhYzc4ZjA2OTY3YzNiNjQzYmZkNjJm
OWJmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4ZWREQlBlcnNpc3RlbmNlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KQEAgLTc4LDcgKzc4LDcgQEAgVEVTVChJ
bmRleGVkREIsIEluZGV4ZWREQlBlcnNpc3RlbmNlKQogICAgIHdlYlZpZXcgPSBuaWw7CiAKICAg
ICAvLyBUZXJtaW5hdGUgdGhlIG5ldHdvcmsgcHJvY2VzcwotICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwog
CiAgICAgLy8gTWFrZSBhIG5ldyB3ZWIgdmlldyB0byBmaW5pc2ggdGhlIHRlc3QKICAgICB3ZWJW
aWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0
KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAg
LTI2OCw3ICsyNjgsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCVGhpcmRQYXJ0eUZyYW1l
SGFzQWNjZXNzKQogCiAgICAgd2ViVmlldyA9IG5pbDsKICAgICBzZWNvbmRXZWJWaWV3ID0gbmls
OwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gVGhpcmQtcGFydHkgSURCIHN0b3JhZ2Ug
aXMgc3RvcmVkIGluIHRoZSBtZW1vcnkgb2YgbmV0d29yayBwcm9jZXNzLgogICAgIGF1dG8gdGhp
cmRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01h
a2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCld
KTsKQEAgLTM4NSw3ICszODUsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCVGhpcmRQYXJ0
eVdvcmtlckhhc0FjY2VzcykKIAogICAgIHdlYlZpZXcgPSBuaWw7CiAgICAgc2Vjb25kV2ViVmll
dyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3Rv
cmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gdGhpcmRXZWJWaWV3ID0g
YWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAs
IDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBsb2Fk
VGVzdFBhZ2VJbldlYlZpZXcodGhpcmRXZWJWaWV3LmdldCgpLCBAImRhdGFiYXNlIGlzIGNyZWF0
ZWQiKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tCmluZGV4IDhlYzY1ZjBh
M2JhOTM3MzZmZGI0ZjlkZGZlZjc1Y2U2MDAwNWZkMGQuLjUxMGIyNGY1NjlkMjJiZDQwYTdhZGJl
MjVlY2ZkMGVjZmM4YWM3MjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5t
bQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2Vi
S2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC04OCw4ICs4OSw4IEBAIFRFU1QoSW5kZXhlZERC
LCBJbmRleGVkREJTdXNwZW5kSW1taW5lbnRseSkKIAogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3Vs
dChAIkNvbnRpbnVlIik7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBf
c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKLSAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nl
c3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNp
dGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBydW5UZXN0
QW5kQ2hlY2tSZXN1bHQoQCJFeHBlY3RlZCBBYm9ydCBGb3IgU3VzcGVuc2lvbiIpOwogICAgIHJ1
blRlc3RBbmRDaGVja1Jlc3VsdChAIkV4cGVjdGVkIFN1Y2Nlc3MgQWZ0ZXIgUmVzdW1lIik7CkBA
IC0xNTgsOCArMTU5LDggQEAgVEVTVChJbmRleGVkREIsIFN1c3BlbmRJbW1pbmVudGx5Rm9yVGhp
cmRQYXJ0eURhdGFiYXNlcykKICAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzptYWluRnJhbWVT
dHJpbmcgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly93ZWJraXQub3JnIl1d
OwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAImRhdGFiYXNlIGlzIGNyZWF0ZWQiKTsKIAot
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NX
aWxsU3VzcGVuZEltbWluZW50bHldOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQ
b29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5l
dHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAInRy
YW5zYWN0aW9uIGlzIGNvbXBsZXRlZCIpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQpp
bmRleCA1MzY1NDFlM2IwZTVjZGEzYTNiNTUxYzFlODFlOTYzZjU5MmFlYjJmLi5lN2I5OTIyOGNl
ODc2ZTQ0N2U2NDc4MmVmOWQ4N2YyNWFkYzliOWZhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6
ZS5tbQpAQCAtOTUsNyArOTUsNyBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCVGVtcEZpbGVT
aXplKQogCiAgICAgLy8gVGVybWluYXRlIG5ldHdvcmsgcHJvY2VzcyB0byBrZWVwIFdBTCBvbiBk
aXNrLgogICAgIHdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vz
c1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBFWFBF
Q1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6
d2FsRmlsZVBhdGguZ2V0KCkucGF0aF0pOwogICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGZp
bGVBdHRyaWJ1dGVzID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBhdHRyaWJ1dGVz
T2ZJdGVtQXRQYXRoOndhbEZpbGVQYXRoLmdldCgpLnBhdGggZXJyb3I6bmlsXTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVy
c2lzdGVuY2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2Fs
U3RvcmFnZVBlcnNpc3RlbmNlLm1tCmluZGV4IDQxMzNlZTdiM2RhZTQzZWMyMDQ5Y2ZmYzA2M2Mw
ZTQyOWMxN2M1ZWYuLjVmNzkxOTA5NDNjNzcxZTlkOWU0NDJhMGRhMjY2ZmY5YTAzYmEyZjIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9y
YWdlUGVyc2lzdGVuY2UubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9y
dCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0
YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2Vi
S2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Vz
ZXJTdHlsZVNoZWV0Lmg+CkBAIC0xMDksNyArMTEwLDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2Fs
U3RvcmFnZVByb2Nlc3NDcmFzaGVzKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVj
ZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJzZXNzaW9uOnN0b3Jh
Z2UiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0
KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAK
ICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CkBAIC0xNjIsNyArMTYzLDcgQEAgVEVT
VChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVByb2Nlc3NTdXNwZW5kcykKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgRVhQRUNUX1dLX1NU
UkVRKEAidmFsdWUiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCi0gICAgW3Byb2Nlc3NQ
b29sLmdldCgpIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseV07CiAKICAgICByZWFkeVRvQ29udGludWUgPSBmYWxzZTsK
ICAgICBbd2ViVmlldzEgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2luZG93LmxvY2FsU3RvcmFnZS5z
ZXRJdGVtKCdrZXknLCAnbmV3VmFsdWUnKSIgY29tcGxldGlvbkhhbmRsZXI6XihpZCwgTlNFcnJv
ciAqKSB7CkBAIC0xNzcsNyArMTc4LDcgQEAgVEVTVChXS1dlYlZpZXcsIExvY2FsU3RvcmFnZVBy
b2Nlc3NTdXNwZW5kcykKICAgICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJl
YWR5VG9Db250aW51ZSk7CiAgICAgCi0gICAgW3Byb2Nlc3NQb29sLmdldCgpIF9zZW5kTmV0d29y
a1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRh
U3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICByZWNlaXZlZFNjcmlw
dE1lc3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVk
U2NyaXB0TWVzc2FnZSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQppbmRleCBlNjBmODgwMjVkMDkzNzg5ZjY5NTYw
ZDliOTJiMjgyZjA3MTMwYThkLi4wZTIxZjkwOTUwMDE0ZjZjNDkwYjBlYjhlNDYxZWM0YmE4NTBi
YjgxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05l
dHdvcmtQcm9jZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTmV0d29ya1Byb2Nlc3MubW0KQEAgLTI4LDcgKzI4LDcgQEAKICNpbXBvcnQgIkhUVFBTZXJ2
ZXIuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlV0aWxpdGllcy5oIgot
I2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQv
V0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0zNywx
NCArMzcsMTQgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzRW50aXRsZW1lbnRzKQogewog
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246W1tbV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdXSk7CiAgICAgW3dlYlZp
ZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAic2ltcGxlIl07Ci0gICAgV0tQcm9j
ZXNzUG9vbCAqcG9vbCA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sOwotICAg
IGJvb2wgaGFzRW50aXRsZW1lbnQgPSBbcG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVu
dEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Muc3RvcmFnZS5XZWJLaXROZXR3b3JraW5n
U2FuZGJveCJdOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZSAqc3RvcmUgPSBbd2ViVmlldyBjb25m
aWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlOworICAgIGJvb2wgaGFzRW50aXRsZW1lbnQgPSBb
c3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAiY29tLmFwcGxl
LnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0TmV0d29ya2luZ1NhbmRib3giXTsKICNpZiBQTEFURk9S
TShNQUMpICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAgICAgRVhQRUNUX1RSVUUoaGFzRW50
aXRsZW1lbnQpOwogI2Vsc2UKICAgICBFWFBFQ1RfRkFMU0UoaGFzRW50aXRsZW1lbnQpOwogI2Vu
ZGlmCi0gICAgRVhQRUNUX0ZBTFNFKFtwb29sIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50
Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVyZSBjYXNlIl0pOworICAgIEVYUEVDVF9GQUxTRShbc3Rv
cmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAidGVzdCBmYWlsdXJl
IGNhc2UiXSk7CiB9CiAKIFRFU1QoV2ViS2l0LCBIVFRQUmVmZXJlcikKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5v
blBlcnNpc3RlbnREYXRhU3RvcmUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCmluZGV4
IDYwOThlOGRhZDI1MmU1OWVjNDkxMjUwYjQyMTZkM2NkMDkzNmU4ZjcuLjJmOGEyZTMzZmU4NzAz
YmFiMmQ4ZTA1MTA4MzJiZWNkOWQ0ODkzNGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRh
U3RvcmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3
b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbQpAQCAtNzIsNyArNzIsNyBA
QCBzdGF0aWMgdm9pZCBjaGVja1JlY292ZXJ5QWZ0ZXJDcmFzaChXS1dlYnNpdGVEYXRhU3RvcmUg
KmRhdGFTdG9yZSkKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIGRv
bmUgPSBmYWxzZTsKIAotICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgW3dlYlZpZXcg
bG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpzaW1wbGUyXV07CiAgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZp
Z2F0aW9uLm1tCmluZGV4IDk1ZGM5ZDk4ZGYxM2IwNzA1ZTA4MTdkMDU4NzI2NTEyMGMxODhkMjMu
LmRmMzIwZDY0ZGFkYmRkMWVlMjgzZjg2NWMxNDQyM2YzYWM1NTY0YmYgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRp
b24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNz
U3dhcE9uTmF2aWdhdGlvbi5tbQpAQCAtNTM4NSw3ICs1Mzg1LDcgQEAgVEVTVChQcm9jZXNzU3dh
cCwgVXNlUHJld2FybWVkUHJvY2Vzc0FmdGVyVGVybWluYXRpbmdOZXR3b3JrUHJvY2VzcykKIAog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW3Byb2Nlc3NQ
b29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW3dlYlZpZXdDb25maWd1cmF0aW9u
LmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAg
IGF1dG8gd2ViVmlldzIgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246d2ViVmlld0NvbmZpZ3Vy
YXRpb24uZ2V0KCldKTsKICAgICBbd2ViVmlldzIgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVn
YXRlLmdldCgpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQppbmRleCAwZTEwYzM0ZWVj
ODJjNmY2NTkyYmI3YzQyNzRkMGU0NTVlYWYxMWU4Li5hM2FiYTIzMWE5M2IzZDVmMDBhMTkzYzQ3
YzI3Njc4NjRiMzUwNTViIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCkBAIC03MTks
NyArNzE5LDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBOZXR3b3JrUHJvY2Vzc1Jl
c3RhcnQpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAg
IFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
c107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MiA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKQEAgLTc1Miw3ICs3NTIsNyBAQCBURVNU
KFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jZXNzUmVzdGFydCkKIAogICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CiAKICAgICBhdXRvIHdlYlZpZXczID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3Vy
YXRpb24uZ2V0KCldKTsKIApAQCAtMTU1OCwxMCArMTU1OCw4IEBAIFRFU1QoUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcywgTWlncmF0ZURhdGFGcm9tTWlzc2luZ1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RT
YW1lU2l0CiAKIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1h
cnlXaXRoTm9Qcm9jZXNzUG9vbCkKIHsKKyAgICBOU1VSTCAqaXRwUm9vdFVSTCA9IFtOU1VSTCBm
aWxlVVJMV2l0aFBhdGg6W05TVGVtcG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQ
YXRoQ29tcG9uZW50OkAiQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbFRlc3Qi
XSBpc0RpcmVjdG9yeTpZRVNdOwogICAgIGF1dG8gZGVmYXVsdEZpbGVNYW5hZ2VyID0gW05TRmls
ZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1
cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKLSAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tX
S1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3Jl
Q29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwotICAgIE5TVVJMICppdHBSb290VVJMID0gW1tk
YXRhU3RvcmUgX2NvbmZpZ3VyYXRpb25dIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
XTsKICAgICBOU1VSTCAqZmlsZVVSTCA9IFtpdHBSb290VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENv
bXBvbmVudDpAIm9ic2VydmF0aW9ucy5kYiJdOwogICAgIFtkZWZhdWx0RmlsZU1hbmFnZXIgcmVt
b3ZlSXRlbUF0UGF0aDppdHBSb290VVJMLnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfRkFM
U0UoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOml0cFJvb3RVUkwucGF0aF0p
OwpAQCAtMTU3Miw2ICsxNTcwLDEwIEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgQ2Fu
QWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKICAgICBFWFBFQ1RfVFJVRShbZGVm
YXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6bmV3RmlsZVVSTC5wYXRoXSk7CiAgICAg
W2RlZmF1bHRGaWxlTWFuYWdlciBjb3B5SXRlbUF0UGF0aDpuZXdGaWxlVVJMLnBhdGggdG9QYXRo
OmZpbGVVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVDVF9UUlVFKFtkZWZhdWx0RmlsZU1h
bmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpmaWxlVVJMLnBhdGhdKTsKKworICAgIF9XS1dlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tXZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBkYXRhU3Rv
cmVDb25maWd1cmF0aW9uLl9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gaXRwUm9v
dFVSTDsKKyAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2Nd
IF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVh
c2VdOwogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOllF
U107CiAKICAgICBzdGF0aWMgYm9vbCBkb25lRmxhZyA9IGZhbHNlOwpAQCAtMTYzMywxMiArMTYz
NSwxMiBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIFN0b3JlU3VzcGVuc2lvbikKICAg
ICBbd2ViVmlldzIgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOwogCiAgICAgZG9u
ZUZsYWcgPSBmYWxzZTsKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vz
c1ByZXBhcmVUb1N1c3BlbmQ6XnsKKyAgICBbZGF0YVN0b3JlMSBfc2VuZE5ldHdvcmtQcm9jZXNz
UHJlcGFyZVRvU3VzcGVuZDpeewogICAgICAgICBkb25lRmxhZyA9IHRydWU7CiAgICAgfV07CiAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CiAKLSAgICBbc2hhcmVkUHJv
Y2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW2RhdGFTdG9yZTEg
X3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiB9CiAKIEBpbnRlcmZhY2UgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1NjaGVtZUhhbmRsZXIgOiBOU09iamVjdCA8V0tVUkxTY2hlbWVIYW5kbGVy
PgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2
aWNlV29ya2VyQmFzaWMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1NlcnZpY2VXb3JrZXJCYXNpYy5tbQppbmRleCAzNGE0ZjVjNTM4YjliMGU5ZmNiMDUwNzJiMTcw
Mjg4ZTllNGU5ZjhmLi41NDkzZDNkOTI3NThmMjRhNDZlODRiNGI1YWJlYzQ3ODA5NTlmYjVhIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VX
b3JrZXJCYXNpYy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpAQCAtNTU4LDcgKzU1OCw3IEBAIFRFU1QoU2VydmljZVdv
cmtlcnMsIFVzZXJBZ2VudE92ZXJyaWRlKQogCiAgICAgY29uZmlndXJhdGlvbiA9IGFkb3B0TlMo
W1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAKLSAgICBtZXNzYWdlSGFu
ZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0
aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6IEJhciBDdXN0b20gVXNlckFn
ZW50Il0pOworICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1NXVXNlckFnZW50TWVzc2Fn
ZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNzYWdlOkAiTWVzc2FnZSBmcm9tIHdv
cmtlcjogRm9vIEN1c3RvbSBVc2VyQWdlbnQiXSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJD
b250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIu
Z2V0KCkgbmFtZTpAInN3Il07CiAKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0
aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTYzMyw4ICs2MzMsNiBAQCBURVNUKFNlcnZp
Y2VXb3JrZXJzLCBDYWNoZVN0b3JhZ2VSZXN0b3JlRnJvbURpc2spCiAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7CiAKLSAgICBbV0tXZWJzaXRl
RGF0YVN0b3JlIF9kZWxldGVEZWZhdWx0RGF0YVN0b3JlRm9yVGVzdGluZ107Ci0KICAgICBTZXJ2
aWNlV29ya2VyVENQU2VydmVyIHNlcnZlcih7CiAgICAgICAgIHsgInRleHQvaHRtbCIsIG1haW5D
YWNoZVN0b3JhZ2VCeXRlcyB9CiAgICAgfSwgewpAQCAtOTgyLDYgKzk4MCw3IEBAIFRFU1QoU2Vy
dmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRpb24pCiAKICAgICBSZXRhaW5Q
dHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dl
YlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgc2V0Q29uZmlndXJhdGlvbklu
amVjdGVkQnVuZGxlUGF0aChjb25maWd1cmF0aW9uLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8V0tQ
cm9jZXNzUG9vbD4gb3JpZ2luYWxQcm9jZXNzUG9vbCA9IGNvbmZpZ3VyYXRpb24uZ2V0KCkucHJv
Y2Vzc1Bvb2w7CiAKICAgICBkb25lID0gZmFsc2U7CiAKQEAgLTEwMzUsNyArMTAzNCw3IEBAIFRF
U1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRpb24pCiAgICAgZG9u
ZSA9IGZhbHNlOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbG9hZGluZyB0aGUgc2ltcGxlIHBh
Z2UgZGlkIG5vdCBzdGFydCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vzcy4KLSAgICBFWFBFQ1Rf
RVEoMHUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdv
cmtlclByb2Nlc3NDb3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCB3ZWJWaWV3LmdldCgpLmNvbmZp
Z3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwogCiAgICAg
d2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpuZXdDb25maWd1cmF0aW9uLmdldCgp
XSk7CiAgICAgRVhQRUNUX0VRKDJ1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vz
c1Bvb2wuX3dlYlByb2Nlc3NDb3VudElnbm9yaW5nUHJld2FybWVkKTsKQEAgLTEwNDMsOSArMTA0
Miw4IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRpb24p
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7
CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5nIHRoaXMgcGFnZSBkaWQgc3RhcnQgdGhl
IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCiAgICAgRVhQRUNUX0VRKDF1LCB3ZWJWaWV3LmdldCgp
LmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwot
CisgICAgRVhQRUNUX0VRKDF1LCBvcmlnaW5hbFByb2Nlc3NQb29sLmdldCgpLl9zZXJ2aWNlV29y
a2VyUHJvY2Vzc0NvdW50KTsKICAgICBbW2NvbmZpZ3VyYXRpb24gd2Vic2l0ZURhdGFTdG9yZV0g
cmVtb3ZlRGF0YU9mVHlwZXM6W1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxXZWJzaXRlRGF0YVR5cGVz
XSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNvbXBsZXRpb25IYW5kbGVyOl4o
KSB7CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH1dOwpAQCAtMTYxOCwyMSArMTYxNiwzNSBA
QCBzdGF0aWMgc2l6ZV90IGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wgdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgYgogICAgIHJldHVybiB3ZWJWaWV3LmdldCgpLmNvbmZp
Z3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudElnbm9yaW5nUHJld2FybWVkOwog
fQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZkFuZEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIp
CitURVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewogICAg
IGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9vbCBm
aXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNoU2Vy
dmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsICFmaXJz
dExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RFU1QoU2VydmljZVdvcmtlcnMsIEluUHJvY2Vzc1Nl
cnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
ID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQ
RUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykpOwogfQogCi1URVNUKFNlcnZpY2VX
b3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoU2VydmljZVdvcmtl
cikKK1RFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Ro
cm91Z2hPdXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5r
ID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3Mo
IXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGZpcnN0TG9hZEFib3V0QmxhbmspKTsK
K30KKworVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5n
VGhyb3VnaEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0Qmxhbmsg
PSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJzdExvYWRBYm91dEJsYW5rKSk7CiB9
CiAKQEAgLTE4NDcsOCArMTg1OSw4IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFJlc3RvcmVGcm9t
RGlza05vbkRlZmF1bHRTdG9yZSkKICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IGNyZWF0ZURpcmVjdG9yeUF0VVJMOnN3REJQYXRoIHdpdGhJbnRlcm1lZGlhdGVEaXJlY3Rvcmll
czpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfVFJVRShbW05TRmls
ZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0aF0p
OwogCi0gICAgLy8gV2UgcHJvdGVjdCB0aGUgcHJvY2VzcyBwb29sIHNvIHRoYXQgaXQgb3V0bGl2
ZXMgdGhlIFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgUmV0YWluUHRyPFdLUHJvY2Vzc1Bvb2w+IHBy
b3RlY3RlZFByb2Nlc3NQb29sOworICAgIFJldGFpblB0cjxXS1dlYnNpdGVEYXRhU3RvcmU+IHBy
b3RlY3RlZFdlYnNpdGVEYXRhU3RvcmU7CiAKICAgICBTZXJ2aWNlV29ya2VyVENQU2VydmVyIHNl
cnZlcih7CiAgICAgICAgIHsgInRleHQvaHRtbCIsIG1haW5SZWdpc3RlcmluZ1dvcmtlckJ5dGVz
IH0sCkBAIC0xODcxLDYgKzE4ODMsNyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBSZXN0b3JlRnJv
bURpc2tOb25EZWZhdWx0U3RvcmUpCiAKICAgICAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhb
W1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAw
KSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICAgICAgcHJvdGVjdGVk
UHJvY2Vzc1Bvb2wgPSB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2w7Cisg
ICAgICAgIHByb3RlY3RlZFdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJWaWV3LmdldCgpLmNvbmZpZ3Vy
YXRpb24ud2Vic2l0ZURhdGFTdG9yZTsKIAogICAgICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpz
ZXJ2ZXIucmVxdWVzdCgpXTsKIApAQCAtMTg4MCwxMyArMTg5MywxNSBAQCBURVNUKFNlcnZpY2VX
b3JrZXJzLCBSZXN0b3JlRnJvbURpc2tOb25EZWZhdWx0U3RvcmUpCiAgICAgICAgIFt3ZWJWaWV3
LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
XTsKICAgICB9CiAKKyAgICAvLyBNYWtlIHVzIG1vcmUgbGlrZWx5IHRvIGxvc2UgYW55IHJhY2Vz
IHdpdGggc2VydmljZSB3b3JrZXIgaW5pdGlhbGl6YXRpb24uCisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6c3BpblJ1bkxvb3AoMTApOworICAgIHVzbGVlcCgxMDAwMCk7CisgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMTApOworCiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAg
ICAgICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0
aW9uIGFsbG9jXSBpbml0XSk7CiAKLSAgICAgICAgYXV0byB3ZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxv
Y10gaW5pdF0pOwotICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS5f
c2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IHN3REJQYXRoOwotICAgICAgICBh
dXRvIG5vbkRlZmF1bHREYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFs
bG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9u
LmdldCgpXSk7Ci0gICAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSA9
IG5vbkRlZmF1bHREYXRhU3RvcmUuZ2V0KCk7CisgICAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0KCku
d2Vic2l0ZURhdGFTdG9yZSA9IHByb3RlY3RlZFdlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7CiAKICAg
ICAgICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV01lc3NhZ2VIYW5kbGVyRm9y
UmVzdG9yZUZyb21EaXNrVGVzdCBhbGxvY10gaW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJQQVNT
OiBSZWdpc3RyYXRpb24gYWxyZWFkeSBoYXMgYW4gYWN0aXZlIHdvcmtlciJdKTsKICAgICAgICAg
W1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhh
bmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07CkBAIC0xOTQ0LDExICsxOTU5
LDExIEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFN1c3BlbmROZXR3b3JrUHJvY2VzcykKIAogICAg
IEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0
UGF0aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAgICBbIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlv
bi5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsK
KyAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3NlbmRO
ZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CiAKICAgICBFWFBFQ1RfVFJVRShb
W05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6c3dEQlBhdGgu
cGF0aF0pOwogCi0gICAgWyB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wg
X3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW3dlYlZpZXcuZ2V0KCkuY29uZmln
dXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwog
CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6c2VydmVyLnJlcXVlc3QoKV07CiAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCmluZGV4IGEzNWYw
NTM1MGFhYjRiNDJmMzZjNDZhZWNkZWVlZTZjZTU0NGVmODYuLjMzNzYwOTJhMTk1YjUxMmRhNjdj
NDk2ZTQ1MjE3YjkxNGZlMmE1NzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQpAQCAtNDc5LDggKzQ3
OSw2IEBAIHN0YXRpYyBib29sIGZpbmlzaGVkOwogfQogQGVuZAogCi0vLyBGSVhNRTogb24gaU9T
LCBVSSBwcm9jZXNzIHNob3VsZCBiZSB1c2luZyB0aGUgc2FtZSBjb29raWUgZmlsZSBhcyB0aGUg
bmV0d29yayBwcm9jZXNzIGZvciBkZWZhdWx0IHNlc3Npb24uCi0jaWYgUExBVEZPUk0oTUFDKQog
ZW51bSBjbGFzcyBTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyB7IE5vLCBZZXMgfTsKIHZv
aWQgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJv
Y2Vzc1ByZXdhcm1pbmcgc2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcpCiB7CkBAIC01ODks
MjAgKzU4Nyw2NiBAQCBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xX
aXRoUHJld2FybWluZykKICAgICBydW5XS0hUVFBDb29raWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9v
bChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZzo6WWVzKTsKIH0KIAotI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKLQogQGludGVyZmFjZSBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIDog
TlNPYmplY3QgPFdLVUlEZWxlZ2F0ZT4KKy0gKE5TU3RyaW5nICopYWxlcnRDb29raWVIVE1MOwor
LSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZTsKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIENo
ZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUKK0BpbXBsZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25D
b29raWVVSURlbGVnYXRlIHsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9tZXNzYWdlOworfQor
CiAtICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2YVNjcmlwdEFsZXJ0
UGFuZWxXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6KFdL
RnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBs
ZXRpb25IYW5kbGVyCiB7Ci0gICAgRVhQRUNUX1NUUkVRKCJTZXNzaW9uQ29va2llTmFtZT1Db29r
aWVWYWx1ZSIsIG1lc3NhZ2UuVVRGOFN0cmluZyk7CisgICAgX21lc3NhZ2UgPSBtZXNzYWdlOwog
ICAgIGZpbmlzaGVkID0gdHJ1ZTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQorCistIChO
U1N0cmluZyAqKXdhaXRGb3JNZXNzYWdlCit7CisgICAgd2hpbGUgKCFfbWVzc2FnZSkKKyAgICAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAgICByZXR1cm4gX21lc3Nh
Z2UuYXV0b3JlbGVhc2UoKTsKK30KKworLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUwKK3sK
KyAgICByZXR1cm4gQCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0
KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkgKyspIHsgY29va2ll
c1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgpOyBhbGVydChjb29raWVz
LmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Cit9CisKIEBlbmQKIAorVEVTVChXZWJLaXQsIFdLSFRU
UENvb2tpZVN0b3JlTXVsdGlwbGVWaWV3cykKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3
MSA9IFtbVGVzdFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzEgc3lu
Y2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAic3RhcnQgbmV0d29yayBwcm9jZXNzIl07CisKKyAg
ICBOU0hUVFBDb29raWUgKnNlc3Npb25Db29raWUgPSBbTlNIVFRQQ29va2llIGNvb2tpZVdpdGhQ
cm9wZXJ0aWVzOkB7CisgICAgICAgIE5TSFRUUENvb2tpZVBhdGg6IEAiLyIsCisgICAgICAgIE5T
SFRUUENvb2tpZU5hbWU6IEAiU2Vzc2lvbkNvb2tpZU5hbWUiLAorICAgICAgICBOU0hUVFBDb29r
aWVWYWx1ZTogQCJDb29raWVWYWx1ZSIsCisgICAgICAgIE5TSFRUUENvb2tpZURvbWFpbjogQCIx
MjcuMC4wLjEiLAorICAgIH1dOworCisgICAgX19ibG9jayBib29sIHNldENvb2tpZURvbmUgPSBm
YWxzZTsKKyAgICBbd2ViVmlldzEuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlLmh0dHBD
b29raWVTdG9yZSBzZXRDb29raWU6c2Vzc2lvbkNvb2tpZSBjb21wbGV0aW9uSGFuZGxlcjpeewor
ICAgICAgICBzZXRDb29raWVEb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJnNldENvb2tpZURvbmUpOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0
TlMoW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgbmV3XSk7CisgICAgW3dlYlZpZXcxIHNl
dFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcxIGxvYWRIVE1MU3Ry
aW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJp
bmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUg
d2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKKworICAg
IFRlc3RXS1dlYlZpZXcgKndlYlZpZXcyID0gW1tUZXN0V0tXZWJWaWV3IG5ld10gYXV0b3JlbGVh
c2VdOworICAgIFt3ZWJWaWV3MiBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBb
d2ViVmlldzIgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVS
TDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNU
X1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1D
b29raWVWYWx1ZSIpOworfQorCiBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vz
c1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQogewogICAgIFJldGFpblB0cjxXS1dlYnNpdGVEYXRhU3Rv
cmU+IGVwaGVtZXJhbFN0b3JlV2l0aENvb2tpZXMgPSBbV0tXZWJzaXRlRGF0YVN0b3JlIG5vblBl
cnNpc3RlbnREYXRhU3RvcmVdOwpAQCAtNjI3LDkgKzY3MSw4IEBAIFRFU1QoV0tIVFRQQ29va2ll
U3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Npb24pCiAgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7CiAgICAgZmluaXNoZWQgPSBmYWxzZTsKICAgICAK
LSAgICBOU1N0cmluZyAqYWxlcnRDb29raWVIVE1MID0gQCI8c2NyaXB0PnZhciBjb29raWVzID0g
ZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5s
ZW5ndGg7IGkgKyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMu
c29ydCgpOyBhbGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Ci0gICAgW3dlYlZp
ZXcgbG9hZEhUTUxTdHJpbmc6YWxlcnRDb29raWVIVE1MIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhT
dHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZmluaXNoZWQpOworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVy
dENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAu
MC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAi
U2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKIH0KIAogc3RhdGljIGJvb2wgYXJlQ29v
a2llc0VxdWFsKE5TSFRUUENvb2tpZSAqZmlyc3QsIE5TSFRUUENvb2tpZSAqc2Vjb25kKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVt
ZUhhbmRsZXItbGVha3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbQppbmRleCBhYzdkZTQxNTEyYzQ1MTM4ZWM1ZTRj
MDllNTExNWQxNmNkMjNiMjJlLi5hYzE2NTM1ZGZkOTM5OTlkMmVjNTBkY2ZkNzFjM2E1NmQxMTNl
YzdhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dL
VVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbQpAQCAtMzUsNiArMzUsNyBA
QAogI2ltcG9ydCA8V2ViS2l0L1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
V2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0xNTIsNyArMTUzLDcgQEAgVEVTVChVUkxT
Y2hlbWVIYW5kbGVyLCBMZWFrczMpCiAKICAgICBydW5VbnRpbFRhc2tzSW5GbGlnaHQoMik7CiAK
LSAgICBbd2ViVmlldzEuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3MS5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNp
dGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJ1blVudGlsVGFz
a3NJbkZsaWdodCgwKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0K
aW5kZXggOTJjZjNhNjE5OGE1YjlkMTQ1NDQ5MDVkYjllOTQ4ZjExYzcyNTZkZS4uM2IxMzFmN2Ni
ODYwYWU4MDFiOTIzNTU1M2Q1MGZiN2ExNmMyNzRkMSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0
b3JlQ3VzdG9tUGF0aHMubW0KQEAgLTI0NCw3ICsyNDQsNyBAQCBzdGF0aWMgdm9pZCBydW5XZWJz
aXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMoU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hv
dWxkRQogICAgIC8vIE5vdywgd2l0aCBicmFuZCBuZXcgV0tXZWJzaXRlRGF0YVN0b3JlcyBwb2lu
dGluZyBhdCB0aGUgc2FtZSBjdXN0b20gY29va2llIHN0b3JhZ2UgbG9jYXRpb24sCiAgICAgLy8g
aW4gbmV3bHkgZmlyZWQgdXAgTmV0d29ya1Byb2Nlc3NlcywgdmVyaWZ5IHRoYXQgdGhlIGZldGNo
IGFuZCBkZWxldGUgQVBJcyB3b3JrIGFzIGV4cGVjdGVkLgogCi0gICAgW3Byb2Nlc3NQb29sIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2RhdGFTdG9yZSBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOwogICAgIGF1dG8gbmV3Q3VzdG9tRGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vi
c2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0
b3JlQ29uZmlndXJhdGlvbi5nZXQoKV0pOwogCiAgICAgW25ld0N1c3RvbURhdGFTdG9yZSBmZXRj
aERhdGFSZWNvcmRzT2ZUeXBlczpbTlNTZXQgc2V0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5
cGVDb29raWVzLCBuaWxdIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNBcnJheTxXS1dlYnNpdGVEYXRh
UmVjb3JkICo+ICogcmVjb3JkcykgewpAQCAtMjU1LDcgKzI1NSw3IEBAIHN0YXRpYyB2b2lkIHJ1
bldlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocyhTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWlu
ZyBzaG91bGRFCiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogCi0gICAgW3Byb2Nl
c3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2RhdGFTdG9yZSBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFkb3B0TlMoW1tX
S1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0ZURh
dGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21EYXRhU3RvcmUg
cmVtb3ZlRGF0YU9mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldLV2Vic2l0ZURhdGFUeXBl
Q29va2llcywgbmlsXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNvbXBsZXRp
b25IYW5kbGVyOl4gewpAQCAtMzg1LDExICszODUsMTAgQEAgVEVTVChXZWJLaXQsIEN1c3RvbURh
dGFTdG9yZURlc3Ryb3lXaGlsZUZldGNoaW5nTmV0d29ya1Byb2Nlc3NEYXRhKQogCiAgICAgICAg
IC8vIFRlcm1pbmF0ZSB0aGUgbmV0d29yayBwcm9jZXNzIHdoaWxlIGEgcXVlcnkgaXMgcGVuZGlu
Zy4KICAgICAgICAgYXV0byogYWxsUHJvY2Vzc1Bvb2xzID0gW1dLUHJvY2Vzc1Bvb2wgX2FsbFBy
b2Nlc3NQb29sc0ZvclRlc3RpbmddOwotICAgICAgICBBU1NFUlRfRVEoMVUsIFthbGxQcm9jZXNz
UG9vbHMgY291bnRdKTsKLSAgICAgICAgYXV0byogcHJvY2Vzc1Bvb2wgPSBhbGxQcm9jZXNzUG9v
bHNbMF07Ci0gICAgICAgIHdoaWxlICghW3Byb2Nlc3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50
aWZpZXJdKQorICAgICAgICBBU1NFUlRfRVEoMFUsIFthbGxQcm9jZXNzUG9vbHMgY291bnRdKTsK
KyAgICAgICAgd2hpbGUgKCFbZGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKQog
ICAgICAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c2xlZXAoMC4wMSk7Ci0gICAgICAgIGtp
bGwoW3Byb2Nlc3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCBTSUdLSUxMKTsKKyAg
ICAgICAga2lsbChbZGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCBTSUdLSUxM
KTsKICAgICAgICAgYWxsUHJvY2Vzc1Bvb2xzID0gbmlsOwogICAgICAgICBkYXRhU3RvcmUgPSBu
aWw7CiAgICAgfQpAQCAtNDY1LDcgKzQ2NCw5IEBAIFRFU1QoV2ViS2l0LCBBbHRlcm5hdGl2ZVNl
cnZpY2VzRGVmYXVsdERpcmVjdG9yeUNyZWF0aW9uKQogICAgIAogICAgIFtbTlNVc2VyRGVmYXVs
dHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEJv
b2w6WUVTXSBmb3JLZXk6a2V5XTsKIAotICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcyID0gW1tb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgIFdLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3
XSBhdXRvcmVsZWFzZV07CisgICAgY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlID0gW1tb
V0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOltbW19XS1dl
YnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV1dIGF1
dG9yZWxlYXNlXTsKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CiAgICAgW3dlYlZpZXcyIHN5bmNo
cm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IGF1eGlsaWFyeSBwcm9jZXNzZXMiIGJhc2VV
Ukw6bmlsXTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdl
cl0gZmlsZUV4aXN0c0F0UGF0aDpkZWZhdWx0RGlyZWN0b3J5LnBhdGhdKTsKQEAgLTUzOSw3ICs1
NDAsNyBAQCBURVNUKFdlYktpdCwgRG9Mb2FkV2l0aE5vbkRlZmF1bHREYXRhU3RvcmVBZnRlclRl
cm1pbmF0aW5nTmV0d29ya1Byb2Nlc3MpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGlu
UnVuTG9vcCgxKTsKIAotICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9v
bCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5n
ZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBy
ZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5k
bGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRp
cmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOwogICAgIFt3ZWJWaWV3IGxvYWRS
ZXF1ZXN0OnJlcXVlc3RdOwpAQCAtODU3LDcgKzg1OCw3IEBAIFRFU1QoV2ViS2l0LCBNZWRpYUNh
Y2hlKQogICAgIEVYUEVDVF9GQUxTRShlcnJvcik7CiAKICAgICBkb25lID0gdHJ1ZTsKLSAgICBb
W3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKKyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFBh
dGg6cGF0aCBlcnJvcjomZXJyb3JdOwogICAgIEVYUEVDVF9GQUxTRShlcnJvcik7CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdE9iakMvQ3VzdG9tUHJvdG9jb2xz
VGVzdC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2JqQy9DdXN0b21Qcm90
b2NvbHNUZXN0Lm1tCmluZGV4IDIyZTFhMGE5ZThlMjY4MDQ1ZTZiMTdjMzA2YjAwMTRkNWJjOTEy
NjguLjdiODQ3OGI1OTc5ZmE3NGI5Y2Q1OWQwNjJlYWRkMGQzYzUxNTFmZDcgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2JqQy9DdXN0b21Qcm90b2NvbHNUZXN0
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2JqQy9DdXN0b21Qcm90
b2NvbHNUZXN0Lm1tCkBAIC0zNCw2ICszNCw4IEBACiAjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
ICNpbXBvcnQgPFdlYktpdC9XS0NvbnRleHRQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQ
cm9jZXNzR3JvdXBQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tWaWV3UHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oPgogI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgogCiBzdGF0aWMgYm9vbCB0ZXN0RmluaXNoZWQ7CkBAIC03Miw2ICs3NCw4IEBA
IHN0YXRpYyBXS1Byb2Nlc3NHcm91cCAqcHJvY2Vzc0dyb3VwKCkKICAgICByZXR1cm4gcHJvY2Vz
c0dyb3VwOwogfQogCitzdGF0aWMgUmV0YWluUHRyPFdLVmlldz4gd2tWaWV3OworCiBAaW50ZXJm
YWNlIENsb3NlV2hpbGVTdGFydGluZ1Byb3RvY29sIDogVGVzdFByb3RvY29sCiBAZW5kCiAKQEAg
LTg5LDcgKzkzLDcgQEAgc3RhdGljIFdLUHJvY2Vzc0dyb3VwICpwcm9jZXNzR3JvdXAoKQogICAg
ICAgICB9OwogICAgICAgICBXS0NvbnRleHRTZXRDbGllbnQoW3Byb2Nlc3NHcm91cCgpIF9jb250
ZXh0UmVmXSwgJmNsaWVudC5iYXNlKTsKIAotICAgICAgICBraWxsKFdLQ29udGV4dEdldE5ldHdv
cmtQcm9jZXNzSWRlbnRpZmllcihbcHJvY2Vzc0dyb3VwKCkgX2NvbnRleHRSZWZdKSwgU0lHS0lM
TCk7CisgICAgICAgIGtpbGwoV0tXZWJzaXRlRGF0YVN0b3JlR2V0TmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKFdLUGFnZUdldFdlYnNpdGVEYXRhU3RvcmUoW3drVmlldyBwYWdlUmVmXSkpLCBTSUdL
SUxMKTsKICAgICAgICAgW3NlbGYuY2xpZW50IFVSTFByb3RvY29sOnNlbGYgZGlkRmFpbFdpdGhF
cnJvcjpbTlNFcnJvciBlcnJvcldpdGhEb21haW46TlNDb2NvYUVycm9yRG9tYWluIGNvZGU6MCB1
c2VySW5mbzpuaWxdXTsKICAgICB9KTsKIH0KQEAgLTE0Miw3ICsxNDYsNyBAQCBuYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSSB7CiBzdGF0aWMgdm9pZCBydW5UZXN0KCkKIHsKICAgICBSZXRhaW5QdHI8
V0tCcm93c2luZ0NvbnRleHRHcm91cD4gYnJvd3NpbmdDb250ZXh0R3JvdXAgPSBhZG9wdE5TKFtb
V0tCcm93c2luZ0NvbnRleHRHcm91cCBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOkAiVGVzdElk
ZW50aWZpZXIiXSk7Ci0gICAgUmV0YWluUHRyPFdLVmlldz4gd2tWaWV3ID0gYWRvcHROUyhbW1dL
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBwcm9j
ZXNzR3JvdXA6cHJvY2Vzc0dyb3VwKCkgYnJvd3NpbmdDb250ZXh0R3JvdXA6YnJvd3NpbmdDb250
ZXh0R3JvdXAuZ2V0KCldKTsKKyAgICB3a1ZpZXcgPSBhZG9wdE5TKFtbV0tWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIHByb2Nlc3NHcm91cDpwcm9j
ZXNzR3JvdXAoKSBicm93c2luZ0NvbnRleHRHcm91cDpicm93c2luZ0NvbnRleHRHcm91cC5nZXQo
KV0pOwogICAgIFJldGFpblB0cjxDdXN0b21Qcm90b2NvbHNMb2FkRGVsZWdhdGU+IGxvYWREZWxl
Z2F0ZSA9IGFkb3B0TlMoW1tDdXN0b21Qcm90b2NvbHNMb2FkRGVsZWdhdGUgYWxsb2NdIGluaXRd
KTsKICAgICBbd2tWaWV3IGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJdLmxvYWREZWxlZ2F0ZSA9
IGxvYWREZWxlZ2F0ZS5nZXQoKTsKICAgICBbW3drVmlldyBicm93c2luZ0NvbnRleHRDb250cm9s
bGVyXSBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxX
aXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUA6Ly9yZWRpcmVjdD90ZXN0
IiwgW1Rlc3RQcm90b2NvbCBzY2hlbWVdXV1dXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5jcHAKaW5kZXggMTM0NWM0MmMxMWU2MmRjMDg4YzZmMmQzOGI5OWIwOTM1NjRl
MDEzOC4uYWM1YWY4NzBmZDFjYzM5N2M0NDUyYTM4YjhhMGFlOTUzMTc2YmYyMCAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAgLTEwNjIsOCArMTA2Miw2IEBA
IGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3Qg
VGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAKICAgICByZXNldFF1b3RhKCk7CiAKLSAgICBXS0Nv
bnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKHBs
YXRmb3JtQ29udGV4dCgpLCB0cnVlKTsKLQogICAgIFdLQ29udGV4dENsZWFyQ3VycmVudE1vZGlm
aWVyU3RhdGVGb3JUZXN0aW5nKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCkp
OwogCiAgICAgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpLCBmYWxzZSk7CkBAIC0xMjM4LDcgKzEy
MzYsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpmaW5kQW5kRHVtcFdlYktpdFByb2Nlc3NJZGVu
dGlmaWVycygpCiAgICAgZHVtcFJlc3BvbnNlKG1ha2VTdHJpbmcoVGVzdENvbnRyb2xsZXI6Ondl
YlByb2Nlc3NOYW1lKCksICI6ICIsCiAgICAgICAgIFdLUGFnZUdldFByb2Nlc3NJZGVudGlmaWVy
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCkpLCAnXG4n
LAogICAgICAgICBUZXN0Q29udHJvbGxlcjo6bmV0d29ya1Byb2Nlc3NOYW1lKCksICI6ICIsCi0g
ICAgICAgIFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihtX2NvbnRleHQuZ2V0
KCkpLCAnXG4nKSk7CisgICAgICAgIFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNz
SWRlbnRpZmllcih3ZWJzaXRlRGF0YVN0b3JlKCkpLCAnXG4nKSk7CiAjZWxzZQogICAgIGR1bXBS
ZXNwb25zZSgiXG4iX3MpOwogI2VuZGlmCkBAIC0yMjk4LDcgKzIyOTYsNyBAQCBXS1JldGFpblB0
cjxXS1R5cGVSZWY+IFRlc3RDb250cm9sbGVyOjpnZXRJbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0
aW9uVXNlckRhdGEoKQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpuZXR3b3JrUHJvY2Vzc0RpZENy
YXNoKCkKIHsKLSAgICBwaWRfdCBwaWQgPSBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50
aWZpZXIobV9jb250ZXh0LmdldCgpKTsKKyAgICBwaWRfdCBwaWQgPSBXS1dlYnNpdGVEYXRhU3Rv
cmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIod2Vic2l0ZURhdGFTdG9yZSgpKTsKICAgICBm
cHJpbnRmKHN0ZGVyciwgIiNDUkFTSEVEIC0gJXMgKHBpZCAlbGQpXG4iLCBuZXR3b3JrUHJvY2Vz
c05hbWUoKSwgc3RhdGljX2Nhc3Q8bG9uZz4ocGlkKSk7CiAgICAgZXhpdCgxKTsKIH0KQEAgLTMx
MzcsNyArMzEzNSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldElnbm9yZXNWaWV3cG9ydFNj
YWxlTGltaXRzKGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pCiAKIHZvaWQgVGVzdENvbnRy
b2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKLSAgICBXS0NvbnRleHRUZXJtaW5h
dGVOZXR3b3JrUHJvY2VzcyhwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgV0tXZWJzaXRlRGF0YVN0
b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3Mod2Vic2l0ZURhdGFTdG9yZSgpKTsKIH0KIAogdm9p
ZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdvcmtlcnMoKQpAQCAtMzE2OCw5ICsz
MTY2LDggQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVP
dGhlclBhZ2UoUGxhdGZvcm1XZWJWaWV3KiBwYXJlbnQKICAgICByZXR1cm4gbmV3IFBsYXRmb3Jt
V2ViVmlldyhjb25maWd1cmF0aW9uLCBvcHRpb25zKTsKIH0KIAotV0tDb250ZXh0UmVmIFRlc3RD
b250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdL
Q29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29udGV4dENvbmZpZ3VyYXRpb24pCitXS0NvbnRleHRS
ZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0NvbnRleHRSZWYgY29u
dGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZikKIHsKLSAgICBXS0NvbnRleHRTZXRQcmlt
YXJ5V2Vic2l0ZURhdGFTdG9yZShjb250ZXh0LCBkZWZhdWx0V2Vic2l0ZURhdGFTdG9yZSgpKTsK
ICAgICByZXR1cm4gY29udGV4dDsKIH0KIAo=
</data>
<flag name="review"
          id="425400"
          type_id="1"
          status="+"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409981</attachid>
            <date>2020-09-29 03:47:36 -0700</date>
            <delta_ts>2020-09-29 11:02:21 -0700</delta_ts>
            <desc>Rebased patch</desc>
            <filename>wk2-network-process-data-store.diff</filename>
            <type>text/plain</type>
            <size>364083</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNTQ0OWQ1NTNiMjcyLi4yNTBmMGE4MTk1ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNDE4IEBACisyMDIwLTA5LTI3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBm
cm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVEYXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjA0MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IEJyYWR5IEVpZHNvbi4KKworICAgICAgICBUaGlzIHBhdGNoIG1vdmVzIHRoZSB0aGluZ3Mg
b24gV2ViUHJvY2Vzc1Bvb2wgYXNzb2NpYXRlZCB3aXRoIE5ldHdvcmtQcm9jZXNzUHJveHkgb3du
ZXJzaGlwIGFuZCBtb3ZlcyB0aGVtCisgICAgICAgIHRvIFdlYnNpdGVEYXRhU3RvcmUuICBJdCdz
IHByZXR0eSBtZWNoYW5pY2FsLCBidXQgaXQgcmVhY2hlcyBpdHMgZmluZ2VycyBpbnRvIGEgbG90
IG9mIHRoaW5ncy4gIFNvbWUgY29tbWVudHMKKyAgICAgICAgb24gaW50ZXJlc3RpbmcgcGFydHMg
YXJlIGJlbG93LgorCisgICAgICAgIFdoeSBhbSBJIGRvaW5nIHRoaXM/ICBJJ20gZ2xhZCB5b3Ug
YXNrZWQuCisKKyAgICAgICAgV0tXZWJWaWV3IGhhZCBhIGZ1bmRhbWVudGFsIGNvb2tpZSBwcm9i
bGVtIGJlZm9yZSB0aGlzIGNoYW5nZS4gIEl0IGhhZCBhIFdLV2Vic2l0ZURhdGFTdG9yZSB0aGF0
IGNvdWxkIHBvaW50IHRvIGEgY29va2llIHN0b3JlIG9uIGRpc2sKKyAgICAgICAgdGhhdCBjb3Vs
ZCBiZSB1c2VkIGluIG11bHRpcGxlIG5ldHdvcmsgcHJvY2Vzc2VzIGF0IHRoZSBzYW1lIHRpbWUu
ICBUaGlzIGxlZCB0byBwcm9ibGVtcyB3aXRoIGNvb2tpZXMgYmVpbmcgcmVjZWl2ZWQgb3ZlciB0
aGUgbmV0d29yaworICAgICAgICBpbiB0aG9zZSBkaWZmZXJlbnQgcHJvY2Vzc2VzIGJlaW5nIHVu
YWJsZSB0byBiZSBzaGFyZWQgdW50aWwgdGhleSB3ZXJlIHdyaXR0ZW4gdG8gZGlzaywgc29tZXRo
aW5nIHRoYXQgZG9lcyBub3QgaGFwcGVuIGltbWVkaWF0ZWx5LCBlc3BlY2lhbGx5CisgICAgICAg
IG9uIGlPUy4gIFRoaXMgcHJvYmxlbSBpcyBldmVuIHdvcnNlIHdpdGggc2Vzc2lvbiBjb29raWVz
LCB3aGljaCBzaG91bGQgYmUga2VwdCBpbiBtZW1vcnkgYW5kIG5ldmVyIGJlIHdyaXR0ZW4gdG8g
ZGlzay4gIFRob3NlIHByb2Nlc3NlcworICAgICAgICBkaWQgbm90IHVzZSBzaGFyZWQgbWVtb3J5
IHRvIHNoYXJlIHRoZSBjb29raWVzLiAgVGhleSBqdXN0IGRpZG4ndCBzaGFyZSB0aGVtLCB3aGlj
aCBsZWQgdG8gY29va2llIGluY29ycmVjdG5lc3MuICBUaGlzIHdhcyB1bmZvcnR1bmF0ZWx5Cisg
ICAgICAgIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaWYgeW91IGNhbGwgW1tXS1dlYlZpZXcg
YWxsb2NdIGluaXRdIG1vcmUgdGhhbiBvbmNlLCB3aGljaCBtYW55IGRldmVsb3BlcnMgZG8uICBU
aGVyZSB3YXMgYWxzbyBvY2Nhc2lvbmFsIGNvb2tpZQorICAgICAgICBjb3JydXB0aW9uIGFuZCBs
b3NzIGZyb20gbXVsdGlwbGUgcHJvY2Vzc2VzIHdyaXRpbmcgY29va2llcyB0byB0aGUgc2FtZSBm
aWxlLiAgQWxsIHRoZXNlIHByb2JsZW1zIGNhbiBiZSB3b3JrZWQgYXJvdW5kIGJ5IGRvaW5nIHdo
YXQgU2FmYXJpIGRvZXM6CisgICAgICAgIG1hbnVhbGx5IHNldHRpbmcgdGhlIFdLUHJvY2Vzc1Bv
b2wgb2YgYWxsIFdLV2ViVmlld0NvbmZpZ3VyYXRpb25zIHRvIHRoZSBzYW1lIHByb2Nlc3MgcG9v
bCB0byBvbmx5IHVzZSBvbmUgbmV0d29yayBwcm9jZXNzLiAgVGhpcyBpcyBub3QgaW50dWl0aXZl
CisgICAgICAgIG9yIHdlbGwgZG9jdW1lbnRlZCwgYW5kIGV2ZW4gdGhvdWdoIEkgaGF2ZSBzcGVu
dCB0aGUgbWFqb3JpdHkgb2YgV1dEQyBsYWJzIGZvciB0aGUgbGFzdCAzIHllYXJzIHRlbGxpbmcg
ZGV2ZWxvcGVycyB0byBkbyBpdCwgbW9zdCBkZXZlbG9wZXJzIGRvIG5vdC4KKyAgICAgICAgVGhl
IGRlZmF1bHQgYmVoYXZpb3Igc2hvdWxkIG5vdCBsZWFkIHRvIGNvb2tpZSBpbmNvcnJlY3RuZXNz
LCBjb3JydXB0aW9uLCBvciBsb3NzLiAgVGhpcyBhY2NvbXBsaXNoZXMgdGhhdC4KKworICAgICAg
ICBBIGJpZ2dlciBwcm9ibGVtIHRoYXQgY2FuJ3QgcmVhbGx5IGJlIHdvcmtlZCBhcm91bmQgd2Vs
bCBpcyB3aGF0IHdlIHdlcmUgZG9pbmcgaW4gb3VyIFdLSFRUUENvb2tpZVN0b3JlIEFQSS4gIE1h
bnkgZGV2ZWxvcGVycyBjYWxsIHNldENvb2tpZTpjb21wbGV0aW9uSGFuZGxlcjoKKyAgICAgICAg
dG8gImxvZyBpbiIgdGhlIHVzZXIgYnkgc2V0dGluZyBhIGNvb2tpZSwgdGhlbiBpbiB0aGUgY29t
cGxldGlvbiBoYW5kbGVyLCB0aGV5IG9wZW4gYSBXS1dlYlZpZXcgdG8gdGhlaXIgcGFnZSBhbmQg
ZXhwZWN0IHRoZSBjb29raWUgdG8gYmUgc2VudC4gIEJlZm9yZSB0aGlzCisgICAgICAgIGNoYW5n
ZSwgd2Ugd291bGQgbm90IGtub3cgd2hpY2ggcHJvY2VzcyBwb29sIHRvIHNldCB0aGUgY29va2ll
IGluIHNvIHdlIHdvdWxkIGd1ZXNzLiAgSWYgdGhlcmUgd2VyZSBubyBwcm9jZXNzIHBvb2xzLCB3
ZSB3b3VsZCBzdGFydCB3cml0aW5nIHRvIGRpc2sgYW5kIGhvcGUKKyAgICAgICAgaXQgd3JpdGVz
IGZhc3QgZW5vdWdoLiAgV2UgY2FuJ3Qgd2FpdCBmb3IgaXQgdG8gY29tcGxldGUgYmVjYXVzZSBp
dCBjYXVzZXMgaGFuZ3MgbGlrZSByZGFyOi8vcHJvYmxlbS82Njk2MTA2Ni4gIFRoaXMgc29sdXRp
b24gYWxsb3dzIHRvIHN0YXJ0IHRoZSBuZXR3b3JrCisgICAgICAgIHByb2Nlc3Mgb2YgdGhhdCBX
ZWJzaXRlRGF0YVN0b3JlIGFuZCBzZXQgdGhlIGNvb2tpZSBpbiB0aGF0IHByb2Nlc3MuICBXZSBu
b3cga25vdyB0aGF0IGlzIHRoZSBvbmx5IHByb2Nlc3MgdGhpcyBXZWJzaXRlRGF0YVN0b3JlIHdp
bGwgZXZlciB1c2UuICBOb3csIHVzZXJzCisgICAgICAgIHdpbGwgYmUgYWJsZSB0byBhY3R1YWxs
eSBiZSBsb2dnZWQgaW4gYWxsIHRoZSB0aW1lIGluIHN1Y2ggYXBwcy4KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaDoKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMu
aW46CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9jdXJsL1dlYkNvb2tpZU1hbmFn
ZXJDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1T
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29r
aWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2VyU291cC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNl
c3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAg
IChXZWJLaXQ6OnNhdmVDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdl
U2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvbWFjL1Jl
bW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVOZXR3b3Jr
aW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24pOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5oOgorICAg
ICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAg
KiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhUVFBDb29raWVT
dG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp+
SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVz
KToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKToKKyAgICAg
ICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRU
UENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3Rv
cmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6
OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tp
ZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lz
dGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQ
STo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRp
b25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9y
ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAo
V0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChX
S0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXS0NvbnRleHRH
ZXRDb29raWVNYW5hZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdLQ29udGV4dFNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAg
ICAoV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAo
V0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNw
cDoKKyAgICAgICAgKFdLUGFnZUdldFdlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1BhZ2UuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRl
RGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdLV2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9j
ZXNzSWRlbnRpZmllcik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5t
bToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzczpdKToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQ
cm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJv
Y2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6XSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50
aWZpZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfbWFrZU5leHROZXR3
b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dL
UHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vydmlj
ZVdvcmtlcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfbmV0d29ya1By
b2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNp
dGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOgor
ICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXSk6
CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFy
ZVRvU3VzcGVuZDpdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29y
a1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0
YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdKToKKyAgICAgICAgKC1bV0tXZWJz
aXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOl0pOgorICAgICAgICAoLVtX
S1dlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAo
K1tXS1dlYnNpdGVEYXRhU3RvcmUgX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9y
VGVzdGluZ10pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0
b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVN
YW5hZ2VyLmNwcDoKKyAgICAgICAgKF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZTo6Y29va2ll
TWFuYWdlciBjb25zdCk6CisgICAgICAgIChfV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGU6On5f
V2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUpOgorICAgICAgICAod2Via2l0Q29va2llTWFuYWdl
ckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRf
c3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xp
Y3kpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KToK
KyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKToKKyAgICAgICAgKHdl
YmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyk6CisgICAgICAgICh3ZWJraXRfY29va2ll
X21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAod2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVk
KToKKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4dF9wcmVmZXRjaF9kbnMpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50
aXRsZW1lbnRGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnhwY0VuZHBvaW50TWVzc2FnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJv
Y2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAg
ICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6cHVibGlzaFByb2dyZXNzKToKKyAgICAgICAgKFdl
YktpdDo6RG93bmxvYWRQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAg
ICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVk
RmlsZW5hbWVBc3luYyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFBy
b3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQ
cm94eU1hcCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9u
RGlkRW50ZXJCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6
YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9h
ZFByb3h5TWFwOjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkUHJveHlNYXAuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90
b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2Fk
aW5nKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6
OmludmFsaWRhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3
b3JrUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6ZGVmYXVsdFByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkZWZhdWx0TmV0d29ya1Byb2Nlc3MpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp0ZXJtaW5hdGUpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRUZXJtaW5hdGUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNr
Z3JvdW5kUHJpb3JpdHkpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9vbFNob3VsZFRh
a2VVSUJhY2tncm91bmRBc3NlcnRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1By
b2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkQ2xvc2UpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2Up
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hp
bmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXREb21haW5zV2l0
aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6
OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1v
dmVTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0
ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3Mp
OgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNz
ZXMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9j
ZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9j
ZXNzQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6aGFz
U2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCBjb25zdCk6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2ll
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6
ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2Vw
dFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c3VwcGxlbWVudE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4
dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1
dG9tYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNl
V29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVjb25uZWN0VG8pOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNv
bnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpt
YXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQ
cmV3YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRp
YWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBy
b2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRh
dGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpyZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdp
c3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0Fj
Y2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVS
TFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Q
cm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENh
Y2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2Rl
bFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3Vu
ZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRMZWdhY3lDdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAg
ICAgVGhlcmUgc2VlbXMgdG8gYmUgYSBsb3Qgb2YgY29kZSByZW1vdmFsIGhlcmUsIGJ1dCBtb3N0
IG9mIGl0IHdhcyBkdXBsaWNhdGUgY29kZSB3aXRoCisgICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6
OnBhcmFtZXRlcnMgd2hpY2ggaXMgdXNlZCBpbnN0ZWFkLiAgVGhhdCB3aGljaCB3YXMgbm90IGR1
cGxpY2F0ZSB3YXMKKyAgICAgICAgbW92ZWQgdG8gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENy
ZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcy4gIFRoaXMgd2FzIHRoZSBoYXJkZXN0IHBhcnQg
b2YgdGhpcyBwYXRjaC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1By
b2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJD
YWNoZWRDcmVkZW50aWFscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVz
dGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3Vt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpmbHVzaENvb2tp
ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0
Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5
KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpzZXRXZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGlu
Zyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3Rv
cmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1By
b2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vzcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0Vu
ZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6fldlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVz
dGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3Rp
Y3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVF
bnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3Jh
bmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0
TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9k
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJl
c291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZh
bGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hv
dWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4p
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZy
YW1lVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNp
c3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNl
SGFzQWxsVGFibGVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFz
dFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkb21haW5JREV4aXN0
c0luRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0
YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpp
bnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omdl
dEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VXNlSVRQRGF0YWJhc2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtE
ZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0
aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0
ZWRTZXNzaW9uRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlckZv
clRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBh
cnR5Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVG
b3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NG
aXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVE
b21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c3lu
Y0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldENh
Y2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmFsbG93U3BlY2lmaWNIVFRQU0Nl
cnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nl
c3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGlu
Z0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbCBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZsdXNoQ29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEFsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yV2ViU29ja2V0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xl
YXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2Nh
bFN0b3JhZ2VEZXRhaWxzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVz
ZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9j
ZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBwQm91bmRTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0
aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5k
RG9tYWluc0ZvcklUUCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnVwZGF0
ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklE
TWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3Rp
bmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0
aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzQXNz
b2NpYXRlZFByb2Nlc3NQb29sIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphZGRQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nv
b2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkaWRD
cmVhdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURh
dGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlh
bFN0b3JhZ2VFbmFibGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJv
eHlHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdl
dExhdW5jaE9wdGlvbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eVNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9X
ZWJQcm9jZXNzUG9vbFNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3JzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mby5oOgorCiAyMDIwLTA5LTI5ICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RL
XSBTdG9wIHVzaW5nIHRoZSBkZWZhdWx0IHdlYnNpdGUgZGF0YSBzdG9yZSBmb3IgdGhlIGluc3Bl
Y3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dl
YkNvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVz
L1dlYkNvb2tpZU1hbmFnZXIuY3BwCmluZGV4IGZjZTIzODk4N2E3OC4uNWM5Yjc3MTg2ZmIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2ll
TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dl
YkNvb2tpZU1hbmFnZXIuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db29raWUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0Nvb2tpZVN0b3JhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUVFBDb29raWVBY2Nl
cHRQb2xpY3kuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgog
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgpAQCAtMTQz
LDE1ICsxNDQsMTggQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzdG9wT2JzZXJ2aW5nQ29va2ll
Q2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAKIHZvaWQgV2ViQ29va2llTWFuYWdl
cjo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGlj
eSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IHBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpOwotICAgIG1fcHJvY2Vz
cy5jb29raWVBY2NlcHRQb2xpY3lDaGFuZ2VkKHBvbGljeSk7Ci0KLSAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOworICAgIHBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3ksIFtw
b2xpY3ksIHByb2Nlc3MgPSBtYWtlUmVmKG1fcHJvY2VzcyksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBwcm9jZXNz
LT5jb29raWVBY2NlcHRQb2xpY3lDaGFuZ2VkKHBvbGljeSk7CisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CisgICAgfSk7CiB9CiAKLXZvaWQgV2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihtX3Byb2Nlc3MuZGVmYXVsdFN0b3JhZ2VTZXNz
aW9uKCkuY29va2llQWNjZXB0UG9saWN5KCkpOworICAgIGlmIChhdXRvKiBzdG9yYWdlU2Vzc2lv
biA9IG1fcHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQorICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihzdG9yYWdlU2Vzc2lvbi0+Y29va2llQWNjZXB0UG9saWN5KCkpOworICAgIGVs
c2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6TmV2
ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmggYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCmluZGV4IGNhN2Y1
NWU4NjZiZC4uMzVjZThhOWVjZmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmgKQEAgLTM3LDYgKzM3LDggQEAK
ICNpbmNsdWRlICJTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlLmgiCiAjZW5kaWYKIAor
T0JKQ19DTEFTUyBOU0hUVFBDb29raWVTdG9yYWdlOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBz
dHJ1Y3QgQ29va2llOwogZW51bSBjbGFzcyBIVFRQQ29va2llQWNjZXB0UG9saWN5IDogdWludDhf
dDsKQEAgLTc5LDggKzgxLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGdldEFsbENvb2tpZXMoUEFM
OjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tp
ZT4mJik+JiYpOwogICAgIHZvaWQgZ2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCwgY29uc3QgVVJM
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmKT4mJik7
CiAKLSAgICB2b2lkIHBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShXZWJDb3JlOjpI
VFRQQ29va2llQWNjZXB0UG9saWN5KTsKLSAgICB2b2lkIGdldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5
KT4mJik7CisgICAgdm9pZCBwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
KyAgICB2b2lkIGdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYpOwog
CiAgICAgdm9pZCBzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQpOwog
ICAgIHZvaWQgc3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQpOwpAQCAt
ODgsNCArOTAsOCBAQCBwcml2YXRlOgogICAgIE5ldHdvcmtQcm9jZXNzJiBtX3Byb2Nlc3M7CiB9
OwogCisjaWYgUExBVEZPUk0oQ09DT0EpCit2b2lkIHNhdmVDb29raWVzKE5TSFRUUENvb2tpZVN0
b3JhZ2UgKiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyNlbmRpZgorCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4KaW5kZXggYWNk
NzU0NDBkODNmLi42ZmRmNTc3MmFhNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2Vz
LmluCkBAIC0zNiw3ICszNiw3IEBAIG1lc3NhZ2VzIC0+IFdlYkNvb2tpZU1hbmFnZXIgTm90UmVm
Q291bnRlZCB7CiAgICAgdm9pZCBEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIFdhbGxUaW1lIHRpbWUpIC0+ICgpIEFzeW5jCiAKICAgICB2b2lk
IFNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3kgcG9saWN5KSAtPiAoKSBBc3luYwotICAgIHZvaWQgR2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeSgpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2Vw
dFBvbGljeSBwb2xpY3kpIEFzeW5jCisgICAgdm9pZCBHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgLT4gKGVudW06dWludDhfdCBXZWJDb3JlOjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgQXN5bmMKICAgICAKICAgICB2b2lkIFN0YXJ0T2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgdm9pZCBT
dG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvY3VybC9XZWJDb29r
aWVNYW5hZ2VyQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMv
Y3VybC9XZWJDb29raWVNYW5hZ2VyQ3VybC5jcHAKaW5kZXggYzJlZjE1Njg0NTA0Li5mYWFkYTUw
ZjljNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9j
dXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMvY3VybC9XZWJDb29raWVNYW5hZ2VyQ3VybC5jcHAKQEAgLTM0LDcgKzM0
LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi12
b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShI
VFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkKK3ZvaWQgV2ViQ29va2llTWFuYWdlcjo6cGxh
dGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9s
aWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgQ29va2llQWNjZXB0UG9saWN5IGN1cmxQb2xpY3kgPSBDb29raWVBY2NlcHRQb2xpY3k6Ok9u
bHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwogICAgIHN3aXRjaCAocG9saWN5KSB7CkBAIC01NSw2
ICs1NSw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kKICAgICBtX3Byb2Nlc3MuZm9yRWFjaE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbihbY3VybFBvbGljeV0gKGNvbnN0IGF1dG8mIG5ldHdvcmtTdG9y
YWdlU2Vzc2lvbikgewogICAgICAgICBuZXR3b3JrU3RvcmFnZVNlc3Npb24uc2V0Q29va2llQWNj
ZXB0UG9saWN5KGN1cmxQb2xpY3kpOwogICAgIH0pOworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1tIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1t
CmluZGV4IDE5ZjU4NzhkNjYyYy4uN2Y5MTIwY2EyZTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJNYWMubW0KKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5h
Z2VyTWFjLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0hUVFBDb29raWVB
Y2NlcHRQb2xpY3kuaD4KICNpbXBvcnQgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+
CiAjaW1wb3J0IDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgorI2ltcG9ydCA8d3RmL0NhbGxi
YWNrQWdncmVnYXRvci5oPgogI2ltcG9ydCA8d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4KIAogbmFt
ZXNwYWNlIFdlYktpdCB7CkBAIC01MywxNSArNTQsMTkgQEAgc3RhdGljIENGSFRUUENvb2tpZVN0
b3JhZ2VBY2NlcHRQb2xpY3kgdG9DRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5KEhUVFBD
b28KICAgICByZXR1cm4gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeUFsd2F5czsKIH0K
IAotdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6
OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5
IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFj
Y2Vzc1Jhd0Nvb2tpZXMpKTsKIAorICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIFtb
TlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2llQWNj
ZXB0UG9saWN5OnN0YXRpY19jYXN0PE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeT4ocG9saWN5KV07
CisgICAgc2F2ZUNvb2tpZXMoW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0
b3JhZ2VdLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogCiAgICAgbV9wcm9jZXNzLmZvckVh
Y2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oWyZdIChjb25zdCBhdXRvJiBuZXR3b3JrU3RvcmFnZVNl
c3Npb24pIHsKICAgICAgICAgaWYgKGF1dG8gY29va2llU3RvcmFnZSA9IG5ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5jb29raWVTdG9yYWdlKCkpCiAgICAgICAgICAgICBDRkhUVFBDb29raWVTdG9yYWdl
U2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHRvQ0ZIVFRQQ29va2ll
U3RvcmFnZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKKyAgICAgICAgaWYgKGF1dG8gKnN0b3JhZ2Ug
PSBuZXR3b3JrU3RvcmFnZVNlc3Npb24ubnNDb29raWVTdG9yYWdlKCkpCisgICAgICAgICAgICBz
YXZlQ29va2llcyhzdG9yYWdlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0pOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291
cC9XZWJDb29raWVNYW5hZ2VyU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2VyU291cC5jcHAKaW5kZXggNzU0ZDBiYmM2YjRm
Li5kNTc2YWZkZTQyZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2VyU291cC5jcHAKQEAg
LTM3LDExICszNywxMiBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1h
bmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0
UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIG1fcHJvY2Vzcy5mb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtwb2xp
Y3ldIChhdXRvJiBzZXNzaW9uKSB7CiAgICAgICAgIHNlc3Npb24uc2V0Q29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSk7CiAgICAgfSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJz
aXN0ZW50U3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IGJlOGQ5NjY2MmJlNi4uM2U4NTllYjdi
YWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcApAQCAtMTczLDYgKzE3Myw3IEBAIE5ldHdvcmtQcm9jZXNzOjpOZXR3b3JrUHJvY2VzcyhB
dXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1lCiAjZW5kaWYK
IAogI2lmIFVTRShTT1VQKQorICAgIC8vIEZJWE1FOiBEbyBub3QgdXNlIHRoZSBkZWZhdWx0IHNl
c3Npb24gSUQuCiAgICAgRE5TUmVzb2x2ZVF1ZXVlU291cDo6c2V0R2xvYmFsRGVmYXVsdFNvdXBT
ZXNzaW9uQWNjZXNzb3IoW3RoaXNdKCkgLT4gU291cFNlc3Npb24qIHsKICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9uU291cCY+KCpuZXR3b3JrU2Vzc2lvbihQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSkuc291cFNlc3Npb24oKTsKICAgICB9KTsKQEAg
LTM0NywzMCArMzQ4LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKIAogICAgIHNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlv
bkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHko
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIHNl
dFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3Zl
KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNz
aW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3Rv
cmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJk
UGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNl
c3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0jaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGJvb2wgc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5h
dGlvbkRlbGF5RW5hYmxlZCA9IHRydWU7Ci0gICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc2VydmljZVdvcmtlclByb2Nlc3NUZXJt
aW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBtX3N0b3JhZ2VNYW5hZ2Vy
U2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
LmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0byog
ZGVmYXVsdFNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKTsKLSAgICBhdXRvKiBkZWZhdWx0U3RvcmFnZVNlc3Npb24gPSBkZWZhdWx0U2Vz
c2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjb29r
aWUgOiBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVz
KQotICAgICAgICBkZWZhdWx0U3RvcmFnZVNlc3Npb24tPnNldENvb2tpZShjb29raWUpOwotCiAg
ICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAg
ICAgc3VwcGxlbWVudC0+aW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKIApAQCAtNTA1LDggKzQ4Miw2
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9u
SUQmIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVT
ZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkVXNlVGVz
dGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXJCYXNlKQogI2VuZGlm
CiB7Ci0gICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25z
LmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkp
CiAgICAgICAgIHJldHVybjsKQEAgLTUyMSw3ICs0OTYsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
OjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGJvb2wgc2hv
dWxkVQogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gbWFrZVN0cmlu
ZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fub25pY2FsVVVJ
RFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVy
YWwoKSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVByaXZhdGVTdG9y
YWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAo
c2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgICAg
IHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVD
RlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkpOwogCiAgICAg
aWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQSSgpKSB7CkBA
IC01NDQsMjEgKzUxOSwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVBY2NlcHRQb2xp
Y3lDaGFuZ2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9saWN5KQogCiBXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNzaW9uSUQg
PT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0dXJuICZk
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFnZVNlc3Np
b25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIGlm
ICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1bHROZXR3
b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigp
OwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQotCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0
aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9yKQogewot
ICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0byYgc3Rv
cmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAgICAgICAg
IGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCA2YWQzZDY5OWE4OTEuLmM4YjQ1NzdlYmI0NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAt
MTcwLDcgKzE3MCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZm9yRWFjaE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
biYpPiYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Np
b24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb24mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5ld1Rlc3RpbmdTZXNzaW9u
KGNvbnN0IFBBTDo6U2Vzc2lvbklEJik7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBl
bnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgYm9vbCBzaG91bGRVc2VUZXN0aW5n
TmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+JiYpOwpAQCAtMzc1LDcgKzM3NCw2IEBAIHB1YmxpYzoKIAogcHJp
dmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFn
ZVNlc3Npb24oKSBjb25zdDsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKIApAQCAtNTQ0LDcgKzU0Miw2
IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9w
dHI8TmV0d29ya1Nlc3Npb24+PiBtX25ldHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBBTDo6
U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
Pj4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zOwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOwogCiAgICAgUmVmUHRyPFN0b3JhZ2VNYW5hZ2VyU2V0PiBtX3N0b3JhZ2VNYW5hZ2Vy
U2V0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCmluZGV4IGNjNWM0NGJjZGU0
Yy4uOTA2MzliNjkyMTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcApAQCAt
NTUsNyArNTUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNv
ZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgdWlQcm9jZXNz
U0RLVmVyc2lvbjsKICAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBuZXR3b3JrQVRTQ29udGV4dC5n
ZXQoKSk7CiAjZW5kaWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
OwogI2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIgPDwgY29va2llQWNjZXB0UG9saWN5OwogICAg
IGVuY29kZXIgPDwgbGFuZ3VhZ2VzOwpAQCAtNjYsOSArNjUsNiBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIGVuY29k
ZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxFKFNFUlZJ
Q0VfV09SS0VSKQotICAgIGVuY29kZXIgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
IDw8IHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXk7Ci0j
ZW5kaWYKICAgICBlbmNvZGVyIDw8IHNob3VsZEVuYWJsZUlUUERhdGFiYXNlOwogICAgIGVuY29k
ZXIgPDwgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlOwogfQpAQCAtMTE0LDEyICsx
MTAsNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBD
OjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAj
ZW5kaWYKIAotICAgIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzOwotICAgIGlmICghZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXN1bHQuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMgPSBXVEZN
b3ZlKCpkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyk7Ci0KICNpZiBVU0UoU09VUCkKICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVBY2NlcHRQb2xpY3kpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xMzYsMjAgKzEyNiw2IEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5ldHdvcmtQcm9j
CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05v
QWNjZXNzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25EaXJlY3RvcnkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgT3B0aW9u
YWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIXNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXN1bHQuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSA9IFdURk1vdmUoKnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxkRGlz
YWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSNlbmRpZgotCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxk
RW5hYmxlSVRQRGF0YWJhc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaAppbmRleCBkZmYzZTVmZjA0YjguLmIwM2JhYzkwNzJiYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAi
Q2FjaGVNb2RlbC5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llLmg+
CiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAg
LTcwLDggKzY5LDYgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsK
ICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBuZXR3b3JrQVRTQ29udGV4dDsKICNlbmRpZgogCi0g
ICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7
Ci0gICAgCiAjaWYgVVNFKFNPVVApCiAgICAgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBjb29raWVBY2NlcHRQb2xpY3kgeyBXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5OjpB
bHdheXNBY2NlcHQgfTsKICAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7CkBAIC04MiwxMiAr
NzksNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFZl
Y3RvcjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbDsKICAgICBWZWN0b3I8U3Ry
aW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCi0gICAgU3RyaW5nIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnk7
Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgYm9vbCBzaG91bGREaXNhYmxlU2VydmljZVdv
cmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5IHsgZmFsc2UgfTsKLSNlbmRpZgotICAgIGJvb2wg
c2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgeyBmYWxzZSB9OworICAgIGJvb2wgc2hvdWxkRW5hYmxl
SVRQRGF0YWJhc2UgeyB0cnVlIH07CiAgICAgYm9vbCBlbmFibGVBZENsaWNrQXR0cmlidXRpb25E
ZWJ1Z01vZGUgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAK
aW5kZXggZjk5NWUwMWQ0N2Q4Li4wMmM4NjczZDM5YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURh
dGFiYXNlLmNwcApAQCAtMjE0LDcgKzIxNCw4IEBAIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6
OmNsZWFyKCkKIAogdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y2xvc2UoKQogewotICAgIEFT
U0VSVCghbV9pc0Nsb3NlZCk7CisgICAgaWYgKG1faXNDbG9zZWQpCisgICAgICAgIHJldHVybjsK
ICAgICBtX2lzQ2xvc2VkID0gdHJ1ZTsKIAogICAgIGlmIChtX2RpZFNjaGVkdWxlRGF0YWJhc2VV
cGRhdGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Byb2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29j
b2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQppbmRleCBkYTYzNTkxMjQyMjMuLjgyZDQ0MjBhY2Zi
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCAiTmV0d29y
a1Jlc291cmNlTG9hZGVyLmgiCiAjaW1wb3J0ICJOZXR3b3JrU2Vzc2lvbkNvY29hLmgiCiAjaW1w
b3J0ICJTYW5kYm94RXh0ZW5zaW9uLmgiCisjaW1wb3J0ICJXZWJDb29raWVNYW5hZ2VyLmgiCiAj
aW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9QdWJsaWNTdWZmaXguaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQu
aD4KQEAgLTc4LDkgKzc5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFs
aXplTmV0d29ya1Byb2Nlc3NDb2NvYShjb25zdCBOZXR3b3JrUHJvY2Vzc0MKICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVy
bWFuZW50bHkocGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJz
LnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJs
b2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9DRk5l
dHdvcmtTZXRBVFNDb250ZXh0KHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwpA
QCAtMTA1LDExICsxMDMsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFtOU1VSTENh
Y2hlIHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdldCgpXTsKIH0KIAotc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRm
b3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFr
ZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpk
ZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3b3JrUHJv
Y2Vzczo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdAogewogI2lmIFVTRShTT1VS
Q0VfQVBQTElDQVRJT05fQVVESVRfREFUQSkKQEAgLTIyMSw3ICsyMTQsNyBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwg
Q29tcGxldGlvbkhhbgogICAgIHBsYXRmb3JtRmx1c2hDb29raWVzKHNlc3Npb25JRCwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCi1zdGF0aWMgdm9pZCBzYXZlQ29va2llcyhOU0hU
VFBDb29raWVTdG9yYWdlICpjb29raWVTdG9yYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIHNhdmVDb29raWVzKE5TSFRUUENvb2tpZVN0b3Jh
Z2UgKmNvb2tpZVN0b3JhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIEFTU0VSVChj
b29raWVTdG9yYWdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKaW5kZXggZDk5ZjlkZDY0YmFkLi40OTUzODEx
YjIxNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3
b3JrUHJvY2Vzc0N1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3Vy
bC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCkBAIC0zOSwxMSArMzksNiBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJv
Y2Vzc0NyZWF0aQogewogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNl
c3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0K
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9z
dChjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbywgY29uc3QgU3RyaW5nJiBo
b3N0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbSBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCmluZGV4
IGMyNzM2ZTAyNmE1NS4uMWUxODQ4OWY5NDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAt
NTUsMTUgKzU1LDExIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNp
dGVEYXRhU3RvcmVTZXNzaW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRo
RXh0ZW5zaW9uSGFuZGxlKTsKIAogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFs
KCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0
eSgpKQorICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQ
cm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpKQogICAgICAgICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3Rv
cmFnZUZyb21JZGVudGlmeWluZ0RhdGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdl
SWRlbnRpZmllcik7CiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25J
RCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05l
dHdvcmtTZXNzaW9uLCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkp
LCBXVEZNb3ZlKHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24g
PSBuZXR3b3JrUHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29u
c3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vz
c2lvbi0+c2V0Q29va2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9u
KHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92
ZShwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNv
dXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNz
TWFpblNvdXAuY3BwCmluZGV4IDBkMzFiM2QxYjM0Zi4uYTRjMDMxZDI4MzVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NNYWluU291
cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9j
ZXNzTWFpblNvdXAuY3BwCkBAIC0zOSw2ICszOSw3IEBAIGNsYXNzIE5ldHdvcmtQcm9jZXNzTWFp
blNvdXAgZmluYWw6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzTWFpbkJhc2UgewogcHVibGljOgog
ICAgIHZvaWQgcGxhdGZvcm1GaW5hbGl6ZSgpIG92ZXJyaWRlCiAgICAgeworICAgICAgICAvLyBG
SVhNRTogSXMgdGhpcyBzdGlsbCBuZWVkZWQ/IFdlIHNob3VsZCBwcm9iYWJseSBkZXN0cm95IGFs
bCBleGlzdGluZyBzZXNzaW9ucyBhdCB0aGlzIHBvaW50IGluc3RlYWQuCiAgICAgICAgIC8vIE5l
ZWRlZCB0byBkZXN0cm95IHRoZSBTb3VwU2Vzc2lvbiBhbmQgU291cENvb2tpZUphciwgZS5nLiB0
byBhdm9pZAogICAgICAgICAvLyBsZWFraW5nIFNRTGl0ZSB0ZW1wb3Jhcnkgam91cm5hbGluZyBm
aWxlcy4KICAgICAgICAgZ2xvYmFsTmV0d29ya1Byb2Nlc3MtPmRlc3Ryb3lTZXNzaW9uKFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRleCBhMjEy
ODQ1NzMzYTYuLjAwZmY4YjJmZTUwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKQEAgLTEzNSwxMSArMTM1
LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKICAgICAgICAgdXNlclByZWZlcnJlZExhbmd1
YWdlc0NoYW5nZWQocGFyYW1ldGVycy5sYW5ndWFnZXMpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1D
cmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5p
cXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vy
cm9ycyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGJvb2wgaWdub3JlVExTRXJyb3JzKQogewog
ICAgIGlmIChhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0F0dGFjaG1lbnQuaCBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0F0dGFjaG1lbnQuaAppbmRleCAxNzQzYzNiNzgzMGEuLmQ2ZmYz
YzE3ZWJhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXR0YWNobWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0F0dGFjaG1lbnQuaApAQCAtOTUs
OCArOTUsOCBAQCBwcml2YXRlOgogICAgIGludCBtX2ZpbGVEZXNjcmlwdG9yIHsgLTEgfTsKICAg
ICBzaXplX3QgbV9zaXplOwogI2VsaWYgT1MoREFSV0lOKQotICAgIG1hY2hfcG9ydF9uYW1lX3Qg
bV9wb3J0OwotICAgIG1hY2hfbXNnX3R5cGVfbmFtZV90IG1fZGlzcG9zaXRpb247CisgICAgbWFj
aF9wb3J0X25hbWVfdCBtX3BvcnQgeyAwIH07CisgICAgbWFjaF9tc2dfdHlwZV9uYW1lX3QgbV9k
aXNwb3NpdGlvbiB7IDAgfTsKICNlbGlmIE9TKFdJTkRPV1MpCiAgICAgSEFORExFIG1faGFuZGxl
IHsgSU5WQUxJRF9IQU5ETEVfVkFMVUUgfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCmluZGV4IDZkMGMxMjlhNzQw
NS4uMDQ4MTBiM2UxOWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCkBAIC00MCwxMyArNDAsOSBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
ICAgIGVuY29kZXIgPDwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogICAgIGVuY29kZXIgPDwg
dWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgZW5jb2RlciA8PCBjb29raWVT
dG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZTsKLSAgICBlbmNvZGVyIDw8IHBlbmRpbmdDb29raWVz
OwogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgZW5jb2RlciA8PCBpbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnkgPDwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgZW5jb2RlciA8PCBpbmRleGVkRGF0
YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkBAIC04MywxMiArNzksNiBAQCBPcHRpb25hbDxX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRl
Y29kZShJUEM6OkRlYwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHBhcmFtZXRl
cnMuY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpjb29raWVTdG9y
YWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBPcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6
Q29va2llPj4gcGVuZGluZ0Nvb2tpZXM7Ci0gICAgZGVjb2RlciA+PiBwZW5kaW5nQ29va2llczsK
LSAgICBpZiAoIXBlbmRpbmdDb29raWVzKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
ICAgIHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBXVEZNb3ZlKCpwZW5kaW5nQ29va2llcyk7
Ci0KICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBPcHRpb25hbDxTdHJpbmc+IGlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKICAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZURp
cmVjdG9yeTsKQEAgLTEwMSwxNCArOTEsNiBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycz4gV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlYwogICAg
IGlmICghaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgT3B0aW9uYWw8
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9i
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlmICghaW5kZXhlZERhdGFiYXNlVGVtcEJs
b2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0gICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMu
aAppbmRleCBmMjdkZjQ4OTgwOWYuLmUxYjIzMzcwMTk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCkBAIC01MSwxNSArNTEsMTEg
QEAgc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKIAogICAgIFZlY3Rvcjx1aW50
OF90PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXM7CiAgICAgTmV0d29ya1Nlc3Npb25DcmVh
dGlvblBhcmFtZXRlcnMgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAgICAgU3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
OwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKaW5kZXgg
YmMwNzg2NmZiYzM5Li5mZjk1NTg5MmJkYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCkBAIC00Niw4ICs0Niw2IEBAIG5hbWVz
cGFjZSBBUEkgewogSFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQogICAgIDogbV9vd25pbmdEYXRhU3RvcmUo
d2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNz
UG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHJlZ2lzdGVyRm9yTmV3
UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIEhUVFBDb29raWVTdG9yZTo6fkhUVFBD
b29raWVTdG9yZSgpCkBAIC01NSw4ICs1Myw2IEBAIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29r
aWVTdG9yZSgpCiAgICAgQVNTRVJUKG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJU
KCFtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5KTsKICAgICBBU1NFUlQoIW1fY29va2llTWFu
YWdlclByb3h5T2JzZXJ2ZXIpOwotCi0gICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucygpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZmlsdGVyQXBwQm91bmRD
b29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtODEsMzMgKzc3LDE2IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBC
b3VuZENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpCiAKIHZvaWQg
SFRUUENvb2tpZVN0b3JlOjpjb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRv
KiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9w
ZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkNv
b2tpZT4gYWxsQ29va2llczsKLSAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICAgICAg
YWxsQ29va2llcyA9IGdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsK
LSAgICAgICAgYWxsQ29va2llcy5hcHBlbmRWZWN0b3IobV9vd25pbmdEYXRhU3RvcmUtPnBlbmRp
bmdDb29raWVzKCkpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBhbGxDb29raWVzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAg
ICAgIGZpbHRlckFwcEJvdW5kQ29va2llcyhhbGxDb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0
byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5h
Z2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0QWxsQ29va2llcyhtX293bmluZ0Rh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIHBvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMp
IG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+
bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRB
bGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBt
dXRhYmxlIHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6
OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0
byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VP
cGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIoeyB9KTsKLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50
PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmdl
dENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11
dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0
d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRDb29r
aWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxl
IHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTExNSw3OCArOTQsMjkgQEAgdm9pZCBIVFRQ
Q29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmVjdG8KIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tp
ZXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgYXBwQm91bmRDb29raWVz
KSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9j
ZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgICAgIGlmICghcG9vbCkg
ewotICAgICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBhcHBCb3VuZENvb2tpZXMpIHsKLSAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogcGVuZGluZ0Nvb2tpZXMgdXNlZCBmb3IgZGVmYXVsdFNl
c3Npb24gYmVjYXVzZSBzZXNzaW9uIGNvb2tpZXMgY2Fubm90IGJlIHByb3BhZ2F0ZWQgdG8gTmV0
d29yayBQcm9jZXNzIHdpdGggdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuCi0gICAg
ICAgICAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAg
ICAgICAgICAgICAgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2ll
KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0
YVN0b3JlLT5hZGRQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvKiBjb29r
aWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKTsKLSAgICAgICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOworICAgICAg
ICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNz
KCkuY29va2llTWFuYWdlcigpOworICAgICAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMobV9v
d25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBhcHBCb3VuZENvb2tpZXMsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRl
bGV0ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293
bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwot
ICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNz
aW9uKQotICAgICAgICAgICAgZGVsZXRlQ29va2llRnJvbURlZmF1bHRVSVByb2Nlc3NDb29raWVT
dG9yZShjb29raWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX293bmluZ0RhdGFTdG9y
ZS0+cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb29raWUpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAg
ICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIg
PSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAg
IGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIGNvb2tpZSwgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0Rh
dGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFu
YWdlci5kZWxldGVDb29raWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6
OmRlbGV0ZUFsbENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bv
b2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAg
ICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAg
ICAgICAgICAgZGVsZXRlQ29va2llc0luRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0g
ICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0g
cG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBj
b29raWVNYW5hZ2VyLT5kZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUFs
bENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKICAgICAvLyBGSVhNRTog
VGhlIENvbXBsZXRpb25IYW5kbGVyIHNob3VsZCBiZSBwYXNzZWQgdG8gV2ViQ29va2llTWFuYWdl
clByb3h5OjpkZWxldGVBbGxDb29raWVzLgogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpz
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kg
cG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tp
ZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9v
d25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBz
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUocG9s
aWN5KTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1h
bmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Pigp
OwotICAgIGNvb2tpZU1hbmFnZXItPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKLSAgICB9KTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRh
U3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFn
ZXIuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIHBvbGljeSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBD
b29raWVTdG9yZTo6Zmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTIyNywyMSArMTU3LDcgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6
OnJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQogCiAgICAgbV9jb29raWVNYW5h
Z2VyUHJveHlPYnNlcnZlciA9IG1ha2VVbmlxdWU8QVBJV2ViQ29va2llTWFuYWdlclByb3h5T2Jz
ZXJ2ZXI+KCp0aGlzKTsKIAotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKSB7
Ci0gICAgICAgIEFTU0VSVCghbV9vYnNlcnZpbmdVSVByb2Nlc3NDb29raWVzKTsKLQotICAgICAg
ICAvLyBMaXN0ZW4gZm9yIGNvb2tpZSBub3RpZmljYXRpb25zIGluIHRoZSBVSVByb2Nlc3MgaW4g
dGhlIG1lYW50aW1lLgotICAgICAgICBzdGFydE9ic2VydmluZ0NoYW5nZXNUb0RlZmF1bHRVSVBy
b2Nlc3NDb29raWVTdG9yZShbdGhpc10gKCkgewotICAgICAgICAgICAgY29va2llc0RpZENoYW5n
ZSgpOwotICAgICAgICB9KTsKLQotICAgICAgICBtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMg
PSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9vYnNlcnZlZENvb2tpZU1h
bmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9ICZtX293bmluZ0RhdGFT
dG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CiAgICAgbV9vYnNlcnZlZENv
b2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0KIApAQCAtMjc2LDQ2
ICsxOTIsMTAgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNEaWRDaGFuZ2UoKQogdm9p
ZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQoKQogewogICAgIG1fb2Jz
ZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnVucmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFT
dG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLSAgICBt
X29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbnVsbHB0cjsKLQotICAgIGF1dG8qIHBvb2wg
PSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9u
cygpOwotCi0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX29ic2VydmVk
Q29va2llTWFuYWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3du
aW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29i
c2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCi12
b2lkIEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlv
bnMoKQotewotICAgIEFTU0VSVCghbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlm
aWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IFdl
YlByb2Nlc3NQb29sOjpyZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihbdGhpc10o
V2ViUHJvY2Vzc1Bvb2wmIG5ld1Byb2Nlc3NQb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdE
YXRhU3RvcmUtPmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKG5ld1Byb2Nlc3NQb29sKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBOb3cgdGhhdCBhbiBhc3NvY2lhdGVkIHByb2Nl
c3MgcG9vbCBleGlzdHMsIHdlIG5lZWQgdG8gZmx1c2ggdGhlIFVJIHByb2Nlc3MgY29va2llIHN0
b3JlCi0gICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBhbnkgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIHdp
dGhpbiB0aGUgbmV3IHByb2Nlc3MgcG9vbC4KLSAgICAgICAgZmx1c2hEZWZhdWx0VUlQcm9jZXNz
Q29va2llU3RvcmUoKTsKLSAgICAgICAgbmV3UHJvY2Vzc1Bvb2wuZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLQotICAgICAgICBpZiAobV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcikgewotICAg
ICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG5ld1Byb2Nlc3NQb29sLnN1
cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgICAgICAgICBt
X29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAg
ICAgICB9Ci0gICAgICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMo
KTsKLSAgICB9KTsKLX0KLQotdm9pZCBIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQ
cm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIGlmIChtX3Byb2Nlc3NQb29sQ3JlYXRp
b25MaXN0ZW5lcklkZW50aWZpZXIpCi0gICAgICAgIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVy
UHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVy
SWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZp
ZXIgPSAwOwotfQotCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogdm9pZCBIVFRQQ29va2llU3RvcmU6
OmZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCkgeyB9CiBWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiBIVFRQQ29va2llU3RvcmU6OmdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9y
ZUNvb2tpZXMoKSB7IHJldHVybiB7IH07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAppbmRleCBkNjIwYWRkYTRlN2YuLmEwNWY0MTQzMGRi
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVT
dG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3Rv
cmUuaApAQCAtODMsOSArODMsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEhUVFBDb29raWVT
dG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmKTsKIAotICAgIHZvaWQgcmVnaXN0ZXJGb3JO
ZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJGb3JOZXdQ
cm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLQogICAgIHZvaWQgZmx1c2hEZWZhdWx0VUlQcm9j
ZXNzQ29va2llU3RvcmUoKTsKICAgICBzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gZ2V0
QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwogICAgIHN0YXRpYyB2b2lk
IHNldENvb2tpZUluRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvbnN0IFdlYkNvcmU6OkNv
b2tpZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKaW5k
ZXggNThjNTQ1M2Y0ODk4Li4zN2JhYTY4ZjkyNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmNwcApAQCAtNDExLDExICs0MTEsNiBAQCB2b2lkIFdLQ29udGV4
dFByZWNvbm5lY3RUb1NlcnZlcihXS0NvbnRleHRSZWYsIFdLVVJMUmVmKQogewogfQogCi1XS0Nv
b2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29u
dGV4dFJlZikKLXsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250
ZXh0UmVmKS0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSk7Ci19
Ci0KIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdL
Q29udGV4dFJlZikKIHsKICAgICByZXR1cm4gV0tXZWJzaXRlRGF0YVN0b3JlR2V0RGVmYXVsdERh
dGFTdG9yZSgpOwpAQCAtNTI3LDEzICs1MjIsNiBAQCB2b2lkIFdLQ29udGV4dFNldEphdmFTY3Jp
cHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLAog
ICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxl
Y3RvclRpbWVyRW5hYmxlZChlbmFibGUpOwogfQogCi12b2lkIFdLQ29udGV4dFNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRl
eHQsIGJvb2wgYWxsb3dzKQotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBXZWJL
aXQ6OnRvSW1wbChjb250ZXh0KS0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNl
V29ya2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENv
cHlQbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7
CiAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5w
bHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoKS5sZWFrUmVmKCkpOwpAQCAtNTc1LDIxICs1NjMs
MTEgQEAgdm9pZCBXS0NvbnRleHRTZXRGb250QWxsb3dMaXN0KFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmLCBXS0FycmF5UmVmIGFycmF5UmVmKQogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYp
LT5zZXRGb250QWxsb3dMaXN0KFdlYktpdDo6dG9JbXBsKGFycmF5UmVmKSk7CiB9CiAKLXZvaWQg
V0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpCi17
Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7
Ci19Ci0KIHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVm
IGNvbnRleHQpCiB7CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZVNlcnZp
Y2VXb3JrZXJzKCk7CiB9CiAKLVByb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6
dG9JbXBsKGNvbnRleHRSZWYpLT5uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKTsKLX0KLQogdm9p
ZCBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4oV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdL
U3RyaW5nUmVmIGRvbWFpblJlZiwgV0tTdHJpbmdSZWYgbmFtZVJlZiwgV0tBcnJheVJlZiBtaW1l
VHlwZXNSZWYsIFdLQXJyYXlSZWYgZXh0ZW5zaW9uc1JlZikKIHsKICNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKQEAgLTYxOSwxMiArNTk3LDExIEBAIHZvaWQgV0tDb250ZXh0Q2xlYXJD
dXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiAg
ICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPmNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVG
b3JUZXN0aW5nKCk7CiB9CiAKLXZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgYm9vbCB1c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzKQordm9pZCBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzKFdLQ29udGV4dFJlZiwgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKQogewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRVc2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAg
IFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiB9CiAKLXZvaWQgV0tDb250ZXh0
U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiB3ZWJzaXRlRGF0YVN0b3JlKQordm9pZCBXS0NvbnRleHRTZXRQcmlt
YXJ5V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYsIFdLV2Vic2l0ZURhdGFTdG9yZVJlZikK
IHsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0UHJpbWFyeURhdGFTdG9yZSgq
V2ViS2l0Ojp0b0ltcGwod2Vic2l0ZURhdGFTdG9yZSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS0NvbnRleHQuaAppbmRleCAxZDhmYWI4YTE0ODYuLjJhYjZlZjg2ZjUzMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2OCw3ICsx
NjgsNiBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihXS0NvbnRl
eHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4
dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJF
Q0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0
b3JlKTsKIAogV0tfRVhQT1JUIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0
R2V0QXBwbGljYXRpb25DYWNoZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJ
X0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0
RGF0YVN0b3JlKTsKLVdLX0VYUE9SVCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29v
a2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdL
X0VYUE9SVCBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1h
bmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVm
IFdLQ29udGV4dEdldEljb25EYXRhYmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBP
UlQgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFn
ZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9S
RVBMQUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAppbmRleCBh
MDI1MDExZjcwY2MuLjQ4YTI5YzQ1NjhhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaApAQCAtODMsMTEgKzgzLDggQEAgV0tfRVhQT1JU
IHZvaWQgV0tDb250ZXh0V2FybUluaXRpYWxQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0KTsK
IC8vIEF0IHNvbWUgcG9pbnQgaXQgc2hvdWxkIGJlIHJlbW92ZWQuCiBXS19FWFBPUlQgdm9pZCBX
S0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmLCBib29sKTsKIAotV0tf
RVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVm
KTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29u
dGV4dFJlZik7CiAKLVdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRp
ZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmLCBib29sKTsKLQogdHlw
ZWRlZiB2b2lkICgqV0tDb250ZXh0SW52YWxpZE1lc3NhZ2VGdW5jdGlvbikoV0tTdHJpbmdSZWYg
bWVzc2FnZU5hbWUpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0SW52YWxpZE1lc3NhZ2VG
dW5jdGlvbihXS0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uIGludmFsaWRNZXNzYWdlRnVu
Y3Rpb24pOwogICAgIApAQCAtOTcsOCArOTQsNiBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRT
ZXRGb250QWxsb3dMaXN0KFdLQ29udGV4dFJlZiwgV0tBcnJheVJlZik7CiAKIFdLX0VYUE9SVCB2
b2lkIFdLQ29udGV4dFByZWNvbm5lY3RUb1NlcnZlcihXS0NvbnRleHRSZWYgY29udGV4dCwgV0tV
UkxSZWYgc2VydmVyVVJMKSBXS19DX0FQSV9ERVBSRUNBVEVEOwogCi1XS19FWFBPUlQgV0tQcm9j
ZXNzSUQgV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLQ29udGV4dFJlZiBj
b250ZXh0KTsKLQogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKFdL
Q29udGV4dFJlZiBjb250ZXh0LCBXS1N0cmluZ1JlZiBkb21haW4sIFdLU3RyaW5nUmVmIG5hbWUs
IFdLQXJyYXlSZWYgbWltZVR5cGVzLCBXS0FycmF5UmVmIGV4dGVuc2lvbnMpOwogV0tfRVhQT1JU
IHZvaWQgV0tDb250ZXh0Q2xlYXJTdXBwb3J0ZWRQbHVnaW5zKFdLQ29udGV4dFJlZiBjb250ZXh0
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKaW5kZXggNjQ4ZjMw
MDk2MWE1Li5iNDQ3MzQyMTIwMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQ
YWdlLmNwcApAQCAtMzk4LDYgKzM5OCwxMSBAQCB1aW50NjRfdCBXS1BhZ2VHZXRSZW5kZXJUcmVl
U2l6ZShXS1BhZ2VSZWYgcGFnZSkKICAgICByZXR1cm4gdG9JbXBsKHBhZ2UpLT5yZW5kZXJUcmVl
U2l6ZSgpOwogfQogCitXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tQYWdlR2V0V2Vic2l0ZURhdGFT
dG9yZShXS1BhZ2VSZWYgcGFnZSkKK3sKKyAgICByZXR1cm4gdG9BUEkoJnRvSW1wbChwYWdlKS0+
d2Vic2l0ZURhdGFTdG9yZSgpKTsKK30KKwogV0tJbnNwZWN0b3JSZWYgV0tQYWdlR2V0SW5zcGVj
dG9yKFdLUGFnZVJlZiBwYWdlUmVmKQogewogICAgIHJldHVybiB0b0FQSSh0b0ltcGwocGFnZVJl
ZiktPmluc3BlY3RvcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLUGFnZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgKaW5k
ZXggNjcwYjVlOWZkNGI0Li5jNTFiODE2MmM4OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLUGFnZS5oCkBAIC0xMTgsNiArMTE4LDggQEAgV0tfRVhQT1JUIGRvdWJsZSBXS1BhZ2VH
ZXRFc3RpbWF0ZWRQcm9ncmVzcyhXS1BhZ2VSZWYgcGFnZSk7CiAKIFdLX0VYUE9SVCB1aW50NjRf
dCBXS1BhZ2VHZXRSZW5kZXJUcmVlU2l6ZShXS1BhZ2VSZWYgcGFnZSk7CiAKK1dLX0VYUE9SVCBX
S1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tQYWdlR2V0V2Vic2l0ZURhdGFTdG9yZShXS1BhZ2VSZWYg
cGFnZSk7CisKIFdLX0VYUE9SVCBXS0luc3BlY3RvclJlZiBXS1BhZ2VHZXRJbnNwZWN0b3IoV0tQ
YWdlUmVmIHBhZ2UpOwogCiBXS19FWFBPUlQgV0tTdHJpbmdSZWYgV0tQYWdlQ29weVVzZXJBZ2Vu
dChXS1BhZ2VSZWYgcGFnZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcAppbmRleCA5ZGRhNTkxYzk1MTguLjY4NjEx
NGFhNWVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJB
UElBcnJheS5oIgogI2luY2x1ZGUgIkFQSUhUVFBDb29raWVTdG9yZS5oIgorI2luY2x1ZGUgIk5l
dHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3Rp
Y3MuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0RpY3Rpb25hcnkuaCIK
QEAgLTY5LDYgKzcwLDE2IEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1dlYnNpdGVEYXRhU3Rv
cmVDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihXS1dlYnNpdGVEYXRhU3RvCiAgICAgcmV0dXJuIFdl
YktpdDo6dG9BUEkoJldlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlKCpXZWJLaXQ6OnRv
SW1wbChjb25maWd1cmF0aW9uKSwgc2Vzc2lvbklEKS5sZWFrUmVmKCkpOwogfQogCit2b2lkIFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLV2Vic2l0ZURhdGFTdG9y
ZVJlZiBkYXRhU3RvcmUpCit7CisgICAgV2ViS2l0Ojp0b0ltcGwoZGF0YVN0b3JlKS0+dGVybWlu
YXRlTmV0d29ya1Byb2Nlc3MoKTsKK30KKworV0tQcm9jZXNzSUQgV0tXZWJzaXRlRGF0YVN0b3Jl
R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3Rv
cmUpCit7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGRhdGFTdG9yZSktPm5ldHdvcmtQcm9j
ZXNzKCkucHJvY2Vzc0lkZW50aWZpZXIoKTsKK30KKwogdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVS
ZW1vdmVJVFBEYXRhRm9yRG9tYWluKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYs
IFdLU3RyaW5nUmVmIGhvc3QsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9yZVJlbW92
ZUlUUERhdGFGb3JEb21haW5GdW5jdGlvbiBjYWxsYmFjaykKIHsKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAppbmRleCBlNzdkMDljMTA3ZDEuLmFiMjY3NzQ2
YmU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRl
RGF0YVN0b3JlUmVmLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmgKQEAgLTI5LDYgKzI5LDEzIEBACiAjaW5jbHVkZSA8V2ViS2l0L1dL
QmFzZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS0RlcHJlY2F0ZWQuaD4KIAorI2lmIGRlZmluZWQo
V0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyKQordHlwZWRlZiBpbnQgV0tQcm9jZXNzSUQ7CisjZWxz
ZQorI2luY2x1ZGUgPHVuaXN0ZC5oPgordHlwZWRlZiBwaWRfdCBXS1Byb2Nlc3NJRDsKKyNlbmRp
ZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCkBAIC01MCw2ICs1
NywxMSBAQCBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRBbGxvd3NBbnlTU0xD
ZXJ0aWZpY2F0ZUZvcldlYlNvY2tldFRlc3RpbmcoVwogCiBXS19FWFBPUlQgdm9pZCBXS1dlYnNp
dGVEYXRhU3RvcmVDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBk
YXRhU3RvcmVSZWYpOwogCitXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckNh
Y2hlZENyZWRlbnRpYWxzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworV0tfRVhQ
T1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3MoV0tXZWJz
aXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSk7CisKK1dLX0VYUE9SVCBXS1Byb2Nlc3NJRCBXS1dl
YnNpdGVEYXRhU3RvcmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tXZWJzaXRlRGF0YVN0
b3JlUmVmIGRhdGFTdG9yZSk7CisKIFdLX0VYUE9SVCBib29sIFdLV2Vic2l0ZURhdGFTdG9yZUdl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRh
U3RvcmVSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwg
Ym9vbCBlbmFibGUpOwogdHlwZWRlZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGlj
c0VwaGVtZXJhbEZ1bmN0aW9uKShib29sIGlzRXBoZW1lcmFsLCB2b2lkKiBmdW5jdGlvbkNvbnRl
eHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJv
Y2Vzc1Bvb2wubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNz
UG9vbC5tbQppbmRleCBmZjMwOTQ5ODZjMjQuLjFmNTZmYmZiNjc5NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KQEAgLTQwNiwy
OCArNDA2LDYgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9u
YXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMKICAgICBfcHJvY2Vzc1Bvb2wtPmNs
ZWFyU3VwcG9ydGVkUGx1Z2lucygpOwogfQogCi0tICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2VzcwotewotICAgIF9wcm9jZXNzUG9vbC0+dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0K
LQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Ci17Ci0g
ICAgX3Byb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlG
b3JUZXN0aW5nKCk7Ci19Ci0KLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1
c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBfcHJvY2Vzc1Bv
b2wtPnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKFtjb21wbGV0
aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClfc2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lCi17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWUoKTsKLX0KLQogLSAodm9pZClfdGVybWluYXRlU2VydmljZVdvcmtlcnMKIHsKICAg
ICBfcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CkBAIC00MzUsMTIgKzQx
Myw3IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShj
b25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAKIC0gKHZvaWQpX3NldFVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3M6KEJPT0wpdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cwogewotICAgIF9wcm9jZXNzUG9vbC0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKLX0KLQotLSAocGlkX3QpX25ldHdv
cmtQcm9jZXNzSWRlbnRpZmllcgotewotICAgIHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzSWRlbnRpZmllcigpOworICAgIFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyk7CiB9CiAKIC0gKHBpZF90KV9wcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcgpAQCAtNDY3LDEx
ICs0NDAsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25h
cnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0
U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcodHJ1ZSk7CiB9CiAK
LS0gKHZvaWQpX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZwotewot
ICAgIF9wcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZh
aWxGb3JUZXN0aW5nKHRydWUpOwotfQotCiAtIChCT09MKV9oYXNQcmV3YXJtZWRXZWJQcm9jZXNz
CiB7CiAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogX3Byb2Nlc3NQb29sLT5wcm9jZXNzZXMoKSkg
ewpAQCAtNTYwLDE4ICs1MjgsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hN
YXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9j
ZXNzUG9vbC0+c2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9
CiAKLS0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAot
ewotICAgIF9wcm9jZXNzUG9vbC0+c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5k
KTsKLX0KLQotLSAodm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyOihCT09MKWFsbG93cwotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBfcHJv
Y2Vzc1Bvb2wtPnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxv
d3MpOwotI2VuZGlmCi19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogLSAoaWQgPF9XS0dl
b2xvY2F0aW9uQ29yZUxvY2F0aW9uUHJvdmlkZXI+KV9jb3JlTG9jYXRpb25Qcm92aWRlcgogewpA
QCAtNjA0LDExICs1NjAsNiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBU
b0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIH0pOwogfQog
Ci0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJp
bmcgKillbnRpdGxlbWVudAotewotICAgIHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGVudGl0bGVtZW50KTsKLX0KLQogLSAodm9pZClf
Y2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0
aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyUGVy
bWFuZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2UoV2ViQ29yZTo6UHJvdGVjdGlvblNw
YWNlKHByb3RlY3Rpb25TcGFjZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAppbmRleCA2NzY5MDE1ZTA4NTUu
LjNiOTMxNDA0YThlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgKQEAgLTg3LDE0ICs4Nyw5IEBACiAtIChf
V0tEb3dubG9hZCAqKV9yZXN1bWVEb3dubG9hZEZyb21EYXRhOihOU0RhdGEgKilyZXN1bWVEYXRh
IHdlYnNpdGVEYXRhU3RvcmU6KFdLV2Vic2l0ZURhdGFTdG9yZSAqKWRhdGFTdG9yZSAgcGF0aDoo
TlNTdHJpbmcgKilwYXRoIG9yaWdpbmF0aW5nV2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBX
S19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCiAv
LyBUZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgb25seSB3aGlsZSBubyB3ZWIgY29udGVudCBw
cm9jZXNzZXMgYXJlIHJ1bm5pbmcuCi0tICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKLS0gKHZvaWQpX3NlbmRO
ZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhh
bmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KTsKLS0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseSBXS19B
UElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKLS0gKHZvaWQpX3NlbmROZXR3
b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEz
LjApKTsKIC0gKHZvaWQpX3Rlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogCiAvLyBUZXN0IG9ubHkuCi0tIChwaWRfdClfbmV0
d29ya1Byb2Nlc3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMpLCBpb3Mo
MTEuMCkpOwogLSAocGlkX3QpX3ByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogCiAvLyBUZXN0IG9ubHkuCkBAIC0xMDYs
NyArMTAxLDYgQEAKIC0gKHNpemVfdClfc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjE0KSwgaW9zKDEyLjApKTsKIC0gKHZvaWQpX3N5bmNOZXR3b3Jr
UHJvY2Vzc0Nvb2tpZXMgV0tfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVCgiV0tIVFRQ
Q29va2llU3RvcmUuX2ZsdXNoQ29va2llc1RvRGlza1dpdGhDb21wbGV0aW9uSGFuZGxlcjoiLCBt
YWNvcygxMC4xMywgV0tfTUFDX1RCQSksIGlvcygxMS4wLCBXS19JT1NfVEJBKSk7CiAtICh2b2lk
KV9tYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjE0KSwgaW9zKDEyLjApKTsKLS0gKHZvaWQpX21ha2VOZXh0TmV0d29ya1Byb2Nl
c3NMYXVuY2hGYWlsRm9yVGVzdGluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSwgaW9z
KDEyLjApKTsKIC0gKE5TVUludGVnZXIpX21heGltdW1TdXNwZW5kZWRQYWdlQ291bnQgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKE5TVUludGVnZXIpX3By
b2Nlc3NDYWNoZUNhcGFjaXR5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygx
Mi4yKSk7CiAtIChOU1VJbnRlZ2VyKV9wcm9jZXNzQ2FjaGVTaXplIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwpAQCAtMTIyLDEzICsxMTYsMTAgQEAKIC0gKHZvaWQp
X3ByZWNvbm5lY3RUb1NlcnZlcjooTlNVUkwgKilzZXJ2ZXJVUkwgV0tfQVBJX0RFUFJFQ0FURURf
V0lUSF9SRVBMQUNFTUVOVCgiV0tXZWJWaWV3Ll9wcmVjb25uZWN0VG9TZXJ2ZXIiLCBtYWNvcygx
MC4xMy40LCBXS19NQUNfVEJBKSwgaW9zKDExLjMsIFdLX0lPU19UQkEpKTsKIAogLy8gVGVzdCBv
bmx5LgotLSAodm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2Vy
OihCT09MKWFsbG93cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykp
OwogLSAodm9pZClfZ2V0QWN0aXZlUGFnZXNPcmlnaW5zSW5XZWJQcm9jZXNzRm9yVGVzdGluZzoo
cGlkX3QpcGlkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TQXJyYXk8TlNTdHJpbmcgKj4g
KikpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9z
KDEyLjIpKTsKLS0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5n
OihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCks
IGlvcygxMi4yKSk7CiAtICh2b2lkKV9jbGVhclBlcm1hbmVudENyZWRlbnRpYWxzRm9yUHJvdGVj
dGlvblNwYWNlOihOU1VSTFByb3RlY3Rpb25TcGFjZSAqKXByb3RlY3Rpb25TcGFjZSBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIAogQHByb3BlcnR5IChub25hdG9t
aWMsIGdldHRlcj1faXNDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZCwgc2V0dGVyPV9z
ZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZDopIEJPT0wgX2Nvb2tpZVN0b3JhZ2VQ
YXJ0aXRpb25pbmdFbmFibGVkIFdLX0FQSV9ERVBSRUNBVEVEKCJQYXJ0aXRpb25lZCBjb29raWVz
IGFyZSBubyBsb25nZXIgc3VwcG9ydGVkIiwgbWFjb3MoMTAuMTIuMywgMTAuMTQuNCksIGlvcygx
MC4zLCAxMi4yKSk7Ci0tICh2b2lkKV9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOihCT09MKWJh
Y2tncm91bmQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAKIC8v
IFRlc3Qgb25seS4KIC0gKHZvaWQpX3NlZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRm9yVGVzdGlu
Z1dpdGhGaXJzdFBhcnR5OihOU1VSTCAqKWZpcnN0UGFydHlVUkwgdGhpcmRQYXJ0eTooTlNVUkwg
Kil0aGlyZFBhcnR5VVJMIHNob3VsZFNjaGVkdWxlTm90aWZpY2F0aW9uOihCT09MKXNob3VsZFNj
aGVkdWxlTm90aWZpY2F0aW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKHZvaWQpKWNvbXBs
ZXRpb25IYW5kbGVyICBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2Vic2l0ZURhdGFTdG9yZS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KaW5kZXggMjk4ZDljZWM5ZTg0Li44MGQzMzBmMjkyNGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVE
YXRhU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
c2l0ZURhdGFTdG9yZS5tbQpAQCAtNjE3LDYgKzYxNywxMSBAQCBzdGF0aWMgVmVjdG9yPFdlYktp
dDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURhdGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFS
ZWNvcgogICAgIH0pOwogfQogCistIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50
Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAoreworICAgIHJldHVybiBfd2Vic2l0
ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoZW50aXRs
ZW1lbnQpOworfQorCiAtIChpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVnYXRlPilfZGVsZWdh
dGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlLmdldCgpLmdldCgpOwpAQCAtNjY4LDQgKzY3Myw0
MiBAQCBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2Vic2l0ZURhdGFSZWNvcmQ+IHRvV2Vic2l0ZURh
dGFSZWNvcmRzKE5TQXJyYXkgKmRhdGFSZWNvcgogI2VuZGlmCiB9CiAKKy0gKHZvaWQpX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnRlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzKCk7Cit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVU
b1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfd2Vic2l0
ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3Rpbmco
W2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gewor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworfQorCistICh2b2lkKV9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkKK3sKKyAgICBfd2Vic2l0ZURhdGFT
dG9yZS0+c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygp
OworCit9CisKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZQoreworICAgIF93
ZWJzaXRlRGF0YVN0b3JlLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKK30KKworLSAo
dm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kCit7CisgICAg
X3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFja2dy
b3VuZChiYWNrZ3JvdW5kKTsKK30KKworLSAocGlkX3QpX25ldHdvcmtQcm9jZXNzSWRlbnRpZmll
cgoreworICAgIHJldHVybiBfd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5wcm9j
ZXNzSWRlbnRpZmllcigpOworfQorCisrICh2b2lkKV9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1
bmNoRmFpbEZvclRlc3RpbmcKK3sKKyAgICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om1ha2VO
ZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpOworfQorCiBAZW5kCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0
b3JlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaAppbmRleCA5OTMyMDEwNDZiNTUuLmE4NTZiZTZmNThiZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFT
dG9yZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCkBAIC04NSw5ICs4NSwxOSBAQCB0eXBlZGVmIE5TX09Q
VElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0ZURhdGFTdG9yZUZldGNoT3B0aW9ucykgewogCiAt
ICh2b2lkKV9yZW5hbWVPcmlnaW46KE5TVVJMICopb2xkTmFtZSB0bzooTlNVUkwgKiluZXdOYW1l
IGZvckRhdGFPZlR5cGVzOihOU1NldDxOU1N0cmluZyAqPiAqKWRhdGFUeXBlcyBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CiAKKy0gKEJPT0wpX25l
dHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVt
ZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CisKIEBwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYnNpdGVE
YXRhU3RvcmVEZWxlZ2F0ZT4gX2RlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUp
LCBpb3MoMTMuMCkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CiAKKy0gKHZvaWQp
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJl
VG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0
d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vz
c0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9T
X1RCQSkpOworLSAodm9pZClfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3Jv
dW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CistIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisrICh2b2lkKV9tYWtlTmV4dE5ldHdv
cmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19N
QUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwogQGVuZAogCiBOU19BU1NVTUVfTk9OTlVMTF9F
TkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
Q29va2llTWFuYWdlci5jcHAKaW5kZXggMWVlNzNlYmMwZWEwLi5kMTBkYjI5MzZjYTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFn
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tp
ZU1hbmFnZXIuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiV2ViS2l0Q29va2llTWFuYWdlci5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQ
cm94eS5oIgogI2luY2x1ZGUgIlNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUuaCIKICNp
bmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXRDb29raWVN
YW5hZ2VyUHJpdmF0ZS5oIgpAQCAtNTYsNiArNTcsMTIgQEAgZW51bSB7CiB9OwogCiBzdHJ1Y3Qg
X1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkm
IGNvb2tpZU1hbmFnZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGRhdGFNYW5hZ2Vy
KTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShk
YXRhTWFuYWdlcikubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgfQorCiAg
ICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VS
VChkYXRhTWFuYWdlcik7CkBAIC02NCw4ICs3MSw3IEBAIHN0cnVjdCBfV2ViS2l0Q29va2llTWFu
YWdlclByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSgpCiAgICAg
ewotICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyR2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkKLSAgICAgICAgICAgIHByb2Nlc3NQb29s
LT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJD
YWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CisgICAgICAgIGNvb2tpZU1hbmFnZXIoKS5z
ZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsKICAgICB9CiAK
ICAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW5hZ2VyOwpAQCAtMTM5LDExICsx
NDUsOSBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKFdl
YktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbgogewogICAgIFdlYktpdENvb2tpZU1hbmFn
ZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3KFdFQktJVF9U
WVBFX0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdlci0+cHJpdi0+ZGF0YU1h
bmFnZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0
V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5h
Z2VyKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJpdi0+c2Vzc2lv
bklEKCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNp
Z25hbHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9CisgICAgbWFuYWdlci0+cHJp
di0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2lnbmFsX2VtaXQobWFuYWdl
ciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1hbmFnZXI7CiB9
CiAKQEAgLTE3Myw4ICsxNzcsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfcGVy
c2lzdGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsCiAgICAgaWYgKHNl
c3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8q
IHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1h
bmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1l
bnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShz
ZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0
ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFn
ZXIoKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVU
RjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkp
OwogfQogCiAvKioKQEAgLTE5Miw4ICsxOTUsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9zZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBXZWJLaQog
ewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIp
KTsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFn
ZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldEhUVFBD
b29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tp
ZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgbWFuYWdlci0+cHJpdi0+Y29v
a2llTWFuYWdlcigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vz
c2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CiB9
CiAKIC8qKgpAQCAtMjE3LDE0ICsyMTksNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9n
ZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBHQ2FuYwogCiAg
ICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNh
bmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKIAotICAgIC8vIFRoZSBwb2xpY3kgaXMg
dGhlIHNhbWUgaW4gYWxsIHByb2Nlc3MgcG9vbHMgaGF2aW5nIHRoZSBzYW1lIHNlc3Npb24gSUQs
IHNvIGp1c3QgYXNrIGFueS4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRX
ZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFn
ZXIpOwotICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGdfdGFza19y
ZXR1cm5faW50KHRhc2suZ2V0KCksIFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9OT19USElS
RF9QQVJUWSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwcm9jZXNzUG9vbHNbMF0t
PnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayld
KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CisgICAgbWFuYWdlci0+
cHJpdi0+Y29va2llTWFuYWdlcigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+
cHJpdi0+c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENv
b2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFz
ay5nZXQoKSwgdG9XZWJLaXRDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7CiB9
CkBAIC0yNjksMTEgKzI2NCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29r
aWUoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3JldHVy
bl9pZl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVm
KGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwot
Ci0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRl
IGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFj
Y2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAg
Y29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJv
Y2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNb
MF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1hbmFn
ZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNr
ID0gV1RGTW92ZSh0YXNrKV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigp
LnNldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2ll
KGNvb2tpZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3Jl
dHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIwLDExICsz
MTEsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRDb29r
aWVNYW5hZ2VyKiBtYW5hZ2VyLCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJp
KTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5h
Z2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVz
IGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlz
ayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwg
c28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9j
ZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdl
ci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lv
bklEKCksIFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3Zl
KHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIG1h
bmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNl
c3Npb25JRCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RG
TW92ZSh0YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAg
ICAgICAgR0xpc3QqIGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBj
b29raWUgOiBjb29raWVzKQogICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVu
ZChjb29raWVzTGlzdCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzY1LDcg
QEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZShXZWJLaXRDb29raWVN
YW5hZ2VyKiBtYW5hZ2VyLCBTb3VwQ29va2kKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7
CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdl
ciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBh
cmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sg
cmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNv
IGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vz
c1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXIt
PnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2Vi
Q29va2llTWFuYWdlclByb3h5PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lv
bklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkg
eworICAgIG1hbmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIoKS5kZWxldGVDb29raWUobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdU
Rk1vdmUodGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQo
KSwgVFJVRSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDcxNjY3Y2Y0NzMyYS4uMzZkMDAw
OGJhMjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRXZWJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtNDAyLDcgKzQwMiw2IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dFdlYkNvbnRleHRDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIHByaXYtPndl
YnNpdGVEYXRhTWFuYWdlciA9IGFkb3B0R1JlZih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
bmV3KCJsb2NhbC1zdG9yYWdlLWRpcmVjdG9yeSIsIHByaXYtPmxvY2FsU3RvcmFnZURpcmVjdG9y
eS5kYXRhKCksIG51bGxwdHIpKTsKIAogICAgIHByaXYtPnByb2Nlc3NQb29sID0gV2ViUHJvY2Vz
c1Bvb2w6OmNyZWF0ZShjb25maWd1cmF0aW9uKTsKLSAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0
UHJpbWFyeURhdGFTdG9yZSh3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUocHJp
di0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKSk7CiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNl
dFVzZXJNZXNzYWdlSGFuZGxlcihbd2ViQ29udGV4dF0oVXNlck1lc3NhZ2UmJiBtZXNzYWdlLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJNZXNzYWdlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KSB7CiAgICAgICAgIC8vIFNpbmsgdGhlIGZsb2F0aW5nIHJlZi4KICAgICAgICAgR1JlZlB0cjxX
ZWJLaXRVc2VyTWVzc2FnZT4gdXNlck1lc3NhZ2UgPSB3ZWJraXRVc2VyTWVzc2FnZUNyZWF0ZShX
VEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CkBAIC00MTAsOCAr
NDA5LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKEdPYmplY3Qq
IG9iamVjdCkKICAgICAgICAgZ19zaWduYWxfZW1pdCh3ZWJDb250ZXh0LCBzaWduYWxzW1VTRVJf
TUVTU0FHRV9SRUNFSVZFRF0sIDAsIHVzZXJNZXNzYWdlLmdldCgpLCAmcmV0dXJuVmFsdWUpOwog
ICAgIH0pOwogCi0gICAgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQWRkUHJvY2Vzc1Bvb2wocHJp
di0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpLCAqcHJpdi0+cHJvY2Vzc1Bvb2wpOwotCiAgICAg
cHJpdi0+cHJvY2Vzc01vZGVsID0gV0VCS0lUX1BST0NFU1NfTU9ERUxfTVVMVElQTEVfU0VDT05E
QVJZX1BST0NFU1NFUzsKIAogI2lmIEVOQUJMRShNRU1PUllfU0FNUExFUikKQEAgLTQzOSwxMSAr
NDM2LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29udGV4dERpc3Bvc2UoR09iamVjdCogb2Jq
ZWN0KQogICAgICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0RG93bmxvYWRDbGllbnQobWFrZVVu
aXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PigpKTsKICAgICB9CiAKLSAgICBpZiAocHJpdi0+
d2Vic2l0ZURhdGFNYW5hZ2VyKSB7Ci0gICAgICAgIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlclJl
bW92ZVByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwgKnByaXYtPnBy
b2Nlc3NQb29sKTsKLSAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gbnVsbHB0cjsK
LSAgICB9Ci0KICAgICBpZiAocHJpdi0+ZmF2aWNvbkRhdGFiYXNlKSB7CiAgICAgICAgIHdlYmtp
dEZhdmljb25EYXRhYmFzZUNsb3NlKHByaXYtPmZhdmljb25EYXRhYmFzZS5nZXQoKSk7CiAgICAg
ICAgIHByaXYtPmZhdmljb25EYXRhYmFzZSA9IG51bGxwdHI7CkBAIC0xNTgxLDggKzE1NzMsOCBA
QCB2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9wcmVmZXRjaF9kbnMoV2ViS2l0V2ViQ29udGV4dCog
Y29udGV4dCwgY29uc3QgY2hhciogaG9zdAogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X1dFQl9DT05URVhUKGNvbnRleHQpKTsKICAgICBnX3JldHVybl9pZl9mYWlsKGhvc3RuYW1lKTsK
IAotICAgIGlmIChjb250ZXh0LT5wcml2LT5kbnNQcmVmZXRjaGVkSG9zdHMuYWRkKGhvc3RuYW1l
KS5pc05ld0VudHJ5KQotICAgICAgICBjb250ZXh0LT5wcml2LT5wcm9jZXNzUG9vbC0+c2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVmZXRjaEROUyhT
dHJpbmc6OmZyb21VVEY4KGhvc3RuYW1lKSkpOworICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUg
PSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoY29udGV4dC0+cHJpdi0+d2Vi
c2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlLm5ldHdvcmtQcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWZldGNoRE5TKFN0cmluZzo6
ZnJvbVVURjgoaG9zdG5hbWUpKSwgMCk7CiAgICAgY29udGV4dC0+cHJpdi0+ZG5zUHJlZmV0Y2hI
eXN0ZXJlcmlzLmltcHVsc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCA0MTM1YzI2NTQyODcuLmQ4YjNmM2Mx
OTk5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
V2ViVmlldy5jcHAKQEAgLTc1OSw3ICs3NTksNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3
Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogICAgICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5n
ZXQoKSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90bHNfZXJyb3JzX3BvbGljeShj
b250ZXh0RGF0YU1hbmFnZXIpKTsKICAgICAgICAgYXV0byBwcm94eVNldHRpbmdzID0gd2Via2l0
V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGNvbnRleHREYXRhTWFuYWdlcikubmV0d29y
a1Byb3h5U2V0dGluZ3MoKTsKICAgICAgICAgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0
YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkuc2V0TmV0d29ya1Byb3h5U2V0
dGluZ3MoV1RGTW92ZShwcm94eVNldHRpbmdzKSk7Ci0gICAgICAgIHdlYmtpdFdlYnNpdGVEYXRh
TWFuYWdlckFkZFByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwgd2Vi
a2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHByaXYtPmNvbnRleHQuZ2V0KCkpKTsKICAgICB9
CiAKICAgICBpZiAoIXByaXYtPndlYnNpdGVQb2xpY2llcykKQEAgLTk0NSwxMSArOTQ0LDYgQEAg
c3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQogICAgICAg
ICB3ZWJraXRXZWJDb250ZXh0V2ViVmlld0Rlc3Ryb3llZCh3ZWJWaWV3LT5wcml2LT5jb250ZXh0
LmdldCgpLCB3ZWJWaWV3KTsKICAgICB9CiAKLSAgICBpZiAod2ViVmlldy0+cHJpdi0+d2Vic2l0
ZURhdGFNYW5hZ2VyKSB7Ci0gICAgICAgIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlclJlbW92ZVBy
b2Nlc3NQb29sKHdlYlZpZXctPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwgd2Via2l0
V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHdlYlZpZXctPnByaXYtPmNvbnRleHQuZ2V0KCkpKTsK
LSAgICAgICAgd2ViVmlldy0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gbnVsbHB0cjsKLSAg
ICB9Ci0KICAgICBpZiAod2ViVmlldy0+cHJpdi0+Y3VycmVudFNjcmlwdERpYWxvZykgewogICAg
ICAgICB3ZWJraXRfc2NyaXB0X2RpYWxvZ19jbG9zZSh3ZWJWaWV3LT5wcml2LT5jdXJyZW50U2Ny
aXB0RGlhbG9nKTsKICAgICAgICAgQVNTRVJUKCF3ZWJWaWV3LT5wcml2LT5jdXJyZW50U2NyaXB0
RGlhbG9nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwCmluZGV4IGRhOWEzYWFkYjg0OS4uNGM0
ZWY1ZDY4YWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAKQEAgLTk1LDExICs5NSw2IEBA
IGVudW0gewogfTsKIAogc3RydWN0IF9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlIHsK
LSAgICB+X1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUoKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKHByb2Nlc3NQb29scy5pc0VtcHR5KCkpOwotICAgIH0KLQogICAgIFJlZlB0cjxXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU+IHdlYnNpdGVEYXRhU3RvcmU7CiAgICAgR1VuaXF1ZVB0cjxj
aGFyPiBiYXNlRGF0YURpcmVjdG9yeTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGJhc2VDYWNoZURp
cmVjdG9yeTsKQEAgLTExNSw3ICsxMTAsNiBAQCBzdHJ1Y3QgX1dlYktpdFdlYnNpdGVEYXRhTWFu
YWdlclByaXZhdGUgewogICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSB0bHNFcnJvcnNQb2xpY3k7
CiAKICAgICBHUmVmUHRyPFdlYktpdENvb2tpZU1hbmFnZXI+IGNvb2tpZU1hbmFnZXI7Ci0gICAg
VmVjdG9yPFdlYlByb2Nlc3NQb29sKj4gcHJvY2Vzc1Bvb2xzOwogfTsKIAogV0VCS0lUX0RFRklO
RV9UWVBFKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyLCBHX1RZUEVfT0JKRUNUKQpAQCAtNDk0LDMwICs0ODgsMTMgQEAgV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlJiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoV2ViS2l0V2Vi
c2l0ZURhdGEKICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24tPnNldFNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnkoRmlsZVN5c3RlbTo6c3RyaW5nRnJvbUZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbihwcml2LT5zd1JlZ2lzdHJhdGlvbnNEaXJlY3RvcnkuZ2V0KCkpKTsKICAgICAgICAg
aWYgKHByaXYtPmRvbUNhY2hlRGlyZWN0b3J5KQogICAgICAgICAgICAgY29uZmlndXJhdGlvbi0+
c2V0Q2FjaGVTdG9yYWdlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnN0cmluZ0Zyb21GaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocHJpdi0+ZG9tQ2FjaGVEaXJlY3RvcnkuZ2V0KCkpKTsKLSAgICAgICAg
cHJpdi0+d2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRl
KFdURk1vdmUoY29uZmlndXJhdGlvbiksIFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCkpOworICAgICAgICBwcml2LT53ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpjcmVhdGUoV1RGTW92ZShjb25maWd1cmF0aW9uKSwgUEFMOjpTZXNzaW9uSUQ6Omdl
bmVyYXRlUGVyc2lzdGVudFNlc3Npb25JRCgpKTsKICAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFT
dG9yZS0+c2V0SWdub3JlVExTRXJyb3JzKHByaXYtPnRsc0Vycm9yc1BvbGljeSA9PSBXRUJLSVRf
VExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKICAgICB9CiAKICAgICByZXR1cm4gKnByaXYtPndl
YnNpdGVEYXRhU3RvcmU7CiB9CiAKLXZvaWQgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQWRkUHJv
Y2Vzc1Bvb2woV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBXZWJQcm9jZXNzUG9v
bCYgcHJvY2Vzc1Bvb2wpCi17Ci0gICAgQVNTRVJUKCFtYW5hZ2VyLT5wcml2LT5wcm9jZXNzUG9v
bHMuY29udGFpbnMoJnByb2Nlc3NQb29sKSk7Ci0gICAgbWFuYWdlci0+cHJpdi0+cHJvY2Vzc1Bv
b2xzLmFwcGVuZCgmcHJvY2Vzc1Bvb2wpOwotfQotCi12b2lkIHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlclJlbW92ZVByb2Nlc3NQb29sKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciwg
V2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotewotICAgIEFTU0VSVChtYW5hZ2VyLT5wcml2
LT5wcm9jZXNzUG9vbHMuY29udGFpbnMoJnByb2Nlc3NQb29sKSk7Ci0gICAgbWFuYWdlci0+cHJp
di0+cHJvY2Vzc1Bvb2xzLnJlbW92ZUZpcnN0KCZwcm9jZXNzUG9vbCk7Ci19Ci0KLWNvbnN0IFZl
Y3RvcjxXZWJQcm9jZXNzUG9vbCo+JiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNz
UG9vbHMoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyKQotewotICAgIHJldHVybiBt
YW5hZ2VyLT5wcml2LT5wcm9jZXNzUG9vbHM7Ci19Ci0KIC8qKgogICogd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX25ldzoKICAqIEBmaXJzdF9vcHRpb25fbmFtZTogbmFtZSBvZiB0aGUgZmly
c3Qgb3B0aW9uIHRvIHNldApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oCmluZGV4
IDJhNTg5ZTI3ZjFmZS4uZmM5ZTgyMjZmYmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
UHJpdmF0ZS5oCkBAIC0xOSwxMSArMTksNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
IldlYlByb2Nlc3NQb29sLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgogCiBXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9y
ZShXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqKTsKLXZvaWQgd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyQWRkUHJvY2Vzc1Bvb2woV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiwgV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbCYpOwotdm9pZCB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJSZW1vdmVQcm9jZXNz
UG9vbChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqLCBXZWJLaXQ6OldlYlByb2Nlc3NQb29sJik7
Ci1jb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJQcm9jZXNzUG9vbCo+JiB3ZWJraXRXZWJzaXRlRGF0
YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKik7Ci0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlv
blNlc3Npb24uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRv
bWF0aW9uU2Vzc2lvbi5jcHAKaW5kZXggYWI2NGE0NThiOTBiLi4yY2Q4OGM1MjA4MTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNl
c3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0
b21hdGlvblNlc3Npb24uY3BwCkBAIC0xMzkyLDggKzEzOTIsOCBAQCB2b2lkIFdlYkF1dG9tYXRp
b25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbgogCiAgICAgY29va2llLmh0dHBPbmx5ID0gKmh0dHBPbmx5OwogCi0gICAgV2ViQ29v
a2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0Q29va2ll
cyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxs
YmFja10oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyID0gcGFn
ZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpOwor
ICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vz
c2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CiAgICAgICAgIGNhbGxiYWNrLT5z
ZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAtMTQwOSw4ICsxNDA5LDggQEAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVs
ZXRlQWxsQ29va2llcygKIAogICAgIFN0cmluZyBob3N0ID0gYWN0aXZlVVJMLmhvc3QoKS50b1N0
cmluZygpOwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9w
cm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29v
a2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0
b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRl
ZChob3N0KSB9KTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkmIGNvb2tpZU1hbmFnZXIgPSBw
YWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7
CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNp
dGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZp
eElmTmVlZGVkKGhvc3QpIH0pOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKaW5kZXggNDFjMGEwZmJmNTA2
Li40ZjM5OGI1MzBmNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGls
aWFyeVByb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFy
eVByb2Nlc3NQcm94eS5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5B
dXhpbGlhcnlQcm9jZXNzUHJveHkoKTsKIAogICAgIHZvaWQgY29ubmVjdCgpOwotICAgIHZvaWQg
dGVybWluYXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZSgpOwogCiAgICAgdmlydHVh
bCBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50LmgKaW5kZXggZGJlNDRmOTU5NDEwLi40Yzg0NWEwZWM3MjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oCkBAIC00MSwxMSArNDEsMTEgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiBjbGFzcyBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTsKIAogY2xh
c3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IGZpbmFsIDogcHVibGljIEFQSTo6
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50IHsKLXByaXZhdGU6CitwdWJsaWM6CiAgICAgdm9p
ZCBzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkmLCBMZWdhY3lD
dXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBmaW5hbDsK
ICAgICB2b2lkIHN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Jiwg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCkgZmluYWw7CiAgICAgdm9pZCBpbnZhbGlkYXRlKExlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5JikgZmluYWw7Ci0KK3ByaXZhdGU6CiAgICAgSGFz
aE1hcDxMZWdhY3lDdXN0b21Qcm90b2NvbElELCBSZXRhaW5QdHI8V0tDdXN0b21Qcm90b2NvbExv
YWRlcj4+IG1fbG9hZGVyTWFwOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KaW5kZXggOTJhZDFjODQyNDhlLi4zMzEz
YmRlMTBjMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBy
b2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
UHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtMTM0LDggKzEzNCw5IEBAIHN0YXRpYyB2b2lkIHJlZ2lz
dGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQ
cm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0g
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJv
Y2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNo
V2Vic2l0ZURhdGFTdG9yZShbZW5hYmxlZCA9IHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKV0g
KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29y
a1Byb2Nlc3MoKS5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGVuYWJsZWQpOworICAgIH0p
OwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NT
dXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkKQEAgLTE2Niw4ICsxNjcs
NiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogICAgIGlmICgh
W1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIldlYktp
dFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyIl0pCiAgICAgICAgIGluc3RhbGxNZW1vcnlQ
cmVzc3VyZUhhbmRsZXIoKTsKIAotICAgIHNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSk7Ci0K
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAg
aWYgKCFfTUdDYWNoZVZhbGlkKCkpIHsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsK
QEAgLTQ5NSwyMiArNDk0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFs
aXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKIAogICAgIE5TVXNl
ckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0
c107CiAKLSAgICB7Ci0gICAgICAgIGJvb2wgaXNTYWZhcmkgPSBmYWxzZTsKLSAgICAgICAgYm9v
bCBpc01pbmlCcm93c2VyID0gZmFsc2U7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAg
ICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNNb2JpbGVTYWZhcmkoKTsK
LSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01pbmlC
cm93c2VyKCk7Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29y
ZTo6TWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCk7Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBX
ZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNNaW5pQnJvd3NlcigpOwotI2VuZGlmCi0gICAgICAg
IGlmIChpc1NhZmFyaSB8fCBpc01pbmlCcm93c2VyKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRw
UHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2Vi
S2l0MkhUVFBQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwc1Byb3h5
ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0cmluZyAqKVdlYktpdDJI
VFRQU1Byb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHBhcmFtZXRl
cnMubmV0d29ya0FUU0NvbnRleHQgPSBhZG9wdENGKF9DRk5ldHdvcmtDb3B5QVRTQ29udGV4dCgp
KTsKIAogICAgIHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIg
PSBbZGVmYXVsdHMgYm9vbEZvcktleTpXZWJLaXRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxl
ckRlZmF1bHRzS2V5XTsKQEAgLTUyNCwxMiArNTA3LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmEKICAgICBOU051bWJlciAqZGF0YWJhc2VFbmFibGVkVmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0
Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2Vi
UHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKV1dOwogICAgIGlmIChkYXRhYmFzZUVuYWJsZWRWYWx1ZSkKICAgICAgICAgcGFyYW1l
dGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IGRhdGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xW
YWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJh
c2UgPSBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJs
ZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2Rl
ID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBl
cmltZW50YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01v
ZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwotCi0gICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBw
SGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVk
Q3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQoKQpAQCAtNjA4LDExICs1ODcsNiBAQCBib29s
IFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkgY29uc3QKICAgICBy
ZXR1cm4gIW1fdXNlck9ic2VydmFibGVQYWdlQ291bnRlci52YWx1ZSgpICYmICFtX3Byb2Nlc3NT
dXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKTsKIH0KIAotYm9vbCBXZWJQ
cm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3Qg
U3RyaW5nJiBlbnRpdGxlbWVudCkKLXsKLSAgICByZXR1cm4gV1RGOjpoYXNFbnRpdGxlbWVudChl
bnN1cmVOZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbnRp
dGxlbWVudC51dGY4KCkuZGF0YSgpKTsKLX0KLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYm
ICFQTEFURk9STShNQUNDQVRBTFlTVCkKIGZsb2F0IFdlYlByb2Nlc3NQb29sOjpkaXNwbGF5QnJp
Z2h0bmVzcygpCiB7CkBAIC05NDksMjMgKzkyMyw0IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJl
Z2lzdGVySGlnaER5bmFtaWNSYW5nZUNoYW5nZUNhbGxiYWNrKCkKIH0KICNlbmRpZgogCi1PU09i
amVjdFB0cjx4cGNfb2JqZWN0X3Q+IFdlYlByb2Nlc3NQb29sOjp4cGNFbmRwb2ludE1lc3NhZ2Uo
KSBjb25zdAotewotICAgIHJldHVybiBtX2VuZHBvaW50TWVzc2FnZTsKLX0KLQotdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoT1NP
YmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRwb2ludE1lc3NhZ2UpCi17Ci0gICAgbV9lbmRwb2lu
dE1lc3NhZ2UgPSBlbmRwb2ludE1lc3NhZ2U7Ci0KLSAgICBmb3IgKGF1dG8gcHJvY2VzcyA6IG1f
cHJvY2Vzc2VzKSB7Ci0gICAgICAgIGlmIChwcm9jZXNzLT5zdGF0ZSgpICE9IEF1eGlsaWFyeVBy
b2Nlc3NQcm94eTo6U3RhdGU6OlJ1bm5pbmcpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgaWYgKCFwcm9jZXNzLT5jb25uZWN0aW9uKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgYXV0byBjb25uZWN0aW9uID0gcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT54cGNDb25uZWN0
aW9uKCk7Ci0gICAgICAgIHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2FnZShjb25uZWN0aW9uLCBl
bmRwb2ludE1lc3NhZ2UuZ2V0KCkpOwotICAgIH0KLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94
eS5jcHAKaW5kZXggYzVkZTRlN2QwZjU5Li5mN2NmZjg1MmYwYmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAKQEAgLTc1LDgg
Kzc1LDggQEAgdm9pZCBEb3dubG9hZFByb3h5OjpjYW5jZWwoKQogICAgIGlmICghbV9wcm9jZXNz
UG9vbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJveHkqIG5l
dHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxEb3du
bG9hZChtX2Rvd25sb2FkSUQpLCAwKTsKKyAgICBpZiAobV9kYXRhU3RvcmUpCisgICAgICAgIG1f
ZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2FkSUQpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFBy
b3h5OjppbnZhbGlkYXRlKCkKQEAgLTEwMywxNSArMTAzLDEzIEBAIFdlYlBhZ2VQcm94eSogRG93
bmxvYWRQcm94eTo6b3JpZ2luYXRpbmdQYWdlKCkgY29uc3QKICNpZiBQTEFURk9STShDT0NPQSkK
IHZvaWQgRG93bmxvYWRQcm94eTo6cHVibGlzaFByb2dyZXNzKGNvbnN0IFVSTCYgVVJMKQogewot
ICAgIGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICBpZiAoIW1fZGF0YVN0b3JlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5k
bGU7Ci0gICAgICAgIGJvb2wgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNpb246
OlR5cGU6OlJlYWRXcml0ZSwgaGFuZGxlKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVk
U2FuZGJveEV4dGVuc2lvbiwgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24pOwotICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxpc2hEb3dubG9h
ZFByb2dyZXNzKG1fZG93bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKLSAgICB9CisgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZTsKKyAgICBib29sIGNyZWF0ZWRTYW5kYm94RXh0
ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKFVSTC5maWxlU3lzdGVtUGF0
aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIGhhbmRsZSk7CisgICAgQVNT
RVJUX1VOVVNFRChjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiwgY3JlYXRlZFNhbmRib3hFeHRlbnNp
b24pOworICAgIG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9ncmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwg
aGFuZGxlKSwgMCk7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCiAKQEAgLTEzMSwxMSAr
MTI5LDEwIEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkU3RhcnQoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dlCiAKIHZvaWQgRG93bmxvYWRQcm94eTo6
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JiYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIHVpbnQ2NF90IGNoYWxsZW5nZUlEKQogewotICAg
IGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wgfHwgIW1fZGF0YVN0
b3JlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
UHJveHkgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoV1RGTW92ZShhdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlELCBtYWtlUmVmKCptX3Byb2Nlc3NQb29s
LT5uZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKSksIG51bGxwdHIpOwotCisgICAgYXV0byBh
dXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94
eTo6Y3JlYXRlKFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBjaGFsbGVuZ2VJRCwg
bWFrZVJlZigqbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpKSwgbnVs
bHB0cik7CiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UoKnRoaXMsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHku
Z2V0KCkpOwogfQogCkBAIC0xNDYsMTUgKzE0MywxMCBAQCB2b2lkIERvd25sb2FkUHJveHk6Ondp
bGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiBwcm9wb3NlZFJlcXVlc3QsIGNvbnN0IFJl
cwogCiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS53aWxsU2VuZFJlcXVlc3Qo
KnRoaXMsIFdURk1vdmUocHJvcG9zZWRSZXF1ZXN0KSwgcmVkaXJlY3RSZXNwb25zZSwgW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oUmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVx
dWVzdCkgewogICAgICAgICBtX3JlZGlyZWN0Q2hhaW4uYXBwZW5kKG5ld1JlcXVlc3QudXJsKCkp
OwotCi0gICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9wcm9jZXNzUG9vbCkKKyAgICAgICAg
aWYgKCFwcm90ZWN0ZWRUaGlzLT5tX2RhdGFTdG9yZSkKICAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBhdXRvKiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVjdGVkVGhpcy0+bV9wcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzc1By
b3h5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzUHJveHkt
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZVdpbGxTZW5kUmVxdWVzdChw
cm90ZWN0ZWRUaGlzLT5tX2Rvd25sb2FkSUQsIG5ld1JlcXVlc3QpLCAwKTsKKyAgICAgICAgYXV0
byYgbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb3RlY3RlZFRoaXMtPm1fZGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpOworICAgICAgICBuZXR3b3JrUHJvY2Vzc1Byb3h5LnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZVdpbGxTZW5kUmVxdWVzdChwcm90ZWN0ZWRUaGlzLT5t
X2Rvd25sb2FkSUQsIG5ld1JlcXVlc3QpLCAwKTsKICAgICB9KTsKIH0KIApAQCAtMTc5LDE2ICsx
NzEsMTQgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0
ZWRGaWxlbmFtZUFzeW5jKERvd25sb2FkSUQgZG93bmwKICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVu
dCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKCp0aGlzLCBSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFt
ZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRvd25sb2FkSUQgPSBk
b3dubG9hZElEXSAoQWxsb3dPdmVyd3JpdGUgYWxsb3dPdmVyd3JpdGUsIFN0cmluZyBkZXN0aW5h
dGlvbikgeworICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGlu
YXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJlc291cmNlUmVzcG9uc2VCYXNlOjpz
YW5pdGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKSwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxvYWRJRF0gKEFsbG93T3ZlcndyaXRlIGFs
bG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsKICAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgICAgIGlmICghZGVzdGlu
YXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGUoZGVzdGluYXRpb24sIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQorICAgICAg
ICBpZiAoIW1fZGF0YVN0b3JlKQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oZG93bmxvYWRJRCwgZGVz
dGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGFsbG93T3ZlcndyaXRlID09IEFsbG93
T3ZlcndyaXRlOjpZZXMpLCAwKTsKKyAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rv
d25sb2FkRGVzdGluYXRpb24oZG93bmxvYWRJRCwgZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNp
b25IYW5kbGUsIGFsbG93T3ZlcndyaXRlID09IEFsbG93T3ZlcndyaXRlOjpZZXMpLCAwKTsKICAg
ICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkUHJveHlNYXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkUHJveHlNYXAuY3BwCmluZGV4IDc2YTA3MTU3YjU5MS4uZDc0YThmYTZjNjRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94
eU1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
UHJveHlNYXAuY3BwCkBAIC00NCw3ICs0NCw3IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogRG93
bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm9j
ZXNzKQotICAgIDogbV9wcm9jZXNzKG1ha2VXZWFrUHRyKHByb2Nlc3MpKQorICAgIDogbV9wcm9j
ZXNzKHByb2Nlc3MpCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLCBtX3Nob3VsZFRha2VBc3Nl
cnRpb24oV1RGOjpwcm9jZXNzSGFzRW50aXRsZW1lbnQoImNvbS5hcHBsZS5tdWx0aXRhc2tpbmcu
c3lzdGVtYXBwYXNzZXJ0aW9ucyIpKQogI2VuZGlmCkBAIC03MCwxNCArNzAsMTIgQEAgdm9pZCBE
b3dubG9hZFByb3h5TWFwOjpwbGF0Zm9ybURlc3Ryb3koKQogCiB2b2lkIERvd25sb2FkUHJveHlN
YXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCkKIHsKLSAgICBpZiAobV9wcm9jZXNz
KQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBs
aWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpLCAwKTsKKyAgICBtX3Byb2Nlc3Muc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCksIDAp
OwogfQogCiB2b2lkIERvd25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdy
b3VuZCgpCiB7Ci0gICAgaWYgKG1fcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCks
IDApOworICAgIG1fcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGlj
YXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCksIDApOwogfQogCiBEb3dubG9hZFByb3h5JiBEb3du
bG9hZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFT
dG9yZSwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZv
LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKQEAgLTkyLDEzICs5MCwxMiBAQCBEb3du
bG9hZFByb3h5JiBEb3dubG9hZFByb3h5TWFwOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVE
YXRhU3RvcmUmIGRhdGFTdG9yZQogICAgICAgICBtX2Rvd25sb2FkVUlBc3NlcnRpb24gPSBtYWtl
VW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIldlYktpdCBk
b3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25UeXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsK
IAogICAgICAgICBBU1NFUlQoIW1fZG93bmxvYWROZXR3b3JraW5nQXNzZXJ0aW9uKTsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobV9wcm9jZXNzKTsKLSAgICAgICAgbV9kb3dubG9hZE5ldHdvcmtp
bmdBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy0+cHJv
Y2Vzc0lkZW50aWZpZXIoKSwgIldlYktpdCBkb3dubG9hZHMiX3MsIFByb2Nlc3NBc3NlcnRpb25U
eXBlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKKyAgICAgICAgbV9kb3dubG9hZE5ldHdvcmtpbmdB
c3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KG1fcHJvY2Vzcy5wcm9jZXNz
SWRlbnRpZmllcigpLCAiV2ViS2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6
OlVuYm91bmRlZE5ldHdvcmtpbmcpOwogCiAgICAgICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNw
ZW5zaW9uLCAiVUlQcm9jZXNzIHRvb2sgJ1dlYktpdCBkb3dubG9hZHMnIGFzc2VydGlvbnMgZm9y
IFVJUHJvY2VzcyBhbmQgTmV0d29ya1Byb2Nlc3MiKTsKICAgICB9CiAKLSAgICBtX3Byb2Nlc3Mt
PmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpLCBkb3du
bG9hZFByb3h5LmdldCgpKTsKKyAgICBtX3Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkUHJveHkt
PmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCksIGRvd25sb2FkUHJveHkuZ2V0KCkpOwogCiAgICAg
cmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CkBAIC0xMDksMTIgKzEwNiw5IEBAIHZvaWQgRG93bmxv
YWRQcm94eU1hcDo6ZG93bmxvYWRGaW5pc2hlZChEb3dubG9hZFByb3h5JiBkb3dubG9hZFByb3h5
KQogCiAgICAgUkVMRUFTRV9MT0coTG9hZGluZywgIlJlbW92aW5nIGRvd25sb2FkICUiIFBSSXU2
NCAiIGZyb20gVUlQcm9jZXNzIERvd25sb2FkUHJveHlNYXAiLCBkb3dubG9hZElELmRvd25sb2Fk
SUQoKSk7CiAKLSAgICAvLyBUaGUgRG93bmxvYWRQcm94eSBtYXkgYmUgaG9sZGluZyB0aGUgbGFz
dCByZWZlcmVuY2UgdG8gdGhlIHByb2Nlc3MgcG9vbC4KLSAgICBhdXRvIHByb3RlY3RlZFByb2Nl
c3NQb29sID0gbWFrZVJlZlB0cihtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkpOwotCiAgICAgQVNT
RVJUKG1fZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsKIAotICAgIG1fcHJvY2Vzcy0+
cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKKyAgICBtX3Byb2Nlc3MucmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKICAgICBkb3dubG9hZFByb3h5Lmlu
dmFsaWRhdGUoKTsKICAgICBtX2Rvd25sb2Fkcy5yZW1vdmUoZG93bmxvYWRJRCk7CiAKQEAgLTEz
MywxNSArMTI3LDEzIEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6aW52YWxpZGF0ZSgpCiAgICAg
Zm9yIChjb25zdCBhdXRvJiBkb3dubG9hZCA6IG1fZG93bmxvYWRzLnZhbHVlcygpKSB7CiAgICAg
ICAgIGRvd25sb2FkLT5wcm9jZXNzRGlkQ2xvc2UoKTsKICAgICAgICAgZG93bmxvYWQtPmludmFs
aWRhdGUoKTsKLSAgICAgICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWQtPmRvd25s
b2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgICAgICBtX3Byb2Nlc3MucmVtb3ZlTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRv
d25sb2FkLT5kb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKICAgICB9CiAKICAgICBtX2Rvd25s
b2Fkcy5jbGVhcigpOwogICAgIG1fZG93bmxvYWRVSUFzc2VydGlvbiA9IG51bGxwdHI7CiAgICAg
bV9kb3dubG9hZE5ldHdvcmtpbmdBc3NlcnRpb24gPSBudWxscHRyOwogICAgIFJFTEVBU0VfTE9H
KFByb2Nlc3NTdXNwZW5zaW9uLCAiVUlQcm9jZXNzIERvd25sb2FkUHJveHlNYXAgaW52YWxpZGF0
ZWQgLSBSZWxlYXNlZCAnV2ViS2l0IGRvd25sb2FkcycgYXNzZXJ0aW9ucyBmb3IgVUlQcm9jZXNz
IGFuZCBOZXR3b3JrUHJvY2VzcyIpOwotCi0gICAgbV9wcm9jZXNzID0gbnVsbHB0cjsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAppbmRleCAzYmUyMDc5YTBmMmMuLjRmYTAwMWJk
N2ZhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkUHJveHlNYXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRQcm94eU1hcC5oCkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0
Zm9ybUNyZWF0ZSgpOwogICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBXZWFrUHRy
PE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fcHJvY2VzczsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
JiBtX3Byb2Nlc3M7CiAgICAgSGFzaE1hcDxEb3dubG9hZElELCBSZWZQdHI8RG93bmxvYWRQcm94
eT4+IG1fZG93bmxvYWRzOwogCiAgICAgYm9vbCBtX3Nob3VsZFRha2VBc3NlcnRpb24geyBmYWxz
ZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9X
ZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcAppbmRleCA3MmRlYjBjNWE2MmMuLjgyYzZl
YjFmNzBhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0
ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKQEAgLTE1NSw3ICsxNTUsNyBA
QCBzdGF0aWMgUmVmPFdlYnNpdGVEYXRhU3RvcmU+IGluc3BlY3RvcldlYnNpdGVEYXRhU3RvcmUo
KQogICAgIGNvbmZpZ3VyYXRpb24tPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnko
RmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2VEYXRhRGlyZWN0b3J5LCAi
aXRwIikpOwogICAgIGNvbmZpZ3VyYXRpb24tPnNldFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnkoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2VEYXRhRGly
ZWN0b3J5LCAic2VydmljZXdvcmtlcnMiKSk7CiAgICAgY29uZmlndXJhdGlvbi0+c2V0RGV2aWNl
SWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChiYXNlRGF0YURpcmVjdG9yeSwgImRldmljZWlkaGFzaHNhbHRzIikpOwotICAgIHJl
dHVybiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoV1RGTW92ZShjb25maWd1cmF0aW9uKSwgUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7CisgICAgcmV0dXJuIFdlYnNpdGVEYXRh
U3RvcmU6OmNyZWF0ZShXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pLCBQQUw6OlNlc3Npb25JRDo6Z2Vu
ZXJhdGVQZXJzaXN0ZW50U2Vzc2lvbklEKCkpOwogfQogCiBXZWJQYWdlUHJveHkqIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpCkBAIC0xNzUsNyArMTc1LDYg
QEAgV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVu
ZFBhZ2UoKQogICAgIGF1dG8gcGFnZUdyb3VwID0gV2ViUGFnZUdyb3VwOjpjcmVhdGUoaW5zcGVj
dG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoaW5zcGVjdGVkUGFnZSgpKSk7CiAgICAgYXV0
byB3ZWJzaXRlRGF0YVN0b3JlID0gaW5zcGVjdG9yV2Vic2l0ZURhdGFTdG9yZSgpOwogICAgIGF1
dG8mIHByb2Nlc3NQb29sID0gaW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdGlvbkxldmVsKCkp
OwotICAgIHByb2Nlc3NQb29sLnNldFByaW1hcnlEYXRhU3RvcmUod2Vic2l0ZURhdGFTdG9yZS5n
ZXQoKSk7CiAKICAgICBhdXRvIHBhZ2VDb25maWd1cmF0aW9uID0gQVBJOjpQYWdlQ29uZmlndXJh
dGlvbjo6Y3JlYXRlKCk7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb2Nlc3NQb29sKCZw
cm9jZXNzUG9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3Jr
L0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKaW5kZXggOGMyM2JiZThjMDZhLi5kNmMzMzIzZGQ5
M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJv
dG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJQcm94eS5jcHAKQEAgLTQ0LDE3ICs0NCwxNyBAQCBMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJQcm94eTo6fkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5KCkKIAog
dm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKExlZ2Fj
eUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNz
UG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywg
Y3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJv
dG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJ
RCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7
CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgp
LnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKIH0KIAogdm9pZCBMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgbV9uZXR3b3Jr
UHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCku
aW52YWxpZGF0ZSgqdGhpcyk7CisgICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LmN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCgpLmludmFsaWRhdGUoKnRoaXMpOwogfQogCiB2b2lkIExlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3YXNSZWRpcmVjdGVkVG9SZXF1ZXN0KExlZ2FjeUN1
c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVj
dFJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggYzFmNDcwOGI4MWNmLi4wMWExNTcxZThiZjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5LmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtQcm9j
ZXNzUHJveHkuaCIKIAogI2luY2x1ZGUgIkFQSUNvbnRlbnRSdWxlTGlzdC5oIgorI2luY2x1ZGUg
IkFQSUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlUHJveHkuaCIKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbk1hbmFnZXIuaCIK
ICNpbmNsdWRlICJEb3dubG9hZFByb3h5TWFwLmgiCkBAIC0zNSw2ICszNiw3IEBACiAjaW5jbHVk
ZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjZW5kaWYKKyNpbmNsdWRl
ICJMZWdhY3lHbG9iYWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJOZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mby5oIgpAQCAtNDgsNiArNTAsNyBAQAogI2luY2x1ZGUg
IlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NT
dGF0dXMuaCIKICNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5oIgorI2luY2x1
ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NNZXNzYWdl
cy5oIgpAQCAtNTgsOCArNjEsMTAgQEAKICNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURh
dGFTdG9yZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jl
Z2lzdHJhYmxlRG9tYWluLmg+CisjaW5jbHVkZSA8d3RmL0NhbGxiYWNrQWdncmVnYXRvci5oPgog
I2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogCiAjaWYgRU5BQkxFKFNFQ19JVEVN
X1NISU0pCkBAIC03MCwyMCArNzUsMTI0IEBACiAjaW5jbHVkZSA8d3RmL3NwaS9kYXJ3aW4vWFBD
U1BJLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkxlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oIgorI2VuZGlmCisKICNkZWZpbmUgTUVTU0FHRV9D
SEVDSyhhc3NlcnRpb24pIE1FU1NBR0VfQ0hFQ0tfQkFTRShhc3NlcnRpb24sIGNvbm5lY3Rpb24o
KSkKIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotTmV0
d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYgcHJv
Y2Vzc1Bvb2wpCi0gICAgOiBBdXhpbGlhcnlQcm9jZXNzUHJveHkocHJvY2Vzc1Bvb2wuYWx3YXlz
UnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCi0gICAgLCBtX3Byb2Nlc3NQb29sKHByb2Nlc3NQ
b29sKQorc3RhdGljIEhhc2hTZXQ8TmV0d29ya1Byb2Nlc3NQcm94eSo+JiBuZXR3b3JrUHJvY2Vz
c2VzU2V0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8TmV0d29ya1Byb2Nlc3NQcm94eSo+PiBzZXQ7
CisgICAgcmV0dXJuIHNldDsKK30KKworVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4g
TmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpCit7CisgICAgVmVjdG9y
PFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzOworICAgIHByb2Nlc3Nlcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG5ldHdvcmtQcm9jZXNzZXNTZXQoKS5zaXplKCkpOworICAgIGZv
ciAoYXV0byogbmV0d29ya1Byb2Nlc3MgOiBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkpCisgICAgICAg
IHByb2Nlc3Nlcy51bmNoZWNrZWRBcHBlbmQoKm5ldHdvcmtQcm9jZXNzKTsKKyAgICByZXR1cm4g
cHJvY2Vzc2VzOworfQorCitzdGF0aWMgUmVmUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+JiBkZWZh
dWx0UHJvY2VzcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0cjxOZXR3b3Jr
UHJvY2Vzc1Byb3h5Pj4gcHJvY2VzczsKKyAgICByZXR1cm4gcHJvY2Vzcy5nZXQoKTsKK30KKwor
UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRlZmF1bHROZXR3
b3JrUHJvY2VzcygpCit7CisgICAgaWYgKCFkZWZhdWx0UHJvY2VzcygpKQorICAgICAgICBkZWZh
dWx0UHJvY2VzcygpID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlKCk7CisgICAgcmV0dXJu
ICpkZWZhdWx0UHJvY2VzcygpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnRlcm1p
bmF0ZSgpCit7CisgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Ojp0ZXJtaW5hdGUoKTsKKyAgICBp
ZiAoYXV0byogY29ubmVjdGlvbiA9IHRoaXMtPmNvbm5lY3Rpb24oKSkKKyAgICAgICAgY29ubmVj
dGlvbi0+aW52YWxpZGF0ZSgpOworICAgIGRpZFRlcm1pbmF0ZSgpOworfQorCit2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmRpZFRlcm1pbmF0ZSgpCit7CisgICAgaWYgKHRoaXMgPT0gZGVmYXVs
dFByb2Nlc3MoKS5nZXQoKSkKKyAgICAgICAgZGVmYXVsdFByb2Nlc3MoKSA9IG51bGxwdHI7Cit9
CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3
UHJvY2VzcygpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0
IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgorICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBv
bmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgorICAg
IGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsKKyAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRX
YWl0KFt0aGlzXSB7CisgICAgICAgICAgICBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9j
ZXNzKCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzU2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24o
KS5zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1l
c1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3Rv
cihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5
cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVt
ZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6
c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOworICAgIHBhcmFtZXRlcnMu
dXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2Jh
bFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7Cisg
ICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRv
bigpLmNhY2hlTW9kZWwoKTsKKyAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IFdlYlByb2Nlc3NQb29s
Ojp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKKyAgICAgICAgcGFyYW1l
dGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1l
KTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChTdHJpbmcgY29va2llU3RvcmFn
ZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7ICFj
b29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnksIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Cisg
ICAgaWYgKFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6
bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOyAhY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5Lmlz
RW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdy
aXRlRGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5jb250YWlu
ZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgcGFyZW50
QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgp
OyAhcGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lv
bjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKKyNlbmRpZgorICAgIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKK30KKwor
c3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHko
KQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJv
Y2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5hbHdheXNSdW5zQXRCYWNr
Z3JvdW5kUHJpb3JpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJ
QmFja2dyb3VuZEFzc2VydGlvbigpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdl
YlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bv
b2wtPnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJv
eHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoKQorICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KGFu
eVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCiAjaWYgRU5BQkxF
KExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKKyAgICAsIG1fY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWVSZWY8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50PigpKQogICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgqdGhpcykKKyNlbHNl
CisgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogI2VuZGlmCi0gICAgLCBtX3Rocm90dGxl
cigqdGhpcywgcHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQor
ICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dy
b3VuZEFzc2VydGlvbigpKQorICAgICwgbV9jb29raWVNYW5hZ2VyKFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Y3JlYXRlKCp0aGlzKSkKIHsKICAgICBjb25uZWN0KCk7CisgICAgc2VuZENyZWF0aW9u
UGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgIHVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsK
KyAgICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuYWRkKHRoaXMpOwogfQogCiBOZXR3b3JrUHJvY2Vz
c1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgpCkBAIC05OCw2ICsyMDcsNyBAQCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgpCiAKICAgICBpZiAobV9kb3dubG9h
ZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAtPmludmFsaWRhdGUoKTsKKyAg
ICBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkucmVtb3ZlKHRoaXMpOwogfQogCiB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRp
b25zJiBsYXVuY2hPcHRpb25zKQpAQCAtMTA1LDE1ICsyMTUsOCBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25z
JiBsYXVuYwogICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1R5cGUgPSBQcm9jZXNzTGF1bmNoZXI6
OlByb2Nlc3NUeXBlOjpOZXR3b3JrOwogICAgIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6Z2V0TGF1
bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zKTsKIAotICAgIGlmIChwcm9jZXNzUG9vbCgpLnNob3Vs
ZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpKSB7Ci0gICAgICAg
IHByb2Nlc3NQb29sKCkuc2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxG
b3JUZXN0aW5nKGZhbHNlKTsKKyAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6c2hvdWxkTWFrZU5l
eHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpCiAgICAgICAgIGxhdW5jaE9w
dGlvbnMuc2hvdWxkTWFrZVByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7Ci0gICAg
fQotCi0jaWYgUExBVEZPUk0oUExBWVNUQVRJT04pCi0gICAgbGF1bmNoT3B0aW9ucy5wcm9jZXNz
UGF0aCA9IG1fcHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3NQYXRoKCk7Ci0gICAgbGF1bmNoT3B0
aW9ucy51c2VySWQgPSBtX3Byb2Nlc3NQb29sLnVzZXJJZCgpOwotI2VuZGlmCiB9CiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6Y29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbikKQEAgLTE2NiwxMiArMjY5LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCiAgICAgfQogfQog
Ci1Eb3dubG9hZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5
KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNv
dXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5
KiBvcmlnaW5hdGluZ1BhZ2UpCitEb3dubG9hZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpj
cmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUHJvY2Vz
c1Bvb2wmIHByb2Nlc3NQb29sLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVz
dCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0
aW5nUGFnZSkKIHsKICAgICBpZiAoIW1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3du
bG9hZFByb3h5TWFwID0gbWFrZVVuaXF1ZTxEb3dubG9hZFByb3h5TWFwPigqdGhpcyk7CiAKLSAg
ICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9y
ZSwgbV9wcm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5n
UGFnZSk7CisgICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94
eShkYXRhU3RvcmUsIHByb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5mbywgb3Jp
Z2luYXRpbmdQYWdlKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpmZXRjaFdlYnNp
dGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZT4gZGF0YVR5cGVzLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRp
b25zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChXZWJzaXRlRGF0YSk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0yMzcsOCArMzQwLDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0
d29ya1Byb2Nlc3NDcmFzaGVkKCkKIHsKICAgICBjbGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKLSAg
ICAvLyBUZWxsIHRoZSBuZXR3b3JrIHByb2Nlc3MgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgdGhp
cyBuZXR3b3JrIHByb2Nlc3MgcHJveHkuIFRoaXMgd2lsbCBjYXVzZSB1cyB0byBiZSBkZWxldGVk
LgotICAgIG1fcHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKKyAgICBS
ZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CisgICAgZm9yIChh
dXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAg
ICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CisgICAgZm9y
IChhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlIDogbV93ZWJzaXRlRGF0YVN0b3JlcykKKyAgICAgICAg
d2Vic2l0ZURhdGFTdG9yZS5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMpOwogfQogCiB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmNsZWFyQ2FsbGJhY2tTdGF0ZXMoKQpAQCAtMjU4LDkgKzM2
NCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlCiAgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShj
b25uZWN0aW9uLCBkZWNvZGVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcHJvY2Vz
c1Bvb2wuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQotICAgICAgICByZXR1
cm47Ci0KICAgICBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2UoY29ubmVjdGlv
biwgZGVjb2Rlcik7CiB9CiAKQEAgLTI3NCw4ICszNzcsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IElQQwogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZENsb3NlKElQQzo6Q29ubmVjdGlv
biYpCiB7Ci0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWYobV9wcm9jZXNz
UG9vbCk7Ci0KICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2Fk
UHJveHlNYXAtPmludmFsaWRhdGUoKTsKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NP
TF9NQU5BR0VSKQpAQCAtMzMxLDExICs0MzIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCBzZXNzaQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF0b3BPcmlnaW4gfHwgIW1fcHJvY2Vz
c1Bvb2wuaXNTZXJ2aWNlV29ya2VyUGFnZUlEKHBhZ2VJRCkpIHsKLSAgICAgICAgcHJvY2Vzc0F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHNlc3Npb25JRCwgV1RGTW92ZShhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgV2ViUGFnZVByb3h5Ojpm
b3JNb3N0VmlzaWJsZVdlYlBhZ2VJZkFueShzZXNzaW9uSUQsICp0b3BPcmlnaW4sIFt0aGlzLCB3
ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSUQsIGF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlID0gV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIG5lZ290aWF0ZWRMZWdh
Y3lUTFNdKGF1dG8qIHBhZ2UpIG11dGFibGUgewogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMzkyLDExICs0ODgsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqIGxhdW5jaGVyLCBJUEM6
OkNvbgogICAgICAgICBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChtX3Byb2Nlc3NQb29sLnByb2Nl
c3NTdXBwcmVzc2lvbkVuYWJsZWQoKSkKLSAgICAgICAgc2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5h
YmxlZCh0cnVlKTsKLSNlbmRpZgogICAgIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAg
aWYgKHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiA9IHRoaXMtPmNvbm5lY3Rpb24oKS0+eHBj
Q29ubmVjdGlvbigpKQpAQCAtMTIwNSw3ICsxMjk2LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNl
c3MKIH0KIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJh
Y3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zKQogewot
ICAgIHByb2Nlc3NQb29sKCkuc2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oV1RGTW92ZShk
b21haW5zKSk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjph
bGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnNldERvbWFpbnNXaXRoVXNl
ckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHsgZG9tYWlu
cyB9KTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCkBA
IC0xMjUyLDQ1ICsxMzQ0LDMxIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Zmx1c2hDb29r
aWVzKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIENvbXBsZXRpCiAgICAgc2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Rmx1c2hDb29raWVzKHNlc3Np
b25JRCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjphZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmIHN0b3JlKQordm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphZGRTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmIHN0b3Jl
KQogewotICAgIG1fc2Vzc2lvbklEcy5hZGQoc3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBtX3dl
YnNpdGVEYXRhU3RvcmVzLmFkZChzdG9yZSk7CiAKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkK
LSAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3Rv
cmUgeyBzdG9yZS0+cGFyYW1ldGVycygpIH0sIDApOwotICAgIGF1dG8gc2Vzc2lvbklEID0gc3Rv
cmUtPnNlc3Npb25JRCgpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
QWRkV2Vic2l0ZURhdGFTdG9yZSB7IHN0b3JlLnBhcmFtZXRlcnMoKSB9LCAwKTsKKyAgICBhdXRv
IHNlc3Npb25JRCA9IHN0b3JlLnNlc3Npb25JRCgpOwogICAgIGlmICghc2Vzc2lvbklELmlzRXBo
ZW1lcmFsKCkpIHsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAgICAgY3JlYXRl
U3ltTGlua0ZvckZpbGVVcGdyYWRlKHN0b3JlLT5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeSgpKTsKKyAgICAgICAgY3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHN0b3JlLnJlc29s
dmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCkpOwogI2VuZGlmCiAgICAgfQogfQogCi1ib29s
IE5ldHdvcmtQcm9jZXNzUHJveHk6Omhhc1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KSBjb25zdAotewotICAgIHJldHVybiBtX3Nlc3Npb25JRHMuY29udGFpbnMoc2Vzc2lvbklEKTsK
LX0KLQotdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCkKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihX
ZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIG1fc2Vzc2lvbklEcy5y
ZW1vdmUoc2Vzc2lvbklEKTsKKyAgICBtX3dlYnNpdGVEYXRhU3RvcmVzLnJlbW92ZSh3ZWJzaXRl
RGF0YVN0b3JlKTsKIAogICAgIGlmIChjYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBzZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24geyBzZXNzaW9uSUQgfSwgMCk7
CisgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEZXN0cm95U2Vzc2lvbiB7
IHdlYnNpdGVEYXRhU3RvcmUuc2Vzc2lvbklEKCkgfSwgMCk7CiB9CiAKIFdlYnNpdGVEYXRhU3Rv
cmUqIE5ldHdvcmtQcm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBpZiAoc2Vzc2lvbklEID09IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgaWYgKCFXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpIHsKLSAgICAgICAgICAgIGF1dG8qIHdlYnNp
dGVEYXRhU3RvcmUgPSBtX3Byb2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUoKTsKLSAgICAgICAg
ICAgIGlmICh3ZWJzaXRlRGF0YVN0b3JlICYmIHdlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgp
ID09IHNlc3Npb25JRCkKLSAgICAgICAgICAgICAgICByZXR1cm4gd2Vic2l0ZURhdGFTdG9yZTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0
YVN0b3JlKCkucHRyKCk7Ci0gICAgfQotICAgIHJldHVybiBXZWJzaXRlRGF0YVN0b3JlOjpleGlz
dGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICByZXR1
cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lv
bklEKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZXRyaWV2ZUNhY2hlU3RvcmFn
ZVBhcmFtZXRlcnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpAQCAtMTMzNyw3ICsxNDE1LDcg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHkoV2ViVXNlckNvbnRlbnQKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9u
VG9OZXR3b3JrUHJvY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9tYWluLCBQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX3Byb2Nlc3NQb29sLmVzdGFibGlzaFdvcmtlckNvbnRl
eHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgV1RGTW92ZShyZWdpc3RyYWJsZURv
bWFpbiksIHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIFdlYlBy
b2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nl
c3MoKnRoaXMsIFJlZ2lzdHJhYmxlRG9tYWluIHtyZWdpc3RyYWJsZURvbWFpbn0sIHNlc3Npb25J
RCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OndvcmtlckNvbnRleHRDb25uZWN0aW9uTm9Mb25nZXJOZWVkZWQoV2ViQ29yZTo6UHJv
Y2Vzc0lkZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTE1MDAsMTYgKzE1NzgsMzQgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpwcmVjb25uZWN0VG8oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBXZWJQYWdlUHJveHlJZGUKICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJl
Y29ubmVjdFRvKHNlc3Npb25JRCwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJRCwgdXJsLCB1c2Vy
QWdlbnQsIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9t
YWluKSwgMCk7CiB9CiAKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sSGFzRm9yZWdyb3VuZFdl
YlByb2Nlc3NlcygpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPmhhc0Zv
cmVncm91bmRXZWJQcm9jZXNzZXMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sSGFzQmFj
a2dyb3VuZFdlYlByb2Nlc3NlcygpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdl
YlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bv
b2wtPmhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpCiB7Ci0gICAgaWYgKHByb2Nlc3NQb29sKCkuaGFz
Rm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKSB7CisgICAgaWYgKGFueVByb2Nlc3NQb29sSGFzRm9y
ZWdyb3VuZFdlYlByb2Nlc3NlcygpKSB7CiAgICAgICAgIGlmICghUHJvY2Vzc1Rocm90dGxlcjo6
aXNWYWxpZEZvcmVncm91bmRBY3Rpdml0eShtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcykpIHsK
ICAgICAgICAgICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzID0gdGhyb3R0bGVyKCkuZm9y
ZWdyb3VuZEFjdGl2aXR5KCJOZXR3b3JraW5nIGZvciBmb3JlZ3JvdW5kIHZpZXcocykiX3MpOwog
ICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NEaWRUcmFu
c2l0aW9uVG9Gb3JlZ3JvdW5kKCksIDApOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgaWYgKHByb2Nlc3NQb29sKCkuaGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpKSB7
CisgICAgaWYgKGFueVByb2Nlc3NQb29sSGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpKSB7CiAg
ICAgICAgIGlmICghUHJvY2Vzc1Rocm90dGxlcjo6aXNWYWxpZEJhY2tncm91bmRBY3Rpdml0eSht
X2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcykpIHsKICAgICAgICAgICAgIG1fYWN0aXZpdHlGcm9t
V2ViUHJvY2Vzc2VzID0gdGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJOZXR3b3JraW5n
IGZvciBiYWNrZ3JvdW5kIHZpZXcocykiX3MpOwogICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NEaWRUcmFuc2l0aW9uVG9CYWNrZ3JvdW5kKCksIDApOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuaAppbmRleCBhMGI0YzFkODkzOGUuLjBhZDYxODc4YmQ2MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAg
LTQ2LDEyICs0NiwxNyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiWFBDRXZl
bnRIYW5kbGVyLmgiCisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRyLmg+CiAjZW5kaWYKIAogbmFt
ZXNwYWNlIElQQyB7CiBjbGFzcyBGb3JtRGF0YVJlZmVyZW5jZTsKIH0KIAorbmFtZXNwYWNlIEFQ
SSB7CitjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQ
QUwgewogY2xhc3MgU2Vzc2lvbklEOwogfQpAQCAtNzMsOCArNzgsOCBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7Citj
bGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBX
ZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OwogCiBl
bnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyA6IGJvb2w7CkBAIC04Niw4ICs5
MSw5IEBAIHN0cnVjdCBGcmFtZUluZm9EYXRhOwogc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOwogc3RydWN0IFJlc291cmNlTG9hZEluZm87CiBzdHJ1Y3QgV2Vic2l0ZURh
dGE7CitzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM7CiAKLWNsYXNzIE5ldHdvcmtQ
cm9jZXNzUHJveHkgZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRl
IFByb2Nlc3NUaHJvdHRsZXJDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOZXR3b3JrUHJv
Y2Vzc1Byb3h5PiB7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1
eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LCBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4sIHB1YmxpYyBSZWZDb3VudGVk
PE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKICAgICB1c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluOwpAQCAtMTAyLDEyICsxMDgsMTggQEAgcHVibGljOgogICAgIHVzaW5nIERvbWFpbklu
TmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVz
aW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhw
bGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBS
ZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7CisgICAgc3Rh
dGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigq
bmV3IE5ldHdvcmtQcm9jZXNzUHJveHkpOyB9CiAgICAgfk5ldHdvcmtQcm9jZXNzUHJveHkoKTsK
IAorICAgIHN0YXRpYyBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBhbGxOZXR3b3Jr
UHJvY2Vzc2VzKCk7CisgICAgCisgICAgdm9pZCB0ZXJtaW5hdGUoKSBmaW5hbDsKKyAgICB2b2lk
IGRpZFRlcm1pbmF0ZSgpOworCiAgICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24o
V2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwogCi0gICAgRG93bmxvYWRQcm94eSYgY3Jl
YXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRp
bmdQYWdlKTsKKyAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVE
YXRhU3RvcmUmLCBXZWJQcm9jZXNzUG9vbCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSk7
CiAKICAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPiYmKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNp
dGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRp
bWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKTsKQEAgLTIwNiwxNSArMjE4LDEyIEBAIHB1YmxpYzoKICAgICBQcm9jZXNzVGhyb3R0
bGVyJiB0aHJvdHRsZXIoKSBmaW5hbCB7IHJldHVybiBtX3Rocm90dGxlcjsgfQogICAgIHZvaWQg
dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQ
b29sKCkgeyByZXR1cm4gbV9wcm9jZXNzUG9vbDsgfQotCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhU
RU5TSU9OUykKICAgICB2b2lkIGRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGFk
ZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYpOwotICAgIGJvb2wgaGFzU2Vzc2lvbihQ
QUw6OlNlc3Npb25JRCkgY29uc3Q7Ci0gICAgdm9pZCByZW1vdmVTZXNzaW9uKFBBTDo6U2Vzc2lv
bklEKTsKKyAgICB2b2lkIGFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYpOworICAgIHZvaWQg
cmVtb3ZlU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CiAgICAgCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCiAgICAgdm9pZCBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoY29uc3Qg
U3RyaW5nJiBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwpAQCAtMjI5LDYgKzIzOCw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29u
c3QgU3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJv
dG9jb2woY29uc3QgU3RyaW5nJik7CiAKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgp
OworICAgIAogICAgIHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIHZvaWQgcmVzb3VyY2VMb2FkRGlkU2VuZFJlcXVlc3Qo
V2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVzb3VyY2VMb2FkSW5mbyYmLCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmJiwgT3B0aW9uYWw8SVBDOjpGb3JtRGF0YVJlZmVyZW5jZT4mJik7CkBAIC0y
NDgsNyArMjU5LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIo
Y29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNs
ZWFyQnVuZGxlSWRlbnRpZmllcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAg
V2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyKCkgeyByZXR1cm4gbV9jb29raWVN
YW5hZ2VyLmdldCgpOyB9CisKKyAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYg
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgeyByZXR1cm4gbV9jdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQuZ2V0KCk7IH0KKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHhwY19vYmpl
Y3RfdCB4cGNFbmRwb2ludE1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2VuZHBvaW50TWVzc2Fn
ZS5nZXQoKTsgfQorI2VuZGlmCisKIHByaXZhdGU6CisgICAgZXhwbGljaXQgTmV0d29ya1Byb2Nl
c3NQcm94eSgpOworCisgICAgdm9pZCBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNz
KCk7CisKICAgICAvLyBBdXhpbGlhcnlQcm9jZXNzUHJveHkKICAgICBBU0NJSUxpdGVyYWwgcHJv
Y2Vzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiTmV0d29ya2luZyJfczsgfQogCkBAIC0y
NTYsNyArMjc5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbm5lY3Rpb25XaWxsT3BlbihJUEM6
OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHByb2Nlc3NXaWxsU2h1dERvd24oSVBD
OjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hl
ZCgpOwogICAgIHZvaWQgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCiAgICAgLy8gSVBDOjpDb25u
ZWN0aW9uOjpDbGllbnQKQEAgLTMxMiwxNiArMzM0LDE3IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCwgUmVmPEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+JiYpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIG1fcHJv
Y2Vzc1Bvb2w7Ci0KICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoV2Vic2l0ZURhdGEpPj4gbV9wZW5kaW5nRmV0Y2hXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAg
ICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGlu
Z0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmln
aW5zQ2FsbGJhY2tzOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkUHJveHlNYXA+IG1f
ZG93bmxvYWRQcm94eU1hcDsKKworICAgIFVuaXF1ZVJlZjxBUEk6OkN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiAjaWYgRU5BQkxFKExF
R0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKICAgICBMZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eSBtX2N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OwogI2VuZGlmCisKICAgICBQ
cm9jZXNzVGhyb3R0bGVyIG1fdGhyb3R0bGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9jZXNz
VGhyb3R0bGVyOjpCYWNrZ3JvdW5kQWN0aXZpdHk+IG1fYWN0aXZpdHlGb3JIb2xkaW5nTG9ja2Vk
RmlsZXM7CiAgICAgUHJvY2Vzc1Rocm90dGxlcjo6QWN0aXZpdHlWYXJpYW50IG1fYWN0aXZpdHlG
cm9tV2ViUHJvY2Vzc2VzOwpAQCAtMzQ3LDkgKzM3MCwxMSBAQCBwcml2YXRlOgogICAgIHByaXZh
dGU6CiAgICAgICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2Vz
czsKICAgICB9OworICAgIE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4gbV9lbmRwb2ludE1lc3Nh
Z2U7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8UEFMOjpTZXNzaW9uSUQ+IG1fc2Vzc2lvbklEczsK
KyAgICBXZWFrSGFzaFNldDxXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmVzOwor
ICAgIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IG1fY29va2llTWFuYWdlcjsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQppbmRleCBiOGRhZWRmN2Jl
YmEuLjBlNWZhZWMxYjNhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAgLTUxLDggKzUxLDEx
IEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENF
dmVudCh4cGNfb2JqZWN0X3QgZXZlbnQpIGNvCiAgICAgaWYgKG1lc3NhZ2VOYW1lLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1lc3NhZ2VOYW1lID09IExhdW5j
aFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6OnhwY0xhdW5jaFNlcnZpY2VzRGF0YWJhc2VY
UENFbmRwb2ludE1lc3NhZ2VOYW1lKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5wcm9jZXNz
UG9vbCgpLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2ZW50KTsK
KyAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50
czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVzc2FnZU5hbWUpIHsKKyAg
ICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+bV9lbmRwb2ludE1lc3NhZ2UgPSBldmVudDsKKyAgICAg
ICAgZm9yIChhdXRvJiBkYXRhU3RvcmUgOiBtX25ldHdvcmtQcm9jZXNzLT5tX3dlYnNpdGVEYXRh
U3RvcmVzKQorICAgICAgICAgICAgZGF0YVN0b3JlLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBv
aW50VG9BbGxXZWJQcm9jZXNzZXMoKTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCmlu
ZGV4IGNjNTI2YWFmM2FhZi4uMDg1ZTdkMjY1YTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNp
bmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQSVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5j
bHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNz
UHJveHkuaCIKICNpbmNsdWRlICJPcHRpb25hbENhbGxiYWNrSUQuaCIKICNpbmNsdWRlICJXZWJD
b29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHlN
ZXNzYWdlcy5oIgpAQCAtMzksMjQgKzQwLDE2IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jb25zdCBjaGFyKiBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnN1cHBsZW1lbnROYW1lKCkKK1dlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdl
clByb3h5KE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKQorICAgIDogbV9uZXR3
b3JrUHJvY2VzcyhtYWtlV2Vha1B0cihuZXR3b3JrUHJvY2VzcykpCiB7Ci0gICAgcmV0dXJuICJX
ZWJDb29raWVNYW5hZ2VyUHJveHkiOwotfQotCi1SZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wp
Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KHByb2Nl
c3NQb29sKSk7Ci19Ci0KLVdlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclBy
b3h5KFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKLSAgICA6IFdlYkNvbnRleHRTdXBwbGVt
ZW50KHByb2Nlc3NQb29sKQotewotICAgIFdlYkNvbnRleHRTdXBwbGVtZW50Ojpwcm9jZXNzUG9v
bCgpLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CisgICAgbmV0d29ya1Byb2Nlc3MuYWRkTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgKnRoaXMpOwogfQogCiBXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29r
aWVNYW5hZ2VyUHJveHkoKQogeworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsKICAgICBBU1NFUlQobV9jb29r
aWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKIH0KIApAQCAtNjUsMTAyICs1OCw4NCBAQCB2b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6aW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFn
ZXJDbGllbnRCYXNlKiBjbAogICAgIG1fY2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKIH0KIAot
Ly8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnBy
b2Nlc3NQb29sRGVzdHJveWVkKCkKLXsKLSAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnM7
Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlclNldCA6IG1fY29va2llT2JzZXJ2ZXJzLnZhbHVlcygp
KSB7Ci0gICAgICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlclNldCkKLSAgICAgICAg
ICAgIG9ic2VydmVycy5hcHBlbmQob2JzZXJ2ZXIpOwotICAgIH0KLQotICAgIGZvciAoYXV0byog
b2JzZXJ2ZXIgOiBvYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyLT5tYW5hZ2VyRGVzdHJveWVk
KCk7Ci0KLSAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKLX0KLQotdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkq
KQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKE5l
dHdvcmtQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpyZWYoKTsKLX0K
LQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQo
KQotewotICAgIEFQSTo6T2JqZWN0OjpkZXJlZigpOwotfQotCiB2b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNhbGxiYWNrRnVu
Y3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vz
c2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklE
KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFj
a0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVD
b29raWVzRm9ySG9zdG5hbWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3Jr
aW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFn
ZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklELCBob3N0bmFtZXMpKTsKKyAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNz
aW9uSUQsIGhvc3RuYW1lcyksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vz
c1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCkpOwor
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCks
IDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ29va2llJiBjb29raWUsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3Jr
UHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRl
bGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92
ZShjYWxsYmFja0Z1bmN0aW9uKV0oKSBtdXRhYmxlIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBXVEZN
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCiAgICAgICAgIGNhbGxiYWNrRnVuY3Rp
b24oKTsKLSAgICB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFs
bENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2FsbFRpbWUg
dGltZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0g
ICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklE
LCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vz
c2lvbklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAg
ICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5
OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tp
ZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9u
KQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAg
ICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJD
b29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBjb29raWVzKSwgV1RGTW92ZShjYWxs
YmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIGNvbnN0IFVSTCYgdXJs
LCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNz
aW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1
bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0
Q29va2llcyhzZXNzaW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RGTW92
ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9u
KCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2ll
PiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vz
cy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENv
b2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQp
LCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNr
RnVuY3Rpb24oeyB9KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tp
ZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAg
IGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7
CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2Vi
Q29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQ
cm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOworICAgIGlmIChtX25ldHdv
cmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJD
b29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7
CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hh
bmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2Vu
ZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJD
b29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vz
c2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVP
YnNlcnZlckNhbGxiYWNrKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2
b2lkICgpPiYmIGNhbGxiYWNrKQpAQCAtMjExLDE4ICsxODYsMTggQEAgdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OmNvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQog
CiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQ
QUw6OlNlc3Npb25JRCwgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotI2lmIFVTRShTT1VQKQotICAg
IHByb2Nlc3NQb29sKCktPnNldEluaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7
Ci0jZW5kaWYKLQotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
cG9saWN5KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kp
LCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNr
RnVuY3Rpb24oKTsKIH0KIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRU
UENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShz
ZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKyAgICBlbHNlCisgICAgICAg
IGNhbGxiYWNrRnVuY3Rpb24oSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6TmV2ZXIpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29v
a2llTWFuYWdlclByb3h5LmgKaW5kZXggMGJkZmMwZDRlNDdjLi42ZjUxZjAzZTVjMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCkBAIC01
NiwxMSArNTYsOSBAQCB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJyYXlD
YWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPFdlYkNvcmU6OkhUVFBDb29raWVBY2Nl
cHRQb2xpY3k+IEhUVFBDb29raWVBY2NlcHRQb2xpY3lDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJp
Y0NhbGxiYWNrPGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jj4gR2V0Q29va2llc0NhbGxi
YWNrOwogCi1jbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJ
bXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHVibGljIFdlYkNvbnRleHRT
dXBwbGVtZW50LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6
OkNvb2tpZU1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKLQotICAgIHN0YXRpYyBS
ZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBz
dGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKE5ldHdvcmtQcm9jZXNzUHJv
eHkmIG5ldHdvcmtQcm9jZXNzKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFn
ZXJQcm94eShuZXR3b3JrUHJvY2VzcykpOyB9CiAgICAgdmlydHVhbCB+V2ViQ29va2llTWFuYWdl
clByb3h5KCk7CiAKICAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5h
Z2VyQ2xpZW50QmFzZSopOwpAQCAtMTA0LDE3ICsxMDIsMTAgQEAgcHVibGljOgogICAgIHVzaW5n
IEFQSTo6T2JqZWN0OjpkZXJlZjsKIAogcHJpdmF0ZToKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHkoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoTmV0d29ya1By
b2Nlc3NQcm94eSYpOwogCiAgICAgdm9pZCBjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklE
KTsKIAotICAgIC8vIFdlYkNvbnRleHRTdXBwbGVtZW50Ci0gICAgdm9pZCBwcm9jZXNzUG9vbERl
c3Ryb3llZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgcHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQ
cm94eSopIG92ZXJyaWRlOwotICAgIHZvaWQgcHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNz
UHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkZXJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0K
ICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAKQEAgLTEyNSw2ICsx
MTYsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdURjo6RnVuY3Rp
b248dm9pZCAoKT4+IG1fbGVnYWN5Q29va2llT2JzZXJ2ZXJzOwogICAgIEhhc2hNYXA8UEFMOjpT
ZXNzaW9uSUQsIEhhc2hTZXQ8T2JzZXJ2ZXIqPj4gbV9jb29raWVPYnNlcnZlcnM7CiAKKyAgICBX
ZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAgICAgV2ViQ29v
a2llTWFuYWdlclByb3h5Q2xpZW50IG1fY2xpZW50OwogCiAjaWYgVVNFKFNPVVApCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCA1Mjg5NjIzYzhjMTYuLmRkMTdm
MjE0MDE2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0x
NzQ2LDcgKzE3NDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29udHJvbGxlZEJ5QXV0b21h
dGlvbihib29sIGNvbnRyb2xsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oY29udHJvbGxlZCkpOwotICAg
IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24obV93
ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9sbGVkQnlBdXRvbWF0aW9uKSk7
CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24obV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9sbGVkQnlBdXRvbWF0aW9uKSwgMCk7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjcmVhdGVJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3Ry
aW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCkBAIC0z
MjA3LDExICszMjA3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmlzRm9yY2VkSW50b0FwcEJvdW5k
TW9kZVRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4KIHZvaWQgV2ViUGFnZVBy
b3h5OjpkaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50SW5OZXR3b3JrUHJvY2VzcygpCiB7
CiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1Qp
Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgp
Lm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2Vu
ZE1lc3NhZ2UoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0
bGVtZW50KCksIDApOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJF
bnRpdGxlbWVudCgpLCAwKTsKICNlbmRpZgogfQogCkBAIC0zMjIwLDEzICszMjE2LDcgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpICYmICFQ
TEFURk9STShNQUNDQVRBTFlTVCkKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBz
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkNsZWFyU2VydmljZVdvcmtlckVu
dGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgp
KSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92
ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIHdlYnNpdGVE
YXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKICNlbmRpZgpAQCAtNDQyMCw3ICs0NDEwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnByZWNv
bm5lY3RUbyhjb25zdCBVUkwmIHVybCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBzdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSA9IG1fY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UgPyBXZWJDb3Jl
OjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlIDogV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3k6OkRvTm90VXNlOwotICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5lbnN1cmVO
ZXR3b3JrUHJvY2VzcygpLnByZWNvbm5lY3RUbyhzZXNzaW9uSUQoKSwgaWRlbnRpZmllcigpLCB3
ZWJQYWdlSUQoKSwgdXJsLCB1c2VyQWdlbnQoKSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGlz
TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4oKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5l
dHdvcmtQcm9jZXNzKCkucHJlY29ubmVjdFRvKHNlc3Npb25JRCgpLCBpZGVudGlmaWVyKCksIHdl
YlBhZ2VJRCgpLCB1cmwsIHVzZXJBZ2VudCgpLCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNO
YXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNl
dENhblVzZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wgY2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UpCkBA
IC00NzE2LDcgKzQ3MDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZy
YW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUluZm9EYXRhJgogICAgICAgICAgICAg
UmVnaXN0cmFibGVEb21haW4gY3VycmVudERvbWFpbiB7IGN1cnJlbnRSZXF1ZXN0LnVybCgpIH07
CiAgICAgICAgICAgICBVUkwgcmVxdWVzdGVyVVJMIHsgVVJMKCksIHJlcXVlc3Rlck9yaWdpbi50
b1N0cmluZygpIH07CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnREb21haW4ubWF0Y2hlcyhyZXF1
ZXN0ZXJVUkwpKQotICAgICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5kaWRD
b21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVEYXRhU3RvcmUtPnNl
c3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9LCBjdXJyZW50RG9t
YWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50aWZpZXIsIG1fd2ViUGFnZUlEKTsK
KyAgICAgICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuZGlk
Q29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIobV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgUmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0ZXJVUkwgfSwgY3VycmVudERv
bWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgbV9pZGVudGlmaWVyLCBtX3dlYlBhZ2VJRCk7
CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTQ3NTQsNyArNDc0NCw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQs
IEZyYW1lSW5mb0RhdGEmCiAgICAgaWYgKG5hdmlnYXRpb24gJiYgZnJhbWUtPmlzTWFpbkZyYW1l
KCkpIHsKICAgICAgICAgaWYgKGF1dG8mIGFkQ2xpY2tBdHRyaWJ1dGlvbiA9IG5hdmlnYXRpb24t
PmFkQ2xpY2tBdHRyaWJ1dGlvbigpKSB7CiAgICAgICAgICAgICBpZiAoYWRDbGlja0F0dHJpYnV0
aW9uLT5kZXN0aW5hdGlvbigpLm1hdGNoZXMoZnJhbWUtPnVybCgpKSkKLSAgICAgICAgICAgICAg
ICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yZUFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCAqYWRDbGlja0F0dHJpYnV0aW9uKSk7CisgICAgICAgICAgICAg
ICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+
c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmlidXRpb24pLCAwKTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtNTM2OCw3ICs1MzU4LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmxvZ0ZyYW1lTmF2aWdh
dGlvbihjb25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgY29uc3QgVVJMJiBwYWcKICAgICBpZiAo
dGFyZ2V0SG9zdC5pc0VtcHR5KCkgfHwgbWFpbkZyYW1lSG9zdC5pc0VtcHR5KCkgfHwgdGFyZ2V0
SG9zdCA9PSBzb3VyY2VVUkwuaG9zdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nl
c3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpMb2dGcmFtZU5hdmlnYXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgUmVnaXN0cmFibGVEb21haW4geyB0YXJnZXRVUkwgfSwgUmVnaXN0cmFibGVEb21haW4g
eyBwYWdlVVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgc291cmNlVVJMIH0sIGlzUmVkaXJlY3Qs
IGZyYW1lLmlzTWFpbkZyYW1lKCksIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kaWRGaW5pc2hE
b2N1bWVudExvYWRGb3JNYWluRnJhbWVUaW1lc3RhbXAsIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVk
QnlVc2VyKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1lTmF2aWdhdGlvbihtX3dlYnNpdGVEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHRhcmdldFVSTCB9LCBSZWdp
c3RyYWJsZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBzb3VyY2VVUkwg
fSwgaXNSZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUoKSwgTW9ub3RvbmljVGltZTo6bm93KCkg
LSBtX2RpZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5GcmFtZVRpbWVzdGFtcCwgd2FzUG90ZW50
aWFsbHlJbml0aWF0ZWRCeVVzZXIpLCAwKTsKIH0KICNlbmRpZgogCkBAIC05OTkzLDU4ICs5OTgz
LDI3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzeXN0ZW1QcmV2aWV3QWN0aW9uVHJpZ2dlcmVkKGNv
bnN0IFdlYkNvcmU6OlN5c3RlbVByZXZpZXdJbmZvCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkdW1w
QWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYg
KCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAg
d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5l
dHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2Fn
ZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1ZSks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9y
ZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcobV93
ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFsdWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25D
b252ZXJzaW9uVVJMRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1f
d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCku
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0
dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgp
KSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJl
ZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQ
cm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFy
a0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKICNpZiBF
TkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmNwcAppbmRleCBkOTI2YjMzY2JkZjIuLjcxZjFmNjM4ZGMzMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtNDUsNyArNDUsNiBAQAogI2lu
Y2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nSW5pdGlhbGl6YXRp
b24uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uSW5mby5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdv
cmtQcm9jZXNzUHJveHkuaCIKQEAgLTE0Myw4ICsxNDIsMTAgQEAKICNlbmRpZgogCiAjZGVmaW5l
IFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xP
RyhjaGFubmVsLCAiJXAgLSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdT
X18pCisjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhjaGFubmVsLCBm
bXQsIC4uLikgUkVMRUFTRV9MT0coY2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwgIyNf
X1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoY2hh
bm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsICIlcCAtIFdlYlByb2Nl
c3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgV0VCUFJPQ0VTU1BP
T0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0df
SUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFubmVsLCAiJXAgLSBX
ZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIFdFQlBS
T0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKGNoYW5uZWwsIGZtdCwgLi4u
KSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIGNo
YW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6IiBmbXQsICMjX19WQV9BUkdTX18pCiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMzIsNiArMjMzLDExIEBA
IHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgZ2xvYmFs
VVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90CiAgICAgcmV0dXJuIHNldDsKIH0KIAorVmVjdG9yPFN0
cmluZz4gV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVy
cygpCit7CisgICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3Rv
bVByb3RvY29sSGFuZGxlcnMoKSk7Cit9CisKIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9v
bChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICA6IG1f
Y29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uLmNvcHkoKSkKICAgICAsIG1fZGVmYXVsdFBhZ2VH
cm91cChXZWJQYWdlR3JvdXA6OmNyZWF0ZSgpKQpAQCAtMjM5LDcgKzI0NSw2IEBAIFdlYlByb2Nl
c3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29u
ZmlndXJhdGlvbikKICAgICAsIG1fYXV0b21hdGlvbkNsaWVudChtYWtlVW5pcXVlPEFQSTo6QXV0
b21hdGlvbkNsaWVudD4oKSkKICAgICAsIG1fZG93bmxvYWRDbGllbnQobWFrZVVuaXF1ZVJlZjxB
UEk6OkRvd25sb2FkQ2xpZW50PigpKQogICAgICwgbV9oaXN0b3J5Q2xpZW50KG1ha2VVbmlxdWU8
QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4oKSkKLSAgICAsIG1fY3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQ+KCkpCiAgICAgLCBtX3Zpc2l0ZWRMaW5rU3RvcmUoVmlzaXRlZExpbmtTdG9yZTo6Y3JlYXRl
KCkpCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICwgbV9oaWdoUGVyZm9ybWFuY2VHcmFwaGljc1Vz
YWdlU2FtcGxlcihtYWtlVW5pcXVlPEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVy
PigqdGhpcykpCkBAIC0yNjcsOSArMjcyLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQ
b29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogI2VuZGlm
CiAgICAgfSk7CiAKLSAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSAmJiBXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgbV93ZWJzaXRl
RGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCk7
Ci0KICAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IG1fY29uZmlndXJhdGlvbi0+YWx3YXlzUmV2YWxp
ZGF0ZWRVUkxTY2hlbWVzKCkpCiAgICAgICAgIG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0Fsd2F5c1Jl
dmFsaWRhdGVkLmFkZChzY2hlbWUpOwogCkBAIC0yODUsNyArMjg3LDYgQEAgV2ViUHJvY2Vzc1Bv
b2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1
cmF0aW9uKQogICAgIGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9URTogVGhlc2Ugc3Vi
LW9iamVjdHMgbXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VSZWNlaXZlck1hcC4u
Ci0gICAgYWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3Vw
cGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50
PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lP
TikKQEAgLTM0Miw5ICszNDMsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKCkK
ICAgICBwcm9jZXNzUG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAotICAgIGlmICht
X25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zaHV0RG93blByb2Nl
c3MoKTsKLQogI2lmIEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9jZXNzZXNVc2luZ0dh
bWVwYWRzLmlzRW1wdHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigp
LnByb2Nlc3NQb29sU3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAtNDAyLDE2ICs0MDAs
NiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVl
X3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JgogICAgICAgICBtX2F1dG9tYXRpb25DbGllbnQg
PSBXVEZNb3ZlKGF1dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCkKLXsKLSNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQotICAgIGlm
ICghY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAgICBtX2N1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQ+KCk7Ci0gICAgZWxzZQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCA9
IFdURk1vdmUoY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsKLSNlbmRpZgotfQotCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZp
ZXIoY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIp
CiB7CiAgICAgLy8gR3VhcmQgYWdhaW5zdCBBUEkgbWlzdXNlLgpAQCAtNDIxLDExICs0MDksNiBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlk
ZW50aWZpZXIoY29uc3QgU3RyaW5nJiBjdQogICAgIG1fY29uZmlndXJhdGlvbi0+c2V0Q3VzdG9t
V2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNl
QnVuZGxlSWRlbnRpZmllcik7CiB9CiAKLUlQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vzc1Bvb2w6
Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fbmV0d29ya1By
b2Nlc3MtPmNvbm5lY3Rpb24oKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VD
aGFuZ2VkKHZvaWQqIGNvbnRleHQpCiB7CiAgICAgc3RhdGljX2Nhc3Q8V2ViUHJvY2Vzc1Bvb2wq
Pihjb250ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7CkBAIC00MzUsOCArNDE4LDcgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNz
ZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKCkp
OwogI2lmIFVTRShTT1VQKQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25l
dHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJl
ZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CisgICAgV2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKICNlbmRpZgogfQogCkBAIC00NDksNyArNDMx
LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZnVsbEtleWJvYXJkQWNjZXNzTW9kZUNoYW5nZWQo
Ym9vbCBmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGUKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRN
ZW1vcnlQcmVzc3VyZUV2ZW50KGJvb2wgaXNDcml0aWNhbCkKIHsKICAgICBzZW5kVG9BbGxQcm9j
ZXNzZXMoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3Vy
ZUV2ZW50KGlzQ3JpdGljYWwpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdl
czo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0
aWNhbCkpOworICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2ZW50
KGlzQ3JpdGljYWwpLCAwKTsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBQ
bHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuc2VuZE1lbW9yeVByZXNzdXJlRXZlbnQo
aXNDcml0aWNhbCk7CiAjZW5kaWYKQEAgLTQ3NCwyNzUgKzQ1Nyw4IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNjcmVlblByb3BlcnRpZXNTdGF0ZUNoYW5nZWQoKQogI2VuZGlmCiB9CiAKLU5ldHdv
cmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJz
aXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKLXsKLSAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdv
cmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgot
ICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZp
b2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsK
LSAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0g
ICAgICAgIH0pOwotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0g
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0
b3JlKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYo
KndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9y
ZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqbV9u
ZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBhdXRvIG5ldHdvcmtQcm9jZXNzID0gbWFrZVVu
aXF1ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7Ci0KLSAgICBOZXR3b3JrUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9y
ZSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRp
bmdDb29raWVzID0gY29weVRvVmVjdG9yKG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVuZGluZ0Nvb2tp
ZXMoKSk7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygp
OwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvbkJ1
bmRsZUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24oKS5zb3Vy
Y2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBw
bGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1
cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKCk7Ci0jZW5kaWYK
LSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5n
czo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotCi0gICAgZm9yIChhdXRvJiBzY2hlbWUgOiBn
bG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAgICAgcGFy
YW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2No
ZW1lKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU3RyaW5nIGNvb2tpZVN0b3Jh
Z2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOwot
ICAgIGlmICghY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9y
YWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotCi0gICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nl
c3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb250YWluZXJD
YWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBw
YXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAg
ICBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1
bmRsZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHko
KSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURp
cmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFy
ZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFy
eUZpbGUoZW1wdHlTdHJpbmcoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBC
bG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAgICBwYXJh
bWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9WZWN0b3IoTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmUoKSk7
Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29udGVudFNl
Y3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0
b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KCkp
OwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVj
dG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFz
TG9jYWwoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3Mg
PSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNU
b1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQot
ICAgIC8vICoqKioqKioqKgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNoYW5nZSB0aGUgZGly
ZWN0b3J5IHN0cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlzayB3aXRob3V0IGZp
cnN0IGNvbnN1bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjovL3Byb2JsZW0vMTc0
NTQ3MTI+KQotICAgIC8vICoqKioqKioqKgotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0g
ICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y3JlYXRlU3lt
TGlua0ZvckZpbGVVcGdyYWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJh
bWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRh
U3RvcmUtPnJlc29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAg
IGlmICghcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KQotICAg
ICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSAgV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeSgpOwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0
ZURpcmVjdG9yeShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnks
IHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJz
aXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExvY2FsU3RvcmFnZURp
cmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5
KQotICAgICAgICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2FsU3RvcmFn
ZURpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3Jp
dGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0K
LSAgICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1f
d2Vic2l0ZURhdGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7
Ci0gICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjYWNoZVN0
b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBXVEZNb3Zl
KGNhY2hlU3RvcmFnZURpcmVjdG9yeSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKG1fd2Vi
c2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9
IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0
b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0
YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnkg
PSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1ldGVy
cygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy5kaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yUmVhZFdyaXRlRGlyZWN0b3J5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnksIHJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYm9v
bCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAgYm9vbCBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAgYm9vbCBz
aG91bGRJbmNsdWRlTG9jYWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQotICAgIFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgdGhp
cmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGU6OkFsbDsKLSAgICBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5h
YmxlZCBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IFdlYkNvcmU6OlNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKLSNlbmRpZgotICAgIFdlYkNvcmU6OkZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlID0gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENv
b2tpZXM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gc3RhbmRhbG9uZUFwcGxpY2F0
aW9uRG9tYWluOwotICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IGFwcEJv
dW5kRG9tYWluczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBtYW51YWxQcmV2YWxl
bnRSZXNvdXJjZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fdGNjUHJlZmVyZW5jZUVu
YWJsZWQgPSBkb2VzQXBwSGF2ZUlUUEVuYWJsZWQoKTsKLSAgICBpZiAod2l0aFdlYnNpdGVEYXRh
U3RvcmUgJiYgIXdpdGhXZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgp
KSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVu
Y2VFbmFibGVkOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBl
bHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUgJiYgIW1fd2Vic2l0ZURhdGFTdG9yZS0+aXNJdHBT
dGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3Rv
cmVFeGlzdHMoKSAmJiAhV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5pc0l0
cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRp
c3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGF0YVN0b3JlKCktPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZQotICAgICAgICBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSNlbmRpZgot
Ci0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAg
ICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gd2l0aFdl
YnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNlbmRpZgot
ICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICAgICAg
YXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGFy
YW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3VsZElu
Y2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAgICAgIGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdNb2RlOwot
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0aGlyZFBh
cnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNl
TG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7Ci0g
ICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1lU2l0ZVN0
cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0eVdl
YnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7
Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFw
cGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5k
RG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFBy
ZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURh
dGFTdG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9
IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7
Ci0gICAgICAgIAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSB3
aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAg
ICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAg
ICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJl
Y3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0Nh
Y2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0
IGF1dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc29s
dmVkSFNUU1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURpcmVj
dG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3Rvcnkg
PSBoc3RzU3RvcmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6
UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBl
bmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJ
U1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZl
bnQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsK
LSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAg
ICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dlYnNpdGVEYXRhU3Rv
cmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBz
aG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNl
TG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3Q7Ci0gICAgICAg
ICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZURlYnVn
TW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICAgICAg
dGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29va2llQmxvY2tpbmdN
b2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2Ft
ZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJl
c291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92
YWxNb2RlOwotICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluID0gbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnN0YW5k
YWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5kRG9tYWlucyA9IG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5h
cHBCb3VuZERvbWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5t
YW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gbV93ZWJz
aXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1
b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3Rh
KCk7Ci0KLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbV93ZWJz
aXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBp
ZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
bmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwg
U2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgYXV0byYg
aHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSFNUU1N0
b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFoc3RzU3RvcmFnZURpcmVjdG9yeS5pc051
bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBoc3RzU3Rv
cmFnZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZShoc3RzU3RvcmFnZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRl
LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgewotICAgICAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZUV4aXN0cygpKQotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9
IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VuYWJsZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwg
U2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lmIEhBVkUoQ0ZORVRXT1JLX0FMVEVS
TkFUSVZFX1NFUlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6Omh0dHAzRW5hYmxlZCgp
KSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeSA9IFdlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2VzRGlyZWN0b3J5KCk7Ci0gICAgICAg
IGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2Vy
dmljZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHAzRW5hYmxl
ZCA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBpc0l0cFN0YXRlRXhwbGljaXRseVNl
dCA9IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzID0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewotICAgICAgICBXVEZNb3ZlKHJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAgICBXVEZNb3ZlKHJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpLAotICAgICAgICBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0YXRlRXhwbGljaXRseVNldCwKLSAg
ICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCwKLSAgICAg
ICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQot
ICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlLAotICAgICAgICBzYW1lU2l0ZVN0
cmljdEVuZm9yY2VtZW50RW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJzdFBhcnR5V2Vic2l0
ZURhdGFSZW1vdmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluLAot
ICAgICAgICBhcHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNl
LAotICAgIH07Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmljIHBhcmFtZXRlcnMK
LSAgICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKLQotICAg
IC8vIEluaXRpYWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3b3JrUHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhw
YXJhbWV0ZXJzKSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBuZXR3b3JrUHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3b3JrUHJvY2Vzc0xh
dGVuY3lRT1MoKSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAwKTsKLSNlbmRpZgot
Ci0gICAgbmV0d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKLQotICAgIGlm
ICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vz
c2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICB3aXRoV2Vic2l0
ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQotICAgIC8vIE1ha2Ug
c3VyZSB0aGUgbmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUgc2Vzc2lvbnMgdGhh
dCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAgICBmb3IgKGF1dG8m
IHNlc3Npb25JRCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRl
ZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICB9Ci0KLSAgICBt
X25ldHdvcmtQcm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0gICAgcmV0dXJuICpt
X25ldHdvcmtQcm9jZXNzOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vz
c0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSkKIHsKLSAg
ICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJvY2Vzc1By
b3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChhdXRvJiBzdXBwbGVt
ZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+cHJvY2Vz
c0RpZENsb3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzUxLDkgKzQ2Nyw2IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1By
b3h5JiBuZXR3b3JrUHJvY2Vzc1ByCiAgICAgaWYgKG1fYXV0b21hdGlvblNlc3Npb24pCiAgICAg
ICAgIG1fYXV0b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAgLy8gTGVhdmUgdGhl
IHByb2Nlc3MgcHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28gdGhhdCB0aGUgY2xp
ZW50IGNvdWxkIHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAgbV9uZXR3b3JrUHJv
Y2VzcyA9IG51bGxwdHI7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQogCkBA
IC03NjQsMjAgKzQ3Nyw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3JrZXJQcm9j
ZXNzQ3Jhc2hlZChXZWJQcm9jZXNzUHJveHkmIHByb3h5KQogI2VuZGlmCiB9CiAKLXZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkm
IHdlYlByb2Nlc3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAgICBlbnN1cmVOZXR3
b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0
aGlzKSwgd2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwgcmVw
bHkgPSBXVEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc1ZhbGlkKGNv
bm5lY3Rpb25JbmZvLmlkZW50aWZpZXIoKSkgJiYgd2ViUHJvY2Vzc1Byb3h5ICYmIHdlYWtUaGlz
KSkgewotICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoUHJvY2Vz
cywgImdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0IGF0dGVtcHQsIHJl
dHJ5aW5nIik7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICAg
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3ZWJQcm9j
ZXNzUHJveHksIFdURk1vdmUocmVwbHkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7Ci0gICAgfSk7Ci19Ci0KICNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpncHVQcm9jZXNzQ3Jhc2hlZChQ
cm9jZXNzSUQgaWRlbnRpZmllcikKIHsKQEAgLTgwMSwyMyArNTAwLDI2IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmdldEdQVVByb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJv
Y2Vzc1Byb3h5LCBNCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJQcm9jZXNzUG9vbDo6c191c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gZmFsc2U7CisKICNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVj
dGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJveHksIFJlZ2lzdHJh
YmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIEFT
U0VSVF9VTlVTRUQocHJveHksICZwcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsKKyAg
ICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRh
U3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUp
CisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0
YVN0b3JlKCkucHRyKCk7CisgICAgaWYgKCFwcm9jZXNzUG9vbHMoKS5zaXplKCkpCisgICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWY8V2ViUHJvY2Vzc1Bvb2w+PiBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShBUEk6OlByb2Nlc3NQb29sQ29uZmln
dXJhdGlvbjo6Y3JlYXRlKCkuZ2V0KCkpKTsKIAotICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUg
PSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9u
SUQoc2Vzc2lvbklEKTsKLQotICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBp
ZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9
IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAg
ICAgICB3ZWJzaXRlRGF0YVN0b3JlID0gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOwotICAgIH0K
KyAgICAvLyBBcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCB0byBob3N0
IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgorICAgIGF1dG8qIHByb2Nlc3NQb29sID0gcHJv
Y2Vzc1Bvb2xzKClbMF07CisgICAgQVNTRVJUKHByb2Nlc3NQb29sKTsKIAogICAgIFdlYlByb2Nl
c3NQcm94eSogc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSB7IG51bGxwdHIgfTsKLSAgICBpZiAo
IW1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgewotICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAgICAgICAgaWYgKHByb2Nlc3MgPT0gbV9w
cmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkKKworICAg
IGlmICghc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7CisgICAgICAgIGZvciAo
YXV0byYgcHJvY2VzcyA6IHByb2Nlc3NQb29sLT5tX3Byb2Nlc3NlcykgeworICAgICAgICAgICAg
aWYgKHByb2Nlc3MgPT0gcHJvY2Vzc1Bvb2wtPm1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9jZXNz
LT5pc0R1bW15UHJvY2Vzc1Byb3h5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBpZiAoJnByb2Nlc3MtPndlYnNpdGVEYXRhU3RvcmUoKSAhPSB3ZWJzaXRlRGF0YVN0
b3JlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODI1LDM1ICs1MjcsMzUgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdv
cmtQcm9jZXNzKE5ldHdvcmtQcm8KICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAg
ICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9IHByb2Nlc3MuZ2V0KCk7Ci0gICAgICAg
ICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyh1c2Vy
Q29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CisgICAgICAg
ICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyhwcm9j
ZXNzUG9vbC0+dXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJz
KCkpOwogCi0gICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VE
KFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29y
a1Byb2Nlc3MgcmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0lcCwgUElE
PSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJv
eHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVM
RUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdl
YiBwcm9jZXNzIChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94
eSwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghc2VydmljZVdvcmtl
clByb2Nlc3NQcm94eSkgewotICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlByb2Nl
c3NQcm94eTo6Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFi
bGVEb21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CisgICAgICAgIGF1dG8gbmV3UHJvY2Vzc1By
b3h5ID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2VycygqcHJvY2Vzc1Bv
b2wsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CiAgICAg
ICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgPSBuZXdQcm9jZXNzUHJveHkucHRyKCk7CiAK
LSAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNlV29y
a2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNy
ZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVkKSIs
IHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnBy
b2Nlc3NJZGVudGlmaWVyKCkpOworICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19J
Rl9BTExPV0VEX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENv
bm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHBy
b2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCi0gICAgICAg
IGluaXRpYWxpemVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFTdG9y
ZSk7Ci0gICAgICAgIG1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkp
OworICAgICAgICBwcm9jZXNzUG9vbC0+aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJvY2Vz
c1Byb3h5LCB3ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vz
c2VzLmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOwogICAgIH0KIAotICAgIEFTU0VS
VCghbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5KSk7Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmFkZCgqc2VydmljZVdvcmtl
clByb2Nlc3NQcm94eSk7CisgICAgQVNTRVJUKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29u
dGFpbnMoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpKTsKKyAgICBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc2VzKCkuYWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKIAotICAgIHNlcnZpY2VX
b3JrZXJQcm9jZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KG1fc2Vydmlj
ZVdvcmtlclByZWZlcmVuY2VzID8gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6
IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxs
KCkpCi0gICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3JrZXJV
c2VyQWdlbnQobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKKyAgICBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Byb3h5LT5lc3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4dChwcm9jZXNzUG9vbC0+bV9z
ZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMgPyBwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyUHJl
ZmVyZW5jZXMudmFsdWUoKSA6IHByb2Nlc3NQb29sLT5tX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZl
cmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmICgh
cHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAg
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChwcm9j
ZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6cmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5JiBw
cm9jZXNzKQogewotICAgIEFTU0VSVChtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFpbnMo
cHJvY2VzcykpOwotICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7
CisgICAgQVNTRVJUKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlucyhwcm9jZXNzKSk7
CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLnJlbW92ZShwcm9jZXNzKTsKIH0KICNlbmRp
ZgogCkBAIC05MjIsNyArNjI0LDcgQEAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vz
c1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUKICNpZiBQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICAvLyBJbiBwbGF0Zm9ybXMgdXNpbmcgQnVi
Ymxld3JhcCBmb3Igc2FuZGJveGluZywgcHJld2FybWVkIHByb2Nlc3MgaXMgbGF1bmNoZWQgdXNp
bmcgdGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSwKICAgICAvLyBz
byB3ZSBkb24ndCB1c2UgaXQgaW4gY2FzZSBvZiB1c2luZyBhIGRpZmZlcmVudCBXZWJzaXRlRGF0
YVN0b3JlLgotICAgIGlmIChtX3NhbmRib3hFbmFibGVkICYmIG1fd2Vic2l0ZURhdGFTdG9yZSAm
JiBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCkgIT0gJndlYnNpdGVEYXRhU3RvcmUpCisgICAgaWYg
KG1fc2FuZGJveEVuYWJsZWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogI2VuZGlmCiAKQEAg
LTEwMzIsOCArNzM0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlBy
b2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzLCBXZWJzaXRlRGEKICAgICAgICAgcHJvY2Vz
cy5pc1Jlc3BvbnNpdmUoW2luaXRpYWxpemF0aW9uQWN0aXZpdHkgPSBXVEZNb3ZlKGluaXRpYWxp
emF0aW9uQWN0aXZpdHkpXSAoYm9vbCkgeyB9KTsKICAgICB9KTsKIAotICAgIGVuc3VyZU5ldHdv
cmtQcm9jZXNzKCk7Ci0KICAgICBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRl
cnM7CiAKICAgICBwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aCA9IG1fcmVzb2x2ZWRQYXRo
cy5pbmplY3RlZEJ1bmRsZVBhdGg7CkBAIC0xMTk4LDkgKzg5OCw2IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNz
KQogICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPmlnbm9yZVRpbWVvdXRzRm9yVGVzdGlu
ZygpOwogCiAgICAgbV9jb25uZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5lY3Rpb24odGhpcywg
cHJvY2Vzcy0+d2ViQ29ubmVjdGlvbigpKTsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUp
Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsK
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1By
b3h5KiBwcm9jZXNzKQpAQCAtMTI5NSwxMCArOTkyLDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2Vi
UHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQ
SToKICAgICBpZiAoIXBhZ2VDb25maWd1cmF0aW9uLT53ZWJzaXRlRGF0YVN0b3JlKCkpIHsKICAg
ICAgICAgLy8gV2UgdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBkZWZhdWx0IGRhdGEgc3RvcmUg
YXMgbG9uZyBhcyBwb3NzaWJsZS4KICAgICAgICAgLy8gQnV0IGlmIHRoZXJlIGlzIGFuIGF0dGVt
cHQgdG8gY3JlYXRlIGEgd2ViIHBhZ2Ugd2l0aG91dCBhbnkgc3BlY2lmaWVkIGRhdGEgc3RvcmUs
IHRoZW4gd2UgaGF2ZSB0byBjcmVhdGUgaXQuCi0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0YVN0
b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0KLSAgICAgICAgcGFnZUNvbmZpZ3Vy
YXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsKKyAg
ICAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCkpOwogICAgIH0KIAogICAgIFJl
ZlB0cjxXZWJQcm9jZXNzUHJveHk+IHByb2Nlc3M7CkBAIC0xMzI5LDcgKzEwMjMsNyBAQCBSZWY8
V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiBw
YWdlQ2xpZW50LCBSZWY8QVBJOgogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBpZiAo
IW1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKSB7CiAgICAgICAgIG1fc2VydmljZVdvcmtlclBy
ZWZlcmVuY2VzID0gcGFnZS0+cHJlZmVyZW5jZXNTdG9yZSgpOwotICAgICAgICBmb3IgKGF1dG8m
IHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgICAg
ICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3Nl
cygpKQogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtl
clByZWZlcmVuY2VzU3RvcmUoKm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzKTsKICAgICB9CiAg
ICAgaWYgKHVzZXJDb250ZW50Q29udHJvbGxlcikKQEAgLTEzNTYsNyArMTA1MCw3IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5n
JiB1c2VyQWdlbnQpCiAgICAgaWYgKG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9PSB1c2VyQWdl
bnQpCiAgICAgICAgIHJldHVybjsKICAgICBtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQgPSB1c2Vy
QWdlbnQ7Ci0gICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdv
cmtlclByb2Nlc3NlcykKKyAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2Vy
dmljZVdvcmtlclByb2Nlc3NlcygpKQogICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy5zZXRT
ZXJ2aWNlV29ya2VyVXNlckFnZW50KG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CiB9CiAjZW5k
aWYKQEAgLTEzNjUsMTUgKzEwNTksNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdlQmVnaW5V
c2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSQogewogICAg
IGF1dG8gcmVzdWx0ID0gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmFkZChkYXRhU3RvcmUuc2Vzc2lv
bklEKCksIEhhc2hTZXQ8V2ViUGFnZVByb3h5SWRlbnRpZmllcj4oKSkuaXRlcmF0b3ItPnZhbHVl
LmFkZChwYWdlSUQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRy
eSk7Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKLSAgICBp
ZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAg
ICAgICAgQVNTRVJUKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRhU3RvcmUucGFyYW1l
dGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsK
LSAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIGRhdGFT
dG9yZS5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VFbmRVc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5
SWRlbnRpZmllciBwYWdlSUQsIFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKQEAgLTE0MDEs
NyArMTA4Niw2IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1BhZ2VzVXNpbmdXZWJzaXRlRGF0
YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKIERvd25sb2FkUHJveHkmIFdlYlBy
b2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQ
cm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKIHsKICAgICBhdXRvJiBkb3dubG9hZFByb3h5
ID0gY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGluaXRpYXRpbmdQYWdl
LCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9u
SUQoKTsKIAogICAgIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc0FwcEJv
dW5kID0gTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46Ok5vOwogICAgIGlmIChpbml0aWF0aW5n
UGFnZSkgewpAQCAtMTQxMSwyNiArMTA5NSwyMyBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNz
UG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveAog
I2VuZGlmCiAgICAgfQogCi0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgUmVz
b3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICAvLyBSZXF1ZXN0
J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0
aGUgZG93bmxvYWQgcmVxdWVzdC4KLSAgICAgICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3Ag
bGV2ZWwgZG9jdW1lbnQncyBVUkwuCi0gICAgICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewotICAg
ICAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGlu
Z1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OwotICAgICAgICAgICAgdXBkYXRlZFJlcXVl
c3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwpOwotICAgICAgICAg
ICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVh
bChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOwotICAgICAgICAgICAgaWYgKCF1
cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2Vu
dCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChpbml0
aWF0aW5nUGFnZS0+dXNlckFnZW50Rm9yVVJMKHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVz
KFVSTCgpKTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2Up
OwotICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRU
UEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Qu
c2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwotICAg
ICAgICB9Ci0gICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAg
ICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3du
bG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRl
ZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAgICAgIHJl
dHVybiBkb3dubG9hZFByb3h5OworICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChy
ZXF1ZXN0KTsKKyAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1
c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KKyAgICAvLyBXZSBz
ZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KKyAgICBpZiAoaW5pdGlh
dGluZ1BhZ2UpIHsKKyAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsg
fSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OworICAgICAgICB1cGRh
dGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7Cisg
ICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5z
RXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKKyAgICAgICAgaWYgKCF1
cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2Vu
dCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRp
bmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKKyAg
ICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7CisgICAgICAgIGlmICgh
dXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdl
bnQpKQorICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdl
UHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwogICAgIH0KKyAgICB1cGRhdGVkUmVxdWVzdC5z
ZXRJc1RvcFNpdGUoZmFsc2UpOworICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3QoZGF0YVN0b3JlLnNlc3Np
b25JRCgpLCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBw
Qm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7CiAKICAgICByZXR1cm4gZG93bmxvYWRQcm94
eTsKIH0KQEAgLTE0MzgsMTcgKzExMTksMTIgQEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bv
b2w6OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3gKIERv
d25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZChXZWJzaXRlRGF0YVN0
b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IEFQSTo6
RGF0YSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIGF1dG8mIGRvd25s
b2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgUmVzb3VyY2VSZXF1ZXN0
KCksIGluaXRpYXRpbmdQYWdlLCB7IH0pOwotICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCA9
IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKIAogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBz
YW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAgIGlmICghcGF0aC5pc0VtcHR5KCkpCiAgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpU
eXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgaWYgKG5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93bmxvYWRQcm94eS5k
b3dubG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5OwotICAgIH0K
LQorICAgIGRhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpSZXN1bWVEb3dubG9hZChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIGRvd25sb2FkUHJv
eHkuZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZSksIDApOwogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQogCkBA
IC0xNTE3LDExICsxMTkzLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVmcmVzaFBsdWdpbnMo
KQogCiAjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAKLVByb2Nlc3NJRCBX
ZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCkKLXsKLSAgICByZXR1cm4g
bV9uZXR3b3JrUHJvY2VzcyA/IG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCkg
OiAwOwotfQotCiBQcm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6OnByZXdhcm1lZFByb2Nlc3NJZGVu
dGlmaWVyKCkKIHsKICAgICByZXR1cm4gbV9wcmV3YXJtZWRQcm9jZXNzID8gbV9wcmV3YXJtZWRQ
cm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpIDogMDsKQEAgLTE1NTgsMTQgKzEyMjksMTggQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZShjb25zdCBTdHJp
bmcmIHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCku
cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nl
c3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxT
Y2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7CisgICAgV2Vic2l0
ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVE
YXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3Mo
KS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3Vy
ZSh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVn
aXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeShjb25zdCBTdHJp
bmcmIHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCku
cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hl
bWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0
ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpKTsK
LSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJl
Z2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1l
KSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNj
aGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUu
bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJV
UkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmxTY2hlbWUpLCAwKTsK
KyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluUmVsYXhhdGlvbkZv
cmJpZGRlbkZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE1NzgsMTQg
KzEyNTMsMTggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2Fs
KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIExlZ2FjeUdsb2JhbFNldHRpbmdzOjpz
aW5nbGV0b24oKS5yZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKTsKICAgICBzZW5k
VG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNM
b2NhbCh1cmxTY2hlbWUpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpKTsKKyAg
ICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbdXJsU2NoZW1lXSAo
V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7CisgICAgICAgIGRhdGFTdG9yZS5uZXR3b3Jr
UHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVt
ZUFzTG9jYWwodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkK
IHsKICAgICBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxTY2hl
bWVBc05vQWNjZXNzKHVybFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7Ci0g
ICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdp
c3RlclVSTFNjaGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9y
ZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3VybFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUm
IGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNj
aGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVS
TFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTYw
NiwxMCArMTI4NSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2No
ZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0CiAgICAgICAgIHJldHVybjsK
IAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLmFkZCh1
cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdpc3RlclNjaGVt
ZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAoYXV0
byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNz
ZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3Vz
dG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5yZWdp
c3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25zdCBT
dHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MTgsMTAgKzEyOTUsOCBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRs
ZXJzKGNvbgogICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3Rv
bVByb3RvY29sSGFuZGxlcnMoKS5yZW1vdmUodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1dG8qIHBy
b2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVy
bFNjaGVtZSk7Ci0gICAgfQorICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwog
fQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRp
b25lZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2NTUsMTYgKzEzMzAsMTggQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAK
ICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldENhY2hlTW9k
ZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1v
ZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0
ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgewor
ICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAgfSk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhD
YWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB7CiAgICAgdXBkYXRlQmFja0ZvcndhcmRDYWNoZUNhcGFj
aXR5KCk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsU3lu
Y2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsKKyAgICBXZWJzaXRl
RGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbY2FjaGVNb2RlbF0gKFdlYnNpdGVE
YXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3Mo
KS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJv
bm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCAwKTsKKyAgICB9KTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91Ymxl
IHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE2NzQsMTIgKzEzNTEsNyBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dEludGVy
dmFsKQogCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94
eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UsIGNvbnN0IEZyYW1lSW5mb0RhdGEm
IGZyYW1lSW5mbykKIHsKLSAgICByZXR1cm4gZW5zdXJlTmV0d29ya1Byb2Nlc3MoJmRhdGFTdG9y
ZSkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3Jp
Z2luYXRpbmdQYWdlKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElz
QmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCi17Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KS5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJhY2tncm91bmQpOworICAgIHJldHVybiBkYXRh
U3RvcmUubmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgKnRo
aXMsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKIH0KIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6YWRkTWVzc2FnZVJlY2VpdmVyKElQQzo6UmVjZWl2ZXJOYW1lIG1lc3NhZ2VS
ZWNlaXZlck5hbWUsIElQQzo6TWVzc2FnZVJlY2VpdmVyJiBtZXNzYWdlUmVjZWl2ZXIpCkBAIC0x
NzUwLDMwICsxNDIyLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3RvcE1lbW9yeVNhbXBsZXIo
KQogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U3RvcE1lbW9y
eVNhbXBsZXIoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci12b2lk
IFdlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2Us
IFUmJiByZXBseSkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQcm9j
ZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3lu
YyhzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIHN0ZDo6Zm9yd2FyZDxVPihyZXBseSksIDApOwot
fQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKGNvbnN0IFBB
TDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0g
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpD
bGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCksIDApOwotfQotCi12b2lkIFdlYlByb2Nl
c3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCi17Ci0gICAgdGVybWluYXRlU2Vydmlj
ZVdvcmtlcnMoKTsKLQotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOwotICAgIG1fbmV0d29y
a1Byb2Nlc3MgPSBudWxscHRyOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVB
bGxXZWJDb250ZW50UHJvY2Vzc2VzKCkKIHsKICAgICBWZWN0b3I8UmVmUHRyPFdlYlByb2Nlc3NQ
cm94eT4+IHByb2Nlc3NlcyA9IG1fcHJvY2Vzc2VzOwpAQCAtMTc4MSw0MCArMTQyOSwxNSBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250ZW50UHJvY2Vzc2VzKCkKICAg
ICAgICAgcHJvY2Vzcy0+dGVybWluYXRlKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
bmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1fbmV0d29ya1By
b2Nlc3MpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0gICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5lbnQ6Ok5v
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKQotewot
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
UHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKLX0KLQotdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkKLXsKLSAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NEaWRS
ZXN1bWUoKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtl
cnMoKQogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBhdXRvIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICB3aGlsZSAobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
LmNvbXB1dGVTaXplKCkpCi0gICAgICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5iZWdpbigp
LT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKKyAgICB3aGlsZSAoc2VydmljZVdvcmtlclByb2Nl
c3NlcygpLmNvbXB1dGVTaXplKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5i
ZWdpbigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKICNlbmRpZgogfQogCi12b2lkIFdlYlBy
b2Nlc3NQb29sOjpmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGVu
c3VyZU5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVBdXRvbWF0
aW9uQ2FwYWJpbGl0aWVzKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikK
QEAgLTIwODksMTUgKzE3MTIsMjEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVwb3J0V2ViQ29u
dGVudENQVVRpbWUoU2Vjb25kcyBjcHVUaW1lLCB1aW50NjRfdCBhY3Rpdml0eVMKICNlbmRpZgog
fQogCitXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBXZWJQcm9jZXNzUG9vbDo6c2Vydmlj
ZVdvcmtlclByb2Nlc3NlcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYWtIYXNo
U2V0PFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICByZXR1cm4gcHJvY2Vzc2VzOwor
fQorCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9ucygpCiB7Ci0g
ICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7CisgICAg
V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW10gKFdlYnNpdGVEYXRh
U3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS51
cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7CisgICAgfSk7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQogICAgIC8vIENoZWNrIG9uIG5leHQgcnVuIGxvb3Agc2luY2UgdGhlIHdlYiBwcm9jZXNz
IHByb3h5IHRva2VucyBhcmUgcHJvYmFibHkgYmVpbmcgdXBkYXRlZC4KLSAgICBjYWxsT25NYWlu
UnVuTG9vcChbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0gewotICAgICAgICBp
ZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBmb3IgKGF1dG8mIHNl
cnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgIGNhbGxP
bk1haW5SdW5Mb29wKFtdIHsKKyAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2Vz
cyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzLnVwZGF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzQXNzZXJ0aW9uKCk7CiAgICAgfSk7CiAj
ZW5kaWYKQEAgLTIxMDcsNyArMTczNiw3IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6OmlzU2Vydmlj
ZVdvcmtlclBhZ2VJRChXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCkgY29uc3QKIHsKICNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgaW5lZmZpY2ll
bnQuCi0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLCBbcGFn
ZUlEXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2VydmljZVdvcmtl
clByb2Nlc3NlcygpLCBbcGFnZUlEXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBw
cm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJQYWdlUHJveHkocGFnZUlEKTsKICAgICB9KTsKICNlbmRp
ZgpAQCAtMjMyOSwxNCArMTk1OCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ3VycmVu
dE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCkKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCi12b2lkIFdlYlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2Fk
V2l0aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21haW4s
IE9wdGlvblNldDxDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiBuYXZpZ2F0
aW9uRGF0YVRyYW5zZmVyLCBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlELCBQ
YWdlSWRlbnRpZmllciB3ZWJQYWdlSUQpCi17Ci0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5kaWRDb21taXRDcm9zc1Np
dGVMb2FkV2l0aERhdGFUcmFuc2ZlcihzZXNzaW9uSUQsIGZyb21Eb21haW4sIHRvRG9tYWluLCBu
YXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlEKTsKLX0KLQog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNl
dDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zKQogewogICAgIHNlbmRUb0Fs
bFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0RG9tYWluc1dpdGhVc2VySW50ZXJh
Y3Rpb24oZG9tYWlucykpOwpAQCAtMjM4NywyNyArMjAwOCwyNyBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjp1cGRhdGVBdWRpYmxlTWVkaWFBc3NlcnRpb25zKCkKIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sIHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MpCiB7Ci0gICAgaWYgKG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzcyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQorICAgIGlmIChzX3Vz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9M
T0coU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6ICh1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MpOworICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX1NUQVRJQyhTZXJ2
aWNlV29ya2VyLCAic2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczogKHVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3M9JWQpIiwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2Vzcyk7CiAKLSAgICBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB1c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwotICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7
Ci0gICAgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBzX3VzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MgPSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOworICAgIGZv
ciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkp
CisgICAgICAgIHByb2Nlc3NQb29sLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQogCiAj
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzU2Vydmlj
ZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdAogewotICAgIHJldHVy
biBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10oYXV0byYgcHJvY2Vzcykg
eworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW10oYXV0
byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyRm9y
ZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQogCiBib29sIFdlYlByb2Nl
c3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLCBb
XShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2VydmljZVdvcmtlclBy
b2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBwcm9jZXNzLmhh
c1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCk7CiAgICAgfSk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRleCA5OTA2YjdkMTli
NDUuLjY2OGMxZTZkOGQ5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5oCkBAIC03Nyw3ICs3Nyw2IEBAIE9CSkNfQ0xBU1MgV0tQcmVmZXJlbmNlT2JzZXJ2ZXI7CiAK
IG5hbWVzcGFjZSBBUEkgewogY2xhc3MgQXV0b21hdGlvbkNsaWVudDsKLWNsYXNzIEN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudDsKIGNsYXNzIERvd25sb2FkQ2xpZW50OwogY2xhc3MgSFRUUENv
b2tpZVN0b3JlOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGVDbGllbnQ7CkBAIC0xNzYsNyArMTc1LDYg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0SGlzdG9yeUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJ
OjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4mJik7CiAgICAgdm9pZCBzZXREb3dubG9hZENs
aWVudChVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4mJik7CiAgICAgdm9pZCBzZXRBdXRv
bWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JiYpOwot
ICAgIHZvaWQgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVl
X3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJik7CiAKICAgICB2b2lkIHNl
dEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsK
ICAgICBjb25zdCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmll
cigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi0+Y3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5k
bGVJZGVudGlmaWVyKCk7IH0KQEAgLTE4NywxNyArMTg1LDkgQEAgcHVibGljOgogICAgIC8vIG51
bGwgY2hlY2tzIGluIFdlYlBhZ2VQcm94eS4KICAgICBXZWJQcm9jZXNzUHJveHkqIGR1bW15UHJv
Y2Vzc1Byb3h5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QgeyByZXR1cm4gbV9kdW1t
eVByb2Nlc3NQcm94aWVzLmdldChzZXNzaW9uSUQpLmdldCgpOyB9CiAKLSAgICAvLyBXZWJQcm9j
ZXNzIG9yIE5ldHdvcmtQcm9jZXNzIGFzIGFwcHJvcG9yaWF0ZSBmb3IgY3VycmVudCBwcm9jZXNz
IG1vZGVsLiBUaGUgY29ubmVjdGlvbiBtdXN0IGJlIG5vbi1udWxsLgotICAgIElQQzo6Q29ubmVj
dGlvbiogbmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCk7Ci0KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNzYWdlKTsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oY29u
c3QgVCYgbWVzc2FnZSwgUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gU2VuZHMgdGhlIG1lc3Nh
Z2UgdG8gV2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2VzcyBhcyBhcHByb3BvcmlhdGUgZm9yIGN1
cnJlbnQgcHJvY2VzcyBtb2RlbC4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRU
b05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiB2b2lkIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2Fn
ZSwgVSYmIHJlcGx5KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSk7Ci0KICAgICB2
b2lkIHByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKICAgICBX
ZWJQcm9jZXNzQ2FjaGUmIHdlYlByb2Nlc3NDYWNoZSgpIHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0Nh
Y2hlLmdldCgpOyB9CkBAIC0yMDUsOSArMTk1LDYgQEAgcHVibGljOgogICAgIC8vIERpc2Nvbm5l
Y3QgdGhlIHByb2Nlc3MgZnJvbSB0aGUgY29udGV4dC4KICAgICB2b2lkIGRpc2Nvbm5lY3RQcm9j
ZXNzKFdlYlByb2Nlc3NQcm94eSopOwogCi0gICAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlKiB3
ZWJzaXRlRGF0YVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgp
OyB9Ci0gICAgdm9pZCBzZXRQcmltYXJ5RGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZSYgZGF0YVN0b3JlKSB7IG1fd2Vic2l0ZURhdGFTdG9yZSA9ICZkYXRhU3RvcmU7IH0KLQogICAg
IFJlZjxXZWJQYWdlUHJveHk+IGNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYsIFJlZjxBUEk6OlBh
Z2VDb25maWd1cmF0aW9uPiYmKTsKIAogICAgIHZvaWQgcGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0
YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYnNpdGVEYXRhU3RvcmUmKTsKQEAgLTI1
OCwxMCArMjQ1LDggQEAgcHVibGljOgogICAgIHZvaWQgYWRkU3VwcG9ydGVkUGx1Z2luKFN0cmlu
ZyYmIG1hdGNoaW5nRG9tYWluLCBTdHJpbmcmJiBuYW1lLCBIYXNoU2V0PFN0cmluZz4mJiBtaW1l
VHlwZXMsIEhhc2hTZXQ8U3RyaW5nPiBleHRlbnNpb25zKTsKICAgICB2b2lkIGNsZWFyU3VwcG9y
dGVkUGx1Z2lucygpOwogCi0gICAgUHJvY2Vzc0lEIG5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigp
OwogICAgIFByb2Nlc3NJRCBwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcigpOwogICAgIHZvaWQg
YWN0aXZlUGFnZXNPcmlnaW5zSW5XZWJQcm9jZXNzRm9yVGVzdGluZyhQcm9jZXNzSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYpOwotICAgIGJvb2wgbmV0d29y
a1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CiAKICAgICBX
ZWJQYWdlR3JvdXAmIGRlZmF1bHRQYWdlR3JvdXAoKSB7IHJldHVybiBtX2RlZmF1bHRQYWdlR3Jv
dXAuZ2V0KCk7IH0KIApAQCAtMzAyLDggKzI4Nyw2IEBAIHB1YmxpYzoKICAgICBBUEk6OkxlZ2Fj
eUNvbnRleHRIaXN0b3J5Q2xpZW50JiBoaXN0b3J5Q2xpZW50KCkgeyByZXR1cm4gKm1faGlzdG9y
eUNsaWVudDsgfQogICAgIFdlYkNvbnRleHRDbGllbnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xp
ZW50OyB9CiAKLSAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYgY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gKm1fY3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50OyB9Ci0KICAgICBzdHJ1Y3QgU3RhdGlzdGljcyB7CiAgICAgICAgIHVuc2lnbmVk
IHdrVmlld0NvdW50OwogICAgICAgICB1bnNpZ25lZCB3a1BhZ2VDb3VudDsKQEAgLTMxOSwxMiAr
MzAyLDggQEAgcHVibGljOgogICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7
CiAgICAgdm9pZCB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogCi0gICAgdm9pZCBmbHVzaENv
b2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
OwotCiAgICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZyhib29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZv
clRlc3RpbmcgPSB2YWx1ZTsgfQogICAgIGJvb2wgc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1
bmNoRmFpbEZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE1ha2VOZXh0V2ViUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nOyB9Ci0gICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dE5l
dHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1h
a2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9Ci0gICAg
Ym9vbCBzaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSBj
b25zdCB7IHJldHVybiBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9y
VGVzdGluZzsgfQogCiAgICAgdm9pZCByZXBvcnRXZWJDb250ZW50Q1BVVGltZShTZWNvbmRzIGNw
dVRpbWUsIHVpbnQ2NF90IGFjdGl2aXR5U3RhdGUpOwogCkBAIC0zODMsMTkgKzM2MiwxMyBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogICAgIC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50Ci0gICAg
TmV0d29ya1Byb2Nlc3NQcm94eSYgZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9y
ZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUgPSBudWxscHRyKTsKLSAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5KiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MuZ2V0
KCk7IH0KICAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5
Jik7CiAKLSAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJv
eHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b25EZWxheWVkUmVwbHkmJik7Ci0KICAgICBib29sIGlzU2VydmljZVdvcmtlclBhZ2VJRChXZWJQ
YWdlUHJveHlJZGVudGlmaWVyKSBjb25zdDsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0g
ICAgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3Mo
TmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6
U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHN0YXRpYyB2b2lk
IGVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3Jr
UHJvY2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNzaW9u
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCByZW1vdmVGcm9tU2Vy
dmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkmKTsKLSAgICBzaXplX3Qgc2Vydmlj
ZVdvcmtlclByb3hpZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VydmljZVdvcmtlclByb2Nl
c3Nlcy5jb21wdXRlU2l6ZSgpOyB9Ci0gICAgdm9pZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvclNlcnZpY2VXb3JrZXIoYm9vbCBhbGxvd3MpIHsgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvclNlcnZpY2VXb3JrZXIgPSBhbGxvd3M7IH0KLSAgICBib29sIGFsbG93c0FueVNTTENlcnRp
ZmljYXRlRm9yU2VydmljZVdvcmtlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzQW55U1NMQ2Vy
dGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOyB9CisgICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94
aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0
ZVNpemUoKTsgfQogICAgIHZvaWQgdXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25zdCBT
dHJpbmcmIHVzZXJBZ2VudCk7CiAgICAgY29uc3QgT3B0aW9uYWw8VXNlckNvbnRlbnRDb250cm9s
bGVySWRlbnRpZmllcj4mIHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNl
V29ya2VycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2
aWNlV29ya2VyOyB9CiAgICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5
Rm9yVGVzdGluZygpIGNvbnN0OwpAQCAtNDQ5LDggKzQyMiw2IEBAIHB1YmxpYzoKICAgICBib29s
IGFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx3YXlz
UnVuc0F0QmFja2dyb3VuZFByaW9yaXR5OyB9CiAgICAgYm9vbCBzaG91bGRUYWtlVUlCYWNrZ3Jv
dW5kQXNzZXJ0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNz
ZXJ0aW9uOyB9CiAKLSAgICB2b2lkIHN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNr
Z3JvdW5kKTsKLSAgICAKICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICB2b2lkIGdhbWVwYWRDb25u
ZWN0ZWQoY29uc3QgVUlHYW1lcGFkJiwgV2ViQ29yZTo6RXZlbnRNYWtlc0dhbWVwYWRzVmlzaWJs
ZSk7CiAgICAgdm9pZCBnYW1lcGFkRGlzY29ubmVjdGVkKGNvbnN0IFVJR2FtZXBhZCYpOwpAQCAt
NDg4LDcgKzQ1OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQ3VycmVudE1vZGlmaWVyU3Rh
dGVGb3JUZXN0aW5nKCk7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQot
ICAgIHZvaWQgZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNz
aW9uSUQsIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25z
dCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21haW4sIE9wdGlvblNldDxXZWJDb3Jl
OjpDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiwgV2ViUGFnZVByb3h5SWRl
bnRpZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIpOwogICAgIHZvaWQgc2V0RG9tYWluc1dp
dGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJik7
CiAgICAgdm9pZCBzZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRlc3RpbmcoY29uc3QgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4mIGZpcnN0UGFydHlEb21haW4sIGNvbnN0IFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluJiB0aGlyZFBhcnR5RG9tYWluLCBib29sIHNob3VsZFNjaGVkdWxl
Tm90aWZpY2F0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgc2Vu
ZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKQEAgLTUxNSw4ICs0ODUsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgUGx1Z0lu
QXV0b1N0YXJ0UHJvdmlkZXImIHBsdWdJbkF1dG9TdGFydFByb3ZpZGVyKCkgeyByZXR1cm4gbV9w
bHVnSW5BdXRvU3RhcnRQcm92aWRlcjsgfQogCi0gICAgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzKGJvb2wpOwotICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
czsgfQorICAgIHN0YXRpYyB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mo
Ym9vbCk7CisgICAgc3RhdGljIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcygp
IHsgcmV0dXJuIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQogCiAjaWYgRU5B
QkxFKENGUFJFRlNfRElSRUNUX01PREUpCiAgICAgdm9pZCBub3RpZnlQcmVmZXJlbmNlc0NoYW5n
ZWQoY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBPcHRpb25h
bDxTdHJpbmc+JiBlbmNvZGVkVmFsdWUpOwpAQCAtNTI4LDkgKzQ5OCwxNSBAQCBwdWJsaWM6CiAg
ICAgaW50MzJfdCB1c2VySWQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJJZDsgfQogI2VuZGlmCiAK
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IHhwY0Vu
ZHBvaW50TWVzc2FnZSgpIGNvbnN0OwotICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5k
cG9pbnRUb1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRwb2ludE1lc3Nh
Z2UpOworICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIFZlY3RvcjxTdHJp
bmc+IHVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnko
KTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOworICAgIHN0YXRp
YyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcg
d2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVy
VGVtcG9yYXJ5RGlyZWN0b3J5KCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTU0Niw4ICs1MjIs
NiBAQCBwcml2YXRlOgogICAgIFdlYlByb2Nlc3NQcm94eSYgY3JlYXRlTmV3V2ViUHJvY2VzcyhX
ZWJzaXRlRGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nl
c3NQcm94eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKICAgICB2b2lkIGluaXRpYWxpemVOZXdXZWJQcm9j
ZXNzKFdlYlByb2Nlc3NQcm94eSYsIFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9jZXNzUHJveHk6
OklzUHJld2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8pOwogCi0gICAg
dm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyYpOwotCiAgICAgdm9pZCBoYW5kbGVNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9k
eSk7CiAgICAgdm9pZCBoYW5kbGVTeW5jaHJvbm91c01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJEYXRhJiYpPiYmKTsKIApAQCAtNTcxLDE0ICs1NDUs
NiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB1c2VzU2luZ2xlV2ViUHJvY2VzcygpIGNvbnN0IHsg
cmV0dXJuIG1fY29uZmlndXJhdGlvbi0+dXNlc1NpbmdsZVdlYlByb2Nlc3MoKTsgfQogCi0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJl
Y3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAg
IHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBT
dHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgY29u
dGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIHZvaWQgcmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKICAgICB2b2lkIHVu
cmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKQEAgLTYyMCw5ICs1ODYsOCBAQCBwcml2
YXRlOgogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYWtQdHI8V2ViUHJvY2Vzc1Byb3h5
Pj4gbV9kdW1teVByb2Nlc3NQcm94aWVzOyAvLyBMaWdodHdlaWdodCBXZWJQcm9jZXNzUHJveHkg
b2JqZWN0cyB3aXRob3V0IGJhY2tpbmcgcHJvY2Vzcy4KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKLSAgICBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+IG1fc2VydmljZVdvcmtlclBy
b2Nlc3NlczsKKyAgICBzdGF0aWMgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiYgc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcygpOwogICAgIGJvb2wgbV93YWl0aW5nRm9yV29ya2VyQ29udGV4dFBy
b2Nlc3NDb25uZWN0aW9uIHsgZmFsc2UgfTsKLSAgICBib29sIG1fYWxsb3dzQW55U1NMQ2VydGlm
aWNhdGVGb3JTZXJ2aWNlV29ya2VyIHsgZmFsc2UgfTsKICAgICBTdHJpbmcgbV9zZXJ2aWNlV29y
a2VyVXNlckFnZW50OwogICAgIE9wdGlvbmFsPFdlYlByZWZlcmVuY2VzU3RvcmU+IG1fc2Vydmlj
ZVdvcmtlclByZWZlcmVuY2VzOwogICAgIE9wdGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlcklk
ZW50aWZpZXI+IG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNlV29ya2VyOwpAQCAt
NjM4LDcgKzYwMyw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21h
dGlvbkNsaWVudD4gbV9hdXRvbWF0aW9uQ2xpZW50OwogICAgIFVuaXF1ZVJlZjxBUEk6OkRvd25s
b2FkQ2xpZW50PiBtX2Rvd25sb2FkQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6Okxl
Z2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudDsKIAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9uU2Vzc2lvbj4gbV9hdXRv
bWF0aW9uU2Vzc2lvbjsKIApAQCAtNjcwLDggKzYzNCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X21lbW9yeVNhbXBsZXJFbmFibGVkIHsgZmFsc2UgfTsKICAgICBkb3VibGUgbV9tZW1vcnlTYW1w
bGVySW50ZXJ2YWwgeyAxNDAwLjAgfTsKIAotICAgIFJlZlB0cjxXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU+IG1fd2Vic2l0ZURhdGFTdG9yZTsKLQogICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBj
aGFyKiwgUmVmUHRyPFdlYkNvbnRleHRTdXBwbGVtZW50PiwgUHRySGFzaDxjb25zdCBjaGFyKj4+
IFdlYkNvbnRleHRTdXBwbGVtZW50TWFwOwogICAgIFdlYkNvbnRleHRTdXBwbGVtZW50TWFwIG1f
c3VwcGxlbWVudHM7CiAKQEAgLTcwMyw4ICs2NjUsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBt
X3Byb2Nlc3NUZXJtaW5hdGlvbkVuYWJsZWQgeyB0cnVlIH07CiAKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKLQogICAgIEhhc2hNYXA8
dWludDY0X3QsIFJlZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+PiBtX2RpY3Rpb25hcnlDYWxsYmFj
a3M7CiAKICAgICBib29sIG1fbWVtb3J5Q2FjaGVEaXNhYmxlZCB7IGZhbHNlIH07CkBAIC03MTMs
NyArNjczLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYWx3YXlzUnVuc0F0QmFja2dyb3VuZFBy
aW9yaXR5OwogICAgIGJvb2wgbV9zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uOwogICAg
IGJvb2wgbV9zaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyB7IGZh
bHNlIH07Ci0gICAgYm9vbCBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWls
Rm9yVGVzdGluZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3RjY1ByZWZlcmVuY2VFbmFibGVkIHsg
ZmFsc2UgfTsKIAogICAgIFVzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIgbV91c2VyT2JzZXJ2YWJs
ZVBhZ2VDb3VudGVyOwpAQCAtODA1LDMxICs3NjQsMTMgQEAgcHJpdmF0ZToKICNlbHNlCiAgICAg
Ym9vbCBtX2lzRGVsYXllZFdlYlByb2Nlc3NMYXVuY2hEaXNhYmxlZCB7IGZhbHNlIH07CiAjZW5k
aWYKLSAgICBib29sIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyB7IGZhbHNlIH07
CisgICAgc3RhdGljIGJvb2wgc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOwogCiAj
aWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBIYXNoU2V0PFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluPiBtX2RvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uOwogI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IG1f
ZW5kcG9pbnRNZXNzYWdlOwotI2VuZGlmCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpCi17
Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1l
c3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4o
bWVzc2FnZSksIDApOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBt
ZXNzYWdlKQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotfQotCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0
IFQmIG1lc3NhZ2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcAppbmRleCBkNjYxMDMzOGI2Y2YuLjVlMmM3MDhmMjJmOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC0yNjgsNiArMjY4LDkgQEAgdm9pZCBX
ZWJQcm9jZXNzUHJveHk6OnNldFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZSYgZGF0
YVN0b3JlKQogewogICAgIEFTU0VSVCghbV93ZWJzaXRlRGF0YVN0b3JlKTsKICAgICBtX3dlYnNp
dGVEYXRhU3RvcmUgPSAmZGF0YVN0b3JlOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGRhdGFT
dG9yZS5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcygqdGhpcyk7Cisj
ZW5kaWYKICAgICB1cGRhdGVSZWdpc3RyYXRpb25XaXRoRGF0YVN0b3JlKCk7CiAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMocHJvY2Vz
c1Bvb2woKS53ZWJQcm9jZXNzRGF0YVN0b3JlUGFyYW1ldGVycygqdGhpcywgZGF0YVN0b3JlKSks
IDApOwogfQpAQCAtNzM4LDcgKzc0MSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXRQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbih1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4sIE1lCiAKIHZv
aWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oTWVzc2FnZXM6
OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVw
bHkmJiByZXBseSkKIHsKLSAgICBtX3Byb2Nlc3NQb29sLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24oKnRoaXMsIFdURk1vdmUocmVwbHkpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkuZ2V0
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CiB9CiAKICNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCkBAIC05NTUsOSArOTU4LDggQEAgdm9pZCBXZWJQcm9jZXNz
UHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqIGxhdW5jaGVyLCBJUEM6
OkNvbm5lY3QKICAgICB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBhdXRvIGVuZHBvaW50
TWVzc2FnZSA9IHByb2Nlc3NQb29sKCkueHBjRW5kcG9pbnRNZXNzYWdlKCk7Ci0gICAgaWYgKGVu
ZHBvaW50TWVzc2FnZSkKLSAgICAgICAgeHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNzYWdlKGNvbm5l
Y3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpLCBlbmRwb2ludE1lc3NhZ2UuZ2V0KCkpOworICAgIGlm
IChtX3dlYnNpdGVEYXRhU3RvcmUpCisgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5l
dHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoKnRoaXMpOwogI2VuZGlmCiAKICAg
ICBSRUxFQVNFX0FTU0VSVCghbV93ZWJDb25uZWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRh
U3RvcmVDb2NvYS5tbQppbmRleCA3YzQ0MDg1MTY3NzMuLmNiOGIzYmFhNGFkMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFT
dG9yZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0Nv
Y29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAtMjgsMTAgKzI4LDEyIEBACiAKICNpbXBv
cnQgIkNvb2tpZVN0b3JhZ2VVdGlsc0NGLmgiCiAjaW1wb3J0ICJEZWZhdWx0V2ViQnJvd3NlckNo
ZWNrcy5oIgorI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2ltcG9ydCAiU2FuZGJv
eFV0aWxpdGllcy5oIgogI2ltcG9ydCAiU3RvcmFnZU1hbmFnZXIuaCIKICNpbXBvcnQgIldlYkZy
YW1lUG9saWN5TGlzdGVuZXJQcm94eS5oIgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNLZXlzLmgi
CisjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oIgogI2ltcG9ydCAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIK
ICNpbXBvcnQgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CkBAIC00NCw2ICs0Niw3
IEBACiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNz
UHJpdmlsZWdlLmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvRW50
aXRsZW1lbnRzLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQpAQCAtNTYyLDQgKzU2NSwyOCBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnJlaW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlucygpCiB9CiAjZW5kaWYKIAorYm9vbCBX
ZWJzaXRlRGF0YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZyhj
b25zdCBTdHJpbmcmIGVudGl0bGVtZW50KQoreworICAgIHJldHVybiBXVEY6Omhhc0VudGl0bGVt
ZW50KG5ldHdvcmtQcm9jZXNzKCkuY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVudGl0
bGVtZW50LnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNlbmRO
ZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJv
Y2VzcykKK3sKKyAgICBpZiAocHJvY2Vzcy5zdGF0ZSgpICE9IEF1eGlsaWFyeVByb2Nlc3NQcm94
eTo6U3RhdGU6OlJ1bm5pbmcpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBjb25uZWN0aW9u
ID0gcHJvY2Vzcy5jb25uZWN0aW9uKCk7CisgICAgaWYgKCFjb25uZWN0aW9uKQorICAgICAgICBy
ZXR1cm47CisgICAgYXV0byBtZXNzYWdlID0gbmV0d29ya1Byb2Nlc3MoKS54cGNFbmRwb2ludE1l
c3NhZ2UoKTsKKyAgICBpZiAoIW1lc3NhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICB4cGNfY29u
bmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbi0+eHBjQ29ubmVjdGlvbigpLCBtZXNzYWdl
KTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRw
b2ludFRvQWxsV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBtX3By
b2Nlc3NlcykKKyAgICAgICAgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nl
c3MocHJvY2Vzcyk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggMDgzMGNhNzVhN2ZjLi44
MDcwZjU3NjkwMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0zMiwxMSArMzIsMTQgQEAKICNpbmNs
dWRlICJBdXRoZW50aWNhdG9yTWFuYWdlci5oIgogI2luY2x1ZGUgIkRldmljZUlkSGFzaFNhbHRT
dG9yYWdlLmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIk1vY2tBdXRoZW50aWNhdG9yTWFuYWdlci5oIgorI2luY2x1ZGUgIk5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01l
c3NhZ2VzLmgiCiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5j
bHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkQ2Fj
aGUuaCIKKyNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJL
aXQySW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldl
YlByb2Nlc3NDYWNoZS5oIgpAQCAtNzUsNiArNzgsMTAgQEAKICNpbmNsdWRlICJTT0F1dGhvcml6
YXRpb25Db29yZGluYXRvci5oIgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNs
dWRlICJEZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBzdGF0aWMgYm9vbCBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5z
OwpAQCAtODMsMTMgKzkwLDE5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dXZWJzaXRl
RGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zKCkKICAgICBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNG
b3JBbGxPcmlnaW5zID0gdHJ1ZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQs
IFdlYnNpdGVEYXRhU3RvcmUqPiYgbm9uRGVmYXVsdERhdGFTdG9yZXMoKQorc3RhdGljIEhhc2hN
YXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgYWxsRGF0YVN0b3JlcygpCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+PiBtYXA7CiAg
ICAgcmV0dXJuIG1hcDsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0
ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRhU3RvcmUmKT4mJiBmdW5jdGlvbikK
K3sKKyAgICBmb3IgKGF1dG8qIGRhdGFTdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1ZXMoKSkK
KyAgICAgICAgZnVuY3Rpb24oKmRhdGFTdG9yZSk7Cit9CisKIFJlZjxXZWJzaXRlRGF0YVN0b3Jl
PiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGVOb25QZXJzaXN0ZW50KCkKIHsKICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpObyksIFBBTDo6U2Vzc2lvbklEOjpnZW5lcmF0ZUVw
aGVtZXJhbFNlc3Npb25JRCgpKSk7CkBAIC0xMTUsNyArMTI4LDcgQEAgV2Vic2l0ZURhdGFTdG9y
ZTo6V2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYg
Y29uZmlndXIKICNlbmRpZgogewogICAgIFdURjo6c2V0UHJvY2Vzc1ByaXZpbGVnZXMoYWxsUHJp
dmlsZWdlcygpKTsKLSAgICBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOworICAgIHJl
Z2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTEyOCwxNyArMTQxLDEyIEBAIFdlYnNp
dGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKCkKIAogICAgIHBsYXRmb3JtRGVzdHJveSgp
OwogCi0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkpIHsKLSAgICAgICAgQVNTRVJUKG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KG1fc2Vz
c2lvbklEKSA9PSB0aGlzKTsKLSAgICAgICAgbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5yZW1vdmUo
bV9zZXNzaW9uSUQpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vz
c1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAgICAgIH0K
LSAgICB9CisgICAgQVNTRVJUKGFsbERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRo
aXMpOworICAgIGFsbERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOworICAgIG5ldHdv
cmtQcm9jZXNzKCkucmVtb3ZlU2Vzc2lvbigqdGhpcyk7CiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQotICAgICAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5Ojpz
aW5nbGV0b25JZkNyZWF0ZWQoKSkKLSAgICAgICAgICAgIGdwdVByb2Nlc3NQcm94eS0+cmVtb3Zl
U2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgaWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94eSA9IEdQ
VVByb2Nlc3NQcm94eTo6c2luZ2xldG9uSWZDcmVhdGVkKCkpCisgICAgICAgIGdwdVByb2Nlc3NQ
cm94eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAjZW5kaWYKIH0KIApAQCAtMTUxLDcg
KzE1OSw2IEBAIHN0YXRpYyBSZWZQdHI8V2Vic2l0ZURhdGFTdG9yZT4mIGdsb2JhbERlZmF1bHRE
YXRhU3RvcmUoKQogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1
bHREYXRhU3RvcmUoKQogewogICAgIEluaXRpYWxpemVXZWJLaXQyKCk7Ci0KICAgICBhdXRvJiBz
dG9yZSA9IGdsb2JhbERlZmF1bHREYXRhU3RvcmUoKTsKICAgICBpZiAoIXN0b3JlKQogICAgICAg
ICBzdG9yZSA9IGFkb3B0UmVmKG5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVD
b25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpZZXMpLCBQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpKSk7CkBAIC0xNjksMTcgKzE3Niw0NyBAQCBib29sIFdlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKQogICAgIHJldHVybiAhIWdsb2JhbERl
ZmF1bHREYXRhU3RvcmUoKTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lz
dGVyV2l0aFNlc3Npb25JRE1hcCgpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyV2l0
aFNlc3Npb25JRE1hcCgpCiB7Ci0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBub25EZWZhdWx0
RGF0YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7Ci0gICAgICAgIEFTU0VSVF9VTlVT
RUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0byByZXN1bHQgPSBhbGxEYXRh
U3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3Vs
dCwgcmVzdWx0LmlzTmV3RW50cnkpOworfQorCitXZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0
YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQpCit7CisgICAgcmV0dXJuIGFsbERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklEKTsKK30K
Kworc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBuZXR3b3JrUHJvY2Vzc0ZvclNlc3Np
b24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQoreworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExB
VEZPUk0oV1BFKQorICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgeworICAgICAgICAv
LyBSZXVzZSBhIHByZXZpb3VzIHBlcnNpc3RlbnQgc2Vzc2lvbiBuZXR3b3JrIHByb2Nlc3MgZm9y
IGVwaGVtZXJhbCBzZXNzaW9ucy4KKyAgICAgICAgZm9yIChhdXRvKiBkYXRhU3RvcmUgOiBhbGxE
YXRhU3RvcmVzKCkudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGlmIChkYXRhU3RvcmUtPmlzUGVy
c2lzdGVudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlUmVmKGRhdGFTdG9yZS0+bmV0
d29ya1Byb2Nlc3MoKSk7CisgICAgICAgIH0KICAgICB9CisgICAgcmV0dXJuIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmNyZWF0ZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vzc2lvbklEKTsK
KyAgICByZXR1cm4gTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCk7
CisjZW5kaWYKIH0KIAotV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3Rp
bmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCkKK05ldHdvcmtQcm9jZXNzUHJveHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNz
KCkKIHsKLSAgICByZXR1cm4gc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCkgPyBub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0
cjsKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpIHsKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cyA9IG5ldHdvcmtQcm9jZXNzRm9yU2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOworICAgIH0KKworICAgIHJldHVybiAqbV9u
ZXR3b3JrUHJvY2VzczsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURhdGFTdG9y
ZTo6bmV0d29ya1Byb2Nlc3MoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYnNp
dGVEYXRhU3RvcmUmPigqdGhpcykubmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZWdpc3RlclByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQpAQCAt
MTk1LDEyICsyMzIsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVucmVnaXN0ZXJQcm9jZXNz
KFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUocHJvY2Vz
cyk7CiB9CiAKLVdlYlByb2Nlc3NQb29sKiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZv
ckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkKLXsKLSAgICBhdXRvIHBvb2xzID0gcHJvY2Vzc1Bv
b2xzKDEpOwotICAgIHJldHVybiBwb29scy5pc0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVn
aW4oKS0+Z2V0KCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9y
aWVzSWZOZWNlc3NhcnkoKQogewogICAgIGlmIChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBA
IC00NDAsMjggKzQ3MSwyMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFw
cGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogI2VuZGlmCiAKICAg
ICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0Fj
Y2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwotICAgIGlm
IChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmUpIHsK
LSAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQcm9jZXNz
QWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNzUG9vbHMo
KTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBQ
cm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0Fj
Y2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3ModGhpcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
IGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNz
QWNjZXNzVHlwZSkgeworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKKyAgICAg
ICAgbmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOwor
ICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZM
YXVuY2hlZDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAgICAgIGNh
bGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwg
ZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29s
XShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkgeworICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CiAgICAgICAg
ICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soV1RGTW92
ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKKyAgICAgICAgYnJlYWs7CiAg
ICAgfQogCiAgICAgYXV0byB3ZWJQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVXZWJQcm9jZXNz
QWNjZXNzVHlwZUZvckRhdGFGZXRjaChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CkBAIC03
MjQsMzEgKzc0OCwyNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogICAgIGJvb2wgZGlkTm90
aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhID0gZmFsc2U7CiAjZW5kaWYKICAg
ICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJvY2Vzc0Fj
Y2Vzc1R5cGVGb3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7Ci0gICAg
aWYgKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZSkg
ewotICAgICAgICBhdXRvIHBvb2xzID0gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09IFByb2Nl
c3NBY2Nlc3NUeXBlOjpMYXVuY2ggPyBlbnN1cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nlc3NQb29s
cygpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKLSAgICAgICAg
ICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7Ci0gICAgICAgICAgICBjYXNl
IFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAo
IXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBQcm9jZXNz
QWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVO
ZXR3b3JrUHJvY2Vzcyh0aGlzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
ICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKLSAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLQorICAgIHN3aXRjaCAobmV0d29ya1Byb2Nl
c3NBY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgorICAg
ICAgICBuZXR3b3JrUHJvY2VzcygpOworICAgICAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7
CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJ
ZkxhdW5jaGVkOgorICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewogICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25J
RCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNz
UG9vbF0geworICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEo
bV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0gewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0Nh
bGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQogICAgICAgICAgICAgZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNp
dGVEYXRhID0gdHJ1ZTsKICNlbmRpZgogICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IGF1dG8gd2ViUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlV2ViUHJvY2Vzc0FjY2Vzc1R5cGVG
b3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CkBAIC04OTMsMTQgKzkx
MCw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0
ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljcykpIHsKICAgICAgICAgaWYgKCFkaWROb3RpZnlOZXR3b3Jr
UHJvY2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAg
ICAgICAgICAgICAgcHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFU
eXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsK
LSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQorICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Np
b25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Cisg
ICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2so
KTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAgICAgY2FsbGJhY2tBZ2dyZWdh
dG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKQEAgLTk5NCwxMiArMTAwNiwxMCBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0
YVR5cGVzLCBjb25zdCBWZQogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMp
IHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CiAgICAg
ICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAg
ICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAg
Y2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQ
b29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAgICAgICAgICAgICAgICBuZXR3b3Jr
UHJvY2VzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFBy
b2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgpAQCAtMTAyMSw3ICsxMDMxLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBl
cywgY29uc3QgVmUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdh
dG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRh
dGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJl
Z2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKKyAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKG1f
c2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1lcywgSFNUU0NhY2hl
SG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nl
c3NQb29sXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5k
aW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC0xMTgwLDE4ICsx
MTkwLDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKFNlY29uZHMgc2Vjb25kcykKIHsK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5j
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZv
clRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdv
cmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vydmlj
ZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCks
IDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0U2VydmljZVdvcmtlclRpbWVv
dXRGb3JUZXN0aW5nKCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vz
c1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNl
V29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rp
bmc6OlJlcGx5KCksIDApOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKQEAgLTEyMDEsOCArMTIwNSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3Rh
dGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50LCBDb21wbGV0CiAKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJv
Y2VzcygpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50cnlD
b3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMTEsOCArMTIx
NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVf
dCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50
cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVuZUVu
dHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJp
bmdUaW1lKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTIyMSw4ICsxMjIzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxl
cjwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQsIHNlY29uZHMs
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1pbmlt
dW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMzEsMjAgKzEyMzIs
MTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVj
b3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0
d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5p
bXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAgICAgCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
U3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyht
X3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kdW1wUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJM
JiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xMjU2LDEyICsxMjUwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2kKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ByZXZhbGVu
dFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUHJldmFsZW50UmVzb3VyY2UobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0
aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZh
bGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjczLDEyICsxMjYyLDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9j
ZXNzLT5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNHcmFuZGZhdGhl
cmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyOTIsOCArMTI3Niw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNlKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bv
b2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFBy
ZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzA3LDEw
ICsxMjkwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZv
ckRlYnVnTW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGkKICAgICAKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFByZXZhbGVudFJlc291cmNl
Rm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzVmVy
eVByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzIyLDEyICsxMzAyLDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwm
IHVybCwgQ29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICAgICAgcHJvY2Vzcy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJM
JiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTEzNDEsMTAgKzEzMTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZQogICAgIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRD
bGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzUzLDggKzEz
MjUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2Vz
QmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRTaG91bGRD
bGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFs
dWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92
YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25z
dCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzY4LDIyICsxMzM5LDE0IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNv
bnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRv
cEZyYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYgc3ViRnJh
bWVVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3
b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVE
b21haW4oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM5Nywy
MyArMTM2MCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVQogCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3Vi
cmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVz
b3VyY2VVbmRlcihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1l
VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3Mt
PmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VV
UkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0
IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xNDI3LDEwICsxMzgxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVS
TCwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJy
ZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRU
byB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVzb3Vy
Y2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NDIsMTIgKzEzOTMsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVS
TCYgc3VicmVzb3VyY2VVUgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBz
dWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0
ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwm
IHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTQ1OSwxMiArMTQwNSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRp
cmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9w
RnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NzYsMjUgKzE0MTcsMTQgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBV
UkwmIHRvcEZyYW1lVVJMLCBjb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlx
dWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVk
RnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8oY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJMJiB1
cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAg
ICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21w
bGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRp
cmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE1MDYsNjAgKzE0
MzYsNDEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclBy
ZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZh
dWx0VmFsdWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRW
YWx1ZXMobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZh
bHVlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnN1Ym1pdFRlbGVtZXRyeShtX3Nl
c3Npb25JRCwgW10geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdWJtaXRUZWxl
bWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2RpZmllZFNpbmNl
LCBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lv
bklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2NoZWR1
bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwg
c2hvdWxkR3JhbmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnko
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIHN0cnVjdCBDYWxsYmFja0FnZ3JlZ2F0b3Ig
OiBSZWZDb3VudGVkPENhbGxiYWNrQWdncmVnYXRvcj4gewotICAgICAgICBDYWxsYmFja0FnZ3Jl
Z2F0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCisgICAg
c3RydWN0IExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yIDogUmVmQ291bnRlZDxMb2NhbENhbGxiYWNr
QWdncmVnYXRvcj4geworICAgICAgICBMb2NhbENhbGxiYWNrQWdncmVnYXRvcihDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJk
UGFydHlEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIDogbV9jb21w
bGV0aW9uSGFuZGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgewogICAg
ICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAgICAgfTsKIAotICAgICAg
ICB+Q2FsbGJhY2tBZ2dyZWdhdG9yKCkKKyAgICAgICAgfkxvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9y
KCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIApA
QCAtMTU3NCwzOCArMTQ4NSwzMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgICAgICBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OlRoaXJkUGFydHlEYXRhPiYmKT4gbV9jb21wbGV0aW9uSGFuZGxlcjsKICAgICAgICAgVmVj
dG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IG1fcmVz
dWx0czsKICAgICB9OwotCi0gICAgUmVmUHRyPENhbGxiYWNrQWdncmVnYXRvcj4gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gYWRvcHRSZWYobmV3IENhbGxiYWNrQWdncmVnYXRvcihXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFJbW1lZGlhdGVseShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Ci0gICAgICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcykuZ2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNz
UG9vbF0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURh
dGE+JiYgZGF0YSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVz
dWx0KFdURk1vdmUoZGF0YSkpOwotICAgICAgICAgICAgfSk7CisgICAgCisgICAgYXV0byBsb2Nh
bENhbGxiYWNrQWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBMb2NhbENhbGxiYWNrQWdncmVnYXRv
cihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworICAgIAorICAgIGF1dG8gd3RmQ2FsbGJh
Y2tBZ2dyZWdhdG9yID0gV1RGOjpDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBsb2NhbENhbGxiYWNrQWdncmVnYXRvcl0gewor
ICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3Vt
bWFyeShtX3Nlc3Npb25JRCwgW2xvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yXShWZWN0b3I8V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7CisgICAg
ICAgICAgICBsb2NhbENhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVzdWx0KFdURk1vdmUoZGF0YSkp
OwogICAgICAgICB9KTsKLSAgICB9CisgICAgfSk7CisgICAgCisgICAgZm9yIChhdXRvKiBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJv
Y2Vzc1Bvb2wtPnNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5KFt3dGZD
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2No
ZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlclN0YXRpc3Rp
Y3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVy
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lv
bklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0
ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ29va2ll
QmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ29va2llQmxv
Y2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQ
cm9jZXNzaW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTE2MTQsMjQgKzE1MTgsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZVN0
YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmQKICAgICAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxl
U3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuc2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lvbklE
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICAgICAgcHJvY2Vzcy0+c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKG1f
c2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNz
aW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjQzLDIyICsx
NTM2LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1
cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhCiAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldExh
c3RTZWVuKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBz
ZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kb21haW5JREV4aXN0c0luRGF0
YWJhc2UobV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJn
ZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9wRnJhbWVV
cmwxLCBjb25zdCBVUkwmIHRvcEZyYW1lVXJsMiwgU2Vjb25kcyBsYXN0U2VlbiwgYm9vbCBoYWRV
c2VySW50ZXJhY3Rpb24sIFNlY29uZHMgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgYm9vbCBp
c0dyYW5kZmF0aGVyZWQsIGJvb2wgaXNQcmV2YWxlbnQsIGJvb2wgaXNWZXJ5UHJldmFsZW50LCB1
bnNpZ25lZCBkYXRhUmVjb3Jkc1JlbW92ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE2NzAsMTAgKzE1NTUsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29uc3QgVVJM
JiB0b3BGcgogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
Pm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVy
bDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFzdFNl
ZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFu
ZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92
ZWQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBu
ZXR3b3JrUHJvY2VzcygpLm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRl
cmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBk
YXRhUmVjb3Jkc1JlbW92ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3Qg
VVJMJiB1cmwsIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxs
QnV0Q29va2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2ODUsMTggKzE1NjcsMTQgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25z
dCBVUkwmIHVybCwgYm9vbCBoYWQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0aW9u
LCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNT
Y2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
dE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MDQsOCArMTU4
Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxlCiAgICAgdXNlRXhwbGljaXRJVFBTdGF0ZSgp
OwogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9z
ZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZXN0KG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdl
UHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3Ry
aW5nPiYmIGRvbWFpbnMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcxNiw3ICsxNTkzLDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQ
YWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IHdlYlBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRy
aWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIApAQCAt
MTcyNCw4ICsxNjAxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNl
ckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkgKIHsKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTczOSwxMCArMTYxNSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNl
ckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkCiAgICAg
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmxvZ1VzZXJJ
bnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc1NCwxMyAr
MTYyNyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
IHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0hhZFVzZXJJ
bnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBj
b25zdCBVUkwmIHRvcFVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE3NzIsMTMgKzE2MzksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25z
dAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlbGF0
aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3OTIs
MTAgKzE2NTMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9u
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclVzZXJJbnRlcmFjdGlvbiht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclVzZXJJ
bnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJlZCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgwOSwx
MCArMTY2Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25z
dCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvCiAgICAgCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRHcmFuZGZhdGhlcmVkKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0
aGVyZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9j
ZXNzKCkuc2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFs
dWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE4
MjEsMTAgKzE2NzYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNl
KGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJgogICAgIAogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0YWJh
c2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1
ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwm
IGZyb21VUkwsIGNvbnN0IFVSTCYgdG9VUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE4MzMsNjIgKzE2ODUsMzggQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25z
dCBVUkwmIGYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRDcm9zc1NpdGVM
b2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9VUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGluY2x1
ZGVIdHRwT25seUNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tp
ZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNz
KCkuZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9yYWdl
Rm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5n
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0lz
b2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRE
b3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZERvd25n
cmFkZVJlZmVycmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZERvd25ncmFkZVJlZmVycmVy
Rm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYg
IVBMQVRGT1JNKENPQ09BKQpAQCAtMTkxOSwxMCArMTc0Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShXZWJDb3JlOjpUaGlyZFBhcnR5
Q29va2llCiAgICAgICAgICAgICB3ZWJQcm9jZXNzLnNldFRoaXJkUGFydHlDb29raWVCbG9ja2lu
Z01vZGUoYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogICAgIH0KIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdN
b2RlKG1fc2Vzc2lvbklELCBibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5n
TW9kZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
aG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKGJvb2wgZW5hYmxl
ZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkz
MCwxMCArMTc1NSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlCiAgICAgYXV0byBmbGFnID0g
ZW5hYmxlZCA/IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZZXMg
OiBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87CiAKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0
U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25J
RCwgZmxhZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5n
KG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vi
c2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTQxLDIwICsxNzYzLDE0IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFy
dHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgYXV0byBtb2RlID0gZW5hYmxlZCA/IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlOjpBbGxCdXRDb29raWVzIDogV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGU6Ok5vbmU7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0Rmly
c3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2Rl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25J
RCwgbW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tpZXNG
b3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0
aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRv
U2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0
eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmaXJzdFBhcnR5VVJMLCBjb25z
dCBVUkwmIGNuYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xOTY2LDggKzE3ODIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdAogCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklE
LCBmaXJzdFBhcnR5VVJMLmhvc3QoKS50b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhtX3Nlc3Np
b25JRCwgZmlyc3RQYXJ0eVVSTC5ob3N0KCkudG9TdHJpbmcoKSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyBjbmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5
Q05BTUVEb21haW5Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NzksMTggKzE3OTQsMTMgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0
eUNOQU1FRG9tYWluRm9yVGVzdGluZygKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q05BTUVEb21h
aW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNu
YW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5zZXRUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZSgpLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3JhZ2UoKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hl
TWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk5OCw4ICsxODA4LDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJl
c291cmNlcyhTZWNvbmRzIHNlY29uZHMsIEMKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVu
c3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJj
ZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyht
X3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKHNlY29uZHMpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0y
MDA5LDI2ICsxODE4LDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VD
YXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQ
cmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZh
bGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
I2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogI2VuZGlmCiB9CiAKLWJvb2wgV2Vic2l0
ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmIHByb2Nl
c3NQb29sKSBjb25zdAotewotICAgIGlmIChhdXRvKiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9IHBy
b2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUoKSkKLSAgICAgICAgcmV0dXJuIHByb2Nlc3NQb29s
RGF0YVN0b3JlID09IHRoaXM7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBw
cm9jZXNzUG9vbC5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICByZXR1cm4gbmV0d29ya1Byb2Nl
c3NQcm94eS0+aGFzU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
CiBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nl
c3NQb29scyhzaXplX3QgbGltaXQpIGNvbnN0CiB7CiAgICAgSGFzaFNldDxSZWZQdHI8V2ViUHJv
Y2Vzc1Bvb2w+PiBwcm9jZXNzUG9vbHM7CkBAIC0yMDQzLDkgKzE4MzgsNiBAQCBIYXNoU2V0PFJl
ZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyhzaXpl
X3QgbGltaXQpIGNvbgogICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgpKSB7CiAgICAgICAg
IC8vIENoZWNrIGlmIHdlJ3JlIG9uZSBvZiB0aGUgbGVnYWN5IGRhdGEgc3RvcmVzLgogICAgICAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKCpwcm9jZXNz
UG9vbCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAgICAgIHByb2Nlc3NQ
b29scy5hZGQocHJvY2Vzc1Bvb2wpOwogICAgICAgICAgICAgaWYgKHByb2Nlc3NQb29scy5zaXpl
KCkgPT0gbGltaXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDg0LDggKzE4NzYsNyBA
QCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVNZWRpYUtleUZpbGUoY29uc3QgU3RyaW5nJiBtZWRpYUtl
eURpcmVjdG9yeSkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1NwZWNpZmljSFRUUFND
ZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJbmZvKiBjZXJ0aWZpY2F0ZSwg
Y29uc3QgU3RyaW5nJiBob3N0KQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmlj
YXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1Nw
ZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRlSW5m
bygpLCBob3N0KSwgMCk7CiB9CiAKIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+
IFdlYnNpdGVEYXRhU3RvcmU6Om1lZGlhS2V5T3JpZ2lucyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5
c1N0b3JhZ2VEaXJlY3RvcnkpCkBAIC0yMTQwLDYgKzE5MzEsNTIgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpyZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGly
ZWN0b3J5LAogICAgIH0KIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXROZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoY29uc3QgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mbyYpPiYmIHJl
cGx5KQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
KHdlYlByb2Nlc3NQcm94eSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB3
ZWJQcm9jZXNzUHJveHkgPSBtYWtlV2Vha1B0cih3ZWJQcm9jZXNzUHJveHkpLCByZXBseSA9IFdU
Rk1vdmUocmVwbHkpXSAoYXV0byYgY29ubmVjdGlvbkluZm8pIG11dGFibGUgeworICAgICAgICBp
ZiAoVU5MSUtFTFkoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVjdGlv
bkluZm8uaWRlbnRpZmllcigpKSAmJiB3ZWJQcm9jZXNzUHJveHkgJiYgd2Vha1RoaXMpKSB7Cisg
ICAgICAgICAgICB0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworICAgICAgICAgICAgUkVMRUFT
RV9MT0dfSUYoaXNQZXJzaXN0ZW50KCksIFByb2Nlc3MsICJnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb246IEZhaWxlZCBmaXJzdCBhdHRlbXB0LCByZXRyeWluZyIpOworICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MoKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKndlYlByb2Nlc3NQcm94
eSwgV1RGTW92ZShyZXBseSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHJlcGx5KGNvbm5lY3Rpb25JbmZvKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYpCit7Cisg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRpZFRl
cm1pbmF0ZSgpOworICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOworfQorCit2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAg
ICAgICBwcm9jZXNzUG9vbC0+dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKKworICAgIGlmICgh
bV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgcmV0dXJuOworICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnRlcm1pbmF0ZSgpOworICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOworfQorCit2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JU
ZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcmVwYXJlVG9TdXNwZW5kKElzU3VzcGVuc2lvbklt
bWluZW50OjpObywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRl
c3RpbmcoKQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByb2Nlc3NXaWxsU3VzcGVuZElt
bWluZW50bHlGb3JUZXN0aW5nKCk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5l
dHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkKK3sKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRQcm9j
ZXNzRGlkUmVzdW1lKCk7Cit9CisKIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQoKSBjb25zdAogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpCkBAIC0yMTY5LDE3ICsyMDA2LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgICAgICAK
ICAgICAgICAgcmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgCi0gICAg
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAg
ICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRy
dWUpKTsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUp
LCAwKTsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQog
ICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVz
c2FnZXM6OldlYlByb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHRydWUp
LCBtX3Nlc3Npb25JRCk7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9j
ZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpKTsK
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpLCAwKTsKKyAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgIHByb2Nl
c3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChmYWxzZSksIG1fc2Vzc2lvbklEKTsK
LSAgICB9CiAKICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkID0gZmFsc2U7CiAj
ZWxzZQpAQCAtMjE5MSw4ICsyMDI2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soRnVuY3Rpb248dm9pZChjb25zdCBT
dHJpbmcmKT4mJiBjYWxsYmFjaykKIHsKICAgICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICAgICAgcHJvY2Vz
c1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSk7CisgICAgICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQodHJ1ZSksIDApOwogICAgIH0KICAgICAK
ICAgICBtX3N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKQEAg
LTIyMTEsOCArMjA0NSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RlYnVnTW9kZShib29sIGVuYWJsZWQsIENvbXBsZXRpCiAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIyMjcsMjAgKzIwNjAsMTUg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVy
YWwoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVt
ZXJhbChtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCisgICAgbmV0d29ya1Byb2Nlc3Mo
KS5pc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKKyNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2Up
OworI2VuZGlmCiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0
aW9uRGVidWdNb2RlKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKIH0K
IAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMjYyLDQ4ICsyMDkw
LDE5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
SW5XZWJQcm9jZXNzZXMoQ29tcGxldGlvbkhhbmRsCiB9CiAjZW5kaWYKIAotVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4gV2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMoKSBjb25zdAotewot
ICAgIHJldHVybiBjb3B5VG9WZWN0b3IobV9wZW5kaW5nQ29va2llcyk7Ci19Ci0KLXZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNv
b2tpZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZUlmKFsmY29va2llXShhdXRvJiBw
ZW5kaW5nQ29va2llKSB7Ci0gICAgICAgIHJldHVybiBwZW5kaW5nQ29va2llLmlzS2V5RXF1YWwo
Y29va2llKTsKLSAgICB9KTsKLSAgICBtX3BlbmRpbmdDb29raWVzLmFkZChjb29raWUpOwotfQot
Ci12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29y
ZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmUoY29va2ll
KTsKLX0KLSAgICAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcygp
Ci17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5jbGVhcigpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmZsdXNoQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRv
IHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+Zmx1c2hDb29raWVzKHNlc3Npb25JRCgpLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuZmx1c2hDb29raWVzKHNlc3Npb25JRCgp
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYm9vbCBhbGxvd3MpCiB7
Ci0gICAgZm9yIChhdXRvIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5j
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JX
ZWJTb2NrZXQoYWxsb3dzKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlT
U0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldDo6UmVwbHkoKSwgMCk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NB
bnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChhbGxvd3MpLCBNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0OjpSZXBseSgpLCAw
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKCkK
IHsKLSAgICBmb3IgKGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vz
c1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5jbGVhckNhY2hlZENyZWRlbnRpYWxzKHNl
c3Npb25JRCgpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKHNlc3Npb25JRCgpKSwgMCk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJiBm
dW5jdGlvbikKQEAgLTIzMjksOCArMjEyOCw2IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
IFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMoKQogCiAgICAgcmVzb2x2ZURpcmVjdG9yaWVz
SWZOZWNlc3NhcnkoKTsKIAotICAgIHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBwZW5kaW5n
Q29va2llcygpOwotCiAgICAgYXV0byByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0g
bV9jb25maWd1cmF0aW9uLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7CiAgICAg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlI
YW5kbGU7CiAgICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHko
KSkKQEAgLTI0MzUsNyArMjIzMiwxMCBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJz
aXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVkID0gbV9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDsKICNlbmRpZgogICAgIHBsYXRmb3JtU2V0TmV0
d29ya1BhcmFtZXRlcnMocGFyYW1ldGVycyk7Ci0KKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBw
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dl
YnNpdGVUcmFja2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2lu
Z1Blcm1pc3Npb24oKTsKKyNlbmRpZgorICAgIAogICAgIHJldHVybiBwYXJhbWV0ZXJzOwogfQog
CkBAIC0yNDY1LDEwICsyMjY1LDYgQEAgQVBJOjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRh
U3RvcmU6OmNvb2tpZVN0b3JlKCkKICAgICByZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAKLXZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQotewotfQotCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9p
ZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIWlzUGVyc2lzdGVudCgpKSB7CkBAIC0y
NDc2LDIzICsyMjcyLDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdl
RGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VECiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKHRoaXMp
LmdldExvY2FsU3RvcmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgewotICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7Ci0gICAgICAgIH0pOwotICAg
ICAgICAvLyBGSVhNRTogU3VwcG9ydCBmZXRjaGluZyBmcm9tIG11bHRpcGxlIHBvb2xzLgotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUKCFjb21wbGV0aW9uSGFuZGxlcik7CisgICAg
bmV0d29ya1Byb2Nlc3MoKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFp
bHMpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7CisgICAg
fSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YShDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UXVv
dGEobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExB
VEZPUk0oQ09DT0EpCkBAIC0yNTE4LDcgKzIzMDYsMTIgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3Jl
OjpodHRwM0VuYWJsZWQoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZgorCitib29s
IFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5n
KGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmIC8vICFQTEFU
Rk9STShDT0NPQSkKIAogI2lmICFVU0UoR0xJQikKIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQpAQCAtMjUzMCwz
NSArMjMyMywxOCBAQCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNl
SWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFVSTCYmIG9sZE5hbWUsIFVSTCYmIG5ld05hbWUsIE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRT
ZXNzaW9uKCp0aGlzKTsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW5hbWVPcmlnaW5J
bldlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5yZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBu
ZXdOYW1lLCBkYXRhVHlwZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lm
IEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzQXBw
Qm91bmRTZXNzaW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzQXBwQm91
bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIo
ZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lv
bklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6Y2xlYXJBcHBCb3VuZFNlc3Npb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklE
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0
d29ya1Byb2Nlc3MoKS5jbGVhckFwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRB
cHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjU4MCw3ICsyMzU2LDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKENvbXBs
ZXRpb25IYW5kbGUKIAogICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhnbG9iYWxEZWZhdWx0
RGF0YVN0b3JlKCkuZ2V0KCksICphcHBCb3VuZERvbWFpbnMpOwogCi0gICAgZm9yIChhdXRvKiBz
dG9yZSA6IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAgZm9yIChhdXRvKiBz
dG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKICAgICAgICAgcHJvcGFnYXRlQXBwQm91
bmREb21haW5zKHN0b3JlLCAqYXBwQm91bmREb21haW5zKTsKIH0KIApAQCAtMjU4OCwxMCArMjM2
NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKGNv
bnN0IEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFiCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0QXBwQm91bmREb21haW5z
Rm9yUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgZG9tYWlucywgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRBcHBCb3Vu
ZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogI2VuZGlmCiAKQEAgLTI1OTksMTYgKzIzNzIs
MjYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3
b3JrUHJvY2Vzcyhjb25zdCBTdHJpbmcmIGJ1bmQKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkudXBkYXRlQnVuZGxlSWRl
bnRpZmllcihidW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAg
IG5ldHdvcmtQcm9jZXNzKCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVy
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAg
ICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jbGVhckJ1bmRsZUlkZW50
aWZpZXIoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmNs
ZWFyQnVuZGxlSWRlbnRpZmllcihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworfQorCitzdGF0
aWMgYm9vbCBuZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hTaG91bGRGYWlsRm9yVGVzdGluZyB7IGZh
bHNlIH07CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWFrZU5leHROZXR3b3JrUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nKCkKK3sKKyAgICBuZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hTaG91
bGRGYWlsRm9yVGVzdGluZyA9IHRydWU7Cit9CisKK2Jvb2wgV2Vic2l0ZURhdGFTdG9yZTo6c2hv
dWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkKK3sKKyAgICBy
ZXR1cm4gc3RkOjpleGNoYW5nZShuZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hTaG91bGRGYWlsRm9y
VGVzdGluZywgZmFsc2UpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXggZTlkZWJhNDgwODhiLi5i
ODM2MWFjNzNjNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTUzLDYgKzUzLDggQEAKIAogI2lmIFBMQVRG
T1JNKENPQ09BKQogI2luY2x1ZGUgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CisjaW5jbHVk
ZSA8d3RmL09TT2JqZWN0UHRyLmg+CisjaW5jbHVkZSA8d3RmL3NwaS9kYXJ3aW4vWFBDU1BJLmg+
CiAjZW5kaWYKIAogI2lmIFVTRShDVVJMKQpAQCAtNzksNiArODEsNyBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIGNsYXNzIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOwogY2xhc3MgU2VjS2V5UHJveHlTdG9y
ZTsKIGNsYXNzIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOworY2xhc3MgTmV0d29ya1Byb2Nlc3NQ
cm94eTsKIGNsYXNzIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOwogY2xhc3MgV2ViQ2VydGlm
aWNhdGVJbmZvOwogY2xhc3MgV2ViUGFnZVByb3h5OwpAQCAtODgsNiArOTEsOCBAQCBjbGFzcyBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7CiBlbnVtIGNsYXNzIENhY2hlTW9kZWwgOiB1
aW50OF90OwogZW51bSBjbGFzcyBXZWJzaXRlRGF0YUZldGNoT3B0aW9uIDogdWludDhfdDsKIGVu
dW0gY2xhc3MgV2Vic2l0ZURhdGFUeXBlIDogdWludDMyX3Q7CisKK3N0cnVjdCBOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb25JbmZvOwogc3RydWN0IFdlYnNpdGVEYXRhUmVjb3JkOwogc3RydWN0IFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOwogCkBAIC0xMTMsNyArMTE4LDEyIEBAIHB1YmxpYzoK
ICAgICBXZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbj4m
JiwgUEFMOjpTZXNzaW9uSUQpOwogICAgIH5XZWJzaXRlRGF0YVN0b3JlKCk7CiAKLSAgICBzdGF0
aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lv
bklEKFBBTDo6U2Vzc2lvbklEKTsKKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoV2Vic2l0ZURhdGFT
dG9yZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRhU3RvcmUmKT4mJik7CisgICAgCisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3MoKSBjb25zdDsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcygpOworCisgICAgc3RhdGljIFdlYnNpdGVEYXRhU3Rv
cmUqIGV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEKTsKIAogICAg
IGJvb2wgaXNQZXJzaXN0ZW50KCkgY29uc3QgeyByZXR1cm4gIW1fc2Vzc2lvbklELmlzRXBoZW1l
cmFsKCk7IH0KICAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQoKSBjb25zdCB7IHJldHVybiBt
X3Nlc3Npb25JRDsgfQpAQCAtMTIzLDYgKzEzMywxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29u
c3QgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiYgcHJvY2Vzc2VzKCkgY29uc3QgeyByZXR1
cm4gbV9wcm9jZXNzZXM7IH0KIAorICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
KFdlYlByb2Nlc3NQcm94eSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uSW5mbyYpPiYmKTsKKyAgICB2b2lkIHRlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzKCk7CisgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVz
dGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2VuZE5ldHdvcmtQ
cm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworICAgIHZvaWQgc2VuZE5l
dHdvcmtQcm9jZXNzRGlkUmVzdW1lKCk7CisgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQo
TmV0d29ya1Byb2Nlc3NQcm94eSYpOworICAgIHN0YXRpYyB2b2lkIG1ha2VOZXh0TmV0d29ya1By
b2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpOworICAgIHN0YXRpYyBib29sIHNob3VsZE1ha2VO
ZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpOworCiAgICAgYm9vbCByZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCk7CiAgICAgYm9vbCByZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlKCkgY29uc3Q7CkBAIC0yMzksMTUgKzI1OCw4IEBAIHB1YmxpYzoKIAogICAg
IERldmljZUlkSGFzaFNhbHRTdG9yYWdlJiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSgpIHsgcmV0
dXJuIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuZ2V0KCk7IH0KIAotICAgIFdlYlByb2Nlc3NQ
b29sKiBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgYm9vbCBp
c0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYpIGNvbnN0OwotCiAgICAgV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgcGFyYW1ldGVycygpOwogCi0gICAgVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXMoKSBjb25zdDsKLSAgICB2b2lkIGFkZFBlbmRpbmdD
b29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCByZW1vdmVQZW5kaW5nQ29v
a2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwotICAgIHZvaWQgY2xlYXJQZW5kaW5nQ29va2ll
cygpOwogICAgIHZvaWQgZmx1c2hDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
CiAgICAgdm9pZCBjbGVhckNhY2hlZENyZWRlbnRpYWxzKCk7CiAKQEAgLTI1NSw2ICsyNjcsMTEg
QEAgcHVibGljOgogCiAgICAgdm9pZCBkaXNwYXRjaE9uUXVldWUoRnVuY3Rpb248dm9pZCgpPiYm
KTsKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBD
RW5kcG9pbnRUb1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Jik7CisgICAgdm9pZCBzZW5kTmV0
d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvQWxsV2ViUHJvY2Vzc2VzKCk7CisjZW5kaWYKKwogI2lm
IFVTRShDVVJMKQogICAgIHZvaWQgc2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoV2ViQ29yZTo6Q3Vy
bFByb3h5U2V0dGluZ3MmJik7CiAgICAgY29uc3QgV2ViQ29yZTo6Q3VybFByb3h5U2V0dGluZ3Mm
IG5ldHdvcmtQcm94eVNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9wcm94eVNldHRpbmdzOyB9
CkBAIC0yODAsOCArMjk3LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TW9ja1dlYkF1dGhlbnRp
Y2F0aW9uQ29uZmlndXJhdGlvbihXZWJDb3JlOjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1
cmF0aW9uJiYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7
Ci0KICAgICBjb25zdCBXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlv
bigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi5nZXQoKTsgfQogCiAgICAgV2Vic2l0ZURhdGFT
dG9yZUNsaWVudCYgY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQuZ2V0KCk7IH0KQEAgLTI5MSw2
ICszMDYsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEo
VVJMJiYsIFVSTCYmLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKIAorICAgIGJvb2wgbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZv
clRlc3RpbmcoY29uc3QgU3RyaW5nJik7CisKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9O
KQogICAgIFdlYkRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlciYgZGV2
aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyKCkgeyByZXR1cm4gbV9kZXZp
Y2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXI7IH0KICNlbmRpZgpAQCAtMzY3
LDcgKzM4NCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNv
bnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgV2FsbFRpbWUgbW9kaWZpZWRT
aW5jZSk7CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVk
aWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgY29uc3QgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbkRhdGE+Jik7CiAKLSAgICB2b2lkIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7
CisgICAgdm9pZCByZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKIAogI2lmIEVOQUJMRShBUFBf
Qk9VTkRfRE9NQUlOUykKICAgICBzdGF0aWMgT3B0aW9uYWw8SGFzaFNldDxXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbj4+IGFwcEJvdW5kRG9tYWluc0lmSW5pdGlhbGl6ZWQoKTsKQEAgLTQwNyw4
ICs0MjQsNiBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlNvdXBOZXR3b3JrUHJveHlTZXR0aW5n
cyBtX25ldHdvcmtQcm94eVNldHRpbmdzOwogI2VuZGlmCiAKLSAgICBIYXNoU2V0PFdlYkNvcmU6
OkNvb2tpZT4gbV9wZW5kaW5nQ29va2llczsKLSAgICAKICAgICBXZWFrSGFzaFNldDxXZWJQcm9j
ZXNzUHJveHk+IG1fcHJvY2Vzc2VzOwogCiAgICAgYm9vbCBtX2lzSXRwU3RhdGVFeHBsaWNpdGx5
U2V0IHsgZmFsc2UgfTsKQEAgLTQyOSw2ICs0NDQsNyBAQCBwcml2YXRlOgogICAgIFVuaXF1ZVJl
ZjxXZWJzaXRlRGF0YVN0b3JlQ2xpZW50PiBtX2NsaWVudDsKIAogICAgIFJlZlB0cjxBUEk6OkhU
VFBDb29raWVTdG9yZT4gbV9jb29raWVTdG9yZTsKKyAgICBSZWZQdHI8TmV0d29ya1Byb2Nlc3NQ
cm94eT4gbV9uZXR3b3JrUHJvY2VzczsKIAogI2lmIEhBVkUoQVBQX1NTTykKICAgICBVbmlxdWVS
ZWY8U09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I+IG1fc29BdXRob3JpemF0aW9uQ29vcmRpbmF0
b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJs
L1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCmluZGV4IDBlMGMwNmUxZGVkNC4u
NjRiNmM3NGQwODZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcApAQCAtNDIs
OCArNDIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE5ldHdvcmtQcm94eVNldHRpbmdz
KFdlYkNvcmU6OkN1cmxQcm94eVNldHRpbmdzJiYgcHJveAogewogICAgIG1fcHJveHlTZXR0aW5n
cyA9IFdURk1vdmUocHJveHlTZXR0aW5ncyk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5n
UHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdz
KG1fc2Vzc2lvbklELCBtX3Byb3h5U2V0dGluZ3MpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX3Nl
c3Npb25JRCwgbV9wcm94eVNldHRpbmdzKSwgMCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0
YVN0b3JlU291cC5jcHAKaW5kZXggMTRkN2ZmNDI4NGNhLi43MDRhOWI2ODM2OTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFT
dG9yZVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3Nv
dXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCkBAIC00Miw4ICs0Miw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyhXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycyYKICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaWdub3JlVExTRXJyb3Jz
ID0gbV9pZ25vcmVUTFNFcnJvcnM7CiAgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnByb3h5
U2V0dGluZ3MgPSBtX25ldHdvcmtQcm94eVNldHRpbmdzOwogCi0gICAgaWYgKGF1dG8qIHByb2Nl
c3NQb29sID0gcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
Y29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmNvb2tp
ZU1hbmFnZXIoKS5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChi
b29sIGVuYWJsZWQpCkBAIC01NSw4ICs1NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgICAg
IHJldHVybjsKIAogICAgIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IGVu
YWJsZWQ7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAg
ICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKG1fc2Vzc2lv
bklELCBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQpKTsKKyAgICBuZXR3b3Jr
UHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRQZXJzaXN0ZW50Q3Jl
ZGVudGlhbFN0b3JhZ2VFbmFibGVkKG1fc2Vzc2lvbklELCBtX3BlcnNpc3RlbnRDcmVkZW50aWFs
U3RvcmFnZUVuYWJsZWQpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRJZ25v
cmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMpCkBAIC02NSwxNSArNjMsMTMgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJv
cnMpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faWdub3JlVExTRXJyb3JzID0gaWdub3JlVExT
RXJyb3JzOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0SWdub3JlVExTRXJyb3JzKG1fc2Vzc2lvbklELCBtX2lnbm9yZVRMU0Vy
cm9ycykpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX3Nlc3Npb25JRCwgbV9pZ25vcmVUTFNFcnJvcnMpLCAw
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhX
ZWJDb3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3MmJiBzZXR0aW5ncykKIHsKICAgICBtX25l
dHdvcmtQcm94eVNldHRpbmdzID0gV1RGTW92ZShzZXR0aW5ncyk7Ci0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXROZXR3b3JrUHJv
eHlTZXR0aW5ncyhtX3Nlc3Npb25JRCwgbV9uZXR3b3JrUHJveHlTZXR0aW5ncykpOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQ
cm94eVNldHRpbmdzKG1fc2Vzc2lvbklELCBtX25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKaW5kZXggMGE4NGE3NTkwZDlhLi4yN2Yy
M2VhMDY1ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJv
Y2Vzc1Byb3h5R0xpYi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQ
cm9jZXNzUHJveHlHTGliLmNwcApAQCAtNDQsNyArNDQsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94
eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9u
cyYgbAogICAgICAgICBpZiAoIWRhdGFTdG9yZSkgewogICAgICAgICAgICAgLy8gUHJld2FybWVk
IHByb2Nlc3NlcyBkb24ndCBoYXZlIGEgV2Vic2l0ZURhdGFTdG9yZSB5ZXQsIHNvIHVzZSB0aGUg
cHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlIGZyb20gdGhlIFdlYlByb2Nlc3NQb29sLgogICAgICAg
ICAgICAgLy8gVGhlIHByb2Nlc3Mgd29uJ3QgYmUgdXNlZCBpZiBjdXJyZW50IFdlYnNpdGVEYXRh
U3RvcmUgaXMgZGlmZmVyZW50IHRoYW4gdGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgb25lLgot
ICAgICAgICAgICAgZGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC0+d2Vic2l0ZURhdGFTdG9yZSgp
OworICAgICAgICAgICAgZGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZSgpLnB0cigpOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKGRhdGFTdG9yZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5h
Z2VyUHJveHlTb3VwLmNwcAppbmRleCA5ZjdiZTNjOTQxYjYuLmFjMDRlMzhhNTdiMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlT
b3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eVNvdXAuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKIApAQCAtMzMsOCArMzQsOCBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRT
dG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0
aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKLSAgICBt
X2Nvb2tpZVBlcnNpc3RlbnRTdG9yYWdlTWFwLnNldChzZXNzaW9uSUQsIHN0ZDo6bWFrZV9wYWly
KHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOwotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJz
aXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOworICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNz
aW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSksIDApOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3Jh
Z2VUeXBlJiBzdG9yYWdlVHlwZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAppbmRleCA2YjdjNWI0MjI0ZmEuLjA4MWY1
YmUxY2RhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9j
ZXNzUG9vbFNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJv
Y2Vzc1Bvb2xTb3VwLmNwcApAQCAtMzcsMTUgKzM3LDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewotICAgIE5ldHdv
cmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMgPSBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVyczsKLSAgICBzdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2ll
UGVyc2lzdGVudFN0b3JhZ2UoZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgZGVm
YXVsdFNlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgZGVmYXVs
dFNlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7Ci0gICAgaWYg
KG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMu
cGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+
cGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpOwotICAgICAgICBkZWZhdWx0U2Vz
c2lvblBhcmFtZXRlcnMuaWdub3JlVExTRXJyb3JzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5pZ25v
cmVUTFNFcnJvcnMoKTsKLSAgICAgICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnByb3h5U2V0
dGluZ3MgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm94eVNldHRpbmdzKCk7Ci0gICAg
fQotCi0gICAgcGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kgPSBtX2luaXRpYWxIVFRQQ29v
a2llQWNjZXB0UG9saWN5OwogICAgIHBhcmFtZXRlcnMubGFuZ3VhZ2VzID0gdXNlclByZWZlcnJl
ZExhbmd1YWdlcygpOwogICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSB0
cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mby5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mby5oCmluZGV4IDgzNTBkYmFjZjhkNS4u
OWY0Njg1ZDEzYWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mby5oCkBAIC0yNSw2ICsy
NSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvSFRUUENvb2tpZUFjY2VwdFBvbGljeS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBj
ZmJmMTYzNTFmYzAuLjliY2E2MDU4MDM5OCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDIwLTA5LTI3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IEJyYWR5IEVpZHNvbi4KKworICAgICAgICBN
b3N0IGNoYW5nZXMgdG8gdGVzdHMgYXJlIGp1c3QgY2FsbGluZyBhIGZ1bmN0aW9uIG9uIHRoZSBX
S1dlYnNpdGVEYXRhU3RvcmUgaW5zdGVhZCBvZiB0aGUgV0tQcm9jZXNzUG9vbAorICAgICAgICBi
ZWNhdXNlIHdlIHdhbnQgdG8gZG8gc29tZXRoaW5nIHdpdGggdGhlIG5ldHdvcmsgcHJvY2VzcyBh
bmQgaXQgaGFzIGEgbmV3IG93bmVyLgorICAgICAgICBFeGNlcHRpb25zIGFyZSBub3RlZCBpbmxp
bmUuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vz
c0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9h
ZC5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRvd25sb2FkQXRSYXRlKToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW06Cisg
ICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0lEQkRlbGV0ZVJlY292ZXJ5Lm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tOgorICAgICAg
ICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJP
YmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNz
S2lsbC5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0
ZW5jZS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW06CisgICAgICAgIChURVNU
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRl
bXBGaWxlU2l6ZS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW06CisgICAgICAgIChU
RVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQ
cm9jZXNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFTdG9yZS5t
bToKKyAgICAgICAgKGNoZWNrUmVjb3ZlcnlBZnRlckNyYXNoKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlz
dGljcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICBUaGlzIHRlc3Qgd2FzIG1ha2luZyBh
IFdLV2Vic2l0ZURhdGFTdG9yZSwgZ2V0dGluZyBpdHMgcmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNz
IGRpcmVjdG9yeSwKKyAgICAgICAgcHV0dGluZyB0aGluZ3MgaW4gdGhhdCBkaXJlY3RvcnksIHRo
ZW4gc3RhcnRpbmcgdGhlIG5ldHdvcmsgcHJvY2VzcyBhbmQgbWFraW5nIHN1cmUgZXZlcnl0aGlu
ZworICAgICAgICB3b3JrcyB3aGVuIGluaXRpYWxpemluZyB0aGUgbmV0d29yayBwcm9jZXNzLiAg
Tm93LCBuZXR3b3JrIHByb2Nlc3MgaW5pdGlhbGl6YXRpb24gaGFwcGVucyB3aGVuIGEKKyAgICAg
ICAgV0tXZWJzaXRlRGF0YVN0b3JlIGlzIGluc3RhbnRpYXRlZCwgc28gd2UgbmVlZCB0byBwdXQg
dGhpbmdzIHRoZXJlIGJlZm9yZSBpbnN0YW50aWF0aW5nIGEgV0tXZWJzaXRlRGF0YVN0b3JlLgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJh
c2ljLm1tOgorICAgICAgICBCZWZvcmUgdGhpcyBjaGFuZ2UsIGVhY2ggV0tQcm9jZXNzUG9vbCBo
YWQgaXRzIG93biBuZXR3b3JrIHByb2Nlc3MsIHdoaWNoIGhvbGRzIHRoZSBzZXJ2aWNlIHdvcmtl
ciByZWdpc3RyeQorICAgICAgICBmb3IgdGhlIFdlYnNpdGVEYXRhU3RvcmVzIHVzZWQgd2l0aCB0
aGF0IHByb2Nlc3MgcG9vbC4gIE5vdywgdGhlIG5ldHdvcmsgcHJvY2VzcyBzdGlsbCBuZWVkcyB0
byBoYXZlIGEgc2VydmljZQorICAgICAgICB3b3JrZXIgcmVnaXN0cnkgaW4gaXQsIGJ1dCB3aGVu
IHdlIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gaXQgbG9va2luZyBmb3IgYSB3ZWIgcHJvY2VzcyB0
byBydW4gdGhlIHNlcnZpY2UKKyAgICAgICAgd29ya2VyLCB3ZSBnbyBhcmJpdHJhcmlseSB0byB0
aGUgZmlyc3QgcHJvY2VzcyBwb29sIHRoYXQgaGFzIGEgcHJvY2VzcyB3ZSBjYW4gdXNlLiAgVGhp
cyBsb2dpYyBpcyBpbiAKKyAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNv
bnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vzcy4gIEJlY2F1c2Ugd2UgdXNlIHRoZSBmaXJz
dCBwcm9jZXNzIHBvb2wgZWFjaAorICAgICAgICB0aW1lLCBzZXR0aW5nIHRoZSBjdXN0b20gdXNl
ciBhZ2VudCB0byB0d28gZGlmZmVyZW50IHRoaW5ncyBpbiB0d28gZGlmZmVyZW50IHByb2Nlc3Mg
cG9vbHMgY2F1c2VzIG9ubHkgb25lCisgICAgICAgIHRvIGJlIHVzZWQuICBUaGlzIGlzIG5vdCBh
IHByb2JsZW0gaW4gcHJhY3RpY2UsIHRob3VnaCwgYmVjYXVzZSB0aGUgb25seSBhcHBsaWNhdGlv
biB0aGF0IHVzZXMgdGhlIFNQSSB0bworICAgICAgICBzZXQgYSBzZXJ2aWNlIHdvcmtlcidzIGN1
c3RvbSB1c2VyIGFnZW50IGlzIFNhZmFyaSwgd2hpY2ggb25seSBoYXMgb25lIHByb2Nlc3MgcG9v
bC4gIFRoaXMgdGVzdCBzdGlsbCB2ZXJpZmllcworICAgICAgICB0aGF0IGEgdXNlciBhZ2VpbnQg
aXMgY29ycmVjdGx5IHNlbnQuCisgICAgICAgIFNpbWlsYXJseSwgdGhlIHRlc3RzIHRoYXQgY291
bnQgc2VydmljZSB3b3JrZXIgcHJvY2Vzc2VzIGVpdGhlciBoYXZlIGRpZmZlcmVudCByZXN1bHRz
IG9yIG5lZWQgdG8gYmUgcnVuIHdpdGgKKyAgICAgICAgb25lIHByb2Nlc3MgcG9vbCBwZXIgcGFy
ZW50IHByb2Nlc3MuICBUbyBrZWVwIHRoZSByZXN1bHRzIHRoZSBzYW1lLCBJIHNlcGFyYXRlZCB0
aGUgdGVzdHMgaW50byBkaWZmZXJlbnQKKyAgICAgICAgVEVTVChTZXJ2aWNlV29ya2VycywgLi4u
KSBtYWNyb3Mgd2hpY2ggYXJlIHJ1biBpbiBzZXBhcmF0ZSBwYXJlbnQgcHJvY2Vzc2VzLgorICAg
ICAgICBUaGUgdGVzdCBSZXN0b3JlRnJvbURpc2tOb25EZWZhdWx0U3RvcmUgbmVlZHMgdG8gdXNl
IHRoZSBzYW1lIGRhdGEgc3RvcmUgZm9yIGJvdGggV0tXZWJWaWV3cyBub3cgYmVjYXVzZSBvdGhl
cndpc2UKKyAgICAgICAgdGhlcmUgd2FzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIHN0YXJ0dXAg
b2YgYSBuZXcgbmV0d29yayBwcm9jZXNzIHRoYXQgd2Fzbid0IHRoZXJlIGJlZm9yZSBiZWNhdXNl
IHdlIHdlcmUgdXNpbmcgdGhlCisgICAgICAgIHNhbWUgcHJvY2VzcyBwb29sIGFuZCB0aGVyZWZv
cmUgdGhlIHNhbWUgbmV0d29yayBwcm9jZXNzLiAgSSBhZGRlZCBzcGlubmluZyB0aGUgcnVuIGxv
b3AgYW5kIHNsZWVwaW5nIHRvIGJlIGFibGUgdG8KKyAgICAgICAgcmVwcm9kdWNlIHRoZSByYWNl
IGNvbmRpdGlvbiBmYWlsdXJlIGFuZCBJIHVzZSB0aGUgc2FtZSBXS1dlYnNpdGVEYXRhU3RvcmUg
dG8gdXNlIHRoZSBzYW1lIG5ldHdvcmsgcHJvY2Vzcywgd2hpY2ggd2FzCisgICAgICAgIHRoZSBp
bnRlbnQgb2YgdXNpbmcgdGhlIHNhbWUgV0tQcm9jZXNzUG9vbCBiZWZvcmUuICBUaGUgdGVzdCBz
dGlsbCB0ZXN0cyB0aGF0IHRoZSByZWdpc3RyYXRpb24gaXMgcmUtdXNlZCB3aGVuIHdlIGFyZQor
ICAgICAgICBub3QgdXNpbmcgdGhlIGRlZmF1bHQgZGF0YSBzdG9yZS4KKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1t
OgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdlYlZpZXc6cnVuSmF2
YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25I
YW5kbGVyOl0pOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdhaXRG
b3JNZXNzYWdlXSk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgYWxl
cnRDb29raWVIVE1MXSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgVGhpcyBpcyB0aGUgd2hv
bGUgcG9pbnQgb2YgbWUgZG9pbmcgdGhpcy4KKyAgICAgICAgSSB0b29rIGEgdGVzdCB0aGF0IHdh
cyBmbGFreSBvbmx5IG9uIGlPUyAoYmVjYXVzZSBvZiBkaWZmZXJlbnQgTlNIVFRQQ29va2llU3Rv
cmFnZSBzeW5jaW5nIGJlaGF2aW9yKSBhbmQgbWFkZQorICAgICAgICBpdCBmbGFreSBub3doZXJl
IChmaW5nZXJzIGNyb3NzZWQhKSBhbmQgYWRkZWQgYSB0ZXN0IHRoYXQgY29ycmVjdGx5IGhhbmRs
ZXMgc2Vzc2lvbiBjb29raWVzIGxpa2Ugd2UgY291bGQgbm90CisgICAgICAgIGJlZm9yZSB0aGlz
IGNoYW5nZS4KKyAgICAgICAgSSBhbHNvIHJlLXVzZWQgc29tZSB0ZXN0IGluZnJhc3RydWN0dXJl
IGFuZCBtYWRlIGl0IHN0b3AgdXNpbmcgcHJvY2Vzcy1nbG9iYWwgc3RhdGljIHZhcmlhYmxlcyBm
b3IgdGVzdCBzdGF0ZS4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBh
dGhzLm1tOgorICAgICAgICAocnVuV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzKToKKyAgICAg
ICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2JqQy9DdXN0
b21Qcm90b2NvbHNUZXN0Lm1tOgorICAgICAgICAoLVtDbG9zZVdoaWxlU3RhcnRpbmdQcm90b2Nv
bCBzdGFydExvYWRpbmddKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnJ1blRlc3QpOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpmaW5kQW5kRHVtcFdlYktpdFByb2Nlc3NJZGVudGlmaWVy
cyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpuZXR3b3JrUHJvY2Vzc0RpZENyYXNo
KToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
KToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dCk6
CisgICAgICAgIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdv
cmtlclRlc3RpbmcgaXMgbm90IG5lZWRlZCwgc28gSSByZW1vdmVkIGl0LgorICAgICAgICBXS0Nv
bnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZSBpc24ndCBuZWVkZWQgYW55IG1vcmUgYmVj
YXVzZSBXS0NvbnRleHRSZWYgKFdlYlByb2Nlc3NQb29sKSBkb2Vzbid0CisgICAgICAgIG93biBh
IG5ldHdvcmsgcHJvY2VzcyBhbnkgbW9yZSwgc28gaXQgZG9lc24ndCBjYXJlIHdoaWNoIGlzIHRo
ZSBkZWZhdWx0IFdlYnNpdGVEYXRhU3RvcmUuCisgICAgICAgIEluIGZhY3QsIHRoZSAiZGVmYXVs
dCIgV2Vic2l0ZURhdGFTdG9yZSBpc24ndCByZWFsbHkgaW1wb3J0YW50IGluIHRoZSBuZXR3b3Jr
IHByb2Nlc3MgYW55IG1vcmUuCisKIDIwMjAtMDktMjggIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRh
cmRAYXBwbGUuY29tPgogCiAgICAgICAgIFt3ZWJraXRweV0gVXNlIHdlYmtpdGNvcmVweSdzIGF1
dG8gaW5zdGFsbGVyIGZvciBweWNvZGVzdHlsZSAoRm9sbG93LXVwIGZpeCkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRo
UGVuZGluZ0Nvbm5lY3Rpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCmluZGV4IDk3Mzg5ZjAx
ZmYyZS4uOTdiNzJlMDE2ZGVkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRo
UGVuZGluZ0Nvbm5lY3Rpb24ubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9X
S1Byb2Nlc3NHcm91cFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdl
YktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0
Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTg3LDcgKzg4LDcgQEAgVEVTVChX
ZWJLaXQsIE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24pCiAgICAgcGlk
X3Qgd2ViVmlldzJQSUQgPSBbd2ViVmlldzIuZ2V0KCkgX3dlYlByb2Nlc3NJZGVudGlmaWVyXTsK
ICAgICBFWFBFQ1RfTkUod2ViVmlldzFQSUQsIHdlYlZpZXcyUElEKTsKIAotICAgIHBpZF90IGlu
aXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVyID0gW3Byb2Nlc3NQb29sLmdldCgpIF9uZXR3
b3JrUHJvY2Vzc0lkZW50aWZpZXJdOworICAgIHBpZF90IGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZmVyID0gW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfbmV0d29y
a1Byb2Nlc3NJZGVudGlmaWVyXTsKICAgICBFWFBFQ1RfTkUoaW5pdGlhbE5ldHdvcmtQcm9jZXNz
SWRlbnRpZmlmZXIsIDApOwogICAgIGtpbGwoaW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlm
ZXIsIFNJR0tJTEwpOwogICAgIFV0aWw6OnJ1bigmbmV0d29ya1Byb2Nlc3NDcmFzaGVkKTsKQEAg
LTk2LDcgKzk3LDcgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGlu
Z0Nvbm5lY3Rpb24pCiAgICAgW3dlYlZpZXcxLmdldCgpIGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVl
c3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpA
InNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRB
UEkucmVzb3VyY2VzIl1dXTsKICAgICBbd2ViVmlldzEuZ2V0KCkgX3Rlc3Rfd2FpdEZvckRpZEZp
bmlzaE5hdmlnYXRpb25dOwogCi0gICAgcGlkX3QgcmVsYXVuY2hlZE5ldHdvcmtQcm9jZXNzSWRl
bnRpZmllciA9IFtwcm9jZXNzUG9vbC5nZXQoKSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXTsK
KyAgICBwaWRfdCByZWxhdW5jaGVkTmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyID0gW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXTsK
ICAgICBFWFBFQ1RfTkUoaW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlmZXIsIHJlbGF1bmNo
ZWROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIpOwogICAgIEVYUEVDVF9GQUxTRShuZXR3b3JrUHJv
Y2Vzc0NyYXNoZWQpOwogCkBAIC0xNDYsOCArMTQ3LDggQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQ
cm9jZXNzUmVsYXVuY2hPbkxhdW5jaEZhaWx1cmUpCiAKICAgICAvLyBDb25zdHVjdGluZyBhIFdl
YlZpZXcgc3RhcnRzIGEgbmV0d29yayBwcm9jZXNzIHNvIHRlcm1pbmF0ZSB0aGlzIG9uZS4gVGhl
IHBhZ2UgbG9hZCBiZWxvdyB3aWxsIHRoZW4gcmVxdWVzdCBhIG5ldHdvcmsgcHJvY2VzcyBhbmQg
d2UKICAgICAvLyBtYWtlIHRoaXMgbmV3IG5ldHdvcmsgcHJvY2VzcyBsYXVuY2ggY3Jhc2ggb24g
c3RhcnR1cC4KLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKLSAg
ICBbcHJvY2Vzc1Bvb2wgX21ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGlu
Z107CisgICAgW1dLV2Vic2l0ZURhdGFTdG9yZSBfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5j
aEZhaWxGb3JUZXN0aW5nXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0
b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIGRlbGVnYXRlID0gYWRv
cHROUyhbW01vbml0b3JXZWJDb250ZW50Q3Jhc2hOYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGlu
aXRdKTsKICAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCld
OwpAQCAtMTU4LDcgKzE1OSw3IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc1JlbGF1bmNo
T25MYXVuY2hGYWlsdXJlKQogICAgIEVYUEVDVF9UUlVFKG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk7
CiAgICAgRVhQRUNUX0ZBTFNFKHdlYlByb2Nlc3NDcmFzaGVkKTsKICAgICBFWFBFQ1RfR1QoW3dl
YlZpZXcgX3dlYlByb2Nlc3NJZGVudGlmaWVyXSwgMCk7Ci0gICAgRVhQRUNUX0dUKFtwcm9jZXNz
UG9vbC5nZXQoKSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXSwgMCk7CisgICAgRVhQRUNUX0dU
KFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRl
bnRpZmllcl0sIDApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQppbmRleCBi
N2VkOTk5MzlmZDUuLjE4MTkxMzFjOWEwZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCkBAIC04ODksOSArODg5LDkgQEAgdm9pZCBk
b3dubG9hZEF0UmF0ZShkb3VibGUgZGVzaXJlZEticHMsIHVuc2lnbmVkIHNwZWVkTXVsdGlwbGll
ciwgQXBwUmV0dXJuc1RvRm8KICAgICByZWNlaXZlZERhdGEgPSBmYWxzZTsKICAgICBVdGlsOjpy
dW4oJnJlY2VpdmVkRGF0YSk7CiAgICAgLy8gU3RhcnQgdGhlIERvd25sb2FkTW9uaXRvcidzIHRp
bWVyLgotICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfc3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZDpZRVNdOworICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJz
aXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOllFU107CiAgICAgaWYgKHJl
dHVyblRvRm9yZWdyb3VuZCA9PSBBcHBSZXR1cm5zVG9Gb3JlZ3JvdW5kOjpZZXMpCi0gICAgICAg
IFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFj
a2dyb3VuZDpOT107CisgICAgICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS53ZWJzaXRlRGF0
YVN0b3JlIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOk5PXTsKICAgICBkaWRDYW5jZWwgPSBm
YWxzZTsKICAgICBVdGlsOjpydW4oJmRpZENhbmNlbCk7CiAgICAgdGVybWluYXRlU2VydmVyID0g
dHJ1ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SURCQ2hlY2twb2ludFdBTC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSURCQ2hlY2twb2ludFdBTC5tbQppbmRleCA1Y2Q3YWJkYTAxZDEuLmQ3N2E2ZmQ5ODc5ZSAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVj
a3BvaW50V0FMLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SURCQ2hlY2twb2ludFdBTC5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dL
UHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRy
b2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblBy
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAg
LTg2LDcgKzg3LDcgQEAgVEVTVChJbmRleGVkREIsIENoZWNrcG9pbnRzV0FMQXV0b21hdGljYWxs
eSkKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tj
b25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRs
ZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nl
c3NdOwogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29u
ZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0gYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCmlu
ZGV4IGM4YWYxZDI0M2M0Zi4uYmJmMWExNTIxNWRjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292ZXJ5Lm1tCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KQEAg
LTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJL
aXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5o
PgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9y
dCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5k
ZXhlZERCLCBEZWxldGVSZWNvdmVyeSkKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJh
dGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFs
bG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0g
YWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIi
XTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3
b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5jb25zaXN0ZW50
IGRhdGFiYXNlIGZpbGVzIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBOU1VSTCAqdXJs
MSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJEZWxldGVSZWNv
dmVyeSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRB
UEkucmVzb3VyY2VzIl07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KaW5kZXggOTVjY2EwY2UyODE2
Li44OGE1M2Y2MWQ5ZDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KQEAgLTMxLDYgKzMxLDcg
QEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
V2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRl
RGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8
V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19X
S1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01OCw3ICs1OSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRl
eFVwZ3JhZGVUb1YyKQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25m
aWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRd
KTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRN
ZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IHRoZSBpbmNvbnNpc3RlbnQgZGF0YWJhc2Ug
ZmlsZXMgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeQogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1
bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIkluZGV4VXBncmFkZSIgd2l0aEV4dGVu
c2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9i
amVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQppbmRleCBmZmE1YTc4
NzhhNDcuLjQwM2UwZmZhODIxMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3Jh
ZGVUb1YyLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9v
bFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtNTcsNyArNTgs
NyBAQCBURVNUKEluZGV4ZWREQiwgSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIpCiAgICAg
UmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJh
dGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRs
ZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0
aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAog
ICAgIC8vIENvcHkgZGF0YWJhc2UgZmlsZXMgd2l0aCBvbGQgT2JqZWN0U3RvcmVJbmZvIHNjaGVt
YSB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5LgogICAgIE5TVVJMICp1cmwxID0gW1tOU0J1bmRs
ZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUi
IHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJl
c291cmNlcyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tCmluZGV4
IDY4NzQ1MjllYmJmMy4uNzMwNzdlY2RmZDM2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFz
ZVByb2Nlc3NLaWxsLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9j
ZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxl
clByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0
ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZp
Z3VyYXRpb24uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTkyLDcgKzkzLDcgQEAg
VEVTVChJbmRleGVkREIsIERhdGFiYXNlUHJvY2Vzc0tpbGwpCiAgICAgICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICAgICAgaWYgKCFraWxs
ZWREQlByb2Nlc3MgJiYgb3BlblJlcXVlc3RVcGdyYWRlTmVlZGVkKSB7CiAgICAgICAgICAgICBr
aWxsZWREQlByb2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCku
cHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICAgICAgICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbQppbmRleCA3
ZjYyNjQ1ZDk5NjAuLjZmNjdkYzI3ZWRjMyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0KKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3MubW0K
QEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxl
clByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktp
dC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQu
aD4KICNpbXBvcnQgPHd0Zi9EZXF1ZS5oPgpAQCAtNjksNyArNzAsNyBAQCBURVNUKEluZGV4ZWRE
QiwgSW5kZXhlZERCTXVsdGlQcm9jZXNzKQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1
cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24g
YWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVy
XSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxl
ciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3Jl
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3
ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsK
IApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eGVkREJQZXJzaXN0ZW5jZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KaW5kZXggYjMyY2U0YTVmNzM4Li5kNjIyMDMyMmU0
NzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5k
ZXhlZERCUGVyc2lzdGVuY2UubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQpAQCAtNzgsNyArNzgsNyBAQCBURVNUKElu
ZGV4ZWREQiwgSW5kZXhlZERCUGVyc2lzdGVuY2UpCiAgICAgd2ViVmlldyA9IG5pbDsKIAogICAg
IC8vIFRlcm1pbmF0ZSB0aGUgbmV0d29yayBwcm9jZXNzCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0
KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAK
ICAgICAvLyBNYWtlIGEgbmV3IHdlYiB2aWV3IHRvIGZpbmlzaCB0aGUgdGVzdAogICAgIHdlYlZp
ZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3Qo
MCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwpAQCAt
MjY4LDcgKzI2OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUaGlyZFBhcnR5RnJhbWVI
YXNBY2Nlc3MpCiAKICAgICB3ZWJWaWV3ID0gbmlsOwogICAgIHNlY29uZFdlYlZpZXcgPSBuaWw7
Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBUaGlyZC1wYXJ0eSBJREIgc3RvcmFnZSBp
cyBzdG9yZWQgaW4gdGhlIG1lbW9yeSBvZiBuZXR3b3JrIHByb2Nlc3MuCiAgICAgYXV0byB0aGly
ZFdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFr
ZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0p
OwpAQCAtMzg1LDcgKzM4NSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUaGlyZFBhcnR5
V29ya2VySGFzQWNjZXNzKQogCiAgICAgd2ViVmlldyA9IG5pbDsKICAgICBzZWNvbmRXZWJWaWV3
ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9y
ZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB0aGlyZFdlYlZpZXcgPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIGxvYWRU
ZXN0UGFnZUluV2ViVmlldyh0aGlyZFdlYlZpZXcuZ2V0KCksIEAiZGF0YWJhc2UgaXMgY3JlYXRl
ZCIpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0KaW5kZXggOGVjNjVmMGEz
YmE5Li41MTBiMjRmNTY5ZDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5t
bQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2Vi
S2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC04OCw4ICs4OSw4IEBAIFRFU1QoSW5kZXhlZERC
LCBJbmRleGVkREJTdXNwZW5kSW1taW5lbnRseSkKIAogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3Vs
dChAIkNvbnRpbnVlIik7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBf
c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKLSAgICBbY29uZmlndXJh
dGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAg
ICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nl
c3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNp
dGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBydW5UZXN0
QW5kQ2hlY2tSZXN1bHQoQCJFeHBlY3RlZCBBYm9ydCBGb3IgU3VzcGVuc2lvbiIpOwogICAgIHJ1
blRlc3RBbmRDaGVja1Jlc3VsdChAIkV4cGVjdGVkIFN1Y2Nlc3MgQWZ0ZXIgUmVzdW1lIik7CkBA
IC0xNTgsOCArMTU5LDggQEAgVEVTVChJbmRleGVkREIsIFN1c3BlbmRJbW1pbmVudGx5Rm9yVGhp
cmRQYXJ0eURhdGFiYXNlcykKICAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzptYWluRnJhbWVT
dHJpbmcgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly93ZWJraXQub3JnIl1d
OwogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAImRhdGFiYXNlIGlzIGNyZWF0ZWQiKTsKIAot
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NX
aWxsU3VzcGVuZEltbWluZW50bHldOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQ
b29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5l
dHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJ1blRlc3RBbmRDaGVja1Jlc3VsdChAInRy
YW5zYWN0aW9uIGlzIGNvbXBsZXRlZCIpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbQpp
bmRleCA1MzY1NDFlM2IwZTUuLmU3Yjk5MjI4Y2U4NyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNpemUubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNp
emUubW0KQEAgLTk1LDcgKzk1LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlRlbXBGaWxl
U2l6ZSkKIAogICAgIC8vIFRlcm1pbmF0ZSBuZXR3b3JrIHByb2Nlc3MgdG8ga2VlcCBXQUwgb24g
ZGlzay4KICAgICB3ZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nl
c3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0
KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgRVhQ
RUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRo
OndhbEZpbGVQYXRoLmdldCgpLnBhdGhdKTsKICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBm
aWxlQXR0cmlidXRlcyA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gYXR0cmlidXRl
c09mSXRlbUF0UGF0aDp3YWxGaWxlUGF0aC5nZXQoKS5wYXRoIGVycm9yOm5pbF07CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBl
cnNpc3RlbmNlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2Nh
bFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQppbmRleCA0MTMzZWU3YjNkYWUuLjVmNzkxOTA5NDNjNyAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0
b3JhZ2VQZXJzaXN0ZW5jZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1w
b3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
S1dlYnBhZ2VQcmVmZXJlbmNlc1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVE
YXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxX
ZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
VXNlclN0eWxlU2hlZXQuaD4KQEAgLTEwOSw3ICsxMTAsNyBAQCBURVNUKFdLV2ViVmlldywgTG9j
YWxTdG9yYWdlUHJvY2Vzc0NyYXNoZXMpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZy
ZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAgIEVYUEVDVF9XS19TVFJFUShAInNlc3Npb246c3Rv
cmFnZSIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5n
ZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
IAogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKQEAgLTE2Miw3ICsxNjMsNyBAQCBU
RVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlUHJvY2Vzc1N1c3BlbmRzKQogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tf
U1RSRVEoQCJ2YWx1ZSIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7CiAKLSAgICBbcHJvY2Vz
c1Bvb2wuZ2V0KCkgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07Cisg
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9j
ZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKIAogICAgIHJlYWR5VG9Db250aW51ZSA9IGZhbHNl
OwogICAgIFt3ZWJWaWV3MSBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ3aW5kb3cubG9jYWxTdG9yYWdl
LnNldEl0ZW0oJ2tleScsICduZXdWYWx1ZScpIiBjb21wbGV0aW9uSGFuZGxlcjpeKGlkLCBOU0Vy
cm9yICopIHsKQEAgLTE3Nyw3ICsxNzgsNyBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdl
UHJvY2Vzc1N1c3BlbmRzKQogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
cmVhZHlUb0NvbnRpbnVlKTsKICAgICAKLSAgICBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX3NlbmROZXR3
b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURh
dGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJlY2VpdmVkU2Ny
aXB0TWVzc2FnZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2
ZWRTY3JpcHRNZXNzYWdlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCmluZGV4IGU2MGY4ODAyNWQwOS4uMGUyMWY5
MDk1MDAxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L05ldHdvcmtQcm9jZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KQEAgLTI4LDcgKzI4LDcgQEAKICNpbXBvcnQgIkhUVFBT
ZXJ2ZXIuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlV0aWxpdGllcy5o
IgotI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJL
aXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+
CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0z
NywxNCArMzcsMTQgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzRW50aXRsZW1lbnRzKQog
ewogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246W1tbV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdXSk7CiAgICAgW3dl
YlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAic2ltcGxlIl07Ci0gICAgV0tQ
cm9jZXNzUG9vbCAqcG9vbCA9IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sOwot
ICAgIGJvb2wgaGFzRW50aXRsZW1lbnQgPSBbcG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxl
bWVudEZvclRlc3Rpbmc6QCJjb20uYXBwbGUucm9vdGxlc3Muc3RvcmFnZS5XZWJLaXROZXR3b3Jr
aW5nU2FuZGJveCJdOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZSAqc3RvcmUgPSBbd2ViVmlldyBj
b25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlOworICAgIGJvb2wgaGFzRW50aXRsZW1lbnQg
PSBbc3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAiY29tLmFw
cGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2ViS2l0TmV0d29ya2luZ1NhbmRib3giXTsKICNpZiBQTEFU
Rk9STShNQUMpICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAgICAgRVhQRUNUX1RSVUUoaGFz
RW50aXRsZW1lbnQpOwogI2Vsc2UKICAgICBFWFBFQ1RfRkFMU0UoaGFzRW50aXRsZW1lbnQpOwog
I2VuZGlmCi0gICAgRVhQRUNUX0ZBTFNFKFtwb29sIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVt
ZW50Rm9yVGVzdGluZzpAInRlc3QgZmFpbHVyZSBjYXNlIl0pOworICAgIEVYUEVDVF9GQUxTRShb
c3RvcmUgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAidGVzdCBmYWls
dXJlIGNhc2UiXSk7CiB9CiAKIFRFU1QoV2ViS2l0LCBIVFRQUmVmZXJlcikKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFz
aE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCmlu
ZGV4IDYwOThlOGRhZDI1Mi4uMmY4YTJlMzNmZTg3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50
RGF0YVN0b3JlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
TmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KQEAgLTcyLDcgKzcy
LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tSZWNvdmVyeUFmdGVyQ3Jhc2goV0tXZWJzaXRlRGF0YVN0
b3JlICpkYXRhU3RvcmUpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAg
ICBkb25lID0gZmFsc2U7CiAKLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlv
bl0ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIFt3ZWJW
aWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6c2ltcGxlMl1dOwog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiB9CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9u
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9u
TmF2aWdhdGlvbi5tbQppbmRleCBlNDAzMDYyNmNiNDAuLjBlZWNhNDk5YmQ0NCAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2
aWdhdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1By
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCkBAIC01Mzg1LDcgKzUzODUsNyBAQCBURVNUKFByb2Nl
c3NTd2FwLCBVc2VQcmV3YXJtZWRQcm9jZXNzQWZ0ZXJUZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNz
KQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbcHJv
Y2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3Vy
YXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwog
CiAgICAgYXV0byB3ZWJWaWV3MiA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjp3ZWJWaWV3Q29u
ZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIFt3ZWJWaWV3MiBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6
ZGVsZWdhdGUuZ2V0KCldOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCmluZGV4IDBlMTBj
MzRlZWM4Mi4uYTNhYmEyMzFhOTNiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCkBA
IC03MTksNyArNzE5LDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBOZXR3b3JrUHJv
Y2Vzc1Jlc3RhcnQpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsK
IAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MiA9IGFkb3B0TlMoW1tX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkg
Y29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKQEAgLTc1Miw3ICs3NTIsNyBA
QCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jZXNzUmVzdGFydCkKIAog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW2NvbmZpZ3Vy
YXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBb
Y29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXczID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAtMTU1OCwxMCArMTU1OCw4IEBAIFRFU1QoUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcywgTWlncmF0ZURhdGFGcm9tTWlzc2luZ1RvcEZyYW1lVW5pcXVlUmVk
aXJlY3RTYW1lU2l0CiAKIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0
YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKIHsKKyAgICBOU1VSTCAqaXRwUm9vdFVSTCA9IFtO
U1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TVGVtcG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBl
bmRpbmdQYXRoQ29tcG9uZW50OkAiQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9v
bFRlc3QiXSBpc0RpcmVjdG9yeTpZRVNdOwogICAgIGF1dG8gZGVmYXVsdEZpbGVNYW5hZ2VyID0g
W05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVD
b25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0
b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKLSAgICBhdXRvICpkYXRhU3RvcmUg
PSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0
YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwotICAgIE5TVVJMICppdHBSb290VVJM
ID0gW1tkYXRhU3RvcmUgX2NvbmZpZ3VyYXRpb25dIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5XTsKICAgICBOU1VSTCAqZmlsZVVSTCA9IFtpdHBSb290VVJMIFVSTEJ5QXBwZW5kaW5n
UGF0aENvbXBvbmVudDpAIm9ic2VydmF0aW9ucy5kYiJdOwogICAgIFtkZWZhdWx0RmlsZU1hbmFn
ZXIgcmVtb3ZlSXRlbUF0UGF0aDppdHBSb290VVJMLnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBF
Q1RfRkFMU0UoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOml0cFJvb3RVUkwu
cGF0aF0pOwpAQCAtMTU3Miw2ICsxNTcwLDEwIEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKICAgICBFWFBFQ1RfVFJV
RShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6bmV3RmlsZVVSTC5wYXRoXSk7
CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciBjb3B5SXRlbUF0UGF0aDpuZXdGaWxlVVJMLnBhdGgg
dG9QYXRoOmZpbGVVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVDVF9UUlVFKFtkZWZhdWx0
RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpmaWxlVVJMLnBhdGhdKTsKKworICAgIF9XS1dl
YnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tf
V0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBk
YXRhU3RvcmVDb25maWd1cmF0aW9uLl9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0g
aXRwUm9vdFVSTDsKKyAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUg
YWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0
b3JlbGVhc2VdOwogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkOllFU107CiAKICAgICBzdGF0aWMgYm9vbCBkb25lRmxhZyA9IGZhbHNlOwpAQCAtMTYzMywx
MiArMTYzNSwxMiBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIFN0b3JlU3VzcGVuc2lv
bikKICAgICBbd2ViVmlldzIgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOwogCiAg
ICAgZG9uZUZsYWcgPSBmYWxzZTsKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3Jr
UHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6XnsKKyAgICBbZGF0YVN0b3JlMSBfc2VuZE5ldHdvcmtQ
cm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeewogICAgICAgICBkb25lRmxhZyA9IHRydWU7CiAgICAg
fV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CiAKLSAgICBbc2hh
cmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW2RhdGFT
dG9yZTEgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiB9CiAKIEBpbnRlcmZhY2UgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1NjaGVtZUhhbmRsZXIgOiBOU09iamVjdCA8V0tVUkxTY2hlbWVI
YW5kbGVyPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9TZXJ2aWNlV29ya2VyQmFzaWMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQppbmRleCAzNGE0ZjVjNTM4YjkuLjU0OTNkM2Q5
Mjc1OCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9T
ZXJ2aWNlV29ya2VyQmFzaWMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0KQEAgLTU1OCw3ICs1NTgsNyBAQCBURVNUKFNl
cnZpY2VXb3JrZXJzLCBVc2VyQWdlbnRPdmVycmlkZSkKIAogICAgIGNvbmZpZ3VyYXRpb24gPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogCi0gICAgbWVz
c2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxlciBhbGxvY10g
aW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBCYXIgQ3VzdG9t
IFVzZXJBZ2VudCJdKTsKKyAgICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2Vu
dE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2Ug
ZnJvbSB3b3JrZXI6IEZvbyBDdXN0b20gVXNlckFnZW50Il0pOwogICAgIFtbY29uZmlndXJhdGlv
biB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1lc3NhZ2VI
YW5kbGVyLmdldCgpIG5hbWU6QCJzdyJdOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29u
ZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CkBAIC02MzMsOCArNjMzLDYgQEAgVEVT
VChTZXJ2aWNlV29ya2VycywgQ2FjaGVTdG9yYWdlUmVzdG9yZUZyb21EaXNrKQogICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9IGZhbHNlOwogCi0gICAgW1dL
V2Vic2l0ZURhdGFTdG9yZSBfZGVsZXRlRGVmYXVsdERhdGFTdG9yZUZvclRlc3RpbmddOwotCiAg
ICAgU2VydmljZVdvcmtlclRDUFNlcnZlciBzZXJ2ZXIoewogICAgICAgICB7ICJ0ZXh0L2h0bWwi
LCBtYWluQ2FjaGVTdG9yYWdlQnl0ZXMgfQogICAgIH0sIHsKQEAgLTk4Miw2ICs5ODAsNyBAQCBU
RVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9uKQogCiAgICAg
UmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIHNldENvbmZpZ3Vy
YXRpb25JbmplY3RlZEJ1bmRsZVBhdGgoY29uZmlndXJhdGlvbi5nZXQoKSk7CisgICAgUmV0YWlu
UHRyPFdLUHJvY2Vzc1Bvb2w+IG9yaWdpbmFsUHJvY2Vzc1Bvb2wgPSBjb25maWd1cmF0aW9uLmdl
dCgpLnByb2Nlc3NQb29sOwogCiAgICAgZG9uZSA9IGZhbHNlOwogCkBAIC0xMDM1LDcgKzEwMzQs
NyBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0NyZWF0aW9uKQog
ICAgIGRvbmUgPSBmYWxzZTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGxvYWRpbmcgdGhlIHNp
bXBsZSBwYWdlIGRpZCBub3Qgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCi0gICAg
RVhQRUNUX0VRKDB1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3Nl
cnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgd2ViVmlldy5nZXQo
KS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsK
IAogICAgIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246bmV3Q29uZmlndXJhdGlv
bi5nZXQoKV0pOwogICAgIEVYUEVDVF9FUSgydSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9u
LnByb2Nlc3NQb29sLl93ZWJQcm9jZXNzQ291bnRJZ25vcmluZ1ByZXdhcm1lZCk7CkBAIC0xMDQz
LDkgKzEwNDIsOCBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTZXJ2aWNlV29ya2VyUHJvY2Vzc0Ny
ZWF0aW9uKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAgZG9uZSA9
IGZhbHNlOwogCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgbG9hZGluZyB0aGlzIHBhZ2UgZGlkIHN0
YXJ0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgogICAgIEVYUEVDVF9FUSgxdSwgd2ViVmll
dy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0Nv
dW50KTsKLQorICAgIEVYUEVDVF9FUSgxdSwgb3JpZ2luYWxQcm9jZXNzUG9vbC5nZXQoKS5fc2Vy
dmljZVdvcmtlclByb2Nlc3NDb3VudCk7CiAgICAgW1tjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRh
U3RvcmVdIHJlbW92ZURhdGFPZlR5cGVzOltXS1dlYnNpdGVEYXRhU3RvcmUgYWxsV2Vic2l0ZURh
dGFUeXBlc10gbW9kaWZpZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQYXN0XSBjb21wbGV0aW9uSGFu
ZGxlcjpeKCkgewogICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9XTsKQEAgLTE2MTgsMjEgKzE2
MTYsMzUgQEAgc3RhdGljIHNpemVfdCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sIHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGIKICAgICByZXR1cm4gd2ViVmlldy5nZXQo
KS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl93ZWJQcm9jZXNzQ291bnRJZ25vcmluZ1ByZXdh
cm1lZDsKIH0KIAotVEVTVChTZXJ2aWNlV29ya2VycywgT3V0T2ZBbmRJblByb2Nlc3NTZXJ2aWNl
V29ya2VyKQorVEVTVChTZXJ2aWNlV29ya2VycywgT3V0T2ZQcm9jZXNzU2VydmljZVdvcmtlcikK
IHsKICAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOwogICAg
IGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CiAKICAgICBFWFBFQ1RfRVEoMXUsIGxh
dW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKCF1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
LCAhZmlyc3RMb2FkQWJvdXRCbGFuaykpOworfQorCitURVNUKFNlcnZpY2VXb3JrZXJzLCBJblBy
b2Nlc3NTZXJ2aWNlV29ya2VyKQoreworICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzcyA9IHRydWU7CisgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKKwog
ICAgIEVYUEVDVF9FUSgydSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcywgIWZpcnN0TG9hZEFib3V0QmxhbmspKTsKIH0KIAotVEVTVChT
ZXJ2aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaFNlcnZp
Y2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmln
YXRpbmdUaHJvdWdoT3V0T2ZQcm9jZXNzU2VydmljZVdvcmtlcikKIHsKICAgICBib29sIHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOwogICAgIGJvb2wgZmlyc3RMb2FkQWJv
dXRCbGFuayA9IHRydWU7CiAKICAgICBFWFBFQ1RfRVEoMXUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQ
cm9jZXNzKCF1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJzdExvYWRBYm91dEJs
YW5rKSk7Cit9CisKK1RFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5rQmVmb3JlTmF2
aWdhdGluZ1Rocm91Z2hJblByb2Nlc3NTZXJ2aWNlV29ya2VyKQoreworICAgIGJvb2wgdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CisgICAgYm9vbCBmaXJzdExvYWRBYm91
dEJsYW5rID0gdHJ1ZTsKKwogICAgIEVYUEVDVF9FUSgydSwgbGF1bmNoU2VydmljZVdvcmtlclBy
b2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgZmlyc3RMb2FkQWJvdXRCbGFu
aykpOwogfQogCkBAIC0xODQ3LDggKzE4NTksOCBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBSZXN0
b3JlRnJvbURpc2tOb25EZWZhdWx0U3RvcmUpCiAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRN
YW5hZ2VyXSBjcmVhdGVEaXJlY3RvcnlBdFVSTDpzd0RCUGF0aCB3aXRoSW50ZXJtZWRpYXRlRGly
ZWN0b3JpZXM6WUVTIGF0dHJpYnV0ZXM6bmlsIGVycm9yOm5pbF07CiAgICAgRVhQRUNUX1RSVUUo
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnN3REJQYXRo
LnBhdGhdKTsKIAotICAgIC8vIFdlIHByb3RlY3QgdGhlIHByb2Nlc3MgcG9vbCBzbyB0aGF0IGl0
IG91dGxpdmVzIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgogICAgIFJldGFpblB0cjxXS1Byb2Nlc3NQ
b29sPiBwcm90ZWN0ZWRQcm9jZXNzUG9vbDsKKyAgICBSZXRhaW5QdHI8V0tXZWJzaXRlRGF0YVN0
b3JlPiBwcm90ZWN0ZWRXZWJzaXRlRGF0YVN0b3JlOwogCiAgICAgU2VydmljZVdvcmtlclRDUFNl
cnZlciBzZXJ2ZXIoewogICAgICAgICB7ICJ0ZXh0L2h0bWwiLCBtYWluUmVnaXN0ZXJpbmdXb3Jr
ZXJCeXRlcyB9LApAQCAtMTg3MSw2ICsxODgzLDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgUmVz
dG9yZUZyb21EaXNrTm9uRGVmYXVsdFN0b3JlKQogCiAgICAgICAgIGF1dG8gd2ViVmlldyA9IGFk
b3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4
MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgICAgIHBy
b3RlY3RlZFByb2Nlc3NQb29sID0gd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQ
b29sOworICAgICAgICBwcm90ZWN0ZWRXZWJzaXRlRGF0YVN0b3JlID0gd2ViVmlldy5nZXQoKS5j
b25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmU7CiAKICAgICAgICAgW3dlYlZpZXcgbG9hZFJl
cXVlc3Q6c2VydmVyLnJlcXVlc3QoKV07CiAKQEAgLTE4ODAsMTMgKzE4OTMsMTUgQEAgVEVTVChT
ZXJ2aWNlV29ya2VycywgUmVzdG9yZUZyb21EaXNrTm9uRGVmYXVsdFN0b3JlKQogICAgICAgICBb
d2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVTZXJ2aWNl
V29ya2Vyc107CiAgICAgfQogCisgICAgLy8gTWFrZSB1cyBtb3JlIGxpa2VseSB0byBsb3NlIGFu
eSByYWNlcyB3aXRoIHNlcnZpY2Ugd29ya2VyIGluaXRpYWxpemF0aW9uLgorICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEwKTsKKyAgICB1c2xlZXAoMTAwMDApOworICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEwKTsKKwogICAgIEBhdXRvcmVsZWFzZXBv
b2wgewogICAgICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogCi0gICAgICAgIGF1dG8gd2Vic2l0ZURhdGFTdG9y
ZUNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRp
b24gYWxsb2NdIGluaXRdKTsKLSAgICAgICAgd2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24u
Z2V0KCkuX3NlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBzd0RCUGF0aDsKLSAg
ICAgICAgYXV0byBub25EZWZhdWx0RGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFT
dG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbi5nZXQoKV0pOwotICAgICAgICBjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRh
U3RvcmUgPSBub25EZWZhdWx0RGF0YVN0b3JlLmdldCgpOworICAgICAgICBjb25maWd1cmF0aW9u
LmdldCgpLndlYnNpdGVEYXRhU3RvcmUgPSBwcm90ZWN0ZWRXZWJzaXRlRGF0YVN0b3JlLmdldCgp
OwogCiAgICAgICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbU1dNZXNzYWdlSGFu
ZGxlckZvclJlc3RvcmVGcm9tRGlza1Rlc3QgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNzYWdl
OkAiUEFTUzogUmVnaXN0cmF0aW9uIGFscmVhZHkgaGFzIGFuIGFjdGl2ZSB3b3JrZXIiXSk7CiAg
ICAgICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1l
c3NhZ2VIYW5kbGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJzdyJdOwpAQCAtMTk0NCwx
MSArMTk1OSwxMSBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBTdXNwZW5kTmV0d29ya1Byb2Nlc3Mp
CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVF
eGlzdHNBdFBhdGg6c3dEQlBhdGgucGF0aF0pOwogCi0gICAgWyB3ZWJWaWV3LmdldCgpLmNvbmZp
Z3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseV07CisgICAgW3dlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3Jl
IF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwogCiAgICAgRVhQRUNU
X1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnN3
REJQYXRoLnBhdGhdKTsKIAotICAgIFsgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nl
c3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOworICAgIFt3ZWJWaWV3LmdldCgp
LmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVz
dW1lXTsKIAogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnNlcnZlci5yZXF1ZXN0KCldOwogICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQppbmRl
eCBhMzVmMDUzNTBhYWIuLjMzNzYwOTJhMTk1YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCkBAIC00
NzksOCArNDc5LDYgQEAgc3RhdGljIGJvb2wgZmluaXNoZWQ7CiB9CiBAZW5kCiAKLS8vIEZJWE1F
OiBvbiBpT1MsIFVJIHByb2Nlc3Mgc2hvdWxkIGJlIHVzaW5nIHRoZSBzYW1lIGNvb2tpZSBmaWxl
IGFzIHRoZSBuZXR3b3JrIHByb2Nlc3MgZm9yIGRlZmF1bHQgc2Vzc2lvbi4KLSNpZiBQTEFURk9S
TShNQUMpCiBlbnVtIGNsYXNzIFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHsgTm8sIFll
cyB9Owogdm9pZCBydW5XS0hUVFBDb29raWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRF
bmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZykKIHsK
QEAgLTU4OSwyMCArNTg3LDY2IEBAIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9j
ZXNzUG9vbFdpdGhQcmV3YXJtaW5nKQogICAgIHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFBy
b2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nOjpZZXMpOwogfQogCi0jZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQotCiBAaW50ZXJmYWNlIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVs
ZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVnYXRlPgorLSAoTlNTdHJpbmcgKilhbGVydENvb2tp
ZUhUTUw7CistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNzYWdlOwogQGVuZAogCi1AaW1wbGVtZW50
YXRpb24gQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZQorQGltcGxlbWVudGF0aW9uIENoZWNr
U2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgeworICAgIFJldGFpblB0cjxOU1N0cmluZz4gX21lc3Nh
Z2U7Cit9CisKIC0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZhU2Ny
aXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlG
cmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9p
ZCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBFWFBFQ1RfU1RSRVEoIlNlc3Npb25Db29raWVO
YW1lPUNvb2tpZVZhbHVlIiwgbWVzc2FnZS5VVEY4U3RyaW5nKTsKKyAgICBfbWVzc2FnZSA9IG1l
c3NhZ2U7CiAgICAgZmluaXNoZWQgPSB0cnVlOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9
CisKKy0gKE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2UKK3sKKyAgICB3aGlsZSAoIV9tZXNzYWdl
KQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOworICAgIHJldHVy
biBfbWVzc2FnZS5hdXRvcmVsZWFzZSgpOworfQorCistIChOU1N0cmluZyAqKWFsZXJ0Q29va2ll
SFRNTAoreworICAgIHJldHVybiBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29r
aWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykg
eyBjb29raWVzW2ldID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0
KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsKK30KKwogQGVuZAogCitURVNUKFdlYktp
dCwgV0tIVFRQQ29va2llU3RvcmVNdWx0aXBsZVZpZXdzKQoreworICAgIFRlc3RXS1dlYlZpZXcg
KndlYlZpZXcxID0gW1tUZXN0V0tXZWJWaWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJW
aWV3MSBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCJzdGFydCBuZXR3b3JrIHByb2Nlc3Mi
XTsKKworICAgIE5TSFRUUENvb2tpZSAqc2Vzc2lvbkNvb2tpZSA9IFtOU0hUVFBDb29raWUgY29v
a2llV2l0aFByb3BlcnRpZXM6QHsKKyAgICAgICAgTlNIVFRQQ29va2llUGF0aDogQCIvIiwKKyAg
ICAgICAgTlNIVFRQQ29va2llTmFtZTogQCJTZXNzaW9uQ29va2llTmFtZSIsCisgICAgICAgIE5T
SFRUUENvb2tpZVZhbHVlOiBAIkNvb2tpZVZhbHVlIiwKKyAgICAgICAgTlNIVFRQQ29va2llRG9t
YWluOiBAIjEyNy4wLjAuMSIsCisgICAgfV07CisKKyAgICBfX2Jsb2NrIGJvb2wgc2V0Q29va2ll
RG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3MS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3Rv
cmUuaHR0cENvb2tpZVN0b3JlIHNldENvb2tpZTpzZXNzaW9uQ29va2llIGNvbXBsZXRpb25IYW5k
bGVyOl57CisgICAgICAgIHNldENvb2tpZURvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmc2V0Q29va2llRG9uZSk7CisKKyAgICBhdXRvIGRlbGVnYXRl
ID0gYWRvcHROUyhbQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBuZXddKTsKKyAgICBbd2Vi
VmlldzEgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldzEgbG9h
ZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtk
ZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIp
OworCisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzIgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBh
dXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcyIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCld
OworICAgIFt3ZWJWaWV3MiBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1M
XSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29r
aWVOYW1lPUNvb2tpZVZhbHVlIik7Cit9CisKIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhv
dXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Npb24pCiB7CiAgICAgUmV0YWluUHRyPFdLV2Vic2l0
ZURhdGFTdG9yZT4gZXBoZW1lcmFsU3RvcmVXaXRoQ29va2llcyA9IFtXS1dlYnNpdGVEYXRhU3Rv
cmUgbm9uUGVyc2lzdGVudERhdGFTdG9yZV07CkBAIC02MjcsOSArNjcxLDggQEAgVEVTVChXS0hU
VFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKICAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKICAgICBmaW5pc2hlZCA9IGZhbHNl
OwogICAgIAotICAgIE5TU3RyaW5nICphbGVydENvb2tpZUhUTUwgPSBAIjxzY3JpcHQ+dmFyIGNv
b2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkgPCBj
b29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50cmltKCk7IH0g
Y29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsKLSAg
ICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzphbGVydENvb2tpZUhUTUwgYmFzZVVSTDpbTlNVUkwg
VVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07Ci0gICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZmaW5pc2hlZCk7CisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6W2RlbGVn
YXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6
Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVz
c2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOwogfQogCiBzdGF0aWMgYm9v
bCBhcmVDb29raWVzRXF1YWwoTlNIVFRQQ29va2llICpmaXJzdCwgTlNIVFRQQ29va2llICpzZWNv
bmQpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dL
VVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tCmluZGV4IGFjN2RlNDE1MTJjNC4u
YWMxNjUzNWRmZDkzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbQpAQCAtMzUs
NiArMzUsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRh
U3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYv
UmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0xNTIsNyArMTUzLDcgQEAg
VEVTVChVUkxTY2hlbWVIYW5kbGVyLCBMZWFrczMpCiAKICAgICBydW5VbnRpbFRhc2tzSW5GbGln
aHQoMik7CiAKLSAgICBbd2ViVmlldzEuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3MS5nZXQoKS5jb25maWd1cmF0
aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJ1
blVudGlsVGFza3NJbkZsaWdodCgwKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9t
UGF0aHMubW0KaW5kZXggOTJjZjNhNjE5OGE1Li4zYjEzMWY3Y2I4NjAgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3Rv
bVBhdGhzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vi
c2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RhdGljIHZv
aWQgcnVuV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3
YXJtaW5nIHNob3VsZEUKICAgICAvLyBOb3csIHdpdGggYnJhbmQgbmV3IFdLV2Vic2l0ZURhdGFT
dG9yZXMgcG9pbnRpbmcgYXQgdGhlIHNhbWUgY3VzdG9tIGNvb2tpZSBzdG9yYWdlIGxvY2F0aW9u
LAogICAgIC8vIGluIG5ld2x5IGZpcmVkIHVwIE5ldHdvcmtQcm9jZXNzZXMsIHZlcmlmeSB0aGF0
IHRoZSBmZXRjaCBhbmQgZGVsZXRlIEFQSXMgd29yayBhcyBleHBlY3RlZC4KIAotICAgIFtwcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtkYXRhU3RvcmUgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBhdXRvIG5ld0N1c3RvbURhdGFTdG9yZSA9IGFkb3B0
TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vi
c2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIFtuZXdDdXN0b21EYXRh
U3RvcmUgZmV0Y2hEYXRhUmVjb3Jkc09mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldLV2Vi
c2l0ZURhdGFUeXBlQ29va2llcywgbmlsXSBjb21wbGV0aW9uSGFuZGxlcjpeKE5TQXJyYXk8V0tX
ZWJzaXRlRGF0YVJlY29yZCAqPiAqIHJlY29yZHMpIHsKQEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0
aWMgdm9pZCBydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMoU2hvdWxkRW5hYmxlUHJvY2Vz
c1ByZXdhcm1pbmcgc2hvdWxkRQogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKIAot
ICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtkYXRhU3Rv
cmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBuZXdDdXN0b21EYXRhU3RvcmUgPSBh
ZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9u
OndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpXSk7CiAKICAgICBbbmV3Q3VzdG9t
RGF0YVN0b3JlIHJlbW92ZURhdGFPZlR5cGVzOltOU1NldCBzZXRXaXRoT2JqZWN0czpXS1dlYnNp
dGVEYXRhVHlwZUNvb2tpZXMsIG5pbF0gbW9kaWZpZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQYXN0
XSBjb21wbGV0aW9uSGFuZGxlcjpeIHsKQEAgLTM4NSwxMSArMzg1LDEwIEBAIFRFU1QoV2ViS2l0
LCBDdXN0b21EYXRhU3RvcmVEZXN0cm95V2hpbGVGZXRjaGluZ05ldHdvcmtQcm9jZXNzRGF0YSkK
IAogICAgICAgICAvLyBUZXJtaW5hdGUgdGhlIG5ldHdvcmsgcHJvY2VzcyB3aGlsZSBhIHF1ZXJ5
IGlzIHBlbmRpbmcuCiAgICAgICAgIGF1dG8qIGFsbFByb2Nlc3NQb29scyA9IFtXS1Byb2Nlc3NQ
b29sIF9hbGxQcm9jZXNzUG9vbHNGb3JUZXN0aW5nXTsKLSAgICAgICAgQVNTRVJUX0VRKDFVLCBb
YWxsUHJvY2Vzc1Bvb2xzIGNvdW50XSk7Ci0gICAgICAgIGF1dG8qIHByb2Nlc3NQb29sID0gYWxs
UHJvY2Vzc1Bvb2xzWzBdOwotICAgICAgICB3aGlsZSAoIVtwcm9jZXNzUG9vbCBfbmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyXSkKKyAgICAgICAgQVNTRVJUX0VRKDBVLCBbYWxsUHJvY2Vzc1Bvb2xz
IGNvdW50XSk7CisgICAgICAgIHdoaWxlICghW2RhdGFTdG9yZSBfbmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyXSkKICAgICAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNsZWVwKDAuMDEpOwot
ICAgICAgICBraWxsKFtwcm9jZXNzUG9vbCBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXSwgU0lH
S0lMTCk7CisgICAgICAgIGtpbGwoW2RhdGFTdG9yZSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVy
XSwgU0lHS0lMTCk7CiAgICAgICAgIGFsbFByb2Nlc3NQb29scyA9IG5pbDsKICAgICAgICAgZGF0
YVN0b3JlID0gbmlsOwogICAgIH0KQEAgLTQ2NSw3ICs0NjQsOSBAQCBURVNUKFdlYktpdCwgQWx0
ZXJuYXRpdmVTZXJ2aWNlc0RlZmF1bHREaXJlY3RvcnlDcmVhdGlvbikKICAgICAKICAgICBbW05T
VXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzZXRPYmplY3Q6W05TTnVtYmVyIG51
bWJlcldpdGhCb29sOllFU10gZm9yS2V5OmtleV07CiAKLSAgICBUZXN0V0tXZWJWaWV3ICp3ZWJW
aWV3MiA9IFtbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICBX
S1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1tXS1dlYlZpZXdDb25maWd1
cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFT
dG9yZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlv
bjpbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdXSBhdXRvcmVsZWFzZV07CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzIgPSBbW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2
MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwogICAgIFt3ZWJW
aWV3MiBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCJzdGFydCBhdXhpbGlhcnkgcHJvY2Vz
c2VzIiBiYXNlVVJMOm5pbF07CiAKICAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVm
YXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6ZGVmYXVsdERpcmVjdG9yeS5wYXRoXSk7CkBA
IC01MzksNyArNTQwLDcgQEAgVEVTVChXZWJLaXQsIERvTG9hZFdpdGhOb25EZWZhdWx0RGF0YVN0
b3JlQWZ0ZXJUZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNzKQogCiAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCku
cHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZp
Z3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OwogCiAgICAgcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRs
ZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJo
dG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKICAgICBbd2Vi
VmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKQEAgLTg1Nyw3ICs4NTgsNyBAQCBURVNUKFdlYktp
dCwgTWVkaWFDYWNoZSkKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IpOwogCiAgICAgZG9uZSA9IHRy
dWU7Ci0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRh
U3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIFtmaWxlTWFuYWdlciByZW1v
dmVJdGVtQXRQYXRoOnBhdGggZXJyb3I6JmVycm9yXTsKICAgICBFWFBFQ1RfRkFMU0UoZXJyb3Ip
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRPYmpDL0N1c3Rv
bVByb3RvY29sc1Rlc3QubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdE9iakMv
Q3VzdG9tUHJvdG9jb2xzVGVzdC5tbQppbmRleCAyMmUxYTBhOWU4ZTIuLjdiODQ3OGI1OTc5ZiAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVBy
b3RvY29sc1Rlc3QubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRPYmpD
L0N1c3RvbVByb3RvY29sc1Rlc3QubW0KQEAgLTM0LDYgKzM0LDggQEAKICNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgogI2ltcG9ydCA8V2ViS2l0L1dLQ29udGV4dFByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1Byb2Nlc3NHcm91cFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1ZpZXdQ
cml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg+CiAjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIHN0YXRpYyBib29sIHRlc3RGaW5pc2hlZDsKQEAgLTcy
LDYgKzc0LDggQEAgc3RhdGljIFdLUHJvY2Vzc0dyb3VwICpwcm9jZXNzR3JvdXAoKQogICAgIHJl
dHVybiBwcm9jZXNzR3JvdXA7CiB9CiAKK3N0YXRpYyBSZXRhaW5QdHI8V0tWaWV3PiB3a1ZpZXc7
CisKIEBpbnRlcmZhY2UgQ2xvc2VXaGlsZVN0YXJ0aW5nUHJvdG9jb2wgOiBUZXN0UHJvdG9jb2wK
IEBlbmQKIApAQCAtODksNyArOTMsNyBAQCBzdGF0aWMgV0tQcm9jZXNzR3JvdXAgKnByb2Nlc3NH
cm91cCgpCiAgICAgICAgIH07CiAgICAgICAgIFdLQ29udGV4dFNldENsaWVudChbcHJvY2Vzc0dy
b3VwKCkgX2NvbnRleHRSZWZdLCAmY2xpZW50LmJhc2UpOwogCi0gICAgICAgIGtpbGwoV0tDb250
ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFtwcm9jZXNzR3JvdXAoKSBfY29udGV4dFJl
Zl0pLCBTSUdLSUxMKTsKKyAgICAgICAga2lsbChXS1dlYnNpdGVEYXRhU3RvcmVHZXROZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIoV0tQYWdlR2V0V2Vic2l0ZURhdGFTdG9yZShbd2tWaWV3IHBhZ2VS
ZWZdKSksIFNJR0tJTEwpOwogICAgICAgICBbc2VsZi5jbGllbnQgVVJMUHJvdG9jb2w6c2VsZiBk
aWRGYWlsV2l0aEVycm9yOltOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpOU0NvY29hRXJyb3JEb21h
aW4gY29kZTowIHVzZXJJbmZvOm5pbF1dOwogICAgIH0pOwogfQpAQCAtMTQyLDcgKzE0Niw3IEBA
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIHN0YXRpYyB2b2lkIHJ1blRlc3QoKQogewogICAg
IFJldGFpblB0cjxXS0Jyb3dzaW5nQ29udGV4dEdyb3VwPiBicm93c2luZ0NvbnRleHRHcm91cCA9
IGFkb3B0TlMoW1tXS0Jyb3dzaW5nQ29udGV4dEdyb3VwIGFsbG9jXSBpbml0V2l0aElkZW50aWZp
ZXI6QCJUZXN0SWRlbnRpZmllciJdKTsKLSAgICBSZXRhaW5QdHI8V0tWaWV3PiB3a1ZpZXcgPSBh
ZG9wdE5TKFtbV0tWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAw
LCA2MDApIHByb2Nlc3NHcm91cDpwcm9jZXNzR3JvdXAoKSBicm93c2luZ0NvbnRleHRHcm91cDpi
cm93c2luZ0NvbnRleHRHcm91cC5nZXQoKV0pOworICAgIHdrVmlldyA9IGFkb3B0TlMoW1tXS1Zp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgcHJvY2Vz
c0dyb3VwOnByb2Nlc3NHcm91cCgpIGJyb3dzaW5nQ29udGV4dEdyb3VwOmJyb3dzaW5nQ29udGV4
dEdyb3VwLmdldCgpXSk7CiAgICAgUmV0YWluUHRyPEN1c3RvbVByb3RvY29sc0xvYWREZWxlZ2F0
ZT4gbG9hZERlbGVnYXRlID0gYWRvcHROUyhbW0N1c3RvbVByb3RvY29sc0xvYWREZWxlZ2F0ZSBh
bGxvY10gaW5pdF0pOwogICAgIFt3a1ZpZXcgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcl0ubG9h
ZERlbGVnYXRlID0gbG9hZERlbGVnYXRlLmdldCgpOwogICAgIFtbd2tWaWV3IGJyb3dzaW5nQ29u
dGV4dENvbnRyb2xsZXJdIGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6
W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDovL3Jl
ZGlyZWN0P3Rlc3QiLCBbVGVzdFByb3RvY29sIHNjaGVtZV1dXV1dOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCAxMzQ1YzQyYzExZTYuLjY1YzVhZThkNWJh
NiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAgLTEwNjIs
OCArMTA2Miw2IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRW
YWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAKICAgICByZXNldFF1b3RhKCk7
CiAKLSAgICBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXJUZXN0aW5nKHBsYXRmb3JtQ29udGV4dCgpLCB0cnVlKTsKLQogICAgIFdLQ29udGV4dENsZWFy
Q3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5jb250ZXh0KCkpOwogCiAgICAgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpLCBmYWxzZSk7CkBA
IC0xMjM4LDcgKzEyMzYsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpmaW5kQW5kRHVtcFdlYktp
dFByb2Nlc3NJZGVudGlmaWVycygpCiAgICAgZHVtcFJlc3BvbnNlKG1ha2VTdHJpbmcoVGVzdENv
bnRyb2xsZXI6OndlYlByb2Nlc3NOYW1lKCksICI6ICIsCiAgICAgICAgIFdLUGFnZUdldFByb2Nl
c3NJZGVudGlmaWVyKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5w
YWdlKCkpLCAnXG4nLAogICAgICAgICBUZXN0Q29udHJvbGxlcjo6bmV0d29ya1Byb2Nlc3NOYW1l
KCksICI6ICIsCi0gICAgICAgIFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllciht
X2NvbnRleHQuZ2V0KCkpLCAnXG4nKSk7CisgICAgICAgIFdLV2Vic2l0ZURhdGFTdG9yZUdldE5l
dHdvcmtQcm9jZXNzSWRlbnRpZmllcih3ZWJzaXRlRGF0YVN0b3JlKCkpLCAnXG4nKSk7CiAjZWxz
ZQogICAgIGR1bXBSZXNwb25zZSgiXG4iX3MpOwogI2VuZGlmCkBAIC0yMjk4LDcgKzIyOTYsNyBA
QCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RDb250cm9sbGVyOjpnZXRJbmplY3RlZEJ1bmRs
ZUluaXRpYWxpemF0aW9uVXNlckRhdGEoKQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpuZXR3b3Jr
UHJvY2Vzc0RpZENyYXNoKCkKIHsKLSAgICBwaWRfdCBwaWQgPSBXS0NvbnRleHRHZXROZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIobV9jb250ZXh0LmdldCgpKTsKKyAgICBwaWRfdCBwaWQgPSBXS1dl
YnNpdGVEYXRhU3RvcmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIod2Vic2l0ZURhdGFTdG9y
ZSgpKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiNDUkFTSEVEIC0gJXMgKHBpZCAlbGQpXG4iLCBu
ZXR3b3JrUHJvY2Vzc05hbWUoKSwgc3RhdGljX2Nhc3Q8bG9uZz4ocGlkKSk7CiAgICAgZXhpdCgx
KTsKIH0KQEAgLTMxMzcsNyArMzEzNSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldElnbm9y
ZXNWaWV3cG9ydFNjYWxlTGltaXRzKGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pCiAKIHZv
aWQgVGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKLSAgICBXS0Nv
bnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgV0tX
ZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3Mod2Vic2l0ZURhdGFTdG9yZSgp
KTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdvcmtlcnMoKQpA
QCAtMzE1MiwxMCArMzE1MCwxMCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVdpbGxS
dW5UZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJikKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1Jbml0aWFsaXplRGF0YVN0b3JlKFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJh
dGlvbiwgY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKG9wdGlvbnMudXNl
RXBoZW1lcmFsU2Vzc2lvbikKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV0tQYWdlQ29u
ZmlndXJhdGlvbkdldFdlYnNpdGVEYXRhU3RvcmUoY29uZmlndXJhdGlvbik7Ci0gICAgZWxzZQot
ICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBkZWZhdWx0V2Vic2l0ZURhdGFTdG9yZSgpOwor
ICAgIGlmICghb3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKQorICAgICAgICBXS1BhZ2VDb25m
aWd1cmF0aW9uU2V0V2Vic2l0ZURhdGFTdG9yZShjb25maWd1cmF0aW9uLCBkZWZhdWx0V2Vic2l0
ZURhdGFTdG9yZSgpKTsKKworICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdLUGFnZUNvbmZpZ3Vy
YXRpb25HZXRXZWJzaXRlRGF0YVN0b3JlKGNvbmZpZ3VyYXRpb24pOwogfQogCiB2b2lkIFRlc3RD
b250cm9sbGVyOjpwbGF0Zm9ybUNyZWF0ZVdlYlZpZXcoV0tQYWdlQ29uZmlndXJhdGlvblJlZiBj
b25maWd1cmF0aW9uLCBjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKQEAgLTMxNjgsOSArMzE2
Niw4IEBAIFBsYXRmb3JtV2ViVmlldyogVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ3JlYXRlT3Ro
ZXJQYWdlKFBsYXRmb3JtV2ViVmlldyogcGFyZW50CiAgICAgcmV0dXJuIG5ldyBQbGF0Zm9ybVdl
YlZpZXcoY29uZmlndXJhdGlvbiwgb3B0aW9ucyk7CiB9CiAKLVdLQ29udGV4dFJlZiBUZXN0Q29u
dHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0Nv
bnRleHRDb25maWd1cmF0aW9uUmVmIGNvbnRleHRDb25maWd1cmF0aW9uKQorV0tDb250ZXh0UmVm
IFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVmIGNvbnRl
eHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYpCiB7Ci0gICAgV0tDb250ZXh0U2V0UHJpbWFy
eVdlYnNpdGVEYXRhU3RvcmUoY29udGV4dCwgZGVmYXVsdFdlYnNpdGVEYXRhU3RvcmUoKSk7CiAg
ICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410019</attachid>
            <date>2020-09-29 11:02:24 -0700</date>
            <delta_ts>2020-09-29 11:18:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200929110222.patch</filename>
            <type>text/plain</type>
            <size>367962</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDY3MjVmZmRjYmM3MWUyMWM1
ZjFjYmRkODUzNDAxZDYwNDFjZDQ5M2YuLjcxYTEzNjk2YTg4OWIzNTZhNWZlMWNhYWFhYmUxMGJj
ZGNkNmM5N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDE4IEBACisyMDIwLTA5LTI5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IEJyYWR5IEVpZHNvbi4KKworICAgICAgICBU
aGlzIHBhdGNoIG1vdmVzIHRoZSB0aGluZ3Mgb24gV2ViUHJvY2Vzc1Bvb2wgYXNzb2NpYXRlZCB3
aXRoIE5ldHdvcmtQcm9jZXNzUHJveHkgb3duZXJzaGlwIGFuZCBtb3ZlcyB0aGVtCisgICAgICAg
IHRvIFdlYnNpdGVEYXRhU3RvcmUuICBJdCdzIHByZXR0eSBtZWNoYW5pY2FsLCBidXQgaXQgcmVh
Y2hlcyBpdHMgZmluZ2VycyBpbnRvIGEgbG90IG9mIHRoaW5ncy4gIFNvbWUgY29tbWVudHMKKyAg
ICAgICAgb24gaW50ZXJlc3RpbmcgcGFydHMgYXJlIGJlbG93LgorCisgICAgICAgIFdoeSBhbSBJ
IGRvaW5nIHRoaXM/ICBJJ20gZ2xhZCB5b3UgYXNrZWQuCisKKyAgICAgICAgV0tXZWJWaWV3IGhh
ZCBhIGZ1bmRhbWVudGFsIGNvb2tpZSBwcm9ibGVtIGJlZm9yZSB0aGlzIGNoYW5nZS4gIEl0IGhh
ZCBhIFdLV2Vic2l0ZURhdGFTdG9yZSB0aGF0IGNvdWxkIHBvaW50IHRvIGEgY29va2llIHN0b3Jl
IG9uIGRpc2sKKyAgICAgICAgdGhhdCBjb3VsZCBiZSB1c2VkIGluIG11bHRpcGxlIG5ldHdvcmsg
cHJvY2Vzc2VzIGF0IHRoZSBzYW1lIHRpbWUuICBUaGlzIGxlZCB0byBwcm9ibGVtcyB3aXRoIGNv
b2tpZXMgYmVpbmcgcmVjZWl2ZWQgb3ZlciB0aGUgbmV0d29yaworICAgICAgICBpbiB0aG9zZSBk
aWZmZXJlbnQgcHJvY2Vzc2VzIGJlaW5nIHVuYWJsZSB0byBiZSBzaGFyZWQgdW50aWwgdGhleSB3
ZXJlIHdyaXR0ZW4gdG8gZGlzaywgc29tZXRoaW5nIHRoYXQgZG9lcyBub3QgaGFwcGVuIGltbWVk
aWF0ZWx5LCBlc3BlY2lhbGx5CisgICAgICAgIG9uIGlPUy4gIFRoaXMgcHJvYmxlbSBpcyBldmVu
IHdvcnNlIHdpdGggc2Vzc2lvbiBjb29raWVzLCB3aGljaCBzaG91bGQgYmUga2VwdCBpbiBtZW1v
cnkgYW5kIG5ldmVyIGJlIHdyaXR0ZW4gdG8gZGlzay4gIFRob3NlIHByb2Nlc3NlcworICAgICAg
ICBkaWQgbm90IHVzZSBzaGFyZWQgbWVtb3J5IHRvIHNoYXJlIHRoZSBjb29raWVzLiAgVGhleSBq
dXN0IGRpZG4ndCBzaGFyZSB0aGVtLCB3aGljaCBsZWQgdG8gY29va2llIGluY29ycmVjdG5lc3Mu
ICBUaGlzIHdhcyB1bmZvcnR1bmF0ZWx5CisgICAgICAgIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRp
b24gaWYgeW91IGNhbGwgW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRdIG1vcmUgdGhhbiBvbmNlLCB3
aGljaCBtYW55IGRldmVsb3BlcnMgZG8uICBUaGVyZSB3YXMgYWxzbyBvY2Nhc2lvbmFsIGNvb2tp
ZQorICAgICAgICBjb3JydXB0aW9uIGFuZCBsb3NzIGZyb20gbXVsdGlwbGUgcHJvY2Vzc2VzIHdy
aXRpbmcgY29va2llcyB0byB0aGUgc2FtZSBmaWxlLiAgQWxsIHRoZXNlIHByb2JsZW1zIGNhbiBi
ZSB3b3JrZWQgYXJvdW5kIGJ5IGRvaW5nIHdoYXQgU2FmYXJpIGRvZXM6CisgICAgICAgIG1hbnVh
bGx5IHNldHRpbmcgdGhlIFdLUHJvY2Vzc1Bvb2wgb2YgYWxsIFdLV2ViVmlld0NvbmZpZ3VyYXRp
b25zIHRvIHRoZSBzYW1lIHByb2Nlc3MgcG9vbCB0byBvbmx5IHVzZSBvbmUgbmV0d29yayBwcm9j
ZXNzLiAgVGhpcyBpcyBub3QgaW50dWl0aXZlCisgICAgICAgIG9yIHdlbGwgZG9jdW1lbnRlZCwg
YW5kIGV2ZW4gdGhvdWdoIEkgaGF2ZSBzcGVudCB0aGUgbWFqb3JpdHkgb2YgV1dEQyBsYWJzIGZv
ciB0aGUgbGFzdCAzIHllYXJzIHRlbGxpbmcgZGV2ZWxvcGVycyB0byBkbyBpdCwgbW9zdCBkZXZl
bG9wZXJzIGRvIG5vdC4KKyAgICAgICAgVGhlIGRlZmF1bHQgYmVoYXZpb3Igc2hvdWxkIG5vdCBs
ZWFkIHRvIGNvb2tpZSBpbmNvcnJlY3RuZXNzLCBjb3JydXB0aW9uLCBvciBsb3NzLiAgVGhpcyBh
Y2NvbXBsaXNoZXMgdGhhdC4KKworICAgICAgICBBIGJpZ2dlciBwcm9ibGVtIHRoYXQgY2FuJ3Qg
cmVhbGx5IGJlIHdvcmtlZCBhcm91bmQgd2VsbCBpcyB3aGF0IHdlIHdlcmUgZG9pbmcgaW4gb3Vy
IFdLSFRUUENvb2tpZVN0b3JlIEFQSS4gIE1hbnkgZGV2ZWxvcGVycyBjYWxsIHNldENvb2tpZTpj
b21wbGV0aW9uSGFuZGxlcjoKKyAgICAgICAgdG8gImxvZyBpbiIgdGhlIHVzZXIgYnkgc2V0dGlu
ZyBhIGNvb2tpZSwgdGhlbiBpbiB0aGUgY29tcGxldGlvbiBoYW5kbGVyLCB0aGV5IG9wZW4gYSBX
S1dlYlZpZXcgdG8gdGhlaXIgcGFnZSBhbmQgZXhwZWN0IHRoZSBjb29raWUgdG8gYmUgc2VudC4g
IEJlZm9yZSB0aGlzCisgICAgICAgIGNoYW5nZSwgd2Ugd291bGQgbm90IGtub3cgd2hpY2ggcHJv
Y2VzcyBwb29sIHRvIHNldCB0aGUgY29va2llIGluIHNvIHdlIHdvdWxkIGd1ZXNzLiAgSWYgdGhl
cmUgd2VyZSBubyBwcm9jZXNzIHBvb2xzLCB3ZSB3b3VsZCBzdGFydCB3cml0aW5nIHRvIGRpc2sg
YW5kIGhvcGUKKyAgICAgICAgaXQgd3JpdGVzIGZhc3QgZW5vdWdoLiAgV2UgY2FuJ3Qgd2FpdCBm
b3IgaXQgdG8gY29tcGxldGUgYmVjYXVzZSBpdCBjYXVzZXMgaGFuZ3MgbGlrZSByZGFyOi8vcHJv
YmxlbS82Njk2MTA2Ni4gIFRoaXMgc29sdXRpb24gYWxsb3dzIHRvIHN0YXJ0IHRoZSBuZXR3b3Jr
CisgICAgICAgIHByb2Nlc3Mgb2YgdGhhdCBXZWJzaXRlRGF0YVN0b3JlIGFuZCBzZXQgdGhlIGNv
b2tpZSBpbiB0aGF0IHByb2Nlc3MuICBXZSBub3cga25vdyB0aGF0IGlzIHRoZSBvbmx5IHByb2Nl
c3MgdGhpcyBXZWJzaXRlRGF0YVN0b3JlIHdpbGwgZXZlciB1c2UuICBOb3csIHVzZXJzCisgICAg
ICAgIHdpbGwgYmUgYWJsZSB0byBhY3R1YWxseSBiZSBsb2dnZWQgaW4gYWxsIHRoZSB0aW1lIGlu
IHN1Y2ggYXBwcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2ll
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBD
b29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29r
aWVzL1dlYkNvb2tpZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVz
L1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9X
ZWJDb29raWVNYW5hZ2VyU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURh
dGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3Nl
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1t
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6OnNhdmVDb29raWVzKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFT
dG9yZVNlc3Npb24pOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nl
c3NTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBQbGF0
Zm9ybS9JUEMvQXR0YWNobWVudC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAg
ICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQ
STo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0
b3JlOjpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRD
b29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAg
ICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRp
b25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVy
Rm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFT
dG9yZSk6CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtl
clRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1By
b2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZUdldFdlYnNpdGVE
YXRhU3RvcmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdLV2Vi
c2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBf
c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczpdKToKKyAgICAgICAgKC1bV0tQcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1By
ZXBhcmVUb1N1c3BlbmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3Nl
bmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tQcm9jZXNzUG9vbCBfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tQcm9jZXNzUG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6
XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29s
UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0
b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9y
ZSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpdKToKKyAgICAgICAgKC1bV0tX
ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHld
KToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRS
ZXN1bWVdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBwSXNC
YWNrZ3JvdW5kOl0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9j
ZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoK1tXS1dlYnNpdGVEYXRhU3RvcmUgX21ha2VOZXh0
TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZ10pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKF9XZWJLaXRD
b29raWVNYW5hZ2VyUHJpdmF0ZTo6Y29va2llTWFuYWdlciBjb25zdCk6CisgICAgICAgIChfV2Vi
S2l0Q29va2llTWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUpOgor
ICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfY29v
a2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRfY29v
a2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdl
cl9hZGRfY29va2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2ll
cyk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAo
d2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4
dF9wcmVmZXRjaF9kbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246
OmFkZFNpbmdsZUNvb2tpZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9u
OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vz
c1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9v
bENvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vz
c1N1cHByZXNzaW9uU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxh
dGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRm
b3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnhwY0VuZHBvaW50TWVzc2FnZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29y
a1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6cHVi
bGlzaFByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94
eTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGVj
aWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyk6CisgICAgICAgICogVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5k
KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktp
dDo6ZGVmYXVsdFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkZWZhdWx0TmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5Ojp0ZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWRUZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
ZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6YW55
UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkpOgorICAgICAgICAoV2Vi
S2l0OjphbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRp
b25zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxv
YWRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQ
cm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRp
ZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGlkQ2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0
Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNz
UG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9j
ZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENF
dmVudCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFu
YWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2Vi
Q29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5j
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9w
T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xE
ZXN0cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJF
bnRpdGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVj
b25uZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRG
b3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJl
ZEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3Rv
Y29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vz
c1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29s
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFT
dG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdD
b250ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xv
YmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3Nlcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9u
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdl
SUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3Vu
ZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdv
cmtQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgVGhlcmUgc2VlbXMgdG8gYmUgYSBsb3Qgb2Yg
Y29kZSByZW1vdmFsIGhlcmUsIGJ1dCBtb3N0IG9mIGl0IHdhcyBkdXBsaWNhdGUgY29kZSB3aXRo
CisgICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMgd2hpY2ggaXMgdXNlZCBpbnN0
ZWFkLiAgVGhhdCB3aGljaCB3YXMgbm90IGR1cGxpY2F0ZSB3YXMKKyAgICAgICAgbW92ZWQgdG8g
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcy4g
IFRoaXMgd2FzIHRoZSBoYXJkZXN0IHBhcnQgb2YgdGhpcyBwYXRjaC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1By
b2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHlGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpmbHVzaENvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1By
b2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpzZXRXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NY
UENFbmRwb2ludFRvV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXAp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZv
clNlc3Npb25JRCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nl
c3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFB
bmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGlt
ZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNl
dFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNl
TG9hZFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1By
ZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNH
cmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJl
dmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQ
cmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRh
UmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGlu
Z1RvKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1l
dGVyc1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnN1Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNj
aGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBk
YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0
aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRl
cmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25z
aGlwT25seUluRGF0YWJhc2VPbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0VXNlSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0Rl
Y29yYXRpb25Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1No
b3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQ
YXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJp
Y3RDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVz
dGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3Vy
Y2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFn
ZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnByb2Nlc3NQb29scyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9j
ZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VwaGVtZXJhbCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmZsdXNoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRl
RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vz
c2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBw
Qm91bmRTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2Fy
ZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVu
dGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6Om1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lv
bklEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vz
c1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphZGRQ
ZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5ldHdvcmtQcm94eVNl
dHRpbmdzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0
YVN0b3JlU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRm
b3JtU2V0TmV0d29ya1BhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKToK
KyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3Jz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRp
bmdzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uSW5mby5oOgorCiAyMDIwLTA5LTI5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHBsaXN0LWJhc2VkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3Mgc3RvcmFnZSwgd2hpY2ggaGFzIGJlZW4gcmVwbGFjZWQgYnkgZGF0YWJhc2UtYmFz
ZWQgc3RvcmFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29r
aWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
b29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCmluZGV4IGZjZTIzODk4N2E3ODUwZjE4YzlmMzA2
YzUwZTk4Y2U5ODhkMTI1ZmQuLjVjOWI3NzE4NmZiMTgxMGNiMjg1NzE0YmM1Mzc1MDkxYTQ4NTdl
MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJD
b29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tp
ZXMvV2ViQ29va2llTWFuYWdlci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvQ29va2llU3RvcmFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRUUENvb2tp
ZUFjY2VwdFBvbGljeS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9u
Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CkBA
IC0xNDMsMTUgKzE0NCwxOCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnN0b3BPYnNlcnZpbmdD
b29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIAogdm9pZCBXZWJDb29raWVN
YW5hZ2VyOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kg
cG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0gICAgbV9w
cm9jZXNzLmNvb2tpZUFjY2VwdFBvbGljeUNoYW5nZWQocG9saWN5KTsKLQotICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CisgICAgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGlj
eSwgW3BvbGljeSwgcHJvY2VzcyA9IG1ha2VSZWYobV9wcm9jZXNzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIHBy
b2Nlc3MtPmNvb2tpZUFjY2VwdFBvbGljeUNoYW5nZWQocG9saWN5KTsKKyAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKKyAgICB9KTsKIH0KIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFj
Y2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6
OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5kZWZhdWx0U3RvcmFn
ZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgaWYgKGF1dG8qIHN0b3JhZ2VT
ZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCisgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5jb29raWVBY2NlcHRQb2xpY3koKSk7Cisg
ICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihIVFRQQ29va2llQWNjZXB0UG9saWN5
OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmgKaW5kZXgg
Y2E3ZjU1ZTg2NmJkYWQ0YjFlMzUyZThmNjQwNTdiYWJjNDYyODMyZC4uMzVjZThhOWVjZmMyOTRj
ZDZkZTFlN2ZmOTMxMGUwYTU3ZWE0OWQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCkBAIC0zNyw2ICszNyw4
IEBACiAjaW5jbHVkZSAiU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZS5oIgogI2VuZGlm
CiAKK09CSkNfQ0xBU1MgTlNIVFRQQ29va2llU3RvcmFnZTsKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogc3RydWN0IENvb2tpZTsKIGVudW0gY2xhc3MgSFRUUENvb2tpZUFjY2VwdFBvbGljeSA6IHVp
bnQ4X3Q7CkBAIC03OSw4ICs4MSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRBbGxDb29raWVz
KFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiYpPiYmKTsKICAgICB2b2lkIGdldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQsIGNvbnN0
IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+
JiYpOwogCi0gICAgdm9pZCBwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSk7Ci0gICAgdm9pZCBnZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBv
bGljeSk+JiYpOworICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFdl
YkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7CisgICAgdm9pZCBnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYm
KTsKIAogICAgIHZvaWQgc3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklE
KTsKICAgICB2b2lkIHN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEKTsK
QEAgLTg4LDQgKzkwLDggQEAgcHJpdmF0ZToKICAgICBOZXR3b3JrUHJvY2VzcyYgbV9wcm9jZXNz
OwogfTsKIAorI2lmIFBMQVRGT1JNKENPQ09BKQordm9pZCBzYXZlQ29va2llcyhOU0hUVFBDb29r
aWVTdG9yYWdlICosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisjZW5kaWYKKwogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmluCmluZGV4
IGFjZDc1NDQwZDgzZjM0NjY1MGM5ZjMzYjc1YjVkNWQwOTM1MjEzYmEuLjZmZGY1NzcyYWE2YWFl
Mzk0MDJhOWE4OWY1NmM4NGY3YmQ0MzU4NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmluCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3Nh
Z2VzLmluCkBAIC0zNiw3ICszNiw3IEBAIG1lc3NhZ2VzIC0+IFdlYkNvb2tpZU1hbmFnZXIgTm90
UmVmQ291bnRlZCB7CiAgICAgdm9pZCBEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdhbGxUaW1lIHRpbWUpIC0+ICgpIEFzeW5jCiAKICAgICB2
b2lkIFNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBD
b29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSAtPiAoKSBBc3luYwotICAgIHZvaWQgR2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeSgpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCisgICAgdm9pZCBHZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgLT4gKGVudW06dWludDhfdCBXZWJDb3JlOjpI
VFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgQXN5bmMKICAgICAKICAgICB2b2lkIFN0YXJ0
T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgdm9p
ZCBTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvY3VybC9XZWJD
b29raWVNYW5hZ2VyQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tp
ZXMvY3VybC9XZWJDb29raWVNYW5hZ2VyQ3VybC5jcHAKaW5kZXggYzJlZjE1Njg0NTA0MjAwZjk4
ZWU0ZmU2MGUzNWFkZGEyNWMxOWQ2ZC4uZmFhZGE1MGY5YzQzZDQ0M2Q0OTM4ODhjOWJkNjZjNGY3
MDkyMDNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVz
L2N1cmwvV2ViQ29va2llTWFuYWdlckN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ29va2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcApAQCAtMzQsNyAr
MzQsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
LXZvaWQgV2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KQordm9pZCBXZWJDb29raWVNYW5hZ2VyOjpw
bGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBDb29raWVBY2NlcHRQb2xpY3kgY3VybFBvbGljeSA9IENvb2tpZUFjY2VwdFBvbGljeTo6
T25seUZyb21NYWluRG9jdW1lbnREb21haW47CiAgICAgc3dpdGNoIChwb2xpY3kpIHsKQEAgLTU1
LDYgKzU1LDcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeQogICAgIG1fcHJvY2Vzcy5mb3JFYWNo
TmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtjdXJsUG9saWN5XSAoY29uc3QgYXV0byYgbmV0d29ya1N0
b3JhZ2VTZXNzaW9uKSB7CiAgICAgICAgIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5zZXRDb29raWVB
Y2NlcHRQb2xpY3koY3VybFBvbGljeSk7CiAgICAgfSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJNYWMubW0gYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJNYWMu
bW0KaW5kZXggMTlmNTg3OGQ2NjJjMzZiYmQ3ZmM2Mzg0N2JjZDc4YWM5YmJjMmI5Ni4uN2Y5MTIw
Y2EyZTFmYzA4YjI1ZDU4ZjBlYTVjMDgzZDI2NGYwZWI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9tYWMvV2ViQ29va2llTWFu
YWdlck1hYy5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9IVFRQQ29va2ll
QWNjZXB0UG9saWN5Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5o
PgogI2ltcG9ydCA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KKyNpbXBvcnQgPHd0Zi9DYWxs
YmFja0FnZ3JlZ2F0b3IuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewpAQCAtNTMsMTUgKzU0LDE5IEBAIHN0YXRpYyBDRkhUVFBDb29raWVT
dG9yYWdlQWNjZXB0UG9saWN5IHRvQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeShIVFRQ
Q29vCiAgICAgcmV0dXJuIENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lBbHdheXM7CiB9
CiAKLXZvaWQgV2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KQordm9pZCBXZWJDb29raWVNYW5hZ2Vy
OjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5B
Y2Nlc3NSYXdDb29raWVzKSk7CiAKKyAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBb
W05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZUFj
Y2VwdFBvbGljeTpzdGF0aWNfY2FzdDxOU0hUVFBDb29raWVBY2NlcHRQb2xpY3k+KHBvbGljeSld
OworICAgIHNhdmVDb29raWVzKFtOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVT
dG9yYWdlXSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIAogICAgIG1fcHJvY2Vzcy5mb3JF
YWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFsmXSAoY29uc3QgYXV0byYgbmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKSB7CiAgICAgICAgIGlmIChhdXRvIGNvb2tpZVN0b3JhZ2UgPSBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24uY29va2llU3RvcmFnZSgpKQogICAgICAgICAgICAgQ0ZIVFRQQ29va2llU3RvcmFn
ZVNldENvb2tpZUFjY2VwdFBvbGljeShjb29raWVTdG9yYWdlLmdldCgpLCB0b0NGSFRUUENvb2tp
ZVN0b3JhZ2VBY2NlcHRQb2xpY3kocG9saWN5KSk7CisgICAgICAgIGlmIChhdXRvICpzdG9yYWdl
ID0gbmV0d29ya1N0b3JhZ2VTZXNzaW9uLm5zQ29va2llU3RvcmFnZSgpKQorICAgICAgICAgICAg
c2F2ZUNvb2tpZXMoc3RvcmFnZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICAgICB9KTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL3Nv
dXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCmluZGV4IDc1NGQwYmJjNmI0
ZmU3MjdmMGViZWE0MWZiMThjOGE2YmFhYjE2NjMuLmQ1NzZhZmRlNDJmOGI1MTJmMzRiN2FlMzQx
YzlkNzUxYWU5NDQ4NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2VyU291cC5jcHAKQEAg
LTM3LDExICszNywxMiBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1h
bmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0
UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIG1fcHJvY2Vzcy5mb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtwb2xp
Y3ldIChhdXRvJiBzZXNzaW9uKSB7CiAgICAgICAgIHNlc3Npb24uc2V0Q29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSk7CiAgICAgfSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJz
aXN0ZW50U3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDQwNDFjNTJiMDc1YzY0MjU5ZjY4MDUw
YmE5N2I2ODMxMWEzYTk1Y2QuLjMzZjI5NTIxMDQyOTZiYzBiODUyMDdjMmQ4NTBjNDhkYzRhODJh
OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCkBAIC0xNzMsNiArMTczLDcgQEAgTmV0d29ya1Byb2Nlc3M6Ok5ldHdvcmtQcm9jZXNzKEF1
eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmJiBwYXJhbWUKICNlbmRpZgog
CiAjaWYgVVNFKFNPVVApCisgICAgLy8gRklYTUU6IERvIG5vdCB1c2UgdGhlIGRlZmF1bHQgc2Vz
c2lvbiBJRC4KICAgICBETlNSZXNvbHZlUXVldWVTb3VwOjpzZXRHbG9iYWxEZWZhdWx0U291cFNl
c3Npb25BY2Nlc3NvcihbdGhpc10oKSAtPiBTb3VwU2Vzc2lvbiogewogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4oKm5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpKS5zb3VwU2Vzc2lvbigpOwogICAgIH0pOwpAQCAt
MzM4LDMwICszMzksNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1By
b2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJgogCiAgICAgc2V0QWRDbGlj
a0F0dHJpYnV0aW9uRGVidWdNb2RlKHBhcmFtZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9u
RGVidWdNb2RlKTsKIAotICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5kaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotCi0gICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7Ci0gICAgc2V0
U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUo
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMpKSk7Ci0KLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Np
b25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9y
YWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQ
YXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vz
c2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoU0VSVklDRV9XT1JLRVIpCi0gICAgYm9vbCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0
aW9uRGVsYXlFbmFibGVkID0gdHJ1ZTsKLSAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihQQUw6
OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1p
bmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLQotICAgIG1fc3RvcmFnZU1hbmFnZXJT
ZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvKiBk
ZWZhdWx0U2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCkpOwotICAgIGF1dG8qIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IGRlZmF1bHRTZXNz
aW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tp
ZSA6IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMp
Ci0gICAgICAgIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7Ci0KICAg
ICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAg
ICBzdXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwogCkBAIC00OTYsOCArNDczLDYg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25J
RCYgc2Vzc2lvbklELCBib29sIHNob3VsZFUKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVc2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllckJhc2UpCiAjZW5kaWYK
IHsKLSAgICBBU1NFUlQoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkpOwotCiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMu
YWRkKHNlc3Npb25JRCwgbnVsbHB0cik7CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNTEyLDcgKzQ4Nyw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91
bGRVCiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZklkZW50aWZpZXIgPSBtYWtlU3RyaW5n
KGlkZW50aWZpZXJCYXNlLCAiLlByaXZhdGVCcm93c2luZy4iLCBjcmVhdGVDYW5vbmljYWxVVUlE
U3RyaW5nKCkpLmNyZWF0ZUNGU3RyaW5nKCk7CiAgICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJh
bCgpKQogICAgICAgICBzdG9yYWdlU2Vzc2lvbiA9IGFkb3B0Q0YoY3JlYXRlUHJpdmF0ZVN0b3Jh
Z2VTZXNzaW9uKGNmSWRlbnRpZmllci5nZXQoKSkpOwotICAgIGVsc2UKKyAgICBlbHNlIGlmIChz
ZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAgICAgICAg
c3RvcmFnZVNlc3Npb24gPSBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0ZUNG
U3RvcmFnZVNlc3Npb25Gb3JJZGVudGlmaWVyKGNmSWRlbnRpZmllci5nZXQoKSk7CiAKICAgICBp
ZiAoTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpwcm9jZXNzTWF5VXNlQ29va2llQVBJKCkpIHsKQEAg
LTUzNSwyMSArNTEwLDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNvb2tpZUFjY2VwdFBvbGlj
eUNoYW5nZWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSBuZXdQb2xpY3kpCiAKIFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiogTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uKGNvbnN0
IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQpIGNvbnN0CiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9
PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICByZXR1cm4gJmRl
ZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwogICAgIHJldHVybiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lv
bnMuZ2V0KHNlc3Npb25JRCk7CiB9CiAKLVdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYg
TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24pCi0gICAgICAgIG1fZGVmYXVsdE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiA9IHBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7
Ci0gICAgcmV0dXJuICptX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247Ci19Ci0KIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oY29uc3QgRnVuY3Rp
b248dm9pZChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mKT4mIGZ1bmN0b3IpCiB7Ci0g
ICAgZnVuY3RvcihkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSk7CiAgICAgZm9yIChhdXRvJiBzdG9y
YWdlU2Vzc2lvbiA6IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy52YWx1ZXMoKSkKICAgICAgICAg
ZnVuY3Rvcigqc3RvcmFnZVNlc3Npb24pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IDcxNmExMDFkY2JjNjIyMjU0OGFmZDRkNmYzODg4
N2RmYWZjZGYyYWUuLjY2YWExYzMyMTk5MTk1MmFmOTI0MzdkOThiNGJkM2YyMDQxMmYzNDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKQEAgLTE3
MCw3ICsxNzAsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZvckVhY2hOZXR3b3JrU3RvcmFnZVNl
c3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24m
KT4mKTsKICAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHN0b3JhZ2VTZXNzaW9u
KGNvbnN0IFBBTDo6U2Vzc2lvbklEJikgY29uc3Q7Ci0gICAgV2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uJiBkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdDsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBuZXdUZXN0aW5nU2Vzc2lvbihj
b25zdCBQQUw6OlNlc3Npb25JRCYpOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgZW5z
dXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYsIGJvb2wgc2hvdWxkVXNlVGVzdGluZ05l
dHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFJldGFpblB0cjxDRkhUVFBD
b29raWVTdG9yYWdlUmVmPiYmKTsKQEAgLTM3Myw3ICszNzIsNiBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IHBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIGRpZFJlY2VpdmVOZXR3b3JrUHJvY2Vzc01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CiAKQEAgLTU0Miw3ICs1NDAsNiBA
QCBwcml2YXRlOgogCiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRy
PE5ldHdvcmtTZXNzaW9uPj4gbV9uZXR3b3JrU2Vzc2lvbnM7CiAgICAgSGFzaE1hcDxQQUw6OlNl
c3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4+
IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9uczsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjsKIAogICAgIFJlZlB0cjxTdG9yYWdlTWFuYWdlclNldD4gbV9zdG9yYWdlTWFuYWdlclNl
dDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAppbmRleCA3MTYzZWMyMTVlOWIy
NzE5ZDdmODM1ZWQ2NmQ1OWZlNmRlODk0MWFlLi40OWZhODgwYTg5NjUxMDg0YTU4Mzk5MWQ3YTEw
ZmVlNzBiNTUyMWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcApAQCAtNTUs
NyArNTUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUo
SVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgdWlQcm9jZXNzU0RL
VmVyc2lvbjsKICAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBuZXR3b3JrQVRTQ29udGV4dC5nZXQo
KSk7CiAjZW5kaWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwog
I2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIgPDwgY29va2llQWNjZXB0UG9saWN5OwogICAgIGVu
Y29kZXIgPDwgbGFuZ3VhZ2VzOwpAQCAtNjYsOSArNjUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
ICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIGVuY29kZXIg
PDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0Vf
V09SS0VSKQotICAgIGVuY29kZXIgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eSA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlIDw8
IHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXk7Ci0jZW5k
aWYKICAgICBlbmNvZGVyIDw8IGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZTsKIH0K
IApAQCAtMTEzLDEyICsxMDksNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICBkZWNvZGVyID4+IGRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIGlmICghZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMgPSBXVEZNb3ZlKCpkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyk7Ci0KICNpZiBV
U0UoU09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVBY2NlcHRQb2xp
Y3kpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzUsMjAgKzEyNSw2IEBAIGJvb2wgTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29k
ZXIsIE5ldHdvcmtQcm9jCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsU2NoZW1l
c1JlZ2lzdGVyZWRBc05vQWNjZXNzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0jaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCi0gICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBzZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAo
IXNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggOGYwYTAwMzk2
YmJmMDMzMDEzMDAxODJiOWUxZmQzNmRmYjQwMTk1MC4uNzgyOWEyZGMxYzJiMmE4ZWZjMmRhOTJl
YTJhZjRkNGY4MzYyMTc0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtMjcs
NyArMjcsNiBAQAogCiAjaW5jbHVkZSAiQ2FjaGVNb2RlbC5oIgogI2luY2x1ZGUgIlNhbmRib3hF
eHRlbnNpb24uaCIKLSNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29va2llLmg+CiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTcwLDggKzY5LDYgQEAgc3RydWN0IE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBuZXR3b3Jr
QVRTQ29udGV4dDsKICNlbmRpZgogCi0gICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAgCiAjaWYgVVNFKFNPVVApCiAgICAgV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBXZWJDb3JlOjpI
VFRQQ29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsKICAgICBWZWN0b3I8U3RyaW5n
PiBsYW5ndWFnZXM7CkBAIC04MiwxMSArNzksNiBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMgewogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVk
QXNMb2NhbDsKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nl
c3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgU3RyaW5nIHNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgYm9v
bCBzaG91bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5IHsgZmFs
c2UgfTsKLSNlbmRpZgogICAgIGJvb2wgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2Rl
IHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCmluZGV4IGY5
OTVlMDFkNDdkOGJkZDk2OWYyYzgwZTY3OWFkYWUxN2M5ZDViNzIuLjAyYzg2NzNkMzliMWI2ODI2
NjJhNzdlZDFjNjE2NmQ5NzFhNjJmNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNw
cApAQCAtMjE0LDcgKzIxNCw4IEBAIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsZWFyKCkK
IAogdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y2xvc2UoKQogewotICAgIEFTU0VSVCghbV9p
c0Nsb3NlZCk7CisgICAgaWYgKG1faXNDbG9zZWQpCisgICAgICAgIHJldHVybjsKICAgICBtX2lz
Q2xvc2VkID0gdHJ1ZTsKIAogICAgIGlmIChtX2RpZFNjaGVkdWxlRGF0YWJhc2VVcGRhdGUpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1By
b2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a1Byb2Nlc3NDb2NvYS5tbQppbmRleCBkYTYzNTkxMjQyMjNkYjk3MDMwZDFlYTc3YmMwMGNlZTUx
ZmIwMTdkLi44MmQ0NDIwYWNmYmI3ZWQyMjEzOTMxMGIyMmIxN2MyZGIyMGNiZjM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29j
b2EubW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJv
Y2Vzc0NvY29hLm1tCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJOZXR3b3JrUmVzb3VyY2VM
b2FkZXIuaCIKICNpbXBvcnQgIk5ldHdvcmtTZXNzaW9uQ29jb2EuaCIKICNpbXBvcnQgIlNhbmRi
b3hFeHRlbnNpb24uaCIKKyNpbXBvcnQgIldlYkNvb2tpZU1hbmFnZXIuaCIKICNpbXBvcnQgPFdl
YkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY1N1
ZmZpeC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3RDRk5ldC5oPgpAQCAtNzgs
OSArNzksNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVu
ZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFU
U0NvbnRleHQocGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMDUsMTEg
KzEwMyw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzQ29jb2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUgc2V0U2hh
cmVkVVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVE
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSk7Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNzOjpzb3Vy
Y2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9BUFBMSUNB
VElPTl9BVURJVF9EQVRBKQpAQCAtMjIxLDcgKzIxNCw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OmZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21wbGV0aW9u
SGFuCiAgICAgcGxhdGZvcm1GbHVzaENvb2tpZXMoc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNhdmVDb29raWVzKE5TSFRUUENvb2tpZVN0
b3JhZ2UgKmNvb2tpZVN0b3JhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3ZvaWQgc2F2ZUNvb2tpZXMoTlNIVFRQQ29va2llU3RvcmFnZSAqY29va2ll
U3RvcmFnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgQVNTRVJUKGNvb2tpZVN0b3Jh
Z2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdv
cmtQcm9jZXNzQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0
d29ya1Byb2Nlc3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQyZGNjOGUzZjliOGYxNjky
OTk3ZjY3MTkyLi40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5M2UyMjU2YTM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3ND
dXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1By
b2Nlc3NDdXJsLmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkK
IHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4g
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQ2Vy
dGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBjMjczNmUwMjZh
NTVkM2Q0MDIwZjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0NjIwZjAyYTdkOWU5ZTg2
OWVjODY0OTFiN2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNTUsMTUgKzU1LDEx
IEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVT
ZXNzaW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNv
bnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFu
ZGxlKTsKIAogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nlc3ND
b29raWVTdG9yYWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFt
ZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAgIGlm
ICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2ll
U3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KQogICAgICAgICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3RvcmFnZUZyb21JZGVu
dGlmeWluZ0RhdGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcik7
CiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9u
LCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkpLCBXVEZNb3ZlKHVp
UHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrUHJv
Y2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29v
a2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0Q29v
a2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25JRCwg
TmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3Bw
CmluZGV4IDBkMzFiM2QxYjM0ZmU3Y2Q4MDQwNTFkN2Y0MWIwNGM1MWEyOTdhMjAuLmE0YzAzMWQy
ODM1ZTg0NDQ0OWNmYmEzMWEwNTVhODAzMWEyZDNkM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5j
cHAKQEAgLTM5LDYgKzM5LDcgQEAgY2xhc3MgTmV0d29ya1Byb2Nlc3NNYWluU291cCBmaW5hbDog
cHVibGljIEF1eGlsaWFyeVByb2Nlc3NNYWluQmFzZSB7CiBwdWJsaWM6CiAgICAgdm9pZCBwbGF0
Zm9ybUZpbmFsaXplKCkgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJcyB0aGlz
IHN0aWxsIG5lZWRlZD8gV2Ugc2hvdWxkIHByb2JhYmx5IGRlc3Ryb3kgYWxsIGV4aXN0aW5nIHNl
c3Npb25zIGF0IHRoaXMgcG9pbnQgaW5zdGVhZC4KICAgICAgICAgLy8gTmVlZGVkIHRvIGRlc3Ry
b3kgdGhlIFNvdXBTZXNzaW9uIGFuZCBTb3VwQ29va2llSmFyLCBlLmcuIHRvIGF2b2lkCiAgICAg
ICAgIC8vIGxlYWtpbmcgU1FMaXRlIHRlbXBvcmFyeSBqb3VybmFsaW5nIGZpbGVzLgogICAgICAg
ICBnbG9iYWxOZXR3b3JrUHJvY2Vzcy0+ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCmluZGV4IGEyMTI4NDU3MzNhNmM0MzMw
NzZjNGJhMjI2OTRmNjhmMzkyNmFhOTAuLjAwZmY4YjJmZTUwMzhlY2Q0MzRmYzQ2NzM4ZjNhMDVl
ZThkNDgzM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9O
ZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
c291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCkBAIC0xMzUsMTEgKzEzNSw2IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdv
cmtQcm9jZXNzQ3JlYXRpCiAgICAgICAgIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKHBh
cmFtZXRlcnMubGFuZ3VhZ2VzKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0
b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkp
OwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRJZ25vcmVUTFNFcnJvcnMoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKICAgICBpZiAoYXV0byog
c2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9BdHRhY2htZW50LmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9BdHRhY2htZW50LmgKaW5kZXggMTc0M2MzYjc4MzBhMDMwZjU3NTczY2IwZWFlODI3ZDQx
OTU5NGJhZS4uZDZmZjNjMTdlYmEwZDA0ZTA3ZGU4YmNhMWFhNzJjNTQzN2RjNWEzNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0F0dGFjaG1lbnQuaApAQCAtOTUsOCArOTUsOCBAQCBwcml2
YXRlOgogICAgIGludCBtX2ZpbGVEZXNjcmlwdG9yIHsgLTEgfTsKICAgICBzaXplX3QgbV9zaXpl
OwogI2VsaWYgT1MoREFSV0lOKQotICAgIG1hY2hfcG9ydF9uYW1lX3QgbV9wb3J0OwotICAgIG1h
Y2hfbXNnX3R5cGVfbmFtZV90IG1fZGlzcG9zaXRpb247CisgICAgbWFjaF9wb3J0X25hbWVfdCBt
X3BvcnQgeyAwIH07CisgICAgbWFjaF9tc2dfdHlwZV9uYW1lX3QgbV9kaXNwb3NpdGlvbiB7IDAg
fTsKICNlbGlmIE9TKFdJTkRPV1MpCiAgICAgSEFORExFIG1faGFuZGxlIHsgSU5WQUxJRF9IQU5E
TEVfVkFMVUUgfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCmluZGV4IDZkMGMxMjlhNzQwNTEwZDM4Njk3MzcwNWFk
MDkyZWYxMzJjYzA3NWEuLjA0ODEwYjNlMTliZTk2Y2FkMWFkODJhNDRkY2VkYjI2ZWY3ODI2MWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycy5jcHAKQEAgLTQwLDEzICs0MCw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgZW5jb2RlciA8PCB1aVByb2Nlc3NDb29raWVT
dG9yYWdlSWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5z
aW9uSGFuZGxlOwotICAgIGVuY29kZXIgPDwgcGVuZGluZ0Nvb2tpZXM7CiAKICNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKICAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eSA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKQEAgLTgzLDEyICs3OSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5jb29raWVTdG9yYWdl
UGF0aEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9u
SGFuZGxlKTsKIAotICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpDb29raWU+PiBwZW5kaW5n
Q29va2llczsKLSAgICBkZWNvZGVyID4+IHBlbmRpbmdDb29raWVzOwotICAgIGlmICghcGVuZGlu
Z0Nvb2tpZXMpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5w
ZW5kaW5nQ29va2llcyA9IFdURk1vdmUoKnBlbmRpbmdDb29raWVzKTsKLQogI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQogICAgIE9wdGlvbmFsPFN0cmluZz4gaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5OwogICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwpAQCAtMTAx
LDE0ICs5MSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgaWYgKCFpbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBPcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGU+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
OwotICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGU7Ci0gICAgaWYgKCFpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJz
LmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92
ZSgqaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2Vu
ZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmggYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCmluZGV4IGYyN2RmNDg5
ODA5ZjMxOTYwOGI2ODBjYjJhOGExYzE0YjcwMTg0MzkuLmUxYjIzMzcwMTk5ZmUzNzAzMWU5ZGM1
YzA1NzgxNTUwMjFlMzRkNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMuaApAQCAtNTEsMTUgKzUxLDExIEBAIHN0cnVjdCBXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycyB7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdWlQcm9jZXNzQ29v
a2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGNvb2tp
ZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+
IHBlbmRpbmdDb29raWVzOwogICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzIG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
ICAgIFN0cmluZyBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBpbmRleGVk
RGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2VuZGlm
CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCmluZGV4IGJjMDc4NjZmYmMzOTY4ZTc2
Y2FhOWEzNTY4MTBjNmEyZmIwOWRjZmQuLmZmOTU1ODkyYmRhMGI4M2MyM2E5NmEwODM5ZWYzYmQw
ZDk0NjljMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQ
Q29va2llU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQ
Q29va2llU3RvcmUuY3BwCkBAIC00Niw4ICs0Niw2IEBAIG5hbWVzcGFjZSBBUEkgewogSFRUUENv
b2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJz
aXRlRGF0YVN0b3JlKQogICAgIDogbV9vd25pbmdEYXRhU3RvcmUod2Vic2l0ZURhdGFTdG9yZSkK
IHsKLSAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3Jh
Z2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmlj
YXRpb25zKCk7CiB9CiAKIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCkBAIC01
NSw4ICs1Myw2IEBAIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCiAgICAgQVNT
RVJUKG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFtX29ic2VydmVkQ29va2ll
TWFuYWdlclByb3h5KTsKICAgICBBU1NFUlQoIW1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIp
OwotCi0gICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwogfQog
CiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZmlsdGVyQXBwQm91bmRDb29raWVzKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtODEsMzMgKzc3
LDE2IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpCiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpj
b29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tp
ZT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdE
YXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBp
ZiAoIXBvb2wpIHsKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gYWxsQ29va2llczsK
LSAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICAgICAgYWxsQ29va2llcyA9IGdldEFs
bERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKLSAgICAgICAgYWxsQ29va2ll
cy5hcHBlbmRWZWN0b3IobV9vd25pbmdEYXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwotCi0g
ICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCBhbGxDb29raWVzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGZpbHRlckFwcEJvdW5k
Q29va2llcyhhbGxDb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAg
IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9
IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAg
Y29va2llTWFuYWdlci0+Z2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHBvb2wgPSBXVEZNb3Zl
KHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAo
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1
dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5j
b29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRBbGxDb29raWVzKG1fb3duaW5n
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKICAgICAgICAg
ZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RG
OjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tp
ZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5n
RGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAg
aWYgKCFwb29sKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLQotICAg
IGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2ll
TWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmdldENvb2tpZXMobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
IChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8m
IGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29r
aWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsKICAgICAgICAgZmlsdGVy
QXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICB9KTsKIH0KQEAgLTExNSw3OCArOTQsMjkgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tp
ZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG8KIHZv
aWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29r
aWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIChhdXRvJiYgYXBwQm91bmRDb29raWVzKSBtdXRhYmxlIHsKLSAgICAg
ICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0
b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgICAgIGlmICghcG9vbCkgewotICAgICAgICAgICAgZm9y
IChhdXRvJiBjb29raWUgOiBhcHBCb3VuZENvb2tpZXMpIHsKLSAgICAgICAgICAgICAgICAvLyBG
SVhNRTogcGVuZGluZ0Nvb2tpZXMgdXNlZCBmb3IgZGVmYXVsdFNlc3Npb24gYmVjYXVzZSBzZXNz
aW9uIGNvb2tpZXMgY2Fubm90IGJlIHByb3BhZ2F0ZWQgdG8gTmV0d29yayBQcm9jZXNzIHdpdGgg
dWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuCi0gICAgICAgICAgICAgICAgaWYgKG1f
b3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgICAgICAgICAgc2V0Q29v
a2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5hZGRQZW5kaW5n
Q29va2llKGNvb2tpZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+
c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgY29v
a2llTWFuYWdlci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFw
cEJvdW5kQ29va2llcywgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOworICAgICAgICBhdXRvJiBjb29raWVNYW5h
Z2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigp
OworICAgICAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNl
c3Npb25JRCgpLCBhcHBCb3VuZENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZShjb25zdCBX
ZWJDb3JlOjpDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewot
ICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAgICAg
ZGVsZXRlQ29va2llRnJvbURlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+cmVtb3ZlUGVuZGluZ0Nv
b2tpZShjb29raWUpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0g
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50
PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRl
bGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgW3Bvb2wg
PSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0p
OworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1By
b2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29raWUo
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1
dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdl
T3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAgZGVsZXRlQ29v
a2llc0luRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxl
dGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgYXV0byYg
Y29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tp
ZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKICAgICAvLyBGSVhNRTogVGhlIENvbXBsZXRpb25IYW5k
bGVyIHNob3VsZCBiZSBwYXNzZWQgdG8gV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxD
b29raWVzLgogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9
IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25z
KCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNl
c3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBzZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUocG9saWN5KTsKLSAgICAgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBw
bGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFn
ZXItPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsK
KyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9j
ZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1c2hD
b29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTIyNywyMSArMTU3LDcgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIo
T2JzZXJ2ZXImIG9ic2VydmVyKQogCiAgICAgbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA9
IG1ha2VVbmlxdWU8QVBJV2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI+KCp0aGlzKTsKIAot
ICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVT
dG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIEFTU0VSVCgh
bV9vYnNlcnZpbmdVSVByb2Nlc3NDb29raWVzKTsKLQotICAgICAgICAvLyBMaXN0ZW4gZm9yIGNv
b2tpZSBub3RpZmljYXRpb25zIGluIHRoZSBVSVByb2Nlc3MgaW4gdGhlIG1lYW50aW1lLgotICAg
ICAgICBzdGFydE9ic2VydmluZ0NoYW5nZXNUb0RlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShb
dGhpc10gKCkgewotICAgICAgICAgICAgY29va2llc0RpZENoYW5nZSgpOwotICAgICAgICB9KTsK
LQotICAgICAgICBtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMgPSB0cnVlOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wt
PnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNl
cnZlZENvb2tpZU1hbmFnZXJQcm94eSA9ICZtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nl
c3MoKS5jb29raWVNYW5hZ2VyKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+
cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tp
ZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0KIApAQCAtMjc2LDQ2ICsxOTIsMTAgQEAgdm9pZCBI
VFRQQ29va2llU3RvcmU6OmNvb2tpZXNEaWRDaGFuZ2UoKQogdm9pZCBIVFRQQ29va2llU3RvcmU6
OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQoKQogewogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2Vy
UHJveHktPnVucmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
ICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLSAgICBtX29ic2VydmVkQ29va2llTWFu
YWdlclByb3h5ID0gbnVsbHB0cjsKLQotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9y
ZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFw
b29sKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5
ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAg
ICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdl
clByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwg
Km1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCi12b2lkIEhUVFBDb29raWVTdG9y
ZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIEFTU0VS
VCghbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsKLQotICAgIG1fcHJv
Y2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IFdlYlByb2Nlc3NQb29sOjpyZWdp
c3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihbdGhpc10oV2ViUHJvY2Vzc1Bvb2wmIG5l
d1Byb2Nlc3NQb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPmlzQXNzb2Np
YXRlZFByb2Nlc3NQb29sKG5ld1Byb2Nlc3NQb29sKSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICAvLyBOb3cgdGhhdCBhbiBhc3NvY2lhdGVkIHByb2Nlc3MgcG9vbCBleGlzdHMsIHdl
IG5lZWQgdG8gZmx1c2ggdGhlIFVJIHByb2Nlc3MgY29va2llIHN0b3JlCi0gICAgICAgIC8vIHRv
IG1ha2Ugc3VyZSBhbnkgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIHdpdGhpbiB0aGUgbmV3IHByb2Nl
c3MgcG9vbC4KLSAgICAgICAgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAg
ICAgICAgbmV3UHJvY2Vzc1Bvb2wuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQotICAgICAgICBp
ZiAobV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcikgewotICAgICAgICAgICAgbV9vYnNlcnZl
ZENvb2tpZU1hbmFnZXJQcm94eSA9IG5ld1Byb2Nlc3NQb29sLnN1cHBsZW1lbnQ8V2ViS2l0OjpX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgICAgICAgICBtX29ic2VydmVkQ29va2llTWFu
YWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgICAgICB9Ci0gICAgICAgIHVu
cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMoKQotewotICAgIGlmIChtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZp
ZXIpCi0gICAgICAgIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlv
bkxpc3RlbmVyKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7Ci0KLSAg
ICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSAwOwotfQotCiAjaWYg
IVBMQVRGT1JNKENPQ09BKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmZsdXNoRGVmYXVsdFVJUHJv
Y2Vzc0Nvb2tpZVN0b3JlKCkgeyB9CiBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBIVFRQQ29va2ll
U3RvcmU6OmdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKSB7IHJldHVy
biB7IH07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQ
Q29va2llU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2ll
U3RvcmUuaAppbmRleCBkNjIwYWRkYTRlN2Y4OTQ1NjYxOGEzZTIyZTFiZmQ0MzU3Nzc1YjE5Li5h
MDVmNDE0MzBkYjJiMjNkNDE3ODQwNzlhNGZiODZjNzQ2MGE3NTQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCkBAIC04Myw5ICs4Myw2
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSFRUUENvb2tpZVN0b3JlKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZSYpOwogCi0gICAgdm9pZCByZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZp
Y2F0aW9ucygpOwotICAgIHZvaWQgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0
aW9ucygpOwotCiAgICAgdm9pZCBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpOwog
ICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBnZXRBbGxEZWZhdWx0VUlQcm9jZXNz
Q29va2llU3RvcmVDb29raWVzKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0Q29va2llSW5EZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAppbmRleCA1OGM1NDUzZjQ4OTg3ZjVl
MWFmYWZlZjM0YzQzMzM1ZjFiNGNjOTkwLi4zN2JhYTY4ZjkyNGI5NTg3MmYwMWY3ZTRhODBkNWY0
OTdkNWZlOWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0Nv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5j
cHAKQEAgLTQxMSwxMSArNDExLDYgQEAgdm9pZCBXS0NvbnRleHRQcmVjb25uZWN0VG9TZXJ2ZXIo
V0tDb250ZXh0UmVmLCBXS1VSTFJlZikKIHsKIH0KIAotV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29u
dGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0
dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnN1cHBsZW1lbnQ8
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkpOwotfQotCiBXS1dlYnNpdGVEYXRhU3Rv
cmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYpCiB7CiAgICAg
cmV0dXJuIFdLV2Vic2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUoKTsKQEAgLTUyNywx
MyArNTIyLDYgQEAgdm9pZCBXS0NvbnRleHRTZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRp
bWVyRW5hYmxlZChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwKICAgICBXZWJLaXQ6OnRvSW1wbChj
b250ZXh0UmVmKS0+c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoZW5h
YmxlKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNl
cnZpY2VXb3JrZXJUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0LCBib29sIGFsbG93cykKLXsK
LSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCkt
PnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2Vu
ZGlmCi19Ci0KIFdLRGljdGlvbmFyeVJlZiBXS0NvbnRleHRDb3B5UGx1Z0luQXV0b1N0YXJ0T3Jp
Z2luSGFzaGVzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewogICAgIHJldHVybiBXZWJLaXQ6
OnRvQVBJKCZXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+cGx1Z0luQXV0b1N0YXJ0T3JpZ2lu
SGFzaGVzKCkubGVha1JlZigpKTsKQEAgLTU3NSwyMSArNTYzLDExIEBAIHZvaWQgV0tDb250ZXh0
U2V0Rm9udEFsbG93TGlzdChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tBcnJheVJlZiBhcnJh
eVJlZikKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0Rm9udEFsbG93TGlzdChX
ZWJLaXQ6OnRvSW1wbChhcnJheVJlZikpOwogfQogCi12b2lkIFdLQ29udGV4dFRlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0KQotewotICAgIFdlYktpdDo6dG9JbXBs
KGNvbnRleHQpLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCiB2b2lkIFdLQ29udGV4
dFRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29udGV4dFJlZiBjb250ZXh0KQogewogICAgIFdl
YktpdDo6dG9JbXBsKGNvbnRleHQpLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQogCi1Q
cm9jZXNzSUQgV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLQ29udGV4dFJl
ZiBjb250ZXh0UmVmKQotewotICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+
bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7Ci19Ci0KIHZvaWQgV0tDb250ZXh0QWRkU3VwcG9y
dGVkUGx1Z2luKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBkb21haW5SZWYs
IFdLU3RyaW5nUmVmIG5hbWVSZWYsIFdLQXJyYXlSZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5UmVm
IGV4dGVuc2lvbnNSZWYpCiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBAIC02
MTksMTIgKzU5NywxMSBAQCB2b2lkIFdLQ29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVG
b3JUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogICAgIFdlYktpdDo6dG9JbXBsKGNv
bnRleHRSZWYpLT5jbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpOwogfQogCi12
b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoV0tDb250ZXh0
UmVmIGNvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKK3Zv
aWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0NvbnRleHRS
ZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKIHsKLSAgICBXZWJLaXQ6
OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0
YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgd2Vi
c2l0ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUo
V0tDb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0lt
cGwoY29udGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktpdDo6dG9JbXBsKHdlYnNp
dGVEYXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0
LmgKaW5kZXggMWQ4ZmFiOGExNDg2YWFkYjQ5NDE0NGI5OGYxMGU5MzYzOGQwYzVlNi4uMmFiNmVm
ODZmNTMwZTc3Zjc0Y2JkNWRmNTg2MmFjNGQzMGI3OTg3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2OCw3ICsxNjgsNiBAQCBXS19FWFBPUlQgdm9p
ZCBXS0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19F
WFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4dEdldFdlYnNpdGVEYXRhU3RvcmUo
V0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVO
VChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKIAogV0tfRVhQT1JUIFdL
QXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0QXBwbGljYXRpb25DYWNoZU1h
bmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBM
QUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKLVdLX0VYUE9S
VCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRS
ZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdLX0VYUE9SVCBXS0dlb2xvY2F0aW9u
TWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1hbmFnZXIoV0tDb250ZXh0UmVmIGNv
bnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVmIFdLQ29udGV4dEdldEljb25EYXRh
YmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tLZXlWYWx1ZVN0b3JhZ2VN
YW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFnZU1hbmFnZXIoV0tDb250ZXh0UmVm
IGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVE
YXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAppbmRleCBhMDI1MDExZjcwY2M2NTlmNWZhYTA4
YTdkNmNiYjNmZjU2ZWU2YTM4Li40OGEyOWM0NTY4YWI2N2IzYjdlMWVmOTgxNTZmNmVmYTg5NmIx
ZGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQ
cml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJp
dmF0ZS5oCkBAIC04MywxMSArODMsOCBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRXYXJtSW5p
dGlhbFByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogLy8gQXQgc29tZSBwb2ludCBpdCBz
aG91bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldFVzZXNOZXR3b3Jr
UHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRU
ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tD
b250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmKTsKIAotV0tfRVhQT1JU
IHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2Vy
VGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0eXBlZGVmIHZvaWQgKCpXS0NvbnRleHRJ
bnZhbGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSk7CiBXS19FWFBP
UlQgdm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKFdLQ29udGV4dEludmFs
aWRNZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VGdW5jdGlvbik7CiAgICAgCkBAIC05Nyw4
ICs5NCw2IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEZvbnRBbGxvd0xpc3QoV0tDb250
ZXh0UmVmLCBXS0FycmF5UmVmKTsKIAogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0UHJlY29ubmVj
dFRvU2VydmVyKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1VSTFJlZiBzZXJ2ZXJVUkwpIFdLX0Nf
QVBJX0RFUFJFQ0FURUQ7CiAKLVdLX0VYUE9SVCBXS1Byb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3
b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpOwotCiBXS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4oV0tDb250ZXh0UmVmIGNvbnRleHQsIFdL
U3RyaW5nUmVmIGRvbWFpbiwgV0tTdHJpbmdSZWYgbmFtZSwgV0tBcnJheVJlZiBtaW1lVHlwZXMs
IFdLQXJyYXlSZWYgZXh0ZW5zaW9ucyk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhclN1
cHBvcnRlZFBsdWdpbnMoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAppbmRleCA2NDhmMzAwOTYxYTUwNjBjOWNkZjAzZTNjZjgw
NDU4YmYyYmI1MGRkLi5iNDQ3MzQyMTIwMDYxM2MxOWVjM2FjOWFkNjY5OTc1MzRhYmVmMTlmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKQEAgLTM5OCw2ICszOTgs
MTEgQEAgdWludDY0X3QgV0tQYWdlR2V0UmVuZGVyVHJlZVNpemUoV0tQYWdlUmVmIHBhZ2UpCiAg
ICAgcmV0dXJuIHRvSW1wbChwYWdlKS0+cmVuZGVyVHJlZVNpemUoKTsKIH0KIAorV0tXZWJzaXRl
RGF0YVN0b3JlUmVmIFdLUGFnZUdldFdlYnNpdGVEYXRhU3RvcmUoV0tQYWdlUmVmIHBhZ2UpCit7
CisgICAgcmV0dXJuIHRvQVBJKCZ0b0ltcGwocGFnZSktPndlYnNpdGVEYXRhU3RvcmUoKSk7Cit9
CisKIFdLSW5zcGVjdG9yUmVmIFdLUGFnZUdldEluc3BlY3RvcihXS1BhZ2VSZWYgcGFnZVJlZikK
IHsKICAgICByZXR1cm4gdG9BUEkodG9JbXBsKHBhZ2VSZWYpLT5pbnNwZWN0b3IoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCmluZGV4IDY3MGI1ZTlmZDRiNDU0YTJiN2Vk
ZmQyMjMyYWFlOTUxYzQ2N2QwODMuLmM1MWI4MTYyYzg5NzM0YWIxNTJiZWYwZTk5MjMzN2Q1NWYy
ZGU4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCkBAIC0xMTgsNiAr
MTE4LDggQEAgV0tfRVhQT1JUIGRvdWJsZSBXS1BhZ2VHZXRFc3RpbWF0ZWRQcm9ncmVzcyhXS1Bh
Z2VSZWYgcGFnZSk7CiAKIFdLX0VYUE9SVCB1aW50NjRfdCBXS1BhZ2VHZXRSZW5kZXJUcmVlU2l6
ZShXS1BhZ2VSZWYgcGFnZSk7CiAKK1dLX0VYUE9SVCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tQ
YWdlR2V0V2Vic2l0ZURhdGFTdG9yZShXS1BhZ2VSZWYgcGFnZSk7CisKIFdLX0VYUE9SVCBXS0lu
c3BlY3RvclJlZiBXS1BhZ2VHZXRJbnNwZWN0b3IoV0tQYWdlUmVmIHBhZ2UpOwogCiBXS19FWFBP
UlQgV0tTdHJpbmdSZWYgV0tQYWdlQ29weVVzZXJBZ2VudChXS1BhZ2VSZWYgcGFnZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVS
ZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3Jl
UmVmLmNwcAppbmRleCBmZjg2MmJiMDU3M2U2MjAyZDYzNzczZmE4N2YwN2RjYzZjNDliMzRlLi4w
ZmEyOGQ4YWJmMDRiNTU0OTBlM2JlMmQ4YTA1M2IyZDgyNTQwMjZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAK
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiQVBJ
SFRUUENvb2tpZVN0b3JlLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2lu
Y2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIldLQVBJQ2Fz
dC5oIgogI2luY2x1ZGUgIldLRGljdGlvbmFyeS5oIgpAQCAtNjksNiArNzAsMTYgQEAgV0tXZWJz
aXRlRGF0YVN0b3JlUmVmIFdLV2Vic2l0ZURhdGFTdG9yZUNyZWF0ZVdpdGhDb25maWd1cmF0aW9u
KFdLV2Vic2l0ZURhdGFTdG8KICAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpjcmVhdGUoKldlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLCBzZXNz
aW9uSUQpLmxlYWtSZWYoKSk7CiB9CiAKK3ZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRl
TmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSkKK3sKKyAgICBX
ZWJLaXQ6OnRvSW1wbChkYXRhU3RvcmUpLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworfQor
CitXS1Byb2Nlc3NJRCBXS1dlYnNpdGVEYXRhU3RvcmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSkKK3sKKyAgICByZXR1cm4gV2ViS2l0
Ojp0b0ltcGwoZGF0YVN0b3JlKS0+bmV0d29ya1Byb2Nlc3MoKS5wcm9jZXNzSWRlbnRpZmllcigp
OworfQorCiB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVJlbW92ZUlUUERhdGFGb3JEb21haW4oV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgV0tTdHJpbmdSZWYgaG9zdCwgdm9pZCog
Y29udGV4dCwgV0tXZWJzaXRlRGF0YVN0b3JlUmVtb3ZlSVRQRGF0YUZvckRvbWFpbkZ1bmN0aW9u
IGNhbGxiYWNrKQogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVS
ZWYuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJl
Zi5oCmluZGV4IGI5NjRiNzE3MTE0NTYzODM2MTFlNzE4MzdkODI5YzBkY2Q0MmQxNDYuLjZlNjhm
NzM2ODA3M2NhNDdlZmU2MWE5YzgwYzllNTQxMTdkNWI1YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCkBAIC0yOSw2
ICsyOSwxMyBAQAogI2luY2x1ZGUgPFdlYktpdC9XS0Jhc2UuaD4KICNpbmNsdWRlIDxXZWJLaXQv
V0tEZXByZWNhdGVkLmg+CiAKKyNpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMikK
K3R5cGVkZWYgaW50IFdLUHJvY2Vzc0lEOworI2Vsc2UKKyNpbmNsdWRlIDx1bmlzdGQuaD4KK3R5
cGVkZWYgcGlkX3QgV0tQcm9jZXNzSUQ7CisjZW5kaWYKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiBl
eHRlcm4gIkMiIHsKICNlbmRpZgpAQCAtNTAsNiArNTcsMTEgQEAgV0tfRVhQT1JUIHZvaWQgV0tX
ZWJzaXRlRGF0YVN0b3JlU2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0
aW5nKFcKIAogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlQ2xlYXJDYWNoZWRDcmVk
ZW50aWFscyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmKTsKIAorV0tfRVhQT1JU
IHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlQ2xlYXJDYWNoZWRDcmVkZW50aWFscyhXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKK1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9y
ZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUp
OworCitXS19FWFBPUlQgV0tQcm9jZXNzSUQgV0tXZWJzaXRlRGF0YVN0b3JlR2V0TmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworCiBXS19F
WFBPUlQgYm9vbCBXS1dlYnNpdGVEYXRhU3RvcmVHZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZChXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmKTsKIFdLX0VYUE9SVCB2b2lk
IFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIGJvb2wgZW5hYmxlKTsKIHR5cGVkZWYgdm9p
ZCAoKldLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3RpY3NFcGhlbWVyYWxGdW5jdGlvbikoYm9vbCBp
c0VwaGVtZXJhbCwgdm9pZCogZnVuY3Rpb25Db250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KaW5kZXggZmYzMDk0OTg2YzI0
M2QwNDc0ZjI1MmQzOTFlNmNjYjc0ZjFmZWQ1Yi4uMWY1NmZiZmI2Nzk1MTY0OGRmMGI0YmJkY2Jm
MmE1OTlkYzAwYmRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2wubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2wubW0KQEAgLTQwNiwyOCArNDA2LDYgQEAgc3RhdGljIE5TRGljdGlv
bmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBI
YXNoTWFwPFMKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyU3VwcG9ydGVkUGx1Z2lucygpOwogfQog
Ci0tICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcwotewotICAgIF9wcm9jZXNzUG9vbC0+
dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0KLQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9j
ZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Ci17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5kTmV0d29y
a1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7Ci19Ci0KLS0gKHZvaWQp
X3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxl
dGlvbkhhbmRsZXIKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmRGb3JUZXN0aW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihj
b21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9
KTsKLX0KLQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lCi17Ci0gICAgX3By
b2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQogLSAodm9pZClf
dGVybWluYXRlU2VydmljZVdvcmtlcnMKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0ZVNl
cnZpY2VXb3JrZXJzKCk7CkBAIC00MzUsMTIgKzQxMyw3IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkg
KnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1h
cDxTCiAKIC0gKHZvaWQpX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6KEJPT0wp
dXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcwogewotICAgIF9wcm9jZXNzUG9vbC0+c2V0
VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzKTsKLX0KLQotLSAocGlkX3QpX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcgotewotICAg
IHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpOworICAgIFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mo
dXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiB9CiAKIC0gKHBpZF90KV9wcmV3YXJt
ZWRQcm9jZXNzSWRlbnRpZmllcgpAQCAtNDY3LDExICs0NDAsNiBAQCBzdGF0aWMgTlNEaWN0aW9u
YXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhh
c2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1
bmNoRmFpbEZvclRlc3RpbmcodHJ1ZSk7CiB9CiAKLS0gKHZvaWQpX21ha2VOZXh0TmV0d29ya1By
b2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZwotewotICAgIF9wcm9jZXNzUG9vbC0+c2V0U2hvdWxk
TWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKHRydWUpOwotfQotCiAt
IChCT09MKV9oYXNQcmV3YXJtZWRXZWJQcm9jZXNzCiB7CiAgICAgZm9yIChhdXRvJiBwcm9jZXNz
IDogX3Byb2Nlc3NQb29sLT5wcm9jZXNzZXMoKSkgewpAQCAtNTYwLDE4ICs1MjgsNiBAQCBzdGF0
aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1h
cDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0Q29va2llU3RvcmFnZVBh
cnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLS0gKHZvaWQpX3N5bnRoZXNpemVBcHBJ
c0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAotewotICAgIF9wcm9jZXNzUG9vbC0+c3ludGhl
c2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKLX0KLQotLSAodm9pZClfc2V0QWxsb3dz
QW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFsbG93cwotewotI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBfcHJvY2Vzc1Bvb2wtPnNldEFsbG93c0FueVNTTENl
cnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlmCi19Ci0KICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQogLSAoaWQgPF9XS0dlb2xvY2F0aW9uQ29yZUxvY2F0aW9uUHJvdmlk
ZXI+KV9jb3JlTG9jYXRpb25Qcm92aWRlcgogewpAQCAtNjA0LDExICs1NjAsNiBAQCBzdGF0aWMg
TlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxT
dHJpbmcsIEhhc2hNYXA8UwogICAgIH0pOwogfQogCi0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hh
c0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAotewotICAgIHJl
dHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5n
KGVudGl0bGVtZW50KTsKLX0KLQogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0Zv
clByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UK
IHsKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0
aW9uU3BhY2UoV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rpb25TcGFjZSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQ
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9v
bFByaXZhdGUuaAppbmRleCA2NzY5MDE1ZTA4NTU4OTk0Y2Q4YTIxOWExN2E5YzY4YWRlM2I1Mzgz
Li4zYjkzMTQwNGE4ZTJlNDMyZDUxYzU0OTY1ZTJkZWY1ZjhlY2RjMTBkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZh
dGUuaApAQCAtODcsMTQgKzg3LDkgQEAKIC0gKF9XS0Rvd25sb2FkICopX3Jlc3VtZURvd25sb2Fk
RnJvbURhdGE6KE5TRGF0YSAqKXJlc3VtZURhdGEgd2Vic2l0ZURhdGFTdG9yZTooV0tXZWJzaXRl
RGF0YVN0b3JlICopZGF0YVN0b3JlICBwYXRoOihOU1N0cmluZyAqKXBhdGggb3JpZ2luYXRpbmdX
ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4gU2hvdWxkIGJlIGNhbGxl
ZCBvbmx5IHdoaWxlIG5vIHdlYiBjb250ZW50IHByb2Nlc3NlcyBhcmUgcnVubmluZy4KLS0gKHZv
aWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUp
LCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVu
ZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29z
KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9j
ZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBp
b3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9pZClfdGVybWluYXRlU2Vy
dmljZVdvcmtlcnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4wKSk7CiAK
IC8vIFRlc3Qgb25seS4KLS0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvcygxMC4xMyksIGlvcygxMS4wKSk7CiAtIChwaWRfdClfcHJld2FybWVk
UHJvY2Vzc0lkZW50aWZpZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4w
KSk7CiAKIC8vIFRlc3Qgb25seS4KQEAgLTEwNiw3ICsxMDEsNiBAQAogLSAoc2l6ZV90KV9zZXJ2
aWNlV29ya2VyUHJvY2Vzc0NvdW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3Mo
MTIuMCkpOwogLSAodm9pZClfc3luY05ldHdvcmtQcm9jZXNzQ29va2llcyBXS19BUElfREVQUkVD
QVRFRF9XSVRIX1JFUExBQ0VNRU5UKCJXS0hUVFBDb29raWVTdG9yZS5fZmx1c2hDb29raWVzVG9E
aXNrV2l0aENvbXBsZXRpb25IYW5kbGVyOiIsIG1hY29zKDEwLjEzLCBXS19NQUNfVEJBKSwgaW9z
KDExLjAsIFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX21ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZh
aWxGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwot
LSAodm9pZClfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogLSAoTlNVSW50ZWdlcilfbWF4
aW11bVN1c3BlbmRlZFBhZ2VDb3VudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBp
b3MoMTIuMikpOwogLSAoTlNVSW50ZWdlcilfcHJvY2Vzc0NhY2hlQ2FwYWNpdHkgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKE5TVUludGVnZXIpX3Byb2Nl
c3NDYWNoZVNpemUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CkBA
IC0xMjIsMTMgKzExNiwxMCBAQAogLSAodm9pZClfcHJlY29ubmVjdFRvU2VydmVyOihOU1VSTCAq
KXNlcnZlclVSTCBXS19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKCJXS1dlYlZpZXcu
X3ByZWNvbm5lY3RUb1NlcnZlciIsIG1hY29zKDEwLjEzLjQsIFdLX01BQ19UQkEpLCBpb3MoMTEu
MywgV0tfSU9TX1RCQSkpOwogCiAvLyBUZXN0IG9ubHkuCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlT
U0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSk7CiAtICh2b2lkKV9nZXRBY3RpdmVQYWdlc09y
aWdpbnNJbldlYlByb2Nlc3NGb3JUZXN0aW5nOihwaWRfdClwaWQgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQoXikoTlNBcnJheTxOU1N0cmluZyAqPiAqKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwotLSAoQk9PTClfbmV0d29ya1By
b2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKHZvaWQpX2NsZWFy
UGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNw
YWNlICopcHJvdGVjdGlvblNwYWNlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3Mo
MTMuMCkpOwogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0Nvb2tpZVN0b3JhZ2VQ
YXJ0aXRpb25pbmdFbmFibGVkLCBzZXR0ZXI9X3NldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdF
bmFibGVkOikgQk9PTCBfY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQgV0tfQVBJX0RF
UFJFQ0FURUQoIlBhcnRpdGlvbmVkIGNvb2tpZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQiLCBt
YWNvcygxMC4xMi4zLCAxMC4xNC40KSwgaW9zKDEwLjMsIDEyLjIpKTsKLS0gKHZvaWQpX3N5bnRo
ZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZCBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIAogLy8gVGVzdCBvbmx5LgogLSAodm9pZClfc2VlZFJl
c291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0aW5nV2l0aEZpcnN0UGFydHk6KE5TVVJMICopZmly
c3RQYXJ0eVVSTCB0aGlyZFBhcnR5OihOU1VSTCAqKXRoaXJkUGFydHlVUkwgc2hvdWxkU2NoZWR1
bGVOb3RpZmljYXRpb246KEJPT0wpc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24gY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQppbmRl
eCBkMTZlZTI0ZTFmODRkZDliMmNlYmYwMDg3NmQ2NGRjMDY3NzE5M2UyLi43Mzc0Y2JlOTMwNjY3
MjU2Mjc0NjQ4YzQ0MDQ3YTdkN2ViOTZhNGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KQEAgLTYwNiw2ICs2
MDYsMTEgQEAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6OldlYnNpdGVEYXRhUmVjb3JkPiB0b1dlYnNp
dGVEYXRhUmVjb3JkcyhOU0FycmF5ICpkYXRhUmVjb3IKICAgICB9KTsKIH0KIAorLSAoQk9PTClf
bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRs
ZW1lbnQKK3sKKyAgICByZXR1cm4gX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nKGVudGl0bGVtZW50KTsKK30KKwogLSAoaWQgPF9XS1dlYnNp
dGVEYXRhU3RvcmVEZWxlZ2F0ZT4pX2RlbGVnYXRlCiB7CiAgICAgcmV0dXJuIF9kZWxlZ2F0ZS5n
ZXQoKS5nZXQoKTsKQEAgLTY1Nyw0ICs2NjIsNDIgQEAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6Oldl
YnNpdGVEYXRhUmVjb3JkPiB0b1dlYnNpdGVEYXRhUmVjb3JkcyhOU0FycmF5ICpkYXRhUmVjb3IK
ICNlbmRpZgogfQogCistICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcworeworICAgIF93
ZWJzaXRlRGF0YVN0b3JlLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworfQorCistICh2b2lk
KV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBs
ZXRpb25IYW5kbGVyCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vz
c1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9j
a1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
KyAgICB9KTsKK30KKworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1p
bmVudGx5Cit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxT
dXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKKworfQorCistICh2b2lkKV9zZW5kTmV0d29y
a1Byb2Nlc3NEaWRSZXN1bWUKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lKCk7Cit9CisKKy0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91
bmQ6KEJPT0wpYmFja2dyb3VuZAoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJv
Y2VzcygpLnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7Cit9CisKKy0gKHBp
ZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIKK3sKKyAgICByZXR1cm4gX3dlYnNpdGVEYXRh
U3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkucHJvY2Vzc0lkZW50aWZpZXIoKTsKK30KKworKyAodm9p
ZClfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nCit7CisgICAgV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjptYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZv
clRlc3RpbmcoKTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKaW5kZXggODI4
YmJlZjM5NWE4YjU3OWJiNWVlYzI2MTgxOTQwNDc0YzI4ODFkMS4uZGYyYzMwYmViOTI2ZDI2MzRj
YzY0MGJlODVjMTU0NGU5MzgwMzE3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCkBAIC04
NCw5ICs4NCwxOSBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0ZURh
dGFTdG9yZUZldGNoT3B0aW9ucykgewogCiAtICh2b2lkKV9yZW5hbWVPcmlnaW46KE5TVVJMICop
b2xkTmFtZSB0bzooTlNVUkwgKiluZXdOYW1lIGZvckRhdGFPZlR5cGVzOihOU1NldDxOU1N0cmlu
ZyAqPiAqKWRhdGFUeXBlcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxl
dGlvbkhhbmRsZXI7CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JU
ZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0
b21pYywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2RlbGVnYXRlIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAq
X2NvbmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lk
KV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBs
ZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19J
T1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsK
Ky0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc3ludGhlc2l6ZUFw
cElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSk7CisrICh2b2lkKV9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmcg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwog
QGVuZAogCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKaW5kZXggMWVlNzNl
YmMwZWEwMzZmODZiM2ZlOTQ0MTQ5MDcyZTZhYzRkYzc2Ny4uZDEwZGIyOTM2Y2E4ZjUyYjkwNzc2
NWQ4NmNlNmI1MWJjZWU4YjNlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKQEAgLTIxLDYgKzIxLDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRDb29raWVNYW5hZ2VyLmgiCiAK
KyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiU291cENvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlVHlwZS5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5o
IgogI2luY2x1ZGUgIldlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlLmgiCkBAIC01Niw2ICs1Nywx
MiBAQCBlbnVtIHsKIH07CiAKIHN0cnVjdCBfV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUgewor
ICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlcigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoZGF0YU1hbmFnZXIpOworICAgICAgICByZXR1cm4gd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGRhdGFNYW5hZ2VyKS5uZXR3b3JrUHJvY2VzcygpLmNv
b2tpZU1hbmFnZXIoKTsKKyAgICB9CisKICAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQoKSBj
b25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGRhdGFNYW5hZ2VyKTsKQEAgLTY0LDggKzcxLDcg
QEAgc3RydWN0IF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSB7CiAKICAgICB+X1dlYktpdENv
b2tpZU1hbmFnZXJQcml2YXRlKCkKICAgICB7Ci0gICAgICAgIGZvciAoYXV0byogcHJvY2Vzc1Bv
b2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMoZGF0YU1hbmFnZXIp
KQotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclBy
b3h5PigpLT5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsK
KyAgICAgICAgY29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lv
bklEKCksIG51bGxwdHIpOwogICAgIH0KIAogICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciog
ZGF0YU1hbmFnZXI7CkBAIC0xMzksMTEgKzE0NSw5IEBAIFdlYktpdENvb2tpZU1hbmFnZXIqIHdl
YmtpdENvb2tpZU1hbmFnZXJDcmVhdGUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFu
CiB7CiAgICAgV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciA9IFdFQktJVF9DT09LSUVfTUFO
QUdFUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQ09PS0lFX01BTkFHRVIsIG51bGxwdHIpKTsK
ICAgICBtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlciA9IGRhdGFNYW5hZ2VyOwotICAgIGZvciAo
YXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9v
bHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5z
dXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxs
YmFjayhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW21hbmFnZXJdIHsKLSAgICAgICAgICAg
IGdfc2lnbmFsX2VtaXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7Ci0gICAgICAgIH0p
OwotICAgIH0KKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuc2V0Q29va2llT2Jz
ZXJ2ZXJDYWxsYmFjayhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW21hbmFnZXJdIHsKKyAg
ICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxzW0NIQU5HRURdLCAwKTsKKyAgICB9
KTsKICAgICByZXR1cm4gbWFuYWdlcjsKIH0KIApAQCAtMTczLDggKzE3Nyw3IEBAIHZvaWQgd2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UoV2ViS2l0Q29va2llTWFu
YWdlciogbWFuYWdlciwKICAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0
YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQotICAg
ICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNl
dENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgU3RyaW5nOjpmcm9tVVRGOChmaWxl
bmFtZSksIHRvU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZShzdG9yYWdlKSk7CisgICAg
bWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
KHNlc3Npb25JRCwgU3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZSksIHRvU291cENvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlVHlwZShzdG9yYWdlKSk7CiB9CiAKIC8qKgpAQCAtMTkyLDggKzE5NSw3IEBA
IHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tp
ZU1hbmFnZXIqIG1hbmFnZXIsIFdlYktpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfQ09PS0lFX01BTkFHRVIobWFuYWdlcikpOwogCi0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2
LT5kYXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKS0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2
LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9
KTsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuc2V0SFRUUENvb2tpZUFjY2Vw
dFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSksIFtdKCkgeyB9KTsKIH0KIAogLyoqCkBAIC0yMTcsMTQgKzIxOSw3IEBAIHZv
aWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1h
bmFnZXIqIG1hbmFnZXIsIEdDYW5jCiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRH
UmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkp
OwogCi0gICAgLy8gVGhlIHBvbGljeSBpcyB0aGUgc2FtZSBpbiBhbGwgcHJvY2VzcyBwb29scyBo
YXZpbmcgdGhlIHNhbWUgc2Vzc2lvbiBJRCwgc28ganVzdCBhc2sgYW55LgotICAgIGNvbnN0IGF1
dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29s
cyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgaWYgKHByb2Nlc3NQb29scy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQoKSwgV0VCS0lUX0NP
T0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCktPmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklE
KCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3kpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuZ2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZN
b3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgewogICAg
ICAgICBnX3Rhc2tfcmV0dXJuX2ludCh0YXNrLmdldCgpLCB0b1dlYktpdENvb2tpZUFjY2VwdFBv
bGljeShwb2xpY3kpKTsKICAgICB9KTsKIH0KQEAgLTI2OSwxMSArMjY0LDcgQEAgdm9pZCB3ZWJr
aXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2Vy
LCBTb3VwQ29va2llKgogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29va2llKTsKIAogICAgIEdSZWZQ
dHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJs
ZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0
ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0g
ICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhl
IGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJr
aXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1h
bmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCktPnNldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29y
ZTo6Q29va2llKGNvb2tpZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKKyAgICBtYW5h
Z2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuc2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNz
aW9uSUQoKSwgeyBXZWJDb3JlOjpDb29raWUoY29va2llKSB9LCBbdGFzayA9IFdURk1vdmUodGFz
ayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJVRSk7
CiAgICAgfSk7CiB9CkBAIC0zMjAsMTEgKzMxMSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX2dldF9jb29raWVzKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIGNvbnN0IGdjaGFy
CiAgICAgZ19yZXR1cm5faWZfZmFpbCh1cmkpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9
IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNl
ckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBz
YW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJv
Y2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBw
b29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJv
Y2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29v
a2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21V
VEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiBjb29raWVzKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLmdl
dENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVSTChVUkwoKSwgU3RyaW5nOjpm
cm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6Q29va2llPiYgY29va2llcykgewogICAgICAgICBHTGlzdCogY29va2llc0xpc3QgPSBudWxs
cHRyOwogICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGNvb2tpZXMpCiAgICAgICAgICAgICBj
b29raWVzTGlzdCA9IGdfbGlzdF9wcmVwZW5kKGNvb2tpZXNMaXN0LCBjb29raWUudG9Tb3VwQ29v
a2llKCkpOwpAQCAtMzc4LDExICszNjUsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9k
ZWxldGVfY29va2llKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIFNvdXBDb29raQogICAg
IGdfcmV0dXJuX2lmX2ZhaWwoY29va2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBh
ZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJE
YXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2Ft
ZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nl
c3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9v
bC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFn
ZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nl
c3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmRlbGV0ZUNv
b2tpZShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSks
IFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFu
YWdlcigpLmRlbGV0ZUNvb2tpZShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6
Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFz
a19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAK
aW5kZXggNzE2NjdjZjQ3MzJhNzc0MGQ2OGY3ZDMzZTg3NzdhMmY0MTBkOWQ1Yy4uMzZkMDAwOGJh
MjE3YWMxMDVmOTg0MmQ5MTIyYmQ2YjMxNWM1YmU0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKQEAgLTQwMiw3ICs0
MDIsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoR09iamVjdCog
b2JqZWN0KQogICAgICAgICBwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIgPSBhZG9wdEdSZWYod2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldygibG9jYWwtc3RvcmFnZS1kaXJlY3RvcnkiLCBw
cml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkuZGF0YSgpLCBudWxscHRyKSk7CiAKICAgICBwcml2
LT5wcm9jZXNzUG9vbCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlvbik7Ci0g
ICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFByaW1hcnlEYXRhU3RvcmUod2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkpOwog
ICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRVc2VyTWVzc2FnZUhhbmRsZXIoW3dlYkNvbnRleHRd
KFVzZXJNZXNzYWdlJiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyTWVzc2Fn
ZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgewogICAgICAgICAvLyBTaW5rIHRoZSBmbG9hdGlu
ZyByZWYuCiAgICAgICAgIEdSZWZQdHI8V2ViS2l0VXNlck1lc3NhZ2U+IHVzZXJNZXNzYWdlID0g
d2Via2l0VXNlck1lc3NhZ2VDcmVhdGUoV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwpAQCAtNDEwLDggKzQwOSw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNv
bnRleHRDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIGdfc2lnbmFsX2VtaXQo
d2ViQ29udGV4dCwgc2lnbmFsc1tVU0VSX01FU1NBR0VfUkVDRUlWRURdLCAwLCB1c2VyTWVzc2Fn
ZS5nZXQoKSwgJnJldHVyblZhbHVlKTsKICAgICB9KTsKIAotICAgIHdlYmtpdFdlYnNpdGVEYXRh
TWFuYWdlckFkZFByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwgKnBy
aXYtPnByb2Nlc3NQb29sKTsKLQogICAgIHByaXYtPnByb2Nlc3NNb2RlbCA9IFdFQktJVF9QUk9D
RVNTX01PREVMX01VTFRJUExFX1NFQ09OREFSWV9QUk9DRVNTRVM7CiAKICNpZiBFTkFCTEUoTUVN
T1JZX1NBTVBMRVIpCkBAIC00MzksMTEgKzQzNiw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNv
bnRleHREaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wt
PnNldERvd25sb2FkQ2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSk7
CiAgICAgfQogCi0gICAgaWYgKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlcikgewotICAgICAgICB3
ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJSZW1vdmVQcm9jZXNzUG9vbChwcml2LT53ZWJzaXRlRGF0
YU1hbmFnZXIuZ2V0KCksICpwcml2LT5wcm9jZXNzUG9vbCk7Ci0gICAgICAgIHByaXYtPndlYnNp
dGVEYXRhTWFuYWdlciA9IG51bGxwdHI7Ci0gICAgfQotCiAgICAgaWYgKHByaXYtPmZhdmljb25E
YXRhYmFzZSkgewogICAgICAgICB3ZWJraXRGYXZpY29uRGF0YWJhc2VDbG9zZShwcml2LT5mYXZp
Y29uRGF0YWJhc2UuZ2V0KCkpOwogICAgICAgICBwcml2LT5mYXZpY29uRGF0YWJhc2UgPSBudWxs
cHRyOwpAQCAtMTU4MSw4ICsxNTczLDggQEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfcHJlZmV0
Y2hfZG5zKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGhvc3QKICAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSk7CiAgICAgZ19y
ZXR1cm5faWZfZmFpbChob3N0bmFtZSk7CiAKLSAgICBpZiAoY29udGV4dC0+cHJpdi0+ZG5zUHJl
ZmV0Y2hlZEhvc3RzLmFkZChob3N0bmFtZSkuaXNOZXdFbnRyeSkKLSAgICAgICAgY29udGV4dC0+
cHJpdi0+cHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5nOjpmcm9tVVRGOChob3N0bmFtZSkpKTsKKyAg
ICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0
YVN0b3JlKGNvbnRleHQtPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSk7CisgICAgd2Vi
c2l0ZURhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpQcmVmZXRjaEROUyhTdHJpbmc6OmZyb21VVEY4KGhvc3RuYW1lKSksIDApOwogICAgIGNv
bnRleHQtPnByaXYtPmRuc1ByZWZldGNoSHlzdGVyZXJpcy5pbXB1bHNlKCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAKaW5k
ZXggNDEzNWMyNjU0Mjg3ZjVjN2Q2Y2I1MDhkMTNiZjVmNjI5NjE2MWY2Zi4uZDhiM2YzYzE5OTky
ODhmMmExOGRhMzdiNmYyNGE5YzhhM2MzY2YxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTc1OSw3ICs3NTksNiBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogICAg
ICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHBy
aXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF90bHNfZXJyb3JzX3BvbGljeShjb250ZXh0RGF0YU1hbmFnZXIpKTsKICAgICAgICAgYXV0
byBwcm94eVNldHRpbmdzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGNv
bnRleHREYXRhTWFuYWdlcikubmV0d29ya1Byb3h5U2V0dGluZ3MoKTsKICAgICAgICAgd2Via2l0
V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5n
ZXQoKSkuc2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoV1RGTW92ZShwcm94eVNldHRpbmdzKSk7Ci0g
ICAgICAgIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckFkZFByb2Nlc3NQb29sKHByaXYtPndlYnNp
dGVEYXRhTWFuYWdlci5nZXQoKSwgd2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHByaXYt
PmNvbnRleHQuZ2V0KCkpKTsKICAgICB9CiAKICAgICBpZiAoIXByaXYtPndlYnNpdGVQb2xpY2ll
cykKQEAgLTk0NSwxMSArOTQ0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Rpc3Bvc2Uo
R09iamVjdCogb2JqZWN0KQogICAgICAgICB3ZWJraXRXZWJDb250ZXh0V2ViVmlld0Rlc3Ryb3ll
ZCh3ZWJWaWV3LT5wcml2LT5jb250ZXh0LmdldCgpLCB3ZWJWaWV3KTsKICAgICB9CiAKLSAgICBp
ZiAod2ViVmlldy0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyKSB7Ci0gICAgICAgIHdlYmtpdFdl
YnNpdGVEYXRhTWFuYWdlclJlbW92ZVByb2Nlc3NQb29sKHdlYlZpZXctPnByaXYtPndlYnNpdGVE
YXRhTWFuYWdlci5nZXQoKSwgd2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHdlYlZpZXct
PnByaXYtPmNvbnRleHQuZ2V0KCkpKTsKLSAgICAgICAgd2ViVmlldy0+cHJpdi0+d2Vic2l0ZURh
dGFNYW5hZ2VyID0gbnVsbHB0cjsKLSAgICB9Ci0KICAgICBpZiAod2ViVmlldy0+cHJpdi0+Y3Vy
cmVudFNjcmlwdERpYWxvZykgewogICAgICAgICB3ZWJraXRfc2NyaXB0X2RpYWxvZ19jbG9zZSh3
ZWJWaWV3LT5wcml2LT5jdXJyZW50U2NyaXB0RGlhbG9nKTsKICAgICAgICAgQVNTRVJUKCF3ZWJW
aWV3LT5wcml2LT5jdXJyZW50U2NyaXB0RGlhbG9nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3Bw
CmluZGV4IGRhOWEzYWFkYjg0OWUwZTE2NjdiYWQ5NzA0OThjMmRmNThlMDBhMzUuLjRjNGVmNWQ2
OGFjM2ExYjVjYjZhY2I5NTU5YThmZDUzZmFiZDE4ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
LmNwcApAQCAtOTUsMTEgKzk1LDYgQEAgZW51bSB7CiB9OwogCiBzdHJ1Y3QgX1dlYktpdFdlYnNp
dGVEYXRhTWFuYWdlclByaXZhdGUgewotICAgIH5fV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJp
dmF0ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSk7Ci0g
ICAgfQotCiAgICAgUmVmUHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZT4gd2Vic2l0ZURhdGFT
dG9yZTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGJhc2VEYXRhRGlyZWN0b3J5OwogICAgIEdVbmlx
dWVQdHI8Y2hhcj4gYmFzZUNhY2hlRGlyZWN0b3J5OwpAQCAtMTE1LDcgKzExMCw2IEBAIHN0cnVj
dCBfV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZSB7CiAgICAgV2ViS2l0VExTRXJyb3Jz
UG9saWN5IHRsc0Vycm9yc1BvbGljeTsKIAogICAgIEdSZWZQdHI8V2ViS2l0Q29va2llTWFuYWdl
cj4gY29va2llTWFuYWdlcjsKLSAgICBWZWN0b3I8V2ViUHJvY2Vzc1Bvb2wqPiBwcm9jZXNzUG9v
bHM7CiB9OwogCiBXRUJLSVRfREVGSU5FX1RZUEUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLCB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIsIEdfVFlQRV9PQkpFQ1QpCkBAIC00OTQsMzAgKzQ4
OCwxMyBAQCBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldERhdGFTdG9yZShXZWJLaXRXZWJzaXRlRGF0YQogICAgICAgICAgICAgY29uZmlndXJhdGlv
bi0+c2V0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeShGaWxlU3lzdGVtOjpzdHJp
bmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHByaXYtPnN3UmVnaXN0cmF0aW9uc0RpcmVj
dG9yeS5nZXQoKSkpOwogICAgICAgICBpZiAocHJpdi0+ZG9tQ2FjaGVEaXJlY3RvcnkpCiAgICAg
ICAgICAgICBjb25maWd1cmF0aW9uLT5zZXRDYWNoZVN0b3JhZ2VEaXJlY3RvcnkoRmlsZVN5c3Rl
bTo6c3RyaW5nRnJvbUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwcml2LT5kb21DYWNoZURpcmVj
dG9yeS5nZXQoKSkpOwotICAgICAgICBwcml2LT53ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoV1RGTW92ZShjb25maWd1cmF0aW9uKSwgUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7CisgICAgICAgIHByaXYtPndlYnNpdGVEYXRhU3Rv
cmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZShXVEZNb3ZlKGNvbmZpZ3VyYXRp
b24pLCBQQUw6OlNlc3Npb25JRDo6Z2VuZXJhdGVQZXJzaXN0ZW50U2Vzc2lvbklEKCkpOwogICAg
ICAgICBwcml2LT53ZWJzaXRlRGF0YVN0b3JlLT5zZXRJZ25vcmVUTFNFcnJvcnMocHJpdi0+dGxz
RXJyb3JzUG9saWN5ID09IFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUpOwogICAgIH0K
IAogICAgIHJldHVybiAqcHJpdi0+d2Vic2l0ZURhdGFTdG9yZTsKIH0KIAotdm9pZCB3ZWJraXRX
ZWJzaXRlRGF0YU1hbmFnZXJBZGRQcm9jZXNzUG9vbChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIq
IG1hbmFnZXIsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLXsKLSAgICBBU1NFUlQoIW1h
bmFnZXItPnByaXYtPnByb2Nlc3NQb29scy5jb250YWlucygmcHJvY2Vzc1Bvb2wpKTsKLSAgICBt
YW5hZ2VyLT5wcml2LT5wcm9jZXNzUG9vbHMuYXBwZW5kKCZwcm9jZXNzUG9vbCk7Ci19Ci0KLXZv
aWQgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyUmVtb3ZlUHJvY2Vzc1Bvb2woV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCi17Ci0g
ICAgQVNTRVJUKG1hbmFnZXItPnByaXYtPnByb2Nlc3NQb29scy5jb250YWlucygmcHJvY2Vzc1Bv
b2wpKTsKLSAgICBtYW5hZ2VyLT5wcml2LT5wcm9jZXNzUG9vbHMucmVtb3ZlRmlyc3QoJnByb2Nl
c3NQb29sKTsKLX0KLQotY29uc3QgVmVjdG9yPFdlYlByb2Nlc3NQb29sKj4mIHdlYmtpdFdlYnNp
dGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1h
bmFnZXIpCi17Ci0gICAgcmV0dXJuIG1hbmFnZXItPnByaXYtPnByb2Nlc3NQb29sczsKLX0KLQog
LyoqCiAgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3OgogICogQGZpcnN0X29wdGlv
bl9uYW1lOiBuYW1lIG9mIHRoZSBmaXJzdCBvcHRpb24gdG8gc2V0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXJQcml2YXRlLmgKaW5kZXggMmE1ODllMjdmMWZlZDIyYTNhNzhhZmYxYTRmZmY3ZDY3
ZDBjYWQxNy4uZmM5ZTgyMjZmYmI4Zjg5NGE3ZTFlZDdkYjQ1NTU0MmExNTg4NzczOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaApAQCAtMTksMTEgKzE5LDYgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogI2luY2x1ZGUgIldlYnNp
dGVEYXRhU3RvcmUuaCIKIAogV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKik7Ci12b2lk
IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckFkZFByb2Nlc3NQb29sKFdlYktpdFdlYnNpdGVEYXRh
TWFuYWdlciosIFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2wmKTsKLXZvaWQgd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyUmVtb3ZlUHJvY2Vzc1Bvb2woV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiwgV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbCYpOwotY29uc3QgVmVjdG9yPFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2wqPiYgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKFdlYktpdFdlYnNp
dGVEYXRhTWFuYWdlciopOwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
dXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IGFiNjRhNDU4Yjkw
YjUwNjA0ZDI4NmEyYzZiYTIwMDUzM2I5OWRlNWUuLjJjZDg4YzUyMDgxNzRjMzQwODMzN2RkODY3
Mzk3YzhlY2NhYjJkMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9t
YXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0xMzkyLDggKzEzOTIs
OCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUoY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbgogCiAgICAgY29va2llLmh0dHBPbmx5ID0gKmh0
dHBPbmx5OwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9w
cm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29v
a2llTWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklE
KCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5
JiBjb29raWVNYW5hZ2VyID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNz
KCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhwYWdlLT53
ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7
CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAtMTQwOSw4
ICsxNDA5LDggQEAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygKIAogICAgIFN0cmluZyBob3N0ID0g
YWN0aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5
KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5h
Z2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1l
cyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlB
ZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHkmIGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nl
c3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29raWVzRm9y
SG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBk
b21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOwogCiAgICAgcmV0dXJuIHsg
fTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nl
c3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5
LmgKaW5kZXggNDFjMGEwZmJmNTA2ZWZhMTQwOGJjZWY5YWY4YTkwYjg1YTFhZDA4YS4uNGYzOThi
NTMwZjYwODU3NWM5NjdiODNjNzRmYTJmNDMyOGY2Y2UzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94eSgpOwogCiAgICAgdm9pZCBj
b25uZWN0KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGVybWlu
YXRlKCk7CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigpID0gMDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9M
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAppbmRleCBkYmU0NGY5NTk0MTA1MTEy
MTUxMjhkMjlkMjE0ZWVlMDc0YWFmODRjLi40Yzg0NWEwZWM3MjU2NTljZmU3OWNlYTM1ZDNjYmE5
NjY4MzQ2MTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaApAQCAtNDEsMTEg
KzQxLDExIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHk7CiAKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCBm
aW5hbCA6IHB1YmxpYyBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCB7Ci1wcml2YXRl
OgorcHVibGljOgogICAgIHZvaWQgc3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JikgZmluYWw7CiAgICAgdm9pZCBzdG9wTG9hZGluZyhMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJQcm94eSYsIExlZ2FjeUN1c3RvbVByb3RvY29sSUQpIGZpbmFsOwogICAgIHZv
aWQgaW52YWxpZGF0ZShMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYpIGZpbmFsOwot
Citwcml2YXRlOgogICAgIEhhc2hNYXA8TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgUmV0YWluUHRy
PFdLQ3VzdG9tUHJvdG9jb2xMb2FkZXI+PiBtX2xvYWRlck1hcDsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4
IDc2MmY1Njg5YzQxYjdmMjI3MDhlNGZiZTNjODBkZThlYTFlZDBjNGQuLjI1ZGY4NzczZDA2NWMw
MTA1ZDBmODU4M2NlNjg1YTkzMTBiZTJjYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtMTM0LDggKzEzNCw5IEBA
IHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKQogCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0gICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNldFByb2Nlc3NTdXBw
cmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAgICBXZWJzaXRl
RGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbZW5hYmxlZCA9IHByb2Nlc3NTdXBw
cmVzc2lvbkVuYWJsZWQoKV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAg
ICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVk
KGVuYWJsZWQpOworICAgIH0pOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAg
ICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUo
KSkKQEAgLTE2Niw4ICsxNjcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRp
YWxpemUoKQogICAgIGlmICghW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10g
Ym9vbEZvcktleTpAIldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyIl0pCiAgICAg
ICAgIGluc3RhbGxNZW1vcnlQcmVzc3VyZUhhbmRsZXIoKTsKIAotICAgIHNldExlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudD4oKSk7Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0o
TUFDQ0FUQUxZU1QpCiAgICAgaWYgKCFfTUdDYWNoZVZhbGlkKCkpIHsKICAgICAgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklU
WV9ERUZBVUxULCAwKSwgXnsKQEAgLTQ5NSwyMiArNDk0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmEKIAogICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBz
dGFuZGFyZFVzZXJEZWZhdWx0c107CiAKLSAgICB7Ci0gICAgICAgIGJvb2wgaXNTYWZhcmkgPSBm
YWxzZTsKLSAgICAgICAgYm9vbCBpc01pbmlCcm93c2VyID0gZmFsc2U7Ci0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6
aXNNb2JpbGVTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6OklPU0Fw
cGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAgICAg
IGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCk7Ci0gICAgICAg
IGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNNaW5pQnJvd3Nlcigp
OwotI2VuZGlmCi0gICAgICAgIGlmIChpc1NhZmFyaSB8fCBpc01pbmlCcm93c2VyKSB7Ci0gICAg
ICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5odHRwUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JL
ZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgICAg
ICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5odHRwc1Byb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihO
U1N0cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgfQotICAg
IH0KLQogICAgIHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQgPSBhZG9wdENGKF9DRk5ldHdv
cmtDb3B5QVRTQ29udGV4dCgpKTsKIAogICAgIHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NNZW1v
cnlQcmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpXZWJLaXRTdXBwcmVzc01l
bW9yeVByZXNzdXJlSGFuZGxlckRlZmF1bHRzS2V5XTsKQEAgLTUyMiw4ICs1MDUsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYQogI2VuZGlmCiAKICAgICBwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xp
Y2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSA9IFtkZWZhdWx0cyBib29sRm9yS2V5OltOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiRXhwZXJpbWVudGFsJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6YWRD
bGlja0F0dHJpYnV0aW9uRGVidWdNb2RlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0
KCldXTsKLQotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmFwcEhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVy
bWlzc2lvbiA9IGhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbigpOwog
fQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUludmFsaWRhdGVDb250ZXh0KCkKQEAg
LTYwMiwxMSArNTgzLDYgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc1N1cHByZXNzaW9u
RW5hYmxlZCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIu
dmFsdWUoKSAmJiAhbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZh
bHVlKCk7CiB9CiAKLWJvb2wgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYgZW50aXRsZW1lbnQpCi17Ci0gICAgcmV0dXJu
IFdURjo6aGFzRW50aXRsZW1lbnQoZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCkt
PnhwY0Nvbm5lY3Rpb24oKSwgZW50aXRsZW1lbnQudXRmOCgpLmRhdGEoKSk7Ci19Ci0KICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiBmbG9hdCBXZWJQ
cm9jZXNzUG9vbDo6ZGlzcGxheUJyaWdodG5lc3MoKQogewpAQCAtOTQzLDIzICs5MTksNCBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlckhpZ2hEeW5hbWljUmFuZ2VDaGFuZ2VDYWxsYmFj
aygpCiB9CiAjZW5kaWYKIAotT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBXZWJQcm9jZXNzUG9v
bDo6eHBjRW5kcG9pbnRNZXNzYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lbmRwb2ludE1l
c3NhZ2U7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0Vu
ZHBvaW50VG9XZWJQcm9jZXNzKE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4gZW5kcG9pbnRNZXNz
YWdlKQotewotICAgIG1fZW5kcG9pbnRNZXNzYWdlID0gZW5kcG9pbnRNZXNzYWdlOwotCi0gICAg
Zm9yIChhdXRvIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAgICBpZiAocHJvY2Vzcy0+
c3RhdGUoKSAhPSBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OlN0YXRlOjpSdW5uaW5nKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcHJvY2Vzcy0+Y29ubmVjdGlvbigpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8gY29ubmVjdGlvbiA9IHByb2Nlc3MtPmNv
bm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpOwotICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5k
X21lc3NhZ2UoY29ubmVjdGlvbiwgZW5kcG9pbnRNZXNzYWdlLmdldCgpKTsKLSAgICB9Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCmluZGV4IGM1ZGU0ZTdkMGY1OTE5NGY0M2EwMjNi
MDg5ZTM3MmM1OGNmOGVlMDYuLmY3Y2ZmODUyZjBiYTZkMDE1NTExNjVkZDhhOWY3ZDU3NjNiMDA3
ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRQcm94eS5jcHAKQEAgLTc1LDggKzc1LDggQEAgdm9pZCBEb3dubG9hZFByb3h5OjpjYW5jZWwo
KQogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKE5l
dHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2FkSUQpLCAwKTsKKyAgICBpZiAobV9k
YXRhU3RvcmUpCisgICAgICAgIG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2FkSUQpLCAwKTsK
IH0KIAogdm9pZCBEb3dubG9hZFByb3h5OjppbnZhbGlkYXRlKCkKQEAgLTEwMywxNSArMTAzLDEz
IEBAIFdlYlBhZ2VQcm94eSogRG93bmxvYWRQcm94eTo6b3JpZ2luYXRpbmdQYWdlKCkgY29uc3QK
ICNpZiBQTEFURk9STShDT0NPQSkKIHZvaWQgRG93bmxvYWRQcm94eTo6cHVibGlzaFByb2dyZXNz
KGNvbnN0IFVSTCYgVVJMKQogewotICAgIGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICBpZiAoIW1f
ZGF0YVN0b3JlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSBoYW5kbGU7Ci0gICAgICAgIGJvb2wgY3JlYXRlZFNhbmRib3hFeHRl
bnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1QYXRo
KCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgaGFuZGxlKTsKLSAgICAgICAg
QVNTRVJUX1VOVVNFRChjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiwgY3JlYXRlZFNhbmRib3hFeHRl
bnNpb24pOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKG1fZG93bmxvYWRJRCwgVVJMLCBoYW5kbGUp
LCAwKTsKLSAgICB9CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZTsKKyAgICBi
b29sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlKFVSTC5maWxlU3lzdGVtUGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3Jp
dGUsIGhhbmRsZSk7CisgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiwg
Y3JlYXRlZFNhbmRib3hFeHRlbnNpb24pOworICAgIG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9ncmVz
cyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFuZGxlKSwgMCk7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0o
Q09DT0EpCiAKQEAgLTEzMSwxMSArMTI5LDEwIEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkU3Rh
cnQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dlCiAK
IHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIHVpbnQ2NF90
IGNoYWxsZW5nZUlEKQogewotICAgIGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICBpZiAoIW1fcHJv
Y2Vzc1Bvb2wgfHwgIW1fZGF0YVN0b3JlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5
OjpjcmVhdGUoV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlELCBt
YWtlUmVmKCptX3Byb2Nlc3NQb29sLT5uZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKSksIG51
bGxwdHIpOwotCisgICAgYXV0byBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VQcm94eTo6Y3JlYXRlKFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFs
bGVuZ2UpLCBjaGFsbGVuZ2VJRCwgbWFrZVJlZigqbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNz
KCkuY29ubmVjdGlvbigpKSwgbnVsbHB0cik7CiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRD
bGllbnQoKS5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKnRoaXMsIGF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlUHJveHkuZ2V0KCkpOwogfQogCkBAIC0xNDYsMTUgKzE0MywxMCBAQCB2
b2lkIERvd25sb2FkUHJveHk6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiBwcm9w
b3NlZFJlcXVlc3QsIGNvbnN0IFJlcwogCiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGll
bnQoKS53aWxsU2VuZFJlcXVlc3QoKnRoaXMsIFdURk1vdmUocHJvcG9zZWRSZXF1ZXN0KSwgcmVk
aXJlY3RSZXNwb25zZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oUmVz
b3VyY2VSZXF1ZXN0JiYgbmV3UmVxdWVzdCkgewogICAgICAgICBtX3JlZGlyZWN0Q2hhaW4uYXBw
ZW5kKG5ld1JlcXVlc3QudXJsKCkpOwotCi0gICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9w
cm9jZXNzUG9vbCkKKyAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX2RhdGFTdG9yZSkKICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBhdXRvKiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0g
cHJvdGVjdGVkVGhpcy0+bV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAg
aWYgKCFuZXR3b3JrUHJvY2Vzc1Byb3h5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IG5ldHdvcmtQcm9jZXNzUHJveHktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250
aW51ZVdpbGxTZW5kUmVxdWVzdChwcm90ZWN0ZWRUaGlzLT5tX2Rvd25sb2FkSUQsIG5ld1JlcXVl
c3QpLCAwKTsKKyAgICAgICAgYXV0byYgbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb3RlY3RlZFRo
aXMtPm1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpOworICAgICAgICBuZXR3b3JrUHJvY2Vz
c1Byb3h5LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZVdpbGxTZW5kUmVx
dWVzdChwcm90ZWN0ZWRUaGlzLT5tX2Rvd25sb2FkSUQsIG5ld1JlcXVlc3QpLCAwKTsKICAgICB9
KTsKIH0KIApAQCAtMTc5LDE2ICsxNzEsMTQgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkZWNpZGVE
ZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZUFzeW5jKERvd25sb2FkSUQgZG93bmwKICAg
ICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX3Byb2Nl
c3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZp
bGVuYW1lKCp0aGlzLCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRGaWxl
bmFtZShzdWdnZXN0ZWRGaWxlbmFtZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIGRvd25sb2FkSUQgPSBkb3dubG9hZElEXSAoQWxsb3dPdmVyd3JpdGUgYWxsb3dPdmVy
d3JpdGUsIFN0cmluZyBkZXN0aW5hdGlvbikgeworICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2Fk
Q2xpZW50KCkuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJl
c291cmNlUmVzcG9uc2VCYXNlOjpzYW5pdGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZp
bGVuYW1lKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxvYWRJ
RF0gKEFsbG93T3ZlcndyaXRlIGFsbG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsK
ICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7
CiAgICAgICAgIGlmICghZGVzdGluYXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoZGVzdGluYXRpb24sIFNhbmRib3hFeHRlbnNpb246OlR5
cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICAgICAgaWYgKCFt
X3Byb2Nlc3NQb29sKQorICAgICAgICBpZiAoIW1fZGF0YVN0b3JlKQogICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGlu
YXRpb24oZG93bmxvYWRJRCwgZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGFs
bG93T3ZlcndyaXRlID09IEFsbG93T3ZlcndyaXRlOjpZZXMpLCAwKTsKKyAgICAgICAgbV9kYXRh
U3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNv
bnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oZG93bmxvYWRJRCwgZGVzdGlu
YXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGFsbG93T3ZlcndyaXRlID09IEFsbG93T3Zl
cndyaXRlOjpZZXMpLCAwKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCmluZGV4IDc2YTA3MTU3
YjU5MWFhY2U1MGYxNWQxNTI1ZGJjZmI4YzZhNGJiYzguLmQ3NGE4ZmE2YzY0Yzg4NjM1ZjllYjc1
Y2E3M2U3MGZkOTQ2Y2EwMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBEb3dubG9hZFByb3h5TWFwOjpEb3dubG9hZFByb3h5TWFwKE5ldHdv
cmtQcm9jZXNzUHJveHkmIHByb2Nlc3MpCi0gICAgOiBtX3Byb2Nlc3MobWFrZVdlYWtQdHIocHJv
Y2VzcykpCisgICAgOiBtX3Byb2Nlc3MocHJvY2VzcykKICNpZiBQTEFURk9STShDT0NPQSkKICAg
ICAsIG1fc2hvdWxkVGFrZUFzc2VydGlvbihXVEY6OnByb2Nlc3NIYXNFbnRpdGxlbWVudCgiY29t
LmFwcGxlLm11bHRpdGFza2luZy5zeXN0ZW1hcHBhc3NlcnRpb25zIikpCiAjZW5kaWYKQEAgLTcw
LDE0ICs3MCwxMiBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OnBsYXRmb3JtRGVzdHJveSgpCiAK
IHZvaWQgRG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKQog
ewotICAgIGlmIChtX3Byb2Nlc3MpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCksIDApOworICAg
IG1fcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRF
bnRlckJhY2tncm91bmQoKSwgMCk7CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6YXBwbGlj
YXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkKIHsKLSAgICBpZiAobV9wcm9jZXNzKQotICAgICAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbldp
bGxFbnRlckZvcmVncm91bmQoKSwgMCk7CisgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKSwgMCk7CiB9CiAK
IERvd25sb2FkUHJveHkmIERvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vi
c2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFt
ZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQpAQCAt
OTIsMTMgKzkwLDEyIEBAIERvd25sb2FkUHJveHkmIERvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURv
d25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlCiAgICAgICAgIG1fZG93bmxv
YWRVSUFzc2VydGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fzc2VydGlvbj4oZ2V0Q3VycmVudFBy
b2Nlc3NJRCgpLCAiV2ViS2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVu
Ym91bmRlZE5ldHdvcmtpbmcpOwogCiAgICAgICAgIEFTU0VSVCghbV9kb3dubG9hZE5ldHdvcmtp
bmdBc3NlcnRpb24pOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3Byb2Nlc3MpOwotICAgICAg
ICBtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fzc2Vy
dGlvbj4obV9wcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpLCAiV2ViS2l0IGRvd25sb2FkcyJf
cywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVuYm91bmRlZE5ldHdvcmtpbmcpOworICAgICAgICBt
X2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fzc2VydGlv
bj4obV9wcm9jZXNzLnByb2Nlc3NJZGVudGlmaWVyKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQ
cm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CiAKICAgICAgICAgUkVM
RUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICJVSVByb2Nlc3MgdG9vayAnV2ViS2l0IGRvd25s
b2FkcycgYXNzZXJ0aW9ucyBmb3IgVUlQcm9jZXNzIGFuZCBOZXR3b3JrUHJvY2VzcyIpOwogICAg
IH0KIAotICAgIG1fcHJvY2Vzcy0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9h
ZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQo
KS5kb3dubG9hZElEKCksIGRvd25sb2FkUHJveHkuZ2V0KCkpOworICAgIG1fcHJvY2Vzcy5hZGRN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSwgZG93bmxvYWRQ
cm94eS5nZXQoKSk7CiAKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KQEAgLTEwOSwxMiAr
MTA2LDkgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKERvd25sb2Fk
UHJveHkmIGRvd25sb2FkUHJveHkpCiAKICAgICBSRUxFQVNFX0xPRyhMb2FkaW5nLCAiUmVtb3Zp
bmcgZG93bmxvYWQgJSIgUFJJdTY0ICIgZnJvbSBVSVByb2Nlc3MgRG93bmxvYWRQcm94eU1hcCIs
IGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKIAotICAgIC8vIFRoZSBEb3dubG9hZFByb3h5IG1h
eSBiZSBob2xkaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgcHJvY2VzcyBwb29sLgotICAg
IGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmUHRyKG1fcHJvY2Vzcy0+cHJvY2Vz
c1Bvb2woKSk7Ci0KICAgICBBU1NFUlQobV9kb3dubG9hZHMuY29udGFpbnMoZG93bmxvYWRJRCkp
OwogCi0gICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25s
b2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkp
OworICAgIG1fcHJvY2Vzcy5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2Fk
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwog
ICAgIGRvd25sb2FkUHJveHkuaW52YWxpZGF0ZSgpOwogICAgIG1fZG93bmxvYWRzLnJlbW92ZShk
b3dubG9hZElEKTsKIApAQCAtMTMzLDE1ICsxMjcsMTMgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFw
OjppbnZhbGlkYXRlKCkKICAgICBmb3IgKGNvbnN0IGF1dG8mIGRvd25sb2FkIDogbV9kb3dubG9h
ZHMudmFsdWVzKCkpIHsKICAgICAgICAgZG93bmxvYWQtPnByb2Nlc3NEaWRDbG9zZSgpOwogICAg
ICAgICBkb3dubG9hZC0+aW52YWxpZGF0ZSgpOwotICAgICAgICBtX3Byb2Nlc3MtPnJlbW92ZU1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7CisgICAgICAgIG1fcHJv
Y2Vzcy5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWQtPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOwog
ICAgIH0KIAogICAgIG1fZG93bmxvYWRzLmNsZWFyKCk7CiAgICAgbV9kb3dubG9hZFVJQXNzZXJ0
aW9uID0gbnVsbHB0cjsKICAgICBtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbiA9IG51bGxw
dHI7CiAgICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICJVSVByb2Nlc3MgRG93bmxv
YWRQcm94eU1hcCBpbnZhbGlkYXRlZCAtIFJlbGVhc2VkICdXZWJLaXQgZG93bmxvYWRzJyBhc3Nl
cnRpb25zIGZvciBVSVByb2Nlc3MgYW5kIE5ldHdvcmtQcm9jZXNzIik7Ci0KLSAgICBtX3Byb2Nl
c3MgPSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCmluZGV4IDNi
ZTIwNzlhMGYyYzRiNTM3MDYyY2UxMzAwZTFjZDVkYTQ0NGZmYmUuLjRmYTAwMWJkN2ZhZTFjZWQw
MjRkMmI5MWYyMDE3MGZmOTk0NTI4YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaApAQCAtNzEsNyArNzEsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgcGxhdGZvcm1DcmVhdGUoKTsKICAgICB2b2lkIHBsYXRmb3JtRGVzdHJv
eSgpOwogCi0gICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3M7CisgICAg
TmV0d29ya1Byb2Nlc3NQcm94eSYgbV9wcm9jZXNzOwogICAgIEhhc2hNYXA8RG93bmxvYWRJRCwg
UmVmUHRyPERvd25sb2FkUHJveHk+PiBtX2Rvd25sb2FkczsKIAogICAgIGJvb2wgbV9zaG91bGRU
YWtlQXNzZXJ0aW9uIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKaW5kZXgg
NzJkZWIwYzVhNjJjYjc3MjM1NWQyY2Y2ZTYyYjgyOWY4ZjQ0MTMwMS4uODJjNmViMWY3MGEyYzcz
ZTQ0Yzk1MmI4MDc1ODQ1NDg4ZTljNjAyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAK
QEAgLTE1NSw3ICsxNTUsNyBAQCBzdGF0aWMgUmVmPFdlYnNpdGVEYXRhU3RvcmU+IGluc3BlY3Rv
cldlYnNpdGVEYXRhU3RvcmUoKQogICAgIGNvbmZpZ3VyYXRpb24tPnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJh
c2VEYXRhRGlyZWN0b3J5LCAiaXRwIikpOwogICAgIGNvbmZpZ3VyYXRpb24tPnNldFNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KGJhc2VEYXRhRGlyZWN0b3J5LCAic2VydmljZXdvcmtlcnMiKSk7CiAgICAgY29uZmln
dXJhdGlvbi0+c2V0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KEZpbGVTeXN0ZW06
OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChiYXNlRGF0YURpcmVjdG9yeSwgImRldmljZWlkaGFz
aHNhbHRzIikpOwotICAgIHJldHVybiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoV1RGTW92ZShj
b25maWd1cmF0aW9uKSwgUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7CisgICAg
cmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZShXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pLCBQ
QUw6OlNlc3Npb25JRDo6Z2VuZXJhdGVQZXJzaXN0ZW50U2Vzc2lvbklEKCkpOwogfQogCiBXZWJQ
YWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgp
CkBAIC0xNzUsNyArMTc1LDYgQEAgV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQogICAgIGF1dG8gcGFnZUdyb3VwID0gV2ViUGFnZUdy
b3VwOjpjcmVhdGUoaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoaW5zcGVjdGVk
UGFnZSgpKSk7CiAgICAgYXV0byB3ZWJzaXRlRGF0YVN0b3JlID0gaW5zcGVjdG9yV2Vic2l0ZURh
dGFTdG9yZSgpOwogICAgIGF1dG8mIHByb2Nlc3NQb29sID0gaW5zcGVjdG9yUHJvY2Vzc1Bvb2wo
aW5zcGVjdGlvbkxldmVsKCkpOwotICAgIHByb2Nlc3NQb29sLnNldFByaW1hcnlEYXRhU3RvcmUo
d2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CiAKICAgICBhdXRvIHBhZ2VDb25maWd1cmF0aW9uID0g
QVBJOjpQYWdlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24t
PnNldFByb2Nlc3NQb29sKCZwcm9jZXNzUG9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVBy
b3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKaW5kZXggOGMyM2Ji
ZThjMDZhMTU5OWNiOWI5MTZhMGIzMmFmYjM3NzgzZjMwNS4uZDZjMzMyM2RkOTNlNjlmNTZhZGY2
YmUwZDJhMWIxNGYwODIyNDUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcApAQCAtNDQsMTcgKzQ0LDE3IEBA
IExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp+TGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHkoKQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojpz
dGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgbV9uZXR3b3JrUHJv
Y2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3Rh
cnRMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKKyAgICBtX25ldHdv
cmtQcm9jZXNzUHJveHkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RhcnRMb2FkaW5n
KCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RvcExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJ
RCBjdXN0b21Qcm90b2NvbElEKQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNz
UG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBj
dXN0b21Qcm90b2NvbElEKTsKKyAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkuY3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50KCkuc3RvcExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOwog
fQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkK
IHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQoKS5pbnZhbGlkYXRlKCp0aGlzKTsKKyAgICBtX25ldHdvcmtQcm9jZXNz
UHJveHkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuaW52YWxpZGF0ZSgqdGhpcyk7CiB9
CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6Ondhc1JlZGlyZWN0ZWRU
b1JlcXVlc3QoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCA4MjVmOTA5N2M1
NDQ2YmY5YmFmN2IwMmQ2MTY2NDk0MzRiZDNhZWFkLi45NjA3YTdlN2I2ODM0YjBhNWZmMzc1MDE0
Njk2ZGIzMTkyNjQzNjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNs
dWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAKICNpbmNsdWRlICJBUElDb250ZW50UnVsZUxp
c3QuaCIKKyNpbmNsdWRlICJBUElDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIKICNpbmNs
dWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmgiCiAjaW5jbHVkZSAiQXV0aGVudGlj
YXRpb25NYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1hcC5oIgpAQCAtMzUsNiAr
MzYsNyBAQAogI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgog
I2VuZGlmCisjaW5jbHVkZSAiTGVnYWN5R2xvYmFsU2V0dGluZ3MuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NvbnRlbnRSdWxlTGlzdE1hbmFnZXJNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKQEAgLTQ4LDYgKzUw
LDcgQEAKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRl
ICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50UnVs
ZUxpc3QuaCIKKyNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJX
ZWJQYWdlTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJX
ZWJQcm9jZXNzTWVzc2FnZXMuaCIKQEAgLTU4LDggKzYxLDEwIEBACiAjaW5jbHVkZSAiV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHkuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5oIgogI2lu
Y2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFj
a0FnZ3JlZ2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KIAogI2lm
IEVOQUJMRShTRUNfSVRFTV9TSElNKQpAQCAtNzAsMjAgKzc1LDEyNCBAQAogI2luY2x1ZGUgPHd0
Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNp
bmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIKKyNlbmRpZgorCiAj
ZGVmaW5lIE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0
aW9uLCBjb25uZWN0aW9uKCkpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKLU5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoV2Vi
UHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KHBy
b2Nlc3NQb29sLmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQotICAgICwgbV9wcm9j
ZXNzUG9vbChwcm9jZXNzUG9vbCkKK3N0YXRpYyBIYXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkq
PiYgbmV0d29ya1Byb2Nlc3Nlc1NldCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PE5ldHdvcmtQcm9j
ZXNzUHJveHkqPj4gc2V0OworICAgIHJldHVybiBzZXQ7Cit9CisKK1ZlY3RvcjxSZWY8TmV0d29y
a1Byb2Nlc3NQcm94eT4+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMo
KQoreworICAgIFZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAg
ICBwcm9jZXNzZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXR3b3JrUHJvY2Vzc2VzU2V0KCku
c2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIG5ldHdvcmtQcm9jZXNzIDogbmV0d29ya1Byb2Nlc3Nl
c1NldCgpKQorICAgICAgICBwcm9jZXNzZXMudW5jaGVja2VkQXBwZW5kKCpuZXR3b3JrUHJvY2Vz
cyk7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKworc3RhdGljIFJlZlB0cjxOZXR3b3JrUHJv
Y2Vzc1Byb3h5PiYgZGVmYXVsdFByb2Nlc3MoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxSZWZQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nlc3M7CisgICAgcmV0dXJuIHByb2Nl
c3MuZ2V0KCk7Cit9CisKK1JlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpkZWZhdWx0TmV0d29ya1Byb2Nlc3MoKQoreworICAgIGlmICghZGVmYXVsdFByb2Nlc3Mo
KSkKKyAgICAgICAgZGVmYXVsdFByb2Nlc3MoKSA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0
ZSgpOworICAgIHJldHVybiAqZGVmYXVsdFByb2Nlc3MoKTsKK30KKwordm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp0ZXJtaW5hdGUoKQoreworICAgIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6dGVy
bWluYXRlKCk7CisgICAgaWYgKGF1dG8qIGNvbm5lY3Rpb24gPSB0aGlzLT5jb25uZWN0aW9uKCkp
CisgICAgICAgIGNvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKKyAgICBkaWRUZXJtaW5hdGUoKTsK
K30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRUZXJtaW5hdGUoKQoreworICAgIGlm
ICh0aGlzID09IGRlZmF1bHRQcm9jZXNzKCkuZ2V0KCkpCisgICAgICAgIGRlZmF1bHRQcm9jZXNz
KCkgPSBudWxscHRyOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlv
blBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBh
cHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KKyAgICAvLyBXZSBzaG91
bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sg
b24gb3VyIEFQSXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMDI0Ni4KKyAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7CisgICAgICAgIGNhbGxP
bk1haW5SdW5Mb29wQW5kV2FpdChbdGhpc10geworICAgICAgICAgICAgc2VuZENyZWF0aW9uUGFy
YW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBOZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0
aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJh
bWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xp
Y3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVt
ZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CisgICAgcGFy
YW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsK
KyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1Zl
Y3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJB
c05vQWNjZXNzKCkpOworICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7CisgICAgZm9yIChhdXRvJiBzY2hlbWUg
OiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkp
CisgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2Nv
bHMuYXBwZW5kKHNjaGVtZSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoU3Ry
aW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFn
ZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29r
aWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0g
V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsgIWNvbnRhaW5lckNh
Y2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBh
cmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBp
ZiAoU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRC
dW5kbGVEaXJlY3RvcnkoKTsgIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3Rvcnks
IFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRs
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisjZW5kaWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CisgICAgc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0
ZXJzKSwgMCk7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFj
a2dyb3VuZFByaW9yaXR5KCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJv
Y2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+
YWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNz
UG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKQoreworICAgIGZvciAoYXV0byog
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAg
ICAgaWYgKHByb2Nlc3NQb29sLT5zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KCkKKyAgICA6IEF1eGlsaWFy
eVByb2Nlc3NQcm94eShhbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0
eSgpKQogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCisgICAgLCBt
X2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlUmVmPExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudD4oKSkKICAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJv
eHkoKnRoaXMpCisjZWxzZQorICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFr
ZVVuaXF1ZVJlZjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICNlbmRpZgot
ICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNob3VsZFRha2VVSUJhY2tncm91
bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBhbnlQcm9jZXNzUG9vbFNo
b3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fY29va2llTWFuYWdlcihX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcykpCiB7CiAgICAgY29ubmVjdCgpOwor
ICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICB1cGRhdGVQcm9j
ZXNzQXNzZXJ0aW9uKCk7CisgICAgbmV0d29ya1Byb2Nlc3Nlc1NldCgpLmFkZCh0aGlzKTsKIH0K
IAogTmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkoKQpAQCAtOTgsNiAr
MjA3LDcgQEAgTmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkoKQogCiAg
ICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5p
bnZhbGlkYXRlKCk7CisgICAgbmV0d29ya1Byb2Nlc3Nlc1NldCgpLnJlbW92ZSh0aGlzKTsKIH0K
IAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVu
Y2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1bmNoT3B0aW9ucykKQEAgLTEwNSwxNSArMjE1LDggQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hl
cjo6TGF1bmNoT3B0aW9ucyYgbGF1bmMKICAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID0g
UHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6TmV0d29yazsKICAgICBBdXhpbGlhcnlQcm9j
ZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7CiAKLSAgICBpZiAocHJv
Y2Vzc1Bvb2woKS5zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmcoKSkgewotICAgICAgICBwcm9jZXNzUG9vbCgpLnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1By
b2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhmYWxzZSk7CisgICAgaWYgKFdlYnNpdGVEYXRhU3Rv
cmU6OnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpKQog
ICAgICAgICBsYXVuY2hPcHRpb25zLnNob3VsZE1ha2VQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmcgPSB0cnVlOwotICAgIH0KLQotI2lmIFBMQVRGT1JNKFBMQVlTVEFUSU9OKQotICAgIGxhdW5j
aE9wdGlvbnMucHJvY2Vzc1BhdGggPSBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzUGF0aCgp
OwotICAgIGxhdW5jaE9wdGlvbnMudXNlcklkID0gbV9wcm9jZXNzUG9vbC51c2VySWQoKTsKLSNl
bmRpZgogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNvbm5lY3Rpb25XaWxsT3BlbihJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCkBAIC0xNjYsMTIgKzI2OSwxMiBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3Jv
dW5kKQogICAgIH0KIH0KIAotRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3Jl
YXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUlu
Zm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQorRG93bmxvYWRQcm94eSYgTmV0d29y
a1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRh
U3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFn
ZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAgICAgaWYgKCFtX2Rvd25sb2FkUHJveHlNYXAp
CiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1ha2VVbmlxdWU8RG93bmxvYWRQcm94eU1h
cD4oKnRoaXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxv
YWRQcm94eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJhbWVJ
bmZvLCBvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNy
ZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBwcm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0
LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hP
cHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoV2Vic2l0ZURhdGEp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjM3LDggKzM0MCwxMSBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpCiB7CiAgICAgY2xlYXJDYWxsYmFj
a1N0YXRlcygpOwogCi0gICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIgdG8g
Zm9yZ2V0IGFib3V0IHRoaXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1c2Ug
dXMgdG8gYmUgZGVsZXRlZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hl
ZCgqdGhpcyk7CisgICAgUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IHByb3RlY3RlZFRoaXMoKnRo
aXMpOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJv
Y2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQo
KnRoaXMpOworICAgIGZvciAoYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA6IG1fd2Vic2l0ZURhdGFT
dG9yZXMpCisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0
aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjbGVhckNhbGxiYWNrU3RhdGVz
KCkKQEAgLTI1OCw5ICszNjQsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZQogICAgIGlmIChk
aXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChtX3Byb2Nlc3NQb29sLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVy
KSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzUHJveHlN
ZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQogCkBAIC0yNzQsOCArMzc3LDYgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBJUEMKIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9z
ZShJUEM6OkNvbm5lY3Rpb24mKQogewotICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBt
YWtlUmVmKG1fcHJvY2Vzc1Bvb2wpOwotCiAgICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCkKICAg
ICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5pbnZhbGlkYXRlKCk7CiAjaWYgRU5BQkxFKExFR0FD
WV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKQEAgLTMzMSwxMSArNDMyLDYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2kKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdG9wT3Jp
Z2luIHx8ICFtX3Byb2Nlc3NQb29sLmlzU2VydmljZVdvcmtlclBhZ2VJRChwYWdlSUQpKSB7Ci0g
ICAgICAgIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShzZXNzaW9uSUQsIFdURk1vdmUo
YXV0aGVudGljYXRpb25DaGFsbGVuZ2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAg
IFdlYlBhZ2VQcm94eTo6Zm9yTW9zdFZpc2libGVXZWJQYWdlSWZBbnkoc2Vzc2lvbklELCAqdG9w
T3JpZ2luLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBh
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2Up
LCBuZWdvdGlhdGVkTGVnYWN5VExTXShhdXRvKiBwYWdlKSBtdXRhYmxlIHsKICAgICAgICAgaWYg
KCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM5MiwxMSArNDg4LDYgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVy
KiBsYXVuY2hlciwgSVBDOjpDb24KICAgICAgICAgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAobV9w
cm9jZXNzUG9vbC5wcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpCi0gICAgICAgIHNldFByb2Nl
c3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKICAgICAKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQogICAgIGlmICh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24gPSB0aGlzLT5j
b25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSkKQEAgLTExOTgsNyArMTI4OSw4IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhQ
QUw6OlNlc3Npb25JRCBzZXNzCiB9CiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFp
bnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+
JiYgZG9tYWlucykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLnNldERvbWFpbnNXaXRoVXNlckludGVy
YWN0aW9uKFdURk1vdmUoZG9tYWlucykpOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBX
ZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5z
ZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluPiB7IGRvbWFpbnMgfSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKIApAQCAtMTI0NSw0NSArMTMzNywzMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21w
bGV0aQogICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkZs
dXNoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
LXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9y
ZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihXZWJzaXRl
RGF0YVN0b3JlJiBzdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMuYWRkKHN0b3JlLT5zZXNzaW9u
SUQoKSk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5hZGQoc3RvcmUpOwogCiAgICAgaWYgKGNh
blNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpB
ZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUtPnBhcmFtZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRv
IHNlc3Npb25JRCA9IHN0b3JlLT5zZXNzaW9uSUQoKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkg
fSwgMCk7CisgICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAo
IXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CisgICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBn
cmFkZShzdG9yZS5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgog
ICAgIH0KIH0KIAotYm9vbCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zZXNzaW9uSURzLmNvbnRh
aW5zKHNlc3Npb25JRCk7Ci19Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vz
c2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAg
ICBtX3Nlc3Npb25JRHMucmVtb3ZlKHNlc3Npb25JRCk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jl
cy5yZW1vdmUod2Vic2l0ZURhdGFTdG9yZSk7CiAKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkK
LSAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRlc3Ryb3lTZXNzaW9uIHsg
c2Vzc2lvbklEIH0sIDApOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
RGVzdHJveVNlc3Npb24geyB3ZWJzaXRlRGF0YVN0b3JlLnNlc3Npb25JRCgpIH0sIDApOwogfQog
CiBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3Jl
RnJvbVNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Np
b25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlm
ICghV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAg
ICAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0
b3JlKCk7Ci0gICAgICAgICAgICBpZiAod2Vic2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSA9PSBzZXNzaW9uSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdl
YnNpdGVEYXRhU3RvcmU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0
ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Np
b25JRCk7CisgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9y
U2Vzc2lvbklEKHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0
cmlldmVDYWNoZVN0b3JhZ2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAg
LTEzMzAsNyArMTQwOCw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVdl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJDb250ZW50CiAjaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJD
b250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJiByZWdp
c3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC5lc3Rh
Ymxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoKnRoaXMsIFdURk1v
dmUocmVnaXN0cmFibGVEb21haW4pLCBzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKKyAgICBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBSZWdpc3RyYWJsZURvbWFpbiB7cmVnaXN0cmFibGVE
b21haW59LCBzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3b3JrZXJDb250ZXh0Q29ubmVjdGlvbk5vTG9uZ2VyTmVl
ZGVkKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC0xNDkzLDE2ICsx
NTcxLDM0IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cHJlY29ubmVjdFRvKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgV2ViUGFnZVByb3h5SWRlCiAgICAgc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlByZWNvbm5lY3RUbyhzZXNzaW9uSUQsIHdlYlBhZ2VQcm94eUlELCB3ZWJQ
YWdlSUQsIHVybCwgdXNlckFnZW50LCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0
aW5nVG9BcHBCb3VuZERvbWFpbiksIDApOwogfQogCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9v
bEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bv
b2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHBy
b2Nlc3NQb29sLT5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQ
cm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byog
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAg
ICAgaWYgKHByb2Nlc3NQb29sLT5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKQogewotICAgIGlmIChw
cm9jZXNzUG9vbCgpLmhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQ
cm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVBy
b2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRGb3JlZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21X
ZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9
IHRocm90dGxlcigpLmZvcmVncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgZm9yZWdyb3Vu
ZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvRm9yZWdyb3VuZCgpLCAwKTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0JhY2tncm91bmRX
ZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQ
cm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRCYWNr
Z3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAg
ICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmJhY2tncm91bmRBY3Rp
dml0eSgiTmV0d29ya2luZyBmb3IgYmFja2dyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAg
IHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvQmFj
a2dyb3VuZCgpLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKaW5kZXggNTkwZjU2YzVmYmI5NDdiZjlhNzZmNTNmODYx
MWZhYzM1MTZhNTIyYi4uMDAyMmVlNGQxZjIyYTVkMDBkZGJmNDM1ZDY4ZDVkYTI4ODkwZGE4MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmgKQEAgLTQ2LDEyICs0NiwxNyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAj
aW5jbHVkZSAiWFBDRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRyLmg+
CiAjZW5kaWYKIAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBGb3JtRGF0YVJlZmVyZW5jZTsKIH0K
IAorbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7Cit9
CisKIG5hbWVzcGFjZSBQQUwgewogY2xhc3MgU2Vzc2lvbklEOwogfQpAQCAtNzMsOCArNzgsOCBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERvd25s
b2FkUHJveHlNYXA7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJQYWdl
UHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5OwogCiBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyA6IGJv
b2w7CkBAIC04Niw4ICs5MSw5IEBAIHN0cnVjdCBGcmFtZUluZm9EYXRhOwogc3RydWN0IE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFJlc291cmNlTG9hZEluZm87CiBz
dHJ1Y3QgV2Vic2l0ZURhdGE7CitzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM7CiAK
LWNsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkgZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vz
c1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vh
a1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZp
bmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0
bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4sIHB1
YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB1c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluOwpAQCAtMTAyLDEyICsxMDgsMTggQEAgcHVibGljOgogICAg
IHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluOwogICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluOwogCi0gICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYp
OworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gZGVmYXVsdE5ldHdvcmtQcm9j
ZXNzKCk7CisgICAgc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBjcmVhdGUoKSB7IHJl
dHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtQcm9jZXNzUHJveHkpOyB9CiAgICAgfk5ldHdvcmtQ
cm9jZXNzUHJveHkoKTsKIAorICAgIHN0YXRpYyBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJv
eHk+PiBhbGxOZXR3b3JrUHJvY2Vzc2VzKCk7CisgICAgCisgICAgdm9pZCB0ZXJtaW5hdGUoKSBm
aW5hbDsKKyAgICB2b2lkIGRpZFRlcm1pbmF0ZSgpOworCiAgICAgdm9pZCBnZXROZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94
eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwogCi0gICAgRG93
bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQ
cm94eSogb3JpZ2luYXRpbmdQYWdlKTsKKyAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9h
ZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBXZWJQcm9jZXNzUG9vbCYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9y
aWdpbmF0aW5nUGFnZSk7CiAKICAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9u
SUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRj
aE9wdGlvbj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPiYmKTsKICAgICB2
b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIwNSwxNSArMjE3LDEyIEBAIHB1YmxpYzoKICAg
ICBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSBmaW5hbCB7IHJldHVybiBtX3Rocm90dGxl
cjsgfQogICAgIHZvaWQgdXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwogCi0gICAgV2ViUHJvY2Vz
c1Bvb2wmIHByb2Nlc3NQb29sKCkgeyByZXR1cm4gbV9wcm9jZXNzUG9vbDsgfQotCiAjaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICB2b2lkIGRpZERlc3Ryb3lXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYpOwogI2VuZGlm
CiAKLSAgICB2b2lkIGFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYpOwotICAgIGJv
b2wgaGFzU2Vzc2lvbihQQUw6OlNlc3Npb25JRCkgY29uc3Q7Ci0gICAgdm9pZCByZW1vdmVTZXNz
aW9uKFBBTDo6U2Vzc2lvbklEKTsKKyAgICB2b2lkIGFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9y
ZSYpOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CiAgICAgCiAj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgdm9pZCBjcmVhdGVTeW1MaW5rRm9yRmls
ZVVwZ3JhZGUoY29uc3QgU3RyaW5nJiBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwpAQCAtMjI4
LDYgKzIzNyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3Vz
dG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9y
TGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAKKyAgICB2b2lkIG5ldHdvcmtQ
cm9jZXNzQ3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Npb25J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIHZvaWQgcmVzb3VyY2VMb2Fk
RGlkU2VuZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVzb3VyY2VMb2FkSW5mbyYm
LCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgT3B0aW9uYWw8SVBDOjpGb3JtRGF0YVJlZmVy
ZW5jZT4mJik7CkBAIC0yNDcsNyArMjU4LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUJ1
bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKICAgICB2b2lkIGNsZWFyQnVuZGxlSWRlbnRpZmllcihDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOwogCisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyKCkgeyBy
ZXR1cm4gbV9jb29raWVNYW5hZ2VyLmdldCgpOyB9CisKKyAgICBBUEk6OkN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgeyByZXR1cm4gbV9j
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuZ2V0KCk7IH0KKworI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgIHhwY19vYmplY3RfdCB4cGNFbmRwb2ludE1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBt
X2VuZHBvaW50TWVzc2FnZS5nZXQoKTsgfQorI2VuZGlmCisKIHByaXZhdGU6CisgICAgZXhwbGlj
aXQgTmV0d29ya1Byb2Nlc3NQcm94eSgpOworCisgICAgdm9pZCBzZW5kQ3JlYXRpb25QYXJhbWV0
ZXJzVG9OZXdQcm9jZXNzKCk7CisKICAgICAvLyBBdXhpbGlhcnlQcm9jZXNzUHJveHkKICAgICBB
U0NJSUxpdGVyYWwgcHJvY2Vzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiTmV0d29ya2lu
ZyJfczsgfQogCkBAIC0yNTUsNyArMjc4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbm5lY3Rp
b25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHByb2Nlc3NX
aWxsU2h1dERvd24oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIG5ldHdv
cmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgIHZvaWQgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCiAg
ICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKQEAgLTMxMSwxNiArMzMzLDE3IEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNlc3Np
b25JRCwgUmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+JiYpOwogCi0gICAgV2ViUHJv
Y2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPj4gbV9wZW5kaW5nRmV0Y2hXZWJzaXRlRGF0
YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hNYXA8
Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vi
c2l0ZURhdGFGb3JPcmlnaW5zQ2FsbGJhY2tzOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPERvd25s
b2FkUHJveHlNYXA+IG1fZG93bmxvYWRQcm94eU1hcDsKKworICAgIFVuaXF1ZVJlZjxBUEk6OkN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7
CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKICAgICBMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSBtX2N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Owog
I2VuZGlmCisKICAgICBQcm9jZXNzVGhyb3R0bGVyIG1fdGhyb3R0bGVyOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxQcm9jZXNzVGhyb3R0bGVyOjpCYWNrZ3JvdW5kQWN0aXZpdHk+IG1fYWN0aXZpdHlG
b3JIb2xkaW5nTG9ja2VkRmlsZXM7CiAgICAgUHJvY2Vzc1Rocm90dGxlcjo6QWN0aXZpdHlWYXJp
YW50IG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzOwpAQCAtMzQ2LDkgKzM2OSwxMSBAQCBwcml2
YXRlOgogICAgIHByaXZhdGU6CiAgICAgICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4g
bV9uZXR3b3JrUHJvY2VzczsKICAgICB9OworICAgIE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4g
bV9lbmRwb2ludE1lc3NhZ2U7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8UEFMOjpTZXNzaW9uSUQ+
IG1fc2Vzc2lvbklEczsKKyAgICBXZWFrSGFzaFNldDxXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNp
dGVEYXRhU3RvcmVzOworICAgIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IG1fY29va2llTWFu
YWdlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQpp
bmRleCBiOGRhZWRmN2JlYmExY2Q4MWY2ZTUyNDQ5NjAzMTBmMTMzMTBjMTFlLi4wZTVmYWVjMWIz
YWFlNzkyNDU0YTg5OTAxMmM5Njc0YzNjMmU4NDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQpA
QCAtNTEsOCArNTEsMTEgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRs
ZXI6OmhhbmRsZVhQQ0V2ZW50KHhwY19vYmplY3RfdCBldmVudCkgY28KICAgICBpZiAobWVzc2Fn
ZU5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobWVzc2Fn
ZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2Vy
dmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVzc2FnZU5hbWUpCi0gICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlBy
b2Nlc3MoZXZlbnQpOworICAgIGlmIChtZXNzYWdlTmFtZSA9PSBMYXVuY2hTZXJ2aWNlc0RhdGFi
YXNlWFBDQ29uc3RhbnRzOjp4cGNMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDRW5kcG9pbnRNZXNz
YWdlTmFtZSkgeworICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5tX2VuZHBvaW50TWVzc2FnZSA9
IGV2ZW50OworICAgICAgICBmb3IgKGF1dG8mIGRhdGFTdG9yZSA6IG1fbmV0d29ya1Byb2Nlc3Mt
Pm1fd2Vic2l0ZURhdGFTdG9yZXMpCisgICAgICAgICAgICBkYXRhU3RvcmUuc2VuZE5ldHdvcmtQ
cm9jZXNzWFBDRW5kcG9pbnRUb0FsbFdlYlByb2Nlc3NlcygpOworICAgIH0KIAogICAgIHJldHVy
biB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2ll
TWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5jcHAKaW5kZXggY2M1MjZhYWYzYWFmYjFjMTQ2ZGE0YjI0MTk0NTliMTA5MjAxYjYx
MC4uMDg1ZTdkMjY1YTEzNzM1YmU3YTEyNzhlYzFkZmI2M2ZkNWRkNWQ3MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCkBAIC0yOSw2
ICsyOSw3IEBACiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElTZWN1cml0eU9y
aWdpbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgiCiAj
aW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2ll
TWFuYWdlclByb3h5TWVzc2FnZXMuaCIKQEAgLTM5LDI0ICs0MCwxNiBAQAogbmFtZXNwYWNlIFdl
YktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY29uc3QgY2hhciogV2ViQ29va2ll
TWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSgpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykK
KyAgICA6IG1fbmV0d29ya1Byb2Nlc3MobWFrZVdlYWtQdHIobmV0d29ya1Byb2Nlc3MpKQogewot
ICAgIHJldHVybiAiV2ViQ29va2llTWFuYWdlclByb3h5IjsKLX0KLQotUmVmPFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4gV2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wq
IHByb2Nlc3NQb29sKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFn
ZXJQcm94eShwcm9jZXNzUG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNv
b2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi0gICAgOiBXZWJD
b250ZXh0U3VwcGxlbWVudChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250ZXh0U3VwcGxlbWVu
dDo6cHJvY2Vzc1Bvb2woKS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIG5ldHdvcmtQ
cm9jZXNzLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIH0KIAogV2ViQ29va2llTWFuYWdlclBy
b3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KCkKIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CiAgICAg
QVNTRVJUKG1fY29va2llT2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiB9CiAKQEAgLTY1LDEwMiArNTgs
ODQgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmluaXRpYWxpemVDbGllbnQoY29uc3Qg
V0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSogY2wKICAgICBtX2NsaWVudC5pbml0aWFsaXplKGNs
aWVudCk7CiB9CiAKLS8vIFdlYkNvbnRleHRTdXBwbGVtZW50Ci0KLXZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCgpCi17Ci0gICAgVmVjdG9yPE9ic2VydmVy
Kj4gb2JzZXJ2ZXJzOwotICAgIGZvciAoYXV0byYgb2JzZXJ2ZXJTZXQgOiBtX2Nvb2tpZU9ic2Vy
dmVycy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJT
ZXQpCi0gICAgICAgICAgICBvYnNlcnZlcnMuYXBwZW5kKG9ic2VydmVyKTsKLSAgICB9Ci0KLSAg
ICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJzKQotICAgICAgICBvYnNlcnZlci0+bWFu
YWdlckRlc3Ryb3llZCgpOwotCi0gICAgQVNTRVJUKG1fY29va2llT2JzZXJ2ZXJzLmlzRW1wdHko
KSk7Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xvc2UoV2Vi
UHJvY2Vzc1Byb3h5KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nl
c3NEaWRDbG9zZShOZXR3b3JrUHJvY2Vzc1Byb3h5KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkKLXsKLSAgICBBUEk6Ok9iamVj
dDo6cmVmKCk7Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZXJlZldlYkNvbnRl
eHRTdXBwbGVtZW50KCkKLXsKLSAgICBBUEk6Ok9iamVjdDo6ZGVyZWYoKTsKLX0KLQogdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhvc3RuYW1lc1dp
dGhDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAg
ICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0bmFtZXMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9z
dG5hbWVzKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZXMoc2Vzc2lvbklELCBob3N0bmFtZXMpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQog
ewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJ
Zk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhz
ZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2ll
cyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0
ZUNvb2tpZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENvb2tpZSYgY29va2llLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRv
JiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7
Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBbY2FsbGJhY2tGdW5j
dGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbildKCkgbXV0YWJsZSB7CisgICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llKHNlc3Npb25JRCwg
Y29va2llKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQogICAgICAgICBj
YWxsYmFja0Z1bmN0aW9uKCk7Ci0gICAgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIFdhbGxUaW1lIHRpbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNp
bmNlKHNlc3Npb25JRCwgdGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXNNb2Rp
ZmllZFNpbmNlKHNlc3Npb25JRCwgdGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwor
ICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2Fs
bGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
KCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklE
LCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llKHNlc3Npb25JRCwgY29va2llcyks
IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tG
dW5jdGlvbigpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBj
b25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBtYWluRG9jdW1lbnRVUkwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3Jr
UHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNl
dENvb2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVudFVSTCksIFdURk1v
dmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OlNldENvb2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVu
dFVSTCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2Fs
bGJhY2tGdW5jdGlvbigpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxs
Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAg
bmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpHZXRBbGxDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikp
OworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tp
ZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAg
ICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpnZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5j
dGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFdURk1vdmUoY2FsbGJh
Y2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwog
fQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFu
Z2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5k
VG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNl
c3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RvcE9ic2Vy
dmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nl
c3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vz
c2lvbklEKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdU
Rjo6RnVuY3Rpb248dm9pZCAoKT4mJiBjYWxsYmFjaykKQEAgLTIxMSwxOCArMTg2LDE4IEBAIHZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSNpZiBV
U0UoU09VUCkKLSAgICBwcm9jZXNzUG9vbCgpLT5zZXRJbml0aWFsSFRUUENvb2tpZUFjY2VwdFBv
bGljeShwb2xpY3kpOwotI2VuZGlmCi0KLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2Vu
ZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KHBvbGljeSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kocG9saWN5KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAg
ICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5
OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCit2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFj
Y2VwdFBvbGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29y
a1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpH
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwor
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAg
ZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKEhUVFBDb29raWVBY2NlcHRQb2xpY3k6Ok5l
dmVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCmluZGV4IDBiZGZjMGQ0ZTQ3YzQzNmY1ODVj
ZjI5YzA5ZDUxYTI5YmM4MTFhOWQuLjZmNTFmMDNlNWMwY2E4OTQxMjMzNDM3N2I1NTQzZDgyMmNj
MmZlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eS5oCkBAIC01NiwxMSArNTYsOSBAQCB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkFy
cmF5Kj4gQXJyYXlDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPFdlYkNvcmU6OkhU
VFBDb29raWVBY2NlcHRQb2xpY3k+IEhUVFBDb29raWVBY2NlcHRQb2xpY3lDYWxsYmFjazsKIHR5
cGVkZWYgR2VuZXJpY0NhbGxiYWNrPGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jj4gR2V0
Q29va2llc0NhbGxiYWNrOwogCi1jbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMg
QVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHVibGlj
IFdlYkNvbnRleHRTdXBwbGVtZW50LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK2Ns
YXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpP
YmplY3Q6OlR5cGU6OkNvb2tpZU1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVy
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKLQot
ICAgIHN0YXRpYyBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUHJvY2Vzc1Bv
b2wqKTsKKyAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKE5ldHdv
cmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFdl
YkNvb2tpZU1hbmFnZXJQcm94eShuZXR3b3JrUHJvY2VzcykpOyB9CiAgICAgdmlydHVhbCB+V2Vi
Q29va2llTWFuYWdlclByb3h5KCk7CiAKICAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29uc3Qg
V0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSopOwpAQCAtMTA0LDE3ICsxMDIsMTAgQEAgcHVibGlj
OgogICAgIHVzaW5nIEFQSTo6T2JqZWN0OjpkZXJlZjsKIAogcHJpdmF0ZToKLSAgICBXZWJDb29r
aWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHkoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwogCiAgICAgdm9pZCBjb29raWVzRGlkQ2hhbmdlKFBB
TDo6U2Vzc2lvbklEKTsKIAotICAgIC8vIFdlYkNvbnRleHRTdXBwbGVtZW50Ci0gICAgdm9pZCBw
cm9jZXNzUG9vbERlc3Ryb3llZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgcHJvY2Vzc0RpZENsb3Nl
KFdlYlByb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZvaWQgcHJvY2Vzc0RpZENsb3NlKE5l
dHdvcmtQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlZldlYkNvbnRleHRTdXBw
bGVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkg
b3ZlcnJpZGU7Ci0KICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgogICAgIHZvaWQgZGlkUmVj
ZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAK
QEAgLTEyNSw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQs
IFdURjo6RnVuY3Rpb248dm9pZCAoKT4+IG1fbGVnYWN5Q29va2llT2JzZXJ2ZXJzOwogICAgIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIEhhc2hTZXQ8T2JzZXJ2ZXIqPj4gbV9jb29raWVPYnNlcnZl
cnM7CiAKKyAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7
CiAgICAgV2ViQ29va2llTWFuYWdlclByb3h5Q2xpZW50IG1fY2xpZW50OwogCiAjaWYgVVNFKFNP
VVApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCA1Mjg5NjIz
YzhjMTY2OGUxN2MwOWY3NjNhMjU4M2IxZTYyYjVjYTlhLi5kZDE3ZjIxNDAxNjUyOThlMTY1ZmRi
YmYyZWY3NjFiN2JiNThhNzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAKQEAgLTE3NDYsNyArMTc0Niw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDb250cm9s
bGVkQnlBdXRvbWF0aW9uKGJvb2wgY29udHJvbGxlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbihjb250cm9s
bGVkKSk7Ci0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmRUb05ldHdvcmtpbmdQcm9j
ZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vzc2lvbklzQ29udHJvbGxlZEJ5QXV0
b21hdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBtX2NvbnRyb2xsZWRCeUF1
dG9tYXRpb24pKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vzc2lvbklzQ29udHJvbGxlZEJ5QXV0b21h
dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBtX2NvbnRyb2xsZWRCeUF1dG9t
YXRpb24pLCAwKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNyZWF0ZUluc3BlY3RvclRhcmdl
dChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUg
dHlwZSkKQEAgLTMyMDcsMTEgKzMyMDcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aXNGb3JjZWRJ
bnRvQXBwQm91bmRNb2RlVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPgogdm9p
ZCBXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQ
cm9jZXNzKCkKIHsKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpICYmICFQTEFURk9STShN
QUNDQVRBTFlTVCkKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnBy
b2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9j
ZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNl
V29ya2VyRW50aXRsZW1lbnQoKSwgMCk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5u
ZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNhYmxlU2Vy
dmljZVdvcmtlckVudGl0bGVtZW50KCksIDApOwogI2VuZGlmCiB9CiAKQEAgLTMyMjAsMTMgKzMy
MTYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRP
dmVycmlkZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9N
QUlOUykgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6Q2xlYXJTZXJ2
aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2wo
KS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNl
bmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVu
dGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRP
dmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwogI2VuZGlmCkBAIC00NDIwLDcgKzQ0MTAsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6cHJlY29ubmVjdFRvKGNvbnN0IFVSTCYgdXJsKQogICAgICAgICByZXR1cm47CiAKICAg
ICBhdXRvIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5ID0gbV9jYW5Vc2VDcmVkZW50aWFsU3RvcmFn
ZSA/IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpVc2UgOiBXZWJDb3JlOjpTdG9y
ZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2U7Ci0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9v
bCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkucHJlY29ubmVjdFRvKHNlc3Npb25JRCgpLCBpZGVu
dGlmaWVyKCksIHdlYlBhZ2VJRCgpLCB1cmwsIHVzZXJBZ2VudCgpLCBzdG9yZWRDcmVkZW50aWFs
c1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpKTsKKyAgICB3ZWJzaXRlRGF0
YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5wcmVjb25uZWN0VG8oc2Vzc2lvbklEKCksIGlkZW50
aWZpZXIoKSwgd2ViUGFnZUlEKCksIHVybCwgdXNlckFnZW50KCksIHN0b3JlZENyZWRlbnRpYWxz
UG9saWN5LCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKCkpOwogfQogCiB2b2lkIFdlYlBh
Z2VQcm94eTo6c2V0Q2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCBjYW5Vc2VDcmVkZW50aWFs
U3RvcmFnZSkKQEAgLTQ3MTYsNyArNDcwNiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21t
aXRMb2FkRm9yRnJhbWUoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIEZyYW1lSW5mb0RhdGEmCiAg
ICAgICAgICAgICBSZWdpc3RyYWJsZURvbWFpbiBjdXJyZW50RG9tYWluIHsgY3VycmVudFJlcXVl
c3QudXJsKCkgfTsKICAgICAgICAgICAgIFVSTCByZXF1ZXN0ZXJVUkwgeyBVUkwoKSwgcmVxdWVz
dGVyT3JpZ2luLnRvU3RyaW5nKCkgfTsKICAgICAgICAgICAgIGlmICghY3VycmVudERvbWFpbi5t
YXRjaGVzKHJlcXVlc3RlclVSTCkpCi0gICAgICAgICAgICAgICAgbV9wcm9jZXNzLT5wcm9jZXNz
UG9vbCgpLmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKG1fd2Vic2l0ZURh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxlRG9tYWluIHsgcmVxdWVzdGVyVVJMIH0s
IGN1cnJlbnREb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIG1faWRlbnRpZmllciwgbV93
ZWJQYWdlSUQpOworICAgICAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29ya1By
b2Nlc3MoKS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9
LCBjdXJyZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50aWZpZXIsIG1f
d2ViUGFnZUlEKTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQpAQCAtNDc1NCw3ICs0NzQ0LDcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZShGcmFtZUlkZW50aWZp
ZXIgZnJhbWVJRCwgRnJhbWVJbmZvRGF0YSYKICAgICBpZiAobmF2aWdhdGlvbiAmJiBmcmFtZS0+
aXNNYWluRnJhbWUoKSkgewogICAgICAgICBpZiAoYXV0byYgYWRDbGlja0F0dHJpYnV0aW9uID0g
bmF2aWdhdGlvbi0+YWRDbGlja0F0dHJpYnV0aW9uKCkpIHsKICAgICAgICAgICAgIGlmIChhZENs
aWNrQXR0cmlidXRpb24tPmRlc3RpbmF0aW9uKCkubWF0Y2hlcyhmcmFtZS0+dXJsKCkpKQotICAg
ICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJv
Y2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0dHJpYnV0aW9uKG1f
d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmlidXRpb24pKTsKKyAg
ICAgICAgICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3RvcmVBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRl
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKmFkQ2xpY2tBdHRyaWJ1dGlvbiksIDApOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC01MzY4LDcgKzUzNTgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6bG9n
RnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFdlYkZyYW1lUHJveHkmIGZyYW1lLCBjb25zdCBVUkwmIHBh
ZwogICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8fCBtYWluRnJhbWVIb3N0LmlzRW1wdHko
KSB8fCB0YXJnZXRIb3N0ID09IHNvdXJjZVVSTC5ob3N0KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1lTmF2aWdhdGlvbihtX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHRhcmdldFVSTCB9LCBSZWdpc3Ry
YWJsZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBzb3VyY2VVUkwgfSwg
aXNSZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUoKSwgTW9ub3RvbmljVGltZTo6bm93KCkgLSBt
X2RpZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5GcmFtZVRpbWVzdGFtcCwgd2FzUG90ZW50aWFs
bHlJbml0aWF0ZWRCeVVzZXIpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TG9nRnJhbWVOYXZpZ2F0aW9uKG1f
d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxlRG9tYWluIHsgdGFyZ2V0
VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7
IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5pc01haW5GcmFtZSgpLCBNb25vdG9uaWNU
aW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yTWFpbkZyYW1lVGltZXN0YW1w
LCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlciksIDApOwogfQogI2VuZGlmCiAKQEAgLTk5
OTMsNTggKzk5ODMsMjcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN5c3RlbVByZXZpZXdBY3Rpb25U
cmlnZ2VyZWQoY29uc3QgV2ViQ29yZTo6U3lzdGVtUHJldmlld0luZm8KIAogdm9pZCBXZWJQYWdl
UHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihlbXB0eVN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNp
dGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9u
KG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2Uo
KSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB3ZWJzaXRlRGF0
YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUt
PnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3Rpbmco
Ym9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bv
b2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNh
blNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1
dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJz
aXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9y
VGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1ZSksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tB
dHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewot
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZv
clRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29y
a1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZv
clRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2wo
KS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNl
bmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENsaWNrQXR0cmlidXRp
b25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3Jl
KCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcobV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IGQ5MjZiMzNjYmRmMmJiOGJiOTgwZDYzYzVkYzUy
YWU1MjUwOTI1MjkuLjcxZjFmNjM4ZGMzM2Y0ZTQxODI1NmQ2NjgxY2Y4NDRmODJiOTQxYzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTQ1LDcgKzQ1
LDYgQEAKICNpbmNsdWRlICJMZWdhY3lHbG9iYWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ0lu
aXRpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNs
dWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCkBAIC0xNDMsOCArMTQyLDEwIEBACiAjZW5kaWYK
IAogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPRyhjaGFubmVsLCBmbXQsIC4uLikg
UkVMRUFTRV9MT0coY2hhbm5lbCwgIiVwIC0gV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAj
I19fVkFfQVJHU19fKQorI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19TVEFUSUMo
Y2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HKGNoYW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6
IiBmbXQsICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9H
X0VSUk9SKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPR19FUlJPUihjaGFubmVsLCAiJXAg
LSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIFdF
QlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQoY2hhbm5lbCwgZm10LCAuLi4pIFJF
TEVBU0VfTE9HX0lGKHNlc3Npb25JRC5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgY2hhbm5l
bCwgIiVwIC0gV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorI2Rl
ZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEX1NUQVRJQyhjaGFubmVs
LCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxs
b3dlZCgpLCBjaGFubmVsLCAiV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCAjI19fVkFfQVJHU19fKQog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMjMyLDYg
KzIzMywxMSBAQCBzdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFz
aD4mIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdAogICAgIHJldHVybiBzZXQ7CiB9CiAK
K1ZlY3RvcjxTdHJpbmc+IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3Rv
Y29sSGFuZGxlcnMoKQoreworICAgIHJldHVybiBjb3B5VG9WZWN0b3IoZ2xvYmFsVVJMU2NoZW1l
c1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpOworfQorCiBXZWJQcm9jZXNzUG9vbDo6V2Vi
UHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24p
CiAgICAgOiBtX2NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbi5jb3B5KCkpCiAgICAgLCBtX2Rl
ZmF1bHRQYWdlR3JvdXAoV2ViUGFnZUdyb3VwOjpjcmVhdGUoKSkKQEAgLTIzOSw3ICsyNDUsNiBA
QCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgLCBtX2F1dG9tYXRpb25DbGllbnQobWFrZVVuaXF1
ZTxBUEk6OkF1dG9tYXRpb25DbGllbnQ+KCkpCiAgICAgLCBtX2Rvd25sb2FkQ2xpZW50KG1ha2VV
bmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSkKICAgICAsIG1faGlzdG9yeUNsaWVudCht
YWtlVW5pcXVlPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCkpCi0gICAgLCBtX2N1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50PigpKQogICAgICwgbV92aXNpdGVkTGlua1N0b3JlKFZpc2l0ZWRMaW5rU3Rv
cmU6OmNyZWF0ZSgpKQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAsIG1faGlnaFBlcmZvcm1hbmNl
R3JhcGhpY3NVc2FnZVNhbXBsZXIobWFrZVVuaXF1ZTxIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1Vz
YWdlU2FtcGxlcj4oKnRoaXMpKQpAQCAtMjY3LDkgKzI3Miw2IEBAIFdlYlByb2Nlc3NQb29sOjpX
ZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlv
bikKICNlbmRpZgogICAgIH0pOwogCi0gICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUgJiYgV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAg
IG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpOwotCiAgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBtX2NvbmZpZ3VyYXRpb24tPmFs
d2F5c1JldmFsaWRhdGVkVVJMU2NoZW1lcygpKQogICAgICAgICBtX3NjaGVtZXNUb1JlZ2lzdGVy
QXNBbHdheXNSZXZhbGlkYXRlZC5hZGQoc2NoZW1lKTsKIApAQCAtMjg1LDcgKzI4Nyw2IEBAIFdl
YlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlv
biYgY29uZmlndXJhdGlvbikKICAgICBhZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBy
b2Nlc3NQb29sOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIAogICAgIC8vIE5PVEU6
IFRoZXNlIHN1Yi1vYmplY3RzIG11c3QgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbV9tZXNzYWdlUmVj
ZWl2ZXJNYXAuLgotICAgIGFkZFN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwog
ICAgIGFkZFN1cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRk
U3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAjaWYgRU5BQkxFKE1F
RElBX1NFU1NJT04pCkBAIC0zNDIsOSArMzQzLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6On5XZWJQcm9j
ZXNzUG9vbCgpCiAgICAgcHJvY2Vzc1Bvb2xDb3VudGVyLmRlY3JlbWVudCgpOwogI2VuZGlmCiAK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2h1
dERvd25Qcm9jZXNzKCk7Ci0KICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICBpZiAoIW1fcHJvY2Vz
c2VzVXNpbmdHYW1lcGFkcy5pc0VtcHR5KCkpCiAgICAgICAgIFVJR2FtZXBhZFByb3ZpZGVyOjpz
aW5nbGV0b24oKS5wcm9jZXNzUG9vbFN0b3BwZWRVc2luZ0dhbWVwYWRzKCp0aGlzKTsKQEAgLTQw
MiwxNiArNDAwLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QXV0b21hdGlvbkNsaWVudChz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYKICAgICAgICAgbV9hdXRvbWF0
aW9uQ2xpZW50ID0gV1RGTW92ZShhdXRvbWF0aW9uQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVl
X3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJiBjdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQpCi17Ci0jaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdF
UikKLSAgICBpZiAoIWN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkKLSAgICAgICAgbV9jdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50PigpOwotICAgIGVsc2UKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQgPSBXVEZNb3ZlKGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk7Ci0jZW5kaWYK
LX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5k
bGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJ
ZGVudGlmaWVyKQogewogICAgIC8vIEd1YXJkIGFnYWluc3QgQVBJIG1pc3VzZS4KQEAgLTQyMSwx
MSArNDA5LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZp
Y2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgY3UKICAgICBtX2NvbmZpZ3VyYXRpb24t
PnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjdXN0b21XZWJDb250
ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIpOwogfQogCi1JUEM6OkNvbm5lY3Rpb24qIFdlYlBy
b2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKQotewotICAgIHJldHVybiBt
X25ldHdvcmtQcm9jZXNzLT5jb25uZWN0aW9uKCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
Omxhbmd1YWdlQ2hhbmdlZCh2b2lkKiBjb250ZXh0KQogewogICAgIHN0YXRpY19jYXN0PFdlYlBy
b2Nlc3NQb29sKj4oY29udGV4dCktPmxhbmd1YWdlQ2hhbmdlZCgpOwpAQCAtNDM1LDggKzQxOCw3
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCgpCiB7CiAgICAgc2VuZFRv
QWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
Q2hhbmdlZCgpKTsKICNpZiBVU0UoU09VUCkKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAg
ICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVz
ZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDAp
OworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+bmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdl
c0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CiAjZW5kaWYKIH0KIApAQCAt
NDQ5LDcgKzQzMSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmZ1bGxLZXlib2FyZEFjY2Vzc01v
ZGVDaGFuZ2VkKGJvb2wgZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudChib29sIGlzQ3JpdGljYWwpCiB7CiAgICAgc2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVt
b3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3MoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2
ZW50KGlzQ3JpdGljYWwpKTsKKyAgICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJl
c3N1cmVFdmVudChpc0NyaXRpY2FsKSwgMCk7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCiAgICAgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnNlbmRNZW1vcnlQcmVz
c3VyZUV2ZW50KGlzQ3JpdGljYWwpOwogI2VuZGlmCkBAIC00NzQsMjc1ICs0NTcsOCBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzY3JlZW5Qcm9wZXJ0aWVzU3RhdGVDaGFuZ2VkKCkKICNlbmRpZgog
fQogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1By
b2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUpCi17Ci0gICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRl
bXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4g
dGhyZWFkcy4KLSAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRo
cmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCi0gICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KLSAgICBpZiAoIVJ1bkxvb3A6Omlz
TWFpbigpKSB7Ci0gICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJv
Y2VzcygpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwot
ICAgIH0KLQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIGlmICh3aXRoV2Vi
c2l0ZURhdGFTdG9yZSkgewotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lv
bihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICAgICAgd2l0aFdlYnNp
dGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAgYXV0byBuZXR3b3JrUHJvY2Vz
cyA9IG1ha2VVbmlxdWU8TmV0d29ya1Byb2Nlc3NQcm94eT4oKnRoaXMpOwotCi0gICAgTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLQotICAgIGlmIChtX3dlYnNp
dGVEYXRhU3RvcmUpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5wZW5kaW5nQ29va2llcyA9IGNvcHlUb1ZlY3RvcihtX3dlYnNpdGVEYXRhU3RvcmUtPnBl
bmRpbmdDb29raWVzKCkpOwotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGlu
Z0Nvb2tpZXMoKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBw
bGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0
aW9uKCkuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKCk7Ci0gICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllciA9IG1fd2Vic2l0ZURhdGFTdG9y
ZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcigp
OwotI2VuZGlmCi0gICAgfQotCi0gICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xv
YmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwoKTsKLQotICAgIGZvciAoYXV0byYg
c2NoZW1lIDogZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCi0g
ICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMu
YXBwZW5kKHNjaGVtZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFN0cmluZyBj
b29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJl
Y3RvcnkoKTsKLSAgICBpZiAoIWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rvcnko
Y29va2llU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJlY3Rvcnkg
PSBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAgIGlmICgh
Y29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0Rp
cmVjdG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotCi0gICAgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29s
OjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmVudEJ1bmRsZURpcmVjdG9y
eS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJl
bnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJh
bWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JUZW1wb3JhcnlGaWxlKGVtcHR5U3RyaW5nKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJl
YWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0
YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLSNlbmRpZgot
Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJlID0gY29weVRvVmVj
dG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFz
U2VjdXJlKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2lu
Z0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5n
czo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0
eVBvbGljeSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9
IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1Rv
UmVnaXN0ZXJBc0xvY2FsKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRB
c05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24o
KS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLSAgICAvLyAqKioqKioqKioKLSAgICAvLyBJTVBPUlRBTlQ6IERvIG5vdCBjaGFu
Z2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGluZGV4ZWQgZGF0YWJhc2VzIG9uIGRpc2sg
d2l0aG91dCBmaXJzdCBjb25zdWx0aW5nIGEgcmV2aWV3ZXIgZnJvbSBBcHBsZSAoPHJkYXI6Ly9w
cm9ibGVtLzE3NDU0NzEyPikKLSAgICAvLyAqKioqKioqKioKLSAgICBpZiAobV93ZWJzaXRlRGF0
YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRJbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1ldGVycygpLmluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkgewot
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rv
cnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PmNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7Ci0gICAgfQotI2VuZGlmCi0KLSNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAg
ICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5ID0gIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBhdXRvIGxvY2FsU3RvcmFnZURpcmVjdG9y
eSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRMb2Nh
bFN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAoIWxvY2FsU3RvcmFn
ZURpcmVjdG9yeSkKLSAgICAgICAgbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBs
b2NhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotCi0gICAgYXV0byBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRh
U3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPmNhY2hlU3RvcmFnZURpcmVjdG9yeSgpIDogbnVs
bFN0cmluZygpOwotICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkgewot
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rv
cnkoY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
ID0gV1RGTW92ZShjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOwotICAgIH0KLQotICAgIFN0cmluZyBy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAg
IGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3NE
aXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkt
PnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5LCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
LQotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IGZhbHNlOwotICAgIGJv
b2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IGZhbHNlOwot
ICAgIGJvb2wgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IHRydWU7Ci0gICAgYm9vbCBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFJFU09V
UkNFX0xPQURfU1RBVElTVElDUykKLSAgICBXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBXZWJDb3JlOjpUaGlyZFBhcnR5
Q29va2llQmxvY2tpbmdNb2RlOjpBbGw7Ci0gICAgV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudEVuYWJsZWQgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBXZWJDb3Jl
OjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87Ci0jZW5kaWYKLSAgICBXZWJD
b3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSBmaXJzdFBhcnR5V2Vic2l0ZURh
dGFSZW1vdmFsTW9kZSA9IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
OjpBbGxCdXRDb29raWVzOwotICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHN0YW5kYWxv
bmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluPiBhcHBCb3VuZERvbWFpbnM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gbWFu
dWFsUHJldmFsZW50UmVzb3VyY2U7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBtX3RjY1By
ZWZlcmVuY2VFbmFibGVkID0gZG9lc0FwcEhhdmVJVFBFbmFibGVkKCk7Ci0gICAgaWYgKHdpdGhX
ZWJzaXRlRGF0YVN0b3JlICYmICF3aXRoV2Vic2l0ZURhdGFTdG9yZS0+aXNJdHBTdGF0ZUV4cGxp
Y2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90
Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3Mp
OwotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0YVN0b3JlICYmICFtX3dlYnNpdGVEYXRhU3Rv
cmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIG1fd2Vic2l0
ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlRXhpc3RzKCkgJiYgIVdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3Rv
cmUoKS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgV2Vic2l0
ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7
Ci0jZW5kaWYKLQotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVu
dCA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5oYXNTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7
Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAg
ICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gd2l0aFdlYnNpdGVEYXRh
U3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAg
ICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3Q7Ci0gICAg
ICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZURl
YnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICAg
ICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
c2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZp
cnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlOwotICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluID0gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnN0
YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5kRG9tYWlucyA9
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5hcHBCb3VuZERvbWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5tYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0
aFdlYnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9y
YWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3Jh
Z2VRdW90YSgpOwotICAgICAgICAKLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGly
ZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0
b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJl
Y3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29y
a0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
Lm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBjb25zdCBhdXRvJiBoc3RzU3RvcmFnZURpcmVjdG9yeSA9IHdpdGhXZWJzaXRlRGF0YVN0
b3JlLT5yZXNvbHZlZEhTVFNTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghaHN0c1N0
b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdl
RGlyZWN0b3J5ID0gaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUoaHN0c1N0b3JhZ2VEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNp
b246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsK
LSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fd2Vic2l0ZURhdGFTdG9y
ZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9n
VGVzdGluZ0V2ZW50ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5oYXNTdGF0aXN0aWNzVGVzdGluZ0Nh
bGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gbV93ZWJz
aXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAg
ICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0
OwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5l
bmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAg
ICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tp
ZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFi
bGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJh
bWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOwotI2VuZGlmCi0gICAgICAg
ICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0
ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFp
biA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy5zdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0gICAgICAgICAgICBhcHBCb3VuZERv
bWFpbnMgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMuYXBwQm91bmREb21haW5zOwotICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVz
b3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMubWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90
YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdp
blN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyVGhpcmRQYXJ0eU9yaWdpblN0
b3JhZ2VRdW90YSgpOwotCi0gICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9y
eSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsK
LSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsK
LSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVE
aXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29y
a0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNv
bnN0IGF1dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNv
bHZlZEhTVFNTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghaHN0c1N0b3JhZ2VEaXJl
Y3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5
ID0gaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGUoaHN0c1N0b3JhZ2VEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6
OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3MgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0gICAgICAgIGF1dG8gbmV0d29ya0NhY2hlRGlyZWN0
b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwot
ICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rv
cnk7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVE
aXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29y
a0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICB9Ci0KLSNpZiBIQVZFKENGTkVU
V09SS19BTFRFUk5BVElWRV9TRVJWSUNFKQotICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpodHRw
M0VuYWJsZWQoKSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3Rvcnkg
PSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0QWx0ZXJuYXRpdmVTZXJ2aWNlc0RpcmVjdG9yeSgp
OwotICAgICAgICBpZiAoIXBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeS5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3Jp
dGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRl
cm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5o
dHRwM0VuYWJsZWQgPSB0cnVlOwotICAgIH0KLSNlbmRpZgotICAgIGJvb2wgaXNJdHBTdGF0ZUV4
cGxpY2l0bHlTZXQgPSBmYWxzZTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFy
YW1ldGVycyA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzIHsKLSAgICAgICAgV1RG
TW92ZShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KSwKLSAgICAgICAgV1RGTW92ZShy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKSwKLSAgICAgICAg
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcywKLSAgICAgICAgaXNJdHBTdGF0ZUV4cGxpY2l0
bHlTZXQsCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZl
bnQsCi0gICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QsCi0gICAgICAgIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUsCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKLSAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSwKLSAgICAgICAg
c2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQsCi0jZW5kaWYKLSAgICAgICAgZmlyc3RQ
YXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUsCi0gICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlv
bkRvbWFpbiwKLSAgICAgICAgYXBwQm91bmREb21haW5zLAotICAgICAgICBtYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSwKLSAgICB9OwotCi0gICAgLy8gQWRkIGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBw
YXJhbWV0ZXJzCi0gICAgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVy
cyk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBuZXR3b3JrIHByb2Nlc3MuCi0gICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MocGFyYW1ldGVycyksIDApOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbmV0
d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRRT1MobmV0d29y
a1Byb2Nlc3NMYXRlbmN5UU9TKCksIG5ldHdvcmtQcm9jZXNzVGhyb3VnaHB1dFFPUygpKSwgMCk7
Ci0jZW5kaWYKLQotICAgIG5ldHdvcmtQcm9jZXNzLT51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7
Ci0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdlYnNpdGVEYXRhU3RvcmUpKTsKLSAgICAgICAg
d2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICB9Ci0KLSAg
ICAvLyBNYWtlIHN1cmUgdGhlIG5ldHdvcmsgcHJvY2VzcyBrbm93cyBhYm91dCBhbGwgdGhlIHNl
c3Npb25zIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgYmVmb3JlIGl0IHN0YXJ0ZWQuCi0gICAg
Zm9yIChhdXRvJiBzZXNzaW9uSUQgOiBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAua2V5cygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhp
c3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigqd2Vic2l0ZURhdGFTdG9yZSk7Ci0gICAg
fQotCi0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IFdURk1vdmUobmV0d29ya1Byb2Nlc3MpOwotICAg
IHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0
d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzUHJv
eHkpCiB7Ci0gICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOwotICAgIEFTU0VSVCgmbmV0d29y
a1Byb2Nlc3NQcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsKLQogICAgIGZvciAoYXV0
byYgc3VwcGxlbWVudCA6IG1fc3VwcGxlbWVudHMudmFsdWVzKCkpCiAgICAgICAgIHN1cHBsZW1l
bnQtPnByb2Nlc3NEaWRDbG9zZSgmbmV0d29ya1Byb2Nlc3NQcm94eSk7CiAKQEAgLTc1MSw5ICs0
NjcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29y
a1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcgogICAgIGlmIChtX2F1dG9tYXRpb25TZXNz
aW9uKQogICAgICAgICBtX2F1dG9tYXRpb25TZXNzaW9uLT50ZXJtaW5hdGUoKTsKIAotICAgIC8v
IExlYXZlIHRoZSBwcm9jZXNzIHByb3h5IGFyb3VuZCBkdXJpbmcgY2xpZW50IGNhbGwsIHNvIHRo
YXQgdGhlIGNsaWVudCBjb3VsZCBxdWVyeSB0aGUgcHJvY2VzcyBpZGVudGlmaWVyLgotICAgIG1f
bmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOwotCiAgICAgdGVybWluYXRlU2VydmljZVdvcmtlcnMo
KTsKIH0KIApAQCAtNzY0LDIwICs0NzcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNl
V29ya2VyUHJvY2Vzc0NyYXNoZWQoV2ViUHJvY2Vzc1Byb3h5JiBwcm94eSkKICNlbmRpZgogfQog
Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJv
Y2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6Okdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCi17Ci0gICAg
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1Byb3h5LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cigqdGhpcyksIHdlYlByb2Nlc3NQcm94eSA9IG1ha2VXZWFrUHRyKHdlYlByb2Nlc3NQ
cm94eSksIHJlcGx5ID0gV1RGTW92ZShyZXBseSldIChhdXRvJiBjb25uZWN0aW9uSW5mbykgbXV0
YWJsZSB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghSVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVy
SXNWYWxpZChjb25uZWN0aW9uSW5mby5pZGVudGlmaWVyKCkpICYmIHdlYlByb2Nlc3NQcm94eSAm
JiB3ZWFrVGhpcykpIHsKLSAgICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0VS
Uk9SKFByb2Nlc3MsICJnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246IEZhaWxlZCBmaXJzdCBh
dHRlbXB0LCByZXRyeWluZyIpOwotICAgICAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsK
LSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bigqd2ViUHJvY2Vzc1Byb3h5LCBXVEZNb3ZlKHJlcGx5KSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgcmVwbHkoY29ubmVjdGlvbkluZm8pOwotICAgIH0pOwotfQot
CiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z3B1UHJvY2Vz
c0NyYXNoZWQoUHJvY2Vzc0lEIGlkZW50aWZpZXIpCiB7CkBAIC04MDEsMjMgKzUwMCwyNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpnZXRHUFVQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJv
eHkmIHdlYlByb2Nlc3NQcm94eSwgTQogfQogI2VuZGlmCiAKK2Jvb2wgV2ViUHJvY2Vzc1Bvb2w6
OnNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IGZhbHNlOworCiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmIHByb3h5
LCBSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9tYWluLCBQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKLSAgICBBU1NFUlRfVU5VU0VEKHByb3h5LCAmcHJveHkgPT0gbV9uZXR3b3JrUHJvY2Vzcy5n
ZXQoKSk7CisgICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4
aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgaWYgKCF3ZWJzaXRl
RGF0YVN0b3JlKQorICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOworICAgIGlmICghcHJvY2Vzc1Bvb2xzKCkuc2l6ZSgp
KQorICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmPFdlYlByb2Nlc3NQb29sPj4gc2Vy
dmljZVdvcmtlclByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoQVBJOjpQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb246OmNyZWF0ZSgpLmdldCgpKSk7CiAKLSAgICBhdXRvKiB3ZWJzaXRl
RGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3Jl
Rm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7Ci0KLSAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpIHsK
LSAgICAgICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgICAgICBtX3dlYnNpdGVE
YXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5w
dHIoKTsKLSAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSA9IG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQo
KTsKLSAgICB9CisgICAgLy8gQXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdCBwcm9jZXNzIHBv
b2wgdG8gaG9zdCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vzcy4KKyAgICBhdXRvKiBwcm9jZXNz
UG9vbCA9IHByb2Nlc3NQb29scygpWzBdOworICAgIEFTU0VSVChwcm9jZXNzUG9vbCk7CiAKICAg
ICBXZWJQcm9jZXNzUHJveHkqIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgeyBudWxscHRyIH07
Ci0gICAgaWYgKCFtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKLSAgICAgICAg
Zm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGlmIChwcm9j
ZXNzID09IG1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9jZXNzLT5pc0R1bW15UHJvY2Vzc1Byb3h5
KCkpCisKKyAgICBpZiAoIXNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgeworICAg
ICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMpIHsKKyAg
ICAgICAgICAgIGlmIChwcm9jZXNzID09IHByb2Nlc3NQb29sLT5tX3ByZXdhcm1lZFByb2Nlc3Mg
fHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94eSgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgaWYgKCZwcm9jZXNzLT53ZWJzaXRlRGF0YVN0b3JlKCkgIT0gd2Vi
c2l0ZURhdGFTdG9yZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTgyNSwzNSArNTI3
LDM1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0
aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgPSBwcm9jZXNzLmdldCgp
OwotICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZW5hYmxlU2VydmljZVdv
cmtlcnModXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkp
OworICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZW5hYmxlU2VydmljZVdv
cmtlcnMocHJvY2Vzc1Bvb2wtPnVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2
aWNlV29ya2VycygpKTsKIAotICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0df
SUZfQUxMT1dFRChTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzIHJldXNpbmcgYW4gZXhpc3Rpbmcgd2ViIHByb2Nlc3MgKHByb2Nl
c3M9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIFdFQlBST0NF
U1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJlc3Rh
Ymxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgcmV1c2luZyBhbiBl
eGlzdGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVy
KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIXNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpIHsKLSAgICAgICAgYXV0byBuZXdQcm9jZXNzUHJveHkg
PSBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZUZvclNlcnZpY2VXb3JrZXJzKCp0aGlzLCBXVEZNb3Zl
KHJlZ2lzdHJhYmxlRG9tYWluKSwgKndlYnNpdGVEYXRhU3RvcmUpOworICAgICAgICBhdXRvIG5l
d1Byb2Nlc3NQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMo
KnByb2Nlc3NQb29sLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgKndlYnNpdGVEYXRhU3Rv
cmUpOwogICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5ID0gbmV3UHJvY2Vzc1Byb3h5
LnB0cigpOwogCi0gICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQo
U2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3Jr
UHJvY2VzcyBjcmVhdGluZyBhIG5ldyBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzIChwcm9jZXM9JXAs
IFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKKyAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVM
RUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyBjcmVhdGluZyBhIG5ldyBzZXJ2aWNl
IHdvcmtlciBwcm9jZXNzIChwcm9jZXM9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsK
IAotICAgICAgICBpbml0aWFsaXplTmV3V2ViUHJvY2VzcyhuZXdQcm9jZXNzUHJveHksIHdlYnNp
dGVEYXRhU3RvcmUpOwotICAgICAgICBtX3Byb2Nlc3Nlcy5hcHBlbmQoV1RGTW92ZShuZXdQcm9j
ZXNzUHJveHkpKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPmluaXRpYWxpemVOZXdXZWJQcm9jZXNz
KG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFTdG9yZSk7CisgICAgICAgIHByb2Nlc3NQb29s
LT5tX3Byb2Nlc3Nlcy5hcHBlbmQoV1RGTW92ZShuZXdQcm9jZXNzUHJveHkpKTsKICAgICB9CiAK
LSAgICBBU1NFUlQoIW1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb250YWlucygqc2VydmljZVdv
cmtlclByb2Nlc3NQcm94eSkpOwotICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5hZGQoKnNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpOworICAgIEFTU0VSVCghc2VydmljZVdvcmtlclByb2Nl
c3NlcygpLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSk7CisgICAgc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcygpLmFkZCgqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSk7CiAKLSAg
ICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lc3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4
dChtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA/IG1fc2VydmljZVdvcmtlclByZWZlcmVuY2Vz
LnZhbHVlKCkgOiBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuc3RvcmUoKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGlmICghbV9zZXJ2aWNlV29ya2VyVXNlckFn
ZW50LmlzTnVsbCgpKQotICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5zZXRTZXJ2
aWNlV29ya2VyVXNlckFnZW50KG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CisgICAgc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eS0+ZXN0YWJsaXNoU2VydmljZVdvcmtlckNvbnRleHQocHJvY2Vz
c1Bvb2wtPm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzID8gcHJvY2Vzc1Bvb2wtPm1fc2Vydmlj
ZVdvcmtlclByZWZlcmVuY2VzLnZhbHVlKCkgOiBwcm9jZXNzUG9vbC0+bV9kZWZhdWx0UGFnZUdy
b3VwLT5wcmVmZXJlbmNlcygpLnN0b3JlKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
KyAgICBpZiAoIXByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxsKCkp
CisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3JrZXJVc2Vy
QWdlbnQocHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CiB9CiAKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKFdlYlByb2Nl
c3NQcm94eSYgcHJvY2VzcykKIHsKLSAgICBBU1NFUlQobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
LmNvbnRhaW5zKHByb2Nlc3MpKTsKLSAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMucmVtb3Zl
KHByb2Nlc3MpOworICAgIEFTU0VSVChzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29udGFpbnMo
cHJvY2VzcykpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5yZW1vdmUocHJvY2Vzcyk7
CiB9CiAjZW5kaWYKIApAQCAtOTIyLDcgKzYyNCw3IEBAIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+
IFdlYlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2FybWVkUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3Jl
CiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCiAgICAgLy8gSW4gcGxhdGZvcm1z
IHVzaW5nIEJ1YmJsZXdyYXAgZm9yIHNhbmRib3hpbmcsIHByZXdhcm1lZCBwcm9jZXNzIGlzIGxh
dW5jaGVkIHVzaW5nIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IFdlYnNpdGVEYXRhU3RvcmUs
CiAgICAgLy8gc28gd2UgZG9uJ3QgdXNlIGl0IGluIGNhc2Ugb2YgdXNpbmcgYSBkaWZmZXJlbnQg
V2Vic2l0ZURhdGFTdG9yZS4KLSAgICBpZiAobV9zYW5kYm94RW5hYmxlZCAmJiBtX3dlYnNpdGVE
YXRhU3RvcmUgJiYgbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpICE9ICZ3ZWJzaXRlRGF0YVN0b3Jl
KQorICAgIGlmIChtX3NhbmRib3hFbmFibGVkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNl
bmRpZgogCkBAIC0xMDMyLDggKzczNCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxp
emVOZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcywgV2Vic2l0ZURhCiAgICAg
ICAgIHByb2Nlc3MuaXNSZXNwb25zaXZlKFtpbml0aWFsaXphdGlvbkFjdGl2aXR5ID0gV1RGTW92
ZShpbml0aWFsaXphdGlvbkFjdGl2aXR5KV0gKGJvb2wpIHsgfSk7CiAgICAgfSk7CiAKLSAgICBl
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyBwYXJhbWV0ZXJzOwogCiAgICAgcGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGggPSBtX3Jl
c29sdmVkUGF0aHMuaW5qZWN0ZWRCdW5kbGVQYXRoOwpAQCAtMTE5OCw5ICs4OTgsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94
eSogcHJvY2VzcykKICAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5pZ25vcmVUaW1lb3V0
c0ZvclRlc3RpbmcoKTsKIAogICAgIG1fY29ubmVjdGlvbkNsaWVudC5kaWRDcmVhdGVDb25uZWN0
aW9uKHRoaXMsIHByb2Nlc3MtPndlYkNvbm5lY3Rpb24oKSk7Ci0KLSAgICBpZiAobV93ZWJzaXRl
RGF0YVN0b3JlKQotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPmRpZENyZWF0ZU5ldHdvcmtQ
cm9jZXNzKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpc2Nvbm5lY3RQcm9jZXNzKFdl
YlByb2Nlc3NQcm94eSogcHJvY2VzcykKQEAgLTEyOTUsMTAgKzk5Miw3IEBAIFJlZjxXZWJQYWdl
UHJveHk+IFdlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VDbGll
bnQsIFJlZjxBUEk6CiAgICAgaWYgKCFwYWdlQ29uZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9y
ZSgpKSB7CiAgICAgICAgIC8vIFdlIHRyeSB0byBhdm9pZCBjcmVhdGluZyB0aGUgZGVmYXVsdCBk
YXRhIHN0b3JlIGFzIGxvbmcgYXMgcG9zc2libGUuCiAgICAgICAgIC8vIEJ1dCBpZiB0aGVyZSBp
cyBhbiBhdHRlbXB0IHRvIGNyZWF0ZSBhIHdlYiBwYWdlIHdpdGhvdXQgYW55IHNwZWNpZmllZCBk
YXRhIHN0b3JlLCB0aGVuIHdlIGhhdmUgdG8gY3JlYXRlIGl0LgotICAgICAgICBpZiAoIW1fd2Vi
c2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotCi0gICAgICAgIHBh
Z2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKG1fd2Vic2l0ZURhdGFTdG9yZS5n
ZXQoKSk7CisgICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpKTsKICAgICB9
CiAKICAgICBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBwcm9jZXNzOwpAQCAtMTMyOSw3ICsxMDIz
LDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UoUGFn
ZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSToKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
CiAgICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcykgewogICAgICAgICBtX3NlcnZp
Y2VXb3JrZXJQcmVmZXJlbmNlcyA9IHBhZ2UtPnByZWZlcmVuY2VzU3RvcmUoKTsKLSAgICAgICAg
Zm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cykKKyAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzZXMoKSkKICAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzLnVwZGF0ZVNl
cnZpY2VXb3JrZXJQcmVmZXJlbmNlc1N0b3JlKCptX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyk7
CiAgICAgfQogICAgIGlmICh1c2VyQ29udGVudENvbnRyb2xsZXIpCkBAIC0xMzU2LDcgKzEwNTAs
NyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KGNv
bnN0IFN0cmluZyYgdXNlckFnZW50KQogICAgIGlmIChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQg
PT0gdXNlckFnZW50KQogICAgICAgICByZXR1cm47CiAgICAgbV9zZXJ2aWNlV29ya2VyVXNlckFn
ZW50ID0gdXNlckFnZW50OwotICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBt
X3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMpCisgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJv
Y2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgc2VydmljZVdvcmtlclBy
b2Nlc3Muc2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQp
OwogfQogI2VuZGlmCkBAIC0xMzY1LDE1ICsxMDU5LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFn
ZUkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5hZGQoZGF0YVN0
b3JlLnNlc3Npb25JRCgpLCBIYXNoU2V0PFdlYlBhZ2VQcm94eUlkZW50aWZpZXI+KCkpLml0ZXJh
dG9yLT52YWx1ZS5hZGQocGFnZUlEKTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0
LmlzTmV3RW50cnkpOwotCi0gICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklE
KCk7Ci0gICAgaWYgKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25J
RCgpKSB7Ci0gICAgICAgIEFTU0VSVCghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgfHwgZGF0YVN0
b3JlLnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEID09IHNl
c3Npb25JRCk7Ci0gICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoZGF0YVN0b3JlKSk7Ci0gICAgICAg
ICAgICBkYXRhU3RvcmUuY2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgfQog
fQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdlRW5kVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdl
YlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUp
CkBAIC0xNDAxLDcgKzEwODYsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNQYWdlc1VzaW5n
V2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpCiBEb3dubG9hZFBy
b3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3Jl
LCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCiB7CiAgICAgYXV0byYgZG93
bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCByZXF1ZXN0LCBpbml0
aWF0aW5nUGFnZSwgeyB9KTsKLSAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBkYXRhU3Rv
cmUuc2Vzc2lvbklEKCk7CiAKICAgICBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFp
bj4gaXNBcHBCb3VuZCA9IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpObzsKICAgICBpZiAo
aW5pdGlhdGluZ1BhZ2UpIHsKQEAgLTE0MTEsMjYgKzEwOTUsMjMgQEAgRG93bmxvYWRQcm94eSYg
V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2Vi
UGFnZVByb3gKICNlbmRpZgogICAgIH0KIAotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAg
Ly8gUmVxdWVzdCdzIGZpcnN0UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5h
bCBVUkwgb2YgdGhlIGRvd25sb2FkIHJlcXVlc3QuCi0gICAgICAgIC8vIFdlIHNldCB0aGUgdmFs
dWUgdG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJMLgotICAgICAgICBpZiAoaW5pdGlhdGluZ1Bh
Z2UpIHsKLSAgICAgICAgICAgIFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0s
IGluaXRpYXRpbmdQYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKLSAgICAgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsK
LSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVE
b21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAg
ICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1l
OjpVc2VyQWdlbnQpKQotICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2Vy
QWdlbnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2VudEZvclVSTChyZXF1ZXN0LnVybCgpKSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5
Rm9yQ29va2llcyhVUkwoKSk7Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVT
aXRlKGZhbHNlKTsKLSAgICAgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQotICAgICAgICAgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2Vu
dCgpKTsKLSAgICAgICAgfQotICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1RvcFNpdGUoZmFs
c2UpOwotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6RG93bmxvYWRSZXF1ZXN0KHNlc3Npb25JRCwgZG93bmxvYWRQcm94eS5kb3dubG9hZElE
KCksIHVwZGF0ZWRSZXF1ZXN0LCBpc0FwcEJvdW5kLCBzdWdnZXN0ZWRGaWxlbmFtZSksIDApOwot
ICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKKyAgICBSZXNvdXJjZVJlcXVlc3QgdXBkYXRl
ZFJlcXVlc3QocmVxdWVzdCk7CisgICAgLy8gUmVxdWVzdCdzIGZpcnN0UGFydHlGb3JDb29raWVz
IHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwgb2YgdGhlIGRvd25sb2FkIHJlcXVlc3QuCisg
ICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3AgbGV2ZWwgZG9jdW1lbnQncyBVUkwuCisgICAg
aWYgKGluaXRpYXRpbmdQYWdlKSB7CisgICAgICAgIFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVS
TCB7IFVSTCB7IH0sIGluaXRpYXRpbmdQYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKKyAg
ICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1Bh
Z2VVUkwpOworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGFyZVJlZ2lzdHJh
YmxlRG9tYWluc0VxdWFsKGluaXRpYXRpbmdQYWdlVVJMLCByZXF1ZXN0LnVybCgpKSk7CisgICAg
ICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1l
OjpVc2VyQWdlbnQpKQorICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2Vu
dChpbml0aWF0aW5nUGFnZS0+dXNlckFnZW50Rm9yVVJMKHJlcXVlc3QudXJsKCkpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhV
UkwoKSk7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOworICAg
ICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6VXNlckFnZW50KSkKKyAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdl
bnQoV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudCgpKTsKICAgICB9CisgICAgdXBkYXRl
ZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZhbHNlKTsKKyAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RG93bmxvYWRSZXF1ZXN0KGRhdGFT
dG9yZS5zZXNzaW9uSUQoKSwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1
ZXN0LCBpc0FwcEJvdW5kLCBzdWdnZXN0ZWRGaWxlbmFtZSksIDApOwogCiAgICAgcmV0dXJuIGRv
d25sb2FkUHJveHk7CiB9CkBAIC0xNDM4LDE3ICsxMTE5LDEyIEBAIERvd25sb2FkUHJveHkmIFdl
YlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBh
Z2VQcm94CiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6cmVzdW1lRG93bmxvYWQoV2Vi
c2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBj
b25zdCBBUEk6OkRhdGEmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBh
dXRvJiBkb3dubG9hZFByb3h5ID0gY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIFJlc291
cmNlUmVxdWVzdCgpLCBpbml0aWF0aW5nUGFnZSwgeyB9KTsKLSAgICBQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7CiAKICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZTsKICAgICBpZiAoIXBhdGguaXNFbXB0eSgp
KQogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGF0aCwgU2FuZGJveEV4
dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAg
IGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChzZXNzaW9uSUQsIGRvd25s
b2FkUHJveHkuZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwg
c2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOwotICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94
eTsKLSAgICB9Ci0KKyAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBk
b3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBh
dGgsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKICAgICByZXR1cm4gZG93bmxvYWRQcm94
eTsKIH0KIApAQCAtMTUxNywxMSArMTE5Myw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZnJl
c2hQbHVnaW5zKCkKIAogI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogCi1Q
cm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpCi17Ci0g
ICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MgPyBtX25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzSWRl
bnRpZmllcigpIDogMDsKLX0KLQogUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpwcmV3YXJtZWRQ
cm9jZXNzSWRlbnRpZmllcigpCiB7CiAgICAgcmV0dXJuIG1fcHJld2FybWVkUHJvY2VzcyA/IG1f
cHJld2FybWVkUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7CkBAIC0xNTU4LDE0ICsx
MjI5LDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUo
Y29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNp
bmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKTsKICAgICBzZW5k
VG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNT
ZWN1cmUodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSkpOwor
ICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVd
IChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdv
cmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2No
ZW1lQXNTZWN1cmUodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3ko
Y29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNp
bmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xp
Y3kodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nl
c3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJs
U2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5
KHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0
b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAg
ZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2No
ZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpblJl
bGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBA
IC0xNTc4LDE0ICsxMjUzLDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2No
ZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxT
ZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSk7
CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVS
TFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3Mo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2No
ZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3Vy
bFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3Rv
cmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0
ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MoY29uc3QgU3RyaW5nJiB1
cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lz
dGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNj
aGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSkpOworICAgIFdlYnNp
dGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRl
RGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0Fj
Y2Vzcyh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3BsYXlJc29sYXRlZChjb25zdCBTdHJpbmcmIHVybFNjaGVt
ZSkKQEAgLTE2MDYsMTAgKzEyODUsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3Rlckds
b2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25zdAogICAgICAg
ICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxl
cnMoKS5hZGQodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogYWxsUHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVn
aXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwotICAgIH0KKyAg
ICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3
b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdpc3RlclNjaGVtZUZv
ckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxl
cnMoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNjE4LDEwICsxMjk1LDggQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJv
dG9jb2xIYW5kbGVycyhjb24KICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2xvYmFsVVJMU2NoZW1l
c1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkucmVtb3ZlKHVybFNjaGVtZSk7Ci0gICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Q
cm90b2NvbCh1cmxTY2hlbWUpOwotICAgIH0KKyAgICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3Mg
OiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJs
U2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Nh
Y2hlUGFydGl0aW9uZWQoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNjU1LDE2ICsxMzMw
LDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNo
ZU1vZGVsKQogCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpT
ZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpKTsKIAotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQot
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9y
RWFjaFdlYnNpdGVEYXRhU3RvcmUoW2NhY2hlTW9kZWxdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRh
U3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCksIDApOworICAgIH0p
OwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZv
clRlc3RpbmcoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogewogICAgIHVwZGF0ZUJhY2tGb3J3YXJk
Q2FjaGVDYXBhY2l0eSgpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2Fj
aGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKGNhY2hlTW9kZWwpLCB7IH0sIHsgfSk7Cisg
ICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW2NhY2hlTW9kZWxd
IChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdv
cmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1v
ZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgMCk7CisgICAgfSk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVy
dmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCkBAIC0xNjc0LDEyICsxMzUxLDcgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIHRp
bWVvdXRJbnRlcnZhbCkKIAogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURv
d25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlLCBjb25zdCBGcmFt
ZUluZm9EYXRhJiBmcmFtZUluZm8pCiB7Ci0gICAgcmV0dXJuIGVuc3VyZU5ldHdvcmtQcm9jZXNz
KCZkYXRhU3RvcmUpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCByZXF1ZXN0LCBmcmFt
ZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN5bnRo
ZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQotewotICAgIGVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKKyAgICBy
ZXR1cm4gZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRh
U3RvcmUsICp0aGlzLCByZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFkZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlJlY2VpdmVyTmFt
ZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2Vp
dmVyKQpAQCAtMTc1MCwzMCArMTQyMiw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN0b3BNZW1v
cnlTYW1wbGVyKCkKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6
OlN0b3BNZW1vcnlTYW1wbGVyKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKFQm
JiBtZXNzYWdlLCBVJiYgcmVwbHkpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9u
ZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+c2VuZFN5bmMoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCBzdGQ6OmZvcndhcmQ8VT4ocmVw
bHkpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFs
cyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKQotewotICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9uSUQpLCAwKTsKLX0KLQotdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQotewotICAgIHRlcm1p
bmF0ZVNlcnZpY2VXb3JrZXJzKCk7Ci0KLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBtX25ldHdvcmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsKLSAg
ICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
dGVybWluYXRlQWxsV2ViQ29udGVudFByb2Nlc3NlcygpCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxX
ZWJQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXMgPSBtX3Byb2Nlc3NlczsKQEAgLTE3ODEsNDAgKzE0
MjksMTUgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlQWxsV2ViQ29udGVudFByb2Nl
c3NlcygpCiAgICAgICAgIHByb2Nlc3MtPnRlcm1pbmF0ZSgpOwogfQogCi12b2lkIFdlYlByb2Nl
c3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFt
X25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoKTsKLQot
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcmVwYXJlVG9TdXNwZW5kKElzU3VzcGVuc2lvbklt
bWluZW50OjpObywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCi12b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0
aW5nKCkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7Ci19Ci0K
LXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpCi17Ci0g
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQ
cm9jZXNzRGlkUmVzdW1lKCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZVNl
cnZpY2VXb3JrZXJzKCkKIHsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgYXV0byBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7Ci0gICAgd2hpbGUgKG1fc2VydmljZVdvcmtl
clByb2Nlc3Nlcy5jb21wdXRlU2l6ZSgpKQotICAgICAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMuYmVnaW4oKS0+ZGlzYWJsZVNlcnZpY2VXb3JrZXJzKCk7CisgICAgd2hpbGUgKHNlcnZpY2VX
b3JrZXJQcm9jZXNzZXMoKS5jb21wdXRlU2l6ZSgpKQorICAgICAgICBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc2VzKCkuYmVnaW4oKS0+ZGlzYWJsZVNlcnZpY2VXb3JrZXJzKCk7CiAjZW5kaWYKIH0KIAot
dm9pZCBXZWJQcm9jZXNzUG9vbDo6Zmx1c2hDb29raWVzKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBz
ZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
LXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmZsdXNoQ29va2llcyhzZXNzaW9uSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBk
YXRlQXV0b21hdGlvbkNhcGFiaWxpdGllcygpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFJFTU9URV9J
TlNQRUNUT1IpCkBAIC0yMDg5LDE1ICsxNzEyLDIxIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJl
cG9ydFdlYkNvbnRlbnRDUFVUaW1lKFNlY29uZHMgY3B1VGltZSwgdWludDY0X3QgYWN0aXZpdHlT
CiAjZW5kaWYKIH0KIAorV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiYgV2ViUHJvY2Vzc1Bv
b2w6OnNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXM7CisgICAgcmV0dXJuIHBy
b2Nlc3NlczsKK30KKwogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlv
bnMoKQogewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkudXBkYXRlUHJvY2Vzc0Fzc2VydGlv
bigpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtdIChX
ZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQ
cm9jZXNzKCkudXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOworICAgIH0pOwogI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKICAgICAvLyBDaGVjayBvbiBuZXh0IHJ1biBsb29wIHNpbmNlIHRoZSB3
ZWIgcHJvY2VzcyBwcm94eSB0b2tlbnMgYXJlIHByb2JhYmx5IGJlaW5nIHVwZGF0ZWQuCi0gICAg
Y2FsbE9uTWFpblJ1bkxvb3AoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyldIHsK
LSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZm9y
IChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtlclByb2Nlc3NlcykK
KyAgICBjYWxsT25NYWluUnVuTG9vcChbXSB7CisgICAgICAgIGZvciAoYXV0byYgc2VydmljZVdv
cmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgICAgICBzZXJ2
aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzc0Fzc2VydGlvbigpOwog
ICAgIH0pOwogI2VuZGlmCkBAIC0yMTA3LDcgKzE3MzYsNyBAQCBib29sIFdlYlByb2Nlc3NQb29s
Ojppc1NlcnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQpIGNv
bnN0CiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIC8vIEZJWE1FOiBUaGlzIGlz
IGluZWZmaWNpZW50LgotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nl
c3NlcywgW3BhZ2VJRF0oYXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNl
cnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW3BhZ2VJRF0oYXV0byYgcHJvY2VzcykgewogICAgICAg
ICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyUGFnZVByb3h5KHBhZ2VJRCk7CiAgICAg
fSk7CiAjZW5kaWYKQEAgLTIzMjksMTQgKzE5NTgsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpj
bGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpCiB9CiAKICNpZiBFTkFCTEUoUkVT
T1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jv
c3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IHRvRG9tYWluLCBPcHRpb25TZXQ8Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6Rmxh
Zz4gbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgV2ViUGFnZVByb3h5SWRlbnRpZmllciB3ZWJQYWdl
UHJveHlJRCwgUGFnZUlkZW50aWZpZXIgd2ViUGFnZUlEKQotewotICAgIGlmICghbV9uZXR3b3Jr
UHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGlkQ29t
bWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9tYWluLCB0
b0RvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJ
RCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0
aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsKICAg
ICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldERvbWFpbnNXaXRo
VXNlckludGVyYWN0aW9uKGRvbWFpbnMpKTsKQEAgLTIzODcsMjcgKzIwMDgsMjcgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6dXBkYXRlQXVkaWJsZU1lZGlhQXNzZXJ0aW9ucygpCiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCB1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogewotICAgIGlmIChtX3VzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKKyAg
ICBpZiAoc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID09IHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdFQlBST0NFU1NQT09M
X1JFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcz0lZCkiLCB1c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19T
VEFUSUMoU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6
ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpOwogCi0gICAgbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
ID0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsKLSAgICB0ZXJtaW5hdGVTZXJ2aWNl
V29ya2VycygpOwotICAgIHRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgc191c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
czsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+dGVybWluYXRlU2VydmljZVdvcmtlcnMo
KTsKIH0KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6
Omhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1dG8m
IHByb2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
KCksIFtdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2Vydmlj
ZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKTsKICAgICB9KTsKIH0KIAogYm9v
bCBXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRl
c3RpbmcoKSBjb25zdAogewotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclBy
b2Nlc3NlcywgW10oYXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZp
Y2VXb3JrZXJQcm9jZXNzZXMoKSwgW10oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4g
cHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwog
ICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5kZXgg
OTkwNmI3ZDE5YjQ1ZGM1YWQ3MzcwNmZiOWE0Nzc1ODFjN2Y4ZDU2MS4uNjY4YzFlNmQ4ZDk0ZWE5
N2I1YjZhZTAxMGI3OTI4NWJjZTk4NTE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5oCkBAIC03Nyw3ICs3Nyw2IEBAIE9CSkNfQ0xBU1MgV0tQcmVmZXJlbmNlT2Jz
ZXJ2ZXI7CiAKIG5hbWVzcGFjZSBBUEkgewogY2xhc3MgQXV0b21hdGlvbkNsaWVudDsKLWNsYXNz
IEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKIGNsYXNzIERvd25sb2FkQ2xpZW50OwogY2xh
c3MgSFRUUENvb2tpZVN0b3JlOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGVDbGllbnQ7CkBAIC0xNzYs
NyArMTc1LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGlzdG9yeUNsaWVudChzdGQ6OnVuaXF1
ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4mJik7CiAgICAgdm9pZCBzZXRE
b3dubG9hZENsaWVudChVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4mJik7CiAgICAgdm9p
ZCBzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGll
bnQ+JiYpOwotICAgIHZvaWQgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0
ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJik7CiAKICAg
ICB2b2lkIHNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBT
dHJpbmcmKTsKICAgICBjb25zdCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxl
SWRlbnRpZmllcigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi0+Y3VzdG9tV2ViQ29udGVudFNl
cnZpY2VCdW5kbGVJZGVudGlmaWVyKCk7IH0KQEAgLTE4NywxNyArMTg1LDkgQEAgcHVibGljOgog
ICAgIC8vIG51bGwgY2hlY2tzIGluIFdlYlBhZ2VQcm94eS4KICAgICBXZWJQcm9jZXNzUHJveHkq
IGR1bW15UHJvY2Vzc1Byb3h5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QgeyByZXR1
cm4gbV9kdW1teVByb2Nlc3NQcm94aWVzLmdldChzZXNzaW9uSUQpLmdldCgpOyB9CiAKLSAgICAv
LyBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNzIGFzIGFwcHJvcG9yaWF0ZSBmb3IgY3VycmVu
dCBwcm9jZXNzIG1vZGVsLiBUaGUgY29ubmVjdGlvbiBtdXN0IGJlIG5vbi1udWxsLgotICAgIElQ
Qzo6Q29ubmVjdGlvbiogbmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCk7Ci0KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNzYWdl
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNl
c3Npb24oY29uc3QgVCYgbWVzc2FnZSwgUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gU2VuZHMg
dGhlIG1lc3NhZ2UgdG8gV2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2VzcyBhcyBhcHByb3Bvcmlh
dGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2
b2lkIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlKTsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiB2b2lkIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhU
JiYgbWVzc2FnZSwgVSYmIHJlcGx5KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSk7
Ci0KICAgICB2b2lkIHByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5Kik7
CiAKICAgICBXZWJQcm9jZXNzQ2FjaGUmIHdlYlByb2Nlc3NDYWNoZSgpIHsgcmV0dXJuIG1fd2Vi
UHJvY2Vzc0NhY2hlLmdldCgpOyB9CkBAIC0yMDUsOSArMTk1LDYgQEAgcHVibGljOgogICAgIC8v
IERpc2Nvbm5lY3QgdGhlIHByb2Nlc3MgZnJvbSB0aGUgY29udGV4dC4KICAgICB2b2lkIGRpc2Nv
bm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSopOwogCi0gICAgV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlKiB3ZWJzaXRlRGF0YVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJzaXRlRGF0YVN0
b3JlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRQcmltYXJ5RGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7IG1fd2Vic2l0ZURhdGFTdG9yZSA9ICZkYXRhU3RvcmU7
IH0KLQogICAgIFJlZjxXZWJQYWdlUHJveHk+IGNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYsIFJl
ZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsKIAogICAgIHZvaWQgcGFnZUJlZ2luVXNpbmdX
ZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYnNpdGVEYXRhU3RvcmUm
KTsKQEAgLTI1OCwxMCArMjQ1LDggQEAgcHVibGljOgogICAgIHZvaWQgYWRkU3VwcG9ydGVkUGx1
Z2luKFN0cmluZyYmIG1hdGNoaW5nRG9tYWluLCBTdHJpbmcmJiBuYW1lLCBIYXNoU2V0PFN0cmlu
Zz4mJiBtaW1lVHlwZXMsIEhhc2hTZXQ8U3RyaW5nPiBleHRlbnNpb25zKTsKICAgICB2b2lkIGNs
ZWFyU3VwcG9ydGVkUGx1Z2lucygpOwogCi0gICAgUHJvY2Vzc0lEIG5ldHdvcmtQcm9jZXNzSWRl
bnRpZmllcigpOwogICAgIFByb2Nlc3NJRCBwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcigpOwog
ICAgIHZvaWQgYWN0aXZlUGFnZXNPcmlnaW5zSW5XZWJQcm9jZXNzRm9yVGVzdGluZyhQcm9jZXNz
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYpOwotICAgIGJv
b2wgbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7
CiAKICAgICBXZWJQYWdlR3JvdXAmIGRlZmF1bHRQYWdlR3JvdXAoKSB7IHJldHVybiBtX2RlZmF1
bHRQYWdlR3JvdXAuZ2V0KCk7IH0KIApAQCAtMzAyLDggKzI4Nyw2IEBAIHB1YmxpYzoKICAgICBB
UEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50JiBoaXN0b3J5Q2xpZW50KCkgeyByZXR1cm4g
Km1faGlzdG9yeUNsaWVudDsgfQogICAgIFdlYkNvbnRleHRDbGllbnQmIGNsaWVudCgpIHsgcmV0
dXJuIG1fY2xpZW50OyB9CiAKLSAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYg
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gKm1fY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50OyB9Ci0KICAgICBzdHJ1Y3QgU3RhdGlzdGljcyB7CiAgICAgICAg
IHVuc2lnbmVkIHdrVmlld0NvdW50OwogICAgICAgICB1bnNpZ25lZCB3a1BhZ2VDb3VudDsKQEAg
LTMxOSwxMiArMzAyLDggQEAgcHVibGljOgogICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lKCk7CiAgICAgdm9pZCB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogCi0gICAgdm9p
ZCBmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwotCiAgICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hG
YWlsRm9yVGVzdGluZyhib29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1
bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQogICAgIGJvb2wgc2hvdWxkTWFrZU5leHRXZWJQ
cm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE1ha2VO
ZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nOyB9Ci0gICAgdm9pZCBzZXRTaG91bGRN
YWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBt
X3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVl
OyB9Ci0gICAgYm9vbCBzaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRl
c3RpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVu
Y2hGYWlsRm9yVGVzdGluZzsgfQogCiAgICAgdm9pZCByZXBvcnRXZWJDb250ZW50Q1BVVGltZShT
ZWNvbmRzIGNwdVRpbWUsIHVpbnQ2NF90IGFjdGl2aXR5U3RhdGUpOwogCkBAIC0zODMsMTkgKzM2
MiwxMyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2Vt
ZW50Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0
ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUgPSBudWxscHRyKTsKLSAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fbmV0d29ya1By
b2Nlc3MuZ2V0KCk7IH0KICAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJv
Y2Vzc1Byb3h5Jik7CiAKLSAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQ
cm9jZXNzUHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkmJik7Ci0KICAgICBib29sIGlzU2VydmljZVdvcmtlclBh
Z2VJRChXZWJQYWdlUHJveHlJZGVudGlmaWVyKSBjb25zdDsKICNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCi0gICAgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29y
a1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
JiYsIFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHN0
YXRpYyB2b2lkIGVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vz
cyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mJiwgUEFM
OjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCByZW1v
dmVGcm9tU2VydmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkmKTsKLSAgICBzaXpl
X3Qgc2VydmljZVdvcmtlclByb3hpZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VydmljZVdv
cmtlclByb2Nlc3Nlcy5jb21wdXRlU2l6ZSgpOyB9Ci0gICAgdm9pZCBzZXRBbGxvd3NBbnlTU0xD
ZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoYm9vbCBhbGxvd3MpIHsgbV9hbGxvd3NBbnlTU0xD
ZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIgPSBhbGxvd3M7IH0KLSAgICBib29sIGFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dz
QW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOyB9CisgICAgc2l6ZV90IHNlcnZpY2VX
b3JrZXJQcm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
KCkuY29tcHV0ZVNpemUoKTsgfQogICAgIHZvaWQgdXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2Vu
dChjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCk7CiAgICAgY29uc3QgT3B0aW9uYWw8VXNlckNvbnRl
bnRDb250cm9sbGVySWRlbnRpZmllcj4mIHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJG
b3JTZXJ2aWNlV29ya2VycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVy
SURGb3JTZXJ2aWNlV29ya2VyOyB9CiAgICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3Vu
ZEFjdGl2aXR5Rm9yVGVzdGluZygpIGNvbnN0OwpAQCAtNDQ5LDggKzQyMiw2IEBAIHB1YmxpYzoK
ICAgICBib29sIGFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5OyB9CiAgICAgYm9vbCBzaG91bGRUYWtl
VUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRUYWtlVUlCYWNr
Z3JvdW5kQXNzZXJ0aW9uOyB9CiAKLSAgICB2b2lkIHN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQo
Ym9vbCBiYWNrZ3JvdW5kKTsKLSAgICAKICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICB2b2lkIGdh
bWVwYWRDb25uZWN0ZWQoY29uc3QgVUlHYW1lcGFkJiwgV2ViQ29yZTo6RXZlbnRNYWtlc0dhbWVw
YWRzVmlzaWJsZSk7CiAgICAgdm9pZCBnYW1lcGFkRGlzY29ubmVjdGVkKGNvbnN0IFVJR2FtZXBh
ZCYpOwpAQCAtNDg4LDcgKzQ1OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQ3VycmVudE1v
ZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCk7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQotICAgIHZvaWQgZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIo
UEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmcm9tRG9t
YWluLCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21haW4sIE9wdGlvblNl
dDxXZWJDb3JlOjpDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiwgV2ViUGFn
ZVByb3h5SWRlbnRpZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIpOwogICAgIHZvaWQgc2V0
RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbj4mJik7CiAgICAgdm9pZCBzZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRlc3Rpbmco
Y29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIGZpcnN0UGFydHlEb21haW4sIGNvbnN0
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiB0aGlyZFBhcnR5RG9tYWluLCBib29sIHNob3Vs
ZFNjaGVkdWxlTm90aWZpY2F0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAg
IHZvaWQgc2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKQEAgLTUxNSw4ICs0ODUsOCBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXImIHBsdWdJbkF1dG9TdGFydFByb3ZpZGVyKCkgeyBy
ZXR1cm4gbV9wbHVnSW5BdXRvU3RhcnRQcm92aWRlcjsgfQogCi0gICAgdm9pZCBzZXRVc2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOwotICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzczsgfQorICAgIHN0YXRpYyB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MoYm9vbCk7CisgICAgc3RhdGljIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzcygpIHsgcmV0dXJuIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQog
CiAjaWYgRU5BQkxFKENGUFJFRlNfRElSRUNUX01PREUpCiAgICAgdm9pZCBub3RpZnlQcmVmZXJl
bmNlc0NoYW5nZWQoY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBPcHRpb25hbDxTdHJpbmc+JiBlbmNvZGVkVmFsdWUpOwpAQCAtNTI4LDkgKzQ5OCwxNSBAQCBw
dWJsaWM6CiAgICAgaW50MzJfdCB1c2VySWQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJJZDsgfQog
I2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBPU09iamVjdFB0cjx4cGNfb2JqZWN0
X3Q+IHhwY0VuZHBvaW50TWVzc2FnZSgpIGNvbnN0OwotICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9j
ZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRw
b2ludE1lc3NhZ2UpOworICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIFZl
Y3RvcjxTdHJpbmc+IHVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VE
aXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwor
ICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRp
YyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcg
Y29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTU0
Niw4ICs1MjIsNiBAQCBwcml2YXRlOgogICAgIFdlYlByb2Nlc3NQcm94eSYgY3JlYXRlTmV3V2Vi
UHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9
IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKICAgICB2b2lkIGluaXRpYWxpemVO
ZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYsIFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9j
ZXNzUHJveHk6OklzUHJld2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8p
OwogCi0gICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwotCiAgICAgdm9pZCBoYW5kbGVNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBt
ZXNzYWdlQm9keSk7CiAgICAgdm9pZCBoYW5kbGVTeW5jaHJvbm91c01lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3Nh
Z2VCb2R5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJEYXRhJiYpPiYmKTsKIApAQCAtNTcx
LDE0ICs1NDUsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB1c2VzU2luZ2xlV2ViUHJvY2Vzcygp
IGNvbnN0IHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi0+dXNlc1NpbmdsZVdlYlByb2Nlc3MoKTsg
fQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0
b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9y
eSgpOwotICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAg
IHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBT
dHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7Ci0jZW5kaWYKLQogI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIHZvaWQgcmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKICAg
ICB2b2lkIHVucmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKQEAgLTYyMCw5ICs1ODYs
OCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYWtQdHI8V2ViUHJv
Y2Vzc1Byb3h5Pj4gbV9kdW1teVByb2Nlc3NQcm94aWVzOyAvLyBMaWdodHdlaWdodCBXZWJQcm9j
ZXNzUHJveHkgb2JqZWN0cyB3aXRob3V0IGJhY2tpbmcgcHJvY2Vzcy4KIAogI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKLSAgICBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+IG1fc2Vydmlj
ZVdvcmtlclByb2Nlc3NlczsKKyAgICBzdGF0aWMgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5
PiYgc2VydmljZVdvcmtlclByb2Nlc3NlcygpOwogICAgIGJvb2wgbV93YWl0aW5nRm9yV29ya2Vy
Q29udGV4dFByb2Nlc3NDb25uZWN0aW9uIHsgZmFsc2UgfTsKLSAgICBib29sIG1fYWxsb3dzQW55
U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyIHsgZmFsc2UgfTsKICAgICBTdHJpbmcgbV9z
ZXJ2aWNlV29ya2VyVXNlckFnZW50OwogICAgIE9wdGlvbmFsPFdlYlByZWZlcmVuY2VzU3RvcmU+
IG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzOwogICAgIE9wdGlvbmFsPFVzZXJDb250ZW50Q29u
dHJvbGxlcklkZW50aWZpZXI+IG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNlV29y
a2VyOwpAQCAtNjM4LDcgKzYwMyw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQ
STo6QXV0b21hdGlvbkNsaWVudD4gbV9hdXRvbWF0aW9uQ2xpZW50OwogICAgIFVuaXF1ZVJlZjxB
UEk6OkRvd25sb2FkQ2xpZW50PiBtX2Rvd25sb2FkQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudDsKIAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9uU2Vzc2lv
bj4gbV9hdXRvbWF0aW9uU2Vzc2lvbjsKIApAQCAtNjcwLDggKzYzNCw2IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX21lbW9yeVNhbXBsZXJFbmFibGVkIHsgZmFsc2UgfTsKICAgICBkb3VibGUgbV9t
ZW1vcnlTYW1wbGVySW50ZXJ2YWwgeyAxNDAwLjAgfTsKIAotICAgIFJlZlB0cjxXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU+IG1fd2Vic2l0ZURhdGFTdG9yZTsKLQogICAgIHR5cGVkZWYgSGFzaE1h
cDxjb25zdCBjaGFyKiwgUmVmUHRyPFdlYkNvbnRleHRTdXBwbGVtZW50PiwgUHRySGFzaDxjb25z
dCBjaGFyKj4+IFdlYkNvbnRleHRTdXBwbGVtZW50TWFwOwogICAgIFdlYkNvbnRleHRTdXBwbGVt
ZW50TWFwIG1fc3VwcGxlbWVudHM7CiAKQEAgLTcwMyw4ICs2NjUsNiBAQCBwcml2YXRlOgogCiAg
ICAgYm9vbCBtX3Byb2Nlc3NUZXJtaW5hdGlvbkVuYWJsZWQgeyB0cnVlIH07CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKLQogICAg
IEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+PiBtX2RpY3Rpb25h
cnlDYWxsYmFja3M7CiAKICAgICBib29sIG1fbWVtb3J5Q2FjaGVEaXNhYmxlZCB7IGZhbHNlIH07
CkBAIC03MTMsNyArNjczLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYWx3YXlzUnVuc0F0QmFj
a2dyb3VuZFByaW9yaXR5OwogICAgIGJvb2wgbV9zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0
aW9uOwogICAgIGJvb2wgbV9zaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3RjY1ByZWZlcmVuY2VF
bmFibGVkIHsgZmFsc2UgfTsKIAogICAgIFVzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIgbV91c2Vy
T2JzZXJ2YWJsZVBhZ2VDb3VudGVyOwpAQCAtODA1LDMxICs3NjQsMTMgQEAgcHJpdmF0ZToKICNl
bHNlCiAgICAgYm9vbCBtX2lzRGVsYXllZFdlYlByb2Nlc3NMYXVuY2hEaXNhYmxlZCB7IGZhbHNl
IH07CiAjZW5kaWYKLSAgICBib29sIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyB7
IGZhbHNlIH07CisgICAgc3RhdGljIGJvb2wgc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBIYXNoU2V0
PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBtX2RvbWFpbnNXaXRoVXNlckludGVyYWN0aW9u
OwogI2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBPU09iamVjdFB0cjx4cGNfb2Jq
ZWN0X3Q+IG1fZW5kcG9pbnRNZXNzYWdlOwotI2VuZGlmCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1l
c3NhZ2UpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+
Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZv
cndhcmQ8VD4obWVzc2FnZSksIDApOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNz
YXJ5KFQmJiBtZXNzYWdlKQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotfQotCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvQWxsUHJvY2Vz
c2VzKGNvbnN0IFQmIG1lc3NhZ2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmNwcAppbmRleCBkNjYxMDMzOGI2Y2Y2MGEyN2E2Zjc1ZGFlYzM0OWE4ZjcyYWIz
Yjg1Li41ZTJjNzA4ZjIyZjk3YmVhZjM3MDkzNTJjYjY5ZTNkNGMyOGUxZDliIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTI2OCw2ICsyNjgsOSBA
QCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6c2V0V2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0
b3JlJiBkYXRhU3RvcmUpCiB7CiAgICAgQVNTRVJUKCFtX3dlYnNpdGVEYXRhU3RvcmUpOwogICAg
IG1fd2Vic2l0ZURhdGFTdG9yZSA9ICZkYXRhU3RvcmU7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgZGF0YVN0b3JlLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKCp0
aGlzKTsKKyNlbmRpZgogICAgIHVwZGF0ZVJlZ2lzdHJhdGlvbldpdGhEYXRhU3RvcmUoKTsKICAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cyhwcm9jZXNzUG9vbCgpLndlYlByb2Nlc3NEYXRhU3RvcmVQYXJhbWV0ZXJzKCp0aGlzLCBkYXRh
U3RvcmUpKSwgMCk7CiB9CkBAIC03MzgsNyArNzQxLDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6
OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbiwg
TWUKIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihN
ZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRl
bGF5ZWRSZXBseSYmIHJlcGx5KQogewotICAgIG1fcHJvY2Vzc1Bvb2wtPmdldE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOworICAgIHdlYnNpdGVEYXRhU3Rv
cmUoKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKnRoaXMsIFdURk1vdmUocmVwbHkpKTsK
IH0KIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKQEAgLTk1NSw5ICs5NTgsOCBAQCB2b2lkIFdl
YlByb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hlciogbGF1bmNo
ZXIsIElQQzo6Q29ubmVjdAogICAgIH0KIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGF1dG8g
ZW5kcG9pbnRNZXNzYWdlID0gcHJvY2Vzc1Bvb2woKS54cGNFbmRwb2ludE1lc3NhZ2UoKTsKLSAg
ICBpZiAoZW5kcG9pbnRNZXNzYWdlKQotICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3Nh
Z2UoY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVuZHBvaW50TWVzc2FnZS5nZXQoKSk7
CisgICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcygqdGhpcyk7CiAjZW5k
aWYKIAogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3dlYkNvbm5lY3Rpb24pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9y
ZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vi
c2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4IDdjNDQwODUxNjc3MzY4YjVkZjg5YTg2ZmY0ZDNi
NTE1MzRiOTBiYjcuLmNiOGIzYmFhNGFkMGI1NjgxNTUxNWMwNWUxODEzNmIzMjRmM2EyZmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNp
dGVEYXRhU3RvcmVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KQEAgLTI4LDEwICsyOCwxMiBAQAog
CiAjaW1wb3J0ICJDb29raWVTdG9yYWdlVXRpbHNDRi5oIgogI2ltcG9ydCAiRGVmYXVsdFdlYkJy
b3dzZXJDaGVja3MuaCIKKyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQg
IlNhbmRib3hVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlN0b3JhZ2VNYW5hZ2VyLmgiCiAjaW1wb3J0
ICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKICNpbXBvcnQgIldlYlByZWZlcmVuY2Vz
S2V5cy5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0ICJXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKICNpbXBvcnQgIldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgpAQCAtNDQs
NiArNDYsNyBAQAogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYv
UHJvY2Vzc1ByaXZpbGVnZS5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgorI2ltcG9ydCA8d3RmL2Nv
Y29hL0VudGl0bGVtZW50cy5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTU2Miw0ICs1NjUsMjggQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZWluaXRpYWxpemVBcHBCb3VuZERvbWFpbnMoKQogfQogI2VuZGlmCiAK
K2Jvb2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKK3sKKyAgICByZXR1cm4gV1RGOjpoYXNF
bnRpdGxlbWVudChuZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigp
LCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJv
eHkmIHByb2Nlc3MpCit7CisgICAgaWYgKHByb2Nlc3Muc3RhdGUoKSAhPSBBdXhpbGlhcnlQcm9j
ZXNzUHJveHk6OlN0YXRlOjpSdW5uaW5nKQorICAgICAgICByZXR1cm47CisgICAgYXV0byogY29u
bmVjdGlvbiA9IHByb2Nlc3MuY29ubmVjdGlvbigpOworICAgIGlmICghY29ubmVjdGlvbikKKyAg
ICAgICAgcmV0dXJuOworICAgIGF1dG8gbWVzc2FnZSA9IG5ldHdvcmtQcm9jZXNzKCkueHBjRW5k
cG9pbnRNZXNzYWdlKCk7CisgICAgaWYgKCFtZXNzYWdlKQorICAgICAgICByZXR1cm47CisgICAg
eHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNzYWdlKGNvbm5lY3Rpb24tPnhwY0Nvbm5lY3Rpb24oKSwg
bWVzc2FnZSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNz
WFBDRW5kcG9pbnRUb0FsbFdlYlByb2Nlc3NlcygpCit7CisgICAgZm9yIChhdXRvJiBwcm9jZXNz
IDogbV9wcm9jZXNzZXMpCisgICAgICAgIHNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9X
ZWJQcm9jZXNzKHByb2Nlc3MpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IDViMGFlYjcx
YmQ5N2M0M2JjMjBlNDNiMTFiNjA2NTEyYjJjYWFiMzcuLjQxMTkxZmViYmMzZmJiYmY2NGU2ZTk4
YWI3NmY3ZDBlYzVlZTE0Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0zMiwxMSArMzIsMTQgQEAK
ICNpbmNsdWRlICJBdXRoZW50aWNhdG9yTWFuYWdlci5oIgogI2luY2x1ZGUgIkRldmljZUlkSGFz
aFNhbHRTdG9yYWdlLmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAi
TG9nZ2luZy5oIgogI2luY2x1ZGUgIk1vY2tBdXRoZW50aWNhdG9yTWFuYWdlci5oIgorI2luY2x1
ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgi
CiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3
YXJkQ2FjaGUuaCIKKyNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRl
ICJXZWJLaXQySW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1
ZGUgIldlYlByb2Nlc3NDYWNoZS5oIgpAQCAtNzUsNiArNzgsMTAgQEAKICNpbmNsdWRlICJTT0F1
dGhvcml6YXRpb25Db29yZGluYXRvci5oIgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkK
KyNpbmNsdWRlICJEZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5oIgorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBzdGF0aWMgYm9vbCBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxP
cmlnaW5zOwpAQCAtODMsMTMgKzkwLDE5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dX
ZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zKCkKICAgICBhbGxvd3NXZWJzaXRlRGF0YVJl
Y29yZHNGb3JBbGxPcmlnaW5zID0gdHJ1ZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNz
aW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgbm9uRGVmYXVsdERhdGFTdG9yZXMoKQorc3RhdGlj
IEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgYWxsRGF0YVN0b3Jl
cygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+PiBt
YXA7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNo
V2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRhU3RvcmUmKT4mJiBmdW5j
dGlvbikKK3sKKyAgICBmb3IgKGF1dG8qIGRhdGFTdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1
ZXMoKSkKKyAgICAgICAgZnVuY3Rpb24oKmRhdGFTdG9yZSk7Cit9CisKIFJlZjxXZWJzaXRlRGF0
YVN0b3JlPiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGVOb25QZXJzaXN0ZW50KCkKIHsKICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVDb25m
aWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpObyksIFBBTDo6U2Vzc2lvbklEOjpnZW5l
cmF0ZUVwaGVtZXJhbFNlc3Npb25JRCgpKSk7CkBAIC0xMTUsNyArMTI4LDcgQEAgV2Vic2l0ZURh
dGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRp
b24+JiYgY29uZmlndXIKICNlbmRpZgogewogICAgIFdURjo6c2V0UHJvY2Vzc1ByaXZpbGVnZXMo
YWxsUHJpdmlsZWdlcygpKTsKLSAgICBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwor
ICAgIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgp
OwogCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTEyOCwxNyArMTQxLDEyIEBA
IFdlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKCkKIAogICAgIHBsYXRmb3JtRGVz
dHJveSgpOwogCi0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgQVNTRVJUKG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0
KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsKLSAgICAgICAgbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5y
ZW1vdmUobV9zZXNzaW9uSUQpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgQVNTRVJUKGFsbERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQp
ID09IHRoaXMpOworICAgIGFsbERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkucmVtb3ZlU2Vzc2lvbigqdGhpcyk7CiAjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQotICAgICAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkKLSAgICAgICAgICAgIGdwdVByb2Nlc3NQcm94eS0+
cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgaWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94
eSA9IEdQVVByb2Nlc3NQcm94eTo6c2luZ2xldG9uSWZDcmVhdGVkKCkpCisgICAgICAgIGdwdVBy
b2Nlc3NQcm94eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAjZW5kaWYKIH0KIApAQCAt
MTUxLDcgKzE1OSw2IEBAIHN0YXRpYyBSZWZQdHI8V2Vic2l0ZURhdGFTdG9yZT4mIGdsb2JhbERl
ZmF1bHREYXRhU3RvcmUoKQogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmUoKQogewogICAgIEluaXRpYWxpemVXZWJLaXQyKCk7Ci0KICAgICBh
dXRvJiBzdG9yZSA9IGdsb2JhbERlZmF1bHREYXRhU3RvcmUoKTsKICAgICBpZiAoIXN0b3JlKQog
ICAgICAgICBzdG9yZSA9IGFkb3B0UmVmKG5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpZZXMpLCBQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSk7CkBAIC0xNjksMTcgKzE3Niw0NyBAQCBib29sIFdl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKQogICAgIHJldHVybiAhIWds
b2JhbERlZmF1bHREYXRhU3RvcmUoKTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXli
ZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lz
dGVyV2l0aFNlc3Npb25JRE1hcCgpCiB7Ci0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBub25E
ZWZhdWx0RGF0YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7Ci0gICAgICAgIEFTU0VS
VF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0byByZXN1bHQgPSBh
bGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VE
KHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworfQorCitXZWJzaXRlRGF0YVN0b3JlKiBXZWJz
aXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCit7CisgICAgcmV0dXJuIGFsbERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklE
KTsKK30KKworc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBuZXR3b3JrUHJvY2Vzc0Zv
clNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQoreworI2lmIFBMQVRGT1JNKEdUSykg
fHwgUExBVEZPUk0oV1BFKQorICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgeworICAg
ICAgICAvLyBSZXVzZSBhIHByZXZpb3VzIHBlcnNpc3RlbnQgc2Vzc2lvbiBuZXR3b3JrIHByb2Nl
c3MgZm9yIGVwaGVtZXJhbCBzZXNzaW9ucy4KKyAgICAgICAgZm9yIChhdXRvKiBkYXRhU3RvcmUg
OiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGlmIChkYXRhU3RvcmUt
PmlzUGVyc2lzdGVudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlUmVmKGRhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3MoKSk7CisgICAgICAgIH0KICAgICB9CisgICAgcmV0dXJuIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmNyZWF0ZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vzc2lv
bklEKTsKKyAgICByZXR1cm4gTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQcm9j
ZXNzKCk7CisjZW5kaWYKIH0KIAotV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6
ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCkKK05ldHdvcmtQcm9jZXNzUHJveHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQ
cm9jZXNzKCkKIHsKLSAgICByZXR1cm4gc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkgPyBub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpIDog
bnVsbHB0cjsKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpIHsKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2VzcyA9IG5ldHdvcmtQcm9jZXNzRm9yU2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOworICAgIH0KKworICAgIHJldHVy
biAqbV9uZXR3b3JrUHJvY2VzczsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURh
dGFTdG9yZTo6bmV0d29ya1Byb2Nlc3MoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0
PFdlYnNpdGVEYXRhU3RvcmUmPigqdGhpcykubmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlclByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNz
KQpAQCAtMTk1LDEyICsyMzIsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVucmVnaXN0ZXJQ
cm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUo
cHJvY2Vzcyk7CiB9CiAKLVdlYlByb2Nlc3NQb29sKiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNz
UG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkKLXsKLSAgICBhdXRvIHBvb2xzID0gcHJv
Y2Vzc1Bvb2xzKDEpOwotICAgIHJldHVybiBwb29scy5pc0VtcHR5KCkgPyBudWxscHRyIDogcG9v
bHMuYmVnaW4oKS0+Z2V0KCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURp
cmVjdG9yaWVzSWZOZWNlc3NhcnkoKQogewogICAgIGlmIChtX2hhc1Jlc29sdmVkRGlyZWN0b3Jp
ZXMpCkBAIC00NDAsMjggKzQ3MSwyMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0
YUFuZEFwcGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogI2VuZGlm
CiAKICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJv
Y2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwot
ICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5v
bmUpIHsKLSAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQ
cm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNz
UG9vbHMoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewotICAgICAgICAgICAg
Y2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAg
aWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJv
Y2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6Ci0gICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICBzd2l0Y2ggKG5ldHdvcmtQ
cm9jZXNzQWNjZXNzVHlwZSkgeworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoK
KyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nl
c3MpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpP
bmx5SWZMYXVuY2hlZDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAg
ICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAg
ICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Np
b25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nl
c3NQb29sXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkgeworICAgICAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBmZXRjaE9w
dGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CiAg
ICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2so
V1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKKyAgICAgICAgYnJl
YWs7CiAgICAgfQogCiAgICAgYXV0byB3ZWJQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVXZWJQ
cm9jZXNzQWNjZXNzVHlwZUZvckRhdGFGZXRjaChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7
CkBAIC03MjQsMzEgKzc0OCwyNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEo
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogICAgIGJvb2wg
ZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhID0gZmFsc2U7CiAjZW5k
aWYKICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJv
Y2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7
Ci0gICAgaWYgKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6
Tm9uZSkgewotICAgICAgICBhdXRvIHBvb2xzID0gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09
IFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2ggPyBlbnN1cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nl
c3NQb29scygpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKLSAg
ICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7Ci0gICAgICAgICAg
ICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAg
ICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBQ
cm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5l
bnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKLSAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLQorICAgIHN3aXRjaCAobmV0d29y
a1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNo
OgorICAgICAgICBuZXR3b3JrUHJvY2VzcygpOworICAgICAgICBBU1NFUlQobV9uZXR3b3JrUHJv
Y2Vzcyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6
Ok9ubHlJZkxhdW5jaGVkOgorICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewogICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAg
ICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nl
c3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBw
cm9jZXNzUG9vbF0geworICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlV2Vic2l0
ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0gewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVu
ZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQogICAgICAgICAgICAgZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0
ZVdlYnNpdGVEYXRhID0gdHJ1ZTsKICNlbmRpZgogICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CisgICAgICAgIGJyZWFrOwogICAgIH0K
IAogICAgIGF1dG8gd2ViUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlV2ViUHJvY2Vzc0FjY2Vz
c1R5cGVGb3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CkBAIC04OTMs
MTQgKzkxMCw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAjaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRh
VHlwZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcykpIHsKICAgICAgICAgaWYgKCFkaWROb3RpZnlO
ZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEpIHsKLSAgICAgICAgICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAg
ICAgICAgICAgICAgICAgICAgcHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQs
IGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewotICAgICAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJh
Y2soKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YSht
X3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2Fs
bGJhY2soKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKQEAgLTk5NCwxMiArMTAwNiwxMCBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7
CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAg
ICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAgICAgICAgICAgICAgICBu
ZXR3b3JrUHJvY2VzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBj
YXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgpAQCAtMTAyMSw3ICsxMDMxLDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRh
dGFUeXBlcywgY29uc3QgVmUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9u
SUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFt
ZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xd
IHsKKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmln
aW5zKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1lcywgSFNU
U0NhY2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Is
IHByb2Nlc3NQb29sXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1v
dmVQZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC0xMTgw
LDE4ICsxMTkwLDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKFNlY29uZHMgc2Vjb25k
cykKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNl
bmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGlt
ZW91dEZvclRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vy
dmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJl
cGx5KCksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0U2VydmljZVdvcmtl
clRpbWVvdXRGb3JUZXN0aW5nKCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRT
ZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCks
IDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZv
clRlc3Rpbmc6OlJlcGx5KCksIDApOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKQEAgLTEyMDEsOCArMTIwNSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50LCBDb21wbGV0CiAK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRy
eUNvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVt
RW50cnlDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMTEs
OCArMTIxNCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRv
KHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uCiAgICAgCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFBy
dW5lRW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQ
cnVuZUVudHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRm
YXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTIyMSw4ICsxMjIzLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9u
SGFuZGxlcjwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQsIHNl
Y29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMzEsMjAg
KzEyMzIsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLAogCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1U
aW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29u
ZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAgICAgCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kdW1wUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjU2LDEyICsxMjUwLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2kKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1By
ZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUHJldmFsZW50UmVzb3Vy
Y2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dy
YW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBp
c1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjczLDEyICsxMjYyLDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAg
ICBwcm9jZXNzLT5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNHcmFu
ZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyOTIsOCArMTI3Niw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291
cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldFByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
MzA3LDEwICsxMjkwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNv
dXJjZUZvckRlYnVnTW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGkKICAgICAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFByZXZhbGVudFJl
c291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
IGlzVmVyeVByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzIyLDEyICsxMzAy
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICAgICAgcHJvY2Vzcy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTEzNDEsMTAgKzEzMTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZQogICAgIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzUz
LDggKzEzMjUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVz
b3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdgogICAgIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRT
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25J
RCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jk
c1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFp
bihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzY4LDIyICsxMzM5
LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFp
bihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYg
c3ViRnJhbWVVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFt
ZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTM5NywyMyArMTM2MCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVQogCiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRv
cEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHBy
b2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFu
ZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YnJlc291
cmNlVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVz
b3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkws
IGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDI3LDEwICsxMzgxLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNv
dXJjZVVSTCwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJv
Y2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGly
ZWN0ZWRUbyB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3Vi
cmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NDIsMTIgKzEzOTMsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNv
bnN0IFVSTCYgc3VicmVzb3VyY2VVUgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJl
ZGlyZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RG
cm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNl
VVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25z
dCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTQ1OSwxMiArMTQwNSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNv
bnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVS
TCYgdG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NzYsMjUgKzE0MTcsMTQg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShj
b25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJh
bWVVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRp
cmVjdGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lz
dGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgY29uc3Qg
VVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lz
dGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE1MDYs
NjAgKzE0MzYsNDEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291
cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5j
bGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRQYXJhbWV0ZXJz
VG9EZWZhdWx0VmFsdWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFBhcmFtZXRlcnNUb0Rl
ZmF1bHRWYWx1ZXMobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UGFyYW1ldGVyc1RvRGVm
YXVsdFZhbHVlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSgpCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnN1Ym1pdFRlbGVtZXRy
eShtX3Nlc3Npb25JRCwgW10geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdWJt
aXRUZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2RpZmll
ZFNpbmNlLCBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1f
c2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRT
aW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1
bW1hcnkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIHN0cnVjdCBDYWxsYmFja0FnZ3Jl
Z2F0b3IgOiBSZWZDb3VudGVkPENhbGxiYWNrQWdncmVnYXRvcj4gewotICAgICAgICBDYWxsYmFj
a0FnZ3JlZ2F0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
CisgICAgc3RydWN0IExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yIDogUmVmQ291bnRlZDxMb2NhbENh
bGxiYWNrQWdncmVnYXRvcj4geworICAgICAgICBMb2NhbENhbGxiYWNrQWdncmVnYXRvcihDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OlRoaXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIDog
bV9jb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAg
ewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAgICAgfTsKIAot
ICAgICAgICB+Q2FsbGJhY2tBZ2dyZWdhdG9yKCkKKyAgICAgICAgfkxvY2FsQ2FsbGJhY2tBZ2dy
ZWdhdG9yKCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKIApAQCAtMTU3NCwzOCArMTQ4NSwzMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2bwogICAg
ICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4gbV9jb21wbGV0aW9uSGFuZGxlcjsKICAgICAg
ICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+
IG1fcmVzdWx0czsKICAgICB9OwotCi0gICAgUmVmUHRyPENhbGxiYWNrQWdncmVnYXRvcj4gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gYWRvcHRSZWYobmV3IENhbGxiYWNrQWdncmVnYXRvcihXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVu
c3VyZVByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Ci0gICAgICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcykuZ2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBw
cm9jZXNzUG9vbF0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQ
YXJ0eURhdGE+JiYgZGF0YSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
YWRkUmVzdWx0KFdURk1vdmUoZGF0YSkpOwotICAgICAgICAgICAgfSk7CisgICAgCisgICAgYXV0
byBsb2NhbENhbGxiYWNrQWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBMb2NhbENhbGxiYWNrQWdn
cmVnYXRvcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworICAgIAorICAgIGF1dG8gd3Rm
Q2FsbGJhY2tBZ2dyZWdhdG9yID0gV1RGOjpDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBsb2NhbENhbGxiYWNrQWdncmVnYXRv
cl0geworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhU3VtbWFyeShtX3Nlc3Npb25JRCwgW2xvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yXShWZWN0b3I8
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7
CisgICAgICAgICAgICBsb2NhbENhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVzdWx0KFdURk1vdmUo
ZGF0YSkpOwogICAgICAgICB9KTsKLSAgICB9CisgICAgfSk7CisgICAgCisgICAgZm9yIChhdXRv
KiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAg
ICAgcHJvY2Vzc1Bvb2wtPnNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5
KFt3dGZDYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlclN0
YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAg
IAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVs
ZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5k
ZmF0aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1f
c2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2lu
Z1VwZGF0ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxl
Q29va2llQmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ29v
a2llQmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJl
Y29yZHNQcm9jZXNzaW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE2MTQsMjQgKzE1MTgsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hl
ZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmQKICAg
ICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNj
aGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vz
c2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFi
bGVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxz
ZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMo
bV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRz
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjQz
LDIyICsxNTM2LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3Qg
VVJMJiB1cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhCiAKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldExhc3RTZWVuKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kb21haW5JREV4aXN0
c0luRGF0YWJhc2UobV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9w
RnJhbWVVcmwxLCBjb25zdCBVUkwmIHRvcEZyYW1lVXJsMiwgU2Vjb25kcyBsYXN0U2VlbiwgYm9v
bCBoYWRVc2VySW50ZXJhY3Rpb24sIFNlY29uZHMgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwg
Ym9vbCBpc0dyYW5kZmF0aGVyZWQsIGJvb2wgaXNQcmV2YWxlbnQsIGJvb2wgaXNWZXJ5UHJldmFs
ZW50LCB1bnNpZ25lZCBkYXRhUmVjb3Jkc1JlbW92ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2NzAsMTAgKzE1NTUsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29u
c3QgVVJMJiB0b3BGcgogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3MtPm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BG
cmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwg
bGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwg
aXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jk
c1JlbW92ZWQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0
b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFs
ZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3Rpbmco
Y29uc3QgVVJMJiB1cmwsIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2ODUsMTggKzE1NjcsMTQg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGlu
Zyhjb25zdCBVUkwmIHVybCwgYm9vbCBoYWQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBwcm9jZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVy
YWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVu
dCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkuaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlv
biwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQs
IHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MDQs
OCArMTU4Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxlCiAgICAgdXNlRXhwbGljaXRJVFBT
dGF0ZSgpOwogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVu
c3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
c3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NUZXN0KG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhX
ZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8U3RyaW5nPiYmIGRvbWFpbnMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcxNiw3ICsx
NTkzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmll
cyhXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIHdlYlBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nl
c3NFbnRyaWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IApAQCAtMTcyNCw4ICsxNjAxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9M
aXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkgKIHsKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1l
VG9MaXZlVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFj
dGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTczOSwxMCArMTYxNSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmxv
Z1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc1
NCwxMyArMTYyNyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0
aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0hh
ZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3Vi
VXJsLCBjb25zdCBVUkwmIHRvcFVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE3NzIsMTMgKzE2MzksNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJs
LCBjb25zdAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5p
c1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0
b3BVcmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJM
JiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTE3OTIsMTAgKzE2NTMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclVzZXJJbnRlcmFj
dGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVh
clVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRo
ZXJlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTgwOSwxMCArMTY2Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJl
ZChjb25zdCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvCiAgICAgCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRHcmFuZGZhdGhl
cmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dy
YW5kZmF0aGVyZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRo
TGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZnJvbVVSTCwgY29uc3QgVVJMJiB0
b1VSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTgyMSw2MiArMTY3NiwzOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxv
YWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZgogICAgIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0Q3Jvc3NTaXRl
TG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25G
b3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21V
UkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRl
TG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDcm9zc1NpdGVMb2Fkc1dp
dGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDcm9zc1NpdGVMb2Fk
c1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGVsZXRlQ29va2llc0Zv
clRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5k
ZWxldGVDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVDb29raWVzRm9yVGVz
dGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5j
bHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nKGNvbnN0IFVSTCYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBj
b25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0xvY2FsU3RvcmFnZSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhh
c0xvY2FsU3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzSXNvbGF0
ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVz
dGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5n
KGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0x
OTA3LDEwICsxNzM4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29v
a2llQmxvY2tpbmdNb2RlKFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWUKICAgICAgICAgICAgIHdl
YlByb2Nlc3Muc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShibG9ja2luZ01vZGUsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MtPnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2Nr
aW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lvbklELCBibG9j
a2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudEZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTE4LDEwICsxNzQ2LDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1l
U2l0ZVN0cmljdEVuZm9yY2UKICAgICBhdXRvIGZsYWcgPSBlbmFibGVkID8gV2ViQ29yZTo6U2Ft
ZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6OlllcyA6IFdlYkNvcmU6OlNhbWVTaXRlU3Ry
aWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3Ry
aWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZEVuYmxl
U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZsYWcsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9y
VGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE5MjksMjAgKzE3NTQsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGUKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBhdXRvIG1vZGUgPSBlbmFibGVk
ID8gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tp
ZXMgOiBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6Tm9uZTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZUZvclRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5zZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNG
b3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVz
dGluZyhjb25zdCBVUkwmIGZpcnN0UGFydHlVUkwsIGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NTQsOCArMTc3
Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Zp
cnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eUhv
c3RDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZpcnN0UGFydHlVUkwuaG9zdCgp
LnRvU3RyaW5nKCksIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFy
dHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJzdFBhcnR5VVJMLmhv
c3QoKS50b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0s
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3Rpbmco
Y29uc3QgVVJMJiBjbmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTk2NywxOCArMTc4NSwxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5n
KAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDTkFNRURv
bWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
Y25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRpZiAvLyBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN5
bmNMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
eW5jTG9jYWxTdG9yYWdlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U3luY0xvY2FsU3RvcmFnZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xOTg2LDggKzE3OTksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25k
cywgQwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5z
ZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25k
cywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENh
Y2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Vjb25k
cyk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTE5OTcsMjYgKzE4MDksMTIgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNl
cyhTZWNvbmRzIHNlY29uZHMsIEMKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1h
eEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nl
c3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5yZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lv
bklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CiAjZW5kaWYKIH0KIAotYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjppc0Fzc29jaWF0
ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpIGNvbnN0Ci17Ci0gICAg
aWYgKGF1dG8qIHByb2Nlc3NQb29sRGF0YVN0b3JlID0gcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFT
dG9yZSgpKQotICAgICAgICByZXR1cm4gcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPT0gdGhpczsKLSAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb2Nlc3NQb29sLm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgIHJldHVybiBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5oYXNTZXNzaW9uKG1f
c2Vzc2lvbklEKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIEhhc2hTZXQ8UmVmUHRyPFdlYlBy
b2Nlc3NQb29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkg
Y29uc3QKIHsKICAgICBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IHByb2Nlc3NQb29s
czsKQEAgLTIwMzEsOSArMTgyOSw2IEBAIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4g
V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uCiAgICAgaWYg
KHByb2Nlc3NQb29scy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgb25l
IG9mIHRoZSBsZWdhY3kgZGF0YSBzdG9yZXMuCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlm
ICghaXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woKnByb2Nlc3NQb29sKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQogICAgICAgICAgICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9jZXNzUG9vbCk7
CiAgICAgICAgICAgICBpZiAocHJvY2Vzc1Bvb2xzLnNpemUoKSA9PSBsaW1pdCkKICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTIwNzIsOCArMTg2Nyw3IEBAIHN0YXRpYyBTdHJpbmcgY29tcHV0
ZU1lZGlhS2V5RmlsZShjb25zdCBTdHJpbmcmIG1lZGlhS2V5RGlyZWN0b3J5KQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25z
dCBXZWJDZXJ0aWZpY2F0ZUluZm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRl
LT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRl
Rm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKIH0KIAog
VmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gV2Vic2l0ZURhdGFTdG9yZTo6bWVk
aWFLZXlPcmlnaW5zKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSkKQEAg
LTIxMjgsNiArMTkyMiw1MiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZU1lZGlhS2V5
cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksCiAgICAgfQogfQogCit2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9j
ZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvJik+JiYgcmVwbHkpCit7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1Byb3h5LCBbdGhp
cywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHdlYlByb2Nlc3NQcm94eSA9IG1ha2VX
ZWFrUHRyKHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0gV1RGTW92ZShyZXBseSldIChhdXRvJiBj
b25uZWN0aW9uSW5mbykgbXV0YWJsZSB7CisgICAgICAgIGlmIChVTkxJS0VMWSghSVBDOjpDb25u
ZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSW5mby5pZGVudGlmaWVyKCkpICYm
IHdlYlByb2Nlc3NQcm94eSAmJiB3ZWFrVGhpcykpIHsKKyAgICAgICAgICAgIHRlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzKCk7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19JRihpc1BlcnNpc3RlbnQo
KSwgUHJvY2VzcywgImdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0IGF0
dGVtcHQsIHJldHJ5aW5nIik7CisgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbigqd2ViUHJvY2Vzc1Byb3h5LCBXVEZNb3ZlKHJlcGx5KSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmVwbHkoY29ubmVjdGlvbklu
Zm8pOworICAgIH0pOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNz
Q3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JikKK3sKKyAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGlkVGVybWluYXRlKCk7CisgICAgbV9uZXR3
b3JrUHJvY2VzcyA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dGVybWlu
YXRlTmV0d29ya1Byb2Nlc3MoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQ
cm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT50ZXJt
aW5hdGVTZXJ2aWNlV29ya2VycygpOworCisgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQorICAg
ICAgICByZXR1cm47CisgICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7CisgICAgbV9u
ZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2Vu
ZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG5ldHdvcmtQcm9jZXNzKCku
c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5lbnQ6Ok5vLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdv
cmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpCit7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsK
K30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUo
KQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsKK30KKwog
Ym9vbCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpIGNv
bnN0CiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIxNTcsMTcg
KzE5OTcsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgICAgIAogICAgICAgICByZXNvbHZlRGlyZWN0
b3JpZXNJZk5lY2Vzc2FyeSgpOwogICAgICAgICAKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgdHJ1ZSkpOworICAgICAgICBuZXR3b3Jr
UHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgdHJ1ZSksIDApOworICAgICAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgICAgICBwcm9jZXNzUG9v
bC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQodHJ1ZSksIG1fc2Vzc2lvbklEKTsKLSAgICAg
ICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3Jr
aW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSkpOworICAgIG5ldHdvcmtQcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSksIDApOworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nl
c3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkKGZhbHNlKSwgbV9zZXNzaW9uSUQpOwotICAgIH0KIAogICAgIG1fcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgPSBmYWxzZTsKICNlbHNlCkBAIC0yMTc5LDggKzIwMTcs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKGJvb2wgZW5hYmxlZCkKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3RhdGlzdGljc1Rl
c3RpbmdDYWxsYmFjayhGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNhbGxiYWNrKQog
ewogICAgIGlmIChjYWxsYmFjaykgewotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpKTsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rl
c3RpbmdFdmVudCh0cnVlKSwgMCk7CiAgICAgfQogICAgIAogICAgIG1fc3RhdGlzdGljc1Rlc3Rp
bmdDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwpAQCAtMjE5OSw4ICsyMDM2LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJv
b2wgZW5hYmxlZCwgQ29tcGxldGkKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAg
cHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnTW9kZShtX3Nlc3Npb25JRCwgZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1
Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKICAgICBVTlVTRURfUEFSQU0oY29tcGxl
dGlvbkhhbmRsZXIpOwpAQCAtMjIxNSwyMCArMjA1MSwxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vzc2lvbklELCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9Ci0jZW5kaWYKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwor
I2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisjZW5kaWYKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoYm9vbCBlbmFi
bGVkKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0QWRDbGlja0F0dHJp
YnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0QWRDbGlj
a0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKQEAgLTIyNTAsNDggKzIwODEsMTkgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZFN0YXRpc3RpY3NJbldlYlByb2Nlc3NlcyhDb21wbGV0
aW9uSGFuZGwKIH0KICNlbmRpZgogCi1WZWN0b3I8V2ViQ29yZTo6Q29va2llPiBXZWJzaXRlRGF0
YVN0b3JlOjpwZW5kaW5nQ29va2llcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcHlUb1ZlY3Rv
cihtX3BlbmRpbmdDb29raWVzKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphZGRQZW5k
aW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1fcGVuZGlu
Z0Nvb2tpZXMucmVtb3ZlSWYoWyZjb29raWVdKGF1dG8mIHBlbmRpbmdDb29raWUpIHsKLSAgICAg
ICAgcmV0dXJuIHBlbmRpbmdDb29raWUuaXNLZXlFcXVhbChjb29raWUpOwotICAgIH0pOwotICAg
IG1fcGVuZGluZ0Nvb2tpZXMuYWRkKGNvb2tpZSk7Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSkKLXsK
LSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZShjb29raWUpOwotfQotICAgIAotdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdDb29raWVzKCkKLXsKLSAgICBtX3BlbmRpbmdDb29r
aWVzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zmx1c2hDb29raWVzKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9j
ZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5mbHVzaENv
b2tpZXMoc2Vzc2lvbklEKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5mbHVzaENvb2tpZXMoc2Vzc2lvbklEKCksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93cykKIHsKLSAgICBmb3IgKGF1dG8gcHJvY2Vz
c1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChhbGxvd3MpLCBNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29j
a2V0OjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2Vi
U29ja2V0KGFsbG93cyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JXZWJTb2NrZXQ6OlJlcGx5KCksIDApOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogewotICAgIGZvciAoYXV0byBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKCkpOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3Jl
ZGVudGlhbHMoc2Vzc2lvbklEKCkpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpk
aXNwYXRjaE9uUXVldWUoRnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKQpAQCAtMjMxNyw4ICsy
MTE5LDYgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFy
YW1ldGVycygpCiAKICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwogCi0gICAg
cGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBlbmRpbmdDb29raWVzKCk7Ci0KICAgICBhdXRv
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPnJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUhhbmRsZTsKICAgICBpZiAoIXJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAtMjQyMyw3ICsyMjIzLDEw
IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRl
cnMoKQogICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZWQgPSBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkOwogI2VuZGlmCiAgICAgcGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyhwYXJhbWV0
ZXJzKTsKLQorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLmFwcEhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lv
biA9IGhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbigpOworI2VuZGlm
CisgICAgCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiB9CiAKQEAgLTI0NTMsMTAgKzIyNTYsNiBA
QCBBUEk6OkhUVFBDb29raWVTdG9yZSYgV2Vic2l0ZURhdGFTdG9yZTo6Y29va2llU3RvcmUoKQog
ICAgIHJldHVybiAqbV9jb29raWVTdG9yZTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpk
aWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpCi17Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGlmICghaXNQZXJzaXN0ZW50KCkpIHsKQEAgLTI0NjQsMjMgKzIyNjMsMTUgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQo
VmVjdG9yPExvY2FsU3RvcmFnZUQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcykuZ2V0TG9jYWxTdG9yYWdlRGV0YWls
cyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihX
VEZNb3ZlKGRldGFpbHMpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0
IGZldGNoaW5nIGZyb20gbXVsdGlwbGUgcG9vbHMuCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBBU1NFUlQoIWNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldExv
Y2FsU3RvcmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgeworICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihXVEZNb3ZlKGRldGFpbHMpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldFF1b3RhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnJlc2V0UXVvdGEobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKQEAgLTI1MDYs
NyArMjI5NywxMiBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6Omh0dHAzRW5hYmxlZCgpCiB7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQotI2VuZGlmCisKK2Jvb2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJikKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYgLy8gIVBMQVRGT1JNKENPQ09BKQogCiAjaWYgIVVT
RShHTElCKQogV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERldmljZUlkSGFz
aFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpCkBAIC0yNTE4LDM1ICsyMzE0LDE4IEBAIFdURjo6U3Ry
aW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJl
Y3RvcnkoKQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURh
dGEoVVJMJiYgb2xkTmFtZSwgVVJMJiYgbmV3TmFtZSwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZT4gZGF0YVR5cGVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOwotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9zZXNzaW9u
SUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlbmFtZU9yaWdpbklu
V2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01B
SU5TKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24oQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vz
c2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+Y2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyQXBw
Qm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJ
bml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0yNTY4LDcgKzIzNDcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBC
b3VuZERvbWFpbnNUb0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZQogCiAgICAgcHJv
cGFnYXRlQXBwQm91bmREb21haW5zKGdsb2JhbERlZmF1bHREYXRhU3RvcmUoKS5nZXQoKSwgKmFw
cEJvdW5kRG9tYWlucyk7CiAKLSAgICBmb3IgKGF1dG8qIHN0b3JlIDogbm9uRGVmYXVsdERhdGFT
dG9yZXMoKS52YWx1ZXMoKSkKKyAgICBmb3IgKGF1dG8qIHN0b3JlIDogYWxsRGF0YVN0b3Jlcygp
LnZhbHVlcygpKQogICAgICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoc3RvcmUsICphcHBC
b3VuZERvbWFpbnMpOwogfQogCkBAIC0yNTc2LDEwICsyMzU1LDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRBcHBCb3VuZERvbWFpbnNGb3JJVFAoY29uc3QgSGFzaFNldDxXZWJDb3JlOjpS
ZWdpc3RyYWIKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEFwcEJvdW5kRG9tYWluc0ZvclJlc291cmNlTG9h
ZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAjZW5kaWYKIApAQCAtMjU4NywxNiArMjM2MywyNiBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IFN0cmlu
ZyYgYnVuZAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZp
ZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS51cGRh
dGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVy
SW5OZXR3b3JrUHJvY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlmaWVyKFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cit9CisKK3N0YXRpYyBib29sIG5leHROZXR3b3JrUHJv
Y2Vzc0xhdW5jaFNob3VsZEZhaWxGb3JUZXN0aW5nIHsgZmFsc2UgfTsKKwordm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjptYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKQor
eworICAgIG5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaFNob3VsZEZhaWxGb3JUZXN0aW5nID0gdHJ1
ZTsKK30KKworYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpzaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9j
ZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKQoreworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG5l
eHROZXR3b3JrUHJvY2Vzc0xhdW5jaFNob3VsZEZhaWxGb3JUZXN0aW5nLCBmYWxzZSk7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuaAppbmRleCA0ZjA0ZTkwMmQ3YjY1YzhkZTFlN2YwYWQyNDQyYTBkYTUyOWY5
ODM0Li5hZThlMzEzMmM1YjYxMTdmODFhNmY5MThlOWNkMzUzNDMwZDEyMTJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5oCkBAIC01Myw2ICs1Myw4IEBACiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxw
YWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgorI2luY2x1ZGUgPHd0Zi9PU09iamVjdFB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogI2VuZGlmCiAKICNpZiBVU0UoQ1VS
TCkKQEAgLTc5LDYgKzgxLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBBdXRoZW50aWNh
dG9yTWFuYWdlcjsKIGNsYXNzIFNlY0tleVByb3h5U3RvcmU7CiBjbGFzcyBEZXZpY2VJZEhhc2hT
YWx0U3RvcmFnZTsKK2NsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHk7CiBjbGFzcyBTT0F1dGhvcml6
YXRpb25Db29yZGluYXRvcjsKIGNsYXNzIFdlYkNlcnRpZmljYXRlSW5mbzsKIGNsYXNzIFdlYlBh
Z2VQcm94eTsKQEAgLTg4LDYgKzkxLDggQEAgY2xhc3MgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOwogZW51bSBjbGFzcyBDYWNoZU1vZGVsIDogdWludDhfdDsKIGVudW0gY2xhc3MgV2Vi
c2l0ZURhdGFGZXRjaE9wdGlvbiA6IHVpbnQ4X3Q7CiBlbnVtIGNsYXNzIFdlYnNpdGVEYXRhVHlw
ZSA6IHVpbnQzMl90OworCitzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mbzsKIHN0
cnVjdCBXZWJzaXRlRGF0YVJlY29yZDsKIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
czsKIApAQCAtMTEzLDcgKzExOCwxMiBAQCBwdWJsaWM6CiAgICAgV2Vic2l0ZURhdGFTdG9yZShS
ZWY8V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYsIFBBTDo6U2Vzc2lvbklEKTsKICAg
ICB+V2Vic2l0ZURhdGFTdG9yZSgpOwogCi0gICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4
aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7Cisg
ICAgc3RhdGljIHZvaWQgZm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoRnVuY3Rpb248dm9pZChXZWJz
aXRlRGF0YVN0b3JlJik+JiYpOworICAgIAorICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdv
cmtQcm9jZXNzKCkgY29uc3Q7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nl
c3MoKTsKKworICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ0RhdGFTdG9yZUZv
clNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlzUGVyc2lzdGVudCgpIGNv
bnN0IHsgcmV0dXJuICFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9CiAgICAgUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTEyMyw2
ICsxMzMsMTUgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IFdlYWtIYXNoU2V0PFdlYlByb2Nl
c3NQcm94eT4mIHByb2Nlc3NlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc2VzOyB9CiAKKyAg
ICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8mKT4m
Jik7CisgICAgdm9pZCB0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworICAgIHZvaWQgc2VuZE5l
dHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseUZvclRlc3RpbmcoKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgp
OworICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKTsK
KyAgICBzdGF0aWMgdm9pZCBtYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmcoKTsKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNo
RmFpbEZvclRlc3RpbmcoKTsKKwogICAgIGJvb2wgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQoKSBjb25zdDsKICAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJv
b2wpOwogICAgIGJvb2wgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSgpIGNvbnN0OwpA
QCAtMjM4LDE1ICsyNTcsOCBAQCBwdWJsaWM6CiAKICAgICBEZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZSYgZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKSB7IHJldHVybiBtX2RldmljZUlkSGFzaFNhbHRT
dG9yYWdlLmdldCgpOyB9CiAKLSAgICBXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGJvb2wgaXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wo
V2ViUHJvY2Vzc1Bvb2wmKSBjb25zdDsKLQogICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
IHBhcmFtZXRlcnMoKTsKIAotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29r
aWVzKCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNv
b2tpZSYpOwotICAgIHZvaWQgcmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29r
aWUmKTsKLSAgICB2b2lkIGNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKICAgICB2b2lkIGZsdXNoQ29v
a2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJDYWNoZWRD
cmVkZW50aWFscygpOwogCkBAIC0yNTQsNiArMjY2LDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
ZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAKKyNpZiBQTEFURk9STShDT0NP
QSkKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKFdl
YlByb2Nlc3NQcm94eSYpOworICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRU
b0FsbFdlYlByb2Nlc3NlcygpOworI2VuZGlmCisKICNpZiBVU0UoQ1VSTCkKICAgICB2b2lkIHNl
dE5ldHdvcmtQcm94eVNldHRpbmdzKFdlYkNvcmU6OkN1cmxQcm94eVNldHRpbmdzJiYpOwogICAg
IGNvbnN0IFdlYkNvcmU6OkN1cmxQcm94eVNldHRpbmdzJiBuZXR3b3JrUHJveHlTZXR0aW5ncygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJveHlTZXR0aW5nczsgfQpAQCAtMjc5LDggKzI5Niw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldE1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24oV2Vi
Q29yZTo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbiYmKTsKICNlbmRpZgogCi0g
ICAgdm9pZCBkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAgY29uc3QgV2Vic2l0ZURh
dGFTdG9yZUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24oKSB7IHJldHVybiBtX2NvbmZpZ3Vy
YXRpb24uZ2V0KCk7IH0KIAogICAgIFdlYnNpdGVEYXRhU3RvcmVDbGllbnQmIGNsaWVudCgpIHsg
cmV0dXJuIG1fY2xpZW50LmdldCgpOyB9CkBAIC0yOTAsNiArMzA1LDggQEAgcHVibGljOgogCiAg
ICAgdm9pZCByZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFVSTCYmLCBVUkwmJiwgT3B0aW9uU2V0
PFdlYnNpdGVEYXRhVHlwZT4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBi
b29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYp
OworCiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICAgICBXZWJEZXZpY2VPcmllbnRh
dGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXImIGRldmljZU9yaWVudGF0aW9uQW5kTW90aW9u
QWNjZXNzQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25B
Y2Nlc3NDb250cm9sbGVyOyB9CiAjZW5kaWYKQEAgLTM2Niw3ICszODMsNyBAQCBwcml2YXRlOgog
ICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0
b3JhZ2VEaXJlY3RvcnksIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UpOwogICAgIHN0YXRpYyB2b2lk
IHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnks
IGNvbnN0IEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYpOwogCi0gICAgdm9p
ZCBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOworICAgIHZvaWQgcmVnaXN0ZXJXaXRo
U2Vzc2lvbklETWFwKCk7CiAKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpCiAgICAgc3Rh
dGljIE9wdGlvbmFsPEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+PiBhcHBCb3Vu
ZERvbWFpbnNJZkluaXRpYWxpemVkKCk7CkBAIC00MDYsOCArNDIzLDYgQEAgcHJpdmF0ZToKICAg
ICBXZWJDb3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3MgbV9uZXR3b3JrUHJveHlTZXR0aW5n
czsKICNlbmRpZgogCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1fcGVuZGluZ0Nvb2tp
ZXM7Ci0gICAgCiAgICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3NlczsK
IAogICAgIGJvb2wgbV9pc0l0cFN0YXRlRXhwbGljaXRseVNldCB7IGZhbHNlIH07CkBAIC00Mjgs
NiArNDQzLDcgQEAgcHJpdmF0ZToKICAgICBVbmlxdWVSZWY8V2Vic2l0ZURhdGFTdG9yZUNsaWVu
dD4gbV9jbGllbnQ7CiAKICAgICBSZWZQdHI8QVBJOjpIVFRQQ29va2llU3RvcmU+IG1fY29va2ll
U3RvcmU7CisgICAgUmVmUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7
CiAKICNpZiBIQVZFKEFQUF9TU08pCiAgICAgVW5pcXVlUmVmPFNPQXV0aG9yaXphdGlvbkNvb3Jk
aW5hdG9yPiBtX3NvQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRh
U3RvcmVDdXJsLmNwcAppbmRleCAwZTBjMDZlMWRlZDQyYzE0YjgwMmUxNTg5ZjMxZGM2Mjk4MmFj
MzkzLi42NGI2Yzc0ZDA4NmVjNDViYjYyZGE2ZWUwODIyM2IyOGRiNzNhNTdjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3Rv
cmVDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJs
L1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcApAQCAtNDIsOCArNDIsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKFdlYkNvcmU6OkN1cmxQcm94eVNldHRp
bmdzJiYgcHJveAogewogICAgIG1fcHJveHlTZXR0aW5ncyA9IFdURk1vdmUocHJveHlTZXR0aW5n
cyk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fc2Vzc2lvbklELCBtX3Byb3h5U2V0
dGluZ3MpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX3Nlc3Npb25JRCwgbV9wcm94eVNldHRpbmdz
KSwgMCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKaW5kZXggMTRk
N2ZmNDI4NGNhNGVkMTcwOGRmOGE0Y2RmMGY0NWUxZjhhNjJmYi4uNzA0YTliNjgzNjk1M2RhNjdk
NTNjOTAwNGQ2NmJlYTEyYmM5YjVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5j
cHAKQEAgLTQyLDggKzQyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5l
dHdvcmtQYXJhbWV0ZXJzKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJgogICAgIG5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5pZ25vcmVUTFNFcnJvcnMgPSBtX2lnbm9yZVRMU0Vycm9yczsKICAg
ICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucHJveHlTZXR0aW5ncyA9IG1fbmV0d29ya1Byb3h5
U2V0dGluZ3M7CiAKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbEZvckNv
b2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50
PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9z
ZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFn
ZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5
cGUpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpLmdldENvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2ll
UGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVy
c2lzdGVudFN0b3JhZ2VUeXBlKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJz
aXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKQEAgLTU1LDggKzU0
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3Jh
Z2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9wZXJzaXN0
ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gZW5hYmxlZDsKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9O
ZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFBlcnNpc3RlbnRD
cmVkZW50aWFsU3RvcmFnZUVuYWJsZWQobV9zZXNzaW9uSUQsIG1fcGVyc2lzdGVudENyZWRlbnRp
YWxTdG9yYWdlRW5hYmxlZCkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQobV9z
ZXNzaW9uSUQsIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCksIDApOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRM
U0Vycm9ycykKQEAgLTY1LDE1ICs2MywxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEln
bm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9pZ25vcmVUTFNFcnJvcnMgPSBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRJZ25vcmVUTFNF
cnJvcnMobV9zZXNzaW9uSUQsIG1faWdub3JlVExTRXJyb3JzKSk7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0SWdub3JlVExTRXJyb3JzKG1f
c2Vzc2lvbklELCBtX2lnbm9yZVRMU0Vycm9ycyksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKFdlYkNvcmU6OlNvdXBOZXR3b3JrUHJveHlT
ZXR0aW5ncyYmIHNldHRpbmdzKQogewogICAgIG1fbmV0d29ya1Byb3h5U2V0dGluZ3MgPSBXVEZN
b3ZlKHNldHRpbmdzKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fc2Vzc2lvbklELCBt
X25ldHdvcmtQcm94eVNldHRpbmdzKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9zZXNzaW9uSUQs
IG1fbmV0d29ya1Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94
eUdMaWIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlH
TGliLmNwcAppbmRleCAwYTg0YTc1OTBkOWE5ODViZmM5OTY4NGE0ODk1MTM3NGU1YjI5NDI5Li4y
N2YyM2VhMDY1ZGM3NWNlNGE4MjcwYzU3NmVhMmFhNTVhYjBkYzhmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKQEAgLTQ0
LDcgKzQ0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoT3B0aW9u
cyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGwKICAgICAgICAgaWYgKCFkYXRhU3Rv
cmUpIHsKICAgICAgICAgICAgIC8vIFByZXdhcm1lZCBwcm9jZXNzZXMgZG9uJ3QgaGF2ZSBhIFdl
YnNpdGVEYXRhU3RvcmUgeWV0LCBzbyB1c2UgdGhlIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSBm
cm9tIHRoZSBXZWJQcm9jZXNzUG9vbC4KICAgICAgICAgICAgIC8vIFRoZSBwcm9jZXNzIHdvbid0
IGJlIHVzZWQgaWYgY3VycmVudCBXZWJzaXRlRGF0YVN0b3JlIGlzIGRpZmZlcmVudCB0aGFuIHRo
ZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IG9uZS4KLSAgICAgICAgICAgIGRhdGFTdG9yZSA9IG1f
cHJvY2Vzc1Bvb2wtPndlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICAgICAgICAgIGRhdGFTdG9yZSA9
IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKICAgICAgICAgfQog
CiAgICAgICAgIEFTU0VSVChkYXRhU3RvcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKaW5kZXggOWY3
YmUzYzk0MWI2Y2QwYTFiOTRjYjEzNjA5OGYzYTA0MWNlZmY5OS4uYWMwNGUzOGE1N2IyMTU5YmVi
NDJmMzg0NzliNDRmNWUyNmRlZGJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCkBAIC0yNiw2ICsy
Niw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclBy
b3h5LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiV2Vi
Q29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKIApA
QCAtMzMsOCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKLSAgICBtX2Nvb2tpZVBlcnNpc3RlbnRTdG9yYWdlTWFw
LnNldChzZXNzaW9uSUQsIHN0ZDo6bWFrZV9wYWlyKHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkp
OwotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0
b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpT
ZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdl
VHlwZSksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llUGVy
c2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmIHN0b3JhZ2VQ
YXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlJiBzdG9yYWdlVHlwZSkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xT
b3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3Vw
LmNwcAppbmRleCAwM2E5YjM2MDUzOTU5YTIwNmU3MmQ4NThiODU4Njk1MjA5MTM1MjczLi4wNWJk
MmY2YzRiMDk3NDUxYjExYzgwYzBmNzIyNTk3NTc1N2NiYmE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCkBAIC0zNywxNSAr
MzcsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmIHBhcmFtZXRlcnMpCiB7Ci0gICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMm
IGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgIHN1cHBsZW1lbnQ8V2ViQ29v
a2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShkZWZhdWx0U2Vz
c2lvblBhcmFtZXRlcnMuc2Vzc2lvbklELCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2ll
UGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVy
c2lzdGVudFN0b3JhZ2VUeXBlKTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAg
ICAgIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VF
bmFibGVkID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VF
bmFibGVkKCk7Ci0gICAgICAgIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5pZ25vcmVUTFNFcnJv
cnMgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmlnbm9yZVRMU0Vycm9ycygpOwotICAgICAgICBkZWZh
dWx0U2Vzc2lvblBhcmFtZXRlcnMucHJveHlTZXR0aW5ncyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+
bmV0d29ya1Byb3h5U2V0dGluZ3MoKTsKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNvb2tpZUFj
Y2VwdFBvbGljeSA9IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3k7CiAgICAgcGFyYW1l
dGVycy5sYW5ndWFnZXMgPSB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbkluZm8uaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbkluZm8uaAppbmRleCA4MzUwZGJhY2Y4ZDU1N2U1N2M4YmNmYzNlOTNkMDk3
Yjg5NDZhYmI4Li45ZjQ2ODVkMTNhYmQyYjRhYzhjNTM3OGI4ZTUxMmY5YzAyOWRiM2IwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb25JbmZvLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mby5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEg
b25jZQogCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSFRUUENv
b2tpZUFjY2VwdFBvbGljeS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiYmY0NDY0NDNjYzIyOWViMDIz
ZGQ0NDdlZmE1NmYwYmU4ZTliZjBhLi5hNjcyNjNjMjE3YWJlM2EzYzQ0Mjc1NmEzMjRiYTUyZmJl
NDY0NWFhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsOTggQEAKKzIwMjAtMDktMjkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBNb3ZlIE5ldHdvcmtQcm9jZXNzUHJveHkgb3du
ZXJzaGlwIGZyb20gV2ViUHJvY2Vzc1Bvb2wgdG8gV2Vic2l0ZURhdGFTdG9yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MDQxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgQnJhZHkgRWlkc29uLgorCisgICAgICAgIE1vc3QgY2hhbmdlcyB0byB0ZXN0
cyBhcmUganVzdCBjYWxsaW5nIGEgZnVuY3Rpb24gb24gdGhlIFdLV2Vic2l0ZURhdGFTdG9yZSBp
bnN0ZWFkIG9mIHRoZSBXS1Byb2Nlc3NQb29sCisgICAgICAgIGJlY2F1c2Ugd2Ugd2FudCB0byBk
byBzb21ldGhpbmcgd2l0aCB0aGUgbmV0d29yayBwcm9jZXNzIGFuZCBpdCBoYXMgYSBuZXcgb3du
ZXIuCisgICAgICAgIEV4Y2VwdGlvbnMgYXJlIG5vdGVkIGlubGluZS4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nv
bm5lY3Rpb24ubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6ZG93bmxvYWRBdFJhdGUpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3Zlcnku
bW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3Jh
ZGVUb1YyLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tOgorICAgICAgICAo
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJNdWx0aVByb2Nlc3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tOgorICAgICAgICAo
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJTdXNwZW5kSW1taW5lbnRseS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tOgorICAg
ICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9M
b2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW06CisgICAgICAg
IChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdv
cmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tOgorICAgICAgICAoY2hlY2tS
ZWNvdmVyeUFmdGVyQ3Jhc2gpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW06CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tOgorICAgICAgICAo
VEVTVCk6CisgICAgICAgIFRoaXMgdGVzdCB3YXMgbWFraW5nIGEgV0tXZWJzaXRlRGF0YVN0b3Jl
LCBnZXR0aW5nIGl0cyByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3MgZGlyZWN0b3J5LAorICAgICAg
ICBwdXR0aW5nIHRoaW5ncyBpbiB0aGF0IGRpcmVjdG9yeSwgdGhlbiBzdGFydGluZyB0aGUgbmV0
d29yayBwcm9jZXNzIGFuZCBtYWtpbmcgc3VyZSBldmVyeXRoaW5nCisgICAgICAgIHdvcmtzIHdo
ZW4gaW5pdGlhbGl6aW5nIHRoZSBuZXR3b3JrIHByb2Nlc3MuICBOb3csIG5ldHdvcmsgcHJvY2Vz
cyBpbml0aWFsaXphdGlvbiBoYXBwZW5zIHdoZW4gYQorICAgICAgICBXS1dlYnNpdGVEYXRhU3Rv
cmUgaXMgaW5zdGFudGlhdGVkLCBzbyB3ZSBuZWVkIHRvIHB1dCB0aGluZ3MgdGhlcmUgYmVmb3Jl
IGluc3RhbnRpYXRpbmcgYSBXS1dlYnNpdGVEYXRhU3RvcmUuCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW06CisgICAgICAgIEJl
Zm9yZSB0aGlzIGNoYW5nZSwgZWFjaCBXS1Byb2Nlc3NQb29sIGhhZCBpdHMgb3duIG5ldHdvcmsg
cHJvY2Vzcywgd2hpY2ggaG9sZHMgdGhlIHNlcnZpY2Ugd29ya2VyIHJlZ2lzdHJ5CisgICAgICAg
IGZvciB0aGUgV2Vic2l0ZURhdGFTdG9yZXMgdXNlZCB3aXRoIHRoYXQgcHJvY2VzcyBwb29sLiAg
Tm93LCB0aGUgbmV0d29yayBwcm9jZXNzIHN0aWxsIG5lZWRzIHRvIGhhdmUgYSBzZXJ2aWNlCisg
ICAgICAgIHdvcmtlciByZWdpc3RyeSBpbiBpdCwgYnV0IHdoZW4gd2UgcmVjZWl2ZSBhIG1lc3Nh
Z2UgZnJvbSBpdCBsb29raW5nIGZvciBhIHdlYiBwcm9jZXNzIHRvIHJ1biB0aGUgc2VydmljZQor
ICAgICAgICB3b3JrZXIsIHdlIGdvIGFyYml0cmFyaWx5IHRvIHRoZSBmaXJzdCBwcm9jZXNzIHBv
b2wgdGhhdCBoYXMgYSBwcm9jZXNzIHdlIGNhbiB1c2UuICBUaGlzIGxvZ2ljIGlzIGluIAorICAg
ICAgICBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05l
dHdvcmtQcm9jZXNzLiAgQmVjYXVzZSB3ZSB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCBlYWNo
CisgICAgICAgIHRpbWUsIHNldHRpbmcgdGhlIGN1c3RvbSB1c2VyIGFnZW50IHRvIHR3byBkaWZm
ZXJlbnQgdGhpbmdzIGluIHR3byBkaWZmZXJlbnQgcHJvY2VzcyBwb29scyBjYXVzZXMgb25seSBv
bmUKKyAgICAgICAgdG8gYmUgdXNlZC4gIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBpbiBwcmFjdGlj
ZSwgdGhvdWdoLCBiZWNhdXNlIHRoZSBvbmx5IGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgU1BJ
IHRvCisgICAgICAgIHNldCBhIHNlcnZpY2Ugd29ya2VyJ3MgY3VzdG9tIHVzZXIgYWdlbnQgaXMg
U2FmYXJpLCB3aGljaCBvbmx5IGhhcyBvbmUgcHJvY2VzcyBwb29sLiAgVGhpcyB0ZXN0IHN0aWxs
IHZlcmlmaWVzCisgICAgICAgIHRoYXQgYSB1c2VyIGFnZWludCBpcyBjb3JyZWN0bHkgc2VudC4K
KyAgICAgICAgU2ltaWxhcmx5LCB0aGUgdGVzdHMgdGhhdCBjb3VudCBzZXJ2aWNlIHdvcmtlciBw
cm9jZXNzZXMgZWl0aGVyIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMgb3IgbmVlZCB0byBiZSBydW4g
d2l0aAorICAgICAgICBvbmUgcHJvY2VzcyBwb29sIHBlciBwYXJlbnQgcHJvY2Vzcy4gIFRvIGtl
ZXAgdGhlIHJlc3VsdHMgdGhlIHNhbWUsIEkgc2VwYXJhdGVkIHRoZSB0ZXN0cyBpbnRvIGRpZmZl
cmVudAorICAgICAgICBURVNUKFNlcnZpY2VXb3JrZXJzLCAuLi4pIG1hY3JvcyB3aGljaCBhcmUg
cnVuIGluIHNlcGFyYXRlIHBhcmVudCBwcm9jZXNzZXMuCisgICAgICAgIFRoZSB0ZXN0IFJlc3Rv
cmVGcm9tRGlza05vbkRlZmF1bHRTdG9yZSBuZWVkcyB0byB1c2UgdGhlIHNhbWUgZGF0YSBzdG9y
ZSBmb3IgYm90aCBXS1dlYlZpZXdzIG5vdyBiZWNhdXNlIG90aGVyd2lzZQorICAgICAgICB0aGVy
ZSB3YXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgc3RhcnR1cCBvZiBhIG5ldyBuZXR3b3JrIHBy
b2Nlc3MgdGhhdCB3YXNuJ3QgdGhlcmUgYmVmb3JlIGJlY2F1c2Ugd2Ugd2VyZSB1c2luZyB0aGUK
KyAgICAgICAgc2FtZSBwcm9jZXNzIHBvb2wgYW5kIHRoZXJlZm9yZSB0aGUgc2FtZSBuZXR3b3Jr
IHByb2Nlc3MuICBJIGFkZGVkIHNwaW5uaW5nIHRoZSBydW4gbG9vcCBhbmQgc2xlZXBpbmcgdG8g
YmUgYWJsZSB0bworICAgICAgICByZXByb2R1Y2UgdGhlIHJhY2UgY29uZGl0aW9uIGZhaWx1cmUg
YW5kIEkgdXNlIHRoZSBzYW1lIFdLV2Vic2l0ZURhdGFTdG9yZSB0byB1c2UgdGhlIHNhbWUgbmV0
d29yayBwcm9jZXNzLCB3aGljaCB3YXMKKyAgICAgICAgdGhlIGludGVudCBvZiB1c2luZyB0aGUg
c2FtZSBXS1Byb2Nlc3NQb29sIGJlZm9yZS4gIFRoZSB0ZXN0IHN0aWxsIHRlc3RzIHRoYXQgdGhl
IHJlZ2lzdHJhdGlvbiBpcyByZS11c2VkIHdoZW4gd2UgYXJlCisgICAgICAgIG5vdCB1c2luZyB0
aGUgZGVmYXVsdCBkYXRhIHN0b3JlLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW06CisgICAgICAgICgtW0NoZWNr
U2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdp
dGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAg
ICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdKToKKyAgICAg
ICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdKToKKyAg
ICAgICAgKFRFU1QpOgorICAgICAgICBUaGlzIGlzIHRoZSB3aG9sZSBwb2ludCBvZiBtZSBkb2lu
ZyB0aGlzLgorICAgICAgICBJIHRvb2sgYSB0ZXN0IHRoYXQgd2FzIGZsYWt5IG9ubHkgb24gaU9T
IChiZWNhdXNlIG9mIGRpZmZlcmVudCBOU0hUVFBDb29raWVTdG9yYWdlIHN5bmNpbmcgYmVoYXZp
b3IpIGFuZCBtYWRlCisgICAgICAgIGl0IGZsYWt5IG5vd2hlcmUgKGZpbmdlcnMgY3Jvc3NlZCEp
IGFuZCBhZGRlZCBhIHRlc3QgdGhhdCBjb3JyZWN0bHkgaGFuZGxlcyBzZXNzaW9uIGNvb2tpZXMg
bGlrZSB3ZSBjb3VsZCBub3QKKyAgICAgICAgYmVmb3JlIHRoaXMgY2hhbmdlLgorICAgICAgICBJ
IGFsc28gcmUtdXNlZCBzb21lIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgYW5kIG1hZGUgaXQgc3RvcCB1
c2luZyBwcm9jZXNzLWdsb2JhbCBzdGF0aWMgdmFyaWFibGVzIGZvciB0ZXN0IHN0YXRlLgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVy
LWxlYWtzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW06CisgICAgICAgIChy
dW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMpOgorICAgICAgICAoVEVTVCk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW06
CisgICAgICAgICgtW0Nsb3NlV2hpbGVTdGFydGluZ1Byb3RvY29sIHN0YXJ0TG9hZGluZ10pOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6cnVuVGVzdCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpy
ZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OmZpbmRBbmREdW1wV2ViS2l0UHJvY2Vzc0lkZW50aWZpZXJzKToKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6Om5ldHdvcmtQcm9jZXNzRGlkQ3Jhc2gpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KToKKyAgICAgICAgV0tDb250ZXh0
U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyBpcyBub3Qg
bmVlZGVkLCBzbyBJIHJlbW92ZWQgaXQuCisgICAgICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJz
aXRlRGF0YVN0b3JlIGlzbid0IG5lZWRlZCBhbnkgbW9yZSBiZWNhdXNlIFdLQ29udGV4dFJlZiAo
V2ViUHJvY2Vzc1Bvb2wpIGRvZXNuJ3QKKyAgICAgICAgb3duIGEgbmV0d29yayBwcm9jZXNzIGFu
eSBtb3JlLCBzbyBpdCBkb2Vzbid0IGNhcmUgd2hpY2ggaXMgdGhlIGRlZmF1bHQgV2Vic2l0ZURh
dGFTdG9yZS4KKyAgICAgICAgSW4gZmFjdCwgdGhlICJkZWZhdWx0IiBXZWJzaXRlRGF0YVN0b3Jl
IGlzbid0IHJlYWxseSBpbXBvcnRhbnQgaW4gdGhlIG5ldHdvcmsgcHJvY2VzcyBhbnkgbW9yZS4K
KwogMjAyMC0wOS0yOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJlbW92ZSBwbGlzdC1iYXNlZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIHN0
b3JhZ2UsIHdoaWNoIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGRhdGFiYXNlLWJhc2VkIHN0b3JhZ2UK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCmlu
ZGV4IDk3Mzg5ZjAxZmYyZWU5OWI3ODNiMGI1MjEwODA3NGYxYTgxYjY5ODEuLjk3YjcyZTAxNmRl
ZGU0YTA3ZDQ2NTNmM2E5YmM1MmI4ZjRmMzE5MmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rp
b24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nl
c3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9y
dCA8V2ViS2l0L1dLUHJvY2Vzc0dyb3VwUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJv
Y2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtODcsNyArODgs
NyBAQCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlv
bikKICAgICBwaWRfdCB3ZWJWaWV3MlBJRCA9IFt3ZWJWaWV3Mi5nZXQoKSBfd2ViUHJvY2Vzc0lk
ZW50aWZpZXJdOwogICAgIEVYUEVDVF9ORSh3ZWJWaWV3MVBJRCwgd2ViVmlldzJQSUQpOwogCi0g
ICAgcGlkX3QgaW5pdGlhbE5ldHdvcmtQcm9jZXNzSWRlbnRpZmlmZXIgPSBbcHJvY2Vzc1Bvb2wu
Z2V0KCkgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl07CisgICAgcGlkX3QgaW5pdGlhbE5ldHdv
cmtQcm9jZXNzSWRlbnRpZmlmZXIgPSBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0
b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdOwogICAgIEVYUEVDVF9ORShpbml0aWFsTmV0
d29ya1Byb2Nlc3NJZGVudGlmaWZlciwgMCk7CiAgICAga2lsbChpbml0aWFsTmV0d29ya1Byb2Nl
c3NJZGVudGlmaWZlciwgU0lHS0lMTCk7CiAgICAgVXRpbDo6cnVuKCZuZXR3b3JrUHJvY2Vzc0Ny
YXNoZWQpOwpAQCAtOTYsNyArOTcsNyBAQCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NDcmFz
aFdpdGhQZW5kaW5nQ29ubmVjdGlvbikKICAgICBbd2ViVmlldzEuZ2V0KCkgbG9hZFJlcXVlc3Q6
W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZv
clJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAi
VGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV1dOwogICAgIFt3ZWJWaWV3MS5nZXQoKSBfdGVzdF93
YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CiAKLSAgICBwaWRfdCByZWxhdW5jaGVkTmV0d29y
a1Byb2Nlc3NJZGVudGlmaWVyID0gW3Byb2Nlc3NQb29sLmdldCgpIF9uZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXJdOworICAgIHBpZF90IHJlbGF1bmNoZWROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIg
PSBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXJdOwogICAgIEVYUEVDVF9ORShpbml0aWFsTmV0d29ya1Byb2Nlc3NJZGVudGlmaWZl
ciwgcmVsYXVuY2hlZE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik7CiAgICAgRVhQRUNUX0ZBTFNF
KG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk7CiAKQEAgLTE0Niw4ICsxNDcsOCBAQCBURVNUKFdlYktp
dCwgTmV0d29ya1Byb2Nlc3NSZWxhdW5jaE9uTGF1bmNoRmFpbHVyZSkKIAogICAgIC8vIENvbnN0
dWN0aW5nIGEgV2ViVmlldyBzdGFydHMgYSBuZXR3b3JrIHByb2Nlc3Mgc28gdGVybWluYXRlIHRo
aXMgb25lLiBUaGUgcGFnZSBsb2FkIGJlbG93IHdpbGwgdGhlbiByZXF1ZXN0IGEgbmV0d29yayBw
cm9jZXNzIGFuZCB3ZQogICAgIC8vIG1ha2UgdGhpcyBuZXcgbmV0d29yayBwcm9jZXNzIGxhdW5j
aCBjcmFzaCBvbiBzdGFydHVwLgotICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOwotICAgIFtwcm9jZXNzUG9vbCBfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZh
aWxGb3JUZXN0aW5nXTsKKyAgICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9tYWtlTmV4dE5ldHdvcmtQ
cm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmddOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gZGVs
ZWdhdGUgPSBhZG9wdE5TKFtbTW9uaXRvcldlYkNvbnRlbnRDcmFzaE5hdmlnYXRpb25EZWxlZ2F0
ZSBhbGxvY10gaW5pdF0pOwogICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxl
Z2F0ZS5nZXQoKV07CkBAIC0xNTgsNyArMTU5LDcgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9j
ZXNzUmVsYXVuY2hPbkxhdW5jaEZhaWx1cmUpCiAgICAgRVhQRUNUX1RSVUUobmV0d29ya1Byb2Nl
c3NDcmFzaGVkKTsKICAgICBFWFBFQ1RfRkFMU0Uod2ViUHJvY2Vzc0NyYXNoZWQpOwogICAgIEVY
UEVDVF9HVChbd2ViVmlldyBfd2ViUHJvY2Vzc0lkZW50aWZpZXJdLCAwKTsKLSAgICBFWFBFQ1Rf
R1QoW3Byb2Nlc3NQb29sLmdldCgpIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCAwKTsKKyAg
ICBFWFBFQ1RfR1QoW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfbmV0d29y
a1Byb2Nlc3NJZGVudGlmaWVyXSwgMCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93
bmxvYWQubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2Fk
Lm1tCmluZGV4IGI3ZWQ5OTkzOWZkNTlmMjI4YTdlOGJkNzQ5NzEyZjUzNjYwMTU2MTYuLjE4MTkx
MzFjOWEwZmViMzBiMWEyZjBjZmNkODdiZjIwNDVlYmIzZjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQpAQCAtODg5LDkgKzg4OSw5
IEBAIHZvaWQgZG93bmxvYWRBdFJhdGUoZG91YmxlIGRlc2lyZWRLYnBzLCB1bnNpZ25lZCBzcGVl
ZE11bHRpcGxpZXIsIEFwcFJldHVybnNUb0ZvCiAgICAgcmVjZWl2ZWREYXRhID0gZmFsc2U7CiAg
ICAgVXRpbDo6cnVuKCZyZWNlaXZlZERhdGEpOwogICAgIC8vIFN0YXJ0IHRoZSBEb3dubG9hZE1v
bml0b3IncyB0aW1lci4KLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wg
X3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKKyAgICBbW3dlYlZpZXcgY29uZmlndXJh
dGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpZRVNdOwog
ICAgIGlmIChyZXR1cm5Ub0ZvcmVncm91bmQgPT0gQXBwUmV0dXJuc1RvRm9yZWdyb3VuZDo6WWVz
KQotICAgICAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3N5bnRoZXNp
emVBcHBJc0JhY2tncm91bmQ6Tk9dOworICAgICAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0u
d2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpOT107CiAgICAgZGlk
Q2FuY2VsID0gZmFsc2U7CiAgICAgVXRpbDo6cnVuKCZkaWRDYW5jZWwpOwogICAgIHRlcm1pbmF0
ZVNlcnZlciA9IHRydWU7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0KaW5kZXggNWNkN2FiZGEwMWQxOTc0N2Rj
ZWQ0NWFiZWU5OWVjYjFjMTRkNjE2MC4uZDc3YTZmZDk4NzllNDNmNzAxMWRkYWY5MmMzYTc5N2Yz
ZmMxMzczNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JREJDaGVja3BvaW50V0FMLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8
V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29u
dGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmln
dXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJv
Y2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hl
ZXQuaD4KQEAgLTg2LDcgKzg3LDcgQEAgVEVTVChJbmRleGVkREIsIENoZWNrcG9pbnRzV0FMQXV0
b21hdGljYWxseSkKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7
CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVz
c2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0
TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAs
IDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3Zlcnku
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0ZVJlY292
ZXJ5Lm1tCmluZGV4IGM4YWYxZDI0M2M0ZmViNThhYzk4NGRhZjE0ZDgxNTMxYTdjYzNjNzMuLmJi
ZjFhMTUyMTVkYzFmZDI4ZGZkZGI5ZTM0MWI2NGY5YzAwOGY0YzQgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3ZlcnkubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVy
eS5tbQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBv
cnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+
CiAjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAg
VEVTVChJbmRleGVkREIsIERlbGV0ZVJlY292ZXJ5KQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdD
b25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250
cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0
SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0
YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IHRoZSBpbmNv
bnNpc3RlbnQgZGF0YWJhc2UgZmlsZXMgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeQogICAgIE5T
VVJMICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklEQkRl
bGV0ZVJlY292ZXJ5IiB3aXRoRXh0ZW5zaW9uOkAic3FsaXRlMyIgc3ViZGlyZWN0b3J5OkAiVGVz
dFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbQppbmRleCA5NWNj
YTBjZTI4MTZmZjFhNmE0NTVhZDBiZDJjOGE0YWE0ZjI3ZmVkLi44OGE1M2Y2MWQ5ZDk4MjY1N2I5
NjVlZjhhNmNlYmE3OTFlZmYxNzU1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tCkBAIC0zMSw2
ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dL
V2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNp
bXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdl
YktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtNTgsNyArNTksNyBAQCBURVNUKEluZGV4ZWRE
QiwgSW5kZXhVcGdyYWRlVG9WMikKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlv
bj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9j
XSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRk
U2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsK
IAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3Jr
UHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSB0aGUgaW5jb25zaXN0ZW50IGRh
dGFiYXNlIGZpbGVzIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkKICAgICBOU1VSTCAqdXJsMSA9
IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJbmRleFVwZ3JhZGUiIHdp
dGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291
cmNlcyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KaW5kZXgg
ZmZhNWE3ODc4YTQ3MzJiOGVjMjQ1YzkwNTNmZDE3ZWU1OTU2ZmEzZC4uNDAzZTBmZmE4MjEyMzQ1
MWM0NjZmZWVjYzMyNGY5YzZlNzYxZDQzZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5m
b1VwZ3JhZGVUb1YyLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9j
ZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxl
clByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0
ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZp
Z3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtNTcs
NyArNTgsNyBAQCBURVNUKEluZGV4ZWREQiwgSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIp
CiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29u
ZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVy
OmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKIAogICAgIC8vIENvcHkgZGF0YWJhc2UgZmlsZXMgd2l0aCBvbGQgT2JqZWN0U3RvcmVJbmZv
IHNjaGVtYSB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5LgogICAgIE5TVVJMICp1cmwxID0gW1tO
U0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklEQk9iamVjdFN0b3JlSW5mb1Vw
Z3JhZGUiIHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0
QVBJLnJlc291cmNlcyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1t
CmluZGV4IDY4NzQ1MjllYmJmMzc4NTE4ZDkzZTBhMDgyMWY2MzAxMmNmYTZkNWYuLjczMDc3ZWNk
ZmQzNjViNTI5MDUzZDQ3Y2JhMmExNGVkMDUxZWQ2ZWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRh
dGFiYXNlUHJvY2Vzc0tpbGwubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9X
S1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250
cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Q
cml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29s
Q29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpAQCAtOTIsNyArOTMs
NyBAQCBURVNUKEluZGV4ZWREQiwgRGF0YWJhc2VQcm9jZXNzS2lsbCkKICAgICAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAgICAgICBpZiAo
IWtpbGxlZERCUHJvY2VzcyAmJiBvcGVuUmVxdWVzdFVwZ3JhZGVOZWVkZWQpIHsKICAgICAgICAg
ICAgIGtpbGxlZERCUHJvY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICBbY29uZmlndXJhdGlvbi5n
ZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgICAgICAgICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQk11bHRpUHJvY2Vzcy5tbSBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCmlu
ZGV4IDdmNjI2NDVkOTk2MGVkZTk2MGMwMDFjMjcyYjY1MDM5MzkwMTE2MzIuLjZmNjdkYzI3ZWRj
M2QyNzQ1YjE3MGU0ODJiY2Q5MGU4NDk0Y2I5NWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNz
Lm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRy
b2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1By
b2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNo
ZWV0Lmg+CiAjaW1wb3J0IDx3dGYvRGVxdWUuaD4KQEAgLTY5LDcgKzcwLDcgQEAgVEVTVChJbmRl
eGVkREIsIEluZGV4ZWREQk11bHRpUHJvY2VzcykKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29u
ZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0
aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJv
bGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhh
bmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFT
dG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgUmV0YWluUHRyPFdLV2ViVmll
dz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNN
YWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgp
XSk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCUGVyc2lzdGVuY2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCmluZGV4IGIzMmNlNGE1ZjczODYzYWVkZGNi
OTE5MGI1YjQzNzBlMzc0NDNiNWUuLmQ2MjIwMzIyZTQ3OGQxZGFjNzhmMDY5NjdjM2I2NDNiZmQ2
MmY5YmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCUGVyc2lzdGVuY2UubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQpAQCAtNzgsNyArNzgsNyBAQCBURVNU
KEluZGV4ZWREQiwgSW5kZXhlZERCUGVyc2lzdGVuY2UpCiAgICAgd2ViVmlldyA9IG5pbDsKIAog
ICAgIC8vIFRlcm1pbmF0ZSB0aGUgbmV0d29yayBwcm9jZXNzCi0gICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmln
dXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CiAKICAgICAvLyBNYWtlIGEgbmV3IHdlYiB2aWV3IHRvIGZpbmlzaCB0aGUgdGVzdAogICAgIHdl
YlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJl
Y3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwpA
QCAtMjY4LDcgKzI2OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUaGlyZFBhcnR5RnJh
bWVIYXNBY2Nlc3MpCiAKICAgICB3ZWJWaWV3ID0gbmlsOwogICAgIHNlY29uZFdlYlZpZXcgPSBu
aWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90
ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBUaGlyZC1wYXJ0eSBJREIgc3RvcmFn
ZSBpcyBzdG9yZWQgaW4gdGhlIG1lbW9yeSBvZiBuZXR3b3JrIHByb2Nlc3MuCiAgICAgYXV0byB0
aGlyZFdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5T
TWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQo
KV0pOwpAQCAtMzg1LDcgKzM4NSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUaGlyZFBh
cnR5V29ya2VySGFzQWNjZXNzKQogCiAgICAgd2ViVmlldyA9IG5pbDsKICAgICBzZWNvbmRXZWJW
aWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFT
dG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB0aGlyZFdlYlZpZXcg
PSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwg
MCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIGxv
YWRUZXN0UGFnZUluV2ViVmlldyh0aGlyZFdlYlZpZXcuZ2V0KCksIEAiZGF0YWJhc2UgaXMgY3Jl
YXRlZCIpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkubW0KaW5kZXggOGVjNjVm
MGEzYmE5MzczNmZkYjRmOWRkZmVmNzVjZTYwMDA1ZmQwZC4uNTEwYjI0ZjU2OWQyMmJkNDBhN2Fk
YmUyNWVjZmQwZWNmYzhhYzcyNiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5
Lm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9y
dCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
ZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4K
ICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTg4LDggKzg5LDggQEAgVEVTVChJbmRleGVk
REIsIEluZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5KQogCiAgICAgcnVuVGVzdEFuZENoZWNrUmVz
dWx0KEAiQ29udGludWUiKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29s
IF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwotICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwor
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3NlbmROZXR3b3JrUHJv
Y2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJ1blRl
c3RBbmRDaGVja1Jlc3VsdChAIkV4cGVjdGVkIEFib3J0IEZvciBTdXNwZW5zaW9uIik7CiAgICAg
cnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiRXhwZWN0ZWQgU3VjY2VzcyBBZnRlciBSZXN1bWUiKTsK
QEAgLTE1OCw4ICsxNTksOCBAQCBURVNUKEluZGV4ZWREQiwgU3VzcGVuZEltbWluZW50bHlGb3JU
aGlyZFBhcnR5RGF0YWJhc2VzKQogICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOm1haW5GcmFt
ZVN0cmluZyBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL3dlYmtpdC5vcmci
XV07CiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiZGF0YWJhc2UgaXMgY3JlYXRlZCIpOwog
Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseV07Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vz
c1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1p
bmVudGx5XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5k
TmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAi
dHJhbnNhY3Rpb24gaXMgY29tcGxldGVkIik7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlRlbXBGaWxlU2l6ZS5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1t
CmluZGV4IDUzNjU0MWUzYjBlNWNkYTNhM2I1NTFjMWU4MWU5NjNmNTkyYWViMmYuLmU3Yjk5MjI4
Y2U4NzZlNDQ3ZTY0NzgyZWY5ZDg3ZjI1YWRjOWI5ZmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVT
aXplLm1tCkBAIC05NSw3ICs5NSw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJUZW1wRmls
ZVNpemUpCiAKICAgICAvLyBUZXJtaW5hdGUgbmV0d29yayBwcm9jZXNzIHRvIGtlZXAgV0FMIG9u
IGRpc2suCiAgICAgd2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdl
dCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIEVY
UEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0
aDp3YWxGaWxlUGF0aC5nZXQoKS5wYXRoXSk7CiAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4g
ZmlsZUF0dHJpYnV0ZXMgPSBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGF0dHJpYnV0
ZXNPZkl0ZW1BdFBhdGg6d2FsRmlsZVBhdGguZ2V0KCkucGF0aCBlcnJvcjpuaWxdOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQ
ZXJzaXN0ZW5jZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9j
YWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KaW5kZXggNDEzM2VlN2IzZGFlNDNlYzIwNDljZmZjMDYz
YzBlNDI5YzE3YzVlZi4uNWY3OTE5MDk0M2M3NzFlOWQ5ZTQ0MmEwZGEyNjZmZjlhMDNiYTJmMiAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0
b3JhZ2VQZXJzaXN0ZW5jZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1w
b3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
S1dlYnBhZ2VQcmVmZXJlbmNlc1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVE
YXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxX
ZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
VXNlclN0eWxlU2hlZXQuaD4KQEAgLTEwOSw3ICsxMTAsNyBAQCBURVNUKFdLV2ViVmlldywgTG9j
YWxTdG9yYWdlUHJvY2Vzc0NyYXNoZXMpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZy
ZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAgIEVYUEVDVF9XS19TVFJFUShAInNlc3Npb246c3Rv
cmFnZSIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5n
ZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1
cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
IAogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKQEAgLTE2Miw3ICsxNjMsNyBAQCBU
RVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlUHJvY2Vzc1N1c3BlbmRzKQogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tf
U1RSRVEoQCJ2YWx1ZSIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7CiAKLSAgICBbcHJvY2Vz
c1Bvb2wuZ2V0KCkgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07Cisg
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9j
ZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKIAogICAgIHJlYWR5VG9Db250aW51ZSA9IGZhbHNl
OwogICAgIFt3ZWJWaWV3MSBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ3aW5kb3cubG9jYWxTdG9yYWdl
LnNldEl0ZW0oJ2tleScsICduZXdWYWx1ZScpIiBjb21wbGV0aW9uSGFuZGxlcjpeKGlkLCBOU0Vy
cm9yICopIHsKQEAgLTE3Nyw3ICsxNzgsNyBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdl
UHJvY2Vzc1N1c3BlbmRzKQogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
cmVhZHlUb0NvbnRpbnVlKTsKICAgICAKLSAgICBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX3NlbmROZXR3
b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURh
dGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKIAogICAgIHJlY2VpdmVkU2Ny
aXB0TWVzc2FnZSA9IGZhbHNlOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2
ZWRTY3JpcHRNZXNzYWdlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCmluZGV4IGU2MGY4ODAyNWQwOTM3ODlmNjk1
NjBkOWI5MmIyODJmMDcxMzBhOGQuLjBlMjFmOTA5NTAwMTRmNmM0OTBiMGViOGU0NjFlYzRiYTg1
MGJiODEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
TmV0d29ya1Byb2Nlc3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQpAQCAtMjgsNyArMjgsNyBAQAogI2ltcG9ydCAiSFRUUFNl
cnZlci5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAiVXRpbGl0aWVzLmgi
Ci0jaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktp
dC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4K
ICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KQEAgLTM3
LDE0ICszNywxNCBAQCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NFbnRpdGxlbWVudHMpCiB7
CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpbW1tXS1dl
YlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV1dKTsKICAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJzaW1wbGUiXTsKLSAgICBXS1By
b2Nlc3NQb29sICpwb29sID0gW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2w7Ci0g
ICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9IFtwb29sIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVt
ZW50Rm9yVGVzdGluZzpAImNvbS5hcHBsZS5yb290bGVzcy5zdG9yYWdlLldlYktpdE5ldHdvcmtp
bmdTYW5kYm94Il07CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlICpzdG9yZSA9IFt3ZWJWaWV3IGNv
bmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmU7CisgICAgYm9vbCBoYXNFbnRpdGxlbWVudCA9
IFtzdG9yZSBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJjb20uYXBw
bGUucm9vdGxlc3Muc3RvcmFnZS5XZWJLaXROZXR3b3JraW5nU2FuZGJveCJdOwogI2lmIFBMQVRG
T1JNKE1BQykgJiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKICAgICBFWFBFQ1RfVFJVRShoYXNF
bnRpdGxlbWVudCk7CiAjZWxzZQogICAgIEVYUEVDVF9GQUxTRShoYXNFbnRpdGxlbWVudCk7CiAj
ZW5kaWYKLSAgICBFWFBFQ1RfRkFMU0UoW3Bvb2wgX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1l
bnRGb3JUZXN0aW5nOkAidGVzdCBmYWlsdXJlIGNhc2UiXSk7CisgICAgRVhQRUNUX0ZBTFNFKFtz
dG9yZSBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJ0ZXN0IGZhaWx1
cmUgY2FzZSJdKTsKIH0KIAogVEVTVChXZWJLaXQsIEhUVFBSZWZlcmVyKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNo
Tm9uUGVyc2lzdGVudERhdGFTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KaW5k
ZXggNjA5OGU4ZGFkMjUyZTU5ZWM0OTEyNTBiNDIxNmQzY2QwOTM2ZThmNy4uMmY4YTJlMzNmZTg3
MDNiYWIyZDhlMDUxMDgzMmJlY2Q5ZDQ4OTM0YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERh
dGFTdG9yZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05l
dHdvcmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tCkBAIC03Miw3ICs3Miw3
IEBAIHN0YXRpYyB2b2lkIGNoZWNrUmVjb3ZlcnlBZnRlckNyYXNoKFdLV2Vic2l0ZURhdGFTdG9y
ZSAqZGF0YVN0b3JlKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAgICAg
ZG9uZSA9IGZhbHNlOwogCi0gICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29s
IF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25d
LndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKICAgICBbd2ViVmll
dyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnNpbXBsZTJdXTsKICAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5t
bSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5h
dmlnYXRpb24ubW0KaW5kZXggZTQwMzA2MjZjYjQwMTBkOTk3Zjc4NmYxYzhmNzNlZjg4ZGYzYjUy
OS4uMGVlY2E0OTliZDQ0N2ZkNTIyM2Q0NzJhZGM3Mzg2YTIzNjhmMTkxYyAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdh
dGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nl
c3NTd2FwT25OYXZpZ2F0aW9uLm1tCkBAIC01Mzg1LDcgKzUzODUsNyBAQCBURVNUKFByb2Nlc3NT
d2FwLCBVc2VQcmV3YXJtZWRQcm9jZXNzQWZ0ZXJUZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNzKQog
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbcHJvY2Vz
c1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRp
b24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAg
ICAgYXV0byB3ZWJWaWV3MiA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjp3ZWJWaWV3Q29uZmln
dXJhdGlvbi5nZXQoKV0pOwogICAgIFt3ZWJWaWV3MiBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVs
ZWdhdGUuZ2V0KCldOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCmluZGV4IGQyZTI1M2Vj
NjRlNzdhZDg4NjAzYTE1ZmUwYWJmMWQwN2MwMGFjYzUuLmNmOWZjMzQwZTM5MGUyOGU0MTRkMGQw
NDFhYmQ2Mjg5MTM2N2NjYTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KQEAgLTQy
Niw3ICs0MjYsNyBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jZXNz
UmVzdGFydCkKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0g
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXcyID0gYWRvcHROUyhbW1dLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25m
aWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApAQCAtNDU5LDcgKzQ1OSw3IEBAIFRF
U1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTmV0d29ya1Byb2Nlc3NSZXN0YXJ0KQogCiAgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAKLSAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKIAogICAgIGF1dG8gd2ViVmlldzMgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOwogCkBAIC0xMjM3LDEwICsxMjM3LDggQEAgVEVTVChSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLCBNaWdyYXRlRGF0YUZyb21NaXNzaW5nVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dFNhbWVTaXQKIAogVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBDYW5BY2Nlc3NEYXRhU3Vt
bWFyeVdpdGhOb1Byb2Nlc3NQb29sKQogeworICAgIE5TVVJMICppdHBSb290VVJMID0gW05TVVJM
IGZpbGVVUkxXaXRoUGF0aDpbTlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGlu
Z1BhdGhDb21wb25lbnQ6QCJDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sVGVz
dCJdIGlzRGlyZWN0b3J5OllFU107CiAgICAgYXV0byBkZWZhdWx0RmlsZU1hbmFnZXIgPSBbTlNG
aWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07Ci0gICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZp
Z3VyYXRpb24gKmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19XS1dlYnNpdGVEYXRhU3RvcmVD
b25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOwotICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtb
W1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpkYXRhU3Rv
cmVDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07Ci0gICAgTlNVUkwgKml0cFJvb3RVUkwgPSBb
W2RhdGFTdG9yZSBfY29uZmlndXJhdGlvbl0gX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rv
cnldOwogICAgIE5TVVJMICpmaWxlVVJMID0gW2l0cFJvb3RVUkwgVVJMQnlBcHBlbmRpbmdQYXRo
Q29tcG9uZW50OkAib2JzZXJ2YXRpb25zLmRiIl07CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciBy
ZW1vdmVJdGVtQXRQYXRoOml0cFJvb3RVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVDVF9G
QUxTRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6aXRwUm9vdFVSTC5wYXRo
XSk7CkBAIC0xMjUxLDYgKzEyNDksMTAgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBD
YW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sKQogICAgIEVYUEVDVF9UUlVFKFtk
ZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpuZXdGaWxlVVJMLnBhdGhdKTsKICAg
ICBbZGVmYXVsdEZpbGVNYW5hZ2VyIGNvcHlJdGVtQXRQYXRoOm5ld0ZpbGVVUkwucGF0aCB0b1Bh
dGg6ZmlsZVVSTC5wYXRoIGVycm9yOm5pbF07CiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1bHRGaWxl
TWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOmZpbGVVUkwucGF0aF0pOworCisgICAgX1dLV2Vic2l0
ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19XS1dl
YnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGRhdGFT
dG9yZUNvbmZpZ3VyYXRpb24uX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBpdHBS
b290VVJMOworICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxv
Y10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0aW9uXSBhdXRvcmVs
ZWFzZV07CiAgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ6
WUVTXTsKIAogICAgIHN0YXRpYyBib29sIGRvbmVGbGFnID0gZmFsc2U7CkBAIC0xMzAwLDEyICsx
MzAyLDEyIEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgU3RvcmVTdXNwZW5zaW9uKQog
ICAgIFt3ZWJWaWV3MiBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CiAKICAgICBf
X2Jsb2NrIGJvb2wgZG9uZUZsYWcgPSBmYWxzZTsKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3Nl
bmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6XnsKKyAgICBbZGF0YVN0b3JlMSBfc2Vu
ZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeewogICAgICAgICBkb25lRmxhZyA9IHRy
dWU7CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CiAK
LSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07Cisg
ICAgW2RhdGFTdG9yZTEgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiB9CiAKIEBpbnRl
cmZhY2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1NjaGVtZUhhbmRsZXIgOiBOU09iamVjdCA8V0tV
UkxTY2hlbWVIYW5kbGVyPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQppbmRleCAzNGE0ZjVjNTM4Yjli
MGU5ZmNiMDUwNzJiMTcwMjg4ZTllNGU5ZjhmLi41NDkzZDNkOTI3NThmMjRhNDZlODRiNGI1YWJl
YzQ3ODA5NTlmYjVhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpAQCAtNTU4LDcgKzU1OCw3IEBA
IFRFU1QoU2VydmljZVdvcmtlcnMsIFVzZXJBZ2VudE92ZXJyaWRlKQogCiAgICAgY29uZmlndXJh
dGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAK
LSAgICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV1VzZXJBZ2VudE1lc3NhZ2VIYW5kbGVy
IGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpAIk1lc3NhZ2UgZnJvbSB3b3JrZXI6IEJh
ciBDdXN0b20gVXNlckFnZW50Il0pOworICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1NX
VXNlckFnZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNzYWdlOkAi
TWVzc2FnZSBmcm9tIHdvcmtlcjogRm9vIEN1c3RvbSBVc2VyQWdlbnQiXSk7CiAgICAgW1tjb25m
aWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6
bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07CiAKICAgICB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwg
NjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKQEAgLTYzMyw4ICs2MzMs
NiBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBDYWNoZVN0b3JhZ2VSZXN0b3JlRnJvbURpc2spCiAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7CiAK
LSAgICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9kZWxldGVEZWZhdWx0RGF0YVN0b3JlRm9yVGVzdGlu
Z107Ci0KICAgICBTZXJ2aWNlV29ya2VyVENQU2VydmVyIHNlcnZlcih7CiAgICAgICAgIHsgInRl
eHQvaHRtbCIsIG1haW5DYWNoZVN0b3JhZ2VCeXRlcyB9CiAgICAgfSwgewpAQCAtOTgyLDYgKzk4
MCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRpb24p
CiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgc2V0
Q29uZmlndXJhdGlvbkluamVjdGVkQnVuZGxlUGF0aChjb25maWd1cmF0aW9uLmdldCgpKTsKKyAg
ICBSZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gb3JpZ2luYWxQcm9jZXNzUG9vbCA9IGNvbmZpZ3Vy
YXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2w7CiAKICAgICBkb25lID0gZmFsc2U7CiAKQEAgLTEwMzUs
NyArMTAzNCw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3Jl
YXRpb24pCiAgICAgZG9uZSA9IGZhbHNlOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbG9hZGlu
ZyB0aGUgc2ltcGxlIHBhZ2UgZGlkIG5vdCBzdGFydCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vz
cy4KLSAgICBFWFBFQ1RfRVEoMHUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNz
UG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCB3ZWJW
aWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9jZXNz
Q291bnQpOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpuZXdDb25m
aWd1cmF0aW9uLmdldCgpXSk7CiAgICAgRVhQRUNUX0VRKDJ1LCB3ZWJWaWV3LmdldCgpLmNvbmZp
Z3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudElnbm9yaW5nUHJld2FybWVkKTsK
QEAgLTEwNDMsOSArMTA0Miw4IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQ
cm9jZXNzQ3JlYXRpb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAg
ICBkb25lID0gZmFsc2U7CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5nIHRoaXMgcGFn
ZSBkaWQgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MuCiAgICAgRVhQRUNUX0VRKDF1
LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQ
cm9jZXNzQ291bnQpOwotCisgICAgRVhQRUNUX0VRKDF1LCBvcmlnaW5hbFByb2Nlc3NQb29sLmdl
dCgpLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKICAgICBbW2NvbmZpZ3VyYXRpb24gd2Vi
c2l0ZURhdGFTdG9yZV0gcmVtb3ZlRGF0YU9mVHlwZXM6W1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxX
ZWJzaXRlRGF0YVR5cGVzXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNvbXBs
ZXRpb25IYW5kbGVyOl4oKSB7CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH1dOwpAQCAtMTYx
OCwyMSArMTYxNiwzNSBAQCBzdGF0aWMgc2l6ZV90IGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNz
KGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgYgogICAgIHJldHVybiB3ZWJW
aWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3NDb3VudElnbm9y
aW5nUHJld2FybWVkOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZkFuZEluUHJvY2Vz
c1NlcnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3JrZXJzLCBPdXRPZlByb2Nlc3NTZXJ2aWNl
V29ya2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRy
dWU7CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9F
USgxdSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7Cit9CisKK1RFU1QoU2VydmljZVdvcmtl
cnMsIEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0
cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmlyc3RMb2FkQWJvdXRCbGFuaykpOwogfQog
Ci1URVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJv
dWdoU2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5rQmVm
b3JlTmF2aWdhdGluZ1Rocm91Z2hPdXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewogICAgIGJv
b2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9vbCBmaXJz
dExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNoU2Vydmlj
ZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsIGZpcnN0TG9h
ZEFib3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtC
ZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7CisgICAgYm9v
bCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0
TG9hZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNl
V29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBmaXJzdExvYWRB
Ym91dEJsYW5rKSk7CiB9CiAKQEAgLTE4NDcsOCArMTg1OSw4IEBAIFRFU1QoU2VydmljZVdvcmtl
cnMsIFJlc3RvcmVGcm9tRGlza05vbkRlZmF1bHRTdG9yZSkKICAgICBbW05TRmlsZU1hbmFnZXIg
ZGVmYXVsdE1hbmFnZXJdIGNyZWF0ZURpcmVjdG9yeUF0VVJMOnN3REJQYXRoIHdpdGhJbnRlcm1l
ZGlhdGVEaXJlY3RvcmllczpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bmlsXTsKICAgICBFWFBF
Q1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6
c3dEQlBhdGgucGF0aF0pOwogCi0gICAgLy8gV2UgcHJvdGVjdCB0aGUgcHJvY2VzcyBwb29sIHNv
IHRoYXQgaXQgb3V0bGl2ZXMgdGhlIFdlYnNpdGVEYXRhU3RvcmUuCiAgICAgUmV0YWluUHRyPFdL
UHJvY2Vzc1Bvb2w+IHByb3RlY3RlZFByb2Nlc3NQb29sOworICAgIFJldGFpblB0cjxXS1dlYnNp
dGVEYXRhU3RvcmU+IHByb3RlY3RlZFdlYnNpdGVEYXRhU3RvcmU7CiAKICAgICBTZXJ2aWNlV29y
a2VyVENQU2VydmVyIHNlcnZlcih7CiAgICAgICAgIHsgInRleHQvaHRtbCIsIG1haW5SZWdpc3Rl
cmluZ1dvcmtlckJ5dGVzIH0sCkBAIC0xODcxLDYgKzE4ODMsNyBAQCBURVNUKFNlcnZpY2VXb3Jr
ZXJzLCBSZXN0b3JlRnJvbURpc2tOb25EZWZhdWx0U3RvcmUpCiAKICAgICAgICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0
KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAg
ICAgICAgcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24u
cHJvY2Vzc1Bvb2w7CisgICAgICAgIHByb3RlY3RlZFdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJWaWV3
LmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZTsKIAogICAgICAgICBbd2ViVmll
dyBsb2FkUmVxdWVzdDpzZXJ2ZXIucmVxdWVzdCgpXTsKIApAQCAtMTg4MCwxMyArMTg5MywxNSBA
QCBURVNUKFNlcnZpY2VXb3JrZXJzLCBSZXN0b3JlRnJvbURpc2tOb25EZWZhdWx0U3RvcmUpCiAg
ICAgICAgIFt3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0
ZVNlcnZpY2VXb3JrZXJzXTsKICAgICB9CiAKKyAgICAvLyBNYWtlIHVzIG1vcmUgbGlrZWx5IHRv
IGxvc2UgYW55IHJhY2VzIHdpdGggc2VydmljZSB3b3JrZXIgaW5pdGlhbGl6YXRpb24uCisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMTApOworICAgIHVzbGVlcCgxMDAwMCk7
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMTApOworCiAgICAgQGF1dG9y
ZWxlYXNlcG9vbCB7CiAgICAgICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dl
YlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAKLSAgICAgICAgYXV0byB3ZWJzaXRl
RGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwotICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbi5nZXQoKS5fc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IHN3REJQ
YXRoOwotICAgICAgICBhdXRvIG5vbkRlZmF1bHREYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJz
aXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3Rv
cmVDb25maWd1cmF0aW9uLmdldCgpXSk7Ci0gICAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0KCkud2Vi
c2l0ZURhdGFTdG9yZSA9IG5vbkRlZmF1bHREYXRhU3RvcmUuZ2V0KCk7CisgICAgICAgIGNvbmZp
Z3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSA9IHByb3RlY3RlZFdlYnNpdGVEYXRhU3Rv
cmUuZ2V0KCk7CiAKICAgICAgICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tTV01l
c3NhZ2VIYW5kbGVyRm9yUmVzdG9yZUZyb21EaXNrVGVzdCBhbGxvY10gaW5pdFdpdGhFeHBlY3Rl
ZE1lc3NhZ2U6QCJQQVNTOiBSZWdpc3RyYXRpb24gYWxyZWFkeSBoYXMgYW4gYWN0aXZlIHdvcmtl
ciJdKTsKICAgICAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRk
U2NyaXB0TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07CkBA
IC0xOTQ0LDExICsxOTU5LDExIEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFN1c3BlbmROZXR3b3Jr
UHJvY2VzcykKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdl
cl0gZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAgICBbIHdlYlZpZXcuZ2V0
KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5XTsKKyAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVE
YXRhU3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07CiAKICAg
ICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNB
dFBhdGg6c3dEQlBhdGgucGF0aF0pOwogCi0gICAgWyB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRp
b24ucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CisgICAgW3dlYlZp
ZXcuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nl
c3NEaWRSZXN1bWVdOwogCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6c2VydmVyLnJlcXVlc3Qo
KV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3Jl
Lm1tCmluZGV4IGEzNWYwNTM1MGFhYjRiNDJmMzZjNDZhZWNkZWVlZTZjZTU0NGVmODYuLjMzNzYw
OTJhMTk1YjUxMmRhNjdjNDk2ZTQ1MjE3YjkxNGZlMmE1NzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5t
bQpAQCAtNDc5LDggKzQ3OSw2IEBAIHN0YXRpYyBib29sIGZpbmlzaGVkOwogfQogQGVuZAogCi0v
LyBGSVhNRTogb24gaU9TLCBVSSBwcm9jZXNzIHNob3VsZCBiZSB1c2luZyB0aGUgc2FtZSBjb29r
aWUgZmlsZSBhcyB0aGUgbmV0d29yayBwcm9jZXNzIGZvciBkZWZhdWx0IHNlc3Npb24uCi0jaWYg
UExBVEZPUk0oTUFDKQogZW51bSBjbGFzcyBTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyB7
IE5vLCBZZXMgfTsKIHZvaWQgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2wo
U2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1p
bmcpCiB7CkBAIC01ODksMjAgKzU4Nyw2NiBAQCBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRo
b3V0UHJvY2Vzc1Bvb2xXaXRoUHJld2FybWluZykKICAgICBydW5XS0hUVFBDb29raWVTdG9yZVdp
dGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZzo6WWVzKTsKIH0K
IAotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQogQGludGVyZmFjZSBDaGVja1Nlc3Npb25Db29r
aWVVSURlbGVnYXRlIDogTlNPYmplY3QgPFdLVUlEZWxlZ2F0ZT4KKy0gKE5TU3RyaW5nICopYWxl
cnRDb29raWVIVE1MOworLSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZTsKIEBlbmQKIAotQGlt
cGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUKK0BpbXBsZW1lbnRhdGlv
biBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+
IF9tZXNzYWdlOworfQorCiAtICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVu
SmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGluaXRp
YXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgRVhQRUNUX1NUUkVRKCJTZXNzaW9u
Q29va2llTmFtZT1Db29raWVWYWx1ZSIsIG1lc3NhZ2UuVVRGOFN0cmluZyk7CisgICAgX21lc3Nh
Z2UgPSBtZXNzYWdlOwogICAgIGZpbmlzaGVkID0gdHJ1ZTsKICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwogfQorCistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNzYWdlCit7CisgICAgd2hpbGUgKCFf
bWVzc2FnZSkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAg
ICByZXR1cm4gX21lc3NhZ2UuYXV0b3JlbGVhc2UoKTsKK30KKworLSAoTlNTdHJpbmcgKilhbGVy
dENvb2tpZUhUTUwKK3sKKyAgICByZXR1cm4gQCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1l
bnQuY29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7
IGkgKyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgp
OyBhbGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Cit9CisKIEBlbmQKIAorVEVT
VChXZWJLaXQsIFdLSFRUUENvb2tpZVN0b3JlTXVsdGlwbGVWaWV3cykKK3sKKyAgICBUZXN0V0tX
ZWJWaWV3ICp3ZWJWaWV3MSA9IFtbVGVzdFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNlXTsKKyAg
ICBbd2ViVmlldzEgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAic3RhcnQgbmV0d29yayBw
cm9jZXNzIl07CisKKyAgICBOU0hUVFBDb29raWUgKnNlc3Npb25Db29raWUgPSBbTlNIVFRQQ29v
a2llIGNvb2tpZVdpdGhQcm9wZXJ0aWVzOkB7CisgICAgICAgIE5TSFRUUENvb2tpZVBhdGg6IEAi
LyIsCisgICAgICAgIE5TSFRUUENvb2tpZU5hbWU6IEAiU2Vzc2lvbkNvb2tpZU5hbWUiLAorICAg
ICAgICBOU0hUVFBDb29raWVWYWx1ZTogQCJDb29raWVWYWx1ZSIsCisgICAgICAgIE5TSFRUUENv
b2tpZURvbWFpbjogQCIxMjcuMC4wLjEiLAorICAgIH1dOworCisgICAgX19ibG9jayBib29sIHNl
dENvb2tpZURvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldzEuY29uZmlndXJhdGlvbi53ZWJzaXRl
RGF0YVN0b3JlLmh0dHBDb29raWVTdG9yZSBzZXRDb29raWU6c2Vzc2lvbkNvb2tpZSBjb21wbGV0
aW9uSGFuZGxlcjpeeworICAgICAgICBzZXRDb29raWVEb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnNldENvb2tpZURvbmUpOworCisgICAgYXV0byBk
ZWxlZ2F0ZSA9IGFkb3B0TlMoW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgbmV3XSk7Cisg
ICAgW3dlYlZpZXcxIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZp
ZXcxIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05T
VVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19T
VFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2ll
VmFsdWUiKTsKKworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcyID0gW1tUZXN0V0tXZWJWaWV3
IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MiBzZXRVSURlbGVnYXRlOmRlbGVnYXRl
LmdldCgpXTsKKyAgICBbd2ViVmlldzIgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29v
a2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEi
XV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNz
aW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworfQorCiBURVNUKFdLSFRUUENvb2tpZVN0b3Jl
LCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQogewogICAgIFJldGFpblB0cjxX
S1dlYnNpdGVEYXRhU3RvcmU+IGVwaGVtZXJhbFN0b3JlV2l0aENvb2tpZXMgPSBbV0tXZWJzaXRl
RGF0YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdOwpAQCAtNjI3LDkgKzY3MSw4IEBAIFRF
U1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Npb24p
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7CiAgICAgZmluaXNoZWQg
PSBmYWxzZTsKICAgICAKLSAgICBOU1N0cmluZyAqYWxlcnRDb29raWVIVE1MID0gQCI8c2NyaXB0
PnZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAw
OyBpIDwgY29va2llcy5sZW5ndGg7IGkgKyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJp
bSgpOyB9IGNvb2tpZXMuc29ydCgpOyBhbGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0
PiI7Ci0gICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6YWxlcnRDb29raWVIVE1MIGJhc2VVUkw6
W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOwotICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5n
OltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6
QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2Fp
dEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKIH0KIAogc3Rh
dGljIGJvb2wgYXJlQ29va2llc0VxdWFsKE5TSFRUUENvb2tpZSAqZmlyc3QsIE5TSFRUUENvb2tp
ZSAqc2Vjb25kKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbQppbmRleCBhYzdkZTQx
NTEyYzQ1MTM4ZWM1ZTRjMDllNTExNWQxNmNkMjNiMjJlLi5hYzE2NTM1ZGZkOTM5OTlkMmVjNTBk
Y2ZkNzFjM2E1NmQxMTNlYzdhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbQorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbQpA
QCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVVJMU2NoZW1lVGFza1ByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNp
dGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0
IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0xNTIsNyArMTUz
LDcgQEAgVEVTVChVUkxTY2hlbWVIYW5kbGVyLCBMZWFrczMpCiAKICAgICBydW5VbnRpbFRhc2tz
SW5GbGlnaHQoMik7CiAKLSAgICBbd2ViVmlldzEuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3MS5nZXQoKS5jb25m
aWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAog
ICAgIHJ1blVudGlsVGFza3NJbkZsaWdodCgwKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3Jl
Q3VzdG9tUGF0aHMubW0KaW5kZXggOTJjZjNhNjE5OGE1YjlkMTQ1NDQ5MDVkYjllOTQ4ZjExYzcy
NTZkZS4uM2IxMzFmN2NiODYwYWU4MDFiOTIzNTU1M2Q1MGZiN2ExNmMyNzRkMSAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3Jl
Q3VzdG9tUGF0aHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0KQEAgLTI0NCw3ICsyNDQsNyBAQCBzdGF0
aWMgdm9pZCBydW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMoU2hvdWxkRW5hYmxlUHJvY2Vz
c1ByZXdhcm1pbmcgc2hvdWxkRQogICAgIC8vIE5vdywgd2l0aCBicmFuZCBuZXcgV0tXZWJzaXRl
RGF0YVN0b3JlcyBwb2ludGluZyBhdCB0aGUgc2FtZSBjdXN0b20gY29va2llIHN0b3JhZ2UgbG9j
YXRpb24sCiAgICAgLy8gaW4gbmV3bHkgZmlyZWQgdXAgTmV0d29ya1Byb2Nlc3NlcywgdmVyaWZ5
IHRoYXQgdGhlIGZldGNoIGFuZCBkZWxldGUgQVBJcyB3b3JrIGFzIGV4cGVjdGVkLgogCi0gICAg
W3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2RhdGFTdG9yZSBf
dGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIGF1dG8gbmV3Q3VzdG9tRGF0YVN0b3JlID0g
YWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlv
bjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKV0pOwogCiAgICAgW25ld0N1c3Rv
bURhdGFTdG9yZSBmZXRjaERhdGFSZWNvcmRzT2ZUeXBlczpbTlNTZXQgc2V0V2l0aE9iamVjdHM6
V0tXZWJzaXRlRGF0YVR5cGVDb29raWVzLCBuaWxdIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNBcnJh
eTxXS1dlYnNpdGVEYXRhUmVjb3JkICo+ICogcmVjb3JkcykgewpAQCAtMjU1LDcgKzI1NSw3IEBA
IHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocyhTaG91bGRFbmFibGVQ
cm9jZXNzUHJld2FybWluZyBzaG91bGRFCiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFs
c2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2Up
OwogCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2Rh
dGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIG5ld0N1c3RvbURhdGFTdG9y
ZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3Vy
YXRpb246d2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAogICAgIFtuZXdD
dXN0b21EYXRhU3RvcmUgcmVtb3ZlRGF0YU9mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldL
V2Vic2l0ZURhdGFUeXBlQ29va2llcywgbmlsXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFu
dFBhc3RdIGNvbXBsZXRpb25IYW5kbGVyOl4gewpAQCAtMzg1LDExICszODUsMTAgQEAgVEVTVChX
ZWJLaXQsIEN1c3RvbURhdGFTdG9yZURlc3Ryb3lXaGlsZUZldGNoaW5nTmV0d29ya1Byb2Nlc3NE
YXRhKQogCiAgICAgICAgIC8vIFRlcm1pbmF0ZSB0aGUgbmV0d29yayBwcm9jZXNzIHdoaWxlIGEg
cXVlcnkgaXMgcGVuZGluZy4KICAgICAgICAgYXV0byogYWxsUHJvY2Vzc1Bvb2xzID0gW1dLUHJv
Y2Vzc1Bvb2wgX2FsbFByb2Nlc3NQb29sc0ZvclRlc3RpbmddOwotICAgICAgICBBU1NFUlRfRVEo
MVUsIFthbGxQcm9jZXNzUG9vbHMgY291bnRdKTsKLSAgICAgICAgYXV0byogcHJvY2Vzc1Bvb2wg
PSBhbGxQcm9jZXNzUG9vbHNbMF07Ci0gICAgICAgIHdoaWxlICghW3Byb2Nlc3NQb29sIF9uZXR3
b3JrUHJvY2Vzc0lkZW50aWZpZXJdKQorICAgICAgICBBU1NFUlRfRVEoMFUsIFthbGxQcm9jZXNz
UG9vbHMgY291bnRdKTsKKyAgICAgICAgd2hpbGUgKCFbZGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vz
c0lkZW50aWZpZXJdKQogICAgICAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c2xlZXAoMC4w
MSk7Ci0gICAgICAgIGtpbGwoW3Byb2Nlc3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJd
LCBTSUdLSUxMKTsKKyAgICAgICAga2lsbChbZGF0YVN0b3JlIF9uZXR3b3JrUHJvY2Vzc0lkZW50
aWZpZXJdLCBTSUdLSUxMKTsKICAgICAgICAgYWxsUHJvY2Vzc1Bvb2xzID0gbmlsOwogICAgICAg
ICBkYXRhU3RvcmUgPSBuaWw7CiAgICAgfQpAQCAtNDY1LDcgKzQ2NCw5IEBAIFRFU1QoV2ViS2l0
LCBBbHRlcm5hdGl2ZVNlcnZpY2VzRGVmYXVsdERpcmVjdG9yeUNyZWF0aW9uKQogICAgIAogICAg
IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldE9iamVjdDpbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSBmb3JLZXk6a2V5XTsKIAotICAgIFRlc3RXS1dlYlZpZXcg
KndlYlZpZXcyID0gW1tbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwor
ICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgY29uZmlndXJhdGlvbi53ZWJzaXRl
RGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1
cmF0aW9uOltbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBh
dXRvcmVsZWFzZV1dIGF1dG9yZWxlYXNlXTsKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MiA9
IFtbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4
MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CiAgICAg
W3dlYlZpZXcyIHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IGF1eGlsaWFyeSBw
cm9jZXNzZXMiIGJhc2VVUkw6bmlsXTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdl
ciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpkZWZhdWx0RGlyZWN0b3J5LnBhdGhd
KTsKQEAgLTUzOSw3ICs1NDAsNyBAQCBURVNUKFdlYktpdCwgRG9Mb2FkV2l0aE5vbkRlZmF1bHRE
YXRhU3RvcmVBZnRlclRlcm1pbmF0aW5nTmV0d29ya1Byb2Nlc3MpCiAKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbi5n
ZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3
Q29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CiAKICAgICByZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05T
QnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lv
bjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOwogICAg
IFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwpAQCAtODU3LDcgKzg1OCw3IEBAIFRFU1Qo
V2ViS2l0LCBNZWRpYUNhY2hlKQogICAgIEVYUEVDVF9GQUxTRShlcnJvcik7CiAKICAgICBkb25l
ID0gdHJ1ZTsKLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wgX3Rlcm1p
bmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0
ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgW2ZpbGVNYW5hZ2Vy
IHJlbW92ZUl0ZW1BdFBhdGg6cGF0aCBlcnJvcjomZXJyb3JdOwogICAgIEVYUEVDVF9GQUxTRShl
cnJvcik7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdE9iakMv
Q3VzdG9tUHJvdG9jb2xzVGVzdC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
T2JqQy9DdXN0b21Qcm90b2NvbHNUZXN0Lm1tCmluZGV4IDIyZTFhMGE5ZThlMjY4MDQ1ZTZiMTdj
MzA2YjAwMTRkNWJjOTEyNjguLjdiODQ3OGI1OTc5ZmE3NGI5Y2Q1OWQwNjJlYWRkMGQzYzUxNTFm
ZDcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0T2JqQy9DdXN0
b21Qcm90b2NvbHNUZXN0Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
T2JqQy9DdXN0b21Qcm90b2NvbHNUZXN0Lm1tCkBAIC0zNCw2ICszNCw4IEBACiAjaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKICNpbXBvcnQgPFdlYktpdC9XS0NvbnRleHRQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tQcm9jZXNzR3JvdXBQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tW
aWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oPgog
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBzdGF0aWMgYm9vbCB0ZXN0RmluaXNoZWQ7CkBA
IC03Miw2ICs3NCw4IEBAIHN0YXRpYyBXS1Byb2Nlc3NHcm91cCAqcHJvY2Vzc0dyb3VwKCkKICAg
ICByZXR1cm4gcHJvY2Vzc0dyb3VwOwogfQogCitzdGF0aWMgUmV0YWluUHRyPFdLVmlldz4gd2tW
aWV3OworCiBAaW50ZXJmYWNlIENsb3NlV2hpbGVTdGFydGluZ1Byb3RvY29sIDogVGVzdFByb3Rv
Y29sCiBAZW5kCiAKQEAgLTg5LDcgKzkzLDcgQEAgc3RhdGljIFdLUHJvY2Vzc0dyb3VwICpwcm9j
ZXNzR3JvdXAoKQogICAgICAgICB9OwogICAgICAgICBXS0NvbnRleHRTZXRDbGllbnQoW3Byb2Nl
c3NHcm91cCgpIF9jb250ZXh0UmVmXSwgJmNsaWVudC5iYXNlKTsKIAotICAgICAgICBraWxsKFdL
Q29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihbcHJvY2Vzc0dyb3VwKCkgX2NvbnRl
eHRSZWZdKSwgU0lHS0lMTCk7CisgICAgICAgIGtpbGwoV0tXZWJzaXRlRGF0YVN0b3JlR2V0TmV0
d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLUGFnZUdldFdlYnNpdGVEYXRhU3RvcmUoW3drVmlldyBw
YWdlUmVmXSkpLCBTSUdLSUxMKTsKICAgICAgICAgW3NlbGYuY2xpZW50IFVSTFByb3RvY29sOnNl
bGYgZGlkRmFpbFdpdGhFcnJvcjpbTlNFcnJvciBlcnJvcldpdGhEb21haW46TlNDb2NvYUVycm9y
RG9tYWluIGNvZGU6MCB1c2VySW5mbzpuaWxdXTsKICAgICB9KTsKIH0KQEAgLTE0Miw3ICsxNDYs
NyBAQCBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiBzdGF0aWMgdm9pZCBydW5UZXN0KCkKIHsK
ICAgICBSZXRhaW5QdHI8V0tCcm93c2luZ0NvbnRleHRHcm91cD4gYnJvd3NpbmdDb250ZXh0R3Jv
dXAgPSBhZG9wdE5TKFtbV0tCcm93c2luZ0NvbnRleHRHcm91cCBhbGxvY10gaW5pdFdpdGhJZGVu
dGlmaWVyOkAiVGVzdElkZW50aWZpZXIiXSk7Ci0gICAgUmV0YWluUHRyPFdLVmlldz4gd2tWaWV3
ID0gYWRvcHROUyhbW1dLVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAs
IDgwMCwgNjAwKSBwcm9jZXNzR3JvdXA6cHJvY2Vzc0dyb3VwKCkgYnJvd3NpbmdDb250ZXh0R3Jv
dXA6YnJvd3NpbmdDb250ZXh0R3JvdXAuZ2V0KCldKTsKKyAgICB3a1ZpZXcgPSBhZG9wdE5TKFtb
V0tWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIHBy
b2Nlc3NHcm91cDpwcm9jZXNzR3JvdXAoKSBicm93c2luZ0NvbnRleHRHcm91cDpicm93c2luZ0Nv
bnRleHRHcm91cC5nZXQoKV0pOwogICAgIFJldGFpblB0cjxDdXN0b21Qcm90b2NvbHNMb2FkRGVs
ZWdhdGU+IGxvYWREZWxlZ2F0ZSA9IGFkb3B0TlMoW1tDdXN0b21Qcm90b2NvbHNMb2FkRGVsZWdh
dGUgYWxsb2NdIGluaXRdKTsKICAgICBbd2tWaWV3IGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJd
LmxvYWREZWxlZ2F0ZSA9IGxvYWREZWxlZ2F0ZS5nZXQoKTsKICAgICBbW3drVmlldyBicm93c2lu
Z0NvbnRleHRDb250cm9sbGVyXSBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRo
VVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUA6
Ly9yZWRpcmVjdD90ZXN0IiwgW1Rlc3RQcm90b2NvbCBzY2hlbWVdXV1dXTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggZTE2ZjJhNDQ2ZjE3ZDA5YzllZGQx
MzAwNjcwNmMzYWE5MzFiMGNjMC4uZjdlYmUwYmU3OTBhMzZiNjE2YjFjYjViOGM4MDA0YWJiODRm
ZmM4MCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAgLTEw
NjIsOCArMTA2Miw2IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3Rl
bnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAKICAgICByZXNldFF1b3Rh
KCk7CiAKLSAgICBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VX
b3JrZXJUZXN0aW5nKHBsYXRmb3JtQ29udGV4dCgpLCB0cnVlKTsKLQogICAgIFdLQ29udGV4dENs
ZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5jb250ZXh0KCkpOwogCiAgICAgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpLCBmYWxzZSk7
CkBAIC0xMjM4LDcgKzEyMzYsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpmaW5kQW5kRHVtcFdl
YktpdFByb2Nlc3NJZGVudGlmaWVycygpCiAgICAgZHVtcFJlc3BvbnNlKG1ha2VTdHJpbmcoVGVz
dENvbnRyb2xsZXI6OndlYlByb2Nlc3NOYW1lKCksICI6ICIsCiAgICAgICAgIFdLUGFnZUdldFBy
b2Nlc3NJZGVudGlmaWVyKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCkpLCAnXG4nLAogICAgICAgICBUZXN0Q29udHJvbGxlcjo6bmV0d29ya1Byb2Nlc3NO
YW1lKCksICI6ICIsCi0gICAgICAgIFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmll
cihtX2NvbnRleHQuZ2V0KCkpLCAnXG4nKSk7CisgICAgICAgIFdLV2Vic2l0ZURhdGFTdG9yZUdl
dE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcih3ZWJzaXRlRGF0YVN0b3JlKCkpLCAnXG4nKSk7CiAj
ZWxzZQogICAgIGR1bXBSZXNwb25zZSgiXG4iX3MpOwogI2VuZGlmCkBAIC0yMjk4LDcgKzIyOTYs
NyBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RDb250cm9sbGVyOjpnZXRJbmplY3RlZEJ1
bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGEoKQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpuZXR3
b3JrUHJvY2Vzc0RpZENyYXNoKCkKIHsKLSAgICBwaWRfdCBwaWQgPSBXS0NvbnRleHRHZXROZXR3
b3JrUHJvY2Vzc0lkZW50aWZpZXIobV9jb250ZXh0LmdldCgpKTsKKyAgICBwaWRfdCBwaWQgPSBX
S1dlYnNpdGVEYXRhU3RvcmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIod2Vic2l0ZURhdGFT
dG9yZSgpKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiNDUkFTSEVEIC0gJXMgKHBpZCAlbGQpXG4i
LCBuZXR3b3JrUHJvY2Vzc05hbWUoKSwgc3RhdGljX2Nhc3Q8bG9uZz4ocGlkKSk7CiAgICAgZXhp
dCgxKTsKIH0KQEAgLTMxMzcsNyArMzEzNSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldEln
bm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pCiAK
IHZvaWQgVGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKLSAgICBX
S0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAg
V0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRlTmV0d29ya1Byb2Nlc3Mod2Vic2l0ZURhdGFTdG9y
ZSgpKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdvcmtlcnMo
KQpAQCAtMzE1MiwxMCArMzE1MCwxMCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVdp
bGxSdW5UZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJikKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6
cGxhdGZvcm1Jbml0aWFsaXplRGF0YVN0b3JlKFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmln
dXJhdGlvbiwgY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKG9wdGlvbnMu
dXNlRXBoZW1lcmFsU2Vzc2lvbikKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV0tQYWdl
Q29uZmlndXJhdGlvbkdldFdlYnNpdGVEYXRhU3RvcmUoY29uZmlndXJhdGlvbik7Ci0gICAgZWxz
ZQotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBkZWZhdWx0V2Vic2l0ZURhdGFTdG9yZSgp
OworICAgIGlmICghb3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKQorICAgICAgICBXS1BhZ2VD
b25maWd1cmF0aW9uU2V0V2Vic2l0ZURhdGFTdG9yZShjb25maWd1cmF0aW9uLCBkZWZhdWx0V2Vi
c2l0ZURhdGFTdG9yZSgpKTsKKworICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdLUGFnZUNvbmZp
Z3VyYXRpb25HZXRXZWJzaXRlRGF0YVN0b3JlKGNvbmZpZ3VyYXRpb24pOwogfQogCiB2b2lkIFRl
c3RDb250cm9sbGVyOjpwbGF0Zm9ybUNyZWF0ZVdlYlZpZXcoV0tQYWdlQ29uZmlndXJhdGlvblJl
ZiBjb25maWd1cmF0aW9uLCBjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKQEAgLTMxNjgsOSAr
MzE2Niw4IEBAIFBsYXRmb3JtV2ViVmlldyogVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ3JlYXRl
T3RoZXJQYWdlKFBsYXRmb3JtV2ViVmlldyogcGFyZW50CiAgICAgcmV0dXJuIG5ldyBQbGF0Zm9y
bVdlYlZpZXcoY29uZmlndXJhdGlvbiwgb3B0aW9ucyk7CiB9CiAKLVdLQ29udGV4dFJlZiBUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBX
S0NvbnRleHRDb25maWd1cmF0aW9uUmVmIGNvbnRleHRDb25maWd1cmF0aW9uKQorV0tDb250ZXh0
UmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVmIGNv
bnRleHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYpCiB7Ci0gICAgV0tDb250ZXh0U2V0UHJp
bWFyeVdlYnNpdGVEYXRhU3RvcmUoY29udGV4dCwgZGVmYXVsdFdlYnNpdGVEYXRhU3RvcmUoKSk7
CiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAK
</data>
<flag name="commit-queue"
          id="425855"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410023</attachid>
            <date>2020-09-29 11:17:25 -0700</date>
            <delta_ts>2020-09-29 11:17:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216041-20200929111723.patch</filename>
            <type>text/plain</type>
            <size>368486</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NzU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDY3MjVmZmRjYmM3MWUyMWM1
ZjFjYmRkODUzNDAxZDYwNDFjZDQ5M2YuLjcxYTEzNjk2YTg4OWIzNTZhNWZlMWNhYWFhYmUxMGJj
ZGNkNmM5N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDE4IEBACisyMDIwLTA5LTI5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBOZXR3
b3JrUHJvY2Vzc1Byb3h5IG93bmVyc2hpcCBmcm9tIFdlYlByb2Nlc3NQb29sIHRvIFdlYnNpdGVE
YXRhU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IEJyYWR5IEVpZHNvbi4KKworICAgICAgICBU
aGlzIHBhdGNoIG1vdmVzIHRoZSB0aGluZ3Mgb24gV2ViUHJvY2Vzc1Bvb2wgYXNzb2NpYXRlZCB3
aXRoIE5ldHdvcmtQcm9jZXNzUHJveHkgb3duZXJzaGlwIGFuZCBtb3ZlcyB0aGVtCisgICAgICAg
IHRvIFdlYnNpdGVEYXRhU3RvcmUuICBJdCdzIHByZXR0eSBtZWNoYW5pY2FsLCBidXQgaXQgcmVh
Y2hlcyBpdHMgZmluZ2VycyBpbnRvIGEgbG90IG9mIHRoaW5ncy4gIFNvbWUgY29tbWVudHMKKyAg
ICAgICAgb24gaW50ZXJlc3RpbmcgcGFydHMgYXJlIGJlbG93LgorCisgICAgICAgIFdoeSBhbSBJ
IGRvaW5nIHRoaXM/ICBJJ20gZ2xhZCB5b3UgYXNrZWQuCisKKyAgICAgICAgV0tXZWJWaWV3IGhh
ZCBhIGZ1bmRhbWVudGFsIGNvb2tpZSBwcm9ibGVtIGJlZm9yZSB0aGlzIGNoYW5nZS4gIEl0IGhh
ZCBhIFdLV2Vic2l0ZURhdGFTdG9yZSB0aGF0IGNvdWxkIHBvaW50IHRvIGEgY29va2llIHN0b3Jl
IG9uIGRpc2sKKyAgICAgICAgdGhhdCBjb3VsZCBiZSB1c2VkIGluIG11bHRpcGxlIG5ldHdvcmsg
cHJvY2Vzc2VzIGF0IHRoZSBzYW1lIHRpbWUuICBUaGlzIGxlZCB0byBwcm9ibGVtcyB3aXRoIGNv
b2tpZXMgYmVpbmcgcmVjZWl2ZWQgb3ZlciB0aGUgbmV0d29yaworICAgICAgICBpbiB0aG9zZSBk
aWZmZXJlbnQgcHJvY2Vzc2VzIGJlaW5nIHVuYWJsZSB0byBiZSBzaGFyZWQgdW50aWwgdGhleSB3
ZXJlIHdyaXR0ZW4gdG8gZGlzaywgc29tZXRoaW5nIHRoYXQgZG9lcyBub3QgaGFwcGVuIGltbWVk
aWF0ZWx5LCBlc3BlY2lhbGx5CisgICAgICAgIG9uIGlPUy4gIFRoaXMgcHJvYmxlbSBpcyBldmVu
IHdvcnNlIHdpdGggc2Vzc2lvbiBjb29raWVzLCB3aGljaCBzaG91bGQgYmUga2VwdCBpbiBtZW1v
cnkgYW5kIG5ldmVyIGJlIHdyaXR0ZW4gdG8gZGlzay4gIFRob3NlIHByb2Nlc3NlcworICAgICAg
ICBkaWQgbm90IHVzZSBzaGFyZWQgbWVtb3J5IHRvIHNoYXJlIHRoZSBjb29raWVzLiAgVGhleSBq
dXN0IGRpZG4ndCBzaGFyZSB0aGVtLCB3aGljaCBsZWQgdG8gY29va2llIGluY29ycmVjdG5lc3Mu
ICBUaGlzIHdhcyB1bmZvcnR1bmF0ZWx5CisgICAgICAgIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRp
b24gaWYgeW91IGNhbGwgW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRdIG1vcmUgdGhhbiBvbmNlLCB3
aGljaCBtYW55IGRldmVsb3BlcnMgZG8uICBUaGVyZSB3YXMgYWxzbyBvY2Nhc2lvbmFsIGNvb2tp
ZQorICAgICAgICBjb3JydXB0aW9uIGFuZCBsb3NzIGZyb20gbXVsdGlwbGUgcHJvY2Vzc2VzIHdy
aXRpbmcgY29va2llcyB0byB0aGUgc2FtZSBmaWxlLiAgQWxsIHRoZXNlIHByb2JsZW1zIGNhbiBi
ZSB3b3JrZWQgYXJvdW5kIGJ5IGRvaW5nIHdoYXQgU2FmYXJpIGRvZXM6CisgICAgICAgIG1hbnVh
bGx5IHNldHRpbmcgdGhlIFdLUHJvY2Vzc1Bvb2wgb2YgYWxsIFdLV2ViVmlld0NvbmZpZ3VyYXRp
b25zIHRvIHRoZSBzYW1lIHByb2Nlc3MgcG9vbCB0byBvbmx5IHVzZSBvbmUgbmV0d29yayBwcm9j
ZXNzLiAgVGhpcyBpcyBub3QgaW50dWl0aXZlCisgICAgICAgIG9yIHdlbGwgZG9jdW1lbnRlZCwg
YW5kIGV2ZW4gdGhvdWdoIEkgaGF2ZSBzcGVudCB0aGUgbWFqb3JpdHkgb2YgV1dEQyBsYWJzIGZv
ciB0aGUgbGFzdCAzIHllYXJzIHRlbGxpbmcgZGV2ZWxvcGVycyB0byBkbyBpdCwgbW9zdCBkZXZl
bG9wZXJzIGRvIG5vdC4KKyAgICAgICAgVGhlIGRlZmF1bHQgYmVoYXZpb3Igc2hvdWxkIG5vdCBs
ZWFkIHRvIGNvb2tpZSBpbmNvcnJlY3RuZXNzLCBjb3JydXB0aW9uLCBvciBsb3NzLiAgVGhpcyBh
Y2NvbXBsaXNoZXMgdGhhdC4KKworICAgICAgICBBIGJpZ2dlciBwcm9ibGVtIHRoYXQgY2FuJ3Qg
cmVhbGx5IGJlIHdvcmtlZCBhcm91bmQgd2VsbCBpcyB3aGF0IHdlIHdlcmUgZG9pbmcgaW4gb3Vy
IFdLSFRUUENvb2tpZVN0b3JlIEFQSS4gIE1hbnkgZGV2ZWxvcGVycyBjYWxsIHNldENvb2tpZTpj
b21wbGV0aW9uSGFuZGxlcjoKKyAgICAgICAgdG8gImxvZyBpbiIgdGhlIHVzZXIgYnkgc2V0dGlu
ZyBhIGNvb2tpZSwgdGhlbiBpbiB0aGUgY29tcGxldGlvbiBoYW5kbGVyLCB0aGV5IG9wZW4gYSBX
S1dlYlZpZXcgdG8gdGhlaXIgcGFnZSBhbmQgZXhwZWN0IHRoZSBjb29raWUgdG8gYmUgc2VudC4g
IEJlZm9yZSB0aGlzCisgICAgICAgIGNoYW5nZSwgd2Ugd291bGQgbm90IGtub3cgd2hpY2ggcHJv
Y2VzcyBwb29sIHRvIHNldCB0aGUgY29va2llIGluIHNvIHdlIHdvdWxkIGd1ZXNzLiAgSWYgdGhl
cmUgd2VyZSBubyBwcm9jZXNzIHBvb2xzLCB3ZSB3b3VsZCBzdGFydCB3cml0aW5nIHRvIGRpc2sg
YW5kIGhvcGUKKyAgICAgICAgaXQgd3JpdGVzIGZhc3QgZW5vdWdoLiAgV2UgY2FuJ3Qgd2FpdCBm
b3IgaXQgdG8gY29tcGxldGUgYmVjYXVzZSBpdCBjYXVzZXMgaGFuZ3MgbGlrZSByZGFyOi8vcHJv
YmxlbS82Njk2MTA2Ni4gIFRoaXMgc29sdXRpb24gYWxsb3dzIHRvIHN0YXJ0IHRoZSBuZXR3b3Jr
CisgICAgICAgIHByb2Nlc3Mgb2YgdGhhdCBXZWJzaXRlRGF0YVN0b3JlIGFuZCBzZXQgdGhlIGNv
b2tpZSBpbiB0aGF0IHByb2Nlc3MuICBXZSBub3cga25vdyB0aGF0IGlzIHRoZSBvbmx5IHByb2Nl
c3MgdGhpcyBXZWJzaXRlRGF0YVN0b3JlIHdpbGwgZXZlciB1c2UuICBOb3csIHVzZXJzCisgICAg
ICAgIHdpbGwgYmUgYWJsZSB0byBhY3R1YWxseSBiZSBsb2dnZWQgaW4gYWxsIHRoZSB0aW1lIGlu
IHN1Y2ggYXBwcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2ll
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBD
b29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29r
aWVzL1dlYkNvb2tpZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVz
L1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9X
ZWJDb29raWVNYW5hZ2VyU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURh
dGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3Nl
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1t
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6OnNhdmVDb29raWVzKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFT
dG9yZVNlc3Npb24pOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nl
c3NTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBQbGF0
Zm9ybS9JUEMvQXR0YWNobWVudC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAg
ICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQ
STo6SFRUUENvb2tpZVN0b3JlOjpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0
b3JlOjpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRD
b29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgor
ICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAg
ICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRp
b25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVy
Rm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFT
dG9yZSk6CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtl
clRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0VGVybWluYXRlTmV0d29ya1By
b2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZUdldFdlYnNpdGVE
YXRhU3RvcmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdL
V2Vic2l0ZURhdGFTdG9yZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdLV2Vi
c2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBf
c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczpdKToKKyAgICAgICAgKC1bV0tQcm9j
ZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1By
ZXBhcmVUb1N1c3BlbmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3Nl
bmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tQcm9jZXNzUG9vbCBfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3N5bnRoZXNpemVBcHBJc0Jh
Y2tncm91bmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJvY2Vzc1Bvb2wgX3NldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tQcm9jZXNzUG9vbCBfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6
XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29s
UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0
b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nOl0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUg
X3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9y
ZSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpdKToKKyAgICAgICAgKC1bV0tX
ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHld
KToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRS
ZXN1bWVdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBwSXNC
YWNrZ3JvdW5kOl0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQcm9j
ZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoK1tXS1dlYnNpdGVEYXRhU3RvcmUgX21ha2VOZXh0
TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZ10pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKF9XZWJLaXRD
b29raWVNYW5hZ2VyUHJpdmF0ZTo6Y29va2llTWFuYWdlciBjb25zdCk6CisgICAgICAgIChfV2Vi
S2l0Q29va2llTWFuYWdlclByaXZhdGU6On5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUpOgor
ICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfY29v
a2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSk6CisgICAgICAgICh3ZWJraXRfY29v
a2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdl
cl9hZGRfY29va2llKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2ll
cyk6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAo
d2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4
dF9wcmVmZXRjaF9kbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246
OmFkZFNpbmdsZUNvb2tpZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9u
OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vz
c1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9v
bENvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vz
c1N1cHByZXNzaW9uU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxh
dGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRm
b3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnhwY0VuZHBvaW50TWVzc2FnZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29y
a1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6cHVi
bGlzaFByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94
eTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGVj
aWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyk6CisgICAgICAgICogVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eU1hcDo6RG93bmxvYWRQcm94eU1hcCk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5k
KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93bmxvYWRQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5TWFwOjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktp
dDo6ZGVmYXVsdFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkZWZhdWx0TmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
c1Byb3h5Ojp0ZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWRUZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
ZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6YW55
UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkpOgorICAgICAgICAoV2Vi
S2l0OjphbnlQcm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRp
b25zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxv
YWRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQ
cm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRp
ZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGlkQ2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0
Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9jZXNz
UG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjphbnlQcm9j
ZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENF
dmVudCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFu
YWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2Vi
Q29va2llTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5j
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9w
T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xE
ZXN0cm95ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnByb2Nlc3NEaWRDbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJF
bnRpdGxlbWVudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVj
b25uZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRG
b3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9nRnJhbWVOYXZpZ2F0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJl
ZEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3Rv
Y29sSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vz
c1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29s
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFT
dG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkb3dubG9hZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdD
b250ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xv
YmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nlc3Nlcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9u
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdl
SUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyQmFja2dyb3Vu
ZEFjdGl2aXR5Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdv
cmtQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgVGhlcmUgc2VlbXMgdG8gYmUgYSBsb3Qgb2Yg
Y29kZSByZW1vdmFsIGhlcmUsIGJ1dCBtb3N0IG9mIGl0IHdhcyBkdXBsaWNhdGUgY29kZSB3aXRo
CisgICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMgd2hpY2ggaXMgdXNlZCBpbnN0
ZWFkLiAgVGhhdCB3aGljaCB3YXMgbm90IGR1cGxpY2F0ZSB3YXMKKyAgICAgICAgbW92ZWQgdG8g
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcy4g
IFRoaXMgd2FzIHRoZSBoYXJkZXN0IHBhcnQgb2YgdGhpcyBwYXRjaC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6
ZUFwcElzQmFja2dyb3VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1By
b2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHlGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpmbHVzaENvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1By
b2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpzZXRXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NY
UENFbmRwb2ludFRvV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9BbGxXZWJQcm9jZXNzZXMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXAp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZv
clNlc3Npb25JRCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nl
c3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFB
bmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGlt
ZW91dEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNl
dFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNl
TG9hZFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1By
ZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNH
cmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJl
dmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRQ
cmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRh
UmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGlu
Z1RvKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1l
dGVyc1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnN1Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNj
aGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBk
YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0
aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRl
cmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25z
aGlwT25seUluRGF0YWJhc2VPbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6c2V0VXNlSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0Rl
Y29yYXRpb25Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1No
b3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQ
YXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJp
Y3RDb29raWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVz
dGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3Vy
Y2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFn
ZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnByb2Nlc3NQb29scyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnRlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9j
ZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VwaGVtZXJhbCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmZsdXNoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRl
RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vz
c2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBw
Qm91bmRTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2Fy
ZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVu
dGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6Om1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lv
bklEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vz
c1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjphZGRQ
ZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE5ldHdvcmtQcm94eVNl
dHRpbmdzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0
YVN0b3JlU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRm
b3JtU2V0TmV0d29ya1BhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKToK
KyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3Jz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRp
bmdzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uSW5mby5oOgorCiAyMDIwLTA5LTI5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHBsaXN0LWJhc2VkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3Mgc3RvcmFnZSwgd2hpY2ggaGFzIGJlZW4gcmVwbGFjZWQgYnkgZGF0YWJhc2UtYmFz
ZWQgc3RvcmFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29r
aWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
b29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCmluZGV4IGZjZTIzODk4N2E3ODUwZjE4YzlmMzA2
YzUwZTk4Y2U5ODhkMTI1ZmQuLjVjOWI3NzE4NmZiMTgxMGNiMjg1NzE0YmM1Mzc1MDkxYTQ4NTdl
MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJD
b29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tp
ZXMvV2ViQ29va2llTWFuYWdlci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvQ29va2llU3RvcmFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRUUENvb2tp
ZUFjY2VwdFBvbGljeS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9u
Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CkBA
IC0xNDMsMTUgKzE0NCwxOCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnN0b3BPYnNlcnZpbmdD
b29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIAogdm9pZCBXZWJDb29raWVN
YW5hZ2VyOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kg
cG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0gICAgbV9w
cm9jZXNzLmNvb2tpZUFjY2VwdFBvbGljeUNoYW5nZWQocG9saWN5KTsKLQotICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CisgICAgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGlj
eSwgW3BvbGljeSwgcHJvY2VzcyA9IG1ha2VSZWYobV9wcm9jZXNzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIHBy
b2Nlc3MtPmNvb2tpZUFjY2VwdFBvbGljeUNoYW5nZWQocG9saWN5KTsKKyAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKKyAgICB9KTsKIH0KIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFj
Y2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYkNvb2tpZU1hbmFnZXI6
OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5kZWZhdWx0U3RvcmFn
ZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgaWYgKGF1dG8qIHN0b3JhZ2VT
ZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCisgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VTZXNzaW9uLT5jb29raWVBY2NlcHRQb2xpY3koKSk7Cisg
ICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihIVFRQQ29va2llQWNjZXB0UG9saWN5
OjpOZXZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmgKaW5kZXgg
Y2E3ZjU1ZTg2NmJkYWQ0YjFlMzUyZThmNjQwNTdiYWJjNDYyODMyZC4uMzVjZThhOWVjZmMyOTRj
ZDZkZTFlN2ZmOTMxMGUwYTU3ZWE0OWQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCkBAIC0zNyw2ICszNyw4
IEBACiAjaW5jbHVkZSAiU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZS5oIgogI2VuZGlm
CiAKK09CSkNfQ0xBU1MgTlNIVFRQQ29va2llU3RvcmFnZTsKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogc3RydWN0IENvb2tpZTsKIGVudW0gY2xhc3MgSFRUUENvb2tpZUFjY2VwdFBvbGljeSA6IHVp
bnQ4X3Q7CkBAIC03OSw4ICs4MSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRBbGxDb29raWVz
KFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiYpPiYmKTsKICAgICB2b2lkIGdldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQsIGNvbnN0
IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+
JiYpOwogCi0gICAgdm9pZCBwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSk7Ci0gICAgdm9pZCBnZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBv
bGljeSk+JiYpOworICAgIHZvaWQgcGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFdl
YkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7CisgICAgdm9pZCBnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYm
KTsKIAogICAgIHZvaWQgc3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklE
KTsKICAgICB2b2lkIHN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEKTsK
QEAgLTg4LDQgKzkwLDggQEAgcHJpdmF0ZToKICAgICBOZXR3b3JrUHJvY2VzcyYgbV9wcm9jZXNz
OwogfTsKIAorI2lmIFBMQVRGT1JNKENPQ09BKQordm9pZCBzYXZlQ29va2llcyhOU0hUVFBDb29r
aWVTdG9yYWdlICosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisjZW5kaWYKKwogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmluCmluZGV4
IGFjZDc1NDQwZDgzZjM0NjY1MGM5ZjMzYjc1YjVkNWQwOTM1MjEzYmEuLjZmZGY1NzcyYWE2YWFl
Mzk0MDJhOWE4OWY1NmM4NGY3YmQ0MzU4NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmluCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3Nh
Z2VzLmluCkBAIC0zNiw3ICszNiw3IEBAIG1lc3NhZ2VzIC0+IFdlYkNvb2tpZU1hbmFnZXIgTm90
UmVmQ291bnRlZCB7CiAgICAgdm9pZCBEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdhbGxUaW1lIHRpbWUpIC0+ICgpIEFzeW5jCiAKICAgICB2
b2lkIFNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koZW51bTp1aW50OF90IFdlYkNvcmU6OkhUVFBD
b29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSAtPiAoKSBBc3luYwotICAgIHZvaWQgR2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeSgpIC0+IChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSBwb2xpY3kpIEFzeW5jCisgICAgdm9pZCBHZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgLT4gKGVudW06dWludDhfdCBXZWJDb3JlOjpI
VFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgQXN5bmMKICAgICAKICAgICB2b2lkIFN0YXJ0
T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgdm9p
ZCBTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvY3VybC9XZWJD
b29raWVNYW5hZ2VyQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tp
ZXMvY3VybC9XZWJDb29raWVNYW5hZ2VyQ3VybC5jcHAKaW5kZXggYzJlZjE1Njg0NTA0MjAwZjk4
ZWU0ZmU2MGUzNWFkZGEyNWMxOWQ2ZC4uZmFhZGE1MGY5YzQzZDQ0M2Q0OTM4ODhjOWJkNjZjNGY3
MDkyMDNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVz
L2N1cmwvV2ViQ29va2llTWFuYWdlckN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ29va2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcApAQCAtMzQsNyAr
MzQsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
LXZvaWQgV2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KQordm9pZCBXZWJDb29raWVNYW5hZ2VyOjpw
bGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBDb29raWVBY2NlcHRQb2xpY3kgY3VybFBvbGljeSA9IENvb2tpZUFjY2VwdFBvbGljeTo6
T25seUZyb21NYWluRG9jdW1lbnREb21haW47CiAgICAgc3dpdGNoIChwb2xpY3kpIHsKQEAgLTU1
LDYgKzU1LDcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeQogICAgIG1fcHJvY2Vzcy5mb3JFYWNo
TmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtjdXJsUG9saWN5XSAoY29uc3QgYXV0byYgbmV0d29ya1N0
b3JhZ2VTZXNzaW9uKSB7CiAgICAgICAgIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5zZXRDb29raWVB
Y2NlcHRQb2xpY3koY3VybFBvbGljeSk7CiAgICAgfSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJNYWMubW0gYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJNYWMu
bW0KaW5kZXggMTlmNTg3OGQ2NjJjMzZiYmQ3ZmM2Mzg0N2JjZDc4YWM5YmJjMmI5Ni4uN2Y5MTIw
Y2EyZTFmYzA4YjI1ZDU4ZjBlYTVjMDgzZDI2NGYwZWI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9tYWMvV2ViQ29va2llTWFu
YWdlck1hYy5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9IVFRQQ29va2ll
QWNjZXB0UG9saWN5Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5o
PgogI2ltcG9ydCA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KKyNpbXBvcnQgPHd0Zi9DYWxs
YmFja0FnZ3JlZ2F0b3IuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewpAQCAtNTMsMTUgKzU0LDE5IEBAIHN0YXRpYyBDRkhUVFBDb29raWVT
dG9yYWdlQWNjZXB0UG9saWN5IHRvQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeShIVFRQ
Q29vCiAgICAgcmV0dXJuIENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lBbHdheXM7CiB9
CiAKLXZvaWQgV2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KQordm9pZCBXZWJDb29raWVNYW5hZ2Vy
OjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5B
Y2Nlc3NSYXdDb29raWVzKSk7CiAKKyAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBb
W05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZUFj
Y2VwdFBvbGljeTpzdGF0aWNfY2FzdDxOU0hUVFBDb29raWVBY2NlcHRQb2xpY3k+KHBvbGljeSld
OworICAgIHNhdmVDb29raWVzKFtOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVT
dG9yYWdlXSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIAogICAgIG1fcHJvY2Vzcy5mb3JF
YWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFsmXSAoY29uc3QgYXV0byYgbmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKSB7CiAgICAgICAgIGlmIChhdXRvIGNvb2tpZVN0b3JhZ2UgPSBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24uY29va2llU3RvcmFnZSgpKQogICAgICAgICAgICAgQ0ZIVFRQQ29va2llU3RvcmFn
ZVNldENvb2tpZUFjY2VwdFBvbGljeShjb29raWVTdG9yYWdlLmdldCgpLCB0b0NGSFRUUENvb2tp
ZVN0b3JhZ2VBY2NlcHRQb2xpY3kocG9saWN5KSk7CisgICAgICAgIGlmIChhdXRvICpzdG9yYWdl
ID0gbmV0d29ya1N0b3JhZ2VTZXNzaW9uLm5zQ29va2llU3RvcmFnZSgpKQorICAgICAgICAgICAg
c2F2ZUNvb2tpZXMoc3RvcmFnZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICAgICB9KTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL3Nv
dXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCmluZGV4IDc1NGQwYmJjNmI0
ZmU3MjdmMGViZWE0MWZiMThjOGE2YmFhYjE2NjMuLmQ1NzZhZmRlNDJmOGI1MTJmMzRiN2FlMzQx
YzlkNzUxYWU5NDQ4NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2VyU291cC5jcHAKQEAg
LTM3LDExICszNywxMiBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCit2b2lkIFdlYkNvb2tpZU1h
bmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0
UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIG1fcHJvY2Vzcy5mb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtwb2xp
Y3ldIChhdXRvJiBzZXNzaW9uKSB7CiAgICAgICAgIHNlc3Npb24uc2V0Q29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSk7CiAgICAgfSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJz
aXN0ZW50U3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDQwNDFjNTJiMDc1YzY0MjU5ZjY4MDUw
YmE5N2I2ODMxMWEzYTk1Y2QuLjMzZjI5NTIxMDQyOTZiYzBiODUyMDdjMmQ4NTBjNDhkYzRhODJh
OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCkBAIC0xNzMsNiArMTczLDcgQEAgTmV0d29ya1Byb2Nlc3M6Ok5ldHdvcmtQcm9jZXNzKEF1
eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmJiBwYXJhbWUKICNlbmRpZgog
CiAjaWYgVVNFKFNPVVApCisgICAgLy8gRklYTUU6IERvIG5vdCB1c2UgdGhlIGRlZmF1bHQgc2Vz
c2lvbiBJRC4KICAgICBETlNSZXNvbHZlUXVldWVTb3VwOjpzZXRHbG9iYWxEZWZhdWx0U291cFNl
c3Npb25BY2Nlc3NvcihbdGhpc10oKSAtPiBTb3VwU2Vzc2lvbiogewogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4oKm5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpKS5zb3VwU2Vzc2lvbigpOwogICAgIH0pOwpAQCAt
MzM4LDMwICszMzksNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1By
b2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJgogCiAgICAgc2V0QWRDbGlj
a0F0dHJpYnV0aW9uRGVidWdNb2RlKHBhcmFtZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9u
RGVidWdNb2RlKTsKIAotICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5kaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotCi0gICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7Ci0gICAgc2V0
U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUo
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMpKSk7Ci0KLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Np
b25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9y
YWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQ
YXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vz
c2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoU0VSVklDRV9XT1JLRVIpCi0gICAgYm9vbCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0
aW9uRGVsYXlFbmFibGVkID0gdHJ1ZTsKLSAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihQQUw6
OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1p
bmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLQotICAgIG1fc3RvcmFnZU1hbmFnZXJT
ZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvKiBk
ZWZhdWx0U2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCkpOwotICAgIGF1dG8qIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IGRlZmF1bHRTZXNz
aW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tp
ZSA6IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMp
Ci0gICAgICAgIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7Ci0KICAg
ICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAg
ICBzdXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwogCkBAIC00OTYsOCArNDczLDYg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25J
RCYgc2Vzc2lvbklELCBib29sIHNob3VsZFUKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVc2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllckJhc2UpCiAjZW5kaWYK
IHsKLSAgICBBU1NFUlQoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkpOwotCiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMu
YWRkKHNlc3Npb25JRCwgbnVsbHB0cik7CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNTEyLDcgKzQ4Nyw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91
bGRVCiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZklkZW50aWZpZXIgPSBtYWtlU3RyaW5n
KGlkZW50aWZpZXJCYXNlLCAiLlByaXZhdGVCcm93c2luZy4iLCBjcmVhdGVDYW5vbmljYWxVVUlE
U3RyaW5nKCkpLmNyZWF0ZUNGU3RyaW5nKCk7CiAgICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJh
bCgpKQogICAgICAgICBzdG9yYWdlU2Vzc2lvbiA9IGFkb3B0Q0YoY3JlYXRlUHJpdmF0ZVN0b3Jh
Z2VTZXNzaW9uKGNmSWRlbnRpZmllci5nZXQoKSkpOwotICAgIGVsc2UKKyAgICBlbHNlIGlmIChz
ZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAgICAgICAg
c3RvcmFnZVNlc3Npb24gPSBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0ZUNG
U3RvcmFnZVNlc3Npb25Gb3JJZGVudGlmaWVyKGNmSWRlbnRpZmllci5nZXQoKSk7CiAKICAgICBp
ZiAoTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpwcm9jZXNzTWF5VXNlQ29va2llQVBJKCkpIHsKQEAg
LTUzNSwyMSArNTEwLDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNvb2tpZUFjY2VwdFBvbGlj
eUNoYW5nZWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSBuZXdQb2xpY3kpCiAKIFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiogTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uKGNvbnN0
IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQpIGNvbnN0CiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9
PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICByZXR1cm4gJmRl
ZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwogICAgIHJldHVybiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lv
bnMuZ2V0KHNlc3Npb25JRCk7CiB9CiAKLVdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYg
TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24pCi0gICAgICAgIG1fZGVmYXVsdE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiA9IHBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7
Ci0gICAgcmV0dXJuICptX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247Ci19Ci0KIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oY29uc3QgRnVuY3Rp
b248dm9pZChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mKT4mIGZ1bmN0b3IpCiB7Ci0g
ICAgZnVuY3RvcihkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSk7CiAgICAgZm9yIChhdXRvJiBzdG9y
YWdlU2Vzc2lvbiA6IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy52YWx1ZXMoKSkKICAgICAgICAg
ZnVuY3Rvcigqc3RvcmFnZVNlc3Npb24pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IDcxNmExMDFkY2JjNjIyMjU0OGFmZDRkNmYzODg4
N2RmYWZjZGYyYWUuLjY2YWExYzMyMTk5MTk1MmFmOTI0MzdkOThiNGJkM2YyMDQxMmYzNDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKQEAgLTE3
MCw3ICsxNzAsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZvckVhY2hOZXR3b3JrU3RvcmFnZVNl
c3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24m
KT4mKTsKICAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHN0b3JhZ2VTZXNzaW9u
KGNvbnN0IFBBTDo6U2Vzc2lvbklEJikgY29uc3Q7Ci0gICAgV2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uJiBkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdDsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBuZXdUZXN0aW5nU2Vzc2lvbihj
b25zdCBQQUw6OlNlc3Npb25JRCYpOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgZW5z
dXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYsIGJvb2wgc2hvdWxkVXNlVGVzdGluZ05l
dHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFJldGFpblB0cjxDRkhUVFBD
b29raWVTdG9yYWdlUmVmPiYmKTsKQEAgLTM3Myw3ICszNzIsNiBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IHBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIGRpZFJlY2VpdmVOZXR3b3JrUHJvY2Vzc01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CiAKQEAgLTU0Miw3ICs1NDAsNiBA
QCBwcml2YXRlOgogCiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRy
PE5ldHdvcmtTZXNzaW9uPj4gbV9uZXR3b3JrU2Vzc2lvbnM7CiAgICAgSGFzaE1hcDxQQUw6OlNl
c3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4+
IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9uczsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjsKIAogICAgIFJlZlB0cjxTdG9yYWdlTWFuYWdlclNldD4gbV9zdG9yYWdlTWFuYWdlclNl
dDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAppbmRleCA3MTYzZWMyMTVlOWIy
NzE5ZDdmODM1ZWQ2NmQ1OWZlNmRlODk0MWFlLi40OWZhODgwYTg5NjUxMDg0YTU4Mzk5MWQ3YTEw
ZmVlNzBiNTUyMWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcApAQCAtNTUs
NyArNTUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUo
SVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgdWlQcm9jZXNzU0RL
VmVyc2lvbjsKICAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBuZXR3b3JrQVRTQ29udGV4dC5nZXQo
KSk7CiAjZW5kaWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwog
I2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIgPDwgY29va2llQWNjZXB0UG9saWN5OwogICAgIGVu
Y29kZXIgPDwgbGFuZ3VhZ2VzOwpAQCAtNjYsOSArNjUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
ICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAgIGVuY29kZXIg
PDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0Vf
V09SS0VSKQotICAgIGVuY29kZXIgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eSA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlIDw8
IHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXk7Ci0jZW5k
aWYKICAgICBlbmNvZGVyIDw8IGVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZTsKIH0K
IApAQCAtMTEzLDEyICsxMDksNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICBkZWNvZGVyID4+IGRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIGlmICghZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMgPSBXVEZNb3ZlKCpkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyk7Ci0KICNpZiBV
U0UoU09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVBY2NlcHRQb2xp
Y3kpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzUsMjAgKzEyNSw2IEBAIGJvb2wgTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29k
ZXIsIE5ldHdvcmtQcm9jCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsU2NoZW1l
c1JlZ2lzdGVyZWRBc05vQWNjZXNzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0jaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCi0gICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBzZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAo
IXNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggOGYwYTAwMzk2
YmJmMDMzMDEzMDAxODJiOWUxZmQzNmRmYjQwMTk1MC4uNzgyOWEyZGMxYzJiMmE4ZWZjMmRhOTJl
YTJhZjRkNGY4MzYyMTc0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtMjcs
NyArMjcsNiBAQAogCiAjaW5jbHVkZSAiQ2FjaGVNb2RlbC5oIgogI2luY2x1ZGUgIlNhbmRib3hF
eHRlbnNpb24uaCIKLSNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29va2llLmg+CiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTcwLDggKzY5LDYgQEAgc3RydWN0IE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBuZXR3b3Jr
QVRTQ29udGV4dDsKICNlbmRpZgogCi0gICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAgCiAjaWYgVVNFKFNPVVApCiAgICAgV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBXZWJDb3JlOjpI
VFRQQ29va2llQWNjZXB0UG9saWN5OjpBbHdheXNBY2NlcHQgfTsKICAgICBWZWN0b3I8U3RyaW5n
PiBsYW5ndWFnZXM7CkBAIC04MiwxMSArNzksNiBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMgewogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVk
QXNMb2NhbDsKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nl
c3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgU3RyaW5nIHNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgYm9v
bCBzaG91bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5IHsgZmFs
c2UgfTsKLSNlbmRpZgogICAgIGJvb2wgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2Rl
IHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCmluZGV4IGY5
OTVlMDFkNDdkOGJkZDk2OWYyYzgwZTY3OWFkYWUxN2M5ZDViNzIuLjAyYzg2NzNkMzliMWI2ODI2
NjJhNzdlZDFjNjE2NmQ5NzFhNjJmNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNw
cApAQCAtMjE0LDcgKzIxNCw4IEBAIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsZWFyKCkK
IAogdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y2xvc2UoKQogewotICAgIEFTU0VSVCghbV9p
c0Nsb3NlZCk7CisgICAgaWYgKG1faXNDbG9zZWQpCisgICAgICAgIHJldHVybjsKICAgICBtX2lz
Q2xvc2VkID0gdHJ1ZTsKIAogICAgIGlmIChtX2RpZFNjaGVkdWxlRGF0YWJhc2VVcGRhdGUpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1By
b2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a1Byb2Nlc3NDb2NvYS5tbQppbmRleCBkYTYzNTkxMjQyMjNkYjk3MDMwZDFlYTc3YmMwMGNlZTUx
ZmIwMTdkLi44MmQ0NDIwYWNmYmI3ZWQyMjEzOTMxMGIyMmIxN2MyZGIyMGNiZjM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29j
b2EubW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJv
Y2Vzc0NvY29hLm1tCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJOZXR3b3JrUmVzb3VyY2VM
b2FkZXIuaCIKICNpbXBvcnQgIk5ldHdvcmtTZXNzaW9uQ29jb2EuaCIKICNpbXBvcnQgIlNhbmRi
b3hFeHRlbnNpb24uaCIKKyNpbXBvcnQgIldlYkNvb2tpZU1hbmFnZXIuaCIKICNpbXBvcnQgPFdl
YkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY1N1
ZmZpeC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3RDRk5ldC5oPgpAQCAtNzgs
OSArNzksNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVu
ZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFU
U0NvbnRleHQocGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMDUsMTEg
KzEwMyw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzQ29jb2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUgc2V0U2hh
cmVkVVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVE
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSk7Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNzOjpzb3Vy
Y2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9BUFBMSUNB
VElPTl9BVURJVF9EQVRBKQpAQCAtMjIxLDcgKzIxNCw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OmZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21wbGV0aW9u
SGFuCiAgICAgcGxhdGZvcm1GbHVzaENvb2tpZXMoc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNhdmVDb29raWVzKE5TSFRUUENvb2tpZVN0
b3JhZ2UgKmNvb2tpZVN0b3JhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3ZvaWQgc2F2ZUNvb2tpZXMoTlNIVFRQQ29va2llU3RvcmFnZSAqY29va2ll
U3RvcmFnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgQVNTRVJUKGNvb2tpZVN0b3Jh
Z2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdv
cmtQcm9jZXNzQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0
d29ya1Byb2Nlc3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2ZTQyZGNjOGUzZjliOGYxNjky
OTk3ZjY3MTkyLi40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5ZDU5M2UyMjU2YTM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3ND
dXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1By
b2Nlc3NDdXJsLmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkK
IHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4g
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQ2Vy
dGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBjMjczNmUwMjZh
NTVkM2Q0MDIwZjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5Zjk0NjIwZjAyYTdkOWU5ZTg2
OWVjODY0OTFiN2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNTUsMTUgKzU1LDEx
IEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVT
ZXNzaW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNv
bnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFu
ZGxlKTsKIAogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nlc3ND
b29raWVTdG9yYWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFt
ZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAgIGlm
ICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2ll
U3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KQogICAgICAgICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29va2llU3RvcmFnZUZyb21JZGVu
dGlmeWluZ0RhdGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcik7
CiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9u
LCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkpLCBXVEZNb3ZlKHVp
UHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrUHJv
Y2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29v
a2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0Q29v
a2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25JRCwg
TmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3Bw
CmluZGV4IDBkMzFiM2QxYjM0ZmU3Y2Q4MDQwNTFkN2Y0MWIwNGM1MWEyOTdhMjAuLmE0YzAzMWQy
ODM1ZTg0NDQ0OWNmYmEzMWEwNTVhODAzMWEyZDNkM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5j
cHAKQEAgLTM5LDYgKzM5LDcgQEAgY2xhc3MgTmV0d29ya1Byb2Nlc3NNYWluU291cCBmaW5hbDog
cHVibGljIEF1eGlsaWFyeVByb2Nlc3NNYWluQmFzZSB7CiBwdWJsaWM6CiAgICAgdm9pZCBwbGF0
Zm9ybUZpbmFsaXplKCkgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJcyB0aGlz
IHN0aWxsIG5lZWRlZD8gV2Ugc2hvdWxkIHByb2JhYmx5IGRlc3Ryb3kgYWxsIGV4aXN0aW5nIHNl
c3Npb25zIGF0IHRoaXMgcG9pbnQgaW5zdGVhZC4KICAgICAgICAgLy8gTmVlZGVkIHRvIGRlc3Ry
b3kgdGhlIFNvdXBTZXNzaW9uIGFuZCBTb3VwQ29va2llSmFyLCBlLmcuIHRvIGF2b2lkCiAgICAg
ICAgIC8vIGxlYWtpbmcgU1FMaXRlIHRlbXBvcmFyeSBqb3VybmFsaW5nIGZpbGVzLgogICAgICAg
ICBnbG9iYWxOZXR3b3JrUHJvY2Vzcy0+ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCmluZGV4IGEyMTI4NDU3MzNhNmM0MzMw
NzZjNGJhMjI2OTRmNjhmMzkyNmFhOTAuLjAwZmY4YjJmZTUwMzhlY2Q0MzRmYzQ2NzM4ZjNhMDVl
ZThkNDgzM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9O
ZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
c291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCkBAIC0xMzUsMTEgKzEzNSw2IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdv
cmtQcm9jZXNzQ3JlYXRpCiAgICAgICAgIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKHBh
cmFtZXRlcnMubGFuZ3VhZ2VzKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0
b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkp
OwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRJZ25vcmVUTFNFcnJvcnMoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKICAgICBpZiAoYXV0byog
c2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9BdHRhY2htZW50LmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9BdHRhY2htZW50LmgKaW5kZXggMTc0M2MzYjc4MzBhMDMwZjU3NTczY2IwZWFlODI3ZDQx
OTU5NGJhZS4uZDZmZjNjMTdlYmEwZDA0ZTA3ZGU4YmNhMWFhNzJjNTQzN2RjNWEzNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0F0dGFjaG1lbnQuaApAQCAtOTUsOCArOTUsOCBAQCBwcml2
YXRlOgogICAgIGludCBtX2ZpbGVEZXNjcmlwdG9yIHsgLTEgfTsKICAgICBzaXplX3QgbV9zaXpl
OwogI2VsaWYgT1MoREFSV0lOKQotICAgIG1hY2hfcG9ydF9uYW1lX3QgbV9wb3J0OwotICAgIG1h
Y2hfbXNnX3R5cGVfbmFtZV90IG1fZGlzcG9zaXRpb247CisgICAgbWFjaF9wb3J0X25hbWVfdCBt
X3BvcnQgeyAwIH07CisgICAgbWFjaF9tc2dfdHlwZV9uYW1lX3QgbV9kaXNwb3NpdGlvbiB7IDAg
fTsKICNlbGlmIE9TKFdJTkRPV1MpCiAgICAgSEFORExFIG1faGFuZGxlIHsgSU5WQUxJRF9IQU5E
TEVfVkFMVUUgfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCmluZGV4IDZkMGMxMjlhNzQwNTEwZDM4Njk3MzcwNWFk
MDkyZWYxMzJjYzA3NWEuLjA0ODEwYjNlMTliZTk2Y2FkMWFkODJhNDRkY2VkYjI2ZWY3ODI2MWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycy5jcHAKQEAgLTQwLDEzICs0MCw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgZW5jb2RlciA8PCB1aVByb2Nlc3NDb29raWVT
dG9yYWdlSWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5z
aW9uSGFuZGxlOwotICAgIGVuY29kZXIgPDwgcGVuZGluZ0Nvb2tpZXM7CiAKICNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKICAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eSA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKQEAgLTgzLDEyICs3OSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5jb29raWVTdG9yYWdl
UGF0aEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9u
SGFuZGxlKTsKIAotICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpDb29raWU+PiBwZW5kaW5n
Q29va2llczsKLSAgICBkZWNvZGVyID4+IHBlbmRpbmdDb29raWVzOwotICAgIGlmICghcGVuZGlu
Z0Nvb2tpZXMpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5w
ZW5kaW5nQ29va2llcyA9IFdURk1vdmUoKnBlbmRpbmdDb29raWVzKTsKLQogI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQogICAgIE9wdGlvbmFsPFN0cmluZz4gaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5OwogICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwpAQCAtMTAx
LDE0ICs5MSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgaWYgKCFpbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBPcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGU+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
OwotICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGU7Ci0gICAgaWYgKCFpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJz
LmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92
ZSgqaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2Vu
ZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmggYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCmluZGV4IGYyN2RmNDg5
ODA5ZjMxOTYwOGI2ODBjYjJhOGExYzE0YjcwMTg0MzkuLmUxYjIzMzcwMTk5ZmUzNzAzMWU5ZGM1
YzA1NzgxNTUwMjFlMzRkNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMuaApAQCAtNTEsMTUgKzUxLDExIEBAIHN0cnVjdCBXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycyB7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdWlQcm9jZXNzQ29v
a2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGNvb2tp
ZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+
IHBlbmRpbmdDb29raWVzOwogICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzIG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
ICAgIFN0cmluZyBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBpbmRleGVk
RGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2VuZGlm
CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCmluZGV4IGJjMDc4NjZmYmMzOTY4ZTc2
Y2FhOWEzNTY4MTBjNmEyZmIwOWRjZmQuLmZmOTU1ODkyYmRhMGI4M2MyM2E5NmEwODM5ZWYzYmQw
ZDk0NjljMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQ
Q29va2llU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQ
Q29va2llU3RvcmUuY3BwCkBAIC00Niw4ICs0Niw2IEBAIG5hbWVzcGFjZSBBUEkgewogSFRUUENv
b2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJz
aXRlRGF0YVN0b3JlKQogICAgIDogbV9vd25pbmdEYXRhU3RvcmUod2Vic2l0ZURhdGFTdG9yZSkK
IHsKLSAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3Jh
Z2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmlj
YXRpb25zKCk7CiB9CiAKIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCkBAIC01
NSw4ICs1Myw2IEBAIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCiAgICAgQVNT
RVJUKG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFtX29ic2VydmVkQ29va2ll
TWFuYWdlclByb3h5KTsKICAgICBBU1NFUlQoIW1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIp
OwotCi0gICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwogfQog
CiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZmlsdGVyQXBwQm91bmRDb29raWVzKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtODEsMzMgKzc3
LDE2IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpCiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpj
b29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tp
ZT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdE
YXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBp
ZiAoIXBvb2wpIHsKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gYWxsQ29va2llczsK
LSAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICAgICAgYWxsQ29va2llcyA9IGdldEFs
bERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKLSAgICAgICAgYWxsQ29va2ll
cy5hcHBlbmRWZWN0b3IobV9vd25pbmdEYXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwotCi0g
ICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCBhbGxDb29raWVzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGZpbHRlckFwcEJvdW5k
Q29va2llcyhhbGxDb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAg
IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9
IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAg
Y29va2llTWFuYWdlci0+Z2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHBvb2wgPSBXVEZNb3Zl
KHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAo
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1
dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5j
b29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRBbGxDb29raWVzKG1fb3duaW5n
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKICAgICAgICAg
ZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RG
OjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tp
ZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5n
RGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAg
aWYgKCFwb29sKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLQotICAg
IGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2ll
TWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmdldENvb2tpZXMobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
IChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8m
IGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5jb29r
aWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsKICAgICAgICAgZmlsdGVy
QXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICB9KTsKIH0KQEAgLTExNSw3OCArOTQsMjkgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tp
ZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG8KIHZv
aWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29r
aWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIChhdXRvJiYgYXBwQm91bmRDb29raWVzKSBtdXRhYmxlIHsKLSAgICAg
ICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0
b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgICAgIGlmICghcG9vbCkgewotICAgICAgICAgICAgZm9y
IChhdXRvJiBjb29raWUgOiBhcHBCb3VuZENvb2tpZXMpIHsKLSAgICAgICAgICAgICAgICAvLyBG
SVhNRTogcGVuZGluZ0Nvb2tpZXMgdXNlZCBmb3IgZGVmYXVsdFNlc3Npb24gYmVjYXVzZSBzZXNz
aW9uIGNvb2tpZXMgY2Fubm90IGJlIHByb3BhZ2F0ZWQgdG8gTmV0d29yayBQcm9jZXNzIHdpdGgg
dWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuCi0gICAgICAgICAgICAgICAgaWYgKG1f
b3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgICAgICAgICAgc2V0Q29v
a2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5hZGRQZW5kaW5n
Q29va2llKGNvb2tpZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+
c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgY29v
a2llTWFuYWdlci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFw
cEJvdW5kQ29va2llcywgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOworICAgICAgICBhdXRvJiBjb29raWVNYW5h
Z2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigp
OworICAgICAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNl
c3Npb25JRCgpLCBhcHBCb3VuZENvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZShjb25zdCBX
ZWJDb3JlOjpDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewot
ICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAgICAg
ZGVsZXRlQ29va2llRnJvbURlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+cmVtb3ZlUGVuZGluZ0Nv
b2tpZShjb29raWUpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0g
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50
PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRl
bGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgW3Bvb2wg
PSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0p
OworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1By
b2Nlc3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29raWUo
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1
dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdl
T3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAgZGVsZXRlQ29v
a2llc0luRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxl
dGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgYXV0byYg
Y29va2llTWFuYWdlciA9IG1fb3duaW5nRGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLmNvb2tp
ZU1hbmFnZXIoKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKICAgICAvLyBGSVhNRTogVGhlIENvbXBsZXRpb25IYW5k
bGVyIHNob3VsZCBiZSBwYXNzZWQgdG8gV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxD
b29raWVzLgogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9
IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25z
KCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNl
c3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBzZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUocG9saWN5KTsKLSAgICAgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBw
bGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFn
ZXItPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsK
KyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gbV9vd25pbmdEYXRhU3RvcmUtPm5ldHdvcmtQcm9j
ZXNzKCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1c2hD
b29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTIyNywyMSArMTU3LDcgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIo
T2JzZXJ2ZXImIG9ic2VydmVyKQogCiAgICAgbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA9
IG1ha2VVbmlxdWU8QVBJV2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI+KCp0aGlzKTsKIAot
ICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVT
dG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIEFTU0VSVCgh
bV9vYnNlcnZpbmdVSVByb2Nlc3NDb29raWVzKTsKLQotICAgICAgICAvLyBMaXN0ZW4gZm9yIGNv
b2tpZSBub3RpZmljYXRpb25zIGluIHRoZSBVSVByb2Nlc3MgaW4gdGhlIG1lYW50aW1lLgotICAg
ICAgICBzdGFydE9ic2VydmluZ0NoYW5nZXNUb0RlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShb
dGhpc10gKCkgewotICAgICAgICAgICAgY29va2llc0RpZENoYW5nZSgpOwotICAgICAgICB9KTsK
LQotICAgICAgICBtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMgPSB0cnVlOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wt
PnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNl
cnZlZENvb2tpZU1hbmFnZXJQcm94eSA9ICZtX293bmluZ0RhdGFTdG9yZS0+bmV0d29ya1Byb2Nl
c3MoKS5jb29raWVNYW5hZ2VyKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+
cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tp
ZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0KIApAQCAtMjc2LDQ2ICsxOTIsMTAgQEAgdm9pZCBI
VFRQQ29va2llU3RvcmU6OmNvb2tpZXNEaWRDaGFuZ2UoKQogdm9pZCBIVFRQQ29va2llU3RvcmU6
OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQoKQogewogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2Vy
UHJveHktPnVucmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
ICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLSAgICBtX29ic2VydmVkQ29va2llTWFu
YWdlclByb3h5ID0gbnVsbHB0cjsKLQotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9y
ZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFw
b29sKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5
ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAg
ICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJm1fb3duaW5nRGF0YVN0b3JlLT5uZXR3
b3JrUHJvY2VzcygpLmNvb2tpZU1hbmFnZXIoKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdl
clByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwg
Km1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCi12b2lkIEhUVFBDb29raWVTdG9y
ZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIEFTU0VS
VCghbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsKLQotICAgIG1fcHJv
Y2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IFdlYlByb2Nlc3NQb29sOjpyZWdp
c3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihbdGhpc10oV2ViUHJvY2Vzc1Bvb2wmIG5l
d1Byb2Nlc3NQb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPmlzQXNzb2Np
YXRlZFByb2Nlc3NQb29sKG5ld1Byb2Nlc3NQb29sKSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICAvLyBOb3cgdGhhdCBhbiBhc3NvY2lhdGVkIHByb2Nlc3MgcG9vbCBleGlzdHMsIHdl
IG5lZWQgdG8gZmx1c2ggdGhlIFVJIHByb2Nlc3MgY29va2llIHN0b3JlCi0gICAgICAgIC8vIHRv
IG1ha2Ugc3VyZSBhbnkgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIHdpdGhpbiB0aGUgbmV3IHByb2Nl
c3MgcG9vbC4KLSAgICAgICAgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAg
ICAgICAgbmV3UHJvY2Vzc1Bvb2wuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQotICAgICAgICBp
ZiAobV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcikgewotICAgICAgICAgICAgbV9vYnNlcnZl
ZENvb2tpZU1hbmFnZXJQcm94eSA9IG5ld1Byb2Nlc3NQb29sLnN1cHBsZW1lbnQ8V2ViS2l0OjpX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgICAgICAgICBtX29ic2VydmVkQ29va2llTWFu
YWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgICAgICB9Ci0gICAgICAgIHVu
cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMoKQotewotICAgIGlmIChtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZp
ZXIpCi0gICAgICAgIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlv
bkxpc3RlbmVyKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7Ci0KLSAg
ICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSAwOwotfQotCiAjaWYg
IVBMQVRGT1JNKENPQ09BKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmZsdXNoRGVmYXVsdFVJUHJv
Y2Vzc0Nvb2tpZVN0b3JlKCkgeyB9CiBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBIVFRQQ29va2ll
U3RvcmU6OmdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKSB7IHJldHVy
biB7IH07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQ
Q29va2llU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2ll
U3RvcmUuaAppbmRleCBkNjIwYWRkYTRlN2Y4OTQ1NjYxOGEzZTIyZTFiZmQ0MzU3Nzc1YjE5Li5h
MDVmNDE0MzBkYjJiMjNkNDE3ODQwNzlhNGZiODZjNzQ2MGE3NTQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCkBAIC04Myw5ICs4Myw2
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSFRUUENvb2tpZVN0b3JlKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZSYpOwogCi0gICAgdm9pZCByZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZp
Y2F0aW9ucygpOwotICAgIHZvaWQgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0
aW9ucygpOwotCiAgICAgdm9pZCBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpOwog
ICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBnZXRBbGxEZWZhdWx0VUlQcm9jZXNz
Q29va2llU3RvcmVDb29raWVzKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0Q29va2llSW5EZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAppbmRleCA1OGM1NDUzZjQ4OTg3ZjVl
MWFmYWZlZjM0YzQzMzM1ZjFiNGNjOTkwLi4zN2JhYTY4ZjkyNGI5NTg3MmYwMWY3ZTRhODBkNWY0
OTdkNWZlOWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0Nv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5j
cHAKQEAgLTQxMSwxMSArNDExLDYgQEAgdm9pZCBXS0NvbnRleHRQcmVjb25uZWN0VG9TZXJ2ZXIo
V0tDb250ZXh0UmVmLCBXS1VSTFJlZikKIHsKIH0KIAotV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29u
dGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgcmV0
dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnN1cHBsZW1lbnQ8
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkpOwotfQotCiBXS1dlYnNpdGVEYXRhU3Rv
cmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYpCiB7CiAgICAg
cmV0dXJuIFdLV2Vic2l0ZURhdGFTdG9yZUdldERlZmF1bHREYXRhU3RvcmUoKTsKQEAgLTUyNywx
MyArNTIyLDYgQEAgdm9pZCBXS0NvbnRleHRTZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRp
bWVyRW5hYmxlZChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwKICAgICBXZWJLaXQ6OnRvSW1wbChj
b250ZXh0UmVmKS0+c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoZW5h
YmxlKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNl
cnZpY2VXb3JrZXJUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0LCBib29sIGFsbG93cykKLXsK
LSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCkt
PnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2Vu
ZGlmCi19Ci0KIFdLRGljdGlvbmFyeVJlZiBXS0NvbnRleHRDb3B5UGx1Z0luQXV0b1N0YXJ0T3Jp
Z2luSGFzaGVzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewogICAgIHJldHVybiBXZWJLaXQ6
OnRvQVBJKCZXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+cGx1Z0luQXV0b1N0YXJ0T3JpZ2lu
SGFzaGVzKCkubGVha1JlZigpKTsKQEAgLTU3NSwyMSArNTYzLDExIEBAIHZvaWQgV0tDb250ZXh0
U2V0Rm9udEFsbG93TGlzdChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tBcnJheVJlZiBhcnJh
eVJlZikKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0Rm9udEFsbG93TGlzdChX
ZWJLaXQ6OnRvSW1wbChhcnJheVJlZikpOwogfQogCi12b2lkIFdLQ29udGV4dFRlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0KQotewotICAgIFdlYktpdDo6dG9JbXBs
KGNvbnRleHQpLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwotfQotCiB2b2lkIFdLQ29udGV4
dFRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKFdLQ29udGV4dFJlZiBjb250ZXh0KQogewogICAgIFdl
YktpdDo6dG9JbXBsKGNvbnRleHQpLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQogCi1Q
cm9jZXNzSUQgV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLQ29udGV4dFJl
ZiBjb250ZXh0UmVmKQotewotICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+
bmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKCk7Ci19Ci0KIHZvaWQgV0tDb250ZXh0QWRkU3VwcG9y
dGVkUGx1Z2luKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBkb21haW5SZWYs
IFdLU3RyaW5nUmVmIG5hbWVSZWYsIFdLQXJyYXlSZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5UmVm
IGV4dGVuc2lvbnNSZWYpCiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBAIC02
MTksMTIgKzU5NywxMSBAQCB2b2lkIFdLQ29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVG
b3JUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogICAgIFdlYktpdDo6dG9JbXBsKGNv
bnRleHRSZWYpLT5jbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpOwogfQogCi12
b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoV0tDb250ZXh0
UmVmIGNvbnRleHRSZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKK3Zv
aWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0NvbnRleHRS
ZWYsIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKIHsKLSAgICBXZWJLaXQ6
OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0
YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgd2Vi
c2l0ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUo
V0tDb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0lt
cGwoY29udGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktpdDo6dG9JbXBsKHdlYnNp
dGVEYXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0
LmgKaW5kZXggMWQ4ZmFiOGExNDg2YWFkYjQ5NDE0NGI5OGYxMGU5MzYzOGQwYzVlNi4uMmFiNmVm
ODZmNTMwZTc3Zjc0Y2JkNWRmNTg2MmFjNGQzMGI3OTg3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKQEAgLTE2OCw3ICsxNjgsNiBAQCBXS19FWFBPUlQgdm9p
ZCBXS0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19F
WFBPUlQgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4dEdldFdlYnNpdGVEYXRhU3RvcmUo
V0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVO
VChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKIAogV0tfRVhQT1JUIFdL
QXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0QXBwbGljYXRpb25DYWNoZU1h
bmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBM
QUNFTUVOVChXS1dlYnNpdGVEYXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKLVdLX0VYUE9S
VCBXS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRS
ZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdLX0VYUE9SVCBXS0dlb2xvY2F0aW9u
TWFuYWdlclJlZiBXS0NvbnRleHRHZXRHZW9sb2NhdGlvbk1hbmFnZXIoV0tDb250ZXh0UmVmIGNv
bnRleHQpOwogV0tfRVhQT1JUIFdLSWNvbkRhdGFiYXNlUmVmIFdLQ29udGV4dEdldEljb25EYXRh
YmFzZShXS0NvbnRleHRSZWYgY29udGV4dCk7CiBXS19FWFBPUlQgV0tLZXlWYWx1ZVN0b3JhZ2VN
YW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFnZU1hbmFnZXIoV0tDb250ZXh0UmVm
IGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNFTUVOVChXS1dlYnNpdGVE
YXRhU3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAppbmRleCBhMDI1MDExZjcwY2M2NTlmNWZhYTA4
YTdkNmNiYjNmZjU2ZWU2YTM4Li40OGEyOWM0NTY4YWI2N2IzYjdlMWVmOTgxNTZmNmVmYTg5NmIx
ZGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQ
cml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJp
dmF0ZS5oCkBAIC04MywxMSArODMsOCBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRXYXJtSW5p
dGlhbFByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogLy8gQXQgc29tZSBwb2ludCBpdCBz
aG91bGQgYmUgcmVtb3ZlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldFVzZXNOZXR3b3Jr
UHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRU
ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tD
b250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmKTsKIAotV0tfRVhQT1JU
IHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2Vy
VGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwotCiB0eXBlZGVmIHZvaWQgKCpXS0NvbnRleHRJ
bnZhbGlkTWVzc2FnZUZ1bmN0aW9uKShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSk7CiBXS19FWFBP
UlQgdm9pZCBXS0NvbnRleHRTZXRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKFdLQ29udGV4dEludmFs
aWRNZXNzYWdlRnVuY3Rpb24gaW52YWxpZE1lc3NhZ2VGdW5jdGlvbik7CiAgICAgCkBAIC05Nyw4
ICs5NCw2IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEZvbnRBbGxvd0xpc3QoV0tDb250
ZXh0UmVmLCBXS0FycmF5UmVmKTsKIAogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0UHJlY29ubmVj
dFRvU2VydmVyKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1VSTFJlZiBzZXJ2ZXJVUkwpIFdLX0Nf
QVBJX0RFUFJFQ0FURUQ7CiAKLVdLX0VYUE9SVCBXS1Byb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3
b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpOwotCiBXS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4oV0tDb250ZXh0UmVmIGNvbnRleHQsIFdL
U3RyaW5nUmVmIGRvbWFpbiwgV0tTdHJpbmdSZWYgbmFtZSwgV0tBcnJheVJlZiBtaW1lVHlwZXMs
IFdLQXJyYXlSZWYgZXh0ZW5zaW9ucyk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhclN1
cHBvcnRlZFBsdWdpbnMoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAppbmRleCA2NDhmMzAwOTYxYTUwNjBjOWNkZjAzZTNjZjgw
NDU4YmYyYmI1MGRkLi5iNDQ3MzQyMTIwMDYxM2MxOWVjM2FjOWFkNjY5OTc1MzRhYmVmMTlmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKQEAgLTM5OCw2ICszOTgs
MTEgQEAgdWludDY0X3QgV0tQYWdlR2V0UmVuZGVyVHJlZVNpemUoV0tQYWdlUmVmIHBhZ2UpCiAg
ICAgcmV0dXJuIHRvSW1wbChwYWdlKS0+cmVuZGVyVHJlZVNpemUoKTsKIH0KIAorV0tXZWJzaXRl
RGF0YVN0b3JlUmVmIFdLUGFnZUdldFdlYnNpdGVEYXRhU3RvcmUoV0tQYWdlUmVmIHBhZ2UpCit7
CisgICAgcmV0dXJuIHRvQVBJKCZ0b0ltcGwocGFnZSktPndlYnNpdGVEYXRhU3RvcmUoKSk7Cit9
CisKIFdLSW5zcGVjdG9yUmVmIFdLUGFnZUdldEluc3BlY3RvcihXS1BhZ2VSZWYgcGFnZVJlZikK
IHsKICAgICByZXR1cm4gdG9BUEkodG9JbXBsKHBhZ2VSZWYpLT5pbnNwZWN0b3IoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCmluZGV4IDY3MGI1ZTlmZDRiNDU0YTJiN2Vk
ZmQyMjMyYWFlOTUxYzQ2N2QwODMuLmM1MWI4MTYyYzg5NzM0YWIxNTJiZWYwZTk5MjMzN2Q1NWYy
ZGU4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCkBAIC0xMTgsNiAr
MTE4LDggQEAgV0tfRVhQT1JUIGRvdWJsZSBXS1BhZ2VHZXRFc3RpbWF0ZWRQcm9ncmVzcyhXS1Bh
Z2VSZWYgcGFnZSk7CiAKIFdLX0VYUE9SVCB1aW50NjRfdCBXS1BhZ2VHZXRSZW5kZXJUcmVlU2l6
ZShXS1BhZ2VSZWYgcGFnZSk7CiAKK1dLX0VYUE9SVCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tQ
YWdlR2V0V2Vic2l0ZURhdGFTdG9yZShXS1BhZ2VSZWYgcGFnZSk7CisKIFdLX0VYUE9SVCBXS0lu
c3BlY3RvclJlZiBXS1BhZ2VHZXRJbnNwZWN0b3IoV0tQYWdlUmVmIHBhZ2UpOwogCiBXS19FWFBP
UlQgV0tTdHJpbmdSZWYgV0tQYWdlQ29weVVzZXJBZ2VudChXS1BhZ2VSZWYgcGFnZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVS
ZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3Jl
UmVmLmNwcAppbmRleCBmZjg2MmJiMDU3M2U2MjAyZDYzNzczZmE4N2YwN2RjYzZjNDliMzRlLi4w
ZmEyOGQ4YWJmMDRiNTU0OTBlM2JlMmQ4YTA1M2IyZDgyNTQwMjZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAK
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiQVBJ
SFRUUENvb2tpZVN0b3JlLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2lu
Y2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIldLQVBJQ2Fz
dC5oIgogI2luY2x1ZGUgIldLRGljdGlvbmFyeS5oIgpAQCAtNjksNiArNzAsMTYgQEAgV0tXZWJz
aXRlRGF0YVN0b3JlUmVmIFdLV2Vic2l0ZURhdGFTdG9yZUNyZWF0ZVdpdGhDb25maWd1cmF0aW9u
KFdLV2Vic2l0ZURhdGFTdG8KICAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpjcmVhdGUoKldlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLCBzZXNz
aW9uSUQpLmxlYWtSZWYoKSk7CiB9CiAKK3ZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlVGVybWluYXRl
TmV0d29ya1Byb2Nlc3MoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSkKK3sKKyAgICBX
ZWJLaXQ6OnRvSW1wbChkYXRhU3RvcmUpLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworfQor
CitXS1Byb2Nlc3NJRCBXS1dlYnNpdGVEYXRhU3RvcmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZp
ZXIoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZSkKK3sKKyAgICByZXR1cm4gV2ViS2l0
Ojp0b0ltcGwoZGF0YVN0b3JlKS0+bmV0d29ya1Byb2Nlc3MoKS5wcm9jZXNzSWRlbnRpZmllcigp
OworfQorCiB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVJlbW92ZUlUUERhdGFGb3JEb21haW4oV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgV0tTdHJpbmdSZWYgaG9zdCwgdm9pZCog
Y29udGV4dCwgV0tXZWJzaXRlRGF0YVN0b3JlUmVtb3ZlSVRQRGF0YUZvckRvbWFpbkZ1bmN0aW9u
IGNhbGxiYWNrKQogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVS
ZWYuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJl
Zi5oCmluZGV4IGI5NjRiNzE3MTE0NTYzODM2MTFlNzE4MzdkODI5YzBkY2Q0MmQxNDYuLjZlNjhm
NzM2ODA3M2NhNDdlZmU2MWE5YzgwYzllNTQxMTdkNWI1YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCkBAIC0yOSw2
ICsyOSwxMyBAQAogI2luY2x1ZGUgPFdlYktpdC9XS0Jhc2UuaD4KICNpbmNsdWRlIDxXZWJLaXQv
V0tEZXByZWNhdGVkLmg+CiAKKyNpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMikK
K3R5cGVkZWYgaW50IFdLUHJvY2Vzc0lEOworI2Vsc2UKKyNpbmNsdWRlIDx1bmlzdGQuaD4KK3R5
cGVkZWYgcGlkX3QgV0tQcm9jZXNzSUQ7CisjZW5kaWYKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiBl
eHRlcm4gIkMiIHsKICNlbmRpZgpAQCAtNTAsNiArNTcsMTEgQEAgV0tfRVhQT1JUIHZvaWQgV0tX
ZWJzaXRlRGF0YVN0b3JlU2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0
aW5nKFcKIAogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlQ2xlYXJDYWNoZWRDcmVk
ZW50aWFscyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmKTsKIAorV0tfRVhQT1JU
IHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlQ2xlYXJDYWNoZWRDcmVkZW50aWFscyhXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgZGF0YVN0b3JlKTsKK1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9y
ZVRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUp
OworCitXS19FWFBPUlQgV0tQcm9jZXNzSUQgV0tXZWJzaXRlRGF0YVN0b3JlR2V0TmV0d29ya1By
b2Nlc3NJZGVudGlmaWVyKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmUpOworCiBXS19F
WFBPUlQgYm9vbCBXS1dlYnNpdGVEYXRhU3RvcmVHZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZChXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmKTsKIFdLX0VYUE9SVCB2b2lk
IFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIGJvb2wgZW5hYmxlKTsKIHR5cGVkZWYgdm9p
ZCAoKldLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3RpY3NFcGhlbWVyYWxGdW5jdGlvbikoYm9vbCBp
c0VwaGVtZXJhbCwgdm9pZCogZnVuY3Rpb25Db250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KaW5kZXggZmYzMDk0OTg2YzI0
M2QwNDc0ZjI1MmQzOTFlNmNjYjc0ZjFmZWQ1Yi4uMWY1NmZiZmI2Nzk1MTY0OGRmMGI0YmJkY2Jm
MmE1OTlkYzAwYmRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2wubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2wubW0KQEAgLTQwNiwyOCArNDA2LDYgQEAgc3RhdGljIE5TRGljdGlv
bmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBI
YXNoTWFwPFMKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyU3VwcG9ydGVkUGx1Z2lucygpOwogfQog
Ci0tICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcwotewotICAgIF9wcm9jZXNzUG9vbC0+
dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKLX0KLQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9j
ZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Ci17Ci0gICAgX3Byb2Nlc3NQb29sLT5zZW5kTmV0d29y
a1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7Ci19Ci0KLS0gKHZvaWQp
X3NlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmQ6KHZvaWQoXikodm9pZCkpY29tcGxl
dGlvbkhhbmRsZXIKLXsKLSAgICBfcHJvY2Vzc1Bvb2wtPnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBh
cmVUb1N1c3BlbmRGb3JUZXN0aW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihj
b21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9
KTsKLX0KLQotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lCi17Ci0gICAgX3By
b2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQogLSAodm9pZClf
dGVybWluYXRlU2VydmljZVdvcmtlcnMKIHsKICAgICBfcHJvY2Vzc1Bvb2wtPnRlcm1pbmF0ZVNl
cnZpY2VXb3JrZXJzKCk7CkBAIC00MzUsMTIgKzQxMyw3IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkg
KnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1h
cDxTCiAKIC0gKHZvaWQpX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6KEJPT0wp
dXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcwogewotICAgIF9wcm9jZXNzUG9vbC0+c2V0
VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzKTsKLX0KLQotLSAocGlkX3QpX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcgotewotICAg
IHJldHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpOworICAgIFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mo
dXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiB9CiAKIC0gKHBpZF90KV9wcmV3YXJt
ZWRQcm9jZXNzSWRlbnRpZmllcgpAQCAtNDY3LDExICs0NDAsNiBAQCBzdGF0aWMgTlNEaWN0aW9u
YXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIEhh
c2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1
bmNoRmFpbEZvclRlc3RpbmcodHJ1ZSk7CiB9CiAKLS0gKHZvaWQpX21ha2VOZXh0TmV0d29ya1By
b2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZwotewotICAgIF9wcm9jZXNzUG9vbC0+c2V0U2hvdWxk
TWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKHRydWUpOwotfQotCiAt
IChCT09MKV9oYXNQcmV3YXJtZWRXZWJQcm9jZXNzCiB7CiAgICAgZm9yIChhdXRvJiBwcm9jZXNz
IDogX3Byb2Nlc3NQb29sLT5wcm9jZXNzZXMoKSkgewpAQCAtNTYwLDE4ICs1MjgsNiBAQCBzdGF0
aWMgTlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1h
cDxTdHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c2V0Q29va2llU3RvcmFnZVBh
cnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLS0gKHZvaWQpX3N5bnRoZXNpemVBcHBJ
c0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZAotewotICAgIF9wcm9jZXNzUG9vbC0+c3ludGhl
c2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKLX0KLQotLSAodm9pZClfc2V0QWxsb3dz
QW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFsbG93cwotewotI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBfcHJvY2Vzc1Bvb2wtPnNldEFsbG93c0FueVNTTENl
cnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlmCi19Ci0KICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQogLSAoaWQgPF9XS0dlb2xvY2F0aW9uQ29yZUxvY2F0aW9uUHJvdmlk
ZXI+KV9jb3JlTG9jYXRpb25Qcm92aWRlcgogewpAQCAtNjA0LDExICs1NjAsNiBAQCBzdGF0aWMg
TlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxT
dHJpbmcsIEhhc2hNYXA8UwogICAgIH0pOwogfQogCi0tIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hh
c0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNTdHJpbmcgKillbnRpdGxlbWVudAotewotICAgIHJl
dHVybiBfcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5n
KGVudGl0bGVtZW50KTsKLX0KLQogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0Zv
clByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UK
IHsKICAgICBfcHJvY2Vzc1Bvb2wtPmNsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0
aW9uU3BhY2UoV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rpb25TcGFjZSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQ
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9v
bFByaXZhdGUuaAppbmRleCA2NzY5MDE1ZTA4NTU4OTk0Y2Q4YTIxOWExN2E5YzY4YWRlM2I1Mzgz
Li4zYjkzMTQwNGE4ZTJlNDMyZDUxYzU0OTY1ZTJkZWY1ZjhlY2RjMTBkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZh
dGUuaApAQCAtODcsMTQgKzg3LDkgQEAKIC0gKF9XS0Rvd25sb2FkICopX3Jlc3VtZURvd25sb2Fk
RnJvbURhdGE6KE5TRGF0YSAqKXJlc3VtZURhdGEgd2Vic2l0ZURhdGFTdG9yZTooV0tXZWJzaXRl
RGF0YVN0b3JlICopZGF0YVN0b3JlICBwYXRoOihOU1N0cmluZyAqKXBhdGggb3JpZ2luYXRpbmdX
ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4gU2hvdWxkIGJlIGNhbGxl
ZCBvbmx5IHdoaWxlIG5vIHdlYiBjb250ZW50IHByb2Nlc3NlcyBhcmUgcnVubmluZy4KLS0gKHZv
aWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUp
LCBpb3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVu
ZDoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29z
KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9j
ZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBp
b3MoMTMuMCkpOwotLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9pZClfdGVybWluYXRlU2Vy
dmljZVdvcmtlcnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4wKSk7CiAK
IC8vIFRlc3Qgb25seS4KLS0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvcygxMC4xMyksIGlvcygxMS4wKSk7CiAtIChwaWRfdClfcHJld2FybWVk
UHJvY2Vzc0lkZW50aWZpZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4w
KSk7CiAKIC8vIFRlc3Qgb25seS4KQEAgLTEwNiw3ICsxMDEsNiBAQAogLSAoc2l6ZV90KV9zZXJ2
aWNlV29ya2VyUHJvY2Vzc0NvdW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3Mo
MTIuMCkpOwogLSAodm9pZClfc3luY05ldHdvcmtQcm9jZXNzQ29va2llcyBXS19BUElfREVQUkVD
QVRFRF9XSVRIX1JFUExBQ0VNRU5UKCJXS0hUVFBDb29raWVTdG9yZS5fZmx1c2hDb29raWVzVG9E
aXNrV2l0aENvbXBsZXRpb25IYW5kbGVyOiIsIG1hY29zKDEwLjEzLCBXS19NQUNfVEJBKSwgaW9z
KDExLjAsIFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX21ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZh
aWxGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwot
LSAodm9pZClfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogLSAoTlNVSW50ZWdlcilfbWF4
aW11bVN1c3BlbmRlZFBhZ2VDb3VudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBp
b3MoMTIuMikpOwogLSAoTlNVSW50ZWdlcilfcHJvY2Vzc0NhY2hlQ2FwYWNpdHkgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKE5TVUludGVnZXIpX3Byb2Nl
c3NDYWNoZVNpemUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CkBA
IC0xMjIsMTMgKzExNiwxMCBAQAogLSAodm9pZClfcHJlY29ubmVjdFRvU2VydmVyOihOU1VSTCAq
KXNlcnZlclVSTCBXS19BUElfREVQUkVDQVRFRF9XSVRIX1JFUExBQ0VNRU5UKCJXS1dlYlZpZXcu
X3ByZWNvbm5lY3RUb1NlcnZlciIsIG1hY29zKDEwLjEzLjQsIFdLX01BQ19UQkEpLCBpb3MoMTEu
MywgV0tfSU9TX1RCQSkpOwogCiAvLyBUZXN0IG9ubHkuCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlT
U0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSk7CiAtICh2b2lkKV9nZXRBY3RpdmVQYWdlc09y
aWdpbnNJbldlYlByb2Nlc3NGb3JUZXN0aW5nOihwaWRfdClwaWQgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQoXikoTlNBcnJheTxOU1N0cmluZyAqPiAqKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwotLSAoQk9PTClfbmV0d29ya1By
b2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKHZvaWQpX2NsZWFy
UGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNw
YWNlICopcHJvdGVjdGlvblNwYWNlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3Mo
MTMuMCkpOwogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0Nvb2tpZVN0b3JhZ2VQ
YXJ0aXRpb25pbmdFbmFibGVkLCBzZXR0ZXI9X3NldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdF
bmFibGVkOikgQk9PTCBfY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQgV0tfQVBJX0RF
UFJFQ0FURUQoIlBhcnRpdGlvbmVkIGNvb2tpZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQiLCBt
YWNvcygxMC4xMi4zLCAxMC4xNC40KSwgaW9zKDEwLjMsIDEyLjIpKTsKLS0gKHZvaWQpX3N5bnRo
ZXNpemVBcHBJc0JhY2tncm91bmQ6KEJPT0wpYmFja2dyb3VuZCBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIAogLy8gVGVzdCBvbmx5LgogLSAodm9pZClfc2VlZFJl
c291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0aW5nV2l0aEZpcnN0UGFydHk6KE5TVVJMICopZmly
c3RQYXJ0eVVSTCB0aGlyZFBhcnR5OihOU1VSTCAqKXRoaXJkUGFydHlVUkwgc2hvdWxkU2NoZWR1
bGVOb3RpZmljYXRpb246KEJPT0wpc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24gY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQppbmRl
eCBkMTZlZTI0ZTFmODRkZDliMmNlYmYwMDg3NmQ2NGRjMDY3NzE5M2UyLi43Mzc0Y2JlOTMwNjY3
MjU2Mjc0NjQ4YzQ0MDQ3YTdkN2ViOTZhNGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KQEAgLTYwNiw2ICs2
MDYsMTEgQEAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6OldlYnNpdGVEYXRhUmVjb3JkPiB0b1dlYnNp
dGVEYXRhUmVjb3JkcyhOU0FycmF5ICpkYXRhUmVjb3IKICAgICB9KTsKIH0KIAorLSAoQk9PTClf
bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6KE5TU3RyaW5nICopZW50aXRs
ZW1lbnQKK3sKKyAgICByZXR1cm4gX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzSGFz
RW50aXRsZW1lbnRGb3JUZXN0aW5nKGVudGl0bGVtZW50KTsKK30KKwogLSAoaWQgPF9XS1dlYnNp
dGVEYXRhU3RvcmVEZWxlZ2F0ZT4pX2RlbGVnYXRlCiB7CiAgICAgcmV0dXJuIF9kZWxlZ2F0ZS5n
ZXQoKS5nZXQoKTsKQEAgLTY1Nyw0ICs2NjIsNDIgQEAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6Oldl
YnNpdGVEYXRhUmVjb3JkPiB0b1dlYnNpdGVEYXRhUmVjb3JkcyhOU0FycmF5ICpkYXRhUmVjb3IK
ICNlbmRpZgogfQogCistICh2b2lkKV90ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcworeworICAgIF93
ZWJzaXRlRGF0YVN0b3JlLT50ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworfQorCistICh2b2lk
KV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBs
ZXRpb25IYW5kbGVyCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vz
c1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9j
a1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
KyAgICB9KTsKK30KKworLSAodm9pZClfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1p
bmVudGx5Cit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxT
dXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKKworfQorCistICh2b2lkKV9zZW5kTmV0d29y
a1Byb2Nlc3NEaWRSZXN1bWUKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+c2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lKCk7Cit9CisKKy0gKHZvaWQpX3N5bnRoZXNpemVBcHBJc0JhY2tncm91
bmQ6KEJPT0wpYmFja2dyb3VuZAoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JrUHJv
Y2VzcygpLnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7Cit9CisKKy0gKHBp
ZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIKK3sKKyAgICByZXR1cm4gX3dlYnNpdGVEYXRh
U3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkucHJvY2Vzc0lkZW50aWZpZXIoKTsKK30KKworKyAodm9p
ZClfbWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nCit7CisgICAgV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjptYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZv
clRlc3RpbmcoKTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKaW5kZXggODI4
YmJlZjM5NWE4YjU3OWJiNWVlYzI2MTgxOTQwNDc0YzI4ODFkMS4uZGYyYzMwYmViOTI2ZDI2MzRj
YzY0MGJlODVjMTU0NGU5MzgwMzE3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCkBAIC04
NCw5ICs4NCwxOSBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0ZURh
dGFTdG9yZUZldGNoT3B0aW9ucykgewogCiAtICh2b2lkKV9yZW5hbWVPcmlnaW46KE5TVVJMICop
b2xkTmFtZSB0bzooTlNVUkwgKiluZXdOYW1lIGZvckRhdGFPZlR5cGVzOihOU1NldDxOU1N0cmlu
ZyAqPiAqKWRhdGFUeXBlcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxl
dGlvbkhhbmRsZXI7CiAKKy0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JU
ZXN0aW5nOihOU1N0cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0
b21pYywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZT4gX2RlbGVnYXRlIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAq
X2NvbmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lk
KV9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOih2b2lkKF4pKHZvaWQpKWNvbXBs
ZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19J
T1NfVEJBKSk7CistICh2b2lkKV9zZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsK
Ky0gKHZvaWQpX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc3ludGhlc2l6ZUFw
cElzQmFja2dyb3VuZDooQk9PTCliYWNrZ3JvdW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistIChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVu
dGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSk7CisrICh2b2lkKV9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmcg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwog
QGVuZAogCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKaW5kZXggMWVlNzNl
YmMwZWEwMzZmODZiM2ZlOTQ0MTQ5MDcyZTZhYzRkYzc2Ny4uZDEwZGIyOTM2Y2E4ZjUyYjkwNzc2
NWQ4NmNlNmI1MWJjZWU4YjNlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKQEAgLTIxLDYgKzIxLDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRDb29raWVNYW5hZ2VyLmgiCiAK
KyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiU291cENvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlVHlwZS5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5o
IgogI2luY2x1ZGUgIldlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlLmgiCkBAIC01Niw2ICs1Nywx
MiBAQCBlbnVtIHsKIH07CiAKIHN0cnVjdCBfV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUgewor
ICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgY29va2llTWFuYWdlcigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoZGF0YU1hbmFnZXIpOworICAgICAgICByZXR1cm4gd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGRhdGFNYW5hZ2VyKS5uZXR3b3JrUHJvY2VzcygpLmNv
b2tpZU1hbmFnZXIoKTsKKyAgICB9CisKICAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQoKSBj
b25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGRhdGFNYW5hZ2VyKTsKQEAgLTY0LDggKzcxLDcg
QEAgc3RydWN0IF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSB7CiAKICAgICB+X1dlYktpdENv
b2tpZU1hbmFnZXJQcml2YXRlKCkKICAgICB7Ci0gICAgICAgIGZvciAoYXV0byogcHJvY2Vzc1Bv
b2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMoZGF0YU1hbmFnZXIp
KQotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclBy
b3h5PigpLT5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsK
KyAgICAgICAgY29va2llTWFuYWdlcigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lv
bklEKCksIG51bGxwdHIpOwogICAgIH0KIAogICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciog
ZGF0YU1hbmFnZXI7CkBAIC0xMzksMTEgKzE0NSw5IEBAIFdlYktpdENvb2tpZU1hbmFnZXIqIHdl
YmtpdENvb2tpZU1hbmFnZXJDcmVhdGUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFu
CiB7CiAgICAgV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciA9IFdFQktJVF9DT09LSUVfTUFO
QUdFUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQ09PS0lFX01BTkFHRVIsIG51bGxwdHIpKTsK
ICAgICBtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlciA9IGRhdGFNYW5hZ2VyOwotICAgIGZvciAo
YXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9v
bHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5z
dXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxs
YmFjayhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW21hbmFnZXJdIHsKLSAgICAgICAgICAg
IGdfc2lnbmFsX2VtaXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7Ci0gICAgICAgIH0p
OwotICAgIH0KKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuc2V0Q29va2llT2Jz
ZXJ2ZXJDYWxsYmFjayhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW21hbmFnZXJdIHsKKyAg
ICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxzW0NIQU5HRURdLCAwKTsKKyAgICB9
KTsKICAgICByZXR1cm4gbWFuYWdlcjsKIH0KIApAQCAtMTczLDggKzE3Nyw3IEBAIHZvaWQgd2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UoV2ViS2l0Q29va2llTWFu
YWdlciogbWFuYWdlciwKICAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0
YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQotICAg
ICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNl
dENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgU3RyaW5nOjpmcm9tVVRGOChmaWxl
bmFtZSksIHRvU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZShzdG9yYWdlKSk7CisgICAg
bWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
KHNlc3Npb25JRCwgU3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZSksIHRvU291cENvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlVHlwZShzdG9yYWdlKSk7CiB9CiAKIC8qKgpAQCAtMTkyLDggKzE5NSw3IEBA
IHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tp
ZU1hbmFnZXIqIG1hbmFnZXIsIFdlYktpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfQ09PS0lFX01BTkFHRVIobWFuYWdlcikpOwogCi0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2
LT5kYXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKS0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2
LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9
KTsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuc2V0SFRUUENvb2tpZUFjY2Vw
dFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSksIFtdKCkgeyB9KTsKIH0KIAogLyoqCkBAIC0yMTcsMTQgKzIxOSw3IEBAIHZv
aWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1h
bmFnZXIqIG1hbmFnZXIsIEdDYW5jCiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRH
UmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkp
OwogCi0gICAgLy8gVGhlIHBvbGljeSBpcyB0aGUgc2FtZSBpbiBhbGwgcHJvY2VzcyBwb29scyBo
YXZpbmcgdGhlIHNhbWUgc2Vzc2lvbiBJRCwgc28ganVzdCBhc2sgYW55LgotICAgIGNvbnN0IGF1
dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29s
cyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgaWYgKHByb2Nlc3NQb29scy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQoKSwgV0VCS0lUX0NP
T0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCktPmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklE
KCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3kpIHsKKyAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuZ2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZN
b3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgewogICAg
ICAgICBnX3Rhc2tfcmV0dXJuX2ludCh0YXNrLmdldCgpLCB0b1dlYktpdENvb2tpZUFjY2VwdFBv
bGljeShwb2xpY3kpKTsKICAgICB9KTsKIH0KQEAgLTI2OSwxMSArMjY0LDcgQEAgdm9pZCB3ZWJr
aXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2Vy
LCBTb3VwQ29va2llKgogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29va2llKTsKIAogICAgIEdSZWZQ
dHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJs
ZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0
ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0g
ICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhl
IGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJr
aXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1h
bmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCktPnNldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29y
ZTo6Q29va2llKGNvb2tpZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKKyAgICBtYW5h
Z2VyLT5wcml2LT5jb29raWVNYW5hZ2VyKCkuc2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNz
aW9uSUQoKSwgeyBXZWJDb3JlOjpDb29raWUoY29va2llKSB9LCBbdGFzayA9IFdURk1vdmUodGFz
ayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJVRSk7
CiAgICAgfSk7CiB9CkBAIC0zMjAsMTEgKzMxMSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX2dldF9jb29raWVzKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIGNvbnN0IGdjaGFy
CiAgICAgZ19yZXR1cm5faWZfZmFpbCh1cmkpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9
IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNl
ckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBz
YW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJv
Y2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBw
b29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJv
Y2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29v
a2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21V
VEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiBjb29raWVzKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlcigpLmdl
dENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVSTChVUkwoKSwgU3RyaW5nOjpm
cm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6Q29va2llPiYgY29va2llcykgewogICAgICAgICBHTGlzdCogY29va2llc0xpc3QgPSBudWxs
cHRyOwogICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGNvb2tpZXMpCiAgICAgICAgICAgICBj
b29raWVzTGlzdCA9IGdfbGlzdF9wcmVwZW5kKGNvb2tpZXNMaXN0LCBjb29raWUudG9Tb3VwQ29v
a2llKCkpOwpAQCAtMzc4LDExICszNjUsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9k
ZWxldGVfY29va2llKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIFNvdXBDb29raQogICAg
IGdfcmV0dXJuX2lmX2ZhaWwoY29va2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBh
ZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJE
YXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2Ft
ZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nl
c3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9v
bC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFn
ZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nl
c3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmRlbGV0ZUNv
b2tpZShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSks
IFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CisgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFu
YWdlcigpLmRlbGV0ZUNvb2tpZShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6
Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFz
a19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAK
aW5kZXggNzE2NjdjZjQ3MzJhNzc0MGQ2OGY3ZDMzZTg3NzdhMmY0MTBkOWQ1Yy4uMzZkMDAwOGJh
MjE3YWMxMDVmOTg0MmQ5MTIyYmQ2YjMxNWM1YmU0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKQEAgLTQwMiw3ICs0
MDIsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoR09iamVjdCog
b2JqZWN0KQogICAgICAgICBwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIgPSBhZG9wdEdSZWYod2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldygibG9jYWwtc3RvcmFnZS1kaXJlY3RvcnkiLCBw
cml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkuZGF0YSgpLCBudWxscHRyKSk7CiAKICAgICBwcml2
LT5wcm9jZXNzUG9vbCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlvbik7Ci0g
ICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFByaW1hcnlEYXRhU3RvcmUod2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkpOwog
ICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRVc2VyTWVzc2FnZUhhbmRsZXIoW3dlYkNvbnRleHRd
KFVzZXJNZXNzYWdlJiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyTWVzc2Fn
ZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgewogICAgICAgICAvLyBTaW5rIHRoZSBmbG9hdGlu
ZyByZWYuCiAgICAgICAgIEdSZWZQdHI8V2ViS2l0VXNlck1lc3NhZ2U+IHVzZXJNZXNzYWdlID0g
d2Via2l0VXNlck1lc3NhZ2VDcmVhdGUoV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwpAQCAtNDEwLDggKzQwOSw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNv
bnRleHRDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIGdfc2lnbmFsX2VtaXQo
d2ViQ29udGV4dCwgc2lnbmFsc1tVU0VSX01FU1NBR0VfUkVDRUlWRURdLCAwLCB1c2VyTWVzc2Fn
ZS5nZXQoKSwgJnJldHVyblZhbHVlKTsKICAgICB9KTsKIAotICAgIHdlYmtpdFdlYnNpdGVEYXRh
TWFuYWdlckFkZFByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwgKnBy
aXYtPnByb2Nlc3NQb29sKTsKLQogICAgIHByaXYtPnByb2Nlc3NNb2RlbCA9IFdFQktJVF9QUk9D
RVNTX01PREVMX01VTFRJUExFX1NFQ09OREFSWV9QUk9DRVNTRVM7CiAKICNpZiBFTkFCTEUoTUVN
T1JZX1NBTVBMRVIpCkBAIC00MzksMTEgKzQzNiw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNv
bnRleHREaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wt
PnNldERvd25sb2FkQ2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSk7
CiAgICAgfQogCi0gICAgaWYgKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlcikgewotICAgICAgICB3
ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJSZW1vdmVQcm9jZXNzUG9vbChwcml2LT53ZWJzaXRlRGF0
YU1hbmFnZXIuZ2V0KCksICpwcml2LT5wcm9jZXNzUG9vbCk7Ci0gICAgICAgIHByaXYtPndlYnNp
dGVEYXRhTWFuYWdlciA9IG51bGxwdHI7Ci0gICAgfQotCiAgICAgaWYgKHByaXYtPmZhdmljb25E
YXRhYmFzZSkgewogICAgICAgICB3ZWJraXRGYXZpY29uRGF0YWJhc2VDbG9zZShwcml2LT5mYXZp
Y29uRGF0YWJhc2UuZ2V0KCkpOwogICAgICAgICBwcml2LT5mYXZpY29uRGF0YWJhc2UgPSBudWxs
cHRyOwpAQCAtMTU4MSw4ICsxNTczLDggQEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfcHJlZmV0
Y2hfZG5zKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGhvc3QKICAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSk7CiAgICAgZ19y
ZXR1cm5faWZfZmFpbChob3N0bmFtZSk7CiAKLSAgICBpZiAoY29udGV4dC0+cHJpdi0+ZG5zUHJl
ZmV0Y2hlZEhvc3RzLmFkZChob3N0bmFtZSkuaXNOZXdFbnRyeSkKLSAgICAgICAgY29udGV4dC0+
cHJpdi0+cHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5nOjpmcm9tVVRGOChob3N0bmFtZSkpKTsKKyAg
ICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0
YVN0b3JlKGNvbnRleHQtPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSk7CisgICAgd2Vi
c2l0ZURhdGFTdG9yZS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpQcmVmZXRjaEROUyhTdHJpbmc6OmZyb21VVEY4KGhvc3RuYW1lKSksIDApOwogICAgIGNv
bnRleHQtPnByaXYtPmRuc1ByZWZldGNoSHlzdGVyZXJpcy5pbXB1bHNlKCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAKaW5k
ZXggNDEzNWMyNjU0Mjg3ZjVjN2Q2Y2I1MDhkMTNiZjVmNjI5NjE2MWY2Zi4uZDhiM2YzYzE5OTky
ODhmMmExOGRhMzdiNmYyNGE5YzhhM2MzY2YxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTc1OSw3ICs3NTksNiBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogICAg
ICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHBy
aXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF90bHNfZXJyb3JzX3BvbGljeShjb250ZXh0RGF0YU1hbmFnZXIpKTsKICAgICAgICAgYXV0
byBwcm94eVNldHRpbmdzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGNv
bnRleHREYXRhTWFuYWdlcikubmV0d29ya1Byb3h5U2V0dGluZ3MoKTsKICAgICAgICAgd2Via2l0
V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5n
ZXQoKSkuc2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoV1RGTW92ZShwcm94eVNldHRpbmdzKSk7Ci0g
ICAgICAgIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckFkZFByb2Nlc3NQb29sKHByaXYtPndlYnNp
dGVEYXRhTWFuYWdlci5nZXQoKSwgd2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHByaXYt
PmNvbnRleHQuZ2V0KCkpKTsKICAgICB9CiAKICAgICBpZiAoIXByaXYtPndlYnNpdGVQb2xpY2ll
cykKQEAgLTk0NSwxMSArOTQ0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Rpc3Bvc2Uo
R09iamVjdCogb2JqZWN0KQogICAgICAgICB3ZWJraXRXZWJDb250ZXh0V2ViVmlld0Rlc3Ryb3ll
ZCh3ZWJWaWV3LT5wcml2LT5jb250ZXh0LmdldCgpLCB3ZWJWaWV3KTsKICAgICB9CiAKLSAgICBp
ZiAod2ViVmlldy0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyKSB7Ci0gICAgICAgIHdlYmtpdFdl
YnNpdGVEYXRhTWFuYWdlclJlbW92ZVByb2Nlc3NQb29sKHdlYlZpZXctPnByaXYtPndlYnNpdGVE
YXRhTWFuYWdlci5nZXQoKSwgd2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHdlYlZpZXct
PnByaXYtPmNvbnRleHQuZ2V0KCkpKTsKLSAgICAgICAgd2ViVmlldy0+cHJpdi0+d2Vic2l0ZURh
dGFNYW5hZ2VyID0gbnVsbHB0cjsKLSAgICB9Ci0KICAgICBpZiAod2ViVmlldy0+cHJpdi0+Y3Vy
cmVudFNjcmlwdERpYWxvZykgewogICAgICAgICB3ZWJraXRfc2NyaXB0X2RpYWxvZ19jbG9zZSh3
ZWJWaWV3LT5wcml2LT5jdXJyZW50U2NyaXB0RGlhbG9nKTsKICAgICAgICAgQVNTRVJUKCF3ZWJW
aWV3LT5wcml2LT5jdXJyZW50U2NyaXB0RGlhbG9nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3Bw
CmluZGV4IGRhOWEzYWFkYjg0OWUwZTE2NjdiYWQ5NzA0OThjMmRmNThlMDBhMzUuLjRjNGVmNWQ2
OGFjM2ExYjVjYjZhY2I5NTU5YThmZDUzZmFiZDE4ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
LmNwcApAQCAtOTUsMTEgKzk1LDYgQEAgZW51bSB7CiB9OwogCiBzdHJ1Y3QgX1dlYktpdFdlYnNp
dGVEYXRhTWFuYWdlclByaXZhdGUgewotICAgIH5fV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJp
dmF0ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSk7Ci0g
ICAgfQotCiAgICAgUmVmUHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZT4gd2Vic2l0ZURhdGFT
dG9yZTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGJhc2VEYXRhRGlyZWN0b3J5OwogICAgIEdVbmlx
dWVQdHI8Y2hhcj4gYmFzZUNhY2hlRGlyZWN0b3J5OwpAQCAtMTE1LDcgKzExMCw2IEBAIHN0cnVj
dCBfV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZSB7CiAgICAgV2ViS2l0VExTRXJyb3Jz
UG9saWN5IHRsc0Vycm9yc1BvbGljeTsKIAogICAgIEdSZWZQdHI8V2ViS2l0Q29va2llTWFuYWdl
cj4gY29va2llTWFuYWdlcjsKLSAgICBWZWN0b3I8V2ViUHJvY2Vzc1Bvb2wqPiBwcm9jZXNzUG9v
bHM7CiB9OwogCiBXRUJLSVRfREVGSU5FX1RZUEUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLCB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIsIEdfVFlQRV9PQkpFQ1QpCkBAIC00OTQsMzAgKzQ4
OCwxMyBAQCBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldERhdGFTdG9yZShXZWJLaXRXZWJzaXRlRGF0YQogICAgICAgICAgICAgY29uZmlndXJhdGlv
bi0+c2V0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeShGaWxlU3lzdGVtOjpzdHJp
bmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHByaXYtPnN3UmVnaXN0cmF0aW9uc0RpcmVj
dG9yeS5nZXQoKSkpOwogICAgICAgICBpZiAocHJpdi0+ZG9tQ2FjaGVEaXJlY3RvcnkpCiAgICAg
ICAgICAgICBjb25maWd1cmF0aW9uLT5zZXRDYWNoZVN0b3JhZ2VEaXJlY3RvcnkoRmlsZVN5c3Rl
bTo6c3RyaW5nRnJvbUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwcml2LT5kb21DYWNoZURpcmVj
dG9yeS5nZXQoKSkpOwotICAgICAgICBwcml2LT53ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoV1RGTW92ZShjb25maWd1cmF0aW9uKSwgUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7CisgICAgICAgIHByaXYtPndlYnNpdGVEYXRhU3Rv
cmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZShXVEZNb3ZlKGNvbmZpZ3VyYXRp
b24pLCBQQUw6OlNlc3Npb25JRDo6Z2VuZXJhdGVQZXJzaXN0ZW50U2Vzc2lvbklEKCkpOwogICAg
ICAgICBwcml2LT53ZWJzaXRlRGF0YVN0b3JlLT5zZXRJZ25vcmVUTFNFcnJvcnMocHJpdi0+dGxz
RXJyb3JzUG9saWN5ID09IFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUpOwogICAgIH0K
IAogICAgIHJldHVybiAqcHJpdi0+d2Vic2l0ZURhdGFTdG9yZTsKIH0KIAotdm9pZCB3ZWJraXRX
ZWJzaXRlRGF0YU1hbmFnZXJBZGRQcm9jZXNzUG9vbChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIq
IG1hbmFnZXIsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLXsKLSAgICBBU1NFUlQoIW1h
bmFnZXItPnByaXYtPnByb2Nlc3NQb29scy5jb250YWlucygmcHJvY2Vzc1Bvb2wpKTsKLSAgICBt
YW5hZ2VyLT5wcml2LT5wcm9jZXNzUG9vbHMuYXBwZW5kKCZwcm9jZXNzUG9vbCk7Ci19Ci0KLXZv
aWQgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyUmVtb3ZlUHJvY2Vzc1Bvb2woV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCi17Ci0g
ICAgQVNTRVJUKG1hbmFnZXItPnByaXYtPnByb2Nlc3NQb29scy5jb250YWlucygmcHJvY2Vzc1Bv
b2wpKTsKLSAgICBtYW5hZ2VyLT5wcml2LT5wcm9jZXNzUG9vbHMucmVtb3ZlRmlyc3QoJnByb2Nl
c3NQb29sKTsKLX0KLQotY29uc3QgVmVjdG9yPFdlYlByb2Nlc3NQb29sKj4mIHdlYmtpdFdlYnNp
dGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1h
bmFnZXIpCi17Ci0gICAgcmV0dXJuIG1hbmFnZXItPnByaXYtPnByb2Nlc3NQb29sczsKLX0KLQog
LyoqCiAgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3OgogICogQGZpcnN0X29wdGlv
bl9uYW1lOiBuYW1lIG9mIHRoZSBmaXJzdCBvcHRpb24gdG8gc2V0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXJQcml2YXRlLmgKaW5kZXggMmE1ODllMjdmMWZlZDIyYTNhNzhhZmYxYTRmZmY3ZDY3
ZDBjYWQxNy4uZmM5ZTgyMjZmYmI4Zjg5NGE3ZTFlZDdkYjQ1NTU0MmExNTg4NzczOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaApAQCAtMTksMTEgKzE5LDYgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogI2luY2x1ZGUgIldlYnNp
dGVEYXRhU3RvcmUuaCIKIAogV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKik7Ci12b2lk
IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckFkZFByb2Nlc3NQb29sKFdlYktpdFdlYnNpdGVEYXRh
TWFuYWdlciosIFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2wmKTsKLXZvaWQgd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyUmVtb3ZlUHJvY2Vzc1Bvb2woV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiwgV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbCYpOwotY29uc3QgVmVjdG9yPFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2wqPiYgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKFdlYktpdFdlYnNp
dGVEYXRhTWFuYWdlciopOwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
dXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IGFiNjRhNDU4Yjkw
YjUwNjA0ZDI4NmEyYzZiYTIwMDUzM2I5OWRlNWUuLjJjZDg4YzUyMDgxNzRjMzQwODMzN2RkODY3
Mzk3YzhlY2NhYjJkMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9t
YXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0xMzkyLDggKzEzOTIs
OCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUoY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbgogCiAgICAgY29va2llLmh0dHBPbmx5ID0gKmh0
dHBPbmx5OwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9w
cm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29v
a2llTWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklE
KCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5
JiBjb29raWVNYW5hZ2VyID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNz
KCkuY29va2llTWFuYWdlcigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhwYWdlLT53
ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7
CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAtMTQwOSw4
ICsxNDA5LDggQEAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygKIAogICAgIFN0cmluZyBob3N0ID0g
YWN0aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5
KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5h
Z2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1l
cyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlB
ZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHkmIGNvb2tpZU1hbmFnZXIgPSBwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nl
c3MoKS5jb29raWVNYW5hZ2VyKCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29raWVzRm9y
SG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBk
b21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOwogCiAgICAgcmV0dXJuIHsg
fTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nl
c3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5
LmgKaW5kZXggNDFjMGEwZmJmNTA2ZWZhMTQwOGJjZWY5YWY4YTkwYjg1YTFhZDA4YS4uNGYzOThi
NTMwZjYwODU3NWM5NjdiODNjNzRmYTJmNDMyOGY2Y2UzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94eSgpOwogCiAgICAgdm9pZCBj
b25uZWN0KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGVybWlu
YXRlKCk7CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigpID0gMDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9M
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAppbmRleCBkYmU0NGY5NTk0MTA1MTEy
MTUxMjhkMjlkMjE0ZWVlMDc0YWFmODRjLi40Yzg0NWEwZWM3MjU2NTljZmU3OWNlYTM1ZDNjYmE5
NjY4MzQ2MTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaApAQCAtNDEsMTEg
KzQxLDExIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHk7CiAKIGNsYXNzIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCBm
aW5hbCA6IHB1YmxpYyBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCB7Ci1wcml2YXRl
OgorcHVibGljOgogICAgIHZvaWQgc3RhcnRMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5JiwgTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JikgZmluYWw7CiAgICAgdm9pZCBzdG9wTG9hZGluZyhMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJQcm94eSYsIExlZ2FjeUN1c3RvbVByb3RvY29sSUQpIGZpbmFsOwogICAgIHZv
aWQgaW52YWxpZGF0ZShMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYpIGZpbmFsOwot
Citwcml2YXRlOgogICAgIEhhc2hNYXA8TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCwgUmV0YWluUHRy
PFdLQ3VzdG9tUHJvdG9jb2xMb2FkZXI+PiBtX2xvYWRlck1hcDsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4
IDc2MmY1Njg5YzQxYjdmMjI3MDhlNGZiZTNjODBkZThlYTFlZDBjNGQuLjI1ZGY4NzczZDA2NWMw
MTA1ZDBmODU4M2NlNjg1YTkzMTBiZTJjYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtMTM0LDggKzEzNCw5IEBA
IHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKQogCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0gICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNldFByb2Nlc3NTdXBw
cmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAgICBXZWJzaXRl
RGF0YVN0b3JlOjpmb3JFYWNoV2Vic2l0ZURhdGFTdG9yZShbZW5hYmxlZCA9IHByb2Nlc3NTdXBw
cmVzc2lvbkVuYWJsZWQoKV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAg
ICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVk
KGVuYWJsZWQpOworICAgIH0pOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAg
ICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUo
KSkKQEAgLTE2Niw4ICsxNjcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRp
YWxpemUoKQogICAgIGlmICghW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10g
Ym9vbEZvcktleTpAIldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyIl0pCiAgICAg
ICAgIGluc3RhbGxNZW1vcnlQcmVzc3VyZUhhbmRsZXIoKTsKIAotICAgIHNldExlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudD4oKSk7Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0o
TUFDQ0FUQUxZU1QpCiAgICAgaWYgKCFfTUdDYWNoZVZhbGlkKCkpIHsKICAgICAgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklU
WV9ERUZBVUxULCAwKSwgXnsKQEAgLTQ5NSwyMiArNDk0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmEKIAogICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBz
dGFuZGFyZFVzZXJEZWZhdWx0c107CiAKLSAgICB7Ci0gICAgICAgIGJvb2wgaXNTYWZhcmkgPSBm
YWxzZTsKLSAgICAgICAgYm9vbCBpc01pbmlCcm93c2VyID0gZmFsc2U7Ci0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6
aXNNb2JpbGVTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6OklPU0Fw
cGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAgICAg
IGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCk7Ci0gICAgICAg
IGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNNaW5pQnJvd3Nlcigp
OwotI2VuZGlmCi0gICAgICAgIGlmIChpc1NhZmFyaSB8fCBpc01pbmlCcm93c2VyKSB7Ci0gICAg
ICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5odHRwUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JL
ZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgICAg
ICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5odHRwc1Byb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihO
U1N0cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgfQotICAg
IH0KLQogICAgIHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQgPSBhZG9wdENGKF9DRk5ldHdv
cmtDb3B5QVRTQ29udGV4dCgpKTsKIAogICAgIHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NNZW1v
cnlQcmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpXZWJLaXRTdXBwcmVzc01l
bW9yeVByZXNzdXJlSGFuZGxlckRlZmF1bHRzS2V5XTsKQEAgLTUyMiw4ICs1MDUsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYQogI2VuZGlmCiAKICAgICBwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xp
Y2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSA9IFtkZWZhdWx0cyBib29sRm9yS2V5OltOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiRXhwZXJpbWVudGFsJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6YWRD
bGlja0F0dHJpYnV0aW9uRGVidWdNb2RlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0
KCldXTsKLQotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmFwcEhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVy
bWlzc2lvbiA9IGhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbigpOwog
fQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUludmFsaWRhdGVDb250ZXh0KCkKQEAg
LTYwMiwxMSArNTgzLDYgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc1N1cHByZXNzaW9u
RW5hYmxlZCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIu
dmFsdWUoKSAmJiAhbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZh
bHVlKCk7CiB9CiAKLWJvb2wgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSGFzRW50aXRs
ZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYgZW50aXRsZW1lbnQpCi17Ci0gICAgcmV0dXJu
IFdURjo6aGFzRW50aXRsZW1lbnQoZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jb25uZWN0aW9uKCkt
PnhwY0Nvbm5lY3Rpb24oKSwgZW50aXRsZW1lbnQudXRmOCgpLmRhdGEoKSk7Ci19Ci0KICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiBmbG9hdCBXZWJQ
cm9jZXNzUG9vbDo6ZGlzcGxheUJyaWdodG5lc3MoKQogewpAQCAtOTQzLDIzICs5MTksNCBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlckhpZ2hEeW5hbWljUmFuZ2VDaGFuZ2VDYWxsYmFj
aygpCiB9CiAjZW5kaWYKIAotT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBXZWJQcm9jZXNzUG9v
bDo6eHBjRW5kcG9pbnRNZXNzYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lbmRwb2ludE1l
c3NhZ2U7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0Vu
ZHBvaW50VG9XZWJQcm9jZXNzKE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4gZW5kcG9pbnRNZXNz
YWdlKQotewotICAgIG1fZW5kcG9pbnRNZXNzYWdlID0gZW5kcG9pbnRNZXNzYWdlOwotCi0gICAg
Zm9yIChhdXRvIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAgICBpZiAocHJvY2Vzcy0+
c3RhdGUoKSAhPSBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OlN0YXRlOjpSdW5uaW5nKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcHJvY2Vzcy0+Y29ubmVjdGlvbigpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8gY29ubmVjdGlvbiA9IHByb2Nlc3MtPmNv
bm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpOwotICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5k
X21lc3NhZ2UoY29ubmVjdGlvbiwgZW5kcG9pbnRNZXNzYWdlLmdldCgpKTsKLSAgICB9Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCmluZGV4IGM1ZGU0ZTdkMGY1OTE5NGY0M2EwMjNi
MDg5ZTM3MmM1OGNmOGVlMDYuLmY3Y2ZmODUyZjBiYTZkMDE1NTExNjVkZDhhOWY3ZDU3NjNiMDA3
ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRQcm94eS5jcHAKQEAgLTc1LDggKzc1LDggQEAgdm9pZCBEb3dubG9hZFByb3h5OjpjYW5jZWwo
KQogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKE5l
dHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2FkSUQpLCAwKTsKKyAgICBpZiAobV9k
YXRhU3RvcmUpCisgICAgICAgIG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2FkSUQpLCAwKTsK
IH0KIAogdm9pZCBEb3dubG9hZFByb3h5OjppbnZhbGlkYXRlKCkKQEAgLTEwMywxNSArMTAzLDEz
IEBAIFdlYlBhZ2VQcm94eSogRG93bmxvYWRQcm94eTo6b3JpZ2luYXRpbmdQYWdlKCkgY29uc3QK
ICNpZiBQTEFURk9STShDT0NPQSkKIHZvaWQgRG93bmxvYWRQcm94eTo6cHVibGlzaFByb2dyZXNz
KGNvbnN0IFVSTCYgVVJMKQogewotICAgIGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICBpZiAoIW1f
ZGF0YVN0b3JlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSBoYW5kbGU7Ci0gICAgICAgIGJvb2wgY3JlYXRlZFNhbmRib3hFeHRl
bnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1QYXRo
KCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgaGFuZGxlKTsKLSAgICAgICAg
QVNTRVJUX1VOVVNFRChjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiwgY3JlYXRlZFNhbmRib3hFeHRl
bnNpb24pOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKG1fZG93bmxvYWRJRCwgVVJMLCBoYW5kbGUp
LCAwKTsKLSAgICB9CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZTsKKyAgICBi
b29sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlKFVSTC5maWxlU3lzdGVtUGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3Jp
dGUsIGhhbmRsZSk7CisgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiwg
Y3JlYXRlZFNhbmRib3hFeHRlbnNpb24pOworICAgIG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9ncmVz
cyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFuZGxlKSwgMCk7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0o
Q09DT0EpCiAKQEAgLTEzMSwxMSArMTI5LDEwIEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkU3Rh
cnQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dlCiAK
IHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIHVpbnQ2NF90
IGNoYWxsZW5nZUlEKQogewotICAgIGlmICghbV9wcm9jZXNzUG9vbCkKKyAgICBpZiAoIW1fcHJv
Y2Vzc1Bvb2wgfHwgIW1fZGF0YVN0b3JlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5
OjpjcmVhdGUoV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoYWxsZW5nZUlELCBt
YWtlUmVmKCptX3Byb2Nlc3NQb29sLT5uZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKSksIG51
bGxwdHIpOwotCisgICAgYXV0byBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VQcm94eTo6Y3JlYXRlKFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFs
bGVuZ2UpLCBjaGFsbGVuZ2VJRCwgbWFrZVJlZigqbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNz
KCkuY29ubmVjdGlvbigpKSwgbnVsbHB0cik7CiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRD
bGllbnQoKS5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKnRoaXMsIGF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlUHJveHkuZ2V0KCkpOwogfQogCkBAIC0xNDYsMTUgKzE0MywxMCBAQCB2
b2lkIERvd25sb2FkUHJveHk6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiBwcm9w
b3NlZFJlcXVlc3QsIGNvbnN0IFJlcwogCiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGll
bnQoKS53aWxsU2VuZFJlcXVlc3QoKnRoaXMsIFdURk1vdmUocHJvcG9zZWRSZXF1ZXN0KSwgcmVk
aXJlY3RSZXNwb25zZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oUmVz
b3VyY2VSZXF1ZXN0JiYgbmV3UmVxdWVzdCkgewogICAgICAgICBtX3JlZGlyZWN0Q2hhaW4uYXBw
ZW5kKG5ld1JlcXVlc3QudXJsKCkpOwotCi0gICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9w
cm9jZXNzUG9vbCkKKyAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX2RhdGFTdG9yZSkKICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBhdXRvKiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0g
cHJvdGVjdGVkVGhpcy0+bV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAg
aWYgKCFuZXR3b3JrUHJvY2Vzc1Byb3h5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IG5ldHdvcmtQcm9jZXNzUHJveHktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250
aW51ZVdpbGxTZW5kUmVxdWVzdChwcm90ZWN0ZWRUaGlzLT5tX2Rvd25sb2FkSUQsIG5ld1JlcXVl
c3QpLCAwKTsKKyAgICAgICAgYXV0byYgbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb3RlY3RlZFRo
aXMtPm1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpOworICAgICAgICBuZXR3b3JrUHJvY2Vz
c1Byb3h5LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZVdpbGxTZW5kUmVx
dWVzdChwcm90ZWN0ZWRUaGlzLT5tX2Rvd25sb2FkSUQsIG5ld1JlcXVlc3QpLCAwKTsKICAgICB9
KTsKIH0KIApAQCAtMTc5LDE2ICsxNzEsMTQgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkZWNpZGVE
ZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZUFzeW5jKERvd25sb2FkSUQgZG93bmwKICAg
ICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX3Byb2Nl
c3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZp
bGVuYW1lKCp0aGlzLCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRGaWxl
bmFtZShzdWdnZXN0ZWRGaWxlbmFtZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIGRvd25sb2FkSUQgPSBkb3dubG9hZElEXSAoQWxsb3dPdmVyd3JpdGUgYWxsb3dPdmVy
d3JpdGUsIFN0cmluZyBkZXN0aW5hdGlvbikgeworICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2Fk
Q2xpZW50KCkuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJl
c291cmNlUmVzcG9uc2VCYXNlOjpzYW5pdGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZp
bGVuYW1lKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxvYWRJ
RF0gKEFsbG93T3ZlcndyaXRlIGFsbG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsK
ICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7
CiAgICAgICAgIGlmICghZGVzdGluYXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoZGVzdGluYXRpb24sIFNhbmRib3hFeHRlbnNpb246OlR5
cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICAgICAgaWYgKCFt
X3Byb2Nlc3NQb29sKQorICAgICAgICBpZiAoIW1fZGF0YVN0b3JlKQogICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGlu
YXRpb24oZG93bmxvYWRJRCwgZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGFs
bG93T3ZlcndyaXRlID09IEFsbG93T3ZlcndyaXRlOjpZZXMpLCAwKTsKKyAgICAgICAgbV9kYXRh
U3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNv
bnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oZG93bmxvYWRJRCwgZGVzdGlu
YXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGFsbG93T3ZlcndyaXRlID09IEFsbG93T3Zl
cndyaXRlOjpZZXMpLCAwKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCmluZGV4IDc2YTA3MTU3
YjU5MWFhY2U1MGYxNWQxNTI1ZGJjZmI4YzZhNGJiYzguLmQ3NGE4ZmE2YzY0Yzg4NjM1ZjllYjc1
Y2E3M2U3MGZkOTQ2Y2EwMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBEb3dubG9hZFByb3h5TWFwOjpEb3dubG9hZFByb3h5TWFwKE5ldHdv
cmtQcm9jZXNzUHJveHkmIHByb2Nlc3MpCi0gICAgOiBtX3Byb2Nlc3MobWFrZVdlYWtQdHIocHJv
Y2VzcykpCisgICAgOiBtX3Byb2Nlc3MocHJvY2VzcykKICNpZiBQTEFURk9STShDT0NPQSkKICAg
ICAsIG1fc2hvdWxkVGFrZUFzc2VydGlvbihXVEY6OnByb2Nlc3NIYXNFbnRpdGxlbWVudCgiY29t
LmFwcGxlLm11bHRpdGFza2luZy5zeXN0ZW1hcHBhc3NlcnRpb25zIikpCiAjZW5kaWYKQEAgLTcw
LDE0ICs3MCwxMiBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OnBsYXRmb3JtRGVzdHJveSgpCiAK
IHZvaWQgRG93bmxvYWRQcm94eU1hcDo6YXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKQog
ewotICAgIGlmIChtX3Byb2Nlc3MpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCksIDApOworICAg
IG1fcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QXBwbGljYXRpb25EaWRF
bnRlckJhY2tncm91bmQoKSwgMCk7CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6YXBwbGlj
YXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkKIHsKLSAgICBpZiAobV9wcm9jZXNzKQotICAgICAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbldp
bGxFbnRlckZvcmVncm91bmQoKSwgMCk7CisgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpBcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKSwgMCk7CiB9CiAK
IERvd25sb2FkUHJveHkmIERvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vi
c2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFt
ZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQpAQCAt
OTIsMTMgKzkwLDEyIEBAIERvd25sb2FkUHJveHkmIERvd25sb2FkUHJveHlNYXA6OmNyZWF0ZURv
d25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlCiAgICAgICAgIG1fZG93bmxv
YWRVSUFzc2VydGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fzc2VydGlvbj4oZ2V0Q3VycmVudFBy
b2Nlc3NJRCgpLCAiV2ViS2l0IGRvd25sb2FkcyJfcywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVu
Ym91bmRlZE5ldHdvcmtpbmcpOwogCiAgICAgICAgIEFTU0VSVCghbV9kb3dubG9hZE5ldHdvcmtp
bmdBc3NlcnRpb24pOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3Byb2Nlc3MpOwotICAgICAg
ICBtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fzc2Vy
dGlvbj4obV9wcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpLCAiV2ViS2l0IGRvd25sb2FkcyJf
cywgUHJvY2Vzc0Fzc2VydGlvblR5cGU6OlVuYm91bmRlZE5ldHdvcmtpbmcpOworICAgICAgICBt
X2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fzc2VydGlv
bj4obV9wcm9jZXNzLnByb2Nlc3NJZGVudGlmaWVyKCksICJXZWJLaXQgZG93bmxvYWRzIl9zLCBQ
cm9jZXNzQXNzZXJ0aW9uVHlwZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CiAKICAgICAgICAgUkVM
RUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICJVSVByb2Nlc3MgdG9vayAnV2ViS2l0IGRvd25s
b2FkcycgYXNzZXJ0aW9ucyBmb3IgVUlQcm9jZXNzIGFuZCBOZXR3b3JrUHJvY2VzcyIpOwogICAg
IH0KIAotICAgIG1fcHJvY2Vzcy0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9h
ZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQo
KS5kb3dubG9hZElEKCksIGRvd25sb2FkUHJveHkuZ2V0KCkpOworICAgIG1fcHJvY2Vzcy5hZGRN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSwgZG93bmxvYWRQ
cm94eS5nZXQoKSk7CiAKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KQEAgLTEwOSwxMiAr
MTA2LDkgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKERvd25sb2Fk
UHJveHkmIGRvd25sb2FkUHJveHkpCiAKICAgICBSRUxFQVNFX0xPRyhMb2FkaW5nLCAiUmVtb3Zp
bmcgZG93bmxvYWQgJSIgUFJJdTY0ICIgZnJvbSBVSVByb2Nlc3MgRG93bmxvYWRQcm94eU1hcCIs
IGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKIAotICAgIC8vIFRoZSBEb3dubG9hZFByb3h5IG1h
eSBiZSBob2xkaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgcHJvY2VzcyBwb29sLgotICAg
IGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmUHRyKG1fcHJvY2Vzcy0+cHJvY2Vz
c1Bvb2woKSk7Ci0KICAgICBBU1NFUlQobV9kb3dubG9hZHMuY29udGFpbnMoZG93bmxvYWRJRCkp
OwogCi0gICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25s
b2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkp
OworICAgIG1fcHJvY2Vzcy5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2Fk
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwog
ICAgIGRvd25sb2FkUHJveHkuaW52YWxpZGF0ZSgpOwogICAgIG1fZG93bmxvYWRzLnJlbW92ZShk
b3dubG9hZElEKTsKIApAQCAtMTMzLDE1ICsxMjcsMTMgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFw
OjppbnZhbGlkYXRlKCkKICAgICBmb3IgKGNvbnN0IGF1dG8mIGRvd25sb2FkIDogbV9kb3dubG9h
ZHMudmFsdWVzKCkpIHsKICAgICAgICAgZG93bmxvYWQtPnByb2Nlc3NEaWRDbG9zZSgpOwogICAg
ICAgICBkb3dubG9hZC0+aW52YWxpZGF0ZSgpOwotICAgICAgICBtX3Byb2Nlc3MtPnJlbW92ZU1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBkb3dubG9hZC0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7CisgICAgICAgIG1fcHJv
Y2Vzcy5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgZG93bmxvYWQtPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOwog
ICAgIH0KIAogICAgIG1fZG93bmxvYWRzLmNsZWFyKCk7CiAgICAgbV9kb3dubG9hZFVJQXNzZXJ0
aW9uID0gbnVsbHB0cjsKICAgICBtX2Rvd25sb2FkTmV0d29ya2luZ0Fzc2VydGlvbiA9IG51bGxw
dHI7CiAgICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICJVSVByb2Nlc3MgRG93bmxv
YWRQcm94eU1hcCBpbnZhbGlkYXRlZCAtIFJlbGVhc2VkICdXZWJLaXQgZG93bmxvYWRzJyBhc3Nl
cnRpb25zIGZvciBVSVByb2Nlc3MgYW5kIE5ldHdvcmtQcm9jZXNzIik7Ci0KLSAgICBtX3Byb2Nl
c3MgPSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCmluZGV4IDNi
ZTIwNzlhMGYyYzRiNTM3MDYyY2UxMzAwZTFjZDVkYTQ0NGZmYmUuLjRmYTAwMWJkN2ZhZTFjZWQw
MjRkMmI5MWYyMDE3MGZmOTk0NTI4YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaApAQCAtNzEsNyArNzEsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgcGxhdGZvcm1DcmVhdGUoKTsKICAgICB2b2lkIHBsYXRmb3JtRGVzdHJv
eSgpOwogCi0gICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3M7CisgICAg
TmV0d29ya1Byb2Nlc3NQcm94eSYgbV9wcm9jZXNzOwogICAgIEhhc2hNYXA8RG93bmxvYWRJRCwg
UmVmUHRyPERvd25sb2FkUHJveHk+PiBtX2Rvd25sb2FkczsKIAogICAgIGJvb2wgbV9zaG91bGRU
YWtlQXNzZXJ0aW9uIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKaW5kZXgg
NzJkZWIwYzVhNjJjYjc3MjM1NWQyY2Y2ZTYyYjgyOWY4ZjQ0MTMwMS4uODJjNmViMWY3MGEyYzcz
ZTQ0Yzk1MmI4MDc1ODQ1NDg4ZTljNjAyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAK
QEAgLTE1NSw3ICsxNTUsNyBAQCBzdGF0aWMgUmVmPFdlYnNpdGVEYXRhU3RvcmU+IGluc3BlY3Rv
cldlYnNpdGVEYXRhU3RvcmUoKQogICAgIGNvbmZpZ3VyYXRpb24tPnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJh
c2VEYXRhRGlyZWN0b3J5LCAiaXRwIikpOwogICAgIGNvbmZpZ3VyYXRpb24tPnNldFNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KGJhc2VEYXRhRGlyZWN0b3J5LCAic2VydmljZXdvcmtlcnMiKSk7CiAgICAgY29uZmln
dXJhdGlvbi0+c2V0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KEZpbGVTeXN0ZW06
OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChiYXNlRGF0YURpcmVjdG9yeSwgImRldmljZWlkaGFz
aHNhbHRzIikpOwotICAgIHJldHVybiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoV1RGTW92ZShj
b25maWd1cmF0aW9uKSwgUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7CisgICAg
cmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZShXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pLCBQ
QUw6OlNlc3Npb25JRDo6Z2VuZXJhdGVQZXJzaXN0ZW50U2Vzc2lvbklEKCkpOwogfQogCiBXZWJQ
YWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgp
CkBAIC0xNzUsNyArMTc1LDYgQEAgV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQogICAgIGF1dG8gcGFnZUdyb3VwID0gV2ViUGFnZUdy
b3VwOjpjcmVhdGUoaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoaW5zcGVjdGVk
UGFnZSgpKSk7CiAgICAgYXV0byB3ZWJzaXRlRGF0YVN0b3JlID0gaW5zcGVjdG9yV2Vic2l0ZURh
dGFTdG9yZSgpOwogICAgIGF1dG8mIHByb2Nlc3NQb29sID0gaW5zcGVjdG9yUHJvY2Vzc1Bvb2wo
aW5zcGVjdGlvbkxldmVsKCkpOwotICAgIHByb2Nlc3NQb29sLnNldFByaW1hcnlEYXRhU3RvcmUo
d2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CiAKICAgICBhdXRvIHBhZ2VDb25maWd1cmF0aW9uID0g
QVBJOjpQYWdlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24t
PnNldFByb2Nlc3NQb29sKCZwcm9jZXNzUG9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVBy
b3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKaW5kZXggOGMyM2Ji
ZThjMDZhMTU5OWNiOWI5MTZhMGIzMmFmYjM3NzgzZjMwNS4uZDZjMzMyM2RkOTNlNjlmNTZhZGY2
YmUwZDJhMWIxNGYwODIyNDUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcApAQCAtNDQsMTcgKzQ0LDE3IEBA
IExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp+TGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHkoKQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojpz
dGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgbV9uZXR3b3JrUHJv
Y2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3Rh
cnRMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKKyAgICBtX25ldHdv
cmtQcm9jZXNzUHJveHkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RhcnRMb2FkaW5n
KCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RvcExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJ
RCBjdXN0b21Qcm90b2NvbElEKQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNz
UG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBj
dXN0b21Qcm90b2NvbElEKTsKKyAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkuY3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50KCkuc3RvcExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOwog
fQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkK
IHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQoKS5pbnZhbGlkYXRlKCp0aGlzKTsKKyAgICBtX25ldHdvcmtQcm9jZXNz
UHJveHkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuaW52YWxpZGF0ZSgqdGhpcyk7CiB9
CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6Ondhc1JlZGlyZWN0ZWRU
b1JlcXVlc3QoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCA4MjVmOTA5N2M1
NDQ2YmY5YmFmN2IwMmQ2MTY2NDk0MzRiZDNhZWFkLi45NjA3YTdlN2I2ODM0YjBhNWZmMzc1MDE0
Njk2ZGIzMTkyNjQzNjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNs
dWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAKICNpbmNsdWRlICJBUElDb250ZW50UnVsZUxp
c3QuaCIKKyNpbmNsdWRlICJBUElDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIKICNpbmNs
dWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmgiCiAjaW5jbHVkZSAiQXV0aGVudGlj
YXRpb25NYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1hcC5oIgpAQCAtMzUsNiAr
MzYsNyBAQAogI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgog
I2VuZGlmCisjaW5jbHVkZSAiTGVnYWN5R2xvYmFsU2V0dGluZ3MuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NvbnRlbnRSdWxlTGlzdE1hbmFnZXJNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKQEAgLTQ4LDYgKzUw
LDcgQEAKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRl
ICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50UnVs
ZUxpc3QuaCIKKyNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJX
ZWJQYWdlTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJX
ZWJQcm9jZXNzTWVzc2FnZXMuaCIKQEAgLTU4LDggKzYxLDEwIEBACiAjaW5jbHVkZSAiV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHkuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5oIgogI2lu
Y2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFj
a0FnZ3JlZ2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KIAogI2lm
IEVOQUJMRShTRUNfSVRFTV9TSElNKQpAQCAtNzAsMjAgKzc1LDEyNCBAQAogI2luY2x1ZGUgPHd0
Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNp
bmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIKKyNlbmRpZgorCiAj
ZGVmaW5lIE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0
aW9uLCBjb25uZWN0aW9uKCkpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKLU5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoV2Vi
UHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KHBy
b2Nlc3NQb29sLmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQotICAgICwgbV9wcm9j
ZXNzUG9vbChwcm9jZXNzUG9vbCkKK3N0YXRpYyBIYXNoU2V0PE5ldHdvcmtQcm9jZXNzUHJveHkq
PiYgbmV0d29ya1Byb2Nlc3Nlc1NldCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PE5ldHdvcmtQcm9j
ZXNzUHJveHkqPj4gc2V0OworICAgIHJldHVybiBzZXQ7Cit9CisKK1ZlY3RvcjxSZWY8TmV0d29y
a1Byb2Nlc3NQcm94eT4+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMo
KQoreworICAgIFZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAg
ICBwcm9jZXNzZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXR3b3JrUHJvY2Vzc2VzU2V0KCku
c2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIG5ldHdvcmtQcm9jZXNzIDogbmV0d29ya1Byb2Nlc3Nl
c1NldCgpKQorICAgICAgICBwcm9jZXNzZXMudW5jaGVja2VkQXBwZW5kKCpuZXR3b3JrUHJvY2Vz
cyk7CisgICAgcmV0dXJuIHByb2Nlc3NlczsKK30KKworc3RhdGljIFJlZlB0cjxOZXR3b3JrUHJv
Y2Vzc1Byb3h5PiYgZGVmYXVsdFByb2Nlc3MoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxSZWZQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nlc3M7CisgICAgcmV0dXJuIHByb2Nl
c3MuZ2V0KCk7Cit9CisKK1JlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpkZWZhdWx0TmV0d29ya1Byb2Nlc3MoKQoreworICAgIGlmICghZGVmYXVsdFByb2Nlc3Mo
KSkKKyAgICAgICAgZGVmYXVsdFByb2Nlc3MoKSA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0
ZSgpOworICAgIHJldHVybiAqZGVmYXVsdFByb2Nlc3MoKTsKK30KKwordm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp0ZXJtaW5hdGUoKQoreworICAgIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6dGVy
bWluYXRlKCk7CisgICAgaWYgKGF1dG8qIGNvbm5lY3Rpb24gPSB0aGlzLT5jb25uZWN0aW9uKCkp
CisgICAgICAgIGNvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKKyAgICBkaWRUZXJtaW5hdGUoKTsK
K30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRUZXJtaW5hdGUoKQoreworICAgIGlm
ICh0aGlzID09IGRlZmF1bHRQcm9jZXNzKCkuZ2V0KCkpCisgICAgICAgIGRlZmF1bHRQcm9jZXNz
KCkgPSBudWxscHRyOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlv
blBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBh
cHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KKyAgICAvLyBXZSBzaG91
bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sg
b24gb3VyIEFQSXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMDI0Ni4KKyAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7CisgICAgICAgIGNhbGxP
bk1haW5SdW5Mb29wQW5kV2FpdChbdGhpc10geworICAgICAgICAgICAgc2VuZENyZWF0aW9uUGFy
YW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBOZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0
aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJh
bWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xp
Y3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVt
ZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CisgICAgcGFy
YW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsK
KyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1Zl
Y3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJB
c05vQWNjZXNzKCkpOworICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7CisgICAgZm9yIChhdXRvJiBzY2hlbWUg
OiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkp
CisgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2Nv
bHMuYXBwZW5kKHNjaGVtZSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoU3Ry
aW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFn
ZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29r
aWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0g
V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsgIWNvbnRhaW5lckNh
Y2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBh
cmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBp
ZiAoU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRC
dW5kbGVEaXJlY3RvcnkoKTsgIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3Rvcnks
IFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRs
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisjZW5kaWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CisgICAgc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0
ZXJzKSwgMCk7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFj
a2dyb3VuZFByaW9yaXR5KCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJv
Y2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+
YWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNz
UG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKQoreworICAgIGZvciAoYXV0byog
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAg
ICAgaWYgKHByb2Nlc3NQb29sLT5zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KCkKKyAgICA6IEF1eGlsaWFy
eVByb2Nlc3NQcm94eShhbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0
eSgpKQogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCisgICAgLCBt
X2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlUmVmPExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudD4oKSkKICAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJv
eHkoKnRoaXMpCisjZWxzZQorICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFr
ZVVuaXF1ZVJlZjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICNlbmRpZgot
ICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNob3VsZFRha2VVSUJhY2tncm91
bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBhbnlQcm9jZXNzUG9vbFNo
b3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fY29va2llTWFuYWdlcihX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSgqdGhpcykpCiB7CiAgICAgY29ubmVjdCgpOwor
ICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICB1cGRhdGVQcm9j
ZXNzQXNzZXJ0aW9uKCk7CisgICAgbmV0d29ya1Byb2Nlc3Nlc1NldCgpLmFkZCh0aGlzKTsKIH0K
IAogTmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkoKQpAQCAtOTgsNiAr
MjA3LDcgQEAgTmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkoKQogCiAg
ICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5p
bnZhbGlkYXRlKCk7CisgICAgbmV0d29ya1Byb2Nlc3Nlc1NldCgpLnJlbW92ZSh0aGlzKTsKIH0K
IAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVu
Y2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1bmNoT3B0aW9ucykKQEAgLTEwNSwxNSArMjE1LDggQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hl
cjo6TGF1bmNoT3B0aW9ucyYgbGF1bmMKICAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID0g
UHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6TmV0d29yazsKICAgICBBdXhpbGlhcnlQcm9j
ZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7CiAKLSAgICBpZiAocHJv
Y2Vzc1Bvb2woKS5zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmcoKSkgewotICAgICAgICBwcm9jZXNzUG9vbCgpLnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1By
b2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhmYWxzZSk7CisgICAgaWYgKFdlYnNpdGVEYXRhU3Rv
cmU6OnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpKQog
ICAgICAgICBsYXVuY2hPcHRpb25zLnNob3VsZE1ha2VQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmcgPSB0cnVlOwotICAgIH0KLQotI2lmIFBMQVRGT1JNKFBMQVlTVEFUSU9OKQotICAgIGxhdW5j
aE9wdGlvbnMucHJvY2Vzc1BhdGggPSBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzUGF0aCgp
OwotICAgIGxhdW5jaE9wdGlvbnMudXNlcklkID0gbV9wcm9jZXNzUG9vbC51c2VySWQoKTsKLSNl
bmRpZgogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNvbm5lY3Rpb25XaWxsT3BlbihJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCkBAIC0xNjYsMTIgKzI2OSwxMiBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3Jv
dW5kKQogICAgIH0KIH0KIAotRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3Jl
YXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUlu
Zm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQorRG93bmxvYWRQcm94eSYgTmV0d29y
a1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRh
U3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFn
ZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAgICAgaWYgKCFtX2Rvd25sb2FkUHJveHlNYXAp
CiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1ha2VVbmlxdWU8RG93bmxvYWRQcm94eU1h
cD4oKnRoaXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxv
YWRQcm94eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJhbWVJ
bmZvLCBvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNy
ZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBwcm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0
LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hP
cHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoV2Vic2l0ZURhdGEp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjM3LDggKzM0MCwxMSBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpCiB7CiAgICAgY2xlYXJDYWxsYmFj
a1N0YXRlcygpOwogCi0gICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIgdG8g
Zm9yZ2V0IGFib3V0IHRoaXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1c2Ug
dXMgdG8gYmUgZGVsZXRlZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hl
ZCgqdGhpcyk7CisgICAgUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+IHByb3RlY3RlZFRoaXMoKnRo
aXMpOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJv
Y2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQo
KnRoaXMpOworICAgIGZvciAoYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA6IG1fd2Vic2l0ZURhdGFT
dG9yZXMpCisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0
aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjbGVhckNhbGxiYWNrU3RhdGVz
KCkKQEAgLTI1OCw5ICszNjQsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZQogICAgIGlmIChk
aXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChtX3Byb2Nlc3NQb29sLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVy
KSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzUHJveHlN
ZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQogCkBAIC0yNzQsOCArMzc3LDYgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBJUEMKIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9z
ZShJUEM6OkNvbm5lY3Rpb24mKQogewotICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBt
YWtlUmVmKG1fcHJvY2Vzc1Bvb2wpOwotCiAgICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCkKICAg
ICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5pbnZhbGlkYXRlKCk7CiAjaWYgRU5BQkxFKExFR0FD
WV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKQEAgLTMzMSwxMSArNDMyLDYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2kKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdG9wT3Jp
Z2luIHx8ICFtX3Byb2Nlc3NQb29sLmlzU2VydmljZVdvcmtlclBhZ2VJRChwYWdlSUQpKSB7Ci0g
ICAgICAgIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShzZXNzaW9uSUQsIFdURk1vdmUo
YXV0aGVudGljYXRpb25DaGFsbGVuZ2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAg
IFdlYlBhZ2VQcm94eTo6Zm9yTW9zdFZpc2libGVXZWJQYWdlSWZBbnkoc2Vzc2lvbklELCAqdG9w
T3JpZ2luLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBh
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2Up
LCBuZWdvdGlhdGVkTGVnYWN5VExTXShhdXRvKiBwYWdlKSBtdXRhYmxlIHsKICAgICAgICAgaWYg
KCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM5MiwxMSArNDg4LDYgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVy
KiBsYXVuY2hlciwgSVBDOjpDb24KICAgICAgICAgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAobV9w
cm9jZXNzUG9vbC5wcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpCi0gICAgICAgIHNldFByb2Nl
c3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKICAgICAKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQogICAgIGlmICh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24gPSB0aGlzLT5j
b25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSkKQEAgLTExOTgsNyArMTI4OSw4IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluRm9yVGVzdGluZyhQ
QUw6OlNlc3Npb25JRCBzZXNzCiB9CiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNldERvbWFp
bnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+
JiYgZG9tYWlucykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLnNldERvbWFpbnNXaXRoVXNlckludGVy
YWN0aW9uKFdURk1vdmUoZG9tYWlucykpOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBX
ZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5z
ZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluPiB7IGRvbWFpbnMgfSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKIApAQCAtMTI0NSw0NSArMTMzNywzMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmZsdXNoQ29va2llcyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBDb21w
bGV0aQogICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkZs
dXNoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
LXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9y
ZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihXZWJzaXRl
RGF0YVN0b3JlJiBzdG9yZSkKIHsKLSAgICBtX3Nlc3Npb25JRHMuYWRkKHN0b3JlLT5zZXNzaW9u
SUQoKSk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5hZGQoc3RvcmUpOwogCiAgICAgaWYgKGNh
blNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpB
ZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUtPnBhcmFtZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRv
IHNlc3Npb25JRCA9IHN0b3JlLT5zZXNzaW9uSUQoKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkg
fSwgMCk7CisgICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAo
IXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CisgICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBn
cmFkZShzdG9yZS5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgog
ICAgIH0KIH0KIAotYm9vbCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpoYXNTZXNzaW9uKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zZXNzaW9uSURzLmNvbnRh
aW5zKHNlc3Npb25JRCk7Ci19Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vz
c2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnJlbW92ZVNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAg
ICBtX3Nlc3Npb25JRHMucmVtb3ZlKHNlc3Npb25JRCk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3Jl
cy5yZW1vdmUod2Vic2l0ZURhdGFTdG9yZSk7CiAKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkK
LSAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRlc3Ryb3lTZXNzaW9uIHsg
c2Vzc2lvbklEIH0sIDApOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
RGVzdHJveVNlc3Npb24geyB3ZWJzaXRlRGF0YVN0b3JlLnNlc3Npb25JRCgpIH0sIDApOwogfQog
CiBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3Jl
RnJvbVNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Np
b25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlm
ICghV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAg
ICAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0
b3JlKCk7Ci0gICAgICAgICAgICBpZiAod2Vic2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSA9PSBzZXNzaW9uSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdl
YnNpdGVEYXRhU3RvcmU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0
ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Np
b25JRCk7CisgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9y
U2Vzc2lvbklEKHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0
cmlldmVDYWNoZVN0b3JhZ2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAg
LTEzMzAsNyArMTQwOCw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVdl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJDb250ZW50CiAjaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJD
b250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJiByZWdp
c3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9wcm9jZXNzUG9vbC5lc3Rh
Ymxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoKnRoaXMsIFdURk1v
dmUocmVnaXN0cmFibGVEb21haW4pLCBzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKKyAgICBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBSZWdpc3RyYWJsZURvbWFpbiB7cmVnaXN0cmFibGVE
b21haW59LCBzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3b3JrZXJDb250ZXh0Q29ubmVjdGlvbk5vTG9uZ2VyTmVl
ZGVkKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC0xNDkzLDE2ICsx
NTcxLDM0IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cHJlY29ubmVjdFRvKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgV2ViUGFnZVByb3h5SWRlCiAgICAgc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlByZWNvbm5lY3RUbyhzZXNzaW9uSUQsIHdlYlBhZ2VQcm94eUlELCB3ZWJQ
YWdlSUQsIHVybCwgdXNlckFnZW50LCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgaXNOYXZpZ2F0
aW5nVG9BcHBCb3VuZERvbWFpbiksIDApOwogfQogCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9v
bEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bv
b2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHBy
b2Nlc3NQb29sLT5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQ
cm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAgIGZvciAoYXV0byog
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAg
ICAgaWYgKHByb2Nlc3NQb29sLT5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKQogewotICAgIGlmIChw
cm9jZXNzUG9vbCgpLmhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQ
cm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVBy
b2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRGb3JlZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21X
ZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9
IHRocm90dGxlcigpLmZvcmVncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgZm9yZWdyb3Vu
ZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvRm9yZWdyb3VuZCgpLCAwKTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0JhY2tncm91bmRX
ZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQ
cm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRCYWNr
Z3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAg
ICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmJhY2tncm91bmRBY3Rp
dml0eSgiTmV0d29ya2luZyBmb3IgYmFja2dyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAg
IHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvQmFj
a2dyb3VuZCgpLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKaW5kZXggNTkwZjU2YzVmYmI5NDdiZjlhNzZmNTNmODYx
MWZhYzM1MTZhNTIyYi4uMDAyMmVlNGQxZjIyYTVkMDBkZGJmNDM1ZDY4ZDVkYTI4ODkwZGE4MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmgKQEAgLTQ2LDEyICs0NiwxNyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAj
aW5jbHVkZSAiWFBDRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRyLmg+
CiAjZW5kaWYKIAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBGb3JtRGF0YVJlZmVyZW5jZTsKIH0K
IAorbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7Cit9
CisKIG5hbWVzcGFjZSBQQUwgewogY2xhc3MgU2Vzc2lvbklEOwogfQpAQCAtNzMsOCArNzgsOCBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERvd25s
b2FkUHJveHlNYXA7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJQYWdl
UHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5OwogCiBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyA6IGJv
b2w7CkBAIC04Niw4ICs5MSw5IEBAIHN0cnVjdCBGcmFtZUluZm9EYXRhOwogc3RydWN0IE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFJlc291cmNlTG9hZEluZm87CiBz
dHJ1Y3QgV2Vic2l0ZURhdGE7CitzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM7CiAK
LWNsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkgZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vz
c1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vh
a1B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiB7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZp
bmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0
bGVyQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4sIHB1
YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtQcm9jZXNzUHJveHk+IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB1c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluOwpAQCAtMTAyLDEyICsxMDgsMTggQEAgcHVibGljOgogICAg
IHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluOwogICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluOwogCi0gICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYp
OworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gZGVmYXVsdE5ldHdvcmtQcm9j
ZXNzKCk7CisgICAgc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBjcmVhdGUoKSB7IHJl
dHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtQcm9jZXNzUHJveHkpOyB9CiAgICAgfk5ldHdvcmtQ
cm9jZXNzUHJveHkoKTsKIAorICAgIHN0YXRpYyBWZWN0b3I8UmVmPE5ldHdvcmtQcm9jZXNzUHJv
eHk+PiBhbGxOZXR3b3JrUHJvY2Vzc2VzKCk7CisgICAgCisgICAgdm9pZCB0ZXJtaW5hdGUoKSBm
aW5hbDsKKyAgICB2b2lkIGRpZFRlcm1pbmF0ZSgpOworCiAgICAgdm9pZCBnZXROZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94
eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwogCi0gICAgRG93
bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQ
cm94eSogb3JpZ2luYXRpbmdQYWdlKTsKKyAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9h
ZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBXZWJQcm9jZXNzUG9vbCYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9y
aWdpbmF0aW5nUGFnZSk7CiAKICAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9u
SUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRj
aE9wdGlvbj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPiYmKTsKICAgICB2
b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIwNSwxNSArMjE3LDEyIEBAIHB1YmxpYzoKICAg
ICBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSBmaW5hbCB7IHJldHVybiBtX3Rocm90dGxl
cjsgfQogICAgIHZvaWQgdXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwogCi0gICAgV2ViUHJvY2Vz
c1Bvb2wmIHByb2Nlc3NQb29sKCkgeyByZXR1cm4gbV9wcm9jZXNzUG9vbDsgfQotCiAjaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICB2b2lkIGRpZERlc3Ryb3lXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYpOwogI2VuZGlm
CiAKLSAgICB2b2lkIGFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYpOwotICAgIGJv
b2wgaGFzU2Vzc2lvbihQQUw6OlNlc3Npb25JRCkgY29uc3Q7Ci0gICAgdm9pZCByZW1vdmVTZXNz
aW9uKFBBTDo6U2Vzc2lvbklEKTsKKyAgICB2b2lkIGFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9y
ZSYpOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CiAgICAgCiAj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgdm9pZCBjcmVhdGVTeW1MaW5rRm9yRmls
ZVVwZ3JhZGUoY29uc3QgU3RyaW5nJiBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwpAQCAtMjI4
LDYgKzIzNyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3Vz
dG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9y
TGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAKKyAgICB2b2lkIG5ldHdvcmtQ
cm9jZXNzQ3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Npb25J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIHZvaWQgcmVzb3VyY2VMb2Fk
RGlkU2VuZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVzb3VyY2VMb2FkSW5mbyYm
LCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgT3B0aW9uYWw8SVBDOjpGb3JtRGF0YVJlZmVy
ZW5jZT4mJik7CkBAIC0yNDcsNyArMjU4LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUJ1
bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKICAgICB2b2lkIGNsZWFyQnVuZGxlSWRlbnRpZmllcihDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOwogCisgICAgV2ViQ29va2llTWFuYWdlclByb3h5JiBjb29raWVNYW5hZ2VyKCkgeyBy
ZXR1cm4gbV9jb29raWVNYW5hZ2VyLmdldCgpOyB9CisKKyAgICBBUEk6OkN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgeyByZXR1cm4gbV9j
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuZ2V0KCk7IH0KKworI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgIHhwY19vYmplY3RfdCB4cGNFbmRwb2ludE1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBt
X2VuZHBvaW50TWVzc2FnZS5nZXQoKTsgfQorI2VuZGlmCisKIHByaXZhdGU6CisgICAgZXhwbGlj
aXQgTmV0d29ya1Byb2Nlc3NQcm94eSgpOworCisgICAgdm9pZCBzZW5kQ3JlYXRpb25QYXJhbWV0
ZXJzVG9OZXdQcm9jZXNzKCk7CisKICAgICAvLyBBdXhpbGlhcnlQcm9jZXNzUHJveHkKICAgICBB
U0NJSUxpdGVyYWwgcHJvY2Vzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiTmV0d29ya2lu
ZyJfczsgfQogCkBAIC0yNTUsNyArMjc4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbm5lY3Rp
b25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHByb2Nlc3NX
aWxsU2h1dERvd24oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIG5ldHdv
cmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgIHZvaWQgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCiAg
ICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKQEAgLTMxMSwxNiArMzMzLDE3IEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNlc3Np
b25JRCwgUmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+JiYpOwogCi0gICAgV2ViUHJv
Y2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPj4gbV9wZW5kaW5nRmV0Y2hXZWJzaXRlRGF0
YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hNYXA8
Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vi
c2l0ZURhdGFGb3JPcmlnaW5zQ2FsbGJhY2tzOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPERvd25s
b2FkUHJveHlNYXA+IG1fZG93bmxvYWRQcm94eU1hcDsKKworICAgIFVuaXF1ZVJlZjxBUEk6OkN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7
CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKICAgICBMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSBtX2N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Owog
I2VuZGlmCisKICAgICBQcm9jZXNzVGhyb3R0bGVyIG1fdGhyb3R0bGVyOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxQcm9jZXNzVGhyb3R0bGVyOjpCYWNrZ3JvdW5kQWN0aXZpdHk+IG1fYWN0aXZpdHlG
b3JIb2xkaW5nTG9ja2VkRmlsZXM7CiAgICAgUHJvY2Vzc1Rocm90dGxlcjo6QWN0aXZpdHlWYXJp
YW50IG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzOwpAQCAtMzQ2LDkgKzM2OSwxMSBAQCBwcml2
YXRlOgogICAgIHByaXZhdGU6CiAgICAgICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4g
bV9uZXR3b3JrUHJvY2VzczsKICAgICB9OworICAgIE9TT2JqZWN0UHRyPHhwY19vYmplY3RfdD4g
bV9lbmRwb2ludE1lc3NhZ2U7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8UEFMOjpTZXNzaW9uSUQ+
IG1fc2Vzc2lvbklEczsKKyAgICBXZWFrSGFzaFNldDxXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNp
dGVEYXRhU3RvcmVzOworICAgIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IG1fY29va2llTWFu
YWdlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQpp
bmRleCBiOGRhZWRmN2JlYmExY2Q4MWY2ZTUyNDQ5NjAzMTBmMTMzMTBjMTFlLi4wZTVmYWVjMWIz
YWFlNzkyNDU0YTg5OTAxMmM5Njc0YzNjMmU4NDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQpA
QCAtNTEsOCArNTEsMTEgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRs
ZXI6OmhhbmRsZVhQQ0V2ZW50KHhwY19vYmplY3RfdCBldmVudCkgY28KICAgICBpZiAobWVzc2Fn
ZU5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobWVzc2Fn
ZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2Vy
dmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVzc2FnZU5hbWUpCi0gICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlBy
b2Nlc3MoZXZlbnQpOworICAgIGlmIChtZXNzYWdlTmFtZSA9PSBMYXVuY2hTZXJ2aWNlc0RhdGFi
YXNlWFBDQ29uc3RhbnRzOjp4cGNMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDRW5kcG9pbnRNZXNz
YWdlTmFtZSkgeworICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5tX2VuZHBvaW50TWVzc2FnZSA9
IGV2ZW50OworICAgICAgICBmb3IgKGF1dG8mIGRhdGFTdG9yZSA6IG1fbmV0d29ya1Byb2Nlc3Mt
Pm1fd2Vic2l0ZURhdGFTdG9yZXMpCisgICAgICAgICAgICBkYXRhU3RvcmUuc2VuZE5ldHdvcmtQ
cm9jZXNzWFBDRW5kcG9pbnRUb0FsbFdlYlByb2Nlc3NlcygpOworICAgIH0KIAogICAgIHJldHVy
biB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2ll
TWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5jcHAKaW5kZXggY2M1MjZhYWYzYWFmYjFjMTQ2ZGE0YjI0MTk0NTliMTA5MjAxYjYx
MC4uMDg1ZTdkMjY1YTEzNzM1YmU3YTEyNzhlYzFkZmI2M2ZkNWRkNWQ3MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCkBAIC0yOSw2
ICsyOSw3IEBACiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElTZWN1cml0eU9y
aWdpbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgiCiAj
aW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2ll
TWFuYWdlclByb3h5TWVzc2FnZXMuaCIKQEAgLTM5LDI0ICs0MCwxNiBAQAogbmFtZXNwYWNlIFdl
YktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY29uc3QgY2hhciogV2ViQ29va2ll
TWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSgpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2VzcykK
KyAgICA6IG1fbmV0d29ya1Byb2Nlc3MobWFrZVdlYWtQdHIobmV0d29ya1Byb2Nlc3MpKQogewot
ICAgIHJldHVybiAiV2ViQ29va2llTWFuYWdlclByb3h5IjsKLX0KLQotUmVmPFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4gV2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wq
IHByb2Nlc3NQb29sKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFn
ZXJQcm94eShwcm9jZXNzUG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNv
b2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi0gICAgOiBXZWJD
b250ZXh0U3VwcGxlbWVudChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250ZXh0U3VwcGxlbWVu
dDo6cHJvY2Vzc1Bvb2woKS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIG5ldHdvcmtQ
cm9jZXNzLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIH0KIAogV2ViQ29va2llTWFuYWdlclBy
b3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KCkKIHsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CiAgICAg
QVNTRVJUKG1fY29va2llT2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiB9CiAKQEAgLTY1LDEwMiArNTgs
ODQgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmluaXRpYWxpemVDbGllbnQoY29uc3Qg
V0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSogY2wKICAgICBtX2NsaWVudC5pbml0aWFsaXplKGNs
aWVudCk7CiB9CiAKLS8vIFdlYkNvbnRleHRTdXBwbGVtZW50Ci0KLXZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCgpCi17Ci0gICAgVmVjdG9yPE9ic2VydmVy
Kj4gb2JzZXJ2ZXJzOwotICAgIGZvciAoYXV0byYgb2JzZXJ2ZXJTZXQgOiBtX2Nvb2tpZU9ic2Vy
dmVycy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJT
ZXQpCi0gICAgICAgICAgICBvYnNlcnZlcnMuYXBwZW5kKG9ic2VydmVyKTsKLSAgICB9Ci0KLSAg
ICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJzKQotICAgICAgICBvYnNlcnZlci0+bWFu
YWdlckRlc3Ryb3llZCgpOwotCi0gICAgQVNTRVJUKG1fY29va2llT2JzZXJ2ZXJzLmlzRW1wdHko
KSk7Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xvc2UoV2Vi
UHJvY2Vzc1Byb3h5KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nl
c3NEaWRDbG9zZShOZXR3b3JrUHJvY2Vzc1Byb3h5KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkKLXsKLSAgICBBUEk6Ok9iamVj
dDo6cmVmKCk7Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZXJlZldlYkNvbnRl
eHRTdXBwbGVtZW50KCkKLXsKLSAgICBBUEk6Ok9iamVjdDo6ZGVyZWYoKTsKLX0KLQogdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhvc3RuYW1lc1dp
dGhDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAg
ICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0bmFtZXMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9z
dG5hbWVzKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZXMoc2Vzc2lvbklELCBob3N0bmFtZXMpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQog
ewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJ
Zk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhz
ZXNzaW9uSUQpKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2ll
cyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0
ZUNvb2tpZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENvb2tpZSYgY29va2llLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRv
JiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7
Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBbY2FsbGJhY2tGdW5j
dGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbildKCkgbXV0YWJsZSB7CisgICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llKHNlc3Npb25JRCwg
Y29va2llKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQogICAgICAgICBj
YWxsYmFja0Z1bmN0aW9uKCk7Ci0gICAgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIFdhbGxUaW1lIHRpbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNp
bmNlKHNlc3Npb25JRCwgdGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXNNb2Rp
ZmllZFNpbmNlKHNlc3Npb25JRCwgdGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwor
ICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2Fs
bGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
KCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklE
LCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llKHNlc3Npb25JRCwgY29va2llcyks
IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tG
dW5jdGlvbigpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBj
b25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBtYWluRG9jdW1lbnRVUkwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3b3Jr
UHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNl
dENvb2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVudFVSTCksIFdURk1v
dmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OlNldENvb2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVu
dFVSTCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2Fs
bGJhY2tGdW5jdGlvbigpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxs
Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAg
bmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpHZXRBbGxDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikp
OworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tp
ZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAg
ICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgfSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpnZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5j
dGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwg
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFdURk1vdmUoY2FsbGJh
Y2tGdW5jdGlvbikpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IH0pOwog
fQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFu
Z2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5k
VG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNl
c3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RvcE9ic2Vy
dmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nl
c3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vz
c2lvbklEKSk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdU
Rjo6RnVuY3Rpb248dm9pZCAoKT4mJiBjYWxsYmFjaykKQEAgLTIxMSwxOCArMTg2LDE4IEBAIHZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSNpZiBV
U0UoU09VUCkKLSAgICBwcm9jZXNzUG9vbCgpLT5zZXRJbml0aWFsSFRUUENvb2tpZUFjY2VwdFBv
bGljeShwb2xpY3kpOwotI2VuZGlmCi0KLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2Vu
ZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KHBvbGljeSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kocG9saWN5KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAgZWxzZQorICAg
ICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5
OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCit2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFj
Y2VwdFBvbGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbmV0d29y
a1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpH
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwor
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisgICAg
ZWxzZQorICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKEhUVFBDb29raWVBY2NlcHRQb2xpY3k6Ok5l
dmVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCmluZGV4IDBiZGZjMGQ0ZTQ3YzQzNmY1ODVj
ZjI5YzA5ZDUxYTI5YmM4MTFhOWQuLjZmNTFmMDNlNWMwY2E4OTQxMjMzNDM3N2I1NTQzZDgyMmNj
MmZlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eS5oCkBAIC01NiwxMSArNTYsOSBAQCB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkFy
cmF5Kj4gQXJyYXlDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPFdlYkNvcmU6OkhU
VFBDb29raWVBY2NlcHRQb2xpY3k+IEhUVFBDb29raWVBY2NlcHRQb2xpY3lDYWxsYmFjazsKIHR5
cGVkZWYgR2VuZXJpY0NhbGxiYWNrPGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jj4gR2V0
Q29va2llc0NhbGxiYWNrOwogCi1jbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMg
QVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHVibGlj
IFdlYkNvbnRleHRTdXBwbGVtZW50LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK2Ns
YXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpP
YmplY3Q6OlR5cGU6OkNvb2tpZU1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVy
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKLQot
ICAgIHN0YXRpYyBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUHJvY2Vzc1Bv
b2wqKTsKKyAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKE5ldHdv
cmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFdl
YkNvb2tpZU1hbmFnZXJQcm94eShuZXR3b3JrUHJvY2VzcykpOyB9CiAgICAgdmlydHVhbCB+V2Vi
Q29va2llTWFuYWdlclByb3h5KCk7CiAKICAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29uc3Qg
V0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSopOwpAQCAtMTA0LDE3ICsxMDIsMTAgQEAgcHVibGlj
OgogICAgIHVzaW5nIEFQSTo6T2JqZWN0OjpkZXJlZjsKIAogcHJpdmF0ZToKLSAgICBXZWJDb29r
aWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHkoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwogCiAgICAgdm9pZCBjb29raWVzRGlkQ2hhbmdlKFBB
TDo6U2Vzc2lvbklEKTsKIAotICAgIC8vIFdlYkNvbnRleHRTdXBwbGVtZW50Ci0gICAgdm9pZCBw
cm9jZXNzUG9vbERlc3Ryb3llZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgcHJvY2Vzc0RpZENsb3Nl
KFdlYlByb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZvaWQgcHJvY2Vzc0RpZENsb3NlKE5l
dHdvcmtQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlZldlYkNvbnRleHRTdXBw
bGVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkg
b3ZlcnJpZGU7Ci0KICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgogICAgIHZvaWQgZGlkUmVj
ZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAK
QEAgLTEyNSw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQs
IFdURjo6RnVuY3Rpb248dm9pZCAoKT4+IG1fbGVnYWN5Q29va2llT2JzZXJ2ZXJzOwogICAgIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIEhhc2hTZXQ8T2JzZXJ2ZXIqPj4gbV9jb29raWVPYnNlcnZl
cnM7CiAKKyAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7
CiAgICAgV2ViQ29va2llTWFuYWdlclByb3h5Q2xpZW50IG1fY2xpZW50OwogCiAjaWYgVVNFKFNP
VVApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCA1Mjg5NjIz
YzhjMTY2OGUxN2MwOWY3NjNhMjU4M2IxZTYyYjVjYTlhLi5kZDE3ZjIxNDAxNjUyOThlMTY1ZmRi
YmYyZWY3NjFiN2JiNThhNzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAKQEAgLTE3NDYsNyArMTc0Niw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDb250cm9s
bGVkQnlBdXRvbWF0aW9uKGJvb2wgY29udHJvbGxlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbihjb250cm9s
bGVkKSk7Ci0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNlbmRUb05ldHdvcmtpbmdQcm9j
ZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vzc2lvbklzQ29udHJvbGxlZEJ5QXV0
b21hdGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBtX2NvbnRyb2xsZWRCeUF1
dG9tYXRpb24pKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vzc2lvbklzQ29udHJvbGxlZEJ5QXV0b21h
dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBtX2NvbnRyb2xsZWRCeUF1dG9t
YXRpb24pLCAwKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNyZWF0ZUluc3BlY3RvclRhcmdl
dChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUg
dHlwZSkKQEAgLTMyMDcsMTEgKzMyMDcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aXNGb3JjZWRJ
bnRvQXBwQm91bmRNb2RlVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPgogdm9p
ZCBXZWJQYWdlUHJveHk6OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQ
cm9jZXNzKCkKIHsKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpICYmICFQTEFURk9STShN
QUNDQVRBTFlTVCkKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnBy
b2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9j
ZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNl
V29ya2VyRW50aXRsZW1lbnQoKSwgMCk7Ci0gICAgfQorICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5u
ZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNhYmxlU2Vy
dmljZVdvcmtlckVudGl0bGVtZW50KCksIDApOwogI2VuZGlmCiB9CiAKQEAgLTMyMjAsMTMgKzMy
MTYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRP
dmVycmlkZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKAogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9N
QUlOUykgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6Q2xlYXJTZXJ2
aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2wo
KS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNl
bmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVu
dGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgd2Vic2l0ZURhdGFTdG9yZSgpLm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRP
dmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwogI2VuZGlmCkBAIC00NDIwLDcgKzQ0MTAsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6cHJlY29ubmVjdFRvKGNvbnN0IFVSTCYgdXJsKQogICAgICAgICByZXR1cm47CiAKICAg
ICBhdXRvIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5ID0gbV9jYW5Vc2VDcmVkZW50aWFsU3RvcmFn
ZSA/IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpVc2UgOiBXZWJDb3JlOjpTdG9y
ZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2U7Ci0gICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9v
bCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkucHJlY29ubmVjdFRvKHNlc3Npb25JRCgpLCBpZGVu
dGlmaWVyKCksIHdlYlBhZ2VJRCgpLCB1cmwsIHVzZXJBZ2VudCgpLCBzdG9yZWRDcmVkZW50aWFs
c1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpKTsKKyAgICB3ZWJzaXRlRGF0
YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5wcmVjb25uZWN0VG8oc2Vzc2lvbklEKCksIGlkZW50
aWZpZXIoKSwgd2ViUGFnZUlEKCksIHVybCwgdXNlckFnZW50KCksIHN0b3JlZENyZWRlbnRpYWxz
UG9saWN5LCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKCkpOwogfQogCiB2b2lkIFdlYlBh
Z2VQcm94eTo6c2V0Q2FuVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCBjYW5Vc2VDcmVkZW50aWFs
U3RvcmFnZSkKQEAgLTQ3MTYsNyArNDcwNiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21t
aXRMb2FkRm9yRnJhbWUoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIEZyYW1lSW5mb0RhdGEmCiAg
ICAgICAgICAgICBSZWdpc3RyYWJsZURvbWFpbiBjdXJyZW50RG9tYWluIHsgY3VycmVudFJlcXVl
c3QudXJsKCkgfTsKICAgICAgICAgICAgIFVSTCByZXF1ZXN0ZXJVUkwgeyBVUkwoKSwgcmVxdWVz
dGVyT3JpZ2luLnRvU3RyaW5nKCkgfTsKICAgICAgICAgICAgIGlmICghY3VycmVudERvbWFpbi5t
YXRjaGVzKHJlcXVlc3RlclVSTCkpCi0gICAgICAgICAgICAgICAgbV9wcm9jZXNzLT5wcm9jZXNz
UG9vbCgpLmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKG1fd2Vic2l0ZURh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxlRG9tYWluIHsgcmVxdWVzdGVyVVJMIH0s
IGN1cnJlbnREb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIG1faWRlbnRpZmllciwgbV93
ZWJQYWdlSUQpOworICAgICAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29ya1By
b2Nlc3MoKS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RlclVSTCB9
LCBjdXJyZW50RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBtX2lkZW50aWZpZXIsIG1f
d2ViUGFnZUlEKTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQpAQCAtNDc1NCw3ICs0NzQ0LDcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZShGcmFtZUlkZW50aWZp
ZXIgZnJhbWVJRCwgRnJhbWVJbmZvRGF0YSYKICAgICBpZiAobmF2aWdhdGlvbiAmJiBmcmFtZS0+
aXNNYWluRnJhbWUoKSkgewogICAgICAgICBpZiAoYXV0byYgYWRDbGlja0F0dHJpYnV0aW9uID0g
bmF2aWdhdGlvbi0+YWRDbGlja0F0dHJpYnV0aW9uKCkpIHsKICAgICAgICAgICAgIGlmIChhZENs
aWNrQXR0cmlidXRpb24tPmRlc3RpbmF0aW9uKCkubWF0Y2hlcyhmcmFtZS0+dXJsKCkpKQotICAg
ICAgICAgICAgICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJv
Y2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN0b3JlQWRDbGlja0F0dHJpYnV0aW9uKG1f
d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksICphZENsaWNrQXR0cmlidXRpb24pKTsKKyAg
ICAgICAgICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U3RvcmVBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRl
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKmFkQ2xpY2tBdHRyaWJ1dGlvbiksIDApOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC01MzY4LDcgKzUzNTgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6bG9n
RnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFdlYkZyYW1lUHJveHkmIGZyYW1lLCBjb25zdCBVUkwmIHBh
ZwogICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8fCBtYWluRnJhbWVIb3N0LmlzRW1wdHko
KSB8fCB0YXJnZXRIb3N0ID09IHNvdXJjZVVSTC5ob3N0KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkxvZ0ZyYW1lTmF2aWdhdGlvbihtX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCBSZWdpc3RyYWJsZURvbWFpbiB7IHRhcmdldFVSTCB9LCBSZWdpc3Ry
YWJsZURvbWFpbiB7IHBhZ2VVUkwgfSwgUmVnaXN0cmFibGVEb21haW4geyBzb3VyY2VVUkwgfSwg
aXNSZWRpcmVjdCwgZnJhbWUuaXNNYWluRnJhbWUoKSwgTW9ub3RvbmljVGltZTo6bm93KCkgLSBt
X2RpZEZpbmlzaERvY3VtZW50TG9hZEZvck1haW5GcmFtZVRpbWVzdGFtcCwgd2FzUG90ZW50aWFs
bHlJbml0aWF0ZWRCeVVzZXIpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TG9nRnJhbWVOYXZpZ2F0aW9uKG1f
d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFJlZ2lzdHJhYmxlRG9tYWluIHsgdGFyZ2V0
VVJMIH0sIFJlZ2lzdHJhYmxlRG9tYWluIHsgcGFnZVVSTCB9LCBSZWdpc3RyYWJsZURvbWFpbiB7
IHNvdXJjZVVSTCB9LCBpc1JlZGlyZWN0LCBmcmFtZS5pc01haW5GcmFtZSgpLCBNb25vdG9uaWNU
aW1lOjpub3coKSAtIG1fZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yTWFpbkZyYW1lVGltZXN0YW1w
LCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlciksIDApOwogfQogI2VuZGlmCiAKQEAgLTk5
OTMsNTggKzk5ODMsMjcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN5c3RlbVByZXZpZXdBY3Rpb25U
cmlnZ2VyZWQoY29uc3QgV2ViQ29yZTo6U3lzdGVtUHJldmlld0luZm8KIAogdm9pZCBXZWJQYWdl
UHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihlbXB0eVN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNp
dGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9u
KG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2Uo
KSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB3ZWJzaXRlRGF0
YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUt
PnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3Rpbmco
Ym9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bv
b2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNh
blNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1
dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJz
aXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9y
VGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1ZSksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tB
dHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewot
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZv
clRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29y
a1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2ViUGFnZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZv
clRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2wo
KS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNl
bmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENsaWNrQXR0cmlidXRp
b25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICB3ZWJzaXRlRGF0YVN0b3Jl
KCkubmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcobV93ZWJz
aXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IGQ5MjZiMzNjYmRmMmJiOGJiOTgwZDYzYzVkYzUy
YWU1MjUwOTI1MjkuLjcxZjFmNjM4ZGMzM2Y0ZTQxODI1NmQ2NjgxY2Y4NDRmODJiOTQxYzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTQ1LDcgKzQ1
LDYgQEAKICNpbmNsdWRlICJMZWdhY3lHbG9iYWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ0lu
aXRpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNs
dWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCkBAIC0xNDMsOCArMTQyLDEwIEBACiAjZW5kaWYK
IAogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPRyhjaGFubmVsLCBmbXQsIC4uLikg
UkVMRUFTRV9MT0coY2hhbm5lbCwgIiVwIC0gV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAj
I19fVkFfQVJHU19fKQorI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19TVEFUSUMo
Y2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HKGNoYW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6
IiBmbXQsICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9H
X0VSUk9SKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPR19FUlJPUihjaGFubmVsLCAiJXAg
LSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIFdF
QlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQoY2hhbm5lbCwgZm10LCAuLi4pIFJF
TEVBU0VfTE9HX0lGKHNlc3Npb25JRC5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgY2hhbm5l
bCwgIiVwIC0gV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorI2Rl
ZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEX1NUQVRJQyhjaGFubmVs
LCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxs
b3dlZCgpLCBjaGFubmVsLCAiV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCAjI19fVkFfQVJHU19fKQog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMjMyLDYg
KzIzMywxMSBAQCBzdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFz
aD4mIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdAogICAgIHJldHVybiBzZXQ7CiB9CiAK
K1ZlY3RvcjxTdHJpbmc+IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3Rv
Y29sSGFuZGxlcnMoKQoreworICAgIHJldHVybiBjb3B5VG9WZWN0b3IoZ2xvYmFsVVJMU2NoZW1l
c1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpOworfQorCiBXZWJQcm9jZXNzUG9vbDo6V2Vi
UHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24p
CiAgICAgOiBtX2NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbi5jb3B5KCkpCiAgICAgLCBtX2Rl
ZmF1bHRQYWdlR3JvdXAoV2ViUGFnZUdyb3VwOjpjcmVhdGUoKSkKQEAgLTIzOSw3ICsyNDUsNiBA
QCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgLCBtX2F1dG9tYXRpb25DbGllbnQobWFrZVVuaXF1
ZTxBUEk6OkF1dG9tYXRpb25DbGllbnQ+KCkpCiAgICAgLCBtX2Rvd25sb2FkQ2xpZW50KG1ha2VV
bmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSkKICAgICAsIG1faGlzdG9yeUNsaWVudCht
YWtlVW5pcXVlPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCkpCi0gICAgLCBtX2N1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50PigpKQogICAgICwgbV92aXNpdGVkTGlua1N0b3JlKFZpc2l0ZWRMaW5rU3Rv
cmU6OmNyZWF0ZSgpKQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAsIG1faGlnaFBlcmZvcm1hbmNl
R3JhcGhpY3NVc2FnZVNhbXBsZXIobWFrZVVuaXF1ZTxIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1Vz
YWdlU2FtcGxlcj4oKnRoaXMpKQpAQCAtMjY3LDkgKzI3Miw2IEBAIFdlYlByb2Nlc3NQb29sOjpX
ZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlv
bikKICNlbmRpZgogICAgIH0pOwogCi0gICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUgJiYgV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAg
IG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpOwotCiAgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBtX2NvbmZpZ3VyYXRpb24tPmFs
d2F5c1JldmFsaWRhdGVkVVJMU2NoZW1lcygpKQogICAgICAgICBtX3NjaGVtZXNUb1JlZ2lzdGVy
QXNBbHdheXNSZXZhbGlkYXRlZC5hZGQoc2NoZW1lKTsKIApAQCAtMjg1LDcgKzI4Nyw2IEBAIFdl
YlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlv
biYgY29uZmlndXJhdGlvbikKICAgICBhZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBy
b2Nlc3NQb29sOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIAogICAgIC8vIE5PVEU6
IFRoZXNlIHN1Yi1vYmplY3RzIG11c3QgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbV9tZXNzYWdlUmVj
ZWl2ZXJNYXAuLgotICAgIGFkZFN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwog
ICAgIGFkZFN1cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRk
U3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAjaWYgRU5BQkxFKE1F
RElBX1NFU1NJT04pCkBAIC0zNDIsOSArMzQzLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6On5XZWJQcm9j
ZXNzUG9vbCgpCiAgICAgcHJvY2Vzc1Bvb2xDb3VudGVyLmRlY3JlbWVudCgpOwogI2VuZGlmCiAK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2h1
dERvd25Qcm9jZXNzKCk7Ci0KICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICBpZiAoIW1fcHJvY2Vz
c2VzVXNpbmdHYW1lcGFkcy5pc0VtcHR5KCkpCiAgICAgICAgIFVJR2FtZXBhZFByb3ZpZGVyOjpz
aW5nbGV0b24oKS5wcm9jZXNzUG9vbFN0b3BwZWRVc2luZ0dhbWVwYWRzKCp0aGlzKTsKQEAgLTQw
MiwxNiArNDAwLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QXV0b21hdGlvbkNsaWVudChz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYKICAgICAgICAgbV9hdXRvbWF0
aW9uQ2xpZW50ID0gV1RGTW92ZShhdXRvbWF0aW9uQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVl
X3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJiBjdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQpCi17Ci0jaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdF
UikKLSAgICBpZiAoIWN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkKLSAgICAgICAgbV9jdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50PigpOwotICAgIGVsc2UKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQgPSBXVEZNb3ZlKGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk7Ci0jZW5kaWYK
LX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5k
bGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJ
ZGVudGlmaWVyKQogewogICAgIC8vIEd1YXJkIGFnYWluc3QgQVBJIG1pc3VzZS4KQEAgLTQyMSwx
MSArNDA5LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZp
Y2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgY3UKICAgICBtX2NvbmZpZ3VyYXRpb24t
PnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjdXN0b21XZWJDb250
ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIpOwogfQogCi1JUEM6OkNvbm5lY3Rpb24qIFdlYlBy
b2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKQotewotICAgIHJldHVybiBt
X25ldHdvcmtQcm9jZXNzLT5jb25uZWN0aW9uKCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
Omxhbmd1YWdlQ2hhbmdlZCh2b2lkKiBjb250ZXh0KQogewogICAgIHN0YXRpY19jYXN0PFdlYlBy
b2Nlc3NQb29sKj4oY29udGV4dCktPmxhbmd1YWdlQ2hhbmdlZCgpOwpAQCAtNDM1LDggKzQxOCw3
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCgpCiB7CiAgICAgc2VuZFRv
QWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
Q2hhbmdlZCgpKTsKICNpZiBVU0UoU09VUCkKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAg
ICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVz
ZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDAp
OworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+bmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdl
c0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CiAjZW5kaWYKIH0KIApAQCAt
NDQ5LDcgKzQzMSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmZ1bGxLZXlib2FyZEFjY2Vzc01v
ZGVDaGFuZ2VkKGJvb2wgZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudChib29sIGlzQ3JpdGljYWwpCiB7CiAgICAgc2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVt
b3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3MoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2
ZW50KGlzQ3JpdGljYWwpKTsKKyAgICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJl
c3N1cmVFdmVudChpc0NyaXRpY2FsKSwgMCk7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCiAgICAgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnNlbmRNZW1vcnlQcmVz
c3VyZUV2ZW50KGlzQ3JpdGljYWwpOwogI2VuZGlmCkBAIC00NzQsMjc1ICs0NTcsOCBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzY3JlZW5Qcm9wZXJ0aWVzU3RhdGVDaGFuZ2VkKCkKICNlbmRpZgog
fQogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1By
b2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUpCi17Ci0gICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRl
bXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4g
dGhyZWFkcy4KLSAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRo
cmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCi0gICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KLSAgICBpZiAoIVJ1bkxvb3A6Omlz
TWFpbigpKSB7Ci0gICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJv
Y2VzcygpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwot
ICAgIH0KLQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIGlmICh3aXRoV2Vi
c2l0ZURhdGFTdG9yZSkgewotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lv
bihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICAgICAgd2l0aFdlYnNp
dGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAgYXV0byBuZXR3b3JrUHJvY2Vz
cyA9IG1ha2VVbmlxdWU8TmV0d29ya1Byb2Nlc3NQcm94eT4oKnRoaXMpOwotCi0gICAgTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLQotICAgIGlmIChtX3dlYnNp
dGVEYXRhU3RvcmUpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5wZW5kaW5nQ29va2llcyA9IGNvcHlUb1ZlY3RvcihtX3dlYnNpdGVEYXRhU3RvcmUtPnBl
bmRpbmdDb29raWVzKCkpOwotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGlu
Z0Nvb2tpZXMoKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBw
bGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0
aW9uKCkuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKCk7Ci0gICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllciA9IG1fd2Vic2l0ZURhdGFTdG9y
ZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcigp
OwotI2VuZGlmCi0gICAgfQotCi0gICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xv
YmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwoKTsKLQotICAgIGZvciAoYXV0byYg
c2NoZW1lIDogZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCi0g
ICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMu
YXBwZW5kKHNjaGVtZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFN0cmluZyBj
b29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJl
Y3RvcnkoKTsKLSAgICBpZiAoIWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rvcnko
Y29va2llU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJlY3Rvcnkg
PSBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAgIGlmICgh
Y29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0Rp
cmVjdG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotCi0gICAgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29s
OjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmVudEJ1bmRsZURpcmVjdG9y
eS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJl
bnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJh
bWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JUZW1wb3JhcnlGaWxlKGVtcHR5U3RyaW5nKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJl
YWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0
YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLSNlbmRpZgot
Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJlID0gY29weVRvVmVj
dG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFz
U2VjdXJlKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2lu
Z0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5n
czo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0
eVBvbGljeSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9
IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1Rv
UmVnaXN0ZXJBc0xvY2FsKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRB
c05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24o
KS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLSAgICAvLyAqKioqKioqKioKLSAgICAvLyBJTVBPUlRBTlQ6IERvIG5vdCBjaGFu
Z2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGluZGV4ZWQgZGF0YWJhc2VzIG9uIGRpc2sg
d2l0aG91dCBmaXJzdCBjb25zdWx0aW5nIGEgcmV2aWV3ZXIgZnJvbSBBcHBsZSAoPHJkYXI6Ly9w
cm9ibGVtLzE3NDU0NzEyPikKLSAgICAvLyAqKioqKioqKioKLSAgICBpZiAobV93ZWJzaXRlRGF0
YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRJbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1ldGVycygpLmluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkgewot
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rv
cnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PmNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7Ci0gICAgfQotI2VuZGlmCi0KLSNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAg
ICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5ID0gIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBhdXRvIGxvY2FsU3RvcmFnZURpcmVjdG9y
eSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRMb2Nh
bFN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAoIWxvY2FsU3RvcmFn
ZURpcmVjdG9yeSkKLSAgICAgICAgbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBs
b2NhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotCi0gICAgYXV0byBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRh
U3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPmNhY2hlU3RvcmFnZURpcmVjdG9yeSgpIDogbnVs
bFN0cmluZygpOwotICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkgewot
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rv
cnkoY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
ID0gV1RGTW92ZShjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOwotICAgIH0KLQotICAgIFN0cmluZyBy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAg
IGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3NE
aXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkt
PnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5LCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
LQotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IGZhbHNlOwotICAgIGJv
b2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IGZhbHNlOwot
ICAgIGJvb2wgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IHRydWU7Ci0gICAgYm9vbCBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFJFU09V
UkNFX0xPQURfU1RBVElTVElDUykKLSAgICBXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBXZWJDb3JlOjpUaGlyZFBhcnR5
Q29va2llQmxvY2tpbmdNb2RlOjpBbGw7Ci0gICAgV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudEVuYWJsZWQgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBXZWJDb3Jl
OjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87Ci0jZW5kaWYKLSAgICBXZWJD
b3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSBmaXJzdFBhcnR5V2Vic2l0ZURh
dGFSZW1vdmFsTW9kZSA9IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
OjpBbGxCdXRDb29raWVzOwotICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHN0YW5kYWxv
bmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluPiBhcHBCb3VuZERvbWFpbnM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gbWFu
dWFsUHJldmFsZW50UmVzb3VyY2U7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBtX3RjY1By
ZWZlcmVuY2VFbmFibGVkID0gZG9lc0FwcEhhdmVJVFBFbmFibGVkKCk7Ci0gICAgaWYgKHdpdGhX
ZWJzaXRlRGF0YVN0b3JlICYmICF3aXRoV2Vic2l0ZURhdGFTdG9yZS0+aXNJdHBTdGF0ZUV4cGxp
Y2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90
Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3Mp
OwotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0YVN0b3JlICYmICFtX3dlYnNpdGVEYXRhU3Rv
cmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIG1fd2Vic2l0
ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlRXhpc3RzKCkgJiYgIVdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3Rv
cmUoKS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgV2Vic2l0
ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7
Ci0jZW5kaWYKLQotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVu
dCA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5oYXNTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7
Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAg
ICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gd2l0aFdlYnNpdGVEYXRh
U3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAg
ICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3Q7Ci0gICAg
ICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZURl
YnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICAg
ICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
c2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZp
cnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlOwotICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluID0gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnN0
YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5kRG9tYWlucyA9
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5hcHBCb3VuZERvbWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5tYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0
aFdlYnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9y
YWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3Jh
Z2VRdW90YSgpOwotICAgICAgICAKLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGly
ZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0
b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJl
Y3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29y
a0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
Lm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBjb25zdCBhdXRvJiBoc3RzU3RvcmFnZURpcmVjdG9yeSA9IHdpdGhXZWJzaXRlRGF0YVN0
b3JlLT5yZXNvbHZlZEhTVFNTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghaHN0c1N0
b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdl
RGlyZWN0b3J5ID0gaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUoaHN0c1N0b3JhZ2VEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNp
b246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsK
LSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fd2Vic2l0ZURhdGFTdG9y
ZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9n
VGVzdGluZ0V2ZW50ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5oYXNTdGF0aXN0aWNzVGVzdGluZ0Nh
bGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gbV93ZWJz
aXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAg
ICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0
OwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5l
bmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAg
ICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tp
ZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFi
bGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJh
bWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOwotI2VuZGlmCi0gICAgICAg
ICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0
ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFp
biA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy5zdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0gICAgICAgICAgICBhcHBCb3VuZERv
bWFpbnMgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMuYXBwQm91bmREb21haW5zOwotICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVz
b3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMubWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90
YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdp
blN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyVGhpcmRQYXJ0eU9yaWdpblN0
b3JhZ2VRdW90YSgpOwotCi0gICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9y
eSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsK
LSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsK
LSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVE
aXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29y
a0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNv
bnN0IGF1dG8mIGhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNv
bHZlZEhTVFNTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghaHN0c1N0b3JhZ2VEaXJl
Y3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5
ID0gaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGUoaHN0c1N0b3JhZ2VEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6
OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3MgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0gICAgICAgIGF1dG8gbmV0d29ya0NhY2hlRGlyZWN0
b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwot
ICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rv
cnk7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVE
aXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29y
a0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICB9Ci0KLSNpZiBIQVZFKENGTkVU
V09SS19BTFRFUk5BVElWRV9TRVJWSUNFKQotICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpodHRw
M0VuYWJsZWQoKSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3Rvcnkg
PSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0QWx0ZXJuYXRpdmVTZXJ2aWNlc0RpcmVjdG9yeSgp
OwotICAgICAgICBpZiAoIXBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeS5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3Jp
dGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRl
cm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5o
dHRwM0VuYWJsZWQgPSB0cnVlOwotICAgIH0KLSNlbmRpZgotICAgIGJvb2wgaXNJdHBTdGF0ZUV4
cGxpY2l0bHlTZXQgPSBmYWxzZTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFy
YW1ldGVycyA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzIHsKLSAgICAgICAgV1RG
TW92ZShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KSwKLSAgICAgICAgV1RGTW92ZShy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKSwKLSAgICAgICAg
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcywKLSAgICAgICAgaXNJdHBTdGF0ZUV4cGxpY2l0
bHlTZXQsCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZl
bnQsCi0gICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QsCi0gICAgICAgIGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUsCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKLSAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSwKLSAgICAgICAg
c2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQsCi0jZW5kaWYKLSAgICAgICAgZmlyc3RQ
YXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUsCi0gICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlv
bkRvbWFpbiwKLSAgICAgICAgYXBwQm91bmREb21haW5zLAotICAgICAgICBtYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSwKLSAgICB9OwotCi0gICAgLy8gQWRkIGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBw
YXJhbWV0ZXJzCi0gICAgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVy
cyk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBuZXR3b3JrIHByb2Nlc3MuCi0gICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MocGFyYW1ldGVycyksIDApOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbmV0
d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRRT1MobmV0d29y
a1Byb2Nlc3NMYXRlbmN5UU9TKCksIG5ldHdvcmtQcm9jZXNzVGhyb3VnaHB1dFFPUygpKSwgMCk7
Ci0jZW5kaWYKLQotICAgIG5ldHdvcmtQcm9jZXNzLT51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7
Ci0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdlYnNpdGVEYXRhU3RvcmUpKTsKLSAgICAgICAg
d2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICB9Ci0KLSAg
ICAvLyBNYWtlIHN1cmUgdGhlIG5ldHdvcmsgcHJvY2VzcyBrbm93cyBhYm91dCBhbGwgdGhlIHNl
c3Npb25zIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgYmVmb3JlIGl0IHN0YXJ0ZWQuCi0gICAg
Zm9yIChhdXRvJiBzZXNzaW9uSUQgOiBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAua2V5cygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhp
c3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigqd2Vic2l0ZURhdGFTdG9yZSk7Ci0gICAg
fQotCi0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IFdURk1vdmUobmV0d29ya1Byb2Nlc3MpOwotICAg
IHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0
d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzUHJv
eHkpCiB7Ci0gICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOwotICAgIEFTU0VSVCgmbmV0d29y
a1Byb2Nlc3NQcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsKLQogICAgIGZvciAoYXV0
byYgc3VwcGxlbWVudCA6IG1fc3VwcGxlbWVudHMudmFsdWVzKCkpCiAgICAgICAgIHN1cHBsZW1l
bnQtPnByb2Nlc3NEaWRDbG9zZSgmbmV0d29ya1Byb2Nlc3NQcm94eSk7CiAKQEAgLTc1MSw5ICs0
NjcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29y
a1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcgogICAgIGlmIChtX2F1dG9tYXRpb25TZXNz
aW9uKQogICAgICAgICBtX2F1dG9tYXRpb25TZXNzaW9uLT50ZXJtaW5hdGUoKTsKIAotICAgIC8v
IExlYXZlIHRoZSBwcm9jZXNzIHByb3h5IGFyb3VuZCBkdXJpbmcgY2xpZW50IGNhbGwsIHNvIHRo
YXQgdGhlIGNsaWVudCBjb3VsZCBxdWVyeSB0aGUgcHJvY2VzcyBpZGVudGlmaWVyLgotICAgIG1f
bmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOwotCiAgICAgdGVybWluYXRlU2VydmljZVdvcmtlcnMo
KTsKIH0KIApAQCAtNzY0LDIwICs0NzcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNl
V29ya2VyUHJvY2Vzc0NyYXNoZWQoV2ViUHJvY2Vzc1Byb3h5JiBwcm94eSkKICNlbmRpZgogfQog
Ci12b2lkIFdlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJv
Y2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6Okdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCi17Ci0gICAg
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1Byb3h5LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cigqdGhpcyksIHdlYlByb2Nlc3NQcm94eSA9IG1ha2VXZWFrUHRyKHdlYlByb2Nlc3NQ
cm94eSksIHJlcGx5ID0gV1RGTW92ZShyZXBseSldIChhdXRvJiBjb25uZWN0aW9uSW5mbykgbXV0
YWJsZSB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghSVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVy
SXNWYWxpZChjb25uZWN0aW9uSW5mby5pZGVudGlmaWVyKCkpICYmIHdlYlByb2Nlc3NQcm94eSAm
JiB3ZWFrVGhpcykpIHsKLSAgICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0VS
Uk9SKFByb2Nlc3MsICJnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246IEZhaWxlZCBmaXJzdCBh
dHRlbXB0LCByZXRyeWluZyIpOwotICAgICAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsK
LSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bigqd2ViUHJvY2Vzc1Byb3h5LCBXVEZNb3ZlKHJlcGx5KSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgcmVwbHkoY29ubmVjdGlvbkluZm8pOwotICAgIH0pOwotfQot
CiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z3B1UHJvY2Vz
c0NyYXNoZWQoUHJvY2Vzc0lEIGlkZW50aWZpZXIpCiB7CkBAIC04MDEsMjMgKzUwMCwyNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpnZXRHUFVQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJv
eHkmIHdlYlByb2Nlc3NQcm94eSwgTQogfQogI2VuZGlmCiAKK2Jvb2wgV2ViUHJvY2Vzc1Bvb2w6
OnNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IGZhbHNlOworCiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmIHByb3h5
LCBSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9tYWluLCBQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKLSAgICBBU1NFUlRfVU5VU0VEKHByb3h5LCAmcHJveHkgPT0gbV9uZXR3b3JrUHJvY2Vzcy5n
ZXQoKSk7CisgICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4
aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgaWYgKCF3ZWJzaXRl
RGF0YVN0b3JlKQorICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOworICAgIGlmICghcHJvY2Vzc1Bvb2xzKCkuc2l6ZSgp
KQorICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmPFdlYlByb2Nlc3NQb29sPj4gc2Vy
dmljZVdvcmtlclByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoQVBJOjpQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb246OmNyZWF0ZSgpLmdldCgpKSk7CiAKLSAgICBhdXRvKiB3ZWJzaXRl
RGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3Jl
Rm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7Ci0KLSAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpIHsK
LSAgICAgICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgICAgICBtX3dlYnNpdGVE
YXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5w
dHIoKTsKLSAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSA9IG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQo
KTsKLSAgICB9CisgICAgLy8gQXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdCBwcm9jZXNzIHBv
b2wgdG8gaG9zdCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vzcy4KKyAgICBhdXRvKiBwcm9jZXNz
UG9vbCA9IHByb2Nlc3NQb29scygpWzBdOworICAgIEFTU0VSVChwcm9jZXNzUG9vbCk7CiAKICAg
ICBXZWJQcm9jZXNzUHJveHkqIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgeyBudWxscHRyIH07
Ci0gICAgaWYgKCFtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKLSAgICAgICAg
Zm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGlmIChwcm9j
ZXNzID09IG1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9jZXNzLT5pc0R1bW15UHJvY2Vzc1Byb3h5
KCkpCisKKyAgICBpZiAoIXNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgeworICAg
ICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMpIHsKKyAg
ICAgICAgICAgIGlmIChwcm9jZXNzID09IHByb2Nlc3NQb29sLT5tX3ByZXdhcm1lZFByb2Nlc3Mg
fHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94eSgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgaWYgKCZwcm9jZXNzLT53ZWJzaXRlRGF0YVN0b3JlKCkgIT0gd2Vi
c2l0ZURhdGFTdG9yZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTgyNSwzNSArNTI3
LDM1IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0
aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgPSBwcm9jZXNzLmdldCgp
OwotICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZW5hYmxlU2VydmljZVdv
cmtlcnModXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkp
OworICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZW5hYmxlU2VydmljZVdv
cmtlcnMocHJvY2Vzc1Bvb2wtPnVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2
aWNlV29ya2VycygpKTsKIAotICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0df
SUZfQUxMT1dFRChTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzIHJldXNpbmcgYW4gZXhpc3Rpbmcgd2ViIHByb2Nlc3MgKHByb2Nl
c3M9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIFdFQlBST0NF
U1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRURfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJlc3Rh
Ymxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgcmV1c2luZyBhbiBl
eGlzdGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVy
KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIXNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpIHsKLSAgICAgICAgYXV0byBuZXdQcm9jZXNzUHJveHkg
PSBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZUZvclNlcnZpY2VXb3JrZXJzKCp0aGlzLCBXVEZNb3Zl
KHJlZ2lzdHJhYmxlRG9tYWluKSwgKndlYnNpdGVEYXRhU3RvcmUpOworICAgICAgICBhdXRvIG5l
d1Byb2Nlc3NQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMo
KnByb2Nlc3NQb29sLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgKndlYnNpdGVEYXRhU3Rv
cmUpOwogICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5ID0gbmV3UHJvY2Vzc1Byb3h5
LnB0cigpOwogCi0gICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQo
U2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3Jr
UHJvY2VzcyBjcmVhdGluZyBhIG5ldyBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzIChwcm9jZXM9JXAs
IFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKKyAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVM
RUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyBjcmVhdGluZyBhIG5ldyBzZXJ2aWNl
IHdvcmtlciBwcm9jZXNzIChwcm9jZXM9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsK
IAotICAgICAgICBpbml0aWFsaXplTmV3V2ViUHJvY2VzcyhuZXdQcm9jZXNzUHJveHksIHdlYnNp
dGVEYXRhU3RvcmUpOwotICAgICAgICBtX3Byb2Nlc3Nlcy5hcHBlbmQoV1RGTW92ZShuZXdQcm9j
ZXNzUHJveHkpKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPmluaXRpYWxpemVOZXdXZWJQcm9jZXNz
KG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFTdG9yZSk7CisgICAgICAgIHByb2Nlc3NQb29s
LT5tX3Byb2Nlc3Nlcy5hcHBlbmQoV1RGTW92ZShuZXdQcm9jZXNzUHJveHkpKTsKICAgICB9CiAK
LSAgICBBU1NFUlQoIW1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb250YWlucygqc2VydmljZVdv
cmtlclByb2Nlc3NQcm94eSkpOwotICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5hZGQoKnNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpOworICAgIEFTU0VSVCghc2VydmljZVdvcmtlclByb2Nl
c3NlcygpLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSk7CisgICAgc2Vydmlj
ZVdvcmtlclByb2Nlc3NlcygpLmFkZCgqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSk7CiAKLSAg
ICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lc3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4
dChtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA/IG1fc2VydmljZVdvcmtlclByZWZlcmVuY2Vz
LnZhbHVlKCkgOiBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuc3RvcmUoKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGlmICghbV9zZXJ2aWNlV29ya2VyVXNlckFn
ZW50LmlzTnVsbCgpKQotICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5zZXRTZXJ2
aWNlV29ya2VyVXNlckFnZW50KG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CisgICAgc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eS0+ZXN0YWJsaXNoU2VydmljZVdvcmtlckNvbnRleHQocHJvY2Vz
c1Bvb2wtPm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzID8gcHJvY2Vzc1Bvb2wtPm1fc2Vydmlj
ZVdvcmtlclByZWZlcmVuY2VzLnZhbHVlKCkgOiBwcm9jZXNzUG9vbC0+bV9kZWZhdWx0UGFnZUdy
b3VwLT5wcmVmZXJlbmNlcygpLnN0b3JlKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
KyAgICBpZiAoIXByb2Nlc3NQb29sLT5tX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxsKCkp
CisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3JrZXJVc2Vy
QWdlbnQocHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7CiB9CiAKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKFdlYlByb2Nl
c3NQcm94eSYgcHJvY2VzcykKIHsKLSAgICBBU1NFUlQobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
LmNvbnRhaW5zKHByb2Nlc3MpKTsKLSAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMucmVtb3Zl
KHByb2Nlc3MpOworICAgIEFTU0VSVChzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29udGFpbnMo
cHJvY2VzcykpOworICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5yZW1vdmUocHJvY2Vzcyk7
CiB9CiAjZW5kaWYKIApAQCAtOTIyLDcgKzYyNCw3IEBAIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+
IFdlYlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2FybWVkUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3Jl
CiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCiAgICAgLy8gSW4gcGxhdGZvcm1z
IHVzaW5nIEJ1YmJsZXdyYXAgZm9yIHNhbmRib3hpbmcsIHByZXdhcm1lZCBwcm9jZXNzIGlzIGxh
dW5jaGVkIHVzaW5nIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IFdlYnNpdGVEYXRhU3RvcmUs
CiAgICAgLy8gc28gd2UgZG9uJ3QgdXNlIGl0IGluIGNhc2Ugb2YgdXNpbmcgYSBkaWZmZXJlbnQg
V2Vic2l0ZURhdGFTdG9yZS4KLSAgICBpZiAobV9zYW5kYm94RW5hYmxlZCAmJiBtX3dlYnNpdGVE
YXRhU3RvcmUgJiYgbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpICE9ICZ3ZWJzaXRlRGF0YVN0b3Jl
KQorICAgIGlmIChtX3NhbmRib3hFbmFibGVkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNl
bmRpZgogCkBAIC0xMDMyLDggKzczNCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxp
emVOZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcywgV2Vic2l0ZURhCiAgICAg
ICAgIHByb2Nlc3MuaXNSZXNwb25zaXZlKFtpbml0aWFsaXphdGlvbkFjdGl2aXR5ID0gV1RGTW92
ZShpbml0aWFsaXphdGlvbkFjdGl2aXR5KV0gKGJvb2wpIHsgfSk7CiAgICAgfSk7CiAKLSAgICBl
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyBwYXJhbWV0ZXJzOwogCiAgICAgcGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGggPSBtX3Jl
c29sdmVkUGF0aHMuaW5qZWN0ZWRCdW5kbGVQYXRoOwpAQCAtMTE5OCw5ICs4OTgsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94
eSogcHJvY2VzcykKICAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5pZ25vcmVUaW1lb3V0
c0ZvclRlc3RpbmcoKTsKIAogICAgIG1fY29ubmVjdGlvbkNsaWVudC5kaWRDcmVhdGVDb25uZWN0
aW9uKHRoaXMsIHByb2Nlc3MtPndlYkNvbm5lY3Rpb24oKSk7Ci0KLSAgICBpZiAobV93ZWJzaXRl
RGF0YVN0b3JlKQotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPmRpZENyZWF0ZU5ldHdvcmtQ
cm9jZXNzKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpc2Nvbm5lY3RQcm9jZXNzKFdl
YlByb2Nlc3NQcm94eSogcHJvY2VzcykKQEAgLTEyOTUsMTAgKzk5Miw3IEBAIFJlZjxXZWJQYWdl
UHJveHk+IFdlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VDbGll
bnQsIFJlZjxBUEk6CiAgICAgaWYgKCFwYWdlQ29uZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9y
ZSgpKSB7CiAgICAgICAgIC8vIFdlIHRyeSB0byBhdm9pZCBjcmVhdGluZyB0aGUgZGVmYXVsdCBk
YXRhIHN0b3JlIGFzIGxvbmcgYXMgcG9zc2libGUuCiAgICAgICAgIC8vIEJ1dCBpZiB0aGVyZSBp
cyBhbiBhdHRlbXB0IHRvIGNyZWF0ZSBhIHdlYiBwYWdlIHdpdGhvdXQgYW55IHNwZWNpZmllZCBk
YXRhIHN0b3JlLCB0aGVuIHdlIGhhdmUgdG8gY3JlYXRlIGl0LgotICAgICAgICBpZiAoIW1fd2Vi
c2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotCi0gICAgICAgIHBh
Z2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKG1fd2Vic2l0ZURhdGFTdG9yZS5n
ZXQoKSk7CisgICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpKTsKICAgICB9
CiAKICAgICBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBwcm9jZXNzOwpAQCAtMTMyOSw3ICsxMDIz
LDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UoUGFn
ZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSToKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
CiAgICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcykgewogICAgICAgICBtX3NlcnZp
Y2VXb3JrZXJQcmVmZXJlbmNlcyA9IHBhZ2UtPnByZWZlcmVuY2VzU3RvcmUoKTsKLSAgICAgICAg
Zm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtlclByb2Nlc3Nl
cykKKyAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzZXMoKSkKICAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzLnVwZGF0ZVNl
cnZpY2VXb3JrZXJQcmVmZXJlbmNlc1N0b3JlKCptX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyk7
CiAgICAgfQogICAgIGlmICh1c2VyQ29udGVudENvbnRyb2xsZXIpCkBAIC0xMzU2LDcgKzEwNTAs
NyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2VyVXNlckFnZW50KGNv
bnN0IFN0cmluZyYgdXNlckFnZW50KQogICAgIGlmIChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQg
PT0gdXNlckFnZW50KQogICAgICAgICByZXR1cm47CiAgICAgbV9zZXJ2aWNlV29ya2VyVXNlckFn
ZW50ID0gdXNlckFnZW50OwotICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtlclByb2Nlc3MgOiBt
X3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMpCisgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJv
Y2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgc2VydmljZVdvcmtlclBy
b2Nlc3Muc2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQp
OwogfQogI2VuZGlmCkBAIC0xMzY1LDE1ICsxMDU5LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFn
ZUkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5hZGQoZGF0YVN0
b3JlLnNlc3Npb25JRCgpLCBIYXNoU2V0PFdlYlBhZ2VQcm94eUlkZW50aWZpZXI+KCkpLml0ZXJh
dG9yLT52YWx1ZS5hZGQocGFnZUlEKTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0
LmlzTmV3RW50cnkpOwotCi0gICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklE
KCk7Ci0gICAgaWYgKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25J
RCgpKSB7Ci0gICAgICAgIEFTU0VSVCghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgfHwgZGF0YVN0
b3JlLnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEID09IHNl
c3Npb25JRCk7Ci0gICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoZGF0YVN0b3JlKSk7Ci0gICAgICAg
ICAgICBkYXRhU3RvcmUuY2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAgICB9Ci0gICAgfQog
fQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdlRW5kVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdl
YlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUp
CkBAIC0xNDAxLDcgKzEwODYsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpoYXNQYWdlc1VzaW5n
V2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpCiBEb3dubG9hZFBy
b3h5JiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3Jl
LCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCiB7CiAgICAgYXV0byYgZG93
bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCByZXF1ZXN0LCBpbml0
aWF0aW5nUGFnZSwgeyB9KTsKLSAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBkYXRhU3Rv
cmUuc2Vzc2lvbklEKCk7CiAKICAgICBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFp
bj4gaXNBcHBCb3VuZCA9IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpObzsKICAgICBpZiAo
aW5pdGlhdGluZ1BhZ2UpIHsKQEAgLTE0MTEsMjYgKzEwOTUsMjMgQEAgRG93bmxvYWRQcm94eSYg
V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2Vi
UGFnZVByb3gKICNlbmRpZgogICAgIH0KIAotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAg
Ly8gUmVxdWVzdCdzIGZpcnN0UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5h
bCBVUkwgb2YgdGhlIGRvd25sb2FkIHJlcXVlc3QuCi0gICAgICAgIC8vIFdlIHNldCB0aGUgdmFs
dWUgdG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJMLgotICAgICAgICBpZiAoaW5pdGlhdGluZ1Bh
Z2UpIHsKLSAgICAgICAgICAgIFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0s
IGluaXRpYXRpbmdQYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKLSAgICAgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsK
LSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVE
b21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAg
ICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1l
OjpVc2VyQWdlbnQpKQotICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2Vy
QWdlbnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2VudEZvclVSTChyZXF1ZXN0LnVybCgpKSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5
Rm9yQ29va2llcyhVUkwoKSk7Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVT
aXRlKGZhbHNlKTsKLSAgICAgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQotICAgICAgICAgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2Vu
dCgpKTsKLSAgICAgICAgfQotICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1RvcFNpdGUoZmFs
c2UpOwotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6RG93bmxvYWRSZXF1ZXN0KHNlc3Npb25JRCwgZG93bmxvYWRQcm94eS5kb3dubG9hZElE
KCksIHVwZGF0ZWRSZXF1ZXN0LCBpc0FwcEJvdW5kLCBzdWdnZXN0ZWRGaWxlbmFtZSksIDApOwot
ICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKKyAgICBSZXNvdXJjZVJlcXVlc3QgdXBkYXRl
ZFJlcXVlc3QocmVxdWVzdCk7CisgICAgLy8gUmVxdWVzdCdzIGZpcnN0UGFydHlGb3JDb29raWVz
IHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwgb2YgdGhlIGRvd25sb2FkIHJlcXVlc3QuCisg
ICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3AgbGV2ZWwgZG9jdW1lbnQncyBVUkwuCisgICAg
aWYgKGluaXRpYXRpbmdQYWdlKSB7CisgICAgICAgIFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVS
TCB7IFVSTCB7IH0sIGluaXRpYXRpbmdQYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKKyAg
ICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1Bh
Z2VVUkwpOworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGFyZVJlZ2lzdHJh
YmxlRG9tYWluc0VxdWFsKGluaXRpYXRpbmdQYWdlVVJMLCByZXF1ZXN0LnVybCgpKSk7CisgICAg
ICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1l
OjpVc2VyQWdlbnQpKQorICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2Vu
dChpbml0aWF0aW5nUGFnZS0+dXNlckFnZW50Rm9yVVJMKHJlcXVlc3QudXJsKCkpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhV
UkwoKSk7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOworICAg
ICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6VXNlckFnZW50KSkKKyAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdl
bnQoV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudCgpKTsKICAgICB9CisgICAgdXBkYXRl
ZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZhbHNlKTsKKyAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RG93bmxvYWRSZXF1ZXN0KGRhdGFT
dG9yZS5zZXNzaW9uSUQoKSwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1
ZXN0LCBpc0FwcEJvdW5kLCBzdWdnZXN0ZWRGaWxlbmFtZSksIDApOwogCiAgICAgcmV0dXJuIGRv
d25sb2FkUHJveHk7CiB9CkBAIC0xNDM4LDE3ICsxMTE5LDEyIEBAIERvd25sb2FkUHJveHkmIFdl
YlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBh
Z2VQcm94CiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6cmVzdW1lRG93bmxvYWQoV2Vi
c2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveHkqIGluaXRpYXRpbmdQYWdlLCBj
b25zdCBBUEk6OkRhdGEmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBh
dXRvJiBkb3dubG9hZFByb3h5ID0gY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIFJlc291
cmNlUmVxdWVzdCgpLCBpbml0aWF0aW5nUGFnZSwgeyB9KTsKLSAgICBQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7CiAKICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZTsKICAgICBpZiAoIXBhdGguaXNFbXB0eSgp
KQogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGF0aCwgU2FuZGJveEV4
dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAg
IGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChzZXNzaW9uSUQsIGRvd25s
b2FkUHJveHkuZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwg
c2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOwotICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94
eTsKLSAgICB9Ci0KKyAgICBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBk
b3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBh
dGgsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKICAgICByZXR1cm4gZG93bmxvYWRQcm94
eTsKIH0KIApAQCAtMTUxNywxMSArMTE5Myw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZnJl
c2hQbHVnaW5zKCkKIAogI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogCi1Q
cm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpCi17Ci0g
ICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MgPyBtX25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzSWRl
bnRpZmllcigpIDogMDsKLX0KLQogUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpwcmV3YXJtZWRQ
cm9jZXNzSWRlbnRpZmllcigpCiB7CiAgICAgcmV0dXJuIG1fcHJld2FybWVkUHJvY2VzcyA/IG1f
cHJld2FybWVkUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7CkBAIC0xNTU4LDE0ICsx
MjI5LDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUo
Y29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNp
bmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKTsKICAgICBzZW5k
VG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNT
ZWN1cmUodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSkpOwor
ICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVd
IChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdv
cmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2No
ZW1lQXNTZWN1cmUodXJsU2NoZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3ko
Y29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNp
bmdsZXRvbigpLnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xp
Y3kodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nl
c3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJs
U2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5
KHVybFNjaGVtZSkpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0
b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAg
ZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2No
ZW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpblJl
bGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBA
IC0xNTc4LDE0ICsxMjUzLDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2No
ZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBMZWdhY3lHbG9iYWxT
ZXR0aW5nczo6c2luZ2xldG9uKCkucmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSk7
CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVS
TFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKSk7Ci0gICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3Mo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2No
ZW1lKSk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW3Vy
bFNjaGVtZV0gKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeworICAgICAgICBkYXRhU3Rv
cmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVnaXN0
ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MoY29uc3QgU3RyaW5nJiB1
cmxTY2hlbWUpCiB7CiAgICAgTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnJlZ2lz
dGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNj
aGVtZSkpOwotICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSkpOworICAgIFdlYnNp
dGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFt1cmxTY2hlbWVdIChXZWJzaXRl
RGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0Fj
Y2Vzcyh1cmxTY2hlbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3BsYXlJc29sYXRlZChjb25zdCBTdHJpbmcmIHVybFNjaGVt
ZSkKQEAgLTE2MDYsMTAgKzEyODUsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3Rlckds
b2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25zdAogICAgICAg
ICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxl
cnMoKS5hZGQodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogYWxsUHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVn
aXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwotICAgIH0KKyAg
ICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3
b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdpc3RlclNjaGVtZUZv
ckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxl
cnMoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNjE4LDEwICsxMjk1LDggQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJv
dG9jb2xIYW5kbGVycyhjb24KICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2xvYmFsVVJMU2NoZW1l
c1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkucmVtb3ZlKHVybFNjaGVtZSk7Ci0gICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Q
cm90b2NvbCh1cmxTY2hlbWUpOwotICAgIH0KKyAgICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3Mg
OiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkpCisgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJs
U2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Nh
Y2hlUGFydGl0aW9uZWQoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNjU1LDE2ICsxMzMw
LDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNo
ZU1vZGVsKQogCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpT
ZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpKTsKIAotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQot
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9y
RWFjaFdlYnNpdGVEYXRhU3RvcmUoW2NhY2hlTW9kZWxdIChXZWJzaXRlRGF0YVN0b3JlJiBkYXRh
U3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCksIDApOworICAgIH0p
OwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZv
clRlc3RpbmcoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogewogICAgIHVwZGF0ZUJhY2tGb3J3YXJk
Q2FjaGVDYXBhY2l0eSgpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2Fj
aGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKGNhY2hlTW9kZWwpLCB7IH0sIHsgfSk7Cisg
ICAgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoW2NhY2hlTW9kZWxd
IChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdv
cmtQcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1v
ZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgMCk7CisgICAgfSk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVy
dmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCkBAIC0xNjc0LDEyICsxMzUxLDcgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIHRp
bWVvdXRJbnRlcnZhbCkKIAogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURv
d25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlLCBjb25zdCBGcmFt
ZUluZm9EYXRhJiBmcmFtZUluZm8pCiB7Ci0gICAgcmV0dXJuIGVuc3VyZU5ldHdvcmtQcm9jZXNz
KCZkYXRhU3RvcmUpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCByZXF1ZXN0LCBmcmFt
ZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN5bnRo
ZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQotewotICAgIGVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChiYWNrZ3JvdW5kKTsKKyAgICBy
ZXR1cm4gZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRh
U3RvcmUsICp0aGlzLCByZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFkZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlJlY2VpdmVyTmFt
ZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2Vp
dmVyKQpAQCAtMTc1MCwzMCArMTQyMiw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN0b3BNZW1v
cnlTYW1wbGVyKCkKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6
OlN0b3BNZW1vcnlTYW1wbGVyKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKFQm
JiBtZXNzYWdlLCBVJiYgcmVwbHkpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9u
ZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+c2VuZFN5bmMoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCBzdGQ6OmZvcndhcmQ8VT4ocmVw
bHkpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFs
cyhjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKQotewotICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhzZXNzaW9uSUQpLCAwKTsKLX0KLQotdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQotewotICAgIHRlcm1p
bmF0ZVNlcnZpY2VXb3JrZXJzKCk7Ci0KLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBtX25ldHdvcmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsKLSAg
ICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
dGVybWluYXRlQWxsV2ViQ29udGVudFByb2Nlc3NlcygpCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxX
ZWJQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXMgPSBtX3Byb2Nlc3NlczsKQEAgLTE3ODEsNDAgKzE0
MjksMTUgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlQWxsV2ViQ29udGVudFByb2Nl
c3NlcygpCiAgICAgICAgIHByb2Nlc3MtPnRlcm1pbmF0ZSgpOwogfQogCi12b2lkIFdlYlByb2Nl
c3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9yVGVzdGluZyhDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFt
X25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoKTsKLQot
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcmVwYXJlVG9TdXNwZW5kKElzU3VzcGVuc2lvbklt
bWluZW50OjpObywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCi12b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0
aW5nKCkKLXsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7Ci19Ci0K
LXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpCi17Ci0g
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQ
cm9jZXNzRGlkUmVzdW1lKCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZVNl
cnZpY2VXb3JrZXJzKCkKIHsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgYXV0byBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7Ci0gICAgd2hpbGUgKG1fc2VydmljZVdvcmtl
clByb2Nlc3Nlcy5jb21wdXRlU2l6ZSgpKQotICAgICAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMuYmVnaW4oKS0+ZGlzYWJsZVNlcnZpY2VXb3JrZXJzKCk7CisgICAgd2hpbGUgKHNlcnZpY2VX
b3JrZXJQcm9jZXNzZXMoKS5jb21wdXRlU2l6ZSgpKQorICAgICAgICBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc2VzKCkuYmVnaW4oKS0+ZGlzYWJsZVNlcnZpY2VXb3JrZXJzKCk7CiAjZW5kaWYKIH0KIAot
dm9pZCBXZWJQcm9jZXNzUG9vbDo6Zmx1c2hDb29raWVzKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBz
ZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
LXsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmZsdXNoQ29va2llcyhzZXNzaW9uSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBk
YXRlQXV0b21hdGlvbkNhcGFiaWxpdGllcygpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFJFTU9URV9J
TlNQRUNUT1IpCkBAIC0yMDg5LDE1ICsxNzEyLDIxIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJl
cG9ydFdlYkNvbnRlbnRDUFVUaW1lKFNlY29uZHMgY3B1VGltZSwgdWludDY0X3QgYWN0aXZpdHlT
CiAjZW5kaWYKIH0KIAorV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiYgV2ViUHJvY2Vzc1Bv
b2w6OnNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXM7CisgICAgcmV0dXJuIHBy
b2Nlc3NlczsKK30KKwogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlv
bnMoKQogewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkudXBkYXRlUHJvY2Vzc0Fzc2VydGlv
bigpOworICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZvckVhY2hXZWJzaXRlRGF0YVN0b3JlKFtdIChX
ZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsKKyAgICAgICAgZGF0YVN0b3JlLm5ldHdvcmtQ
cm9jZXNzKCkudXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOworICAgIH0pOwogI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKICAgICAvLyBDaGVjayBvbiBuZXh0IHJ1biBsb29wIHNpbmNlIHRoZSB3
ZWIgcHJvY2VzcyBwcm94eSB0b2tlbnMgYXJlIHByb2JhYmx5IGJlaW5nIHVwZGF0ZWQuCi0gICAg
Y2FsbE9uTWFpblJ1bkxvb3AoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyldIHsK
LSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZm9y
IChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtlclByb2Nlc3NlcykK
KyAgICBjYWxsT25NYWluUnVuTG9vcChbXSB7CisgICAgICAgIGZvciAoYXV0byYgc2VydmljZVdv
cmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAgICAgICAgICBzZXJ2
aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzc0Fzc2VydGlvbigpOwog
ICAgIH0pOwogI2VuZGlmCkBAIC0yMTA3LDcgKzE3MzYsNyBAQCBib29sIFdlYlByb2Nlc3NQb29s
Ojppc1NlcnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQpIGNv
bnN0CiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIC8vIEZJWE1FOiBUaGlzIGlz
IGluZWZmaWNpZW50LgotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclByb2Nl
c3NlcywgW3BhZ2VJRF0oYXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNl
cnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW3BhZ2VJRF0oYXV0byYgcHJvY2VzcykgewogICAgICAg
ICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyUGFnZVByb3h5KHBhZ2VJRCk7CiAgICAg
fSk7CiAjZW5kaWYKQEAgLTIzMjksMTQgKzE5NTgsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpj
bGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpCiB9CiAKICNpZiBFTkFCTEUoUkVT
T1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jv
c3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IHRvRG9tYWluLCBPcHRpb25TZXQ8Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6Rmxh
Zz4gbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgV2ViUGFnZVByb3h5SWRlbnRpZmllciB3ZWJQYWdl
UHJveHlJRCwgUGFnZUlkZW50aWZpZXIgd2ViUGFnZUlEKQotewotICAgIGlmICghbV9uZXR3b3Jr
UHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGlkQ29t
bWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9tYWluLCB0
b0RvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJ
RCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0
aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsKICAg
ICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldERvbWFpbnNXaXRo
VXNlckludGVyYWN0aW9uKGRvbWFpbnMpKTsKQEAgLTIzODcsMjcgKzIwMDgsMjcgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6dXBkYXRlQXVkaWJsZU1lZGlhQXNzZXJ0aW9ucygpCiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCB1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogewotICAgIGlmIChtX3VzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKKyAg
ICBpZiAoc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID09IHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdFQlBST0NFU1NQT09M
X1JFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcz0lZCkiLCB1c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19T
VEFUSUMoU2VydmljZVdvcmtlciwgInNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6
ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzPSVkKSIsIHVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpOwogCi0gICAgbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
ID0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsKLSAgICB0ZXJtaW5hdGVTZXJ2aWNl
V29ya2VycygpOwotICAgIHRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgc191c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
czsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+dGVybWluYXRlU2VydmljZVdvcmtlcnMo
KTsKIH0KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6
Omhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1dG8m
IHByb2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
KCksIFtdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2Vydmlj
ZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKTsKICAgICB9KTsKIH0KIAogYm9v
bCBXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRl
c3RpbmcoKSBjb25zdAogewotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdvcmtlclBy
b2Nlc3NlcywgW10oYXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6OmFueU9mKHNlcnZp
Y2VXb3JrZXJQcm9jZXNzZXMoKSwgW10oYXV0byYgcHJvY2VzcykgewogICAgICAgICByZXR1cm4g
cHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwog
ICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5kZXgg
OTkwNmI3ZDE5YjQ1ZGM1YWQ3MzcwNmZiOWE0Nzc1ODFjN2Y4ZDU2MS4uNjY4YzFlNmQ4ZDk0ZWE5
N2I1YjZhZTAxMGI3OTI4NWJjZTk4NTE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5oCkBAIC03Nyw3ICs3Nyw2IEBAIE9CSkNfQ0xBU1MgV0tQcmVmZXJlbmNlT2Jz
ZXJ2ZXI7CiAKIG5hbWVzcGFjZSBBUEkgewogY2xhc3MgQXV0b21hdGlvbkNsaWVudDsKLWNsYXNz
IEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKIGNsYXNzIERvd25sb2FkQ2xpZW50OwogY2xh
c3MgSFRUUENvb2tpZVN0b3JlOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGVDbGllbnQ7CkBAIC0xNzYs
NyArMTc1LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGlzdG9yeUNsaWVudChzdGQ6OnVuaXF1
ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4mJik7CiAgICAgdm9pZCBzZXRE
b3dubG9hZENsaWVudChVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4mJik7CiAgICAgdm9p
ZCBzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGll
bnQ+JiYpOwotICAgIHZvaWQgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0
ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJik7CiAKICAg
ICB2b2lkIHNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBT
dHJpbmcmKTsKICAgICBjb25zdCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxl
SWRlbnRpZmllcigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi0+Y3VzdG9tV2ViQ29udGVudFNl
cnZpY2VCdW5kbGVJZGVudGlmaWVyKCk7IH0KQEAgLTE4NywxNyArMTg1LDkgQEAgcHVibGljOgog
ICAgIC8vIG51bGwgY2hlY2tzIGluIFdlYlBhZ2VQcm94eS4KICAgICBXZWJQcm9jZXNzUHJveHkq
IGR1bW15UHJvY2Vzc1Byb3h5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QgeyByZXR1
cm4gbV9kdW1teVByb2Nlc3NQcm94aWVzLmdldChzZXNzaW9uSUQpLmdldCgpOyB9CiAKLSAgICAv
LyBXZWJQcm9jZXNzIG9yIE5ldHdvcmtQcm9jZXNzIGFzIGFwcHJvcG9yaWF0ZSBmb3IgY3VycmVu
dCBwcm9jZXNzIG1vZGVsLiBUaGUgY29ubmVjdGlvbiBtdXN0IGJlIG5vbi1udWxsLgotICAgIElQ
Qzo6Q29ubmVjdGlvbiogbmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCk7Ci0KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNzYWdl
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNl
c3Npb24oY29uc3QgVCYgbWVzc2FnZSwgUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gU2VuZHMg
dGhlIG1lc3NhZ2UgdG8gV2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2VzcyBhcyBhcHByb3Bvcmlh
dGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2
b2lkIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlKTsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiB2b2lkIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhU
JiYgbWVzc2FnZSwgVSYmIHJlcGx5KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSk7
Ci0KICAgICB2b2lkIHByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5Kik7
CiAKICAgICBXZWJQcm9jZXNzQ2FjaGUmIHdlYlByb2Nlc3NDYWNoZSgpIHsgcmV0dXJuIG1fd2Vi
UHJvY2Vzc0NhY2hlLmdldCgpOyB9CkBAIC0yMDUsOSArMTk1LDYgQEAgcHVibGljOgogICAgIC8v
IERpc2Nvbm5lY3QgdGhlIHByb2Nlc3MgZnJvbSB0aGUgY29udGV4dC4KICAgICB2b2lkIGRpc2Nv
bm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSopOwogCi0gICAgV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlKiB3ZWJzaXRlRGF0YVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJzaXRlRGF0YVN0
b3JlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRQcmltYXJ5RGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7IG1fd2Vic2l0ZURhdGFTdG9yZSA9ICZkYXRhU3RvcmU7
IH0KLQogICAgIFJlZjxXZWJQYWdlUHJveHk+IGNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYsIFJl
ZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsKIAogICAgIHZvaWQgcGFnZUJlZ2luVXNpbmdX
ZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYnNpdGVEYXRhU3RvcmUm
KTsKQEAgLTI1OCwxMCArMjQ1LDggQEAgcHVibGljOgogICAgIHZvaWQgYWRkU3VwcG9ydGVkUGx1
Z2luKFN0cmluZyYmIG1hdGNoaW5nRG9tYWluLCBTdHJpbmcmJiBuYW1lLCBIYXNoU2V0PFN0cmlu
Zz4mJiBtaW1lVHlwZXMsIEhhc2hTZXQ8U3RyaW5nPiBleHRlbnNpb25zKTsKICAgICB2b2lkIGNs
ZWFyU3VwcG9ydGVkUGx1Z2lucygpOwogCi0gICAgUHJvY2Vzc0lEIG5ldHdvcmtQcm9jZXNzSWRl
bnRpZmllcigpOwogICAgIFByb2Nlc3NJRCBwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcigpOwog
ICAgIHZvaWQgYWN0aXZlUGFnZXNPcmlnaW5zSW5XZWJQcm9jZXNzRm9yVGVzdGluZyhQcm9jZXNz
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYpOwotICAgIGJv
b2wgbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7
CiAKICAgICBXZWJQYWdlR3JvdXAmIGRlZmF1bHRQYWdlR3JvdXAoKSB7IHJldHVybiBtX2RlZmF1
bHRQYWdlR3JvdXAuZ2V0KCk7IH0KIApAQCAtMzAyLDggKzI4Nyw2IEBAIHB1YmxpYzoKICAgICBB
UEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50JiBoaXN0b3J5Q2xpZW50KCkgeyByZXR1cm4g
Km1faGlzdG9yeUNsaWVudDsgfQogICAgIFdlYkNvbnRleHRDbGllbnQmIGNsaWVudCgpIHsgcmV0
dXJuIG1fY2xpZW50OyB9CiAKLSAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYg
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gKm1fY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50OyB9Ci0KICAgICBzdHJ1Y3QgU3RhdGlzdGljcyB7CiAgICAgICAg
IHVuc2lnbmVkIHdrVmlld0NvdW50OwogICAgICAgICB1bnNpZ25lZCB3a1BhZ2VDb3VudDsKQEAg
LTMxOSwxMiArMzAyLDggQEAgcHVibGljOgogICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lKCk7CiAgICAgdm9pZCB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogCi0gICAgdm9p
ZCBmbHVzaENvb2tpZXMoY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwotCiAgICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hG
YWlsRm9yVGVzdGluZyhib29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1
bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQogICAgIGJvb2wgc2hvdWxkTWFrZU5leHRXZWJQ
cm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE1ha2VO
ZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nOyB9Ci0gICAgdm9pZCBzZXRTaG91bGRN
YWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBt
X3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVl
OyB9Ci0gICAgYm9vbCBzaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRl
c3RpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVu
Y2hGYWlsRm9yVGVzdGluZzsgfQogCiAgICAgdm9pZCByZXBvcnRXZWJDb250ZW50Q1BVVGltZShT
ZWNvbmRzIGNwdVRpbWUsIHVpbnQ2NF90IGFjdGl2aXR5U3RhdGUpOwogCkBAIC0zODMsMTkgKzM2
MiwxMyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2Vt
ZW50Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0
ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUgPSBudWxscHRyKTsKLSAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fbmV0d29ya1By
b2Nlc3MuZ2V0KCk7IH0KICAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJv
Y2Vzc1Byb3h5Jik7CiAKLSAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQ
cm9jZXNzUHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkmJik7Ci0KICAgICBib29sIGlzU2VydmljZVdvcmtlclBh
Z2VJRChXZWJQYWdlUHJveHlJZGVudGlmaWVyKSBjb25zdDsKICNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCi0gICAgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29y
a1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
JiYsIFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHN0
YXRpYyB2b2lkIGVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vz
cyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mJiwgUEFM
OjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCByZW1v
dmVGcm9tU2VydmljZVdvcmtlclByb2Nlc3NlcyhXZWJQcm9jZXNzUHJveHkmKTsKLSAgICBzaXpl
X3Qgc2VydmljZVdvcmtlclByb3hpZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VydmljZVdv
cmtlclByb2Nlc3Nlcy5jb21wdXRlU2l6ZSgpOyB9Ci0gICAgdm9pZCBzZXRBbGxvd3NBbnlTU0xD
ZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoYm9vbCBhbGxvd3MpIHsgbV9hbGxvd3NBbnlTU0xD
ZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIgPSBhbGxvd3M7IH0KLSAgICBib29sIGFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dz
QW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOyB9CisgICAgc2l6ZV90IHNlcnZpY2VX
b3JrZXJQcm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
KCkuY29tcHV0ZVNpemUoKTsgfQogICAgIHZvaWQgdXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2Vu
dChjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCk7CiAgICAgY29uc3QgT3B0aW9uYWw8VXNlckNvbnRl
bnRDb250cm9sbGVySWRlbnRpZmllcj4mIHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJG
b3JTZXJ2aWNlV29ya2VycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVy
SURGb3JTZXJ2aWNlV29ya2VyOyB9CiAgICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3Vu
ZEFjdGl2aXR5Rm9yVGVzdGluZygpIGNvbnN0OwpAQCAtNDQ5LDggKzQyMiw2IEBAIHB1YmxpYzoK
ICAgICBib29sIGFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5OyB9CiAgICAgYm9vbCBzaG91bGRUYWtl
VUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRUYWtlVUlCYWNr
Z3JvdW5kQXNzZXJ0aW9uOyB9CiAKLSAgICB2b2lkIHN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQo
Ym9vbCBiYWNrZ3JvdW5kKTsKLSAgICAKICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICB2b2lkIGdh
bWVwYWRDb25uZWN0ZWQoY29uc3QgVUlHYW1lcGFkJiwgV2ViQ29yZTo6RXZlbnRNYWtlc0dhbWVw
YWRzVmlzaWJsZSk7CiAgICAgdm9pZCBnYW1lcGFkRGlzY29ubmVjdGVkKGNvbnN0IFVJR2FtZXBh
ZCYpOwpAQCAtNDg4LDcgKzQ1OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQ3VycmVudE1v
ZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCk7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQotICAgIHZvaWQgZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIo
UEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmcm9tRG9t
YWluLCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21haW4sIE9wdGlvblNl
dDxXZWJDb3JlOjpDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiwgV2ViUGFn
ZVByb3h5SWRlbnRpZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIpOwogICAgIHZvaWQgc2V0
RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbj4mJik7CiAgICAgdm9pZCBzZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRlc3Rpbmco
Y29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIGZpcnN0UGFydHlEb21haW4sIGNvbnN0
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiB0aGlyZFBhcnR5RG9tYWluLCBib29sIHNob3Vs
ZFNjaGVkdWxlTm90aWZpY2F0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAg
IHZvaWQgc2VuZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhSW1tZWRpYXRlbHkoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKQEAgLTUxNSw4ICs0ODUsOCBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXImIHBsdWdJbkF1dG9TdGFydFByb3ZpZGVyKCkgeyBy
ZXR1cm4gbV9wbHVnSW5BdXRvU3RhcnRQcm92aWRlcjsgfQogCi0gICAgdm9pZCBzZXRVc2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOwotICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzczsgfQorICAgIHN0YXRpYyB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MoYm9vbCk7CisgICAgc3RhdGljIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzcygpIHsgcmV0dXJuIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQog
CiAjaWYgRU5BQkxFKENGUFJFRlNfRElSRUNUX01PREUpCiAgICAgdm9pZCBub3RpZnlQcmVmZXJl
bmNlc0NoYW5nZWQoY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBPcHRpb25hbDxTdHJpbmc+JiBlbmNvZGVkVmFsdWUpOwpAQCAtNTI4LDkgKzQ5OCwxNSBAQCBw
dWJsaWM6CiAgICAgaW50MzJfdCB1c2VySWQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJJZDsgfQog
I2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBPU09iamVjdFB0cjx4cGNfb2JqZWN0
X3Q+IHhwY0VuZHBvaW50TWVzc2FnZSgpIGNvbnN0OwotICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9j
ZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBlbmRw
b2ludE1lc3NhZ2UpOworICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIFZl
Y3RvcjxTdHJpbmc+IHVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VE
aXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwor
ICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRp
YyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcg
Y29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTU0
Niw4ICs1MjIsNiBAQCBwcml2YXRlOgogICAgIFdlYlByb2Nlc3NQcm94eSYgY3JlYXRlTmV3V2Vi
UHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9
IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKICAgICB2b2lkIGluaXRpYWxpemVO
ZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYsIFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9j
ZXNzUHJveHk6OklzUHJld2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8p
OwogCi0gICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwotCiAgICAgdm9pZCBoYW5kbGVNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBt
ZXNzYWdlQm9keSk7CiAgICAgdm9pZCBoYW5kbGVTeW5jaHJvbm91c01lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3Nh
Z2VCb2R5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJEYXRhJiYpPiYmKTsKIApAQCAtNTcx
LDE0ICs1NDUsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB1c2VzU2luZ2xlV2ViUHJvY2Vzcygp
IGNvbnN0IHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi0+dXNlc1NpbmdsZVdlYlByb2Nlc3MoKTsg
fQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0
b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9y
eSgpOwotICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAg
IHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBT
dHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7Ci0jZW5kaWYKLQogI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIHZvaWQgcmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKICAg
ICB2b2lkIHVucmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKQEAgLTYyMCw5ICs1ODYs
OCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYWtQdHI8V2ViUHJv
Y2Vzc1Byb3h5Pj4gbV9kdW1teVByb2Nlc3NQcm94aWVzOyAvLyBMaWdodHdlaWdodCBXZWJQcm9j
ZXNzUHJveHkgb2JqZWN0cyB3aXRob3V0IGJhY2tpbmcgcHJvY2Vzcy4KIAogI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKLSAgICBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+IG1fc2Vydmlj
ZVdvcmtlclByb2Nlc3NlczsKKyAgICBzdGF0aWMgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5
PiYgc2VydmljZVdvcmtlclByb2Nlc3NlcygpOwogICAgIGJvb2wgbV93YWl0aW5nRm9yV29ya2Vy
Q29udGV4dFByb2Nlc3NDb25uZWN0aW9uIHsgZmFsc2UgfTsKLSAgICBib29sIG1fYWxsb3dzQW55
U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyIHsgZmFsc2UgfTsKICAgICBTdHJpbmcgbV9z
ZXJ2aWNlV29ya2VyVXNlckFnZW50OwogICAgIE9wdGlvbmFsPFdlYlByZWZlcmVuY2VzU3RvcmU+
IG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzOwogICAgIE9wdGlvbmFsPFVzZXJDb250ZW50Q29u
dHJvbGxlcklkZW50aWZpZXI+IG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNlV29y
a2VyOwpAQCAtNjM4LDcgKzYwMyw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQ
STo6QXV0b21hdGlvbkNsaWVudD4gbV9hdXRvbWF0aW9uQ2xpZW50OwogICAgIFVuaXF1ZVJlZjxB
UEk6OkRvd25sb2FkQ2xpZW50PiBtX2Rvd25sb2FkQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudDsKIAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9uU2Vzc2lv
bj4gbV9hdXRvbWF0aW9uU2Vzc2lvbjsKIApAQCAtNjcwLDggKzYzNCw2IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX21lbW9yeVNhbXBsZXJFbmFibGVkIHsgZmFsc2UgfTsKICAgICBkb3VibGUgbV9t
ZW1vcnlTYW1wbGVySW50ZXJ2YWwgeyAxNDAwLjAgfTsKIAotICAgIFJlZlB0cjxXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU+IG1fd2Vic2l0ZURhdGFTdG9yZTsKLQogICAgIHR5cGVkZWYgSGFzaE1h
cDxjb25zdCBjaGFyKiwgUmVmUHRyPFdlYkNvbnRleHRTdXBwbGVtZW50PiwgUHRySGFzaDxjb25z
dCBjaGFyKj4+IFdlYkNvbnRleHRTdXBwbGVtZW50TWFwOwogICAgIFdlYkNvbnRleHRTdXBwbGVt
ZW50TWFwIG1fc3VwcGxlbWVudHM7CiAKQEAgLTcwMyw4ICs2NjUsNiBAQCBwcml2YXRlOgogCiAg
ICAgYm9vbCBtX3Byb2Nlc3NUZXJtaW5hdGlvbkVuYWJsZWQgeyB0cnVlIH07CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKLQogICAg
IEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+PiBtX2RpY3Rpb25h
cnlDYWxsYmFja3M7CiAKICAgICBib29sIG1fbWVtb3J5Q2FjaGVEaXNhYmxlZCB7IGZhbHNlIH07
CkBAIC03MTMsNyArNjczLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYWx3YXlzUnVuc0F0QmFj
a2dyb3VuZFByaW9yaXR5OwogICAgIGJvb2wgbV9zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0
aW9uOwogICAgIGJvb2wgbV9zaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3RjY1ByZWZlcmVuY2VF
bmFibGVkIHsgZmFsc2UgfTsKIAogICAgIFVzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIgbV91c2Vy
T2JzZXJ2YWJsZVBhZ2VDb3VudGVyOwpAQCAtODA1LDMxICs3NjQsMTMgQEAgcHJpdmF0ZToKICNl
bHNlCiAgICAgYm9vbCBtX2lzRGVsYXllZFdlYlByb2Nlc3NMYXVuY2hEaXNhYmxlZCB7IGZhbHNl
IH07CiAjZW5kaWYKLSAgICBib29sIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyB7
IGZhbHNlIH07CisgICAgc3RhdGljIGJvb2wgc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBIYXNoU2V0
PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBtX2RvbWFpbnNXaXRoVXNlckludGVyYWN0aW9u
OwogI2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBPU09iamVjdFB0cjx4cGNfb2Jq
ZWN0X3Q+IG1fZW5kcG9pbnRNZXNzYWdlOwotI2VuZGlmCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1l
c3NhZ2UpCi17Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+
Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZv
cndhcmQ8VD4obWVzc2FnZSksIDApOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNz
YXJ5KFQmJiBtZXNzYWdlKQotewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotfQotCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvQWxsUHJvY2Vz
c2VzKGNvbnN0IFQmIG1lc3NhZ2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmNwcAppbmRleCBkNjYxMDMzOGI2Y2Y2MGEyN2E2Zjc1ZGFlYzM0OWE4ZjcyYWIz
Yjg1Li41ZTJjNzA4ZjIyZjk3YmVhZjM3MDkzNTJjYjY5ZTNkNGMyOGUxZDliIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTI2OCw2ICsyNjgsOSBA
QCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6c2V0V2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0
b3JlJiBkYXRhU3RvcmUpCiB7CiAgICAgQVNTRVJUKCFtX3dlYnNpdGVEYXRhU3RvcmUpOwogICAg
IG1fd2Vic2l0ZURhdGFTdG9yZSA9ICZkYXRhU3RvcmU7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgZGF0YVN0b3JlLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKCp0
aGlzKTsKKyNlbmRpZgogICAgIHVwZGF0ZVJlZ2lzdHJhdGlvbldpdGhEYXRhU3RvcmUoKTsKICAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cyhwcm9jZXNzUG9vbCgpLndlYlByb2Nlc3NEYXRhU3RvcmVQYXJhbWV0ZXJzKCp0aGlzLCBkYXRh
U3RvcmUpKSwgMCk7CiB9CkBAIC03MzgsNyArNzQxLDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6
OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbiwg
TWUKIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihN
ZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRl
bGF5ZWRSZXBseSYmIHJlcGx5KQogewotICAgIG1fcHJvY2Vzc1Bvb2wtPmdldE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOworICAgIHdlYnNpdGVEYXRhU3Rv
cmUoKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKnRoaXMsIFdURk1vdmUocmVwbHkpKTsK
IH0KIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKQEAgLTk1NSw5ICs5NTgsOCBAQCB2b2lkIFdl
YlByb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hlciogbGF1bmNo
ZXIsIElQQzo6Q29ubmVjdAogICAgIH0KIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGF1dG8g
ZW5kcG9pbnRNZXNzYWdlID0gcHJvY2Vzc1Bvb2woKS54cGNFbmRwb2ludE1lc3NhZ2UoKTsKLSAg
ICBpZiAoZW5kcG9pbnRNZXNzYWdlKQotICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3Nh
Z2UoY29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCksIGVuZHBvaW50TWVzc2FnZS5nZXQoKSk7
CisgICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcygqdGhpcyk7CiAjZW5k
aWYKIAogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3dlYkNvbm5lY3Rpb24pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9y
ZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vi
c2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4IDdjNDQwODUxNjc3MzY4YjVkZjg5YTg2ZmY0ZDNi
NTE1MzRiOTBiYjcuLmNiOGIzYmFhNGFkMGI1NjgxNTUxNWMwNWUxODEzNmIzMjRmM2EyZmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNp
dGVEYXRhU3RvcmVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KQEAgLTI4LDEwICsyOCwxMiBAQAog
CiAjaW1wb3J0ICJDb29raWVTdG9yYWdlVXRpbHNDRi5oIgogI2ltcG9ydCAiRGVmYXVsdFdlYkJy
b3dzZXJDaGVja3MuaCIKKyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQg
IlNhbmRib3hVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlN0b3JhZ2VNYW5hZ2VyLmgiCiAjaW1wb3J0
ICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKICNpbXBvcnQgIldlYlByZWZlcmVuY2Vz
S2V5cy5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0ICJXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKICNpbXBvcnQgIldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgpAQCAtNDQs
NiArNDYsNyBAQAogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYv
UHJvY2Vzc1ByaXZpbGVnZS5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgorI2ltcG9ydCA8d3RmL2Nv
Y29hL0VudGl0bGVtZW50cy5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTU2Miw0ICs1NjUsMjggQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZWluaXRpYWxpemVBcHBCb3VuZERvbWFpbnMoKQogfQogI2VuZGlmCiAK
K2Jvb2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRl
c3RpbmcoY29uc3QgU3RyaW5nJiBlbnRpdGxlbWVudCkKK3sKKyAgICByZXR1cm4gV1RGOjpoYXNF
bnRpdGxlbWVudChuZXR3b3JrUHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigp
LCBlbnRpdGxlbWVudC51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJv
eHkmIHByb2Nlc3MpCit7CisgICAgaWYgKHByb2Nlc3Muc3RhdGUoKSAhPSBBdXhpbGlhcnlQcm9j
ZXNzUHJveHk6OlN0YXRlOjpSdW5uaW5nKQorICAgICAgICByZXR1cm47CisgICAgYXV0byogY29u
bmVjdGlvbiA9IHByb2Nlc3MuY29ubmVjdGlvbigpOworICAgIGlmICghY29ubmVjdGlvbikKKyAg
ICAgICAgcmV0dXJuOworICAgIGF1dG8gbWVzc2FnZSA9IG5ldHdvcmtQcm9jZXNzKCkueHBjRW5k
cG9pbnRNZXNzYWdlKCk7CisgICAgaWYgKCFtZXNzYWdlKQorICAgICAgICByZXR1cm47CisgICAg
eHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNzYWdlKGNvbm5lY3Rpb24tPnhwY0Nvbm5lY3Rpb24oKSwg
bWVzc2FnZSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNz
WFBDRW5kcG9pbnRUb0FsbFdlYlByb2Nlc3NlcygpCit7CisgICAgZm9yIChhdXRvJiBwcm9jZXNz
IDogbV9wcm9jZXNzZXMpCisgICAgICAgIHNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9X
ZWJQcm9jZXNzKHByb2Nlc3MpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IDViMGFlYjcx
YmQ5N2M0M2JjMjBlNDNiMTFiNjA2NTEyYjJjYWFiMzcuLjQxMTkxZmViYmMzZmJiYmY2NGU2ZTk4
YWI3NmY3ZDBlYzVlZTE0Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0zMiwxMSArMzIsMTQgQEAK
ICNpbmNsdWRlICJBdXRoZW50aWNhdG9yTWFuYWdlci5oIgogI2luY2x1ZGUgIkRldmljZUlkSGFz
aFNhbHRTdG9yYWdlLmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAi
TG9nZ2luZy5oIgogI2luY2x1ZGUgIk1vY2tBdXRoZW50aWNhdG9yTWFuYWdlci5oIgorI2luY2x1
ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgi
CiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3
YXJkQ2FjaGUuaCIKKyNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRl
ICJXZWJLaXQySW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1
ZGUgIldlYlByb2Nlc3NDYWNoZS5oIgpAQCAtNzUsNiArNzgsMTAgQEAKICNpbmNsdWRlICJTT0F1
dGhvcml6YXRpb25Db29yZGluYXRvci5oIgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkK
KyNpbmNsdWRlICJEZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5oIgorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBzdGF0aWMgYm9vbCBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxP
cmlnaW5zOwpAQCAtODMsMTMgKzkwLDE5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dX
ZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zKCkKICAgICBhbGxvd3NXZWJzaXRlRGF0YVJl
Y29yZHNGb3JBbGxPcmlnaW5zID0gdHJ1ZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNz
aW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgbm9uRGVmYXVsdERhdGFTdG9yZXMoKQorc3RhdGlj
IEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgYWxsRGF0YVN0b3Jl
cygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+PiBt
YXA7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmb3JFYWNo
V2Vic2l0ZURhdGFTdG9yZShGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRhU3RvcmUmKT4mJiBmdW5j
dGlvbikKK3sKKyAgICBmb3IgKGF1dG8qIGRhdGFTdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1
ZXMoKSkKKyAgICAgICAgZnVuY3Rpb24oKmRhdGFTdG9yZSk7Cit9CisKIFJlZjxXZWJzaXRlRGF0
YVN0b3JlPiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGVOb25QZXJzaXN0ZW50KCkKIHsKICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVDb25m
aWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpObyksIFBBTDo6U2Vzc2lvbklEOjpnZW5l
cmF0ZUVwaGVtZXJhbFNlc3Npb25JRCgpKSk7CkBAIC0xMTUsNyArMTI4LDcgQEAgV2Vic2l0ZURh
dGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRp
b24+JiYgY29uZmlndXIKICNlbmRpZgogewogICAgIFdURjo6c2V0UHJvY2Vzc1ByaXZpbGVnZXMo
YWxsUHJpdmlsZWdlcygpKTsKLSAgICBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwor
ICAgIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgp
OwogCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTEyOCwxNyArMTQxLDEyIEBA
IFdlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKCkKIAogICAgIHBsYXRmb3JtRGVz
dHJveSgpOwogCi0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgQVNTRVJUKG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0
KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsKLSAgICAgICAgbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5y
ZW1vdmUobV9zZXNzaW9uSUQpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgQVNTRVJUKGFsbERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQp
ID09IHRoaXMpOworICAgIGFsbERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOworICAg
IG5ldHdvcmtQcm9jZXNzKCkucmVtb3ZlU2Vzc2lvbigqdGhpcyk7CiAjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQotICAgICAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkKLSAgICAgICAgICAgIGdwdVByb2Nlc3NQcm94eS0+
cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgaWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94
eSA9IEdQVVByb2Nlc3NQcm94eTo6c2luZ2xldG9uSWZDcmVhdGVkKCkpCisgICAgICAgIGdwdVBy
b2Nlc3NQcm94eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAjZW5kaWYKIH0KIApAQCAt
MTUxLDcgKzE1OSw2IEBAIHN0YXRpYyBSZWZQdHI8V2Vic2l0ZURhdGFTdG9yZT4mIGdsb2JhbERl
ZmF1bHREYXRhU3RvcmUoKQogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmUoKQogewogICAgIEluaXRpYWxpemVXZWJLaXQyKCk7Ci0KICAgICBh
dXRvJiBzdG9yZSA9IGdsb2JhbERlZmF1bHREYXRhU3RvcmUoKTsKICAgICBpZiAoIXN0b3JlKQog
ICAgICAgICBzdG9yZSA9IGFkb3B0UmVmKG5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpZZXMpLCBQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSk7CkBAIC0xNjksMTcgKzE3Niw0NyBAQCBib29sIFdl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKQogICAgIHJldHVybiAhIWds
b2JhbERlZmF1bHREYXRhU3RvcmUoKTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXli
ZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lz
dGVyV2l0aFNlc3Npb25JRE1hcCgpCiB7Ci0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBub25E
ZWZhdWx0RGF0YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7Ci0gICAgICAgIEFTU0VS
VF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0byByZXN1bHQgPSBh
bGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VE
KHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworfQorCitXZWJzaXRlRGF0YVN0b3JlKiBXZWJz
aXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCit7CisgICAgcmV0dXJuIGFsbERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklE
KTsKK30KKworc3RhdGljIFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBuZXR3b3JrUHJvY2Vzc0Zv
clNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQoreworI2lmIFBMQVRGT1JNKEdUSykg
fHwgUExBVEZPUk0oV1BFKQorICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgeworICAg
ICAgICAvLyBSZXVzZSBhIHByZXZpb3VzIHBlcnNpc3RlbnQgc2Vzc2lvbiBuZXR3b3JrIHByb2Nl
c3MgZm9yIGVwaGVtZXJhbCBzZXNzaW9ucy4KKyAgICAgICAgZm9yIChhdXRvKiBkYXRhU3RvcmUg
OiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGlmIChkYXRhU3RvcmUt
PmlzUGVyc2lzdGVudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlUmVmKGRhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3MoKSk7CisgICAgICAgIH0KICAgICB9CisgICAgcmV0dXJuIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmNyZWF0ZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vzc2lv
bklEKTsKKyAgICByZXR1cm4gTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQcm9j
ZXNzKCk7CisjZW5kaWYKIH0KIAotV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6
ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCkKK05ldHdvcmtQcm9jZXNzUHJveHkmIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQ
cm9jZXNzKCkKIHsKLSAgICByZXR1cm4gc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkgPyBub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpIDog
bnVsbHB0cjsKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpIHsKKyAgICAgICAgbV9uZXR3b3Jr
UHJvY2VzcyA9IG5ldHdvcmtQcm9jZXNzRm9yU2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOworICAgIH0KKworICAgIHJldHVy
biAqbV9uZXR3b3JrUHJvY2VzczsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eSYgV2Vic2l0ZURh
dGFTdG9yZTo6bmV0d29ya1Byb2Nlc3MoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0
PFdlYnNpdGVEYXRhU3RvcmUmPigqdGhpcykubmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlclByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNz
KQpAQCAtMTk1LDEyICsyMzIsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVucmVnaXN0ZXJQ
cm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUo
cHJvY2Vzcyk7CiB9CiAKLVdlYlByb2Nlc3NQb29sKiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNz
UG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkKLXsKLSAgICBhdXRvIHBvb2xzID0gcHJv
Y2Vzc1Bvb2xzKDEpOwotICAgIHJldHVybiBwb29scy5pc0VtcHR5KCkgPyBudWxscHRyIDogcG9v
bHMuYmVnaW4oKS0+Z2V0KCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURp
cmVjdG9yaWVzSWZOZWNlc3NhcnkoKQogewogICAgIGlmIChtX2hhc1Jlc29sdmVkRGlyZWN0b3Jp
ZXMpCkBAIC00NDAsMjggKzQ3MSwyMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0
YUFuZEFwcGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogI2VuZGlm
CiAKICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJv
Y2Vzc0FjY2Vzc1R5cGVGb3JEYXRhRmV0Y2goZGF0YVR5cGVzLCAhaXNQZXJzaXN0ZW50KCkpOwot
ICAgIGlmIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUgIT0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5v
bmUpIHsKLSAgICAgICAgYXV0byBwb29scyA9IG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9PSBQ
cm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoID8gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgOiBwcm9jZXNz
UG9vbHMoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewotICAgICAgICAgICAg
Y2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAg
aWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgUHJv
Y2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3ModGhpcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6Ci0gICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICBzd2l0Y2ggKG5ldHdvcmtQ
cm9jZXNzQWNjZXNzVHlwZSkgeworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoK
KyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nl
c3MpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpP
bmx5SWZMYXVuY2hlZDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAg
ICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAg
ICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Np
b25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nl
c3NQb29sXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkgeworICAgICAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+ZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBmZXRjaE9w
dGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CiAg
ICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2so
V1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKKyAgICAgICAgYnJl
YWs7CiAgICAgfQogCiAgICAgYXV0byB3ZWJQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVXZWJQ
cm9jZXNzQWNjZXNzVHlwZUZvckRhdGFGZXRjaChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7
CkBAIC03MjQsMzEgKzc0OCwyNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEo
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogICAgIGJvb2wg
ZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVEYXRhID0gZmFsc2U7CiAjZW5k
aWYKICAgICBhdXRvIG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSA9IGNvbXB1dGVOZXR3b3JrUHJv
Y2Vzc0FjY2Vzc1R5cGVGb3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7
Ci0gICAgaWYgKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSAhPSBQcm9jZXNzQWNjZXNzVHlwZTo6
Tm9uZSkgewotICAgICAgICBhdXRvIHBvb2xzID0gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID09
IFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2ggPyBlbnN1cmVQcm9jZXNzUG9vbHMoKSA6IHByb2Nl
c3NQb29scygpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKLSAg
ICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7Ci0gICAgICAgICAg
ICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAg
ICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBQ
cm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHByb2Nlc3NQb29sLT5l
bnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKLSAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLQorICAgIHN3aXRjaCAobmV0d29y
a1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNo
OgorICAgICAgICBuZXR3b3JrUHJvY2VzcygpOworICAgICAgICBBU1NFUlQobV9uZXR3b3JrUHJv
Y2Vzcyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6
Ok9ubHlJZkxhdW5jaGVkOgorICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewogICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAg
ICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nl
c3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBw
cm9jZXNzUG9vbF0geworICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlV2Vic2l0
ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0gewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVu
ZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQogICAgICAgICAgICAgZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0
ZVdlYnNpdGVEYXRhID0gdHJ1ZTsKICNlbmRpZgogICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU6CisgICAgICAgIGJyZWFrOwogICAgIH0K
IAogICAgIGF1dG8gd2ViUHJvY2Vzc0FjY2Vzc1R5cGUgPSBjb21wdXRlV2ViUHJvY2Vzc0FjY2Vz
c1R5cGVGb3JEYXRhUmVtb3ZhbChkYXRhVHlwZXMsICFpc1BlcnNpc3RlbnQoKSk7CkBAIC04OTMs
MTQgKzkxMCw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAjaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRh
VHlwZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcykpIHsKICAgICAgICAgaWYgKCFkaWROb3RpZnlO
ZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEpIHsKLSAgICAgICAgICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAg
ICAgICAgICAgICAgICAgICAgcHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQs
IGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewotICAgICAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJh
Y2soKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVXZWJzaXRlRGF0YSht
X3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2Fs
bGJhY2soKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKQEAgLTk5NCwxMiArMTAwNiwxMCBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7
CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAg
ICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgotICAgICAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcyh0aGlzKTsKKyAgICAgICAgICAgICAgICBu
ZXR3b3JrUHJvY2VzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBj
YXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOgpAQCAtMTAyMSw3ICsxMDMxLDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRh
dGFUeXBlcywgY29uc3QgVmUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9u
SUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFt
ZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xd
IHsKKyAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkuZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmln
aW5zKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1lcywgSFNU
U0NhY2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Is
IHByb2Nlc3NQb29sXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1v
dmVQZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC0xMTgw
LDE4ICsxMTkwLDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKFNlY29uZHMgc2Vjb25k
cykKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNl
bmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGlt
ZW91dEZvclRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0U2Vy
dmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCksIDApOwotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmcoc2Vjb25kcyksIE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJl
cGx5KCksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0U2VydmljZVdvcmtl
clRpbWVvdXRGb3JUZXN0aW5nKCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRT
ZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmc6OlJlcGx5KCks
IDApOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6UmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpLCBN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZv
clRlc3Rpbmc6OlJlcGx5KCksIDApOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKQEAgLTEyMDEsOCArMTIwNSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50LCBDb21wbGV0CiAK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRy
eUNvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3
b3JrUHJvY2VzcygpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVt
RW50cnlDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMTEs
OCArMTIxNCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRv
KHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uCiAgICAgCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFBy
dW5lRW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQ
cnVuZUVudHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRm
YXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTIyMSw4ICsxMjIzLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9u
SGFuZGxlcjwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQsIHNl
Y29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMzEsMjAg
KzEyMzIsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLAogCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1U
aW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29u
ZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAgICAgCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kdW1wUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjU2LDEyICsxMjUwLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2kKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1By
ZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUHJldmFsZW50UmVzb3Vy
Y2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dy
YW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBp
c1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjczLDEyICsxMjYyLDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAg
ICBwcm9jZXNzLT5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuaXNHcmFu
ZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyOTIsOCArMTI3Niw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291
cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldFByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
MzA3LDEwICsxMjkwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNv
dXJjZUZvckRlYnVnTW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGkKICAgICAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFByZXZhbGVudFJl
c291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
IGlzVmVyeVByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzIyLDEyICsxMzAy
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICAgICAgcHJvY2Vzcy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTEzNDEsMTAgKzEzMTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZQogICAgIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzUz
LDggKzEzMjUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVz
b3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdgogICAgIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRT
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25J
RCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIG5l
dHdvcmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jk
c1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFp
bihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzY4LDIyICsxMzM5
LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFp
bihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYg
c3ViRnJhbWVVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAg
ICBuZXR3b3JrUHJvY2VzcygpLmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFt
ZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTM5NywyMyArMTM2MCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVQogCiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRv
cEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHBy
b2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFu
ZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lzdGVyZWRBc1N1YnJlc291
cmNlVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVz
b3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkws
IGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDI3LDEwICsxMzgxLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNv
dXJjZVVSTCwKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJv
Y2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGly
ZWN0ZWRUbyB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3Vi
cmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NDIsMTIgKzEzOTMsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNv
bnN0IFVSTCYgc3VicmVzb3VyY2VVUgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJl
ZGlyZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RG
cm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNl
VVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25z
dCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTQ1OSwxMiArMTQwNSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNv
bnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5z
ZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVS
TCYgdG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NzYsMjUgKzE0MTcsMTQg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShj
b25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJh
bWVVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRp
cmVjdGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lz
dGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgY29uc3Qg
VVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5pc1JlZ2lz
dGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE1MDYs
NjAgKzE0MzYsNDEgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291
cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5j
bGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRQYXJhbWV0ZXJz
VG9EZWZhdWx0VmFsdWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFBhcmFtZXRlcnNUb0Rl
ZmF1bHRWYWx1ZXMobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlc2V0UGFyYW1ldGVyc1RvRGVm
YXVsdFZhbHVlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSgpCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnN1Ym1pdFRlbGVtZXRy
eShtX3Nlc3Npb25JRCwgW10geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdWJt
aXRUZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2RpZmll
ZFNpbmNlLCBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1f
c2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCku
c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRT
aW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1
bW1hcnkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIHN0cnVjdCBDYWxsYmFja0FnZ3Jl
Z2F0b3IgOiBSZWZDb3VudGVkPENhbGxiYWNrQWdncmVnYXRvcj4gewotICAgICAgICBDYWxsYmFj
a0FnZ3JlZ2F0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
CisgICAgc3RydWN0IExvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yIDogUmVmQ291bnRlZDxMb2NhbENh
bGxiYWNrQWdncmVnYXRvcj4geworICAgICAgICBMb2NhbENhbGxiYWNrQWdncmVnYXRvcihDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OlRoaXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIDog
bV9jb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAg
ewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAgICAgfTsKIAot
ICAgICAgICB+Q2FsbGJhY2tBZ2dyZWdhdG9yKCkKKyAgICAgICAgfkxvY2FsQ2FsbGJhY2tBZ2dy
ZWdhdG9yKCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKIApAQCAtMTU3NCwzOCArMTQ4NSwzMSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2bwogICAg
ICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4gbV9jb21wbGV0aW9uSGFuZGxlcjsKICAgICAg
ICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+
IG1fcmVzdWx0czsKICAgICB9OwotCi0gICAgUmVmUHRyPENhbGxiYWNrQWdncmVnYXRvcj4gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gYWRvcHRSZWYobmV3IENhbGxiYWNrQWdncmVnYXRvcihXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVu
c3VyZVByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFJbW1lZGlhdGVseShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Ci0gICAgICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcykuZ2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFTdW1tYXJ5KG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBw
cm9jZXNzUG9vbF0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQ
YXJ0eURhdGE+JiYgZGF0YSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
YWRkUmVzdWx0KFdURk1vdmUoZGF0YSkpOwotICAgICAgICAgICAgfSk7CisgICAgCisgICAgYXV0
byBsb2NhbENhbGxiYWNrQWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBMb2NhbENhbGxiYWNrQWdn
cmVnYXRvcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworICAgIAorICAgIGF1dG8gd3Rm
Q2FsbGJhY2tBZ2dyZWdhdG9yID0gV1RGOjpDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBsb2NhbENhbGxiYWNrQWdncmVnYXRv
cl0geworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhU3VtbWFyeShtX3Nlc3Npb25JRCwgW2xvY2FsQ2FsbGJhY2tBZ2dyZWdhdG9yXShWZWN0b3I8
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiBkYXRhKSB7
CisgICAgICAgICAgICBsb2NhbENhbGxiYWNrQWdncmVnYXRvci0+YWRkUmVzdWx0KFdURk1vdmUo
ZGF0YSkpOwogICAgICAgICB9KTsKLSAgICB9CisgICAgfSk7CisgICAgCisgICAgZm9yIChhdXRv
KiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAg
ICAgcHJvY2Vzc1Bvb2wtPnNlbmRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YUltbWVkaWF0ZWx5
KFt3dGZDYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlclN0
YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAg
IAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVs
ZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5k
ZmF0aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgbmV0d29ya1Byb2Nlc3MoKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1f
c2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2lu
Z1VwZGF0ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxl
Q29va2llQmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNjaGVkdWxlQ29v
a2llQmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJl
Y29yZHNQcm9jZXNzaW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE2MTQsMjQgKzE1MTgsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hl
ZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmQKICAg
ICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNj
aGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vz
c2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFi
bGVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxz
ZSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMo
bV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRz
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjQz
LDIyICsxNTM2LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3Qg
VVJMJiB1cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhCiAKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2Vzcygp
LnNldExhc3RTZWVuKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kb21haW5JREV4aXN0
c0luRGF0YWJhc2UobV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3Jr
UHJvY2VzcygpLmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgdG9w
RnJhbWVVcmwxLCBjb25zdCBVUkwmIHRvcEZyYW1lVXJsMiwgU2Vjb25kcyBsYXN0U2VlbiwgYm9v
bCBoYWRVc2VySW50ZXJhY3Rpb24sIFNlY29uZHMgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwg
Ym9vbCBpc0dyYW5kZmF0aGVyZWQsIGJvb2wgaXNQcmV2YWxlbnQsIGJvb2wgaXNWZXJ5UHJldmFs
ZW50LCB1bnNpZ25lZCBkYXRhUmVjb3Jkc1JlbW92ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2NzAsMTAgKzE1NTUsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29u
c3QgVVJMJiB0b3BGcgogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3MtPm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BG
cmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwg
bGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwg
aXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jk
c1JlbW92ZWQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0
b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFs
ZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3Rpbmco
Y29uc3QgVVJMJiB1cmwsIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2ODUsMTggKzE1NjcsMTQg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGlu
Zyhjb25zdCBVUkwmIHVybCwgYm9vbCBoYWQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBwcm9jZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVy
YWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVu
dCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5l
dHdvcmtQcm9jZXNzKCkuaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlv
biwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2Vz
cygpLnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQs
IHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MDQs
OCArMTU4Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxlCiAgICAgdXNlRXhwbGljaXRJVFBT
dGF0ZSgpOwogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVu
c3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
c3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NUZXN0KG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhX
ZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8U3RyaW5nPiYmIGRvbWFpbnMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcxNiw3ICsx
NTkzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmll
cyhXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIHdlYlBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nl
c3NFbnRyaWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAK
IApAQCAtMTcyNCw4ICsxNjAxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9M
aXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkgKIHsKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1l
VG9MaXZlVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFj
dGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTczOSwxMCArMTYxNSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmxv
Z1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc1
NCwxMyArMTYyNyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0
aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhhc0hh
ZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3Vi
VXJsLCBjb25zdCBVUkwmIHRvcFVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE3NzIsMTMgKzE2MzksNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJs
LCBjb25zdAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5p
c1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0
b3BVcmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJM
JiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTE3OTIsMTAgKzE2NTMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclVzZXJJbnRlcmFj
dGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5jbGVh
clVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRo
ZXJlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTgwOSwxMCArMTY2Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJl
ZChjb25zdCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvCiAgICAgCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRHcmFuZGZhdGhl
cmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dy
YW5kZmF0aGVyZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRo
TGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZnJvbVVSTCwgY29uc3QgVVJMJiB0
b1VSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTgyMSw2MiArMTY3NiwzOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxv
YWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZgogICAgIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0Q3Jvc3NTaXRl
TG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25G
b3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21V
UkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRl
TG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDcm9zc1NpdGVMb2Fkc1dp
dGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRDcm9zc1NpdGVMb2Fk
c1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGVsZXRlQ29va2llc0Zv
clRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5k
ZWxldGVDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5kZWxldGVDb29raWVzRm9yVGVz
dGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5j
bHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nKGNvbnN0IFVSTCYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBj
b25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0xvY2FsU3RvcmFnZSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmhh
c0xvY2FsU3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuaGFzSXNvbGF0
ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVz
dGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5n
KGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQ
cm9jZXNzKCkuc2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0x
OTA3LDEwICsxNzM4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29v
a2llQmxvY2tpbmdNb2RlKFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWUKICAgICAgICAgICAgIHdl
YlByb2Nlc3Muc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShibG9ja2luZ01vZGUsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MtPnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2Nr
aW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lvbklELCBibG9j
a2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudEZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTE4LDEwICsxNzQ2LDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1l
U2l0ZVN0cmljdEVuZm9yY2UKICAgICBhdXRvIGZsYWcgPSBlbmFibGVkID8gV2ViQ29yZTo6U2Ft
ZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6OlllcyA6IFdlYkNvcmU6OlNhbWVTaXRlU3Ry
aWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3Ry
aWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZEVuYmxl
U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZsYWcsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9y
VGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE5MjksMjAgKzE3NTQsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGUKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBhdXRvIG1vZGUgPSBlbmFibGVk
ID8gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tp
ZXMgOiBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6Tm9uZTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZUZvclRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5zZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNG
b3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVz
dGluZyhjb25zdCBVUkwmIGZpcnN0UGFydHlVUkwsIGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NTQsOCArMTc3
Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Zp
cnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Rmlyc3RQYXJ0eUhv
c3RDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZpcnN0UGFydHlVUkwuaG9zdCgp
LnRvU3RyaW5nKCksIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEZpcnN0UGFy
dHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmaXJzdFBhcnR5VVJMLmhv
c3QoKS50b1N0cmluZygpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGNuYW1lVVJMIH0s
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3Rpbmco
Y29uc3QgVVJMJiBjbmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTk2NywxOCArMTc4NSwxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW5Gb3JUZXN0aW5n
KAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgY25hbWVVUkwgfSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFRoaXJkUGFydHlDTkFNRURv
bWFpbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
Y25hbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRpZiAvLyBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN5
bmNMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
eW5jTG9jYWxTdG9yYWdlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IG5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U3luY0xvY2FsU3RvcmFnZSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xOTg2LDggKzE3OTksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25k
cywgQwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5z
ZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25k
cywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldENh
Y2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Vjb25k
cyk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTE5OTcsMjYgKzE4MDksMTIgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNl
cyhTZWNvbmRzIHNlY29uZHMsIEMKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1h
eEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nl
c3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgbmV0d29ya1By
b2Nlc3MoKS5yZXNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lv
bklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CiAjZW5kaWYKIH0KIAotYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjppc0Fzc29jaWF0
ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpIGNvbnN0Ci17Ci0gICAg
aWYgKGF1dG8qIHByb2Nlc3NQb29sRGF0YVN0b3JlID0gcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFT
dG9yZSgpKQotICAgICAgICByZXR1cm4gcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPT0gdGhpczsKLSAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb2Nlc3NQb29sLm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgIHJldHVybiBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5oYXNTZXNzaW9uKG1f
c2Vzc2lvbklEKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIEhhc2hTZXQ8UmVmUHRyPFdlYlBy
b2Nlc3NQb29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkg
Y29uc3QKIHsKICAgICBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IHByb2Nlc3NQb29s
czsKQEAgLTIwMzEsOSArMTgyOSw2IEBAIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4g
V2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uCiAgICAgaWYg
KHByb2Nlc3NQb29scy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgb25l
IG9mIHRoZSBsZWdhY3kgZGF0YSBzdG9yZXMuCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlm
ICghaXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woKnByb2Nlc3NQb29sKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQogICAgICAgICAgICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9jZXNzUG9vbCk7
CiAgICAgICAgICAgICBpZiAocHJvY2Vzc1Bvb2xzLnNpemUoKSA9PSBsaW1pdCkKICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTIwNzIsOCArMTg2Nyw3IEBAIHN0YXRpYyBTdHJpbmcgY29tcHV0
ZU1lZGlhS2V5RmlsZShjb25zdCBTdHJpbmcmIG1lZGlhS2V5RGlyZWN0b3J5KQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25z
dCBXZWJDZXJ0aWZpY2F0ZUluZm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRl
LT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRl
Rm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKIH0KIAog
VmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gV2Vic2l0ZURhdGFTdG9yZTo6bWVk
aWFLZXlPcmlnaW5zKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSkKQEAg
LTIxMjgsNiArMTkyMiw1MiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZU1lZGlhS2V5
cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksCiAgICAgfQogfQogCit2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9j
ZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvJik+JiYgcmVwbHkpCit7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1Byb3h5LCBbdGhp
cywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHdlYlByb2Nlc3NQcm94eSA9IG1ha2VX
ZWFrUHRyKHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0gV1RGTW92ZShyZXBseSldIChhdXRvJiBj
b25uZWN0aW9uSW5mbykgbXV0YWJsZSB7CisgICAgICAgIGlmIChVTkxJS0VMWSghSVBDOjpDb25u
ZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSW5mby5pZGVudGlmaWVyKCkpICYm
IHdlYlByb2Nlc3NQcm94eSAmJiB3ZWFrVGhpcykpIHsKKyAgICAgICAgICAgIHRlcm1pbmF0ZU5l
dHdvcmtQcm9jZXNzKCk7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19JRihpc1BlcnNpc3RlbnQo
KSwgUHJvY2VzcywgImdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjogRmFpbGVkIGZpcnN0IGF0
dGVtcHQsIHJldHJ5aW5nIik7CisgICAgICAgICAgICBuZXR3b3JrUHJvY2VzcygpLmdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbigqd2ViUHJvY2Vzc1Byb3h5LCBXVEZNb3ZlKHJlcGx5KSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmVwbHkoY29ubmVjdGlvbklu
Zm8pOworICAgIH0pOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om5ldHdvcmtQcm9jZXNz
Q3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JikKK3sKKyAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGlkVGVybWluYXRlKCk7CisgICAgbV9uZXR3
b3JrUHJvY2VzcyA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dGVybWlu
YXRlTmV0d29ya1Byb2Nlc3MoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQ
cm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT50ZXJt
aW5hdGVTZXJ2aWNlV29ya2VycygpOworCisgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQorICAg
ICAgICByZXR1cm47CisgICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7CisgICAgbV9u
ZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2Vu
ZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG5ldHdvcmtQcm9jZXNzKCku
c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5lbnQ6Ok5vLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdv
cmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpCit7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsK
K30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUo
KQoreworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsKK30KKwog
Ym9vbCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpIGNv
bnN0CiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIxNTcsMTcg
KzE5OTcsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgICAgIAogICAgICAgICByZXNvbHZlRGlyZWN0
b3JpZXNJZk5lY2Vzc2FyeSgpOwogICAgICAgICAKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgdHJ1ZSkpOworICAgICAgICBuZXR3b3Jr
UHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgdHJ1ZSksIDApOworICAgICAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgICAgICBwcm9jZXNzUG9v
bC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQodHJ1ZSksIG1fc2Vzc2lvbklEKTsKLSAgICAg
ICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3Jr
aW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSkpOworICAgIG5ldHdvcmtQcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSksIDApOworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nl
c3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkKGZhbHNlKSwgbV9zZXNzaW9uSUQpOwotICAgIH0KIAogICAgIG1fcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgPSBmYWxzZTsKICNlbHNlCkBAIC0yMTc5LDggKzIwMTcs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKGJvb2wgZW5hYmxlZCkKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3RhdGlzdGljc1Rl
c3RpbmdDYWxsYmFjayhGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNhbGxiYWNrKQog
ewogICAgIGlmIChjYWxsYmFjaykgewotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpKTsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rl
c3RpbmdFdmVudCh0cnVlKSwgMCk7CiAgICAgfQogICAgIAogICAgIG1fc3RhdGlzdGljc1Rlc3Rp
bmdDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwpAQCAtMjE5OSw4ICsyMDM2LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJv
b2wgZW5hYmxlZCwgQ29tcGxldGkKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAg
cHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnTW9kZShtX3Nlc3Npb25JRCwgZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1
Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKICAgICBVTlVTRURfUEFSQU0oY29tcGxl
dGlvbkhhbmRsZXIpOwpAQCAtMjIxNSwyMCArMjA1MSwxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vzc2lvbklELCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9Ci0jZW5kaWYKKyAgICBuZXR3b3JrUHJvY2VzcygpLmlzUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwor
I2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisjZW5kaWYKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoYm9vbCBlbmFi
bGVkKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0QWRDbGlja0F0dHJp
YnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2V0QWRDbGlj
a0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKQEAgLTIyNTAsNDggKzIwODEsMTkgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZFN0YXRpc3RpY3NJbldlYlByb2Nlc3NlcyhDb21wbGV0
aW9uSGFuZGwKIH0KICNlbmRpZgogCi1WZWN0b3I8V2ViQ29yZTo6Q29va2llPiBXZWJzaXRlRGF0
YVN0b3JlOjpwZW5kaW5nQ29va2llcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcHlUb1ZlY3Rv
cihtX3BlbmRpbmdDb29raWVzKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphZGRQZW5k
aW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1fcGVuZGlu
Z0Nvb2tpZXMucmVtb3ZlSWYoWyZjb29raWVdKGF1dG8mIHBlbmRpbmdDb29raWUpIHsKLSAgICAg
ICAgcmV0dXJuIHBlbmRpbmdDb29raWUuaXNLZXlFcXVhbChjb29raWUpOwotICAgIH0pOwotICAg
IG1fcGVuZGluZ0Nvb2tpZXMuYWRkKGNvb2tpZSk7Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSkKLXsK
LSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZShjb29raWUpOwotfQotICAgIAotdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdDb29raWVzKCkKLXsKLSAgICBtX3BlbmRpbmdDb29r
aWVzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zmx1c2hDb29raWVzKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8gcHJvY2Vzc1Bvb2wgOiBXZWJQcm9j
ZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5mbHVzaENv
b2tpZXMoc2Vzc2lvbklEKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29y
a1Byb2Nlc3MoKS5mbHVzaENvb2tpZXMoc2Vzc2lvbklEKCksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93cykKIHsKLSAgICBmb3IgKGF1dG8gcHJvY2Vz
c1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChhbGxvd3MpLCBNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29j
a2V0OjpSZXBseSgpLCAwKTsKLSAgICB9CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kU3luYyhN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2Vi
U29ja2V0KGFsbG93cyksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JXZWJTb2NrZXQ6OlJlcGx5KCksIDApOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogewotICAgIGZvciAoYXV0byBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoc2Vzc2lvbklEKCkpOworICAgIG5ldHdv
cmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3Jl
ZGVudGlhbHMoc2Vzc2lvbklEKCkpLCAwKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpk
aXNwYXRjaE9uUXVldWUoRnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKQpAQCAtMjMxNyw4ICsy
MTE5LDYgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFy
YW1ldGVycygpCiAKICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwogCi0gICAg
cGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBlbmRpbmdDb29raWVzKCk7Ci0KICAgICBhdXRv
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPnJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUhhbmRsZTsKICAgICBpZiAoIXJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAtMjQyMyw3ICsyMjIzLDEw
IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRl
cnMoKQogICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZWQgPSBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkOwogI2VuZGlmCiAgICAgcGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyhwYXJhbWV0
ZXJzKTsKLQorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLmFwcEhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lv
biA9IGhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbigpOworI2VuZGlm
CisgICAgCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiB9CiAKQEAgLTI0NTMsMTAgKzIyNTYsNiBA
QCBBUEk6OkhUVFBDb29raWVTdG9yZSYgV2Vic2l0ZURhdGFTdG9yZTo6Y29va2llU3RvcmUoKQog
ICAgIHJldHVybiAqbV9jb29raWVTdG9yZTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpk
aWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpCi17Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGlmICghaXNQZXJzaXN0ZW50KCkpIHsKQEAgLTI0NjQsMjMgKzIyNjMsMTUgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQo
VmVjdG9yPExvY2FsU3RvcmFnZUQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3ModGhpcykuZ2V0TG9jYWxTdG9yYWdlRGV0YWls
cyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihX
VEZNb3ZlKGRldGFpbHMpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0
IGZldGNoaW5nIGZyb20gbXVsdGlwbGUgcG9vbHMuCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBBU1NFUlQoIWNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmdldExv
Y2FsU3RvcmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgeworICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihXVEZNb3ZlKGRldGFpbHMpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldFF1b3RhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnJlc2V0UXVvdGEobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIG5ldHdvcmtQcm9jZXNzKCkucmVzZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKQEAgLTI1MDYs
NyArMjI5NywxMiBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6Omh0dHAzRW5hYmxlZCgpCiB7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQotI2VuZGlmCisKK2Jvb2wgV2Vic2l0ZURhdGFTdG9yZTo6bmV0
d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJikKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYgLy8gIVBMQVRGT1JNKENPQ09BKQogCiAjaWYgIVVT
RShHTElCKQogV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERldmljZUlkSGFz
aFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpCkBAIC0yNTE4LDM1ICsyMzE0LDE4IEBAIFdURjo6U3Ry
aW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJl
Y3RvcnkoKQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURh
dGEoVVJMJiYgb2xkTmFtZSwgVVJMJiYgbmV3TmFtZSwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZT4gZGF0YVR5cGVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOwotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9zZXNzaW9u
SUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnJlbmFtZU9yaWdpbklu
V2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxFKEFQUF9CT1VORF9ET01B
SU5TKQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24oQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgbmV0d29ya1By
b2Nlc3MoKS5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vz
c2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+Y2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLmNsZWFyQXBw
Qm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJ
bml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0yNTY4LDcgKzIzNDcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBC
b3VuZERvbWFpbnNUb0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZQogCiAgICAgcHJv
cGFnYXRlQXBwQm91bmREb21haW5zKGdsb2JhbERlZmF1bHREYXRhU3RvcmUoKS5nZXQoKSwgKmFw
cEJvdW5kRG9tYWlucyk7CiAKLSAgICBmb3IgKGF1dG8qIHN0b3JlIDogbm9uRGVmYXVsdERhdGFT
dG9yZXMoKS52YWx1ZXMoKSkKKyAgICBmb3IgKGF1dG8qIHN0b3JlIDogYWxsRGF0YVN0b3Jlcygp
LnZhbHVlcygpKQogICAgICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoc3RvcmUsICphcHBC
b3VuZERvbWFpbnMpOwogfQogCkBAIC0yNTc2LDEwICsyMzU1LDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRBcHBCb3VuZERvbWFpbnNGb3JJVFAoY29uc3QgSGFzaFNldDxXZWJDb3JlOjpS
ZWdpc3RyYWIKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBuZXR3b3JrUHJvY2VzcygpLnNldEFwcEJvdW5kRG9tYWluc0ZvclJlc291cmNlTG9h
ZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAjZW5kaWYKIApAQCAtMjU4NywxNiArMjM2MywyNiBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IFN0cmlu
ZyYgYnVuZAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZp
ZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS51cGRh
dGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVy
SW5OZXR3b3JrUHJvY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlmaWVyKFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cit9CisKK3N0YXRpYyBib29sIG5leHROZXR3b3JrUHJv
Y2Vzc0xhdW5jaFNob3VsZEZhaWxGb3JUZXN0aW5nIHsgZmFsc2UgfTsKKwordm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjptYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKQor
eworICAgIG5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaFNob3VsZEZhaWxGb3JUZXN0aW5nID0gdHJ1
ZTsKK30KKworYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpzaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9j
ZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKQoreworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG5l
eHROZXR3b3JrUHJvY2Vzc0xhdW5jaFNob3VsZEZhaWxGb3JUZXN0aW5nLCBmYWxzZSk7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuaAppbmRleCA0ZjA0ZTkwMmQ3YjY1YzhkZTFlN2YwYWQyNDQyYTBkYTUyOWY5
ODM0Li5hZThlMzEzMmM1YjYxMTdmODFhNmY5MThlOWNkMzUzNDMwZDEyMTJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5oCkBAIC01Myw2ICs1Myw4IEBACiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxw
YWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgorI2luY2x1ZGUgPHd0Zi9PU09iamVjdFB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogI2VuZGlmCiAKICNpZiBVU0UoQ1VS
TCkKQEAgLTc5LDYgKzgxLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBBdXRoZW50aWNh
dG9yTWFuYWdlcjsKIGNsYXNzIFNlY0tleVByb3h5U3RvcmU7CiBjbGFzcyBEZXZpY2VJZEhhc2hT
YWx0U3RvcmFnZTsKK2NsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHk7CiBjbGFzcyBTT0F1dGhvcml6
YXRpb25Db29yZGluYXRvcjsKIGNsYXNzIFdlYkNlcnRpZmljYXRlSW5mbzsKIGNsYXNzIFdlYlBh
Z2VQcm94eTsKQEAgLTg4LDYgKzkxLDggQEAgY2xhc3MgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOwogZW51bSBjbGFzcyBDYWNoZU1vZGVsIDogdWludDhfdDsKIGVudW0gY2xhc3MgV2Vi
c2l0ZURhdGFGZXRjaE9wdGlvbiA6IHVpbnQ4X3Q7CiBlbnVtIGNsYXNzIFdlYnNpdGVEYXRhVHlw
ZSA6IHVpbnQzMl90OworCitzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mbzsKIHN0
cnVjdCBXZWJzaXRlRGF0YVJlY29yZDsKIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
czsKIApAQCAtMTEzLDcgKzExOCwxMiBAQCBwdWJsaWM6CiAgICAgV2Vic2l0ZURhdGFTdG9yZShS
ZWY8V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYsIFBBTDo6U2Vzc2lvbklEKTsKICAg
ICB+V2Vic2l0ZURhdGFTdG9yZSgpOwogCi0gICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4
aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7Cisg
ICAgc3RhdGljIHZvaWQgZm9yRWFjaFdlYnNpdGVEYXRhU3RvcmUoRnVuY3Rpb248dm9pZChXZWJz
aXRlRGF0YVN0b3JlJik+JiYpOworICAgIAorICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdv
cmtQcm9jZXNzKCkgY29uc3Q7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nl
c3MoKTsKKworICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ0RhdGFTdG9yZUZv
clNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlzUGVyc2lzdGVudCgpIGNv
bnN0IHsgcmV0dXJuICFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9CiAgICAgUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTEyMyw2
ICsxMzMsMTUgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IFdlYWtIYXNoU2V0PFdlYlByb2Nl
c3NQcm94eT4mIHByb2Nlc3NlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc2VzOyB9CiAKKyAg
ICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8mKT4m
Jik7CisgICAgdm9pZCB0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOworICAgIHZvaWQgc2VuZE5l
dHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseUZvclRlc3RpbmcoKTsKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgp
OworICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKTsK
KyAgICBzdGF0aWMgdm9pZCBtYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmcoKTsKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNo
RmFpbEZvclRlc3RpbmcoKTsKKwogICAgIGJvb2wgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQoKSBjb25zdDsKICAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJv
b2wpOwogICAgIGJvb2wgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSgpIGNvbnN0OwpA
QCAtMjM4LDE1ICsyNTcsOCBAQCBwdWJsaWM6CiAKICAgICBEZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZSYgZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKSB7IHJldHVybiBtX2RldmljZUlkSGFzaFNhbHRT
dG9yYWdlLmdldCgpOyB9CiAKLSAgICBXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGJvb2wgaXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wo
V2ViUHJvY2Vzc1Bvb2wmKSBjb25zdDsKLQogICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
IHBhcmFtZXRlcnMoKTsKIAotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29r
aWVzKCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNv
b2tpZSYpOwotICAgIHZvaWQgcmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29r
aWUmKTsKLSAgICB2b2lkIGNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKICAgICB2b2lkIGZsdXNoQ29v
a2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJDYWNoZWRD
cmVkZW50aWFscygpOwogCkBAIC0yNTQsNiArMjY2LDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
ZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAKKyNpZiBQTEFURk9STShDT0NP
QSkKKyAgICB2b2lkIHNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKFdl
YlByb2Nlc3NQcm94eSYpOworICAgIHZvaWQgc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRU
b0FsbFdlYlByb2Nlc3NlcygpOworI2VuZGlmCisKICNpZiBVU0UoQ1VSTCkKICAgICB2b2lkIHNl
dE5ldHdvcmtQcm94eVNldHRpbmdzKFdlYkNvcmU6OkN1cmxQcm94eVNldHRpbmdzJiYpOwogICAg
IGNvbnN0IFdlYkNvcmU6OkN1cmxQcm94eVNldHRpbmdzJiBuZXR3b3JrUHJveHlTZXR0aW5ncygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJveHlTZXR0aW5nczsgfQpAQCAtMjc5LDggKzI5Niw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldE1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24oV2Vi
Q29yZTo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbiYmKTsKICNlbmRpZgogCi0g
ICAgdm9pZCBkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAgY29uc3QgV2Vic2l0ZURh
dGFTdG9yZUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24oKSB7IHJldHVybiBtX2NvbmZpZ3Vy
YXRpb24uZ2V0KCk7IH0KIAogICAgIFdlYnNpdGVEYXRhU3RvcmVDbGllbnQmIGNsaWVudCgpIHsg
cmV0dXJuIG1fY2xpZW50LmdldCgpOyB9CkBAIC0yOTAsNiArMzA1LDggQEAgcHVibGljOgogCiAg
ICAgdm9pZCByZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFVSTCYmLCBVUkwmJiwgT3B0aW9uU2V0
PFdlYnNpdGVEYXRhVHlwZT4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBi
b29sIG5ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYp
OworCiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICAgICBXZWJEZXZpY2VPcmllbnRh
dGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXImIGRldmljZU9yaWVudGF0aW9uQW5kTW90aW9u
QWNjZXNzQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25B
Y2Nlc3NDb250cm9sbGVyOyB9CiAjZW5kaWYKQEAgLTM2Niw3ICszODMsNyBAQCBwcml2YXRlOgog
ICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0
b3JhZ2VEaXJlY3RvcnksIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UpOwogICAgIHN0YXRpYyB2b2lk
IHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnks
IGNvbnN0IEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYpOwogCi0gICAgdm9p
ZCBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOworICAgIHZvaWQgcmVnaXN0ZXJXaXRo
U2Vzc2lvbklETWFwKCk7CiAKICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpCiAgICAgc3Rh
dGljIE9wdGlvbmFsPEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+PiBhcHBCb3Vu
ZERvbWFpbnNJZkluaXRpYWxpemVkKCk7CkBAIC00MDYsOCArNDIzLDYgQEAgcHJpdmF0ZToKICAg
ICBXZWJDb3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3MgbV9uZXR3b3JrUHJveHlTZXR0aW5n
czsKICNlbmRpZgogCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1fcGVuZGluZ0Nvb2tp
ZXM7Ci0gICAgCiAgICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3NlczsK
IAogICAgIGJvb2wgbV9pc0l0cFN0YXRlRXhwbGljaXRseVNldCB7IGZhbHNlIH07CkBAIC00Mjgs
NiArNDQzLDcgQEAgcHJpdmF0ZToKICAgICBVbmlxdWVSZWY8V2Vic2l0ZURhdGFTdG9yZUNsaWVu
dD4gbV9jbGllbnQ7CiAKICAgICBSZWZQdHI8QVBJOjpIVFRQQ29va2llU3RvcmU+IG1fY29va2ll
U3RvcmU7CisgICAgUmVmUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7
CiAKICNpZiBIQVZFKEFQUF9TU08pCiAgICAgVW5pcXVlUmVmPFNPQXV0aG9yaXphdGlvbkNvb3Jk
aW5hdG9yPiBtX3NvQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRh
U3RvcmVDdXJsLmNwcAppbmRleCAwZTBjMDZlMWRlZDQyYzE0YjgwMmUxNTg5ZjMxZGM2Mjk4MmFj
MzkzLi42NGI2Yzc0ZDA4NmVjNDViYjYyZGE2ZWUwODIyM2IyOGRiNzNhNTdjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3Rv
cmVDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJs
L1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcApAQCAtNDIsOCArNDIsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKFdlYkNvcmU6OkN1cmxQcm94eVNldHRp
bmdzJiYgcHJveAogewogICAgIG1fcHJveHlTZXR0aW5ncyA9IFdURk1vdmUocHJveHlTZXR0aW5n
cyk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fc2Vzc2lvbklELCBtX3Byb3h5U2V0
dGluZ3MpKTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX3Nlc3Npb25JRCwgbV9wcm94eVNldHRpbmdz
KSwgMCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKaW5kZXggMTRk
N2ZmNDI4NGNhNGVkMTcwOGRmOGE0Y2RmMGY0NWUxZjhhNjJmYi4uNzA0YTliNjgzNjk1M2RhNjdk
NTNjOTAwNGQ2NmJlYTEyYmM5YjVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5j
cHAKQEAgLTQyLDggKzQyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5l
dHdvcmtQYXJhbWV0ZXJzKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJgogICAgIG5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5pZ25vcmVUTFNFcnJvcnMgPSBtX2lnbm9yZVRMU0Vycm9yczsKICAg
ICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucHJveHlTZXR0aW5ncyA9IG1fbmV0d29ya1Byb3h5
U2V0dGluZ3M7CiAKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbEZvckNv
b2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50
PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9z
ZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFn
ZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5
cGUpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuY29va2llTWFuYWdlcigpLmdldENvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2ll
UGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVy
c2lzdGVudFN0b3JhZ2VUeXBlKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJz
aXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKQEAgLTU1LDggKzU0
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3Jh
Z2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9wZXJzaXN0
ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gZW5hYmxlZDsKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9O
ZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFBlcnNpc3RlbnRD
cmVkZW50aWFsU3RvcmFnZUVuYWJsZWQobV9zZXNzaW9uSUQsIG1fcGVyc2lzdGVudENyZWRlbnRp
YWxTdG9yYWdlRW5hYmxlZCkpOworICAgIG5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQobV9z
ZXNzaW9uSUQsIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCksIDApOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRM
U0Vycm9ycykKQEAgLTY1LDE1ICs2MywxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEln
bm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9pZ25vcmVUTFNFcnJvcnMgPSBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRJZ25vcmVUTFNF
cnJvcnMobV9zZXNzaW9uSUQsIG1faWdub3JlVExTRXJyb3JzKSk7CisgICAgbmV0d29ya1Byb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0SWdub3JlVExTRXJyb3JzKG1f
c2Vzc2lvbklELCBtX2lnbm9yZVRMU0Vycm9ycyksIDApOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKFdlYkNvcmU6OlNvdXBOZXR3b3JrUHJveHlT
ZXR0aW5ncyYmIHNldHRpbmdzKQogewogICAgIG1fbmV0d29ya1Byb3h5U2V0dGluZ3MgPSBXVEZN
b3ZlKHNldHRpbmdzKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fc2Vzc2lvbklELCBt
X25ldHdvcmtQcm94eVNldHRpbmdzKSk7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9zZXNzaW9uSUQs
IG1fbmV0d29ya1Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94
eUdMaWIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlH
TGliLmNwcAppbmRleCAwYTg0YTc1OTBkOWE5ODViZmM5OTY4NGE0ODk1MTM3NGU1YjI5NDI5Li4y
N2YyM2VhMDY1ZGM3NWNlNGE4MjcwYzU3NmVhMmFhNTVhYjBkYzhmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKQEAgLTQ0
LDcgKzQ0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoT3B0aW9u
cyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGwKICAgICAgICAgaWYgKCFkYXRhU3Rv
cmUpIHsKICAgICAgICAgICAgIC8vIFByZXdhcm1lZCBwcm9jZXNzZXMgZG9uJ3QgaGF2ZSBhIFdl
YnNpdGVEYXRhU3RvcmUgeWV0LCBzbyB1c2UgdGhlIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSBm
cm9tIHRoZSBXZWJQcm9jZXNzUG9vbC4KICAgICAgICAgICAgIC8vIFRoZSBwcm9jZXNzIHdvbid0
IGJlIHVzZWQgaWYgY3VycmVudCBXZWJzaXRlRGF0YVN0b3JlIGlzIGRpZmZlcmVudCB0aGFuIHRo
ZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IG9uZS4KLSAgICAgICAgICAgIGRhdGFTdG9yZSA9IG1f
cHJvY2Vzc1Bvb2wtPndlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICAgICAgICAgIGRhdGFTdG9yZSA9
IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKICAgICAgICAgfQog
CiAgICAgICAgIEFTU0VSVChkYXRhU3RvcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKaW5kZXggOWY3
YmUzYzk0MWI2Y2QwYTFiOTRjYjEzNjA5OGYzYTA0MWNlZmY5OS4uYWMwNGUzOGE1N2IyMTU5YmVi
NDJmMzg0NzliNDRmNWUyNmRlZGJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCkBAIC0yNiw2ICsy
Niw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclBy
b3h5LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiV2Vi
Q29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKIApA
QCAtMzMsOCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKLSAgICBtX2Nvb2tpZVBlcnNpc3RlbnRTdG9yYWdlTWFw
LnNldChzZXNzaW9uSUQsIHN0ZDo6bWFrZV9wYWlyKHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkp
OwotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0
b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpT
ZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdl
VHlwZSksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llUGVy
c2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmIHN0b3JhZ2VQ
YXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlJiBzdG9yYWdlVHlwZSkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xT
b3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3Vw
LmNwcAppbmRleCAwM2E5YjM2MDUzOTU5YTIwNmU3MmQ4NThiODU4Njk1MjA5MTM1MjczLi4wNWJk
MmY2YzRiMDk3NDUxYjExYzgwYzBmNzIyNTk3NTc1N2NiYmE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCkBAIC0zNywxNSAr
MzcsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmIHBhcmFtZXRlcnMpCiB7Ci0gICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMm
IGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgIHN1cHBsZW1lbnQ8V2ViQ29v
a2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShkZWZhdWx0U2Vz
c2lvblBhcmFtZXRlcnMuc2Vzc2lvbklELCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2ll
UGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVy
c2lzdGVudFN0b3JhZ2VUeXBlKTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAg
ICAgIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VF
bmFibGVkID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VF
bmFibGVkKCk7Ci0gICAgICAgIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5pZ25vcmVUTFNFcnJv
cnMgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmlnbm9yZVRMU0Vycm9ycygpOwotICAgICAgICBkZWZh
dWx0U2Vzc2lvblBhcmFtZXRlcnMucHJveHlTZXR0aW5ncyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+
bmV0d29ya1Byb3h5U2V0dGluZ3MoKTsKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNvb2tpZUFj
Y2VwdFBvbGljeSA9IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3k7CiAgICAgcGFyYW1l
dGVycy5sYW5ndWFnZXMgPSB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbkluZm8uaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbkluZm8uaAppbmRleCA4MzUwZGJhY2Y4ZDU1N2U1N2M4YmNmYzNlOTNkMDk3
Yjg5NDZhYmI4Li45ZjQ2ODVkMTNhYmQyYjRhYzhjNTM3OGI4ZTUxMmY5YzAyOWRiM2IwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb25JbmZvLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5mby5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEg
b25jZQogCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSFRUUENv
b2tpZUFjY2VwdFBvbGljeS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkZGNlOGIzOWNkYTM5OWVjZWI2
Mzk0NDNkM2M3NDkxZjI4OGMzZjY3Li5hNWRhMDk5OTcyOTA1ODRhOGUyZWJiNThlNDBlM2Q2NzBm
NzZiOGRmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsOTggQEAKKzIwMjAtMDktMjkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBNb3ZlIE5ldHdvcmtQcm9jZXNzUHJveHkgb3du
ZXJzaGlwIGZyb20gV2ViUHJvY2Vzc1Bvb2wgdG8gV2Vic2l0ZURhdGFTdG9yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MDQxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgQnJhZHkgRWlkc29uLgorCisgICAgICAgIE1vc3QgY2hhbmdlcyB0byB0ZXN0
cyBhcmUganVzdCBjYWxsaW5nIGEgZnVuY3Rpb24gb24gdGhlIFdLV2Vic2l0ZURhdGFTdG9yZSBp
bnN0ZWFkIG9mIHRoZSBXS1Byb2Nlc3NQb29sCisgICAgICAgIGJlY2F1c2Ugd2Ugd2FudCB0byBk
byBzb21ldGhpbmcgd2l0aCB0aGUgbmV0d29yayBwcm9jZXNzIGFuZCBpdCBoYXMgYSBuZXcgb3du
ZXIuCisgICAgICAgIEV4Y2VwdGlvbnMgYXJlIG5vdGVkIGlubGluZS4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nv
bm5lY3Rpb24ubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6ZG93bmxvYWRBdFJhdGUpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVsZXRlUmVjb3Zlcnku
bW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3Jh
ZGVUb1YyLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tOgorICAgICAgICAo
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJNdWx0aVByb2Nlc3MubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tOgorICAgICAgICAo
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJTdXNwZW5kSW1taW5lbnRseS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXplLm1tOgorICAg
ICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9M
b2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW06CisgICAgICAg
IChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdv
cmtQcm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tOgorICAgICAgICAoY2hlY2tS
ZWNvdmVyeUFmdGVyQ3Jhc2gpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW06CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tOgorICAgICAgICAo
VEVTVCk6CisgICAgICAgIFRoaXMgdGVzdCB3YXMgbWFraW5nIGEgV0tXZWJzaXRlRGF0YVN0b3Jl
LCBnZXR0aW5nIGl0cyByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3MgZGlyZWN0b3J5LAorICAgICAg
ICBwdXR0aW5nIHRoaW5ncyBpbiB0aGF0IGRpcmVjdG9yeSwgdGhlbiBzdGFydGluZyB0aGUgbmV0
d29yayBwcm9jZXNzIGFuZCBtYWtpbmcgc3VyZSBldmVyeXRoaW5nCisgICAgICAgIHdvcmtzIHdo
ZW4gaW5pdGlhbGl6aW5nIHRoZSBuZXR3b3JrIHByb2Nlc3MuICBOb3csIG5ldHdvcmsgcHJvY2Vz
cyBpbml0aWFsaXphdGlvbiBoYXBwZW5zIHdoZW4gYQorICAgICAgICBXS1dlYnNpdGVEYXRhU3Rv
cmUgaXMgaW5zdGFudGlhdGVkLCBzbyB3ZSBuZWVkIHRvIHB1dCB0aGluZ3MgdGhlcmUgYmVmb3Jl
IGluc3RhbnRpYXRpbmcgYSBXS1dlYnNpdGVEYXRhU3RvcmUuCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW06CisgICAgICAgIEJl
Zm9yZSB0aGlzIGNoYW5nZSwgZWFjaCBXS1Byb2Nlc3NQb29sIGhhZCBpdHMgb3duIG5ldHdvcmsg
cHJvY2Vzcywgd2hpY2ggaG9sZHMgdGhlIHNlcnZpY2Ugd29ya2VyIHJlZ2lzdHJ5CisgICAgICAg
IGZvciB0aGUgV2Vic2l0ZURhdGFTdG9yZXMgdXNlZCB3aXRoIHRoYXQgcHJvY2VzcyBwb29sLiAg
Tm93LCB0aGUgbmV0d29yayBwcm9jZXNzIHN0aWxsIG5lZWRzIHRvIGhhdmUgYSBzZXJ2aWNlCisg
ICAgICAgIHdvcmtlciByZWdpc3RyeSBpbiBpdCwgYnV0IHdoZW4gd2UgcmVjZWl2ZSBhIG1lc3Nh
Z2UgZnJvbSBpdCBsb29raW5nIGZvciBhIHdlYiBwcm9jZXNzIHRvIHJ1biB0aGUgc2VydmljZQor
ICAgICAgICB3b3JrZXIsIHdlIGdvIGFyYml0cmFyaWx5IHRvIHRoZSBmaXJzdCBwcm9jZXNzIHBv
b2wgdGhhdCBoYXMgYSBwcm9jZXNzIHdlIGNhbiB1c2UuICBUaGlzIGxvZ2ljIGlzIGluIAorICAg
ICAgICBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05l
dHdvcmtQcm9jZXNzLiAgQmVjYXVzZSB3ZSB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCBlYWNo
CisgICAgICAgIHRpbWUsIHNldHRpbmcgdGhlIGN1c3RvbSB1c2VyIGFnZW50IHRvIHR3byBkaWZm
ZXJlbnQgdGhpbmdzIGluIHR3byBkaWZmZXJlbnQgcHJvY2VzcyBwb29scyBjYXVzZXMgb25seSBv
bmUKKyAgICAgICAgdG8gYmUgdXNlZC4gIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBpbiBwcmFjdGlj
ZSwgdGhvdWdoLCBiZWNhdXNlIHRoZSBvbmx5IGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgU1BJ
IHRvCisgICAgICAgIHNldCBhIHNlcnZpY2Ugd29ya2VyJ3MgY3VzdG9tIHVzZXIgYWdlbnQgaXMg
U2FmYXJpLCB3aGljaCBvbmx5IGhhcyBvbmUgcHJvY2VzcyBwb29sLiAgVGhpcyB0ZXN0IHN0aWxs
IHZlcmlmaWVzCisgICAgICAgIHRoYXQgYSB1c2VyIGFnZWludCBpcyBjb3JyZWN0bHkgc2VudC4K
KyAgICAgICAgU2ltaWxhcmx5LCB0aGUgdGVzdHMgdGhhdCBjb3VudCBzZXJ2aWNlIHdvcmtlciBw
cm9jZXNzZXMgZWl0aGVyIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMgb3IgbmVlZCB0byBiZSBydW4g
d2l0aAorICAgICAgICBvbmUgcHJvY2VzcyBwb29sIHBlciBwYXJlbnQgcHJvY2Vzcy4gIFRvIGtl
ZXAgdGhlIHJlc3VsdHMgdGhlIHNhbWUsIEkgc2VwYXJhdGVkIHRoZSB0ZXN0cyBpbnRvIGRpZmZl
cmVudAorICAgICAgICBURVNUKFNlcnZpY2VXb3JrZXJzLCAuLi4pIG1hY3JvcyB3aGljaCBhcmUg
cnVuIGluIHNlcGFyYXRlIHBhcmVudCBwcm9jZXNzZXMuCisgICAgICAgIFRoZSB0ZXN0IFJlc3Rv
cmVGcm9tRGlza05vbkRlZmF1bHRTdG9yZSBuZWVkcyB0byB1c2UgdGhlIHNhbWUgZGF0YSBzdG9y
ZSBmb3IgYm90aCBXS1dlYlZpZXdzIG5vdyBiZWNhdXNlIG90aGVyd2lzZQorICAgICAgICB0aGVy
ZSB3YXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgc3RhcnR1cCBvZiBhIG5ldyBuZXR3b3JrIHBy
b2Nlc3MgdGhhdCB3YXNuJ3QgdGhlcmUgYmVmb3JlIGJlY2F1c2Ugd2Ugd2VyZSB1c2luZyB0aGUK
KyAgICAgICAgc2FtZSBwcm9jZXNzIHBvb2wgYW5kIHRoZXJlZm9yZSB0aGUgc2FtZSBuZXR3b3Jr
IHByb2Nlc3MuICBJIGFkZGVkIHNwaW5uaW5nIHRoZSBydW4gbG9vcCBhbmQgc2xlZXBpbmcgdG8g
YmUgYWJsZSB0bworICAgICAgICByZXByb2R1Y2UgdGhlIHJhY2UgY29uZGl0aW9uIGZhaWx1cmUg
YW5kIEkgdXNlIHRoZSBzYW1lIFdLV2Vic2l0ZURhdGFTdG9yZSB0byB1c2UgdGhlIHNhbWUgbmV0
d29yayBwcm9jZXNzLCB3aGljaCB3YXMKKyAgICAgICAgdGhlIGludGVudCBvZiB1c2luZyB0aGUg
c2FtZSBXS1Byb2Nlc3NQb29sIGJlZm9yZS4gIFRoZSB0ZXN0IHN0aWxsIHRlc3RzIHRoYXQgdGhl
IHJlZ2lzdHJhdGlvbiBpcyByZS11c2VkIHdoZW4gd2UgYXJlCisgICAgICAgIG5vdCB1c2luZyB0
aGUgZGVmYXVsdCBkYXRhIHN0b3JlLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW06CisgICAgICAgICgtW0NoZWNr
U2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdp
dGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAg
ICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdKToKKyAgICAg
ICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdKToKKyAg
ICAgICAgKFRFU1QpOgorICAgICAgICBUaGlzIGlzIHRoZSB3aG9sZSBwb2ludCBvZiBtZSBkb2lu
ZyB0aGlzLgorICAgICAgICBJIHRvb2sgYSB0ZXN0IHRoYXQgd2FzIGZsYWt5IG9ubHkgb24gaU9T
IChiZWNhdXNlIG9mIGRpZmZlcmVudCBOU0hUVFBDb29raWVTdG9yYWdlIHN5bmNpbmcgYmVoYXZp
b3IpIGFuZCBtYWRlCisgICAgICAgIGl0IGZsYWt5IG5vd2hlcmUgKGZpbmdlcnMgY3Jvc3NlZCEp
IGFuZCBhZGRlZCBhIHRlc3QgdGhhdCBjb3JyZWN0bHkgaGFuZGxlcyBzZXNzaW9uIGNvb2tpZXMg
bGlrZSB3ZSBjb3VsZCBub3QKKyAgICAgICAgYmVmb3JlIHRoaXMgY2hhbmdlLgorICAgICAgICBJ
IGFsc28gcmUtdXNlZCBzb21lIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgYW5kIG1hZGUgaXQgc3RvcCB1
c2luZyBwcm9jZXNzLWdsb2JhbCBzdGF0aWMgdmFyaWFibGVzIGZvciB0ZXN0IHN0YXRlLgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVy
LWxlYWtzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW06CisgICAgICAgIChy
dW5XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMpOgorICAgICAgICAoVEVTVCk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW06
CisgICAgICAgICgtW0Nsb3NlV2hpbGVTdGFydGluZ1Byb3RvY29sIHN0YXJ0TG9hZGluZ10pOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6cnVuVGVzdCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpy
ZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OmZpbmRBbmREdW1wV2ViS2l0UHJvY2Vzc0lkZW50aWZpZXJzKToKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6Om5ldHdvcmtQcm9jZXNzRGlkQ3Jhc2gpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KToKKyAgICAgICAgV0tDb250ZXh0
U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyBpcyBub3Qg
bmVlZGVkLCBzbyBJIHJlbW92ZWQgaXQuCisgICAgICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJz
aXRlRGF0YVN0b3JlIGlzbid0IG5lZWRlZCBhbnkgbW9yZSBiZWNhdXNlIFdLQ29udGV4dFJlZiAo
V2ViUHJvY2Vzc1Bvb2wpIGRvZXNuJ3QKKyAgICAgICAgb3duIGEgbmV0d29yayBwcm9jZXNzIGFu
eSBtb3JlLCBzbyBpdCBkb2Vzbid0IGNhcmUgd2hpY2ggaXMgdGhlIGRlZmF1bHQgV2Vic2l0ZURh
dGFTdG9yZS4KKyAgICAgICAgSW4gZmFjdCwgdGhlICJkZWZhdWx0IiBXZWJzaXRlRGF0YVN0b3Jl
IGlzbid0IHJlYWxseSBpbXBvcnRhbnQgaW4gdGhlIG5ldHdvcmsgcHJvY2VzcyBhbnkgbW9yZS4K
KwogMjAyMC0wOS0yOSAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KIAogICAgICAg
ICBJbmRleGVkREIgSW5kZXggQ29ycnVwdGlvbiBhZnRlciB1cGdyYWRlIGZyb20gaU9TIDEzIHRv
IGlPUyAxNApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0
d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rp
b24ubW0KaW5kZXggOTczODlmMDFmZjJlZTk5Yjc4M2IwYjUyMTA4MDc0ZjFhODFiNjk4MS4uOTdi
NzJlMDE2ZGVkZTRhMDdkNDY1M2YzYTliYzUyYjhmNGYzMTkyYiAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5n
Q29ubmVjdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3
b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzR3JvdXBQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCkBAIC04
Nyw3ICs4OCw3IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdD
b25uZWN0aW9uKQogICAgIHBpZF90IHdlYlZpZXcyUElEID0gW3dlYlZpZXcyLmdldCgpIF93ZWJQ
cm9jZXNzSWRlbnRpZmllcl07CiAgICAgRVhQRUNUX05FKHdlYlZpZXcxUElELCB3ZWJWaWV3MlBJ
RCk7CiAKLSAgICBwaWRfdCBpbml0aWFsTmV0d29ya1Byb2Nlc3NJZGVudGlmaWZlciA9IFtwcm9j
ZXNzUG9vbC5nZXQoKSBfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyXTsKKyAgICBwaWRfdCBpbml0
aWFsTmV0d29ya1Byb2Nlc3NJZGVudGlmaWZlciA9IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNp
dGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl07CiAgICAgRVhQRUNUX05FKGlu
aXRpYWxOZXR3b3JrUHJvY2Vzc0lkZW50aWZpZmVyLCAwKTsKICAgICBraWxsKGluaXRpYWxOZXR3
b3JrUHJvY2Vzc0lkZW50aWZpZmVyLCBTSUdLSUxMKTsKICAgICBVdGlsOjpydW4oJm5ldHdvcmtQ
cm9jZXNzQ3Jhc2hlZCk7CkBAIC05Niw3ICs5Nyw3IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJv
Y2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uKQogICAgIFt3ZWJWaWV3MS5nZXQoKSBsb2Fk
UmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRs
ZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJl
Y3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXV07CiAgICAgW3dlYlZpZXcxLmdldCgp
IF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKIAotICAgIHBpZF90IHJlbGF1bmNo
ZWROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIgPSBbcHJvY2Vzc1Bvb2wuZ2V0KCkgX25ldHdvcmtQ
cm9jZXNzSWRlbnRpZmllcl07CisgICAgcGlkX3QgcmVsYXVuY2hlZE5ldHdvcmtQcm9jZXNzSWRl
bnRpZmllciA9IFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX25ldHdvcmtQ
cm9jZXNzSWRlbnRpZmllcl07CiAgICAgRVhQRUNUX05FKGluaXRpYWxOZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZmVyLCByZWxhdW5jaGVkTmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKTsKICAgICBFWFBF
Q1RfRkFMU0UobmV0d29ya1Byb2Nlc3NDcmFzaGVkKTsKIApAQCAtMTQ2LDggKzE0Nyw4IEBAIFRF
U1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc1JlbGF1bmNoT25MYXVuY2hGYWlsdXJlKQogCiAgICAg
Ly8gQ29uc3R1Y3RpbmcgYSBXZWJWaWV3IHN0YXJ0cyBhIG5ldHdvcmsgcHJvY2VzcyBzbyB0ZXJt
aW5hdGUgdGhpcyBvbmUuIFRoZSBwYWdlIGxvYWQgYmVsb3cgd2lsbCB0aGVuIHJlcXVlc3QgYSBu
ZXR3b3JrIHByb2Nlc3MgYW5kIHdlCiAgICAgLy8gbWFrZSB0aGlzIG5ldyBuZXR3b3JrIHByb2Nl
c3MgbGF1bmNoIGNyYXNoIG9uIHN0YXJ0dXAuCi0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVO
ZXR3b3JrUHJvY2Vzc107Ci0gICAgW3Byb2Nlc3NQb29sIF9tYWtlTmV4dE5ldHdvcmtQcm9jZXNz
TGF1bmNoRmFpbEZvclRlc3RpbmddOworICAgIFtXS1dlYnNpdGVEYXRhU3RvcmUgX21ha2VOZXh0
TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZ107CisgICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAg
YXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tNb25pdG9yV2ViQ29udGVudENyYXNoTmF2aWdhdGlv
bkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CiAgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVn
YXRlOmRlbGVnYXRlLmdldCgpXTsKQEAgLTE1OCw3ICsxNTksNyBAQCBURVNUKFdlYktpdCwgTmV0
d29ya1Byb2Nlc3NSZWxhdW5jaE9uTGF1bmNoRmFpbHVyZSkKICAgICBFWFBFQ1RfVFJVRShuZXR3
b3JrUHJvY2Vzc0NyYXNoZWQpOwogICAgIEVYUEVDVF9GQUxTRSh3ZWJQcm9jZXNzQ3Jhc2hlZCk7
CiAgICAgRVhQRUNUX0dUKFt3ZWJWaWV3IF93ZWJQcm9jZXNzSWRlbnRpZmllcl0sIDApOwotICAg
IEVYUEVDVF9HVChbcHJvY2Vzc1Bvb2wuZ2V0KCkgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0s
IDApOworICAgIEVYUEVDVF9HVChbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3Jl
IF9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXJdLCAwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Eb3dubG9hZC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
RG93bmxvYWQubW0KaW5kZXggYjdlZDk5OTM5ZmQ1OWYyMjhhN2U4YmQ3NDk3MTJmNTM2NjAxNTYx
Ni4uMTgxOTEzMWM5YTBmZWIzMGIxYTJmMGNmY2Q4N2JmMjA0NWViYjNmNCAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCkBAIC04ODks
OSArODg5LDkgQEAgdm9pZCBkb3dubG9hZEF0UmF0ZShkb3VibGUgZGVzaXJlZEticHMsIHVuc2ln
bmVkIHNwZWVkTXVsdGlwbGllciwgQXBwUmV0dXJuc1RvRm8KICAgICByZWNlaXZlZERhdGEgPSBm
YWxzZTsKICAgICBVdGlsOjpydW4oJnJlY2VpdmVkRGF0YSk7CiAgICAgLy8gU3RhcnQgdGhlIERv
d25sb2FkTW9uaXRvcidzIHRpbWVyLgotICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9j
ZXNzUG9vbCBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpZRVNdOworICAgIFtbd2ViVmlldyBj
b25maWd1cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5k
OllFU107CiAgICAgaWYgKHJldHVyblRvRm9yZWdyb3VuZCA9PSBBcHBSZXR1cm5zVG9Gb3JlZ3Jv
dW5kOjpZZXMpCi0gICAgICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNzUG9vbCBf
c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpOT107CisgICAgICAgIFtbd2ViVmlldyBjb25maWd1
cmF0aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF9zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kOk5PXTsK
ICAgICBkaWRDYW5jZWwgPSBmYWxzZTsKICAgICBVdGlsOjpydW4oJmRpZENhbmNlbCk7CiAgICAg
dGVybWluYXRlU2VydmVyID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCQ2hlY2twb2ludFdBTC5tbQppbmRleCA1Y2Q3YWJkYTAx
ZDE5NzQ3ZGNlZDQ1YWJlZTk5ZWNiMWMxNGQ2MTYwLi5kNzdhNmZkOTg3OWU0M2Y3MDExZGRhZjky
YzNhNzk3ZjNmYzEzNzM0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0lEQkNoZWNrcG9pbnRXQUwubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JREJDaGVja3BvaW50V0FMLm1tCkBAIC0zMSw2ICszMSw3IEBACiAj
aW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
S1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZp
ZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFT
dG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktp
dC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2Vy
U3R5bGVTaGVldC5oPgpAQCAtODYsNyArODcsNyBAQCBURVNUKEluZGV4ZWREQiwgQ2hlY2twb2lu
dHNXQUxBdXRvbWF0aWNhbGx5KQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9u
PiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2Nd
IGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRT
Y3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOwog
Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3
ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIApkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVS
ZWNvdmVyeS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCRGVs
ZXRlUmVjb3ZlcnkubW0KaW5kZXggYzhhZjFkMjQzYzRmZWI1OGFjOTg0ZGFmMTRkODE1MzFhN2Nj
M2M3My4uYmJmMWExNTIxNWRjMWZkMjhkZmRkYjllMzQxYjY0ZjljMDA4ZjRjNCAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJEZWxldGVSZWNvdmVy
eS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkRlbGV0
ZVJlY292ZXJ5Lm1tCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNz
UG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5o
PgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtNTcsNyAr
NTgsNyBAQCBURVNUKEluZGV4ZWREQiwgRGVsZXRlUmVjb3ZlcnkpCiAgICAgUmV0YWluUHRyPFdL
V2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3
Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29u
dGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFt
ZTpAInRlc3RIYW5kbGVyIl07CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9v
bCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndl
YnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIENvcHkg
dGhlIGluY29uc2lzdGVudCBkYXRhYmFzZSBmaWxlcyB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5
CiAgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNl
OkAiSURCRGVsZXRlUmVjb3ZlcnkiIHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rv
cnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tCmlu
ZGV4IDQxNmNhMWY5YWI0OTViZDg3ODExOWUxZDM0NTNlNzY1OGJmMDc1MTIuLjk2ODMwNWJiYjA2
MDQzNGMzZGRmMzU2NWZkYzU4ZGEyMmM1ODBmNTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0K
QEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktp
dC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2lt
cG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CkBAIC01OCw3ICs1OSw3IEBAIFRFU1Qo
SW5kZXhlZERCLCBJbmRleFVwZ3JhZGVUb1YyKQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25m
aWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRp
b24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9s
bGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFu
ZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0
b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICAvLyBDb3B5IHRoZSBpbmNvbnNp
c3RlbnQgZGF0YWJhc2UgZmlsZXMgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeQogICAgIE5TVVJM
ICp1cmwxID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIkluZGV4VXBn
cmFkZSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRB
UEkucmVzb3VyY2VzIl07CkBAIC05MCw3ICs5MSw3IEBAIHN0YXRpYyB2b2lkIHJ1bk11bHRpcGxl
SW5kaWNlc1Rlc3RXaXRoRGF0YWJhc2UoTlNTdHJpbmcqIGRhdGFiYXNlTmFtZSkKICAgICBSZXRh
aW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tX
S1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9u
IHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5n
ZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnBy
b2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAg
TlNVUkwgKnVybCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6ZGF0YWJh
c2VOYW1lIHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0
QVBJLnJlc291cmNlcyJdOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9W
Mi5tbQppbmRleCBmZmE1YTc4NzhhNDczMmI4ZWMyNDVjOTA1M2ZkMTdlZTU5NTZmYTNkLi40MDNl
MGZmYTgyMTIzNDUxYzQ2NmZlZWNjMzI0ZjljNmU3NjFkNDNkIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVU
b1YyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCT2Jq
ZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdl
YktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRl
bnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nl
c3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0
Lmg+CkBAIC01Nyw3ICs1OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJREJPYmplY3RTdG9yZUluZm9V
cGdyYWRlVG9WMikKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7
CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVz
c2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAotICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwogCiAgICAgLy8gQ29weSBkYXRhYmFzZSBmaWxlcyB3aXRoIG9sZCBPYmpl
Y3RTdG9yZUluZm8gc2NoZW1hIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkuCiAgICAgTlNVUkwg
KnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiSURCT2JqZWN0
U3RvcmVJbmZvVXBncmFkZSIgd2l0aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpA
IlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0gYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJv
Y2Vzc0tpbGwubW0KaW5kZXggNjg3NDUyOWViYmYzNzg1MThkOTNlMGEwODIxZjYzMDEyY2ZhNmQ1
Zi4uNzMwNzdlY2RmZDM2NWI1MjkwNTNkNDdjYmEyYTE0ZWQwNTFlZDZlYSAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVBy
b2Nlc3NLaWxsLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9y
dCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2Vy
Q29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29u
ZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBA
IC05Miw3ICs5Myw3IEBAIFRFU1QoSW5kZXhlZERCLCBEYXRhYmFzZVByb2Nlc3NLaWxsKQogICAg
ICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAg
ICAgICAgIGlmICgha2lsbGVkREJQcm9jZXNzICYmIG9wZW5SZXF1ZXN0VXBncmFkZU5lZWRlZCkg
ewogICAgICAgICAgICAga2lsbGVkREJQcm9jZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107Cisg
ICAgICAgICAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVBy
b2Nlc3MubW0KaW5kZXggN2Y2MjY0NWQ5OTYwZWRlOTYwYzAwMWMyNzJiNjUwMzkzOTAxMTYzMi4u
NmY2N2RjMjdlZGMzZDI3NDViMTcwZTQ4MmJjZDkwZTg0OTRjYjk1YSAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJNdWx0aVByb2Nlc3Mu
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJN
dWx0aVByb2Nlc3MubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VzZXJD
b250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25m
aWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4K
KyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
VXNlclN0eWxlU2hlZXQuaD4KICNpbXBvcnQgPHd0Zi9EZXF1ZS5oPgpAQCAtNjksNyArNzAsNyBA
QCBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCTXVsdGlQcm9jZXNzKQogICAgIFJldGFpblB0cjxX
S1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNv
bnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5h
bWU6QCJ0ZXN0SGFuZGxlciJdOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBSZXRhaW5Q
dHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3Vy
YXRpb24uZ2V0KCldKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCUGVyc2lzdGVuY2UubW0KaW5kZXggYjMyY2U0YTVm
NzM4NjNhZWRkY2I5MTkwYjViNDM3MGUzNzQ0M2I1ZS4uZDYyMjAzMjJlNDc4ZDFkYWM3OGYwNjk2
N2MzYjY0M2JmZDYyZjliZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JbmRleGVkREJQZXJzaXN0ZW5jZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlBlcnNpc3RlbmNlLm1tCkBAIC03OCw3ICs3
OCw3IEBAIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJQZXJzaXN0ZW5jZSkKICAgICB3ZWJWaWV3
ID0gbmlsOwogCiAgICAgLy8gVGVybWluYXRlIHRoZSBuZXR3b3JrIHByb2Nlc3MKLSAgICBbY29u
ZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwor
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzXTsKIAogICAgIC8vIE1ha2UgYSBuZXcgd2ViIHZpZXcgdG8gZmluaXNoIHRoZSB0
ZXN0CiAgICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9u
LmdldCgpXSk7CkBAIC0yNjgsNyArMjY4LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4ZWREQlRo
aXJkUGFydHlGcmFtZUhhc0FjY2VzcykKIAogICAgIHdlYlZpZXcgPSBuaWw7CiAgICAgc2Vjb25k
V2ViVmlldyA9IG5pbDsKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVE
YXRhU3RvcmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIC8vIFRoaXJkLXBhcnR5
IElEQiBzdG9yYWdlIGlzIHN0b3JlZCBpbiB0aGUgbWVtb3J5IG9mIG5ldHdvcmsgcHJvY2Vzcy4K
ICAgICBhdXRvIHRoaXJkV2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1
cmF0aW9uLmdldCgpXSk7CkBAIC0zODUsNyArMzg1LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4
ZWREQlRoaXJkUGFydHlXb3JrZXJIYXNBY2Nlc3MpCiAKICAgICB3ZWJWaWV3ID0gbmlsOwogICAg
IHNlY29uZFdlYlZpZXcgPSBuaWw7Ci0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bv
b2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBhdXRvIHRo
aXJkV2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNN
YWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgp
XSk7CiAgICAgbG9hZFRlc3RQYWdlSW5XZWJWaWV3KHRoaXJkV2ViVmlldy5nZXQoKSwgQCJkYXRh
YmFzZSBpcyBjcmVhdGVkIik7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJTdXNwZW5kSW1taW5lbnRseS5tbQpp
bmRleCA4ZWM2NWYwYTNiYTkzNzM2ZmRiNGY5ZGRmZWY3NWNlNjAwMDVmZDBkLi41MTBiMjRmNTY5
ZDIyYmQ0MGE3YWRiZTI1ZWNmZDBlY2ZjOGFjNzI2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5Lm1tCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCU3VzcGVu
ZEltbWluZW50bHkubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nl
c3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVy
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRl
Lmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmln
dXJhdGlvbi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpAQCAtODgsOCArODksOCBAQCBU
RVNUKEluZGV4ZWREQiwgSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkpCiAKICAgICBydW5UZXN0
QW5kQ2hlY2tSZXN1bHQoQCJDb250aW51ZSIpOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCku
cHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseV07Ci0g
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3NlbmROZXR3b3JrUHJvY2Vzc0Rp
ZFJlc3VtZV07CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfc2Vu
ZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKKyAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwog
CiAgICAgcnVuVGVzdEFuZENoZWNrUmVzdWx0KEAiRXhwZWN0ZWQgQWJvcnQgRm9yIFN1c3BlbnNp
b24iKTsKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJFeHBlY3RlZCBTdWNjZXNzIEFmdGVy
IFJlc3VtZSIpOwpAQCAtMTU4LDggKzE1OSw4IEBAIFRFU1QoSW5kZXhlZERCLCBTdXNwZW5kSW1t
aW5lbnRseUZvclRoaXJkUGFydHlEYXRhYmFzZXMpCiAgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJp
bmc6bWFpbkZyYW1lU3RyaW5nIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8v
d2Via2l0Lm9yZyJdXTsKICAgICBydW5UZXN0QW5kQ2hlY2tSZXN1bHQoQCJkYXRhYmFzZSBpcyBj
cmVhdGVkIik7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5l
dHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5XTsKLSAgICBbY29uZmlndXJhdGlvbi5n
ZXQoKS5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbY29u
ZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NXaWxs
U3VzcGVuZEltbWluZW50bHldOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRh
U3RvcmUgX3NlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBydW5UZXN0QW5kQ2hl
Y2tSZXN1bHQoQCJ0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZWQiKTsKIH0KZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCVGVtcEZpbGVTaXpl
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1w
RmlsZVNpemUubW0KaW5kZXggNTM2NTQxZTNiMGU1Y2RhM2EzYjU1MWMxZTgxZTk2M2Y1OTJhZWIy
Zi4uZTdiOTkyMjhjZTg3NmU0NDdlNjQ3ODJlZjlkODdmMjVhZGM5YjlmYSAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJUZW1wRmlsZVNp
emUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJUZW1wRmlsZVNpemUubW0KQEAgLTk1LDcgKzk1LDcgQEAgVEVTVChJbmRleGVkREIsIEluZGV4
ZWREQlRlbXBGaWxlU2l6ZSkKIAogICAgIC8vIFRlcm1pbmF0ZSBuZXR3b3JrIHByb2Nlc3MgdG8g
a2VlcCBXQUwgb24gZGlzay4KICAgICB3ZWJWaWV3ID0gbmlsOwotICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3Nd
OwogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxl
RXhpc3RzQXRQYXRoOndhbEZpbGVQYXRoLmdldCgpLnBhdGhdKTsKICAgICBSZXRhaW5QdHI8TlNE
aWN0aW9uYXJ5PiBmaWxlQXR0cmlidXRlcyA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdl
cl0gYXR0cmlidXRlc09mSXRlbUF0UGF0aDp3YWxGaWxlUGF0aC5nZXQoKS5wYXRoIGVycm9yOm5p
bF07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xv
Y2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQppbmRleCA0MTMzZWU3YjNkYWU0M2Vj
MjA0OWNmZmMwNjNjMGU0MjljMTdjNWVmLi41Zjc5MTkwOTQzYzc3MWU5ZDllNDQyYTBkYTI2NmZm
OWEwM2JhMmYyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KQEAgLTMxLDYgKzMx
LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dLV2VicGFnZVByZWZlcmVuY2VzUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0
L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4K
ICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQg
PFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgpAQCAtMTA5LDcgKzExMCw3IEBAIFRFU1QoV0tX
ZWJWaWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzQ3Jhc2hlcykKICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKEAi
c2Vzc2lvbjpzdG9yYWdlIiwgW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHldKTsKIAotICAgIFtjb25m
aWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107Cisg
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOwogCiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwpAQCAtMTYyLDcg
KzE2Myw3IEBAIFRFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzU3VzcGVuZHMpCiAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAg
IEVYUEVDVF9XS19TVFJFUShAInZhbHVlIiwgW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHldKTsKIAot
ICAgIFtwcm9jZXNzUG9vbC5nZXQoKSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1p
bmVudGx5XTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5k
TmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHldOwogCiAgICAgcmVhZHlUb0NvbnRp
bnVlID0gZmFsc2U7CiAgICAgW3dlYlZpZXcxIGV2YWx1YXRlSmF2YVNjcmlwdDpAIndpbmRvdy5s
b2NhbFN0b3JhZ2Uuc2V0SXRlbSgna2V5JywgJ25ld1ZhbHVlJykiIGNvbXBsZXRpb25IYW5kbGVy
Ol4oaWQsIE5TRXJyb3IgKikgewpAQCAtMTc3LDcgKzE3OCw3IEBAIFRFU1QoV0tXZWJWaWV3LCBM
b2NhbFN0b3JhZ2VQcm9jZXNzU3VzcGVuZHMpCiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZyZWFkeVRvQ29udGludWUpOwogICAgIAotICAgIFtwcm9jZXNzUG9vbC5nZXQo
KSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlIF9zZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWVdOwogCiAgICAg
cmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KaW5kZXggZTYwZjg4MDI1
ZDA5Mzc4OWY2OTU2MGQ5YjkyYjI4MmYwNzEzMGE4ZC4uMGUyMWY5MDk1MDAxNGY2YzQ5MGIwZWI4
ZTQ2MWVjNGJhODUwYmI4MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCkBAIC0yOCw3ICsyOCw3IEBACiAjaW1w
b3J0ICJIVFRQU2VydmVyLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJV
dGlsaXRpZXMuaCIKLSNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgorI2lt
cG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9C
bG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rv
ci5oPgpAQCAtMzcsMTQgKzM3LDE0IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc0VudGl0
bGVtZW50cykKIHsKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0
aW9uOltbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXV0p
OwogICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBsZSJd
OwotICAgIFdLUHJvY2Vzc1Bvb2wgKnBvb2wgPSBbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9j
ZXNzUG9vbDsKLSAgICBib29sIGhhc0VudGl0bGVtZW50ID0gW3Bvb2wgX25ldHdvcmtQcm9jZXNz
SGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOkAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuV2Vi
S2l0TmV0d29ya2luZ1NhbmRib3giXTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmUgKnN0b3JlID0g
W3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZTsKKyAgICBib29sIGhhc0Vu
dGl0bGVtZW50ID0gW3N0b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGlu
ZzpAImNvbS5hcHBsZS5yb290bGVzcy5zdG9yYWdlLldlYktpdE5ldHdvcmtpbmdTYW5kYm94Il07
CiAjaWYgUExBVEZPUk0oTUFDKSAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogICAgIEVYUEVD
VF9UUlVFKGhhc0VudGl0bGVtZW50KTsKICNlbHNlCiAgICAgRVhQRUNUX0ZBTFNFKGhhc0VudGl0
bGVtZW50KTsKICNlbmRpZgotICAgIEVYUEVDVF9GQUxTRShbcG9vbCBfbmV0d29ya1Byb2Nlc3NI
YXNFbnRpdGxlbWVudEZvclRlc3Rpbmc6QCJ0ZXN0IGZhaWx1cmUgY2FzZSJdKTsKKyAgICBFWFBF
Q1RfRkFMU0UoW3N0b3JlIF9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzpA
InRlc3QgZmFpbHVyZSBjYXNlIl0pOwogfQogCiBURVNUKFdlYktpdCwgSFRUUFJlZmVyZXIpCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQ
cm9jZXNzQ3Jhc2hOb25QZXJzaXN0ZW50RGF0YVN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzc0NyYXNoTm9uUGVyc2lzdGVudERhdGFT
dG9yZS5tbQppbmRleCA2MDk4ZThkYWQyNTJlNTllYzQ5MTI1MGI0MjE2ZDNjZDA5MzZlOGY3Li4y
ZjhhMmUzM2ZlODcwM2JhYjJkOGUwNTEwODMyYmVjZDlkNDg5MzRiIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzQ3Jhc2hOb25Q
ZXJzaXN0ZW50RGF0YVN0b3JlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvTmV0d29ya1Byb2Nlc3NDcmFzaE5vblBlcnNpc3RlbnREYXRhU3RvcmUubW0KQEAg
LTcyLDcgKzcyLDcgQEAgc3RhdGljIHZvaWQgY2hlY2tSZWNvdmVyeUFmdGVyQ3Jhc2goV0tXZWJz
aXRlRGF0YVN0b3JlICpkYXRhU3RvcmUpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZk
b25lKTsKICAgICBkb25lID0gZmFsc2U7CiAKLSAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0u
cHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBbW3dlYlZpZXcgY29u
ZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwog
ICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6c2lt
cGxlMl1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiB9CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25O
YXZpZ2F0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9j
ZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQppbmRleCBlNDAzMDYyNmNiNDAxMGQ5OTdmNzg2ZjFjOGY3
M2VmODhkZjNiNTI5Li4wZWVjYTQ5OWJkNDQ3ZmQ1MjIzZDQ3MmFkYzczODZhMjM2OGYxOTFjIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NT
d2FwT25OYXZpZ2F0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KQEAgLTUzODUsNyArNTM4NSw3IEBAIFRF
U1QoUHJvY2Vzc1N3YXAsIFVzZVByZXdhcm1lZFByb2Nlc3NBZnRlclRlcm1pbmF0aW5nTmV0d29y
a1Byb2Nlc3MpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAot
ICAgIFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFt3ZWJWaWV3
Q29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CiAKICAgICBhdXRvIHdlYlZpZXcyID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOndl
YlZpZXdDb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgW3dlYlZpZXcyIHNldE5hdmlnYXRpb25E
ZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KaW5k
ZXggZDJlMjUzZWM2NGU3N2FkODg2MDNhMTVmZTBhYmYxZDA3YzAwYWNjNS4uY2Y5ZmMzNDBlMzkw
ZTI4ZTQxNGQwZDA0MWFiZDYyODkxMzY3Y2NhMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy5tbQpAQCAtNDI2LDcgKzQyNiw3IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTmV0
d29ya1Byb2Nlc3NSZXN0YXJ0KQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxv
b3AoMSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3Rv
cmUgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gd2ViVmlldzIgPSBhZG9w
dE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAw
LCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCkBAIC00NTksNyAr
NDU5LDcgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBOZXR3b3JrUHJvY2Vzc1Jlc3Rh
cnQpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKIAotICAgIFtj
b25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107
CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0
d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byB3ZWJWaWV3MyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJh
dGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKQEAgLTEyMzcsMTAgKzEyMzcsOCBAQCBURVNU
KFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE1pZ3JhdGVEYXRhRnJvbU1pc3NpbmdUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0U2FtZVNpdAogCiBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENhbkFj
Y2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2wpCiB7CisgICAgTlNVUkwgKml0cFJvb3RV
UkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmlu
Z0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkNhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJv
Y2Vzc1Bvb2xUZXN0Il0gaXNEaXJlY3Rvcnk6WUVTXTsKICAgICBhdXRvIGRlZmF1bHRGaWxlTWFu
YWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKLSAgICBfV0tXZWJzaXRlRGF0
YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0
ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07Ci0gICAgYXV0byAqZGF0
YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0
aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKLSAgICBOU1VSTCAqaXRw
Um9vdFVSTCA9IFtbZGF0YVN0b3JlIF9jb25maWd1cmF0aW9uXSBfcmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RpcmVjdG9yeV07CiAgICAgTlNVUkwgKmZpbGVVUkwgPSBbaXRwUm9vdFVSTCBVUkxCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6QCJvYnNlcnZhdGlvbnMuZGIiXTsKICAgICBbZGVmYXVsdEZp
bGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFBhdGg6aXRwUm9vdFVSTC5wYXRoIGVycm9yOm5pbF07CiAg
ICAgRVhQRUNUX0ZBTFNFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDppdHBS
b290VVJMLnBhdGhdKTsKQEAgLTEyNTEsNiArMTI0OSwxMCBAQCBURVNUKFJlc291cmNlTG9hZFN0
YXRpc3RpY3MsIENhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2wpCiAgICAgRVhQ
RUNUX1RSVUUoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOm5ld0ZpbGVVUkwu
cGF0aF0pOwogICAgIFtkZWZhdWx0RmlsZU1hbmFnZXIgY29weUl0ZW1BdFBhdGg6bmV3RmlsZVVS
TC5wYXRoIHRvUGF0aDpmaWxlVVJMLnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfVFJVRShb
ZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6ZmlsZVVSTC5wYXRoXSk7CisKKyAg
ICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlv
biA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07
CisgICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVj
dG9yeSA9IGl0cFJvb3RVUkw7CisgICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0
YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRp
b25dIGF1dG9yZWxlYXNlXTsKICAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZDpZRVNdOwogCiAgICAgc3RhdGljIGJvb2wgZG9uZUZsYWcgPSBmYWxzZTsKQEAg
LTEzMDAsMTIgKzEzMDIsMTIgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBTdG9yZVN1
c3BlbnNpb24pCiAgICAgW3dlYlZpZXcyIF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9u
XTsKIAogICAgIF9fYmxvY2sgYm9vbCBkb25lRmxhZyA9IGZhbHNlOwotICAgIFtzaGFyZWRQcm9j
ZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeeworICAgIFtkYXRh
U3RvcmUxIF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOl57CiAgICAgICAgIGRv
bmVGbGFnID0gdHJ1ZTsKICAgICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRv
bmVGbGFnKTsKIAotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlk
UmVzdW1lXTsKKyAgICBbZGF0YVN0b3JlMSBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsK
IH0KIAogQGludGVyZmFjZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2NoZW1lSGFuZGxlciA6IE5T
T2JqZWN0IDxXS1VSTFNjaGVtZUhhbmRsZXI+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCmluZGV4IDM0
YTRmNWM1MzhiOWIwZTlmY2IwNTA3MmIxNzAyODhlOWU0ZTlmOGYuLjU0OTNkM2Q5Mjc1OGYyNGE0
NmU4NGI0YjVhYmVjNDc4MDk1OWZiNWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCkBAIC01NTgs
NyArNTU4LDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgVXNlckFnZW50T3ZlcnJpZGUpCiAKICAg
ICBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2Nd
IGluaXRdKTsKIAotICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1NXVXNlckFnZW50TWVz
c2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRNZXNzYWdlOkAiTWVzc2FnZSBmcm9t
IHdvcmtlcjogQmFyIEN1c3RvbSBVc2VyQWdlbnQiXSk7CisgICAgbWVzc2FnZUhhbmRsZXIgPSBh
ZG9wdE5TKFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhFeHBlY3Rl
ZE1lc3NhZ2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBGb28gQ3VzdG9tIFVzZXJBZ2VudCJdKTsK
ICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNz
YWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAic3ciXTsKIAogICAgIHdlYlZp
ZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3Qo
MCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwpAQCAt
NjMzLDggKzYzMyw2IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIENhY2hlU3RvcmFnZVJlc3RvcmVG
cm9tRGlzaykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIGRvbmUg
PSBmYWxzZTsKIAotICAgIFtXS1dlYnNpdGVEYXRhU3RvcmUgX2RlbGV0ZURlZmF1bHREYXRhU3Rv
cmVGb3JUZXN0aW5nXTsKLQogICAgIFNlcnZpY2VXb3JrZXJUQ1BTZXJ2ZXIgc2VydmVyKHsKICAg
ICAgICAgeyAidGV4dC9odG1sIiwgbWFpbkNhY2hlU3RvcmFnZUJ5dGVzIH0KICAgICB9LCB7CkBA
IC05ODIsNiArOTgwLDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU2VydmljZVdvcmtlclByb2Nl
c3NDcmVhdGlvbikKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25m
aWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRd
KTsKICAgICBzZXRDb25maWd1cmF0aW9uSW5qZWN0ZWRCdW5kbGVQYXRoKGNvbmZpZ3VyYXRpb24u
Z2V0KCkpOworICAgIFJldGFpblB0cjxXS1Byb2Nlc3NQb29sPiBvcmlnaW5hbFByb2Nlc3NQb29s
ID0gY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbDsKIAogICAgIGRvbmUgPSBmYWxzZTsK
IApAQCAtMTAzNSw3ICsxMDM0LDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU2VydmljZVdvcmtl
clByb2Nlc3NDcmVhdGlvbikKICAgICBkb25lID0gZmFsc2U7CiAKICAgICAvLyBNYWtlIHN1cmUg
dGhhdCBsb2FkaW5nIHRoZSBzaW1wbGUgcGFnZSBkaWQgbm90IHN0YXJ0IHRoZSBzZXJ2aWNlIHdv
cmtlciBwcm9jZXNzLgotICAgIEVYUEVDVF9FUSgwdSwgd2ViVmlldy5nZXQoKS5jb25maWd1cmF0
aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsKKyAgICBFWFBFQ1Rf
RVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdv
cmtlclByb2Nlc3NDb3VudCk7CiAKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0
aW9uOm5ld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBFWFBFQ1RfRVEoMnUsIHdlYlZpZXcu
Z2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fd2ViUHJvY2Vzc0NvdW50SWdub3JpbmdQ
cmV3YXJtZWQpOwpAQCAtMTA0Myw5ICsxMDQyLDggQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU2Vy
dmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGxvYWRp
bmcgdGhpcyBwYWdlIGRpZCBzdGFydCB0aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vzcy4KICAgICBF
WFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fc2Vy
dmljZVdvcmtlclByb2Nlc3NDb3VudCk7Ci0KKyAgICBFWFBFQ1RfRVEoMXUsIG9yaWdpbmFsUHJv
Y2Vzc1Bvb2wuZ2V0KCkuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwogICAgIFtbY29uZmln
dXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSByZW1vdmVEYXRhT2ZUeXBlczpbV0tXZWJzaXRlRGF0
YVN0b3JlIGFsbFdlYnNpdGVEYXRhVHlwZXNdIG1vZGlmaWVkU2luY2U6W05TRGF0ZSBkaXN0YW50
UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XigpIHsKICAgICAgICAgZG9uZSA9IHRydWU7CiAgICAg
fV07CkBAIC0xNjE4LDIxICsxNjE2LDM1IEBAIHN0YXRpYyBzaXplX3QgbGF1bmNoU2VydmljZVdv
cmtlclByb2Nlc3MoYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCBiCiAgICAg
cmV0dXJuIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fd2ViUHJvY2Vz
c0NvdW50SWdub3JpbmdQcmV3YXJtZWQ7CiB9CiAKLVRFU1QoU2VydmljZVdvcmtlcnMsIE91dE9m
QW5kSW5Qcm9jZXNzU2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdvcmtlcnMsIE91dE9mUHJv
Y2Vzc1NlcnZpY2VXb3JrZXIpCiB7CiAgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOwogCiAg
ICAgRVhQRUNUX0VRKDF1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2VzcyghdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcywgIWZpcnN0TG9hZEFib3V0QmxhbmspKTsKK30KKworVEVTVChT
ZXJ2aWNlV29ya2VycywgSW5Qcm9jZXNzU2VydmljZVdvcmtlcikKK3sKKyAgICBib29sIHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOworICAgIGJvb2wgZmlyc3RMb2FkQWJv
dXRCbGFuayA9IHRydWU7CisKICAgICBFWFBFQ1RfRVEoMnUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQ
cm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsICFmaXJzdExvYWRBYm91dEJs
YW5rKSk7CiB9CiAKLVRFU1QoU2VydmljZVdvcmtlcnMsIExvYWRBYm91dEJsYW5rQmVmb3JlTmF2
aWdhdGluZ1Rocm91Z2hTZXJ2aWNlV29ya2VyKQorVEVTVChTZXJ2aWNlV29ya2VycywgTG9hZEFi
b3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaE91dE9mUHJvY2Vzc1NlcnZpY2VXb3JrZXIp
CiB7CiAgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKICAg
ICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOwogCiAgICAgRVhQRUNUX0VRKDF1LCBs
YXVuY2hTZXJ2aWNlV29ya2VyUHJvY2VzcyghdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cywgZmlyc3RMb2FkQWJvdXRCbGFuaykpOworfQorCitURVNUKFNlcnZpY2VXb3JrZXJzLCBMb2Fk
QWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoSW5Qcm9jZXNzU2VydmljZVdvcmtlcikK
K3sKKyAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOworICAg
IGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CisKICAgICBFWFBFQ1RfRVEoMnUsIGxh
dW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Ms
IGZpcnN0TG9hZEFib3V0QmxhbmspKTsKIH0KIApAQCAtMTg0Nyw4ICsxODU5LDggQEAgVEVTVChT
ZXJ2aWNlV29ya2VycywgUmVzdG9yZUZyb21EaXNrTm9uRGVmYXVsdFN0b3JlKQogICAgIFtbTlNG
aWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY3JlYXRlRGlyZWN0b3J5QXRVUkw6c3dEQlBhdGgg
d2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOllFUyBhdHRyaWJ1dGVzOm5pbCBlcnJvcjpuaWxd
OwogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4
aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAgICAvLyBXZSBwcm90ZWN0IHRoZSBwcm9j
ZXNzIHBvb2wgc28gdGhhdCBpdCBvdXRsaXZlcyB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KICAgICBS
ZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gcHJvdGVjdGVkUHJvY2Vzc1Bvb2w7CisgICAgUmV0YWlu
UHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4gcHJvdGVjdGVkV2Vic2l0ZURhdGFTdG9yZTsKIAogICAg
IFNlcnZpY2VXb3JrZXJUQ1BTZXJ2ZXIgc2VydmVyKHsKICAgICAgICAgeyAidGV4dC9odG1sIiwg
bWFpblJlZ2lzdGVyaW5nV29ya2VyQnl0ZXMgfSwKQEAgLTE4NzEsNiArMTg4Myw3IEBAIFRFU1Qo
U2VydmljZVdvcmtlcnMsIFJlc3RvcmVGcm9tRGlza05vbkRlZmF1bHRTdG9yZSkKIAogICAgICAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5n
ZXQoKV0pOwogICAgICAgICBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IHdlYlZpZXcuZ2V0KCkuY29u
ZmlndXJhdGlvbi5wcm9jZXNzUG9vbDsKKyAgICAgICAgcHJvdGVjdGVkV2Vic2l0ZURhdGFTdG9y
ZSA9IHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlOwogCiAgICAg
ICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnNlcnZlci5yZXF1ZXN0KCldOwogCkBAIC0xODgwLDEz
ICsxODkzLDE1IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFJlc3RvcmVGcm9tRGlza05vbkRlZmF1
bHRTdG9yZSkKICAgICAgICAgW3dlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9v
bCBfdGVybWluYXRlU2VydmljZVdvcmtlcnNdOwogICAgIH0KIAorICAgIC8vIE1ha2UgdXMgbW9y
ZSBsaWtlbHkgdG8gbG9zZSBhbnkgcmFjZXMgd2l0aCBzZXJ2aWNlIHdvcmtlciBpbml0aWFsaXph
dGlvbi4KKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxMCk7CisgICAgdXNs
ZWVwKDEwMDAwKTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxMCk7CisK
ICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKICAgICAgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRv
cHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKIAotICAgICAgICBh
dXRvIHdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uID0gYWRvcHROUyhbW19XS1dlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIHdlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uLmdldCgpLl9zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5ID0gc3dEQlBhdGg7Ci0gICAgICAgIGF1dG8gbm9uRGVmYXVsdERhdGFTdG9yZSA9IGFkb3B0
TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vi
c2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKLSAgICAgICAgY29uZmlndXJhdGlv
bi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlID0gbm9uRGVmYXVsdERhdGFTdG9yZS5nZXQoKTsKKyAg
ICAgICAgY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlID0gcHJvdGVjdGVkV2Vi
c2l0ZURhdGFTdG9yZS5nZXQoKTsKIAogICAgICAgICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRv
cHROUyhbW1NXTWVzc2FnZUhhbmRsZXJGb3JSZXN0b3JlRnJvbURpc2tUZXN0IGFsbG9jXSBpbml0
V2l0aEV4cGVjdGVkTWVzc2FnZTpAIlBBU1M6IFJlZ2lzdHJhdGlvbiBhbHJlYWR5IGhhcyBhbiBh
Y3RpdmUgd29ya2VyIl0pOwogICAgICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250
cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1l
OkAic3ciXTsKQEAgLTE5NDQsMTEgKzE5NTksMTEgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgU3Vz
cGVuZE5ldHdvcmtQcm9jZXNzKQogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRl
ZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnN3REJQYXRoLnBhdGhdKTsKIAotICAgIFsg
d2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sIF9zZW5kTmV0d29ya1Byb2Nl
c3NXaWxsU3VzcGVuZEltbWluZW50bHldOworICAgIFt3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRp
b24ud2Vic2l0ZURhdGFTdG9yZSBfc2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVu
dGx5XTsKIAogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0g
ZmlsZUV4aXN0c0F0UGF0aDpzd0RCUGF0aC5wYXRoXSk7CiAKLSAgICBbIHdlYlZpZXcuZ2V0KCku
Y29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbCBfc2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1lXTsK
KyAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3NlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZV07CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpzZXJ2
ZXIucmVxdWVzdCgpXTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29r
aWVTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQ
Q29va2llU3RvcmUubW0KaW5kZXggYTM1ZjA1MzUwYWFiNGI0MmYzNmM0NmFlY2RlZWVlNmNlNTQ0
ZWY4Ni4uMzM3NjA5MmExOTViNTEyZGE2N2M0OTZlNDUyMTdiOTE0ZmUyYTU3OSAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9y
ZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENv
b2tpZVN0b3JlLm1tCkBAIC00NzksOCArNDc5LDYgQEAgc3RhdGljIGJvb2wgZmluaXNoZWQ7CiB9
CiBAZW5kCiAKLS8vIEZJWE1FOiBvbiBpT1MsIFVJIHByb2Nlc3Mgc2hvdWxkIGJlIHVzaW5nIHRo
ZSBzYW1lIGNvb2tpZSBmaWxlIGFzIHRoZSBuZXR3b3JrIHByb2Nlc3MgZm9yIGRlZmF1bHQgc2Vz
c2lvbi4KLSNpZiBQTEFURk9STShNQUMpCiBlbnVtIGNsYXNzIFNob3VsZEVuYWJsZVByb2Nlc3NQ
cmV3YXJtaW5nIHsgTm8sIFllcyB9Owogdm9pZCBydW5XS0hUVFBDb29raWVTdG9yZVdpdGhvdXRQ
cm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRFbmFibGVQcm9j
ZXNzUHJld2FybWluZykKIHsKQEAgLTU4OSwyMCArNTg3LDY2IEBAIFRFU1QoV0tIVFRQQ29va2ll
U3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbFdpdGhQcmV3YXJtaW5nKQogICAgIHJ1bldLSFRUUENv
b2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5n
OjpZZXMpOwogfQogCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCiBAaW50ZXJmYWNlIENoZWNr
U2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVnYXRlPgorLSAoTlNT
dHJpbmcgKilhbGVydENvb2tpZUhUTUw7CistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNzYWdlOwog
QGVuZAogCi1AaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZQorQGlt
cGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgeworICAgIFJldGFpblB0
cjxOU1N0cmluZz4gX21lc3NhZ2U7Cit9CisKIC0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICop
d2ViVmlldyBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1l
c3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBjb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBFWFBFQ1RfU1RS
RVEoIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIiwgbWVzc2FnZS5VVEY4U3RyaW5nKTsK
KyAgICBfbWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgZmluaXNoZWQgPSB0cnVlOwogICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CiB9CisKKy0gKE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2UKK3sKKyAg
ICB3aGlsZSAoIV9tZXNzYWdlKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVu
TG9vcCgpOworICAgIHJldHVybiBfbWVzc2FnZS5hdXRvcmVsZWFzZSgpOworfQorCistIChOU1N0
cmluZyAqKWFsZXJ0Q29va2llSFRNTAoreworICAgIHJldHVybiBAIjxzY3JpcHQ+dmFyIGNvb2tp
ZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29r
aWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50cmltKCk7IH0gY29v
a2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsKK30KKwog
QGVuZAogCitURVNUKFdlYktpdCwgV0tIVFRQQ29va2llU3RvcmVNdWx0aXBsZVZpZXdzKQorewor
ICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcxID0gW1tUZXN0V0tXZWJWaWV3IG5ld10gYXV0b3Jl
bGVhc2VdOworICAgIFt3ZWJWaWV3MSBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCJzdGFy
dCBuZXR3b3JrIHByb2Nlc3MiXTsKKworICAgIE5TSFRUUENvb2tpZSAqc2Vzc2lvbkNvb2tpZSA9
IFtOU0hUVFBDb29raWUgY29va2llV2l0aFByb3BlcnRpZXM6QHsKKyAgICAgICAgTlNIVFRQQ29v
a2llUGF0aDogQCIvIiwKKyAgICAgICAgTlNIVFRQQ29va2llTmFtZTogQCJTZXNzaW9uQ29va2ll
TmFtZSIsCisgICAgICAgIE5TSFRUUENvb2tpZVZhbHVlOiBAIkNvb2tpZVZhbHVlIiwKKyAgICAg
ICAgTlNIVFRQQ29va2llRG9tYWluOiBAIjEyNy4wLjAuMSIsCisgICAgfV07CisKKyAgICBfX2Js
b2NrIGJvb2wgc2V0Q29va2llRG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3MS5jb25maWd1cmF0
aW9uLndlYnNpdGVEYXRhU3RvcmUuaHR0cENvb2tpZVN0b3JlIHNldENvb2tpZTpzZXNzaW9uQ29v
a2llIGNvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIHNldENvb2tpZURvbmUgPSB0cnVlOwor
ICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmc2V0Q29va2llRG9uZSk7CisK
KyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0
ZSBuZXddKTsKKyAgICBbd2ViVmlldzEgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisK
KyAgICBbd2ViVmlldzEgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0g
YmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAg
RVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2ll
TmFtZT1Db29raWVWYWx1ZSIpOworCisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzIgPSBbW1Rl
c3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcyIHNldFVJRGVsZWdh
dGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3MiBsb2FkSFRNTFN0cmluZzpbZGVsZWdh
dGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDov
LzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNz
YWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7Cit9CisKIFRFU1QoV0tIVFRQ
Q29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Npb24pCiB7CiAgICAg
UmV0YWluUHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4gZXBoZW1lcmFsU3RvcmVXaXRoQ29va2llcyA9
IFtXS1dlYnNpdGVEYXRhU3RvcmUgbm9uUGVyc2lzdGVudERhdGFTdG9yZV07CkBAIC02MjcsOSAr
NjcxLDggQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQb29sRXBoZW1l
cmFsU2Vzc2lvbikKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKICAg
ICBmaW5pc2hlZCA9IGZhbHNlOwogICAgIAotICAgIE5TU3RyaW5nICphbGVydENvb2tpZUhUTUwg
PSBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9y
IChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29v
a2llc1tpXS50cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAn
KSk7PC9zY3JpcHQ+IjsKLSAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzphbGVydENvb2tpZUhU
TUwgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07Ci0g
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7CisgICAgW3dlYlZpZXcgbG9h
ZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtk
ZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIp
OwogfQogCiBzdGF0aWMgYm9vbCBhcmVDb29raWVzRXF1YWwoTlNIVFRQQ29va2llICpmaXJzdCwg
TlNIVFRQQ29va2llICpzZWNvbmQpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tCmlu
ZGV4IGFjN2RlNDE1MTJjNDUxMzhlYzVlNGMwOWU1MTE1ZDE2Y2QyM2IyMmUuLmFjMTY1MzVkZmQ5
Mzk5OWQyZWM1MGRjZmQ3MWMzYTU2ZDExM2VjN2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVy
LWxlYWtzLm1tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVUkxTY2hlbWVU
YXNrUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQu
aD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KQEAg
LTE1Miw3ICsxNTMsNyBAQCBURVNUKFVSTFNjaGVtZUhhbmRsZXIsIExlYWtzMykKIAogICAgIHJ1
blVudGlsVGFza3NJbkZsaWdodCgyKTsKIAotICAgIFt3ZWJWaWV3MS5nZXQoKS5jb25maWd1cmF0
aW9uLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgW3dlYlZpZXcx
LmdldCgpLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfdGVybWluYXRlTmV0d29ya1By
b2Nlc3NdOwogCiAgICAgcnVuVW50aWxUYXNrc0luRmxpZ2h0KDApOwogfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3Vz
dG9tUGF0aHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNp
dGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQppbmRleCA5MmNmM2E2MTk4YTViOWQxNDU0NDkwNWRi
OWU5NDhmMTFjNzI1NmRlLi4zYjEzMWY3Y2I4NjBhZTgwMWI5MjM1NTUzZDUwZmI3YTE2YzI3NGQx
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNp
dGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQpAQCAtMjQ0LDcgKzI0
NCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocyhTaG91bGRF
bmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRFCiAgICAgLy8gTm93LCB3aXRoIGJyYW5kIG5l
dyBXS1dlYnNpdGVEYXRhU3RvcmVzIHBvaW50aW5nIGF0IHRoZSBzYW1lIGN1c3RvbSBjb29raWUg
c3RvcmFnZSBsb2NhdGlvbiwKICAgICAvLyBpbiBuZXdseSBmaXJlZCB1cCBOZXR3b3JrUHJvY2Vz
c2VzLCB2ZXJpZnkgdGhhdCB0aGUgZmV0Y2ggYW5kIGRlbGV0ZSBBUElzIHdvcmsgYXMgZXhwZWN0
ZWQuCiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAgICBb
ZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgYXV0byBuZXdDdXN0b21E
YXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhD
b25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpXSk7CiAKICAg
ICBbbmV3Q3VzdG9tRGF0YVN0b3JlIGZldGNoRGF0YVJlY29yZHNPZlR5cGVzOltOU1NldCBzZXRX
aXRoT2JqZWN0czpXS1dlYnNpdGVEYXRhVHlwZUNvb2tpZXMsIG5pbF0gY29tcGxldGlvbkhhbmRs
ZXI6XihOU0FycmF5PFdLV2Vic2l0ZURhdGFSZWNvcmQgKj4gKiByZWNvcmRzKSB7CkBAIC0yNTUs
NyArMjU1LDcgQEAgc3RhdGljIHZvaWQgcnVuV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzKFNo
b3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEUKICAgICByZWNlaXZlZFNjcmlwdE1l
c3NhZ2UgPSBmYWxzZTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2Ny
aXB0TWVzc2FnZSk7CiAKLSAgICBbcHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKKyAgICBbZGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgbmV3Q3Vz
dG9tRGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRX
aXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKV0pOwog
CiAgICAgW25ld0N1c3RvbURhdGFTdG9yZSByZW1vdmVEYXRhT2ZUeXBlczpbTlNTZXQgc2V0V2l0
aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5cGVDb29raWVzLCBuaWxdIG1vZGlmaWVkU2luY2U6W05T
RGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XiB7CkBAIC0zODUsMTEgKzM4NSwx
MCBAQCBURVNUKFdlYktpdCwgQ3VzdG9tRGF0YVN0b3JlRGVzdHJveVdoaWxlRmV0Y2hpbmdOZXR3
b3JrUHJvY2Vzc0RhdGEpCiAKICAgICAgICAgLy8gVGVybWluYXRlIHRoZSBuZXR3b3JrIHByb2Nl
c3Mgd2hpbGUgYSBxdWVyeSBpcyBwZW5kaW5nLgogICAgICAgICBhdXRvKiBhbGxQcm9jZXNzUG9v
bHMgPSBbV0tQcm9jZXNzUG9vbCBfYWxsUHJvY2Vzc1Bvb2xzRm9yVGVzdGluZ107Ci0gICAgICAg
IEFTU0VSVF9FUSgxVSwgW2FsbFByb2Nlc3NQb29scyBjb3VudF0pOwotICAgICAgICBhdXRvKiBw
cm9jZXNzUG9vbCA9IGFsbFByb2Nlc3NQb29sc1swXTsKLSAgICAgICAgd2hpbGUgKCFbcHJvY2Vz
c1Bvb2wgX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pCisgICAgICAgIEFTU0VSVF9FUSgwVSwg
W2FsbFByb2Nlc3NQb29scyBjb3VudF0pOworICAgICAgICB3aGlsZSAoIVtkYXRhU3RvcmUgX25l
dHdvcmtQcm9jZXNzSWRlbnRpZmllcl0pCiAgICAgICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpzbGVlcCgwLjAxKTsKLSAgICAgICAga2lsbChbcHJvY2Vzc1Bvb2wgX25ldHdvcmtQcm9jZXNz
SWRlbnRpZmllcl0sIFNJR0tJTEwpOworICAgICAgICBraWxsKFtkYXRhU3RvcmUgX25ldHdvcmtQ
cm9jZXNzSWRlbnRpZmllcl0sIFNJR0tJTEwpOwogICAgICAgICBhbGxQcm9jZXNzUG9vbHMgPSBu
aWw7CiAgICAgICAgIGRhdGFTdG9yZSA9IG5pbDsKICAgICB9CkBAIC00NjUsNyArNDY0LDkgQEAg
VEVTVChXZWJLaXQsIEFsdGVybmF0aXZlU2VydmljZXNEZWZhdWx0RGlyZWN0b3J5Q3JlYXRpb24p
CiAgICAgCiAgICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc2V0T2Jq
ZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdIGZvcktleTprZXldOwogCi0gICAgVGVz
dFdLV2ViVmlldyAqd2ViVmlldzIgPSBbW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0XSBhdXRv
cmVsZWFzZV07CisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtb
V0tXZWJWaWV3Q29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBjb25maWd1cmF0
aW9uLndlYnNpdGVEYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0
V2l0aENvbmZpZ3VyYXRpb246W1tbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gYWxs
b2NdIGluaXRdIGF1dG9yZWxlYXNlXV0gYXV0b3JlbGVhc2VdOworICAgIFRlc3RXS1dlYlZpZXcg
KndlYlZpZXcyID0gW1tbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dIGF1dG9yZWxl
YXNlXTsKICAgICBbd2ViVmlldzIgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAic3RhcnQg
YXV4aWxpYXJ5IHByb2Nlc3NlcyIgYmFzZVVSTDpuaWxdOwogCiAgICAgRVhQRUNUX1RSVUUoW1tO
U0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOmRlZmF1bHREaXJl
Y3RvcnkucGF0aF0pOwpAQCAtNTM5LDcgKzU0MCw3IEBAIFRFU1QoV2ViS2l0LCBEb0xvYWRXaXRo
Tm9uRGVmYXVsdERhdGFTdG9yZUFmdGVyVGVybWluYXRpbmdOZXR3b3JrUHJvY2VzcykKIAogICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogCi0gICAgW3dlYlZpZXdDb25m
aWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107Cisg
ICAgW3dlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Rlcm1pbmF0
ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIHJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RX
aXRoVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3
aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJj
ZXMiXV07CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07CkBAIC04NTcsNyArODU4
LDcgQEAgVEVTVChXZWJLaXQsIE1lZGlhQ2FjaGUpCiAgICAgRVhQRUNUX0ZBTFNFKGVycm9yKTsK
IAogICAgIGRvbmUgPSB0cnVlOwotICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNz
UG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworICAgIFtbd2ViVmlldyBjb25maWd1cmF0
aW9uXS53ZWJzaXRlRGF0YVN0b3JlIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAKICAgICBb
ZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0UGF0aDpwYXRoIGVycm9yOiZlcnJvcl07CiAgICAgRVhQ
RUNUX0ZBTFNFKGVycm9yKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0T2JqQy9DdXN0b21Qcm90b2NvbHNUZXN0Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW0KaW5kZXggMjJlMWEwYTllOGUy
NjgwNDVlNmIxN2MzMDZiMDAxNGQ1YmM5MTI2OC4uN2I4NDc4YjU5NzlmYTc0YjljZDU5ZDA2MmVh
ZGQwZDNjNTE1MWZkNyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRPYmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRPYmpDL0N1c3RvbVByb3RvY29sc1Rlc3QubW0KQEAgLTM0LDYgKzM0LDggQEAK
ICNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgogI2ltcG9ydCA8V2ViS2l0L1dLQ29udGV4dFByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NHcm91cFByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1ZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0
b3JlUmVmLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIHN0YXRpYyBib29sIHRlc3RG
aW5pc2hlZDsKQEAgLTcyLDYgKzc0LDggQEAgc3RhdGljIFdLUHJvY2Vzc0dyb3VwICpwcm9jZXNz
R3JvdXAoKQogICAgIHJldHVybiBwcm9jZXNzR3JvdXA7CiB9CiAKK3N0YXRpYyBSZXRhaW5QdHI8
V0tWaWV3PiB3a1ZpZXc7CisKIEBpbnRlcmZhY2UgQ2xvc2VXaGlsZVN0YXJ0aW5nUHJvdG9jb2wg
OiBUZXN0UHJvdG9jb2wKIEBlbmQKIApAQCAtODksNyArOTMsNyBAQCBzdGF0aWMgV0tQcm9jZXNz
R3JvdXAgKnByb2Nlc3NHcm91cCgpCiAgICAgICAgIH07CiAgICAgICAgIFdLQ29udGV4dFNldENs
aWVudChbcHJvY2Vzc0dyb3VwKCkgX2NvbnRleHRSZWZdLCAmY2xpZW50LmJhc2UpOwogCi0gICAg
ICAgIGtpbGwoV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKFtwcm9jZXNzR3Jv
dXAoKSBfY29udGV4dFJlZl0pLCBTSUdLSUxMKTsKKyAgICAgICAga2lsbChXS1dlYnNpdGVEYXRh
U3RvcmVHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tQYWdlR2V0V2Vic2l0ZURhdGFTdG9y
ZShbd2tWaWV3IHBhZ2VSZWZdKSksIFNJR0tJTEwpOwogICAgICAgICBbc2VsZi5jbGllbnQgVVJM
UHJvdG9jb2w6c2VsZiBkaWRGYWlsV2l0aEVycm9yOltOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpO
U0NvY29hRXJyb3JEb21haW4gY29kZTowIHVzZXJJbmZvOm5pbF1dOwogICAgIH0pOwogfQpAQCAt
MTQyLDcgKzE0Niw3IEBAIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIHN0YXRpYyB2b2lkIHJ1
blRlc3QoKQogewogICAgIFJldGFpblB0cjxXS0Jyb3dzaW5nQ29udGV4dEdyb3VwPiBicm93c2lu
Z0NvbnRleHRHcm91cCA9IGFkb3B0TlMoW1tXS0Jyb3dzaW5nQ29udGV4dEdyb3VwIGFsbG9jXSBp
bml0V2l0aElkZW50aWZpZXI6QCJUZXN0SWRlbnRpZmllciJdKTsKLSAgICBSZXRhaW5QdHI8V0tW
aWV3PiB3a1ZpZXcgPSBhZG9wdE5TKFtbV0tWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFr
ZVJlY3QoMCwgMCwgODAwLCA2MDApIHByb2Nlc3NHcm91cDpwcm9jZXNzR3JvdXAoKSBicm93c2lu
Z0NvbnRleHRHcm91cDpicm93c2luZ0NvbnRleHRHcm91cC5nZXQoKV0pOworICAgIHdrVmlldyA9
IGFkb3B0TlMoW1tXS1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4
MDAsIDYwMCkgcHJvY2Vzc0dyb3VwOnByb2Nlc3NHcm91cCgpIGJyb3dzaW5nQ29udGV4dEdyb3Vw
OmJyb3dzaW5nQ29udGV4dEdyb3VwLmdldCgpXSk7CiAgICAgUmV0YWluUHRyPEN1c3RvbVByb3Rv
Y29sc0xvYWREZWxlZ2F0ZT4gbG9hZERlbGVnYXRlID0gYWRvcHROUyhbW0N1c3RvbVByb3RvY29s
c0xvYWREZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwogICAgIFt3a1ZpZXcgYnJvd3NpbmdDb250ZXh0
Q29udHJvbGxlcl0ubG9hZERlbGVnYXRlID0gbG9hZERlbGVnYXRlLmdldCgpOwogICAgIFtbd2tW
aWV3IGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJdIGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3Qg
cmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCIlQDovL3JlZGlyZWN0P3Rlc3QiLCBbVGVzdFByb3RvY29sIHNjaGVtZV1dXV1dOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCBlMTZmMmE0NDZm
MTdkMDljOWVkZDEzMDA2NzA2YzNhYTkzMWIwY2MwLi5mN2ViZTBiZTc5MGEzNmI2MTZiMWNiNWI4
YzgwMDRhYmI4NGZmYzgwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcApAQCAtMTA2Miw4ICsxMDYyLDYgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0
ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKIAogICAg
IHJlc2V0UXVvdGEoKTsKIAotICAgIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRl
Rm9yU2VydmljZVdvcmtlclRlc3RpbmcocGxhdGZvcm1Db250ZXh0KCksIHRydWUpOwotCiAgICAg
V0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSk7CiAKICAgICBXS0NvbnRleHRTZXRVc2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0
KCksIGZhbHNlKTsKQEAgLTEyMzgsNyArMTIzNiw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmZp
bmRBbmREdW1wV2ViS2l0UHJvY2Vzc0lkZW50aWZpZXJzKCkKICAgICBkdW1wUmVzcG9uc2UobWFr
ZVN0cmluZyhUZXN0Q29udHJvbGxlcjo6d2ViUHJvY2Vzc05hbWUoKSwgIjogIiwKICAgICAgICAg
V0tQYWdlR2V0UHJvY2Vzc0lkZW50aWZpZXIoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1h
aW5XZWJWaWV3KCktPnBhZ2UoKSksICdcbicsCiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpuZXR3
b3JrUHJvY2Vzc05hbWUoKSwgIjogIiwKLSAgICAgICAgV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nl
c3NJZGVudGlmaWVyKG1fY29udGV4dC5nZXQoKSksICdcbicpKTsKKyAgICAgICAgV0tXZWJzaXRl
RGF0YVN0b3JlR2V0TmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyKHdlYnNpdGVEYXRhU3RvcmUoKSks
ICdcbicpKTsKICNlbHNlCiAgICAgZHVtcFJlc3BvbnNlKCJcbiJfcyk7CiAjZW5kaWYKQEAgLTIy
OTgsNyArMjI5Niw3IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdENvbnRyb2xsZXI6Omdl
dEluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0YSgpCiAKIHZvaWQgVGVzdENvbnRy
b2xsZXI6Om5ldHdvcmtQcm9jZXNzRGlkQ3Jhc2goKQogewotICAgIHBpZF90IHBpZCA9IFdLQ29u
dGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihtX2NvbnRleHQuZ2V0KCkpOworICAgIHBp
ZF90IHBpZCA9IFdLV2Vic2l0ZURhdGFTdG9yZUdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcih3
ZWJzaXRlRGF0YVN0b3JlKCkpOwogICAgIGZwcmludGYoc3RkZXJyLCAiI0NSQVNIRUQgLSAlcyAo
cGlkICVsZClcbiIsIG5ldHdvcmtQcm9jZXNzTmFtZSgpLCBzdGF0aWNfY2FzdDxsb25nPihwaWQp
KTsKICAgICBleGl0KDEpOwogfQpAQCAtMzEzNyw3ICszMTM1LDcgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6c2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoYm9vbCBpZ25vcmVzVmlld3BvcnRT
Y2FsZUxpbWkKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3Mo
KQogewotICAgIFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKHBsYXRmb3JtQ29udGV4
dCgpKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVUZXJtaW5hdGVOZXR3b3JrUHJvY2Vzcyh3ZWJz
aXRlRGF0YVN0b3JlKCkpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjp0ZXJtaW5hdGVTZXJ2
aWNlV29ya2VycygpCkBAIC0zMTUyLDEwICszMTUwLDEwIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtV2lsbFJ1blRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mKQogCiB2b2lkIFRlc3RD
b250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUoV0tQYWdlQ29uZmlndXJhdGlv
blJlZiBjb25maWd1cmF0aW9uLCBjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBp
ZiAob3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKQotICAgICAgICBtX3dlYnNpdGVEYXRhU3Rv
cmUgPSBXS1BhZ2VDb25maWd1cmF0aW9uR2V0V2Vic2l0ZURhdGFTdG9yZShjb25maWd1cmF0aW9u
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IGRlZmF1bHRXZWJzaXRl
RGF0YVN0b3JlKCk7CisgICAgaWYgKCFvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24pCisgICAg
ICAgIFdLUGFnZUNvbmZpZ3VyYXRpb25TZXRXZWJzaXRlRGF0YVN0b3JlKGNvbmZpZ3VyYXRpb24s
IGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCkpOworCisgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0g
V0tQYWdlQ29uZmlndXJhdGlvbkdldFdlYnNpdGVEYXRhU3RvcmUoY29uZmlndXJhdGlvbik7CiB9
CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ3JlYXRlV2ViVmlldyhXS1BhZ2VDb25m
aWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24sIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQpA
QCAtMzE2OCw5ICszMTY2LDggQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1DcmVhdGVPdGhlclBhZ2UoUGxhdGZvcm1XZWJWaWV3KiBwYXJlbnQKICAgICByZXR1cm4g
bmV3IFBsYXRmb3JtV2ViVmlldyhjb25maWd1cmF0aW9uLCBvcHRpb25zKTsKIH0KIAotV0tDb250
ZXh0UmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVm
IGNvbnRleHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29udGV4dENvbmZpZ3VyYXRpb24p
CitXS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0Nv
bnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZikKIHsKLSAgICBXS0Nv
bnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShjb250ZXh0LCBkZWZhdWx0V2Vic2l0ZURh
dGFTdG9yZSgpKTsKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>